diff --git a/.config/aliasrc b/.config/aliasrc
index 0c5e676..2075edc 100644
--- a/.config/aliasrc
+++ b/.config/aliasrc
@@ -5,6 +5,8 @@ alias .fm='git --git-dir=$HOME/.dotfiles-mail/ --work-tree=$HOME'
 
 alias aliases='vim ~/.config/aliasrc && source ~/.config/aliasrc'
 
+alias bfg='java -jar ~/tools/bfg-1.13.0.jar'
+
 alias cp='cp -i'
 
 alias df='df -h'
diff --git a/.config/environment b/.config/environment
index 6cc7980..c4ff41c 100644
--- a/.config/environment
+++ b/.config/environment
@@ -3,11 +3,19 @@
 [ -f "$HOME/.config/user-dirs.dirs" ] && source $HOME/.config/user-dirs.dirs
 
 export EDITOR='/usr/bin/vim'
-export NOTMUCH_CONFIG="$HOME/.config/notmuch/config"
+
+export GOPATH="$HOME/.local/share/go"
+
 export MAKEFLAGS="-j$(grep -c ^processor /proc/cpuinfo)"
+
 export MAILCAPS="$HOME/.config/mailcap/mailcaprc"
+
+export NOTMUCH_CONFIG="$HOME/.config/notmuch/config"
+
 export PASSWORD_STORE_GENERATED_LENGTH='64'
-export VIMINIT="source $HOME/.config/vim/vimrc"
-export ZDOTDIR="$HOME/.config/zsh"
 
 export PATH=/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin:$HOME/.local/bin
+
+export VIMINIT="source $HOME/.config/vim/vimrc"
+
+export ZDOTDIR="$HOME/.config/zsh"
diff --git a/.config/git/config b/.config/git/config
index 8b67e7e..4e31f21 100644
--- a/.config/git/config
+++ b/.config/git/config
@@ -46,3 +46,8 @@
     followTags = true
 [format]
     signOff = yes
+[filter "lfs"]
+	smudge = git-lfs smudge -- %f
+	process = git-lfs filter-process
+	required = true
+	clean = git-lfs clean -- %f
diff --git a/.config/git/ignore b/.config/git/ignore
index 80e541c..0fc1b52 100644
--- a/.config/git/ignore
+++ b/.config/git/ignore
@@ -11,3 +11,5 @@ venv/
 .breakpoints
 
 latexmk_output/
+
+node_modules/
diff --git a/.config/polybar/custom.ini b/.config/polybar/custom.ini
index e065d6c..9a09861 100644
--- a/.config/polybar/custom.ini
+++ b/.config/polybar/custom.ini
@@ -12,7 +12,7 @@
 
 [module/check-arch-updates]
     type = custom/script
-    exec = cat $HOME/.cache/archlinux-updates.txt
+    exec = cat $HOME/.cache/archlinux-updates.txt | wc -l | sed 's/^0$//'
     interval = 30
 
     format-prefix = " "
@@ -20,6 +20,6 @@
     format-underline = #1794D1
     format = <label>
 
-    click-left = alacritty -e sh -c "$HOME/.local/bin/archlinux-update; $HOME/.local/bin/archlinux-check-updates > $HOME/.cache/archlinux-updates.txt; read" &
+    click-left = alacritty -e sh -c "$HOME/.local/bin/archlinux-update; checkupdates > $HOME/.cache/archlinux-updates.txt; read" &
 
     label = %output%
diff --git a/.config/qutebrowser/config.py b/.config/qutebrowser/config.py
index 39d73d8..512b144 100644
--- a/.config/qutebrowser/config.py
+++ b/.config/qutebrowser/config.py
@@ -6,13 +6,15 @@ c.auto_save.session = True
 
 c.downloads.position = 'bottom'
 
-c.url.start_pages = ['dashboard.serguzim.me', 'cloud.serguzim.me', 'localhost:6680/iris/']
-c.url.searchengines = {'DEFAULT': 'bookmarks.serguzim/?q={}'}
+c.fonts.hints = 'bold 18px default_family'
 
 c.tabs.background = True
 c.tabs.mousewheel_switching = False
 c.tabs.new_position.related = 'last'
 
+c.url.start_pages = ['dashboard.serguzim.me', 'cloud.serguzim.me', 'localhost:6680/iris/']
+c.url.searchengines = {'DEFAULT': 'bookmarks.serguzim/?q={}'}
+
 c.zoom.default = 130
 
 config.bind(',v', 'spawn mpv {url}')
@@ -21,6 +23,8 @@ config.bind(',V', 'hint links spawn mpv {hint-url}')
 config.bind(',b', 'spawn brave {url}')
 config.bind(',B', 'hint links spawn brave {hint-url}')
 
+config.bind(',j',  'spawn --userscript format_json')
+
 config.bind(',s', 'spawn steam steam://openurl/{url}')
 config.bind(',rr', 'open {url:scheme}://removeddit.com{url:path}{url:query}')
 config.bind(',rt', 'open {url:scheme}://reddit.tube{url:path}{url:query}')
diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc
index 02df6bd..593c0dc 100644
--- a/.config/sxhkd/sxhkdrc
+++ b/.config/sxhkd/sxhkdrc
@@ -22,7 +22,7 @@ super + {_, ctrl +, shift + } Print
     suas {sel, win, }
 
 super + Pause
