roll-one-ring/flake.nix

73 lines
2.1 KiB
Nix
Raw Normal View History

2025-09-02 14:11:23 +02:00
{
description = "ROR development environment";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay.url = "github:oxalica/rust-overlay";
};
outputs = { self, nixpkgs, flake-utils, rust-overlay, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs { inherit system overlays; };
rustVersion = (pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml);
rustPlatform = pkgs.makeRustPlatform {
cargo = rustVersion;
rustc = rustVersion;
};
2025-09-02 22:12:14 +02:00
2025-09-02 14:11:23 +02:00
appName = "roll-one-ring";
2025-09-02 22:12:14 +02:00
cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml);
version = cargoToml.package.version;
2025-09-02 14:11:23 +02:00
appRustBuild = rustPlatform.buildRustPackage {
pname = appName;
2025-09-02 22:12:14 +02:00
version = version;
2025-09-02 14:11:23 +02:00
src = ./.;
cargoLock.lockFile = ./Cargo.lock;
};
2025-09-02 22:12:14 +02:00
makeDockerImage = tag: pkgs.dockerTools.buildLayeredImage {
name = "phundrak/${appName}";
inherit tag;
2025-09-02 14:11:23 +02:00
config = {
Entrypoint = ["${appRustBuild}/bin/${appName}"];
Env = [ "SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" ];
};
contents = [appRustBuild pkgs.cacert];
};
2025-09-02 22:12:14 +02:00
dockerImageLatest = makeDockerImage "latest";
dockerImageVersioned = makeDockerImage version;
2025-09-02 14:11:23 +02:00
in {
packages = {
rustPackage = appRustBuild;
2025-09-02 22:12:14 +02:00
docker = dockerImageLatest;
docker-versioned = dockerImageVersioned;
};
defaultPackage = dockerImageLatest;
apps = {
version = {
type = "app";
program = "${pkgs.writeShellScript "version" ''
echo "${version}"
''}";
};
2025-09-02 14:11:23 +02:00
};
devShell = with pkgs; mkShell {
buildInputs = [
bacon
cargo-deny
cargo-msrv
cargo-tarpaulin
just
rustVersion
sqls
];
};
}
);
}