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 cpp-jsonnet = pkgs.callPackage ./nix/cpp-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-experimental = pkgs.callPackage ./nix/jrsonnet.nix {61 inherit craneLib;62 withExperimentalFeatures = true;63 };6465 jrsonnet-release = pkgs.callPackage ./nix/jrsonnet-release.nix {66 rustPlatform = pkgs.makeRustPlatform {67 rustc = rust;68 cargo = rust;69 };70 };7172 benchmarks = pkgs.callPackage ./nix/benchmarks.nix {73 inherit (config.legacyPackages.jsonnetImpls)74 go-jsonnet75 sjsonnet76 cpp-jsonnet77 rsjsonnet78 ;79 jrsonnetVariants = [80 {81 drv = jrsonnet.override { forBenchmarks = true; };82 name = "";83 }84 ];85 };86 benchmarks-quick = pkgs.callPackage ./nix/benchmarks.nix {87 inherit (config.legacyPackages.jsonnetImpls)88 go-jsonnet89 sjsonnet90 cpp-jsonnet91 rsjsonnet92 ;93 quick = true;94 jrsonnetVariants = [95 {96 drv = jrsonnet.override { forBenchmarks = true; };97 name = "";98 }99 ];100 };101 benchmarks-against-release = pkgs.callPackage ./nix/benchmarks.nix {102 inherit (config.legacyPackages.jsonnetImpls)103 go-jsonnet104 sjsonnet105 cpp-jsonnet106 rsjsonnet107 ;108 jrsonnetVariants = [109 {110 drv = jrsonnet.override { forBenchmarks = true; };111 name = "current";112 }113 {114 drv = jrsonnet-experimental.override { forBenchmarks = true; };115 name = "current-experimental";116 }117 {118 drv = jrsonnet-release.override { forBenchmarks = true; };119 name = "release";120 }121 ];122 };123 benchmarks-quick-against-release = pkgs.callPackage ./nix/benchmarks.nix {124 inherit (config.legacyPackages.jsonnetImpls)125 go-jsonnet126 sjsonnet127 cpp-jsonnet128 rsjsonnet129 ;130 quick = true;131 jrsonnetVariants = [132 {133 drv = jrsonnet.override { forBenchmarks = true; };134 name = "current";135 }136 {137 drv = jrsonnet-experimental.override { forBenchmarks = true; };138 name = "current-experimental";139 }140 {141 drv = jrsonnet-release.override { forBenchmarks = true; };142 name = "release";143 }144 ];145 };146 };147 shelly.shells.default = {148 factory = craneLib.devShell;149 packages =150 with pkgs;151 [152 cargo-edit153 cargo-outdated154 cargo-watch155 cargo-insta156 cargo-hack157 lld158 hyperfine159 graphviz160 ]161 ++ lib.optionals (!stdenv.isDarwin) [162 valgrind163 kdePackages.kcachegrind164 ];165 };166 };167 };168}