diff --git a/modules/misc/news.nix b/modules/misc/news.nix
index b031af99..de27a8ed 100644
--- a/modules/misc/news.nix
+++ b/modules/misc/news.nix
@@ -1673,6 +1673,13 @@ in
support the apropos command.
'';
}
+
+ {
+ time = "2020-09-22T21:03:28+00:00";
+ message = ''
+ A new module is available: 'programs.pet'.
+ '';
+ }
];
};
}
diff --git a/modules/modules.nix b/modules/modules.nix
index 08c978b1..66f66f70 100644
--- a/modules/modules.nix
+++ b/modules/modules.nix
@@ -103,6 +103,7 @@ let
(loadModule ./programs/opam.nix { })
(loadModule ./programs/password-store.nix { })
(loadModule ./programs/pazi.nix { })
+ (loadModule ./programs/pet.nix { })
(loadModule ./programs/pidgin.nix { })
(loadModule ./programs/powerline-go.nix { })
(loadModule ./programs/qutebrowser.nix { })
diff --git a/modules/programs/pet.nix b/modules/programs/pet.nix
new file mode 100644
index 00000000..0da205da
--- /dev/null
+++ b/modules/programs/pet.nix
@@ -0,0 +1,88 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.programs.pet;
+
+ format = pkgs.formats.toml { };
+
+ snippetType = types.submodule {
+ options = {
+ description = mkOption {
+ type = types.str;
+ default = "";
+ example = "Count the number of commits in the current branch";
+ description = ''
+ Description of the snippet.
+ '';
+ };
+
+ command = mkOption {
+ type = types.str;
+ default = "";
+ example = "git rev-list --count HEAD";
+ description = ''
+ The command.
+ '';
+ };
+
+ output = mkOption {
+ type = types.str;
+ default = "";
+ example = "473";
+ description = ''
+ Example output of the command.
+ '';
+ };
+ };
+ };
+
+in {
+ options.programs.pet = {
+ enable = mkEnableOption "pet";
+
+ settings = mkOption {
+ type = format.type;
+ default = { };
+ description = ''
+ Settings written to config.toml. See the pet
+ documentation for details.
+ '';
+ };
+
+ selectcmdPackage = mkOption {
+ type = types.package;
+ default = pkgs.fzf;
+ defaultText = literalExample "pkgs.fzf";
+ description = ''
+ The package needed for the settings.selectcmd.
+ '';
+ };
+
+ snippets = mkOption {
+ type = types.listOf snippetType;
+ default = [ ];
+ description = ''
+ The snippets.
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ programs.pet.settings = {
+ selectcmd = mkDefault "fzf";
+ snippetfile = config.xdg.configHome + "/pet/snippet.toml";
+ };
+
+ home.packages = [ pkgs.pet cfg.selectcmdPackage ];
+
+ xdg.configFile = {
+ "pet/config.toml".source =
+ format.generate "config.toml" { General = cfg.settings; };
+ "pet/snippet.toml".source =
+ format.generate "snippet.toml" { snippets = cfg.snippets; };
+ };
+ };
+}