Something went wrong. Try again.
A bridge from webhooks to Automerge documents
Something went wrong. Try again.
waystation flake.nix
5.1 kB · 184 lines
Nix
at setup
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185{ description = "waystation";
inputs = { nixpkgs.url = "nixpkgs/nixos-26.05"; nixos-unstable.url = "nixpkgs/nixos-unstable-small";
command-utils.url = "git+https://tangled.sh/@expede.wtf/nix-command-utils"; flake-utils.url = "github:numtide/flake-utils";
rust-overlay = { url = "github:oxalica/rust-overlay"; inputs.nixpkgs.follows = "nixpkgs"; }; };
outputs = { self, command-utils, flake-utils, nixos-unstable, nixpkgs, rust-overlay, } @ inputs: flake-utils.lib.eachDefaultSystem ( system: let overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs { inherit system overlays; config.allowUnfree = true; };
unstable = import nixos-unstable { inherit system overlays; config.allowUnfree = true; };
rustVersion = "1.91.0";
rust-toolchain = pkgs.rust-bin.stable.${rustVersion}.default.override { extensions = [ "cargo" "clippy" "llvm-tools-preview" "rust-src" "rust-std" ];
targets = [ "aarch64-apple-darwin" "x86_64-apple-darwin"
"x86_64-unknown-linux-musl" "aarch64-unknown-linux-musl" ]; };
# Nightly rustfmt for unstable formatting options (imports_granularity, etc.) # We need a combined nightly toolchain (rustc + rustfmt) because rustfmt # links against librustc_driver, which lives in the rustc component. # On macOS, symlinks break @rpath resolution, so we wrap the binary # with DYLD_LIBRARY_PATH pointing to the combined toolchain's lib/. nightly-rustfmt-unwrapped = pkgs.rust-bin.nightly.latest.minimal.override { extensions = [ "rustfmt" ]; };
nightly-rustfmt = pkgs.writeShellScriptBin "rustfmt" '' export DYLD_LIBRARY_PATH="${nightly-rustfmt-unwrapped}/lib''${DYLD_LIBRARY_PATH:+:$DYLD_LIBRARY_PATH}" export LD_LIBRARY_PATH="${nightly-rustfmt-unwrapped}/lib''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" exec "${nightly-rustfmt-unwrapped}/bin/rustfmt" "$@" '';
format-pkgs = with pkgs; [ alejandra nixpkgs-fmt taplo ];
cargo-installs = with pkgs; [ cargo-audit cargo-deny cargo-expand cargo-mutants cargo-nextest cargo-outdated cargo-release cargo-sort cargo-udeps cargo-watch ];
ci-env = [ rust-toolchain nightly-rustfmt pkgs.cargo-deny ];
mkCheck = name: text: pkgs.writeShellApplication { name = "waystation-${name}"; runtimeInputs = ci-env; text = '' export RUSTFMT="${nightly-rustfmt}/bin/rustfmt" set -x ${text} ''; };
ci-checks = { ci-fmt = mkCheck "ci-fmt" '' cargo fmt --check '';
ci-clippy = mkCheck "ci-clippy" '' cargo clippy --workspace --all-features --all-targets '';
ci-test = mkCheck "ci-test" '' cargo test --workspace --all-features '';
ci-deny = mkCheck "ci-deny" '' cargo deny check ''; };
ci-all = pkgs.writeShellApplication { name = "waystation-ci"; runtimeInputs = pkgs.lib.attrValues ci-checks; text = pkgs.lib.concatMapStringsSep "\n" (check: "waystation-${check}") (builtins.attrNames ci-checks); };
# Built-in command modules from nix-command-utils rust = command-utils.rust.${system};
command_menu = command-utils.commands.${system} [ # Rust commands (rust.audit { cargo-audit = pkgs.cargo-audit; }) (rust.build { cargo = pkgs.cargo; }) (rust.test { cargo = pkgs.cargo; cargo-watch = pkgs.cargo-watch; }) (rust.lint { cargo = pkgs.cargo; }) (rust.fmt { cargo = pkgs.cargo; }) (rust.doc { cargo = pkgs.cargo; }) (rust.watch { cargo-watch = pkgs.cargo-watch; }) ]; in { apps = pkgs.lib.mapAttrs (name: check: { type = "app"; program = "${check}/bin/waystation-${name}"; }) (ci-checks // {ci = ci-all;});
devShells.default = pkgs.mkShell { name = "waystation_shell";
nativeBuildInputs = command_menu ++ [ rust-toolchain nightly-rustfmt
pkgs.rust-analyzer ] ++ format-pkgs ++ cargo-installs;
shellHook = '' unset SOURCE_DATE_EPOCH export WORKSPACE_ROOT="$(pwd)" export RUSTFMT="${nightly-rustfmt}/bin/rustfmt" menu ''; };
formatter = pkgs.alejandra; } );}