diff --git a/.chezmoi.toml.tmpl b/.chezmoi.toml.tmpl
new file mode 100644
index 0000000..5641b69
--- /dev/null
+++ b/.chezmoi.toml.tmpl
@@ -0,0 +1,24 @@
+{{- $envChoices := list "home" "work" }}
+{{- $env := promptChoiceOnce . "env" "Environment" $envChoices -}}
+
+{{- $gitName := promptStringOnce . "git.name" "Git name" -}}
+{{- $gitEmail := promptStringOnce . "git.email" "Git email address" -}}
+{{- $gitSigningKey := promptStringOnce . "git.signingKey" "Git signing key" -}}
+
+{{- $ansibleVaultPasswordFile := promptStringOnce . "ansibleVault.passwordFile" "Ansible Vault password file path (leave empty if not available)" -}}
+
+{{- $switchKeyboardMac := promptStringOnce . "keyboardMac" "MAC address of the keyboard (for switch-keyboard, only used in Linux)" -}}
+
+[data]
+  env = {{ $env | quote }}
+
+[data.git]
+  name = {{ $gitName | quote }}
+  email = {{ $gitEmail | quote }}
+  signingKey = {{ $gitSigningKey | quote }}
+
+[data.ansibleVault]
+  passwordFile = {{ $ansibleVaultPasswordFile | quote }}
+
+[data.switchKeyboard]
+  mac = {{ $switchKeyboardMac | quote }}
diff --git a/.chezmoiignore b/.chezmoiignore
new file mode 100644
index 0000000..5081718
--- /dev/null
+++ b/.chezmoiignore
@@ -0,0 +1,23 @@
+LICENSE
+LICENSE.public
+README.md
+README.public.md
+.copybara
+.gitreview
+
+{{ if ne .chezmoi.os "darwin" }}
+.gitignore_global
+Library
+{{ end }}
+
+{{ if ne .chezmoi.os "linux" }}
+.config/darkman
+.config/foot
+.config/i3blocks
+.config/jj
+.config/rofi
+.config/sway
+.config/xdg-desktop-portal
+.local/share
+bin/switch-keyboard
+{{ end }}
diff --git a/.chezmoitemplates/jj.toml b/.chezmoitemplates/jj.toml
new file mode 100644
index 0000000..4f139ee
--- /dev/null
+++ b/.chezmoitemplates/jj.toml
@@ -0,0 +1,77 @@
+[user]
+name = {{ .git.name | quote }}
+email = {{ .git.email | quote }}
+
+{{- if eq .env "work"}}
+[git]
+push-bookmark-prefix="feature/adria-vilanova-push-"
+{{- end}}
+
+[ui]
+default-command = "log"
+diff-editor = ":builtin"
+#diff-editor = "vimdirdiff"
+#diff-editor = "meld-3"
+
+[aliases]
+signoff = ["--config-toml=ui.editor='{{ .chezmoi.config.destDir }}/.jj-signoff.bash'", "commit"]
+so = ["--config-toml=ui.editor='{{ .chezmoi.config.destDir }}/.jj-signoff.bash'", "describe"]
+l = ["log"]
+ll = ["log", "--template", "full"]
+lll = ["log", "--template", "fuller"]
+opt = ["op", "log", "--template", "op_log_with_full_time"]
+
+[template-aliases]
+# From https://sourcegraph.com/github.com/martinvonz/jj@0a39cfdbe25977132bcbb669d81124542821cfdc/-/blob/cli/src/config/templates.toml
+full = '''
+if(root,
+  format_root_commit(self),
+  label(if(current_working_copy, "working_copy"),
+    concat(
+      separate(" ",
+        format_short_change_id_with_hidden_and_divergent_info(self),
+        format_short_signature(author),
+        format_timestamp(committer.timestamp()),
+        bookmarks,
+        tags,
+        working_copies,
+        git_head,
+        format_short_commit_id(commit_id),
+        if(conflict, label("conflict", "conflict")),
+      ) ++ "\n\n",
+      indent("    ",
+        separate(" ",
+          if(empty, label("empty", "(empty)")),
+          if(description, description, description_placeholder ++ "\n"),
+        )
+      )++ "\n",
+    ),
+  )
+)
+'''
+
+fuller = "builtin_log_detailed"
+
+op_log_with_full_time = '''
+label(if(current_operation, "current_operation"),
+  coalesce(
+    if(root, format_root_operation(self)),
+    format_operation_with_full_time(self),
+  )
+)
+'''
+
+'format_operation_with_full_time(op)' = '''
+  concat(
+    separate(" ", op.id().short(), op.user(), format_full_time_range(op.time())), "\n",
+    op.description().first_line(), "\n",
+    if(op.tags(), op.tags() ++ "\n"),
+  )
+'''
+
+'format_full_time_range(time_range)' = '''
+  format_timestamp(time_range.start()) ++ label("time", ", lasted ") ++ time_range.duration()'''
+
+[revset-aliases]
+"non-pushed" = "remote_bookmarks().. & mine()"
+"non-uploaded" = "non-pushed"
diff --git a/.copybara/.gitignore b/.copybara/.gitignore
new file mode 100644
index 0000000..126a12c
--- /dev/null
+++ b/.copybara/.gitignore
@@ -0,0 +1 @@
+test_repos_config.bara.sky
diff --git a/.copybara/README.md b/.copybara/README.md
new file mode 100644
index 0000000..4c57d54
--- /dev/null
+++ b/.copybara/README.md
@@ -0,0 +1,14 @@
+[Copybara][copybara] configuration used to sync the private repo with the
+public one, excluding personal files I do not want to share with the world :)
+
+## How to test the Copybara script
+
+1. Clone the private and public repos in your computer.
+2. Create a `test_repos_config.sky` file with the following contents:
+  ```sky
+test_origin_url = "file:///path/to/private/dotfiles"
+test_destination_url = "file:///path/to/dotfiles-external"
+```
+3. Run `sh export-commits-test.sh`.
+
+[copybara]: https://github.com/google/copybara
diff --git a/.copybara/copy.bara.sky b/.copybara/copy.bara.sky
new file mode 100644
index 0000000..e6c9499
--- /dev/null
+++ b/.copybara/copy.bara.sky
@@ -0,0 +1,101 @@
+load("test_repos_config", "test_origin_url", "test_destination_url")
+
+def export_workflow(name, description, mode, authoring_value, is_test):
+  if not is_test:
+    origin_url = "https://gerrit.avm99963.com/a/private/dotfiles"
+    destination_url = "https://gerrit.avm99963.com/a/dotfiles-external"
+  else:
+    origin_url = test_origin_url
+    destination_url = test_destination_url
+
+  core.workflow(
+    name = name,
+    description = description,
+    origin = git.origin(
+      url = origin_url,
+      ref = "HEAD",
+      submodules = "NO",
+    ),
+    destination = git.destination(
+      url = destination_url,
+      push = "main",
+    ),
+    mode = mode,
+
+    origin_files = glob(
+        ["**"],
+        exclude = [
+          # Internal README
+          "README.md",
+
+          # Internal (dummy) license
+          "LICENSE",
+
+          # SSH configuration (it only includes the configuration for some
+          # hosts I connect to, which I don't want to be public).
+          "private_dot_ssh/**",
+
+          # .gitreview file only used for the private/dotfiles repo for the
+          # `git review` tool (https://docs.opendev.org/opendev/git-review/).
+          ".gitreview",
+        ],
+    ),
+
+    authoring = authoring_value,
+
+    transformations = [
+      core.rename('README.public.md', 'README.md'),
+      core.rename('LICENSE.public', 'LICENSE'),
+      core.replace(
+        before="private/dotfiles",
+        after="dotfiles-external",
+        paths = glob(
+          ["**"],
+          exclude = [".copybara/**"],
+        ),
+      ),
+      core.replace(
+        before = "${internalCode}",
+        after = "",
+        multiline = True,
+        regex_groups = {
+        },
+      ),
+      metadata.remove_label('Change-Id'),
+    ],
+  )
+
+export_workflow(
+  name = "firstExport",
+  description = "Moves code from the private repo (the SoT) to the public one. NOTE: This must only be used for the first migration.",
+  mode = "SQUASH",
+  authoring_value = authoring.overwrite("Copybara bot <copybara-bot@avm99963.com>"),
+  is_test = False,
+)
+
+export_workflow(
+  name = "exportCommits",
+  description = "Moves code from the private repo (the SoT) to the public one.",
+  mode = "ITERATIVE",
+  authoring_value = authoring.pass_thru("Copybara bot <copybara-bot@avm99963.com>"),
+  is_test = False,
+)
+
+# Local tests workflows
+export_workflow(
+  name = "firstExportTest",
+  description = "Test locally the first migration from the private repo to the public one. See README.md for more details.",
+  mode = "SQUASH",
+  authoring_value = authoring.overwrite("Copybara bot <copybara-bot@avm99963.com>"),
+  is_test = True,
+)
+
+export_workflow(
+  name = "exportCommitsTest",
+  description = "Test locally the migration from the private repo to the public one. See README.md for more details.",
+  mode = "ITERATIVE",
+  authoring_value = authoring.pass_thru("Copybara bot <copybara-bot@avm99963.com>"),
+  is_test = True,
+)
+
+# vim: set ft=bzl:
diff --git a/.copybara/export-commits-test.sh b/.copybara/export-commits-test.sh
new file mode 100755
index 0000000..57bba0a
--- /dev/null
+++ b/.copybara/export-commits-test.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+copybara copy.bara.sky exportCommitsTest --git-committer-email "copybara-bot@avm99963.com" --git-committer-name "Copybara bot"
diff --git a/.copybara/export-commits.sh b/.copybara/export-commits.sh
new file mode 100755
index 0000000..d710bf9
--- /dev/null
+++ b/.copybara/export-commits.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+copybara copy.bara.sky exportCommits --git-committer-email "copybara-bot@avm99963.com" --git-committer-name "Copybara bot"
diff --git a/.copybara/first-export-test.sh b/.copybara/first-export-test.sh
new file mode 100755
index 0000000..02a4807
--- /dev/null
+++ b/.copybara/first-export-test.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+copybara copy.bara.sky firstExportTest --force --git-committer-email "copybara-bot@avm99963.com" --git-committer-name "Copybara bot"
diff --git a/.copybara/first-export.sh b/.copybara/first-export.sh
new file mode 100755
index 0000000..9cbd6b5
--- /dev/null
+++ b/.copybara/first-export.sh
@@ -0,0 +1,2 @@
+#!/bin/sh
+copybara copy.bara.sky firstExport --force --git-committer-email "copybara-bot@avm99963.com" --git-committer-name "Copybara bot"
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..e2c33b0
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,24 @@
+Except where otherwise mentioned, the contents of this repo are available under
+the following license:
+
+---
+
+Copyright 2024 Adrià Vilanova Martínez
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the “Software”), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d39a82d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,12 @@
+# dotfiles
+
+This is a public version of my [Chezmoi][chezmoi] dotfiles repo.
+
+## Set up
+[Read the documentation][chezmoi].
+
+## Contact me
+Feel free to contact me to ask any questions about this configuration! You can
+reach out to me via @adri:avm99963.com at Matrix.
+
+[chezmoi]: https://www.chezmoi.io/
diff --git a/bin/executable_switch-keyboard.tmpl b/bin/executable_switch-keyboard.tmpl
new file mode 100644
index 0000000..71f6089
--- /dev/null
+++ b/bin/executable_switch-keyboard.tmpl
@@ -0,0 +1,10 @@
+#!/bin/bash
+export KEYBOARD_MAC={{ .switchKeyboard.mac | quote }}
+export CONNECTED=$(bluetoothctl devices Connected | grep "$KEYBOARD_MAC")
+if [[ "$CONNECTED" == '' ]]; then
+  bluetoothctl unblock "$KEYBOARD_MAC"
+  bluetoothctl connect "$KEYBOARD_MAC"
+else
+  bluetoothctl disconnect "$KEYBOARD_MAC"
+  bluetoothctl block "$KEYBOARD_MAC"
+fi
diff --git a/dot_gitconfig.tmpl b/dot_gitconfig.tmpl
new file mode 100644
index 0000000..90b83c3
--- /dev/null
+++ b/dot_gitconfig.tmpl
@@ -0,0 +1,30 @@
+[user]
+name = {{ .git.name | quote }}
+email = {{ .git.email | quote }}
+{{if and (index .git "signingKey") (ne .git.signingKey "") -}}
+signingkey = {{ .git.signingKey | quote }}
+{{- end}}
+
+{{if eq .chezmoi.os "darwin" -}}
+[credential]
+helper = osxkeychain
+
+[core]
+precomposeUnicode = true
+excludesfile = {{ .chezmoi.config.destDir }}/.gitignore_global
+{{- end -}}
+
+[http]
+cookiefile = {{ .chezmoi.config.destDir }}/.gitcookies
+
+[hub]
+protocol = https
+
+[pull]
+rebase = true
+
+[init]
+defaultBranch = main
+
+[alias]
+r = review -R
diff --git a/dot_local/bin/executable_git-tree b/dot_local/bin/executable_git-tree
new file mode 100644
index 0000000..69a0eda
--- /dev/null
+++ b/dot_local/bin/executable_git-tree
@@ -0,0 +1,2 @@
+#!/bin/bash
+git log --all --graph --decorate --oneline $*
diff --git a/dot_local/bin/executable_vimdirdiff b/dot_local/bin/executable_vimdirdiff
new file mode 100644
index 0000000..fc316be
--- /dev/null
+++ b/dot_local/bin/executable_vimdirdiff
@@ -0,0 +1,10 @@
+#!/bin/bash
+# Adapted a little bit for my setup.
+# @source https://github.com/martinvonz/jj/wiki/Vim/e9c31b7b424f2ce69bfd549e18116a57480c48ca
+
+# Shell-escape each path:
+DIR1=$(printf '%q' "$1"); shift
+DIR2=$(printf '%q' "$1"); shift
+
+# The colorscheme is only important on Vim versions older than 9.0
+nvim "$@" -c "DirDiff $DIR1 $DIR2"
diff --git a/dot_local/private_share/icons/xfce4-keyboard-svg.license.txt b/dot_local/private_share/icons/xfce4-keyboard-svg.license.txt
new file mode 100644
index 0000000..b00331a
--- /dev/null
+++ b/dot_local/private_share/icons/xfce4-keyboard-svg.license.txt
@@ -0,0 +1,680 @@
+The xfce4-keyboard-svg.svg file comes from the Faenza icon set by Matthieu
+James, and is covered by the GNU GPL v3 license. It is hosted in its entirety
+at https://code.google.com/archive/p/faenza-icon-theme/.
+
+---
+
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/dot_local/private_share/icons/xfce4-keyboard-svg.svg b/dot_local/private_share/icons/xfce4-keyboard-svg.svg
new file mode 100644
index 0000000..1cddcb3
--- /dev/null
+++ b/dot_local/private_share/icons/xfce4-keyboard-svg.svg
@@ -0,0 +1 @@
+<svg height="96" width="96" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a"><stop offset="0" stop-color="#b3b3b3"/><stop offset="1" stop-color="#d2d2d2"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="36.357143" x2="36.357143" xlink:href="#b" y1="6" y2="63.893143"/><radialGradient id="d" cx="48" cy="90.171875" gradientTransform="matrix(1.1573129 0 0 .99590774 -7.551021 .197132)" gradientUnits="userSpaceOnUse" r="42" xlink:href="#b"/><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="48" x2="48" y1="90" y2="5.987717"><stop offset="0" stop-color="#b4b4b4"/><stop offset="1" stop-color="#dcdcdc"/></linearGradient><linearGradient id="f"><stop offset="0" stop-opacity="0"/><stop offset=".30000001" stop-opacity="0"/><stop offset=".5" stop-opacity=".117647"/><stop offset=".69999999" stop-opacity="0"/><stop offset="1" stop-opacity="0"/></linearGradient><linearGradient id="g"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset=".30000001" stop-color="#fff" stop-opacity="0"/><stop offset=".5" stop-color="#fff" stop-opacity=".612403"/><stop offset=".75264549" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="h"><stop offset="0" stop-color="#d6d6d6"/><stop offset="1" stop-color="#eaeaea"/></linearGradient><linearGradient id="i" gradientTransform="matrix(-.21428571 0 0 .21428571 35.285714 18.714286)" gradientUnits="userSpaceOnUse" x1="6" x2="48" xlink:href="#f" y1="48" y2="81.071426"/><linearGradient id="j" gradientUnits="userSpaceOnUse" x1="16.00000026" x2="25.00000008" xlink:href="#f" y1="29.00000008" y2="36.08673408112"/><linearGradient id="k" gradientTransform="matrix(.21428571 0 0 -.21428571 14.714286 39.285714)" gradientUnits="userSpaceOnUse" x1="13.321428" x2="48" xlink:href="#g" y1="48" y2="84.285713"/><linearGradient id="l" gradientTransform="matrix(-.21428571 0 0 -.21428571 35.285714 39.285714)" gradientUnits="userSpaceOnUse" x1="13.321428" x2="48" xlink:href="#g" y1="48" y2="84.285713"/><linearGradient id="m" gradientUnits="userSpaceOnUse" x1="28.3290822277" x2="21.58673514827" xlink:href="#a" y1="37.9999999" y2="20.00000026"/><linearGradient id="n" gradientUnits="userSpaceOnUse" x1="21.99999984" x2="35.9999992" xlink:href="#h" y1="-25.00000046" y2="-25.00000046"/><linearGradient id="o" gradientUnits="userSpaceOnUse" x1="25" x2="25" xlink:href="#b" y1="36" y2="21.964331"/><linearGradient id="p" gradientUnits="userSpaceOnUse" x1="27" x2="27" xlink:href="#b" y1="76" y2="61.964331"/><linearGradient id="q" gradientUnits="userSpaceOnUse" x1="61.99999984" x2="75.9999992" xlink:href="#h" y1="-27.00000046" y2="-27.00000046"/><linearGradient id="r" gradientTransform="matrix(-.21428571 0 0 .21428571 57.285714 58.714286)" gradientUnits="userSpaceOnUse" x1="6" x2="48" xlink:href="#f" y1="48" y2="81.071426"/><linearGradient id="s" gradientUnits="userSpaceOnUse" x1="18.00000026" x2="27.00000008" xlink:href="#f" y1="69.00000008" y2="76.08673408112"/><linearGradient id="t" gradientTransform="matrix(.21428571 0 0 -.21428571 16.714286 79.285714)" gradientUnits="userSpaceOnUse" x1="13.321428" x2="48" xlink:href="#g" y1="48" y2="84.285713"/><linearGradient id="u" gradientTransform="matrix(-.21428571 0 0 -.21428571 57.285714 79.285714)" gradientUnits="userSpaceOnUse" x1="13.321428" x2="48" xlink:href="#g" y1="48" y2="84.285713"/><linearGradient id="v" gradientUnits="userSpaceOnUse" x1="30.3290822277" x2="23.58673514827" xlink:href="#a" y1="77.9999999" y2="60.00000026"/><linearGradient id="w" gradientTransform="matrix(1.0058652 0 0 .994169 100 0)" gradientUnits="userSpaceOnUse" x1="45.447727" x2="45.447727" y1="92.539597" y2="7.01654"><stop offset="0"/><stop offset="1" stop-opacity=".588235"/></linearGradient><linearGradient id="x" gradientTransform="matrix(1.0238095 0 0 1.0119048 -1.142857 -98.071429)" gradientUnits="userSpaceOnUse" x1="32.251034" x2="32.251034" xlink:href="#w" y1="6.131708" y2="90.238609"/><linearGradient id="y" gradientTransform="translate(0 -97)" gradientUnits="userSpaceOnUse" x1="32.251034" x2="32.251034" xlink:href="#w" y1="6.131708" y2="90.238609"/><g><g fill="url(#x)"><path d="m12-95.03125c-5.5110903 0-10.03125 4.52016-10.03125 10.03125v71c0 5.5110902 4.5201598 10.03125 10.03125 10.03125h72c5.51109 0 10.03125-4.5201597 10.03125-10.03125v-71c0-5.51109-4.52016-10.03125-10.03125-10.03125z" opacity=".08" transform="scale(1 -1)"/><path d="m12-94.03125c-4.971633 0-9.03125 4.059617-9.03125 9.03125v71c0 4.9716329 4.0596171 9.03125 9.03125 9.03125h72c4.971633 0 9.03125-4.059617 9.03125-9.03125v-71c0-4.971633-4.059617-9.03125-9.03125-9.03125z" opacity=".1" transform="scale(1 -1)"/><path d="m12-93c-4.4091333 0-8 3.590867-8 8v71c0 4.4091333 3.5908667 8 8 8h72c4.409133 0 8-3.5908667 8-8v-71c0-4.409133-3.590867-8-8-8z" opacity=".2" transform="scale(1 -1)"/><rect height="85" opacity=".3" rx="7" transform="scale(1 -1)" width="86" x="5" y="-92"/></g><rect fill="url(#y)" height="84" opacity=".45" rx="6" transform="scale(1 -1)" width="84" x="6" y="-91"/></g><rect fill="url(#e)" height="84" rx="6" width="84" x="6" y="6"/><path d="m12 6c-3.324 0-6 2.676-6 6v2 68 2c0 .334721.04135.6507.09375.96875.0487.295596.09704.596915.1875.875.00988.03038.020892.0636.03125.09375.098865.287771.2348802.547452.375.8125.1445918.273507.3156161.535615.5.78125s.3737765.473472.59375.6875c.439947.428056.94291.814526 1.5 1.09375.278545.139612.5734731.246947.875.34375-.2562018-.100222-.4867109-.236272-.71875-.375-.00741-.0044-.023866.0045-.03125 0-.031933-.0193-.062293-.04251-.09375-.0625-.120395-.0767-.2310226-.163513-.34375-.25-.1061728-.0808-.2132809-.161112-.3125-.25-.1779299-.161433-.3474596-.345388-.5-.53125-.1075789-.130255-.2183939-.265285-.3125-.40625-.025089-.03838-.038446-.08587-.0625-.125-.064763-.103032-.1302275-.204517-.1875-.3125-.1010083-.194706-.2056748-.415701-.28125-.625-.00796-.02181-.023589-.04055-.03125-.0625-.0318251-.09195-.0358045-.186831-.0625-.28125-.0303323-.106618-.0703894-.203031-.09375-.3125-.0728786-.341512-.125-.698205-.125-1.0625v-2-68-2c0-2.781848 2.2181517-5 5-5h2 68 2c2.781848 0 5 2.218152 5 5v2 68 2c0 .364295-.05212.720988-.125 1.0625-.04415.206893-.08838.397658-.15625.59375-.0077.02195-.0233.04069-.03125.0625-.06274.173739-.138383.367449-.21875.53125-.04158.0828-.07904.169954-.125.25-.0546.09721-.126774.18835-.1875.28125-.09411.140965-.204921.275995-.3125.40625-.143174.17445-.303141.346998-.46875.5-.01117.0102-.01998.02115-.03125.03125-.138386.125556-.285091.234436-.4375.34375-.102571.07315-.204318.153364-.3125.21875-.0074.0045-.02384-.0044-.03125 0-.232039.138728-.462548.274778-.71875.375.301527-.0968.596455-.204138.875-.34375.55709-.279224 1.060053-.665694 1.5-1.09375.219973-.214028.409366-.441865.59375-.6875s.355408-.507743.5-.78125c.14012-.265048.276135-.524729.375-.8125.01041-.03078.02133-.06274.03125-.09375.09046-.278085.1388-.579404.1875-.875.0524-.31805.09375-.634029.09375-.96875v-2-68-2c0-3.324-2.676-6-6-6z" fill="url(#c)" opacity=".5"/><path d="m12 90c-3.324 0-6-2.676-6-6v-2-68-2c0-.334721.04135-.6507.09375-.96875.0487-.295596.09704-.596915.1875-.875.00988-.03038.020892-.0636.03125-.09375.098865-.287771.2348802-.547452.375-.8125.1445918-.273507.3156161-.535615.5-.78125s.3737765-.473472.59375-.6875c.439947-.428056.94291-.814526 1.5-1.09375.278545-.139612.5734731-.246947.875-.34375-.2562018.100222-.4867109.236272-.71875.375-.00741.0044-.023866-.0045-.03125 0-.031933.0193-.062293.04251-.09375.0625-.120395.0767-.2310226.163513-.34375.25-.1061728.0808-.2132809.161112-.3125.25-.1779299.161433-.3474596.345388-.5.53125-.1075789.130255-.2183939.265285-.3125.40625-.025089.03838-.038446.08587-.0625.125-.064763.103032-.1302275.204517-.1875.3125-.1010083.194706-.2056748.415701-.28125.625-.00796.02181-.023589.04055-.03125.0625-.0318251.09195-.0358045.186831-.0625.28125-.0303323.106618-.0703894.203031-.09375.3125-.0728786.341512-.125.698205-.125 1.0625v2 68 2c0 2.781848 2.2181517 5 5 5h2 68 2c2.781848 0 5-2.218152 5-5v-2-68-2c0-.364295-.05212-.720988-.125-1.0625-.04415-.206893-.08838-.397658-.15625-.59375-.0077-.02195-.0233-.04069-.03125-.0625-.06274-.173739-.138383-.367449-.21875-.53125-.04158-.0828-.07904-.169954-.125-.25-.0546-.09721-.126774-.18835-.1875-.28125-.09411-.140965-.204921-.275995-.3125-.40625-.143174-.17445-.303141-.346998-.46875-.5-.01117-.0102-.01998-.02115-.03125-.03125-.138386-.125556-.285091-.234436-.4375-.34375-.102571-.07315-.204318-.153364-.3125-.21875-.0074-.0045-.02384.0044-.03125 0-.232039-.138728-.462548-.274778-.71875-.375.301527.0968.596455.204138.875.34375.55709.279224 1.060053.665694 1.5 1.09375.219973.214028.409366.441865.59375.6875s.355408.507743.5.78125c.14012.265048.276135.524729.375.8125.01041.03078.02133.06274.03125.09375.09046.278085.1388.579404.1875.875.0524.31805.09375.634029.09375.96875v2 68 2c0 3.324-2.676 6-6 6z" fill="url(#d)" opacity=".3"/><g><path d="m17 18c-1.662 0-3 1.338-3 3v16c0 1.662 1.338 3 3 3h3v1 1 15 1h-1c-1.662 0-3 1.338-3 3v16c0 1.662 1.338 3 3 3h56c1.662 0 3-1.338 3-3v-16-1h1c1.662 0 3-1.338 3-3v-16c0-1.662-1.338-3-3-3h-3v-1-1-15c0-1.662-1.338-3-3-3z" opacity=".7"/><rect fill="#f00" height="18" rx="1.285714" width="18" x="-24" y="20"/><rect fill="url(#m)" height="18" rx="1.285714" width="18" x="16" y="20"/><path d="m34 29v-7.714285c0-.712286-.573429-1.285715-1.285714-1.285715h-7.714286v9z" fill="url(#l)"/><path d="m16 29v-7.714285c0-.712286.573429-1.285715 1.285715-1.285715h7.714285v9z" fill="url(#k)"/><path d="m16 29v7.714286c0 .712285.573429 1.285714 1.285715 1.285714h7.714285v-9z" fill="url(#j)"/><path d="m34 29v7.714286c0 .712285-.573429 1.285714-1.285714 1.285714h-7.714286v-9z" fill="url(#i)"/><rect fill="url(#n)" height="14" rx="1.272727" transform="rotate(90)" width="14" x="22" y="-32"/><path d="m19.28125 22c-.705091 0-1.28125.576159-1.28125 1.28125v11.4375c0 .705091.576159 1.28125 1.28125 1.28125h11.4375c.705091 0 1.28125-.576159 1.28125-1.28125v-11.4375c0-.705091-.576159-1.28125-1.28125-1.28125zm0 1.09375h11.4375c.11617 0 .1875.07133.1875.1875v11.4375c0 .11617-.07133.1875-.1875.1875h-11.4375c-.11617 0-.1875-.07133-.1875-.1875v-11.4375c0-.11617.07133-.1875.1875-.1875z" fill="url(#o)"/><path d="m17.28125 19c-1.244887 0-2.28125 1.036362-2.28125 2.28125v15.4375c0 1.244888 1.036363 2.28125 2.28125 2.28125h15.4375c1.244887 0 2.28125-1.036363 2.28125-2.28125v-15.4375c0-1.244887-1.036363-2.28125-2.28125-2.28125zm0 1h15.4375c.712286 0 1.28125.568964 1.28125 1.28125v15.4375c0 .712286-.568964 1.28125-1.28125 1.28125h-15.4375c-.712286 0-1.28125-.568964-1.28125-1.28125v-15.4375c0-.712286.568964-1.28125 1.28125-1.28125z" fill="#fff" opacity=".2"/><g transform="translate(20)"><rect fill="url(#m)" height="18" rx="1.285714" width="18" x="16" y="20"/><path d="m34 29v-7.714285c0-.712286-.573429-1.285715-1.285714-1.285715h-7.714286v9z" fill="url(#l)"/><path d="m16 29v-7.714285c0-.712286.573429-1.285715 1.285715-1.285715h7.714285v9z" fill="url(#k)"/><path d="m16 29v7.714286c0 .712285.573429 1.285714 1.285715 1.285714h7.714285v-9z" fill="url(#j)"/><path d="m34 29v7.714286c0 .712285-.573429 1.285714-1.285714 1.285714h-7.714286v-9z" fill="url(#i)"/><rect fill="url(#n)" height="14" rx="1.272727" transform="rotate(90)" width="14" x="22" y="-32"/><path d="m19.28125 22c-.705091 0-1.28125.576159-1.28125 1.28125v11.4375c0 .705091.576159 1.28125 1.28125 1.28125h11.4375c.705091 0 1.28125-.576159 1.28125-1.28125v-11.4375c0-.705091-.576159-1.28125-1.28125-1.28125zm0 1.09375h11.4375c.11617 0 .1875.07133.1875.1875v11.4375c0 .11617-.07133.1875-.1875.1875h-11.4375c-.11617 0-.1875-.07133-.1875-.1875v-11.4375c0-.11617.07133-.1875.1875-.1875z" fill="url(#o)"/><path d="m17.28125 19c-1.244887 0-2.28125 1.036362-2.28125 2.28125v15.4375c0 1.244888 1.036363 2.28125 2.28125 2.28125h15.4375c1.244887 0 2.28125-1.036363 2.28125-2.28125v-15.4375c0-1.244887-1.036363-2.28125-2.28125-2.28125zm0 1h15.4375c.712286 0 1.28125.568964 1.28125 1.28125v15.4375c0 .712286-.568964 1.28125-1.28125 1.28125h-15.4375c-.712286 0-1.28125-.568964-1.28125-1.28125v-15.4375c0-.712286.568964-1.28125 1.28125-1.28125z" fill="#fff" opacity=".2"/></g><g transform="translate(40)"><rect fill="url(#m)" height="18" rx="1.285714" width="18" x="16" y="20"/><path d="m34 29v-7.714285c0-.712286-.573429-1.285715-1.285714-1.285715h-7.714286v9z" fill="url(#l)"/><path d="m16 29v-7.714285c0-.712286.573429-1.285715 1.285715-1.285715h7.714285v9z" fill="url(#k)"/><path d="m16 29v7.714286c0 .712285.573429 1.285714 1.285715 1.285714h7.714285v-9z" fill="url(#j)"/><path d="m34 29v7.714286c0 .712285-.573429 1.285714-1.285714 1.285714h-7.714286v-9z" fill="url(#i)"/><rect fill="url(#n)" height="14" rx="1.272727" transform="rotate(90)" width="14" x="22" y="-32"/><path d="m19.28125 22c-.705091 0-1.28125.576159-1.28125 1.28125v11.4375c0 .705091.576159 1.28125 1.28125 1.28125h11.4375c.705091 0 1.28125-.576159 1.28125-1.28125v-11.4375c0-.705091-.576159-1.28125-1.28125-1.28125zm0 1.09375h11.4375c.11617 0 .1875.07133.1875.1875v11.4375c0 .11617-.07133.1875-.1875.1875h-11.4375c-.11617 0-.1875-.07133-.1875-.1875v-11.4375c0-.11617.07133-.1875.1875-.1875z" fill="url(#o)"/><path d="m17.28125 19c-1.244887 0-2.28125 1.036362-2.28125 2.28125v15.4375c0 1.244888 1.036363 2.28125 2.28125 2.28125h15.4375c1.244887 0 2.28125-1.036363 2.28125-2.28125v-15.4375c0-1.244887-1.036363-2.28125-2.28125-2.28125zm0 1h15.4375c.712286 0 1.28125.568964 1.28125 1.28125v15.4375c0 .712286-.568964 1.28125-1.28125 1.28125h-15.4375c-.712286 0-1.28125-.568964-1.28125-1.28125v-15.4375c0-.712286.568964-1.28125 1.28125-1.28125z" fill="#fff" opacity=".2"/></g><g transform="translate(6 20)"><rect fill="url(#m)" height="18" rx="1.285714" width="18" x="16" y="20"/><path d="m34 29v-7.714285c0-.712286-.573429-1.285715-1.285714-1.285715h-7.714286v9z" fill="url(#l)"/><path d="m16 29v-7.714285c0-.712286.573429-1.285715 1.285715-1.285715h7.714285v9z" fill="url(#k)"/><path d="m16 29v7.714286c0 .712285.573429 1.285714 1.285715 1.285714h7.714285v-9z" fill="url(#j)"/><path d="m34 29v7.714286c0 .712285-.573429 1.285714-1.285714 1.285714h-7.714286v-9z" fill="url(#i)"/><rect fill="url(#n)" height="14" rx="1.272727" transform="rotate(90)" width="14" x="22" y="-32"/><path d="m19.28125 22c-.705091 0-1.28125.576159-1.28125 1.28125v11.4375c0 .705091.576159 1.28125 1.28125 1.28125h11.4375c.705091 0 1.28125-.576159 1.28125-1.28125v-11.4375c0-.705091-.576159-1.28125-1.28125-1.28125zm0 1.09375h11.4375c.11617 0 .1875.07133.1875.1875v11.4375c0 .11617-.07133.1875-.1875.1875h-11.4375c-.11617 0-.1875-.07133-.1875-.1875v-11.4375c0-.11617.07133-.1875.1875-.1875z" fill="url(#o)"/><path d="m17.28125 19c-1.244887 0-2.28125 1.036362-2.28125 2.28125v15.4375c0 1.244888 1.036363 2.28125 2.28125 2.28125h15.4375c1.244887 0 2.28125-1.036363 2.28125-2.28125v-15.4375c0-1.244887-1.036363-2.28125-2.28125-2.28125zm0 1h15.4375c.712286 0 1.28125.568964 1.28125 1.28125v15.4375c0 .712286-.568964 1.28125-1.28125 1.28125h-15.4375c-.712286 0-1.28125-.568964-1.28125-1.28125v-15.4375c0-.712286.568964-1.28125 1.28125-1.28125z" fill="#fff" opacity=".2"/></g><g transform="translate(26 20)"><rect fill="url(#m)" height="18" rx="1.285714" width="18" x="16" y="20"/><path d="m34 29v-7.714285c0-.712286-.573429-1.285715-1.285714-1.285715h-7.714286v9z" fill="url(#l)"/><path d="m16 29v-7.714285c0-.712286.573429-1.285715 1.285715-1.285715h7.714285v9z" fill="url(#k)"/><path d="m16 29v7.714286c0 .712285.573429 1.285714 1.285715 1.285714h7.714285v-9z" fill="url(#j)"/><path d="m34 29v7.714286c0 .712285-.573429 1.285714-1.285714 1.285714h-7.714286v-9z" fill="url(#i)"/><rect fill="url(#n)" height="14" rx="1.272727" transform="rotate(90)" width="14" x="22" y="-32"/><path d="m19.28125 22c-.705091 0-1.28125.576159-1.28125 1.28125v11.4375c0 .705091.576159 1.28125 1.28125 1.28125h11.4375c.705091 0 1.28125-.576159 1.28125-1.28125v-11.4375c0-.705091-.576159-1.28125-1.28125-1.28125zm0 1.09375h11.4375c.11617 0 .1875.07133.1875.1875v11.4375c0 .11617-.07133.1875-.1875.1875h-11.4375c-.11617 0-.1875-.07133-.1875-.1875v-11.4375c0-.11617.07133-.1875.1875-.1875z" fill="url(#o)"/><path d="m17.28125 19c-1.244887 0-2.28125 1.036362-2.28125 2.28125v15.4375c0 1.244888 1.036363 2.28125 2.28125 2.28125h15.4375c1.244887 0 2.28125-1.036363 2.28125-2.28125v-15.4375c0-1.244887-1.036363-2.28125-2.28125-2.28125zm0 1h15.4375c.712286 0 1.28125.568964 1.28125 1.28125v15.4375c0 .712286-.568964 1.28125-1.28125 1.28125h-15.4375c-.712286 0-1.28125-.568964-1.28125-1.28125v-15.4375c0-.712286.568964-1.28125 1.28125-1.28125z" fill="#fff" opacity=".2"/></g><g transform="translate(46 20)"><rect fill="url(#m)" height="18" rx="1.285714" width="18" x="16" y="20"/><path d="m34 29v-7.714285c0-.712286-.573429-1.285715-1.285714-1.285715h-7.714286v9z" fill="url(#l)"/><path d="m16 29v-7.714285c0-.712286.573429-1.285715 1.285715-1.285715h7.714285v9z" fill="url(#k)"/><path d="m16 29v7.714286c0 .712285.573429 1.285714 1.285715 1.285714h7.714285v-9z" fill="url(#j)"/><path d="m34 29v7.714286c0 .712285-.573429 1.285714-1.285714 1.285714h-7.714286v-9z" fill="url(#i)"/><rect fill="url(#n)" height="14" rx="1.272727" transform="rotate(90)" width="14" x="22" y="-32"/><path d="m19.28125 22c-.705091 0-1.28125.576159-1.28125 1.28125v11.4375c0 .705091.576159 1.28125 1.28125 1.28125h11.4375c.705091 0 1.28125-.576159 1.28125-1.28125v-11.4375c0-.705091-.576159-1.28125-1.28125-1.28125zm0 1.09375h11.4375c.11617 0 .1875.07133.1875.1875v11.4375c0 .11617-.07133.1875-.1875.1875h-11.4375c-.11617 0-.1875-.07133-.1875-.1875v-11.4375c0-.11617.07133-.1875.1875-.1875z" fill="url(#o)"/><path d="m17.28125 19c-1.244887 0-2.28125 1.036362-2.28125 2.28125v15.4375c0 1.244888 1.036363 2.28125 2.28125 2.28125h15.4375c1.244887 0 2.28125-1.036363 2.28125-2.28125v-15.4375c0-1.244887-1.036363-2.28125-2.28125-2.28125zm0 1h15.4375c.712286 0 1.28125.568964 1.28125 1.28125v15.4375c0 .712286-.568964 1.28125-1.28125 1.28125h-15.4375c-.712286 0-1.28125-.568964-1.28125-1.28125v-15.4375c0-.712286.568964-1.28125 1.28125-1.28125z" fill="#fff" opacity=".2"/></g><g transform="translate(42 40)"><rect fill="url(#m)" height="18" rx="1.285714" width="18" x="16" y="20"/><path d="m34 29v-7.714285c0-.712286-.573429-1.285715-1.285714-1.285715h-7.714286v9z" fill="url(#l)"/><path d="m16 29v-7.714285c0-.712286.573429-1.285715 1.285715-1.285715h7.714285v9z" fill="url(#k)"/><path d="m16 29v7.714286c0 .712285.573429 1.285714 1.285715 1.285714h7.714285v-9z" fill="url(#j)"/><path d="m34 29v7.714286c0 .712285-.573429 1.285714-1.285714 1.285714h-7.714286v-9z" fill="url(#i)"/><rect fill="url(#n)" height="14" rx="1.272727" transform="rotate(90)" width="14" x="22" y="-32"/><path d="m19.28125 22c-.705091 0-1.28125.576159-1.28125 1.28125v11.4375c0 .705091.576159 1.28125 1.28125 1.28125h11.4375c.705091 0 1.28125-.576159 1.28125-1.28125v-11.4375c0-.705091-.576159-1.28125-1.28125-1.28125zm0 1.09375h11.4375c.11617 0 .1875.07133.1875.1875v11.4375c0 .11617-.07133.1875-.1875.1875h-11.4375c-.11617 0-.1875-.07133-.1875-.1875v-11.4375c0-.11617.07133-.1875.1875-.1875z" fill="url(#o)"/><path d="m17.28125 19c-1.244887 0-2.28125 1.036362-2.28125 2.28125v15.4375c0 1.244888 1.036363 2.28125 2.28125 2.28125h15.4375c1.244887 0 2.28125-1.036363 2.28125-2.28125v-15.4375c0-1.244887-1.036363-2.28125-2.28125-2.28125zm0 1h15.4375c.712286 0 1.28125.568964 1.28125 1.28125v15.4375c0 .712286-.568964 1.28125-1.28125 1.28125h-15.4375c-.712286 0-1.28125-.568964-1.28125-1.28125v-15.4375c0-.712286.568964-1.28125 1.28125-1.28125z" fill="#fff" opacity=".2"/></g><path d="m19.285714 60h35.428572c.712285 0 1.285714.573429 1.285714 1.285714v15.428572c0 .712285-.573429 1.285714-1.285714 1.285714h-35.428572c-.712285 0-1.285714-.573429-1.285714-1.285714v-15.428572c0-.712285.573429-1.285714 1.285714-1.285714z" fill="url(#v)"/><path d="m56 69v-7.714285c0-.712286-.573429-1.285715-1.285714-1.285715h-7.714286v9z" fill="url(#u)"/><path d="m18 69v-7.714285c0-.712286.573429-1.285715 1.285715-1.285715h7.714285v9z" fill="url(#t)"/><path d="m18 69v7.714286c0 .712285.573429 1.285714 1.285715 1.285714h7.714285v-9z" fill="url(#s)"/><path d="m56 69v7.714286c0 .712285-.573429 1.285714-1.285714 1.285714h-7.714286v-9z" fill="url(#r)"/><path d="m63.272727-54h11.454546c.705091 0 1.272727.567636 1.272727 1.272727v31.454546c0 .705091-.567636 1.272727-1.272727 1.272727h-11.454546c-.705091 0-1.272727-.567636-1.272727-1.272727v-31.454546c0-.705091.567636-1.272727 1.272727-1.272727z" fill="url(#q)" transform="rotate(90)"/><path d="m21.28125 62c-.705091 0-1.28125.576159-1.28125 1.28125v11.4375c0 .705091.576159 1.28125 1.28125 1.28125h31.4375c.705091 0 1.28125-.576159 1.28125-1.28125v-11.4375c0-.705091-.576159-1.28125-1.28125-1.28125zm0 1.09375h31.4375c.11617 0 .1875.07133.1875.1875v11.4375c0 .11617-.07133.1875-.1875.1875h-31.4375c-.11617 0-.1875-.07133-.1875-.1875v-11.4375c0-.11617.07133-.1875.1875-.1875z" fill="url(#p)"/><path d="m19.28125 59c-1.244887 0-2.28125 1.036362-2.28125 2.28125v15.4375c0 1.244888 1.036363 2.28125 2.28125 2.28125h35.4375c1.244887 0 2.28125-1.036363 2.28125-2.28125v-15.4375c0-1.244887-1.036363-2.28125-2.28125-2.28125zm0 1h35.4375c.712286 0 1.28125.568964 1.28125 1.28125v15.4375c0 .712286-.568964 1.28125-1.28125 1.28125h-35.4375c-.712286 0-1.28125-.568964-1.28125-1.28125v-15.4375c0-.712286.568964-1.28125 1.28125-1.28125z" fill="#fff" opacity=".2"/><path d="m14 37v1c0 1.662 1.338 3 3 3h3v-1h-3c-1.662 0-3-1.338-3-3zm68 20c0 1.662-1.338 3-3 3h-1v1h1c1.662 0 3-1.338 3-3zm-66 20v1c0 1.662 1.338 3 3 3h56c1.662 0 3-1.338 3-3v-1c0 1.662-1.338 3-3 3h-56c-1.662 0-3-1.338-3-3z" fill="#fff" opacity=".6"/><g fill="#333"><path d="m27.363281 32.439941-.786133-2.011718h-3.134765l-.791016 2.011718h-.966797l2.807617-6.879882h1.059571l2.763672 6.879882zm-1.948242-5.009765c-.05209-.130203-.102543-.262039-.151367-.395508-.04558-.133458-.08627-.253901-.12207-.361328-.03581-.110671-.06674-.201817-.09277-.273438-.02279-.07486-.03581-.120436-.03906-.136718-.0065.01628-.02116.06186-.04395.136718-.02279.07488-.05371.167649-.09277.278321-.03581.110682-.07813.232753-.126953.366211-.04558.133468-.09278.265304-.141602.395507l-.878906 2.260743h2.573242l-.883789-2.270508"/><g><path d="m27.166992 66.353516c-.390628.000006-.737308.06511-1.040039.195312-.299482.130214-.55176.315761-.756836.556641-.201825.24089-.354819.530604-.458984.86914-.104168.338546-.156252.714522-.15625 1.12793-.000002.413415.05534.792646.166015 1.137695.113931.341799.275064.636395.483399.883789.211586.247397.468747.439455.771484.576172.305987.13672.649411.205079 1.030274.205078.266923.000001.509435-.03418.727539-.102539.221349-.07161.419917-.170897.595703-.297851.179031-.126952.338536-.276692.478515-.449219.139969-.175779.263666-.369464.371094-.581055l.761719.38086c-.123705.257163-.276699.49642-.458984.717773-.182298.221355-.397142.413412-.644532.576172-.244146.162761-.522466.291341-.834961.385742-.309249.09115-.655928.136719-1.040039.136719-.556644 0-1.044924-.08789-1.464843-.263672-.416669-.179036-.766604-.426432-1.049805-.742187-.279949-.31901-.48991-.696613-.629883-1.132813-.139974-.436195-.209961-.913083-.209961-1.430664 0-.537105.07324-1.022131.219727-1.455078.149738-.432937.36621-.800776.649414-1.103516.286456-.305983.638019-.540358 1.054687-.703125.416664-.166008.891924-.249016 1.425782-.249023.732417.000007 1.344395.143236 1.835937.429687.49153.286465.852858.711269 1.083984 1.274414l-.883789.292969c-.06511-.162755-.153-.317377-.263672-.463867-.110682-.149734-.249028-.28157-.415039-.395508-.16602-.113926-.361333-.205072-.585937-.273437-.221359-.06835-.475265-.102533-.761719-.102539"/><path d="m33.231445 72.535156c-.133466.03581-.270184.06348-.410156.08301-.136721.02279-.296226.03418-.478516.03418-.703126 0-1.054688-.398763-1.054687-1.196289v-3.525391h-.610352v-.639648h.644532l.258789-1.181641h.585937v1.181641h.976563v.639648h-.976563v3.334961c-.000001.253907.04069.432944.12207.537109.08463.100913.229491.151368.434571.151368.08463 0 .166013-.0065.24414-.01953.08138-.01302.169269-.0293.263672-.04883v.649414"/><path d="m33.993164 72.574219v-4.052735c-.000001-.110673-.0016-.222977-.0049-.336914 0-.117183-.0016-.229487-.0049-.336914-.0033-.107417-.0065-.208328-.0098-.302734-.0033-.0944-.0065-.179031-.0098-.253906h.830078c.0033.07488.0065.161138.0098.258789.0065.09441.01139.192062.01465.292968.0065.100917.0098.198573.0098.292969.0033.09115.0049.169275.0049.234375h.01953c.06185-.201818.126952-.375972.195313-.522461.07161-.149734.15462-.271805.249023-.366211.0944-.09765.206704-.169265.336914-.214843.130206-.04882.288083-.07324.473633-.07324.07161.000006.139971.0065.205078.01953.0651.0098.115557.01954.151367.0293v.805665c-.0586-.01627-.126956-.02766-.205078-.03418-.07813-.0098-.166018-.01464-.263672-.01465-.201825.000005-.374351.04558-.517578.136719-.139976.09115-.255536.218103-.34668.38086-.08789.159509-.152996.351566-.195312.576171-.04232.221358-.06348.463871-.06348.727539v2.753907h-.878906"/><path d="m37.313477 72.574219v-7.246094h.878906v7.246094z"/></g><path d="m47.744141 32.439941h-5.478516v-.698242l4.189453-5.419922h-3.833008v-.761718h4.892578v.678711l-4.189453 5.439453h4.418946z"/><path d="m62.485352 32.439941v-6.879882h5.219726v.761718h-4.287109v2.207032h3.99414v.751953h-3.99414v2.397461h4.487304v.761718z"/><path d="m34.417969 48.968262c-.000008.485029-.06348.929364-.19043 1.333008-.123705.400392-.304369.751954-.541992 1.054687-.234381.302735-.524095.550131-.869141.742188-.341802.188802-.730799.3125-1.166992.371093.06836.208333.144852.385742.229492.532227.08789.146484.18717.265298.297852.356445.110672.0944.232742.162759.366211.205078.136713.04557.28808.06836.454101.06836.09114-.000002.188796-.0065.292969-.01953.10416-.01302.193679-.02767.268555-.04395v.654297c-.123704.02929-.260423.05371-.410157.07324-.14649.02279-.299484.03418-.458984.03418-.279953-.000002-.524093-.04232-.732422-.126953-.208338-.081377-.392257-.200192-.551758-.356441-.156254-.152996-.291345-.341798-.405273-.566406-.113936-.22461-.214847-.478516-.302734-.761719-.514326-.02604-.9668-.131835-1.357422-.317382-.387372-.188802-.711265-.439453-.97168-.751954-.257162-.315753-.450847-.683592-.581055-1.103515-.130208-.423175-.195313-.882159-.195312-1.376953-.000001-.537106.07487-1.022131.224609-1.455078.149739-.432938.369465-.800776.65918-1.103516.289712-.305983.646157-.540358 1.069336-.703125.426429-.166009.91471-.249016 1.464844-.249023.54687.000007 1.031896.08301 1.455078.249023.426426.166022.782871.402025 1.069336.708008.289707.305995.509433.675461.659179 1.108398.149733.432947.224602.914718.22461 1.445313m-.952149 0c-.000006-.413408-.05372-.789384-.161133-1.12793-.104172-.338537-.260422-.62825-.46875-.869141-.205083-.240879-.460617-.426426-.766601-.55664-.305994-.130202-.659184-.195306-1.05957-.195313-.41016.000007-.76986.06511-1.079102.195313-.309247.130214-.568036.315761-.776367.55664-.20508.240891-.359702.530604-.463867.869141-.100913.338546-.151369.714522-.151368 1.12793-.000001.413414.05208.792646.15625 1.137695.107421.341799.263671.638023.46875.888672.208332.247397.465493.441082.771485.581055.309242.136719.664059.205078 1.064453.205078.429683 0 .799149-.06999 1.108398-.209961.312495-.139973.568029-.333658.766602-.581055.201817-.250649.349929-.548501.444336-.893555.09765-.345049.146478-.721025.146484-1.127929"/><path d="m53.875977 50.540527c-.000007.289715-.05697.556642-.170899.800782-.110683.244141-.283209.455729-.517578.634765-.23438.175782-.530604.314128-.888672.415039-.354822.09766-.776371.146485-1.264648.146485-.856123 0-1.52344-.14974-2.001953-.449219-.478517-.299479-.782879-.732421-.913086-1.298828l.90332-.180664c.04557.179038.115558.341798.209961.488281.0944.146486.221352.273439.380859.380859.162759.104168.362954.185548.600586.244141.237628.05859.522458.08789.854492.08789.276689 0 .530595-.02279.761719-.06836.231116-.04883.429683-.122069.595703-.219726.166011-.09766.294592-.222981.385742-.375977.0944-.156248.141597-.341795.141602-.556641-.000005-.224607-.05209-.406898-.15625-.546875-.100916-.139971-.244146-.255531-.429688-.346679-.185551-.09114-.406905-.167641-.664062-.229492-.257165-.06185-.541996-.128578-.854492-.200196-.19206-.04231-.385745-.08789-.581055-.136718-.19206-.05208-.377606-.112302-.556641-.180665-.175783-.07161-.341798-.154618-.498046-.249023-.156252-.0944-.291343-.206702-.405274-.336914-.113933-.133459-.203451-.286454-.268555-.458984-.0651-.175777-.09766-.3776-.09766-.605469-.000001-.325516.0651-.603836.195313-.834961.133462-.234369.317381-.426426.551758-.576172.234373-.149733.511065-.258782.830078-.327148.319007-.06835.664059-.102532 1.035156-.102539.426428.000007.791011.03419 1.09375.102539.30273.06511.558263.164394.766601.297851.208328.13347.374344.299486.498047.498047.126948.195318.227859.423183.302735.683594l-.917969.161133c-.04558-.166011-.11231-.314122-.200195-.444336-.08464-.130203-.196945-.239252-.336914-.327149-.139979-.08788-.310877-.154616-.512696-.200195-.198571-.04557-.432946-.06835-.703125-.06836-.319013.000006-.587568.0293-.805664.08789-.214846.05535-.388999.131842-.522461.229492-.13021.09766-.224611.213222-.283203.34668-.05534.130214-.08301.271815-.08301.424805-.000001.205083.05045.374353.151368.507812.104164.130213.244138.239262.419921.327149.175779.08789.37923.161137.610352.219726.231117.0586.476885.117192.737305.175781.211584.04883.421545.09929.629882.151368.211585.04883.413407.109053.605469.180664.192053.06836.371089.149743.53711.24414.169265.09441.315749.209964.439453.34668.123692.136722.21972.297854.288086.483398.07161.18555.107415.403648.107422.654297"/><path d="m74.134766 48.929199c-.000007.57292-.08627 1.079104-.258789 1.518555-.172533.436199-.408535.80241-.708008 1.098633-.299485.292969-.654302.515951-1.064453.668945-.406906.14974-.846358.224609-1.31836.224609h-2.573242v-6.879882h2.275391c.530595.000006 1.018876.06674 1.464843.200195.449214.130215.834956.333665 1.157227.610351.32226.273444.57291.621751.751953 1.044922.182285.423182.273431.927739.273438 1.513672m-.9375 0c-.000006-.465491-.06674-.862626-.200196-1.191406-.133469-.332026-.320643-.603836-.561523-.81543-.24089-.211583-.528976-.366205-.864258-.463867-.33529-.100905-.703128-.151361-1.103516-.151367h-1.323242v5.385742h1.533203c.361325.000001.694983-.05859 1.000977-.175781.30924-.117187.576167-.29134.800781-.522461.224604-.231118.400385-.519204.527344-.864258.126947-.345049.190424-.74544.19043-1.201172"/><path d="m67 64-4 4h2v4 1h4v-1-4h2zm0 1 2 2h-1v1 4h-2v-4-1h-1z"/></g></g></svg>
\ No newline at end of file
diff --git a/dot_local/private_share/private_applications/switch-keyboard.desktop.tmpl b/dot_local/private_share/private_applications/switch-keyboard.desktop.tmpl
new file mode 100644
index 0000000..693577a
--- /dev/null
+++ b/dot_local/private_share/private_applications/switch-keyboard.desktop.tmpl
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Name=Switch Keyboard
+Exec=switch-keyboard
+Terminal=true
+Icon={{ .chezmoi.homeDir }}/.local/share/icons/xfce4-keyboard-svg.svg
+Type=Application
+Comment=Switch my wireless keyboard between my personal computer and the Basetis one.
diff --git a/dot_tmux.conf.tmpl b/dot_tmux.conf.tmpl
new file mode 100644
index 0000000..329346b
--- /dev/null
+++ b/dot_tmux.conf.tmpl
@@ -0,0 +1,57 @@
+set -g mouse on
+
+unbind C-b
+set-option -g prefix C-a
+bind-key C-a send-prefix
+
+bind c new-window -c "#{pane_current_path}"
+bind v split-window -h -c "#{pane_current_path}"
+bind h split-window -v -c "#{pane_current_path}"
+unbind '"'
+unbind %
+
+bind r source-file ~/.tmux.conf
+
+bind -n M-Left select-pane -L
+bind -n M-Right select-pane -R
+bind -n M-Up select-pane -U
+bind -n M-Down select-pane -D
+
+set -sg escape-time 10
+
+{{if and .chezmoi.osRelease .chezmoi.osRelease.id (eq .chezmoi.osRelease.id "ubuntu") -}}
+set-option -s set-clipboard off
+bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
+{{- end}}
+
+set -g @plugin "tmux-plugins/tpm"
+
+#set -g @plugin 'christoomey/vim-tmux-navigator'
+set -g @plugin 'dracula/tmux'
+set -g @plugin 'tmux-plugins/tmux-resurrect'
+# This should be the latest plugin (more info: https://github.com/tmux-plugins/tmux-continuum/blob/0698e8f4b17d6454c71bf5212895ec055c578da0/README.md#known-issues)
+set -g @plugin 'tmux-plugins/tmux-continuum'
+
+set -g @resurrect-capture-pane-contents 'on'
+set -g @continuum-restore 'on'
+
+set -g @dracula-show-fahrenheit false
+set -g @dracula-show-powerline true
+{{if or (and .chezmoi.os (eq .chezmoi.os "darwin")) (and .chezmoi.osRelease .chezmoi.osRelease.id (eq .chezmoi.osRelease.id "ubuntu" "debian")) -}}
+set -g @dracula-plugins "cpu-usage ram-usage weather"
+{{- else if and .chezmoi.os (eq .chezmoi.os "android") -}}
+set -g @dracula-plugins "ram-usage"
+{{- else -}}
+set -g @dracula-plugins "ram-usage weather"
+{{- end }}
+set -g @dracula-fixed-location "Barcelona"
+set -g @dracula-show-flags true
+set -g @dracula-show-left-icon session
+set -g status-position bottom
+
+# Automatic tpm installation
+if "test ! -d ~/.tmux/plugins/tpm" \
+   "run 'git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm && ~/.tmux/plugins/tpm/bin/install_plugins'"
+
+# NOTE: Keep the following line at the end of the file
+run '~/.tmux/plugins/tpm/tpm'
diff --git a/executable_dot_jj-signoff.bash b/executable_dot_jj-signoff.bash
new file mode 100644
index 0000000..ed51bdf
--- /dev/null
+++ b/executable_dot_jj-signoff.bash
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+# Adapted from https://gist.github.com/thoughtpolice/8f2fd36ae17cd11b8e7bd93a70e31ad6
+
+set -euo pipefail
+
+CID=$(jj log --no-graph -r @ -T "change_id" | sha256sum | head -c 40)
+
+CHGSTR="Change-Id: I${CID}"
+
+contents=$(<"$1")
+readarray -t lines <<<"$contents"
+
+body=''
+last=''
+for x in "${lines[@]}"; do
+  [[ "$x" =~ ^"JJ:" ]] && continue
+  [[ "$x" =~ ^"Change-Id:" ]] && continue
+
+  [[ "$x" == '' ]] && [[ "$last" == '' ]] && continue
+
+  last="$x"
+  body+="$x\n"
+done
+
+body+="$CHGSTR\n"
+
+if [[ "$body" == "$CHGSTR\n" ]]; then
+  body="\n\n$body"
+fi
+
+t=$(mktemp)
+printf "$body" > "$t"
+mv "$t" "$1"
+
+exec nvim "$1"
diff --git a/private_Library/private_Application Support/private_jj/config.toml.tmpl b/private_Library/private_Application Support/private_jj/config.toml.tmpl
new file mode 100644
index 0000000..426a2fa
--- /dev/null
+++ b/private_Library/private_Application Support/private_jj/config.toml.tmpl
@@ -0,0 +1 @@
+{{- template "jj.toml" . -}}
diff --git a/private_dot_config/darkman/config.yaml b/private_dot_config/darkman/config.yaml
new file mode 100644
index 0000000..379c178
--- /dev/null
+++ b/private_dot_config/darkman/config.yaml
@@ -0,0 +1,4 @@
+lat: 41.3
+lng: 2.1
+dbusserver: true
+portal: true
diff --git a/private_dot_config/foot/foot.ini b/private_dot_config/foot/foot.ini
new file mode 100644
index 0000000..60b7ba4
--- /dev/null
+++ b/private_dot_config/foot/foot.ini
@@ -0,0 +1,2 @@
+[main]
+font=FiraMonoNerdFont-Regular:size=11
diff --git a/private_dot_config/i3blocks/LICENSE.md b/private_dot_config/i3blocks/LICENSE.md
new file mode 100644
index 0000000..f1b33a1
--- /dev/null
+++ b/private_dot_config/i3blocks/LICENSE.md
@@ -0,0 +1,696 @@
+This license applies to the subfolders of this folder. The original LICENSE is left below (source: https://github.com/vivien/i3blocks-contrib):
+
+---
+
+This project is a repository project composed of many individual blocklet
+projects. As such, we empower developers to license their blocklet source as
+they see fit with one major caveat. This repository servers as the single
+packaging source for most OS distributions. As such, we insist that any license
+you choose meet both the
+[Debian](http://www.debian.org/social_contract#guidelines) and
+[Fedora](https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#License_of_Fedora_SPEC_Files)
+free license specifications. For a handy chart, see
+[Wikipedia](https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licenses#Approvals).
+
+All blocklets are licensed individually. Consult the `LICENSE.md` contained
+within each blocklet's directory for the licencing under which the contained
+blocklet code is published. All blocklets without a `LICENSE.md` in their
+directory, and all code within the parent of this repository are published
+under the following license. 
+
+```
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7. This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy. This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged. This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source. This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge. You need not require recipients to copy the
+    Corresponding Source along with the object code. If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source. Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+```
diff --git a/private_dot_config/i3blocks/bandwidth/README.md b/private_dot_config/i3blocks/bandwidth/README.md
new file mode 100644
index 0000000..03872e1
--- /dev/null
+++ b/private_dot_config/i3blocks/bandwidth/README.md
@@ -0,0 +1,19 @@
+# bandwidth
+
+Show bandwidth information. Some interfaces report unknown instead of up for
+their state. If you would like to treat unknowns as up, then set 
+`TREAT_UNKNOWN_AS_UP=1`.
+
+![](bandwidth.png)
+
+# Config
+
+```
+[bandwidth]
+command=$SCRIPT_DIR/bandwidth
+interval=5
+#INTERFACE=eth0
+#INLABEL=IN 
+#OUTLABEL=OUT 
+#TREAT_UNKNOWN_AS_UP=0
+```
diff --git a/private_dot_config/i3blocks/bandwidth/bandwidth.png b/private_dot_config/i3blocks/bandwidth/bandwidth.png
new file mode 100644
index 0000000..2552abd
--- /dev/null
+++ b/private_dot_config/i3blocks/bandwidth/bandwidth.png
Binary files differ
diff --git a/private_dot_config/i3blocks/bandwidth/executable_bandwidth b/private_dot_config/i3blocks/bandwidth/executable_bandwidth
new file mode 100644
index 0000000..43fbe61
--- /dev/null
+++ b/private_dot_config/i3blocks/bandwidth/executable_bandwidth
@@ -0,0 +1,113 @@
+#!/usr/bin/env bash
+# Copyright (C) 2012 Stefan Breunig <stefan+measure-net-speed@mathphys.fsk.uni-heidelberg.de>
+# Copyright (C) 2014 kaueraal
+# Copyright (C) 2015 Thiago Perrotta <perrotta dot thiago at poli dot ufrj dot br>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Get custom IN and OUT labels if provided by command line arguments
+while [[ $# -gt 1 ]]; do
+    key="$1"
+    case "$key" in
+        -i|--inlabel)
+            INLABEL="$2"
+            shift;;
+        -o|--outlabel)
+            OUTLABEL="$2"
+            shift;;
+    esac
+    shift
+done
+
+[[ -z "$INLABEL" ]] && INLABEL="IN "
+[[ -z "$OUTLABEL" ]] && OUTLABEL="OUT "
+
+# Use the provided interface, otherwise the device used for the default route.
+if [[ -z $INTERFACE ]] && [[ -n $BLOCK_INSTANCE ]]; then
+  INTERFACE=$BLOCK_INSTANCE
+elif [[ -z $INTERFACE ]]; then
+  INTERFACE=$(ip route | awk '/^default/ { print $5 ; exit }')
+fi
+
+# Exit if there is no default route
+[[ -z "$INTERFACE" ]] && exit
+
+# Issue #36 compliant.
+if ! [ -e "/sys/class/net/${INTERFACE}/operstate" ] || \
+    (! [ "$TREAT_UNKNOWN_AS_UP" = "1" ] &&
+    ! [ "`cat /sys/class/net/${INTERFACE}/operstate`" = "up" ])
+then
+    echo "$INTERFACE down"
+    echo "$INTERFACE down"
+    echo "#FF0000"
+    exit 0
+fi
+
+# path to store the old results in
+path="/tmp/$(basename $0)-${INTERFACE}"
+
+# grabbing data for each adapter.
+read rx < "/sys/class/net/${INTERFACE}/statistics/rx_bytes"
+read tx < "/sys/class/net/${INTERFACE}/statistics/tx_bytes"
+
+# get time
+time="$(date +%s)"
+
+# write current data if file does not exist. Do not exit, this will cause
+# problems if this file is sourced instead of executed as another process.
+if ! [[ -f "${path}" ]]; then
+  echo "${time} ${rx} ${tx}" > "${path}"
+  chmod 0666 "${path}"
+fi
+
+
+# read previous state and update data storage
+read old < "${path}"
+echo "${time} ${rx} ${tx}" > "${path}"
+
+# parse old data and calc time passed
+old=(${old//;/ })
+time_diff=$(( $time - ${old[0]} ))
+
+# sanity check: has a positive amount of time passed
+[[ "${time_diff}" -gt 0 ]] || exit
+
+# calc bytes transferred, and their rate in byte/s
+rx_diff=$(( $rx - ${old[1]} ))
+tx_diff=$(( $tx - ${old[2]} ))
+rx_rate=$(( $rx_diff / $time_diff ))
+tx_rate=$(( $tx_diff / $time_diff ))
+
+# shift by 10 bytes to get KiB/s. If the value is larger than
+# 1024^2 = 1048576, then display MiB/s instead
+
+# incoming
+echo -n "$INLABEL"
+rx_kib=$(( $rx_rate >> 10 ))
+if hash bc 2>/dev/null && [[ "$rx_rate" -gt 1048576 ]]; then
+  printf '%sM' "`echo "scale=1; $rx_kib / 1024" | bc`"
+else
+  echo -n "${rx_kib}K"
+fi
+
+echo -n " "
+
+# outgoing
+echo -n "$OUTLABEL"
+tx_kib=$(( $tx_rate >> 10 ))
+if hash bc 2>/dev/null && [[ "$tx_rate" -gt 1048576 ]]; then
+  printf '%sM\n' "`echo "scale=1; $tx_kib / 1024" | bc`"
+else
+  echo "${tx_kib}K"
+fi
diff --git a/private_dot_config/i3blocks/bandwidth/i3blocks.conf b/private_dot_config/i3blocks/bandwidth/i3blocks.conf
new file mode 100644
index 0000000..ab5e608
--- /dev/null
+++ b/private_dot_config/i3blocks/bandwidth/i3blocks.conf
@@ -0,0 +1,4 @@
+[bandwidth]
+command=$SCRIPT_DIR/bandwidth
+interval=5
+INTERFACE=eth0
diff --git a/private_dot_config/i3blocks/battery-poly/LICENSE b/private_dot_config/i3blocks/battery-poly/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/private_dot_config/i3blocks/battery-poly/LICENSE
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/private_dot_config/i3blocks/battery-poly/README.md b/private_dot_config/i3blocks/battery-poly/README.md
new file mode 100644
index 0000000..62d79f3
--- /dev/null
+++ b/private_dot_config/i3blocks/battery-poly/README.md
@@ -0,0 +1,37 @@
+# battery-poly
+Generates a pretty battery string for multi-battery systems. Based on [cogitantium/poly-battery-status-py](https://github.com/cogitantium/poly-battery-status-py). Licensed under GPLv3.
+
+![](battery-poly.png)
+
+## Features
+- Uses sysfs for gathering batteries and values on these
+- Calculates time-to-depleted and time-to-full from current power-draw
+- Takes battery-thresholds, such as [TLP](https://github.com/linrunner/TLP), into account when calculating time-to-**full**. Defaults to 100% but is overrideable through arguments.
+- Omits time-to-* when passive (specifically when sysfs delivers a status of `Unknown` or `Full`)
+- Takes a Python formatting string for percentage. Default is `.2%` rendering a percentage with two decimals.
+
+## Dependencies
+- python3
+- sysfs (provided by Linux kernel since 2.5)
+
+## Config
+```
+[battery-poly]
+command=$SCRIPT_DIR/battery-poly
+LABEL=BAT
+interval=5
+```
+
+Two positional arguments are supported; battery-threshold as float and percentage formatting as Python formatting string.
+
+To configure battery-poly for a battery-threshold of 42%, edit the `command`-line as such:
+```
+[battery-poly]
+command=$SCRIPT_DIR/battery-poly 0.42
+```
+
+If no decimals are desired for the percentage and battery-threshold is not to be changed, simply put the default value as follows:
+```
+[battery-poly]
+command=$SCRIPT_DIR/battery-poly 1.0 .0%
+```  
\ No newline at end of file
diff --git a/private_dot_config/i3blocks/battery-poly/battery-poly.png b/private_dot_config/i3blocks/battery-poly/battery-poly.png
new file mode 100644
index 0000000..e0c548a
--- /dev/null
+++ b/private_dot_config/i3blocks/battery-poly/battery-poly.png
Binary files differ
diff --git a/private_dot_config/i3blocks/battery-poly/executable_battery-poly b/private_dot_config/i3blocks/battery-poly/executable_battery-poly
new file mode 100644
index 0000000..a16bb67
--- /dev/null
+++ b/private_dot_config/i3blocks/battery-poly/executable_battery-poly
@@ -0,0 +1,170 @@
+#!/usr/bin/env python3
+"""
+poly-battery-status-py: Generates a pretty status-bar string for multi-battery systems on Linux.
+Copyright (C) 2020  Falke Carlsen
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <https://www.gnu.org/licenses/>.
+"""
+
+import re
+import sys
+from enum import Enum
+from pathlib import Path
+
+PSEUDO_FS_PATH = "/sys/class/power_supply/"
+CURRENT_CHARGE_FILENAME = "energy_now"
+MAX_CHARGE_FILENAME = "energy_full"
+POWER_DRAW_FILENAME = "power_now"
+TLP_THRESHOLD_PERCENTAGE = 1.0
+PERCENTAGE_FORMAT = ".2%"
+
+if len(sys.argv) > 1:
+    # parsing threshold
+    try:
+        TLP_THRESHOLD_PERCENTAGE = float(sys.argv[1])
+    except ValueError:
+        print(f"[ERROR]: Could not convert '{sys.argv[1]}' into a float.")
+    if len(sys.argv) > 2:
+        # parsing formatting
+        PERCENTAGE_FORMAT = sys.argv[2]
+
+
+class Status(Enum):
+    CHARGING = 1
+    DISCHARGING = 2
+    PASSIVE = 3
+
+
+class Configuration:
+    time_to_completion: int
+    percentage: float
+    status: Status
+
+    def __init__(self, time_to_completion, percentage, status):
+        self.time_to_completion = time_to_completion
+        self.percentage = percentage
+        self.status = status
+
+
+class Battery:
+    status: Status
+    current_charge: int
+    max_charge: int
+    power_draw: int
+
+    def __init__(self, status, current_charge, max_charge, power_draw):
+        self.Status = status
+        self.current_charge = current_charge
+        self.max_charge = max_charge
+        self.power_draw = power_draw
+
+
+def get_configuration() -> Configuration:
+    # get all batteries on system
+    batteries = []
+    for x in Path(PSEUDO_FS_PATH).iterdir():
+        bat_name = str(x.parts[len(x.parts) - 1])
+        if re.match("^BAT\d+$", bat_name):
+            batteries.append(Battery(
+                get_status(bat_name),
+                get_current_charge(bat_name),
+                get_max_charge(bat_name),
+                get_power_draw(bat_name)))
+
+    # calculate global status, assumes that if a battery is not passive, it will be discharging or charging
+    config_status = Status.PASSIVE
+    for bat in batteries:
+        if bat.Status == Status.CHARGING:
+            config_status = Status.CHARGING
+            break
+        elif bat.Status == Status.DISCHARGING:
+            config_status = Status.DISCHARGING
+            break
+
+    # construct and return configuration
+    return Configuration(calc_time(batteries, config_status), calc_percentage(batteries), config_status)
+
+
+def get_status(bat_name: str) -> Status:
+    raw_status = Path(f"{PSEUDO_FS_PATH}{bat_name}/status").open().read().strip()
+    if raw_status == "Unknown" or raw_status == "Full":
+        return Status.PASSIVE
+    elif raw_status == "Charging":
+        return Status.CHARGING
+    elif raw_status == "Discharging":
+        return Status.DISCHARGING
+    else:
+        raise ValueError
+
+
+def get_current_charge(bat_name: str) -> int:
+    return int(Path(f"{PSEUDO_FS_PATH}{bat_name}/{CURRENT_CHARGE_FILENAME}").open().read().strip())
+
+
+def get_max_charge(bat_name: str) -> int:
+    return int(Path(f"{PSEUDO_FS_PATH}{bat_name}/{MAX_CHARGE_FILENAME}").open().read().strip())
+
+
+def get_power_draw(bat_name: str) -> int:
+    return int(Path(f"{PSEUDO_FS_PATH}{bat_name}/{POWER_DRAW_FILENAME}").open().read().strip())
+
+
+def calc_time(batteries: list, status: Status) -> int:
+    if status == Status.PASSIVE:
+        return 0
+    # get total metrics on configuration
+    total_current_charge = sum([bat.current_charge for bat in batteries])
+    total_max_charge = sum([bat.max_charge for bat in batteries])
+    total_power_draw = sum([bat.power_draw for bat in batteries])
+    if total_power_draw == 0:
+        return 0
+    if status == Status.DISCHARGING:
+        # return number of seconds until empty
+        return (total_current_charge / total_power_draw) * 3600
+    elif status == Status.CHARGING:
+        # return number of seconds until (optionally relatively) charged
+        return (((total_max_charge * TLP_THRESHOLD_PERCENTAGE) - total_current_charge) / total_power_draw) * 3600
+
+
+def calc_percentage(batteries: list) -> float:
+    total_max_charge = sum([bat.max_charge for bat in batteries])
+    total_current_charge = sum([bat.current_charge for bat in batteries])
+    return total_current_charge / total_max_charge
+
+
+def calc_display_time(status: Status, seconds: int) -> str:
+    hours = int(seconds // 3600)
+    minutes = int((seconds % 3600) / 60)
+    if status == Status.PASSIVE:
+        return ""
+
+    # assume charging initially if not passive
+    direction = "+"
+    if status == Status.DISCHARGING:
+        direction = "-"
+
+    # format output digitally, e.g. (+0:09)
+    return f" ({direction}{hours}:{minutes:02})"
+
+
+def print_status(config: Configuration):
+    print(f"{config.percentage:{PERCENTAGE_FORMAT}}{calc_display_time(config.status, config.time_to_completion)}")
+
+
+def main():
+    print_status(get_configuration())
+
+
+if __name__ == '__main__':
+    main()
diff --git a/private_dot_config/i3blocks/battery/README.md b/private_dot_config/i3blocks/battery/README.md
new file mode 100644
index 0000000..5f14bdb
--- /dev/null
+++ b/private_dot_config/i3blocks/battery/README.md
@@ -0,0 +1,20 @@
+# battery
+
+Show battery info.
+
+![](battery.png)
+
+# Dependencies
+
+* `acpi`
+
+# Config
+
+```
+[battery]
+command=$SCRIPT_DIR/battery
+interval=30
+LABEL=BAT
+#LABEL=⚡
+#BAT_NUMBER=0
+```
diff --git a/private_dot_config/i3blocks/battery/battery.png b/private_dot_config/i3blocks/battery/battery.png
new file mode 100644
index 0000000..3bf89ba
--- /dev/null
+++ b/private_dot_config/i3blocks/battery/battery.png
Binary files differ
diff --git a/private_dot_config/i3blocks/battery/executable_battery b/private_dot_config/i3blocks/battery/executable_battery
new file mode 100644
index 0000000..fe64835
--- /dev/null
+++ b/private_dot_config/i3blocks/battery/executable_battery
@@ -0,0 +1,98 @@
+#!/usr/bin/env perl
+#
+# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
+# Copyright 2014 Vivien Didelot <vivien@didelot.org>
+#
+# Slightly modified by Adrià Vilanova
+#
+# Licensed under the terms of the GNU GPL v3, or any later version.
+#
+# This script is meant to use with i3blocks. It parses the output of the "acpi"
+# command (often provided by a package of the same name) to read the status of
+# the battery, and eventually its remaining time (to full charge or discharge).
+#
+# The color will gradually change for a percentage below 85%, and the urgency
+# (exit code 33) is set if there is less that 5% remaining.
+
+use strict;
+use warnings;
+use utf8;
+
+my $acpi;
+my $status;
+my $percent;
+my $ac_adapt;
+my $full_text;
+my $short_text;
+my $bat_number = $ENV{BAT_NUMBER} || 0;
+my $label = $ENV{LABEL} || "";
+
+# read the first line of the "acpi" command output
+open (ACPI, "acpi -b 2>/dev/null| grep 'Battery $bat_number' |") or die;
+$acpi = <ACPI>;
+close(ACPI);
+
+# fail on unexpected output
+if (not defined($acpi)) {
+    # don't print anything to stderr if there is no battery
+    exit(0);
+}
+elsif ($acpi !~ /: ([\w\s]+), (\d+)%/) {
+	die "$acpi\n";
+}
+
+$status = $1;
+$percent = $2;
+$full_text = "$label";
+
+if ($status eq 'Discharging') {
+	$full_text .= '⚡';
+} elsif ($status eq 'Charging') {
+	$full_text .= '🔌';
+} elsif ($status eq 'Unknown') {
+	open (AC_ADAPTER, "acpi -a |") or die;
+	$ac_adapt = <AC_ADAPTER>;
+	close(AC_ADAPTER);
+
+	if ($ac_adapt =~ /: ([\w-]+)/) {
+		$ac_adapt = $1;
+
+		if ($ac_adapt eq 'on-line') {
+			$full_text .= '🔌';
+		} elsif ($ac_adapt eq 'off-line') {
+			$full_text .= '⚡';
+		}
+	}
+}
+
+$full_text .= "$percent%";
+
+$short_text = $full_text;
+
+if ($acpi =~ /(\d\d:\d\d):/) {
+	$full_text .= " ($1)";
+}
+
+# print text
+print "$full_text\n";
+print "$short_text\n";
+
+# consider color and urgent flag only on discharge
+if ($status eq 'Discharging') {
+
+	if ($percent < 20) {
+		print "#FF0000\n";
+	} elsif ($percent < 40) {
+		print "#FFAE00\n";
+	} elsif ($percent < 60) {
+		print "#FFF600\n";
+	} elsif ($percent < 85) {
+		print "#A8FF00\n";
+	}
+
+	if ($percent < 5) {
+		exit(33);
+	}
+}
+
+exit(0);
diff --git a/private_dot_config/i3blocks/battery/i3blocks.conf b/private_dot_config/i3blocks/battery/i3blocks.conf
new file mode 100644
index 0000000..18b3968
--- /dev/null
+++ b/private_dot_config/i3blocks/battery/i3blocks.conf
@@ -0,0 +1,6 @@
+[battery]
+command=$SCRIPT_DIR/battery
+interval=30
+LABEL=BAT
+#LABEL=⚡
+#BAT_NUMBER=0
diff --git a/private_dot_config/i3blocks/battery2/LICENSE b/private_dot_config/i3blocks/battery2/LICENSE
new file mode 100644
index 0000000..8cdb845
--- /dev/null
+++ b/private_dot_config/i3blocks/battery2/LICENSE
@@ -0,0 +1,340 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    {description}
+    Copyright (C) {year}  {fullname}
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  {signature of Ty Coon}, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+
diff --git a/private_dot_config/i3blocks/battery2/README.md b/private_dot_config/i3blocks/battery2/README.md
new file mode 100644
index 0000000..6a286b7
--- /dev/null
+++ b/private_dot_config/i3blocks/battery2/README.md
@@ -0,0 +1,28 @@
+# battery2
+
+Show the current status of your battery.
+
+![](images/full.png)
+
+![](images/charging.png)
+
+![](images/unplugged.png)
+
+![](images/unknown.png)
+
+![](images/nobattery.png)
+
+# Dependencies
+
+fonts-font-awesome, acpi, python3
+
+# Installation
+
+To use with i3blocks, copy the blocklet configuration in the given `i3blocks.conf` into your i3blocks configuration file, the recommended config is
+
+```INI
+[battery2]
+command=$SCRIPT_DIR/battery2
+markup=pango
+interval=30
+```
diff --git a/private_dot_config/i3blocks/battery2/executable_battery2 b/private_dot_config/i3blocks/battery2/executable_battery2
new file mode 100644
index 0000000..4898d3c
--- /dev/null
+++ b/private_dot_config/i3blocks/battery2/executable_battery2
@@ -0,0 +1,106 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2016 James Murphy
+# Licensed under the GPL version 2 only
+#
+# A battery indicator blocklet script for i3blocks
+
+from subprocess import check_output
+import os
+import re
+
+config = dict(os.environ)
+status = check_output(['acpi'], universal_newlines=True)
+
+if not status:
+    # stands for no battery found
+    color = config.get("color_10", "red")
+    fulltext = "<span color='{}'><span font='FontAwesome'>\uf00d \uf240</span></span>".format(color)
+    percentleft = 100
+else:
+    # if there is more than one battery in one laptop, the percentage left is
+    # available for each battery separately, although state and remaining
+    # time for overall block is shown in the status of the first battery
+    batteries = status.split("\n")
+    state_batteries=[]
+    commasplitstatus_batteries=[]
+    percentleft_batteries=[]
+    time = ""
+    for battery in batteries:
+        if battery!='':
+            state_batteries.append(battery.split(": ")[1].split(", ")[0])
+            commasplitstatus = battery.split(", ")
+            if not time:
+                time = commasplitstatus[-1].strip()
+                # check if it matches a time
+                time = re.match(r"(\d+):(\d+)", time)
+                if time:
+                    time = ":".join(time.groups())
+                    timeleft = " ({})".format(time)
+                else:
+                    timeleft = ""
+
+            p = int(commasplitstatus[1].rstrip("%\n"))
+            if p>0:
+                percentleft_batteries.append(p)
+            commasplitstatus_batteries.append(commasplitstatus)
+    state = state_batteries[0]
+    commasplitstatus = commasplitstatus_batteries[0]
+    if percentleft_batteries:
+        percentleft = int(sum(percentleft_batteries)/len(percentleft_batteries))
+    else:
+        percentleft = 0
+
+    # stands for charging
+    color = config.get("color_charging", "yellow")
+    FA_LIGHTNING = "<span color='{}'><span font='FontAwesome'>\uf0e7</span></span>".format(color)
+
+    # stands for plugged in
+    FA_PLUG = "<span font='FontAwesome'>\uf1e6</span>"
+
+    # stands for using battery
+    FA_BATTERY = "<span font='FontAwesome'>\uf240</span>"
+
+    # stands for unknown status of battery
+    FA_QUESTION = "<span font='FontAwesome'>\uf128</span>"
+
+
+    if state == "Discharging":
+        fulltext = FA_BATTERY + " "
+    elif state == "Full":
+        fulltext = FA_PLUG + " "
+        timeleft = ""
+    elif state == "Unknown":
+        fulltext = FA_QUESTION + " " + FA_BATTERY + " "
+        timeleft = ""
+    else:
+        fulltext = FA_LIGHTNING + " " + FA_PLUG + " "
+
+    def color(percent):
+        if percent < 10:
+            # exit code 33 will turn background red
+            return config.get("color_10", "#FFFFFF")
+        if percent < 20:
+            return config.get("color_20", "#FF3300")
+        if percent < 30:
+            return config.get("color_30", "#FF6600")
+        if percent < 40:
+            return config.get("color_40", "#FF9900")
+        if percent < 50:
+            return config.get("color_50", "#FFCC00")
+        if percent < 60:
+            return config.get("color_60", "#FFFF00")
+        if percent < 70:
+            return config.get("color_70", "#FFFF33")
+        if percent < 80:
+            return config.get("color_80", "#FFFF66")
+        return config.get("color_full", "#FFFFFF")
+
+    form =  '<span color="{}">{}%</span>'
+    fulltext += form.format(color(percentleft), percentleft)
+    fulltext += timeleft
+
+print(fulltext)
+print(fulltext)
+if percentleft < 10:
+    exit(33)
diff --git a/private_dot_config/i3blocks/battery2/i3blocks.conf b/private_dot_config/i3blocks/battery2/i3blocks.conf
new file mode 100644
index 0000000..74aacd4
--- /dev/null
+++ b/private_dot_config/i3blocks/battery2/i3blocks.conf
@@ -0,0 +1,4 @@
+[battery2]
+command=$SCRIPT_DIR/battery2
+markup=pango
+interval=30
diff --git a/private_dot_config/i3blocks/battery2/images/charging.png b/private_dot_config/i3blocks/battery2/images/charging.png
new file mode 100644
index 0000000..bf616f1
--- /dev/null
+++ b/private_dot_config/i3blocks/battery2/images/charging.png
Binary files differ
diff --git a/private_dot_config/i3blocks/battery2/images/full.png b/private_dot_config/i3blocks/battery2/images/full.png
new file mode 100644
index 0000000..f585743
--- /dev/null
+++ b/private_dot_config/i3blocks/battery2/images/full.png
Binary files differ
diff --git a/private_dot_config/i3blocks/battery2/images/nobattery.png b/private_dot_config/i3blocks/battery2/images/nobattery.png
new file mode 100644
index 0000000..be7ad1b
--- /dev/null
+++ b/private_dot_config/i3blocks/battery2/images/nobattery.png
Binary files differ
diff --git a/private_dot_config/i3blocks/battery2/images/unknown.png b/private_dot_config/i3blocks/battery2/images/unknown.png
new file mode 100644
index 0000000..fa03c69
--- /dev/null
+++ b/private_dot_config/i3blocks/battery2/images/unknown.png
Binary files differ
diff --git a/private_dot_config/i3blocks/battery2/images/unplugged.png b/private_dot_config/i3blocks/battery2/images/unplugged.png
new file mode 100644
index 0000000..3b8e02e
--- /dev/null
+++ b/private_dot_config/i3blocks/battery2/images/unplugged.png
Binary files differ
diff --git a/private_dot_config/i3blocks/batterybar/LICENSE b/private_dot_config/i3blocks/batterybar/LICENSE
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/private_dot_config/i3blocks/batterybar/LICENSE
@@ -0,0 +1,339 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/private_dot_config/i3blocks/batterybar/README.md b/private_dot_config/i3blocks/batterybar/README.md
new file mode 100644
index 0000000..d22b918
--- /dev/null
+++ b/private_dot_config/i3blocks/batterybar/README.md
@@ -0,0 +1,43 @@
+# batterybar
+
+Display the battery level in a set of five unicode squares (U+25A0).
+
+![](screenshot.png)
+	
+It also changes color for more accuracy and to distinguish between charging, 
+discharging, charged, and AC statuses.
+
+You can also specify your own set of colors.
+	
+Left-clicking briefly shows the battery level in percent.
+	
+# Dependencies
+
+* acpi
+
+# Installation
+
+* Copy the batterybar script into your directory of choice, e.g. ~/.i3blocks/
+* Give it execution permission (`chmod +x batterybar`)
+* Add the following blocket to your i3blocks.conf:
+
+```ini
+[batterybar]
+command=$SCRIPT_DIR/batterybar
+label=bat:
+interval=5
+markup=pango
+min_width=bat: ■■■■■
+# Discharging colors low to high
+#C1=#FF0027
+#C2=#FF3B05
+#C3=#FFB923
+#C4=#FFD000
+#C5=#E4FF00
+#C6=#ADFF00
+#C7=#6DFF00
+#C8=#10BA00
+#CHARGING_COLOR=#00AFE3
+#FULL_COLOR=#FFFFFF
+#AC_COLOR=#535353
+```
diff --git a/private_dot_config/i3blocks/batterybar/executable_batterybar b/private_dot_config/i3blocks/batterybar/executable_batterybar
new file mode 100644
index 0000000..0308aba
--- /dev/null
+++ b/private_dot_config/i3blocks/batterybar/executable_batterybar
@@ -0,0 +1,137 @@
+#!/usr/bin/env bash
+#  batterybar; displays battery percentage as a bar on i3blocks
+#  
+#  Copyright 2015 Keftaa <adnan.37h@gmail.com>
+#  
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#  
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#  
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+#  MA 02110-1301, USA.
+#  
+#  
+readarray -t output <<< $(acpi battery)
+battery_count=${#output[@]}
+
+for line in "${output[@]}";
+do
+    percentages+=($(echo "$line" | grep -o -m1 '[0-9]\{1,3\}%' | tr -d '%'))
+    statuses+=($(echo "$line" | egrep -o -m1 'Discharging|Charging|AC|Full|Unknown'))
+    remaining=$(echo "$line" | egrep -o -m1 '[0-9][0-9]:[0-9][0-9]')
+    if [[ -n $remaining ]]; then
+        remainings+=(" ($remaining)")
+    else 
+        remainings+=("")
+    fi
+done
+
+squares="■"
+
+#There are 8 colors that reflect the current battery percentage when 
+#discharging
+dis_colors=("${C1:-#FF0027}" "${C2:-#FF3B05}" "${C3:-#FFB923}" 
+            "${C4:-#FFD000}" "${C5:-#E4FF00}" "${C6:-#ADFF00}"
+			"${C7:-#6DFF00}" "${C8:-#10BA00}") 
+charging_color="${CHARGING_COLOR:-#00AFE3}"
+full_color="${FULL_COLOR:-#FFFFFF}"
+ac_color="${AC_COLOR:-#535353}"
+
+
+while getopts 1:2:3:4:5:6:7:8:c:f:a:h opt; do
+    case "$opt" in
+        1) dis_colors[0]="$OPTARG";;
+        2) dis_colors[1]="$OPTARG";;
+        3) dis_colors[2]="$OPTARG";;
+        4) dis_colors[3]="$OPTARG";;
+        5) dis_colors[4]="$OPTARG";;
+        6) dis_colors[5]="$OPTARG";;
+        7) dis_colors[6]="$OPTARG";;
+        8) dis_colors[7]="$OPTARG";;
+        c) charging_color="$OPTARG";;
+        f) full_color="$OPTARG";;
+        a) ac_color="$OPTARG";;
+        h) printf "Usage: batterybar [OPTION] color
+        When discharging, there are 8 [1-8] levels colors.
+        You can specify custom colors, for example:
+        
+        batterybar -1 red -2 \"#F6F6F6\" -8 green
+        
+        You can also specify the colors for the charging, AC and
+        charged states:
+        
+        batterybar -c green -f white -a \"#EEEEEE\"\n";
+        exit 0;
+    esac
+done
+
+end=$(($battery_count - 1))
+for i in $(seq 0 $end);
+do
+    if (( percentages[$i] > 0 && percentages[$i] < 20  )); then
+        squares="■"
+    elif (( percentages[$i] >= 20 && percentages[$i] < 40 )); then
+        squares="■■"
+    elif (( percentages[$i] >= 40 && percentages[$i] < 60 )); then
+        squares="■■■"
+    elif (( percentages[$i] >= 60 && percentages[$i] < 80 )); then
+        squares="■■■■"
+    elif (( percentages[$i] >=80 )); then
+        squares="■■■■■"
+    fi
+
+    if [[ "${statuses[$i]}" = "Unknown" ]]; then
+        squares="<sup>?</sup>$squares"
+    fi
+
+    case "${statuses[$i]}" in
+    "Charging")
+        color="$charging_color"
+    ;;
+    "Full")
+        color="$full_color"
+    ;;
+    "AC")
+        color="$ac_color"
+    ;;
+    "Discharging"|"Unknown")
+        if (( percentages[$i] >= 0 && percentages[$i] < 10 )); then
+            color="${dis_colors[0]}"
+        elif (( percentages[$i] >= 10 && percentages[$i] < 20 )); then
+            color="${dis_colors[1]}"
+        elif (( percentages[$i] >= 20 && percentages[$i] < 30 )); then
+            color="${dis_colors[2]}"
+        elif (( percentages[$i] >= 30 && percentages[$i] < 40 )); then
+            color="${dis_colors[3]}"
+        elif (( percentages[$i] >= 40 && percentages[$i] < 60 )); then
+            color="${dis_colors[4]}"
+        elif (( percentages[$i] >= 60 && percentages[$i] < 70 )); then
+            color="${dis_colors[5]}"
+        elif (( percentages[$i] >= 70 && percentages[$i] < 80 )); then
+            color="${dis_colors[6]}"
+        elif (( percentages[$i] >= 80 )); then
+            color="${dis_colors[7]}"
+        fi
+    ;;
+    esac
+
+    # Print Battery number if there is more than one
+    if (( $end > 0 )) ; then 
+        message="$message $(($i + 1)):" 
+    fi
+
+    if [[ "$BLOCK_BUTTON" -eq 1 ]]; then 
+        message="$message ${statuses[$i]} <span foreground=\"$color\">${percentages[$i]}%${remainings[i]}</span>"
+    fi
+        message="$message <span foreground=\"$color\">$squares</span>" 
+done
+
+echo $message
diff --git a/private_dot_config/i3blocks/batterybar/screenshot.png b/private_dot_config/i3blocks/batterybar/screenshot.png
new file mode 100644
index 0000000..d55c221
--- /dev/null
+++ b/private_dot_config/i3blocks/batterybar/screenshot.png
Binary files differ
diff --git a/private_dot_config/i3blocks/config b/private_dot_config/i3blocks/config
new file mode 100644
index 0000000..342fde7
--- /dev/null
+++ b/private_dot_config/i3blocks/config
@@ -0,0 +1,56 @@
+# @source: https://github.com/vivien/i3blocks-contrib, commit 9d66d81da8d521941a349da26457f4965fd6fcbd
+
+command=$SCRIPT_DIR/$BLOCK_NAME/$BLOCK_NAME
+separator_block_width=15
+markup=none
+
+[volume-pipewire]
+interval=persist
+signal=10
+SUBSCRIBE=1
+
+[memory]
+PERCENT=false
+label=🍫
+separator=true
+interval=30
+
+[iface]
+color=#00FF00
+interval=10
+separator=false
+
+[wifi]
+INTERFACE=wlp1s0
+label=📡
+interval=10
+separator=false
+
+[bandwidth]
+interval=5
+INLABEL=
+OUTLABEL=
+
+[cpu_usage2]
+markup=pango
+interval=persist
+min_width=📟 99%
+LABEL=📟
+DECIMALS=0
+
+#[load_average]
+#label=LOAD
+#interval=10
+
+[battery]
+BAT_NUMBER=1
+interval=30
+
+[time]
+command=date '+%m-%d %H:%M:%S'
+interval=1
+
+[mediaplayer]
+instance=%any
+interval=5
+signal=10
diff --git a/private_dot_config/i3blocks/cpu_usage/README.md b/private_dot_config/i3blocks/cpu_usage/README.md
new file mode 100644
index 0000000..9077c5d
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage/README.md
@@ -0,0 +1,25 @@
+# cpu_usage
+
+Show CPU usage.
+
+![](cpu_usage.png)
+
+# Dependencies
+
+* `mpstat`
+
+# Config
+
+```
+[cpu_usage]
+command=$SCRIPT_DIR/cpu_usage
+interval=10
+LABEL=CPU 
+#min_width=CPU: 100.00%
+#T_WARN=50
+#T_CRIT=80
+#DECIMALS=2
+#COLOR_NORMAL=#EBDBB2
+#COLOR_WARN=#FFFC00
+#COLOR_CRIT=#FF0000
+```
diff --git a/private_dot_config/i3blocks/cpu_usage/cpu_usage.png b/private_dot_config/i3blocks/cpu_usage/cpu_usage.png
new file mode 100644
index 0000000..6b6f577
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage/cpu_usage.png
Binary files differ
diff --git a/private_dot_config/i3blocks/cpu_usage/executable_cpu_usage b/private_dot_config/i3blocks/cpu_usage/executable_cpu_usage
new file mode 100644
index 0000000..b298a97
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage/executable_cpu_usage
@@ -0,0 +1,66 @@
+#!/usr/bin/env perl
+#
+# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
+# Copyright 2014 Vivien Didelot <vivien@didelot.org>
+# Copyright 2014 Andreas Guldstrand <andreas.guldstrand@gmail.com>
+#
+# Licensed under the terms of the GNU GPL v3, or any later version.
+
+use strict;
+use warnings;
+use utf8;
+use Getopt::Long;
+
+# default values
+my $t_warn = $ENV{T_WARN} // 50;
+my $t_crit = $ENV{T_CRIT} // 80;
+my $cpu_usage = -1;
+my $decimals = $ENV{DECIMALS} // 2;
+my $label = $ENV{LABEL} // "";
+my $color_normal = $ENV{COLOR_NORMAL} // "#EBDBB2";
+my $color_warn = $ENV{COLOR_WARN} // "#FFFC00";
+my $color_crit = $ENV{COLOR_CRIT} // "#FF0000";
+
+sub help {
+    print "Usage: cpu_usage [-w <warning>] [-c <critical>] [-d <decimals>]\n";
+    print "-w <percent>: warning threshold to become yellow\n";
+    print "-c <percent>: critical threshold to become red\n";
+    print "-d <decimals>:  Use <decimals> decimals for percentage (default is $decimals) \n"; 
+    exit 0;
+}
+
+GetOptions("help|h" => \&help,
+           "w=i"    => \$t_warn,
+           "c=i"    => \$t_crit,
+           "d=i"    => \$decimals,
+);
+
+# Get CPU usage
+$ENV{LC_ALL}="en_US"; # if mpstat is not run under en_US locale, things may break, so make sure it is
+open (MPSTAT, 'mpstat 1 1 |') or die;
+while (<MPSTAT>) {
+    if (/^.*\s+(\d+\.\d+)[\s\x00]?$/) {
+        $cpu_usage = 100 - $1; # 100% - %idle
+        last;
+    }
+}
+close(MPSTAT);
+
+$cpu_usage eq -1 and die 'Can\'t find CPU information';
+
+# Print short_text, full_text
+print "${label}";
+printf "%.${decimals}f%%\n", $cpu_usage;
+print "${label}";
+printf "%.${decimals}f%%\n", $cpu_usage;
+
+# Print color, if needed
+if ($cpu_usage >= $t_crit) {
+    print "${color_crit}\n";
+} elsif ($cpu_usage >= $t_warn) {
+    print "${color_warn}\n";
+} else {
+    print "${color_normal}\n";
+}
+
+exit 0;
diff --git a/private_dot_config/i3blocks/cpu_usage/i3blocks.conf b/private_dot_config/i3blocks/cpu_usage/i3blocks.conf
new file mode 100644
index 0000000..8936c2f
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage/i3blocks.conf
@@ -0,0 +1,11 @@
+[cpu_usage]
+command=$SCRIPT_DIR/cpu_usage
+interval=10
+LABEL=CPU 
+#min_width=CPU: 100.00%
+#T_WARN=50
+#T_CRIT=80
+#DECIMALS=2
+#COLOR_NORMAL=#EBDBB2
+#COLOR_WARN=#FFFC00
+#COLOR_CRIT=#FF0000
diff --git a/private_dot_config/i3blocks/cpu_usage2/Makefile b/private_dot_config/i3blocks/cpu_usage2/Makefile
new file mode 100644
index 0000000..02aeaaf
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage2/Makefile
@@ -0,0 +1,6 @@
+P=cpu_usage2
+OBJECTS=
+CFLAGS=-g -Wall -Werror -O2 -std=gnu11
+LDLIBS=
+
+$(P): $(OBJECTS)
diff --git a/private_dot_config/i3blocks/cpu_usage2/README.md b/private_dot_config/i3blocks/cpu_usage2/README.md
new file mode 100644
index 0000000..9be688f
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage2/README.md
@@ -0,0 +1,21 @@
+# cpu_usage2
+
+Show CPU usage.
+This is a C version of the cpu_usage blocklet.
+
+![](cpu_usage2.png)
+
+# Config
+
+```
+[cpu_usage2]
+command=$SCRIPT_DIR/cpu_usage2
+markup=pango
+interval=persist
+#min_width=CPU 100.00%
+#REFRESH_TIME=1
+#LABEL=CPU 
+#WARN_PERCENT=50
+#CRIT_PERCENT=80
+#DECIMALS=2
+```
diff --git a/private_dot_config/i3blocks/cpu_usage2/cpu_usage2.c b/private_dot_config/i3blocks/cpu_usage2/cpu_usage2.c
new file mode 100644
index 0000000..7270903
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage2/cpu_usage2.c
@@ -0,0 +1,135 @@
+// Licensed under the terms of the GNU GPL v3, or any later version.
+//
+// Copyright 2019 Nolan Leake <nolan@sigbus.net>
+//
+// Loosely based on bandwidth2 (originally by Guillaume Coré <fridim@onfi.re>)
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <unistd.h>
+#include <getopt.h>
+
+#define RED "#FF7373"
+#define ORANGE "#FFA500"
+
+typedef unsigned long long int ulli;
+
+void usage(char *argv[])
+{
+  printf("Usage: %s "
+         "[-t seconds] [-w %%age] [-c %%age] [-d decimals] [-l label] [-h]\n",
+         argv[0]);
+  printf("\n");
+  printf("-t seconds\trefresh time (default is 1)\n");
+  printf("-w %%\tSet warning (color orange) for cpu usage. (default: none)\n");
+  printf("-c %%\tSet critical (color red) for cpu usage. (default: none)\n");
+  printf("-d number\tNumber of decimal places for percentage (default: 2)\n");
+  printf("-l label\tLabel to print before the cpu usage (default: CPU)\n");
+  printf("-h \t\tthis help\n");
+  printf("\n");
+}
+
+void display(const char *label, double used,
+             int const warning, int const critical, int const decimals)
+{
+  if (critical != 0 && used > critical) {
+    printf("%s<span color='%s'>", label, RED);
+  } else if (warning != 0 && used > warning) {
+    printf("%s<span color='%s'>", label, ORANGE);
+  } else {
+    printf("%s<span>", label);
+  }
+
+  printf("%*.*lf%%</span>\n", decimals + 3 + 1, decimals, used);
+}
+
+ulli get_usage(ulli *used_jiffies)
+{
+  FILE *fd = fopen("/proc/stat", "r");
+  ulli user, nice, sys, idle, iowait, irq, sirq, steal, guest, nguest;
+
+  if (!fd) {
+    perror("Couldn't open /proc/stat\n");
+    exit(EXIT_FAILURE);
+  }
+  if (fscanf(fd, "cpu  %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu",
+             &user, &nice, &sys, &idle, &iowait, &irq, &sirq,
+             &steal, &guest, &nguest) != 10) {
+    perror("Couldn't read jiffies from /proc/stat\n");
+    exit(EXIT_FAILURE);
+  }
+  fclose(fd);
+
+  *used_jiffies = user + nice + sys + irq + sirq + steal + guest + nguest;
+  return *used_jiffies + idle + iowait;
+}
+
+int main(int argc, char *argv[])
+{
+  int warning = 50, critical = 80, t = 1, decimals = 2;
+  char *label = "CPU ";
+  int c;
+  char *envvar = NULL;
+
+  envvar = getenv("REFRESH_TIME");
+  if (envvar)
+    t = atoi(envvar);
+  envvar = getenv("WARN_PERCENT");
+  if (envvar)
+    warning = atoi(envvar);
+  envvar = getenv("CRIT_PERCENT");
+  if (envvar)
+    critical = atoi(envvar);
+  envvar = getenv("DECIMALS");
+  if (envvar)
+    decimals = atoi(envvar);
+  envvar = getenv("LABEL");
+  if (envvar)
+    label = envvar;
+
+  while (c = getopt(argc, argv, "ht:w:c:d:l:"), c != -1) {
+    switch (c) {
+    case 't':
+      t = atoi(optarg);
+      break;
+    case 'w':
+      warning = atoi(optarg);
+      break;
+    case 'c':
+      critical = atoi(optarg);
+      break;
+    case 'd':
+      decimals = atoi(optarg);
+      break;
+    case 'l':
+      label = optarg;
+      break;
+    case 'h':
+      usage(argv);
+      return EXIT_SUCCESS;
+    }
+  }
+
+  ulli old_total;
+  ulli old_used;
+
+  old_total = get_usage(&old_used);
+
+  while (1) {
+    ulli used;
+    ulli total;
+
+    sleep(t);
+    total = get_usage(&used);
+
+    display(label, 100.0D * (used - old_used) / (total - old_total),
+            warning, critical, decimals);
+    fflush(stdout);
+    old_total = total;
+    old_used = used;
+  }
+
+  return EXIT_SUCCESS;
+}
diff --git a/private_dot_config/i3blocks/cpu_usage2/cpu_usage2.png b/private_dot_config/i3blocks/cpu_usage2/cpu_usage2.png
new file mode 100644
index 0000000..6b6f577
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage2/cpu_usage2.png
Binary files differ
diff --git a/private_dot_config/i3blocks/cpu_usage2/dot_gitignore b/private_dot_config/i3blocks/cpu_usage2/dot_gitignore
new file mode 100644
index 0000000..1cf1cd5
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage2/dot_gitignore
@@ -0,0 +1 @@
+cpu_usage2
diff --git a/private_dot_config/i3blocks/cpu_usage2/executable_cpu_usage2 b/private_dot_config/i3blocks/cpu_usage2/executable_cpu_usage2
new file mode 100644
index 0000000..caf605a
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage2/executable_cpu_usage2
Binary files differ
diff --git a/private_dot_config/i3blocks/cpu_usage2/i3blocks.conf b/private_dot_config/i3blocks/cpu_usage2/i3blocks.conf
new file mode 100644
index 0000000..1f538ce
--- /dev/null
+++ b/private_dot_config/i3blocks/cpu_usage2/i3blocks.conf
@@ -0,0 +1,10 @@
+[cpu_usage2]
+command=$SCRIPT_DIR/cpu_usage2
+markup=pango
+interval=persist
+#min_width=CPU 100.00%
+#REFRESH_TIME=1
+#LABEL=CPU 
+#WARN_PERCENT=50
+#CRIT_PERCENT=80
+#DECIMALS=2
diff --git a/private_dot_config/i3blocks/dot_gitignore b/private_dot_config/i3blocks/dot_gitignore
new file mode 100644
index 0000000..1377554
--- /dev/null
+++ b/private_dot_config/i3blocks/dot_gitignore
@@ -0,0 +1 @@
+*.swp
diff --git a/private_dot_config/i3blocks/iface/README.md b/private_dot_config/i3blocks/iface/README.md
new file mode 100644
index 0000000..06e1e10
--- /dev/null
+++ b/private_dot_config/i3blocks/iface/README.md
@@ -0,0 +1,16 @@
+# iface
+
+Show network interface status.
+If the instance is not specified, it uses the interface for the default route.
+Specify ipv6, ipv4, or either by setting `ADDRESS_FAMILY` to
+`inet6`, `inet`, or `inet6?`.
+
+If an invalid interface is specified, nothing is printed.
+
+
+![](iface-up.png)
+![](iface-down.png)
+
+# Config
+
+See `./i3blocks.conf` for an example configuration.
\ No newline at end of file
diff --git a/private_dot_config/i3blocks/iface/executable_iface b/private_dot_config/i3blocks/iface/executable_iface
new file mode 100644
index 0000000..8ee1061
--- /dev/null
+++ b/private_dot_config/i3blocks/iface/executable_iface
@@ -0,0 +1,89 @@
+#!/usr/bin/env bash
+# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
+# Copyright (C) 2014 Alexander Keller <github@nycroth.com>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+#------------------------------------------------------------------------
+
+# Use the provided interface, otherwise the device used for the default route.
+IF="${IFACE:-$BLOCK_INSTANCE}"
+IF="${IF:-$(ip route | awk '/^default/ { print $5 ; exit }')}"
+
+# Exit if there is no default route
+[[ -z "$IF" ]] && exit
+
+#------------------------------------------------------------------------
+
+# As per #36 -- It is transparent: e.g. if the machine has no battery or wireless
+# connection (think desktop), the corresponding block should not be displayed.
+[[ ! -d /sys/class/net/${IF} ]] && exit
+
+#------------------------------------------------------------------------
+
+AF=${ADDRESS_FAMILY:-inet6?}
+LABEL="${LABEL:-}"
+
+for flag in "$1" "$2"; do
+  case "$flag" in
+    -4)
+      AF=inet ;;
+    -6)
+      AF=inet6 ;;
+    -L)
+      if [[ "$IF" = "" ]]; then
+        LABEL="iface"
+      else
+        LABEL="$IF:"
+      fi ;;
+  esac
+done
+
+if [[ "$IF" = "" ]] || [[ "$(cat /sys/class/net/$IF/operstate)" = 'down' ]]; then
+  echo "${LABEL} down" # full text
+  echo "${LABEL} down" # short text
+  echo \#FF0000 # color
+  exit
+fi
+
+# if no interface is found, use the first device with a global scope
+IPADDR=$(ip addr show $IF | perl -n -e "/$AF ([^ \/]+).* scope global/ && print \$1 and exit")
+
+case $BLOCK_BUTTON in
+  3) echo -n "$IPADDR" | xclip -q -se c ;;
+esac
+
+if [[ "${display_wifi_name}" == "1" ]];
+then
+  # try to guess the wifi name
+  if command -v iw > /dev/null && iw $IF info > /dev/null 2>&1;
+  then
+    WIFI_NAME=$(iw $IF info | grep -Po '(?<=ssid ).*' | tr -d " \t\n\r")
+
+    if [[ $BLOCK_BUTTON -eq 1 ]];
+    then
+      message="$LABEL $WIFI_NAME ($IPADDR)"
+    else
+      message="$LABEL $WIFI_NAME"
+    fi
+  else
+    message="$LABEL $IPADDR"
+  fi
+else
+  message="$LABEL $IPADDR"
+fi
+
+#------------------------------------------------------------------------
+
+echo "$message"
diff --git a/private_dot_config/i3blocks/iface/i3blocks.conf b/private_dot_config/i3blocks/iface/i3blocks.conf
new file mode 100644
index 0000000..d7e3b57
--- /dev/null
+++ b/private_dot_config/i3blocks/iface/i3blocks.conf
@@ -0,0 +1,9 @@
+[iface]
+command=$SCRIPT_DIR/iface
+#LABEL=wlan0:
+#IFACE=wlan0
+#ADDRESS_FAMILY=inet6?
+color=#00FF00
+interval=10
+# set this to 1 to display the name of the connected WIFI interface instead of the IP address.
+display_wifi_name=0
diff --git a/private_dot_config/i3blocks/iface/iface-down.png b/private_dot_config/i3blocks/iface/iface-down.png
new file mode 100644
index 0000000..33a0a72
--- /dev/null
+++ b/private_dot_config/i3blocks/iface/iface-down.png
Binary files differ
diff --git a/private_dot_config/i3blocks/iface/iface-up.png b/private_dot_config/i3blocks/iface/iface-up.png
new file mode 100644
index 0000000..4ffade6
--- /dev/null
+++ b/private_dot_config/i3blocks/iface/iface-up.png
Binary files differ
diff --git a/private_dot_config/i3blocks/load_average/README.md b/private_dot_config/i3blocks/load_average/README.md
new file mode 100644
index 0000000..7d7f632
--- /dev/null
+++ b/private_dot_config/i3blocks/load_average/README.md
@@ -0,0 +1,13 @@
+# load_average
+
+Show the system 1 minute load average.
+
+![](load_average.png)
+
+# Config
+
+```
+[load_average]
+command=$SCRIPT_DIR/load_average
+interval=10
+```
diff --git a/private_dot_config/i3blocks/load_average/executable_load_average b/private_dot_config/i3blocks/load_average/executable_load_average
new file mode 100644
index 0000000..9ca6803
--- /dev/null
+++ b/private_dot_config/i3blocks/load_average/executable_load_average
@@ -0,0 +1,34 @@
+#!/usr/bin/env sh
+# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+load="$(cut -d ' ' -f1 /proc/loadavg)"
+cpus="$(nproc)"
+
+# full text
+echo "$load"
+
+# short text
+echo "$load"
+
+# color if load is too high
+awk -v cpus=$cpus -v cpuload=$load '
+    BEGIN {
+        if (cpus <= cpuload) {
+            print "#FF0000";
+            exit 33;
+        }
+    }
+'
diff --git a/private_dot_config/i3blocks/load_average/i3blocks.conf b/private_dot_config/i3blocks/load_average/i3blocks.conf
new file mode 100644
index 0000000..d979ec5
--- /dev/null
+++ b/private_dot_config/i3blocks/load_average/i3blocks.conf
@@ -0,0 +1,3 @@
+[load_average]
+command=$SCRIPT_DIR/load_average
+interval=10
diff --git a/private_dot_config/i3blocks/load_average/load_average.png b/private_dot_config/i3blocks/load_average/load_average.png
new file mode 100644
index 0000000..8d575bf
--- /dev/null
+++ b/private_dot_config/i3blocks/load_average/load_average.png
Binary files differ
diff --git a/private_dot_config/i3blocks/mediaplayer/README.md b/private_dot_config/i3blocks/mediaplayer/README.md
new file mode 100644
index 0000000..ae81911
--- /dev/null
+++ b/private_dot_config/i3blocks/mediaplayer/README.md
@@ -0,0 +1,36 @@
+# mediaplayer
+
+Generic media player status/controls.
+
+![Example screenshot](mediaplayer.png)
+
+This displays "ARTIST - SONG" if music is playing. By
+left-clicking/right-clicking the displayed text, it will play the previous/next
+song. Middle-clicking will pause/unpause the song.
+
+Supported players are:
+- spotify, vlc, audacious, xmms2, mplayer and others that
+use MPRIS DBus Interface Specification
+- mpd
+- cmus
+- rhythmbox
+
+mpd is supported through mpc (music player client).
+
+For MPRIS support you need to have the playerctl binary in your path.
+See: https://github.com/acrisci/playerctl
+
+If you leave the instance empty playerctl will try to find an
+active MPRIS-compatible player on its own.
+
+# Installation
+
+Add the following to your i3blocks config:
+
+``` ini
+[mediaplayer]
+command=$SCRIPT_DIR/mediaplayer
+instance=spotify
+interval=5
+signal=10
+```
diff --git a/private_dot_config/i3blocks/mediaplayer/executable_mediaplayer b/private_dot_config/i3blocks/mediaplayer/executable_mediaplayer
new file mode 100644
index 0000000..7259080
--- /dev/null
+++ b/private_dot_config/i3blocks/mediaplayer/executable_mediaplayer
@@ -0,0 +1,159 @@
+#!/usr/bin/env perl
+# Copyright (C) 2014 Tony Crisci <tony@dubstepdish.com>
+# Copyright (C) 2015 Thiago Perrotta <perrotta dot thiago at poli dot ufrj dot br>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# For all media players except mpd/cmus/rhythmbox, MPRIS support should be
+# enabled and the playerctl binary should be in your path.
+# See https://github.com/acrisci/playerctl
+
+# Set instance=NAME in the i3blocks configuration to specify a music player
+# (playerctl will attempt to connect to org.mpris.MediaPlayer2.[NAME] on your
+# DBus session). If instance is empty, playerctl will connect to the first
+# supported media player it finds.
+
+use Time::HiRes qw(usleep);
+use Env qw(BLOCK_INSTANCE);
+
+use constant DELAY => 50; # Delay in ms to let network-based players (spotify) reflect new data.
+use constant SPOTIFY_STR => 'spotify';
+
+my @metadata = ();
+my $player_arg = "";
+
+if ($BLOCK_INSTANCE) {
+    $player_arg = "--player='$BLOCK_INSTANCE'";
+}
+
+sub buttons {
+    my $method = shift;
+
+    if($method eq 'mpd') {
+        if ($ENV{'BLOCK_BUTTON'} == 1) {
+            system("mpc prev &>/dev/null");
+        } elsif ($ENV{'BLOCK_BUTTON'} == 2) {
+            system("mpc toggle &>/dev/null");
+        } elsif ($ENV{'BLOCK_BUTTON'} == 3) {
+            system("mpc next &>/dev/null");
+        } elsif ($ENV{'BLOCK_BUTTON'} == 4) {
+            system("mpc volume +10 &>/dev/null");
+        } elsif ($ENV{'BLOCK_BUTTON'} == 5) {
+            system("mpc volume -10 &>/dev/null");
+        }
+    } elsif ($method eq 'cmus') {
+        if ($ENV{'BLOCK_BUTTON'} == 1) {
+            system("cmus-remote --prev");
+        } elsif ($ENV{'BLOCK_BUTTON'} == 2) {
+            system("cmus-remote --pause");
+        } elsif ($ENV{'BLOCK_BUTTON'} == 3) {
+            system("cmus-remote --next");
+        }
+    } elsif ($method eq 'playerctl') {
+        if ($ENV{'BLOCK_BUTTON'} == 1) {
+            system("playerctl $player_arg previous");
+            usleep(DELAY * 1000) if $BLOCK_INSTANCE eq SPOTIFY_STR;
+        } elsif ($ENV{'BLOCK_BUTTON'} == 2) {
+            system("playerctl $player_arg play-pause");
+        } elsif ($ENV{'BLOCK_BUTTON'} == 3) {
+            system("playerctl $player_arg next");
+            usleep(DELAY * 1000) if $BLOCK_INSTANCE eq SPOTIFY_STR;
+        } elsif ($ENV{'BLOCK_BUTTON'} == 4) {
+            system("playerctl $player_arg volume 0.01+");
+        } elsif ($ENV{'BLOCK_BUTTON'} == 5) {
+            system("playerctl $player_arg volume 0.01-");
+        }
+    } elsif ($method eq 'rhythmbox') {
+        if ($ENV{'BLOCK_BUTTON'} == 1) {
+            system("rhythmbox-client --previous");
+        } elsif ($ENV{'BLOCK_BUTTON'} == 2) {
+            system("rhythmbox-client --play-pause");
+        } elsif ($ENV{'BLOCK_BUTTON'} == 3) {
+            system("rhythmbox-client --next");
+        }
+    }
+}
+
+sub cmus {
+    my @cmus = split /^/, qx(cmus-remote -Q);
+    if ($? == 0) {
+        foreach my $line (@cmus) {
+            my @data = split /\s/, $line;
+            if (shift @data eq 'tag') {
+                my $key = shift @data;
+                my $value = join ' ', @data;
+
+                @metadata[0] = $value if $key eq 'artist';
+                @metadata[1] = $value if $key eq 'title';
+            }
+        }
+
+        if (@metadata) {
+            buttons('cmus');
+
+            # metadata found so we are done
+            print(join ' - ', @metadata);
+            print("\n");
+            exit 0;
+        }
+    }
+}
+
+sub mpd {
+    my $data = qx(mpc current);
+    if (not $data eq '') {
+        buttons("mpd");
+        print($data);
+        exit 0;
+    }
+}
+
+sub playerctl {
+    buttons('playerctl');
+
+    my $artist = qx(playerctl $player_arg metadata artist 2>/dev/null);
+    chomp $artist;
+    # exit status will be nonzero when playerctl cannot find your player
+    exit(0) if $? || $artist eq '(null)';
+
+    push(@metadata, $artist) if $artist;
+
+    my $title = qx(playerctl $player_arg metadata title);
+    exit(0) if $? || $title eq '(null)';
+
+    push(@metadata, $title) if $title;
+
+    print(join(" - ", @metadata)) if @metadata;
+}
+
+sub rhythmbox {
+    buttons('rhythmbox');
+
+    my $data = qx(rhythmbox-client --print-playing --no-start);
+    print($data);
+}
+
+if ($player_arg =~ /mpd/) {
+    mpd;
+}
+elsif ($player_arg =~ /cmus/) {
+    cmus;
+}
+elsif ($player_arg =~ /rhythmbox/) {
+    rhythmbox;
+}
+else {
+    playerctl;
+}
+print("\n");
diff --git a/private_dot_config/i3blocks/mediaplayer/mediaplayer.png b/private_dot_config/i3blocks/mediaplayer/mediaplayer.png
new file mode 100644
index 0000000..40e89fa
--- /dev/null
+++ b/private_dot_config/i3blocks/mediaplayer/mediaplayer.png
Binary files differ
diff --git a/private_dot_config/i3blocks/memory/README.md b/private_dot_config/i3blocks/memory/README.md
new file mode 100644
index 0000000..4578dd1
--- /dev/null
+++ b/private_dot_config/i3blocks/memory/README.md
@@ -0,0 +1,20 @@
+# memory
+
+Show memory usage. Accepts instance "mem" or "swap".
+
+![](memory.png)
+
+# Config
+
+```
+[memory]
+command=$SCRIPT_DIR/memory
+label=MEM
+interval=30
+
+#[memory]
+#command=$SCRIPT_DIR/memory
+#label=SWAP
+#instance=swap
+#interval=30
+```
diff --git a/private_dot_config/i3blocks/memory/executable_memory b/private_dot_config/i3blocks/memory/executable_memory
new file mode 100644
index 0000000..fd814e0
--- /dev/null
+++ b/private_dot_config/i3blocks/memory/executable_memory
@@ -0,0 +1,73 @@
+#!/usr/bin/env sh
+# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+TYPE="${BLOCK_INSTANCE:-mem}"
+PERCENT="${PERCENT:-true}"
+
+awk -v type=$TYPE -v percent=$PERCENT '
+/^MemTotal:/ {
+	mem_total=$2
+}
+/^MemFree:/ {
+	mem_free=$2
+}
+/^Buffers:/ {
+	mem_free+=$2
+}
+/^Cached:/ {
+	mem_free+=$2
+}
+/^SwapTotal:/ {
+	swap_total=$2
+}
+/^SwapFree:/ {
+	swap_free=$2
+}
+END {
+	if (type == "swap") {
+		free=swap_free/1024/1024
+		used=(swap_total-swap_free)/1024/1024
+		total=swap_total/1024/1024
+	} else {
+		free=mem_free/1024/1024
+		used=(mem_total-mem_free)/1024/1024
+		total=mem_total/1024/1024
+	}
+
+	pct=0
+	if (total > 0) {
+		pct=used/total*100
+	}
+
+	# full text
+	if (percent == "true" ) {
+		printf("%.1fG/%.1fG (%.f%%)\n", used, total, pct)
+	} else {
+		printf("%.1fG/%.1fG\n", used, total)
+	}
+	# short text
+	printf("%.f%%\n", pct)
+
+	# color
+	if (pct > 90) {
+		print("#FF0000")
+	} else if (pct > 80) {
+		print("#FFAE00")
+	} else if (pct > 70) {
+		print("#FFF600")
+	}
+}
+' /proc/meminfo
diff --git a/private_dot_config/i3blocks/memory/i3blocks.conf b/private_dot_config/i3blocks/memory/i3blocks.conf
new file mode 100644
index 0000000..0a86f04
--- /dev/null
+++ b/private_dot_config/i3blocks/memory/i3blocks.conf
@@ -0,0 +1,11 @@
+[memory]
+command=$SCRIPT_DIR/memory
+label=MEM
+interval=30
+
+#[memory]
+#command=$SCRIPT_DIR/memory
+#label=SWAP
+#instance=swap
+#interval=30
+
diff --git a/private_dot_config/i3blocks/memory/memory.png b/private_dot_config/i3blocks/memory/memory.png
new file mode 100644
index 0000000..c918a05
--- /dev/null
+++ b/private_dot_config/i3blocks/memory/memory.png
Binary files differ
diff --git a/private_dot_config/i3blocks/volume-pipewire/executable_LICENSE b/private_dot_config/i3blocks/volume-pipewire/executable_LICENSE
new file mode 100644
index 0000000..8cdb845
--- /dev/null
+++ b/private_dot_config/i3blocks/volume-pipewire/executable_LICENSE
@@ -0,0 +1,340 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    {description}
+    Copyright (C) {year}  {fullname}
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  {signature of Ty Coon}, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+
diff --git a/private_dot_config/i3blocks/volume-pipewire/executable_README.md b/private_dot_config/i3blocks/volume-pipewire/executable_README.md
new file mode 100644
index 0000000..68dd7de
--- /dev/null
+++ b/private_dot_config/i3blocks/volume-pipewire/executable_README.md
@@ -0,0 +1,78 @@
+# Before using this block
+
+This is a fork of the block volume-pulseaudio, that supports pipewire,
+pulseaudio, and alsa. This is achieved by using the tool pactl instead of pacmd.
+So hopefuly this should be the future of this block.
+
+# volume-pipewire
+
+Display the system volume and
+optionally the default playback device and index.
+Offers controls for these via clicks/scrolling.
+Supports changing audiostreams that are already playing.
+
+![](volume-pipewire-high.png)
+![](volume-pipewire-med.png)
+![](volume-pipewire-low.png)
+![](volume-pipewire-mute.png)
+
+# Dependencies
+
+pipewire-pulse, pipewire-alsa, pipewire-jack, alsa-utils, fontawesome (fonts-font-awesome package) for the speaker symbols
+
+# Usage
+
+Left/right clicks change default playback device, middle click mutes, scrolling
+adjusts volume. If your keyboard has audio buttons, it is suggested to add the
+the following to your i3 config
+
+```
+# Pipewire-pulse
+bindsym XF86AudioMute exec pactl set-sink-mute 0 toggle
+bindsym XF86AudioMute --release exec pkill -RTMIN+1 i3blocks
+bindsym XF86AudioLowerVolume exec pactl set-sink-volume 0 -5%
+bindsym XF86AudioLowerVolume --release exec pkill -RTMIN+1 i3blocks
+bindsym XF86AudioRaiseVolume exec pactl set-sink-volume 0 +5%
+bindsym XF86AudioRaiseVolume --release exec pkill -RTMIN+1 i3blocks
+
+# Media player controls
+bindsym XF86AudioPlay exec playerctl play-pause
+bindsym XF86AudioPause exec playerctl play-pause
+bindsym XF86AudioNext exec playerctl next
+bindsym XF86AudioPrev exec playerctl previous
+```
+
+where the number `1` in `-RTMIN+1` can be replaced to another signal number,
+as long as it agrees what you put for `signal=` in your i3blocks config.
+The previous lines also assume your mixer is "pulse" and your scontrol is "Master".
+If yours are different, change them appropriately.
+
+Alternatively to using signals, you may use the `SUBSCRIBE=1` option in your config in order to have the block
+automatically respond to audio change events. This option requires `interval=persist`
+and always uses the `LONG_FORMAT`.
+
+# Config
+
+```INI
+[volume-pipewire]
+command=$SCRIPT_DIR/volume-pipewire
+interval=once
+signal=1
+#MIXER=[determined automatically]
+#SCONTROL=[determined automatically]
+##exposed format variables: ${SYMB}, ${VOL}, ${INDEX}, ${NAME}
+#LONG_FORMAT="${SYMB} ${VOL}% [${INDEX}:${NAME}]"
+#SHORT_FORMAT="${SYMB} ${VOL}% [${INDEX}]"
+#AUDIO_HIGH_SYMBOL='  '
+#AUDIO_MED_THRESH=50
+#AUDIO_MED_SYMBOL='  '
+#AUDIO_LOW_THRESH=0
+#AUDIO_LOW_SYMBOL='  '
+#AUDIO_DELTA=5
+#DEFAULT_COLOR="#ffffff"
+#MUTED_COLOR="#a0a0a0"
+#USE_ALSA_NAME=0
+#USE_DESCRIPTION=0
+## SUBSCRIBE=1 requires interval=persist and always uses LONG_FORMAT
+#SUBSCRIBE=0
+```
diff --git a/private_dot_config/i3blocks/volume-pipewire/executable_i3blocks.conf b/private_dot_config/i3blocks/volume-pipewire/executable_i3blocks.conf
new file mode 100644
index 0000000..6345367
--- /dev/null
+++ b/private_dot_config/i3blocks/volume-pipewire/executable_i3blocks.conf
@@ -0,0 +1,14 @@
+#if you prefer automatic updating
+[volume-pipewire]
+command=$SCRIPT_DIR/volume-pipewire
+interval=persist
+SUBSCRIBE=1
+USE_ALSA_NAME=1
+
+
+#if you prefer updating only when signaled
+[volume-pipewire]
+command=$SCRIPT_DIR/volume-pipewire
+interval=once
+signal=1
+USE_ALSA_NAME=1
diff --git a/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire b/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire
new file mode 100644
index 0000000..d14aaae
--- /dev/null
+++ b/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire
@@ -0,0 +1,176 @@
+#!/bin/bash
+# Displays the default device, volume, and mute status for i3blocks
+
+set -a
+
+AUDIO_HIGH_SYMBOL=${AUDIO_HIGH_SYMBOL:-'  '}
+
+AUDIO_MED_THRESH=${AUDIO_MED_THRESH:-50}
+AUDIO_MED_SYMBOL=${AUDIO_MED_SYMBOL:-'  '}
+
+AUDIO_LOW_THRESH=${AUDIO_LOW_THRESH:-0}
+AUDIO_LOW_SYMBOL=${AUDIO_LOW_SYMBOL:-'  '}
+
+AUDIO_MUTED_SYMBOL=${AUDIO_MUTED_SYMBOL:-'  '}
+
+AUDIO_DELTA=${AUDIO_DELTA:-5}
+
+DEFAULT_COLOR=${DEFAULT_COLOR:-"#ffffff"}
+MUTED_COLOR=${MUTED_COLOR:-"#a0a0a0"}
+
+LONG_FORMAT=${LONG_FORMAT:-'${SYMB} ${VOL}% [${INDEX}:${NAME}]'}
+SHORT_FORMAT=${SHORT_FORMAT:-'${SYMB} ${VOL}% [${INDEX}]'}
+USE_ALSA_NAME=${USE_ALSA_NAME:-0}
+USE_DESCRIPTION=${USE_DESCRIPTION:-0}
+
+SUBSCRIBE=${SUBSCRIBE:-0}
+
+MIXER=${MIXER:-""}
+SCONTROL=${SCONTROL:-""}
+
+while getopts F:Sf:adH:M:L:X:T:t:C:c:i:m:s:h opt; do
+    case "$opt" in
+        S) SUBSCRIBE=1 ;;
+        F) LONG_FORMAT="$OPTARG" ;;
+        f) SHORT_FORMAT="$OPTARG" ;;
+        a) USE_ALSA_NAME=1 ;;
+        d) USE_DESCRIPTION=1 ;;
+        H) AUDIO_HIGH_SYMBOL="$OPTARG" ;;
+        M) AUDIO_MED_SYMBOL="$OPTARG" ;;
+        L) AUDIO_LOW_SYMBOL="$OPTARG" ;;
+        X) AUDIO_MUTED_SYMBOL="$OPTARG" ;;
+        T) AUDIO_MED_THRESH="$OPTARG" ;;
+        t) AUDIO_LOW_THRESH="$OPTARG" ;;
+        C) DEFAULT_COLOR="$OPTARG" ;;
+        c) MUTED_COLOR="$OPTARG" ;;
+        i) AUDIO_INTERVAL="$OPTARG" ;;
+        m) MIXER="$OPTARG" ;;
+        s) SCONTROL="$OPTARG" ;;
+        h) printf \
+"Usage: volume-pulseaudio [-S] [-F format] [-f format] [-p] [-a|-d] [-H symb] [-M symb]
+        [-L symb] [-X symb] [-T thresh] [-t thresh] [-C color] [-c color] [-i inter] 
+        [-m mixer] [-s scontrol] [-h]
+Options:
+-F, -f\tOutput format (-F long format, -f short format) to use, with exposed variables:
+\${SYMB}, \${VOL}, \${INDEX}, \${NAME}
+-S\tSubscribe to volume events (requires persistent block, always uses long format)
+-a\tUse ALSA name if possible
+-d\tUse device description instead of name if possible
+-H\tSymbol to use when audio level is high. Default: '$AUDIO_HIGH_SYMBOL'
+-M\tSymbol to use when audio level is medium. Default: '$AUDIO_MED_SYMBOL'
+-L\tSymbol to use when audio level is low. Default: '$AUDIO_LOW_SYMBOL'
+-X\tSymbol to use when audio is muted. Default: '$AUDIO_MUTED_SYMBOL'
+-T\tThreshold for medium audio level. Default: $AUDIO_MED_THRESH
+-t\tThreshold for low audio level. Default: $AUDIO_LOW_THRESH
+-C\tColor for non-muted audio. Default: $DEFAULT_COLOR
+-c\tColor for muted audio. Default: $MUTED_COLOR
+-i\tInterval size of volume increase/decrease. Default: $AUDIO_DELTA
+-m\tUse the given mixer.
+-s\tUse the given scontrol.
+-h\tShow this help text
+" && exit 0;;
+    esac
+done
+
+if [[ -z "$MIXER" ]] ; then
+    MIXER="default"
+    if amixer -D pulse info >/dev/null 2>&1 ; then
+        MIXER="pulse"
+    fi
+fi
+
+if [[ -z "$SCONTROL" ]] ; then
+    SCONTROL=$(amixer -D "$MIXER" scontrols | sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" | head -n1)
+fi
+
+CAPABILITY=$(amixer -D $MIXER get $SCONTROL | sed -n "s/  Capabilities:.*cvolume.*/Capture/p")
+
+
+function move_sinks_to_new_default {
+    DEFAULT_SINK=$1
+    pactl list sink-inputs | grep 'Sink Input #' | grep -o '[0-9]\+' | while read SINK
+    do
+        pactl move-sink-input $SINK $DEFAULT_SINK
+    done
+}
+
+function set_default_playback_device_next {
+    inc=${1:-1}
+    num_devices=$(pactl list sinks | grep -c Name:)
+    sink_arr=($(pactl list sinks | grep Name: | sed -r 's/\s+Name: (.+)/\1/'))
+    default_sink=$(pactl get-default-sink)
+    default_sink_index=$(for i in "${!sink_arr[@]}"; do if [[ "$default_sink" = "${sink_arr[$i]}" ]]; then echo "$i"; fi done)
+    default_sink_index=$(( ($default_sink_index + $num_devices + $inc) % $num_devices ))
+    default_sink=${sink_arr[$default_sink_index]}
+    pactl set-default-sink $default_sink
+    move_sinks_to_new_default $default_sink
+}
+
+case "$BLOCK_BUTTON" in
+    1) set_default_playback_device_next ;;
+    2) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY toggle ;;
+    3) set_default_playback_device_next -1 ;;
+    4) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY $AUDIO_DELTA%+ ;;
+    5) amixer -q -D $MIXER sset $SCONTROL $CAPABILITY $AUDIO_DELTA%- ;;
+esac
+
+function print_format {
+    echo "$1" | envsubst '${SYMB}${VOL}${INDEX}${NAME}'
+}
+
+function print_block {
+    ACTIVE="$(pactl list sinks  | grep "State\: RUNNING" -B4 -A55)"
+    if [[ $ACTIVE = "" ]] ; then
+        ACTIVE="$(pactl list sinks | grep "$(pactl get-default-sink)" -B4 -A55)"
+    fi
+    ACTIVE="$(echo "$ACTIVE" | grep "Name:\|Volume: \(front-left\|mono\)\|Mute:\|api.alsa.pcm.card = \|node.nick = ")"
+    for Name in NAME MUTED VOL INDEX NICK; do
+        read $Name
+    done < <(echo "$ACTIVE")
+    INDEX=$(echo "$INDEX"  | grep -o '".*"' | sed 's/"//g')
+    VOL=$(echo "$VOL" | grep -o "[0-9]*%" | head -1 )
+    VOL="${VOL%?}"
+    NAME=$(echo "$NICK" | grep -o '".*"' | sed 's/"//g')
+
+    if [[ $USE_ALSA_NAME == 1 ]] ; then
+        ALSA_NAME=$(pactl list sinks |\
+awk '/^\s*\*/{f=1}/^\s*index:/{f=0}f' |\
+grep "alsa.name\|alsa.mixer_name" |\
+head -n1 |\
+sed 's/.*= "\(.*\)".*/\1/')
+        NAME=${ALSA_NAME:-$NAME}
+    elif [[ $USE_DESCRIPTION == 1 ]] ; then
+        DESCRIPTION=$(pactl list sinks  | grep "State\: RUNNING" -B4 -A55 | grep 'Description: ' | sed 's/^.*: //')
+        NAME=${DESCRIPTION:-$NAME}
+    fi
+
+    if [[ $MUTED =~ "no" ]] ; then
+        SYMB=$AUDIO_HIGH_SYMBOL
+        [[ $VOL -le $AUDIO_MED_THRESH ]] && SYMB=$AUDIO_MED_SYMBOL
+        [[ $VOL -le $AUDIO_LOW_THRESH ]] && SYMB=$AUDIO_LOW_SYMBOL
+        COLOR=$DEFAULT_COLOR
+    else
+        SYMB=$AUDIO_MUTED_SYMBOL
+        COLOR=$MUTED_COLOR
+    fi
+
+    if [[ $ACTIVE = "" ]] ; then
+        echo "Sound inactive"
+        COLOR='#222225'
+    fi
+
+    if [[ $SUBSCRIBE == 1 ]] ; then
+        print_format "$LONG_FORMAT"
+    else
+        print_format "$LONG_FORMAT"
+        print_format "$SHORT_FORMAT"
+        echo "$COLOR"
+    fi
+}
+
+print_block
+if [[ $SUBSCRIBE == 1 ]] ; then
+    while read -r EVENT; do
+        print_block
+    done < <(pactl subscribe | stdbuf -oL grep change)
+fi
diff --git a/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-high.png b/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-high.png
new file mode 100644
index 0000000..5c90fcb
--- /dev/null
+++ b/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-high.png
Binary files differ
diff --git a/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-low.png b/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-low.png
new file mode 100644
index 0000000..44989c3
--- /dev/null
+++ b/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-low.png
Binary files differ
diff --git a/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-med.png b/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-med.png
new file mode 100644
index 0000000..71ec846
--- /dev/null
+++ b/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-med.png
Binary files differ
diff --git a/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-mute.png b/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-mute.png
new file mode 100644
index 0000000..53da043
--- /dev/null
+++ b/private_dot_config/i3blocks/volume-pipewire/executable_volume-pipewire-mute.png
Binary files differ
diff --git a/private_dot_config/i3blocks/wifi/README.md b/private_dot_config/i3blocks/wifi/README.md
new file mode 100644
index 0000000..f6c1052
--- /dev/null
+++ b/private_dot_config/i3blocks/wifi/README.md
@@ -0,0 +1,16 @@
+# wifi
+
+Show the strength of your wifi connection.
+If no instance is specified, wlan0 is used.
+
+![](wifi.png)
+
+# Config
+
+```
+[wifi]
+command=$SCRIPT_DIR/wifi
+label=wifi:
+#INTERFACE=wlan0
+interval=60
+```
diff --git a/private_dot_config/i3blocks/wifi/executable_wifi b/private_dot_config/i3blocks/wifi/executable_wifi
new file mode 100644
index 0000000..258ac8c
--- /dev/null
+++ b/private_dot_config/i3blocks/wifi/executable_wifi
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+# Copyright (C) 2014 Alexander Keller <github@nycroth.com>
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+#------------------------------------------------------------------------
+if [[ -z "$INTERFACE" ]] ; then
+    INTERFACE="${BLOCK_INSTANCE:-wlan0}"
+fi
+#------------------------------------------------------------------------
+
+COLOR_GE80=${COLOR_GE80:-#00FF00}
+COLOR_GE60=${COLOR_GE60:-#FFF600}
+COLOR_GE40=${COLOR_GE40:-#FFAE00}
+COLOR_LOWR=${COLOR_LOWR:-#FF0000}
+COLOR_DOWN=${COLOR_DOWN:-#FF0000}
+
+# As per #36 -- It is transparent: e.g. if the machine has no battery or wireless
+# connection (think desktop), the corresponding block should not be displayed.
+[[ ! -d /sys/class/net/${INTERFACE}/wireless ]] && exit
+
+# If the wifi interface exists but no connection is active, "down" shall be displayed.
+if [[ "$(cat /sys/class/net/$INTERFACE/operstate)" = 'down' ]]; then
+    echo "down"
+    echo "down"
+    echo $COLOR_DOWN
+    exit
+fi
+
+#------------------------------------------------------------------------
+
+QUALITY=$(iw dev ${INTERFACE} link | grep 'dBm$' | grep -Eoe '-[0-9]{2}' | awk '{print  ($1 > -50 ? 100 :($1 < -100 ? 0 : ($1+100)*2))}')
+
+#------------------------------------------------------------------------
+
+echo $QUALITY% # full text
+echo $QUALITY% # short text
+
+# color
+if [[ $QUALITY -ge 80 ]]; then
+    echo $COLOR_GE80
+elif [[ $QUALITY -ge 60 ]]; then
+    echo $COLOR_GE60
+elif [[ $QUALITY -ge 40 ]]; then
+    echo $COLOR_GE40
+else
+    echo $COLOR_LOWR
+fi
diff --git a/private_dot_config/i3blocks/wifi/i3blocks.conf b/private_dot_config/i3blocks/wifi/i3blocks.conf
new file mode 100644
index 0000000..e11767b
--- /dev/null
+++ b/private_dot_config/i3blocks/wifi/i3blocks.conf
@@ -0,0 +1,10 @@
+[wifi]
+command=$SCRIPT_DIR/wifi
+label=wifi:
+#INTERFACE=wlan0
+interval=60
+#COLOR_GE80=#00FF00
+#COLOR_GE60=#FFF600
+#COLOR_GE40=#FFAE00
+#COLOR_LOWR=#FF0000
+#COLOR_DOWN=#FF0000
diff --git a/private_dot_config/i3blocks/wifi/wifi.png b/private_dot_config/i3blocks/wifi/wifi.png
new file mode 100644
index 0000000..5549de6
--- /dev/null
+++ b/private_dot_config/i3blocks/wifi/wifi.png
Binary files differ
diff --git a/private_dot_config/jj/config.toml.tmpl b/private_dot_config/jj/config.toml.tmpl
new file mode 100644
index 0000000..426a2fa
--- /dev/null
+++ b/private_dot_config/jj/config.toml.tmpl
@@ -0,0 +1 @@
+{{- template "jj.toml" . -}}
diff --git a/private_dot_config/nvim/coc-settings.json b/private_dot_config/nvim/coc-settings.json
new file mode 100644
index 0000000..bf72fff
--- /dev/null
+++ b/private_dot_config/nvim/coc-settings.json
@@ -0,0 +1,3 @@
+{
+  "suggest.noselect": true
+}
diff --git a/private_dot_config/nvim/init.lua b/private_dot_config/nvim/init.lua
new file mode 100644
index 0000000..d4ea5e4
--- /dev/null
+++ b/private_dot_config/nvim/init.lua
@@ -0,0 +1,24 @@
+-- nvim configuration file
+--
+-- Script initially created for vim and based on a script created by
+-- Gerhard Gappmeier.
+--
+-- Then it was adapted to use my plugins, set them up, and set some
+-- configuration I liked for vim/nvim.
+--
+-- This has finally turned into a modular lua config just for nvim.
+--
+-- Directory structure and some files are based on the dotfiles at
+-- https://github.com/elianiva/dotfiles/blob/master/nvim/.config/nvim/lua.
+--
+-- @NOTE: This file is synced with dotfiles-external. Do not edit here!
+
+require("modules.startup")
+require("modules.options")
+require("modules.mappings")
+require("modules.commands")
+
+require("bootstrap")
+require("deps")
+
+vim.cmd.colorscheme('tender')
diff --git a/private_dot_config/nvim/lazy-lock.json b/private_dot_config/nvim/lazy-lock.json
new file mode 100644
index 0000000..8aa0ba6
--- /dev/null
+++ b/private_dot_config/nvim/lazy-lock.json
@@ -0,0 +1,41 @@
+{
+  "awesome-vim-colorschemes": { "branch": "master", "commit": "ae5e02298c8de6a5aa98fe4d29a21874cfcc3619" },
+  "chezmoi.nvim": { "branch": "main", "commit": "f5614261b77cb17df72ba2c4fdbc31f7ee42bc6c" },
+  "chezmoi.vim": { "branch": "main", "commit": "abf37336437867cbd99ce2f8849b717415391cc3" },
+  "cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
+  "cmp-cmdline": { "branch": "main", "commit": "d250c63aa13ead745e3a40f61fdd3470efde3923" },
+  "cmp-jira": { "branch": "main", "commit": "e7f7e341588a93c2763b7900e98f1478ebb85bf8" },
+  "cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" },
+  "cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
+  "copilot-cmp": { "branch": "master", "commit": "b6e5286b3d74b04256d0a7e3bd2908eabec34b44" },
+  "editorconfig-vim": { "branch": "master", "commit": "ba2ce027c5b0e523e658d24657ce3ae3306c9fe0" },
+  "jjdescription": { "branch": "main", "commit": "b94c5062d52b4bb2416a113fa13d8ef7153094b8" },
+  "lazy.nvim": { "branch": "main", "commit": "cf8ecc2c5e4332760431a33534240b0cbc6680ab" },
+  "lsp_signature.nvim": { "branch": "master", "commit": "fc38521ea4d9ec8dbd4c2819ba8126cea743943b" },
+  "lspkind.nvim": { "branch": "master", "commit": "a700f1436d4a938b1a1a93c9962dc796afbaef4d" },
+  "markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
+  "mediawiki.vim": { "branch": "master", "commit": "26e5737264354be41cb11d16d48132779795e168" },
+  "nvim-cmp": { "branch": "main", "commit": "f17d9b4394027ff4442b298398dfcaab97e40c4f" },
+  "nvim-lsp-file-operations": { "branch": "master", "commit": "9744b738183a5adca0f916527922078a965515ed" },
+  "nvim-lspconfig": { "branch": "master", "commit": "54617a18f4cf46f0c2f6d024fa6feb7515fe036d" },
+  "nvim-tree.lua": { "branch": "master", "commit": "82ab19ebf79c1839d7351f2fed213d1af13a598e" },
+  "nvim-treesitter": { "branch": "master", "commit": "38c12cb9ac8e1c547a8472c87df9e9d7c8b1af0d" },
+  "nvim-web-devicons": { "branch": "master", "commit": "19d257cf889f79f4022163c3fbb5e08639077bd8" },
+  "plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" },
+  "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
+  "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
+  "trouble.nvim": { "branch": "main", "commit": "2f3b537f2207ce32f4459f9d56746ee013b5e01b" },
+  "typescript-tools.nvim": { "branch": "master", "commit": "f8c2e0b36b651c85f52ad5c5373ff8b07adc15a7" },
+  "vim-airline": { "branch": "master", "commit": "6c704f4b780e2b687dd21b24a19f598dde06dc22" },
+  "vim-airline-themes": { "branch": "master", "commit": "a9aa25ce323b2dd04a52706f4d1b044f4feb7617" },
+  "vim-codefmt": { "branch": "master", "commit": "ff464a478202df40ae484e6e94a1d56587fcc69e" },
+  "vim-dirdiff": { "branch": "master", "commit": "84bc8999fde4b3c2d8b228b560278ab30c7ea4c9" },
+  "vim-glaive": { "branch": "master", "commit": "3c5db8d279f86355914200119e8727a085863fcd" },
+  "vim-html-template-literals": { "branch": "master", "commit": "54edc719402c08b409d192e97f77325c418fb12e" },
+  "vim-logcat": { "branch": "master", "commit": "1bc58cff9fbf05868c49cab71600650f7b93655f" },
+  "vim-maktaba": { "branch": "master", "commit": "fe95bb10f6bb250943a44632107f6a3d76ce5f28" },
+  "vim-searchindex": { "branch": "master", "commit": "b0788c8213210b3bd23b62847dd5a9ebbe4ad648" },
+  "vim-smali": { "branch": "master", "commit": "a03a66eefa8666e0cd79510bcdd149b8f6002137" },
+  "vim-vue": { "branch": "master", "commit": "6ae8fa751fbe4c6605961d2309f8326873fa40a6" },
+  "vimtex": { "branch": "master", "commit": "0785fd98af20f308ce6856f75a70a4ece9abab29" }
+}
diff --git a/private_dot_config/nvim/lua/bootstrap.lua b/private_dot_config/nvim/lua/bootstrap.lua
new file mode 100644
index 0000000..4b1b171
--- /dev/null
+++ b/private_dot_config/nvim/lua/bootstrap.lua
@@ -0,0 +1,12 @@
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not (vim.uv or vim.loop).fs_stat(lazypath) then
+  vim.fn.system({
+    "git",
+    "clone",
+    "--filter=blob:none",
+    "https://github.com/folke/lazy.nvim.git",
+    "--branch=stable", -- latest stable release
+    lazypath,
+  })
+end
+vim.opt.rtp:prepend(lazypath)
diff --git a/private_dot_config/nvim/lua/deps.lua b/private_dot_config/nvim/lua/deps.lua
new file mode 100644
index 0000000..0490b7f
--- /dev/null
+++ b/private_dot_config/nvim/lua/deps.lua
@@ -0,0 +1 @@
+require("lazy").setup("plugins")
diff --git a/private_dot_config/nvim/lua/modules/commands.lua b/private_dot_config/nvim/lua/modules/commands.lua
new file mode 100644
index 0000000..9531e1c
--- /dev/null
+++ b/private_dot_config/nvim/lua/modules/commands.lua
@@ -0,0 +1,8 @@
+vim.api.nvim_create_user_command('CopyRelativePath', 'let @+ = expand("%:~:.")', {})
+
+vim.api.nvim_create_user_command('VirtualTextOn', function()
+  vim.diagnostic.config({virtual_text=true})
+end, {})
+vim.api.nvim_create_user_command('VirtualTextOff', function()
+  vim.diagnostic.config({virtual_text=false})
+end, {})
diff --git a/private_dot_config/nvim/lua/modules/mappings.lua b/private_dot_config/nvim/lua/modules/mappings.lua
new file mode 100644
index 0000000..43c54ab
--- /dev/null
+++ b/private_dot_config/nvim/lua/modules/mappings.lua
@@ -0,0 +1,13 @@
+vim.keymap.set('', ',e', ':NvimTreeOpen<CR>')
+vim.keymap.set('', ',f', ':NvimTreeOpen<CR>')
+vim.keymap.set('', ',t', ':NvimTreeToggle<CR>')
+vim.keymap.set('', '<leader>av', ':AnsibleVault<cr>')
+vim.keymap.set('', '<leader>au', ':AnsibleUnvault<cr>')
+
+vim.keymap.set('', '<leader>q', ':botright copen<cr>', { noremap = false })
+vim.keymap.set('', '<leader>Q', ':cclose<cr>', { noremap = false })
+
+vim.keymap.set('n', '<leader>ff', '<cmd>Telescope find_files<cr>', { noremap = false })
+vim.keymap.set('n', '<leader>fg', '<cmd>Telescope live_grep<cr>', { noremap = false })
+vim.keymap.set('n', '<leader>fb', '<cmd>Telescope buffers<cr>', { noremap = false })
+vim.keymap.set('n', '<leader>fh', '<cmd>Telescope help_tags<cr>', { noremap = false })
diff --git a/private_dot_config/nvim/lua/modules/options.lua b/private_dot_config/nvim/lua/modules/options.lua
new file mode 100644
index 0000000..6f4ea86
--- /dev/null
+++ b/private_dot_config/nvim/lua/modules/options.lua
@@ -0,0 +1,42 @@
+vim.o.tabstop = 2    -- tab width is 2 spaces
+vim.o.shiftwidth = 2 -- indent also with 2 spaces
+
+vim.o.number = true
+vim.o.relativenumber = true
+vim.g.mapleader = ','
+
+-- use indentation of previous line
+vim.o.autoindent = true
+vim.o.expandtab = true -- expand tabs to spaces
+
+-- intelligent comments
+vim.opt.comments = {
+  sl = '/*',
+  mb = ' *',
+  elx = ' */',
+}
+
+vim.opt.mouse = 'a'
+vim.opt.ruler = true
+
+-- Vimscript syntax highlighting unused:
+-- hi jjdescriptionHeader guifg=#b3deef ctermfg=153 guibg=NONE ctermbg=NONE gui=NONE cterm=NONE
+-- hi jjdescriptionSelectedType guifg=#9faa00 ctermfg=142 guibg=NONE ctermbg=NONE gui=NONE cterm=NONE
+-- hi jjdescriptionSelectedFile guifg=#c9d05c ctermfg=185 guibg=NONE ctermbg=NONE gui=NONE cterm=NONE
+
+-- == Mac fixes: ==
+-- So the backspace key works correctly with brew's vim
+-- vim.opt.backspace = "2"
+
+-- So MD italics show in italics
+vim.cmd.highlight('Comment', 'cterm=italic')
+
+-- To show nbsp characters (added by Alt+Space) as dots
+vim.opt.listchars={
+  tab = '» ',
+  extends = '›',
+  precedes = '‹',
+  nbsp = '·',
+  trail = '·',
+}
+vim.opt.list = true
diff --git a/private_dot_config/nvim/lua/modules/startup.lua b/private_dot_config/nvim/lua/modules/startup.lua
new file mode 100644
index 0000000..1948497
--- /dev/null
+++ b/private_dot_config/nvim/lua/modules/startup.lua
@@ -0,0 +1,4 @@
+-- (nvim-tree.lua configuration) disable netrw at the very start of your init.lua (strongly advised)
+vim.g.loaded_netrw = 1
+vim.g.loaded_netrwPlugin = 1
+vim.g.python3_host_prog = '/Users/avm99963/.pyenv/versions/neovim3/bin/python'
diff --git a/private_dot_config/nvim/lua/plugins/chezmoi.lua b/private_dot_config/nvim/lua/plugins/chezmoi.lua
new file mode 100644
index 0000000..5921b5b
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/chezmoi.lua
@@ -0,0 +1,25 @@
+return {
+  {
+    'xvzc/chezmoi.nvim',
+    dependencies = {
+      'nvim-lua/plenary.nvim',
+    },
+    config = function()
+      require("chezmoi").setup{}
+
+      vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
+        pattern = { os.getenv("HOME") .. "/.local/share/chezmoi/*" },
+        callback = function()
+          vim.schedule(require("chezmoi.commands.__edit").watch)
+        end,
+      })
+    end
+  },
+  {
+    'alker0/chezmoi.vim',
+    lazy = false,
+    init = function()
+      vim.g['chezmoi#use_tmp_buffer'] = true
+    end,
+  },
+}
diff --git a/private_dot_config/nvim/lua/plugins/code_formatting.lua b/private_dot_config/nvim/lua/plugins/code_formatting.lua
new file mode 100644
index 0000000..9eca093
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/code_formatting.lua
@@ -0,0 +1,26 @@
+return {
+  "editorconfig/editorconfig-vim",
+  {
+    "google/vim-codefmt",
+    dependencies = {
+      "google/vim-maktaba",
+      "google/vim-glaive",
+    },
+    config = function()
+      vim.cmd.Glaive({ "codefmt", "shfmt_options=`['-i', '2', '-ci']`" })
+      vim.cmd.Glaive({ "codefmt", "prettier_executable=`['npx', 'prettier']`" })
+
+      vim.api.nvim_create_augroup('autoformat_settings', { clear = true })
+      vim.api.nvim_create_autocmd({'FileType'}, {
+        pattern = 'javascript',
+        group = 'autoformat_settings',
+        command = 'let b:codefmt_formatter = \'clang-format\'',
+      })
+      vim.api.nvim_create_autocmd({'FileType'}, {
+        pattern = 'html',
+        group = 'autoformat_settings',
+        command = 'let b:codefmt_formatter = \'prettier\'',
+      })
+    end,
+  },
+}
diff --git a/private_dot_config/nvim/lua/plugins/github_copilot.lua.tmpl b/private_dot_config/nvim/lua/plugins/github_copilot.lua.tmpl
new file mode 100644
index 0000000..fe02344
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/github_copilot.lua.tmpl
@@ -0,0 +1,25 @@
+return {
+{{if eq .env "work" -}}
+  {
+    'zbirenbaum/copilot.lua',
+    config = function()
+      require('copilot').setup({
+        suggestion = { enabled = false },
+        panel = { enabled = false },
+      })
+    end,
+  },
+  {
+    "CopilotC-Nvim/CopilotChat.nvim",
+    branch = "canary",
+    dependencies = {
+      { "zbirenbaum/copilot.lua" },
+      { "nvim-lua/plenary.nvim" },
+    },
+    build = "make tiktoken",
+    config = function()
+      require("CopilotChat").setup()
+    end,
+  },
+{{- end}}
+}
diff --git a/private_dot_config/nvim/lua/plugins/google.lua b/private_dot_config/nvim/lua/plugins/google.lua
new file mode 100644
index 0000000..fa94457
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/google.lua
@@ -0,0 +1,12 @@
+return {
+  "google/vim-maktaba",
+  {
+    "google/vim-glaive",
+    dependencies = {
+      "google/vim-maktaba",
+    },
+    config = function()
+      vim.cmd('call glaive#Install()')
+    end,
+  },
+}
diff --git a/private_dot_config/nvim/lua/plugins/lsp_config.lua b/private_dot_config/nvim/lua/plugins/lsp_config.lua
new file mode 100644
index 0000000..89b1ae3
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/lsp_config.lua
@@ -0,0 +1,228 @@
+return {
+  {
+    "neovim/nvim-lspconfig",
+    config = function()
+      -- @source: https://github.com/neovim/nvim-lspconfig?tab=readme-ov-file#suggested-configuration
+      -- LSP global mappings.
+      -- See `:help vim.diagnostic.*` for documentation on any of the below functions
+      vim.keymap.set('n', '<space>e', vim.diagnostic.open_float)
+      vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
+      vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
+      vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist)
+
+      -- Use LspAttach autocommand to only map the following keys
+      -- after the language server attaches to the current buffer
+      vim.api.nvim_create_autocmd('LspAttach', {
+        group = vim.api.nvim_create_augroup('UserLspConfig', {}),
+        callback = function(ev)
+          -- Enable completion triggered by <c-x><c-o>
+          vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
+
+          -- Buffer local mappings.
+          -- See `:help vim.lsp.*` for documentation on any of the below functions
+          local opts = { buffer = ev.buf }
+          vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
+          vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
+          vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
+          vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, opts)
+          vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, opts)
+          vim.keymap.set('n', '<space>wl', function()
+            print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
+          end, opts)
+          vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, opts)
+          vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
+          vim.keymap.set('n', '<space>f', function()
+            vim.lsp.buf.format { async = true }
+          end, opts)
+        end,
+      })
+
+      local lspconfig = require('lspconfig')
+      local configs = require('lspconfig.configs')
+      local capabilities = require('cmp_nvim_lsp').default_capabilities()
+
+      lspconfig.pylsp.setup {
+        capabilities = capabilities
+      }
+      lspconfig.eslint.setup {
+        capabilities = capabilities
+      }
+      --require'typescript-tools'.setup {
+      --  capabilities = capabilities
+      --}
+      lspconfig.ts_ls.setup {
+        capabilities = capabilities,
+        -- NOTE: Enable this to troubleshoot tsserver
+        --init_options = {
+        --  tsserver = {
+        --    logDirectory = '/path/to/tsserver-logs',
+        --    logVerbosity = 'verbose',
+        --  },
+        --},
+      }
+      lspconfig.jdtls.setup {
+        capabilities = capabilities
+      }
+      lspconfig.terraformls.setup {
+        capabilities = capabilities
+      }
+
+      if not configs.protobuf_pls then
+        configs.protobuf_pls = {
+          default_config = {
+            cmd = { 'pls' },
+            filetypes = { 'proto' },
+            root_dir = function(fname)
+              return lspconfig.util.find_git_ancestor(fname)
+            end
+          },
+        }
+      end
+      lspconfig.protobuf_pls.setup{
+        capabilities = capabilities
+      }
+    end,
+  },
+  {
+    "zbirenbaum/copilot-cmp",
+    config = function ()
+      require'copilot_cmp'.setup()
+    end
+  },
+  {
+    "lttr/cmp-jira",
+    config = function ()
+      require'cmp_jira'.setup()
+    end
+  },
+  {
+    "hrsh7th/nvim-cmp",
+    dependencies = {
+      "hrsh7th/cmp-nvim-lsp",
+      "hrsh7th/cmp-buffer",
+      "hrsh7th/cmp-path",
+      "hrsh7th/cmp-cmdline",
+      --"quangnguyen30192/cmp-nvim-ultisnips",
+      "zbirenbaum/copilot-cmp",
+      "onsails/lspkind.nvim",
+      "lttr/cmp-jira",
+    },
+    config = function()
+      -- @source: https://github.com/hrsh7th/nvim-cmp/?tab=readme-ov-file#recommended-configuration
+      -- @source: https://github.com/onsails/lspkind.nvim?tab=readme-ov-file#option-2-nvim-cmp
+      -- @source: https://github.com/zbirenbaum/copilot-cmp?tab=readme-ov-file#highlighting--icon
+      -- Set up nvim-cmp.
+      local cmp = require'cmp'
+      local lspkind = require'lspkind'
+
+      cmp.setup({
+      --  snippet = {
+      --    expand = function(args)
+      --      vim.fn["UltiSnips#Anon"](args.body)
+      --    end,
+      --  },
+        window = {
+          -- completion = cmp.config.window.bordered(),
+          -- documentation = cmp.config.window.bordered(),
+        },
+        mapping = cmp.mapping.preset.insert({
+          ['<C-b>'] = cmp.mapping.scroll_docs(-4),
+          ['<C-f>'] = cmp.mapping.scroll_docs(4),
+          ['<C-Space>'] = cmp.mapping.complete(),
+          ['<C-e>'] = cmp.mapping.abort(),
+          ['<CR>'] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
+        }),
+        sources = cmp.config.sources(
+          {
+            { name = 'nvim_lsp' },
+        --    { name = 'ultisnips' },
+          }, {
+            {
+              name = 'buffer',
+              option = {
+                get_bufnrs = function()
+                  local bufs = {}
+                  for _, win in ipairs(vim.api.nvim_list_wins()) do
+                    bufs[vim.api.nvim_win_get_buf(win)] = true
+                  end
+                  return vim.tbl_keys(bufs)
+                end
+              },
+            },
+          },
+          {
+            { name = "copilot", group_index = 2 }
+          }
+        ),
+        formatting = {
+          format = lspkind.cmp_format({
+            mode = 'symbol',
+            maxwidth = 50,
+            ellipsis_char = '…',
+            show_labelDetails = true,
+            symbol_map = { Copilot = "" },
+          }),
+        },
+      })
+
+      -- Set configuration for specific filetype.
+      for i, fileType in ipairs({'gitcommit', 'jjdescription'}) do
+        cmp.setup.filetype(fileType, {
+          sources = cmp.config.sources(
+            {
+              { name = "jira" },
+            },
+            {
+              { name = 'git' }, -- You can specify the `git` source if [you were installed it](https://github.com/petertriho/cmp-git).
+            },
+            {
+              { name = 'buffer' },
+            }
+          ),
+          formatting = {
+            format = lspkind.cmp_format({
+              mode = 'symbol',
+              maxwidth = 100,
+              ellipsis_char = '…',
+              show_labelDetails = true,
+              symbol_map = {
+                Copilot = "",
+                Jira = "󰌃",
+              },
+            }),
+          },
+        })
+      end
+
+      -- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore).
+      cmp.setup.cmdline({ '/', '?' }, {
+        mapping = cmp.mapping.preset.cmdline(),
+        sources = {
+          { name = 'buffer' }
+        }
+      })
+
+      -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
+      cmp.setup.cmdline(':', {
+        mapping = cmp.mapping.preset.cmdline(),
+        sources = cmp.config.sources({
+          { name = 'path' }
+        }, {
+          { name = 'cmdline' }
+        })
+      })
+    end,
+  },
+  -- Possible replacement: https://github.com/typescript-language-server/typescript-language-server.
+  -- Read http://shortn/hy55K.
+  {
+    "pmizio/typescript-tools.nvim",
+    dependencies = {
+      "nvim-lua/plenary.nvim",
+    },
+  },
+  {
+    "antosha417/nvim-lsp-file-operations",
+    config = true,
+  }
+}
diff --git a/private_dot_config/nvim/lua/plugins/markdown-preview.lua b/private_dot_config/nvim/lua/plugins/markdown-preview.lua
new file mode 100644
index 0000000..9584aec
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/markdown-preview.lua
@@ -0,0 +1,11 @@
+return {
+  {
+    "iamcco/markdown-preview.nvim",
+    cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
+    build = "cd app && npm install",
+    init = function()
+      vim.g.mkdp_filetypes = { "markdown" }
+    end,
+    ft = { "markdown" },
+  },
+}
diff --git a/private_dot_config/nvim/lua/plugins/others.lua.tmpl b/private_dot_config/nvim/lua/plugins/others.lua.tmpl
new file mode 100644
index 0000000..37ad2ee
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/others.lua.tmpl
@@ -0,0 +1,72 @@
+return {
+  {
+    -- Show result count (like  [2/93] )
+    "google/vim-searchindex",
+    dependencies = {
+      "google/vim-maktaba",
+      "google/vim-glaive",
+    },
+  },
+
+  -- Extra functionality
+  --{
+  --  "SirVer/ultisnips",
+  --  config = function()
+  --    vim.g.UltiSnipsExpandTrigger       = '<Tab>'    -- use Tab to expand snippets
+  --    vim.g.UltiSnipsJumpForwardTrigger  = '<Tab>'    -- use Tab to move forward through tabstops
+  --    vim.g.UltiSnipsJumpBackwardTrigger = '<S-Tab>'  -- use Shift-Tab to move backward through tabstops
+  --  end,
+  --}
+  --"honza/vim-snippets",
+  --{
+  --  "github/copilot.vim",
+  --  config = function()
+      -- @source https://stackoverflow.com/questions/75926959/activate-copilot-for-only-one-directory
+      -- Force disable everywhere
+      --vim.api.nvim_create_autocmd({ 'BufEnter' }, {
+      --    pattern = '*',
+      --    command = "Copilot disable"
+      --})
+
+      -- Force enable in allowlisted directories
+      --vim.api.nvim_create_autocmd({ 'BufEnter' }, {
+      --    pattern = vim.fn.expand('~') .. '/gitrepos/infinitegforums/*',
+      --    command = "Copilot enable"
+      --})
+      --vim.api.nvim_create_autocmd({ 'BufEnter' }, {
+      --    pattern = {
+      --        vim.fn.expand('~') .. '/gitrepos/translateselectedtext/*',
+      --        vim.fn.expand('~') .. '/gitrepos/screen-capture/*',
+      --    },
+      --    command = "Copilot enable"
+      --})
+  --  end,
+  --},
+  {
+    "ray-x/lsp_signature.nvim",
+    config = function()
+      require('lsp_signature').setup{
+        bind = true,
+        handler_opts = {
+          border = 'rounded',
+        },
+      }
+    end,
+  },
+  "folke/trouble.nvim",
+  {
+    "lervag/vimtex",
+    config = function()
+{{- if and .chezmoi.os (eq .chezmoi.os "linux") }}
+      vim.g.vimtex_view_method = 'zathura'
+{{- else}}
+      vim.g.vimtex_view_method = 'skim'
+{{- end}}
+      -- Error given by apuntsgenerics
+      vim.g.vimtex_quickfix_ignore_filters = {
+        'Package hyperref Warning: Token not allowed in a PDF string (Unicode): removing',
+      }
+    end,
+  },
+  "will133/vim-dirdiff",
+}
diff --git a/private_dot_config/nvim/lua/plugins/styles.lua b/private_dot_config/nvim/lua/plugins/styles.lua
new file mode 100644
index 0000000..09180ab
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/styles.lua
@@ -0,0 +1,63 @@
+return {
+  {
+    "vim-airline/vim-airline",
+    dependencies = {
+      "vim-airline/vim-airline-themes",
+    },
+    config = function()
+      vim.g.airline_theme = 'tender'
+    end,
+  },
+  "rafi/awesome-vim-colorschemes",
+  {
+    "nvim-tree/nvim-tree.lua",
+    dependencies = {
+      "nvim-tree/nvim-web-devicons",
+    },
+    config = function()
+      -- set termguicolors to enable highlight groups
+      vim.opt.termguicolors = true
+
+      require("nvim-tree").setup({
+        view = {
+          adaptive_size = true,
+          width = {
+            max = 50
+          },
+        },
+        renderer = {
+          group_empty = true,
+          indent_markers = {
+            enable = false,
+            inline_arrows = false,
+          },
+        },
+        git = {
+          enable = true,
+          timeout = 5000,
+        },
+        filters = {
+          custom = {
+            "^\\.git$",
+            "^\\.jj",
+          },
+          git_ignored = true,
+          exclude = {
+            ".env",
+            ".local.yml",
+          },
+        },
+        diagnostics = {
+          enable = true,
+        },
+        modified = {
+          enable = true,
+        },
+        update_focused_file = {
+          enable = true,
+        },
+        select_prompts = true,
+      })
+    end,
+  }
+}
diff --git a/private_dot_config/nvim/lua/plugins/syntax_highlighting.lua b/private_dot_config/nvim/lua/plugins/syntax_highlighting.lua
new file mode 100644
index 0000000..1bcb77c
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/syntax_highlighting.lua
@@ -0,0 +1,11 @@
+vim.g.vue_pre_processors = {}
+vim.g.htl_css_templates = 1
+
+return {
+  "posva/vim-vue", -- @deprecated
+  "chikamichi/mediawiki.vim",
+  "gburca/vim-logcat",
+  "kelwin/vim-smali",
+  "jonsmithers/vim-html-template-literals",
+  "https://gerrit.avm99963.com/vim/jjdescription",
+}
diff --git a/private_dot_config/nvim/lua/plugins/telescope.lua b/private_dot_config/nvim/lua/plugins/telescope.lua
new file mode 100644
index 0000000..06879a4
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/telescope.lua
@@ -0,0 +1,40 @@
+return {
+  {
+    "nvim-telescope/telescope.nvim", branch = "0.1.x",
+    dependencies = {
+      "nvim-treesitter/nvim-treesitter",
+      "nvim-telescope/telescope-ui-select.nvim",
+      "nvim-lua/plenary.nvim", 
+    },
+    config = function()
+      require('telescope').setup {
+        extensions = {
+          ['ui-select'] = {
+            require('telescope.themes').get_dropdown{},
+          },
+        },
+        defaults = {
+          mappings = {
+            i = { ["<c-t>"] = require('trouble.sources.telescope').open },
+            n = { ["<c-t>"] = require('trouble.sources.telescope').open },
+          },
+          file_ignore_patterns = {
+            "%.git/",
+          },
+        },
+        pickers = {
+          find_files = {
+            hidden = true,
+          },
+        },
+      }
+      require('telescope').load_extension('ui-select')
+
+      local builtin = require'telescope.builtin'
+      vim.keymap.set('n', 'gd', builtin.lsp_definitions, opts)
+      vim.keymap.set('n', 'gi', builtin.lsp_implementations, opts)
+      vim.keymap.set('n', '<space>D', builtin.lsp_type_definitions, opts)
+      vim.keymap.set('n', 'gr', builtin.lsp_references, opts)
+    end,
+  },
+}
diff --git a/private_dot_config/nvim/lua/plugins/vim-ansible-vault.lua.tmpl b/private_dot_config/nvim/lua/plugins/vim-ansible-vault.lua.tmpl
new file mode 100644
index 0000000..11c8f34
--- /dev/null
+++ b/private_dot_config/nvim/lua/plugins/vim-ansible-vault.lua.tmpl
@@ -0,0 +1,10 @@
+return {
+{{- if and (index . "ansibleVault") (index .ansibleVault "passwordFile") (ne .ansibleVault.passwordFile "") -}}
+  {
+    "arouene/vim-ansible-vault",
+    config = function()
+      vim.g.ansible_vault_password_file = {{ .ansibleVault.passwordFile | quote }}
+    end
+  }
+{{- end -}}
+}
diff --git a/private_dot_config/rofi/config.rasi.tmpl b/private_dot_config/rofi/config.rasi.tmpl
new file mode 100644
index 0000000..43ed37d
--- /dev/null
+++ b/private_dot_config/rofi/config.rasi.tmpl
@@ -0,0 +1,35 @@
+@theme "squared-everforest.rasi"
+
+configuration {
+  modes: "drun,run,ssh,window";
+  show-icons: true;
+  terminal: "foot";
+  icon-theme: "hicolor";
+  drun-match-fields: "name,generic,categories,keywords";
+  drun-show-actions: false;
+  sidebar-mode: true;
+  window-thumbnail: true;
+  timeout {
+      action: "kb-cancel";
+      delay:  0;
+  }
+  filebrowser {
+      directories-first: true;
+      sorting-method:    "name";
+  }
+  icon {
+      theme: "hicolor";
+  }
+  drun {
+    display-name: "󰀻";
+  }
+  run {
+    display-name: "";
+  }
+  ssh {
+    display-name: "󰣀";
+  }
+  window {
+    display-name: "";
+  }
+}
diff --git a/private_dot_config/rofi/squared-everforest.rasi b/private_dot_config/rofi/squared-everforest.rasi
new file mode 100644
index 0000000..22c57ab
--- /dev/null
+++ b/private_dot_config/rofi/squared-everforest.rasi
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * ROFI SQUARED THEME USING THE EVERFOREST PALETTE 
+ * User                 : LR-Tech               
+ * Theme Repo           : https://github.com/lr-tech/rofi-themes-collection
+ *******************************************************************************/
+
+* {
+    font:   "FiraCode Nerd Font Medium 12";
+
+    bg0:     #2B3339;
+    bg1:     #323D43;
+    fg0:     #D3C6AA;
+
+    accent-color:     #A7C080;
+    urgent-color:     #DBBC7F;
+
+    background-color:   transparent;
+    text-color:         @fg0;
+
+    margin:     0;
+    padding:    0;
+    spacing:    0;
+}
+
+window {
+    location:   center;
+    width:      480;
+
+    background-color:   @bg0;
+}
+
+inputbar {
+    spacing:    8px; 
+    padding:    8px;
+
+    background-color:   @bg1;
+}
+
+prompt, entry, element-icon, element-text {
+    vertical-align: 0.5;
+}
+
+prompt {
+    text-color: @accent-color;
+}
+
+textbox {
+    padding:            8px;
+    background-color:   @bg1;
+}
+
+listview {
+    padding:    4px 0;
+    lines:      8;
+    columns:    1;
+
+    fixed-height:   false;
+}
+
+element {
+    padding:    8px;
+    spacing:    8px;
+}
+
+element normal normal {
+    text-color: @fg0;
+}
+
+element normal urgent {
+    text-color: @urgent-color;
+}
+
+element normal active {
+    text-color: @accent-color;
+}
+
+element alternate active {
+    text-color: @accent-color;
+}
+
+element selected {
+    text-color: @bg0;
+}
+
+element selected normal, element selected active {
+    background-color:   @accent-color;
+}
+
+element selected urgent {
+    background-color:   @urgent-color;
+}
+
+element-icon {
+    size:   0.8em;
+}
+
+element-text {
+    text-color: inherit;
+}
diff --git a/private_dot_config/rofi/squared-everforest.rasi.license b/private_dot_config/rofi/squared-everforest.rasi.license
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/private_dot_config/rofi/squared-everforest.rasi.license
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/private_dot_config/sway/config.tmpl b/private_dot_config/sway/config.tmpl
new file mode 100644
index 0000000..65169ac
--- /dev/null
+++ b/private_dot_config/sway/config.tmpl
@@ -0,0 +1,348 @@
+# Read `man 5 sway` for a complete reference.
+
+### Variables
+#
+# Logo key. Use Mod1 for Alt.
+set $mod Mod4
+# Home row direction keys, like vim
+set $left h
+set $down j
+set $up k
+set $right l
+# Your preferred terminal emulator
+set $term foot
+# Your preferred application launcher
+# Note: pass the final command to swaymsg so that the resulting window can be opened
+# on the original workspace that the command was run on.
+#set $menu dmenu_path | wmenu | xargs swaymsg exec --
+set $menu rofi -show drun | xargs swaymsg exec --
+set $menuDrun rofi -show run | xargs swaymsg exec --
+set $menuSsh rofi -show ssh | xargs swaymsg exec --
+set $menuWindows rofi -show window | xargs swaymsg exec --
+set $menuPower rofi -show power-menu -modi power-menu:rofi-power-menu | xargs swaymsg exec --
+set $menuClipboard rofi -show clipboard -modi clipboard:~/bin/cliphist-rofi-img -show-icons | xargs swaymsg exec --
+
+{{ if eq .chezmoi.hostname "pixelbook" }}
+set $internalScreen "Sharp Corporation LQ123P1JX32 Unknown"
+set $auxScreen "LG Electronics LG Ultra HD 0x0000D4DC"
+
+set $internalKeyboard "4012:2782:keyd_virtual_keyboard"
+set $macKeyboard "1452:598:Apple_Wireless_Keyboard"
+{{ end }}
+
+### Output configuration
+#
+# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/)
+output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_2048x1536.png fill
+#
+# Example configuration:
+#
+#   output HDMI-A-1 resolution 1920x1080 position 1920,0
+#
+# You can get the names of your outputs by running: swaymsg -t get_outputs
+
+{{ if eq .chezmoi.hostname "pixelbook" -}}
+output $internalScreen {
+  mode 2400x1600@59.982Hz
+  pos 0 0
+}
+
+output $auxScreen {
+  mode 1920x1080@60.000Hz
+  pos 1200 -280
+}
+
+workspace 1 output $internalScreen
+workspace 10 output $auxScreen $internalScreen
+{{- end }}
+
+### Idle configuration
+#
+# Example configuration:
+#
+# exec swayidle -w \
+#          timeout 300 'swaylock -f -c 000000' \
+#          timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
+#          before-sleep 'swaylock -f -c 000000'
+#
+# This will lock your screen after 300 seconds of inactivity, then turn off
+# your displays after another 300 seconds, and turn your screens back on when
+# resumed. It will also lock your screen before your computer goes to sleep.
+
+### Input configuration
+#
+# Example configuration:
+#
+#   input "2:14:SynPS/2_Synaptics_TouchPad" {
+#       dwt enabled
+#       tap enabled
+#       natural_scroll enabled
+#       middle_emulation enabled
+#   }
+#
+# You can get the names of your inputs by running: swaymsg -t get_inputs
+# Read `man 5 sway-input` for more information about this section.
+
+### Key bindings
+#
+# Basics:
+#
+    # Start a terminal
+    bindsym $mod+Return exec $term
+
+    # Kill focused window
+    bindsym $mod+Shift+q kill
+
+    # Start the launcher launcher
+    bindsym $mod+d exec $menu
+
+    # Other menus
+    bindsym $mod+Shift+d exec $menuDrun
+    bindsym $mod+g exec $menuSsh
+    bindsym $mod+Shift+g exec $menuWindows
+    bindsym $mod+c exec $menuClipboard
+    bindsym $mod+Shift+s exec $menuPower
+
+    # Drag floating windows by holding down $mod and left mouse button.
+    # Resize them with right mouse button + $mod.
+    # Despite the name, also works for non-floating windows.
+    # Change normal to inverse to use left mouse button for resizing and right
+    # mouse button for dragging.
+    floating_modifier $mod normal
+
+    # Reload the configuration file
+    bindsym $mod+Shift+c reload
+
+    # Exit sway (logs you out of your Wayland session)
+    bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
+#
+# Moving around:
+#
+    # Move your focus around
+    bindsym $mod+$left focus left
+    bindsym $mod+$down focus down
+    bindsym $mod+$up focus up
+    bindsym $mod+$right focus right
+    # Or use $mod+[up|down|left|right]
+    bindsym $mod+Left focus left
+    bindsym $mod+Down focus down
+    bindsym $mod+Up focus up
+    bindsym $mod+Right focus right
+
+    # Move the focused window with the same, but add Shift
+    bindsym $mod+Shift+$left move left
+    bindsym $mod+Shift+$down move down
+    bindsym $mod+Shift+$up move up
+    bindsym $mod+Shift+$right move right
+    # Ditto, with arrow keys
+    bindsym $mod+Shift+Left move left
+    bindsym $mod+Shift+Down move down
+    bindsym $mod+Shift+Up move up
+    bindsym $mod+Shift+Right move right
+#
+# Workspaces:
+#
+    # Switch to workspace
+    bindsym $mod+1 workspace number 1
+    bindsym $mod+2 workspace number 2
+    bindsym $mod+3 workspace number 3
+    bindsym $mod+4 workspace number 4
+    bindsym $mod+5 workspace number 5
+    bindsym $mod+6 workspace number 6
+    bindsym $mod+7 workspace number 7
+    bindsym $mod+8 workspace number 8
+    bindsym $mod+9 workspace number 9
+    bindsym $mod+0 workspace number 10
+    # Move focused container to workspace
+    bindsym $mod+Shift+1 move container to workspace number 1
+    bindsym $mod+Shift+2 move container to workspace number 2
+    bindsym $mod+Shift+3 move container to workspace number 3
+    bindsym $mod+Shift+4 move container to workspace number 4
+    bindsym $mod+Shift+5 move container to workspace number 5
+    bindsym $mod+Shift+6 move container to workspace number 6
+    bindsym $mod+Shift+7 move container to workspace number 7
+    bindsym $mod+Shift+8 move container to workspace number 8
+    bindsym $mod+Shift+9 move container to workspace number 9
+    bindsym $mod+Shift+0 move container to workspace number 10
+    # Note: workspaces can have any name you want, not just numbers.
+    # We just use 1-10 as the default.
+#
+# Layout stuff:
+#
+    # You can "split" the current object of your focus with
+    # $mod+b or $mod+v, for horizontal and vertical splits
+    # respectively.
+    bindsym $mod+b splith
+    bindsym $mod+v splitv
+
+    # Switch the current container between different layout styles
+    bindsym $mod+s layout stacking
+    bindsym $mod+w layout tabbed
+    bindsym $mod+e layout toggle split
+
+    # Make the current focus fullscreen
+    bindsym $mod+f fullscreen
+
+    # Toggle the current focus between tiling and floating mode
+    bindsym $mod+Shift+space floating toggle
+
+    # Swap focus between the tiling area and the floating area
+    bindsym $mod+space focus mode_toggle
+
+    # Move focus to the parent container
+    bindsym $mod+a focus parent
+#
+# Scratchpad:
+#
+    # Sway has a "scratchpad", which is a bag of holding for windows.
+    # You can send windows there and get them back later.
+
+    # Move the currently focused window to the scratchpad
+    bindsym $mod+Shift+minus move scratchpad
+
+    # Show the next scratchpad window or hide the focused scratchpad window.
+    # If there are multiple scratchpad windows, this command cycles through them.
+    bindsym $mod+minus scratchpad show
+
+#
+# Custom keybindings:
+#
+    bindsym Control+Shift+Comma exec flatpak run it.mijorus.smile
+
+# Sound
+    bindsym XF86AudioRaiseVolume exec wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+
+    bindsym XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
+    bindsym XF86AudioMute exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
+    bindsym XF86AudioPlay exec playerctl play-pause
+    bindsym XF86AudioPause exec playerctl play-pause
+    bindsym XF86AudioNext exec playerctl next
+    bindsym XF86AudioPrev exec playerctl previous
+
+# Brightness
+    bindsym XF86MonBrightnessDown exec brightnessctl set 5%-
+    bindsym XF86MonBrightnessUp exec brightnessctl set 5%+
+    bindsym Alt+XF86MonBrightnessDown exec brightnessctl --device='chromeos::kbd_backlight' set 5%-
+    bindsym Alt+XF86MonBrightnessUp exec brightnessctl --device='chromeos::kbd_backlight' set 5%+
+
+# Menu
+    bindsym XF86Tools exec $menu
+    bindsym XF86LaunchB exec $menu
+
+# Notifications
+    bindsym $mod+X exec makoctl dismiss
+    bindsym $mod+Shift+X exec makoctl restore
+    bindsym $mod+Z exec makoctl dismiss -a
+
+#
+# Resizing containers:
+#
+mode "resize" {
+    # left will shrink the containers width
+    # right will grow the containers width
+    # up will shrink the containers height
+    # down will grow the containers height
+    bindsym $left resize shrink width 10px
+    bindsym $down resize grow height 10px
+    bindsym $up resize shrink height 10px
+    bindsym $right resize grow width 10px
+
+    # Ditto, with arrow keys
+    bindsym Left resize shrink width 10px
+    bindsym Down resize grow height 10px
+    bindsym Up resize shrink height 10px
+    bindsym Right resize grow width 10px
+
+    # Return to default mode
+    bindsym Return mode "default"
+    bindsym Escape mode "default"
+}
+bindsym $mod+r mode "resize"
+
+#
+# Status Bar:
+#
+# Read `man 5 sway-bar` for more information about this section.
+bar {
+    position top
+
+    status_command SCRIPT_DIR=~/.config/i3blocks i3blocks
+
+    colors {
+        statusline #ffffff
+        background #323232
+        inactive_workspace #32323200 #32323200 #5c5c5c
+    }
+}
+
+include /etc/sway/config.d/*
+
+input type:touchpad {
+  tap enabled
+  natural_scroll enabled
+}
+
+input type:pointer {
+  natural_scroll enabled
+}
+
+{{ if eq .chezmoi.hostname "pixelbook" -}}
+input $internalKeyboard {
+  xkb_layout us,es
+  xkb_options grp:rctrl_toggle
+}
+
+input $macKeyboard {
+  xkb_layout es,us
+  xkb_options grp:rwin_toggle
+}
+
+input type:tablet_tool {
+  map_to_output $internalScreen
+}
+
+input type:touch {
+  map_to_output $internalScreen
+}
+{{- end }}
+
+font pango:monospace 10
+
+# @source: https://www.reddit.com/r/swaywm/comments/16nutle/comment/k1ig9b6/
+# @source: https://gitlab.com/that1communist/dotfiles/-/blob/master/.config/sway/modules/win-rules
+# NOTE: You can get app_id's with `swaymsg -t get_tree`
+for_window {
+  [window_role="pop-up"] floating enable
+  [window_role="About"] floating enable
+  [window_role="bubble"] floating enable
+  [window_role="dialog"] floating enable
+  [window_type="dialog"] floating enable
+
+  [title="(?:Open|Save) (?:File|Folder|As)"] floating enable, resize set width 1030 height 710
+
+  [app_id="org.gnome.Calculator"] floating enable
+  [app_id="it.mijorus.smile"] floating enable
+  # See https://wiki.archlinux.org/index.php?title=Flameshot&oldid=813985#Flameshot_does_not_work_on_all_monitors_of_a_multi-monitor_setup_in_Sway
+  [app_id="flameshot"] border pixel 0, floating enable, fullscreen disable, move absolute position 0 0
+
+  [title=".* is sharing your screen"] move window to scratchpad
+  [app_id="chrome-pjibgclleladliembfgfagdaldikeohf-.*"] move window to workspace 10; workspace 10
+  [app_id="chrome-aoocenepihlidnmnheodnngihilbadfo-.*"] move window to workspace 10; workspace 10
+}
+
+exec mako
+
+# See https://github.com/emersion/xdg-desktop-portal-wlr/blob/d9ada849aeca6137915de2df69beaef4e272cc1d/README.md#running
+exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
+
+# See https://github.com/flameshot-org/flameshot/blob/14a136777cd82ab70f42c13b4bc9418c756d91d2/docs/Sway%20and%20wlroots%20support.md
+exec SDL_VIDEODRIVER=wayland _JAVA_AWT_WM_NONREPARENTING=1 QT_QPA_PLATFORM=wayland XDG_CURRENT_DESKTOP=sway XDG_SESSION_DESKTOP=sway flameshot
+
+exec wl-paste --watch cliphist store
+
+# See https://wiki.archlinux.org/title/Sway#Idle
+exec swayidle -w \
+  timeout 235 'swaymsg "output * power off"' \
+  resume 'swaymsg "output * power on"' \
+  timeout 240 'swaylock -f' \
+  timeout 300 'systemctl sleep' \
+  before-sleep 'playerctl pause; swaylock -f'
diff --git a/private_dot_config/xdg-desktop-portal/portals.conf b/private_dot_config/xdg-desktop-portal/portals.conf
new file mode 100644
index 0000000..105faad
--- /dev/null
+++ b/private_dot_config/xdg-desktop-portal/portals.conf
@@ -0,0 +1,2 @@
+[preferred]
+org.freedesktop.impl.portal.Settings=darkman
