298 lines
10 KiB
Bash
Executable File
298 lines
10 KiB
Bash
Executable File
#!/usr/bin/env zsh
|
|
|
|
# Utility functions
|
|
function map () {
|
|
local riverctl="${4}"
|
|
if [[ "${riverctl}" = 'sd-spawn' ]]; then
|
|
riverctl map "${1}" "${2}" "${3}" spawn \
|
|
"systemd-run --user --ignore-failure -- ${5}"
|
|
else
|
|
riverctl map "${@}"
|
|
fi
|
|
}
|
|
function nmap () {
|
|
map normal "${@}"
|
|
}
|
|
function input() {
|
|
local pattern="${1}"
|
|
for prop value in ${@:2}; do
|
|
riverctl input "${pattern}" "${prop}" "${value}"
|
|
done
|
|
}
|
|
function spawn () {
|
|
riverctl spawn "${${@}}"
|
|
}
|
|
function sd-spawn () {
|
|
riverctl spawn "systemd-run --user --ignore-failure -- %{%{@}}"
|
|
}
|
|
local SCRIPT_DIR="${HOME}/scripts/"
|
|
local RIVER_CONFIG="${HOME}/.config/river/config/"
|
|
|
|
local mod=Super
|
|
|
|
# Some standard programs
|
|
nmap ${mod}+Shift Return sd-spawn 'kitty -1'
|
|
nmap ${mod} R sd-spawn 'fuzzel'
|
|
nmap ${mod}+Shift E sd-spawn 'emacsclient -nc'
|
|
nmap ${mod}+Shift B sd-spawn 'mullvad-browser'
|
|
# nmap ${mod}+Shift D spawn 'gtk-pipe-viewer'
|
|
nmap ${mod}+Shift D sd-spawn 'freetube --new-window'
|
|
nmap ${mod}+Shift O sd-spawn 'loginctl lock-session'
|
|
nmap ${mod}+Shift P sd-spawn 'keepassxc'
|
|
nmap ${mod}+Shift M sd-spawn 'emacsclient -nc --eval "(mu4e)"'
|
|
nmap ${mod}+Shift C sd-spawn 'kitty -1 ikhal'
|
|
nmap ${mod}+Shift R sd-spawn "${SCRIPT_DIR}/wayland-screenshot.sh"
|
|
nmap ${mod}+Shift N sd-spawn "${SCRIPT_DIR}/system-menu/system-menu.sh"
|
|
|
|
# Fcitx5 (this also works for waybar)
|
|
nmap ${mod} Space spawn "${SCRIPT_DIR}/eww/eww-fcitx5-toggle ${RIVER_CONFIG}"
|
|
|
|
# Dunst bindings
|
|
nmap ${mod} U spawn 'dunstctl close'
|
|
nmap ${mod}+Shift U spawn 'dunstctl context'
|
|
nmap ${mod}+Control U spawn 'dunstctl history-pop'
|
|
nmap ${mod}+Control+Shift U spawn 'dunstctl close-all'
|
|
|
|
# ${mod}+Shift+T to show the systray
|
|
nmap ${mod}+Shift T spawn "pkill -RTMIN+4 waybar"
|
|
|
|
# ${mod}+X to close the focused view
|
|
nmap ${mod} X close
|
|
|
|
# ${mod}+Shift+Q to exit river
|
|
nmap ${mod}+Shift Q sd-spawn "${SCRIPT_DIR}/system-menu/confirm-logout.sh"
|
|
|
|
# ${mod}+J and ${mod}+K to focus the next/previous view in the layout stack
|
|
nmap ${mod} J focus-view next
|
|
nmap ${mod} K focus-view previous
|
|
|
|
# ${mod}+Shift+J and ${mod}+Shift+K to swap the focused view with the next/previous
|
|
# view in the layout stack
|
|
nmap ${mod}+Shift J swap next
|
|
nmap ${mod}+Shift K swap previous
|
|
|
|
# ${mod}+Period and ${mod}+Comma to focus the next/previous output
|
|
nmap ${mod} Period focus-output previous
|
|
nmap ${mod} Comma focus-output next
|
|
|
|
# ${mod}+Shift+{Period,Comma} to send the focused view to the next/previous output
|
|
nmap ${mod}+Shift Period send-to-output -current-tags previous
|
|
nmap ${mod}+Shift Comma send-to-output -current-tags next
|
|
|
|
# ${mod}+Return to bump the focused view to the top of the layout stack
|
|
nmap ${mod} Return zoom
|
|
|
|
# ${mod}+H and ${mod}+L to decrease/increase the main ratio of rivertile(1)
|
|
nmap ${mod} H send-layout-cmd rivertile "main-ratio -0.05"
|
|
nmap ${mod} L send-layout-cmd rivertile "main-ratio +0.05"
|
|
|
|
# ${mod}+Shift+H and ${mod}+Shift+L to increment/decrement the main count of rivertile(1)
|
|
nmap ${mod}+Shift H send-layout-cmd rivertile "main-count +1"
|
|
nmap ${mod}+Shift L send-layout-cmd rivertile "main-count -1"
|
|
|
|
# ${mod}+Alt+{H,J,K,L} to move views
|
|
nmap ${mod}+Alt H move left 100
|
|
nmap ${mod}+Alt J move down 100
|
|
nmap ${mod}+Alt K move up 100
|
|
nmap ${mod}+Alt L move right 100
|
|
|
|
# ${mod}+Alt+Control+{H,J,K,L} to snap views to screen edges
|
|
nmap ${mod}+Alt+Control H snap left
|
|
nmap ${mod}+Alt+Control J snap down
|
|
nmap ${mod}+Alt+Control K snap up
|
|
nmap ${mod}+Alt+Control L snap right
|
|
|
|
# ${mod}+Alt+Shift+{H,J,K,L} to resize views
|
|
nmap ${mod}+Alt+Shift H resize horizontal -100
|
|
nmap ${mod}+Alt+Shift J resize vertical 100
|
|
nmap ${mod}+Alt+Shift K resize vertical -100
|
|
nmap ${mod}+Alt+Shift L resize horizontal 100
|
|
|
|
# ${mod} + Left Mouse Button to move views
|
|
riverctl map-pointer normal ${mod} BTN_LEFT move-view
|
|
|
|
# ${mod} + Right Mouse Button to resize views
|
|
riverctl map-pointer normal ${mod} BTN_RIGHT resize-view
|
|
|
|
# ${mod} + Middle Mouse Button to toggle float
|
|
riverctl map-pointer normal ${mod} BTN_MIDDLE toggle-float
|
|
|
|
# ${mod} + Tab to switch between two sets of tags
|
|
nmap ${mod} Tab focus-previous-tags
|
|
|
|
for ((i = 1; i <= 9; ++i)); do
|
|
let tags=$((1 << (${i} - 1)))
|
|
|
|
# ${mod}+[1-9] to focus tag [0-8]
|
|
nmap ${mod} ${i} set-focused-tags ${tags}
|
|
|
|
# ${mod}+Shift+[1-9] to tag focused view with tag [0-8]
|
|
nmap ${mod}+Shift ${i} set-view-tags ${tags}
|
|
|
|
# ${mod}+Control+[1-9] to toggle focus of tag [0-8]
|
|
nmap ${mod}+Control ${i} toggle-focused-tags ${tags}
|
|
|
|
# ${mod}+Shift+Control+[1-9] to toggle tag [0-8] of focused view
|
|
nmap ${mod}+Shift+Control ${i} toggle-view-tags ${tags}
|
|
done
|
|
|
|
# ${mod}+0 to focus all tags
|
|
# ${mod}+Shift+0 to tag focused view with all tags
|
|
let all_tags=$(((1 << 32) - 1))
|
|
nmap ${mod} 0 set-focused-tags ${all_tags}
|
|
nmap ${mod}+Shift 0 set-view-tags ${all_tags}
|
|
|
|
# ${mod}+Space to toggle float
|
|
nmap ${mod}+Shift Space toggle-float
|
|
|
|
# ${mod}+F to toggle fullscreen
|
|
nmap ${mod} F toggle-fullscreen
|
|
|
|
# ${mod}+{Up,Right,Down,Left} to change layout orientation
|
|
nmap ${mod} Up send-layout-cmd rivertile "main-location top"
|
|
nmap ${mod} Right send-layout-cmd rivertile "main-location right"
|
|
nmap ${mod} Down send-layout-cmd rivertile "main-location bottom"
|
|
nmap ${mod} Left send-layout-cmd rivertile "main-location left"
|
|
|
|
# Declare a passthrough mode. This mode has only a single mapping to return to
|
|
# normal mode. This makes it useful for testing a nested wayland compositor
|
|
riverctl declare-mode passthrough
|
|
|
|
# ${mod}+F11 to enter passthrough mode
|
|
nmap ${mod} F11 enter-mode passthrough
|
|
|
|
# ${mod}+F11 to return to normal mode
|
|
map passthrough ${mod} F11 enter-mode normal
|
|
|
|
# Control volume
|
|
nmap None XF86AudioRaiseVolume spawn "${SCRIPT_DIR}/sound-control.sh up 5%"
|
|
nmap Shift XF86AudioRaiseVolume spawn "${SCRIPT_DIR}/sound-control.sh up 1%"
|
|
nmap None XF86AudioLowerVolume spawn "${SCRIPT_DIR}/sound-control.sh down 5%"
|
|
nmap Shift XF86AudioLowerVolume spawn "${SCRIPT_DIR}/sound-control.sh down 1%"
|
|
nmap None XF86AudioMute spawn "${SCRIPT_DIR}/sound-control.sh mute"
|
|
|
|
map locked None XF86AudioRaiseVolume spawn "${SCRIPT_DIR}/sound-control.sh -n up 5%"
|
|
map locked Shift XF86AudioRaiseVolume spawn "${SCRIPT_DIR}/sound-control.sh -n up 1%"
|
|
map locked None XF86AudioLowerVolume spawn "${SCRIPT_DIR}/sound-control.sh -n down 5%"
|
|
map locked Shift XF86AudioLowerVolume spawn "${SCRIPT_DIR}/sound-control.sh -n down 1%"
|
|
map locked None XF86AudioMute spawn "${SCRIPT_DIR}/sound-control.sh -n mute"
|
|
|
|
nmap None KP_Prior spawn "${SCRIPT_DIR}/sound-control.sh up 5%"
|
|
nmap Shift KP_Prior spawn "${SCRIPT_DIR}/sound-control.sh up 1%"
|
|
nmap None KP_Home spawn "${SCRIPT_DIR}/sound-control.sh down 5%"
|
|
nmap Shift KP_Home spawn "${SCRIPT_DIR}/sound-control.sh down 1%"
|
|
nmap None KP_Up spawn "${SCRIPT_DIR}/sound-control.sh mute"
|
|
|
|
map locked None KP_Prior spawn "${SCRIPT_DIR}/sound-control.sh -n up 5%"
|
|
map locked Shift KP_Prior spawn "${SCRIPT_DIR}/sound-control.sh -n up 1%"
|
|
map locked None KP_Home spawn "${SCRIPT_DIR}/sound-control.sh -n down 5%"
|
|
map locked Shift KP_Home spawn "${SCRIPT_DIR}/sound-control.sh -n down 1%"
|
|
map locked None KP_Up spawn "${SCRIPT_DIR}/sound-control.sh -n mute"
|
|
|
|
# Control screen backlight brightness
|
|
nmap None XF86MonBrightnessUp spawn "${SCRIPT_DIR}/brightness-control.sh up 5%"
|
|
nmap None XF86MonBrightnessDown spawn "${SCRIPT_DIR}/brightness-control.sh down 5%"
|
|
|
|
map locked None XF86MonBrightnessUp spawn "${SCRIPT_DIR}/brightness-control.sh -n up 5%"
|
|
map locked None XF86MonBrightnessDown spawn "${SCRIPT_DIR}/brightness-control.sh -n down 5%"
|
|
|
|
for mode in normal locked; do
|
|
# Control MPRIS aware media players with playerctl
|
|
map ${mode} None XF86AudioMedia spawn 'playerctl play-pause'
|
|
map ${mode} None XF86AudioPlay spawn 'playerctl play-pause'
|
|
map ${mode} None XF86AudioPrev spawn 'playerctl previous'
|
|
map ${mode} None XF86AudioNext spawn 'playerctl next'
|
|
done
|
|
|
|
# Use server-side decorations for everything by default
|
|
riverctl rule-add 'ssd'
|
|
|
|
# Set background and border color
|
|
riverctl background-color '0x002b36'
|
|
riverctl border-color-focused '0xff0000'
|
|
riverctl border-color-unfocused '0x586e75'
|
|
|
|
# Set keyboard repeat rate
|
|
riverctl set-repeat 50 300
|
|
|
|
# Some cursor options
|
|
riverctl focus-follows-cursor "normal"
|
|
riverctl set-cursor-warp "on-focus-change"
|
|
|
|
# Input options
|
|
input '*_Touchpad' \
|
|
disable-while-typing 'disabled' \
|
|
click-method 'clickfinger' \
|
|
drag 'enabled' \
|
|
middle-emulation 'enabled' \
|
|
natural-scroll 'enabled' \
|
|
tap 'enabled' \
|
|
tap-button-map 'left-right-middle' \
|
|
scroll-method 'two-finger'
|
|
input '*' \
|
|
accel-profile 'flat'
|
|
|
|
# Make caps lock act as control
|
|
riverctl keyboard-layout \
|
|
-options 'caps:ctrl_modifier' \
|
|
'us'
|
|
|
|
# Set the default layout generator to be rivertile and start it.
|
|
# River will send the process group of the init executable SIGTERM on exit.
|
|
riverctl default-layout rivertile
|
|
rivertile -view-padding 3 -outer-padding 3 -main-ratio 0.5 &
|
|
|
|
# Update the some environment variables
|
|
systemctl --user import-environment WAYLAND_DISPLAY DISPLAY
|
|
dbus-update-activation-environment WAYLAND_DISPLAY DISPLAY
|
|
|
|
# Notify systemd that we have setup River
|
|
systemd-notify --ready
|
|
|
|
"${SCRIPT_DIR}/emacs-server-set-wayland-display.zsh"
|
|
|
|
# Start some programs
|
|
# spawn "waybar"
|
|
# spawn 'env -u GTK_IM_MODULE fcitx5 -rd' # prevent warnings
|
|
# spawn 'dunst'
|
|
# spawn '/usr/lib/mate-polkit/polkit-mate-authentication-agent-1'
|
|
# spawn 'kanshi'
|
|
# spawn 'systembus-notify'
|
|
|
|
# case "${HOST}" in
|
|
# *-desktop)
|
|
# spawn "swayidle -w -C '${RIVER_CONFIG}/swayidle-desktop.conf'"
|
|
# spawn "swaybg -o DP-1 -m fill -i '${WALLPAPERS_DIR}/fapta.png' "\
|
|
# "-o DP-3 -m fill -i '${WALLPAPERS_DIR}/Veko and Friend.png'"
|
|
# ;;
|
|
# *-portable)
|
|
# spawn "${SCRIPT_DIR}/laptop-lid-daemon"
|
|
# spawn "swayidle -w -C '${RIVER_CONFIG}/swayidle-laptop.conf'"
|
|
# spawn "swaybg -m fill -o '*' -i '${WALLPAPERS_DIR}/Girls Last Tour 2.jpg'"
|
|
# ;;
|
|
# esac
|
|
|
|
# "${SCRIPT_DIR}/cl/bin/khal-notify" &
|
|
# "${SCRIPT_DIR}/cl/bin/inhibit-sleep-for-audio" &
|
|
# "${SCRIPT_DIR}/notify-tasks.hy" &
|
|
# "${SCRIPT_DIR}/usbguard-notify.py" &
|
|
|
|
# {
|
|
# # try to make sure these start after waybar opens
|
|
# let i=0
|
|
# while ! pgrep waybar >/dev/null 2>&1; do
|
|
# if ((${i} >= 8)); then
|
|
# exit
|
|
# fi
|
|
# sleep 0.25s
|
|
# done
|
|
# sleep 1s
|
|
# spawn "keepassxc"
|
|
# spawn "nextcloud"
|
|
# spawn "corectrl --minimize-systray"
|
|
# spawn "solaar -w hide"
|
|
# spawn "protonmail-bridge --no-window"
|
|
# spawn "mullvad-vpn"
|
|
# spawn "blueman-applet"
|
|
# } &
|