From ee2785ab648023079a621077ab54bbd7203ff2d0 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Fri, 14 Feb 2025 12:48:20 +0800 Subject: [PATCH] home-manager/programs/diceware: init --- modules/home-manager/default.nix | 1 + modules/home-manager/programs/diceware.nix | 46 +++++++++++++++++++ tests/modules/home-manager/default.nix | 1 + .../home-manager/programs/diceware/basic.nix | 15 ++++++ .../programs/diceware/default.nix | 4 ++ .../home-manager/programs/diceware/empty.nix | 11 +++++ 6 files changed, 78 insertions(+) create mode 100644 modules/home-manager/programs/diceware.nix create mode 100644 tests/modules/home-manager/programs/diceware/basic.nix create mode 100644 tests/modules/home-manager/programs/diceware/default.nix create mode 100644 tests/modules/home-manager/programs/diceware/empty.nix diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix index 75bc2666..1cd16df4 100644 --- a/modules/home-manager/default.nix +++ b/modules/home-manager/default.nix @@ -4,6 +4,7 @@ ./programs/pipewire.nix ./programs/pop-launcher.nix ./programs/borgmatic.nix + ./programs/diceware.nix ./programs/nushell.nix ./programs/python.nix ./services/archivebox.nix diff --git a/modules/home-manager/programs/diceware.nix b/modules/home-manager/programs/diceware.nix new file mode 100644 index 00000000..a9188982 --- /dev/null +++ b/modules/home-manager/programs/diceware.nix @@ -0,0 +1,46 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.programs.diceware; + + settingsFormat = pkgs.formats.ini { }; +in +{ + options.programs.diceware = { + enable = lib.mkEnableOption "configuring diceware, a passphrase generator"; + + package = lib.mkPackageOption pkgs "diceware" { }; + + settings = lib.mkOption { + type = settingsFormat.type; + default = { }; + description = '' + Settings in INI format to be generated at + {file}`$XDG_CONFIG_HOME/diceware/diceware.ini`. + ''; + example = lib.literalExpression '' + { + diceware = { + num = 7; + caps = false; + specials = 2; + delimiter = "MYDELIMITER"; + randomsource = "system"; + wordlist = "en_securedrop"; + }; + } + ''; + }; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + { + home.packages = [ cfg.package ]; + } + + (lib.mkIf (cfg.settings != { }) { + xdg.configFile."diceware/diceware.ini".source = + settingsFormat.generate "diceware-user-settings" cfg.settings; + }) + ]); +} diff --git a/tests/modules/home-manager/default.nix b/tests/modules/home-manager/default.nix index e02b0de0..bbdc2676 100644 --- a/tests/modules/home-manager/default.nix +++ b/tests/modules/home-manager/default.nix @@ -50,6 +50,7 @@ in import nmt { # TODO: Fix nmt to accept specialArgs or something. tests = builtins.foldl' (a: b: a // (import b)) { } ([ #./programs/borgmatic + ./programs/diceware ./programs/pipewire ./programs/pop-launcher ./programs/zed-editor diff --git a/tests/modules/home-manager/programs/diceware/basic.nix b/tests/modules/home-manager/programs/diceware/basic.nix new file mode 100644 index 00000000..a2667782 --- /dev/null +++ b/tests/modules/home-manager/programs/diceware/basic.nix @@ -0,0 +1,15 @@ +{ config, lib, ... }: { + programs.diceware = { + enable = true; + settings.diceware = { + num = 7; + specials = 2; + }; + }; + + test.stubs.diceware = { }; + + nmt.script = '' + assertFileExists home-files/.config/diceware/diceware.ini + ''; +} diff --git a/tests/modules/home-manager/programs/diceware/default.nix b/tests/modules/home-manager/programs/diceware/default.nix new file mode 100644 index 00000000..b4fadb3a --- /dev/null +++ b/tests/modules/home-manager/programs/diceware/default.nix @@ -0,0 +1,4 @@ +{ + diceware-basic-settings = ./basic.nix; + diceware-empty-settings = ./empty.nix; +} diff --git a/tests/modules/home-manager/programs/diceware/empty.nix b/tests/modules/home-manager/programs/diceware/empty.nix new file mode 100644 index 00000000..fd62771b --- /dev/null +++ b/tests/modules/home-manager/programs/diceware/empty.nix @@ -0,0 +1,11 @@ +{ ... }: + +{ + programs.diceware.enable = true; + + test.stubs.diceware = { }; + + nmt.script = '' + assertPathNotExists home-files/.config/diceware/diceware.ini + ''; +}