dotfiles/config/herbstluftwm/autostart
Thomas Preisner e2be7fc217 herbstluftwm: add keybind for 'fakefullscreen' and remove chromium/firefox rule
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.
2018-02-20 16:39:29 +01:00

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[@]}
} &