Skip to content

Commit

Permalink
Merge #161
Browse files Browse the repository at this point in the history
161: Multi-arch support for hosts(nixosConfigurations) r=nrdxp a=Pacman99

fixes #72 

also related, #125 

This allows users to set `nixpkgs.system` to any architecture exported by the nixpkgs flake and nixpkgs.pkgs will be set to that system.

I also added `multiPkgs` as a special arg and made `nixpkgs.pkgs` a default. So if someone wanted to do crossSystem builds or anything else with pkgs, that is also an option(eg. mobile-nixos!!).

Co-authored-by: Pacman99 <[email protected]>
  • Loading branch information
bors[bot] and Pacman99 authored Mar 19, 2021
2 parents 2961c1e + 3c8d22a commit c050027
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 71 deletions.
57 changes: 28 additions & 29 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -36,48 +36,47 @@

extern = import ./extern { inherit inputs; };

pkgs' = os.mkPkgs;
multiPkgs = os.mkPkgs;

outputs =
let
system = "x86_64-linux";
pkgs = pkgs'.${system};
in
{
nixosConfigurations =
import ./hosts (nixos.lib.recursiveUpdate inputs {
inherit pkgs system extern;
inherit (pkgs) lib;
outputs = {
nixosConfigurations =
import ./hosts (nixos.lib.recursiveUpdate inputs {
inherit multiPkgs extern;
defaultSystem = "x86_64-linux";
lib = nixos.lib.extend (final: prev: {
dev = self.lib;
});
});

nixosModules =
let moduleList = import ./modules/module-list.nix;
in lib.pathsToImportedAttrs moduleList;
nixosModules =
let moduleList = import ./modules/module-list.nix;
in lib.pathsToImportedAttrs moduleList;

overlay = import ./pkgs;
overlays = lib.pathsToImportedAttrs (lib.pathsIn ./overlays);
overlay = import ./pkgs;
overlays = lib.pathsToImportedAttrs (lib.pathsIn ./overlays);

lib = import ./lib { inherit nixos pkgs self inputs; };
lib = import ./lib { inherit nixos self inputs; };

templates.flk.path = ./.;
templates.flk.description = "flk template";
defaultTemplate = self.templates.flk;
templates.flk.path = ./.;
templates.flk.description = "flk template";
defaultTemplate = self.templates.flk;

deploy.nodes = os.mkNodes deploy self.nixosConfigurations;
deploy.nodes = os.mkNodes deploy self.nixosConfigurations;
};

systemOutputs = utils.lib.eachDefaultSystem (system:
let pkgs = multiPkgs.${system}; in
{
checks =
let
tests = import ./tests { inherit self pkgs; };
deployChecks = builtins.mapAttrs
(system: deployLib: deployLib.deployChecks self.deploy)
deploy.lib;
tests = nixos.lib.optionalAttrs (system == "x86_64-linux")
(import ./tests { inherit self pkgs; });
deployHosts = nixos.lib.filterAttrs
(n: _: self.nixosConfigurations.${n}.config.nixpkgs.system == system) self.deploy.nodes;
deployChecks = deploy.lib.${system}.deployChecks { nodes = deployHosts; };
in
nixos.lib.recursiveUpdate tests deployChecks;
};

systemOutputs = utils.lib.eachDefaultSystem (system:
let pkgs = pkgs'.${system}; in
{
packages = utils.lib.flattenTreeSystem system
(os.mkPackages { inherit pkgs; });

Expand Down
4 changes: 4 additions & 0 deletions hosts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ that you intend to use on your machine.
Additionally, this is the perfect place to import anything you might need from
the [nixos-hardware][nixos-hardware] repository.

> ##### _Note:_
> Set `nixpkgs.system` to the architecture of this host, default is "x86_64-linux".
> Keep in mind that not all packages are available for all architectures.
## Example

hosts/librem.nix:
Expand Down
11 changes: 6 additions & 5 deletions hosts/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
, lib
, nixos
, override
, pkgs
, multiPkgs
, self
, system
, defaultSystem
, ...
}:
let
Expand All @@ -27,7 +27,7 @@ let
modules;
};

global = {
global = { config, ... }: {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;

Expand All @@ -39,7 +39,7 @@ let
"home-manager=${home}"
];

nixpkgs = { inherit pkgs; };
nixpkgs.pkgs = lib.mkDefault multiPkgs.${config.nixpkgs.system};

nix.registry = {
devos.flake = self;
Expand Down Expand Up @@ -79,7 +79,8 @@ let
};
in
dev.os.devosSystem {
inherit system specialArgs;
inherit specialArgs;
system = defaultSystem;
modules = modules // { inherit local lib; };
};

Expand Down
2 changes: 1 addition & 1 deletion lib/default.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
args@{ nixos, pkgs, self, ... }:
args@{ nixos, self, ... }:
let inherit (nixos) lib; in
lib.makeExtensible (final:
let callLibs = file: import file
Expand Down
71 changes: 35 additions & 36 deletions tests/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -59,45 +59,44 @@ let
nixosTesting.makeTest calledTest;
in
{
x86_64-linux = {
profilesTest = mkTest {
name = "profiles";
profilesTest = mkTest {
name = "profiles";

machine = { suites, ... }: {
imports = suites.allProfiles ++ suites.allUsers;
};

testScript = ''
machine.systemctl("is-system-running --wait")
'';
machine = { suites, ... }: {
imports = suites.allProfiles ++ suites.allUsers;
};

libTests = pkgs.runCommandNoCC "devos-lib-tests"
{
buildInputs = [
pkgs.nix
(
let tests = import ./lib.nix { inherit self pkgs; };
in
if tests == [ ]
then null
else throw (builtins.toJSON tests)
)
];
} ''
datadir="${pkgs.nix}/share"
export TEST_ROOT=$(pwd)/test-tmp
export NIX_BUILD_HOOK=
export NIX_CONF_DIR=$TEST_ROOT/etc
export NIX_LOCALSTATE_DIR=$TEST_ROOT/var
export NIX_LOG_DIR=$TEST_ROOT/var/log/nix
export NIX_STATE_DIR=$TEST_ROOT/var/nix
export NIX_STORE_DIR=$TEST_ROOT/store
export PAGER=cat
cacheDir=$TEST_ROOT/binary-cache
nix-store --init
touch $out
testScript = ''
machine.systemctl("is-system-running --wait")
'';
};

libTests = pkgs.runCommandNoCC "devos-lib-tests"
{
buildInputs = [
pkgs.nix
(
let tests = import ./lib.nix { inherit self pkgs; };
in
if tests == [ ]
then null
else throw (builtins.toJSON tests)
)
];
} ''
datadir="${pkgs.nix}/share"
export TEST_ROOT=$(pwd)/test-tmp
export NIX_BUILD_HOOK=
export NIX_CONF_DIR=$TEST_ROOT/etc
export NIX_LOCALSTATE_DIR=$TEST_ROOT/var
export NIX_LOG_DIR=$TEST_ROOT/var/log/nix
export NIX_STATE_DIR=$TEST_ROOT/var/nix
export NIX_STORE_DIR=$TEST_ROOT/store
export PAGER=cat
cacheDir=$TEST_ROOT/binary-cache
nix-store --init
touch $out
'';
}

0 comments on commit c050027

Please sign in to comment.