cli

Command-line interface for Radroots
git clone https://radroots.dev/git/cli.git
Log | Files | Refs | README | LICENSE

flake.nix (4746B)


      1 {
      2   description = "Command-line interface for Radroots";
      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                 pkgs.rustup
     35                 rustToolchain
     36                 pkgs.clang
     37                 pkgs.llvmPackages.libclang
     38                 pkgs.pkg-config
     39               ]
     40               ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
     41                 pkgs.darwin.libiconv
     42               ];
     43             libraryPath = pkgs.lib.makeLibraryPath basePackages;
     44             includePath = pkgs.lib.makeSearchPathOutput "dev" "include" basePackages;
     45             darwinLdFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L${pkgs.darwin.libiconv}/lib";
     46             darwinRustFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L native=${pkgs.darwin.libiconv}/lib";
     47             mkApp =
     48               name:
     49               {
     50                 runtimeInputs ? basePackages,
     51                 text,
     52               }:
     53               let
     54                 script = pkgs.writeShellApplication {
     55                   inherit name;
     56                   inherit runtimeInputs;
     57                   text = ''
     58                     set -euo pipefail
     59                     repo_root="$(git rev-parse --show-toplevel)"
     60                     cd "$repo_root"
     61                     export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
     62                     export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}"
     63                     export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}"
     64                     export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}"
     65                     export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}"
     66                     export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}"
     67                     export CPATH="${includePath}:''${CPATH:-}"
     68                     ${text}
     69                   '';
     70                 };
     71               in
     72               {
     73                 type = "app";
     74                 program = "${script}/bin/${name}";
     75               };
     76           in
     77           f {
     78             inherit
     79               basePackages
     80               darwinLdFlags
     81               darwinRustFlags
     82               includePath
     83               libraryPath
     84               mkApp
     85               pkgs
     86               rustToolchain
     87               ;
     88           }
     89         );
     90     in
     91     {
     92       apps = forAllSystems (
     93         {
     94           mkApp,
     95           ...
     96         }:
     97         rec {
     98           default = check;
     99           check = mkApp "check" {
    100             text = ''
    101               cargo metadata --format-version 1 --no-deps
    102               cargo check
    103             '';
    104           };
    105           fmt = mkApp "fmt" {
    106             text = ''
    107               cargo fmt --package radroots_cli --check
    108             '';
    109           };
    110           release-acceptance = mkApp "release-acceptance" {
    111             text = ''
    112               cargo fmt --package radroots_cli --check
    113               cargo metadata --format-version 1 --no-deps
    114               cargo check
    115               cargo test -j1 -- --test-threads=1
    116             '';
    117           };
    118           test = mkApp "test" {
    119             text = ''
    120               cargo test -j1 -- --test-threads=1
    121             '';
    122           };
    123         }
    124       );
    125 
    126       devShells = forAllSystems (
    127         {
    128           basePackages,
    129           darwinLdFlags,
    130           darwinRustFlags,
    131           includePath,
    132           libraryPath,
    133           pkgs,
    134           ...
    135         }:
    136         {
    137           default = pkgs.mkShell {
    138             packages = basePackages;
    139             shellHook = ''
    140               export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
    141               export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}"
    142               export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}"
    143               export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}"
    144               export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}"
    145               export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}"
    146               export CPATH="${includePath}:''${CPATH:-}"
    147             '';
    148           };
    149         }
    150       );
    151     };
    152 }