Author: Kyle Fuller <kyle@fuller.li> 2024-04-06 22:13:51 +0100 +0100
Committer: Kyle Fuller <kyle@fuller.li> 2024-04-07 10:40:36 +0100 +0100
Commit: 5bfbebc450e3ebd3065c91226efbefaad1f0e4ba
Parent: e3acdd80b7f5a16eb020f190445c9eecd238670d
feat(bspwm): add a scratchpad terminal
diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc
index 779fe48f175170a593e3a0fb67fcac1aac5f49ff..8dfeb6fb991a590150e2382c19e1c48d16334ff7 100755
--- a/.config/bspwm/bspwmrc
+++ b/.config/bspwm/bspwmrc
@@ -27,3 +27,9 @@ bspc config normal_border_color "#130A20"
bspc config focused_border_color "#D0996E"
bspc rule -a "firefox:Toolkit" state=floating border=off sticky=on rectangle=600x400+3250+1200
+
+if [[ "$primary_resolution" = "1366x"* ]]; then
+ bspc rule -a scratch sticky=on state=floating hidden=on rectangle=1362x250+0+30
+else
+ bspc rule -a scratch sticky=on state=floating hidden=on
+fi
diff --git a/.config/home-manager/home.nix b/.config/home-manager/home.nix
index 06569a279751d71e5d8a7a70330ef1ef5f410923..1db120446f3d8986814de7f004d60fd5966d3c47 100644
--- a/.config/home-manager/home.nix
+++ b/.config/home-manager/home.nix
@@ -165,6 +165,8 @@ "super + {_,shift +} {Left,Down,Up,Right}" = "bspc node -{f,s} {west,south,north,east}";
"super + alt + {Left,Down,Up,Right}" = "bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}";
"super + Tab" = "bspc desktop -f last";
+ "super + grave" = "~/.local/bin/bspc-toggle --class scratch --run \"kitty --class scratch\"";
+
"XF86MonBrightness{Down,Up}" = "${pkgs.brightnessctl}/bin/brightnessctl set {10%-,+10%}";
"XF86Audio{Lower,Raise}Volume" = "${pkgs.pamixer}/bin/pamixer -{d,i} 5";
"XF86AudioMute" = "${pkgs.pamixer}/bin/pamixer -t";
diff --git a/.local/bin/bspc-toggle b/.local/bin/bspc-toggle
new file mode 100755
index 0000000000000000000000000000000000000000..afc4c3789d6ea2b34c73c5850f7ebfba219362ba
--- /dev/null
+++ b/.local/bin/bspc-toggle
@@ -0,0 +1,44 @@
+#!/usr/bin/env bash
+#
+# Toggle hidden on an X11 window
+
+usage() {
+ echo $0 --class CLASS
+}
+
+while [[ "$#" -gt 0 ]]; do
+ if [ "$1" = "--class" ]; then
+ class=$2
+ shift
+ elif [ "$1" = "--run" ]; then
+ # command to run, if no windows are found
+ run=$2
+ shift
+ else
+ echo "Invalid argument $1"
+ exit 1
+ fi
+
+ shift
+done
+
+if [ -z "$class" ]; then
+ usage
+ exit 1
+fi
+
+windows=$(xdotool search --classname $class)
+
+if [ -z "$windows" ]; then
+ if [ -n "$run" ]; then
+ $run &
+ sleep 0.3
+ windows=$(xdotool search --classname $class)
+ fi
+fi
+
+for window in $windows; do
+ bspc node $window --flag hidden -f
+done
+
+wait