1
0
Fork 0
chezmoi/dot_config/herbstluftwm/executable_autostart.tmpl
2025-01-02 09:01:56 +01:00

277 lines
11 KiB
Bash

#!/bin/bash
# this is a simple config for herbstluftwm
hc() {
herbstclient "$@"
}
hc emit_hook reload
# shellcheck source={{ .chezmoi.homeDir }}/.config/herbstluftwm/colors.sh
. "$(dirname "$0")/colors.sh"
### disable touchpad, cuz trackpoint rulezzzz
xinput --disable 'SynPS/2 Synaptics TouchPad'
xinput --disable 'SYNA88022:00 06CB:CE67 Touchpad'
xsetroot -solid "${colors[dark0_hard]}"
# remove all existing keybindings
hc keyunbind --all
# keybindings
# if you have a super key you will be much happier with Mod set to Mod4
#Mod=Mod1 # Use alt as the main modifier
Mod=Mod4 # Use the super key as the main modifier
hc keybind $Mod-Shift-q quit
hc keybind $Mod-Shift-r reload
hc keybind $Mod-q close
hc keybind $Mod-Return spawn systemd-run --scope --user kitty
hc keybind $Mod-x spawn systemd-run --scope --user rofi -modi drun -show drun
hc keybind $Mod-Shift-x spawn systemd-run --scope --user rofi -show fb -modi "fb:${HOME}/.config/herbstluftwm/file-browser"
hc keybind $Mod-z spawn systemd-run --scope --user rofi -modi "clipboard:greenclip print" -show clipboard -run-command '{cmd}'
hc keybind $Mod-c spawn systemd-run --scope --user rofi -lines 0 -show calc -modi calc -no-show-match -no-sort -no-history -calc-command "echo -n '{result}' | xclip"
hc keybind $Mod-a spawn systemd-run --scope --user ~/bin/gopassmenu
hc keybind $Mod-v spawn systemd-run --scope --user ~/bin/oncall-menu
hc keybind $Mod-Shift-a spawn systemd-run --scope --user rofi -show pb -modi "pb:$HOME/.config/herbstluftwm/passboltmenu2"
hc keybind $Mod-m spawn systemd-run --scope --user ~/.config/herbstluftwm/pmount-dmenu
hc keybind $Mod-Escape spawn systemd-run --scope --user dunstctl close
# basic movement in tiling and floating mode
# focusing clients
hc keybind $Mod-Left focus left
hc keybind $Mod-Down focus down
hc keybind $Mod-Up focus up
hc keybind $Mod-Right focus right
hc keybind $Mod-h focus left
hc keybind $Mod-j focus down
hc keybind $Mod-k focus up
hc keybind $Mod-l focus right
# moving clients in tiling and floating mode
hc keybind $Mod-Shift-Left shift left
hc keybind $Mod-Shift-Down shift down
hc keybind $Mod-Shift-Up shift up
hc keybind $Mod-Shift-Right shift right
hc keybind $Mod-Shift-h shift left
hc keybind $Mod-Shift-j shift down
hc keybind $Mod-Shift-k shift up
hc keybind $Mod-Shift-l shift right
# splitting frames
# create an empty frame at the specified direction
hc keybind $Mod-u split bottom 0.5
hc keybind $Mod-o split right 0.5
# let the current frame explode into subframes
hc keybind $Mod-Control-space split explode
# resizing frames and floating clients
resizestep=0.02
hc keybind $Mod-Control-h resize left +$resizestep
hc keybind $Mod-Control-j resize down +$resizestep
hc keybind $Mod-Control-k resize up +$resizestep
hc keybind $Mod-Control-l resize right +$resizestep
hc keybind $Mod-Control-Left resize left +$resizestep
hc keybind $Mod-Control-Down resize down +$resizestep
hc keybind $Mod-Control-Up resize up +$resizestep
hc keybind $Mod-Control-Right resize right +$resizestep
# tags
tag_names=( {1..9} )
tag_keys=( {1..9} )
hc rename default "${tag_names[0]}" || true
for i in "${!tag_names[@]}" ; do
hc add "${tag_names[$i]}"
key="${tag_keys[$i]}"
if [ -n "$key" ] ; then
hc keybind "$Mod-$key" use_index "$i"
hc keybind "$Mod-Shift-$key" move_index "$i"
fi
done
# cycle through tags
hc keybind $Mod-period use_index +1 --skip-visible
hc keybind $Mod-comma use_index -1 --skip-visible
# layouting
hc keybind $Mod-r remove
hc keybind $Mod-s floating toggle
hc keybind $Mod-f fullscreen toggle
hc keybind $Mod-Shift-f set_attr clients.focus.floating toggle
hc keybind $Mod-Shift-d set_attr clients.focus.decorated toggle
hc keybind $Mod-Shift-m set_attr clients.focus.minimized true
hc keybind $Mod-Control-m jumpto last-minimized
hc keybind $Mod-p pseudotile toggle
# The following cycles through the available layouts within a frame, but skips
# layouts, if the layout change wouldn't affect the actual window positions.
# I.e. if there are two windows within a frame, the grid layout is skipped.
hc keybind $Mod-space \
or , and . compare tags.focus.curframe_wcount = 2 \
. cycle_layout +1 vertical horizontal max vertical grid \
, cycle_layout +1
# mouse
hc mouseunbind --all
hc mousebind $Mod-Button1 move
hc mousebind $Mod-Button2 zoom
hc mousebind $Mod-Button3 resize
hc mousebind $Mod-Control-Button1 call substitute WID clients.dragged.winid close WID
# focus
hc keybind $Mod-BackSpace cycle_monitor
hc keybind $Mod-Tab cycle_all +1
hc keybind $Mod-Shift-Tab cycle_all -1
hc keybind $Mod-grave cycle
hc keybind $Mod-i jumpto urgent
# music
# hc keybind XF86AudioMute chain , spawn systemd-run --scope --user sh -c 'pactl set-sink-mute $(pactl get-default-sink) toggle' , emit_hook volume
# hc keybind XF86AudioLowerVolume chain , spawn systemd-run --scope --user sh -c 'pactl set-sink-volume $(pactl get-default-sink) -10%' , emit_hook volume
# hc keybind XF86AudioRaiseVolume chain , spawn systemd-run --scope --user sh -c 'pactl set-sink-volume $(pactl get-default-sink) +10%' , emit_hook volume
hc keybind XF86AudioMute spawn wpctl set-mute @DEFAULT_SINK@ toggle
hc keybind XF86AudioLowerVolume spawn wpctl set-volume @DEFAULT_SINK@ 10%-
hc keybind XF86AudioRaiseVolume spawn wpctl set-volume @DEFAULT_SINK@ 10%+
hc keybind XF86AudioMicMute spawn systemd-run --scope --user rofi -show pulse -modi "pulse:$HOME/.config/herbstluftwm/pulsemenu"
hc keybind XF86AudioNext spawn systemd-run --scope --user "$HOME/bin/mprisctl" next
hc keybind XF86AudioPrev spawn systemd-run --scope --user "$HOME/bin/mprisctl" prev
hc keybind XF86AudioPlay spawn systemd-run --scope --user "$HOME/bin/mprisctl" toggle
hc keybind XF86MonBrightnessDown spawn brightnessctl set 10%-
hc keybind XF86MonBrightnessUp spawn brightnessctl set 10%+
# shellcheck disable=2016 # needed to pass whole script to keybind...
hc keybind XF86TouchpadToggle spawn systemd-run --scope --user sh -c 'xinput --set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" $(xinput --list-props "SynPS/2 Synaptics TouchPad" | awk -F ":\t+" "/Device Enabled/ { print (1+\$2)%2}")'
hc keybind XF86Display spawn systemd-run --scope --user ~/.config/herbstluftwm/monitors
hc keybind XF86ScreenSaver spawn systemd-run --scope --user xscreensaver-command -lock
hc keybind Print spawn systemd-run --scope --user sh -c 'maim --hidecursor | xclip -t image/png -selection clip'
hc keybind Shift-Print spawn systemd-run --scope --user sh -c 'maim --select --hidecursor | xclip -t image/png -selection clip'
# shellcheck disable=SC2016
hc keybind Ctrl-Print spawn systemd-run --scope --user sh -c 'maim -i $(xdotool getactivewindow) | xclip -t image/png -selection clip'
hc keybind Ctrl-Print spawn systemd-run --scope --user "$HOME/bin/recordcurrwin"
# theme
hc attr theme.tiling.reset 1
hc attr theme.floating.reset 1
hc set frame_border_active_color "${colors[active]}"
hc set frame_bg_active_color "${colors[active]}"
hc set frame_bg_normal_color "${colors[dark3]}"
hc set frame_border_normal_color "${colors[dark3]}"
hc set frame_border_width 2
hc set always_show_frame on
hc set frame_bg_transparent on
hc set frame_transparent_width 5
hc set frame_gap 0
hc set frame_normal_opacity 100
hc set frame_active_opacity 50
hc attr theme.title_height 15
hc attr theme.title_when multiple_tabs
hc attr theme.title_font 'Dejavu Sans:pixelsize=12' # example using Xft
# hc attr theme.title_font '-*-fixed-medium-r-*-*-13-*-*-*-*-*-*-*'
hc attr theme.title_depth 3 # space below the title's baseline
hc attr theme.active.color "${colors[active]}"
hc attr theme.title_color "${colors[light0_hard]}"
hc attr theme.normal.color "${colors[dark3]}"
hc attr theme.urgent.color "${colors[urgent]}"
hc attr theme.tab_color "${colors[dark0_hard]}"
hc attr theme.active.tab_color "${colors[dark3]}"
hc attr theme.active.tab_outer_color "${colors[dark3]}"
hc attr theme.active.tab_title_color "${colors[light0]}"
hc attr theme.normal.title_color "${colors[light3]}"
hc attr theme.inner_width 0
hc attr theme.inner_color "${colors[dark0_hard]}"
hc attr theme.border_width 3
hc attr theme.floating.border_width 4
hc attr theme.floating.outer_width 1
hc attr theme.floating.outer_color "${colors[dark0_hard]}"
hc attr theme.active.inner_color "${colors[active]}"
hc attr theme.urgent.inner_color "${colors[urgent]}"
hc attr theme.normal.inner_color "${colors[dark3]}"
# copy inner color to outer_color
for state in active urgent normal ; do
hc substitute C theme.${state}.inner_color \
attr theme.${state}.outer_color C
done
hc attr theme.tiling.outer_width 1
hc attr theme.background_color "${colors[dark0_hard]}"
hc set window_gap 0
hc set frame_padding 0
hc set smart_window_surroundings off
hc set smart_frame_surroundings on
hc set mouse_recenter_gap 0
# rules
hc unrule -F
#hc rule class=XTerm tag=3 # move all xterms to tag 3
hc rule focus=on # normally focus new clients
hc rule floatplacement=center
#hc rule focus=off # normally do not focus new clients
# give focus to most common terminals
#hc rule class~'(.*[Rr]xvt.*|.*[Tt]erm|Konsole)' focus=on
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' floating=on
hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off
hc rule fixedsize floating=on
hc rule class='pinentry-qt' floating=on
hc rule class='mpv' floating=on
hc set tree_style '╾│ ├└╼─┐'
# do multi monitor setup here, e.g.:
# hc set_monitors 1280x1024+0+0 1280x1024+1280+0
# or simply:
hc detect_monitors
### switch off disconnected
#for mon in "$(xrandr | grep -E 'disconnected [[:digit:]]{3,4}' | awk '{ print $1}')" ; do
#xrandr --output $mon --off
#done
hc attr settings.auto_detect_monitors 1
# unlock, just to be sure
hc unlock
hc setenv SSH_AUTH_SOCK "$(gpgconf --list-dirs agent-ssh-socket)"
systemctl --user import-environment DISPLAY XAUTHORITY XDG_SESSION_PATH
systemctl restart --no-block --user "hlwm.target"
#monitors=$(hc list_monitors | awk -F":" '{print $1}')
#panel_height=18
#for monitor in $monitors ; do
#hc pad "$monitor" "$panel_height"
#done
#hc pad "0" "$panel_height"
### set my favourite keymap (and map compose key to <> key i dont use anyway)
# set this via localectl
# setxkbmap -option compose:102 us cz_sk_de
xset s off
xset -dpms
{{if eq .chezmoi.hostname "archdudr"}}
hc attr tags.0.tiling.root.algorithm max
hc rule once 'instance~microsoft teams' tag=1
hc rule once 'class=thunderbird' tag=1
hc rule once 'class=discord' tag=1
hc rule once 'class=qutebrowser' tag=2
hc spawn systemd-run --scope --user teams
hc spawn systemd-run --scope --user thunderbird
hc spawn systemd-run --scope --user discord
hc spawn systemd-run --scope --user qutebrowser
{{end}}
### set wallpaper
#feh --bg-center ${HOME}/config/wallpaper/RoyalRadish-Wallpaper_practice_12.png