djcev.com

//

Git Repos / dotfiles / config / herbstluftwm / autostart.fix

Last update to this file was on 2024-01-09 at 11:16.

Show autostart.fix

#!/bin/sh
#
# Copyright (c) 2015-2021, Cameron Vanderzanden. Available under the
# terms of the 2-clause BSD license. Please see the file "LICENSE" in
# the root dir of this repository for more information.
#
#- config/herbstluftwm/autostart 2015/01/06 cev, last updated 2021/12/08
#
# configuration script for herbstluftwm.
# Based on the standard/example script shipped with the wm, available at:
# /usr/local/etc/xdg/herbstluftwm/autostart or share/autostart of the
# herbstluftwm tarball. Also available at:
# https://github.com/herbstluftwm/herbstluftwm/blob/master/share/autostart

printf 'config/herbstluftwm/autostart: running...\n'
hc() { herbstclient "$@"; }
# not fast, but this script isn't executed often, so...
nameforidx() {
# let's abuse the field seperator.
idx=$1; shift; count=0; names=$@; zIFS="$IFS"; IFS=":"
for name in $names; do
count=$((count + 1))
if [ $count -eq $idx ]; then echo $name && break; fi
done
IFS="$zIFS" && return $count
}

hc emit_hook reload
hc keyunbind --all
mod=Super # capslock will be set to super below
thirds=0.75 # not really.

# set up tags. "tagnames" variable is a list of tag names seperated by colon.
cvert="clients vertical:0"
tagnames="F1:F2:F3:F4"
tagi=1; tagcount="$(nameforidx 0 $tagnames; echo $?)"
hc rename default "$(nameforidx $tagi $tagnames)" 2>/dev/null || true
while [ $tagi -le $tagcount ]; do
tagname="$(nameforidx $tagi $tagnames)"
hc add "$tagname"
hc load "$tagname" "(clients max:0)"
hc keybind "$mod-F$tagi" use_index $(($tagi - 1))
hc keybind "$mod-Shift-F$tagi" move_index $(($tagi - 1))
hc keybind "$mod-F$(($tagi + 4))" use_index $(($tagi - 1))
hc keybind "$mod-Shift-F$(($tagi + 4))" move_index $(($tagi - 1))
tagi=$(($tagi + 1))
done

# set up monitors
hc detect_monitors

# keyboard bindings
hc keybind $mod-Shift-q quit
hc keybind $mod-Shift-r reload
hc keybind $mod-space spawn /usr/local/bin/jgmenu_run
hc keybind $mod-Return spawn $HOME/.local/bin/xvt.sh -n
hc keybind $mod-Delete close
hc keybind $mod-End spawn picom-trans -c 85
hc keybind $mod-Home spawn picom-trans -c 100
hc keybind $mod-Page_Up jumpto last-minimized
hc keybind $mod-Page_Down spawn herbstclient attr clients.focus.minimized true
hc keybind Pause spawn $HOME/.local/bin/fix_clip.sh
hc keybind $mod-period use_index +1 --skip-visible
hc keybind $mod-comma use_index -1 --skip-visible
hc keybind $mod-BackSpace cycle_monitor
hc keybind $mod-m cycle +1
hc keybind $mod-Shift-m cycle -1
hc keybind $mod-c cycle +1
hc keybind $mod-Shift-c cycle -1
hc keybind $mod-n cycle +1
hc keybind $mod-Shift-n cycle -1
hc keybind $mod-i jumpto urgent
hc keybind $mod-Tab use_previous
hc keybind $mod-Shift-Tab use_previous


# keyboard bindings / layouting
hc keybind $mod-r remove
hc keybind $mod-z cycle_layout
hc keybind $mod-u split vertical $thirds
hc keybind $mod-o split horizontal $thirds
hc keybind $mod-s floating toggle
hc keybind $mod-f fullscreen toggle
hc keybind $mod-p pseudotile toggle
hc keybind $mod-backslash rotate

