Merge pull request #25835 from therealpxc/fish
Fish: source NixOS environment on non-login shells + source shell init on NixOS even when parent shell has done so
This commit is contained in:
commit
7e40287d00
@ -104,8 +104,6 @@ in
|
|||||||
environment.etc."fish/foreign-env/interactiveShellInit".text = cfge.interactiveShellInit;
|
environment.etc."fish/foreign-env/interactiveShellInit".text = cfge.interactiveShellInit;
|
||||||
|
|
||||||
environment.etc."fish/nixos-env-preinit.fish".text = ''
|
environment.etc."fish/nixos-env-preinit.fish".text = ''
|
||||||
# avoid clobbering the environment if it's been set by a parent shell
|
|
||||||
|
|
||||||
# This happens before $__fish_datadir/config.fish sets fish_function_path, so it is currently
|
# This happens before $__fish_datadir/config.fish sets fish_function_path, so it is currently
|
||||||
# unset. We set it and then completely erase it, leaving its configuration to $__fish_datadir/config.fish
|
# unset. We set it and then completely erase it, leaving its configuration to $__fish_datadir/config.fish
|
||||||
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $__fish_datadir/functions
|
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $__fish_datadir/functions
|
||||||
@ -120,7 +118,7 @@ in
|
|||||||
environment.etc."fish/config.fish".text = ''
|
environment.etc."fish/config.fish".text = ''
|
||||||
# /etc/fish/config.fish: DO NOT EDIT -- this file has been generated automatically.
|
# /etc/fish/config.fish: DO NOT EDIT -- this file has been generated automatically.
|
||||||
|
|
||||||
# if our parent shell didn't source the general config, do it
|
# if we haven't sourced the general config, do it
|
||||||
if not set -q __fish_nixos_general_config_sourced
|
if not set -q __fish_nixos_general_config_sourced
|
||||||
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $fish_function_path
|
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $fish_function_path
|
||||||
fenv source /etc/fish/foreign-env/shellInit > /dev/null
|
fenv source /etc/fish/foreign-env/shellInit > /dev/null
|
||||||
@ -128,11 +126,12 @@ in
|
|||||||
|
|
||||||
${cfg.shellInit}
|
${cfg.shellInit}
|
||||||
|
|
||||||
# and leave a note to our children to spare them the same work
|
# and leave a note so we don't source this config section again from
|
||||||
set -gx __fish_nixos_general_config_sourced 1
|
# this very shell (children will source the general config anew)
|
||||||
|
set -g __fish_nixos_general_config_sourced 1
|
||||||
end
|
end
|
||||||
|
|
||||||
# if our parent shell didn't source the login config, do it
|
# if we haven't sourced the login config, do it
|
||||||
status --is-login; and not set -q __fish_nixos_login_config_sourced
|
status --is-login; and not set -q __fish_nixos_login_config_sourced
|
||||||
and begin
|
and begin
|
||||||
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $fish_function_path
|
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $fish_function_path
|
||||||
@ -141,11 +140,12 @@ in
|
|||||||
|
|
||||||
${cfg.loginShellInit}
|
${cfg.loginShellInit}
|
||||||
|
|
||||||
# and leave a note to our children to spare them the same work
|
# and leave a note so we don't source this config section again from
|
||||||
set -gx __fish_nixos_login_config_sourced 1
|
# this very shell (children will source the general config anew)
|
||||||
|
set -g __fish_nixos_login_config_sourced 1
|
||||||
end
|
end
|
||||||
|
|
||||||
# if our parent shell didn't source the interactive config, do it
|
# if we haven't sourced the interactive config, do it
|
||||||
status --is-interactive; and not set -q __fish_nixos_interactive_config_sourced
|
status --is-interactive; and not set -q __fish_nixos_interactive_config_sourced
|
||||||
and begin
|
and begin
|
||||||
${fishAliases}
|
${fishAliases}
|
||||||
@ -158,8 +158,10 @@ in
|
|||||||
${cfg.promptInit}
|
${cfg.promptInit}
|
||||||
${cfg.interactiveShellInit}
|
${cfg.interactiveShellInit}
|
||||||
|
|
||||||
# and leave a note to our children to spare them the same work
|
# and leave a note so we don't source this config section again from
|
||||||
set -gx __fish_nixos_interactive_config_sourced 1
|
# this very shell (children will source the general config anew,
|
||||||
|
# allowing configuration changes in, e.g, aliases, to propagate)
|
||||||
|
set -g __fish_nixos_interactive_config_sourced 1
|
||||||
end
|
end
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -45,10 +45,15 @@ let
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
fishPreInitHooks = ''
|
fishPreInitHooks = ''
|
||||||
# source nixos environment if we're a login shell
|
# source nixos environment
|
||||||
|
# note that this is required:
|
||||||
|
# 1. For all shells, not just login shells (mosh needs this as do some other command-line utilities)
|
||||||
|
# 2. Before the shell is initialized, so that config snippets can find the commands they use on the PATH
|
||||||
builtin status --is-login
|
builtin status --is-login
|
||||||
|
or test -z "$__fish_nixos_env_preinit_sourced" -a -z "$ETC_PROFILE_SOURCED" -a -z "$ETC_ZSHENV_SOURCED"
|
||||||
and test -f /etc/fish/nixos-env-preinit.fish
|
and test -f /etc/fish/nixos-env-preinit.fish
|
||||||
and source /etc/fish/nixos-env-preinit.fish
|
and source /etc/fish/nixos-env-preinit.fish
|
||||||
|
and set -gx __fish_nixos_env_preinit_sourced 1
|
||||||
|
|
||||||
test -n "$NIX_PROFILES"
|
test -n "$NIX_PROFILES"
|
||||||
and begin
|
and begin
|
||||||
|
Loading…
x
Reference in New Issue
Block a user