-    $HOME/.local/bin/rofi-shutdown
+    rofi-shutdown
 
 #
 # wm independent media hotkeys
@@ -49,7 +49,7 @@ XF86MonBrightnessDown
     [ $(xbacklight -get | cut -d'.' -f 1) -ge 10 ] && xbacklight -dec 5
 
 super + v
-    mpv $(xclip -o -selection clipboard)
+    mpv $(xclip -o -selection clipboard); notify-send "mpv media playback finished"
 
 #
 # bspwm hotkeys
diff --git a/.config/vim/vimrc b/.config/vim/vimrc
index 9cf373b..fd45d62 100644
--- a/.config/vim/vimrc
+++ b/.config/vim/vimrc
@@ -14,6 +14,7 @@ call plug#begin('~/.config/vim/plugged')
     Plug 'sersorrel/vim-lilypond'
     Plug 'vim-scripts/DoxygenToolkit.vim'
     Plug 'drmikehenry/vim-headerguard'
+    Plug 'sirtaj/vim-openscad'
     Plug 'cespare/vim-toml'
     Plug 'posva/vim-vue'
     Plug 'vhdirk/vim-cmake'
diff --git a/.local/bin/archlinux-check-updates b/.local/bin/archlinux-check-updates
deleted file mode 100755
index 01109c4..0000000
--- a/.local/bin/archlinux-check-updates
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/sh
-
-pkg_updates_count=$(checkupdates 2> /dev/null | wc -l)
-if [ $((pkg_updates_count)) -gt 0 ]
-then
-    echo $pkg_updates_count
-else
-    echo ""
-fi
diff --git a/.local/bin/rankmirrors-personal-pref b/.local/bin/rankmirrors-personal-pref
index 4359f6e..a95cbca 100755
--- a/.local/bin/rankmirrors-personal-pref
+++ b/.local/bin/rankmirrors-personal-pref
@@ -1,3 +1,3 @@
 #!/bin/env sh
 
-curl -s "https://www.archlinux.org/mirrorlist/?country=AT&country=BY&country=BE&country=BA&country=BG&country=HR&country=CZ&country=DK&country=FI&country=FR&country=DE&country=GR&country=HU&country=IS&country=IE&country=IT&country=LV&country=LT&country=LU&country=NL&country=MK&country=NO&country=PL&country=PT&country=RO&country=RS&country=SK&country=SI&country=ES&country=SE&country=CH&country=UA&country=GB&protocol=https&ip_version=4"  | sed -e 's/^#Server/Server/' -e '/^#/d' | rankmirrors -n 25 -
+curl -Ls "https://www.archlinux.org/mirrorlist/?country=AT&country=BY&country=BE&country=BA&country=BG&country=HR&country=CZ&country=DK&country=FI&country=FR&country=DE&country=GR&country=HU&country=IS&country=IE&country=IT&country=LV&country=LT&country=LU&country=NL&country=MK&country=NO&country=PL&country=PT&country=RO&country=RS&country=SK&country=SI&country=ES&country=SE&country=CH&country=UA&country=GB&protocol=https&ip_version=4"  | sed -e 's/^#Server/Server/' -e '/^#/d' | rankmirrors -n 25 -
diff --git a/.local/bin/start_jack b/.local/bin/start_jack
index 11421df..d4c5994 100755
--- a/.local/bin/start_jack
+++ b/.local/bin/start_jack
@@ -17,3 +17,17 @@ systemctl --user start pulseaudio
 
 sleep 1
 a2jmidid -e &
+
+alsa_out -d hw:PCH -j "Speaker" -c 2 &
+
+sleep 1
+
+jack_connect "PulseAudio JACK Sink":front-left Speaker:playback_1
+jack_connect "PulseAudio JACK Sink":front-right Speaker:playback_2
+
+if [ -x "$(command -v jack-matchmaker)" ]
+then
+    jack-matchmaker -e \
+        Mopidy:out_jackaudiosink0_1 Speaker:playback_1 \
+        Mopidy:out_jackaudiosink0_2 Speaker:playback_2 &
+fi
diff --git a/.xprofile b/.xprofile
index 04e7ccd..26a502e 100644
--- a/.xprofile
+++ b/.xprofile
@@ -11,6 +11,7 @@ if [ -x "$(command -v gpgconf)" ]
 then
     export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
     gpgconf --launch gpg-agent
+    gpg2 --card-status > /dev/null
 fi
 
 _autostart_on_launch()
@@ -29,13 +30,14 @@ _autostart_on_launch()
 
     conky --daemonize --config="$HOME/.config/conky/clock.conf"
     conky --daemonize --config="$HOME/.config/conky/cpu_ram_storage.conf"
+    conky --daemonize --config="$HOME/.config/conky/archlinux-updates.conf"
     feh --bg-fill $XDG_PICTURES_DIR/wallpaper/active_wallpaper
 
     sleep 8
 
     syncthing -no-browser &
 
-    actkbd --grab --config ~/.config/actkbd/actkbd.conf --device /dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd &
+    #actkbd --grab --config ~/.config/actkbd/actkbd.conf --device /dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd &
 
     /usr/lib/kdeconnectd &
     transmission-gtk --minimized &
diff --git a/tools/bfg-1.13.0.jar b/tools/bfg-1.13.0.jar
new file mode 100644
index 0000000..63ab513
Binary files /dev/null and b/tools/bfg-1.13.0.jar differ