Compare commits
3 commits
d9e539b9ec
...
08a46ed691
Author | SHA1 | Date | |
---|---|---|---|
08a46ed691 | |||
367be559d7 | |||
6fabac6cd8 |
16 changed files with 47 additions and 1647 deletions
12
README.md
12
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
|
||||||
* [`git`](git/README.md) - distributed version control system.
|
* [`kitty`](https://sw.kovidgoyal.net/kitty/) - Terminal emulator (GPU accelerated and configurable)
|
||||||
* [`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
|
* [`tmux`](https://github.com/tmux/tmux/) - terminal multiplexer
|
||||||
|
* [`nvim`](https://neovim.io/) - Neovim configuration
|
||||||
* [`vifm`](https://github.com/vifm/vifm) - vim-like file-manager
|
* [`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.
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
acpid
|
acpid
|
||||||
activitywatch-bin
|
activitywatch-bin
|
||||||
afew
|
afew
|
||||||
alacritty
|
|
||||||
alias-tips-git
|
alias-tips-git
|
||||||
alsa-utils
|
alsa-utils
|
||||||
an2linuxserver-git
|
an2linuxserver-git
|
||||||
|
@ -173,7 +172,6 @@ speedtest-cli
|
||||||
sshfs
|
sshfs
|
||||||
stow
|
stow
|
||||||
surfraw
|
surfraw
|
||||||
sxhkd
|
|
||||||
sxiv
|
sxiv
|
||||||
systemd-sysvcompat
|
systemd-sysvcompat
|
||||||
task
|
task
|
||||||
|
@ -224,6 +222,7 @@ devour
|
||||||
htop
|
htop
|
||||||
jrnl
|
jrnl
|
||||||
khard
|
khard
|
||||||
|
kitty
|
||||||
mopidy-autoplay
|
mopidy-autoplay
|
||||||
mopidy-iris
|
mopidy-iris
|
||||||
mopidy-local
|
mopidy-local
|
||||||
|
|
|
@ -11,10 +11,12 @@ 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 = [
|
||||||
"alacritty",
|
term,
|
||||||
"-e",
|
"-e",
|
||||||
"nvim",
|
"nvim",
|
||||||
"-f",
|
"-f",
|
||||||
|
@ -26,7 +28,7 @@ c.editor.command = [
|
||||||
# change filepicker
|
# change filepicker
|
||||||
c.fileselect.handler = "external"
|
c.fileselect.handler = "external"
|
||||||
picker = [
|
picker = [
|
||||||
"alacritty",
|
term,
|
||||||
"--class",
|
"--class",
|
||||||
"float",
|
"float",
|
||||||
"-e",
|
"-e",
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Alacritty window hidden on i3 scratchpad
|
Description=Terminal window hidden to be called at any point
|
||||||
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 'alacritty --title "dropdown-terminal" --class Alacritty,scratchpad'
|
ExecStart=/bin/bash -c 'kitty --title "dropdown-terminal" --class scratchpad'
|
||||||
Restart=always
|
Restart=always
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Todo.md floating vim instance
|
Description=Todo.md hidden 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 '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'
|
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'
|
||||||
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 (`alacritty`) terminal window running.
|
The `dropdown-terminal.service` is very simple, and always keeps a 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 (`alacritty`) terminal window,
|
The `dropdown-todo.service` is similar but instead of an empty 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="alacritty"
|
export TERMINAL="kitty"
|
||||||
export PAGER="less"
|
export PAGER="less"
|
||||||
|
|
||||||
export FILEREADER="zathura"
|
export FILEREADER="zathura"
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -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 "$@"
|
|
|
@ -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 "$@"
|
|
|
@ -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.
|
|
|
@ -348,37 +348,6 @@ 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 }
|
||||||
|
@ -423,6 +392,9 @@ 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
|
||||||
|
@ -447,9 +419,9 @@ filextype *.gif
|
||||||
\ {Loop}
|
\ {Loop}
|
||||||
\ mpv --loop=inf %f %i &,
|
\ mpv --loop=inf %f %i &,
|
||||||
fileviewer *.gif
|
fileviewer *.gif
|
||||||
\ vifmimg draw %px %py %pw %ph %c
|
\ kitty +kitten icat --silent --transfer-mode=stream --place=%pwx%ph@%pxx%py %c %N
|
||||||
\ %pc
|
\ %pc
|
||||||
\ vifmimg clear
|
\ kitty +kitten icat --clear --silent %pd
|
||||||
|
|
||||||
" Images
|
" Images
|
||||||
filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
|
filextype *.bmp,*.jpg,*.jpeg,*.png,*.gif,*.xpm
|
||||||
|
@ -462,9 +434,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
|
||||||
\ vifmimg draw %px %py %pw %ph %c
|
\ kitty +kitten icat --silent --transfer-mode=stream --place=%pwx%ph@%pxx%py %c %N
|
||||||
\ %pc
|
\ %pc
|
||||||
\ vifmimg clear
|
\ kitty +kitten icat --clear --silent %pd
|
||||||
|
|
||||||
" 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": "alacritty --class float -e topgrade"
|
"on-click": "kitty --class float topgrade"
|
||||||
},
|
},
|
||||||
"backlight": {
|
"backlight": {
|
||||||
"device": "intel_backlight",
|
"device": "intel_backlight",
|
||||||
|
@ -45,8 +45,8 @@
|
||||||
"warning": 50,
|
"warning": 50,
|
||||||
"critical": 80
|
"critical": 80
|
||||||
},
|
},
|
||||||
"on-click": "alacritty --class float -e top",
|
"on-click": "kitty --class float top",
|
||||||
"on-click-right": "alacritty --class float -e glances"
|
"on-click-right": "kitty --class float 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": "alacritty --class float -e nmtui",
|
"on-click": "kitty --class float 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": "alacritty --class float -e pulsemixer",
|
"on-click": "kitty --class float 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": "alacritty --class float -e watch sensors"
|
"on-click": "kitty --class float watch sensors"
|
||||||
},
|
},
|
||||||
"tray": {
|
"tray": {
|
||||||
"icon-size": 21,
|
"icon-size": 21,
|
||||||
|
|
|
@ -11,7 +11,16 @@ 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 which is a shame.
|
I can't for example use sxhkd anymore 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
|
||||||
|
|
||||||
|
@ -22,7 +31,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
|
||||||
* [ ] investigate [wtype](https://github.com/atx/wtype) over ydotool
|
* [x] 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
|
||||||
|
@ -34,18 +43,19 @@ 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
|
||||||
* [ ] need to set it up for waybar
|
* [x] 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
|
||||||
* [-] dropdown calculator -- rofi on X -- could use `qalc` directly
|
* [x] dropdown calculator -- rofi on X -- could use `qalc` directly
|
||||||
* [-] modes: media, academia (worth?)
|
* [-] modes: media, academia (worth?)
|
||||||
* [-] picture in terminal, a-la ueberzug
|
* [x] 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
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue