From 0c7a53d2d0041c027f477fe89f8860ed5ae0b98d Mon Sep 17 00:00:00 2001 From: aszlig Date: Tue, 17 May 2016 01:48:26 +0200 Subject: modules/profiles/*: Rename to modules/core/* The name "profiles" really doesn't match what these modules are for. Instead they define the very core of Vuizvui and its internal plumbing and those options are available/enabled to all machines and modules. Signed-off-by: aszlig --- modules/core/common.nix | 88 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 modules/core/common.nix (limited to 'modules/core/common.nix') diff --git a/modules/core/common.nix b/modules/core/common.nix new file mode 100644 index 00000000..dbaec7ed --- /dev/null +++ b/modules/core/common.nix @@ -0,0 +1,88 @@ +{ config, pkgs, lib, ... }: + +with lib; + +{ + options.vuizvui = { + modifyNixPath = mkOption { + type = types.bool; + default = true; + description = '' + Whether to modify NIX_PATH for vuizvui, so that <nixpkgs> points + to the path within the Nix channel instead of the + nixpkgs or nixos channel from the + root user. + ''; + }; + + enableGlobalNixpkgsConfig = mkOption { + type = types.bool; + default = false; + description = '' + Enabling this links nixos-config to be used by + nixpkgs-config, which essentially means that + attributes defined in are also in effect + for user environments. + ''; + }; + + channelName = mkOption { + type = types.str; + default = "vuizvui"; + description = '' + The channel name which is used to refer to vuizvui. + ''; + }; + }; + + config = let + nixpkgs = import ../../nixpkgs-path.nix; + system = config.nixpkgs.system; + + in { + nixpkgs.config.packageOverrides = pkgs: { + # XXX: REAAAALLLY UGLY hack to force the Headcounter Hydra to rebuild GHC + # and all its packages and not use binary substitution. + haskellPackages = pkgs.haskellPackages.override { + ghc = pkgs.haskellPackages.ghc.overrideDerivation (const { + forceRebuild = true; + }); + }; + + inherit (import ../../pkgs { + # We need to make sure to incorporate other package overrides, + # otherwise we are unable to override packages in vuizvui.*. + pkgs = pkgs // config.nixpkgs.config.packageOverrides pkgs; + }) vuizvui; + }; + + nix.binaryCachePublicKeys = [ + "headcounter.org:/7YANMvnQnyvcVB6rgFTdb8p5LG1OTXaO+21CaOSBzg=" + ]; + + environment.variables.NIXPKGS_CONFIG = let + nixpkgsCfg = toString (pkgs.writeText "nixpkgs-try-config.nix" '' + if (builtins.tryEval ).success + then import + else {} + ''); + in mkIf config.vuizvui.enableGlobalNixpkgsConfig (mkForce nixpkgsCfg); + + nix.nixPath = let + rootChannelsPath = "/nix/var/nix/profiles/per-user/root/channels"; + channelPath = "${rootChannelsPath}/${config.vuizvui.channelName}"; + nixosConfig = "/etc/nixos/configuration.nix"; + nixpkgsConfig = "nixpkgs-config=${pkgs.writeText "nixpkgs-config.nix" '' + (import ${nixpkgs}/nixos/lib/eval-config.nix { + modules = [ ${nixosConfig} ]; + }).config.nixpkgs.config + ''}"; + nixPath = [ + "vuizvui=${channelPath}" + "nixpkgs=${channelPath}/nixpkgs" + "nixos-config=${nixosConfig}" + rootChannelsPath + ] ++ optional config.vuizvui.enableGlobalNixpkgsConfig nixpkgsConfig; + in mkIf config.vuizvui.modifyNixPath (mkOverride 90 nixPath); + }; +} -- cgit 1.4.1