mirror of
https://github.com/lldap/lldap.git
synced 2026-03-31 15:07:48 +01:00
chore: add Nix flake-based development environment
Co-authored-by: Kumpelinus <kumpelinus@jat.de> - Add Nix flake and lockfile for reproducible development environments - Document Nix-based setup in `docs/nix-development.md` - Add `.envrc` for direnv integration and update `.gitignore` for Nix/direnv artifacts - Reference Nix setup in CONTRIBUTING.md
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
{
|
||||
description = "LLDAP - Light LDAP implementation for authentication";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
rust-overlay = {
|
||||
url = "github:oxalica/rust-overlay";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
crane = {
|
||||
url = "github:ipetkov/crane";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils, rust-overlay, crane }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
overlays = [ (import rust-overlay) ];
|
||||
pkgs = import nixpkgs {
|
||||
inherit system overlays;
|
||||
};
|
||||
|
||||
# MSRV from the project
|
||||
rustVersion = "1.89.0";
|
||||
|
||||
# Rust toolchain with required components
|
||||
rustToolchain = pkgs.rust-bin.stable.${rustVersion}.default.override {
|
||||
extensions = [ "rust-src" "clippy" "rustfmt" ];
|
||||
targets = [
|
||||
"wasm32-unknown-unknown"
|
||||
"x86_64-unknown-linux-musl"
|
||||
"aarch64-unknown-linux-musl"
|
||||
"armv7-unknown-linux-musleabihf"
|
||||
];
|
||||
};
|
||||
|
||||
craneLib = crane.lib.${system}.overrideToolchain rustToolchain;
|
||||
|
||||
# Common build inputs
|
||||
nativeBuildInputs = with pkgs; [
|
||||
# Rust toolchain and tools
|
||||
rustToolchain
|
||||
wasm-pack
|
||||
|
||||
# Build tools
|
||||
pkg-config
|
||||
|
||||
# Compression and utilities
|
||||
gzip
|
||||
curl
|
||||
wget
|
||||
|
||||
# Development tools
|
||||
git
|
||||
jq
|
||||
|
||||
# Cross-compilation support
|
||||
gcc
|
||||
];
|
||||
|
||||
buildInputs = with pkgs; [
|
||||
# System libraries that might be needed
|
||||
openssl
|
||||
sqlite
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
# macOS specific dependencies
|
||||
darwin.apple_sdk.frameworks.Security
|
||||
darwin.apple_sdk.frameworks.SystemConfiguration
|
||||
];
|
||||
|
||||
# Environment variables
|
||||
commonEnvVars = {
|
||||
CARGO_TERM_COLOR = "always";
|
||||
RUST_BACKTRACE = "1";
|
||||
|
||||
# Cross-compilation environment
|
||||
CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER = "${pkgs.pkgsStatic.stdenv.cc}/bin/cc";
|
||||
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER = "${pkgs.pkgsCross.aarch64-multiplatform.stdenv.cc}/bin/aarch64-unknown-linux-gnu-gcc";
|
||||
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER = "${pkgs.pkgsCross.armv7l-hf-multiplatform.stdenv.cc}/bin/arm-unknown-linux-gnueabihf-gcc";
|
||||
};
|
||||
|
||||
|
||||
|
||||
in
|
||||
{
|
||||
# Development shells
|
||||
devShells = {
|
||||
default = pkgs.mkShell ({
|
||||
inherit nativeBuildInputs buildInputs;
|
||||
|
||||
shellHook = ''
|
||||
echo "🔐 LLDAP Development Environment"
|
||||
echo "==============================================="
|
||||
echo "Rust version: ${rustVersion}"
|
||||
echo "Standard cargo commands available:"
|
||||
echo " cargo build --workspace - Build the workspace"
|
||||
echo " cargo test --workspace - Run tests"
|
||||
echo " cargo clippy --tests --workspace -- -D warnings - Run linting"
|
||||
echo " cargo fmt --check --all - Check formatting"
|
||||
echo " ./app/build.sh - Build frontend WASM"
|
||||
echo " ./export_schema.sh - Export GraphQL schema"
|
||||
echo "==============================================="
|
||||
echo ""
|
||||
|
||||
# Ensure wasm-pack is available
|
||||
if ! command -v wasm-pack &> /dev/null; then
|
||||
echo "⚠️ wasm-pack not found in PATH"
|
||||
fi
|
||||
|
||||
# Check if we're in the right directory
|
||||
if [[ "$(git rev-parse --show-toplevel 2>/dev/null)" == "$PWD" ]]; then
|
||||
echo "⚠️ Run this from the project root directory"
|
||||
fi
|
||||
'';
|
||||
} // commonEnvVars);
|
||||
|
||||
# Minimal shell for CI-like environment
|
||||
ci = pkgs.mkShell ({
|
||||
inherit nativeBuildInputs buildInputs;
|
||||
|
||||
shellHook = ''
|
||||
echo "🤖 LLDAP CI Environment"
|
||||
echo "Running with Rust ${rustVersion}"
|
||||
'';
|
||||
} // commonEnvVars);
|
||||
};
|
||||
|
||||
# Package outputs (optional - for building with Nix)
|
||||
packages = {
|
||||
default = craneLib.buildPackage {
|
||||
src = craneLib.cleanCargoSource (craneLib.path ./.);
|
||||
|
||||
inherit nativeBuildInputs buildInputs;
|
||||
|
||||
# Build only the server by default
|
||||
cargoExtraArgs = "-p lldap";
|
||||
|
||||
# Skip tests in the package build
|
||||
doCheck = false;
|
||||
|
||||
meta = with pkgs.lib; {
|
||||
description = "Light LDAP implementation for authentication";
|
||||
homepage = "https://github.com/lldap/lldap";
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = with maintainers; [ ];
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Formatter for the flake itself
|
||||
formatter = pkgs.nixpkgs-fmt;
|
||||
|
||||
# Apps for running via `nix run`
|
||||
apps = {
|
||||
default = flake-utils.lib.mkApp {
|
||||
drv = self.packages.${system}.default;
|
||||
};
|
||||
};
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user