mirror of
https://github.com/lldap/lldap.git
synced 2026-03-31 15:07:48 +01:00
fe063272bf
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
162 lines
5.2 KiB
Nix
162 lines
5.2 KiB
Nix
{
|
||
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;
|
||
};
|
||
};
|
||
});
|
||
} |