diff --git a/flake.lock b/flake.lock index 21693cb..9d72b1b 100644 --- a/flake.lock +++ b/flake.lock @@ -337,6 +337,21 @@ "type": "github" } }, + "manifest": { + "locked": { + "lastModified": 1752588656, + "narHash": "sha256-clKPzQ43eDpukeiGHzXmd1hGb2s4N+MWXAzQ5u5+pHQ=", + "owner": "rrvsh", + "repo": "manifest", + "rev": "365902fba994f30469298dee0c98a5fc0f41ec38", + "type": "github" + }, + "original": { + "owner": "rrvsh", + "repo": "manifest", + "type": "github" + } + }, "nix-darwin": { "inputs": { "nixpkgs": [ @@ -488,6 +503,7 @@ "impermanence": "impermanence", "import-tree": "import-tree", "make-shell": "make-shell", + "manifest": "manifest", "nix-darwin": "nix-darwin", "nix-index-database": "nix-index-database", "nixpkgs": "nixpkgs", diff --git a/flake.nix b/flake.nix index 5e22b8c..dcb6882 100644 --- a/flake.nix +++ b/flake.nix @@ -71,6 +71,8 @@ files.url = "github:mightyiam/files"; # text.nix lets us easily define markdown text to pass to files text.url = "github:rrvsh/text.nix"; + # manifest lets us define all hosts in one file + manifest.url = "github:rrvsh/manifest"; # make-shells. creates devShells and checks make-shell = { url = "github:nicknovitski/make-shell"; diff --git a/nix/flake-parts/manifest.nix b/nix/flake-parts/manifest.nix index 1d121a1..e61d29a 100644 --- a/nix/flake-parts/manifest.nix +++ b/nix/flake-parts/manifest.nix @@ -1,77 +1,4 @@ -{ lib, config, ... }: -let - cfg = config.flake; - inherit (lib.options) mkOption mkEnableOption; - inherit (lib.types) - bool - str - lazyAttrsOf - deferredModule - submodule - ; - inherit (cfg.lib.options) mkStrOption; - inherit (cfg.lib.attrsets) firstAttrNameMatching; - userOpts = submodule { - options = { - primary = mkOption { type = bool; }; - username = mkOption { type = str; }; - name = mkOption { type = str; }; - email = mkOption { type = str; }; - shell = mkOption { type = str; }; - pubkey = mkOption { type = str; }; - }; - }; - monitorOpts = submodule { - options = { - id = mkStrOption ""; - resolution = mkStrOption ""; - refresh-rate = mkStrOption ""; - scale = mkStrOption ""; - }; - }; - hostOpts = submodule { - options = { - graphical = mkEnableOption ""; - machine = { - platform = mkStrOption ""; - gpu = mkStrOption ""; - root.drive = mkStrOption ""; - root.ephemeral = mkEnableOption "" // { - default = true; - }; - monitors = mkOption { - type = lazyAttrsOf monitorOpts; - default = { }; - }; - }; - extraCfg = mkOption { - type = deferredModule; - default = { }; - }; - }; - }; - username = firstAttrNameMatching (_: v: v.primary or false) config.manifest.users; -in +{ inputs, ... }: { - options.manifest = { - admin = mkOption { - type = userOpts; - readOnly = true; - }; - users = mkOption { - type = lazyAttrsOf userOpts; - default = { }; - }; - hosts.nixos = mkOption { - type = lazyAttrsOf hostOpts; - default = { }; - }; - hosts.darwin = mkOption { - type = lazyAttrsOf hostOpts; - default = { }; - }; - }; - config.manifest.admin = config.manifest.users.${username} // { - inherit username; - }; + imports = [ inputs.manifest.flakeModules.default ]; }