# Ad-Hoc Package Management

With the command `nix-env`, you can install and uninstall packages from the command line. For instance, to install Mozilla Thunderbird:

    $ nix-env -iA nixos.thunderbird

If you invoke this as root, the package is installed in the Nix profile `/nix/var/nix/profiles/default` and visible to all users of the system; otherwise, the package ends up in `/nix/var/nix/profiles/per-user/username/profile` and is not visible to other users. The `-A` flag specifies the package by its attribute name; without it, the package is installed by matching against its package name (e.g. `thunderbird`). The latter is slower because it requires matching against all available Nix packages, and is ambiguous if there are multiple matching packages.

Packages come from the NixOS channel. You typically upgrade a package by updating to the latest version of the NixOS channel:

    $ nix-channel --update nixos

and then running `nix-env -i` again. Other packages in the profile are not affected; this is the crucial difference with the declarative style of package management, where running `nixos-rebuild switch` causes all packages to be updated to their current versions in the NixOS channel. You can however upgrade all packages for which there is a newer version by doing:

    $ nix-env -u '*'

A package can be uninstalled using the `-e` flag:

    $ nix-env -e thunderbird

Finally, you can roll back an undesirable `nix-env` action:

    $ nix-env --rollback

`nix-env` has many more flags. For details, see the nix-env(1) manpage or the Nix manual.