{ description = "a sisu like document parser search form"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; inputs.spine-d-overlay = { url = "git://git.sisudoc.org/package/dlang-nix-overlays-and-flake"; inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self, nixpkgs, spine-d-overlay, ... }@inputs: let pname = "spine_search"; version = "0.18.0"; #shell = ./shell.nix; #devEnv = ./nixDevEnv.sh; supportedSystems = ["x86_64-linux"]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;}); # nixpkgs instantiated for supported system types localOverlay = (final: prev: { ldc = prev.callPackage ./nix-overlays/ldc { }; # -> ok 1.42.0 # dmd overlay: revert to GCC14; (current) GCC 15 introduced nullptr in its headers, and DMD's ImportC parser needs update to handle it, monitor and update: dmd = prev.callPackage ./nix-overlays/dmd { stdenv = prev.gcc14Stdenv; }; # -> ok 2.111.0 dub = prev.callPackage ./nix-overlays/dub { }; # -> ? 1.40.0 #gdc = prev.callPackage ./nix-overlays/gdc { }; }); pkgsForSystem = system: import nixpkgs { overlays = [ localOverlay ]; inherit system; }; preBuild = '' export HOME=$(pwd) ''; checkPhase = '' runHook preCheck dub test --combined --skip-registry=all runHook postCheck ''; installPhase = '' runHook preInstall mkdir -p $out/cgi-bin install -m755 -D ./cgi-bin/spine_search $out/cgi-bin/spine_search runHook postInstall ''; postInstall = '' echo `ls -la $out/cgi-bin/spine_search` ''; # Helper to reduce duplication across build variants mkSpineSearch = {pkgs, compiler, compilerCmd, dubConfig}: pkgs.stdenv.mkDerivation { inherit pname version; meta.mainProgram = "spine_search"; src = self; buildInputs = [pkgs.sqlite]; nativeBuildInputs = [pkgs.dub compiler pkgs.gnumake]; buildPhase = '' runHook preBuild buildCMD="dub run --cache=local --compiler=$(type -P ${compilerCmd}) --build=${dubConfig} --combined --skip-registry=all" echo $buildCMD $buildCMD echo $buildCMD runHook postBuild ''; inherit preBuild; inherit checkPhase; inherit installPhase; inherit postInstall; }; in { packages = forAllSystems (system: let pkgs-ovl = pkgsForSystem system; pkgs-nix = nixpkgsFor.${system}; in { default = self.packages.${system}.spine-search-nixpkgs-ldc; spine-search-nixpkgs-dmd = mkSpineSearch { pkgs = pkgs-nix; # nixpkgs dmd: revert to GCC14 (same nullptr/ImportC fix as overlay dmd) compiler = pkgs-nix.dmd.override { stdenv = pkgs-nix.gcc14Stdenv; }; #compiler = pkgs-nix.dmd; compilerCmd = "dmd"; dubConfig = "dmd"; }; spine-search-nixpkgs-ldc = mkSpineSearch { pkgs = pkgs-nix; compiler = pkgs-nix.ldc; compilerCmd = "ldmd2"; dubConfig = "ldmd2"; }; spine-search-overlay-dmd = mkSpineSearch { pkgs = pkgs-ovl; compiler = pkgs-ovl.dmd; compilerCmd = "dmd"; dubConfig = "dmd"; }; spine-search-overlay-ldc = mkSpineSearch { pkgs = pkgs-ovl; compiler = pkgs-ovl.ldc; compilerCmd = "ldmd2"; dubConfig = "ldmd2"; }; #spine-search-overlay-gdc = mkSpineSearch { # pkgs = pkgs-ovl; # compiler = pkgs-ovl.gdc; # compilerCmd = "gdc"; # dubConfig = "gdc"; #}; }); devShells = forAllSystems (system: let pkgs-ovl = pkgsForSystem system; pkgs-nix = nixpkgsFor.${system}; shellHook = '' export Date=`date "+%Y%m%d"` ## set local values in .envrc-local (or here if you must) ''; in with pkgs-nix; { dsh-d-overlay = spine-d-overlay.devShells.${system}.default; dsh-overlay = mkShell { name = "${pname}-${version} dev shell (overlay)"; packages = with pkgs-ovl; [ ldc #dmd dub gnumake sqlite ]; inherit shellHook; }; dsh-nixpkgs-dmd = mkShell { name = "${pname}-${version} dev shell (nixpkgs dmd)"; packages = [ dmd dub gnumake sqlite ]; inherit shellHook; }; dsh-nixpkgs-ldc = mkShell { name = "${pname}-${version} dev shell (nixpkgs ldc)"; packages = [ ldc dub gnumake sqlite ]; inherit shellHook; }; dsh-overlay-dmd = mkShell { name = "${pname}-${version} dev shell (overlay dmd)"; # "spine-0.18.0 base dev shell, dmd-2.111.0, dub-1.40.0"; packages = with pkgs-ovl; [ dmd dub gnumake sqlite ]; inherit shellHook; }; dsh-overlay-ldc = mkShell { name = "${pname}-${version} dev shell (overlay ldc)"; # "spine-0.18.0 base dev shell, ldc-1.42.0, dub-1.40.0"; packages = with pkgs-ovl; [ ldc dub gnumake sqlite ]; inherit shellHook; }; dsh-sqlite = mkShell { name = "${pname}-${version} dev shell (sqlite)"; packages = [ ldc #dmd dub gnumake sqlite ]; inherit shellHook; }; default = self.devShells.${system}.dsh-nixpkgs-ldc; #default = import ./shell.nix {pkgs = pkgs-nix;}; }); }; }