isle/flake.nix

83 lines
2.0 KiB
Nix

{
inputs.pkgsSrc.url = "nixpkgs/nixos-22.11";
inputs.utils.url = "github:numtide/flake-utils";
# v0.8.1
inputs.garage.url = "git+https://git.deuxfleurs.fr/Deuxfleurs/garage.git?ref=main&rev=76230f20282e73a5a5afa33af68152acaf732cf5";
description = "cryptic-net provides the foundation for an autonomous community cloud infrastructure";
outputs = {
self, pkgsSrc, utils, garage,
}: let
supportedSystems = [
"x86_64-linux"
"aarch64-linux"
"armv7l-linux" # rpi, I think?
"i686-linux"
];
mkPkg = (buildSystem: hostSystem: let
pkgs = import pkgsSrc {
system = buildSystem;
crossSystem = {
config = hostSystem;
};
overlays = [
(import ./nix/overlays/go.nix)
];
};
defaultAttrs = (import ./default.nix) {
inherit pkgs;
hostSystem = hostSystem;
garage = garage.packages."${hostSystem}".default;
selfRev = if self ? rev then self.rev else "UNKNOWN";
};
in
defaultAttrs.appImage
);
# TODO Once everything else is prepared for cross compilation this can be
# re-enabled. Things left to do:
#
# - Revert to not using flake for garage, we'll need to compile it
# ourselves because flakes don't actually support cross-compilation in a
# nice way.
#
# - Set ARCH arg for appimagetool target in default.nix
#
# - Test builds in QEMU or something.
#
# - Probably other things which will come up
#pkgsForBuildSystem = (buildSystem: builtins.foldl'
# (sysPkgs: hostSystem:
# sysPkgs // { "compiled-for-${hostSystem}" = mkPkg buildSystem hostSystem; })
# { default = mkPkg buildSystem buildSystem; }
# supportedSystems
#);
pkgsForBuildSystem = (buildSystem:
{ default = mkPkg buildSystem buildSystem; });
in {
packages = (builtins.foldl'
(pkgs: buildSystem:
pkgs // { "${buildSystem}" = pkgsForBuildSystem buildSystem; })
{}
supportedSystems
);
};
}