# `~/.nixpkgs/config.nix`: global configuration

Nix packages can be configured to allow or deny certain options.

To apply the configuration edit `~/.nixpkgs/config.nix` and set it like

    {
      allowUnfree = true;
    }

and will allow the Nix package manager to install unfree licensed packages.

The configuration as listed also applies to NixOS under `nixpkgs.config` set.

- Allow installing of packages that are distributed under unfree license by setting

      allowUnfree =
          true;

  or deny them by setting it to `false`.

  Same can be achieved by setting the environment variable:

      $ export NIXPKGS_ALLOW_UNFREE=1

- Whenever unfree packages are not allowed, single packages can still be allowed by a predicate function that accepts package as an argument and should return a boolean:

      allowUnfreePredicate = (pkg: ...);

  Example to allow flash player only:

      allowUnfreePredicate = (pkg: pkgs.lib.hasPrefix "flashplayer-" pkg.name);

- Whenever unfree packages are not allowed, packages can still be whitelisted by their license:

      whitelistedLicenses = with stdenv.lib.licenses; [ amd wtfpl ];

- In addition to whitelisting licenses which are denied by the `allowUnfree` setting, you can also explicitely deny installation of packages which have a certain license:

      blacklistedLicenses = with stdenv.lib.licenses; [ agpl3 gpl3 ];

A complete list of licenses can be found in the file `lib/licenses.nix` of the nix package tree.

## Modify packages via `packageOverrides`

You can define a function called `packageOverrides` in your local `~/.nixpkgs/config.nix` to overide nix packages. It must be a function that takes pkgs as an argument and return modified set of packages.

    {
      packageOverrides = pkgs: rec {
        foo = pkgs.foo.override { ... };
      };
    }