Overlays: Difference between revisions
imported>Samueldr m Adds a sub-title as mediawiki references are hard to integrate with an existing list. |
imported>Samueldr m Adds defaults to Using <tt>nixpkgs.overlays</tt> as <tt><nixpkgs-overlays></tt> |
||
Line 41: | Line 41: | ||
===== Using <tt>nixpkgs.overlays</tt> as <tt><nixpkgs-overlays></tt> ===== | ===== Using <tt>nixpkgs.overlays</tt> as <tt><nixpkgs-overlays></tt> ===== | ||
In <tt>configuration.nix</tt>, | In <tt>configuration.nix</tt>, depending on whether your <tt>configuration.nix</tt> already defines <code>nix.nixPath</code>, add one of those definitions: | ||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
# With existing `nix.nixPath` entry: | |||
nix.nixPath = [ | nix.nixPath = [ | ||
# Add the following to existing entries. | |||
"nixpkgs-overlays=/etc/nixos/overlays-compat/" | "nixpkgs-overlays=/etc/nixos/overlays-compat/" | ||
]; | ]; | ||
# Without any `nix.nixPath` entry: | |||
nix.nixPath = | |||
# Prepend default nixPath values. | |||
options.nix.nixPath.default ++ | |||
# Append our nixpkgs-overlays. | |||
[ "nixpkgs-overlays=/etc/nixos/overlays-compat/" ] | |||
; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revision as of 18:19, 25 June 2018
Overlays provide a method to extend and change nixpkgs. They replace constructs like packageOverride
and overridePackages
.
Consider a simple example of setting the default proxy in Google Chrome:
let overlay1 = self: super:
{
google-chrome = super.google-chrome.override {
commandLineArgs =
"--proxy-server='https=127.0.0.1:3128;http=127.0.0.1:3128'";
};
};
Applying overlays manually
import <nixpkgs> { overlays = [ overlay1 overlay2 ]; }
Applying overlays automatically
On the user level
A list of overlays placed into ~/.config/nixpkgs/overlays.nix
will be automatically loaded by all nix tools.
Alternatively, you can put each overlay in its own .nix file under your ~/.config/nixpkgs/overlays
directory.
On the system level
If you want your overlays to be accessible by nix tools and also in the system-wide configuration, add nixpkgs-overlays
to your NIX_PATH
:
NIX_PATH="$NIX_PATH:nixpkgs-overlays=/etc/nixos/overlays"
Currently nixos-rebuild
only works with a <nixpkgs-overlays>
path that is a directory.
There is a configuration option nixpkgs.overlays
. Overlays set here will not be automatically applied by nix tools.
Using nixpkgs.overlays as <nixpkgs-overlays>
In configuration.nix, depending on whether your configuration.nix already defines nix.nixPath
, add one of those definitions:
# With existing `nix.nixPath` entry:
nix.nixPath = [
# Add the following to existing entries.
"nixpkgs-overlays=/etc/nixos/overlays-compat/"
];
# Without any `nix.nixPath` entry:
nix.nixPath =
# Prepend default nixPath values.
options.nix.nixPath.default ++
# Append our nixpkgs-overlays.
[ "nixpkgs-overlays=/etc/nixos/overlays-compat/" ]
;
And, add the file /etc/nixos/overlays-compat/overlays.nix[1]:
self: super:
with super.lib;
let
# Using the nixos plumbing that's used to evaluate the config...
eval = import <nixpkgs/nixos/lib/eval-config.nix>;
# Evaluate the config,
paths = (eval {modules = [(import <nixos-config>)];})
# then get the `nixpkgs.overlays` option.
.config.nixpkgs.overlays
;
in
foldl' (flip extends) (_: super) paths self