diff --git a/modules/programs/yambar.nix b/modules/programs/yambar.nix index f4e0a434a..b5ef2bf7d 100644 --- a/modules/programs/yambar.nix +++ b/modules/programs/yambar.nix @@ -38,6 +38,21 @@ in { See {manpage}`yambar(5)` for options. ''; }; + + systemd.enable = lib.mkEnableOption "yambar systemd integration"; + + systemd.target = lib.mkOption { + type = lib.types.str; + default = "graphical-session.target"; + example = "sway-session.target"; + description = '' + The systemd target that will automatically start the yambar service. + + 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. + ''; + }; }; config = lib.mkIf cfg.enable { @@ -51,5 +66,24 @@ in { xdg.configFile."yambar/config.yml" = lib.mkIf (cfg.settings != { }) { source = yamlFormat.generate "config.yml" cfg.settings; }; + + systemd.user.services.yambar = lib.mkIf cfg.systemd.enable { + Unit = { + Description = "Modular status panel for X11 and Wayland"; + Documentation = "man:yambar"; + PartOf = [ "graphical-session.target" ]; + After = [ "graphical-session-pre.target" ]; + }; + + Service = { + ExecStart = "${cfg.package}/bin/yambar"; + ExecReload = "${pkgs.coreutils}/bin/kill -SIGUSR2 $MAINPID"; + Restart = "on-failure"; + RestartSec = 3; + KillMode = "mixed"; + }; + + Install = { WantedBy = [ cfg.systemd.target ]; }; + }; }; }