infrastructure/hive.nix
sinavir ea9f513459
All checks were successful
Check meta / check_dns (pull_request) Successful in 22s
Check workflows / check_workflows (pull_request) Successful in 17s
Check meta / check_meta (pull_request) Successful in 24s
Build all the nodes / ap01 (pull_request) Successful in 39s
Build all the nodes / netcore02 (pull_request) Successful in 20s
Build all the nodes / geo01 (pull_request) Successful in 3m1s
Build all the nodes / build01 (pull_request) Successful in 3m49s
Build all the nodes / hypervisor02 (pull_request) Successful in 2m26s
Build all the nodes / hypervisor01 (pull_request) Successful in 2m39s
Build all the nodes / hypervisor03 (pull_request) Successful in 2m39s
Build all the nodes / geo02 (pull_request) Successful in 2m40s
Build all the nodes / rescue01 (pull_request) Successful in 2m48s
Build the shell / build-shell (pull_request) Successful in 23s
Build all the nodes / vault01 (pull_request) Successful in 2m36s
Build all the nodes / web03 (pull_request) Successful in 2m9s
Run pre-commit on all files / pre-commit (pull_request) Successful in 25s
Build all the nodes / web02 (pull_request) Successful in 2m20s
Build all the nodes / tower01 (pull_request) Successful in 17m47s
Build all the nodes / bridge01 (pull_request) Successful in 21m1s
Build all the nodes / web01 (pull_request) Successful in 17m44s
Build all the nodes / compute01 (pull_request) Successful in 21m50s
Build all the nodes / storage01 (pull_request) Successful in 20m5s
Build all the nodes / netcore02 (push) Successful in 20s
Build all the nodes / ap01 (push) Successful in 33s
Build the shell / build-shell (push) Successful in 21s
Run pre-commit on all files / pre-commit (push) Successful in 23s
Build all the nodes / tower01 (push) Successful in 1m54s
Build all the nodes / storage01 (push) Successful in 2m6s
Build all the nodes / build01 (push) Successful in 2m13s
Build all the nodes / bridge01 (push) Successful in 3m29s
Build all the nodes / geo01 (push) Successful in 3m29s
Build all the nodes / web02 (push) Successful in 3m34s
Build all the nodes / hypervisor02 (push) Successful in 3m37s
Build all the nodes / web03 (push) Successful in 3m26s
Build all the nodes / hypervisor01 (push) Successful in 3m55s
Build all the nodes / geo02 (push) Successful in 3m57s
Build all the nodes / hypervisor03 (push) Successful in 3m57s
Build all the nodes / rescue01 (push) Successful in 4m15s
Build all the nodes / compute01 (push) Successful in 4m18s
Build all the nodes / web01 (push) Successful in 4m47s
Build all the nodes / vault01 (push) Successful in 6m5s
fix(nixfmt): Reformat
2025-01-15 09:31:25 +01:00

