mirror of
https://github.com/NixOS/nix
synced 2025-06-24 22:11:15 +02:00
In order for the script not be sourced multiple times by the same shell instance, `__ETC_PROFILE_NIX_SOURCED` needs to be set with a `--global` flag. Both files are almost identical. And style differences make it harder to see what is actually different and keep them in sync, when it is required.
70 lines
2.6 KiB
Fish
70 lines
2.6 KiB
Fish
# Only execute this file once per shell.
|
|
if test -z "$HOME" || test -z "$USER" || \
|
|
test -n "$__ETC_PROFILE_NIX_SOURCED"
|
|
exit
|
|
end
|
|
|
|
set --global __ETC_PROFILE_NIX_SOURCED 1
|
|
|
|
# Local helpers
|
|
|
|
function add_path --argument-names new_path
|
|
if type -q fish_add_path
|
|
# fish 3.2.0 or newer
|
|
fish_add_path --prepend --global $new_path
|
|
else
|
|
# older versions of fish
|
|
if not contains $new_path $fish_user_paths
|
|
set --global fish_user_paths $new_path $fish_user_paths
|
|
end
|
|
end
|
|
end
|
|
|
|
# Main configuration
|
|
|
|
# Set up the per-user profile.
|
|
|
|
set NIX_LINK $HOME/.nix-profile
|
|
|
|
# Set up environment.
|
|
# This part should be kept in sync with nixpkgs:nixos/modules/programs/environment.nix
|
|
set --export NIX_PROFILES "@localstatedir@/nix/profiles/default $HOME/.nix-profile"
|
|
|
|
# Populate bash completions, .desktop files, etc
|
|
if test -z "$XDG_DATA_DIRS"
|
|
# According to XDG spec the default is /usr/local/share:/usr/share, don't set something that prevents that default
|
|
set --export XDG_DATA_DIRS "/usr/local/share:/usr/share:$NIX_LINK/share:/nix/var/nix/profiles/default/share"
|
|
else
|
|
set --export XDG_DATA_DIRS "$XDG_DATA_DIRS:$NIX_LINK/share:/nix/var/nix/profiles/default/share"
|
|
end
|
|
|
|
# Set $NIX_SSL_CERT_FILE so that Nixpkgs applications like curl work.
|
|
if test -n "$NIX_SSH_CERT_FILE"
|
|
: # Allow users to override the NIX_SSL_CERT_FILE
|
|
else if test -e /etc/ssl/certs/ca-certificates.crt # NixOS, Ubuntu, Debian, Gentoo, Arch
|
|
set --export NIX_SSL_CERT_FILE /etc/ssl/certs/ca-certificates.crt
|
|
else if test -e /etc/ssl/ca-bundle.pem # openSUSE Tumbleweed
|
|
set --export NIX_SSL_CERT_FILE /etc/ssl/ca-bundle.pem
|
|
else if test -e /etc/ssl/certs/ca-bundle.crt # Old NixOS
|
|
set --export NIX_SSL_CERT_FILE /etc/ssl/certs/ca-bundle.crt
|
|
else if test -e /etc/pki/tls/certs/ca-bundle.crt # Fedora, CentOS
|
|
set --export NIX_SSL_CERT_FILE /etc/pki/tls/certs/ca-bundle.crt
|
|
else if test -e "$NIX_LINK/etc/ssl/certs/ca-bundle.crt" # fall back to cacert in Nix profile
|
|
set --export NIX_SSL_CERT_FILE "$NIX_LINK/etc/ssl/certs/ca-bundle.crt"
|
|
else if test -e "$NIX_LINK/etc/ca-bundle.crt" # old cacert in Nix profile
|
|
set --export NIX_SSL_CERT_FILE "$NIX_LINK/etc/ca-bundle.crt"
|
|
end
|
|
|
|
# Only use MANPATH if it is already set. In general `man` will just simply
|
|
# pick up `.nix-profile/share/man` because is it close to `.nix-profile/bin`
|
|
# which is in the $PATH. For more info, run `manpath -d`.
|
|
if set --query MANPATH
|
|
set --export --prepend --path MANPATH "$NIX_LINK/share/man"
|
|
end
|
|
|
|
add_path "$NIX_LINK/bin"
|
|
set --erase NIX_LINK
|
|
|
|
# Cleanup
|
|
|
|
functions -e add_path
|