commit 887a4ff9661e4bde7d113c4b104804f7be8fb009
parent 0f999f9ae4dde6fe3640a0fe86ffdf0020ab4a01
Author: Daniel Barlow <dan@telent.net>
Date: Sun, 25 Sep 2022 11:10:22 +0100
WIP introduce nixos module system for configuration
Diffstat:
6 files changed, 59 insertions(+), 0 deletions(-)
diff --git a/merge-modules.nix b/merge-modules.nix
@@ -0,0 +1,8 @@
+module : initial : pkgs :
+let evalModules = (import <nixpkgs/lib>).evalModules;
+in evalModules {
+ modules = [
+ { _module.args = { inherit pkgs; }; }
+ module
+ ];
+}
diff --git a/tests/module/configuration.nix b/tests/module/configuration.nix
@@ -0,0 +1,10 @@
+{ config, pkgs, ... } :
+{
+ imports = [ ./defs.nix ./module.nix ];
+ config = {
+ services.a.enable = true;
+ services.b.enable = true;
+
+ systemPackages = [ pkgs.hello ] ;
+ };
+}
diff --git a/tests/module/defs.nix b/tests/module/defs.nix
@@ -0,0 +1,16 @@
+{ lib, ...}:
+let inherit (lib) mkEnableOption mkOption types;
+in {
+ options = {
+ services.a = {
+ enable = mkEnableOption "hello service";
+ };
+ services.b = {
+ enable = mkEnableOption "other service";
+ };
+ services.z = mkOption { };
+ systemPackages = mkOption {
+ type = types.listOf types.package;
+ };
+ };
+}
diff --git a/tests/module/module.nix b/tests/module/module.nix
@@ -0,0 +1,6 @@
+{ config, pkgs, ... } :
+{
+ services.z = pkgs.figlet;
+
+ systemPackages = [ pkgs.units ] ;
+}
diff --git a/tests/module/run.sh b/tests/module/run.sh
@@ -0,0 +1,2 @@
+set -e
+NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM=1 nix-build --arg device "import <liminix/devices/qemu.nix>" test.nix
diff --git a/tests/module/test.nix b/tests/module/test.nix
@@ -0,0 +1,17 @@
+{ device }:
+let
+ overlay = import <liminix/overlay.nix> ;
+ nixpkgs = import <nixpkgs> ( device.system // {overlays = [overlay]; });
+ inherit (nixpkgs) lib pkgs;
+ inherit (lib.asserts) assertMsg;
+ config =
+ (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;
+ in assertMsg (s.a.enable && s.b.enable && (s.z != null) ) "failed";
+in pkgs.writeText "foo" ''
+ ${if res1 then "OK" else "not OK"}
+ ${if res2 then "OK" else "not OK"}
+''