nixfiles/systems/default.nix

189 lines
5.2 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
inputs,
tree,
lib,
std,
pkgs,
...
}: let
# The purpose of this file is to set up the host module which allows assigning of the system, e.g. aarch64-linux and the builder used with less pain.
inherit (lib.modules) evalModules;
inherit (std) string types optional set list;
defaultSpecialArgs = {
inherit inputs tree std;
};
hostModule = {
config,
machine,
...
}: {
options = let
inherit (lib.types) str listOf attrs unspecified;
inherit (lib.options) mkOption;
in {
arch = mkOption {
description = "Processor architecture of the host";
type = str;
default = "x86_64";
};
type = mkOption {
description = "Operating system type of the host";
type = str;
default = "NixOS";
};
folder = mkOption {
type = str;
internal = true;
};
system = mkOption {
type = str;
internal = true;
};
modules = mkOption {
type = listOf unspecified;
};
specialArgs = mkOption {
type = attrs;
internal = true;
};
builder = mkOption {
type = unspecified;
internal = true;
};
};
config = {
system = let
kernel =
{
nixos = "linux";
macos = "darwin";
darwin = "darwin";
linux = "linux";
}
.${string.toLower config.type};
in "${config.arch}-${kernel}";
folder =
{
nixos = "nixos";
macos = "darwin";
darwin = "darwin";
linux = "linux";
}
.${string.toLower config.type};
modules = with tree; [
# per-OS modules
tree.modules.${config.folder}
# per-OS configuration
tree.${config.folder}.common
# per-OS user definition
tree.home.user.${config.folder}
# the base common module
common
];
builder =
{
nixos = let
lib = inputs.nixpkgs.lib.extend (self: super:
import (inputs.arcexprs + "/lib") {
inherit super;
lib = self;
isOverlayLib = true;
});
sys = args:
lib.nixosSystem ({
inherit lib;
}
// args);
in
args: let
nixos = sys args;
in
nixos.extendModules {
modules =
nixos.config.scalpels
++ [
inputs.scalpel.nixosModules.scalpel
];
specialArgs = {prev = nixos;};
};
darwin = inputs.darwin.lib.darwinSystem;
macos = inputs.darwin.lib.darwinSystem;
}
.${string.toLower config.type};
specialArgs = let
nur = import inputs.nur {
pkgs = pkgs.${config.system};
nurpkgs = pkgs.${config.system};
};
in
{
inherit machine nur;
systemType = config.folder;
inherit (config) system;
}
// defaultSpecialArgs;
};
};
hostConfigs = set.map (name: path:
evalModules {
modules = [
hostModule
path
];
specialArgs =
defaultSpecialArgs
// {
machine = name;
};
})
tree.systems;
processHost = name: cfg: let
host = cfg.config;
serverLocations = {
mediabox = "10.1.1.167";
orb = "orb";
daiyousei = "140.238.156.121";
mei = "150.230.28.111";
mai = "132.145.108.249";
};
in {
deploy.nodes = set.merge [
(set.optional (host.folder == "nixos") {
${name} = {
profiles.system = {
user = "root";
path = inputs.deploy-rs.lib.${host.system}.activate.nixos inputs.self.nixosConfigurations.${name};
};
autoRollback = false;
magicRollback = false;
};
})
(set.optional (!(list.elem name (set.keys serverLocations)) && host.folder == "nixos") {
${name} = {
hostname = "${name}.inskip.me";
sshUser = "deploy";
sshOpts = ["-oControlMaster=no" "-oControlPath=/tmp/willneverexist" "-p" "${builtins.toString (builtins.head inputs.self.nixosConfigurations.${name}.config.services.openssh.ports)}"];
};
})
(set.optional ((list.elem name (set.keys serverLocations)) && host.folder == "nixos") {
${name} = {
hostname = serverLocations.${name};
sshUser = "deploy";
sshOpts = ["-oControlMaster=no" "-oControlPath=/tmp/willneverexist" "-p" "${builtins.toString (builtins.head inputs.self.nixosConfigurations.${name}.config.services.openssh.ports)}"];
};
})
(set.optional (name == "renko" && host.folder == "nixos") {
${name} = {
sshUser = "nixos";
fastConnection = true;
sshOpts = ["-oControlMaster=no" "-oControlPath=/tmp/willneverexist" "-p" "32222"];
};
})
];
"${host.folder}Configurations".${name} = host.builder {
inherit (host) system modules specialArgs;
};
};
in
set.merge (set.mapToValues processHost hostConfigs)