From 22a36aa709de7dd42b562a433b9cefecf104a6ee Mon Sep 17 00:00:00 2001 From: Yiheng He Date: Wed, 19 Mar 2025 03:32:10 +0800 Subject: [PATCH] swww: add swww service module for swww-daemon (#6543) --- modules/lib/maintainers.nix | 8 ++++ modules/modules.nix | 1 + modules/services/swww.nix | 37 +++++++++++++++++++ tests/default.nix | 1 + tests/modules/services/swww/default.nix | 1 + .../swww/swww-graphical-session-target.nix | 11 ++++++ .../swww-graphical-session-target.service | 13 +++++++ 7 files changed, 72 insertions(+) create mode 100644 modules/services/swww.nix create mode 100644 tests/modules/services/swww/default.nix create mode 100644 tests/modules/services/swww/swww-graphical-session-target.nix create mode 100644 tests/modules/services/swww/swww-graphical-session-target.service diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix index e70fcce1d..05d82c72e 100644 --- a/modules/lib/maintainers.nix +++ b/modules/lib/maintainers.nix @@ -130,6 +130,14 @@ githubId = "56848082"; name = "Henri Sota"; }; + hey2022 = { + name = "Yiheng He"; + email = "yiheng.he@proton.me"; + matrix = "@hey2022:matrix.org"; + github = "hey2022"; + keys = + [{ fingerprint = "128E 09C0 6F73 D678 6BB5 E551 5EA5 3C75 F7BE 3EDE"; }]; + }; jack5079 = { name = "Jack W."; email = "nix@jack.cab"; diff --git a/modules/modules.nix b/modules/modules.nix index 9226ed63b..eef32d196 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -394,6 +394,7 @@ let ./services/swayidle.nix ./services/swaync.nix ./services/swayosd.nix + ./services/swww.nix ./services/sxhkd.nix ./services/syncthing.nix ./services/systembus-notify.nix diff --git a/modules/services/swww.nix b/modules/services/swww.nix new file mode 100644 index 000000000..ae952d390 --- /dev/null +++ b/modules/services/swww.nix @@ -0,0 +1,37 @@ +{ config, lib, pkgs, ... }: +let cfg = config.services.swww; +in { + meta.maintainers = with lib.hm.maintainers; [ hey2022 ]; + + options.services.swww = { + enable = + lib.mkEnableOption "swww, a Solution to your Wayland Wallpaper Woes"; + package = lib.mkPackageOption pkgs "swww" { }; + }; + + config = lib.mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "services.swww" pkgs + lib.platforms.linux) + ]; + + home.packages = [ cfg.package ]; + + systemd.user.services.swww = { + Install = { WantedBy = [ config.wayland.systemd.target ]; }; + + Unit = { + ConditionEnvironment = "WAYLAND_DISPLAY"; + Description = "swww-daemon"; + After = [ config.wayland.systemd.target ]; + PartOf = [ config.wayland.systemd.target ]; + }; + + Service = { + ExecStart = "${lib.getExe' cfg.package "swww-daemon"}"; + Restart = "always"; + RestartSec = 10; + }; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 3cdb0621d..0949936a5 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -528,6 +528,7 @@ in import nmtSrc { ./modules/services/swayidle ./modules/services/swaync ./modules/services/swayosd + ./modules/services/swww ./modules/services/sxhkd ./modules/services/syncthing/linux ./modules/services/tldr-update diff --git a/tests/modules/services/swww/default.nix b/tests/modules/services/swww/default.nix new file mode 100644 index 000000000..ce316acbc --- /dev/null +++ b/tests/modules/services/swww/default.nix @@ -0,0 +1 @@ +{ swww-graphical-session-target = ./swww-graphical-session-target.nix; } diff --git a/tests/modules/services/swww/swww-graphical-session-target.nix b/tests/modules/services/swww/swww-graphical-session-target.nix new file mode 100644 index 000000000..b21e0b7b4 --- /dev/null +++ b/tests/modules/services/swww/swww-graphical-session-target.nix @@ -0,0 +1,11 @@ +{ config, ... }: { + services.swww = { + enable = true; + package = config.lib.test.mkStubPackage { outPath = "@swww@"; }; + }; + + nmt.script = '' + serviceFile=home-files/.config/systemd/user/swww.service + assertFileContent $serviceFile ${./swww-graphical-session-target.service} + ''; +} diff --git a/tests/modules/services/swww/swww-graphical-session-target.service b/tests/modules/services/swww/swww-graphical-session-target.service new file mode 100644 index 000000000..4c219ff7e --- /dev/null +++ b/tests/modules/services/swww/swww-graphical-session-target.service @@ -0,0 +1,13 @@ +[Install] +WantedBy=graphical-session.target + +[Service] +ExecStart=@swww@/bin/swww-daemon +Restart=always +RestartSec=10 + +[Unit] +After=graphical-session.target +ConditionEnvironment=WAYLAND_DISPLAY +Description=swww-daemon +PartOf=graphical-session.target