(home manager) can i somehow put `~/.local/bin` before `~/.nix-profile/bin` in my `$PATH`?

I'm trying to get my scripts to have precedence over the home manager stuff.

Do you happen to know how to do that?

(not sure it's relevant, but I'm using home-manager in tumbleweed, not nixos)


edit:

Thanks for the replies - I finally got time to investigate this properly so here's a few notes (hopefully useful for someone somehow).

~/.nix-profile/bin is added (prepended) to the path by the files in /nix/var/nix/profiles/default/etc/profile.d/, sourced every time my shell (fish, but it should be the same for others) starts (rg -L nix/profiles /etc 2> /dev/null for how they are sourced).

The path I set in homemanager (via home.sessionPath, which is added (prepended) to home.sessionSearchVariables.PATH) ends up in .nix-profile/etc/profile.d/hm-session-vars.sh, which is sourced via ~/.profile once per session (I think? certainly not when I start fish or bash). This may be due to how I installed home-manager... I don't recall.

So... the solution is to set the path again in my shell (possibly via programs.fish.shellInitLast - I din't check yet).

7 points · 2 comments · view on lemmy.world

2 Comments

Oinks@lemmy.blahaj.zone · 4 pts · 204d

As far as I'm aware Home Manager doesn't set PATH at all, though the Nix installer does. I'm not sure where it adds to the PATH, it might edit /etc/profile or something like that. You should be able to change it since you're not on NixOS.

Alternatively this should also do the trick, although it's a bit ugly:

home.sessionVariables.PATH = "$HOME/.local/bin:$PATH";
stupiv@lemmy.ml · 3 pts · 203d
  programs.fish.enable = true; # Enable your shell
  home.sessionPath = ["$HOME/.local/bin"];

I found the option by searching for "PATH" at home-manager-options.extranix.com.

home.sessionPath will generate hm-session-vars files for different shells. You can read it by cat ~/.nix-profile/etc/profile.d/hm-session-vars.sh.

Enabling the shell is required for the respective hm-session-vars file to be sourced into the shell.