You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
3.7 KiB
168 lines
3.7 KiB
{
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
|
|
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
|
|
git-hooks = {
|
|
url = "github:cachix/git-hooks.nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
colmena = {
|
|
url = "github:zhaofengli/colmena";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
inputs.flake-utils.follows = "flake-utils";
|
|
};
|
|
|
|
disko = {
|
|
url = "github:nix-community/disko";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
nixago = {
|
|
url = "github:jmgilman/nixago";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
inputs.flake-utils.follows = "flake-utils";
|
|
};
|
|
|
|
sops = {
|
|
url = "github:Mic92/sops-nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
ldap-sync = {
|
|
type = "git";
|
|
url = "https://gogs.informatik.hs-fulda.de/fooker/ldap-sync.git";
|
|
flake = false;
|
|
};
|
|
};
|
|
|
|
outputs =
|
|
{ self
|
|
, nixpkgs
|
|
, flake-utils
|
|
, colmena
|
|
, git-hooks
|
|
, nixago
|
|
, ...
|
|
}@inputs:
|
|
let
|
|
|
|
# List of all machine names as defined in the machines directory
|
|
machines = builtins.attrNames (builtins.readDir ./machines);
|
|
|
|
# List of all client names
|
|
clients = builtins.attrNames (import ./clients.nix);
|
|
|
|
in
|
|
{
|
|
colmena = {
|
|
meta = {
|
|
nixpkgs = import nixpkgs {
|
|
system = "x86_64-linux";
|
|
};
|
|
|
|
specialArgs = {
|
|
inherit inputs;
|
|
};
|
|
};
|
|
|
|
defaults = {
|
|
imports = [
|
|
inputs.disko.nixosModules.disko
|
|
inputs.sops.nixosModules.sops
|
|
|
|
./shared
|
|
];
|
|
|
|
deployment.replaceUnknownProfiles = false;
|
|
};
|
|
|
|
"client" = (import ./client) null;
|
|
}
|
|
|
|
# Machines
|
|
// (builtins.listToAttrs (builtins.map
|
|
(name: {
|
|
inherit name;
|
|
value = ./machines/${name};
|
|
})
|
|
machines))
|
|
|
|
# Clients
|
|
// (builtins.listToAttrs (builtins.map
|
|
(id: {
|
|
name = "client-${id}";
|
|
value = (import ./client) id;
|
|
})
|
|
clients))
|
|
;
|
|
|
|
} // flake-utils.lib.eachDefaultSystem (system: {
|
|
checks = {
|
|
pre-commit = git-hooks.lib.${system}.run {
|
|
src = ./.;
|
|
hooks = {
|
|
nixpkgs-fmt.enable = true;
|
|
statix.enable = true;
|
|
shellcheck.enable = true;
|
|
};
|
|
};
|
|
};
|
|
|
|
devShells.default =
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
|
|
sops-config = nixago.lib.${system}.make {
|
|
data = (pkgs.callPackage ./sops-config.nix {
|
|
inherit machines;
|
|
}).config;
|
|
output = ".sops.yaml";
|
|
format = "yaml";
|
|
};
|
|
|
|
in
|
|
pkgs.mkShell {
|
|
buildInputs =
|
|
self.checks.${system}.pre-commit.enabledPackages ++
|
|
[ colmena.packages.${system}.colmena ] ++
|
|
(with pkgs; [
|
|
bash
|
|
gitAndTools.git
|
|
sops
|
|
age
|
|
openssh
|
|
ssh-to-age
|
|
]);
|
|
|
|
shellHook = ''
|
|
${self.checks.${system}.pre-commit.shellHook}
|
|
${sops-config.shellHook}
|
|
'';
|
|
};
|
|
|
|
packages.disks =
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
hive = colmena.lib.makeHive self.outputs.colmena;
|
|
|
|
in
|
|
pkgs.linkFarm "linuxlab-testing" (builtins.mapAttrs
|
|
(_: node: node.config.system.build.diskoImages)
|
|
hive.nodes);
|
|
});
|
|
|
|
nixConfig = {
|
|
extra-substituters = [
|
|
"https://colmena.cachix.org"
|
|
];
|
|
|
|
extra-trusted-public-keys = [
|
|
"colmena.cachix.org-1:7BzpDnjjH8ki2CT3f6GdOk7QAzPOl+1t3LvTLXqYcSg="
|
|
];
|
|
};
|
|
}
|
|
|