[rc/sway] add back second argument of floating_modifier
[~bandali/configs] / rc.org
diff --git a/rc.org b/rc.org
index cbbbe8d..d1155f1 100644 (file)
--- a/rc.org
+++ b/rc.org
@@ -14,47 +14,6 @@ Note: This file is best viewed inside Emacs with org mode.
 This section contains the configuration files (dotfiles) of various
 programs I use.
 
-** [[https://github.com/afewmail/afew][afew]]
-:PROPERTIES:
-:header-args+: :tangle ~/.config/afew/config
-:END:
-
-#+begin_quote
-an initial tagging script for notmuch mail
-#+end_quote
-
-#+begin_src conf
-# This is the default filter chain
-[SpamFilter]
-#[ClassifyingFilter]
-[KillThreadsFilter]
-#[ListMailsFilter]
-[ArchiveSentMailsFilter]
-sent_tag = sent
-[InboxFilter]
-
-#[Filter.1]
-#query = 'folder:amin/lists/.haskell-cafe'
-#tags = +lists;+lists/haskell-cafe
-#message = lists/haskell-cafe
-
-#[Filter.2]
-#query = 'folder:amin/lists/.haskell-weekly'
-#tags = +lists;+lists/haskell-weekly
-#message = lists/haskell-weekly
-
-#[Filter.3]
-#query = 'folder:amin/lists/.hackernewsletter'
-#tags = +lists;+lists/hackernewsletter
-#message = lists/hackernewsletter
-
-
-#[FolderNameFilter]
-#folder_blacklist = Inbox
-#maildir_separator = /.
-#folder_transforms = Drafts:draft Junk:spam Trash:deleted Sent:sent Archive:archive lists/haskell-cafe:lists/haskell-cafe
-#+end_src
-
 ** bspwm
 
 *** bspwmrc
@@ -62,11 +21,11 @@ sent_tag = sent
 :header-args+: :tangle ~/.config/bspwm/bspwmrc :shebang "#!/bin/sh"
 :END:
 
-#+begin_src sh
+#+begin_src sh :tangle no
 sxhkd &
 sh ~/.fehbg &
 xfce4-panel -d &
-#compton &
+compton &
 sleep 0.5 && pasystray --notify=all &
 
 bspc monitor -d I II III IV V VI VII VIII IX X
@@ -85,7 +44,7 @@ bspc config gapless_monocle      true
 bspc config click_to_focus       button1
 bspc config directional_focus_tightness low
 
-bspc rule -a Firefox desktop='^1' follow=on
+#bspc rule -a Firefox desktop='^1' follow=on
 bspc rule -a Nightly desktop='^1' follow=on
 bspc rule -a Emacs desktop='^2' state=tiled follow=on
 #bspc rule -a Chromium desktop='^4' follow=on
@@ -126,7 +85,7 @@ bspc rule -a Zathura state=tiled
 :header-args+: :tangle ~/.config/sxhkd/sxhkdrc
 :END:
 
-#+begin_src conf
+#+begin_src conf :tangle no
 #
 # wm independent hotkeys
 #
@@ -177,6 +136,9 @@ XF86Audio{Raise,Lower}Volume
 XF86AudioMute
        pamixer --toggle-mute
 
+XF86AudioMicMute
+       pactl set-source-mute 1 toggle
+
 # playback control
 XF86Audio{Play,Prev,Next}
        mpc {toggle,prev,next}
@@ -204,6 +166,9 @@ super + apostrophe
 #XF86KbdBrightness{Up,Down}
 #      kbdlight {up,down}
 
+XF86RotateWindows
+       toggle-tablet
+
 #
 # bspwm hotkeys
 #
@@ -323,7 +288,7 @@ super + {Left,Down,Up,Right}
 :header-args+: :tangle ~/.config/compton.conf
 :END:
 
-#+begin_src conf
+#+begin_src conf :tangle no
 # Shadow
 shadow = false;                        # Enabled client-side shadows on windows.
 no-dock-shadow = true;         # Avoid drawing shadows on dock/panel windows.
@@ -623,7 +588,7 @@ timeout = 0
 
 ** Fontconfig
 :PROPERTIES:
-:header-args+: :tangle ~/.config/fontconfig/fonts.conf
+:header-args+: :tangle ~/.config/fontconfig/fonts.conf :comments none
 :END:
 
 #+begin_src xml
@@ -679,13 +644,13 @@ timeout = 0
 [user]
     name = Amin Bandali
     email = amin@aminb.org
-    signingkey = 4E05246AB0BF7FFB
+    signingkey = 4E05246AB0BF7FFB
 #+end_src
 
 **** signing
 #+begin_src conf
-[commit]
-    gpgsign = true
+[commit]
+    gpgsign = true
 # [format]
 #     signoff = true
 #+end_src
@@ -753,6 +718,16 @@ timeout = 0
        user = aminb
 #+end_src
 
+**** send-email
+#+begin_src conf
+[sendemail]
+       smtpuser = amin@aminb.org
+       smtpserver = nix.aminb.org
+       smtpserverport = 587
+       smtpencryption = tls
+       annotate = yes
+#+end_src
+
 *** gitignore
 :PROPERTIES:
 :header-args+: :tangle ~/.gitignore_global
@@ -768,6 +743,58 @@ timeout = 0
 *-autoloads.el
 #+end_src
 
+** [[https://github.com/Leinnan/i3gs][i3gs]]
+:PROPERTIES:
+:header-args+: :tangle ~/.config/i3gs/config
+:END:
+
+#+begin_src conf :comments none
+borders_width=0 0 2 0
+separator_width=10
+
+#[mpd]
+#preset=MPD
+#title=<span weight='heavy' fgcolor='#7FDBFF'> </span>
+#borders_color=#7FDBFF
+
+[ram]
+preset=RAM
+title=<span weight='heavy' fgcolor='#3D9970'> </span>
+borders_color=#3D9970
+
+#[cpu]
+#preset=CPU
+#title=<span weight='heavy' fgcolor='#2ECC40'> </span>
+#borders_color=#2ECC40
+
+#[hdd]
+#preset=HDD
+#title=<span weight='heavy' fgcolor='#01FF70'> </span>
+#borders_color=#01FF70
+
+[volume]
+command=volume-info
+title=<span weight='heavy' fgcolor='#7FDBFF'></span>
+borders_color=#7FDBFF
+
+[battery]
+preset=BAT
+command=battery-percentage-time
+title=<span weight='heavy' fgcolor='#39CCCC'> </span>
+borders_color=#39CCCC
+
+[wifi]
+preset=WIFI
+title=<span weight='heavy' fgcolor='#01FF70'> </span>
+borders_color=#01FF70
+
+[date]
+preset=DATE
+command=date '+%-I:%M, %a %b %d '
+title=<span weight='heavy' fgcolor='#FFDC00'> </span>
+borders_color=#FFDC00
+separator_width=0
+#+end_src
 ** Latexmk
 :PROPERTIES:
 :header-args+: :tangle ~/.latexmkrc
@@ -787,6 +814,23 @@ $clean_ext = "aux out";
 # $pdf_previewer = 'exec zathura --synctex-forward -x \'emacsclient --no-wait +%{line} %{input}\' %O %S';
 #+end_src
 
+** libinput
+
+Improve XPS 15 9560's touchpad experience.
+
+# begin_src conf :tangle (when (and (eq system-type 'gnu/linux) (string= (system-name) "plasma")) "/sudo::/etc/X11/xorg.conf.d/30-touchpad.conf")
+#+begin_src conf :tangle no
+Section "InputClass"
+    Identifier "libinput touchpad catchall"
+    Driver "libinput"
+    MatchIsTouchpad "on"
+    Option "ClickMethod" "clickfinger"
+    Option "NaturalScrolling" "true"
+    Option "Tapping" "on"
+    Option "TappingButtonMap" "lrm"
+EndSection
+#+end_src
+
 ** getmail
 
 *** getmailrc
@@ -799,7 +843,7 @@ $clean_ext = "aux out";
 type = SimplePOP3SSLRetriever
 server = fencepost.gnu.org
 username = aminb
-password_command = ("gpg2", "--no-tty", "-q", "-d", "~/.passwd/gnu.gpg")
+password_command = ("gpg2", "--no-tty", "-q", "-d", "/home/amin/.passwd/gnu.gpg")
 port = 995
 use_apop = True
 
@@ -1415,7 +1459,7 @@ logfile ~/.msmtp.log
 # aminb
 account aminb
 host nix.aminb.org
-tls_fingerprint BB:98:B3:02:83:B0:E0:C3:49:3E:C2:B2:A8:60:62:78:03:B3:5D:B3:BD:B8:0A:39:BB:E4:B0:66:D1:CF:D1:6B
+tls_fingerprint 65:DD:B8:32:D8:CD:F1:DC:B6:34:EE:35:04:18:AC:09:F3:1D:6D:20:F2:4A:E2:BD:64:48:B7:1F:90:BD:C4:BA
 tls_starttls on
 from amin@aminb.org
 user amin@aminb.org
@@ -1424,7 +1468,8 @@ passwordeval gpg2 --no-tty -q -d ~/.passwd/amin.gpg
 # gnu
 account gnu
 host fencepost.gnu.org
-tls_fingerprint 94:0E:37:EB:EA:44:5A:4B:B6:6F:16:3D:6C:7E:7E:44:2D:93:61:C1:FE:82:A8:29:5E:3C:12:4E:2D:BE:0E:2C
+# use `msmtp -a gnu --serverinfo --tls --tls-certcheck=off --tls-fingerprint=` to get the current fingerprint
+tls_fingerprint 28:70:42:76:1C:EC:91:5F:D1:B3:27:A1:CD:3B:32:A4:8B:0B:DC:3A:CD:CA:F6:6F:E4:61:BA:69:D7:4D:0D:0B
 tls_starttls on
 from aminb@gnu.org
 user aminb
@@ -2065,7 +2110,7 @@ path=/home/amin/mail
 [user]
 name=Amin Bandali
 primary_email=amin@aminb.org
-other_email=amin.bandali@uwaterloo.ca;mbandali@uwaterloo.ca;aminb@gnu.org;
+other_email=abandali@uwaterloo.ca;amin.bandali@uwaterloo.ca;aminb@gnu.org;
 
 # Configuration for "notmuch new"
 #
@@ -2084,7 +2129,7 @@ other_email=amin.bandali@uwaterloo.ca;mbandali@uwaterloo.ca;aminb@gnu.org;
 [new]
 tags=new;
 #tags=unread;inbox;
-ignore=.uidvalidity;.mbsyncstate
+ignore=.uidvalidity;.mbsyncstate;/.*/dovecot*/
 
 # Search configuration
 #
@@ -2133,23 +2178,77 @@ synchronize_flags=true
 gpg_path=gpg
 #+end_src
 
+*** pre-new hook
+:PROPERTIES:
+:header-args+: :tangle ~/mail/.notmuch/hooks/pre-new :shebang "#!/bin/sh"
+:END:
+
+#+begin_src sh
+touch /tmp/gnusieve.log
+sieve-filter -eW -o postmaster_address=postmaster@aminb.org \
+            -o mail_location=maildir:$MAILDIR/gnu:LAYOUT=fs:INBOX=$MAILDIR/gnu/Inbox ~/sieve/gnu.sieve INBOX delete &>>/tmp/gnusieve.log
+#+end_src
+
 *** post-new hook
 :PROPERTIES:
 :header-args+: :tangle ~/mail/.notmuch/hooks/post-new :shebang "#!/bin/sh"
 :END:
 
 #+begin_src sh
-afew -tn
+# apply sent tag to messages sent by me
+notmuch tag -new +sent -- from:amin@aminb.org or from:aminb@gnu.org or from:abandali@uwaterloo.ca or from:amin.bandali@uwaterloo.ca
+
+# initial tagging
+notmuch tag -latest -- tag:latest
+notmuch tag +inbox +unread +latest -new -- tag:new
+
 
 # apply tags to lists
-notmuch tag +lists +lists/deepspec -- folder:amin/lists/deepspec
-notmuch tag +lists +lists/haskell-cafe -- folder:amin/lists/haskell-cafe
-notmuch tag +lists +lists/haskell-weekly -- folder:amin/lists/haskell-weekly
-notmuch tag +lists +lists/hackernewsletter -- folder:amin/lists/hackernewsletter
-notmuch tag +lists +lists/notmuch -- folder:amin/lists/notmuch
-notmuch tag +lists +lists/info-gnu-emacs -- folder:amin/lists/info-gnu-emacs
-notmuch tag +lists +lists/help-gnu-emacs -- folder:amin/lists/help-gnu-emacs
-notmuch tag +lists +lists/emacs-devel -- folder:amin/lists/emacs-devel
+
+# <aminb>
+notmuch tag -inbox +lists/~sircmpwn/srht-admins   -- folder:amin/lists/~sircmpwn/srht-admins
+notmuch tag -inbox +lists/~sircmpwn/srht-announce -- folder:amin/lists/~sircmpwn/srht-announce
+notmuch tag -inbox +lists/~sircmpwn/srht-dev      -- folder:amin/lists/~sircmpwn/srht-dev
+notmuch tag -inbox +lists/~sircmpwn/srht-discuss  -- folder:amin/lists/~sircmpwn/srht-discuss
+
+notmuch tag -inbox +lists/hackernewsletter -- folder:amin/lists/hackernewsletter
+notmuch tag -inbox +lists/haskell-weekly   -- folder:amin/lists/haskell-weekly
+
+notmuch tag -inbox +pay -- folder:amin/pay
+# </aminb>
+
+# <uw>
+notmuch tag -inbox +uw/cs136 -- folder:uwaterloo/lists/cs136
+notmuch tag -inbox +uw/se463 -- folder:uwaterloo/lists/se463
+
+notmuch tag -inbox +lists/clvsingle        -- folder:uwaterloo/lists/Clvsingle
+notmuch tag -inbox +lists/gsa              -- folder:uwaterloo/lists/GSA
+notmuch tag -inbox +lists/math-grad        -- folder:uwaterloo/lists/Math-grad
+notmuch tag -inbox +lists/scs-grads        -- folder:uwaterloo/lists/scs-grads
+notmuch tag -inbox +lists/watform-students -- folder:uwaterloo/lists/Watform-students
+# </uw>
+
+# <gnu>
+notmuch tag -inbox +lists/emacs-devel       -- folder:gnu/l/emacs-devel
+notmuch tag -inbox +lists/emacs-orgmode     -- folder:gnu/l/emacs-orgmode
+notmuch tag -inbox +lists/emacsconf-discuss -- folder:gnu/l/emacsconf-discuss
+notmuch tag -inbox +lists/fencepost-users   -- folder:gnu/l/fencepost-users
+notmuch tag -inbox +lists/guix-devel        -- folder:gnu/l/guix-devel
+notmuch tag -inbox +lists/guile-devel       -- folder:gnu/l/guile-devel
+notmuch tag -inbox +lists/help-gnu-emacs    -- folder:gnu/l/help-gnu-emacs
+notmuch tag -inbox +lists/info-gnu-emacs    -- folder:gnu/l/info-gnu-emacs
+notmuch tag -inbox +lists/www-commits       -- folder:gnu/l/www-commits
+notmuch tag -inbox +lists/www-discuss       -- folder:gnu/l/www-discuss
+notmuch tag -inbox +webmasters              -- folder:gnu/webmasters
+
+notmuch tag -inbox +lists/deepspec          -- folder:gnu/l/deepspec
+notmuch tag -inbox +lists/haskell-cafe      -- folder:gnu/l/haskell-cafe
+notmuch tag -inbox +lists/haskell-art       -- folder:gnu/l/haskell-art
+notmuch tag -inbox +lists/notmuch           -- folder:gnu/l/notmuch
+# </gnu>
+
+notmuch tag -inbox -unread +archive/notmuch     -- path:archive/notmuch/**
+notmuch tag -inbox -unread +archive/emacs-devel -- path:archive/emacs-devel/**
 #+end_src
 
 *** notmuch.service
@@ -2280,6 +2379,56 @@ def prime_gpg_agent():
 prime_gpg_agent()
 #+end_src
 
+** pigeonhole
+*** gnu.sieve
+:PROPERTIES:
+:header-args+: :tangle ~/sieve/gnu.sieve :comments none
+:END:
+
+#+begin_src conf
+require [ "regex", "variables", "fileinto", "envelope", "mailbox", "imap4flags", "include" ];
+
+if anyof (
+  address :is "from" "webmasters@gnu.org",
+  address :is "from" "webmasters-comment@gnu.org") {
+  fileinto :create "webmasters";
+  stop;
+}
+
+include :personal "lists";
+#+end_src
+
+*** lists.sieve
+:PROPERTIES:
+:header-args+: :tangle ~/sieve/lists.sieve :comments none
+:END:
+
+#+begin_src conf
+require [ "regex", "variables", "fileinto", "envelope", "mailbox", "imap4flags",
+ "include" ];
+
+if anyof (
+    header :contains "list-id" "<emacs-devel.gnu.org>",
+    header :contains "list-id" "<emacs-orgmode.gnu.org>",
+    header :contains "list-id" "<emacsconf-discuss.gnu.org>",
+    header :contains "list-id" "<fencepost-users.gnu.org>",
+    header :contains "list-id" "<guix-devel.gnu.org>",
+    header :contains "list-id" "<guile-devel.gnu.org>",
+    header :contains "list-id" "<help-gnu-emacs.gnu.org>",
+    header :contains "list-id" "<info-gnu-emacs.gnu.org>",
+    header :contains "list-id" "<www-commits.gnu.org>",
+    header :contains "list-id" "<www-discuss.gnu.org>",
+    header :contains "list-id" "<deepspec.lists.cs.princeton.edu>",
+    header :contains "list-id" "<haskell-cafe.haskell.org>",
+    header :contains "list-id" "<haskell-art.we.lurk.org>",
+    header :contains "list-id" "<notmuch.notmuchmail.org>") {
+    if header :regex "list-id" "<([a-z_0-9-]+)[.@]" {
+        set :lower "listname" "${1}";
+        fileinto :create "l/${listname}";
+    }
+}
+#+end_src
+
 ** polybar
 
 *** config
@@ -2685,6 +2834,23 @@ polybar main &
 echo "Bars launched..."
 #+end_src
 
+** PowerTOP
+:PROPERTIES:
+:header-args+: :tangle "/sudo::/etc/systemd/system/powertop.service"
+:END:
+
+#+begin_src conf
+[Unit]
+Description=Powertop tunings
+
+[Service]
+ExecStart=/usr/bin/powertop --auto-tune
+RemainAfterExit=true
+
+[Install]
+WantedBy=multi-user.target
+#+end_src
+
 ** ranger
 
 *** rc.conf
@@ -3318,7 +3484,7 @@ exit 1
 
 ** redshift
 :PROPERTIES:
-:header-args+: :tangle ~/.config/redshift.conf
+:header-args+: :tangle ~/.config/redshift.conf :comments none
 :END:
 
 #+begin_src conf
@@ -3426,7 +3592,7 @@ rofi.theme: /usr/share/rofi/themes//gruvbox-light.rasi
 # rofi command. Make sure to have "$@" as last argument
 _rofi () {
     #rofi -no-auto-select -kb-accept-entry "!Return" -i -no-levenshtein-sort "$@"
-    rofi -i -no-auto-select "$@"
+    rofi -i -no-auto-select -kb-accept-entry "!Return" "$@"
 }
 
 # xdotool needs the keyboard layout to be set using setxkbmap
@@ -3496,6 +3662,561 @@ switch="Alt+x"
 insert_pass="Alt+n"
 #+end_src
 
+** sway
+:PROPERTIES:
+:header-args+: :tangle ~/.config/sway/config
+:END:
+
+#+begin_src conf
+exec xrdb .Xresources
+exec dunst
+### Variables
+# super
+set $mod Mod4
+# alt
+set $mod2 Mod1
+set $left h
+set $down j
+set $up k
+set $right l
+set $term urxvt
+set $menu rofi -show run -display-run '> ' -display-window ' 🗔 '
+
+### Output configuration
+#
+# Default wallpaper (more resolutions are available in __DATADIR__/backgrounds/sway/)
+output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.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
+
+### Idle configuration
+#
+# Example configuration:
+#
+#exec swayidle \
+#    timeout 300 'swaylock -c 000000' \
+#    timeout 600 'swaymsg "output * dpms off"' \
+#       resume 'swaymsg "output * dpms on"' \
+#    before-sleep 'swaylock -c 000000'
+#
+# This will lock your screen after 300 seconds of inactivity, then turn off
+# your displays after another 600 seconds, and turn your screens back on when
+# resumed. It will also lock your screen before your computer goes to sleep.
+
+### Input configuration
+
+input "1739:31251:DLL07BE:01_06CB:7A13_Touchpad" {
+    dwt enabled
+    tap enabled
+    natural_scroll enabled
+    middle_emulation enabled
+    click_method clickfinger
+}
+
+input "1:1:AT_Translated_Set_2_keyboard" {
+    repeat_delay 200
+    repeat_rate 45
+    xkb_layout us,ir
+    xkb_options ctrl:nocaps,altwin:swap_alt_win,ctrl:rctrl_ralt,grp:shifts_toggle
+}
+
+
+### Key bindings
+#
+# Basics:
+#
+    # start a terminal
+    bindsym $mod+Return exec $term
+
+    # kill focused window
+    bindsym $mod+Shift+q kill
+
+    # start your launcher
+    bindsym $mod+d exec $menu
+
+    # 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 exit
+
+    bindsym $mod+apostrophe exec rofi-light        # rofi-based brightness chooser
+    bindsym XF86MonBrightnessUp exec light -A 5    # increase screen brightness
+    bindsym XF86MonBrightnessDown exec light -U 5  # decrease screen brightness
+
+    bindsym XF86AudioRaiseVolume exec pamixer --allow-boost --increase 5
+    bindsym XF86AudioLowerVolume exec pamixer --allow-boost --decrease 5
+    bindsym XF86AudioMute exec pamixer --toggle-mute
+    bindsym XF86AudioMicMute exec pactl set-source-mute 1 toggle
+
+    # original sway workspace switch and window move
+    bindsym $mod+bracketleft workspace prev
+    bindsym $mod+bracketright workspace next
+    bindsym $mod+braceleft move container to workspace prev
+    bindsym $mod+braceright move container to workspace next
+
+    # bspwm-esque workspace switch and window move
+    bindsym $mod2+bracketleft exec sway-ws-util switch prev
+    bindsym $mod2+bracketright exec sway-ws-util switch next
+    bindsym $mod2+braceleft exec sway-ws-util move prev follow
+    bindsym $mod2+braceright exec sway-ws-util move next follow
+#
+# 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 1
+    bindsym $mod+2 workspace 2
+    bindsym $mod+3 workspace 3
+    bindsym $mod+4 workspace 4
+    bindsym $mod+5 workspace 5
+    bindsym $mod+6 workspace 6
+    bindsym $mod+7 workspace 7
+    bindsym $mod+8 workspace 8
+    bindsym $mod+9 workspace 9
+    bindsym $mod+0 workspace 10
+    # move focused container to workspace
+    bindsym $mod+Shift+1 move container to workspace 1
+    bindsym $mod+Shift+2 move container to workspace 2
+    bindsym $mod+Shift+3 move container to workspace 3
+    bindsym $mod+Shift+4 move container to workspace 4
+    bindsym $mod+Shift+5 move container to workspace 5
+    bindsym $mod+Shift+6 move container to workspace 6
+    bindsym $mod+Shift+7 move container to workspace 7
+    bindsym $mod+Shift+8 move container to workspace 8
+    bindsym $mod+Shift+9 move container to workspace 9
+    bindsym $mod+Shift+0 move container to workspace 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
+#
+# 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+Shift+r mode "resize"
+
+#
+# Status Bar:
+#
+# Read `man 5 sway-bar` for more information about this section.
+bar {
+    position bottom
+    colors {
+        statusline #ffffff
+        background #323232
+        inactive_workspace #32323200 #32323200 #5c5c5c
+    }
+    status_command i3gs ~/.config/i3gs/config
+}
+
+include /etc/sway/config.d/*
+#+end_src
+
+** TLP
+
+*** TODO enigma
+*** plasma
+
+#+begin_src conf :tangle (when (and (eq system-type 'gnu/linux) (string= (system-name) "plasma")) "/sudo::/etc/default/tlp")
+# ------------------------------------------------------------------------------
+# tlp - Parameters for power saving
+# See full explanation: http://linrunner.de/en/tlp/docs/tlp-configuration.html
+
+# Hint: some features are disabled by default, remove the leading # to enable
+# them.
+
+# Set to 0 to disable, 1 to enable TLP.
+TLP_ENABLE=1
+
+# Operation mode when no power supply can be detected: AC, BAT.
+# Concerns some desktop and embedded hardware only.
+TLP_DEFAULT_MODE=AC
+
+# Operation mode select: 0=depend on power source, 1=always use TLP_DEFAULT_MODE
+# Hint: use in conjunction with TLP_DEFAULT_MODE=BAT for BAT settings on AC.
+TLP_PERSISTENT_DEFAULT=0
+
+# Seconds laptop mode has to wait after the disk goes idle before doing a sync.
+# Non-zero value enables, zero disables laptop mode.
+DISK_IDLE_SECS_ON_AC=0
+DISK_IDLE_SECS_ON_BAT=2
+
+# Dirty page values (timeouts in secs).
+MAX_LOST_WORK_SECS_ON_AC=15
+MAX_LOST_WORK_SECS_ON_BAT=60
+
+# Hint: CPU parameters below are disabled by default, remove the leading #
+# to enable them, otherwise kernel default values are used.
+
+# Select a CPU frequency scaling governor.
+# Intel Core i processor with intel_pstate driver:
+#   powersave(*), performance.
+# Older hardware with acpi-cpufreq driver:
+#   ondemand(*), powersave, performance, conservative, schedutil.
+# (*) is recommended.
+# Hint: use tlp-stat -p to show the active driver and available governors.
+# Important:
+#   powersave for intel_pstate and ondemand for acpi-cpufreq are power
+#   efficient for *almost all* workloads and therefore kernel and most
+#   distributions have chosen them as defaults. If you still want to change,
+#   you should know what you're doing! You *must* disable your distribution's
+#   governor settings or conflicts will occur.
+#CPU_SCALING_GOVERNOR_ON_AC=powersave
+#CPU_SCALING_GOVERNOR_ON_BAT=powersave
+
+# Set the min/max frequency available for the scaling governor.
+# Possible values strongly depend on your CPU. For available frequencies see
+# the output of tlp-stat -p.
+#CPU_SCALING_MIN_FREQ_ON_AC=0
+#CPU_SCALING_MAX_FREQ_ON_AC=0
+#CPU_SCALING_MIN_FREQ_ON_BAT=0
+#CPU_SCALING_MAX_FREQ_ON_BAT=0
+
+# Set energy performance hints (HWP) for Intel P-state governor:
+#   performance, balance_performance, default, balance_power, power
+# Values are given in order of increasing power saving.
+# Note: Intel Skylake or newer CPU and Kernel >= 4.10 required.
+CPU_HWP_ON_AC=balance_performance
+CPU_HWP_ON_BAT=balance_power
+
+# Set Intel P-state performance: 0..100 (%).
+# Limit the max/min P-state to control the power dissipation of the CPU.
+# Values are stated as a percentage of the available performance.
+# Requires an Intel Core i processor with intel_pstate driver.
+#CPU_MIN_PERF_ON_AC=0
+#CPU_MAX_PERF_ON_AC=100
+#CPU_MIN_PERF_ON_BAT=0
+#CPU_MAX_PERF_ON_BAT=30
+
+# Set the CPU "turbo boost" feature: 0=disable, 1=allow
+# Requires an Intel Core i processor.
+# Important:
+# - This may conflict with your distribution's governor settings
+# - A value of 1 does *not* activate boosting, it just allows it
+#CPU_BOOST_ON_AC=1
+#CPU_BOOST_ON_BAT=0
+
+# Minimize number of used CPU cores/hyper-threads under light load conditions:
+#   0=disable, 1=enable.
+SCHED_POWERSAVE_ON_AC=0
+SCHED_POWERSAVE_ON_BAT=1
+
+# Kernel NMI Watchdog:
+#   0=disable (default, saves power), 1=enable (for kernel debugging only).
+NMI_WATCHDOG=0
+
+# Change CPU voltages aka "undervolting" - Kernel with PHC patch required.
+# Frequency voltage pairs are written to:
+#   /sys/devices/system/cpu/cpu0/cpufreq/phc_controls
+# CAUTION: only use this, if you thoroughly understand what you are doing!
+#PHC_CONTROLS="F:V F:V F:V F:V"
+
+# Set CPU performance versus energy savings policy:
+#   performance, balance-performance, default, balance-power, power.
+# Values are given in order of increasing power saving.
+# Requires kernel module msr and x86_energy_perf_policy from linux-tools.
+ENERGY_PERF_POLICY_ON_AC=performance
+ENERGY_PERF_POLICY_ON_BAT=balance-power
+
+# Disk devices; separate multiple devices with spaces (default: sda).
+# Devices can be specified by disk ID also (lookup with: tlp diskid).
+DISK_DEVICES="sda sdb"
+
+# Disk advanced power management level: 1..254, 255 (max saving, min, off).
+# Levels 1..127 may spin down the disk; 255 allowable on most drives.
+# Separate values for multiple disks with spaces. Use the special value 'keep'
+# to keep the hardware default for the particular disk.
+DISK_APM_LEVEL_ON_AC="254 254"
+DISK_APM_LEVEL_ON_BAT="128 128"
+
+# Hard disk spin down timeout:
+#   0:        spin down disabled
+#   1..240:   timeouts from 5s to 20min (in units of 5s)
+#   241..251: timeouts from 30min to 5.5 hours (in units of 30min)
+# See 'man hdparm' for details.
+# Separate values for multiple disks with spaces. Use the special value 'keep'
+# to keep the hardware default for the particular disk.
+#DISK_SPINDOWN_TIMEOUT_ON_AC="0 0"
+#DISK_SPINDOWN_TIMEOUT_ON_BAT="0 0"
+
+# Select IO scheduler for the disk devices: cfq, deadline, noop (Default: cfq).
+# Separate values for multiple disks with spaces. Use the special value 'keep'
+# to keep the kernel default scheduler for the particular disk.
+#DISK_IOSCHED="cfq cfq"
+
+# AHCI link power management (ALPM) for disk devices:
+#   min_power, med_power_with_dipm(*), medium_power, max_performance.
+# (*) Kernel >= 4.15 required, then recommended.
+# Multiple values separated with spaces are tried sequentially until success.
+SATA_LINKPWR_ON_AC="med_power_with_dipm max_performance"
+SATA_LINKPWR_ON_BAT="med_power_with_dipm min_power"
+
+# Exclude host devices from AHCI link power management.
+# Separate multiple hosts with spaces.
+#SATA_LINKPWR_BLACKLIST="host1"
+
+# Runtime Power Management for AHCI host and disks devices:
+#   on=disable, auto=enable.
+# EXPERIMENTAL ** WARNING: auto will most likely cause system lockups/data loss.
+#AHCI_RUNTIME_PM_ON_AC=on
+#AHCI_RUNTIME_PM_ON_BAT=on
+
+# Seconds of inactivity before disk is suspended.
+AHCI_RUNTIME_PM_TIMEOUT=15
+
+# PCI Express Active State Power Management (PCIe ASPM):
+#   default, performance, powersave.
+PCIE_ASPM_ON_AC=performance
+PCIE_ASPM_ON_BAT=powersave
+
+# Radeon graphics clock speed (profile method): low, mid, high, auto, default;
+# auto = mid on BAT, high on AC; default = use hardware defaults.
+RADEON_POWER_PROFILE_ON_AC=high
+RADEON_POWER_PROFILE_ON_BAT=low
+
+# Radeon dynamic power management method (DPM): battery, performance.
+RADEON_DPM_STATE_ON_AC=performance
+RADEON_DPM_STATE_ON_BAT=battery
+
+# Radeon DPM performance level: auto, low, high; auto is recommended.
+RADEON_DPM_PERF_LEVEL_ON_AC=auto
+RADEON_DPM_PERF_LEVEL_ON_BAT=auto
+
+# WiFi power saving mode: on=enable, off=disable; not supported by all adapters.
+WIFI_PWR_ON_AC=off
+WIFI_PWR_ON_BAT=on
+
+# Disable wake on LAN: Y/N.
+WOL_DISABLE=Y
+
+# Enable audio power saving for Intel HDA, AC97 devices (timeout in secs).
+# A value of 0 disables, >=1 enables power saving (recommended: 1).
+SOUND_POWER_SAVE_ON_AC=0
+SOUND_POWER_SAVE_ON_BAT=0
+
+# Disable controller too (HDA only): Y/N.
+SOUND_POWER_SAVE_CONTROLLER=N
+
+# Power off optical drive in UltraBay/MediaBay: 0=disable, 1=enable.
+# Drive can be powered on again by releasing (and reinserting) the eject lever
+# or by pressing the disc eject button on newer models.
+# Note: an UltraBay/MediaBay hard disk is never powered off.
+BAY_POWEROFF_ON_AC=0
+BAY_POWEROFF_ON_BAT=0
+# Optical drive device to power off (default sr0).
+BAY_DEVICE="sr0"
+
+# Runtime Power Management for PCI(e) bus devices: on=disable, auto=enable.
+RUNTIME_PM_ON_AC=on
+RUNTIME_PM_ON_BAT=auto
+
+# Exclude PCI(e) device adresses the following list from Runtime PM
+# (separate with spaces). Use lspci to get the adresses (1st column).
+#RUNTIME_PM_BLACKLIST="bb:dd.f 11:22.3 44:55.6"
+RUNTIME_PM_BLACKLIST="01:00.0"
+
+# Exclude PCI(e) devices assigned to the listed drivers from Runtime PM.
+# Default when unconfigured is "amdgpu nouveau nvidia radeon" which
+# prevents accidential power-on of dGPU in hybrid graphics setups.
+# Use "" to disable the feature completely.
+# Separate multiple drivers with spaces.
+#RUNTIME_PM_DRIVER_BLACKLIST="amdgpu nouveau nvidia radeon"
+
+# Set to 0 to disable, 1 to enable USB autosuspend feature.
+USB_AUTOSUSPEND=1
+
+# Exclude listed devices from USB autosuspend (separate with spaces).
+# Use lsusb to get the ids.
+# Note: input devices (usbhid) are excluded automatically
+#USB_BLACKLIST="1111:2222 3333:4444"
+
+# Bluetooth devices are excluded from USB autosuspend:
+#   0=do not exclude, 1=exclude.
+USB_BLACKLIST_BTUSB=0
+
+# Phone devices are excluded from USB autosuspend:
+#   0=do not exclude, 1=exclude (enable charging).
+USB_BLACKLIST_PHONE=0
+
+# Printers are excluded from USB autosuspend:
+#   0=do not exclude, 1=exclude.
+USB_BLACKLIST_PRINTER=1
+
+# WWAN devices are excluded from USB autosuspend:
+#   0=do not exclude, 1=exclude.
+USB_BLACKLIST_WWAN=1
+
+# Include listed devices into USB autosuspend even if already excluded
+# by the blacklists above (separate with spaces).
+# Use lsusb to get the ids.
+#USB_WHITELIST="1111:2222 3333:4444"
+
+# Set to 1 to disable autosuspend before shutdown, 0 to do nothing
+# (workaround for USB devices that cause shutdown problems).
+#USB_AUTOSUSPEND_DISABLE_ON_SHUTDOWN=1
+
+# Restore radio device state (Bluetooth, WiFi, WWAN) from previous shutdown
+# on system startup: 0=disable, 1=enable.
+# Hint: the parameters DEVICES_TO_DISABLE/ENABLE_ON_STARTUP/SHUTDOWN below
+#   are ignored when this is enabled!
+#RESTORE_DEVICE_STATE_ON_STARTUP=0
+RESTORE_DEVICE_STATE_ON_STARTUP=1
+
+# Radio devices to disable on startup: bluetooth, wifi, wwan.
+# Separate multiple devices with spaces.
+#DEVICES_TO_DISABLE_ON_STARTUP="bluetooth wifi wwan"
+
+# Radio devices to enable on startup: bluetooth, wifi, wwan.
+# Separate multiple devices with spaces.
+#DEVICES_TO_ENABLE_ON_STARTUP="wifi"
+
+# Radio devices to disable on shutdown: bluetooth, wifi, wwan.
+# (workaround for devices that are blocking shutdown).
+#DEVICES_TO_DISABLE_ON_SHUTDOWN="bluetooth wifi wwan"
+
+# Radio devices to enable on shutdown: bluetooth, wifi, wwan.
+# (to prevent other operating systems from missing radios).
+#DEVICES_TO_ENABLE_ON_SHUTDOWN="wwan"
+
+# Radio devices to enable on AC: bluetooth, wifi, wwan.
+#DEVICES_TO_ENABLE_ON_AC="bluetooth wifi wwan"
+
+# Radio devices to disable on battery: bluetooth, wifi, wwan.
+#DEVICES_TO_DISABLE_ON_BAT="bluetooth wifi wwan"
+
+# Radio devices to disable on battery when not in use (not connected):
+#   bluetooth, wifi, wwan.
+#DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE="bluetooth wifi wwan"
+
+# Battery charge thresholds (ThinkPad only, tp-smapi or acpi-call kernel module
+# required). Charging starts when the remaining capacity falls below the
+# START_CHARGE_THRESH value and stops when exceeding the STOP_CHARGE_THRESH value.
+# Main / Internal battery (values in %)
+#START_CHARGE_THRESH_BAT0=75
+#STOP_CHARGE_THRESH_BAT0=80
+# Ultrabay / Slice / Replaceable battery (values in %)
+#START_CHARGE_THRESH_BAT1=75
+#STOP_CHARGE_THRESH_BAT1=80
+
+# Restore charge thresholds when AC is unplugged: 0=disable, 1=enable.
+#RESTORE_THRESHOLDS_ON_BAT=1
+
+# ------------------------------------------------------------------------------
+# tlp-rdw - Parameters for the radio device wizard
+# Possible devices: bluetooth, wifi, wwan.
+
+# Hints:
+# - Parameters are disabled by default, remove the leading # to enable them
+# - Separate multiple radio devices with spaces
+
+# Radio devices to disable on connect.
+#DEVICES_TO_DISABLE_ON_LAN_CONNECT="wifi wwan"
+#DEVICES_TO_DISABLE_ON_WIFI_CONNECT="wwan"
+#DEVICES_TO_DISABLE_ON_WWAN_CONNECT="wifi"
+
+# Radio devices to enable on disconnect.
+#DEVICES_TO_ENABLE_ON_LAN_DISCONNECT="wifi wwan"
+#DEVICES_TO_ENABLE_ON_WIFI_DISCONNECT=""
+#DEVICES_TO_ENABLE_ON_WWAN_DISCONNECT=""
+
+# Radio devices to enable/disable when docked.
+#DEVICES_TO_ENABLE_ON_DOCK=""
+#DEVICES_TO_DISABLE_ON_DOCK=""
+
+# Radio devices to enable/disable when undocked.
+#DEVICES_TO_ENABLE_ON_UNDOCK="wifi"
+#DEVICES_TO_DISABLE_ON_UNDOCK=""
+#+end_src
+
 ** X
 
 *** xprofile
@@ -3507,7 +4228,10 @@ insert_pass="Alt+n"
 contrary, it's automatically sourced by LightDM, my display manager of
 choice.
 
-#+begin_src sh
+#+begin_src sh :tangle no
+xset -b  # disable bell
+xset r rate 200 45  # repeat delay (ms) and rate (repeats/sec)
+
 # setxkbmap -option compose:ralt
 
 setxkbmap -option ctrl:nocaps          # turn capslock into control
@@ -3530,15 +4254,12 @@ source $HOME/.zprofile
 export _JAVA_AWT_WM_NONREPARENTING=1
 export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true'
 
-# unlock-def-gk.py &
-
 if [ $(hostname) = "plasma" ]
 then
-    bspwm &
-elif [ $(hostname) = "enigma" ]
-then
-    emacs &
+    unlock-def-gk.py &
 fi
+
+bspwm &
 #+end_src
 
 *** X resources
@@ -3900,6 +4621,260 @@ set statusbar-bg "#272727"
 set inputbar-bg "#373737"
 #+end_src
 
+** Zsh
+
+My zsh setup is built on [[https://github.com/zimfw/zimfw][Zim]]. Further, my zshrc references [[https://github.com/junegunn/fzf][fzf]],
+[[https://github.com/zsh-users/zsh-autosuggestions][zsh-autosuggestions]], and [[https://github.com/hlissner/zsh-autopair][zsh-autopair]]; so be sure to have them
+installed.
+
+*** zimrc
+:PROPERTIES:
+:header-args+: :tangle ~/.zimrc
+:END:
+
+#+begin_src sh
+
+
+#################
+# CORE SETTINGS #
+#################
+
+#
+# Zim settings
+#
+
+# Select what modules you would like enabled.
+# The second line of modules may depend on options set by modules in the first
+# line. These dependencies are noted on the respective module's README.md.
+zmodules=(directory environment git git-info history input ssh utility custom \
+          syntax-highlighting history-substring-search prompt completion)
+
+
+###################
+# MODULE SETTINGS #
+###################
+
+#
+# Prompt
+#
+
+# Set your desired prompt here
+zprompt_theme='pure'
+#PURE_PROMPT_SYMBOL=λ
+#PURE_PROMPT_SYMBOL=δ
+PURE_PROMPT_SYMBOL=➜
+
+#
+# Completion
+#
+
+# set an optional host-specific filename for the completion cache file
+# if none is provided, the default '.zcompdump' is used.
+#zcompdump_file=".zcompdump-${HOST}-${ZSH_VERSION}"
+
+#
+# Utility
+#
+
+# Uncomment to enable command correction prompts
+# See: http://zsh.sourceforge.net/Doc/Release/Options.html#Input_002fOutput
+setopt CORRECT
+
+#
+# Environment
+#
+
+# Set the string below to the desired terminal title format string.
+# The terminal title is redrawn upon directory change, however, variables like 
+# ${PWD} are only evaluated once. Use prompt expansion strings for dynamic data:
+#   http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html#Simple-Prompt-Escapes
+# The example below uses the following format: 'username@host:/current/directory'
+ztermtitle='%n@%m:%~'
+
+#
+# Input
+#
+
+# Uncomment to enable double-dot expansion.
+# This appends '../' to your input for each '.' you type after an initial '..'
+#zdouble_dot_expand='true'
+
+#
+# Syntax-Highlighting
+#
+
+# This determines what highlighters will be used with the syntax-highlighting module.
+# Documentation of the highlighters can be found here:
+#   https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md
+# For (u)rxvt, termite and gnome-terminal users,
+# removing the 'cursor' highlighter will fix the disappearing cursor problem
+#zhighlighters=(main brackets cursor)
+zhighlighters=(main brackets pattern)
+
+
+#
+# SSH
+#
+
+# Load these ssh identities with the ssh module
+zssh_ids=(id_rsa plasma_id_rsa id_ed25519 id_rsa_aur)
+
+
+#
+# Pacman
+#
+
+# Set (optional) pacman front-end.
+zpacman_frontend='yay'
+
+# Load any helper scripts as defined here
+#zpacman_helper=(aur)
+#+end_src
+
+*** zlogin
+:PROPERTIES:
+:header-args+: :tangle ~/.zlogin
+:END:
+
+#+begin_src sh
+
+
+#
+# User configuration sourced by login shells
+#
+
+# Initialize zim
+[[ -s ${ZIM_HOME}/login_init.zsh ]] && source ${ZIM_HOME}/login_init.zsh
+#+end_src
+
+*** zprofile
+:PROPERTIES:
+:header-args+: :tangle ~/.zprofile
+:END:
+
+#+begin_src sh
+#PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"
+#PATH=$HOME/.gem/ruby/2.4.0/bin:$PATH
+export PATH=$HOME/.local/bin:$HOME/.cabal/bin:$HOME/.cargo/bin:$HOME/.elan/bin:$PATH
+export XDG_CONFIG_HOME=$HOME/.config
+export XDG_DATA_HOME=$HOME/.local/share
+export XDG_DATA_DIRS=/usr/local/share:/usr/share
+export MAILDIR="$HOME/mail"
+export CVS_RSH=ssh
+#export MATHMODELS=$HOME/src/eiffel/mathmodels
+#export RUST_SRC_PATH=~/.multirust/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src
+#export PATH=$PATH:$HOME/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/
+
+# Eiffel2Java stuff
+#export JAVA_HOME=/usr/lib/jvm/default
+#export CPATH=$CPATH:"$JAVA_HOME/include:$JAVA_HOME/include/linux"
+#export LIBRARY_PATH=$LIBRARY_PATH:"$JAVA_HOME/jre/lib/amd64/server"
+#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$JAVA_HOME/jre/lib/amd64/server"
+
+#export PATH="$HOME/usr/build/pvs:$PATH"
+#export SBCLISP_HOME=/usr/share/sbcl-source
+#export PVS_LIBRARY_PATH="$HOME/usr/build/pvs/nasalib"
+
+export MOZ_USE_XINPUT2=1  # precise scrolling in firefox
+
+#export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
+#export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"
+
+if [ -e /home/amin/.nix-profile/etc/profile.d/nix.sh ]; then . /home/amin/.nix-profile/etc/profile.d/nix.sh; fi # added by Nix installer
+#+end_src
+
+*** zshenv
+:PROPERTIES:
+:header-args+: :tangle ~/.zshenv
+:END:
+
+#+begin_src sh
+# Ensure that a non-login, non-interactive shell has a defined environment.
+if [[ "$SHLVL" -eq 1 && ! -o LOGIN && -s "${ZDOTDIR:-$HOME}/.zprofile" ]]; then
+  source "${ZDOTDIR:-$HOME}/.zprofile"
+fi
+#+end_src
+
+*** zshrc
+:PROPERTIES:
+:header-args+: :tangle ~/.zshrc
+:END:
+
+#+begin_src sh
+# Bash-like navigation
+#export WORDCHARS='*?_-.[]~=&;!#$%^(){}<>'
+#export WORDCHARS='*?-[]~=&;!#$%^(){}<>'
+export WORDCHARS='*?[]~=&;!#$%^(){}<>'
+#ZLE_SPACE_SUFFIX_CHARS=$'|&'
+
+#disable -r time       # disable shell reserved word
+#alias time='time -p'  # -p for POSIX output
+
+# rehash if last command was pacaur or pacman
+# (so that zsh picks up changes in $PATH immediately)
+TRAPUSR1() { rehash}; precmd() { [[ $history[$[ HISTCMD -1 ]] == *(pacaur|pacman)* ]] && killall -USR1 zsh }
+
+#
+# User configuration sourced by interactive shells
+#
+
+# Change default zim location
+export ZIM_HOME=${ZDOTDIR:-${HOME}}/.zim
+
+# Start zim
+[[ -s ${ZIM_HOME}/init.zsh ]] && source ${ZIM_HOME}/init.zsh
+
+ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
+#ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red,bold' 
+
+setopt globdots
+
+source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
+source ~/.zsh/zsh-autopair/autopair.zsh
+
+
+### fzf ###
+
+source /usr/share/fzf/key-bindings.zsh
+source /usr/share/fzf/completion.zsh
+
+# Accept history selection instead of putting it on
+# the command line
+fzf-history-widget-accept() {
+  fzf-history-widget
+  zle accept-line
+}
+#zle     -N   fzf-history-widget-accept
+#bindkey '^R' fzf-history-widget-accept
+
+# alt+c preview
+export FZF_ALT_C_OPTS="--preview 'tree -C {} | head -200'"
+
+### fzf ###
+
+
+# aliases
+alias mpv="mpv --ytdl-format mp4"
+alias mv="mv -iv"
+alias cp="cp -iv"
+alias scl=systemctl
+alias jcl=journalctl
+alias m="mbsync -Va; getmail; notmuch new"
+alias best="youtube-dl -f best"
+alias nixx="ssh amin@nix.aminb.org"
+alias fence="ssh aminb@fencepost.gnu.org"
+
+aur() {
+   cd ~/usr/build
+   git clone https://aur.archlinux.org/${1}.git
+   cd ${1}
+}
+
+# i-beam cursor
+echo -e "\033[5 q"
+#echo -e "\033[6 q"
+#+end_src
+
 * Scripts
 
 This section contains various useful scripts and the ones used by the
@@ -3909,6 +4884,34 @@ Xfce's presentation mode which keeps the screen awake, and
 =rofi-light= a small utility that uses [[https://github.com/DaveDavenport/rofi][Rofi]] to ask and [[https://github.com/haikarainen/light][light]] to set an
 exact brightness value.
 
+** battery-percentage-time
+:PROPERTIES:
+:header-args+: :tangle ~/.local/bin/battery-percentage-time :shebang "#!/bin/sh"
+:END:
+
+#+begin_src sh
+dbus_send() {
+       label=$1
+       dbus-send --print-reply=literal --system \
+               --dest=org.freedesktop.UPower \
+               /org/freedesktop/UPower/devices/battery_BAT0 \
+               org.freedesktop.DBus.Properties.Get \
+               string:org.freedesktop.UPower.Device \
+               string:"${label}" | awk '{print $3}'
+}
+
+perc=$(dbus_send 'Percentage')
+state=$(dbus_send 'State')
+
+if [ "$state" -eq 2 ]; then  # Discharging
+       secs=$(dbus_send 'TimeToEmpty')
+elif [ "$state" -eq 1 ]; then  # Charging
+       secs=$(dbus_send 'TimeToFull')
+fi
+
+printf '%s%%%%%2dh%02dm \n' "$perc" $((secs / 3600)) $((secs % 3600 / 60))
+#+end_src
+
 ** rofi-light
 :PROPERTIES:
 :header-args+: :tangle ~/.local/bin/rofi-light :shebang "#!/bin/bash"
@@ -3916,10 +4919,60 @@ exact brightness value.
 
 #+begin_src bash
 cur=$(light -G)
-val=$(rofi -dmenu -mesg "light    $cur" -p "light -S " -l 0 -width 8)
+val=$(rofi -dmenu -mesg "light    $cur" -p "light -S " -l 0 -width 12)
 light -S $val
 #+end_src
 
+** s (run sway)
+:PROPERTIES:
+:header-args+: :tangle ~/.local/bin/s :shebang "#!/bin/bash"
+:END:
+
+#+begin_src bash
+export _JAVA_AWT_WM_NONREPARENTING=1
+export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true'
+light -Scrs "intel_backlight" 2
+source $HOME/.zprofile
+sway
+#+end_src
+
+** sway-ws-util
+:PROPERTIES:
+:header-args+: :tangle ~/.local/bin/sway-ws-util :shebang "#!/bin/bash"
+:END:
+
+#+begin_src bash
+curr_ws=$(swaymsg -t get_workspaces | jq -r '.[] | select(.focused==true).name')
+[[ $curr_ws -eq 1 ]] && prev_ws=10 || prev_ws=$((curr_ws-1))
+[[ $curr_ws -eq 10 ]] && next_ws=1 || next_ws=$((curr_ws+1))
+dest_ws=-1
+op=-1
+
+if [ "$1" = "switch" ] || [ "$1" = "move" ]; then
+  op="$1"
+  if [ "$2" = "prev" ]; then
+    dest_ws="$prev_ws"
+  elif [ "$2" = "next" ]; then
+    dest_ws="$next_ws"
+  else
+    echo "Usage: $0 $1 {prev|next} [follow]"
+    exit 1
+  fi
+else
+  echo "Usage: $0 {switch|move} {prev|next} [follow]"
+  exit 1
+fi
+
+if [ "$op" = "switch" ]; then
+  sway workspace "$dest_ws"
+elif [ "$op" = "move" ]; then
+  sway move container to workspace "$dest_ws"
+  if [ "$3" = "follow" ]; then
+    sway workspace "$dest_ws"
+  fi
+fi
+#+end_src
+
 ** toggle-layout
 :PROPERTIES:
 :header-args+: :tangle ~/.local/bin/toggle-layout :shebang "#!/bin/bash"
@@ -3945,6 +4998,44 @@ fi
 xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/presentation-mode -T
 #+end_src
 
+** toggle-tablet
+:PROPERTIES:
+:header-args+: :tangle ~/.local/bin/toggle-tablet :shebang "#!/bin/bash"
+:END:
+
+This script toggles between a 'normal' mode and a 'tablet' mode, doing
+a few things:
+
+- rotates the screen using =xrandr=, so that rotating the physical
+  display of my X220t would have the laptop's battery on the right
+  hand side,
+- enables touch screen,
+- properly rotates the stylus pen and touch screen pointers, and
+- toggles between RGB and Vertical BGR sub-pixel order.
+
+#+begin_src bash
+case $(xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation) in
+    0)  # Screen is not rotated, we should rotate it right (90°)
+           xrandr -o 3
+           xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation -s 1
+           xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Device_Enabled -s 1
+           xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Wacom_Rotation -s 1
+           xfconf-query -c xsettings -p /Xft/RGBA -s vbgr
+           ;;
+    1)  # Currently top is rotated right, we should set it normal (0°)
+          xrandr -o 0
+          xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation -s 0
+          xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Wacom_Rotation -s 0
+          xfconf-query -c pointers -p /Wacom_ISDv4_E6_Finger_touch/Properties/Device_Enabled -s 0
+          xfconf-query -c xsettings -p /Xft/RGBA -s rgb
+          ;;
+    *)
+           echo "Unknown result from 'xfconf-query -c pointers -p /Wacom_ISDv4_E6_Pen_stylus/Properties/Wacom_Rotation'" >&2
+           exit 1
+           ;;
+esac
+#+end_src
+
 ** unlock-def-gk.py
 :PROPERTIES:
 :header-args+: :tangle ~/.local/bin/unlock-def-gk.py :shebang "#!/usr/bin/env python2"
@@ -3956,6 +5047,21 @@ import gnomekeyring as gk
 gk.unlock_sync('Default_keyring',gk.item_get_info_sync('login',1L).get_secret())
 #+end_src
 
+** volume-info
+:PROPERTIES:
+:header-args+: :tangle ~/.local/bin/volume-info :shebang "#!/bin/sh"
+:END:
+
+#+begin_src sh
+cur_vol=$(pamixer --get-volume)
+
+if [ $(pamixer --get-mute) = true ]; then
+  printf 'mt \n' "$cur_vol"
+else
+  printf '%02d \n' "$cur_vol"
+fi
+#+end_src
+
 ** wp
 
 My little wallpaper changer script.