This section contains the configuration files (dotfiles) of various
programs I use.
-** dovecot
-:PROPERTIES:
-:header-args+: :tangle "/sudo::/etc/dovecot/dovecot.conf"
-:END:
-
-#+begin_src conf
-protocols = imap
-
-listen = 127.0.0.1
-log_path = /var/log/dovecot.log
-info_log_path = /var/log/dovecot-info.log
-
-ssl = no
-disable_plaintext_auth = no
-
-auth_verbose = yes
-auth_mechanisms = plain
-
-passdb {
- driver = passwd-file
- args = /etc/dovecot/passwd
-}
-
-userdb {
- driver = static
- args = uid=amin gid=amin home=/home/amin/mail/%d/%n
- default_fields = mail=maildir:/home/amin/mail/%d/%n/mail
-}
-
-# mail_home = /home/amin/mail/%d/%n
-# mail_location = maildir:/home/amin/mail/%d/%n/mail:LAYOUT=fs:INBOX=/home/amin/mail/%d/%n/mail/Inbox
-
-# namespace {
-# inbox = yes
-# separator = /
-# }
-
-mail_plugins = $mail_plugins fts fts_lucene
-
-plugin {
- fts = lucene
- fts_lucene = whitespace_chars=@.
- fts_autoindex = yes
-}
-#+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
-
-** mkinitcpio
-
-#+begin_src conf :tangle /sudo::/etc/mkinitcpio.conf :comments none
-# vim:set ft=sh
-# MODULES
-# The following modules are loaded before any boot hooks are
-# run. Advanced users may wish to specify all system modules
-# in this array. For instance:
-# MODULES=(piix ide_disk reiserfs)
-MODULES=(i915)
-
-# BINARIES
-# This setting includes any additional binaries a given user may
-# wish into the CPIO image. This is run last, so it may be used to
-# override the actual binaries included by a given hook
-# BINARIES are dependency parsed, so you may safely ignore libraries
-BINARIES=()
-
-# FILES
-# This setting is similar to BINARIES above, however, files are added
-# as-is and are not parsed in any way. This is useful for config files.
-FILES=()
-
-# HOOKS
-# This is the most important setting in this file. The HOOKS control the
-# modules and scripts added to the image, and what happens at boot time.
-# Order is important, and it is recommended that you do not change the
-# order in which HOOKS are added. Run 'mkinitcpio -H <hook name>' for
-# help on a given hook.
-# 'base' is _required_ unless you know precisely what you are doing.
-# 'udev' is _required_ in order to automatically load modules
-# 'filesystems' is _required_ unless you specify your fs modules in MODULES
-# Examples:
-## This setup specifies all modules in the MODULES setting above.
-## No raid, lvm2, or encrypted root is needed.
-# HOOKS=(base)
-#
-## This setup will autodetect all modules for your system and should
-## work as a sane default
-# HOOKS=(base udev autodetect block filesystems)
-#
-## This setup will generate a 'full' image which supports most systems.
-## No autodetection is done.
-# HOOKS=(base udev block filesystems)
-#
-## This setup assembles a pata mdadm array with an encrypted root FS.
-## Note: See 'mkinitcpio -H mdadm' for more information on raid devices.
-# HOOKS=(base udev block mdadm encrypt filesystems)
-#
-## This setup loads an lvm2 volume group on a usb device.
-# HOOKS=(base udev block lvm2 filesystems)
-#
-## NOTE: If you have /usr on a separate partition, you MUST include the
-# usr, fsck and shutdown hooks.
-HOOKS=(base udev autodetect modconf block keyboard encrypt lvm2 resume filesystems fsck)
-
-# COMPRESSION
-# Use this to compress the initramfs image. By default, gzip compression
-# is used. Use 'cat' to create an uncompressed image.
-#COMPRESSION="gzip"
-#COMPRESSION="bzip2"
-#COMPRESSION="lzma"
-#COMPRESSION="xz"
-#COMPRESSION="lzop"
-#COMPRESSION="lz4"
-
-# COMPRESSION_OPTIONS
-# Additional options for the compressor
-#COMPRESSION_OPTIONS=()
-#+end_src
-
** mpd
:PROPERTIES:
:header-args+: :tangle ~/.config/mpd/mpd.conf
move_sort_order_up
#+end_src
-** pacman
-
-*** conf
-
-#+begin_src conf :tangle /sudo::/etc/pacman.conf :comments none
-#
-# /etc/pacman.conf
-#
-# See the pacman.conf(5) manpage for option and repository directives
-
-#
-# GENERAL OPTIONS
-#
-[options]
-# The following paths are commented out with their default values listed.
-# If you wish to use different paths, uncomment and update the paths.
-#RootDir = /
-#DBPath = /var/lib/pacman/
-#CacheDir = /var/cache/pacman/pkg/
-#LogFile = /var/log/pacman.log
-#GPGDir = /etc/pacman.d/gnupg/
-#HookDir = /etc/pacman.d/hooks/
-HoldPkg = pacman glibc
-#XferCommand = /usr/bin/curl -L -C - -f -o %o %u
-#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
-#CleanMethod = KeepInstalled
-#UseDelta = 0.7
-Architecture = auto
-
-# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
-#IgnorePkg =
-#IgnoreGroup =
-
-#NoUpgrade =
-#NoExtract =
-
-# Misc options
-#UseSyslog
-Color
-TotalDownload
-CheckSpace
-VerbosePkgLists
-
-# By default, pacman accepts packages signed by keys that its local keyring
-# trusts (see pacman-key and its man page), as well as unsigned packages.
-SigLevel = Required DatabaseOptional
-LocalFileSigLevel = Optional
-#RemoteFileSigLevel = Required
-
-# NOTE: You must run `pacman-key --init` before first using pacman; the local
-# keyring can then be populated with the keys of all Arch/Parabola packagers
-# with `pacman-key --populate archlinux` and `pacman-key --populate parabola`.
-
-#
-# REPOSITORIES
-# - can be defined here or included from another file
-# - pacman will search repositories in the order defined here
-# - local/custom mirrors can be added here or in separate files
-# - repositories listed first will take precedence when packages
-# have identical names, regardless of version number
-# - URLs will have $repo replaced by the name of the current repo
-# - URLs will have $arch replaced by the name of the architecture
-#
-# Repository entries are of the format:
-# [repo-name]
-# Server = ServerName
-# Include = IncludePath
-#
-# The header [repo-name] is crucial - it must be present and
-# uncommented to enable the repo.
-#
-
-# The testing repositories are disabled by default. To enable, uncomment the
-# repo name header and Include lines. You can add preferred servers immediately
-# after the header, and they will be used before the default mirrors.
-
-# NOTE: Nonprism is a particular repository that aims to provide software built
-# and patched without services under global data surveillance programs like PRISM,
-# XKeyscore and Tempora. For more info see: https://wiki.parabola.nu/Nonprism
-
-#[nonprism-testing]
-#Include = /etc/pacman.d/mirrorlist
-
-#[nonprism]
-#Include = /etc/pacman.d/mirrorlist
-
-[libre-testing]
-Include = /etc/pacman.d/mirrorlist
-
-[libre]
-Include = /etc/pacman.d/mirrorlist
-
-#[testing]
-#Include = /etc/pacman.d/mirrorlist
-
-[core]
-Include = /etc/pacman.d/mirrorlist
-
-[extra]
-Include = /etc/pacman.d/mirrorlist
-
-#[community-testing]
-#Include = /etc/pacman.d/mirrorlist
-
-[community]
-Include = /etc/pacman.d/mirrorlist
-
-# The PCR (Parabola Community Repository) contains packages maintained by trusted
-# members of the Parabola community. It also contains packages maintained by
-# Parabola developers, but that the developer decided didn't belong in core/libre.
-
-#[pcr-testing]
-#Include = /etc/pacman.d/mirrorlist
-
-[pcr]
-Include = /etc/pacman.d/mirrorlist
-
-# If you want to run 32 bit applications on your x86_64 system,
-# enable the libre-multilib, multilib and pcr-multilib repositories as required here.
-
-#[nonprism-multilib-testing]
-#Include = /etc/pacman.d/mirrorlist
-
-#[nonprism-multilib]
-#Include = /etc/pacman.d/mirrorlist
-
-#[libre-multilib-testing]
-#Include = /etc/pacman.d/mirrorlist
-
-#[libre-multilib]
-#Include = /etc/pacman.d/mirrorlist
-
-#[multilib-testing]
-#Include = /etc/pacman.d/mirrorlist
-
-#[multilib]
-#Include = /etc/pacman.d/mirrorlist
-
-#[pcr-multilib-testing]
-#Include = /etc/pacman.d/mirrorlist
-
-#[pcr-multilib]
-#Include = /etc/pacman.d/mirrorlist
-
-# Parabola also supports another community projects and personal repositories, to
-# find them check out this wiki page: https://wiki.parabola.nu/Repositories
-
-# An example of a custom package repository. See the pacman manpage for
-# tips on creating your own repositories.
-#[custom]
-#SigLevel = Optional TrustAll
-#Server = file:///home/custompkgs
-
-Include = /etc/pacman.d/*.conf
-#+end_src
-
-*** mirrorlist
-
-#+begin_src conf :tangle /sudo::/etc/pacman.d/mirrorlist :comments none
-# Parabola GNU/Linux-libre - Last Updated: Wed Dec 20 02:59:35 GMT 2017
-
-Server = http://mirror.fsf.org/parabola/$repo/os/$arch
-Server = http://mirror.fsf.org/parabola/$repo/os/$arch
-Server = http://mirror.fsf.org/parabola/$repo/os/$arch
-Server = http://mirror.fsf.org/parabola/$repo/os/$arch
-
-# Location: London, UK
-# Responsible: Parabola Project
-# Note: Not really a mirror, automatically redirects you to an Arch
-# mirror when possible. Works best specifying it a few times in a
-# row (404s workaround).
-# Server = http://redirector.parabola.nu/$repo/os/$arch
-Server = https://redirector.parabola.nu/$repo/os/$arch
-
-# Location: Reykjavík, Iceland
-# Responsible: Parabola Project
-# Note: Not really a mirror, automatically redirects you to a Parabola
-# mirror that has the file you are looking for.
-# Server = http://repomirror.parabola.nu/$repo/os/$arch
-Server = https://repomirror.parabola.nu/$repo/os/$arch
-
-# Location: Falkenstein, Germany
-# Server = http://mirror.grapentin.org/parabola/$repo/os/$arch
-Server = https://mirror.grapentin.org/parabola/$repo/os/$arch
-
-# Location: Volendam, Netherlands
-Server = https://jeweet.net/repo/parabola/$repo/os/$arch
-
-# Location: Amsterdam, Netherlands
-# Note: Not really a mirror, but a high-speed 10GiB cache for
-# mirror.yandex.ru/mirrors/parabola
-# Server = http://parabola.isacdaavid.info:8080/$repo/os/$arch
-Server = https://parabola.isacdaavid.info:8081/$repo/os/$arch
-
-# Location: Moscow, Russian Federation
-# Server = http://mirror.yandex.ru/mirrors/parabola/$repo/os/$arch
-Server = https://mirror.yandex.ru/mirrors/parabola/$repo/os/$arch
-
-# Location: Ho Chi Minh City, Vietnam
-# Server = http://mirror.freedif.org/Parabola/$repo/os/$arch
-Server = https://mirror.freedif.org/Parabola/$repo/os/$arch
-
-# Location: Los Angeles, CA, USA
-# Note: Also visit http://alfplayer.com/ for its SNAPSHOTS ARCHIVE
-Server = http://alfplayer.com/parabola/$repo/os/$arch
-
-# Location: Boston, MA, USA
-Server = http://mirror.fsf.org/parabola/$repo/os/$arch
-
-# Location: Austin, TX, USA
-# Server = http://parabola.serverpit.com/
-Server = https://parabola.serverpit.com/
-
-# Location: Reykjavík, Iceland
-# Responsible: Parabola Project
-# Note: Currently pointing to repomirror.parabola.nu
-# Server = http://repo.parabola.nu/$repo/os/$arch
-Server = https://repo.parabola.nu/$repo/os/$arch
-#+end_src
-
** pigeonhole
*** amin.sieve
:PROPERTIES:
}
#+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
-
** redshift
:PROPERTIES:
:header-args+: :tangle ~/.config/redshift.conf :comments none
#DEVICES_TO_DISABLE_ON_UNDOCK=""
#+end_src
-** X
-
-*** xprofile
-:PROPERTIES:
-:header-args+: :tangle ~/.xprofile
-:END:
-
-=~/.xprofile= is similar in style to =~/.xinitrc=, but on the
-contrary, it's automatically sourced by LightDM, my display manager of
-choice.
-
-#+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
-setxkbmap -option altwin:swap_alt_win # swap alt and super
-
-if [ $(hostname) = "plasma" ]
-then
- setxkbmap -option ctrl:rctrl_ralt # turn right control into right alt
-fi
-
-if [ $(hostname) = "enigma" ]
-then
- xmodmap -e "keycode 135 = Alt_R" # remap menu key to alt
-fi
-
-light -Scrs "intel_backlight" 2
-
-source $HOME/.zprofile
-
-export _JAVA_AWT_WM_NONREPARENTING=1
-export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true'
-
-if [ $(hostname) = "plasma" ]
-then
- unlock-def-gk.py &
-fi
-
-bspwm &
-#+end_src
-
-*** xkb us_ab keyboard layout
-
-#+begin_src conf :tangle "/sudo::/usr/share/X11/xkb/symbols/us_ab" :comments none
-default partial alphanumeric_keys
-xkb_symbols "us_ab" {
- include "us(basic)"
- name[Group1]= "English (US)(aminb)";
-
- key <MENU> { [ Alt_R ] };
-};
-#+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_ed25519_bandali)
-
-#
-# 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"
-
-export NIXPKGS=$HOME/src/git/nixpkgs
-
-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
-
-export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale"
-export PATH="/$HOME/.config/guix/current/bin${PATH:+:}$PATH"
-export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
-export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
-export GIT_SSL_CAINFO="$SSL_CERT_FILE"
-#+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
-#
-
-# Define 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 csclub; mbsync uwaterloo; mbsync amin"
-alias best="youtube-dl -f best"
-alias sd="ssh deb"
-alias sf="ssh fp"
-alias sn="ssh nix"
-
-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
-programs above. For instance, =toggle-tablet= for switching to and
-from tablet mode on my X220T, =toggle-presentation-mode= for toggling
-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 :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 '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
-
-** my-i3status.py
-:PROPERTIES:
-:header-args+: :tangle ~/.local/bin/my-i3status.py :shebang "#!/usr/bin/env python2"
-:END:
-
-#+begin_src python :comments none
-# -*- coding: utf-8 -*-
-
-# This script is a simple wrapper which prefixes each i3status line with custom
-# information. It is based on:
-# https://github.com/i3/i3status/blob/master/contrib/wrapper.py
-#
-# In ~/.i3status.conf, add the following line:
-# output_format = "i3bar"
-# in the 'general' section.
-# Then, in ~/.config/i3/config or ~/.config/sway/config add:
-# status_command i3status | my-i3status.py
-# in the 'bar' section. Make sure my-i3status.py is in $PATH.
-#
-# © 2012 Valentin Haenel <valentin.haenel@gmx.de>
-# © 2018 Amin Bandali <bandali@gnu.org>
-#
-# This program is free software. It comes without any warranty, to the extent
-# permitted by applicable law. You can redistribute it and/or modify it under
-# the terms of the Do What The Fuck You Want To Public License (WTFPL), Version
-# 2, as published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more
-# details.
-
-import sys
-import json
-import os
-
-def get_nosleep():
- """ Return true if ~/.nosleep exists. """
- return os.path.isfile(os.path.expanduser("~/.nosleep"))
-
-def print_line(message):
- """ Non-buffered printing to stdout. """
- sys.stdout.write(message + '\n')
- sys.stdout.flush()
-
-def read_line():
- """ Interrupted respecting reader for stdin. """
- # try reading a line, removing any extra whitespace
- try:
- line = sys.stdin.readline().strip()
- # i3status sends EOF, or an empty line
- if not line:
- sys.exit(3)
- return line
- # exit on ctrl-c
- except KeyboardInterrupt:
- sys.exit()
-
-if __name__ == '__main__':
- # Skip the first line which contains the version header.
- print_line(read_line())
-
- # The second line contains the start of the infinite array.
- print_line(read_line())
-
- while True:
- line, prefix = read_line(), ''
- # ignore comma at start of lines
- if line.startswith(','):
- line, prefix = line[1:], ','
-
- if get_nosleep():
- j = json.loads(line)
- # insert information into the start of the json, but could be anywhere
- j.insert(0, {'full_text' : '•', 'name' : 'nosleep'})
- # and echo back new encoded json
- print_line(prefix+json.dumps(j))
- else:
- print_line(prefix+line)
-#+end_src
-
-** rofi-light
-:PROPERTIES:
-:header-args+: :tangle ~/.local/bin/rofi-light :shebang "#!/bin/bash"
-:END:
-
-#+begin_src bash
-cur=$(light -G)
-val=$(rofi -dmenu -mesg "light $cur" -p "light -S " -l 0 -width 12)
-[ -n "$val" ] && light -S $val
-#+end_src
-
-** rofi-remmina.py
-:PROPERTIES:
-:header-args+: :tangle ~/.local/bin/rofi-remmina.py :shebang "#!/usr/bin/env python2"
-:END:
-
-#+begin_src python
-import ConfigParser
-import os
-from subprocess import Popen, PIPE
-
-remmina_dir = os.path.expanduser("~/.local/share/remmina")
-
-fdict = dict()
-
-for f in os.listdir(remmina_dir):
- fp = os.path.join(remmina_dir, f)
- c = ConfigParser.ConfigParser()
- c.read(fp)
- n = c.get('remmina', 'name')
- fdict[n] = fp
-
-lines = max(min(15, len(fdict)), 1);
-width = len(max(fdict.keys(), key=len))
-rofi = Popen(["rofi", "-i", "-dmenu", \
- "-l", str(lines), "-width", str(width), \
- "-p", "connection"], stdout=PIPE, stdin=PIPE)
-selected = rofi.communicate("\n" \
- .join(fdict.keys()) \
- .encode("utf-8"))[0] \
- .decode("utf-8") \
- .strip()
-rofi.wait()
-
-r = Popen(["remmina", "-c", fdict[selected]])
-r.wait()
-#+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 -Nr 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-presentation-mode
-:PROPERTIES:
-:header-args+: :tangle ~/.local/bin/toggle-presentation-mode :shebang "#!/bin/bash"
-:END:
-
-#+begin_src bash :tangle no
-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 :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
- 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
-
-** 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
-
-** zathura-sync.sh
-:PROPERTIES:
-:header-args+: :tangle ~/.local/bin/zathura-sync.sh :shebang "#!/bin/sh"
-:END:
-
-#+begin_src sh
-pos="$1"
-pdffile="$2"
-zathura --synctex-forward "$pos" "$pdffile" || \
- (
- zathura -x "emacsclient --eval '(progn (switch-to-buffer (file-name-nondirectory \"%{input}\")) (goto-line %{line}))'" "$pdffile" &
- sleep 1; zathura --synctex-forward "$pos" "$pdffile" )
-#+end_src