diff --git a/.XResources b/.XResources
new file mode 100644
index 000000000..768fdb0b4
--- /dev/null
+++ b/.XResources
@@ -0,0 +1,34 @@
+! ~/.Xresources
+
+! colors, defaults
+"color0":"#282936"
+"color1":"#ea51b2"
+"color2":"#00f769"
+"color3":"#ebff87"
+"color4":"#62d6e8"
+"color5":"#b45bcf"
+"color6":"#a1efe4"
+"color7":"#e9e9f4"
+"color8":"#4d4f68"
+"color9":"#ea51b2"
+"color10":"#00f769"
+"color11":"#ebff87"
+"color12":"#62d6e8"
+"color13":"#b45bcf"
+"color14":"#a1efe4"
+"color15":"#f7f7fb"
+
+! rofi
+rofi.color-enabled: true
+rofi.separator-style: solid
+rofi.font: FONT SIZE
+rofi.bw: 2
+rofi.columns: 1
+rofi.yoffset: 0
+rofi.fake-transparency: false
+rofi.hide-scrollbar: true
+
+rofi.location: 0
+rofi.width: 30
+rofi.lines: 10
+rofi.fixed-num-lines: true
diff --git a/.circleci/verify_install.sh b/.circleci/verify_install.sh
new file mode 100755
index 000000000..937057d28
--- /dev/null
+++ b/.circleci/verify_install.sh
@@ -0,0 +1,240 @@
+#!/bin/bash
+
+info() {
+ printf "\\r [ \\033[00;34m..\\033[0m ] %s\\n" "${1}"
+}
+
+user() {
+ printf "\\r [ \\033[0;33m??\\033[0m ] %s\\n" "${1}"
+}
+
+success() {
+ printf "\\r\\033[2K [ \\033[00;32mOK\\033[0m ] %s\\n" "${1}"
+}
+
+in_progress() {
+ printf "\\r [ \\033[00;34m\\u23F0\\033[0m ] %s\\r" "${1}"
+}
+
+fail() {
+ printf "\\r\\033[2K [\\033[0;31mFAIL\\033[0m] %s\\n" "${1}" >&2
+ exit 666
+}
+
+exists() {
+ command -v "$1" &>/dev/null
+}
+
+retry() {
+ local n=1
+ local max=50
+ local delay=2
+
+ while true; do
+ if "$@"; then
+ break
+ else
+ if [[ $n -lt $max ]]; then
+ ((n++))
+ sleep $delay
+ else
+ fail "The command has failed after $n attempts."
+ fi
+ fi
+ done
+}
+
+validate_bin_accessible() (
+ bins_to_check=(
+ # founations
+ nvim
+ zsh
+ terminator
+ # containers & stuff
+ docker
+ docker-compose
+ # git & utils
+ git
+ git-lfs
+ git-extras
+ exiftool
+ # gotta have python dawg
+ python2
+ python3
+ # node should be provided as well
+ node
+ # do not forget golang
+ go
+ # browsers
+ google-chrome-unstable
+ firefox
+ brave-browser-beta
+ # linters matter
+ shellcheck
+ yamllint
+ # utilities
+ purge-old-kernels
+ snap
+ http
+ tree
+ aria2c
+ ctags
+ htop
+ jq
+ )
+
+ for bin in "${bins_to_check[@]}"; do
+ if retry exists "${bin}"; then
+ success "${bin} is accessible via $(whereis "${bin}")"
+ else
+ fail "${bin} is not accessible"
+ fi
+ done
+)
+
+validate_interactive_bins() (
+ bins_to_check=(
+ pyenv
+ nodenv
+ goenv
+ jenv
+ fzf
+ )
+
+ for bin in "${bins_to_check[@]}"; do
+ bin_path="${HOME}/.${bin}/bin/${bin}"
+
+ if [[ -s "${bin_path}" ]]; then
+ v_out=$($bin_path --version | tr "'${bin}'" ' ' | sed -e 's/^[[:space:]]*//')
+ success "${bin} is accessible via ${bin_path} with version ${v_out}"
+ else
+ fail "${bin} is not accessible"
+ fi
+
+ if retry exists "${bin}"; then
+ success "${bin} is accessible via $(whereis "${bin}")"
+ else
+ fail "${bin} is not accessible"
+ fi
+ done
+)
+
+validate_pyenv() (
+ if [[ ! -s "${HOME}/.pyenv" ]]; then
+ fail "Failed to locate pyenv directory in \$HOME"
+ else
+ success "pyenv directory set"
+
+ local venvs_to_check
+ venvs_to_check=(
+ neovim2
+ neovim3
+ )
+
+ for venv in "${venvs_to_check[@]}"; do
+ if ! "${HOME}/.pyenv/bin/pyenv" versions | grep -q "${venv}"; then
+ fail "Virtualenv ${venv} was not installed"
+ else
+ success "Virtualenv ${venv} :: $(${HOME}/.pyenv/bin/pyenv shell ${venv} | python --version) is installed"
+ fi
+ done
+
+ zsh -mil -c "pyenv doctor"
+ if [[ ! -f "${HOME}/.pyenv/version" ]]; then
+ fail "pyenv did not set global system version"
+ fi
+ fi
+)
+
+validate_nodenv() (
+ if [[ ! -s "${HOME}/.nodenv" ]]; then
+ fail "Failed to locate nodenv directory in \$HOME"
+ else
+ success "nodenv directory set"
+ zsh -mil -c "npx -p @nodenv/nodenv-installer nodenv-doctor"
+ if [[ ! -f "${HOME}/.nodenv/version" ]]; then
+ fail "nodenv did not set global system version"
+ fi
+ fi
+
+ local bins_to_check
+ bins_to_check=(
+ neovim-node-host
+ prettier
+ tsc
+ elm-language-server
+ bash-language-server
+ vim-language-server
+ docker-langserver
+ )
+ for bin in "${bins_to_check[@]}"; do
+ bin_path="$(command -v "${bin}")"
+
+ if [[ -s "${bin_path}" ]]; then
+ if $bin_path --version 2>/dev/null 1>/dev/null; then
+ v_out=$($bin_path --version | tr -d 'Version ' | tr "'${bin}'" ' ' | sed -e 's/^[[:space:]]*//')
+ else
+ v_out="?"
+ fi
+ success "${bin} is accessible via ${bin_path} with version ${v_out}"
+ else
+ fail "${bin} is not accessible"
+ fi
+
+ done
+
+)
+
+validate_goenv() (
+ if [[ ! -s "${HOME}/.goenv" ]]; then
+ fail "Failed to locate goenv directory in \$HOME"
+ else
+ success "goenv directory set"
+ if [[ ! -f "${HOME}/.goenv/version" ]]; then
+ fail "goenv did not set global system version"
+ fi
+ fi
+)
+
+validate_jenv() (
+ if [[ ! -s "${HOME}/.jenv" ]]; then
+ fail "Failed to locate jenv directory in \$HOME"
+ else
+ success "jenv directory set"
+ jenv doctor
+ if [[ ! -f "${HOME}/.jenv/version" ]]; then
+ fail "jenv did not set global system version"
+ fi
+ fi
+)
+
+validate_git_config() (
+ if [[ ! -f "${HOME}/.gitconfig.local" ]]; then
+ fail "Local git configuration not set"
+ else
+ success "git configured"
+ fi
+)
+
+validate_wakatime_config() (
+ if [[ ! -f "${HOME}/.wakatime.cfg" ]]; then
+ fail "Local wakatime configuration not set"
+ else
+ success "wakatime configured"
+ fi
+)
+
+info 'Validating installation'
+(
+ info "Path is [ $(echo "${PATH}" | tr ':' '\t\r\n') ]"
+ validate_git_config
+ validate_wakatime_config
+ validate_bin_accessible
+ validate_interactive_bins
+ validate_pyenv
+ validate_nodenv
+ validate_goenv
+ validate_jenv
+)
+info 'Validation successful'
+screenfetch
diff --git a/.gitmodules b/.gitmodules
index f37c94f64..db8d94f0f 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -18,17 +18,6 @@
url = https://github.com/nodenv/nodenv.git
shallow = true
branch = master
-[submodule "dependencies/ctags"]
- path = dependencies/ctags
- url = https://github.com/universal-ctags/ctags.git
- shallow = true
- ignore = untracked
- branch = master
-[submodule "dependencies/dotbot_plugin_aptget"]
- path = dependencies/dotbot_plugin_aptget
- url = https://github.com/dein0s/dotbot_plugin_aptget.git
- shallow = true
- branch = master
[submodule "dependencies/xxenv-latest"]
path = dependencies/xxenv-latest
url = https://github.com/momo-lab/xxenv-latest
diff --git a/.installer/install_brave.sh b/.installer/install_brave.sh
deleted file mode 100755
index 63c310826..000000000
--- a/.installer/install_brave.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-distro=$(lsb_release -si 2>&1)
-
-curl -s https://brave-browser-apt-beta.s3.brave.com/brave-core-nightly.asc | apt-key --keyring /etc/apt/trusted.gpg.d/brave-browser-beta.gpg add -
-
-if [[ "${distro}" == "LinuxMint" ]]; then
- echo "deb [arch=amd64] https://brave-browser-apt-beta.s3.brave.com/ trusty main" | tee /etc/apt/sources.list.d/brave-browser-beta-trusty.list
-elif [[ "${distro}" == "Ubuntu" ]]; then
- source /etc/os-release
- echo "deb [arch=amd64] https://brave-browser-apt-beta.s3.brave.com/ $UBUNTU_CODENAME main" | tee "/etc/apt/sources.list.d/brave-browser-beta-${UBUNTU_CODENAME}.list"
-fi
-
-aptitude update -q -y
-aptitude install -y -V -D -Z brave-browser-beta
diff --git a/.installer/install_chrome.sh b/.installer/install_chrome.sh
deleted file mode 100755
index c235c8a8a..000000000
--- a/.installer/install_chrome.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-
-wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
-sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list'
-
-aptitude update -q -y
-aptitude install -y -V -D -Z google-chrome-unstable
diff --git a/.installer/install_ctags.sh b/.installer/install_ctags.sh
deleted file mode 100755
index f0e1e3a31..000000000
--- a/.installer/install_ctags.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-
-CTAGS_DIR="${PWD}/dependencies/ctags"
-
-[ ! -d "${CTAGS_DIR}" ] && (
- cd "${K_DOTFILES_DIR}" || exit 2
- git submodule update --init --recursive
- cd ..
-)
-[ ! -f "${HOME}/.gitconfig.local" ] && (
- touch "${HOME}/.gitconfig.local"
-)
-
-aptitude purge exuberant-ctags -q -y
-
-cd "${CTAGS_DIR}" || exit 1
-
-CURRENT_VERSION="$(git config --file "${HOME}/.gitconfig.local" --default '-1' --get ctags.version)"
-REPO_VERSION="$(git log -n 1 --format=oneline | awk '{print $1}')"
-
-if [[ "${CURRENT_VERSION}" == "${REPO_VERSION}" ]]; then
- echo "No need to install ctags again"
-else
- ./autogen.sh
- ./configure --prefix="${HOME}/.local"
- make clean
- make
- make install
- git config --file="${HOME}/.gitconfig.local" ctags.version "${REPO_VERSION}"
-fi
-cd ..
diff --git a/.installer/install_docker.sh b/.installer/install_docker.sh
deleted file mode 100755
index b72379bb8..000000000
--- a/.installer/install_docker.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/bin/bash
-
-# docker
-aptitude remove \
- docker-ce \
- docker \
- docker.io \
- runc \
- containerd \
- -y -V -D -Z
-
-normal_install() {
- aptitude install docker.io -y -V -D -Z
-}
-
-custom_install() {
- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
- add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu ${1} stable"
- aptitude update -q -y
- aptitude install docker-ce docker-ce-cli containerd.io -y -V -D -Z
-}
-
-distro=$(lsb_release -cs)
-case "${distro}" in
- "focal") normal_install ;;
- "eoan") normal_install ;;
- *) custom_install "${distro}"
-esac
-
-# enable service
-systemctl enable --now docker
-
-# docker-compose
-compose_version=$(git ls-remote https://github.com/docker/compose | grep refs/tags | grep -oP "[0-9]+\\.[0-9][0-9]+\\.[0-9]+$" | tail -n 1)
-sh -c "curl -L https://github.com/docker/compose/releases/download/v${compose_version}/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose"
-chmod +x /usr/local/bin/docker-compose
diff --git a/.pam_environment b/.pam_environment
new file mode 100644
index 000000000..1be26c6fb
--- /dev/null
+++ b/.pam_environment
@@ -0,0 +1,2 @@
+XDG_CONFIG_HOME DEFAULT=@{HOME}/.config
+XDG_CACHE_HOME DEFAULT=@{HOME}/.cache
diff --git a/config/dunst/dunstrc b/config/dunst/dunstrc
new file mode 100644
index 000000000..b786f1f2e
--- /dev/null
+++ b/config/dunst/dunstrc
@@ -0,0 +1,90 @@
+[global]
+ monitor = 0
+
+ transparency = 32
+ geometry = "300x5-30-20"
+
+ indicate_hidden = yes
+
+ notification_height = 0
+ separator_height = 2
+ padding = 8
+ horizontal_padding = 8
+
+ corner_radius = 3
+ frame_width = 3
+
+ frame_color = "#7f3fbf"
+
+ separator_color = auto
+
+ sort = yes
+
+ idle_threshold = 120
+
+ ### Text ###
+ font = Noto Sans Regular 9
+ alignment = right
+ line_height = 1
+ word_wrap = yes
+ ellipsize = middle
+ markup = full
+ format = "%s\n%b"
+
+ show_age_threshold = 60
+ stack_duplicates = true
+ hide_duplicate_count = false
+
+ ignore_newline = no
+
+ show_indicators = yes
+
+ ### Icons ###
+ icon_position = left
+ max_icon_size = 32
+
+ icon_path = /usr/share/icons/Paper/16x16/status/:/usr/share/icons/Paper/16x16/devices/:/usr/share/icons/Paper/16x16/apps/:/usr/share/pixmaps/
+
+ ### History ###
+ sticky_history = yes
+ history_length = 20
+
+ ### Misc/Advanced ###
+
+ # dmenu path.
+ dmenu = /usr/bin/dmenu -p dunst:
+ browser = /usr/bin/brave-browser-nightly -new-tab
+ always_run_script = true
+
+ title = Dunst
+ class = Dunst
+
+ startup_notification = true
+
+ verbosity = mesg
+
+ ### mouse actions
+ mouse_left_click = close_current
+ mouse_middle_click = do_action
+ mouse_right_click = close_all
+
+[shortcuts]
+ close = ctrl+space
+ close_all = ctrl+shift+space
+
+[urgency_low]
+ background = "#222f3e"
+ foreground = "#c0c5ce"
+ timeout = 3
+
+[urgency_normal]
+ background = "#222f3e"
+ foreground = "#c0c5ce"
+ frame_color = "#576574"
+ timeout = 3
+
+[urgency_critical]
+ background = "#222f3e"
+ foreground = "#bf616a"
+ frame_color = "#576574"
+ timeout = 5
diff --git a/config/i3/config b/config/i3/config
new file mode 100644
index 000000000..f24df87be
--- /dev/null
+++ b/config/i3/config
@@ -0,0 +1,227 @@
+# i3 by and for kornicameister
+# See http://i3wm.org/docs/userguide.html for guidence when lost
+
+# vim:filetype=i3
+#
+###--- Settings---###
+set $mod Mod4
+set $sup Mod1
+set $term alacritty
+set $editor nvim
+set $termexec -e $SHELL -i -c
+floating_modifier $mod
+
+## fonts
+font pango:Iosevka Nerd Font 9
+
+## workspace settings
+workspace_layout default # default stacking tabbed
+workspace_auto_back_and_forth yes
+
+## gaps settings
+smart_gaps on
+gaps inner 7
+gaps outer -2
+hide_edge_borders both
+
+new_window pixel 3
+default_border pixel 3
+
+## coloring
+set_from_resource $bg i3wm.color0 #ff0000
+set_from_resource $bg-alt i3wm.color14 #ff0000
+set_from_resource $fg i3wm.color15 #ff0000
+set_from_resource $fg-alt i3wm.color2 #ff0000
+set_from_resource $hl i3wm.color13 #ff0000
+
+client.focused $bg $bg $fg $bg $bg
+client.focused_inactive $bg $bg $fg $bg $bg
+client.unfocused $bg $bg $fg $bg $bg
+client.urgent $bg $bg $fg $bg $bg
+client.placeholder $bg $bg $fg $bg $bg
+client.background $bg
+
+###--- Autostart ---###
+exec_always --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
+exec_always --no-startup-id feh --bg-center "$HOME/.dotfiles/wallpapers/05_lake.jpg"
+exec_always --no-startup-id wal --vte -R
+exec_always --no-startup-id "$HOME/.config/polybar/launch.sh"
+exec --no-startup-id wal-vtop
+exec --no-startup-id picom -cC # compositor
+exec --no-startup-id xset s 480 dpms 600 600 600 # powersavings for display:
+exec --no-startup-id sleep 2 ; /usr/bin/dunst # notifications
+exec --no-startup-id dex -a -s /etc/xdg/autostart/:~/.config/autostart # dex execute .desktop files
+
+# start a terminal:
+bindsym $mod+Return exec i3-msg exec i3-sensible-terminal
+
+# kill focused window:
+bindsym $mod+c kill
+
+# change focus:
+bindsym $mod+j focus left
+bindsym $mod+Left focus left
+
+bindsym $mod+k focus down
+bindsym $mod+Down focus down
+
+bindsym $mod+u focus up
+bindsym $mod+Up focus up
+
+bindsym $mod+ntilde focus right
+bindsym $mod+Right focus right
+
+# move focused window:
+bindsym $mod+Shift+j move left
+bindsym $mod+Shift+Left move left
+
+bindsym $mod+Shift+k move down
+bindsym $mod+Shift+Down move down
+
+bindsym $mod+Shift+l move up
+bindsym $mod+Shift+Up move up
+
+bindsym $mod+Shift+ntilde move right
+bindsym $mod+Shift+Right move right
+
+# split in horizontal orientation:
+bindsym $mod+h split h
+
+# split in vertical orientation:
+bindsym $mod+v split v
+
+# enter fullscreen mode for the focused container:
+bindsym $mod+f fullscreen toggle
+
+# change container layout (stacked, tabbed, toggle split):
+bindsym $mod+Shift+s layout stacking
+bindsym $mod+Shift+w layout tabbed
+bindsym $mod+Shift+e layout toggle split
+
+# toggle tiling / floating:
+bindsym $mod+Shift+space floating toggle
+
+# change focus between tiling / floating windows:
+bindsym $mod+space focus mode_toggle
+
+# focus the parent container:
+bindsym $mod+a focus parent
+
+# focus the child container:
+# bindsym $mod+d focus child
+
+# workspace-edit:
+set $ws1 "1 "
+set $ws2 "2 "
+set $ws3 "3 "
+set $ws4 "4 "
+set $ws5 "5 "
+set $ws6 "6 "
+set $ws7 "7 "
+set $ws8 "8 "
+set $ws9 ""
+
+# resize floating windows with mouse scroll:
+bindsym --whole-window --border $mod+button4 resize shrink height 5 px or 5 ppt
+bindsym --whole-window --border $mod+button5 resize grow height 5 px or 5 ppt
+bindsym --whole-window --border $mod+shift+button4 resize shrink width 5 px or 5 ppt
+bindsym --whole-window --border $mod+shift+button5 resize grow width 5 px or 5 ppt
+
+# switch to workspace:
+bindsym $mod+1 workspace $ws1
+bindsym $mod+2 workspace $ws2
+bindsym $mod+3 workspace $ws3
+bindsym $mod+4 workspace $ws4
+bindsym $mod+5 workspace $ws5
+bindsym $mod+6 workspace $ws6
+bindsym $mod+7 workspace $ws7
+bindsym $mod+8 workspace $ws8
+bindsym $mod+9 workspace $ws9
+
+# move focused container to workspace:
+bindsym $mod+Shift+1 move container to workspace $ws1
+bindsym $mod+Shift+2 move container to workspace $ws2
+bindsym $mod+Shift+3 move container to workspace $ws3
+bindsym $mod+Shift+4 move container to workspace $ws4
+bindsym $mod+Shift+5 move container to workspace $ws5
+bindsym $mod+Shift+6 move container to workspace $ws6
+bindsym $mod+Shift+7 move container to workspace $ws7
+bindsym $mod+Shift+8 move container to workspace $ws8
+bindsym $mod+Shift+9 move container to workspace $ws9
+
+bindsym $mod+Shift+c reload
+bindsym $mod+Shift+r restart
+
+# resize window (you can also use the mouse for that):
+mode "resize" {
+ # These bindings trigger as soon as you enter the resize mode
+
+ # Pressing left will shrink the window’s width.
+ # Pressing right will grow the window’s width.
+ # Pressing up will shrink the window’s height.
+ # Pressing down will grow the window’s height.
+ bindsym j resize shrink width 10 px or 10 ppt
+ bindsym k resize grow height 10 px or 10 ppt
+ bindsym l resize shrink height 10 px or 10 ppt
+ bindsym ntilde resize grow width 10 px or 10 ppt
+
+ # same bindings, but for the arrow keys
+ bindsym Left resize shrink width 10 px or 10 ppt
+ bindsym Down resize grow height 10 px or 10 ppt
+ bindsym Up resize shrink height 10 px or 10 ppt
+ bindsym Right resize grow width 10 px or 10 ppt
+
+ # back to normal: Enter or Escape
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+}
+
+bindsym $mod+r mode "resize"
+
+# multimedia control
+bindsym XF86AudioRaiseVolume exec volumectl raise
+bindsym XF86AudioLowerVolume exec volumectl lower
+bindsym XF86AudioMute exec volumectl mute
+
+bindsym XF86MonBrightnessUp exec lightctl raise
+bindsym XF86MonBrightnessDown exec lightctl lower
+
+bindsym XF86AudioPlay exec playerctl play
+bindsym XF86AudioPause exec playerctl pause
+bindsym XF86AudioNext exec playerctl next
+bindsym XF86AudioPrev exec playerctl previous
+
+exec_always --no-startup-id "avizo-service"
+for_window [class="Avizo"] border pixel 0 floating enable
+
+# App shortcuts
+bindsym $mod+b exec "/usr/bin/brave"
+bindsym $mod+Shift+b exec "/usr/bin/brave --incognito"
+bindsym $mod+n exec "/usr/bin/thunar"
+bindsym $mod+l exec i3lock -i ~/.config/i3/i3-lock-screen.png -t -f
+bindsym Print exec "scrot ~/%Y-%m-%d-%T-screenshot.png"
+
+# rofi bindings fancy application menu
+bindsym $mod+i exec rofi \
+ -modi drun \
+ -show drun \
+ -hide-scrollbar \
+ -theme "${XDG_CONFIG_HOME}/rofi/launcher.rasi"
+bindsym $mod+o exec rofi \
+ -show window \
+ -hide-scrollbar \
+ -theme "${XDG_CONFIG_HOME}/rofi/launcher.rasi"
+
+# per window customizations
+for_window [class="Spotify"] move to workspace $ws9
+for_window [class="jetbrains-pycharm" title="^ $"] floating enable
+for_window [class="Yad" instance="yad"] floating enable
+for_window [class="Galculator" instance="galculator"] floating enable
+for_window [class="Blueberry.py" instance="blueberry.py"] floating enable
+for_window [class="Xsane" instance="xsane"] floating enable
+for_window [class="Pavucontrol" instance="pavucontrol"] floating enable
+for_window [class="qt5ct" instance="qt5ct"] floating enable
+for_window [class="Bluetooth-sendto" instance="bluetooth-sendto"] floating enable
+
+
+for_window [class="Pamac-manager"] floating enable
diff --git a/config/polybar/.gitignore b/config/polybar/.gitignore
new file mode 100644
index 000000000..d1f90dc74
--- /dev/null
+++ b/config/polybar/.gitignore
@@ -0,0 +1,4 @@
+github.tkn
+wired-interface
+wireless-interface
+battery
diff --git a/config/polybar/config.ini b/config/polybar/config.ini
new file mode 100644
index 000000000..74a52ec5a
--- /dev/null
+++ b/config/polybar/config.ini
@@ -0,0 +1,443 @@
+;; based on
+;; https://github.com/adi1090x/polybar-themes#cuts
+
+[global/wm]
+margin-bottom = 0
+margin-top = 0
+
+[color]
+background = ${xrdb:background:#222}
+background-alt = #8C080807
+foreground = ${xrdb:foreground:#222}
+foreground-alt = ${xrdb:color4:#222}
+
+primary = ${xrdb:color4:#222}
+secondary = ${xrdb:color5:#222}
+
+red = ${xrdb:color1:#FF5250}
+green = ${xrdb:color2:#43a047}
+yellow = ${xrdb:color3:#fdd835}
+
+active = ${xrdb:color10:#222}
+inactive = ${xrdb:color11:#222}
+alert = ${xrdb:color9:#222}
+
+[bar]
+fill =
+empty =
+indicator = ⏽
+width = 10
+format = %{T4}%fill%%indicator%%empty%%{F-}%{T-}
+
+[bar/main]
+enable-ipc = true
+
+width = 100%
+height = 25
+
+offset-x = 5%
+offset-y = 5%
+
+background = ${color.background-alt}
+foreground = ${color.foreground}
+
+dim-value = 1.0
+
+line-size = 3
+line-color = ${color.primary}
+
+padding = 0
+
+module-margin-left = 0
+module-margin-right = 0
+
+font-0 = "Iosevka Nerd Font:pixelsize=9;3"
+font-1 = "Iosevka Nerd Font:pixelsize=11;4"
+font-2 = "Font Awesome 5 Free;8;4"
+
+[bar/top]
+inherit = bar/main
+
+border-bottom-size = 2
+border-bottom-color = ${color.primary}
+
+modules-left = spotify sep workspaces
+modules-center = title
+modules-right = dunst sep updates github sep temperature-cpu battery sep keyboard sep date
+
+[bar/bottom]
+inherit = bar/main
+
+bottom = true
+border-top-size = 2
+border-top-color = ${color.primary}
+
+modules-left = cpu sep memory sep filesystem
+modules-right = wired-network wireless-network sep pulseaudio brightness
+modules-center = previous playpause next
+
+[settings]
+vm-restack = i3
+
+throttle-output = 5
+throttle-output-for = 10
+screenchange-reload = true
+pseudo-transparency = false
+
+format-padding = 1
+format-foreground = ${color.foreground}
+format-background = ${color.background-alt}
+
+content-foreground = ${color.primary}
+content-background = ${color.secondary}
+
+compositing-background = source
+compositing-foreground = over
+compositing-overline = over
+compositing-underline = over
+compositing-border = over
+
+; modules
+[module/previous]
+type = custom/ipc
+format-font = 3
+
+hook-0 = echo ""
+hook-1 = echo " "
+
+click-left = "spotifyctl -q previous"
+
+[module/next]
+type = custom/ipc
+format-font = 3
+
+hook-0 = echo ""
+hook-1 = echo " "
+click-left = "spotifyctl -q next"
+
+[module/playpause]
+type = custom/ipc
+format-font = 3
+
+hook-0 = echo ""
+hook-1 = echo " "
+hook-2 = echo " "
+
+click-left = "spotifyctl -q playpause"
+
+[module/spotify]
+type = custom/ipc
+hook-0 = echo ""
+hook-1 = spotifyctl -q status --format '%artist%: %title%'
+initial = 1
+
+[module/keyboard]
+type = internal/xkeyboard
+
+blacklist-0 = scroll lock
+
+format =
+format-prefix =
+
+label-layout = " %layout%"
+label-indicator-on = %name%
+label-indicator-on-foreground = ${color.foreground}
+
+[module/github]
+type = internal/github
+
+token = ${file:~/.config/polybar/github.tkn}
+user = kornicameister
+
+interval = 60
+
+label = %notifications%
+format =