#! /bin/bash # # monitorset.sh # Copyright (C) 2018 salt # # Distributed under terms of the MIT license. # printf "[INFO] Setting up monitors\n" # Get the primary first, to ensure it's the first element monitor_primary=$(xrandr -q | awk '/primary/{print $1}') monitors_secondary=($(xrandr -q | grep ' connected' | grep -v 'primary' | awk '{print $1}')) desktops_total=${BSPWM_DESKTOPS_TOTAL:-8} desktops_primary=${BSPWM_DESKTOPS_PRIMARY:-6} desktops_secondary=$(expr $desktops_total - $desktops_primary) deskpermon=$(expr $desktops_secondary / ${#monitors_secondary[@]}) printf " [INFO] Distributing $desktops_total desktops, $desktops_primary for primary and $desktops_secondary across all secondaries\n" if [[ $(echo ${monitors_secondary:-0}) == "0" ]]; then # We only have one monitor, so give it everything layout=$(seq --separator=" " 1 $desktops_total) printf " [INFO] Found one monitor: $monitor_primary, so giving it layout $layout\n" bspc monitor $monitor_primary -d $layout else # Give the first monitor the first few workspaces layout=$(seq --separator=" " 1 $desktops_primary) printf " [INFO] Giving primary monitor $monitor_primary layout $layout\n" bspc monitor $monitor_primary -d $layout unset layout printf " [INFO] Attempting to put $desktops_secondary desktops across ${#monitors_secondary[@]} monitors, $deskpermon each\n" # Ensure we have enough remaining workspaces for the secondary monitors if [ $desktops_secondary -lt ${#monitors_secondary[@]} ]; then printf " [WARN] Configuration would leave some monitors without workspaces! Adding more\n" desktops_secondary=${#monitors_secondary[@]} deskpermon=1 printf " [INFO] Remaining workspaces set to $desktops_secondary\n" fi # And distribute the rest to the secondaries for m in $(seq 0 $(expr ${#monitors_secondary[@]} - 1)); do layout=$(seq --separator=" " $(expr 1 + $m + $desktops_primary) ${#monitors_secondary[@]} $(expr $desktops_total )) printf " [INFO] Giving monitor $m (${monitors_secondary[$m]}) layout \"$layout\"\n" bspc monitor ${monitors_secondary[$m]} -d $layout done fi unset monitor_primary unset monitors_secondary unset desktops_total unset desktops_primary unset desktops_secondary unset deskpermon