diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2018-04-05 15:22:45 -0400 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2018-04-06 12:41:44 -0400 |
commit | c6f7d4367894047592cc412740f0c1f5b2ca2b59 (patch) | |
tree | 0079c8f9633c2c48e2e57459eb4e40ee17bb31f8 /nixos | |
parent | 15a2dca15c25279843374003c8ae553e3b4af385 (diff) | |
download | nixlib-c6f7d4367894047592cc412740f0c1f5b2ca2b59.tar nixlib-c6f7d4367894047592cc412740f0c1f5b2ca2b59.tar.gz nixlib-c6f7d4367894047592cc412740f0c1f5b2ca2b59.tar.bz2 nixlib-c6f7d4367894047592cc412740f0c1f5b2ca2b59.tar.lz nixlib-c6f7d4367894047592cc412740f0c1f5b2ca2b59.tar.xz nixlib-c6f7d4367894047592cc412740f0c1f5b2ca2b59.tar.zst nixlib-c6f7d4367894047592cc412740f0c1f5b2ca2b59.zip |
nixpkgs module: Clean up platform options
- `localSystem` is added, it strictly supercedes system - `crossSystem`'s description mentions `localSystem` (and vice versa). - No more weird special casing I don't even understand TEMP
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/doc/manual/man-nixos-build-vms.xml | 6 | ||||
-rw-r--r-- | nixos/lib/eval-config.nix | 4 | ||||
-rw-r--r-- | nixos/modules/misc/nixpkgs.nix | 65 | ||||
-rw-r--r-- | nixos/modules/services/misc/dysnomia.nix | 2 | ||||
-rw-r--r-- | nixos/modules/services/misc/nixos-manual.nix | 2 | ||||
-rw-r--r-- | nixos/modules/virtualisation/containers.nix | 4 |
6 files changed, 62 insertions, 21 deletions
diff --git a/nixos/doc/manual/man-nixos-build-vms.xml b/nixos/doc/manual/man-nixos-build-vms.xml index 878ebee05273..f4b59a7c6d4b 100644 --- a/nixos/doc/manual/man-nixos-build-vms.xml +++ b/nixos/doc/manual/man-nixos-build-vms.xml @@ -40,7 +40,7 @@ points to the generated virtual network. test1 = {pkgs, config, ...}: { services.openssh.enable = true; - nixpkgs.system = "i686-linux"; + nixpkgs.localSystem.system = "i686-linux"; deployment.targetHost = "test1.example.net"; # Other NixOS options @@ -51,7 +51,7 @@ points to the generated virtual network. services.openssh.enable = true; services.httpd.enable = true; environment.systemPackages = [ pkgs.lynx ]; - nixpkgs.system = "x86_64-linux"; + nixpkgs.localSystem.system = "x86_64-linux"; deployment.targetHost = "test2.example.net"; # Other NixOS options @@ -66,7 +66,7 @@ In each NixOS configuration, two attributes have a special meaning. The <varname>deployment.targetHost</varname> specifies the address (domain name or IP address) of the system which is used by <command>ssh</command> to perform -remote deployment operations. The <varname>nixpkgs.system</varname> +remote deployment operations. The <varname>nixpkgs.localSystem.system</varname> attribute can be used to specify an architecture for the target machine, such as <varname>i686-linux</varname> which builds a 32-bit NixOS configuration. Omitting this property will build the configuration diff --git a/nixos/lib/eval-config.nix b/nixos/lib/eval-config.nix index 2e7971cca810..97c79487df4c 100644 --- a/nixos/lib/eval-config.nix +++ b/nixos/lib/eval-config.nix @@ -26,7 +26,7 @@ , lib ? import ../../lib }: -let extraArgs_ = extraArgs; pkgs_ = pkgs; system_ = system; +let extraArgs_ = extraArgs; pkgs_ = pkgs; extraModules = let e = builtins.getEnv "NIXOS_EXTRA_MODULE_PATH"; in if e == "" then [] else [(import (builtins.toPath e))]; in @@ -36,7 +36,7 @@ let _file = ./eval-config.nix; key = _file; config = { - nixpkgs.system = lib.mkDefault system_; + nixpkgs.localSystem = lib.mkDefault { inherit system; }; _module.args.pkgs = lib.mkIf (pkgs_ != null) (lib.mkForce pkgs_); }; }; diff --git a/nixos/modules/misc/nixpkgs.nix b/nixos/modules/misc/nixpkgs.nix index 9217250eec29..b8a55a24394e 100644 --- a/nixos/modules/misc/nixpkgs.nix +++ b/nixos/modules/misc/nixpkgs.nix @@ -58,10 +58,13 @@ in pkgs = mkOption { defaultText = literalExample ''import "''${nixos}/.." { - inherit (config.nixpkgs) config overlays system; + inherit (config.nixpkgs) config overlays localSystem crossSystem; } ''; - default = import ../../.. { inherit (cfg) config overlays system crossSystem; }; + default = import ../../.. { + localSystem = { inherit (cfg) system; } // cfg.localSystem; + inherit (cfg) config overlays crossSystem; + }; type = pkgsType; example = literalExample ''import <nixpkgs> {}''; description = '' @@ -73,8 +76,9 @@ in relative to the location of this NixOS module, because NixOS and Nixpkgs are distributed together for consistency, so the <code>nixos</code> in the default value is in fact a - relative path. The <code>config</code>, <code>overlays</code> - and <code>system</code> come from this option's siblings. + relative path. The <code>config</code>, <code>overlays</code>, + <code>localSystem</code>, and <code>crossSystem</code> come + from this option's siblings. This option can be used by applications like NixOps to increase the performance of evaluation, or to create packages that depend @@ -130,13 +134,40 @@ in ''; }; + localSystem = mkOption { + type = types.attrs; # TODO utilize lib.systems.parsedPlatform + default = { system = builtins.currentSystem; }; + example = { system = "aarch64-linux"; config = "aarch64-unknown-linux-gnu"; }; + defaultText = literalExample + ''(import "''${nixos}/../lib").lib.systems.examples.aarch64-multiplatform''; + description = '' + Specifies the platform on which NixOS should be built. When + <code>nixpkgs.crossSystem</code> is unset, it also specifies + the platform <emphasis>for</emphasis> which NixOS should be + built. If this option is unset, it defaults to the platform + type of the machine where evaluation happens. Specifying this + option is useful when doing distributed multi-platform + deployment, or when building virtual machines. See its + description in the Nixpkgs manual for more details. + + Ignored when <code>nixpkgs.pkgs</code> is set. + ''; + }; + crossSystem = mkOption { - type = types.nullOr types.attrs; + type = types.nullOr types.attrs; # TODO utilize lib.systems.parsedPlatform default = null; + example = { system = "aarch64-linux"; config = "aarch64-unknown-linux-gnu"; }; + defaultText = literalExample + ''(import "''${nixos}/../lib").lib.systems.examples.aarch64-multiplatform''; description = '' - The description of the system we're cross-compiling to, or null - if this isn't a cross-compile. See the description of the - crossSystem argument in the nixpkgs manual. + Specifies the platform for which NixOS should be + built. Specify this only if it is different from + <code>nixpkgs.localSystem</code>, the platform + <emphasis>on</emphasis> which NixOS should be built. In other + words, specify this to cross-compile NixOS. Otherwise it + should be set as null, the default. See its description in the + Nixpkgs manual for more details. Ignored when <code>nixpkgs.pkgs</code> is set. ''; @@ -146,10 +177,20 @@ in type = types.str; example = "i686-linux"; description = '' - Specifies the Nix platform type for which NixOS 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. + Specifies the Nix platform type on which NixOS should be built. + It is better to specify <code>nixpkgs.localSystem</code> instead. + <programlisting> + { + nixpkgs.system = ..; + } + </programlisting> + is the same as + <programlisting> + { + nixpkgs.localSystem.system = ..; + } + </programlisting> + See <code>nixpkgs.localSystem</code> for more information. Ignored when <code>nixpkgs.pkgs</code> is set. ''; diff --git a/nixos/modules/services/misc/dysnomia.nix b/nixos/modules/services/misc/dysnomia.nix index 25cd0038e36d..9e66e0811ab7 100644 --- a/nixos/modules/services/misc/dysnomia.nix +++ b/nixos/modules/services/misc/dysnomia.nix @@ -158,7 +158,7 @@ in services.dysnomia.properties = { hostname = config.networking.hostName; - system = if config.nixpkgs.system == "" then builtins.currentSystem else config.nixpkgs.system; + inherit (config.nixpkgs.localSystem) system; supportedTypes = (import "${pkgs.stdenv.mkDerivation { name = "supportedtypes"; diff --git a/nixos/modules/services/misc/nixos-manual.nix b/nixos/modules/services/misc/nixos-manual.nix index abf506ea7c67..4bd1c20edf71 100644 --- a/nixos/modules/services/misc/nixos-manual.nix +++ b/nixos/modules/services/misc/nixos-manual.nix @@ -23,7 +23,7 @@ let options = let scrubbedEval = evalModules { - modules = [ { nixpkgs.system = config.nixpkgs.system; } ] ++ baseModules; + modules = [ { nixpkgs.localSystem = config.nixpkgs.localSystem; } ] ++ baseModules; args = (config._module.args) // { modules = [ ]; }; specialArgs = { pkgs = scrubDerivations "pkgs" pkgs; }; }; diff --git a/nixos/modules/virtualisation/containers.nix b/nixos/modules/virtualisation/containers.nix index e54a5fe7d40c..7ec443248de6 100644 --- a/nixos/modules/virtualisation/containers.nix +++ b/nixos/modules/virtualisation/containers.nix @@ -112,7 +112,7 @@ let # If the host is 64-bit and the container is 32-bit, add a # --personality flag. - ${optionalString (config.nixpkgs.system == "x86_64-linux") '' + ${optionalString (config.nixpkgs.localSystem.system == "x86_64-linux") '' if [ "$(< ''${SYSTEM_PATH:-/nix/var/nix/profiles/per-container/$INSTANCE/system}/system)" = i686-linux ]; then extraFlags+=" --personality=x86" fi @@ -255,7 +255,7 @@ let }; - system = config.nixpkgs.system; + system = config.nixpkgs.localSystem.system; bindMountOpts = { name, config, ... }: { |