# keyboard bindings / directional arrows, keypad arrows, keypad nums, hjkl
keys_left='Left KP_Left KP_4 h'
keys_down='Down KP_Down KP_2 j'
keys_up='Up KP_Up KP_8 k'
keys_right='Right KP_Right KP_6 l'
for keys in "$keys_left" "$keys_down" "$keys_up" "$keys_right"; do
dir=$(echo ${keys%%' '*} | tr '[:upper:]' '[:lower:]')
for key in $keys; do
hc keybind $mod-$key focus $dir
hc keybind $mod-Control-$key resize $dir +0.05
hc keybind $mod-Shift-$key shift $dir
hc keybind $mod-Mod1-$key spawn hc_swap.sh $dir
done
done

# common layouts
l_m="clients max:0"
l_h3="split vertical:0.333300:0"
l_h3335="split horizontal:0.33350:0"; l_h667="split horizontal:0.667000:0"
l_v="clients vertical:0"; l_v25="split vertical:0.250000:0"
l_v50="split vertical:0.500000:0"; l_v75="split vertical:0.750000:0"
l_v_lower="($l_v75 ($l_m) ($l_m))"
l_v_upper="($l_v25 ($l_m) ($l_m))"
l_v_three="($l_v75 ($l_v25 ($l_m) ($l_m)) ($l_m))"
l_h_left="(split horizontal:0.714:0 ($l_m) ($l_v))"
# l_h_left="(split horizontal:0.733000:0 ($l_m) ($l_v))"
l_h_right="(split horizontal:0.286:0 ($l_v) ($l_m))"
l_h_three="($l_hz3335 ($l_h667 ($l_v) ($l_m)) ($l_v))"
l_vh_1="($l_v75 ($l_h667 ($l_m) ($l_v)) ($l_m))"
l_vh_2="($l_v75 ($l_h667 ($l_m) ($l_v50 ($l_m) ($l_m))) ($l_m))"
l_vh_3="($l_v75 ($l_h667 ($l_m) ($l_h3 ($l_m) ($l_v50 ($l_m) ($l_m)))) ($l_m))"

# bindings for common layouts
hc keybind $mod-KP_0 load "($l_m)"
hc keybind $mod-KP_Insert load "($l_m)"
hc keybind $mod-KP_1 load "$l_v_lower"
hc keybind $mod-KP_End load "$l_v_lower"
hc keybind $mod-KP_2 load "$l_v_upper"
hc keybind $mod-KP_Down load "$l_v_upper"
hc keybind $mod-KP_3 load "$l_v_three"
hc keybind $mod-KP_Page_Down load "$l_v_three"
hc keybind $mod-KP_4 load "$l_h_left"
hc keybind $mod-KP_Left load "$l_h_left"
hc keybind $mod-KP_5 load "$l_h_three"
hc keybind $mod-KP_6 load "$l_h_right"
hc keybind $mod-KP_Right load "$l_h_right"
hc keybind $mod-KP_7 load "$l_vh_1"
# TODO CEV
# hc keybind $mod-KP_HOME load "$l_vh_1"
hc keybind $mod-KP_8 load "$l_vh_2"
hc keybind $mod-KP_Up load "$l_vh_2"
hc keybind $mod-KP_9 load "$l_vh_3"
hc keybind $mod-KP_Page_Up load "$l_vh_3"

# preload some layouts
hc floating "F1" on
hc floating "F2" on
hc floating "F3" on
hc floating "F4" on

# mouse bindings
hc mouseunbind --all
hc mousebind $mod-Button1 move
hc mousebind $mod-Button2 zoom
hc mousebind $mod-Button3 resize

# settings / attributes
hc attr settings.auto_detect_panels 'true'
hc attr settings.default_frame_layout 2
hc attr settings.frame_bg_transparent 'true'
hc attr settings.frame_border_width 0
hc attr settings.frame_normal_opacity 0
hc attr settings.frame_active_opacity 0
hc attr settings.frame_gap 16
hc attr settings.frame_padding 0
hc attr settings.window_gap 0
hc attr settings.snap_gap 16
hc attr settings.smart_window_surroundings 0
hc attr settings.smart_frame_surroundings 0
hc attr settings.mouse_recenter_gap 0
hc attr settings.focus_follows_mouse 0
hc attr settings.tree_style '*| +`--.'
hc attr theme.tiling.reset 0
hc attr theme.floating.reset 0
hc attr theme.border_width 0 # 8
hc attr theme.inner_width 0 # 0
hc attr theme.outer_width 0 # 4 (?)
hc attr theme.padding_top 0 # for a not-titelbar
hc attr theme.padding_left 0
hc attr theme.padding_bottom 4 # like WindowMaker
hc attr theme.padding_right 0
hc attr theme.title_align 'left' # 'center'
hc attr theme.title_depth 0 # 8 is good
hc attr theme.title_height 0 # 22 is good
hc attr theme.title_font 'Inconsolata-20'
hc attr theme.title_when 'never'

