mirror of
https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-config.git
synced 2024-10-04 21:22:53 +00:00
62 lines
2.1 KiB
Nix
62 lines
2.1 KiB
Nix
{
|
|
description = "SelfPrivacy NixOS configuration flake";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs";
|
|
|
|
selfprivacy-graphql-api.url =
|
|
"git+https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api.git";
|
|
selfprivacy-graphql-api.inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, selfprivacy-graphql-api }: {
|
|
nixosConfigurations-fun =
|
|
{ system
|
|
, hardware-configuration
|
|
, userdata
|
|
, top-level-flake
|
|
, sp-modules
|
|
}:
|
|
let
|
|
lib = nixpkgs.legacyPackages.${system}.lib;
|
|
in
|
|
{
|
|
just-nixos = nixpkgs.lib.nixosSystem {
|
|
specialArgs = { inherit system; };
|
|
modules = [
|
|
hardware-configuration
|
|
./configuration.nix
|
|
(import ./userdata-variables.nix userdata)
|
|
(import ./api/api-module.nix
|
|
selfprivacy-graphql-api.packages.${system}.default)
|
|
{
|
|
# embed top-level flake source folder into the build
|
|
environment.etc."selfprivacy-config-source".source =
|
|
top-level-flake.outPath;
|
|
# for running "nix search nixpkgs", etc
|
|
nix.registry.nixpkgs.flake = nixpkgs;
|
|
# embed commit sha1; FIXME dirty builds must be intentionally forbidden
|
|
system.configurationRevision = self.rev or ("#" + self.lastModifiedDate + "-" + toString self.lastModified);
|
|
}
|
|
]
|
|
++
|
|
# add SP modules, but filter available config attributes for each
|
|
map
|
|
(sp-module: args@{ pkgs, ... }: (sp-module.nixosModules.default
|
|
(args // {
|
|
config =
|
|
# TODO use lib.attrsets.mergeAttrsList from nixpkgs 23.05
|
|
(builtins.foldl' lib.trivial.mergeAttrs { }
|
|
(map
|
|
(p: lib.attrsets.setAttrByPath p
|
|
(lib.attrsets.getAttrFromPath p args.config))
|
|
sp-module.configPathsNeeded));
|
|
}))
|
|
)
|
|
# (sp-module: sp-module.nixosModules.default)
|
|
(lib.attrsets.attrValues sp-modules);
|
|
};
|
|
};
|
|
};
|
|
}
|