diff --git a/flake.lock b/flake.lock index 9d72b1b..21693cb 100644 --- a/flake.lock +++ b/flake.lock @@ -337,21 +337,6 @@ "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": [ @@ -503,7 +488,6 @@ "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 dcb6882..5e22b8c 100644 --- a/flake.nix +++ b/flake.nix @@ -71,8 +71,6 @@ 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/debug.nix b/nix/flake-parts/debug.nix new file mode 100644 index 0000000..38e2cb3 --- /dev/null +++ b/nix/flake-parts/debug.nix @@ -0,0 +1,3 @@ +{ + debug = true; +} diff --git a/nix/flake-parts/flake-parts.nix b/nix/flake-parts/flake-parts.nix deleted file mode 100644 index 4f0d093..0000000 --- a/nix/flake-parts/flake-parts.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ inputs, ... }: -{ - debug = true; - imports = [ - inputs.make-shell.flakeModules.default - inputs.manifest.flakeModules.default - inputs.flake-parts.flakeModules.modules - inputs.text.flakeModules.default - ]; -} diff --git a/nix/flake-parts/make-shell.nix b/nix/flake-parts/make-shell.nix new file mode 100644 index 0000000..66ca600 --- /dev/null +++ b/nix/flake-parts/make-shell.nix @@ -0,0 +1,5 @@ +{ inputs, ... }: +{ + #TODO: add to readme + imports = [ inputs.make-shell.flakeModules.default ]; +} diff --git a/nix/flake-parts/manifest.nix b/nix/flake-parts/manifest.nix new file mode 100644 index 0000000..1d121a1 --- /dev/null +++ b/nix/flake-parts/manifest.nix @@ -0,0 +1,77 @@ +{ 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 +{ + 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; + }; +} diff --git a/nix/flake-parts/modules.nix b/nix/flake-parts/modules.nix new file mode 100644 index 0000000..1c75663 --- /dev/null +++ b/nix/flake-parts/modules.nix @@ -0,0 +1,4 @@ +{ inputs, ... }: +{ + imports = [ inputs.flake-parts.flakeModules.modules ]; +} diff --git a/nix/flake-parts/text.nix b/nix/flake-parts/text.nix new file mode 100644 index 0000000..81b2f51 --- /dev/null +++ b/nix/flake-parts/text.nix @@ -0,0 +1,4 @@ +{ inputs, ... }: +{ + imports = [ inputs.text.flakeModules.default ]; +}