aether/flake.nix

87 lines
2.7 KiB
Nix

{
description = "Aether - web server configuration";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
rpi5-kernel.url = "gitlab:vriska/nix-rpi5";
rpi5-kernel.inputs.nixpkgs.follows = "nixpkgs";
agenix.url = "github:ryantm/agenix";
agenix.inputs.nixpkgs.follows = "nixpkgs";
agenix.inputs.darwin.follows = "";
forgejo-tokyo-night.url = "https://git.tokinanpa.dev/toki/forgejo-tokyo-night/archive/main.tar.gz";
forgejo-tokyo-night.flake = false;
streams-src.url = "https://codeberg.org/streams/streams/archive/release.tar.gz";
streams-src.flake = false;
streams-addons.url = "https://codeberg.org/streams/streams-addons/archive/release.tar.gz";
streams-addons.flake = false;
};
outputs = inputs@{ self, nixpkgs, agenix, rpi5-kernel, streams-src, streams-addons, ... }:
let
inherit (nixpkgs) lib;
# Extra config applied to each module
# (Mostly used for injecting flake inputs)
extraConfig = {
streams = {
aether.streams._internal.streams-src = lib.mkDefault streams-src;
aether.streams._internal.vendorHash =
lib.mkDefault "sha256-pfbQeudVDhGpEIl1BoBeHbajtU9Z2+oY62D8GRqodTI=";
aether.streams.addonRepos = [ streams-addons ];
};
deploy-rpi5 = {
aether.deploy.rpi5._internal.kernelPackages = lib.mkDefault
rpi5-kernel.legacyPackages.aarch64-linux.linuxPackages_rpi5;
};
};
moduleNames =
let sub = builtins.readDir ./modules;
in builtins.filter
(d: sub.${d} == "directory")
(builtins.attrNames sub);
deployNames =
let sub = builtins.readDir ./deploy;
in builtins.map (d: "deploy-${d}")
(builtins.filter
(d: sub.${d} == "directory")
(builtins.attrNames sub));
modules = lib.genAttrs moduleNames
(name: ./modules/${name});
deployments = lib.genAttrs deployNames
(name: ./deploy/${lib.removePrefix "deploy-" name});
modulesWithCfg = builtins.mapAttrs (k: v: {
imports = [ v ];
} // extraConfig.${k} or {}) modules;
deploymentsWithCfg = builtins.mapAttrs (k: v: {
imports = [ v ];
} // extraConfig.${k} or {}) deployments;
in {
nixosModules =
modulesWithCfg // deploymentsWithCfg // {
all.imports = lib.attrValues modulesWithCfg;
};
nixosConfigurations."toki-aether" =
nixpkgs.lib.nixosSystem {
specialArgs = inputs // {
aether = self.nixosModules;
};
modules = [
agenix.nixosModules.default
./aether/hardware-configuration.nix
./aether/config.nix
];
};
nixosConfigurations.default = self.nixosConfigurations."toki-aether";
};
}