more rice stuff
This commit is contained in:
1 parent
3a345929b9
commit
e2d34c6d1e
7 files changed
+156
-45
No files matched your search
@@ -1,34 +1,65 @@
|
||||
{ lib, pkgs, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
cfg = config.my.bspwm;
|
||||
in
|
||||
{
|
||||
xdg.configFile."bspwm/bspwmrc" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#!/bin/sh
|
||||
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; };
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
bspc monitor -d 1 2 3 4 5 6 7 8 9
|
||||
config = {
|
||||
xdg.configFile."bspwm/bspwmrc" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#!/bin/sh
|
||||
|
||||
# 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"
|
||||
${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}
|
||||
|
||||
# Layout behaviour
|
||||
bspc config split_ratio 0.50
|
||||
bspc config borderless_monocle true
|
||||
bspc config gapless_monocle true
|
||||
# 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"
|
||||
|
||||
# Launch polybar
|
||||
~/.config/polybar/launch.sh
|
||||
# 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
|
||||
'';
|
||||
};
|
||||
|
||||
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
|
||||
'';
|
||||
};
|
||||
|
||||
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
|
||||
'';
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
{ lib, pkgs, ... }:
|
||||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
polybar = pkgs.polybar.override { pulseSupport = true; };
|
||||
@@ -18,6 +18,7 @@ in
|
||||
dim = #565f89
|
||||
|
||||
[bar/main]
|
||||
monitor = ''${env:MONITOR:}
|
||||
width = 100%
|
||||
height = 22pt
|
||||
background = ''${colors.background}
|
||||
@@ -36,8 +37,15 @@ in
|
||||
|
||||
tray-position = right
|
||||
|
||||
# Second monitor: same look, no tray, fewer modules (it's narrow when rotated)
|
||||
[bar/secondary]
|
||||
inherit = bar/main
|
||||
modules-right = cpu memory
|
||||
tray-position = none
|
||||
|
||||
[module/bspwm]
|
||||
type = internal/bspwm
|
||||
pin-workspaces = true
|
||||
label-focused = %name%
|
||||
label-focused-background = ''${colors.primary}
|
||||
label-focused-foreground = ''${colors.background}
|
||||
@@ -73,19 +81,23 @@ in
|
||||
label-muted-foreground = ''${colors.dim}
|
||||
'';
|
||||
|
||||
# One bar per monitor. The primary monitor gets "main" (with tray), others get "secondary".
|
||||
# If no monitor is marked primary, the first one listed gets "main".
|
||||
xdg.configFile."polybar/launch.sh" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#!/bin/sh
|
||||
${pkgs.procps}/bin/pkill -x polybar
|
||||
while ${pkgs.procps}/bin/pgrep -x polybar >/dev/null; do sleep 0.2; done
|
||||
${pkgs.util-linux}/bin/setsid -f ${polybar}/bin/polybar main
|
||||
|
||||
LIST=$(${polybar}/bin/polybar --list-monitors)
|
||||
PRIMARY=$(echo "$LIST" | ${pkgs.gnugrep}/bin/grep '(primary)' | ${pkgs.coreutils}/bin/cut -d: -f1)
|
||||
[ -z "$PRIMARY" ] && PRIMARY=$(echo "$LIST" | ${pkgs.coreutils}/bin/head -n1 | ${pkgs.coreutils}/bin/cut -d: -f1)
|
||||
|
||||
for m in $(echo "$LIST" | ${pkgs.coreutils}/bin/cut -d: -f1); do
|
||||
if [ "$m" = "$PRIMARY" ]; then bar=main; else bar=secondary; fi
|
||||
MONITOR=$m ${pkgs.util-linux}/bin/setsid -f ${polybar}/bin/polybar $bar
|
||||
done
|
||||
'';
|
||||
};
|
||||
|
||||
# home.activation.reloadPolybar = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
# if ${pkgs.procps}/bin/pgrep -x bspwm >/dev/null; then
|
||||
# DISPLAY=:0 $HOME/.config/polybar/launch.sh || true
|
||||
# fi
|
||||
# '';
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
cfg = config.my.wallpapers;
|
||||
args = lib.concatStringsSep " " (lib.mapAttrsToList
|
||||
(monitor: img: "--output ${monitor} --zoom ${lib.escapeShellArg img}") cfg);
|
||||
in
|
||||
{
|
||||
options.my.wallpapers = lib.mkOption {
|
||||
type = lib.types.attrsOf lib.types.path;
|
||||
default = { };
|
||||
description = "Wallpaper image per monitor output name.";
|
||||
};
|
||||
|
||||
config = lib.mkIf (cfg != { }) {
|
||||
home.packages = [ pkgs.xwallpaper ];
|
||||
|
||||
xdg.configFile."wallpaper/set.sh" = {
|
||||
executable = true;
|
||||
text = ''
|
||||
#!/bin/sh
|
||||
${pkgs.xwallpaper}/bin/xwallpaper ${args}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user