From accd450fcdbb1e1018cd8701b4980b36d57f28f0 Mon Sep 17 00:00:00 2001 From: oneorseveralcats <170012754+oneorseveralcats@users.noreply.github.com> Date: Thu, 26 Mar 2026 18:00:30 -0400 Subject: [PATCH] waybar: allow multiple systemd targets --- modules/programs/waybar.nix | 34 ++++++++++--------- .../systemd-with-graphical-session-target.nix | 2 +- ...temd-with-graphical-session-target.service | 4 +-- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/modules/programs/waybar.nix b/modules/programs/waybar.nix index 9af2b900..a7273479 100644 --- a/modules/programs/waybar.nix +++ b/modules/programs/waybar.nix @@ -168,6 +168,14 @@ in khaneliman ]; + imports = [ + (lib.mkChangedOptionModule + [ "programs" "waybar" "systemd" "target" ] + [ "programs" "waybar" "systemd" "targets" ] + (config: lib.toList (lib.getAttrFromPath [ "programs" "waybar" "systemd" "target" ] config)) + ) + ]; + options.programs.waybar = with lib.types; { enable = mkEnableOption "Waybar"; @@ -227,15 +235,15 @@ in ''; }; - target = mkOption { - type = str; - default = config.wayland.systemd.target; - defaultText = literalExpression "config.wayland.systemd.target"; - example = "sway-session.target"; + targets = mkOption { + type = with lib.types; listOf str; + default = [ config.wayland.systemd.target ]; + defaultText = literalExpression "[ config.wayland.systemd.target ]"; + example = [ "sway-session.target" ]; description = '' - The systemd target that will automatically start the Waybar service. + The systemd targets that will automatically start the Waybar service. - When setting this value to `"sway-session.target"`, + When setting this value to `[ "sway-session.target" ]`, make sure to also enable {option}`wayland.windowManager.sway.systemd.enable`, otherwise the service may never be started. ''; @@ -340,11 +348,8 @@ in Unit = { Description = "Highly customizable Wayland bar for Sway and Wlroots based compositors."; Documentation = "https://github.com/Alexays/Waybar/wiki"; - PartOf = [ - cfg.systemd.target - "tray.target" - ]; - After = [ cfg.systemd.target ]; + PartOf = [ "tray.target" ] ++ cfg.systemd.targets; + After = cfg.systemd.targets; ConditionEnvironment = "WAYLAND_DISPLAY"; X-Reload-Triggers = optional (settings != [ ]) "${config.xdg.configFile."waybar/config".source}" @@ -359,10 +364,7 @@ in Restart = "on-failure"; }; - Install.WantedBy = [ - cfg.systemd.target - "tray.target" - ]; + Install.WantedBy = [ "tray.target" ] ++ cfg.systemd.targets; }; }) ]); diff --git a/tests/modules/programs/waybar/systemd-with-graphical-session-target.nix b/tests/modules/programs/waybar/systemd-with-graphical-session-target.nix index 4beddf41..93fecb6e 100644 --- a/tests/modules/programs/waybar/systemd-with-graphical-session-target.nix +++ b/tests/modules/programs/waybar/systemd-with-graphical-session-target.nix @@ -8,7 +8,7 @@ package = config.lib.test.mkStubPackage { outPath = "@waybar@"; }; enable = true; systemd.enable = true; - systemd.target = "sway-session.target"; + systemd.targets = [ "sway-session.target" ]; }; nmt.script = '' diff --git a/tests/modules/programs/waybar/systemd-with-graphical-session-target.service b/tests/modules/programs/waybar/systemd-with-graphical-session-target.service index f77155bb..a9fec454 100644 --- a/tests/modules/programs/waybar/systemd-with-graphical-session-target.service +++ b/tests/modules/programs/waybar/systemd-with-graphical-session-target.service @@ -1,6 +1,6 @@ [Install] -WantedBy=sway-session.target WantedBy=tray.target +WantedBy=sway-session.target [Service] ExecReload=/nix/store/00000000000000000000000000000000-coreutils/bin/kill -SIGUSR2 $MAINPID @@ -13,5 +13,5 @@ After=sway-session.target ConditionEnvironment=WAYLAND_DISPLAY Description=Highly customizable Wayland bar for Sway and Wlroots based compositors. Documentation=https://github.com/Alexays/Waybar/wiki -PartOf=sway-session.target PartOf=tray.target +PartOf=sway-session.target