diff --git a/modules/programs/calibre.nix b/modules/programs/calibre.nix new file mode 100644 index 000000000..c28a9a8e4 --- /dev/null +++ b/modules/programs/calibre.nix @@ -0,0 +1,44 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + types + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + cfg = config.programs.calibre; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + options.programs.calibre = { + enable = mkEnableOption "calibre"; + package = mkPackageOption pkgs "calibre" { nullable = true; }; + plugins = mkOption { + type = with types; listOf path; + default = [ ]; + description = "List of plugins to install for calibre"; + }; + }; + + config = mkIf cfg.enable { + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + xdg.configFile = mkIf (cfg.plugins != [ ]) ( + let + symlinkedPlugins = pkgs.symlinkJoin { + name = "calibre-plugins"; + paths = cfg.plugins; + }; + in + lib.mapAttrs' ( + k: _: lib.nameValuePair "calibre/plugins/${k}" { source = (symlinkedPlugins + "/${k}"); } + ) (builtins.readDir symlinkedPlugins) + ); + }; +} diff --git a/tests/darwinScrublist.nix b/tests/darwinScrublist.nix index 3979629bd..ec8cafd31 100644 --- a/tests/darwinScrublist.nix +++ b/tests/darwinScrublist.nix @@ -27,6 +27,7 @@ let "broot" "browserpass" "btop" + "calibre" "carapace" "cava" "claude-code" diff --git a/tests/modules/programs/calibre/default.nix b/tests/modules/programs/calibre/default.nix new file mode 100644 index 000000000..1b21316c3 --- /dev/null +++ b/tests/modules/programs/calibre/default.nix @@ -0,0 +1 @@ +{ calibre-settings = ./settings.nix; } diff --git a/tests/modules/programs/calibre/plugins/a/a.zip b/tests/modules/programs/calibre/plugins/a/a.zip new file mode 100644 index 000000000..e69de29bb diff --git a/tests/modules/programs/calibre/plugins/b/b.zip b/tests/modules/programs/calibre/plugins/b/b.zip new file mode 100644 index 000000000..e69de29bb diff --git a/tests/modules/programs/calibre/settings.nix b/tests/modules/programs/calibre/settings.nix new file mode 100644 index 000000000..1aae893ce --- /dev/null +++ b/tests/modules/programs/calibre/settings.nix @@ -0,0 +1,14 @@ +{ + programs.calibre = { + enable = true; + plugins = [ + ./plugins/a + ./plugins/b + ]; + }; + + nmt.script = '' + assertFileExists home-files/.config/calibre/plugins/a.zip + assertFileExists home-files/.config/calibre/plugins/b.zip + ''; +}