From a26f7158fbc4aa740fcc7fa79a01e1ed29910bc2 Mon Sep 17 00:00:00 2001 From: Santhosh Raju Date: Sat, 29 Aug 2026 08:45:52 +0200 Subject: [PATCH] yopass: add module Adds programs.yopass for managing the yopass CLI configuration file (~/.config/yopass/defaults.yml), with an NMT test verifying the generated settings. Assisted-by: Claude Fable 5 --- .../misc/news/2026/08/2026-08-29_08-55-25.nix | 9 ++++ modules/programs/yopass.nix | 52 +++++++++++++++++++ tests/modules/programs/yopass/default.nix | 3 ++ tests/modules/programs/yopass/settings.nix | 19 +++++++ tests/modules/programs/yopass/settings.yml | 1 + 5 files changed, 84 insertions(+) create mode 100644 modules/misc/news/2026/08/2026-08-29_08-55-25.nix create mode 100644 modules/programs/yopass.nix create mode 100644 tests/modules/programs/yopass/default.nix create mode 100644 tests/modules/programs/yopass/settings.nix create mode 100644 tests/modules/programs/yopass/settings.yml diff --git a/modules/misc/news/2026/08/2026-08-29_08-55-25.nix b/modules/misc/news/2026/08/2026-08-29_08-55-25.nix new file mode 100644 index 0000000000..6722161f0f --- /dev/null +++ b/modules/misc/news/2026/08/2026-08-29_08-55-25.nix @@ -0,0 +1,9 @@ +{ + time = "2026-08-29T06:55:25+00:00"; + message = '' + A new module is available: 'programs.yopass'. + + Yopass is a tool for sharing secrets and files securely. The module + manages the yopass command line client's configuration file. + ''; +} diff --git a/modules/programs/yopass.nix b/modules/programs/yopass.nix new file mode 100644 index 0000000000..12fe5ddf5d --- /dev/null +++ b/modules/programs/yopass.nix @@ -0,0 +1,52 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + cfg = config.programs.yopass; +in +{ + meta.maintainers = [ lib.maintainers.fraggerfox ]; + + options.programs.yopass = { + enable = lib.mkEnableOption "Yopass, a tool for sharing secrets and files securely"; + + package = lib.mkPackageOption pkgs "yopass" { nullable = true; }; + + settings = lib.mkOption { + type = lib.types.attrsOf ( + lib.types.oneOf [ + lib.types.bool + lib.types.int + lib.types.str + ] + ); + default = { }; + description = '' + Configuration written to + {file}`$XDG_CONFIG_HOME/yopass/defaults.yml`. + + See the [CLI documentation](https://yopass.se/docs/cli) for the + full list of available settings (`api`, `api-token`, `url`, + `one-time`, `expiration`). + ''; + example = { + api = "https://api.example.com"; + url = "https://example.com"; + "one-time" = false; + expiration = "1d"; + }; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = lib.mkIf (cfg.package != null) [ cfg.package ]; + + xdg.configFile."yopass/defaults.yml" = lib.mkIf (cfg.settings != { }) { + text = lib.generators.toYAML { } cfg.settings; + }; + }; +} diff --git a/tests/modules/programs/yopass/default.nix b/tests/modules/programs/yopass/default.nix new file mode 100644 index 0000000000..c39c7cb3f1 --- /dev/null +++ b/tests/modules/programs/yopass/default.nix @@ -0,0 +1,3 @@ +{ + yopass-settings = ./settings.nix; +} diff --git a/tests/modules/programs/yopass/settings.nix b/tests/modules/programs/yopass/settings.nix new file mode 100644 index 0000000000..24ed98d9c7 --- /dev/null +++ b/tests/modules/programs/yopass/settings.nix @@ -0,0 +1,19 @@ +{ + programs.yopass = { + enable = true; + settings = { + api = "https://api.example.com"; + url = "https://example.com"; + "one-time" = false; + expiration = "1d"; + }; + }; + + test.stubs.yopass = { }; + + nmt.script = '' + assertFileExists home-files/.config/yopass/defaults.yml + assertFileContent home-files/.config/yopass/defaults.yml \ + ${./settings.yml} + ''; +} diff --git a/tests/modules/programs/yopass/settings.yml b/tests/modules/programs/yopass/settings.yml new file mode 100644 index 0000000000..ac69a2f78d --- /dev/null +++ b/tests/modules/programs/yopass/settings.yml @@ -0,0 +1 @@ +{"api":"https://api.example.com","expiration":"1d","one-time":false,"url":"https://example.com"} \ No newline at end of file