Author: NicolasPierron
Date: Mon Sep  5 09:19:59 2011
New Revision: 29021
URL: https://svn.nixos.org/websvn/nix/?rev=29021&sc=1

Log:
Add merge capabilities to nixpkgs.config option.

Modified:
   nixos/trunk/modules/misc/nixpkgs.nix

Modified: nixos/trunk/modules/misc/nixpkgs.nix
==============================================================================
--- nixos/trunk/modules/misc/nixpkgs.nix        Mon Sep  5 09:19:55 2011        
(r29020)
+++ nixos/trunk/modules/misc/nixpkgs.nix        Mon Sep  5 09:19:59 2011        
(r29021)
@@ -1,5 +1,32 @@
 { config, pkgs, ... }:
 
+with pkgs.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:
+    lhs // rhs //
+    optionalAttrs (lhs ? packageOverrides) {
+      packageOverrides = pkgs:
+        optCall lhs.packageOverrides pkgs //
+        optCall (attrByPath ["packageOverrides"] ({}) rhs) pkgs;
+    };
+
+  configType = mkOptionType {
+    name = "nixpkgs config";
+    check = traceValIfNot isConfig;
+    merge = fold mergeConfig {};
+  };
+
+in
+
 {
   options = {
 
@@ -8,8 +35,17 @@
       example = {
         firefox.enableGeckoMediaPlayer = true;
       };
+      type = configType;
       description = ''
-        The configuration of the Nix Packages collection.
+        The configuration of the Nix Packages collection.  This expression
+        defines default value of attributes and allow packages to be
+        overriden globally via the `packageOverrides'.
+
+        the `packageOverrides' configuration option must be a set of new or
+        overriden packages.  Any occurence of `pkgs' inside this attribute
+        set refers to the *original* (un-overriden) set of packages,
+        allowing packageOverrides attributes to refer to the original
+        attributes (e.g. "packageOverrides.foo = ... pkgs.foo ...").
       '';
     };
 
_______________________________________________
nix-commits mailing list
nix-comm...@cs.uu.nl
http://mail.cs.uu.nl/mailman/listinfo/nix-commits

Reply via email to