commit 0e39b5b5e939afbcab53e3a105da86dc3684a54d
parent 1128a0a6d38ab684cb628241430e324efc511260
Author: pyratebeard <root@pyratebeard.net>
Date: Fri, 11 Jul 2025 13:06:17 +0100
feat(herbstluft): browser launch keybind
Diffstat:
3 files changed, 457 insertions(+), 0 deletions(-)
diff --git a/herbstluftwm/.config/herbstluftwm/autostart b/herbstluftwm/.config/herbstluftwm/autostart
@@ -43,6 +43,9 @@ hc keybind $Mod-z spawn bash /home/pyratebeard/.local/bin/lock
hc keybind $Mod-9 spawn bash /home/pyratebeard/.local/bin/herbstluftwm-remove-gap
hc keybind $Mod-0 spawn bash /home/pyratebeard/.local/bin/herbstluftwm-add-gap
+# browser
+hc keybind $Mod-b spawn firefox
+
# scrot
hc keybind $Mod-q spawn scrot -e 'mv $f ~trove/images/misc/scrots/pyratebeard/'
diff --git a/herbstluftwm/.config/herbstluftwm/autostart.darkmachine b/herbstluftwm/.config/herbstluftwm/autostart.darkmachine
@@ -0,0 +1,227 @@
+#!/bin/sh
+#
+# ██ ██ ██ ██ ████ ██
+# ░██ ░██ ░██ ░██ ░██░ ░██
+# ░██ █████ ██████░██ ██████ ██████ ░██ ██ ██ ██████ ██████
+# ░██████ ██░░░██░░██░░█░██████ ██░░░░ ░░░██░ ░██░██ ░██░░░██░ ░░░██░
+# ░██░░░██░███████ ░██ ░ ░██░░░██░░█████ ░██ ░██░██ ░██ ░██ ░██
+# ░██ ░██░██░░░░ ░██ ░██ ░██ ░░░░░██ ░██ ░██░██ ░██ ░██ ░██
+# ░██ ░██░░██████░███ ░██████ ██████ ░░██ ███░░██████ ░██ ░░██
+# ░░ ░░ ░░░░░░ ░░░ ░░░░░ ░░░░░░ ░░ ░░░ ░░░░░░ ░░ ░░
+
+hc() {
+ herbstclient "$@"
+}
+
+hc emit_hook reload
+
+# remove all existing keybindings
+hc keyunbind --all
+
+# close tray if reloading
+killall stalonetray
+
+# gap counter
+echo 30 > /tmp/herbstluftwm-gap
+
+# keybindings
+Mod=Mod4
+Alt=Mod1
+
+# minimize and unminimise windows
+bash /home/pyratebeard/.local/bin/herbstluftwm-min_max
+
+hc keybind $Mod-Control-s spawn bash /home/pyratebeard/.local/bin/herbstluftwm-miniscratch
+
+# run menu
+hc keybind $Mod-w spawn /usr/bin/zsh /home/pyratebeard/.local/bin/rundmc
+
+# lock screen
+hc keybind $Mod-z spawn bash /home/pyratebeard/.local/bin/lock
+
+# dynamic window gap
+hc keybind $Mod-9 spawn bash /home/pyratebeard/.local/bin/herbstluftwm-remove-gap
+hc keybind $Mod-0 spawn bash /home/pyratebeard/.local/bin/herbstluftwm-add-gap
+
+# scrot
+hc keybind $Mod-q spawn scrot -e 'mv $f ~trove/images/misc/scrots/pyratebeard/'
+
+# generic actions
+hc keybind $Mod-Shift-q quit
+hc keybind $Mod-Shift-r reload
+hc keybind $Mod-Shift-c close
+hc keybind $Mod-Return spawn urxvtc
+
+# basic movement
+# 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
+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 chain , split bottom 0.5 , focus down #row
+hc keybind $Mod-o chain , split right 0.5 , focus right #column
+# let the current frame explode into subframes
+hc keybind $Mod-Control-space split explode
+
+# resizing frames
+resizestep=0.01
+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=( {0..4} )
+tag_keys=( {1..5} 0 )
+
+# set up normal tags
+hc rename default "${tag_names[0]}" || true
+for i in ${!tag_names[@]} ; do
+ hc add "${tag_names[$i]}"
+ key="${tag_keys[$i]}"
+ layoutfile=/home/pyratebeard/dot/herbstluftwm/layout-${key}
+ if ! [ -z "$key" ] ; then
+ hc keybind "$Mod-$key" \
+ chain , silent substitute M tags."$i".my_monitor \
+ focus_monitor M \
+ , use_index "$i"
+ hc keybind "$Mod-Shift-$key" move_index "$i"
+ if [ -f ${layoutfile} ] ; then
+ hc load ${i} "$(cat ${layoutfile})"
+ fi
+ fi
+done
+
+hc keybind $Mod-t chain \
+ , new_attr string tags.focus.my_monitor \
+ , substitute M monitors.focus.indix set_attr tags.focus.my_monitor M \
+ , try and \
+ . compare monitors.focus.name != "" \
+ . substitute M monitors.focus.name \
+ set_attr tags.focus.my_monitor M
+
+hc keybind $Mod-Shift-t \
+ remove_attr tags.focus.my_monitor
+
+lock_tag_to_monitor() {
+ hc chain \
+ , new_attr string tags.by-name."$1".my_monitor \
+ , set_attr tags.by-name."$1".my_monitor "$2"
+}
+
+lock_tag_to_monitor 0 1
+lock_tag_to_monitor 1 0
+lock_tag_to_monitor 2 1
+lock_tag_to_monitor 3 1
+lock_tag_to_monitor 4 1
+
+# cycle through tags
+hc keybind $Mod-$Alt-Left use_index -1 --skip-visible
+hc keybind $Mod-$Alt-Right use_index +1 --skip-visible
+
+# layouting
+hc keybind $Mod-x remove
+hc keybind $Mod-space cycle_layout 1
+hc keybind $Mod-Shift-space cycle_layout -1
+hc keybind $Mod-s set_attr clients.focus.floating toggle
+hc keybind $Mod-f fullscreen toggle
+hc keybind $Mod-p pseudotile toggle
+
+# mouse
+hc mouseunbind --all
+hc mousebind $Mod-Button1 move
+hc mousebind $Mod-Button2 zoom
+hc mousebind $Mod-Button3 resize
+
+# 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-n cycle
+hc keybind $Mod-i jumpto urgent
+
+# theme
+hc attr theme.tiling.reset 1
+hc attr theme.floating.reset 1
+hc set frame_border_active_color '#807b64'
+hc set frame_border_normal_color '#131313'
+hc set frame_bg_normal_color '#202020'
+hc set frame_bg_active_color '#131313'
+hc set frame_border_width 0
+hc set always_show_frame 0
+hc set frame_bg_transparent 1
+hc set frame_transparent_width 0
+hc set frame_gap 2
+
+hc attr theme.active.color '#60928f' #6A8C8C
+hc attr theme.normal.color '#121212'
+hc attr theme.urgent.color '#515978'
+hc attr theme.inner_width 6
+hc attr theme.inner_color '#2c2c2c'
+hc attr theme.border_width 10
+hc attr theme.floating.border_width 3
+hc attr theme.floating.outer_width 1
+hc attr theme.floating.outer_color black
+hc attr theme.active.inner_color '#2c2c2c'
+hc attr theme.active.outer_color '#131313'
+hc attr theme.background_color '#1e1b1c'
+#hc attr theme.padding_left 14
+
+hc set window_gap 30
+hc set frame_padding 0
+hc set smart_window_surroundings 0
+hc set smart_frame_surroundings 1
+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 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)' pseudotile=on
+hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on
+hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off
+
+# unlock, just to be sure
+hc unlock
+
+herbstclient set tree_style '╾│ ├└╼─┐'
+
+hc rule class=qutebrowser tag=1
+hc rule class=firefox tag=1
+hc rule class=Chromium tag=3
+hc rule class=teams-for-linux tag=3
+hc rule class=Gimp floating=true
+hc rule class="Tor Browser" floating=true
+hc rule class=xfreerdp floating=true
+hc rule class="Qemu-system-x86_64" floating=true
+hc rule title=scratchpad floating=true floatplacement=center
+hc rule title=dmenu floating=true
+
+# do multi monitor setup here, e.g.:
+# hc set_monitors 1280x1024+0+0 1280x1024+1280+0
+# or simply:
+hc detect_monitors
diff --git a/herbstluftwm/.config/herbstluftwm/autostart.slughead b/herbstluftwm/.config/herbstluftwm/autostart.slughead
@@ -0,0 +1,227 @@
+#!/bin/sh
+#
+# ██ ██ ██ ██ ████ ██
+# ░██ ░██ ░██ ░██ ░██░ ░██
+# ░██ █████ ██████░██ ██████ ██████ ░██ ██ ██ ██████ ██████
+# ░██████ ██░░░██░░██░░█░██████ ██░░░░ ░░░██░ ░██░██ ░██░░░██░ ░░░██░
+# ░██░░░██░███████ ░██ ░ ░██░░░██░░█████ ░██ ░██░██ ░██ ░██ ░██
+# ░██ ░██░██░░░░ ░██ ░██ ░██ ░░░░░██ ░██ ░██░██ ░██ ░██ ░██
+# ░██ ░██░░██████░███ ░██████ ██████ ░░██ ███░░██████ ░██ ░░██
+# ░░ ░░ ░░░░░░ ░░░ ░░░░░ ░░░░░░ ░░ ░░░ ░░░░░░ ░░ ░░
+
+hc() {
+ herbstclient "$@"
+}
+
+hc emit_hook reload
+
+# remove all existing keybindings
+hc keyunbind --all
+
+# close tray if reloading
+killall stalonetray
+
+# gap counter
+echo 30 > /tmp/herbstluftwm-gap
+
+# keybindings
+Mod=Mod4
+Alt=Mod1
+
+# minimize and unminimise windows
+bash /home/pyratebeard/.local/bin/herbstluftwm-min_max
+
+hc keybind $Mod-Control-s spawn bash /home/pyratebeard/.local/bin/herbstluftwm-miniscratch
+
+# run menu
+hc keybind $Mod-w spawn /usr/bin/zsh /home/pyratebeard/.local/bin/rundmc
+
+# lock screen
+hc keybind $Mod-z spawn bash /home/pyratebeard/.local/bin/lock
+
+# dynamic window gap
+hc keybind $Mod-9 spawn bash /home/pyratebeard/.local/bin/herbstluftwm-remove-gap
+hc keybind $Mod-0 spawn bash /home/pyratebeard/.local/bin/herbstluftwm-add-gap
+
+# scrot
+hc keybind $Mod-q spawn scrot -e 'mv $f ~trove/images/misc/scrots/pyratebeard/'
+
+# generic actions
+hc keybind $Mod-Shift-q quit
+hc keybind $Mod-Shift-r reload
+hc keybind $Mod-Shift-c close
+hc keybind $Mod-Return spawn urxvtc
+
+# basic movement
+# 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
+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 chain , split bottom 0.5 , focus down #row
+hc keybind $Mod-o chain , split right 0.5 , focus right #column
+# let the current frame explode into subframes
+hc keybind $Mod-Control-space split explode
+
+# resizing frames
+resizestep=0.01
+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=( {0..4} )
+tag_keys=( {1..5} 0 )
+
+# set up normal tags
+hc rename default "${tag_names[0]}" || true
+for i in ${!tag_names[@]} ; do
+ hc add "${tag_names[$i]}"
+ key="${tag_keys[$i]}"
+ layoutfile=/home/pyratebeard/dot/herbstluftwm/layout-${key}
+ if ! [ -z "$key" ] ; then
+ hc keybind "$Mod-$key" \
+ chain , silent substitute M tags."$i".my_monitor \
+ focus_monitor M \
+ , use_index "$i"
+ hc keybind "$Mod-Shift-$key" move_index "$i"
+ if [ -f ${layoutfile} ] ; then
+ hc load ${i} "$(cat ${layoutfile})"
+ fi
+ fi
+done
+
+hc keybind $Mod-t chain \
+ , new_attr string tags.focus.my_monitor \
+ , substitute M monitors.focus.indix set_attr tags.focus.my_monitor M \
+ , try and \
+ . compare monitors.focus.name != "" \
+ . substitute M monitors.focus.name \
+ set_attr tags.focus.my_monitor M
+
+hc keybind $Mod-Shift-t \
+ remove_attr tags.focus.my_monitor
+
+lock_tag_to_monitor() {
+ hc chain \
+ , new_attr string tags.by-name."$1".my_monitor \
+ , set_attr tags.by-name."$1".my_monitor "$2"
+}
+
+lock_tag_to_monitor 0 0
+lock_tag_to_monitor 1 1
+lock_tag_to_monitor 2 0
+lock_tag_to_monitor 3 1
+lock_tag_to_monitor 4 0
+
+# cycle through tags
+hc keybind $Mod-$Alt-Left use_index -1 --skip-visible
+hc keybind $Mod-$Alt-Right use_index +1 --skip-visible
+
+# layouting
+hc keybind $Mod-x remove
+hc keybind $Mod-space cycle_layout 1
+hc keybind $Mod-Shift-space cycle_layout -1
+hc keybind $Mod-s set_attr clients.focus.floating toggle
+hc keybind $Mod-f fullscreen toggle
+hc keybind $Mod-p pseudotile toggle
+
+# mouse
+hc mouseunbind --all
+hc mousebind $Mod-Button1 move
+hc mousebind $Mod-Button2 zoom
+hc mousebind $Mod-Button3 resize
+
+# 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-n cycle
+hc keybind $Mod-i jumpto urgent
+
+# theme
+hc attr theme.tiling.reset 1
+hc attr theme.floating.reset 1
+hc set frame_border_active_color '#807b64'
+hc set frame_border_normal_color '#131313'
+hc set frame_bg_normal_color '#202020'
+hc set frame_bg_active_color '#131313'
+hc set frame_border_width 0
+hc set always_show_frame 0
+hc set frame_bg_transparent 1
+hc set frame_transparent_width 0
+hc set frame_gap 2
+
+hc attr theme.active.color '#14894c' #orp: 9c353e, zuke: bdc030, electronomicon: 7d3624
+hc attr theme.normal.color '#070606'
+hc attr theme.urgent.color '#58333e'
+hc attr theme.inner_width 8
+hc attr theme.inner_color '#2a2f33'
+hc attr theme.border_width 12
+hc attr theme.floating.border_width 3
+hc attr theme.floating.outer_width 1
+hc attr theme.floating.outer_color black
+hc attr theme.active.inner_color '#2a2f33'
+hc attr theme.active.outer_color '#131313'
+hc attr theme.background_color '#1e1b1c'
+#hc attr theme.padding_left 14
+
+hc set window_gap 30
+hc set frame_padding 0
+hc set smart_window_surroundings 0
+hc set smart_frame_surroundings 1
+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 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)' pseudotile=on
+hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on
+hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off
+
+# unlock, just to be sure
+hc unlock
+
+herbstclient set tree_style '╾│ ├└╼─┐'
+
+hc rule class=qutebrowser tag=1
+hc rule class=firefox tag=1
+hc rule class=Chromium tag=3
+hc rule class=teams-for-linux tag=3
+hc rule class=Gimp floating=true
+hc rule class="Tor Browser" floating=true
+hc rule class=xfreerdp floating=true
+hc rule class="Qemu-system-x86_64" floating=true
+hc rule title=scratchpad floating=true floatplacement=center
+hc rule title=dmenu floating=true
+
+# do multi monitor setup here, e.g.:
+# hc set_monitors 1280x1024+0+0 1280x1024+1280+0
+# or simply:
+hc detect_monitors