From 1a6f6fb4091a6eb9c3bae8bac6d233f6ee51d489 Mon Sep 17 00:00:00 2001 From: Aguirre Matteo Date: Tue, 2 Sep 2025 10:20:23 -0300 Subject: [PATCH] swappy: add module --- modules/programs/swappy.nix | 61 +++++++++++++++++++ tests/modules/programs/swappy/config | 14 +++++ tests/modules/programs/swappy/default.nix | 5 ++ .../programs/swappy/example-config.nix | 28 +++++++++ 4 files changed, 108 insertions(+) create mode 100644 modules/programs/swappy.nix create mode 100644 tests/modules/programs/swappy/config create mode 100644 tests/modules/programs/swappy/default.nix create mode 100644 tests/modules/programs/swappy/example-config.nix diff --git a/modules/programs/swappy.nix b/modules/programs/swappy.nix new file mode 100644 index 000000000..e8ad143d1 --- /dev/null +++ b/modules/programs/swappy.nix @@ -0,0 +1,61 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + cfg = config.programs.swappy; + iniFormat = pkgs.formats.ini { }; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + + options.programs.swappy = { + enable = mkEnableOption "swappy"; + package = mkPackageOption pkgs "swappy" { nullable = true; }; + settings = mkOption { + inherit (iniFormat) type; + default = { }; + example = { + Default = { + save_dir = "$HOME/Desktop"; + save_filename_format = "swappy-%Y%m%d-%H%M%S.png"; + show_panel = false; + line_size = 5; + text_size = 20; + text_font = "sans-serif"; + paint_mode = "brush"; + early_exit = false; + fill_shape = false; + auto_save = false; + custom_color = "rgba(193,125,17,1)"; + transparent = false; + transparency = 50; + }; + }; + description = '' + Configuration settings for swappy. All the available options can be found + here: + ''; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "programs.swappy" pkgs lib.platforms.linux) + ]; + + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + xdg.configFile."swappy/config" = mkIf (cfg.settings != { }) { + source = iniFormat.generate "swappy-config" cfg.settings; + }; + }; +} diff --git a/tests/modules/programs/swappy/config b/tests/modules/programs/swappy/config new file mode 100644 index 000000000..67659e2dc --- /dev/null +++ b/tests/modules/programs/swappy/config @@ -0,0 +1,14 @@ +[Default] +auto_save=false +custom_color=rgba(193,125,17,1) +early_exit=false +fill_shape=false +line_size=5 +paint_mode=brush +save_dir=$HOME/Desktop +save_filename_format=swappy-%Y%m%d-%H%M%S.png +show_panel=false +text_font=sans-serif +text_size=20 +transparency=50 +transparent=false diff --git a/tests/modules/programs/swappy/default.nix b/tests/modules/programs/swappy/default.nix new file mode 100644 index 000000000..7e60cb6e9 --- /dev/null +++ b/tests/modules/programs/swappy/default.nix @@ -0,0 +1,5 @@ +{ lib, pkgs, ... }: + +(lib.optionalAttrs pkgs.stdenv.hostPlatform.isLinux { + swappy-example-config = ./example-config.nix; +}) diff --git a/tests/modules/programs/swappy/example-config.nix b/tests/modules/programs/swappy/example-config.nix new file mode 100644 index 000000000..73da5f5e5 --- /dev/null +++ b/tests/modules/programs/swappy/example-config.nix @@ -0,0 +1,28 @@ +{ + programs.swappy = { + enable = true; + settings = { + Default = { + save_dir = "$HOME/Desktop"; + save_filename_format = "swappy-%Y%m%d-%H%M%S.png"; + show_panel = false; + line_size = 5; + text_size = 20; + text_font = "sans-serif"; + paint_mode = "brush"; + early_exit = false; + fill_shape = false; + auto_save = false; + custom_color = "rgba(193,125,17,1)"; + transparent = false; + transparency = 50; + }; + }; + }; + + nmt.script = '' + assertFileExists home-files/.config/swappy/config + assertFileContent home-files/.config/swappy/config \ + ${./config} + ''; +}