mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-10 04:49:19 -08:00
142 lines
3.9 KiB
Nix
142 lines
3.9 KiB
Nix
{ pkgs, inputs, lib, meta, config, ... }:
|
|
|
|
/*
|
|
This module:
|
|
* Makes hosts nixosModules.
|
|
* Manages module imports and specialArgs.
|
|
* Builds network.nodes.
|
|
*/
|
|
|
|
with lib;
|
|
|
|
{
|
|
options.network = {
|
|
nixos = {
|
|
extraModules = mkOption {
|
|
type = types.listOf types.unspecified;
|
|
default = [ ];
|
|
};
|
|
specialArgs = mkOption {
|
|
type = types.attrsOf types.unspecified;
|
|
default = { };
|
|
};
|
|
modulesPath = mkOption {
|
|
type = types.path;
|
|
default = toString (pkgs.path + "/nixos/modules");
|
|
};
|
|
};
|
|
darwin = {
|
|
extraModules = mkOption {
|
|
type = types.listOf types.unspecified;
|
|
default = [ ];
|
|
};
|
|
specialArgs = mkOption {
|
|
type = types.attrsOf types.unspecified;
|
|
default = { };
|
|
};
|
|
modulesPath = mkOption {
|
|
type = types.path;
|
|
default = toString (inputs.darwin + "/modules");
|
|
};
|
|
};
|
|
nodes.nixos =
|
|
let
|
|
nixosModule = { name, config, meta, modulesPath, lib, ... }: with lib; {
|
|
options = {
|
|
nixpkgs.crossOverlays = mkOption {
|
|
type = types.listOf types.unspecified;
|
|
default = [ ];
|
|
};
|
|
};
|
|
config = {
|
|
nixpkgs = {
|
|
system = mkDefault "x86_64-linux";
|
|
pkgs =
|
|
let
|
|
pkgsReval = import pkgs.path {
|
|
inherit (config.nixpkgs) localSystem crossSystem crossOverlays;
|
|
inherit (pkgs) overlays config;
|
|
};
|
|
in
|
|
mkDefault (if config.nixpkgs.config == pkgs.config && config.nixpkgs.system == pkgs.targetPlatform.system then pkgs else pkgsReval);
|
|
};
|
|
};
|
|
};
|
|
nixosType =
|
|
let
|
|
baseModules = import (config.network.nixos.modulesPath + "/module-list.nix");
|
|
in
|
|
types.submoduleWith {
|
|
modules = baseModules
|
|
++ singleton nixosModule
|
|
++ config.network.nixos.extraModules;
|
|
|
|
specialArgs = {
|
|
inherit baseModules;
|
|
inherit (config.network.nixos) modulesPath;
|
|
} // config.network.nixos.specialArgs;
|
|
};
|
|
in
|
|
mkOption {
|
|
type = types.attrsOf nixosType;
|
|
default = { };
|
|
};
|
|
nodes.darwin =
|
|
let
|
|
darwinModule = { name, config, meta, modulesPath, lib, ... }: with lib; {
|
|
config = {
|
|
_module.args.pkgs = pkgs;
|
|
nixpkgs = {
|
|
system = mkDefault pkgs.system;
|
|
};
|
|
};
|
|
};
|
|
darwinType =
|
|
let
|
|
baseModules = import (config.network.darwin.modulesPath + "/module-list.nix");
|
|
flakeModule = (config.network.darwin.modulesPath + "/system/flake-overrides.nix");
|
|
in
|
|
types.submoduleWith {
|
|
modules = baseModules
|
|
++ singleton darwinModule
|
|
++ singleton flakeModule
|
|
++ config.network.darwin.extraModules;
|
|
|
|
specialArgs = {
|
|
inherit baseModules;
|
|
inherit (config.network.darwin) modulesPath;
|
|
} // config.network.darwin.specialArgs;
|
|
};
|
|
in
|
|
mkOption {
|
|
type = types.attrsOf darwinType;
|
|
default = { };
|
|
};
|
|
};
|
|
config.network = {
|
|
darwin = {
|
|
extraModules = [
|
|
inputs.home-manager.darwinModules.home-manager
|
|
meta.modules.darwin
|
|
meta.modules.system
|
|
meta.system
|
|
];
|
|
specialArgs = {
|
|
inherit (config.network) nodes;
|
|
inherit inputs meta;
|
|
};
|
|
};
|
|
nixos = {
|
|
extraModules = [
|
|
inputs.home-manager.nixosModules.home-manager
|
|
meta.modules.nixos
|
|
meta.modules.system
|
|
meta.system
|
|
];
|
|
specialArgs = {
|
|
inherit (config.network) nodes;
|
|
inherit inputs meta;
|
|
};
|
|
};
|
|
};
|
|
}
|