aboutsummaryrefslogtreecommitdiff
path: root/.config
diff options
context:
space:
mode:
authorPatrick Spek <p.spek@tyil.nl>2021-03-08 13:00:29 +0100
committerPatrick Spek <p.spek@tyil.nl>2021-08-14 12:01:15 +0200
commitf4439fb9bb24edbb75437a31600dc5080207a1c3 (patch)
tree5489b21a052aa412716ccdad702ce7ff512c36a5 /.config
parentc7ca442194c69c2ba0843ca8952328129e806ed8 (diff)
Update hlwm config
Diffstat (limited to '.config')
-rwxr-xr-x.config/herbstluftwm/autostart61
-rwxr-xr-x.config/herbstluftwm/panel-bot.sh84
-rwxr-xr-x.config/herbstluftwm/panel-top.sh (renamed from .config/herbstluftwm/panel.sh)25
3 files changed, 124 insertions, 46 deletions
diff --git a/.config/herbstluftwm/autostart b/.config/herbstluftwm/autostart
index d59b4a3..69c6d40 100755
--- a/.config/herbstluftwm/autostart
+++ b/.config/herbstluftwm/autostart
@@ -8,37 +8,26 @@ hc() {
hc emit_hook reload
-xsetroot -solid '#5A8E3A'
+xsetroot -solid '#cccccc'
# remove all existing keybindings
hc keyunbind --all
# keybindings
-# if you have a super key you will be much happier with Mod set to Mod4
-#Mod=Mod1 # Use alt as the main modifier
Mod=Mod4 # Use the super key as the main modifier
hc keybind $Mod-Shift-x quit
-hc keybind $Mod-r reload
-hc keybind $Mod-x close
-#hc keybind $Mod-Return spawn "${TERMINAL:-xterm}" # use your $TERMINAL with xterm as fallback
+hc keybind $Mod-r reload
+hc keybind $Mod-x close
# basic movement in tiling and floating mode
# focusing clients
-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
# moving clients in tiling and floating mode
-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
@@ -46,8 +35,8 @@ hc keybind $Mod-Shift-l shift right
# splitting frames
# create an empty frame at the specified direction
-hc keybind $Mod-\\ split bottom 0.5
-hc keybind $Mod-\| split right 0.5
+hc keybind $Mod-backslash split bottom 0.5
+hc keybind $Mod-Shift-backslash split right 0.5
# let the current frame explode into subframes
hc keybind $Mod-Control-space split explode
@@ -57,10 +46,6 @@ 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
# tags
tag_names=( work social web mail fun media vms 8 9 )
@@ -101,7 +86,8 @@ hc mousebind $Mod-Button2 zoom
hc mousebind $Mod-Button3 resize
# focus
-hc keybind $Mod-BackSpace cycle_monitor
+hc keybind $Mod-Control+j cycle_monitor -1
+hc keybind $Mod-Control+k cycle_monitor +1
hc keybind $Mod-Tab cycle_all +1
hc keybind $Mod-Shift-Tab cycle_all -1
hc keybind $Mod-c cycle
@@ -113,18 +99,20 @@ hc attr theme.floating.reset 1
hc set frame_border_active_color '#3381DA'
hc set frame_border_normal_color '#222222'
hc set frame_bg_normal_color '#777777'
-hc set frame_bg_active_color '#3381DA'
+hc set frame_bg_active_color '#000000'
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_bg_transparent 1
+hc set frame_normal_opacity 0
+hc set frame_focus_opacity 1
+#hc set frame_transparent_width 5
hc set frame_gap 4
-hc attr theme.active.color '#9fbc00'
+hc attr theme.active.color '#3381DA'
hc attr theme.normal.color '#454545'
hc attr theme.urgent.color orange
hc attr theme.inner_width 1
-hc attr theme.inner_color black
+#hc attr theme.inner_color black
hc attr theme.border_width 3
hc attr theme.floating.border_width 4
hc attr theme.floating.outer_width 1
@@ -133,7 +121,7 @@ hc attr theme.active.inner_color '#3E4A00'
hc attr theme.active.outer_color '#3E4A00'
hc attr theme.background_color '#141414'
-hc set window_gap 0
+hc set window_gap 4
hc set frame_padding 0
hc set smart_window_surroundings off
hc set smart_frame_surroundings on
@@ -159,12 +147,19 @@ hc unlock
# do multi monitor setup here, e.g.:
# hc set_monitors 1280x1024+0+0 1280x1024+1280+0
# or simply:
-# hc detect_monitors
+hc detect_monitors
+
+# find the top panel
+panel_top=~/.config/herbstluftwm/panel-top.sh
+[ -x "$panel_top" ] || panel_top=/etc/xdg/herbstluftwm/panel.sh
+
+panel_bot=~/.config/herbstluftwm/panel-bot.sh
-# 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
- # start it on each monitor
- "$panel" "$monitor" &
+ # Create space for the panels to exist
+ hc pad "$monitor" 21 0 21 0
+
+ # Start panels
+ "$panel_top" "$monitor" &
+ "$panel_bot" "$monitor" &
done
diff --git a/.config/herbstluftwm/panel-bot.sh b/.config/herbstluftwm/panel-bot.sh
new file mode 100755
index 0000000..4a3bc18
--- /dev/null
+++ b/.config/herbstluftwm/panel-bot.sh
@@ -0,0 +1,84 @@
+#!/usr/bin/env bash
+
+hc() { "${herbstclient_command[@]:-herbstclient}" "$@" ; }
+quote() { local q="$(printf '%q ' "$@")"; printf '%s' "${q% }" ; }
+uniq_linebuffered() { awk '$0 != l { print ; l=$0 ; fflush(); }' "$@"; }
+
+monitor=${1:-0}
+
+hc attr "monitors.$monitor" > /dev/null || { printf "Invalid monitor $monitor" && exit 1 ; }
+
+monitor_tag="$(herbstclient attr "monitors.$monitor.tag")"
+monitor_offset_x=$(hc monitor_rect "$monitor" | awk '{print $1 }')
+monitor_offset_y=$(hc monitor_rect "$monitor" | awk '{print $2 }')
+monitor_width=$(hc monitor_rect "$monitor" | awk '{ print $3 }')
+monitor_height=$(hc monitor_rect "$monitor" | awk '{ print $4 }')
+panel_height=21
+panel_color_bg="$(hc get frame_border_normal_color)"
+panel_color_fg="#efefef"
+panel_color_focus="$(hc get frame_border_active_color)"
+panel_font="Liberation Mono:size=9"
+panel_offset_x=$(( monitor_offset_x ))
+panel_offset_y=$(( monitor_offset_y + monitor_height - panel_height ))
+
+{
+ hc --idle
+} 2> /dev/null | {
+ while :
+ do
+ # Wait for an event
+ IFS=$'\t' read -ra event || break
+
+ # Declare clients as an array
+ declare -a clients
+
+ # Collect all clients on the monitor
+ for client in $(hc attr clients | grep '0x')
+ do
+ [[ "$(hc attr "clients.$client.tag")" != $monitor_tag ]] && continue
+
+ clients+=("$client")
+ done
+
+ name_offset_interval=$(( monitor_width / ${#clients[@]} ))
+
+ # Look up current focus window
+ focus="$(hc attr clients.focus.winid)"
+
+ # Loop through the clients to create a representation
+ index=0
+
+ for client in "${clients[@]}"
+ do
+
+ if [[ "$client" == "$focus." ]]
+ then
+ color_fg="$panel_color_focus"
+ else
+ color_fg="$panel_color_fg"
+ fi
+
+ name=" $(hc attr "clients.$client.title") "
+ name_width=$(xftwidth "$panel_font" "$name")
+ name_offset=$(( name_offset_interval * index ))
+
+ printf "^pa(%s)^bg(%s)^fg(%s)^ca(1,%s)%s^ca()" \
+ "$name_offset" \
+ "$panel_color_bg" \
+ "$color_fg" \
+ "herbstclient jumpto '$client'" \
+ "$name"
+
+ index=$(( index + 1 ))
+ done
+
+ # Add a newline
+ printf "\n"
+
+ # Clean up some variables
+ unset clients
+ unset index
+ done
+} | dzen2 -w "$monitor_width" -x "$panel_offset_x" -y "$panel_offset_y" -fn "$panel_font" -h "$panel_height" \
+ -e "button3=;button4=exec:$hc_quoted use_index -1;button5=exec:$hc_quoted use_index +1" \
+ -ta l -bg "$panel_color_bg" -fg "$panel_color_fg"
diff --git a/.config/herbstluftwm/panel.sh b/.config/herbstluftwm/panel-top.sh
index 5b1deb0..536f674 100755
--- a/.config/herbstluftwm/panel.sh
+++ b/.config/herbstluftwm/panel-top.sh
@@ -17,8 +17,8 @@ fi
x=${geometry[0]}
y=${geometry[1]}
panel_width=${geometry[2]}
-panel_height=16
-font="-*-fixed-medium-*-*-*-12-*-*-*-*-*-*-*"
+panel_height=21
+font="Liberation Mono:size=9"
bgcolor=$(hc get frame_border_normal_color)
selbg=$(hc get window_border_active_color)
selfg='#101010'
@@ -26,16 +26,17 @@ selfg='#101010'
####
# Try to find textwidth binary.
# In e.g. Ubuntu, this is named dzen2-textwidth.
-if which textwidth &> /dev/null ; then
- textwidth="textwidth";
-elif which dzen2-textwidth &> /dev/null ; then
- textwidth="dzen2-textwidth";
-elif which xftwidth &> /dev/null ; then # For guix
- textwidth="xtfwidth";
+if which xftwidth > /dev/null
+then
+ textwidth=xftwidth
+elif which textwidth > /dev/null
+then
+ textwidth="textwidth";
else
- echo "This script requires the textwidth tool of the dzen2 project."
- exit 1
+ echo "This script requires the textwidth tool of the dzen2 project."
+ exit 1
fi
+
####
# true if we are using the svn version of dzen2
# depending on version/distribution, this seems to have version strings like
@@ -60,8 +61,6 @@ else
}
fi
-hc pad $monitor $panel_height
-
{
### Event generator ###
# based on different input data (mpc, date, hlwm hooks, ...) this generates events, formed like this:
@@ -184,6 +183,6 @@ hc pad $monitor $panel_height
# After the data is gathered and processed, the output of the previous block
# gets piped to dzen2.
-} 2> /dev/null | dzen2 -w $panel_width -x $x -y $y -fn "$font" -h $panel_height \
+} | dzen2 -w $panel_width -x $x -y $y -fn "$font" -h $panel_height \
-e "button3=;button4=exec:$hc_quoted use_index -1;button5=exec:$hc_quoted use_index +1" \
-ta l -bg "$bgcolor" -fg '#efefef'