Adding programs to PATH: Difference between revisions

Axka (talk | contribs)
Explain PATH
Tags: Mobile edit Mobile web edit Visual edit
Chkno (talk | contribs)
Distinguish between *imperative* nix-env (bad) and *declarative* nix-env (good)
 
Line 29: Line 29:
|name=~/.config/home-manager/home.nix|lang=nix}}
|name=~/.config/home-manager/home.nix|lang=nix}}


=== <code>nix-env</code> ===
=== Imperative <code>nix-env</code> ===
{{Main|Nix profiles}}
{{Main|Nix profiles}}
<code>nix-env -iA hello</code>
<code>nix-env -iA hello</code>
{{Warning|<code>nix-env</code> has some pitfalls and is considered deprecated by some: https://stop-using-nix-env.privatevoid.net/}}
{{Warning|Imperative <code>nix-env</code> has some pitfalls and is considered deprecated by some: https://stop-using-nix-env.privatevoid.net/}}
 
=== Declarative <code>nix-env</code> ===
In an [[overlay]], create a new package that is the list of packages you'd like installed.  Example:{{file|||3=
final: prev: {
  userPackages = final.buildEnv {
    name = "userPackages";
    paths = with final; [
 
      hello
 
    ];
  };
}
|name=~/.config/nixpkgs/overlays/userPackages.nix|lang=nix}}
Then run <code>nix-env -riA nixpkgs.userPackages</code> to make this the only installed package.  Use the same command after a channel update to get package updates (don't use <code>nix-env --upgrade</code>—it's very slow and will run out of RAM on smaller machines).


=== <code>nix profile</code> (Flakes) ===
=== <code>nix profile</code> (Flakes) ===