From 66ddb1c3229e5e85b0596bca6a4d730b3247cd76 Mon Sep 17 00:00:00 2001 From: Luca Bruno Date: Thu, 5 Jun 2014 18:43:26 +0200 Subject: Add system.replaceRuntimeDependencies to quickly replace system dependencies --- nixos/modules/system/activation/top-level.nix | 33 ++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'nixos') diff --git a/nixos/modules/system/activation/top-level.nix b/nixos/modules/system/activation/top-level.nix index b739ef693ce9..62999dceee39 100644 --- a/nixos/modules/system/activation/top-level.nix +++ b/nixos/modules/system/activation/top-level.nix @@ -95,7 +95,7 @@ let # kernel, systemd units, init scripts, etc.) as well as a script # `switch-to-configuration' that activates the configuration and # makes it bootable. - system = showWarnings ( + baseSystem = showWarnings ( if [] == failed then pkgs.stdenv.mkDerivation { name = "nixos-${config.system.nixosVersion}"; preferLocalBuild = true; @@ -118,6 +118,10 @@ let perl = "${pkgs.perl}/bin/perl -I${pkgs.perlPackages.FileSlurp}/lib/perl5/site_perl"; } else throw "\nFailed assertions:\n${concatStringsSep "\n" (map (x: "- ${x}") failed)}"); + # Replace runtime dependencies + system = fold ({ oldDependency, newDependency }: drv: + pkgs.replaceDependency { inherit oldDependency newDependency drv; } + ) baseSystem config.system.replaceRuntimeDependencies; in @@ -184,6 +188,33 @@ in ''; }; + system.replaceRuntimeDependencies = mkOption { + default = []; + example = lib.literalExample "[ ({ original = pkgs.openssl; replacement = pkgs.callPackage /path/to/openssl { ... }; }) ]"; + type = types.listOf (types.submodule ( + { options, ... }: { + options.original = mkOption { + type = types.package; + description = "The original package to override."; + }; + + options.replacement = mkOption { + type = types.package; + description = "The replacement package."; + }; + }) + ); + apply = map ({ original, replacement, ... }: { + oldDependency = original; + newDependency = replacement; + }); + description = '' + List of packages to override without doing a full rebuild. + The original derivation and replacement derivation must have the same + name length, and ideally should have close-to-identical directory layout. + ''; + }; + }; -- cgit 1.4.1