From 9066e265a220f8299afa60e1689f87efeb40ee10 Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Tue, 4 Aug 2026 15:35:44 +0200 Subject: bspwm: persistent option when creating placement rules for windows --- bspwm/scripts/bspwm/desktops.sh | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/bspwm/scripts/bspwm/desktops.sh b/bspwm/scripts/bspwm/desktops.sh index e94c084..b94d962 100755 --- a/bspwm/scripts/bspwm/desktops.sh +++ b/bspwm/scripts/bspwm/desktops.sh @@ -1,16 +1,33 @@ #!/bin/sh -set -u +set -o nounset #set -e # Execute an application when creating the desktop +# Arguments are : +# - The Dektop label +# - The command to run +# - The window class to match +# - Optionnal : +# "persistent" make the rule persistent instead of one-shot # run_desktop() { name=$1 - application=$2 + application="$2" window_name=$3 bspc node @$name:/ -i - bspc rule --add $window_name --one-shot node=@$name:/ follow=off focus=off + # If the argument is not given, use the empty string as substitution + # FOO="${VARIABLE:-default}" # FOO will be assigned 'default' value if + # VARIABLE not set or null. + case "${4:-}" in + persistent) + # Ensure the rule does not already exists before adding a new persistent one + bspc rule -l | grep ${window_name} || bspc rule --add ${window_name} node=@$name:/ follow=off focus=off + ;; + *) + bspc rule --add $window_name --one-shot node=@$name:/ follow=off focus=off + ;; + esac $application & } @@ -33,7 +50,7 @@ bspc subscribe desktop | while read -r event monitor_id desktop_id name; do bspc monitor -o $(bspc query --names -D | sort -V | tr -s '\n' ' ') case $name in Chat) - run_desktop $name signal-desktop Signal + run_desktop $name signal-desktop "Signal:signal:Signal" persistent ;; Musique) run_desktop $name gmpc Gmpc @@ -45,7 +62,7 @@ bspc subscribe desktop | while read -r event monitor_id desktop_id name; do run_desktop $name thunderbird thunderbird-default ;; Discord) - run_desktop $name discord discord + run_desktop $name discord discord persistent ;; esac ;; -- cgit v1.2.3