From d2a0c523f261246b462399dcdab8e7855572b080 Mon Sep 17 00:00:00 2001 From: Adithya Nair Date: Sat, 20 Jul 2024 17:47:35 +0530 Subject: [PATCH] swayimg: add `programs.swayimg` module --- modules/misc/news.nix | 10 ++++++ modules/modules.nix | 1 + modules/programs/swayimg.nix | 39 +++++++++++++++++++++ tests/default.nix | 1 + tests/modules/programs/swayimg/config | 12 +++++++ tests/modules/programs/swayimg/default.nix | 5 +++ tests/modules/programs/swayimg/disabled.nix | 6 ++++ tests/modules/programs/swayimg/enabled.nix | 10 ++++++ tests/modules/programs/swayimg/settings.nix | 27 ++++++++++++++ 9 files changed, 111 insertions(+) create mode 100644 modules/programs/swayimg.nix create mode 100644 tests/modules/programs/swayimg/config create mode 100644 tests/modules/programs/swayimg/default.nix create mode 100644 tests/modules/programs/swayimg/disabled.nix create mode 100644 tests/modules/programs/swayimg/enabled.nix create mode 100644 tests/modules/programs/swayimg/settings.nix diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 801391cc2..a33021119 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1813,6 +1813,16 @@ in { systems" section in the Home Manager mantual for more. ''; } + { + time = "2024-07-20T12:05:41+00:00"; + condition = hostPlatform.isLinux; + message = '' + A new module is available: 'programs.swayimg'. + + Swayimg is a lightweight image viewer for Wayland display servers. + See https://github.com/artemsen/swayimg for more. + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 3b4985083..274402ce9 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -226,6 +226,7 @@ let ./programs/sqls.nix ./programs/ssh.nix ./programs/starship.nix + ./programs/swayimg.nix ./programs/swaylock.nix ./programs/swayr.nix ./programs/taskwarrior.nix diff --git a/modules/programs/swayimg.nix b/modules/programs/swayimg.nix new file mode 100644 index 000000000..dbe89d514 --- /dev/null +++ b/modules/programs/swayimg.nix @@ -0,0 +1,39 @@ +{ pkgs, config, lib, ... }: +let + cfg = config.programs.swayimg; + iniFormat = pkgs.formats.ini { }; +in { + meta.maintainers = [ lib.maintainers.adtya ]; + + options.programs.swayimg = { + enable = lib.mkEnableOption "swayimg"; + package = lib.mkPackageOption pkgs "swayimg" { }; + settings = lib.mkOption { + type = iniFormat.type; + default = { }; + example = lib.literalExpression '' + { + general = { + scale = "optimal"; + fullscreen = "no"; + }; + }; + ''; + description = '' + Configuration written to {file}`$XDG_CONFIG_HOME/swayimg/config`. See + {manpage}`swayimgrc(5)` for a list of available options. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "programs.swayimg" pkgs + lib.platforms.linux) + ]; + home.packages = [ cfg.package ]; + xdg.configFile."swayimg/config" = lib.mkIf (cfg.settings != { }) { + text = lib.generators.toINI { } cfg.settings; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 3271d3052..9c597fab8 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -216,6 +216,7 @@ in import nmtSrc { ./modules/programs/rbw ./modules/programs/rofi ./modules/programs/rofi-pass + ./modules/programs/swayimg ./modules/programs/swaylock ./modules/programs/swayr ./modules/programs/terminator diff --git a/tests/modules/programs/swayimg/config b/tests/modules/programs/swayimg/config new file mode 100644 index 000000000..22f59ef0d --- /dev/null +++ b/tests/modules/programs/swayimg/config @@ -0,0 +1,12 @@ +[font] +name=monospace +size=14 + +[general] +antialiasing=no +fixed=yes +fullscreen=no +position=parent +scale=optimal +size=parent +transparency=grid diff --git a/tests/modules/programs/swayimg/default.nix b/tests/modules/programs/swayimg/default.nix new file mode 100644 index 000000000..ccd386405 --- /dev/null +++ b/tests/modules/programs/swayimg/default.nix @@ -0,0 +1,5 @@ +{ + swayimg-disabled = import ./disabled.nix; + swayimg-enabled = import ./enabled.nix; + swayimg-settings = import ./settings.nix; +} diff --git a/tests/modules/programs/swayimg/disabled.nix b/tests/modules/programs/swayimg/disabled.nix new file mode 100644 index 000000000..e1283a88f --- /dev/null +++ b/tests/modules/programs/swayimg/disabled.nix @@ -0,0 +1,6 @@ +{ ... }: { + + nmt.script = '' + assertPathNotExists home-files/.config/swayimg/config + ''; +} diff --git a/tests/modules/programs/swayimg/enabled.nix b/tests/modules/programs/swayimg/enabled.nix new file mode 100644 index 000000000..35bfab898 --- /dev/null +++ b/tests/modules/programs/swayimg/enabled.nix @@ -0,0 +1,10 @@ +{ config, ... }: { + programs.swayimg = { + enable = true; + package = config.lib.test.mkStubPackage { }; + }; + + nmt.script = '' + assertPathNotExists home-files/.config/swayimg/config + ''; +} diff --git a/tests/modules/programs/swayimg/settings.nix b/tests/modules/programs/swayimg/settings.nix new file mode 100644 index 000000000..90b1aaa76 --- /dev/null +++ b/tests/modules/programs/swayimg/settings.nix @@ -0,0 +1,27 @@ +{ config, ... }: { + programs.swayimg = { + enable = true; + package = config.lib.test.mkStubPackage { }; + settings = { + general = { + scale = "optimal"; + fullscreen = "no"; + antialiasing = "no"; + fixed = "yes"; + transparency = "grid"; + position = "parent"; + size = "parent"; + }; + font = { + name = "monospace"; + size = 14; + }; + }; + }; + + nmt.script = let homeConfig = "home-files/.config/swayimg/config"; + in '' + assertFileExists ${homeConfig} + assertFileContents ${homeConfig} ${./config} + ''; +}