diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix index f4f67d36a..2fbbfe370 100644 --- a/modules/lib/maintainers.nix +++ b/modules/lib/maintainers.nix @@ -679,4 +679,10 @@ github = "folliehiyuki"; githubId = 67634026; }; + "3ulalia" = { + name = "Eulalia del Sol"; + email = "3ulalia@proton.me"; + github = "3ulalia"; + githubId = "179992797"; + }; } diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 0f89efb5f..37d3c65d8 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -2100,7 +2100,18 @@ in { message = '' A new module is available: 'programs.jqp'. - A TUI playground for experimentingn with `jq`. + A TUI playground for experimenting with `jq`. + ''; + } + + { + time = "2025-02-22T16:46:56+00:00"; + condition = hostPlatform.isLinux; + message = '' + A new module is available: 'services.wpaperd'. + + This replaces the existing module, 'programs.wpaperd', and adds a + systemd service to ensure its execution. ''; } ]; diff --git a/modules/modules.nix b/modules/modules.nix index 761589449..ef357bd3a 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -273,7 +273,6 @@ let ./programs/wezterm.nix ./programs/wlogout.nix ./programs/wofi.nix - ./programs/wpaperd.nix ./programs/xmobar.nix ./programs/xplr.nix ./programs/yambar.nix @@ -425,6 +424,7 @@ let ./services/wlsunset.nix ./services/wluma.nix ./services/wob.nix + ./services/wpaperd.nix ./services/xcape.nix ./services/xembed-sni-proxy.nix ./services/xidlehook.nix diff --git a/modules/programs/wpaperd.nix b/modules/programs/wpaperd.nix deleted file mode 100644 index 655024a06..000000000 --- a/modules/programs/wpaperd.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; - -let - cfg = config.programs.wpaperd; - tomlFormat = pkgs.formats.toml { }; -in { - meta.maintainers = [ hm.maintainers.Avimitin ]; - - options.programs.wpaperd = { - enable = mkEnableOption "wpaperd"; - - package = mkPackageOption pkgs "wpaperd" { }; - - settings = mkOption { - type = tomlFormat.type; - default = { }; - example = literalExpression '' - { - eDP-1 = { - path = "/home/foo/Pictures/Wallpaper"; - apply-shadow = true; - }; - DP-2 = { - path = "/home/foo/Pictures/Anime"; - sorting = "descending"; - }; - } - ''; - description = '' - Configuration written to - {file}`$XDG_CONFIG_HOME/wpaperd/wallpaper.toml`. - See - for the full list of options. - ''; - }; - }; - - config = mkIf cfg.enable { - home.packages = [ cfg.package ]; - - xdg.configFile = { - "wpaperd/wallpaper.toml" = mkIf (cfg.settings != { }) { - source = tomlFormat.generate "wpaperd-wallpaper" cfg.settings; - }; - }; - }; -} diff --git a/modules/services/wpaperd.nix b/modules/services/wpaperd.nix new file mode 100644 index 000000000..120cb370c --- /dev/null +++ b/modules/services/wpaperd.nix @@ -0,0 +1,84 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.services.wpaperd; + tomlFormat = pkgs.formats.toml { }; + inherit (lib) mkRenamedOptionModule mkIf; +in { + meta.maintainers = [ lib.hm.maintainers."3ulalia" ]; + + imports = [ + (mkRenamedOptionModule # \ + [ "programs" "wpaperd" "enable" ] # \ + [ "services" "wpaperd" "enable" ]) + (mkRenamedOptionModule # \ + [ "programs" "wpaperd" "package" ] # \ + [ "services" "wpaperd" "package" ]) + (mkRenamedOptionModule # \ + [ "programs" "wpaperd" "settings" ] # \ + [ "services" "wpaperd" "settings" ]) + ]; + + options.services.wpaperd = { + enable = lib.mkEnableOption "wpaperd"; + + package = lib.mkPackageOption pkgs "wpaperd" { }; + + settings = lib.mkOption { + type = tomlFormat.type; + default = { }; + example = lib.literalExpression '' + { + eDP-1 = { + path = "/home/foo/Pictures/Wallpaper"; + apply-shadow = true; + }; + DP-2 = { + path = "/home/foo/Pictures/Anime"; + sorting = "descending"; + }; + } + ''; + description = '' + Configuration written to + {file}`$XDG_CONFIG_HOME/wpaperd/wallpaper.toml`. + See + for the full list of options. + ''; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "services.wpaperd" pkgs + lib.platforms.linux) + ]; + + home.packages = [ cfg.package ]; + + xdg.configFile = { + "wpaperd/wallpaper.toml" = mkIf (cfg.settings != { }) { + source = tomlFormat.generate "wpaperd-wallpaper" cfg.settings; + }; + }; + + systemd.user.services.wpaperd = { + Install = { WantedBy = [ config.wayland.systemd.target ]; }; + + Unit = { + ConditionEnvironment = "WAYLAND_DISPLAY"; + Description = "wpaperd"; + PartOf = [ config.wayland.systemd.target ]; + After = [ config.wayland.systemd.target ]; + X-Restart-Triggers = + [ "${config.xdg.configFile."wpaperd/wallpaper.toml".source}" ]; + }; + + Service = { + ExecStart = "${lib.getExe cfg.package}"; + Restart = "always"; + RestartSec = "10"; + }; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 6d3dbfd99..d9686209f 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -317,7 +317,6 @@ in import nmtSrc { ./modules/programs/waybar ./modules/programs/wlogout ./modules/programs/wofi - ./modules/programs/wpaperd ./modules/programs/xmobar ./modules/programs/yambar ./modules/programs/yt-dlp @@ -395,6 +394,7 @@ in import nmtSrc { ./modules/services/window-managers/wayfire ./modules/services/wlsunset ./modules/services/wob + ./modules/services/wpaperd ./modules/services/xsettingsd ./modules/services/yubikey-agent ./modules/systemd diff --git a/tests/modules/programs/wpaperd/default.nix b/tests/modules/services/wpaperd/default.nix similarity index 100% rename from tests/modules/programs/wpaperd/default.nix rename to tests/modules/services/wpaperd/default.nix diff --git a/tests/modules/programs/wpaperd/wpaperd-example-settings.nix b/tests/modules/services/wpaperd/wpaperd-example-settings.nix similarity index 94% rename from tests/modules/programs/wpaperd/wpaperd-example-settings.nix rename to tests/modules/services/wpaperd/wpaperd-example-settings.nix index a10a2eac3..30cb0ffc3 100644 --- a/tests/modules/programs/wpaperd/wpaperd-example-settings.nix +++ b/tests/modules/services/wpaperd/wpaperd-example-settings.nix @@ -1,5 +1,5 @@ { - programs.wpaperd = { + services.wpaperd = { enable = true; settings = { eDP-1 = { @@ -9,6 +9,7 @@ DP-2 = { path = "/home/foo/Pictures/Anime"; sorting = "descending"; + }; }; }; diff --git a/tests/modules/programs/wpaperd/wpaperd-expected-settings.toml b/tests/modules/services/wpaperd/wpaperd-expected-settings.toml similarity index 100% rename from tests/modules/programs/wpaperd/wpaperd-expected-settings.toml rename to tests/modules/services/wpaperd/wpaperd-expected-settings.toml