construct/flake.nix

40 lines
1.4 KiB
Nix

{
description = "A flake for the construct matrix homeserver";
outputs = { self, nixpkgs }: let
forAllSystems = nixpkgs.lib.genAttrs [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" ];
in {
overlay = final: prev: rec {
matrix-construct-source = let
inherit (prev) lib linkFarm;
srcFilter = n: t: (lib.hasSuffix ".cc" n || lib.hasSuffix ".h" n || lib.hasSuffix ".S" n
|| lib.hasSuffix ".md" n || t == "directory");
repo = lib.cleanSourceWith { filter = srcFilter; src = lib.cleanSource ./.; };
buildFileWith = root: name: type: rec {
inherit name; file = "${root}/${name}";
path = if type == "directory" then buildFarmFrom name file else "${file}";
};
buildFarm = root: lib.mapAttrsToList (buildFileWith root) (builtins.readDir root);
buildFarmFrom = basename: root: linkFarm (lib.strings.sanitizeDerivationName basename) (buildFarm root);
in buildFarmFrom "construct" self;
matrix-construct = prev.callPackage ./nix/package {
rev = if self ? rev then self.rev else "development";
source = matrix-construct-source;
};
};
packages = forAllSystems (system: let
pkgs = nixpkgs.legacyPackages.${system};
in self.overlay pkgs pkgs);
defaultPackage = forAllSystems (system: self.packages.${system}.matrix-construct);
nixosModules = {
matrix-construct = import ./nix/module self;
};
};
}