radrootsd

JSON-RPC bridge for Radroots event publishing
git clone https://radroots.dev/git/radrootsd.git
Log | Files | Refs | README | LICENSE

flake.nix (6022B)


      1 {
      2   description = "radrootsd";
      3 
      4   inputs = {
      5     nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
      6     rust-overlay = {
      7       url = "github:oxalica/rust-overlay";
      8       inputs.nixpkgs.follows = "nixpkgs";
      9     };
     10   };
     11 
     12   outputs =
     13     { nixpkgs, rust-overlay, ... }:
     14     let
     15       systems = [
     16         "aarch64-darwin"
     17         "aarch64-linux"
     18         "x86_64-darwin"
     19         "x86_64-linux"
     20       ];
     21       forAllSystems =
     22         f:
     23         nixpkgs.lib.genAttrs systems (
     24           system:
     25           let
     26             pkgs = import nixpkgs {
     27               inherit system;
     28               overlays = [ rust-overlay.overlays.default ];
     29             };
     30             rustToolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
     31             basePackages =
     32               [
     33                 pkgs.git
     34                 rustToolchain
     35                 pkgs.clang
     36                 pkgs.llvmPackages.libclang
     37                 pkgs.libsodium
     38                 pkgs.openssl
     39                 pkgs.pkg-config
     40                 pkgs.sqlite
     41               ]
     42               ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
     43                 pkgs.darwin.libiconv
     44               ];
     45             libraryPath = pkgs.lib.makeLibraryPath basePackages;
     46             includePath = pkgs.lib.makeSearchPathOutput "dev" "include" basePackages;
     47             llvmToolsBin = "${pkgs.llvmPackages.llvm}/bin";
     48             darwinLdFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L${pkgs.darwin.libiconv}/lib";
     49             darwinRustFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L native=${pkgs.darwin.libiconv}/lib";
     50             coveragePackages = basePackages ++ [
     51               pkgs.llvmPackages.llvm
     52             ];
     53             mkApp =
     54               name:
     55               {
     56                 runtimeInputs ? basePackages,
     57                 text,
     58               }:
     59               let
     60                 script = pkgs.writeShellApplication {
     61                   inherit name;
     62                   inherit runtimeInputs;
     63                   text = ''
     64                     set -euo pipefail
     65                     repo_root="$(git rev-parse --show-toplevel)"
     66                     cd "$repo_root"
     67                     export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
     68                     export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}"
     69                     export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}"
     70                     export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}"
     71                     export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}"
     72                     export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}"
     73                     export CPATH="${includePath}:''${CPATH:-}"
     74                     ${text}
     75                   '';
     76                 };
     77               in
     78               {
     79                 type = "app";
     80                 program = "${script}/bin/${name}";
     81               };
     82           in
     83           f {
     84             inherit
     85               basePackages
     86               coveragePackages
     87               darwinLdFlags
     88               darwinRustFlags
     89               includePath
     90               libraryPath
     91               llvmToolsBin
     92               mkApp
     93               pkgs
     94               rustToolchain
     95               ;
     96           }
     97         );
     98     in
     99     {
    100       apps = forAllSystems (
    101         {
    102           coveragePackages,
    103           llvmToolsBin,
    104           mkApp,
    105           ...
    106         }:
    107         rec {
    108           default = check;
    109           check = mkApp "check" {
    110             text = ''
    111               cargo metadata --format-version 1 --no-deps
    112               cargo check
    113             '';
    114           };
    115           coverage-report = mkApp "coverage-report" {
    116             runtimeInputs = coveragePackages;
    117             text = ''
    118               export PATH="$HOME/.cargo/bin:$PATH"
    119               cargo +nightly llvm-cov --version >/dev/null 2>&1 || {
    120                 echo "cargo +nightly llvm-cov must be available to run coverage-report" >&2
    121                 exit 1
    122               }
    123               export LLVM_COV="${llvmToolsBin}/llvm-cov"
    124               export LLVM_PROFDATA="${llvmToolsBin}/llvm-profdata"
    125               coverage_target_dir="$(mktemp -d "''${TMPDIR:-/tmp}/radrootsd-llvm-cov.XXXXXX")"
    126               trap 'rm -rf "$coverage_target_dir"' EXIT
    127               export CARGO_TARGET_DIR="$coverage_target_dir"
    128               mkdir -p target/coverage
    129               cargo +nightly llvm-cov clean --workspace
    130               cargo +nightly llvm-cov --workspace --all-features --branch --no-report
    131               cargo +nightly llvm-cov report --json --summary-only --output-path target/coverage/summary.json
    132               cargo +nightly llvm-cov report --lcov --output-path target/coverage/lcov.info
    133               cargo +nightly llvm-cov report --summary-only
    134               echo "coverage summary: target/coverage/summary.json"
    135               echo "coverage lcov: target/coverage/lcov.info"
    136             '';
    137           };
    138           fmt = mkApp "fmt" {
    139             text = ''
    140               cargo fmt --all --check
    141             '';
    142           };
    143           test = mkApp "test" {
    144             text = ''
    145               cargo test
    146             '';
    147           };
    148         }
    149       );
    150 
    151       devShells = forAllSystems (
    152         {
    153           basePackages,
    154           darwinLdFlags,
    155           darwinRustFlags,
    156           includePath,
    157           libraryPath,
    158           pkgs,
    159           ...
    160         }:
    161         {
    162           default = pkgs.mkShell {
    163             packages = basePackages;
    164             shellHook = ''
    165               export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
    166               export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}"
    167               export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}"
    168               export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}"
    169               export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}"
    170               export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}"
    171               export CPATH="${includePath}:''${CPATH:-}"
    172             '';
    173           };
    174         }
    175       );
    176     };
    177 }