Files
nixdots/modules/home-manager/bspwm.nix
T
2026-10-19 14:33:45 -05:00

69 lines
2.1 KiB
Nix

{ config, lib, pkgs, ... }:
let
cfg = config.my.bspwm;
in
{
options.my.bspwm.monitors = lib.mkOption {
default = [ ];
description = "Monitors left to right. Empty means single-monitor defaults.";
type = lib.types.listOf (lib.types.submodule {
options = {
name = lib.mkOption { type = lib.types.str; };
xrandr = lib.mkOption {
type = lib.types.str;
default = "--auto";
description = "Arguments for xrandr --output <name>.";
};
desktops = lib.mkOption { type = lib.types.listOf lib.types.str; };
};
});
};
config = {
xdg.configFile."bspwm/bspwmrc" = {
executable = true;
text = ''
#!/bin/sh
${lib.optionalString (cfg.monitors != [ ]) ''
${pkgs.xrandr}/bin/xrandr ${lib.concatMapStringsSep " "
(m: "--output ${m.name} ${m.xrandr}") cfg.monitors}
''}
${if cfg.monitors == [ ]
then "bspc monitor -d 1 2 3 4 5 6 7 8 9"
else lib.concatMapStringsSep "\n"
(m: "bspc monitor ${m.name} -d ${lib.concatStringsSep " " m.desktops}")
cfg.monitors}
# Gaps and borders
bspc config window_gap 10
bspc config border_width 2
bspc config focused_border_color "#7aa2f7"
bspc config normal_border_color "#292e42"
# Layout behaviour
bspc config split_ratio 0.50
bspc config borderless_monocle true
bspc config gapless_monocle true
# Launch polybar
~/.config/polybar/launch.sh
# Wallpapers
[ -x ~/.config/wallpaper/set.sh ] && ~/.config/wallpaper/set.sh
# Picom
${pkgs.procps}/bin/pgrep -x picom >/dev/null || ${pkgs.picom}/bin/picom -b --config $HOME/.config/picom/picom.conf
'';
};
home.activation.reloadBspwm = lib.hm.dag.entryAfter [ "linkGeneration" ] ''
if ${pkgs.procps}/bin/pgrep -x bspwm >/dev/null; then
PATH=${pkgs.bspwm}/bin:$PATH DISPLAY=:0 $HOME/.config/bspwm/bspwmrc \
|| echo "bspwmrc reload failed" >&2
fi
'';
};
}