From b06023bfde04688f19b214707f4741e6240c4d10 Mon Sep 17 00:00:00 2001 From: Ian Chamberlain Date: Sun, 11 Aug 2024 12:02:42 -0400 Subject: [PATCH] fish: expose session variables package This allows fish users to source the `hm-session-vars.fish` if they are not using the generated `config.fish` (which now sources the same file). --- modules/programs/fish.nix | 36 +++++++++++++------ tests/modules/programs/fish/default.nix | 1 + .../programs/fish/session-variables.nix | 26 ++++++++++++++ .../programs/zsh/session-variables.nix | 2 +- 4 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 tests/modules/programs/fish/session-variables.nix diff --git a/modules/programs/fish.nix b/modules/programs/fish.nix index 02141042d36e..f02d76614db8 100644 --- a/modules/programs/fish.nix +++ b/modules/programs/fish.nix @@ -220,15 +220,6 @@ let passAsFile = [ "text" ]; } "env HOME=$(mktemp -d) fish_indent < $textPath > $out"; - translatedSessionVariables = - pkgs.runCommandLocal "hm-session-vars.fish" { } '' - (echo "function setup_hm_session_vars;" - ${pkgs.buildPackages.babelfish}/bin/babelfish \ - <${config.home.sessionVariablesPackage}/etc/profile.d/hm-session-vars.sh - echo "end" - echo "setup_hm_session_vars") > $out - ''; - in { imports = [ (mkRemovedOptionModule [ "programs" "fish" "promptInit" ] '' @@ -393,10 +384,33 @@ in { . ''; }; + + # TODO: maybe this makes more sense as `programs.fish.sessionVariablesPackage`? + # if `programs.fish.sessionVariables` were added, would that need its own + # separate package, or would they just go in config.fish directly? + home.fishSessionVariablesPackage = mkOption { + type = types.package; + internal = true; + description = '' + The package containing the {file}`hm-session-vars.fish` file. + ''; + }; }; config = mkIf cfg.enable (mkMerge [ - { home.packages = [ cfg.package ]; } + { + home.fishSessionVariablesPackage = + pkgs.runCommandLocal "hm-session-vars.fish" { } '' + mkdir -p $out/etc/profile.d + (echo "function setup_hm_session_vars;" + ${pkgs.buildPackages.babelfish}/bin/babelfish \ + <${config.home.sessionVariablesPackage}/etc/profile.d/hm-session-vars.sh + echo "end" + echo "setup_hm_session_vars" + ) > $out/etc/profile.d/hm-session-vars.fish + ''; + + home.packages = [ cfg.package config.home.fishSessionVariablesPackage ]; (mkIf cfg.generateCompletions { # Support completion for `man` by building a cache for `apropos`. @@ -473,7 +487,7 @@ in { set -q __fish_home_manager_config_sourced; and exit set -g __fish_home_manager_config_sourced 1 - source ${translatedSessionVariables} + source ${config.home.fishSessionVariablesPackage}/etc/profile.d/hm-session-vars.fish ${cfg.shellInit} diff --git a/tests/modules/programs/fish/default.nix b/tests/modules/programs/fish/default.nix index f81ff971ea35..52d53f81ebc3 100644 --- a/tests/modules/programs/fish/default.nix +++ b/tests/modules/programs/fish/default.nix @@ -4,4 +4,5 @@ fish-functions = ./functions.nix; fish-no-functions = ./no-functions.nix; fish-plugins = ./plugins.nix; + fish-session-variables = ./session-variables.nix; } diff --git a/tests/modules/programs/fish/session-variables.nix b/tests/modules/programs/fish/session-variables.nix new file mode 100644 index 000000000000..bced6d84046d --- /dev/null +++ b/tests/modules/programs/fish/session-variables.nix @@ -0,0 +1,26 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + config = { + home.sessionVariables = { + V1 = "v1"; + V2 = "v2-${config.home.sessionVariables.V1}"; + }; + + programs.fish = { + enable = true; + + # TODO: should there be an equivalent sessionVariables here like bash + zsh? + }; + + nmt.script = '' + assertFileExists home-path/etc/profile.d/hm-session-vars.fish + assertFileRegex home-path/etc/profile.d/hm-session-vars.fish \ + "set -gx V1 'v1'" + assertFileRegex home-path/etc/profile.d/hm-session-vars.fish \ + "set -gx V1 'v1'" + ''; + }; +} diff --git a/tests/modules/programs/zsh/session-variables.nix b/tests/modules/programs/zsh/session-variables.nix index 45c63d236158..53030b4c57c1 100644 --- a/tests/modules/programs/zsh/session-variables.nix +++ b/tests/modules/programs/zsh/session-variables.nix @@ -15,7 +15,7 @@ nmt.script = '' assertFileExists home-files/.zshenv - assertFileRegex home-files/.zshenv 'export V1="v1"' + assertFileRegex home-files/.zshenv 'export V1="v2"' assertFileRegex home-files/.zshenv 'export V2="v2-v1"' ''; };