herbstluftwm/autostart

381 lines
14 KiB
Plaintext
Raw Permalink 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'
2021-10-14 09:38:59 +02:00
TERMINAL="alacritty"
2020-12-17 16:10:19 +01:00
BROWSER="qutebrowser"
2019-01-18 16:16:08 +01:00
# Autostart apps {{{
## Start a terminal
if [ $(command -v "${TERMINAL}") ] && [ ! $(pidof -x "${TERMINAL}") ] ; then
"${TERMINAL}" &
fi
## Start a web browser
2020-12-17 16:10:19 +01:00
if [ $(command -v "${BROWSER}") ] && [ ! $(pidof -x "${BROWSER}") ] ; then
"${BROWSER}" &
fi
2024-03-12 17:39:32 +01:00
## Start a Mattermost
if [ $(command -v "mattermost-desktop") ] && [ ! $(pidof -x "mattermost-desktop") ] ; then
"mattermost-desktop" &
fi
## Load correct keyboard configuration
keyboard.sh
# }}}
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-21 15:31:46 +01:00
# Bind key to tag_name
#KEY:"TAG_NAME"
tag_binds=(
a:" >_ "
u:" web "
i:" msg "
e:"office"
b:" mul "
eacute:" oth "
)
hc silent attr tags.by-name.default && hc rename default " >_ "
for i in "${tag_binds[@]}" ; do
key="${i%%:*}"
tag="${i#*:}"
hc add "$tag"
hc keybind "$Mod-$key" or . and , compare tags.focus.name = "$tag" , try use_previous . use "$tag"
hc keybind "$Mod-Shift-$key" move "$tag"
2016-10-13 19:07:18 +02:00
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
2020-12-21 15:43:18 +01:00
hc keybind $Mod-dead_circumflex spawn ~/.dmenu # Open dmenu/rofi launcher
hc keybind $Mod-p spawn ~/.dmenu # Open dmenu/rofi launcher
2020-12-06 10:05:01 +01:00
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
2020-12-21 15:43:18 +01:00
hc keybind $Mod-o spawn qb # Qutebrowser content parser
2020-12-06 10:05:01 +01:00
hc keybind $Mod-q spawn qb # Qutebrowser content parser
hc keybind $Mod-w spawn rofi-task.sh # Taskwarrior launcher
hc keybind $Mod-agrave spawn ~/bin/rofi-pass # Password manager
2024-03-18 17:51:37 +01:00
hc keybind $h-e spawn bemoji --type --clip --noline # Display emoji picker (1. try to type it, 2. add to clipboard, 3. without newline caracter)
# for some unknown reasons, it fails on first call in vim,…
2016-10-13 19:07:18 +02:00
# sound
2020-12-21 17:18:51 +01:00
hc keybind XF86AudioRaiseVolume spawn pulsemixer --change-volume +5
hc keybind XF86AudioLowerVolume spawn pulsemixer --change-volume -5
hc keybind XF86AudioMute spawn pulsemixer --toggle-mute
## Rofi script to choose output sink
hc keybind $h-XF86AudioMute spawn ~/bin/rofi-pulse-sink.sh
## See for Kodi actions/functions:
## https://kodi.wiki/view/List_of_built-in_functions#List_of_functions
2022-07-12 09:24:02 +02:00
hc keybind XF86AudioPlay spawn ~/bin/multimedia.controller.sh --command toggle
2023-11-27 10:05:25 +01:00
hc keybind $s-XF86AudioPlay spawn ~/bin/multimedia.controller.sh --command partymode
2022-07-12 09:24:02 +02:00
hc keybind XF86AudioNext spawn ~/bin/multimedia.controller.sh --command next
hc keybind XF86AudioPrev spawn ~/bin/multimedia.controller.sh --command previous
2023-11-27 10:05:25 +01:00
hc keybind $s-XF86AudioNext spawn ~/bin/multimedia.controller.sh --command rofi
hc keybind $s-XF86AudioPrev spawn ~/bin/multimedia.controller.sh --command rofi
hc keybind $c-XF86AudioNext spawn ~/bin/multimedia.controller.sh --command rofi
hc keybind $c-XF86AudioPrev spawn ~/bin/multimedia.controller.sh --command rofi
hc keybind $h-XF86AudioNext spawn ~/bin/multimedia.controller.sh --command rofi
hc keybind $h-XF86AudioPrev spawn ~/bin/multimedia.controller.sh --command rofi
hc keybind $a-XF86AudioNext spawn ~/bin/multimedia.controller.sh --command rofi
hc keybind $a-XF86AudioPrev spawn ~/bin/multimedia.controller.sh --command rofi
2016-10-13 19:07:18 +02:00
# 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
2021-10-14 09:50:55 +02:00
# Move splash windows to tag " oth "
2020-12-21 15:31:46 +01:00
hc rule windowtype~'_NET_WM_WINDOW_TYPE_SPLASH' pseudotile=on tag=" oth "
2016-10-13 19:07:18 +02:00
2021-10-14 09:50:55 +02:00
# Use xprop, xwinfo or wmctrl -l
# To get informations (class,…) about X windows
2020-12-21 15:31:46 +01:00
# tag: web or related
2024-03-14 18:10:21 +01:00
hc rule class~'.irefox' tag=" web "
hc rule class~'.irefox-esr' tag=" web "
2019-01-18 16:16:08 +01:00
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
2022-07-12 09:24:18 +02: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
2020-12-21 11:36:21 +01:00
# Messaging clients
2019-10-23 08:21:55 +02:00
hc rule class~'.ocket..hat.*' tag=" msg " focus=on
2022-02-04 12:07:11 +01:00
hc rule class~'.elegram.*' tag=" msg " focus=on
2021-10-14 09:50:55 +02:00
hc rule class~'.lement' tag=" msg " focus=on
2020-08-06 16:58:36 +02:00
hc rule class~'.ignal' tag=" msg " focus=on
2020-12-21 11:36:21 +01:00
hc rule class~'.iscord' tag=" msg " focus=on
2024-03-11 10:12:17 +01:00
hc rule class~'.attermost.*' tag=" msg " focus=on
2018-02-15 16:41:53 +01:00
2020-12-21 15:31:46 +01:00
# tag: office
## Default layout {{{
# | 50 | 50 |
# | 50 | |
# | 50 | 50 |
2020-12-21 15:31:46 +01:00
hc load "office" '
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
2020-12-21 15:31:46 +01:00
hc rule class~'.ibre.ffice.*' tag="office" index=00 focus=off pseudotile=off
## cloud sync clients
2020-12-21 15:31:46 +01:00
hc rule class~'.wn.loud' tag="office" index=10 focus=on
hc rule class~'.ext.loud' tag="office" index=10 focus=on
## Mumble client
hc rule class~'.umble' tag="office" index=11 focus=off pseudotile=off
hc rule title~'.umble' windowtype='_NET_WM_WINDOW_TYPE_DIALOG' tag="office" index=11 focus=on pseudotile=off
2016-10-13 19:07:18 +02:00
2020-12-21 15:31:46 +01:00
# tag: mul
## Gimp now works in a single window
2020-12-21 15:31:46 +01:00
## so no longer needs a specific layout
## Gimp
2020-12-21 15:31:46 +01:00
hc rule class=Gimp tag=" mul " pseudotile=on
2016-10-13 19:07:18 +02:00
hc rule class=Gimp windowrole~'gimp-(image-window|toolbox|dock)' \
pseudotile=off
## Kodi
2020-12-21 15:31:46 +01:00
hc rule class=Kodi tag=" mul " focus=on
## VLC
hc rule class~'.lc' tag=" mul " focus=on
2019-09-04 16:55:17 +02:00
## Steam
2023-11-27 10:05:25 +01:00
hc rule class~'.team' tag=" mul "
hc rule class~'.teamwebhelper' tag=" mul "
2020-12-21 15:31:46 +01:00
hc rule title=Steam tag=" mul "
2023-11-27 10:05:25 +01:00
hc rule title="Sign in to Steam" tag=" mul "
2019-09-04 16:55:17 +02:00
2020-12-21 15:31:46 +01:00
# tag: oth
hc rule class=KeePass2 tag=" oth "
2024-03-18 17:51:09 +01:00
hc rule class~'.ee.ass..' tag=" oth "
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