I am using fish with nixos and always had something weird happen
programs.fish.interactiveShellInit = ''
set PATH $PATH:/etc/nixos/bin:~/.local/bin:~/.cargo/bin
'';
(note: this is wrong fish syntax)
this would repeat the path over and over, between every other occurrence
echo $PATH
/run/wrappers/bin ~/.cargo/bin ~/.local/bin ~/.cargo/bin /etc/nixos/bin ~/.cargo/bin ~/.cargo/bin ~/.cargo/bin /home/user/.local/share/flatpak/exports/bin ~/.cargo/bin ~/.local/bin ~/.cargo/bin /etc/nixos/bin ~/.cargo/bin ~/.cargo/bin ~/.cargo/bin /var/lib/flatpak/exports/bin ~/.cargo/bin ~/.local/bin ~/.cargo/bin /etc/nixos/bin ~/.cargo/bin ~/.cargo/bin ~/.cargo/bin /home/user/.nix-profile/bin ~/.cargo/bin ~/.local/bin ~/.cargo/bin /etc/nixos/bin ~/.cargo/bin ~/.cargo/bin ~/.cargo/bin /nix/profile/bin ~/.cargo/bin ~/.local/bin ~/.cargo/bin /etc/nixos/bin ~/.cargo/bin ~/.cargo/bin ~/.cargo/bin /home/user/.local/state/nix/profile/bin ~/.cargo/bin ~/.local/bin ~/.cargo/bin /etc/nixos/bin ~/.cargo/bin ~/.cargo/bin ~/.cargo/bin /etc/profiles/per-user/user/bin ~/.cargo/bin ~/.local/bin ~/.cargo/bin /etc/nixos/bin ~/.cargo/bin ~/.cargo/bin ~/.cargo/bin /nix/var/nix/profiles/default/bin ~/.cargo/bin ~/.local/bin ~/.cargo/bin /etc/nixos/bin ~/.cargo/bin ~/.cargo/bin ~/.cargo/bin /run/current-system/sw/bin ~/.cargo/bin ~/.local/bin ~/.cargo/bin /etc/nixos/bin ~/.cargo/bin ~/.cargo/bin ~/.cargo/bin
then I changed it to this, which fixed it
programs.fish.interactiveShellInit = ''
fish_add_path /etc/nixos/bin ~/.cargo/bin
'';
echo $PATH
/home/user/.cargo/bin /etc/nixos/bin /run/wrappers/bin /home/user/.local/share/flatpak/exports/bin /var/lib/flatpak/exports/bin /home/user/.nix-profile/bin /nix/profile/bin /home/user/.local/state/nix/profile/bin /etc/profiles/per-user/user/bin /nix/var/nix/profiles/default/bin /run/current-system/sw/bin
anyone know why this happened?
For anyone interested in configuring fish, I put all custom functions in the interactiveShellInit and use environment.shellAliases to get aliases in all shells.