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; + }; + }; +}