diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 21af0a181..3f50db65e 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -124,6 +124,8 @@ Makefile @thiagokokada
/modules/programs/go.nix @rvolosatovs
+/modules/programs/havoc.nix @AndersonTorres
+
/modules/programs/helix.nix @Philipp-M
/tests/modules/programs/helix @Philipp-M
diff --git a/modules/misc/news.nix b/modules/misc/news.nix
index 695e1026b..830864d9b 100644
--- a/modules/misc/news.nix
+++ b/modules/misc/news.nix
@@ -733,6 +733,14 @@ in
A new module is available: 'programs.ledger'.
'';
}
+
+ {
+ time = "2022-10-06T23:19:10+00:00";
+ condition = hostPlatform.isLinux;
+ message = ''
+ A new module is available: 'programs.havoc'.
+ '';
+ }
];
};
}
diff --git a/modules/modules.nix b/modules/modules.nix
index 92030b994..f3e740093 100644
--- a/modules/modules.nix
+++ b/modules/modules.nix
@@ -82,6 +82,7 @@ let
./programs/gnome-terminal.nix
./programs/go.nix
./programs/gpg.nix
+ ./programs/havoc.nix
./programs/helix.nix
./programs/hexchat.nix
./programs/himalaya.nix
diff --git a/modules/programs/havoc.nix b/modules/programs/havoc.nix
new file mode 100644
index 000000000..6ae89c1d7
--- /dev/null
+++ b/modules/programs/havoc.nix
@@ -0,0 +1,64 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.programs.havoc;
+ iniFormat = pkgs.formats.ini { };
+
+in {
+ meta.maintainers = with lib.maintainers; [ AndersonTorres ];
+
+ options.programs.havoc = {
+ enable = mkEnableOption "Havoc terminal";
+
+ package = mkPackageOption pkgs "havoc" { };
+
+ settings = mkOption {
+ type = iniFormat.type;
+ default = { };
+ description = ''
+ Configuration written to
+ $XDG_CONFIG_HOME/havoc.cfg. See
+ for a list of available options.
+ '';
+ example = literalExpression ''
+ {
+ child.program = "bash";
+ window.opacity = 240;
+ window.margin = no;
+ terminal = {
+ rows = 80;
+ columns = 24;
+ scrollback = 2000;
+ };
+ bind = {
+ "C-S-c" = "copy";
+ "C-S-v" = "paste";
+ "C-S-r" = "reset";
+ "C-S-Delete" = "hard reset";
+ "C-S-j" = "scroll down";
+ "C-S-k" = "scroll up";
+ "C-S-Page_Down" = "scroll down page";
+ "C-S-Page_Up" = "scroll up page";
+ "C-S-End" = "scroll to bottom";
+ "C-S-Home" = "scroll to top";
+ };
+ }
+ '';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ assertions =
+ [ (hm.assertions.assertPlatform "programs.havoc" pkgs platforms.linux) ];
+
+ home.packages = [ cfg.package ];
+
+ xdg.configFile."havoc.cfg" = mkIf (cfg.settings != { }) {
+ source = iniFormat.generate "havoc.cfg" cfg.settings;
+ };
+ };
+}