Compare commits
No commits in common. "08a46ed6916badad274373de615366381a250a44" and "d9e539b9ecb446319821dbe8b263441d0b2879a9" have entirely different histories.
08a46ed691
...
d9e539b9ec
16 changed files with 1648 additions and 48 deletions
14
README.md
14
README.md
|
@ -43,19 +43,19 @@ Enjoy!
|
||||||
|
|
||||||
![Overview - an older image of the dotfile desktop with gaps, showing git logs, styler logs, duckduckgo in a browser, and a vifm view of the dotfiles themselves](https://gitlab.com/marty-oehme/dotfiles/-/wikis/uploads/aaf0319d575dc192ea0f4bd6eaf83c08/gaps.png)
|
![Overview - an older image of the dotfile desktop with gaps, showing git logs, styler logs, duckduckgo in a browser, and a vifm view of the dotfiles themselves](https://gitlab.com/marty-oehme/dotfiles/-/wikis/uploads/aaf0319d575dc192ea0f4bd6eaf83c08/gaps.png)
|
||||||
|
|
||||||
|
* [`alacritty`](https://github.com/jwilm/alacritty) - Terminal emulator (GPU accelerated and customizable)
|
||||||
* [`wayland`](https://github.com/wayland-project/wayland) - Containing basics for fully functional tiling wayland setup:
|
* [`wayland`](https://github.com/wayland-project/wayland) - Containing basics for fully functional tiling wayland setup:
|
||||||
* [`river`](https://github.com/riverwm/river) - Tiling window manager for wayland
|
* [`river`](https://github.com/riverwm/river) - Tiling window manager for wayland
|
||||||
* [`waybar`](https://github.com/Alexays/Waybar) - Easily customizable statusbar for wayland
|
* [`waybar`](https://github.com/Alexays/Waybar) - Easily customizable statusbar for wayland
|
||||||
* [`bemenu`](https://github.com/Cloudef/bemenu) - Extended dmenu replacement for wayland, X11 and ncurses
|
* [`bemenu`](https://github.com/Cloudef/bemenu) - Extended dmenu replacement for wayland, X11 and ncurses
|
||||||
* [`fontconfig`] - System-wide font replacements and styling settings
|
* [`fontconfig`] - System-wide font replacements and styling settings
|
||||||
* [`kitty`](https://sw.kovidgoyal.net/kitty/) - Terminal emulator (GPU accelerated and configurable)
|
|
||||||
* [`tmux`](https://github.com/tmux/tmux/) - terminal multiplexer
|
|
||||||
* [`nvim`](https://neovim.io/) - Neovim configuration
|
|
||||||
* [`vifm`](https://github.com/vifm/vifm) - vim-like file-manager
|
|
||||||
* [`qutebrowser`](https://github.com/qutebrowser/qutebrowser) - vim-key enabled web browser
|
|
||||||
* [`pass`](pass/README.md) - Password management suite
|
|
||||||
* [`bibtex`](bibtex/README.md) - LateX/BibteX/pandoc plaintext writing & reference suite
|
|
||||||
* [`git`](git/README.md) - distributed version control system.
|
* [`git`](git/README.md) - distributed version control system.
|
||||||
|
* [`pass`](pass/README.md) - Password management suite
|
||||||
|
* [`nvim`](https://neovim.io/) - Neovim configuration
|
||||||
|
* [`bibtex`](bibtex/README.md) - LateX/BibteX/pandoc plaintext writing & reference suite
|
||||||
|
* [`qutebrowser`](https://github.com/qutebrowser/qutebrowser) - vim-key enabled web browser
|
||||||
|
* [`tmux`](https://github.com/tmux/tmux/) - terminal multiplexer
|
||||||
|
* [`vifm`](https://github.com/vifm/vifm) - vim-like file-manager
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
acpid
|
acpid
|
||||||
activitywatch-bin
|
activitywatch-bin
|
||||||
afew
|
afew
|
||||||
|
alacritty
|
||||||
alias-tips-git
|
alias-tips-git
|
||||||
alsa-utils
|
alsa-utils
|
||||||
an2linuxserver-git
|
an2linuxserver-git
|
||||||
|
@ -172,6 +173,7 @@ speedtest-cli
|
||||||
sshfs
|
sshfs
|
||||||
stow
|
stow
|
||||||
surfraw
|
surfraw
|
||||||
|
sxhkd
|
||||||
sxiv
|
sxiv
|
||||||
systemd-sysvcompat
|
systemd-sysvcompat
|
||||||
task
|
task
|
||||||
|
@ -222,7 +224,6 @@ devour
|
||||||
htop
|
htop
|
||||||
jrnl
|
jrnl
|
||||||
khard
|
khard
|
||||||
kitty
|
|
||||||
mopidy-autoplay
|
mopidy-autoplay
|
||||||
mopidy-iris
|
mopidy-iris
|
||||||
mopidy-local
|
mopidy-local
|
||||||
|
|
|
@ -11,12 +11,10 @@ from qutebrowser.config.configfiles import ConfigAPI # noqa: F401
|
||||||
# load additional settings configured via autoconfig.yml
|
# load additional settings configured via autoconfig.yml
|
||||||
config.load_autoconfig()
|
config.load_autoconfig()
|
||||||
|
|
||||||
term = os.getenv("TERMINAL", "xterm")
|
|
||||||
|
|
||||||
c.completion.web_history.max_items = 1000
|
c.completion.web_history.max_items = 1000
|
||||||
c.hints.uppercase = True
|
c.hints.uppercase = True
|
||||||
c.editor.command = [
|
c.editor.command = [
|
||||||
term,
|
"alacritty",
|
||||||
"-e",
|
"-e",
|
||||||
"nvim",
|
"nvim",
|
||||||
"-f",
|
"-f",
|
||||||
|
@ -28,7 +26,7 @@ c.editor.command = [
|
||||||
# change filepicker
|
# change filepicker
|
||||||
c.fileselect.handler = "external"
|
c.fileselect.handler = "external"
|
||||||
picker = [
|
picker = [
|
||||||
term,
|
"alacritty",
|
||||||
"--class",
|
"--class",
|
||||||
"float",
|
"float",
|
||||||
"-e",
|
"-e",
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Terminal window hidden to be called at any point
|
Description=Alacritty window hidden on i3 scratchpad
|
||||||
Requires=x-started-confirm.service
|
Requires=x-started-confirm.service
|
||||||
After=x-started-confirm.service
|
After=x-started-confirm.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
# workaround to allow relative executable invocation (i.e. current users' home dir)
|
# workaround to allow relative executable invocation (i.e. current users' home dir)
|
||||||
ExecStart=/bin/bash -c 'kitty --title "dropdown-terminal" --class scratchpad'
|
ExecStart=/bin/bash -c 'alacritty --title "dropdown-terminal" --class Alacritty,scratchpad'
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Todo.md hidden vim instance
|
Description=Todo.md floating vim instance
|
||||||
Requires=x-started-confirm.service
|
Requires=x-started-confirm.service
|
||||||
After=x-started-confirm.service
|
After=x-started-confirm.service
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
# workaround to allow relative executable invocation (i.e. current users' home dir)
|
# workaround to allow relative executable invocation (i.e. current users' home dir)
|
||||||
ExecStart=/bin/bash -c 'kitty --title "dropdown-todo" --class scratchpad nvim -c ":set nonumber norelativenumber noshowmode noruler laststatus=0 noshowcmd shortmess=F | :Limelight" %h/documents/records/todo.md'
|
ExecStart=/bin/bash -c 'alacritty --title "dropdown-todo" --class "Alacritty,scratchpad" -e nvim -c ":set nonumber norelativenumber noshowmode noruler laststatus=0 noshowcmd shortmess=F | :Limelight" %h/documents/records/todo.md'
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
|
|
@ -62,12 +62,12 @@ As another example, if you want to check for changes every 30 seconds but still
|
||||||
|
|
||||||
## Dropdown services
|
## Dropdown services
|
||||||
|
|
||||||
The `dropdown-terminal.service` is very simple, and always keeps a terminal window running.
|
The `dropdown-terminal.service` is very simple, and always keeps a (`alacritty`) terminal window running.
|
||||||
The program is started with a `scratchpad` class, which is picked up by [`i3`](i3) and automatically hidden.
|
The program is started with a `scratchpad` class, which is picked up by [`i3`](i3) and automatically hidden.
|
||||||
You can then show/hide the terminal as a floating overlay as you need, mimicking a floating terminal
|
You can then show/hide the terminal as a floating overlay as you need, mimicking a floating terminal
|
||||||
(by default with `super + shift + return`, though this may change).
|
(by default with `super + shift + return`, though this may change).
|
||||||
When you close the window in any way, systemd automatically restarts it in the background.
|
When you close the window in any way, systemd automatically restarts it in the background.
|
||||||
|
|
||||||
The `dropdown-todo.service` is similar but instead of an empty terminal window,
|
The `dropdown-todo.service` is similar but instead of an empty (`alacritty`) terminal window,
|
||||||
it starts up a `nvim` instance which hides most of its interface and shows a to-do list.
|
it starts up a `nvim` instance which hides most of its interface and shows a to-do list.
|
||||||
The list, by default, is situated in `~/documents/records/todo.md` and can be displayed with `super + t`.
|
The list, by default, is situated in `~/documents/records/todo.md` and can be displayed with `super + t`.
|
||||||
|
|
|
@ -25,7 +25,7 @@ export BIBFILE="${BIBFILE:-$LIBRARYROOT/academia/academia.bib}"
|
||||||
# these are my personal 'important' application settings
|
# these are my personal 'important' application settings
|
||||||
export EDITOR="nvim"
|
export EDITOR="nvim"
|
||||||
export BROWSER="qutebrowser"
|
export BROWSER="qutebrowser"
|
||||||
export TERMINAL="kitty"
|
export TERMINAL="alacritty"
|
||||||
export PAGER="less"
|
export PAGER="less"
|
||||||
|
|
||||||
export FILEREADER="zathura"
|
export FILEREADER="zathura"
|
||||||
|
|
7
sxhkd/.config/sxhkd/chain-labels.example.conf
Normal file
7
sxhkd/.config/sxhkd/chain-labels.example.conf
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# for sxhkd-chain-labels script
|
||||||
|
|
||||||
|
# media manipulation mode: playing, pausing, skipping,..
|
||||||
|
media:alt + m
|
||||||
|
|
||||||
|
# academia mode: opening bibtex readings, annotating,..
|
||||||
|
academia:alt + a
|
103
sxhkd/.config/sxhkd/sxhkdrc
Normal file
103
sxhkd/.config/sxhkd/sxhkdrc
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
# 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
|
196
sxhkd/.local/bin/sxhkd-chain-labels
Executable file
196
sxhkd/.local/bin/sxhkd-chain-labels
Executable file
|
@ -0,0 +1,196 @@
|
||||||
|
#!/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 "$@"
|
32
sxhkd/.local/bin/sxhkd-piped
Executable file
32
sxhkd/.local/bin/sxhkd-piped
Executable file
|
@ -0,0 +1,32 @@
|
||||||
|
#!/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 "$@"
|
46
sxhkd/README.md
Normal file
46
sxhkd/README.md
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
# 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.
|
|
@ -348,6 +348,37 @@ set classify+=' ::*.doc,,*.docx::, ::*.xls,,*.xls[mx]::, ::*.pptx,,*.pp
|
||||||
" You can also add %CLEAR if you want to clear screen before running FUSE
|
" You can also add %CLEAR if you want to clear screen before running FUSE
|
||||||
" program.
|
" program.
|
||||||
|
|
||||||
|
|
||||||
|
fileviewer *.pdf
|
||||||
|
\ vifm-sixel pdf %pw %ph %c %pd
|
||||||
|
\ %pc
|
||||||
|
\ vifm-sixel clear
|
||||||
|
|
||||||
|
fileviewer *.epub
|
||||||
|
\ vifm-sixel epub %pw %ph %c %pd
|
||||||
|
\ %pc
|
||||||
|
\ vifm-sixel clear
|
||||||
|
|
||||||
|
fileviewer <video/*>
|
||||||
|
\ vifm-sixel video %pw %ph %c %pd
|
||||||
|
\ %pc
|
||||||
|
\ vifm-sixel clear
|
||||||
|
|
||||||
|
fileviewer <image/*>
|
||||||
|
\ vifm-sixel draw %pw %ph %c %pd
|
||||||
|
\ %pc
|
||||||
|
\ vifm-sixel clear
|
||||||
|
|
||||||
|
fileviewer <audio/*>
|
||||||
|
\ vifm-sixel audio %pw %ph %c %pd
|
||||||
|
\ %pc
|
||||||
|
\ vifm-sixel clear
|
||||||
|
|
||||||
|
fileviewer <font/*>
|
||||||
|
\ vifm-sixel font %pw %ph %c %pd
|
||||||
|
\ %pc
|
||||||
|
\ vifm-sixel clear
|
||||||
|
|
||||||
" Pdf
|
" Pdf
|
||||||
filextype *.pdf
|
filextype *.pdf
|
||||||
\ { view as rich file }
|
\ { view as rich file }
|
||||||
|
@ -392,9 +423,6 @@ filextype *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
|
||||||
fileviewer *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
|
fileviewer *.avi,*.mp4,*.wmv,*.dat,*.3gp,*.ogv,*.mkv,*.mpg,*.mpeg,*.vob,
|
||||||
\*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
|
\*.fl[icv],*.m2v,*.mov,*.webm,*.ts,*.mts,*.m4v,*.r[am],*.qt,*.divx,
|
||||||
\*.as[fx]
|
\*.as[fx]
|
||||||
\ tput cup %py %px > /dev/tty && ffmpeg -y -hide_banner -loglevel panic -i %c -ss 00:00:01.000 -vframes 1 /tmp/tempfile.jpg > /dev/null && kitty +kitten icat --transfer-mode=file --place=%pwx%ph@%pxx%py /tmp/tempfile.jpg %N
|
|
||||||
\ %pc
|
|
||||||
\ kitty +kitten icat --transfer-mode=file --place=%pwx%ph@%pxx%py --clear %N,
|
|
||||||
\ ffprobe -pretty %c 2>&1
|
\ ffprobe -pretty %c 2>&1
|
||||||
|
|
||||||
" Web
|
" Web
|
||||||
|
@ -419,9 +447,9 @@ filextype *.gif
|
||||||
\ {Loop}
|
\ {Loop}
|
||||||
\ mpv --loop=inf %f %i &,
|
\ mpv --loop=inf %f %i &,
|
||||||
fileviewer *.gif
|
fileviewer *.gif
|
||||||
\ kitty +kitten icat --silent --transfer-mode=stream --place=%pwx%ph@%pxx%py %c %N
|
\ vifmimg draw %px %py %pw %ph %c
|
||||||
\ %pc
|
\ %pc
|
||||||
\ kitty +kitten icat --clear --silent %pd
|
\ vifmimg clear
|
||||||
|
|
||||||
" Images
|
" Images
|
||||||
filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
|
filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
|
||||||
|
@ -434,9 +462,9 @@ filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
|
||||||
\ {View in gpicview}
|
\ {View in gpicview}
|
||||||
\ gpicview %c,
|
\ gpicview %c,
|
||||||
fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
|
fileviewer *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
|
||||||
\ kitty +kitten icat --silent --transfer-mode=stream --place=%pwx%ph@%pxx%py %c %N
|
\ vifmimg draw %px %py %pw %ph %c
|
||||||
\ %pc
|
\ %pc
|
||||||
\ kitty +kitten icat --clear --silent %pd
|
\ vifmimg clear
|
||||||
|
|
||||||
" OpenRaster
|
" OpenRaster
|
||||||
filextype *.ora
|
filextype *.ora
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
"return-type": "json",
|
"return-type": "json",
|
||||||
"exec": "~/.config/waybar/modules/archupdates 5 json",
|
"exec": "~/.config/waybar/modules/archupdates 5 json",
|
||||||
"interval": 3600,
|
"interval": 3600,
|
||||||
"on-click": "kitty --class float topgrade"
|
"on-click": "alacritty --class float -e topgrade"
|
||||||
},
|
},
|
||||||
"backlight": {
|
"backlight": {
|
||||||
"device": "intel_backlight",
|
"device": "intel_backlight",
|
||||||
|
@ -45,8 +45,8 @@
|
||||||
"warning": 50,
|
"warning": 50,
|
||||||
"critical": 80
|
"critical": 80
|
||||||
},
|
},
|
||||||
"on-click": "kitty --class float top",
|
"on-click": "alacritty --class float -e top",
|
||||||
"on-click-right": "kitty --class float glances"
|
"on-click-right": "alacritty --class float -e glances"
|
||||||
},
|
},
|
||||||
"custom/events": {
|
"custom/events": {
|
||||||
"format": "{}",
|
"format": "{}",
|
||||||
|
@ -115,7 +115,7 @@
|
||||||
"tooltip-format-ethernet": "{ifname} ",
|
"tooltip-format-ethernet": "{ifname} ",
|
||||||
"tooltip-format-disconnected": "Disconnected",
|
"tooltip-format-disconnected": "Disconnected",
|
||||||
"max-length": 50,
|
"max-length": 50,
|
||||||
"on-click": "kitty --class float nmtui",
|
"on-click": "alacritty --class float -e nmtui",
|
||||||
// "on-click-right": "sudo rfkill toggle wlan"
|
// "on-click-right": "sudo rfkill toggle wlan"
|
||||||
},
|
},
|
||||||
"pulseaudio": {
|
"pulseaudio": {
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
"default": ["", ""]
|
"default": ["", ""]
|
||||||
},
|
},
|
||||||
"scroll-step": 1,
|
"scroll-step": 1,
|
||||||
"on-click": "kitty --class float pulsemixer",
|
"on-click": "alacritty --class float -e pulsemixer",
|
||||||
"on-scroll-up": "pactl set-sink-volume @DEFAULT_SINK@ +1%",
|
"on-scroll-up": "pactl set-sink-volume @DEFAULT_SINK@ +1%",
|
||||||
"on-scroll-down": "pactl set-sink-volume @DEFAULT_SINK@ -1%"
|
"on-scroll-down": "pactl set-sink-volume @DEFAULT_SINK@ -1%"
|
||||||
},
|
},
|
||||||
|
@ -146,7 +146,7 @@
|
||||||
"critical-threshold": 80,
|
"critical-threshold": 80,
|
||||||
// "format-critical": "{temperatureC}° ",
|
// "format-critical": "{temperatureC}° ",
|
||||||
"format": "{temperatureC}° ",
|
"format": "{temperatureC}° ",
|
||||||
"on-click": "kitty --class float watch sensors"
|
"on-click": "alacritty --class float -e watch sensors"
|
||||||
},
|
},
|
||||||
"tray": {
|
"tray": {
|
||||||
"icon-size": 21,
|
"icon-size": 21,
|
||||||
|
|
|
@ -11,16 +11,7 @@ This is only a very work-in-progress README file.
|
||||||
|
|
||||||
Since wayland handles key presses and so on completely differently
|
Since wayland handles key presses and so on completely differently
|
||||||
from X,
|
from X,
|
||||||
I can't for example use sxhkd anymore which is a shame.
|
I can't for example use sxhkd which is a shame.
|
||||||
|
|
||||||
On the other hand, there is an amazing key *re* binding tool
|
|
||||||
(which also works under X I've now found out)
|
|
||||||
`keyd` which takes care of some X functionality (xcape) at a lower level.
|
|
||||||
|
|
||||||
I have not found a good replacement for `clutter`
|
|
||||||
(which automatically hides your mouse cursor after inactivity)
|
|
||||||
which is independent from the window manager.
|
|
||||||
I believe `swaywm` would include similar functionality, but `river` does not.
|
|
||||||
|
|
||||||
## Missing
|
## Missing
|
||||||
|
|
||||||
|
@ -31,7 +22,7 @@ not set up:
|
||||||
* [x] extensive run menu (clipboard, open windows) -- rofi on X
|
* [x] extensive run menu (clipboard, open windows) -- rofi on X
|
||||||
* [x] clipboard manager
|
* [x] clipboard manager
|
||||||
* [x] pass frontend dropdown -- clipboard and xdotool
|
* [x] pass frontend dropdown -- clipboard and xdotool
|
||||||
* [x] investigate [wtype](https://github.com/atx/wtype) over ydotool
|
* [ ] investigate [wtype](https://github.com/atx/wtype) over ydotool
|
||||||
* [x] file uploading (works but without url clipboard)
|
* [x] file uploading (works but without url clipboard)
|
||||||
* [x] open_download (qutebrowser script)
|
* [x] open_download (qutebrowser script)
|
||||||
* [x] gap regulation
|
* [x] gap regulation
|
||||||
|
@ -43,19 +34,18 @@ not set up:
|
||||||
* [x] styler
|
* [x] styler
|
||||||
* still works as before, only less programs respect xresources settings
|
* still works as before, only less programs respect xresources settings
|
||||||
* works even for foot, if I want to switch to it
|
* works even for foot, if I want to switch to it
|
||||||
* [x] need to set it up for waybar
|
* [ ] need to set it up for waybar
|
||||||
* [ ] dropdown terminal and dropdown todo
|
* [ ] dropdown terminal and dropdown todo
|
||||||
* [ ] rofimoji emoji dropdown -- clipboard
|
* [ ] rofimoji emoji dropdown -- clipboard
|
||||||
* [ ] show current mode
|
* [ ] show current mode
|
||||||
* [-] hide cursor
|
* [-] hide cursor
|
||||||
* [x] dropdown calculator -- rofi on X -- could use `qalc` directly
|
* [-] dropdown calculator -- rofi on X -- could use `qalc` directly
|
||||||
* [-] modes: media, academia (worth?)
|
* [-] modes: media, academia (worth?)
|
||||||
* [x] picture in terminal, a-la ueberzug
|
* [-] picture in terminal, a-la ueberzug
|
||||||
* ueberzug is X only
|
* ueberzug is X only
|
||||||
* there is sixel rendering for foot, st, xterm, urxvt
|
* there is sixel rendering for foot, st, xterm, urxvt
|
||||||
* alacritty does *not* support sixel rendering [yet](https://github.com/alacritty/alacritty/issues/910), see also [existing sixel implementation](https://github.com/betaboon/alacritty/tree/graphics).
|
* alacritty does *not* support sixel rendering [yet](https://github.com/alacritty/alacritty/issues/910), see also [existing sixel implementation](https://github.com/betaboon/alacritty/tree/graphics).
|
||||||
* We have sixel support enabled in vifm and foot. It is very wonky, however.
|
* We have sixel support enabled in vifm and foot. It is very wonky, however.
|
||||||
* Switched to kitty terminal for image support instead
|
|
||||||
|
|
||||||
|
|
||||||
### undecided
|
### undecided
|
||||||
|
|
1199
zsh/.config/zsh/.p10k._zsh
Normal file
1199
zsh/.config/zsh/.p10k._zsh
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue