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