diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml index 89693ab..ee97846 100644 --- a/.forgejo/workflows/build.yaml +++ b/.forgejo/workflows/build.yaml @@ -8,4 +8,4 @@ jobs: runs-on: native steps: - uses: actions/checkout@v4 - - run: nix flake check --all-systems + - run: nix-build -A ci.check diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..bb13b3b --- /dev/null +++ b/default.nix @@ -0,0 +1,8 @@ +let + nilla = import ./nilla.nix { }; + getPackage = name: nilla.packages.${name}.result.${builtins.currentSystem}; +in +{ + ci.check = getPackage "ci-check"; + formatter = getPackage "formatter"; +} diff --git a/hosts/default.nix b/hosts/default.nix index 3c8b713..843a8d1 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -16,7 +16,7 @@ in ./youko ]; - config.configBuilders = + config.systems.builders = let sharedOptions = { _file = ./default.nix; diff --git a/hosts/hijiri-vm/default.nix b/hosts/hijiri-vm/default.nix index 5f6d088..94350be 100644 --- a/hosts/hijiri-vm/default.nix +++ b/hosts/hijiri-vm/default.nix @@ -1,5 +1,5 @@ { - config.configurations.nixos.hijiri-vm = + config.systems.nixos.hijiri-vm.module = { modulesPath, lib, diff --git a/hosts/hijiri/default.nix b/hosts/hijiri/default.nix index a0e6857..66defb4 100644 --- a/hosts/hijiri/default.nix +++ b/hosts/hijiri/default.nix @@ -1,5 +1,5 @@ { - config.configurations.darwin.hijiri = + config.systems.darwin.hijiri.module = { config, pkgs, diff --git a/hosts/kazuki/default.nix b/hosts/kazuki/default.nix index 029d7d0..d0fad10 100644 --- a/hosts/kazuki/default.nix +++ b/hosts/kazuki/default.nix @@ -1,5 +1,5 @@ { - config.configurations.nixos.kazuki = + config.systems.nixos.kazuki.module = { modulesPath, ... diff --git a/hosts/kogata/default.nix b/hosts/kogata/default.nix index 3e7c21f..d5ac7cb 100644 --- a/hosts/kogata/default.nix +++ b/hosts/kogata/default.nix @@ -1,5 +1,5 @@ { - config.configurations.darwin.kogata = + config.systems.darwin.kogata.module = { pkgs, ... }: { nixpkgs.system = "aarch64-darwin"; diff --git a/hosts/ude/default.nix b/hosts/ude/default.nix index fd3e19b..62ffb2e 100644 --- a/hosts/ude/default.nix +++ b/hosts/ude/default.nix @@ -1,5 +1,5 @@ { - config.configurations.nixos.ude = + config.systems.nixos.ude.module = { config, modulesPath, diff --git a/hosts/youko/default.nix b/hosts/youko/default.nix index b801507..7f39ac5 100644 --- a/hosts/youko/default.nix +++ b/hosts/youko/default.nix @@ -1,5 +1,5 @@ { - config.configurations.nixos.youko = + config.systems.nixos.youko.module = { config, lib, diff --git a/modules/nilla/configurations.nix b/modules/nilla/configurations.nix deleted file mode 100644 index 6f02f7e..0000000 --- a/modules/nilla/configurations.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ 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 71aed0d..0cab965 100644 --- a/modules/nilla/default.nix +++ b/modules/nilla/default.nix @@ -2,7 +2,7 @@ includes = [ ./builders ./services.nix - ./configurations.nix + ./systems.nix ./modules.nix ./flake.nix ]; diff --git a/modules/nilla/flake.nix b/modules/nilla/flake.nix index f3fe6f1..0193f2d 100644 --- a/modules/nilla/flake.nix +++ b/modules/nilla/flake.nix @@ -18,11 +18,12 @@ in nixosModules darwinModules homeModules - nixosConfigurations - darwinConfigurations - homeConfigurations ; + nixosConfigurations = builtins.mapAttrs (_: system: system.result) config.systems.nixos; + darwinConfigurations = builtins.mapAttrs (_: system: system.result) config.systems.darwin; + homeConfigurations = builtins.mapAttrs (_: system: system.result) config.systems.home; + devShells = transpose config.shells; packages = transpose config.packages; diff --git a/modules/nilla/systems.nix b/modules/nilla/systems.nix new file mode 100644 index 0000000..63b349a --- /dev/null +++ b/modules/nilla/systems.nix @@ -0,0 +1,52 @@ +{ config, lib }: +let + mkBuilderOption = + typ: + lib.options.create { + type = lib.types.function (lib.types.function lib.types.raw); + default.value = _name: _module: throw "Builder for systems.${typ} is not implemented"; + }; + inherit (config.systems) builders; + mkSystemModule = + typ: + { config, name }: + { + options = { + name = lib.options.create { + type = lib.types.string; + default.value = name; + }; + module = lib.options.create { + type = lib.types.raw; + default.value = { }; + }; + builder = lib.options.create { + type = lib.types.function (lib.types.function lib.types.raw); + default.value = builders.${typ}; + }; + result = lib.options.create { + type = lib.types.raw; + writable = false; + default.value = config.builder config.name config.module; + }; + }; + }; + mkSystemOption = + typ: + lib.options.create { + type = lib.types.attrs.of (lib.types.submodule (mkSystemModule typ)); + default.value = { }; + }; +in +{ + options = { + systems = { + builders.nixos = mkBuilderOption "nixos"; + builders.darwin = mkBuilderOption "darwin"; + builders.home = mkBuilderOption "home"; + nixos = mkSystemOption "nixos"; + darwin = mkSystemOption "darwin"; + home = mkSystemOption "home"; + }; + }; +} diff --git a/nilla.nix b/nilla.nix index bc20103..4379f29 100644 --- a/nilla.nix +++ b/nilla.nix @@ -76,6 +76,42 @@ in eval.config.build.wrapper; }; + ci-check = + let + all-packages = builtins.attrValues (builtins.removeAttrs config.packages [ "ci-check" ]); + all-packages' = lib.lists.flatten (map (pkg: builtins.attrValues pkg.result) all-packages); + + nixos-systems = builtins.attrValues config.systems.nixos; + nixos-systems' = map (system: system.result.config.system.build.toplevel) nixos-systems; + + darwin-systems = builtins.attrValues config.systems.darwin; + darwin-systems' = map (system: system.result.config.system.build.toplevel) darwin-systems; + + all-drvs = all-packages' ++ nixos-systems' ++ darwin-systems'; + all-drvs' = lib.strings.concatMapSep "\n" builtins.unsafeDiscardStringContext all-drvs; + in + mkPackage ( + { + lib, + stdenvNoCC, + system, + }: + stdenvNoCC.mkDerivation { + name = "nilla-eval-check"; + src = lib.cleanSource ./.; + doCheck = true; + + allDerivations = all-drvs'; + formatter = lib.getExe config.packages.formatter.result.${system}; + + passAsFile = [ "allDerivations" ]; + + installPhase = ''touch "$out"''; + checkPhase = '' + "$formatter" --ci + ''; + } + ); }; config.shells.default = {