Files
cdk/flake.nix
2025-08-31 12:00:04 +01:00

246 lines
6.6 KiB
Nix

{
description = "CDK Flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs = {
nixpkgs.follows = "nixpkgs";
};
};
fenix = {
url = "github:nix-community/fenix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.rust-analyzer-src.follows = "";
};
flake-utils.url = "github:numtide/flake-utils";
crane = {
url = "github:ipetkov/crane";
};
pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix";
};
outputs =
{ self
, nixpkgs
, rust-overlay
, flake-utils
, pre-commit-hooks
, ...
}@inputs:
flake-utils.lib.eachDefaultSystem (
system:
let
overlays = [ (import rust-overlay) ];
lib = pkgs.lib;
stdenv = pkgs.stdenv;
isDarwin = stdenv.isDarwin;
libsDarwin =
with pkgs;
lib.optionals isDarwin [
# Additional darwin specific inputs can be set here
darwin.apple_sdk.frameworks.Security
darwin.apple_sdk.frameworks.SystemConfiguration
];
# Dependencies
pkgs = import nixpkgs {
inherit system overlays;
};
# Toolchains
# latest stable
stable_toolchain = pkgs.rust-bin.stable."1.86.0".default.override {
targets = [ "wasm32-unknown-unknown" ]; # wasm
extensions = [
"rustfmt"
"clippy"
"rust-analyzer"
];
};
# MSRV stable
msrv_toolchain = pkgs.rust-bin.stable."1.85.0".default.override {
targets = [ "wasm32-unknown-unknown" ]; # wasm
extensions = [
"rustfmt"
"clippy"
"rust-analyzer"
];
};
# Nightly used for formatting
nightly_toolchain = pkgs.rust-bin.selectLatestNightlyWith (
toolchain:
toolchain.default.override {
extensions = [
"rustfmt"
"clippy"
"rust-analyzer"
"rust-src"
];
targets = [ "wasm32-unknown-unknown" ]; # wasm
}
);
# Common inputs
envVars = {
# rust analyzer needs NIX_PATH for some reason.
NIX_PATH = "nixpkgs=${inputs.nixpkgs}";
};
buildInputs =
with pkgs;
[
# Add additional build inputs here
git
pkg-config
curl
just
protobuf
nixpkgs-fmt
typos
lnd
clightning
bitcoind
sqlx-cli
cargo-outdated
mprocs
# Needed for github ci
libz
]
++ libsDarwin;
# Common arguments can be set here to avoid repeating them later
nativeBuildInputs = [
#Add additional build inputs here
]
++ lib.optionals isDarwin [
# Additional darwin specific native inputs can be set here
];
in
{
checks = {
# Pre-commit checks
pre-commit-check =
let
# this is a hack based on https://github.com/cachix/pre-commit-hooks.nix/issues/126
# we want to use our own rust stuff from oxalica's overlay
_rust = pkgs.rust-bin.stable.latest.default;
rust = pkgs.buildEnv {
name = _rust.name;
inherit (_rust) meta;
buildInputs = [ pkgs.makeWrapper ];
paths = [ _rust ];
pathsToLink = [
"/"
"/bin"
];
postBuild = ''
for i in $out/bin/*; do
wrapProgram "$i" --prefix PATH : "$out/bin"
done
'';
};
in
pre-commit-hooks.lib.${system}.run {
src = ./.;
hooks = {
rustfmt = {
enable = true;
entry = lib.mkForce "${rust}/bin/cargo-fmt fmt --all -- --config format_code_in_doc_comments=true --check --color always";
};
nixpkgs-fmt.enable = true;
typos.enable = true;
commitizen.enable = true; # conventional commits
};
};
};
devShells =
let
# pre-commit-checks
_shellHook = (self.checks.${system}.pre-commit-check.shellHook or "");
# devShells
msrv = pkgs.mkShell (
{
shellHook = "
${_shellHook}
";
buildInputs = buildInputs ++ [ msrv_toolchain ];
inherit nativeBuildInputs;
}
// envVars
);
stable = pkgs.mkShell (
{
shellHook = ''${_shellHook}'';
buildInputs = buildInputs ++ [ stable_toolchain ];
inherit nativeBuildInputs;
}
// envVars
);
nightly = pkgs.mkShell (
{
shellHook = ''
${_shellHook}
# Needed for github ci
export LD_LIBRARY_PATH=${
pkgs.lib.makeLibraryPath [
pkgs.zlib
]
}:$LD_LIBRARY_PATH
'';
buildInputs = buildInputs ++ [ nightly_toolchain ];
inherit nativeBuildInputs;
}
// envVars
);
# Shell with Docker for integration tests
integration = pkgs.mkShell (
{
shellHook = ''
${_shellHook}
# Ensure Docker is available
if ! command -v docker &> /dev/null; then
echo "Docker is not installed or not in PATH"
echo "Please install Docker to run integration tests"
exit 1
fi
echo "Docker is available at $(which docker)"
echo "Docker version: $(docker --version)"
'';
buildInputs = buildInputs ++ [
stable_toolchain
pkgs.docker-client
];
inherit nativeBuildInputs;
}
// envVars
);
in
{
inherit
msrv
stable
nightly
integration
;
default = stable;
};
}
);
}