summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rwxr-xr-xconfig-herbstluftwm-autostart.org326
2 files changed, 328 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..9088b08
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+auto/
+*.pdf \ No newline at end of file
diff --git a/config-herbstluftwm-autostart.org b/config-herbstluftwm-autostart.org
new file mode 100755
index 0000000..07dd6c1
--- /dev/null
+++ b/config-herbstluftwm-autostart.org
@@ -0,0 +1,326 @@
+# -*- mode: org; -*-
+
+#+TITLE: {{{hl}}} configuration file
+#+AUTHOR: Marius Peter
+#+DATE: <2021-08-01 Sun>
+
+#+PROPERTY: header-args :tangle ~/.config/herbstluftwm/autostart :shebang "#!/usr/bin/env bash"
+
+#+SETUPFILE: ~/.emacs.d/templates/documents/gnu-default.setup
+#+INCLUDE: ~/.emacs.d/templates/documents/default-title.org
+
+#+MACRO: hl Herbstluftwm
+
+* Introduction
+
+{{{hl}}} is a manual tiling window manager. It has the particularity
+of being configured via the ~herbstclient~ program.
+hc keybind $Mod-p spawn dmenu_run_hlwm
+
+#+begin_center
+\Huge\textbf{Herbstluft}\\
+\normalsize\textit{autumn air}
+#+end_center
+
+* Early setup
+
+** Definitions
+
+This is my literate configuration for Herbstluftwm.
+
+#+BEGIN_SRC shell
+ hc() {
+ herbstclient "$@"
+ }
+#+END_SRC
+
+Choice of Modkey. Mod1 is Alt, Mod4 is Super.
+
+#+BEGIN_SRC shell
+ Mod=Mod4
+#+END_SRC
+
+** ~Plank~ dock
+
+#+BEGIN_SRC shell
+ killall plank
+ plank &
+#+END_SRC
+
+
+** TODO Basic
+
+We make {{{hl}}} execute code associated with the ~reload~ hook.
+
+#+BEGIN_SRC shell
+ hc emit_hook reload
+#+END_SRC
+
+We set the color of the default window bar.
+
+#+BEGIN_SRC shell
+ xsetroot -solid '#5A8E3A'
+#+END_SRC
+
+We remove all existing keybindings.
+
+#+BEGIN_SRC shell
+ hc keyunbind --all
+#+END_SRC
+
+* keybindings
+
+If you have a super key you will be much happier with Mod set to Mod4.
+
+** Basic
+
+#+BEGIN_SRC shell
+hc keybind $Mod-p spawn dmenu_run
+
+ hc keybind $Mod-Shift-q quit
+ hc keybind $Mod-Shift-r reload
+ hc keybind $Mod-Shift-c close
+#+END_SRC
+
+** Spawn a terminal
+
+We use our $TERMINAL with ~st~ as fallback.
+
+#+BEGIN_SRC shell
+ hc keybind $Mod-Return spawn "${TERMINAL:-st}"
+#+END_SRC
+
+** Movement
+
+Basic movement in tiling and floating mode focusing clients.
+
+#+BEGIN_SRC shell
+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
+#+END_SRC
+
+Moving clients in tiling and floating mode.
+
+#+BEGIN_SRC shell
+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
+#+END_SRC
+
+** Splitting frames
+
+Create an empty frame at the specified direction.
+
+#+BEGIN_SRC shell
+ hc keybind $Mod-u split bottom 0.5
+ hc keybind $Mod-o split left 0.5
+#+END_SRC
+
+We let the current frame explode into subframes.
+
+#+BEGIN_SRC shell
+ hc keybind $Mod-Control-space split explode
+#+END_SRC
+
+** Resizing frames and clients
+
+Resizing frames and floating clients.
+
+#+BEGIN_SRC shell
+resizestep=0.02
+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
+#+END_SRC
+
+** Tags
+
+*** Basic definitions
+
+#+BEGIN_SRC shell
+# 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
+#+END_SRC
+
+*** Cycling
+
+#+BEGIN_SRC shell
+# cycle through tags
+hc keybind $Mod-period use_index +1 --skip-visible
+hc keybind $Mod-comma use_index -1 --skip-visible
+
+#+END_SRC
+
+*** Layouting
+
+#+BEGIN_SRC shell
+ hc keybind $Mod-r remove
+ hc keybind $Mod-s floating toggle # Schwebend = floating!
+ hc keybind $Mod-f fullscreen toggle
+ hc keybind $Mod-Shift-f set_attr clients.focus.floating toggle
+ hc keybind $Mod-Shift-m set_attr clients.focus.minimized true
+ hc keybind $Mod-Control-m jumpto last-minimized
+# 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
+#+END_SRC
+
+*** Mouse bindings
+
+#+BEGIN_SRC shell
+# mouse
+hc mouseunbind --all
+hc mousebind $Mod-Button1 move
+hc mousebind $Mod-Button2 zoom
+hc mousebind $Mod-Button3 resize
+#+END_SRC
+
+*** Cycle monitors
+
+#+BEGIN_SRC shell
+# 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
+#+END_SRC
+
+* Theme
+
+** Basic
+
+#+BEGIN_SRC shell
+ hc attr theme.tiling.reset 1
+ hc attr theme.floating.reset 1
+#+END_SRC
+
+** Frames
+
+#+BEGIN_SRC shell
+ hc set frame_border_active_color '#222222cc'
+ hc set frame_border_normal_color '#101010cc'
+ hc set frame_bg_normal_color '#565656aa'
+ hc set frame_bg_active_color '#345F0Caa'
+ hc set frame_border_width 1
+ hc set always_show_frame on
+ hc set frame_bg_transparent on
+ hc set frame_transparent_width 5
+ hc set frame_gap 4
+#+END_SRC
+
+** Windows
+
+#+BEGIN_SRC shell
+hc attr theme.title_height 24
+hc attr theme.title_font 'Hack:pixelsize=20' # example using Xft
+# hc attr theme.title_font '-*-fixed-medium-r-*-*-13-*-*-*-*-*-*-*'
+hc attr theme.padding_top 4 # space below the title's baseline (i.e. text depth)
+hc attr theme.active.color '#345F0Cef'
+hc attr theme.title_color '#ffffff'
+hc attr theme.normal.color '#323232dd'
+hc attr theme.urgent.color '#7811A1dd'
+hc attr theme.normal.title_color '#898989'
+hc attr theme.inner_width 1
+hc attr theme.inner_color black
+hc attr theme.border_width 3
+hc attr theme.floating.border_width 12
+hc attr theme.floating.outer_width 1
+hc attr theme.floating.outer_color black
+hc attr theme.active.inner_color '#789161'
+hc attr theme.urgent.inner_color '#9A65B0'
+hc attr theme.normal.inner_color '#606060'
+# copy inner color to outer_color
+for state in active urgent normal ; do
+ hc substitute C theme.${state}.inner_color \
+ attr theme.${state}.outer_color C
+done
+hc attr theme.active.outer_width 1
+hc attr theme.background_color '#141414'
+#+END_SRC
+
+** Window appearance
+
+#+BEGIN_SRC shell
+ hc set window_gap 24
+ hc set frame_padding 0
+ hc set smart_window_surroundings on
+ hc set smart_frame_surroundings on
+ hc set mouse_recenter_gap 0
+#+END_SRC
+
+** Rules
+
+#+BEGIN_SRC shell
+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 floatplacement=smart
+#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
+hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' floating=on
+hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on
+hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off
+
+hc set tree_style '╾│ ├└╼─┐'
+
+#+END_SRC
+
+** Unlock monitors
+
+#+BEGIN_SRC shell
+hc unlock
+#+END_SRC
+
+** Multi-monitor setup
+
+#+BEGIN_SRC shell
+# do multi monitor setup here, e.g.:
+# hc set_monitors 1280x1024+0+0 1280x1024+1280+0
+# or simply:
+# hc detect_monitors
+#+END_SRC
+
+** Panel
+
+#+BEGIN_SRC shell
+ panel=~/.config/herbstluftwm/panel.sh
+ [ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh
+ for monitor in $(hc list_monitors | cut -d: -f1) ; do
+ # start it on each monitor
+ "$panel" "$monitor" &
+ done
+#+END_SRC
Copyright 2019--2024 Marius PETER