aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Helgesson <robert@rycee.net>2017-10-20 23:22:47 +0200
committerRobert Helgesson <robert@rycee.net>2017-10-24 01:29:35 +0200
commit7417d8e86e9b1bfa47482f29604315f5ec2696bf (patch)
tree754226822a49ce24575c6d3fe39e4c819547d55a
parentdf84c466c18b8e8d7c2b69254bb015fc56196457 (diff)
nixpkgs: add module
-rw-r--r--modules/default.nix6
-rw-r--r--modules/misc/news.nix12
-rw-r--r--modules/misc/nixpkgs.nix119
3 files changed, 135 insertions, 2 deletions
diff --git a/modules/default.nix b/modules/default.nix
index a87299472c0..4cba27ffb69 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -11,12 +11,13 @@ with lib;
let
modules = [
- ./home-environment.nix
./files.nix
+ ./home-environment.nix
./manual.nix
./misc/fontconfig.nix
./misc/gtk.nix
./misc/news.nix
+ ./misc/nixpkgs.nix
./misc/pam.nix
./programs/bash.nix
./programs/beets.nix
@@ -73,9 +74,10 @@ let
fold f res res.config.warnings;
pkgsModule = {
- config._module.args.pkgs = lib.mkForce pkgs;
config._module.args.baseModules = modules;
+ config._module.args.pkgs = lib.mkDefault pkgs;
config._module.check = check;
+ config.nixpkgs.system = mkDefault pkgs.system;
};
rawModule = lib.evalModules {
diff --git a/modules/misc/news.nix b/modules/misc/news.nix
index b17b0454257..dc546ed0681 100644
--- a/modules/misc/news.nix
+++ b/modules/misc/news.nix
@@ -410,6 +410,18 @@ in
automatically whenever you do a switch.
'';
}
+
+ {
+ time = "2017-10-23T23:26:17+00:00";
+ message = ''
+ A new module is available: 'nixpkgs'.
+
+ Like the identically named NixOS module, this allows you to
+ set Nixpkgs options and define Nixpkgs overlays. Note, the
+ changes you make here will not automatically apply to Nix
+ commands run outside Home Manager.
+ '';
+ }
];
};
}
diff --git a/modules/misc/nixpkgs.nix b/modules/misc/nixpkgs.nix
new file mode 100644
index 00000000000..d86e2fd1c07
--- /dev/null
+++ b/modules/misc/nixpkgs.nix
@@ -0,0 +1,119 @@
+# Adapted from Nixpkgs.
+
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ isConfig = x:
+ builtins.isAttrs x || builtins.isFunction x;
+
+ optCall = f: x:
+ if builtins.isFunction f
+ then f x
+ else f;
+
+ mergeConfig = lhs_: rhs_:
+ let
+ lhs = optCall lhs_ { inherit pkgs; };
+ rhs = optCall rhs_ { inherit pkgs; };
+ in
+ lhs // rhs //
+ optionalAttrs (lhs ? packageOverrides) {
+ packageOverrides = pkgs:
+ optCall lhs.packageOverrides pkgs //
+ optCall (attrByPath ["packageOverrides"] ({}) rhs) pkgs;
+ } //
+ optionalAttrs (lhs ? perlPackageOverrides) {
+ perlPackageOverrides = pkgs:
+ optCall lhs.perlPackageOverrides pkgs //
+ optCall (attrByPath ["perlPackageOverrides"] ({}) rhs) pkgs;
+ };
+
+ configType = mkOptionType {
+ name = "nixpkgs-config";
+ description = "nixpkgs config";
+ check = traceValIfNot isConfig;
+ merge = args: fold (def: mergeConfig def.value) {};
+ };
+
+ overlayType = mkOptionType {
+ name = "nixpkgs-overlay";
+ description = "nixpkgs overlay";
+ check = builtins.isFunction;
+ merge = lib.mergeOneOption;
+ };
+
+ _pkgs = import <nixpkgs> (
+ filterAttrs (n: v: v != null) config.nixpkgs
+ );
+
+in
+
+{
+ options.nixpkgs = {
+ config = mkOption {
+ default = null;
+ example = { allowBroken = true; };
+ type = types.nullOr configType;
+ description = ''
+ The configuration of the Nix Packages collection. (For
+ details, see the Nixpkgs documentation.) It allows you to set
+ package configuration options.
+ </para><para>
+ If <literal>null</literal>, then configuration is taken from
+ the fallback location, for example,
+ <filename>~/.config/nixpkgs/config.nix</filename>.
+ '';
+ };
+
+ overlays = mkOption {
+ default = null;
+ example = literalExample
+ ''
+ [ (self: super: {
+ openssh = super.openssh.override {
+ hpnSupport = true;
+ withKerberos = true;
+ kerberos = self.libkrb5;
+ };
+ };
+ ) ]
+ '';
+ type = types.nullOr (types.listOf overlayType);
+ description = ''
+ List of overlays to use with the Nix Packages collection. (For
+ details, see the Nixpkgs documentation.) It allows you to
+ override packages globally. This is a function that takes as
+ an argument the <emphasis>original</emphasis> Nixpkgs. The
+ first argument should be used for finding dependencies, and
+ the second should be used for overriding recipes.
+ </para><para>
+ If <literal>null</literal>, then the overlays are taken from
+ the fallback location, for example,
+ <filename>~/.config/nixpkgs/overlays</filename>.
+ '';
+ };
+
+ system = mkOption {
+ type = types.str;
+ example = "i686-linux";
+ internal = true;
+ description = ''
+ Specifies the Nix platform type for which the user environment
+ should be built. If unset, it defaults to the platform type of
+ your host system. Specifying this option is useful when doing
+ distributed multi-platform deployment, or when building
+ virtual machines.
+ '';
+ };
+ };
+
+ config = {
+ _module.args = {
+ pkgs = _pkgs;
+ pkgs_i686 = _pkgs.pkgsi686Linux;
+ };
+ };
+}