herbstluftwm/autostart

333 lines
12 KiB
Plaintext
Raw Normal View History

2016-10-13 19:07:18 +02:00
#!/usr/bin/env bash
source ~/.config/herbstluftwm/common_config
hc() {
herbstclient "$@"
}
hc emit_hook reload
xsetroot -solid '#5A8E3A'
TERMINAL="termit"
2020-12-17 16:10:19 +01:00
BROWSER="qutebrowser"
2019-01-18 16:16:08 +01:00
if [ $(command -v "${TERMINAL}") ] && [ ! $(pidof -x "${TERMINAL}") ] ; then
"${TERMINAL}" &
fi
2020-12-17 16:10:19 +01:00
if [ $(command -v "${BROWSER}") ] && [ ! $(pidof -x "${BROWSER}") ] ; then
"${BROWSER}" &
fi
2016-10-13 19:07:18 +02:00
###################
### 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-x close
# screen management
2020-08-21 21:33:08 +02:00
hc keybind $Mod-Shift-y spawn zsh -c 'sleep 3; xset dpms force off' # turn off the screens
2016-10-13 19:07:18 +02:00
hc keybind $Mod-Shift-x spawn ~/bin/veille.sh # screen locker
2020-10-23 11:10:18 +02:00
hc keybind $h-F1 spawn ~/bin/ecran primary # Keep only the main screen output
2020-08-21 21:33:08 +02:00
hc keybind $h-F2 spawn ~/bin/ecran leftof # Set second output left of the main screen
hc keybind $h-F3 spawn ~/bin/ecran rightof # Set second output right of the main screen
2020-10-23 11:10:18 +02:00
hc keybind $h-F4 spawn ~/bin/ecran primary_off # Disable primary screen
hc keybind $h-F5 spawn ~/bin/ecran second # External display only (videos, games,…)
2020-08-21 21:33:08 +02:00
hc keybind $h-F6 spawn ~/bin/ecran above # Set second output above of the main screen
2016-10-13 19:07:18 +02:00
# basic movement in tiling and floating mode
# focusing clients
## Manage arrows with Mod4
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
## movement with bepo
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
## movement with azerty {{{
#hc keybind $Mod-h or , focus left , focus_edge right
#hc keybind $Mod-j or , focus down , focus_edge up
#hc keybind $Mod-k or , focus up , focus_edge down
#hc keybind $Mod-l or , focus right , focus_edge left
## }}}
# moving clients in tiling and floating mode
## Manage arrows with Mod4
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
## moving with bepo
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
## moving with azerty {{{
#hc keybind $Mod-Shift-h or , shift left , shift_edge right
#hc keybind $Mod-Shift-j or , shift down , shift_edge up
#hc keybind $Mod-Shift-k or , shift up , shift_edge down
#hc keybind $Mod-Shift-l or , shift right , shift_edge left
## }}}
2016-10-13 19:07:18 +02:00
# splitting frames
# create an empty frame at the specified direction
## space: down or up
## return: right or left
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
# keep the focus in the current frame
hc keybind $h-space split bottom 0.5
hc keybind $h-Shift-space split top 0.5
hc keybind $h-Return split right 0.5
hc keybind $h-Shift-Return split left 0.5
2016-10-13 19:07:18 +02:00
# let the current frame explode into subframes
hc keybind $Mod-Control-space split explode
# resizing frames and floating clients
resizestep=0.02
## arrows direction resizing with Mod4
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
## resizing with bepo
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
## resizing with azerty {{{
#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
## }}}
2016-10-13 19:07:18 +02:00
# tags
#tag_names=( {1..9} )
#tag_keys=( {1..9} 0 )
2020-12-06 10:05:01 +01:00
tag_names=(" >_ " " web " " msg " " oth " " art " " 6 " " 7 " " 8 ")
2016-10-13 19:07:18 +02:00
tag_keys=(a u i e b eacute p o)
hc rename default "${tag_names[0]}" || true
for i in "${!tag_names[@]}" ; do
2016-10-13 19:07:18 +02:00
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
## Only with arrows and default Mod
hc keybind $Mod-Right use_index +1 --skip-visible
hc keybind $Mod-Left use_index -1 --skip-visible
2016-10-13 19:07:18 +02:00
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
hc keybind $Mod-Shift-f set_attr clients.focus.floating toggle
2016-10-13 19:07:18 +02:00
# 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
## Mod4 shortcuts
2016-10-13 19:07:18 +02:00
hc keybind $h-Tab cycle_monitor
## $Mod-u already use to move to web tag
hc keybind $h-u jumpto urgent
## $Mod-c already use to change focus (to the left)
hc keybind $h-c cycle
## Cycle between all visible windows and frames
2016-10-13 19:07:18 +02:00
hc keybind $Mod-Tab cycle_all +1
hc keybind $Mod-Shift-Tab cycle_all -1
# apps
2020-12-06 10:05:01 +01:00
hc keybind $Mod-BackSpace spawn ${TERMINAL:-xterm} # use your $TERMINAL with xterm as fallback
hc keybind $Mod-dead_circumflex spawn ~/.dmenu # Open dmeny/rofi launcher
hc keybind XF86HomePage spawn firefox-esr
hc keybind XF86Mail spawn thunderbird
hc keybind XF86Calculator spawn gnome-calculator
hc keybind Print spawn screenshot # Screenshot tool
hc keybind Shift-Print spawn screen.to.0x0 # Take and send screenshot to 0x0 service (URL in paste)
hc keybind $Mod-v spawn vlc
hc keybind $Mod-Escape spawn ~/bin/bepo_azerty.sh # Switch between bépo and azerty
hc keybind $Mod-q spawn qb # Qutebrowser content parser
hc keybind XF86AudioPlay spawn qb
hc keybind $Mod-w spawn rofi-task.sh # Taskwarrior launcher
hc keybind $Mod-agrave spawn ~/bin/rofi-pass # Password manager
2016-10-13 19:07:18 +02:00
# 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
2020-12-17 15:28:26 +01:00
hc keybind XF86MonBrightnessUp spawn light -A 10
hc keybind XF86MonBrightnessDown spawn light -U 10
2016-10-13 19:07:18 +02:00
###################
### 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_active_color '#345F0C'
hc set frame_bg_normal_color ${darkgrey}
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
2016-10-13 19:07:18 +02:00
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 off
hc set smart_frame_surroundings on
hc set mouse_recenter_gap 0
2016-10-13 19:07:18 +02:00
###################
### Rules ###
###################
hc unrule -F
hc rule focus=on # normally focus new clients
hc rule floatplacement=smart
#hc rule focus=off # normally do not focus new clients
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY)' floating=on
2016-10-13 19:07:18 +02:00
hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off
2019-12-18 17:14:10 +01:00
## Move splash windows to tag " 7 "
hc rule windowtype~'_NET_WM_WINDOW_TYPE_SPLASH' pseudotile=on tag=" 7 "
2016-10-13 19:07:18 +02:00
# tag: web
2019-01-18 16:16:08 +01:00
hc rule class=Firefox tag=" web "
hc rule class=qutebrowser tag=" web "
hc rule class=Midori tag=" oth "
2016-10-13 19:07:18 +02:00
2018-02-15 16:41:53 +01:00
# tag: msg
# Thunderbird
2019-11-12 10:18:07 +01:00
hc rule class~'.hunderbird' tag=" msg " focus=on
hc rule class~'.hunderbird' windowrole=Msgcompose focus=on
hc rule class~'.hunderbird' windowrole=AlarmWindow tag=" msg " focus=off
2016-10-13 19:07:18 +02:00
# OpenPGP passphrase
2019-10-23 08:21:55 +02:00
hc rule class=Gcr-prompter tag=" msg " focus=on
# Signal and Rocket.Chat clients
2019-10-23 08:21:55 +02:00
hc rule class~'.ocket..hat.*' tag=" msg " focus=on
2020-08-06 16:58:36 +02:00
hc rule class~'.ignal' tag=" msg " focus=on
2018-02-15 16:41:53 +01:00
2016-10-13 19:07:18 +02:00
# oth
## Default layout {{{
# | 50 | 50 |
# | 50 | |
# | 50 | 50 |
2019-01-18 16:16:08 +01:00
hc load " oth " '
2016-10-13 19:07:18 +02:00
(split horizontal:0.450000:0
(clients vertical:0)
(split vertical:0.550000:1
(clients vertical:0)
(clients vertical:0)))
'
## }}}
## LibreOffice suite
2019-01-18 16:32:33 +01:00
hc rule class~'.ibre.ffice.*' tag=" oth " index=00 focus=off pseudotile=off
## Mumble client
2019-09-03 19:56:03 +02:00
hc rule class=Mumble tag=" oth " index=00 focus=off pseudotile=off
## cloud sync clients
2019-01-18 16:16:08 +01:00
hc rule class=ownCloud tag=" oth " index=10 focus=on
hc rule class~'.extcloud' tag=" oth " index=10 focus=on
## VLC
2019-01-18 16:16:08 +01:00
hc rule class=Vlc tag=" oth " index=11 focus=on
2016-10-13 19:07:18 +02:00
# art - multimedia
## Gimp now works in a single window
## so no longer needs a default layout
## Gimp
2019-01-18 16:16:08 +01:00
hc rule class=Gimp tag=" art " pseudotile=on
2016-10-13 19:07:18 +02:00
hc rule class=Gimp windowrole~'gimp-(image-window|toolbox|dock)' \
pseudotile=off
## Kodi
2020-04-27 11:23:07 +02:00
hc rule class=Kodi tag=" art " focus=on
2016-10-13 19:07:18 +02:00
2019-09-04 16:55:17 +02:00
# tag: 6
## Steam
hc rule class=Steam tag=" 6 "
hc rule title=Steam tag=" 6 "
2019-09-04 16:55:17 +02:00
2016-10-13 19:07:18 +02:00
# tag: 8
2019-01-18 16:16:08 +01:00
hc rule class=KeePass2 tag=" 8 "
2016-10-13 19:07:18 +02:00
hc set tree_style '╾│ ├└╼─┐'
2016-10-13 19:07:18 +02:00
# unlock, just to be sure
hc unlock
# 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 $(hc list_monitors | cut -d: -f1) ; do
2016-10-13 19:07:18 +02:00
# start it on each monitor
"$panel" "$monitor" &
2016-10-13 19:07:18 +02:00
done