diff --git a/modules/programs/thefuck.nix b/modules/programs/thefuck.nix index 36cd62d62..2cad4c338 100644 --- a/modules/programs/thefuck.nix +++ b/modules/programs/thefuck.nix @@ -21,6 +21,10 @@ with lib; ''; }; + enableFishIntegration = mkEnableOption "Fish integration" // { + default = true; + }; + enableZshIntegration = mkOption { default = true; type = types.bool; @@ -46,6 +50,21 @@ with lib; programs.bash.initExtra = mkIf cfg.enableBashIntegration shEvalCmd; + programs.fish.functions = mkIf cfg.enableFishIntegration { + fuck = { + description = "Correct your previous console command"; + body = '' + set -l fucked_up_command $history[1] + env TF_SHELL=fish TF_ALIAS=fuck PYTHONIOENCODING=utf-8 ${cfg.package}/bin/thefuck $fucked_up_command THEFUCK_ARGUMENT_PLACEHOLDER $argv | read -l unfucked_command + if [ "$unfucked_command" != "" ] + eval $unfucked_command + builtin history delete --exact --case-sensitive -- $fucked_up_command + builtin history merge + end + ''; + }; + }; + programs.zsh.initExtra = mkIf cfg.enableZshIntegration shEvalCmd; }; } diff --git a/tests/modules/programs/thefuck/integration-disabled.nix b/tests/modules/programs/thefuck/integration-disabled.nix index 0afeb8d84..10692a721 100644 --- a/tests/modules/programs/thefuck/integration-disabled.nix +++ b/tests/modules/programs/thefuck/integration-disabled.nix @@ -4,6 +4,7 @@ programs = { thefuck.enable = true; thefuck.enableBashIntegration = false; + thefuck.enableFishIntegration = false; thefuck.enableZshIntegration = false; bash.enable = true; zsh.enable = true; @@ -13,6 +14,7 @@ nmt.script = '' assertFileNotRegex home-files/.bashrc '@thefuck@/bin/thefuck' + assertFileNotExists home-files/.config/fish/functions/fuck.fish assertFileNotRegex home-files/.zshrc '@thefuck@/bin/thefuck' ''; } diff --git a/tests/modules/programs/thefuck/integration-enabled.nix b/tests/modules/programs/thefuck/integration-enabled.nix index cb0d53eb5..79cadaf81 100644 --- a/tests/modules/programs/thefuck/integration-enabled.nix +++ b/tests/modules/programs/thefuck/integration-enabled.nix @@ -4,6 +4,7 @@ programs = { thefuck.enable = true; bash.enable = true; + fish.enable = true; zsh.enable = true; }; @@ -15,6 +16,19 @@ home-files/.bashrc \ 'eval "$(@thefuck@/bin/thefuck '"'"'--alias'"'"')"' + assertFileExists home-files/.config/fish/functions/fuck.fish + assertFileContains \ + home-files/.config/fish/functions/fuck.fish \ + 'function fuck --description="Correct your previous console command" + set -l fucked_up_command $history[1] + env TF_SHELL=fish TF_ALIAS=fuck PYTHONIOENCODING=utf-8 @thefuck@/bin/thefuck $fucked_up_command THEFUCK_ARGUMENT_PLACEHOLDER $argv | read -l unfucked_command + if [ "$unfucked_command" != "" ] + eval $unfucked_command + builtin history delete --exact --case-sensitive -- $fucked_up_command + builtin history merge + end + end' + assertFileExists home-files/.zshrc assertFileContains \ home-files/.zshrc \