285 lines
9.0 KiB
Bash
Executable File
285 lines
9.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
|
||
source ~/.config/herbstluftwm/common_config
|
||
#source /home/jegardai/.config/herbstluftwm/common_config
|
||
|
||
hc() {
|
||
herbstclient "$@"
|
||
}
|
||
|
||
hc emit_hook reload
|
||
|
||
xsetroot -solid '#5A8E3A'
|
||
|
||
TERMINAL=terminator
|
||
|
||
if [ $(command -v keepass2) ] && [ ! $(pidof cli) ] ; then
|
||
keepass2 &
|
||
fi
|
||
|
||
if [ $(command -v terminator) ] && [ ! $(pidof -x terminator) ] ; then
|
||
terminator &
|
||
fi
|
||
|
||
if [ $(command -v qutebrowser) ] && [ ! $(pidof -x qutebrowser) ] ; then
|
||
qutebrowser &
|
||
fi
|
||
|
||
###################
|
||
### Keybindings ###
|
||
###################
|
||
|
||
# remove all existing keybindings
|
||
hc keyunbind --all
|
||
|
||
# change var
|
||
# Mod1: Alt_L
|
||
# Mod4: Super_L
|
||
Mod=Mod1
|
||
s=Shift
|
||
c=Control
|
||
a=Mod1
|
||
h=Mod4
|
||
|
||
# hl management
|
||
hc keybind $Mod-Shift-q quit
|
||
hc keybind $h-r reload
|
||
hc keybind $Mod-Shift-y spawn zsh -c 'sleep 1; xset dpms force off' # turn off the screen
|
||
hc keybind $Mod-Shift-x spawn ~/bin/veille.sh # screen locker
|
||
hc keybind $h-F1 spawn ~/bin/ecran off # switch between
|
||
hc keybind $h-F2 spawn ~/bin/ecran work # different
|
||
hc keybind $h-F3 spawn ~/bin/ecran lug # monitor
|
||
hc keybind $h-F4 spawn ~/bin/ecran vga # configurations
|
||
|
||
# window management
|
||
hc keybind $Mod-x close
|
||
|
||
# basic movement
|
||
# focusing frame
|
||
hc keybind $h-Left or , focus left , focus_edge right
|
||
hc keybind $h-Down or , focus down , focus_edge up
|
||
hc keybind $h-Up or , focus up , focus_edge down
|
||
hc keybind $h-Right or , focus right , focus_edge left
|
||
hc keybind $Mod-c or , focus left , focus_edge right
|
||
hc keybind $Mod-t or , focus down , focus_edge up
|
||
hc keybind $Mod-s or , focus up , focus_edge down
|
||
hc keybind $Mod-r or , focus right , focus_edge left
|
||
|
||
# moving clients
|
||
hc keybind $h-Shift-Left or , shift left , shift_edge right
|
||
hc keybind $h-Shift-Down or , shift down , shift_edge up
|
||
hc keybind $h-Shift-Up or , shift up , shift_edge down
|
||
hc keybind $h-Shift-Right or , shift right , shift_edge left
|
||
hc keybind $Mod-Shift-c or , shift left , shift_edge right
|
||
hc keybind $Mod-Shift-t or , shift down , shift_edge up
|
||
hc keybind $Mod-Shift-s or , shift up , shift_edge down
|
||
hc keybind $Mod-Shift-r or , shift right , shift_edge left
|
||
|
||
# splitting frames
|
||
# create an empty frame at the specified direction
|
||
hc keybind $Mod-space and , split bottom 0.5 , focus down
|
||
hc keybind $Mod-Shift-space and , split top 0.5 , focus up
|
||
hc keybind $Mod-Return and , split right 0.5 , focus right
|
||
hc keybind $Mod-Shift-Return and , split left 0.5 , focus left
|
||
# let the current frame explode into subframes
|
||
hc keybind $Mod-Control-space split explode
|
||
|
||
# resizing frames
|
||
resizestep=0.05
|
||
hc keybind $Mod-Control-c resize left +$resizestep
|
||
hc keybind $Mod-Control-t resize down +$resizestep
|
||
hc keybind $Mod-Control-s resize up +$resizestep
|
||
hc keybind $Mod-Control-r resize right +$resizestep
|
||
hc keybind $h-Control-Left resize left +$resizestep
|
||
hc keybind $h-Control-Down resize down +$resizestep
|
||
hc keybind $h-Control-Up resize up +$resizestep
|
||
hc keybind $h-Control-Right resize right +$resizestep
|
||
|
||
# tags
|
||
#tag_names=( {1..9} )
|
||
#tag_keys=( {1..9} 0 )
|
||
tag_names=(term web msg oth art 6 7 8 )
|
||
tag_keys=(a u i e b eacute p o)
|
||
|
||
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-comma use_index +1 --skip-visible
|
||
hc keybind $Mod-k use_index -1 --skip-visible
|
||
hc keybind $Mod-Right use_index +1 --skip-visible
|
||
hc keybind $Mod-Left use_index -1 --skip-visible
|
||
hc keybind $Mod-apostrophe use_previous
|
||
|
||
# layouting
|
||
hc keybind $Mod-d remove
|
||
hc keybind $Mod-Shift-s floating toggle
|
||
hc keybind $Mod-f fullscreen toggle
|
||
hc keybind $Mod-Shift-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-period \
|
||
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 $h-Tab cycle_monitor
|
||
hc keybind $Mod-Tab cycle_all +1
|
||
hc keybind $Mod-Shift-Tab cycle_all -1
|
||
hc keybind $Mod-agrave cycle
|
||
hc keybind $Mod-Shift-i jumpto urgent
|
||
|
||
# apps
|
||
hc keybind $Mod-BackSpace spawn ${TERMINAL:-xterm} # use your $TERMINAL with xterm as fallback
|
||
hc keybind $Mod-dead_circumflex spawn ~/.dmenu
|
||
hc keybind XF86HomePage spawn firefox
|
||
hc keybind $Mod-q spawn qutebrowser
|
||
hc keybind XF86Mail spawn icedove
|
||
hc keybind XF86Calculator spawn gnome-calculator
|
||
hc keybind Print spawn ~/bin/printscreen
|
||
hc keybind $Mod-XF86AudioPlay spawn rhythmbox
|
||
hc keybind $Mod-v spawn vlc
|
||
hc keybind $Mod-Escape spawn ~/bin/bepo_azerty.sh
|
||
|
||
# sound
|
||
hc keybind XF86AudioRaiseVolume spawn amixer -q -c 0 set Master 2+ unmute
|
||
hc keybind XF86AudioLowerVolume spawn amixer -q -c 0 set Master 2- unmute
|
||
hc keybind XF86AudioMute spawn amixer -q set Master toggle
|
||
|
||
# brightness
|
||
hc keybind XF86MonBrightnessUp spawn xbacklight +10
|
||
hc keybind XF86MonBrightnessDown spawn xbacklight -10
|
||
|
||
###################
|
||
### theme ###
|
||
###################
|
||
|
||
hc attr theme.tiling.reset 1
|
||
hc attr theme.floating.reset 1
|
||
#hc set frame_border_active_color '#222222'
|
||
hc set frame_border_active_color ${darkgrey}
|
||
#hc set frame_border_normal_color '#101010'
|
||
hc set frame_border_normal_color ${lightblack}
|
||
hc set frame_bg_normal_color ${darkgrey}
|
||
#hc set frame_bg_active_color '#345F0C'
|
||
hc set frame_bg_active_color ${debianred}
|
||
hc set frame_border_width 1
|
||
hc set always_show_frame 1
|
||
#hc set frame_bg_transparent 1
|
||
hc set frame_bg_transparent 0
|
||
hc set frame_transparent_width 5
|
||
hc set frame_gap 4
|
||
hc set window_border_normal_color ${darkgrey}
|
||
hc set window_border_active_color ${debianred}
|
||
|
||
hc attr theme.active.color ${debianred}
|
||
hc attr theme.normal.color ${grey}
|
||
hc attr theme.urgent.color orange
|
||
hc attr theme.inner_width 1
|
||
hc attr theme.inner_color ${grey}
|
||
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 ${debianred}
|
||
hc attr theme.active.outer_color ${debianred}
|
||
hc attr theme.background_color ${debianred}
|
||
|
||
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 focus=on # normally 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
|
||
|
||
# tag: web
|
||
hc rule class=Firefox tag=web
|
||
hc rule class=qutebrowser tag=web
|
||
hc rule class=Midori tag=oth
|
||
|
||
# msg
|
||
hc load msg '
|
||
(split vertical:0.960000:0
|
||
(clients vertical:0)
|
||
(clients vertical:0)))
|
||
'
|
||
hc rule class=Icedove tag=msg focus=on index=01
|
||
hc rule class=Icedove windowrole=Msgcompose focus=on index=01
|
||
# OpenPGP passphrase
|
||
hc rule class=Gcr-prompter tag=msg focus=on index=10
|
||
hc rule class=Icedove windowrole=AlarmWindow tag=msg focus=off index=10
|
||
|
||
# oth
|
||
hc load oth '
|
||
(split horizontal:0.450000:0
|
||
(clients vertical:0)
|
||
(split vertical:0.550000:1
|
||
(clients vertical:0)
|
||
(clients vertical:0)))
|
||
'
|
||
hc rule class~'.ibre.ffice.*' tag=oth index=00 focus=off
|
||
hc rule class=Rhythmbox tag=oth index=10 focus=on
|
||
hc rule class=Vlc tag=oth index=11 focus=on
|
||
|
||
# art (for GIMP)
|
||
hc load art '
|
||
(split horizontal:0.850000:0
|
||
(split horizontal:0.200000:1
|
||
(clients vertical:0)
|
||
(clients grid:0))
|
||
(clients vertical:0))
|
||
' # load predefined layout
|
||
# center all other gimp windows on gimp tag
|
||
hc rule class=Gimp tag=art index=01 pseudotile=on
|
||
hc rule class=Gimp windowrole~'gimp-(image-window|toolbox|dock)' \
|
||
pseudotile=off
|
||
hc rule class=Gimp windowrole=gimp-toolbox focus=off index=00
|
||
hc rule class=Gimp windowrole=gimp-dock focus=off index=1
|
||
|
||
# tag: 8
|
||
hc rule class=KeePass2 tag=8
|
||
|
||
# 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
|
||
|
||
# find the panel
|
||
panel=~/.config/herbstluftwm/panel.sh
|
||
[ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh
|
||
for monitor in $(herbstclient list_monitors | cut -d: -f1) ; do
|
||
# start it on each monitor
|
||
"$panel" $monitor &
|
||
done
|