From dcebe66f958673729896eec2de4abfd86ef22d21 Mon Sep 17 00:00:00 2001 From: ketal Date: Tue, 5 May 2026 06:53:01 +0800 Subject: [PATCH] atuin: precompute fish init script --- modules/programs/atuin.nix | 10 ++++- tests/modules/programs/atuin/fish.nix | 33 +++++++++++++-- tests/modules/programs/atuin/set-flags.nix | 49 ++++++++++++++++------ 3 files changed, 75 insertions(+), 17 deletions(-) diff --git a/modules/programs/atuin.nix b/modules/programs/atuin.nix index db15f5fc8..1f89914ca 100644 --- a/modules/programs/atuin.nix +++ b/modules/programs/atuin.nix @@ -166,6 +166,14 @@ in config = let flagsStr = lib.escapeShellArgs cfg.flags; + atuinFishConfig = + pkgs.runCommand "atuin-fish-config.fish" + { + nativeBuildInputs = [ pkgs.writableTmpDirAsHomeHook ]; + } + '' + ${lib.getExe cfg.package} init fish ${flagsStr} > "$out" + ''; in mkIf cfg.enable ( lib.mkMerge [ @@ -212,7 +220,7 @@ in ''; programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration '' - ${lib.getExe cfg.package} init fish ${flagsStr} | source + source ${atuinFishConfig} ''; programs.nushell = mkIf cfg.enableNushellIntegration { diff --git a/tests/modules/programs/atuin/fish.nix b/tests/modules/programs/atuin/fish.nix index 0c9339038..828323f1e 100644 --- a/tests/modules/programs/atuin/fish.nix +++ b/tests/modules/programs/atuin/fish.nix @@ -1,8 +1,24 @@ -{ lib, ... }: +{ lib, pkgs, ... }: + +let + atuinPackage = pkgs.writeShellScriptBin "atuin" '' + if [ "$1" = init ] && [ "$2" = fish ]; then + printf 'atuin fish init args:' + printf ' %s' "$@" + printf '\n' + else + echo "unexpected atuin invocation: $*" >&2 + exit 1 + fi + ''; +in { programs = { - atuin.enable = true; + atuin = { + enable = true; + package = atuinPackage; + }; fish.enable = true; }; @@ -13,8 +29,17 @@ nmt.script = '' assertFileExists home-files/.config/fish/config.fish - assertFileContains \ + assertFileRegex \ home-files/.config/fish/config.fish \ - '@atuin@/bin/atuin init fish | source' + 'source /nix/store/[^/]*-atuin-fish-config\.fish' + assertFileNotRegex home-files/.config/fish/config.fish 'atuin init fish' + + atuinFishConfig=$( + sed -n 's|^[[:space:]]*source \(/nix/store/[^ ]*-atuin-fish-config\.fish\).*|\1|p' \ + "$TESTED/home-files/.config/fish/config.fish" | head -n1 + ) + assertFileExists "$atuinFishConfig" + assertFileContains "$atuinFishConfig" \ + 'atuin fish init args: init fish' ''; } diff --git a/tests/modules/programs/atuin/set-flags.nix b/tests/modules/programs/atuin/set-flags.nix index 0815799c1..51253d2a2 100644 --- a/tests/modules/programs/atuin/set-flags.nix +++ b/tests/modules/programs/atuin/set-flags.nix @@ -1,12 +1,28 @@ -{ lib, ... }: +{ lib, pkgs, ... }: + +let + atuinPackage = pkgs.writeShellScriptBin "atuin" '' + if [ "$1" = init ] && [ "$2" = fish ]; then + printf 'atuin fish init args:' + printf ' %s' "$@" + printf '\n' + else + echo "unexpected atuin invocation: $*" >&2 + exit 1 + fi + ''; +in { programs = { - atuin.enable = true; - atuin.flags = [ - "--disable-ctrl-r" - "--disable-up-arrow" - ]; + atuin = { + enable = true; + package = atuinPackage; + flags = [ + "--disable-ctrl-r" + "--disable-up-arrow" + ]; + }; bash = { enable = true; enableCompletion = false; @@ -22,17 +38,26 @@ nmt.script = '' assertFileExists home-files/.bashrc - assertFileContains \ + assertFileRegex \ home-files/.bashrc \ - "eval \"\$(@atuin@/bin/atuin init bash --disable-ctrl-r --disable-up-arrow)\"" + 'eval "\$(/nix/store/[^/]*/bin/atuin init bash --disable-ctrl-r --disable-up-arrow)"' assertFileExists home-files/.zshrc - assertFileContains \ + assertFileRegex \ home-files/.zshrc \ - "eval \"\$(@atuin@/bin/atuin init zsh --disable-ctrl-r --disable-up-arrow)\"" + 'eval "\$(/nix/store/[^/]*/bin/atuin init zsh --disable-ctrl-r --disable-up-arrow)"' assertFileExists home-files/.config/fish/config.fish - assertFileContains \ + assertFileRegex \ home-files/.config/fish/config.fish \ - "@atuin@/bin/atuin init fish --disable-ctrl-r --disable-up-arrow | source" + 'source /nix/store/[^/]*-atuin-fish-config\.fish' + assertFileNotRegex home-files/.config/fish/config.fish 'atuin init fish' + + atuinFishConfig=$( + sed -n 's|^[[:space:]]*source \(/nix/store/[^ ]*-atuin-fish-config\.fish\).*|\1|p' \ + "$TESTED/home-files/.config/fish/config.fish" | head -n1 + ) + assertFileExists "$atuinFishConfig" + assertFileContains "$atuinFishConfig" \ + 'atuin fish init args: init fish --disable-ctrl-r --disable-up-arrow' ''; }