1{2 description = "Jrsonnet";3 inputs = {4 nixpkgs.url = "github:nixos/nixpkgs";5 flake-utils.url = "github:numtide/flake-utils";6 rust-overlay = {7 url = "github:oxalica/rust-overlay";8 inputs.nixpkgs.follows = "nixpkgs";9 inputs.flake-utils.follows = "flake-utils";10 };11 };12 outputs = {13 nixpkgs,14 flake-utils,15 rust-overlay,16 ...17 }:18 flake-utils.lib.eachDefaultSystem (19 system: let20 pkgs = import nixpkgs {21 inherit system;22 overlays = [rust-overlay.overlays.default];23 config.allowUnsupportedSystem = true;24 };25 lib = pkgs.lib;26 rust =27 (pkgs.rustChannelOf {28 date = "2024-01-10";29 channel = "nightly";30 })31 .default32 .override {33 extensions = ["rust-src" "miri" "rust-analyzer" "clippy"];34 };35 in {36 packages = rec {37 default = jrsonnet;38 go-jsonnet = pkgs.callPackage ./nix/go-jsonnet.nix {};39 sjsonnet = pkgs.callPackage ./nix/sjsonnet.nix {};40 jsonnet = pkgs.callPackage ./nix/jsonnet.nix {};41 42 43 jrsonnet = pkgs.callPackage ./nix/jrsonnet.nix {44 rustPlatform = pkgs.makeRustPlatform {45 rustc = rust;46 cargo = rust;47 };48 };49 jrsonnet-nightly = pkgs.callPackage ./nix/jrsonnet.nix {50 rustPlatform = pkgs.makeRustPlatform {51 rustc = rust;52 cargo = rust;53 };54 withNightlyFeatures = true;55 };56 jrsonnet-release = pkgs.callPackage ./nix/jrsonnet-release.nix {57 rustPlatform = pkgs.makeRustPlatform {58 rustc = rust;59 cargo = rust;60 };61 };6263 benchmarks = pkgs.callPackage ./nix/benchmarks.nix {64 inherit go-jsonnet sjsonnet jsonnet;65 jrsonnetVariants = [66 {67 drv = jrsonnet.overrideAttrs {forBenchmarks = true;};68 name = "";69 }70 ];71 };72 benchmarks-quick = pkgs.callPackage ./nix/benchmarks.nix {73 inherit go-jsonnet sjsonnet jsonnet;74 quick = true;75 jrsonnetVariants = [76 {77 drv = jrsonnet.overrideAttrs {forBenchmarks = true;};78 name = "";79 }80 ];81 };82 benchmarks-against-release = pkgs.callPackage ./nix/benchmarks.nix {83 inherit go-jsonnet sjsonnet jsonnet;84 jrsonnetVariants = [85 {86 drv = jrsonnet.overrideAttrs {forBenchmarks = true;};87 name = "current";88 }89 {90 drv = jrsonnet-nightly.overrideAttrs {forBenchmarks = true;};91 name = "current-nightly";92 }93 {94 drv = jrsonnet-release.overrideAttrs {forBenchmarks = true;};95 name = "release";96 }97 ];98 };99 benchmarks-quick-against-release = pkgs.callPackage ./nix/benchmarks.nix {100 inherit go-jsonnet sjsonnet jsonnet;101 quick = true;102 jrsonnetVariants = [103 {104 drv = jrsonnet;105 name = "current";106 }107 {108 drv = jrsonnet-nightly;109 name = "current-nightly";110 }111 {112 drv = jrsonnet-release;113 name = "release";114 }115 ];116 };117 };118 packagesCross = lib.genAttrs ["mingwW64"] (crossSystem: let119 callPackage = pkgs.pkgsCross.${crossSystem}.callPackage;120 in {121 jrsonnet = callPackage ./nix/jrsonnet.nix {122 123 124 125 126 };127 });128 devShells.default = pkgs.mkShell {129 nativeBuildInputs = with pkgs; [130 alejandra131 rust132 cargo-edit133 cargo-asm134 cargo-outdated135 cargo-watch136 cargo-insta137 lld138 hyperfine139 graphviz140 ];141 };142 }143 );144}