1{2 description = "Jrsonnet";3 inputs = {4 nixpkgs.url = "github:nixos/nixpkgs/release-25.11";5 rust-overlay = {6 url = "github:oxalica/rust-overlay";7 inputs.nixpkgs.follows = "nixpkgs";8 };9 flake-parts = {10 url = "github:hercules-ci/flake-parts";11 inputs.nixpkgs-lib.follows = "nixpkgs";12 };13 crane.url = "github:ipetkov/crane";14 shelly.url = "github:CertainLach/shelly";15 };16 outputs =17 inputs@{18 nixpkgs,19 flake-parts,20 rust-overlay,21 crane,22 shelly,23 ...24 }:25 flake-parts.lib.mkFlake { inherit inputs; } {26 imports = [ shelly.flakeModule ];27 systems = inputs.nixpkgs.lib.systems.flakeExposed;28 perSystem =29 {30 config,31 system,32 ...33 }:34 let35 pkgs = import nixpkgs {36 inherit system;37 overlays = [ rust-overlay.overlays.default ];38 config.allowUnsupportedSystem = true;39 };40 rust = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;41 craneLib = (crane.mkLib pkgs).overrideToolchain rust;42 in43 {44 legacyPackages = {45 jsonnetImpls = {46 go-jsonnet = pkgs.callPackage ./nix/go-jsonnet.nix { };47 sjsonnet = pkgs.callPackage ./nix/sjsonnet.nix { };48 jsonnet = pkgs.callPackage ./nix/jsonnet.nix { };49 50 51 rsjsonnet = pkgs.callPackage ./nix/rsjsonnet.nix { };52 };53 };54 packages = rec {55 default = jrsonnet;5657 jrsonnet = pkgs.callPackage ./nix/jrsonnet.nix {58 inherit craneLib;59 };60 jrsonnet-nightly = pkgs.callPackage ./nix/jrsonnet.nix {61 inherit craneLib;62 withNightlyFeatures = true;63 };64 jrsonnet-experimental = pkgs.callPackage ./nix/jrsonnet.nix {65 inherit craneLib;66 withExperimentalFeatures = true;67 };6869 jrsonnet-release = pkgs.callPackage ./nix/jrsonnet-release.nix {70 rustPlatform = pkgs.makeRustPlatform {71 rustc = rust;72 cargo = rust;73 };74 };7576 benchmarks = pkgs.callPackage ./nix/benchmarks.nix {77 inherit (config.legacyPackages.jsonnetImpls)78 go-jsonnet79 sjsonnet80 jsonnet81 rsjsonnet82 ;83 jrsonnetVariants = [84 {85 drv = jrsonnet.override { forBenchmarks = true; };86 name = "";87 }88 ];89 };90 benchmarks-quick = pkgs.callPackage ./nix/benchmarks.nix {91 inherit (config.legacyPackages.jsonnetImpls)92 go-jsonnet93 sjsonnet94 jsonnet95 rsjsonnet96 ;97 quick = true;98 jrsonnetVariants = [99 {100 drv = jrsonnet.override { forBenchmarks = true; };101 name = "";102 }103 ];104 };105 benchmarks-against-release = pkgs.callPackage ./nix/benchmarks.nix {106 inherit (config.legacyPackages.jsonnetImpls)107 go-jsonnet108 sjsonnet109 jsonnet110 rsjsonnet111 ;112 jrsonnetVariants = [113 {114 drv = jrsonnet.override { forBenchmarks = true; };115 name = "current";116 }117 {118 drv = jrsonnet-nightly.override { forBenchmarks = true; };119 name = "current-nightly";120 }121 {122 drv = jrsonnet-release.override { forBenchmarks = true; };123 name = "release";124 }125 ];126 };127 benchmarks-quick-against-release = pkgs.callPackage ./nix/benchmarks.nix {128 inherit (config.legacyPackages.jsonnetImpls)129 go-jsonnet130 sjsonnet131 jsonnet132 rsjsonnet133 ;134 quick = true;135 jrsonnetVariants = [136 {137 drv = jrsonnet.override { forBenchmarks = true; };138 name = "current";139 }140 {141 drv = jrsonnet-nightly.override { forBenchmarks = true; };142 name = "current-nightly";143 }144 {145 drv = jrsonnet-release.override { forBenchmarks = true; };146 name = "release";147 }148 ];149 };150 };151 shelly.shells.default = {152 factory = craneLib.devShell;153 packages =154 with pkgs;155 [156 cargo-edit157 cargo-outdated158 cargo-watch159 cargo-insta160 cargo-hack161 lld162 hyperfine163 graphviz164 ]165 ++ lib.optionals (!stdenv.isDarwin) [166 valgrind167 ];168 };169 };170 };171}