From ba23a8d7f55d881036770f160f746b210dca605a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikodem=20Rabuli=C5=84ski?= Date: Sun, 23 Mar 2025 22:46:55 +0100 Subject: [PATCH] hosts: migrate to nilla --- assets/default.nix | 8 +-- flake.nix | 6 +- hosts/default.nix | 20 +++---- hosts/hijiri-vm/default.nix | 2 +- hosts/hijiri/default.nix | 2 +- hosts/installer/default.nix | 2 +- hosts/kazuki/default.nix | 2 +- hosts/kogata/default.nix | 2 +- hosts/ude/default.nix | 2 +- hosts/youko/default.nix | 2 +- modules/default.nix | 12 ---- modules/flake/configurations.nix | 54 ------------------ modules/flake/default.nix | 13 ----- modules/flake/services.nix | 95 -------------------------------- modules/nilla/configurations.nix | 47 ++++++++++++++++ modules/nilla/default.nix | 1 + modules/nilla/services.nix | 4 +- nilla.nix | 7 +-- services/default.nix | 2 +- 19 files changed, 78 insertions(+), 205 deletions(-) delete mode 100644 modules/flake/configurations.nix delete mode 100644 modules/flake/default.nix delete mode 100644 modules/flake/services.nix create mode 100644 modules/nilla/configurations.nix diff --git a/assets/default.nix b/assets/default.nix index 123d12c..4e3187c 100644 --- a/assets/default.nix +++ b/assets/default.nix @@ -1,8 +1,8 @@ -{ lib, ... }: +{ lib }: { - options.assets = lib.mkOption { - type = lib.types.unspecified; - readOnly = true; + options.assets = lib.options.create { + type = lib.types.raw; + writable = false; }; config.assets = { diff --git a/flake.nix b/flake.nix index 714019f..f42380a 100644 --- a/flake.nix +++ b/flake.nix @@ -21,12 +21,12 @@ flake-parts.lib.mkFlake { inherit inputs; } { inherit systems; imports = [ - ./assets - ./hosts ./modules - ./services ]; + flake.nixosConfigurations = nilla.nixosConfigurations; + flake.darwinConfigurations = nilla.darwinConfigurations; + flake.homeConfigurations = nilla.homeConfigurations; flake.devShells = transpose nilla.shells; flake.packages = transpose nilla.packages; flake.formatter = nilla.packages.formatter.result; diff --git a/hosts/default.nix b/hosts/default.nix index d8ed8b3..3c129f4 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -1,11 +1,11 @@ { config, - self, - inputs, - ... }: +let + inputs = builtins.mapAttrs (_: input: input.result) config.inputs; +in { - imports = [ + includes = [ ./kazuki ./hijiri-vm ./hijiri @@ -16,20 +16,20 @@ ./youko ]; - builders = + config.configBuilders = let sharedOptions = { _file = ./default.nix; settei.sane-defaults.allSshKeys = config.assets.sshKeys.user; settei.flake-qol.inputs = inputs // { - settei = self; + settei = inputs.self; }; }; baseNixos = inputs.nixpkgs.lib.nixosSystem { modules = [ - self.nixosModules.combined + inputs.self.nixosModules.combined sharedOptions ]; specialArgs.configurationName = "base"; @@ -37,7 +37,7 @@ baseDarwin = inputs.darwin.lib.darwinSystem { modules = [ - self.darwinModules.combined + inputs.self.darwinModules.combined sharedOptions ]; specialArgs.configurationName = "base"; @@ -49,7 +49,7 @@ baseNixos.extendModules { modules = [ module - config.__extraHostConfigs.${name} or { } + config.extraHostConfigs.${name} or { } ]; specialArgs.configurationName = name; }; @@ -60,7 +60,7 @@ eval = baseDarwin._module.args.extendModules { modules = [ module - config.__extraHostConfigs.${name} or { } + config.extraHostConfigs.${name} or { } ]; specialArgs.configurationName = name; }; diff --git a/hosts/hijiri-vm/default.nix b/hosts/hijiri-vm/default.nix index db26c63..5f6d088 100644 --- a/hosts/hijiri-vm/default.nix +++ b/hosts/hijiri-vm/default.nix @@ -1,5 +1,5 @@ { - configurations.nixos.hijiri-vm = + config.configurations.nixos.hijiri-vm = { modulesPath, lib, diff --git a/hosts/hijiri/default.nix b/hosts/hijiri/default.nix index bb7db92..a0e6857 100644 --- a/hosts/hijiri/default.nix +++ b/hosts/hijiri/default.nix @@ -1,5 +1,5 @@ { - configurations.darwin.hijiri = + config.configurations.darwin.hijiri = { config, pkgs, diff --git a/hosts/installer/default.nix b/hosts/installer/default.nix index 24bdef8..a1692c6 100644 --- a/hosts/installer/default.nix +++ b/hosts/installer/default.nix @@ -1,6 +1,6 @@ { lib, ... }: { - configurations.nixos = + config.configurations.nixos = let mkInstaller = system: diff --git a/hosts/kazuki/default.nix b/hosts/kazuki/default.nix index 8464cb5..64fc67f 100644 --- a/hosts/kazuki/default.nix +++ b/hosts/kazuki/default.nix @@ -1,5 +1,5 @@ { - configurations.nixos.kazuki = + config.configurations.nixos.kazuki = { modulesPath, ... diff --git a/hosts/kogata/default.nix b/hosts/kogata/default.nix index 6bf9e2f..3e7c21f 100644 --- a/hosts/kogata/default.nix +++ b/hosts/kogata/default.nix @@ -1,5 +1,5 @@ { - configurations.darwin.kogata = + config.configurations.darwin.kogata = { pkgs, ... }: { nixpkgs.system = "aarch64-darwin"; diff --git a/hosts/ude/default.nix b/hosts/ude/default.nix index d395fbd..fd3e19b 100644 --- a/hosts/ude/default.nix +++ b/hosts/ude/default.nix @@ -1,5 +1,5 @@ { - configurations.nixos.ude = + config.configurations.nixos.ude = { config, modulesPath, diff --git a/hosts/youko/default.nix b/hosts/youko/default.nix index 3a2fe49..b801507 100644 --- a/hosts/youko/default.nix +++ b/hosts/youko/default.nix @@ -1,5 +1,5 @@ { - configurations.nixos.youko = + config.configurations.nixos.youko = { config, lib, diff --git a/modules/default.nix b/modules/default.nix index 24a8f46..7ee30ef 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -3,24 +3,12 @@ inputs, ... }: -let - flakeModule = import ./flake { inherit (inputs) nixpkgs darwin home-manager; }; -in { - imports = [ - flakeModule - ]; - flake.homeModules = rec { settei = ./home; default = settei; }; - flake.flakeModules = rec { - settei = flakeModule; - default = settei; - }; - flake.nixosModules = rec { settei = import ./system { inherit (config) perInput; diff --git a/modules/flake/configurations.nix b/modules/flake/configurations.nix deleted file mode 100644 index 67ccc1b..0000000 --- a/modules/flake/configurations.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ - nixpkgs, - darwin, - home-manager, -}: -{ - config, - lib, - ... -}: -with lib; -{ - _file = ./configurations.nix; - - options = { - # Those functions take the final arguments and emit a valid configuration. - # Probably should hardly ever be overriden - builders = { - nixos = mkOption { - type = types.functionTo types.unspecified; - default = _name: nixpkgs.lib.nixosSystem; - }; - darwin = mkOption { - type = types.functionTo types.unspecified; - default = _name: darwin.lib.darwinSystem; - }; - home = mkOption { - type = types.functionTo types.unspecified; - default = _name: home-manager.lib.homeManagerConfiguration; - }; - }; - - configurations = { - nixos = mkOption { - type = types.lazyAttrsOf types.deferredModule; - default = { }; - }; - darwin = mkOption { - type = types.lazyAttrsOf types.deferredModule; - default = { }; - }; - home = mkOption { - type = types.lazyAttrsOf types.deferredModule; - default = { }; - }; - }; - }; - - config.flake = { - nixosConfigurations = mapAttrs config.builders.nixos config.configurations.nixos; - darwinConfigurations = mapAttrs config.builders.darwin config.configurations.darwin; - homeConfigurations = mapAttrs config.builders.home config.configurations.home; - }; -} diff --git a/modules/flake/default.nix b/modules/flake/default.nix deleted file mode 100644 index 78bb73d..0000000 --- a/modules/flake/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - nixpkgs, - darwin, - home-manager, -}: -{ - _file = ./default.nix; - - imports = [ - (import ./configurations.nix { inherit nixpkgs darwin home-manager; }) - ./services.nix - ]; -} diff --git a/modules/flake/services.nix b/modules/flake/services.nix deleted file mode 100644 index 697b701..0000000 --- a/modules/flake/services.nix +++ /dev/null @@ -1,95 +0,0 @@ -# List of features I want this module to eventually have -# TODO: Automatic port allocation -# TODO: Making it possible to conveniently isolate services (running them in NixOS containers) -# TODO: Handling specializations -# TODO: Convenient http handling -# TODO: Automatic backup -{ config, lib, ... }: -let - serviceModule = - { config, ... }: - { - options = { - host = lib.mkOption { - type = lib.types.str; - }; - ports = lib.mkOption { - type = with lib.types; listOf port; - default = [ ]; - }; - hosts = lib.mkOption { - type = with lib.types; listOf str; - default = [ config.host ]; - }; - module = lib.mkOption { - type = lib.types.deferredModule; - default = { }; - }; - hostModule = lib.mkOption { - type = with lib.types; attrsOf deferredModule; - default = { }; - }; - }; - }; - - moduleToHostConfigs = - cfg: - lib.genAttrs cfg.hosts (host: { - imports = [ - cfg.module - (cfg.hostModule.${host} or { }) - ]; - }); - - maybeGetPreviousConfigs = acc: host: (acc.${host} or { imports = [ ]; }).imports; -in -{ - _file = ./services.nix; - - options = { - services = lib.mkOption { - type = with lib.types; attrsOf (submodule serviceModule); - default = { }; - }; - - __extraHostConfigs = lib.mkOption { - type = with lib.types; attrsOf deferredModule; - readOnly = true; - }; - }; - - config.__extraHostConfigs = - let - duplicatePorts = lib.pipe config.services [ - lib.attrValues - (map (cfg: cfg.ports)) - lib.flatten - (lib.groupBy' (cnt: _: cnt + 1) 0 toString) - (lib.filterAttrs (_: cnt: cnt > 1)) - lib.attrNames - ]; - assertMsg = - let - plural = lib.length duplicatePorts > 1; - in - "\nBad service config:\nThe following port${if plural then "s" else ""} ${ - if plural then "were" else "was" - } declared multiple times: ${lib.concatStringsSep ", " duplicatePorts}"; - # Here I collect all the services..config into a flat - # __extraHostConfigs..imports = [ - # ... - # ] - # so that I can easily import them in hosts/default.nix - hostConfigs = lib.pipe config.services [ - lib.attrValues - (lib.foldl' ( - acc: cfg: - acc - // lib.mapAttrs (host: c: { - imports = c.imports ++ (maybeGetPreviousConfigs acc host); - }) (moduleToHostConfigs cfg) - ) { }) - ]; - in - if duplicatePorts != [ ] then throw assertMsg else hostConfigs; -} diff --git a/modules/nilla/configurations.nix b/modules/nilla/configurations.nix new file mode 100644 index 0000000..6f02f7e --- /dev/null +++ b/modules/nilla/configurations.nix @@ -0,0 +1,47 @@ +{ config, lib }: +{ + options = { + configBuilders = { + nixos = lib.options.create { + type = lib.types.function lib.types.raw; + default.value = _name: config.inputs.nixpkgs.result.lib.nixosSystem; + }; + darwin = lib.options.create { + type = lib.types.function lib.types.raw; + default.value = _name: config.inputs.darwin.result.lib.darwinSystem; + }; + home = lib.options.create { + type = lib.types.function lib.types.raw; + default.value = _name: config.inputs.home-manager.result.lib.homeManagerConfiguration; + }; + }; + + configurations = { + nixos = lib.options.create { + type = lib.types.attrs.lazy lib.types.raw; + default.value = { }; + }; + darwin = lib.options.create { + type = lib.types.attrs.lazy lib.types.raw; + default.value = { }; + }; + home = lib.options.create { + type = lib.types.attrs.lazy lib.types.raw; + default.value = { }; + }; + }; + + nixosConfigurations = lib.options.create { + type = lib.types.attrs.lazy lib.types.raw; + default.value = builtins.mapAttrs config.configBuilders.nixos config.configurations.nixos; + }; + darwinConfigurations = lib.options.create { + type = lib.types.attrs.lazy lib.types.raw; + default.value = builtins.mapAttrs config.configBuilders.darwin config.configurations.darwin; + }; + homeConfigurations = lib.options.create { + type = lib.types.attrs.lazy lib.types.raw; + default.value = builtins.mapAttrs config.configBuilders.home config.configurations.home; + }; + }; +} diff --git a/modules/nilla/default.nix b/modules/nilla/default.nix index 6f39646..8a7dea6 100644 --- a/modules/nilla/default.nix +++ b/modules/nilla/default.nix @@ -2,5 +2,6 @@ includes = [ ./builders ./services.nix + ./configurations.nix ]; } diff --git a/modules/nilla/services.nix b/modules/nilla/services.nix index 1b72eaf..1045a4a 100644 --- a/modules/nilla/services.nix +++ b/modules/nilla/services.nix @@ -14,14 +14,14 @@ let { options = { host = lib.options.create { - type = lib.types.str; + type = lib.types.string; }; ports = lib.options.create { type = lib.types.list.of lib.types.port; default.value = [ ]; }; hosts = lib.options.create { - type = lib.types.list.of lib.types.str; + type = lib.types.list.of lib.types.string; default.value = [ config.host ]; }; module = lib.options.create { diff --git a/nilla.nix b/nilla.nix index 0aea0c5..7d4b4de 100644 --- a/nilla.nix +++ b/nilla.nix @@ -8,10 +8,9 @@ ./modules/nilla ./pkgs ./wrappers - - ./services/attic.nix - ./services/forgejo-runner.nix - ./services/forgejo.nix + ./hosts + ./assets + ./services ]; config.inputs = builtins.mapAttrs (_: src: { diff --git a/services/default.nix b/services/default.nix index dfee582..b92ec0f 100644 --- a/services/default.nix +++ b/services/default.nix @@ -1,5 +1,5 @@ { - imports = [ + includes = [ ./attic.nix ./forgejo-runner.nix ./forgejo.nix