{
description = "Gemini projects";
inputs = {
flake-utils.url = "github:numtide/flake-utils";
naersk = {
url = "github:nmattia/naersk";
inputs.nixpkgs.follows = "nixpkgs";
};
nixpkgs.url = "nixpkgs/nixpkgs-unstable";
};
outputs = { self, flake-utils, naersk, nixpkgs }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
naersk-lib = naersk.lib.${system};
libs = [ "gemini" ];
apps = [
"setka"
# "sputnik"
# "vostok"
];
crates = libs ++ apps;
build = f: crates:
pkgs.lib.foldr (crate: set: set // { "${crate}" = f crate; }) { }
crates;
in
with pkgs; rec {
packages = build
(crate:
naersk-lib.buildPackage {
pname = crate;
root = ./.;
src = ./. + "/${crate}";
})
crates;
defaultPackage = packages.gemini;
apps = build (crate: flake-utils.lib.mkApp { drv = packages.${crate}; })
apps;
# defaultApp = apps.vostok;
devShell = mkShell {
nativeBuildInputs = [
rustc
cargo
clippy
rustfmt
rust-analyzer
cargo-edit
# cargo-watch # -- broken
gnutar
libiconv
];
RUST_BACKTRACE = 1;
RUST_LOG = "vostok=trace";
RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
};
});
}