From 145ead604f85c1dd66b5faf203f11eb4c456d13f Mon Sep 17 00:00:00 2001
From: Salt <rehashedsalt@cock.li>
Date: Sun, 31 May 2020 18:01:57 -0500
Subject: [PATCH] bspwm: Add funky monitor allocation back

---
 .config/bspwm/bspwmrc | 44 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 42 insertions(+), 2 deletions(-)
 mode change 100644 => 100755 .config/bspwm/bspwmrc

diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc
old mode 100644
new mode 100755
index 0198baf1..afe08b07
--- a/.config/bspwm/bspwmrc
+++ b/.config/bspwm/bspwmrc
@@ -1,9 +1,49 @@
-#!/usr/bin/env bash
+#!/bin/bash
 #
 # bspwmrc
 # bspwm configuration file
 #
 
+## Monitor allocation
+# Honestly pretty complex
+setmon() {
+	desktops_total=8
+	desktops_primary=6
+	desktops_secondary=$(( desktops_total - desktops_primary ))
+
+	monitor_primary="$(xrandr -q | awk '/primary/{print $1}')"
+	monitors_secondary=($(xrandr -q | grep ' connected' | grep -v 'primary' | awk '{print $1}'))
+	# Ensure we have enough for every monitor
+	if (( desktops_secondary < ${#monitors_secondary[@]} )); then
+		echo "Adding more desktops to match connected monitors"
+		desktops_secondary=${#monitors_secondary[@]}
+		desktops_total=$(( desktops_secondary + desktops_primary ))
+	fi
+	if (( ${#monitors_secondary[@]} == 0 )); then
+		echo "Only one monitor allocated"
+		layout=$(seq --separator=" " 1 $desktops_total)
+		echo "Setting layout $layout"
+		bspc monitor $monitor_primary -d $layout
+	else
+		echo "${#monitors_secondary[@]} monitors connected"
+		deskpermon=$(( desktops_secondary / ${#monitors_secondary[@]} ))
+		layout=$(seq --separator=" " 1 $desktops_primary)
+		echo "Setting primary layout $layout"
+		bspc monitor $monitor_primary -d $layout
+
+		for m in $(seq 0 $(( ${#monitors_secondary[@]} - 1 ))); do
+			layout=$(seq --separator=" " \
+				$(( 1 + m + desktops_primary )) \
+				${#monitors_secondary[@]} \
+				"$desktops_total" \
+				)
+			echo "Setting layout for ${monitors_secondary[$m]} to $layout"
+			bspc monitor ${monitors_secondary[$m]} -d $layout
+		done
+	fi
+}
+setmon
+
 ## Behavior
 # Tiling behavior
 bspc config split_ratio			0.50
@@ -12,7 +52,7 @@ bspc config remove_unplugged_monitors	true
 
 # Pointer behavior
 bspc config click_to_focus		any
-bspc config pointer_follows_focus	false
+bspc config pointer_follows_focus	true
 bspc config pointer_follows_monitor	true
 bspc config pointer_modifier		mod1
 bspc config pointer_action1		move #LMB