# colors
hc attr theme.background_color 'xDK0h'
hc attr theme.color 'xDK0s'
hc attr theme.inner_color 'xDK0s'
hc attr theme.outer_color 'xDK1'
hc attr theme.title_color 'xDK4'
hc attr theme.active.background_color 'xDK1'
hc attr theme.active.color 'xDK0h'
hc attr theme.active.inner_color 'xDK0h'
hc attr theme.active.outer_color 'xDK0'
hc attr theme.active.title_color 'xLT4'
hc attr theme.urgent.background_color 'xORNf'
hc attr theme.urgent.color 'xORNn'
hc attr theme.urgent.inner_color 'xORNn'
hc attr theme.urgent.outer_color 'xORNb'
hc attr theme.urgent.title_color 'xDK0'
hc attr theme.floating.active.color 'xGRNf'
hc attr theme.floating.active.inner_color 'xGRNf'
hc attr theme.floating.active.outer_color 'xGRNn'
hc attr theme.tiling.active.color 'xAQUf'
hc attr theme.tiling.active.inner_color 'xAQUf'
hc attr theme.tiling.active.outer_color 'xAQUn'
hc attr settings.frame_bg_normal_color 'xDK0h'
hc attr settings.frame_bg_active_color 'xDK0h'
hc attr settings.frame_border_normal_color 'xDK0'
hc attr settings.frame_border_active_color 'xDK2'

# generic high-level rules
hc unrule -F
hc rule fixedsize floating=on
hc rule focus=off floatplacement=smart
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' floating=on
hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on floatplacement=none
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off
hc rule class~'(.*[Ee][Xx][Ee])' floating=on
# specific classes: consoles and terminals
hc rule class=Alacritty focus=on
hc rule class=Mate-terminal focus=on
hc rule class=qterminal focus=on
hc rule class~'(.*[Rr]xvt.*|.*[Tt]erm|Konsole)' focus=on
hc rule class=XConsole focus=off tag="$(nameforidx 3 $tagnames)" index=0
hc rule class=xterm-256color focus=on
# specific classes: desktop applications, desktop environment features
hc rule class=Caja hook=undecorate
hc rule class=Dock_applet.py manage=off
hc rule class=Com.github.jmoerman.go-for-it hook=undecorate
hc rule class=Mate-notification-daemon manage=off
hc rule class=pinentry-qt5 floating=on focus=on floatplacement=center
# specific classes: games
hc rule title=Dragonfall floating=on
hc rule class=SDL_App focus=on floating=on
hc rule class=steam_proton floating=on
# specific classes: media editors, players, and viewers
hc rule class=Eom focus=on
hc rule class=Gimp-2.10 focus=on
hc rule class=Io.github.celluloid_player.Celluloid focus=on
hc rule class=lximage-qt focus=on
hc rule class=mpv focus=off pseudotile=off
hc rule class=obs floating=on
hc rule class=Sxiv focus=on
# specific classes; system utilities
hc rule class=Cpu-x floating=on
hc rule class=Vncviewer focus=on tag="$(nameforidx 2 $tagnames)" index=0
# specific classes: web browsers
hc rule class=Chromium-browser focus=off tag="$(nameforidx 4 $tagnames)"
hc rule class=Falkon focus=off tag="$(nameforidx 4 $tagnames)"
hc rule class=Firefox-esr focus=on
hc rule class=Navigator focus=off tag="$(nameforidx 4 $tagnames)"
hc rule class=QupZilla focus=off tag="$(nameforidx 4 $tagnames)"

# final setup
hc unlock
hc pad 0 32 0 0 0
printf 'config/herbstluftwm/autostart: ...complete\n'

Return to the top of this page or return to the overview of this repo.

Log autostart.fix

Return to the top of this page or return to the overview of this repo.