nix config

bspswallow

+76 -1
+71
home/profiles/desktop/bin/bspswallow
··· 1 + #!/bin/sh 2 + 3 + # Get class of a wid 4 + get_class() { 5 + id=$1 6 + if [ -z "$id" ]; then 7 + echo "" 8 + else 9 + xprop -id "$id" | sed -n \ 10 + -e '/WM_CLASS/s/\( "\)/\n/g; s/[^\n]*\n\([^"]*\)[^\n]*/\1\n/g' \ 11 + -e '/WM_COMMAND/s/[^"]*/\n\n/1; s/\n"//1; s/\n\([^"]*\)".*/\n\1/; /\n/p' | sed '/^$/d' | head -n1 12 + fi 13 + } 14 + 15 + get_pid() { 16 + xprop _NET_WM_PID -id "$1" | awk '/[0-9]+/ {print $3}' 17 + } 18 + 19 + get_ppid() { 20 + ps -o ppid= -p $1 21 + } 22 + 23 + check_swallowing_process() { 24 + pid=$(get_pid $1) 25 + [ -z $pid ] && return 0 26 + gppid=$(get_ppid $(get_ppid $pid)) 27 + grep -i "^$(ps -o cmd= -p $gppid | awk '{print $1}' | sed 's_^.*/__')$" ~/.config/bspwm/terminals && return 0 28 + [ "$(get_ppid "$(get_ppid "$(get_pid "$1")")")" = "$(get_pid "$2")" ] && return 0 || return 1 29 + } 30 + 31 + swallow() { 32 + addedtodesktop=$2 33 + lasttermdesktop=$(bspc query -D -n last) 34 + 35 + swallowerid=$1 36 + swallowingid=$(bspc query -N -n last) 37 + if [ "$addedtodesktop" = "$lasttermdesktop" ] && check_swallowing_process "$swallowerid" "$swallowingid"; then 38 + grep -q "^$(get_class "$swallowerid")$" ~/.config/bspwm/{noswallow, terminals} && return 39 + grep -i "^$(get_class "$swallowingid")$" ~/.config/bspwm/terminals || return 40 + echo "$swallowerid $swallowingid" >> /tmp/swallowids 41 + bspc node "$swallowingid" --flag hidden=on 42 + fi 43 + } 44 + 45 + spit() { 46 + spitterid=$1 47 + spitterdesktop=$2 48 + grep "^$spitterid" /tmp/swallowids || return 49 + spittingid=$(grep "^$spitterid" /tmp/swallowids | head -n1 | awk '{print $2}') 50 + 51 + bspc node "$spittingid" --flag hidden=off 52 + 53 + termdesktop=$(bspc query -D -n "$spittingid") 54 + [ "$termdesktop" = "$spitterdesktop" ] || bspc node "$spittingid" -d "$spitterdesktop" 55 + 56 + bspc node "$spittingid" -f 57 + sed -i "/^$spitterid/d" /tmp/swallowids 58 + } 59 + 60 + bspc subscribe node_add node_remove | while read -r event 61 + do 62 + case $(echo "$event" | awk '{ print $1 }') in 63 + node_add) 64 + swallow $(echo "$event" | awk '{print $5 " " $3}') 65 + ;; 66 + node_remove) 67 + spit $(echo "$event" | awk '{print $4 " " $3}') 68 + ;; 69 + esac 70 + done 71 +
+4 -1
home/profiles/desktop/bspwmrc
··· 39 39 bspc rule -a Firefox state=fullscreen 40 40 bspc rule -a feh state=fullscreen 41 41 42 + # bspswallow 43 + pgrep bspswallow || bspswallow & 44 + 42 45 # polybar 43 - for file in $XDG_CONFIG_HOME/bspwm/rc.d/*; do 46 + for file in "$XDG_CONFIG_HOME"/bspwm/rc.d/*; do 44 47 source "$file" 45 48 done
+1
home/profiles/desktop/default.nix
··· 116 116 ".local/bin/powermenu".source = ./bin/powermenu; 117 117 ".local/bin/screenshot".source = ./bin/screenshot; 118 118 ".local/bin/mpv-ify".source = ./bin/mpv-ify; 119 + ".local/bin/bspwallow".source = ./bin/bspswallow; 119 120 ".config/eww/eww.yuck".source = ./eww/eww.yuck; 120 121 ".config/eww/eww.scss".source = ./eww/eww.scss; 121 122 ".config/eww/widgets.yuck".source = ./eww/widgets.yuck;