Apparently the workaround for only fullscreening into pane used for chromium depends on its buggy behaviour and does not work with firefox (which instance is Navigator instead of firefox anyways). As an alternative there now is a new keybind to switch from fullscreen into this 'fakefullscreen'. To switch back one must go into normal fullscreen again. Therefore this still could use some rework.
213 lines
6.6 KiB
Bash
Executable file
213 lines
6.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# this is a simple config for herbstluftwm
|
|
|
|
hc() {
|
|
herbstclient "$@"
|
|
}
|
|
|
|
hc emit_hook reload
|
|
|
|
xsetroot -solid '#22AA22'
|
|
feh --randomize --bg-fill ~/misc/wallpapers
|
|
|
|
# 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-Shift-c close
|
|
hc keybind $Mod-Return spawn ${TERMINAL:-urxvt} # use your $TERMINAL with urxvt as fallback
|
|
|
|
# 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 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
|
|
resizestep=0.05
|
|
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
|
|
|
|
# custom keybindings
|
|
case "$HOSTNAME" in
|
|
fau*)
|
|
hc keybind $Mod-q spawn /usr/bin/xlock -geometry 1920x2
|
|
;;
|
|
*)
|
|
hc keybind $Mod-q spawn ~/bin/lock
|
|
;;
|
|
esac
|
|
|
|
if [ "$HOSTNAME" = warthog ]; then
|
|
hc keybind $Mod-d spawn /usr/bin/dmenu_run_hlwm -fn "Monospace-9"
|
|
hc keybind XF86MonBrightnessDown spawn xbacklight -4
|
|
hc keybind XF86MonBrightnessUp spawn xbacklight +4
|
|
hc keybind Shift-XF86MonBrightnessDown spawn xbacklight -1
|
|
hc keybind Shift-XF86MonBrightnessUp spawn xbacklight +1
|
|
else
|
|
hc keybind $Mod-d spawn /usr/bin/dmenu_run_hlwm
|
|
fi
|
|
|
|
hc keybind $Mod-b spawn /usr/bin/chromium
|
|
hc keybind $Mod-grave spawn "$HOME"/.config/herbstluftwm/q3terminal.sh 9
|
|
hc keybind $Mod-Shift-f chain , attr clients.focus.ewmhnotify false , attr clients.focus.fullscreen false , attr clients.focus.ewmhnotify true
|
|
|
|
hc keybind XF86AudioMute chain . spawn amixer -q set Master toggle . spawn herbstclient emit_hook UPDATE
|
|
hc keybind XF86AudioLowerVolume and . spawn amixer -q set Master playback '5%-' . spawn herbstclient emit_hook UPDATE
|
|
hc keybind XF86AudioRaiseVolume chain . spawn amixer -q set Master playback '5%+' . spawn herbstclient emit_hook UPDATE
|
|
|
|
# tags
|
|
tag_names=( {1..9} )
|
|
tag_keys=( {1..9} 0 )
|
|
|
|
hc rename default "${tag_names[0]}" || true
|
|
for i in ${!tag_names[@]} ; do
|
|
hc add "${tag_names[$i]}"
|
|
key="${tag_keys[$i]}"
|
|
if ! [ -z "$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-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
|
|
|
|
# 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-c 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 '#222222'
|
|
hc set frame_border_normal_color '#101010'
|
|
hc set frame_bg_normal_color '#565656'
|
|
hc set frame_bg_active_color '#345F0C'
|
|
hc set frame_border_width 1
|
|
hc set always_show_frame 1
|
|
hc set frame_bg_transparent 1
|
|
hc set frame_transparent_width 5
|
|
hc set frame_gap 4
|
|
|
|
hc attr theme.active.color '#9fbc00'
|
|
hc attr theme.normal.color '#454545'
|
|
hc attr theme.urgent.color orange
|
|
hc attr theme.inner_width 1
|
|
hc attr theme.inner_color black
|
|
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 black
|
|
hc attr theme.active.inner_color '#3E4A00'
|
|
hc attr theme.active.outer_color '#3E4A00'
|
|
hc attr theme.background_color '#141414'
|
|
|
|
hc set window_gap 0
|
|
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
|
|
# don't manage Pinentry windows so they overlay the rest
|
|
hc rule class='Pinentry' manage=off 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 '╾│ ├└╼─┐'
|
|
|
|
# do multi monitor setup here, e.g.:
|
|
# hc set_monitors 1280x1024+0+0 1280x1024+1280+0
|
|
# or simply:
|
|
# hc detect_monitors
|
|
|
|
# add external panel
|
|
{
|
|
# find the panel
|
|
panel=~/.config/herbstluftwm/panel.sh
|
|
[ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh
|
|
|
|
# initialize array to store panel-pids
|
|
pids=( )
|
|
|
|
# start panel on every monitor
|
|
for monitor in $(herbstclient list_monitors | cut -d: -f1) ; do
|
|
# start it on each monitor and save pids
|
|
"$panel" $monitor &
|
|
pids+=( $! )
|
|
done
|
|
|
|
# wait until the panels should be stopped
|
|
herbstclient -w '(quit_panel|reload)'
|
|
# stop all started panels
|
|
kill ${pids[@]}
|
|
} &
|