myc

Self-custodial remote signer for Radroots apps
git clone https://radroots.dev/git/myc.git
Log | Files | Refs | README | LICENSE

flake.nix (4339B)


      1 {
      2   description = "myc";
      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             darwinLdFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L${pkgs.darwin.libiconv}/lib";
     48             darwinRustFlags = pkgs.lib.optionalString pkgs.stdenv.isDarwin "-L native=${pkgs.darwin.libiconv}/lib";
     49             mkApp =
     50               name: text:
     51               let
     52                 script = pkgs.writeShellApplication {
     53                   inherit name;
     54                   runtimeInputs = basePackages;
     55                   text = ''
     56                     set -euo pipefail
     57                     repo_root="$(git rev-parse --show-toplevel)"
     58                     cd "$repo_root"
     59                     export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
     60                     export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}"
     61                     export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}"
     62                     export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}"
     63                     export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}"
     64                     export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}"
     65                     export CPATH="${includePath}:''${CPATH:-}"
     66                     ${text}
     67                   '';
     68                 };
     69               in
     70               {
     71                 type = "app";
     72                 program = "${script}/bin/${name}";
     73               };
     74           in
     75           f {
     76             inherit
     77               basePackages
     78               darwinLdFlags
     79               darwinRustFlags
     80               includePath
     81               libraryPath
     82               mkApp
     83               pkgs
     84               rustToolchain
     85               ;
     86           }
     87         );
     88     in
     89     {
     90       apps = forAllSystems (
     91         { mkApp, ... }:
     92         rec {
     93           default = check;
     94           check = mkApp "check" ''
     95             cargo metadata --format-version 1 --no-deps
     96             cargo check --locked
     97           '';
     98           fmt = mkApp "fmt" ''
     99             cargo fmt --all --check
    100           '';
    101           release-acceptance = mkApp "release-acceptance" ''
    102             ./scripts/release-acceptance.sh
    103           '';
    104           test = mkApp "test" ''
    105             cargo test --locked
    106           '';
    107         }
    108       );
    109 
    110       devShells = forAllSystems (
    111         {
    112           basePackages,
    113           darwinLdFlags,
    114           darwinRustFlags,
    115           includePath,
    116           libraryPath,
    117           pkgs,
    118           ...
    119         }:
    120         {
    121           default = pkgs.mkShell {
    122             packages = basePackages;
    123             shellHook = ''
    124               export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
    125               export LIBRARY_PATH="${libraryPath}:''${LIBRARY_PATH:-}"
    126               export DYLD_FALLBACK_LIBRARY_PATH="${libraryPath}:''${DYLD_FALLBACK_LIBRARY_PATH:-}"
    127               export LDFLAGS="${darwinLdFlags} ''${LDFLAGS:-}"
    128               export NIX_LDFLAGS="${darwinLdFlags} ''${NIX_LDFLAGS:-}"
    129               export RUSTFLAGS="${darwinRustFlags} ''${RUSTFLAGS:-}"
    130               export CPATH="${includePath}:''${CPATH:-}"
    131             '';
    132           };
    133         }
    134       );
    135     };
    136 }