dotfiles

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