[emacs] add crux-top-join-line bindings (à la evil-mode's J)
[~bandali/configs] / rc.org
diff --git a/rc.org b/rc.org
index 1ea4d4e..2819060 100644 (file)
--- a/rc.org
+++ b/rc.org
@@ -632,6 +632,64 @@ timeout = 0
 </fontconfig>
 #+end_src
 
+** getmail
+
+*** getmailrc
+:PROPERTIES:
+:header-args+: :tangle ~/.getmail/getmailrc
+:END:
+
+#+begin_src conf
+[retriever]
+type = SimplePOP3SSLRetriever
+server = fencepost.gnu.org
+username = aminb
+password_command = ("gpg2", "--no-tty", "-q", "-d", "/home/amin/.passwd/gnu.gpg")
+port = 995
+use_apop = True
+
+[destination]
+type = Maildir
+path = ~/mail/gnu/Inbox/
+
+[options]
+delete = True
+#+end_src
+
+*** getmail.service
+:PROPERTIES:
+:header-args+: :tangle ~/.config/systemd/user/getmail.service
+:END:
+
+#+begin_src conf :tangle no
+[Unit]
+Description=getmail service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/getmail
+StandardOutput=syslog
+StandardError=syslog
+#+end_src
+
+*** getmail.timer
+:PROPERTIES:
+:header-args+: :tangle ~/.config/systemd/user/getmail.timer
+:END:
+
+#+begin_src conf :tangle no
+[Unit]
+Description=getmail timer
+
+[Timer]
+OnCalendar=*:0/30
+Persistent=true
+Unit=getmail.service
+
+[Install]
+WantedBy=timers.target
+#+end_src
+
 ** Git
 
 *** gitconfig
@@ -643,8 +701,8 @@ timeout = 0
 #+begin_src conf
 [user]
     name = Amin Bandali
-    email = amin@aminb.org
-    signingkey = 4E05246AB0BF7FFB
+    email = amin@gnu.org
+    signingkey = CDDE75F903538E71813CDA27D1FBA36627D65876
 #+end_src
 
 **** signing
@@ -686,6 +744,8 @@ timeout = 0
     pr = pull --rebase
     ps = push
     psf = push --force
+    nmam = "!f() { notmuch show --format=raw $1 | git am -; }; f"
+    nmam3 = "!f() { notmuch show --format=raw $1 | git am -3 -; }; f"
 #+end_src
 
 **** color
@@ -721,8 +781,8 @@ timeout = 0
 **** send-email
 #+begin_src conf
 [sendemail]
-       smtpuser = amin@aminb.org
-       smtpserver = nix.aminb.org
+       smtpuser = aminb
+       smtpserver = fencepost.gnu.org
        smtpserverport = 587
        smtpencryption = tls
        annotate = yes
@@ -743,12 +803,60 @@ timeout = 0
 *-autoloads.el
 #+end_src
 
+** GnuPG
+:PROPERTIES:
+:header-args+: :tangle ~/.gnupg/gpg-agent.conf
+:END:
+
+#+begin_src conf
+default-cache-ttl 43200
+max-cache-ttl 43200
+
+default-cache-ttl-ssh 10800
+max-cache-ttl-ssh 10800
+
+# pinentry-program /usr/bin/pinentry-qt
+#+end_src
+
+** GTK
+
+*** gtk-2.0
+:PROPERTIES:
+:header-args+: :tangle ~/.gtkrc-2.0
+:END:
+
+#+begin_src conf
+gtk-theme-name="Greybird"
+gtk-icon-theme-name="Paper"
+gtk-font-name="Ubuntu 10"
+gtk-menu-images=0
+# gtk-key-theme-name = "Emacs"
+#+end_src
+
+*** gtk-3.0
+:PROPERTIES:
+:header-args+: :tangle ~/.config/gtk-3.0/settings.ini
+:END:
+
+#+begin_src conf :tangle no
+[Settings]
+gtk-icon-theme-name = Paper
+# gtk-theme-name = Adwaita
+
+gtk-theme-name = Greybird
+# gtk-theme-name = Arc-Darker
+# gtk-theme-name = Numix-ArchBlue
+
+gtk-font-name = Ubuntu 10
+# gtk-key-theme-name = Emacs
+#+end_src
+
 ** [[https://github.com/Leinnan/i3gs][i3gs]]
 :PROPERTIES:
 :header-args+: :tangle ~/.config/i3gs/config
 :END:
 
-#+begin_src conf :comments none
+#+begin_src conf :comments none :tangle no
 borders_width=0 0 2 0
 separator_width=10
 
@@ -772,6 +880,11 @@ borders_color=#3D9970
 #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
@@ -785,151 +898,83 @@ borders_color=#01FF70
 
 [date]
 preset=DATE
-command=date '+%-I:%M, %a %b %d'
+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
-:END:
-
-#+begin_src conf
-$pdf_previewer = "start zathura %O %S";
-$clean_ext = "aux out";
-
-# $pdf_update_method = 4;
-# $pdf_update_command = "zathura %O %S";
-
-# Synctex allows one to jump to from the PDF in Zathura to the source in Emacs
-# by Ctrl+click in the PDF.
-# Tell latexmk to use Zathura as a previewer, and run emacsclient as the Synctex
-# editor.
-# $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
-:PROPERTIES:
-:header-args+: :tangle ~/.getmail/getmailrc
-:END:
-
-#+begin_src conf
-[retriever]
-type = SimplePOP3SSLRetriever
-server = fencepost.gnu.org
-username = aminb
-password_command = ("gpg2", "--no-tty", "-q", "-d", "/home/amin/.passwd/gnu.gpg")
-port = 995
-use_apop = True
-
-[destination]
-type = Maildir
-path = ~/mail/gnu/Inbox/
-
-[options]
-delete = True
-#+end_src
-
-*** getmail.service
-:PROPERTIES:
-:header-args+: :tangle ~/.config/systemd/user/getmail.service
-:END:
-
-#+begin_src conf :tangle no
-[Unit]
-Description=getmail service
-
-[Service]
-Type=oneshot
-ExecStart=/usr/bin/getmail
-StandardOutput=syslog
-StandardError=syslog
-#+end_src
-
-*** getmail.timer
-:PROPERTIES:
-:header-args+: :tangle ~/.config/systemd/user/getmail.timer
-:END:
-
-#+begin_src conf :tangle no
-[Unit]
-Description=getmail timer
-
-[Timer]
-OnCalendar=*:0/30
-Persistent=true
-Unit=getmail.service
-
-[Install]
-WantedBy=timers.target
-#+end_src
 
-** GnuPG
+** i3status
 :PROPERTIES:
-:header-args+: :tangle ~/.gnupg/gpg-agent.conf
+:header-args+: :tangle ~/.config/i3status/config
 :END:
 
-#+begin_src conf
-default-cache-ttl 43200
-max-cache-ttl 43200
+#+begin_src conf :comments none
+# i3status configuration file.
+# see "man i3status" for documentation.
 
-default-cache-ttl-ssh 10800
-max-cache-ttl-ssh 10800
+# It is important that this file is edited as UTF-8.
+# The following line should contain a sharp s:
+# ß
+# If the above line is not correctly displayed, fix your editor first!
 
-# pinentry-program /usr/bin/pinentry-qt
-#+end_src
+general {
+        colors = true
+        interval = 5
+}
 
-** GTK
+# order += "ipv6"
+order += "disk /"
+order += "disk /data"
+order += "wireless _first_"
+# order += "ethernet _first_"
+order += "battery 0"
+order += "volume master"
+order += "load"
+order += "tztime local"
+
+wireless _first_ {
+        format_up = "W:%quality %essid %ip"
+        format_down = "W: down"
+}
 
-*** gtk-2.0
-:PROPERTIES:
-:header-args+: :tangle ~/.gtkrc-2.0
-:END:
+# ethernet _first_ {
+#         # if you use %speed, i3status requires root privileges
+#         format_up = "E: %ip (%speed)"
+#         format_down = "E: down"
+# }
+
+battery 0 {
+        format = "%status %percentage %remaining (%consumption)"
+        path = "/sys/class/power_supply/BAT%d/uevent"
+        low_threshold = "10"
+        threshold_type = "percentage"
+        last_full_capacity = true
+        integer_battery_capacity = true
+        hide_seconds = true
+}
 
-#+begin_src conf
-gtk-theme-name="Greybird"
-gtk-icon-theme-name="Paper"
-gtk-font-name="Ubuntu 10"
-gtk-menu-images=0
-# gtk-key-theme-name = "Emacs"
-#+end_src
+tztime local {
+        format = "%-I:%M%P %a %b %d"
+}
 
-*** gtk-3.0
-:PROPERTIES:
-:header-args+: :tangle ~/.config/gtk-3.0/settings.ini
-:END:
+volume master {
+        format = "♪ %volume"
+        format_muted = "🔇 %volume"
+        device = "pulse"
+}
 
-#+begin_src conf :tangle no
-[Settings]
-gtk-icon-theme-name = Paper
-# gtk-theme-name = Adwaita
+load {
+        format = "%1min"
+}
 
-gtk-theme-name = Greybird
-# gtk-theme-name = Arc-Darker
-# gtk-theme-name = Numix-ArchBlue
+disk "/" {
+        format = "/ %avail"
+}
 
-gtk-font-name = Ubuntu 10
-# gtk-key-theme-name = Emacs
+disk "/data" {
+        format = "/data %avail"
+}
 #+end_src
 
 ** isync
@@ -1022,6 +1067,42 @@ Unit=mbsync.service
 WantedBy=timers.target
 #+end_src
 
+** Latexmk
+:PROPERTIES:
+:header-args+: :tangle ~/.latexmkrc
+:END:
+
+#+begin_src conf
+$pdf_previewer = "start zathura %O %S";
+$clean_ext = "aux out";
+
+# $pdf_update_method = 4;
+# $pdf_update_command = "zathura %O %S";
+
+# Synctex allows one to jump to from the PDF in Zathura to the source in Emacs
+# by Ctrl+click in the PDF.
+# Tell latexmk to use Zathura as a previewer, and run emacsclient as the Synctex
+# editor.
+# $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
+
 ** mpd
 :PROPERTIES:
 :header-args+: :tangle ~/.config/mpd/mpd.conf
@@ -1454,7 +1535,8 @@ logfile ~/.msmtp.log
 # aminb
 account aminb
 host nix.aminb.org
-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
+# use `msmtp -a aminb --serverinfo --tls --tls-certcheck=off --tls-fingerprint=` to get the current fingerprint
+tls_fingerprint 98:C7:F0:02:7F:2B:D8:B6:D3:BF:E8:C1:D4:07:6B:B5:6C:B1:C7:5D:97:20:70:88:AB:9E:B5:09:5D:2C:DC:8E
 tls_starttls on
 from amin@aminb.org
 user amin@aminb.org
@@ -1470,6 +1552,14 @@ from aminb@gnu.org
 user aminb
 passwordeval gpg2 --no-tty -q -d ~/.passwd/gnu.gpg
 
+# gnu (amin)
+account gnu-amin : gnu
+from amin@gnu.org
+
+# gnu (mab)
+account gnu-mab : gnu
+from mab@gnu.org
+
 # uwaterloo
 account uwaterloo
 host connect.uwaterloo.ca
@@ -1479,10 +1569,6 @@ user abandali
 passwordeval gpg2 --no-tty -q -d ~/.passwd/uwaterloo.gpg
 tls_trust_file /etc/ssl/certs/ca-certificates.crt
 
-# uwaterloo (friendly address)
-account uwaterloo-friendly : uwaterloo
-from amin.bandali@uwaterloo.ca
-
 # Set a default account
 account default : aminb
 #+end_src
@@ -2105,7 +2191,7 @@ path=/home/amin/mail
 [user]
 name=Amin Bandali
 primary_email=amin@aminb.org
-other_email=abandali@uwaterloo.ca;amin.bandali@uwaterloo.ca;aminb@gnu.org;
+other_email=amin@gnu.org;abandali@uwaterloo.ca;mab@gnu.org;aminb@gnu.org;
 
 # Configuration for "notmuch new"
 #
@@ -2191,31 +2277,30 @@ sieve-filter -eW -o postmaster_address=postmaster@aminb.org \
 
 #+begin_src sh
 # 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
+notmuch tag -new +sent -- from:amin@aminb.org or from:amin@gnu.org or from:mab@gnu.org or from:aminb@gnu.org or from:abandali@uwaterloo.ca
 
 # initial tagging
-notmuch tag -latest -- tag:latest
+notmuch tag -latest                     -- tag:latest
 notmuch tag +inbox +unread +latest -new -- tag:new
 
 
 # apply tags to lists
 
 # <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
+notmuch tag -inbox +banking -- folder:amin/banking
+notmuch tag -inbox +work -- folder:amin/work
 # </aminb>
 
 # <uw>
 notmuch tag -inbox +uw/cs136 -- folder:uwaterloo/lists/cs136
+notmuch tag -inbox +uw/se212 -- folder:uwaterloo/lists/se212
 notmuch tag -inbox +uw/se463 -- folder:uwaterloo/lists/se463
 
+notmuch tag -inbox +lists/alloytools       -- folder:uwaterloo/lists/alloytools
 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
@@ -2224,22 +2309,28 @@ notmuch tag -inbox +lists/watform-students -- folder:uwaterloo/lists/Watform-stu
 # </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
+notmuch tag -inbox +l/emacs-devel       -- folder:gnu/l/emacs-devel
+notmuch tag -inbox +l/emacs-orgmode     -- folder:gnu/l/emacs-orgmode
+notmuch tag -inbox +l/emacsconf-discuss -- folder:gnu/l/emacsconf-discuss
+notmuch tag -inbox +l/fencepost-users   -- folder:gnu/l/fencepost-users
+notmuch tag -inbox +l/guix-devel        -- folder:gnu/l/guix-devel
+notmuch tag -inbox +l/guile-devel       -- folder:gnu/l/guile-devel
+notmuch tag -inbox +l/help-gnu-emacs    -- folder:gnu/l/help-gnu-emacs
+notmuch tag -inbox +l/info-gnu-emacs    -- folder:gnu/l/info-gnu-emacs
+notmuch tag -inbox +l/www-commits       -- folder:gnu/l/www-commits
+notmuch tag -inbox +l/www-discuss       -- folder:gnu/l/www-discuss
+notmuch tag -inbox +webmasters          -- folder:gnu/webmasters
+
+notmuch tag -inbox +l/deepspec     -- folder:gnu/l/deepspec
+notmuch tag -inbox +l/haskell-cafe -- folder:gnu/l/haskell-cafe
+notmuch tag -inbox +l/haskell-art  -- folder:gnu/l/haskell-art
+notmuch tag -inbox +l/notmuch      -- folder:gnu/l/notmuch
+
+notmuch tag -inbox +l/~aminb/test-priv         -- folder:gnu/l/~aminb/test-priv
+notmuch tag -inbox +l/~sircmpwn/sr.ht-admins   -- folder:gnu/l/~sircmpwn/sr.ht-admins
+notmuch tag -inbox +l/~sircmpwn/sr.ht-announce -- folder:gnu/l/~sircmpwn/sr.ht-announce
+notmuch tag -inbox +l/~sircmpwn/sr.ht-dev      -- folder:gnu/l/~sircmpwn/sr.ht-dev
+notmuch tag -inbox +l/~sircmpwn/sr.ht-discuss  -- folder:gnu/l/~sircmpwn/sr.ht-discuss
 # </gnu>
 
 notmuch tag -inbox -unread +archive/notmuch     -- path:archive/notmuch/**
@@ -2422,6 +2513,19 @@ if anyof (
         fileinto :create "l/${listname}";
     }
 }
+
+if anyof (
+    header :contains "list-id" "<~aminb/test-priv@lists.sr.ht>",
+    header :contains "list-id" "<~sircmpwn/sr.ht-admins@lists.sr.ht>",
+    header :contains "list-id" "<~sircmpwn/sr.ht-announce@lists.sr.ht>",
+    header :contains "list-id" "<~sircmpwn/sr.ht-dev@lists.sr.ht>",
+    header :contains "list-id" "<~sircmpwn/sr.ht-discuss@lists.sr.ht>") {
+    if header :regex "list-id" "(~[a-z_0-9-]+)/([a-z_0-9.-]+)@" {
+        set :lower "username" "${1}";
+        set :lower "listname" "${2}";
+        fileinto :create "l/${username}/${listname}";
+    }
+}
 #+end_src
 
 ** polybar
@@ -3733,9 +3837,15 @@ input "1:1:AT_Translated_Set_2_keyboard" {
     # start your launcher
     bindsym $mod+d exec $menu
 
+    # password manager
+    bindsym $mod2+space exec rofi-pass
+
     # Drag floating windows by holding down $mod and left mouse button.
     # Resize them with right mouse button + $mod.
-    floating_modifier $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
@@ -3887,7 +3997,7 @@ bar {
         background #323232
         inactive_workspace #32323200 #32323200 #5c5c5c
     }
-    status_command i3gs ~/.config/i3gs/config
+    status_command i3status
 }
 
 include /etc/sway/config.d/*
@@ -3896,9 +4006,9 @@ include /etc/sway/config.d/*
 ** TLP
 
 *** TODO enigma
-*** plasma
+*** archy
 
-#+begin_src conf :tangle (when (and (eq system-type 'gnu/linux) (string= (system-name) "plasma")) "/sudo::/etc/default/tlp")
+#+begin_src conf :tangle (when (and (eq system-type 'gnu/linux) (string= (system-name) "archy")) "/sudo::/etc/default/tlp")
 # ------------------------------------------------------------------------------
 # tlp - Parameters for power saving
 # See full explanation: http://linrunner.de/en/tlp/docs/tlp-configuration.html
@@ -4709,7 +4819,7 @@ zhighlighters=(main brackets pattern)
 #
 
 # Load these ssh identities with the ssh module
-zssh_ids=(id_rsa plasma_id_rsa id_ed25519 id_rsa_aur)
+zssh_ids=(id_ed25519_amin)
 
 
 #
@@ -4878,41 +4988,30 @@ exact brightness value.
 
 ** battery-percentage-time
 :PROPERTIES:
-:header-args+: :tangle ~/.local/bin/battery-percentage-time :shebang "#!/bin/bash"
+:header-args+: :tangle ~/.local/bin/battery-percentage-time :shebang "#!/bin/sh"
 :END:
 
-#+begin_src bash
-perc=$(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:'Percentage' | awk '{print $3}')
-
-state=$(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:'State' | awk '{print $3}')
+#+begin_src sh :tangle no
+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 --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:'TimeToEmpty' | awk '{print $3}')
-  printf '%s%%%%%2dh%02dm\n' "$perc" $((secs/3600)) $((secs%3600/60))
+       secs=$(dbus_send 'TimeToEmpty')
 elif [ "$state" -eq 1 ]; then  # Charging
-  secs=$(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:'TimeToFull' | awk '{print $3}')
-  printf '%s%%%%%2dh%02dm\n' "$perc" $((secs/3600)) $((secs%3600/60))
+       secs=$(dbus_send 'TimeToFull')
 fi
+
+printf '%s%%%%%2dh%02dm \n' "$perc" $((secs / 3600)) $((secs % 3600 / 60))
 #+end_src
 
 ** rofi-light
@@ -4981,7 +5080,7 @@ fi
 :header-args+: :tangle ~/.local/bin/toggle-layout :shebang "#!/bin/bash"
 :END:
 
-#+begin_src bash
+#+begin_src bash :tangle no
 lang="$(setxkbmap -print | grep xkb_symbols | cut -d'+' -f 2)"
 
 if [ "$lang" = "us" ]; then
@@ -4997,7 +5096,7 @@ fi
 :header-args+: :tangle ~/.local/bin/toggle-presentation-mode :shebang "#!/bin/bash"
 :END:
 
-#+begin_src bash
+#+begin_src bash :tangle no
 xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/presentation-mode -T
 #+end_src
 
@@ -5016,7 +5115,7 @@ a few things:
 - properly rotates the stylus pen and touch screen pointers, and
 - toggles between RGB and Vertical BGR sub-pixel order.
 
-#+begin_src bash
+#+begin_src bash :tangle no
 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
@@ -5044,12 +5143,27 @@ esac
 :header-args+: :tangle ~/.local/bin/unlock-def-gk.py :shebang "#!/usr/bin/env python2"
 :END:
 
-#+begin_src python
+#+begin_src python :tangle no
 import gnomekeyring as gk
 # list_item_ids_sync('login')[0] == 1L
 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 :tangle no
+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.