[emacs] add evil{,-escape} and general and some keybindings
[~bandali/configs] / rc.org
diff --git a/rc.org b/rc.org
index 1520bfd..baf1eee 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
@@ -66,7 +25,7 @@ sent_tag = sent
 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
@@ -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
 #
@@ -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
@@ -787,6 +752,22 @@ $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")
+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 +780,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 +1396,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 +1405,7 @@ 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
+tls_fingerprint 95:B7:AC:05:37:97:F8:BE:0B:C0:71:4A:8A:4C:0B:A7:59:FD:2F:B8:93:C8:CC:B6:FF:82:83:90:CF:03:91:93
 tls_starttls on
 from aminb@gnu.org
 user aminb
@@ -2065,7 +2046,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 +2065,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 +2114,44 @@ 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 +inbox +unread -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
+notmuch tag -inbox +lists/haskell-weekly -- folder:amin/lists/haskell-weekly
+notmuch tag -inbox +lists/hackernewsletter -- folder:amin/lists/hackernewsletter
+notmuch tag -inbox +lists/emacs-devel -- folder:gnu/l/emacs-devel
+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/info-gnu-emacs -- folder:gnu/l/info-gnu-emacs
+notmuch tag -inbox +lists/help-gnu-emacs -- folder:gnu/l/help-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 +lists/fencepost-users -- folder:gnu/l/fencepost-users
+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/notmuch -- folder:gnu/l/notmuch
 #+end_src
 
 *** notmuch.service
@@ -2280,6 +2282,53 @@ 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" "<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" "<fencepost-users.gnu.org>",
+    header :contains "list-id" "<deepspec.lists.cs.princeton.edu>",
+    header :contains "list-id" "<haskell-cafe.haskell.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 +2734,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 +3384,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 +3492,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 +3562,322 @@ switch="Alt+x"
 insert_pass="Alt+n"
 #+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
@@ -3509,6 +3891,7 @@ choice.
 
 #+begin_src sh
 xset -b  # disable bell
+xset r rate 200 45  # repeat delay (ms) and rate (repeats/sec)
 
 # setxkbmap -option compose:ralt
 
@@ -3532,15 +3915,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 -ib 0 &
+    unlock-def-gk.py &
 fi
+
+bspwm &
 #+end_src
 
 *** X resources
@@ -4036,7 +4416,7 @@ zpacman_frontend='yay'
 #+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:$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
@@ -4061,7 +4441,7 @@ 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
+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
@@ -4142,8 +4522,8 @@ alias scl=systemctl
 alias jcl=journalctl
 alias m="mbsync -Va; getmail; notmuch new"
 alias best="youtube-dl -f best"
-alias ace="mosh amin@ace.aminb.org"
-alias nix="ssh amin@aminb.org"
+alias nixx="ssh amin@nix.aminb.org"
+alias fence="ssh aminb@fencepost.gnu.org"
 
 aur() {
    cd ~/usr/build
@@ -4172,7 +4552,7 @@ 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
 
@@ -4201,6 +4581,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"