nixos/flake.nix

145 lines
3.5 KiB
Nix

{
description = "Configuration NixOS du Crans";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
flake-parts.url = "github:hercules-ci/flake-parts";
# Formatter
treefmt-nix = {
url = "github:numtide/treefmt-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
# Secret management
agenix = {
url = "github:ryantm/agenix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
inputs@{
self,
nixpkgs,
flake-parts,
agenix,
...
}:
flake-parts.lib.mkFlake { inherit inputs; } {
imports = [ inputs.treefmt-nix.flakeModule ];
systems = [ "x86_64-linux" ];
flake = with nixpkgs.lib; {
nixosConfigurations =
let
cransOverlay = final: prev: {
crans = import ./overlays {
inherit inputs;
pkgs = prev;
};
};
baseModules = [
./modules
agenix.nixosModules.default
(
{ config, pkgs, ... }:
{
nixpkgs.overlays = [
cransOverlay
];
}
)
];
in
{
apprentix = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/vm/apprentix ] ++ baseModules;
};
jitsi = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/vm/jitsi ] ++ baseModules;
};
livre = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/vm/livre ] ++ baseModules;
};
neo = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/vm/neo ] ++ baseModules;
};
peertube = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/vm/peertube ] ++ baseModules;
};
periodique = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/vm/periodique ] ++ baseModules;
};
redite = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/vm/redite ] ++ baseModules;
};
reverseproxy = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/vm/reverseproxy ] ++ baseModules;
};
thot = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/physiques/thot ] ++ baseModules;
};
two = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/vm/two ] ++ baseModules;
};
vaultwarden = nixosSystem {
specialArgs = inputs;
modules = [ ./hosts/vm/vaultwarden ] ++ baseModules;
};
};
};
perSystem =
{
system,
...
}:
let
pkgs = import inputs.nixpkgs {
inherit system;
overlays = [
(_: prev: {
crans = import ./overlays {
inherit inputs;
pkgs = prev;
};
})
];
};
in
{
_module.args.pkgs = pkgs;
packages = pkgs.crans;
devShells = {
default = pkgs.callPackage ./devshells/default.nix { inherit (inputs) agenix; };
};
};
};
}