From 7fb5e95b0bf40a74b839c6ec56694a825b28b2d5 Mon Sep 17 00:00:00 2001 From: y3 <30006414+yaaaarn@users.noreply.github.com> Date: Thu, 30 Jul 2026 05:03:48 +0100 Subject: [PATCH] wbg: add module --- .../misc/news/2026/07/2026-07-29_03-27-10.nix | 9 +++ modules/services/wbg.nix | 71 +++++++++++++++++++ tests/modules/services/wbg/basic.nix | 14 ++++ tests/modules/services/wbg/basic.service | 13 ++++ tests/modules/services/wbg/default.nix | 7 ++ tests/modules/services/wbg/extra-args.nix | 18 +++++ tests/modules/services/wbg/extra-args.service | 13 ++++ tests/modules/services/wbg/stretch.nix | 15 ++++ tests/modules/services/wbg/stretch.service | 13 ++++ 9 files changed, 173 insertions(+) create mode 100644 modules/misc/news/2026/07/2026-07-29_03-27-10.nix create mode 100644 modules/services/wbg.nix create mode 100644 tests/modules/services/wbg/basic.nix create mode 100644 tests/modules/services/wbg/basic.service create mode 100644 tests/modules/services/wbg/default.nix create mode 100644 tests/modules/services/wbg/extra-args.nix create mode 100644 tests/modules/services/wbg/extra-args.service create mode 100644 tests/modules/services/wbg/stretch.nix create mode 100644 tests/modules/services/wbg/stretch.service diff --git a/modules/misc/news/2026/07/2026-07-29_03-27-10.nix b/modules/misc/news/2026/07/2026-07-29_03-27-10.nix new file mode 100644 index 000000000000..33c7f031b5bf --- /dev/null +++ b/modules/misc/news/2026/07/2026-07-29_03-27-10.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: { + time = "2026-07-29T02:27:10+00:00"; + condition = pkgs.stdenv.hostPlatform.isLinux; + message = '' + A new module is available: 'services.wbg'. + + wbg is a super simple wallpaper application for Wayland compositors. + ''; +} diff --git a/modules/services/wbg.nix b/modules/services/wbg.nix new file mode 100644 index 000000000000..cea37967a1e4 --- /dev/null +++ b/modules/services/wbg.nix @@ -0,0 +1,71 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + inherit (lib) + mkEnableOption + mkOption + mkIf + getExe + optional + escapeShellArgs + mkPackageOption + types + ; + + cfg = config.services.wbg; +in +{ + meta.maintainers = with lib.maintainers; [ yarn ]; + + options.services.wbg = { + enable = mkEnableOption "wbg, a super simple wallpaper application for Wayland compositors"; + package = mkPackageOption pkgs "wbg" { }; + + stretch = mkOption { + type = types.bool; + default = false; + description = "Whether to stretch the wallpaper to fill the screen."; + }; + + image = mkOption { + type = types.either types.path types.str; + description = "Path to the wallpaper image."; + }; + + extraArgs = mkOption { + type = types.listOf types.str; + default = [ ]; + description = "Extra command-line arguments to pass to wbg."; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + systemd.user.services.wbg = { + Unit = { + ConditionEnvironment = "WAYLAND_DISPLAY"; + Description = "wbg"; + After = [ config.wayland.systemd.target ]; + PartOf = [ config.wayland.systemd.target ]; + }; + + Service = { + ExecStart = escapeShellArgs ( + [ (getExe cfg.package) ] ++ optional cfg.stretch "-s" ++ [ (toString cfg.image) ] ++ cfg.extraArgs + ); + Restart = "on-failure"; + RestartSec = 10; + }; + + Install = { + WantedBy = [ config.wayland.systemd.target ]; + }; + }; + }; +} diff --git a/tests/modules/services/wbg/basic.nix b/tests/modules/services/wbg/basic.nix new file mode 100644 index 000000000000..642c2b640c13 --- /dev/null +++ b/tests/modules/services/wbg/basic.nix @@ -0,0 +1,14 @@ +_: + +{ + services.wbg = { + enable = true; + image = "/tmp/wallpaper.png"; + }; + + nmt.script = '' + serviceFile=home-files/.config/systemd/user/wbg.service + assertFileExists $serviceFile + assertFileContent $serviceFile ${./basic.service} + ''; +} diff --git a/tests/modules/services/wbg/basic.service b/tests/modules/services/wbg/basic.service new file mode 100644 index 000000000000..c4e58106146b --- /dev/null +++ b/tests/modules/services/wbg/basic.service @@ -0,0 +1,13 @@ +[Install] +WantedBy=graphical-session.target + +[Service] +ExecStart=@wbg@/bin/wbg /tmp/wallpaper.png +Restart=on-failure +RestartSec=10 + +[Unit] +After=graphical-session.target +ConditionEnvironment=WAYLAND_DISPLAY +Description=wbg +PartOf=graphical-session.target diff --git a/tests/modules/services/wbg/default.nix b/tests/modules/services/wbg/default.nix new file mode 100644 index 000000000000..73ee19df40ee --- /dev/null +++ b/tests/modules/services/wbg/default.nix @@ -0,0 +1,7 @@ +{ lib, pkgs, ... }: + +lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux { + wbg-basic = ./basic.nix; + wbg-stretch = ./stretch.nix; + wbg-extra-args = ./extra-args.nix; +} diff --git a/tests/modules/services/wbg/extra-args.nix b/tests/modules/services/wbg/extra-args.nix new file mode 100644 index 000000000000..f711e5801ceb --- /dev/null +++ b/tests/modules/services/wbg/extra-args.nix @@ -0,0 +1,18 @@ +_: + +{ + services.wbg = { + enable = true; + image = "/tmp/wallpaper.png"; + extraArgs = [ + "-d" + "2" + ]; + }; + + nmt.script = '' + serviceFile=home-files/.config/systemd/user/wbg.service + assertFileExists $serviceFile + assertFileContent $serviceFile ${./extra-args.service} + ''; +} diff --git a/tests/modules/services/wbg/extra-args.service b/tests/modules/services/wbg/extra-args.service new file mode 100644 index 000000000000..32a05f5c5ee2 --- /dev/null +++ b/tests/modules/services/wbg/extra-args.service @@ -0,0 +1,13 @@ +[Install] +WantedBy=graphical-session.target + +[Service] +ExecStart=@wbg@/bin/wbg /tmp/wallpaper.png -d 2 +Restart=on-failure +RestartSec=10 + +[Unit] +After=graphical-session.target +ConditionEnvironment=WAYLAND_DISPLAY +Description=wbg +PartOf=graphical-session.target diff --git a/tests/modules/services/wbg/stretch.nix b/tests/modules/services/wbg/stretch.nix new file mode 100644 index 000000000000..0a92c175fc7c --- /dev/null +++ b/tests/modules/services/wbg/stretch.nix @@ -0,0 +1,15 @@ +_: + +{ + services.wbg = { + enable = true; + image = "/tmp/wallpaper.png"; + stretch = true; + }; + + nmt.script = '' + serviceFile=home-files/.config/systemd/user/wbg.service + assertFileExists $serviceFile + assertFileContent $serviceFile ${./stretch.service} + ''; +} diff --git a/tests/modules/services/wbg/stretch.service b/tests/modules/services/wbg/stretch.service new file mode 100644 index 000000000000..0979531938df --- /dev/null +++ b/tests/modules/services/wbg/stretch.service @@ -0,0 +1,13 @@ +[Install] +WantedBy=graphical-session.target + +[Service] +ExecStart=@wbg@/bin/wbg -s /tmp/wallpaper.png +Restart=on-failure +RestartSec=10 + +[Unit] +After=graphical-session.target +ConditionEnvironment=WAYLAND_DISPLAY +Description=wbg +PartOf=graphical-session.target