Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions nixos/modules/config/shells-environment.nix
Original file line number Diff line number Diff line change
Expand Up @@ -162,15 +162,24 @@ in
/bin/sh
'';

# For resetting environment with `. /etc/set-environment` when needed
# and discoverability (see motivation of #30418).
environment.etc."set-environment".source = config.system.build.setEnvironment;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah I see. This should be documented for sure!


system.build.setEnvironment = pkgs.writeText "set-environment"
''
${exportedEnvVars}
''
# DO NOT EDIT -- this file has been generated automatically.

# Prevent this file from being sourced by child shells.
export __NIXOS_SET_ENVIRONMENT_DONE=1

${cfg.extraInit}
${exportedEnvVars}

# ~/bin if it exists overrides other bin directories.
export PATH="$HOME/bin:$PATH"
'';
${cfg.extraInit}

# ~/bin if it exists overrides other bin directories.
export PATH="$HOME/bin:$PATH"
'';

system.activationScripts.binsh = stringAfter [ "stdio" ]
''
Expand Down
12 changes: 7 additions & 5 deletions nixos/modules/programs/bash/bash.nix
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,9 @@ in
programs.bash = {

shellInit = ''
${config.system.build.setEnvironment.text}
if [ -z "$__NIXOS_SET_ENVIRONMENT_DONE" ]; then
. ${config.system.build.setEnvironment}
fi

${cfge.shellInit}
'';
Expand Down Expand Up @@ -166,11 +168,11 @@ in

# Read system-wide modifications.
if test -f /etc/profile.local; then
. /etc/profile.local
. /etc/profile.local
fi

if [ -n "''${BASH_VERSION:-}" ]; then
. /etc/bashrc
. /etc/bashrc
fi
'';

Expand All @@ -191,12 +193,12 @@ in

# We are not always an interactive shell.
if [ -n "$PS1" ]; then
${cfg.interactiveShellInit}
${cfg.interactiveShellInit}
fi

# Read system-wide modifications.
if test -f /etc/bashrc.local; then
. /etc/bashrc.local
. /etc/bashrc.local
fi
'';

Expand Down
19 changes: 10 additions & 9 deletions nixos/modules/programs/fish.nix
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ in
'';
type = types.bool;
};

vendor.config.enable = mkOption {
type = types.bool;
default = true;
Expand All @@ -43,7 +43,7 @@ in
Whether fish should use completion files provided by other packages.
'';
};

vendor.functions.enable = mkOption {
type = types.bool;
default = true;
Expand Down Expand Up @@ -107,9 +107,11 @@ in
# 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
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $__fish_datadir/functions

# source the NixOS environment config
fenv source ${config.system.build.setEnvironment}
if [ -z "$__NIXOS_SET_ENVIRONMENT_DONE" ]
fenv source ${config.system.build.setEnvironment}
end

# clear fish_function_path so that it will be correctly set when we return to $__fish_datadir/config.fish
set -e fish_function_path
Expand All @@ -123,7 +125,7 @@ in
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
set -e fish_function_path[1]

${cfg.shellInit}

# and leave a note so we don't source this config section again from
Expand All @@ -137,7 +139,7 @@ in
set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $fish_function_path
fenv source /etc/fish/foreign-env/loginShellInit > /dev/null
set -e fish_function_path[1]

${cfg.loginShellInit}

# and leave a note so we don't source this config section again from
Expand All @@ -149,12 +151,11 @@ in
status --is-interactive; and not set -q __fish_nixos_interactive_config_sourced
and begin
${fishAliases}


set fish_function_path ${pkgs.fish-foreign-env}/share/fish-foreign-env/functions $fish_function_path
fenv source /etc/fish/foreign-env/interactiveShellInit > /dev/null
set -e fish_function_path[1]

${cfg.promptInit}
${cfg.interactiveShellInit}

Expand All @@ -170,7 +171,7 @@ in
++ optional cfg.vendor.config.enable "/share/fish/vendor_conf.d"
++ optional cfg.vendor.completions.enable "/share/fish/vendor_completions.d"
++ optional cfg.vendor.functions.enable "/share/fish/vendor_functions.d";

environment.systemPackages = [ pkgs.fish ];

environment.shells = [
Expand Down
14 changes: 8 additions & 6 deletions nixos/modules/programs/zsh/zsh.nix
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ in
promptInit = mkOption {
default = ''
if [ "$TERM" != dumb ]; then
autoload -U promptinit && promptinit && prompt walters
autoload -U promptinit && promptinit && prompt walters
fi
'';
description = ''
Expand Down Expand Up @@ -103,15 +103,17 @@ in
if [ -n "$__ETC_ZSHENV_SOURCED" ]; then return; fi
export __ETC_ZSHENV_SOURCED=1

${config.system.build.setEnvironment.text}
if [ -z "$__NIXOS_SET_ENVIRONMENT_DONE" ]; then
. ${config.system.build.setEnvironment}
fi

${cfge.shellInit}

${cfg.shellInit}

# Read system-wide modifications.
if test -f /etc/zshenv.local; then
. /etc/zshenv.local
. /etc/zshenv.local
fi
'';

Expand All @@ -130,7 +132,7 @@ in

# Read system-wide modifications.
if test -f /etc/zprofile.local; then
. /etc/zprofile.local
. /etc/zprofile.local
fi
'';

Expand All @@ -156,7 +158,7 @@ in

# Tell zsh how to find installed completions
for p in ''${(z)NIX_PROFILES}; do
fpath+=($p/share/zsh/site-functions $p/share/zsh/$ZSH_VERSION/functions $p/share/zsh/vendor-completions)
fpath+=($p/share/zsh/site-functions $p/share/zsh/$ZSH_VERSION/functions $p/share/zsh/vendor-completions)
done

${optionalString cfg.enableCompletion "autoload -U compinit && compinit"}
Expand All @@ -171,7 +173,7 @@ in

# Read system-wide modifications.
if test -f /etc/zshrc.local; then
. /etc/zshrc.local
. /etc/zshrc.local
fi
'';

Expand Down