commit c6e56b163790f98d2cce7c0949b09248b474c882
parent 887a4ff9661e4bde7d113c4b104804f7be8fb009
Author: Daniel Barlow <dan@telent.net>
Date: Sun, 25 Sep 2022 11:22:15 +0100
merge-modules accepts >1 module
Diffstat:
5 files changed, 32 insertions(+), 20 deletions(-)
diff --git a/default.nix b/default.nix
@@ -4,15 +4,10 @@
let
overlay = import ./overlay.nix;
nixpkgs = import <nixpkgs> ( device.system // {overlays = [overlay]; });
- baseConfig = {
- systemPackages = [];
- services = {};
- kernel = device.kernel;
- };
- config = baseConfig // (import <liminix-config>) {
- config = baseConfig;
- inherit (nixpkgs) pkgs;
- };
+ config = (import ./merge-modules.nix) [
+ (import ./modules/base.nix { inherit device; })
+ <liminix-config>
+ ] nixpkgs.pkgs;
finalConfig = config // {
packages = (with nixpkgs.pkgs; [ s6-rc ]) ++
config.systemPackages ++
diff --git a/merge-modules.nix b/merge-modules.nix
@@ -1,8 +1,8 @@
-module : initial : pkgs :
+modules : pkgs :
let evalModules = (import <nixpkgs/lib>).evalModules;
-in evalModules {
- modules = [
- { _module.args = { inherit pkgs; }; }
- module
- ];
-}
+in (evalModules {
+ modules =
+ [
+ { _module.args = { inherit pkgs; lib = pkgs.lib; }; }
+ ] ++ modules;
+}).config
diff --git a/modules/base.nix b/modules/base.nix
@@ -0,0 +1,17 @@
+{ device } :
+{ lib, ...}:
+let inherit (lib) mkEnableOption mkOption types;
+in {
+ options = {
+ systemPackages = mkOption {
+ type = types.listOf types.package;
+ };
+ services = mkOption {
+ type = types.anything;
+ };
+ kernel = mkOption {
+ type = types.anything;
+ default = { inherit (device.kernel) config checkedConfig; };
+ };
+ };
+}
diff --git a/tests/module/test.nix b/tests/module/test.nix
@@ -5,11 +5,11 @@ let
inherit (nixpkgs) lib pkgs;
inherit (lib.asserts) assertMsg;
config =
- (import <liminix/merge-modules.nix>) ./configuration.nix {} pkgs;
+ (import <liminix/merge-modules.nix>) [./configuration.nix] pkgs;
res1 = assertMsg
# check we have packages from both modules
- (config.config.systemPackages == ( with pkgs; [ units hello ])) "failed";
- res2 = let s = config.config.services;
+ (config.systemPackages == ( with pkgs; [ units hello ])) "failed";
+ res2 = let s = config.services;
in assertMsg (s.a.enable && s.b.enable && (s.z != null) ) "failed";
in pkgs.writeText "foo" ''
${if res1 then "OK" else "not OK"}
diff --git a/tests/smoke/configuration.nix b/tests/smoke/configuration.nix
@@ -1,4 +1,4 @@
-{ config, pkgs } :
+{ config, pkgs, ... } :
let
inherit (pkgs.liminix.networking) interface address udhcpc odhcpc;
inherit (pkgs.liminix.services) oneshot longrun bundle target output;