diff --git a/sxhkd/.config/sxhkd/chain-labels.example.conf b/sxhkd/.config/sxhkd/chain-labels.example.conf deleted file mode 100644 index f2cef24..0000000 --- a/sxhkd/.config/sxhkd/chain-labels.example.conf +++ /dev/null @@ -1,7 +0,0 @@ -# for sxhkd-chain-labels script - -# media manipulation mode: playing, pausing, skipping,.. -media:alt + m - -# academia mode: opening bibtex readings, annotating,.. -academia:alt + a diff --git a/sxhkd/.config/sxhkd/sxhkdrc b/sxhkd/.config/sxhkd/sxhkdrc deleted file mode 100644 index ca1325f..0000000 --- a/sxhkd/.config/sxhkd/sxhkdrc +++ /dev/null @@ -1,103 +0,0 @@ -# universal x key bindings - -# System functionality - -# Enable lock screen (TODO does not stop music, etc yet) -super + x - lockscreen - -# Open System Power Menu -super + BackSpace - rofi -modi "powermenu:~/.config/rofi/modes/powermenu" -show powermenu -theme themes/powermenu -selected-row 2 - -# quick-switching of theme using styler -super + F8 - styler set $(styler list themes | rofi -dmenu -theme /themes/dropdown -matching fuzzy -filter "-256 -atelier ") - -super + F7 - polybar-msg cmd toggle - -# enable function (/media) key functionality -XF86MonBrightness{Up,Down} - control-brightness {up, down} 10 -XF86AudioMute - control-volume mute -XF86Audio{LowerVolume,RaiseVolume} - control-volume {down, up} - -XF86Search - ~/.local/share/qutebrowser/userscripts/qutedmenu - # dunstctl set-paused toggle && echo "$(dunstctl is-paused)" > /tmp/dunstpaused - -# Open terminal emulator (the variable gets set in sh module basic env vars) -super + Return - $TERMINAL - -# open quick start menu -super + space - rofi -show drun -theme themes/dmenu - -# open more extensive run menu -super + shift + space - rofi -modi combi,ssh -show combi -combi-modi "window,clipboard:greenclip print,run" -theme themes/dropdown - -# open dropdown calculator -- top left (small r), bottom right (capital R) -super + { r, shift + r } - rofi -modi calc -show calc -location { 1, 5 } - -# open gopass frontend menu -super + shift + p - rofi-pass -theme themes/dropdown - -# open surfraw rofi frontend -super + shift + q - rofi-surfraw - -# insert emojis into any document/form -super + shift + e - rofimoji - -super + shift + u - alacritty --class floating,floating -e sharefile | xargs notify-send - -# invoke qutebrowser userscript to open link (from history/marks) -super + shift + o - qutedmenu - -## modes - -# mode:media:alt + m -# seek +/- 5 seconds -alt + m : {h,l} - playerctl position {5-,5+} -# seek +/- 15 seconds -alt + m : shift + {h,l} - playerctl position {15-,15+} -# decrease/increase volume -alt + m : {j,k} - pulsemixer --change-volume {-5,+5} -# decrease/increase volume -alt + m : shift + {j,k} - playerctl {next,previous} -# pause/stop player -alt + m : {_,shift} + p - playerctl {play-pause,stop} -# exit mode -alt + m : alt + m - pkill -ALRM sxhkd - -# mode:academia:alt + a -# due papers this week -alt + a : {F1,F2} - rofi-bib-due -p{1,3} -u $(date --date='fri this week' +%Y-%m-%d) -# due papers overall -alt + a : shift + {F1,F2} - rofi-bib-due -p{1,3} -alt + a : F3 - rofi-bib-due -# read wallabag articles from the cmdline -alt + a : {r, shift+r} - alacritty --class floating,floating -e wallr {-n,_} -# exit mode -alt + a : alt + a - pkill -ALRM sxhkd diff --git a/sxhkd/.local/bin/sxhkd-chain-labels b/sxhkd/.local/bin/sxhkd-chain-labels deleted file mode 100755 index 103a497..0000000 --- a/sxhkd/.local/bin/sxhkd-chain-labels +++ /dev/null @@ -1,196 +0,0 @@ -#!/usr/bin/env sh - -# output is to stdout unless explicitly set through -o or env var -OUTPUTF="$SXHKD_OUTPUTF" - -# set fifo input file, according (somewhat) to xdg -if [ -n "$SXHKD_FIFO" ]; then - FIFO="$SXHKD_FIFO" -elif [ -p "${XDG_RUNTIME_DIR}"/sxhkd_fifo ]; then - FIFO="${XDG_RUNTIME_DIR}"/sxhkd_fifo -elif [ -p "${XDG_CACHE_HOME:-$HOME/.cache}"/sxhkd_fifo ]; then - FIFO="${XDG_CACHE_HOME:-$HOME/.cache}"/sxhkd_fifo -elif [ -p "$HOME/.sxhkd_fifo" ]; then - FIFO="$HOME/.sxhkd_fifo" -fi - -# set label config file, according (somewhat) to xdg -if [ -n "$SXHKD_LABELCONFIG" ]; then - LABELCONFIG="$SXHKD_LABELCONFIG" -elif [ -f "${XDG_CONFIG_HOME:-$HOME/.config}"/sxhkd/chain-labels.conf ]; then - LABELCONFIG="${XDG_CONFIG_HOME:-$HOME/.config}"/sxhkd/chain-labels.conf -elif [ -f "$HOME/.chain-labels.conf" ]; then - LABELCONFIG="$HOME/.chain-labels.conf" -fi - -SXHKDRC_FILE="$XDG_CONFIG_HOME"/sxhkd/sxhkdrc - -main() { - while read -r event; do - detect_event "$event" - done <"$FIFO" -} - -detect_event() { - ev="$(echo "$1" | sed -e 's/^H.*$/hotkey/;s/^C.*$/command/;s/^BBegin chain.*$/chainstart/;s/^EEnd chain.*$/chainend/;')" - - case $ev in - hotkey) ev_hotkey "$(echo "$1" | sed -e 's/^H//')" ;; - # command) ev_command "$(echo "$1" | sed -e 's/^C//')" ;; - chainstart) ev_chainstart "$(echo "$1" | sed -e 's/^B//')" ;; - chainend) ev_chainend "$(echo "$1" | sed -e 's/^E//')" ;; - *) ;; - esac -} - -send_msg() { - if [ -n "$OUTPUTF" ]; then - echo "$1" >"$OUTPUTF" - else - echo "$1" - fi -} - -ev_hotkey() { - LAST_HOTKEY="$1" -} - -# compare labels to last hotkey, return mode name -ev_chainstart() { - [ -z "$LAST_HOTKEY" ] && return 1 - found=$(echo "$LABELS" | sed -e "/$LAST_HOTKEY/!d;s/^\(.\+\):.*$/\1/") - send_msg "$found" -} - -ev_chainend() { - send_msg "" -} - -# TODO add option to also display last command done in chain -# ev_command() { -# send_msg "command: $1" -# } - -# read config from file, remove comments (lines starting with #) and empty lines -read_config() { - [ ! -f "$1" ] && return 1 - - parse_labels "$(cat "$1")" -} - -# parse sxhkdrc for mode compatible comments -read_sxhkdrc() { - [ ! -f "$1" ] && return 1 - - _sxhkdrc_content="$(sed -e '/^# mode:/!d;s/^# mode://' <"$1")" - parse_labels "$_sxhkdrc_content" -} - -# append -parse_labels() { - LABELS="${LABELS}$(echo "$1" | sed -e '/^#/d;/^[[:blank:]]*$/d')" -} - -get_help() { - printf \ - "Usage: sxhkd-chain-labels [-c config file][-o output file][-s input pipe] - - By default will take the input from the input pipe (at XDG_RUNTIME_DIR/sxhkd_fifo) and - print the current sxhkd chain mode to stdout. That means, sxhkd needs to be started - with a fifo pipe running, ideally to the XDG_RUNTIME_DIR: - - mkfifo \$XDG_RUNTIME_DIR/sxhkd_fifo && sxhkd -s \$XDG_RUNTIME_DIR/sxhkd_fifo - - When given a key combination which maps to a specific mode, it will print out the name - of the mode instead. These maps can be passed with -c flag, specifying an options file. - By default it will look in \$XDG_CONFIG_HOME/sxhkd/sxhkd-chain-labels.conf - - When passed the -o flag it will replace the contents of the file passed in with the - current sxhkd chain mode, emptying the file when no mode is active. - - Default lookup places for files, in descending order: - :input fifo - \$SXHKD_FIFO (env variable) - \$XDG_RUNTIME_DIR/sxhkd_fifo - \$XDG_CACHE_HOME/sxhkd_fifo - ~/.cache/sxhkd_fifo - ~/.sxhkd_fifo - - :label configuration - \$SXHKD_LABELCONFIG (env variable) - \$XDG_CONFIG_HOME/sxhkd/chain-labels.conf - ~/.config/sxhkd/chain-labels.conf - ~/.chain-labels.conf - \$XDG_CONFIG_HOME/sxhkd/sxhkdrc (parsing) - - The label configuration file uses the following format: - mode name:key chain - - Lines beginning with a # will be ignored. Whitespace is important, sxhkd will, by - default, put a single space between any component of the key combination. - - An example file chain-labels.conf: - media:super + alt + m - system:super + backspace - - Instead of using an explicit configuration file, you can put the chain mode - information into the regular sxhkdrc as comments. They need to follow this exact format: - # mode:mode-name:key-chain - - They can occur anywhere in the file. The space between # and mode is necessary, and # - needs to be the first character on the line. - The above example file as written into the sxhkdrc: - # mode:media:super + alt + m - # mode:system:super + backspace - - If an explicit configuration file exists, it will supersede any mode information in the - sxhkdrc file. - \n" -} - -get_version() { - printf \ - "%s: 0.3 - - fifo input pipe: - %s %s - label configuration file: - %s %s - output: - %s \n" \ - "$0" \ - "$FIFO" \ - "$([ -p "$FIFO" ] && echo "(found)" || echo "(NOT FOUND)")" \ - "${LABELCONFIG:-"$SXHKDRC_FILE"}" \ - "$([ -f "${LABELCONFIG:-"$SXHKDRC_FILE"}" ] && echo "(found)" || echo "(NOT FOUND)")" \ - "${OUTPUTF:-stdout}" -} - -while getopts "vho:s:c:" opt; do - case "$opt" in - \?) - printf "Usage: sxhkd-chain-labels [-c config file][-o output file][-s input pipe]\n" - exit 0 - ;; - h) - get_help - exit 0 - ;; - v) - get_version - exit 0 - ;; - o) OUTPUTF="$OPTARG" ;; - s) FIFO="$OPTARG" ;; - c) LABELCONFIG="$OPTARG" ;; - esac -done -shift $((OPTIND - 1)) - -[ "${1:-}" = "--" ] && shift - -# look for default label config, prefer config file to parsing sxhkdrc -[ -z "$LABELS" ] && read_config "$LABELCONFIG" -[ -z "$LABELS" ] && read_sxhkdrc "$SXHKDRC_FILE" - -main "$@" diff --git a/sxhkd/.local/bin/sxhkd-piped b/sxhkd/.local/bin/sxhkd-piped deleted file mode 100755 index 7c555b4..0000000 --- a/sxhkd/.local/bin/sxhkd-piped +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -# Starting sxhkd without arguments automatically creates -# a fifo pipe in XDG_RUNTIME_DIR, to enable IPC for sxhkd. -# Mostly used for sxhkd-chain-labels script. - -type sxhkd >/dev/null 2>&1 || { - return 1 -} - -# get the complete path to sxhkd to avoid -# recursion later on -PROG="$(type sxhkd)" -PROG="${PROG##* }" - -FIFO="$XDG_RUNTIME_DIR"/sxhkd_fifo - -args="$*" -# create a fifo and start sxhkd with it -sxhkd() { - exist "$PROG" critical - - if [[ "$args" = *"-s"* ]]; then - "$PROG" "$@" - else - [ -e "$FIFO" ] && rm "$FIFO" - - mkfifo "$FIFO" - "$PROG" -s "$FIFO" "$@" - fi -} - -sxhkd "$@" diff --git a/sxhkd/README.md b/sxhkd/README.md deleted file mode 100644 index 72b34a7..0000000 --- a/sxhkd/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# sxhkd - -[sxhkd](https://github.com/baskerville/sxhkd) -- simple X hotkey daemon - -sxhkd is set up to manage most of the key bindings in this dotfile configuraition. It is primarily used for three things: system control, to invoke rofi, and to switch between different desktop operating modes. - -## system control - -* super+x: lock the system, i.e. put a lockscreen in front of it, unlocked with your password -* media keys: control the Brightness, Volume, Mute of the system -* super+return: open a terminal - -## rofi invocations - -* super+backspace: system management (shutdown,reboot,logout,..) -* super+space: app launching -* super+r: extended run menu -* super+p: password/secret autofill menu -* super+F8: theme setting menu -* super+q: quick access to bookmarks and search bangs - -## modal desktop - -The modal setup of this desktop allows to first invoke an operating mode and then open the possibility for additional keybindings. -For example, `alt + m` will invoke the `media` mode and then media playback can be controlled through the hjkl keys. -Think of it like invoking the insert mode, or visual mode in a modal editor like vim. - -The idea behind the modal system is to not overload normal system operation with key binds that are only needed every now and again, and mostly as a coherent package. -If I want to control my media playback, by seeking forward or backward, having quick access to controlling the volume seems logical. -But I may not want to open a scholarly pdf, or programming project at the same time, so these actions don't need to be included in a coherent 'media' mode. - -The modes currently are: - -* media, for controlling playback and volume -* academia, for opening pdf, seeing upcoming readings, and editing references - -They are still in flux and may change every now and again as I put this modal setup to the test. To get a closer look at the actual key binds, look into `.config/sxhkd/sxhkdrc` for now. - -## modal notifications - -To know which mode is currently active on the desktop, this module includes a script which will print sxhkd's current mode to stdout, or a file. -This script can be used to show the active mode in a status bar, for example (as the polybar module in these dotfiles does). - -The script lives in `.local/bin/sxhkd-chain-labels` and can be invoked from the path by default. To see available options and the configuration file format use `sxhkd-chain-labels -h`, or take look at the script itself. - -This module overwrites the usual sxhkd program invocation using an alias, which makes sxhkd always (if no options are passed) create and use a named pipe in the XDG_RUNTIME_DIR directory. This is the default location the script will pick it up in.