{ description = "Aria Shrimpton dissertation"; inputs = { crane.url = "github:ipetkov/crane"; crane.inputs.nixpkgs.follows = "nixpkgs"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs = { nixpkgs.follows = "nixpkgs"; }; }; }; outputs = { self, nixpkgs, crane, rust-overlay, }: let system = "x86_64-linux"; pkgs = import nixpkgs { inherit system; overlays = [(import rust-overlay)]; }; toolchain = pkgs.rust-bin.fromRustupToolchain (builtins.fromTOML (builtins.readFile ./src/rust-toolchain.toml)).toolchain // {profile = "minimal";}; craneLib = crane.lib.${system}.overrideToolchain toolchain; tex = pkgs.texlive.combine { inherit (pkgs.texlive) scheme-small microtype sectsty printlen psnfss helvetic courier biblatex latex-bin latexmk ; }; in rec { devShells.${system}.default = pkgs.mkShell { buildInputs = [ pkgs.just # command runner tex # latex environment pkgs.biber # bibliography backend (pkgs.callPackage ./racket-env.nix {}) pkgs.z3 ]; }; packages.${system} = { thesis = pkgs.stdenvNoCC.mkDerivation rec { name = "thesis"; src = ./thesis; buildInputs = [pkgs.coreutils tex pkgs.biber]; phases = ["unpackPhase" "buildPhase" "installPhase"]; buildPhase = '' export PATH="${pkgs.lib.makeBinPath buildInputs}"; mkdir -p .cache/texmf-var env TEXMFHOME=.cache TEXMFVAR=.cache/texmf-var \ latexmk -interaction=nonstopmode -bibtex -pdf \ main.tex ''; installPhase = '' mkdir -p $out cp main.pdf $out/ ''; }; default = let rustCrate = craneLib.buildPackage { pname = "candelabra-unwrapped"; version = "1.0.0"; src = craneLib.cleanCargoSource (craneLib.path ./src); doCheck = false; cargoExtraArgs = "-p candelabra-cli"; }; in pkgs.runCommand "candelabra" {} '' . ${pkgs.makeWrapper}/nix-support/setup-hook mkdir -p $out/bin makeWrapper ${rustCrate}/bin/candelabra $out/bin/candelabra \ --set CANDELABRA_SRC_DIR ${pkgs.lib.sourceByRegex ./src [ ".*crates" ".*racket_specs.*" ".*crates/library.*" ".*crates/benchmarker.*" ]} ''; }; dockerImages.${system}.default = pkgs.dockerTools.streamLayeredImage { name = "candelabra"; maxLayers = 128; contents = [ toolchain (pkgs.callPackage ./racket-env.nix {}) pkgs.z3 packages.${system}.default pkgs.just (craneLib.cleanCargoSource (craneLib.path ./src)) ]; }; }; }