diff --git a/modules/misc/news.nix b/modules/misc/news.nix index bef867bb..e53f1ae3 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -1703,6 +1703,17 @@ in { one place. See https://github.com/glanceapp/glance 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 dbeebfbf..b544ed7b 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -221,6 +221,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 00000000..dbe89d51 --- /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 28ce4f64..eb6a4e0a 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -209,6 +209,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 00000000..22f59ef0 --- /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 00000000..ccd38640 --- /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 00000000..e1283a88 --- /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 00000000..35bfab89 --- /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 00000000..90b1aaa7 --- /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} + ''; +}