223 lines
5.9 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SPDX-FileCopyrightText: 2024 Ryan Lahfa <ryan.lahfa@dgnum.eu>
# SPDX-FileCopyrightText: 2024 Tom Hubrecht <tom.hubrecht@dgnum.eu>
# SPDX-FileContributor: Maurice Debray <maurice.debray@dgnum.eu>
#
# SPDX-License-Identifier: EUPL-1.2
let
sources' = import ./npins;
# Patch sources directly
sources =
builtins.mapAttrs (patch.base { pkgs = import sources'.nixos-unstable { }; }).applyPatches'
sources';
nix-lib = import ./lib/nix-lib;
inherit (nix-lib) mapSingleFuse;
patch = import ./lib/nix-patches { patchFile = ./patches; };
nodes' = import ./meta/nodes;
nodes = builtins.attrNames nodes';
mkNode = node: {
deployment.systemType = system node;
};
nixpkgs' = import ./meta/nixpkgs.nix;
# All supported nixpkgs versions × systems, instanciated
nixpkgs = mapSingleFuse (s: mapSingleFuse (mkSystemNixpkgs s) nixpkgs'.versions) nixpkgs'.systems;
# Get the configured nixos version for the node,
# defaulting to the one defined in meta/nixpkgs
version = node: nodes'.${node}.nixpkgs.version;
system = node: nodes'.${node}.nixpkgs.system;
category = node: nixpkgs'.categories.${system node};
nodePkgs = node: nixpkgs.${system node}.${version node};
# Builds a patched version of nixpkgs, only as the source
mkNixpkgs' =
v:
patch.mkNixpkgsSrc rec {
src = sources'.${name};
name = "nixos-${v}";
};
# Build up the nixpkgs configuration for Liminix embedded systems
mkLiminixConfig =
system: _:
(import "${sources.liminix}/devices/${system}").system
// {
overlays = [ (import "${sources.liminix}/overlay.nix") ];
config = {
allowUnsupportedSystem = true; # mipsel
permittedInsecurePackages = [
"python-2.7.18.8" # Python < 3.x is needed for kernel backports.
];
};
};
# Build up the arguments to instantiate a nixpkgs given a system and a version.
mkNixpkgsConfig =
system:
{
nixos = _: { };
zyxel-nwa50ax = mkLiminixConfig system;
netconf = _: { };
}
.${system} or (throw "Unknown system: ${system} for nixpkgs configuration instantiation");
# Instanciates the required nixpkgs version
mkSystemNixpkgs = system: version: import (mkNixpkgs' version) (mkNixpkgsConfig system version);
###
# Function to create arguments based on the node
#
mkArgs = node: rec {
lib = sourcePkgs.lib // {
extra = nix-lib;
};
sourcePkgs = nodePkgs node;
meta = (import ./meta) lib;
nodeMeta = meta.nodes.${node};
nodePath = "machines/${category node}/${node}";
};
in
{
meta = {
nixpkgs = import nixpkgs.nixos.unstable.path;
nodeNixpkgs = mapSingleFuse nodePkgs nodes;
specialArgs = {
inherit nixpkgs sources;
dgn-keys = import ./keys;
};
nodeSpecialArgs = mapSingleFuse mkArgs nodes;
};
registry = {
zyxel-nwa50ax = {
evalConfig =
args:
(import "${sources.liminix}/lib/eval-config.nix" {
nixpkgs = args.specialArgs.sourcePkgs.path;
})
args;
defaults =
{ name, nodePath, ... }:
{
# Import the default modules
imports = [
# Import the base configuration for each node
./${nodePath}/_configuration.nix
./modules/generic
./modules/${category name}
];
# It's impure, but who cares?
# Can Flakes even do that? :)
nixpkgs.buildPlatform = builtins.currentSystem;
};
};
netconf = {
evalConfig = nixpkgs.nixos.unstable.lib.evalModules;
defaults =
{
name,
nodeMeta,
nodePath,
...
}:
{
_module.args = {
pkgs = nixpkgs.nixos.unstable;
};
# Import the default modules
imports = [
# Import the base configuration for each node
./${nodePath}.nix
./modules/netconf
./lib/netconf-junos
"${sources.nixpkgs}/nixos/modules/misc/assertions.nix"
];
system.host-name = name;
inherit (nodeMeta) deployment;
};
};
nixos = {
evalConfig = args: import "${args.specialArgs.sourcePkgs.path}/nixos/lib/eval-config.nix" args;
defaults =
{
lib,
name,
nodes,
nodeMeta,
nodePath,
meta,
sourcePkgs,
...
}:
{
# Import the default modules
imports = [
# Import the base configuration for each node
./${nodePath}/_configuration.nix
./modules/generic
(import "${sources.lix-module}/module.nix" { inherit (sources) lix; })
./modules/${category name}
];
_module.args.serverNodes = lib.filterAttrs (
name: _: meta.nodes.${name}.nixpkgs.system == "nixos"
) nodes;
# Include default secrets
age-secrets.sources = [ ./${nodePath}/secrets ];
# Deployment config is specified in meta.nodes.${node}.deployment
inherit (nodeMeta) deployment;
nix = {
# Set NIX_PATH to the patched version of nixpkgs
nixPath = [ "nixpkgs=${builtins.storePath sourcePkgs.path}" ];
optimise.automatic = true;
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 7d";
};
settings =
{
substituters = [ "https://tvix-store.dgnum.eu/infra" ];
}
// (import ./machines/nixos/storage01/tvix-cache/cache-settings.nix {
caches = [ "infra" ];
});
};
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# Use the stateVersion declared in the metadata
system = {
inherit (nodeMeta) stateVersion;
};
};
};
};
}
// (mapSingleFuse mkNode nodes)