From 8678f637dbd6dcb06ab623c10063b320b450fab3 Mon Sep 17 00:00:00 2001 From: Padreug Date: Sun, 28 Jun 2026 10:15:52 +0200 Subject: [PATCH] feat(flake): expose lib.mkSystem for external consumers Surface mkSystem as a flake output and make its host resolution non-throwing: internal hosts (this repo's hosts//) are still imported automatically, but a consumer using OmniXY as a flake input can now pass their own host via `modules` instead. First brick of the dependency-model framework; the core module aggregate (nixosModules) follows so a consumer's host can import OmniXY core. Co-Authored-By: Claude Opus 4.8 --- flake.nix | 13 +++++++++++++ lib/mksystem.nix | 19 ++++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/flake.nix b/flake.nix index 50dabdb..a16e708 100644 --- a/flake.nix +++ b/flake.nix @@ -218,6 +218,19 @@ }; in { + # Reusable library for external consumers. Use this flake as an + # input and build a host with the Omnixient conventions from your own + # repo, without forking: + # + # omni.lib.mkSystem "myhost" { + # settings = { ... }; # your identity (see settings.nix) + # modules = [ ./hosts/myhost ]; + # }; + # + # mkSystem bakes in Omnixient's nixpkgs, overlays, and inputs + # (home-manager, sops-nix, …), so you don't redeclare them. + lib.mkSystem = mkSystem; + # NixOS configurations. # # This public template ships the `example` host (copy-me starter) and diff --git a/lib/mksystem.nix b/lib/mksystem.nix index e2a0042..851e365 100644 --- a/lib/mksystem.nix +++ b/lib/mksystem.nix @@ -70,13 +70,18 @@ let # fall back to a flat `hosts/.nix`. hostDir = ../hosts/${name}; hostFile = ../hosts + "/${name}.nix"; - hostConfig = + # Internal hosts (this repo's hosts//) are imported automatically. + # External consumers using this flake as an input have no host dir here, + # so they pass their host config through `modules` and we add nothing. + hostConfigModules = if builtins.pathExists hostDir then - hostDir + [ hostDir ] else if builtins.pathExists hostFile then - hostFile + [ hostFile ] + else if modules != [ ] then + [ ] else - throw "mksystem: no host config for '${name}' (looked at ${toString hostDir} and ${toString hostFile})"; + throw "mksystem: no host config for '${name}' — add hosts/${name}/ or pass one via `modules` (looked at ${toString hostDir} and ${toString hostFile})"; userNixosConfig = ../users/${user}/nixos.nix; userHMConfig = ../users/${user}/home-manager.nix; @@ -101,10 +106,10 @@ nixpkgs.lib.nixosSystem { { nixpkgs.hostPlatform = system; } { nixpkgs.overlays = overlays; } { nixpkgs.config.allowUnfree = true; } - - # Per-host configuration. - hostConfig ] + # Per-host configuration: this repo's hosts// when present; + # external consumers supply their host through `modules`. + ++ hostConfigModules # Per-user system-level config (account, shell, sudo) — only if the # user file exists. Skipping silently is fine; some hosts share users # defined elsewhere (e.g. omni's users.nix).