{ static ? false }: let # Pinned Nixpkgs for reproducibility nixpkgs = builtins.fetchTarball { name = "nixpkgs-23.05.5a237aecb572"; url = "https://github.com/nixos/nixpkgs/archive/5a237aecb572.tar.gz"; sha256 = "166yxg4ff2jxvl9mbngd90dr1k3rdj6xmiccga41xynhh2zr0vmb"; }; # Needed for HTML manual katex = builtins.fetchTarball { url = "https://github.com/KaTeX/KaTeX/releases/download/v0.15.1/katex.tar.gz"; sha256 = "007nv11r0z9fz593iwzn55nc0p0wj5lpgf0k2brhs1ynmikq9gjr"; }; # Exclude this file and build artifacts source = builtins.filterSource (path: type: !builtins.elem path [ "configure.mk" "default.nix" "result" ] && baseNameOf path != "build") ./.; inherit (import nixpkgs {}) lib pkgs; in pkgs.stdenv.mkDerivation rec { pname = "gray"; version = "0.1"; src = source; doCheck = true; checkInputs = with pkgs.python3Packages; [ numpy scipy matplotlib ]; nativeBuildInputs = with pkgs; [ # fortran gfortran # debugging makefile2graph graphviz # documentation help2man pandoc haskellPackages.pandoc-crossref (texlive.combine { inherit (texlive) scheme-small xetex fontspec; }) # save nixpkgs tarball from gc nixpkgs ]; buildInputs = lib.optional static pkgs.glibc.static; # fonts needed for the PDF manual FONTCONFIG_FILE = pkgs.makeFontsConf { fontDirectories = with pkgs; [ fira-mono libertinus ]; }; enableParallelBuilding = true; hardeningDisable = [ "format" ]; configureFlags = [ (lib.enableFeature static "static") "--with-katex=${katex}" "--enable-deterministic" "GIT_REV=${version}" "GIT_DIRTY=" ]; meta = { homepage = "https://doi.org/10.13182/FST07-A1494"; description = "A quasi-optical beam-tracing code for EC waves in tokamaks"; platforms = lib.platforms.unix; # license? }; }