diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2023-04-20 19:29:25 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2023-04-20 19:29:28 -0400 | 
| commit | 04444d0be1fce11b8760b7855c58e74b0ee61b39 (patch) | |
| tree | a4142cfd82eac209e833d0eab19c3d8416380376 | |
| parent | nix flake & build, temp. remove gdc (diff) | |
nix, run nix code formatter alejandra
| -rwxr-xr-x | default.nix | 2 | ||||
| -rw-r--r-- | derivation.nix | 221 | ||||
| -rw-r--r-- | devenv.nix | 86 | ||||
| -rw-r--r-- | flake.nix | 338 | ||||
| -rw-r--r-- | org/config_nix.org | 748 | ||||
| -rwxr-xr-x | shell.nix | 101 | 
6 files changed, 774 insertions, 722 deletions
diff --git a/default.nix b/default.nix index f00ab4c..922b291 100755 --- a/default.nix +++ b/default.nix @@ -1,3 +1,3 @@  #!/usr/bin/env -S nix-build -{ pkgs ? import <nixpkgs> {} }: +{pkgs ? import <nixpkgs> {}}:  pkgs.callPackage ./devenv.nix {} diff --git a/derivation.nix b/derivation.nix index a1e712a..8aee027 100644 --- a/derivation.nix +++ b/derivation.nix @@ -1,119 +1,130 @@ -{ pkgs ? import <nixpkgs> {}, +{ +  pkgs ? import <nixpkgs> {},    stdenv ? pkgs.stdenv,    lib ? pkgs.lib,    ldc ? null,    dcompiler ? pkgs.ldc, -  dub ? pkgs.dub +  dub ? pkgs.dub,  }:  assert dcompiler != null;  with ( -  with lib; -  let -    filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( # filter function to remove the .dub package folder from src -      type == "directory" && baseName == ".dub" -    ); +  with lib; let +    filterDub = name: type: let +      baseName = baseNameOf (toString name); +    in +      ! ( # filter function to remove the .dub package folder from src +        type == "directory" && baseName == ".dub" +      );      targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";      # remove reference to build tools and library sources -    disallowedReferences = deps: [ dcompiler dub ]; +    disallowedReferences = deps: [dcompiler dub];      removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';    in {      mkDubDerivation = lib.makeOverridable ({ -      src, -      nativeBuildInputs ? [], -      dubJSON ? src + "/dub.json", -      passthru ? {}, -      package ? lib.importJSON dubJSON, -      ... -    } @ attrs: stdenv.mkDerivation (attrs // { -      pname = package.name; -      nativeBuildInputs = [ dcompiler dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; -      disallowedReferences = disallowedReferences deps; -      passthru = passthru // { -        inherit dub dcompiler pkgs; -      }; -      src = lib.cleanSourceWith { -        filter = filterDub; -        src = lib.cleanSource src; -      }; -      preFixup = '' -        find $out/share/cgi-bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true -      ''; -      buildPhase = '' -        runHook preBuild -        HOME="$PWD" -        DFLAGS="-O2 -inline" -        for DC_ in dmd ldmd2 gdmd; do -          echo "- check for D compiler $DC_" -          DC=$(type -P $DC_ || echo "") -          if [ ! "$DC" == "" ]; then -            break -          fi -        done -        if [ "$DC" == "" ]; then -          exit "Error: could not find D compiler" -        fi -        echo "$DC_ used as D compiler to build $pname" -        dub build --compiler=$DC --build=release --combined --skip-registry=all -        runHook postBuild -      ''; -      checkPhase = '' -        runHook preCheck -        HOME="$PWD" -        dub test --combined --skip-registry=all -        runHook postCheck -      ''; -      installPhase = '' -        runHook preInstall -        mkdir -p $out/share/cgi-bin -        cp -r "${targetOf package}" $out/share/cgi-bin -        install -m755 -D $out/share/cgi-bin/spine_search spine_search -        runHook postInstall -      ''; -      postInstall = '' -        echo "HERE ${targetOf package} $out/share/cgi-bin" -        echo `ls -la $out/share/cgi-bin/spine_search` -      ''; -      meta = lib.optionalAttrs (package ? description) { -        description = package.description; -      } // attrs.meta or {}; -    } // lib.optionalAttrs (!(attrs ? version)) { -      name = package.name; # use name from dub.json, unless pname and version are specified -    })); +        src, +        nativeBuildInputs ? [], +        dubJSON ? src + "/dub.json", +        passthru ? {}, +        package ? lib.importJSON dubJSON, +        ... +      } @ attrs: +        stdenv.mkDerivation (attrs +          // { +            pname = package.name; +            nativeBuildInputs = [dcompiler dub pkgs.removeReferencesTo] ++ nativeBuildInputs; +            disallowedReferences = disallowedReferences deps; +            passthru = +              passthru +              // { +                inherit dub dcompiler pkgs; +              }; +            src = lib.cleanSourceWith { +              filter = filterDub; +              src = lib.cleanSource src; +            }; +            preFixup = '' +              find $out/share/cgi-bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true +            ''; +            buildPhase = '' +              runHook preBuild +              HOME="$PWD" +              DFLAGS="-O2 -inline" +              for DC_ in dmd ldmd2 gdmd; do +                echo "- check for D compiler $DC_" +                DC=$(type -P $DC_ || echo "") +                if [ ! "$DC" == "" ]; then +                  break +                fi +              done +              if [ "$DC" == "" ]; then +                exit "Error: could not find D compiler" +              fi +              echo "$DC_ used as D compiler to build $pname" +              dub build --compiler=$DC --build=release --combined --skip-registry=all +              runHook postBuild +            ''; +            checkPhase = '' +              runHook preCheck +              HOME="$PWD" +              dub test --combined --skip-registry=all +              runHook postCheck +            ''; +            installPhase = '' +              runHook preInstall +              mkdir -p $out/share/cgi-bin +              cp -r "${targetOf package}" $out/share/cgi-bin +              install -m755 -D $out/share/cgi-bin/spine_search spine_search +              runHook postInstall +            ''; +            postInstall = '' +              echo "HERE ${targetOf package} $out/share/cgi-bin" +              echo `ls -la $out/share/cgi-bin/spine_search` +            ''; +            meta = +              lib.optionalAttrs (package ? description) { +                description = package.description; +              } +              // attrs.meta or {}; +          } +          // lib.optionalAttrs (!(attrs ? version)) { +            name = package.name; # use name from dub.json, unless pname and version are specified +          }));    }  ); -mkDubDerivation rec { -  name          = "spine-search-${version}"; -  #version       = "0.12.0"; -  src           = ./.; -  buildInputs = [ -    pkgs.sqlite ( -      with pkgs; [ -        nixVersions.unstable #nixFlakes -        ## package manager -        dub -        ## compiler -        ldc -        rund -        ## linker -        #lld -        #mold -        ## builder -        #ninja -        sqlite -      ] -    ) -  ]; -  meta = with pkgs.lib; { -    pname       = "spine-search"; -    version     = "0.12.0"; -    homepage    = "https://sisudoc.org"; -    description = "cgi sqlite search form for document object search"; -    longDescription = '' -      a sisu like parser & document generator -    ''; -    homepage    = "https://sisudoc.org"; -    license     = licenses.agpl3Plus; -    platforms   = platforms.linux; -    maintainers = [ "RalphAmissah" ]; -  }; -} +  mkDubDerivation rec { +    name = "spine-search-${version}"; +    #version       = "0.12.0"; +    src = ./.; +    buildInputs = [ +      pkgs.sqlite +      ( +        with pkgs; [ +          nixVersions.unstable #nixFlakes +          ## package manager +          dub +          ## compiler +          ldc +          rund +          ## linker +          #lld +          #mold +          ## builder +          #ninja +          sqlite +        ] +      ) +    ]; +    meta = with pkgs.lib; { +      pname = "spine-search"; +      version = "0.12.0"; +      homepage = "https://sisudoc.org"; +      description = "cgi sqlite search form for document object search"; +      longDescription = '' +        a sisu like parser & document generator +      ''; +      homepage = "https://sisudoc.org"; +      license = licenses.agpl3Plus; +      platforms = platforms.linux; +      maintainers = ["RalphAmissah"]; +    }; +  } @@ -1,42 +1,46 @@ -{ pkgs ? import <nixpkgs> { }, name ? "user-env" }: +{ +  pkgs ? import <nixpkgs> {}, +  name ? "user-env", +}:  with pkgs; -buildEnv { -  inherit name; -  extraOutputsToInstall = [ "out" "man" "lib" ]; # to get all needed symlinks -  paths = [ -    # ❯❯❯ nix_related -    #nix # if not on NixOS, this is needed -    direnv -    #cachix -    nixVersions.unstable #nixFlakes -    nix-prefetch-git -    validatePkgConfig -    nix-output-monitor -    nix-tree -    jq -    git -    gnumake -    ps -    # ❯❯❯ d_build_related -    # ❯❯ package manager -    dub -    # ❯❯ compiler -    dmd -    ldc -    # ❯❯❯ sqlite search related -    sqlite -    # this will create a script that will rebuild and upgrade your setup; using shell script syntax -    (writeScriptBin "nix-rebuild" '' -      #!${stdenv.shell} -      #cd <path-to-flake> || exit 1 -      nix flake update -      nix profile upgrade '.*' -    '') -    # puts in your root the nixpkgs version -    (writeTextFile { -      name = "nixpkgs-version"; -      destination = "/nixpkgs-version"; -      text = lib.version; -    }) -  ]; -} +  buildEnv { +    inherit name; +    extraOutputsToInstall = ["out" "man" "lib"]; # to get all needed symlinks +    paths = [ +      # ❯❯❯ nix_related +      #nix # if not on NixOS, this is needed +      direnv +      #cachix +      nixVersions.unstable #nixFlakes +      nix-prefetch-git +      validatePkgConfig +      nix-output-monitor +      nix-tree +      jq +      alejandra +      git +      gnumake +      ps +      # ❯❯❯ d_build_related +      # ❯❯ package manager +      dub +      # ❯❯ compiler +      dmd +      ldc +      # ❯❯❯ sqlite search related +      sqlite +      # this will create a script that will rebuild and upgrade your setup; using shell script syntax +      (writeScriptBin "nix-rebuild" '' +        #!${stdenv.shell} +        #cd <path-to-flake> || exit 1 +        nix flake update +        nix profile upgrade '.*' +      '') +      # puts in your root the nixpkgs version +      (writeTextFile { +        name = "nixpkgs-version"; +        destination = "/nixpkgs-version"; +        text = lib.version; +      }) +    ]; +  } @@ -1,169 +1,179 @@  { -  description                  = "a sisu like document parser search form"; -  inputs.nixpkgs.url           = "github:NixOS/nixpkgs/nixpkgs-unstable"; # "github:nixos/nixpkgs"; "github:NixOS/nixpkgs/nixpkgs-unstable"; "nixpkgs/nixos-unstable"; "nixpkgs/nixos-21.11"; -  inputs.flake-utils.url       = "github:numtide/flake-utils"; -  outputs = { self, nixpkgs, flake-utils } @inputs: -    let -      pname                    = "spine_search"; -      version                  = "0.12.0"; -      shell                    = ./shell.nix; # ./default.nix; -      devEnv                   = ./.envrc; # ./shell.nix; # ./default.nix; -      supportedSystems         = [ "x86_64-linux" ]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; -      forAllSystems            = nixpkgs.lib.genAttrs supportedSystems; -      nixpkgsFor               = forAllSystems (system: import nixpkgs { inherit system;  }); # nixpkgs instantiated for supported system types. -      checkPhase = '' -        runHook preCheck -        dub test --combined --skip-registry=all -        runHook postCheck -      ''; -      installPhase = '' -        runHook preInstall -        mkdir -p $out/share/cgi-bin -        install -m755 -D ./cgi-bin/spine_search $out/share/cgi-bin/spine_search -        runHook postInstall -      ''; -      postInstall = '' -        echo `ls -la $out/share/cgi-bin/spine_search` -      ''; -    in { -      packages = forAllSystems (system: -        let pkgs               = nixpkgsFor.${system}; -        in with pkgs; { -          default = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            executable         = true; -            src                = self; -            inherit shell; -            inherit devEnv; -            buildInputs        = [ sqlite ]; -            nativeBuildInputs  = [ dub ldc gnumake ]; # [ dub dmd ]; [ dub ldc ]; [ dub gdc ]; -            buildPhase = '' -              runHook preBuild -              for DC_ in dmd ldmd2 ldc2 gdc gdmd; do -                echo "- check for D compiler $DC_" -                DC=$(type -P $DC_ || echo "") -                if [ ! "$DC" == "" ]; then break; fi -              done -              if [ "$DC" == "" ]; then exit "Error: could not find D compiler"; fi -              echo "$DC_ used as D compiler to build $pname" -              dub build --compiler=$DC --build=$DC_ --combined --skip-registry=all -              runHook postBuild -            ''; -            inherit checkPhase; -            inherit installPhase; -            inherit postInstall; -          }; -          spine-search-dmd = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            meta.mainProgram   = "spine_search-dmd"; -            executable         = true; -            src                = self; -            inherit shell; -            inherit devEnv; -            buildInputs        = [ sqlite ]; -            nativeBuildInputs  = [ dub dmd gnumake ]; -            buildPhase = '' -              runHook preBuild -              dub build --compiler=$(type -P dmd) --build=dmd --combined --skip-registry=all -              runHook postBuild -            ''; -            inherit checkPhase; -            inherit installPhase; -            inherit postInstall; -          }; -          spine-search-ldc = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            meta.mainProgram   = "spine_search-ldc"; -            executable         = true; -            src                = self; -            inherit shell; -            inherit devEnv; -            buildInputs        = [ sqlite ]; -            nativeBuildInputs  = [ dub ldc gnumake ]; -            buildPhase = '' -              runHook preBuild -              dub build --compiler=$(type -P ldc2) --build=ldc2 --combined --skip-registry=all -              runHook postBuild -            ''; -            inherit checkPhase; -            inherit installPhase; -            inherit postInstall; -          }; -          #spine-search-gdc = stdenv.mkDerivation { -          #  inherit pname; -          #  inherit version; -          #  meta.mainProgram   = "spine_search-gdc"; -          #  executable         = true; -          #  src                = self; -          #  inherit shell; -          #  inherit devEnv; -          #  buildInputs        = [ sqlite ]; -          #  nativeBuildInputs  = [ dub gdc gnumake ]; -          #  buildPhase = '' -          #    runHook preBuild -          #    dub build --compiler=$(type -P gdc) --build=gdc --combined --skip-registry=all -          #    runHook postBuild -          #  ''; -          #  inherit checkPhase; -          #  inherit installPhase; -          #  inherit postInstall; -          #}; -          #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; -      }); -      devShells = forAllSystems (system: -        let -          pkgs = nixpkgsFor.${system}; -          shellHook = '' -            export DFLAGS="-O2 -inline -boundscheck=on -color=on" -            export Date=`date "+%Y%m%d"` -            export SpineVER=$(git describe --long --tags | sed 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g') -            ### set local values in .envrc-local (or modify here if you must) -            # export SpinePROJ=~/grotto/repo/git.repo/projects/doc-reform/code/software/spine -            # export SpineDOC=~/grotto/repo/git.repo/projects/project-spine/doc-reform-markup/spine-markup-samples -            # export SpineOUT=/srv/www/spine -            export SpineDBpath=/var/www/sqlite -            # export SpineDBpath=/srv/www/spine/sqlite -            export SpineSRC=$SpinePROJ/src -            export SpineBIN=$SpinePROJ/result/bin -            export SpinePOD=$SpineDOC/markup/pod -            export SpineSearchActionLocal='http://localhost/spine_search' -            # export SpineSearchActionRemote='https://sisudoc.org/spine_search' -            export SpineCGIform='spine_search' -            export SpineSQLdb='spine.search.db' -            export PROG_VER_GIT="`git describe --long --tags | sed -e 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g'`" -            export spineNixHelp="cat ./.env/nix-commands" -            export spineHtml="spine --very-verbose --html --html-link-search --html-link-curate --curate --sqlite-update --sqlite-db-filename=\"spine.search.db\" --cgi-sqlite-search-filename=\"spine_search\" --sqlite-db-path=\"\$SpineDBpath\" --output=\"\$SpineOUT\" $SpinePOD/*" -            export spineSqliteCreateDB="spine --very-verbose --sqlite-db-recreate --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\"" -            export spineSqlite="spine --very-verbose --sqlite-discrete --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\" --output=\"\$SpineOUT\" $SpinePOD/*" -            #export spineSqlite="spine --very-verbose --sqlite-update --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\" --output=\"\$SpineOUT\" $SpinePOD/*" +  description = "a sisu like document parser search form"; +  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # "github:nixos/nixpkgs"; "github:NixOS/nixpkgs/nixpkgs-unstable"; "nixpkgs/nixos-unstable"; "nixpkgs/nixos-21.11"; +  inputs.flake-utils.url = "github:numtide/flake-utils"; +  outputs = { +    self, +    nixpkgs, +    flake-utils, +  } @ inputs: let +    pname = "spine_search"; +    version = "0.12.0"; +    shell = ./shell.nix; # ./default.nix; +    devEnv = ./.envrc; # ./shell.nix; # ./default.nix; +    supportedSystems = ["x86_64-linux"]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; +    forAllSystems = nixpkgs.lib.genAttrs supportedSystems; +    nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;}); # nixpkgs instantiated for supported system types. +    checkPhase = '' +      runHook preCheck +      dub test --combined --skip-registry=all +      runHook postCheck +    ''; +    installPhase = '' +      runHook preInstall +      mkdir -p $out/share/cgi-bin +      install -m755 -D ./cgi-bin/spine_search $out/share/cgi-bin/spine_search +      runHook postInstall +    ''; +    postInstall = '' +      echo `ls -la $out/share/cgi-bin/spine_search` +    ''; +  in { +    packages = forAllSystems (system: let +      pkgs = nixpkgsFor.${system}; +    in +      with pkgs; { +        default = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          executable = true; +          src = self; +          inherit shell; +          inherit devEnv; +          buildInputs = [sqlite]; +          nativeBuildInputs = [dub ldc gnumake]; # [ dub dmd ]; [ dub ldc ]; [ dub gdc ]; +          buildPhase = '' +            runHook preBuild +            for DC_ in dmd ldmd2 ldc2 gdc gdmd; do +              echo "- check for D compiler $DC_" +              DC=$(type -P $DC_ || echo "") +              if [ ! "$DC" == "" ]; then break; fi +            done +            if [ "$DC" == "" ]; then exit "Error: could not find D compiler"; fi +            echo "$DC_ used as D compiler to build $pname" +            dub build --compiler=$DC --build=$DC_ --combined --skip-registry=all +            runHook postBuild            ''; -        in with pkgs; { -          devShell = mkShell { -            name               = "spine base dev shell"; -            inherit shell; -            inherit devEnv; -            #buildInputs        = [ sqlite ]; -            #nativeBuildInputs  = [ dub dmd ldc gdc gnumake ]; -            packages     = [ -              sqlite -              dub dmd ldc gnumake -            ]; -            inherit shellHook; -          }; -          devShell-sqlite = mkShell { -            name               = "spine dev shell for latex & pdf output"; -            inherit shell; -            inherit devEnv; -            packages = [ -              dub dmd ldc gnumake -              sqlite -            ]; -            inherit shellHook; -          }; -          default = import ./shell.nix { inherit pkgs; }; +          inherit checkPhase; +          inherit installPhase; +          inherit postInstall; +        }; +        spine-search-dmd = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          meta.mainProgram = "spine_search-dmd"; +          executable = true; +          src = self; +          inherit shell; +          inherit devEnv; +          buildInputs = [sqlite]; +          nativeBuildInputs = [dub dmd gnumake]; +          buildPhase = '' +            runHook preBuild +            dub build --compiler=$(type -P dmd) --build=dmd --combined --skip-registry=all +            runHook postBuild +          ''; +          inherit checkPhase; +          inherit installPhase; +          inherit postInstall; +        }; +        spine-search-ldc = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          meta.mainProgram = "spine_search-ldc"; +          executable = true; +          src = self; +          inherit shell; +          inherit devEnv; +          buildInputs = [sqlite]; +          nativeBuildInputs = [dub ldc gnumake]; +          buildPhase = '' +            runHook preBuild +            dub build --compiler=$(type -P ldc2) --build=ldc2 --combined --skip-registry=all +            runHook postBuild +          ''; +          inherit checkPhase; +          inherit installPhase; +          inherit postInstall; +        }; +        #spine-search-gdc = stdenv.mkDerivation { +        #  inherit pname; +        #  inherit version; +        #  meta.mainProgram   = "spine_search-gdc"; +        #  executable         = true; +        #  src                = self; +        #  inherit shell; +        #  inherit devEnv; +        #  buildInputs        = [ sqlite ]; +        #  nativeBuildInputs  = [ dub gdc gnumake ]; +        #  buildPhase = '' +        #    runHook preBuild +        #    dub build --compiler=$(type -P gdc) --build=gdc --combined --skip-registry=all +        #    runHook postBuild +        #  ''; +        #  inherit checkPhase; +        #  inherit installPhase; +        #  inherit postInstall; +        #}; +        #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; +      }); +    devShells = forAllSystems (system: let +      pkgs = nixpkgsFor.${system}; +      shellHook = '' +        export DFLAGS="-O2 -inline -boundscheck=on -color=on" +        export Date=`date "+%Y%m%d"` +        export SpineVER=$(git describe --long --tags | sed 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g') +        ### set local values in .envrc-local (or modify here if you must) +        # export SpinePROJ=~/grotto/repo/git.repo/projects/doc-reform/code/software/spine +        # export SpineDOC=~/grotto/repo/git.repo/projects/project-spine/doc-reform-markup/spine-markup-samples +        # export SpineOUT=/srv/www/spine +        export SpineDBpath=/var/www/sqlite +        # export SpineDBpath=/srv/www/spine/sqlite +        export SpineSRC=$SpinePROJ/src +        export SpineBIN=$SpinePROJ/result/bin +        export SpinePOD=$SpineDOC/markup/pod +        export SpineSearchActionLocal='http://localhost/spine_search' +        # export SpineSearchActionRemote='https://sisudoc.org/spine_search' +        export SpineCGIform='spine_search' +        export SpineSQLdb='spine.search.db' +        export PROG_VER_GIT="`git describe --long --tags | sed -e 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g'`" +        export spineNixHelp="cat ./.env/nix-commands" +        export spineHtml="spine --very-verbose --html --html-link-search --html-link-curate --curate --sqlite-update --sqlite-db-filename=\"spine.search.db\" --cgi-sqlite-search-filename=\"spine_search\" --sqlite-db-path=\"\$SpineDBpath\" --output=\"\$SpineOUT\" $SpinePOD/*" +        export spineSqliteCreateDB="spine --very-verbose --sqlite-db-recreate --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\"" +        export spineSqlite="spine --very-verbose --sqlite-discrete --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\" --output=\"\$SpineOUT\" $SpinePOD/*" +        #export spineSqlite="spine --very-verbose --sqlite-update --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\" --output=\"\$SpineOUT\" $SpinePOD/*" +      ''; +    in +      with pkgs; { +        devShell = mkShell { +          name = "spine base dev shell"; +          inherit shell; +          inherit devEnv; +          #buildInputs        = [ sqlite ]; +          #nativeBuildInputs  = [ dub dmd ldc gdc gnumake ]; +          packages = [ +            sqlite +            dub +            dmd +            ldc +            gnumake +          ]; +          inherit shellHook; +        }; +        devShell-sqlite = mkShell { +          name = "spine dev shell for latex & pdf output"; +          inherit shell; +          inherit devEnv; +          packages = [ +            dub +            dmd +            ldc +            gnumake +            sqlite +          ]; +          inherit shellHook; +        }; +        default = import ./shell.nix {inherit pkgs;};        });    };  } diff --git a/org/config_nix.org b/org/config_nix.org index ab9f081..fe72d99 100644 --- a/org/config_nix.org +++ b/org/config_nix.org @@ -161,171 +161,181 @@ postInstall:  #+HEADER: :noweb yes  #+BEGIN_SRC nix  { -  description                  = "a sisu like document parser search form"; -  inputs.nixpkgs.url           = "github:NixOS/nixpkgs/nixpkgs-unstable"; # "github:nixos/nixpkgs"; "github:NixOS/nixpkgs/nixpkgs-unstable"; "nixpkgs/nixos-unstable"; "nixpkgs/nixos-21.11"; -  inputs.flake-utils.url       = "github:numtide/flake-utils"; -  outputs = { self, nixpkgs, flake-utils } @inputs: -    let -      pname                    = "spine_search"; -      version                  = "<<spine_version_set>>"; -      shell                    = ./shell.nix; # ./default.nix; -      devEnv                   = ./.envrc; # ./shell.nix; # ./default.nix; -      supportedSystems         = [ "x86_64-linux" ]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; -      forAllSystems            = nixpkgs.lib.genAttrs supportedSystems; -      nixpkgsFor               = forAllSystems (system: import nixpkgs { inherit system;  }); # nixpkgs instantiated for supported system types. -      checkPhase = '' -        runHook preCheck -        dub test --combined --skip-registry=all -        runHook postCheck -      ''; -      installPhase = '' -        runHook preInstall -        mkdir -p $out/share/cgi-bin -        install -m755 -D ./cgi-bin/spine_search $out/share/cgi-bin/spine_search -        runHook postInstall -      ''; -      postInstall = '' -        echo `ls -la $out/share/cgi-bin/spine_search` -      ''; -    in { -      packages = forAllSystems (system: -        let pkgs               = nixpkgsFor.${system}; -        in with pkgs; { -          default = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            executable         = true; -            src                = self; -            inherit shell; -            inherit devEnv; -            buildInputs        = [ sqlite ]; -            nativeBuildInputs  = [ dub ldc gnumake ]; # [ dub dmd ]; [ dub ldc ]; [ dub gdc ]; -            buildPhase = '' -              runHook preBuild -              for DC_ in dmd ldmd2 ldc2 gdc gdmd; do -                echo "- check for D compiler $DC_" -                DC=$(type -P $DC_ || echo "") -                if [ ! "$DC" == "" ]; then break; fi -              done -              if [ "$DC" == "" ]; then exit "Error: could not find D compiler"; fi -              echo "$DC_ used as D compiler to build $pname" -              dub build --compiler=$DC --build=$DC_ --combined --skip-registry=all -              runHook postBuild -            ''; -            inherit checkPhase; -            inherit installPhase; -            inherit postInstall; -          }; -          spine-search-dmd = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            meta.mainProgram   = "spine_search-dmd"; -            executable         = true; -            src                = self; -            inherit shell; -            inherit devEnv; -            buildInputs        = [ sqlite ]; -            nativeBuildInputs  = [ dub dmd gnumake ]; -            buildPhase = '' -              runHook preBuild -              dub build --compiler=$(type -P dmd) --build=dmd --combined --skip-registry=all -              runHook postBuild -            ''; -            inherit checkPhase; -            inherit installPhase; -            inherit postInstall; -          }; -          spine-search-ldc = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            meta.mainProgram   = "spine_search-ldc"; -            executable         = true; -            src                = self; -            inherit shell; -            inherit devEnv; -            buildInputs        = [ sqlite ]; -            nativeBuildInputs  = [ dub ldc gnumake ]; -            buildPhase = '' -              runHook preBuild -              dub build --compiler=$(type -P ldc2) --build=ldc2 --combined --skip-registry=all -              runHook postBuild -            ''; -            inherit checkPhase; -            inherit installPhase; -            inherit postInstall; -          }; -          #spine-search-gdc = stdenv.mkDerivation { -          #  inherit pname; -          #  inherit version; -          #  meta.mainProgram   = "spine_search-gdc"; -          #  executable         = true; -          #  src                = self; -          #  inherit shell; -          #  inherit devEnv; -          #  buildInputs        = [ sqlite ]; -          #  nativeBuildInputs  = [ dub gdc gnumake ]; -          #  buildPhase = '' -          #    runHook preBuild -          #    dub build --compiler=$(type -P gdc) --build=gdc --combined --skip-registry=all -          #    runHook postBuild -          #  ''; -          #  inherit checkPhase; -          #  inherit installPhase; -          #  inherit postInstall; -          #}; -          #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; -      }); -      devShells = forAllSystems (system: -        let -          pkgs = nixpkgsFor.${system}; -          shellHook = '' -            export DFLAGS="-O2 -inline -boundscheck=on -color=on" -            export Date=`date "+%Y%m%d"` -            export SpineVER=$(git describe --long --tags | sed 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g') -            ### set local values in .envrc-local (or modify here if you must) -            # export SpinePROJ=~/grotto/repo/git.repo/projects/doc-reform/code/software/spine -            # export SpineDOC=~/grotto/repo/git.repo/projects/project-spine/doc-reform-markup/spine-markup-samples -            # export SpineOUT=/srv/www/spine -            export SpineDBpath=/var/www/sqlite -            # export SpineDBpath=/srv/www/spine/sqlite -            export SpineSRC=$SpinePROJ/src -            export SpineBIN=$SpinePROJ/result/bin -            export SpinePOD=$SpineDOC/markup/pod -            export SpineSearchActionLocal='http://localhost/spine_search' -            # export SpineSearchActionRemote='https://sisudoc.org/spine_search' -            export SpineCGIform='spine_search' -            export SpineSQLdb='spine.search.db' -            export PROG_VER_GIT="`git describe --long --tags | sed -e 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g'`" -            export spineNixHelp="cat ./.env/nix-commands" -            export spineHtml="spine --very-verbose --html --html-link-search --html-link-curate --curate --sqlite-update --sqlite-db-filename=\"spine.search.db\" --cgi-sqlite-search-filename=\"spine_search\" --sqlite-db-path=\"\$SpineDBpath\" --output=\"\$SpineOUT\" $SpinePOD/*" -            export spineSqliteCreateDB="spine --very-verbose --sqlite-db-recreate --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\"" -            export spineSqlite="spine --very-verbose --sqlite-discrete --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\" --output=\"\$SpineOUT\" $SpinePOD/*" -            #export spineSqlite="spine --very-verbose --sqlite-update --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\" --output=\"\$SpineOUT\" $SpinePOD/*" +  description = "a sisu like document parser search form"; +  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # "github:nixos/nixpkgs"; "github:NixOS/nixpkgs/nixpkgs-unstable"; "nixpkgs/nixos-unstable"; "nixpkgs/nixos-21.11"; +  inputs.flake-utils.url = "github:numtide/flake-utils"; +  outputs = { +    self, +    nixpkgs, +    flake-utils, +  } @ inputs: let +    pname = "spine_search"; +    version = "0.12.0"; +    shell = ./shell.nix; # ./default.nix; +    devEnv = ./.envrc; # ./shell.nix; # ./default.nix; +    supportedSystems = ["x86_64-linux"]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; +    forAllSystems = nixpkgs.lib.genAttrs supportedSystems; +    nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;}); # nixpkgs instantiated for supported system types. +    checkPhase = '' +      runHook preCheck +      dub test --combined --skip-registry=all +      runHook postCheck +    ''; +    installPhase = '' +      runHook preInstall +      mkdir -p $out/share/cgi-bin +      install -m755 -D ./cgi-bin/spine_search $out/share/cgi-bin/spine_search +      runHook postInstall +    ''; +    postInstall = '' +      echo `ls -la $out/share/cgi-bin/spine_search` +    ''; +  in { +    packages = forAllSystems (system: let +      pkgs = nixpkgsFor.${system}; +    in +      with pkgs; { +        default = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          executable = true; +          src = self; +          inherit shell; +          inherit devEnv; +          buildInputs = [sqlite]; +          nativeBuildInputs = [dub ldc gnumake]; # [ dub dmd ]; [ dub ldc ]; [ dub gdc ]; +          buildPhase = '' +            runHook preBuild +            for DC_ in dmd ldmd2 ldc2 gdc gdmd; do +              echo "- check for D compiler $DC_" +              DC=$(type -P $DC_ || echo "") +              if [ ! "$DC" == "" ]; then break; fi +            done +            if [ "$DC" == "" ]; then exit "Error: could not find D compiler"; fi +            echo "$DC_ used as D compiler to build $pname" +            dub build --compiler=$DC --build=$DC_ --combined --skip-registry=all +            runHook postBuild +          ''; +          inherit checkPhase; +          inherit installPhase; +          inherit postInstall; +        }; +        spine-search-dmd = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          meta.mainProgram = "spine_search-dmd"; +          executable = true; +          src = self; +          inherit shell; +          inherit devEnv; +          buildInputs = [sqlite]; +          nativeBuildInputs = [dub dmd gnumake]; +          buildPhase = '' +            runHook preBuild +            dub build --compiler=$(type -P dmd) --build=dmd --combined --skip-registry=all +            runHook postBuild +          ''; +          inherit checkPhase; +          inherit installPhase; +          inherit postInstall; +        }; +        spine-search-ldc = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          meta.mainProgram = "spine_search-ldc"; +          executable = true; +          src = self; +          inherit shell; +          inherit devEnv; +          buildInputs = [sqlite]; +          nativeBuildInputs = [dub ldc gnumake]; +          buildPhase = '' +            runHook preBuild +            dub build --compiler=$(type -P ldc2) --build=ldc2 --combined --skip-registry=all +            runHook postBuild            ''; -        in with pkgs; { -          devShell = mkShell { -            name               = "spine base dev shell"; -            inherit shell; -            inherit devEnv; -            #buildInputs        = [ sqlite ]; -            #nativeBuildInputs  = [ dub dmd ldc gdc gnumake ]; -            packages     = [ -              sqlite -              dub dmd ldc gnumake -            ]; -            inherit shellHook; -          }; -          devShell-sqlite = mkShell { -            name               = "spine dev shell for latex & pdf output"; -            inherit shell; -            inherit devEnv; -            packages = [ -              dub dmd ldc gnumake -              sqlite -            ]; -            inherit shellHook; -          }; -          default = import ./shell.nix { inherit pkgs; }; +          inherit checkPhase; +          inherit installPhase; +          inherit postInstall; +        }; +        #spine-search-gdc = stdenv.mkDerivation { +        #  inherit pname; +        #  inherit version; +        #  meta.mainProgram   = "spine_search-gdc"; +        #  executable         = true; +        #  src                = self; +        #  inherit shell; +        #  inherit devEnv; +        #  buildInputs        = [ sqlite ]; +        #  nativeBuildInputs  = [ dub gdc gnumake ]; +        #  buildPhase = '' +        #    runHook preBuild +        #    dub build --compiler=$(type -P gdc) --build=gdc --combined --skip-registry=all +        #    runHook postBuild +        #  ''; +        #  inherit checkPhase; +        #  inherit installPhase; +        #  inherit postInstall; +        #}; +        #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; +      }); +    devShells = forAllSystems (system: let +      pkgs = nixpkgsFor.${system}; +      shellHook = '' +        export DFLAGS="-O2 -inline -boundscheck=on -color=on" +        export Date=`date "+%Y%m%d"` +        export SpineVER=$(git describe --long --tags | sed 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g') +        ### set local values in .envrc-local (or modify here if you must) +        # export SpinePROJ=~/grotto/repo/git.repo/projects/doc-reform/code/software/spine +        # export SpineDOC=~/grotto/repo/git.repo/projects/project-spine/doc-reform-markup/spine-markup-samples +        # export SpineOUT=/srv/www/spine +        export SpineDBpath=/var/www/sqlite +        # export SpineDBpath=/srv/www/spine/sqlite +        export SpineSRC=$SpinePROJ/src +        export SpineBIN=$SpinePROJ/result/bin +        export SpinePOD=$SpineDOC/markup/pod +        export SpineSearchActionLocal='http://localhost/spine_search' +        # export SpineSearchActionRemote='https://sisudoc.org/spine_search' +        export SpineCGIform='spine_search' +        export SpineSQLdb='spine.search.db' +        export PROG_VER_GIT="`git describe --long --tags | sed -e 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g'`" +        export spineNixHelp="cat ./.env/nix-commands" +        export spineHtml="spine --very-verbose --html --html-link-search --html-link-curate --curate --sqlite-update --sqlite-db-filename=\"spine.search.db\" --cgi-sqlite-search-filename=\"spine_search\" --sqlite-db-path=\"\$SpineDBpath\" --output=\"\$SpineOUT\" $SpinePOD/*" +        export spineSqliteCreateDB="spine --very-verbose --sqlite-db-recreate --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\"" +        export spineSqlite="spine --very-verbose --sqlite-discrete --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\" --output=\"\$SpineOUT\" $SpinePOD/*" +        #export spineSqlite="spine --very-verbose --sqlite-update --sqlite-db-path=\"$SpineDBpath\" --sqlite-db-filename=\"spine.search.db\" --output=\"\$SpineOUT\" $SpinePOD/*" +      ''; +    in +      with pkgs; { +        devShell = mkShell { +          name = "spine base dev shell"; +          inherit shell; +          inherit devEnv; +          #buildInputs        = [ sqlite ]; +          #nativeBuildInputs  = [ dub dmd ldc gdc gnumake ]; +          packages = [ +            sqlite +            dub +            dmd +            ldc +            gnumake +          ]; +          inherit shellHook; +        }; +        devShell-sqlite = mkShell { +          name = "spine dev shell for latex & pdf output"; +          inherit shell; +          inherit devEnv; +          packages = [ +            dub +            dmd +            ldc +            gnumake +            sqlite +          ]; +          inherit shellHook; +        }; +        default = import ./shell.nix {inherit pkgs;};        });    };  } @@ -486,61 +496,62 @@ postInstall = ''  #+HEADER: :shebang "#!/usr/bin/env -S nix-shell --pure\n#!nix-shell -i bash"  #+HEADER: :noweb yes  #+BEGIN_SRC nix -{ pkgs ? import <nixpkgs> {} }: +{pkgs ? import <nixpkgs> {}}:  with pkgs; -mkShell { -  buildInputs = [ -    # ❯❯❯ nix_related -    #nix -    direnv -    #cachix -    nixVersions.unstable #nixFlakes -    nix-prefetch-git -    validatePkgConfig -    nix-output-monitor -    nix-tree -    jq -    git -    gnumake -    ps -    # ❯❯❯ d_build_related -    # ❯❯ package manager -    dub -    # ❯❯ compiler -    ldc -    rund -    # ❯❯ linker -    #lld -    #mold -    # ❯❯ builder -    #ninja -    #meson -    # ❯❯❯ sqlite search related -    sqlite -    # ❯❯❯ tools -    #aria #wget #curl -  ]; -  shellHook = '' -    nix flake update -    nix flake check -    nix flake show -    echo ' -      shell.nix echo ❯❯ +  mkShell { +    buildInputs = [ +      # ❯❯❯ nix_related +      #nix +      direnv +      #cachix +      nixVersions.unstable #nixFlakes +      nix-prefetch-git +      validatePkgConfig +      nix-output-monitor +      nix-tree +      jq +      alejandra +      git +      gnumake +      ps +      # ❯❯❯ d_build_related +      # ❯❯ package manager +      dub +      # ❯❯ compiler +      ldc +      rund +      # ❯❯ linker +      #lld +      #mold +      # ❯❯ builder +      #ninja +      #meson +      # ❯❯❯ sqlite search related +      sqlite +      # ❯❯❯ tools +      #aria #wget #curl +    ]; +    shellHook = '' +      nix flake update +      nix flake check +      nix flake show +      echo ' +        shell.nix echo ❯❯ -      ❯❯ nix flake update && nix flake check --show-trace && nix flake show && nix develop ".#devShell" -c zsh +        ❯❯ nix flake update && nix flake check --show-trace && nix flake show && nix develop ".#devShell" -c zsh -      ❯❯ nix develop -      ❯❯ nix develop -c zsh +        ❯❯ nix develop +        ❯❯ nix develop -c zsh -      ❯❯ nix build -      ❯❯ nix build ".#default" --print-build-logs -      ❯❯ nix build ".#spine-search-dmd" --print-build-logs |& nom -      ❯❯ nix build ".#spine-search-ldc" --print-build-logs |& nom +        ❯❯ nix build +        ❯❯ nix build ".#default" --print-build-logs +        ❯❯ nix build ".#spine-search-dmd" --print-build-logs |& nom +        ❯❯ nix build ".#spine-search-ldc" --print-build-logs |& nom -      ❯❯ dub build --compiler=ldmd --build=release --combined --skip-registry=all -    ' -  ''; -} +        ❯❯ dub build --compiler=ldmd --build=release --combined --skip-registry=all +      ' +    ''; +  }  #+END_SRC  echo "ldc `${pkgs.ldc}/bin/ldc2 -v`" @@ -696,7 +707,7 @@ nix develop --build -f derivation.nix -I .envrc --print-build-logs  #+HEADER: :tangle-mode (identity #o755)  #+HEADER: :shebang "#!/usr/bin/env -S nix-build"  #+BEGIN_SRC nix -{ pkgs ? import <nixpkgs> {} }: +{pkgs ? import <nixpkgs> {}}:  pkgs.callPackage ./devenv.nix {}  #+END_SRC @@ -712,48 +723,52 @@ pkgs.callPackage ./derivation.nix {}  #+HEADER: :tangle ../devenv.nix  #+HEADER: :tangle-mode (identity #o644)  #+BEGIN_SRC nix -{ pkgs ? import <nixpkgs> { }, name ? "user-env" }: +{ +  pkgs ? import <nixpkgs> {}, +  name ? "user-env", +}:  with pkgs; -buildEnv { -  inherit name; -  extraOutputsToInstall = [ "out" "man" "lib" ]; # to get all needed symlinks -  paths = [ -    # ❯❯❯ nix_related -    #nix # if not on NixOS, this is needed -    direnv -    #cachix -    nixVersions.unstable #nixFlakes -    nix-prefetch-git -    validatePkgConfig -    nix-output-monitor -    nix-tree -    jq -    git -    gnumake -    ps -    # ❯❯❯ d_build_related -    # ❯❯ package manager -    dub -    # ❯❯ compiler -    dmd -    ldc -    # ❯❯❯ sqlite search related -    sqlite -    # this will create a script that will rebuild and upgrade your setup; using shell script syntax -    (writeScriptBin "nix-rebuild" '' -      #!${stdenv.shell} -      cd <path-to-flake> || exit 1 -      nix flake update -      nix profile upgrade '.*' -    '') -    # puts in your root the nixpkgs version -    (writeTextFile { -      name = "nixpkgs-version"; -      destination = "/nixpkgs-version"; -      text = lib.version; -    }) -  ]; -} +  buildEnv { +    inherit name; +    extraOutputsToInstall = ["out" "man" "lib"]; # to get all needed symlinks +    paths = [ +      # ❯❯❯ nix_related +      #nix # if not on NixOS, this is needed +      direnv +      #cachix +      nixVersions.unstable #nixFlakes +      nix-prefetch-git +      validatePkgConfig +      nix-output-monitor +      nix-tree +      jq +      alejandra +      git +      gnumake +      ps +      # ❯❯❯ d_build_related +      # ❯❯ package manager +      dub +      # ❯❯ compiler +      dmd +      ldc +      # ❯❯❯ sqlite search related +      sqlite +      # this will create a script that will rebuild and upgrade your setup; using shell script syntax +      (writeScriptBin "nix-rebuild" '' +        #!${stdenv.shell} +        #cd <path-to-flake> || exit 1 +        nix flake update +        nix profile upgrade '.*' +      '') +      # puts in your root the nixpkgs version +      (writeTextFile { +        name = "nixpkgs-version"; +        destination = "/nixpkgs-version"; +        text = lib.version; +      }) +    ]; +  }  #+END_SRC  *** derivation.nix :default: @@ -762,125 +777,136 @@ buildEnv {  #+HEADER: :tangle-mode (identity #o644)  #+HEADER: :noweb yes  #+BEGIN_SRC nix -{ pkgs ? import <nixpkgs> {}, +{ +  pkgs ? import <nixpkgs> {},    stdenv ? pkgs.stdenv,    lib ? pkgs.lib,    ldc ? null,    dcompiler ? pkgs.ldc, -  dub ? pkgs.dub +  dub ? pkgs.dub,  }:  assert dcompiler != null;  with ( -  with lib; -  let -    filterDub = name: type: let baseName = baseNameOf (toString name); in ! ( # filter function to remove the .dub package folder from src -      type == "directory" && baseName == ".dub" -    ); +  with lib; let +    filterDub = name: type: let +      baseName = baseNameOf (toString name); +    in +      ! ( # filter function to remove the .dub package folder from src +        type == "directory" && baseName == ".dub" +      );      targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";      # remove reference to build tools and library sources -    disallowedReferences = deps: [ dcompiler dub ]; +    disallowedReferences = deps: [dcompiler dub];      removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';    in {      mkDubDerivation = lib.makeOverridable ({ -      src, -      nativeBuildInputs ? [], -      dubJSON ? src + "/dub.json", -      passthru ? {}, -      package ? lib.importJSON dubJSON, -      ... -    } @ attrs: stdenv.mkDerivation (attrs // { -      pname = package.name; -      nativeBuildInputs = [ dcompiler dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; -      disallowedReferences = disallowedReferences deps; -      passthru = passthru // { -        inherit dub dcompiler pkgs; -      }; -      src = lib.cleanSourceWith { -        filter = filterDub; -        src = lib.cleanSource src; -      }; -      preFixup = '' -        find $out/share/cgi-bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true -      ''; -      buildPhase = '' -        runHook preBuild -        HOME="$PWD" -        DFLAGS="-O2 -inline" -        for DC_ in dmd ldmd2 gdmd; do -          echo "- check for D compiler $DC_" -          DC=$(type -P $DC_ || echo "") -          if [ ! "$DC" == "" ]; then -            break -          fi -        done -        if [ "$DC" == "" ]; then -          exit "Error: could not find D compiler" -        fi -        echo "$DC_ used as D compiler to build $pname" -        dub build --compiler=$DC --build=release --combined --skip-registry=all -        runHook postBuild -      ''; -      checkPhase = '' -        runHook preCheck -        HOME="$PWD" -        dub test --combined --skip-registry=all -        runHook postCheck -      ''; -      installPhase = '' -        runHook preInstall -        mkdir -p $out/share/cgi-bin -        cp -r "${targetOf package}" $out/share/cgi-bin -        install -m755 -D $out/share/cgi-bin/spine_search spine_search -        runHook postInstall -      ''; -      postInstall = '' -        echo "HERE ${targetOf package} $out/share/cgi-bin" -        echo `ls -la $out/share/cgi-bin/spine_search` -      ''; -      meta = lib.optionalAttrs (package ? description) { -        description = package.description; -      } // attrs.meta or {}; -    } // lib.optionalAttrs (!(attrs ? version)) { -      name = package.name; # use name from dub.json, unless pname and version are specified -    })); +        src, +        nativeBuildInputs ? [], +        dubJSON ? src + "/dub.json", +        passthru ? {}, +        package ? lib.importJSON dubJSON, +        ... +      } @ attrs: +        stdenv.mkDerivation (attrs +          // { +            pname = package.name; +            nativeBuildInputs = [dcompiler dub pkgs.removeReferencesTo] ++ nativeBuildInputs; +            disallowedReferences = disallowedReferences deps; +            passthru = +              passthru +              // { +                inherit dub dcompiler pkgs; +              }; +            src = lib.cleanSourceWith { +              filter = filterDub; +              src = lib.cleanSource src; +            }; +            preFixup = '' +              find $out/share/cgi-bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true +            ''; +            buildPhase = '' +              runHook preBuild +              HOME="$PWD" +              DFLAGS="-O2 -inline" +              for DC_ in dmd ldmd2 gdmd; do +                echo "- check for D compiler $DC_" +                DC=$(type -P $DC_ || echo "") +                if [ ! "$DC" == "" ]; then +                  break +                fi +              done +              if [ "$DC" == "" ]; then +                exit "Error: could not find D compiler" +              fi +              echo "$DC_ used as D compiler to build $pname" +              dub build --compiler=$DC --build=release --combined --skip-registry=all +              runHook postBuild +            ''; +            checkPhase = '' +              runHook preCheck +              HOME="$PWD" +              dub test --combined --skip-registry=all +              runHook postCheck +            ''; +            installPhase = '' +              runHook preInstall +              mkdir -p $out/share/cgi-bin +              cp -r "${targetOf package}" $out/share/cgi-bin +              install -m755 -D $out/share/cgi-bin/spine_search spine_search +              runHook postInstall +            ''; +            postInstall = '' +              echo "HERE ${targetOf package} $out/share/cgi-bin" +              echo `ls -la $out/share/cgi-bin/spine_search` +            ''; +            meta = +              lib.optionalAttrs (package ? description) { +                description = package.description; +              } +              // attrs.meta or {}; +          } +          // lib.optionalAttrs (!(attrs ? version)) { +            name = package.name; # use name from dub.json, unless pname and version are specified +          }));    }  ); -mkDubDerivation rec { -  name          = "spine-search-${version}"; -  #version       = "<<spine_version_set>>"; -  src           = ./.; -  buildInputs = [ -    pkgs.sqlite ( -      with pkgs; [ -        nixVersions.unstable #nixFlakes -        ## package manager -        dub -        ## compiler -        ldc -        rund -        ## linker -        #lld -        #mold -        ## builder -        #ninja -        sqlite -      ] -    ) -  ]; -  meta = with pkgs.lib; { -    pname       = "spine-search"; -    version     = "<<spine_version_set>>"; -    homepage    = "https://sisudoc.org"; -    description = "cgi sqlite search form for document object search"; -    longDescription = '' -      a sisu like parser & document generator -    ''; -    homepage    = "https://sisudoc.org"; -    license     = licenses.agpl3Plus; -    platforms   = platforms.linux; -    maintainers = [ "RalphAmissah" ]; -  }; -} +  mkDubDerivation rec { +    name = "spine-search-${version}"; +    #version       = "0.12.0"; +    src = ./.; +    buildInputs = [ +      pkgs.sqlite +      ( +        with pkgs; [ +          nixVersions.unstable #nixFlakes +          ## package manager +          dub +          ## compiler +          ldc +          rund +          ## linker +          #lld +          #mold +          ## builder +          #ninja +          sqlite +        ] +      ) +    ]; +    meta = with pkgs.lib; { +      pname = "spine-search"; +      version = "0.12.0"; +      homepage = "https://sisudoc.org"; +      description = "cgi sqlite search form for document object search"; +      longDescription = '' +        a sisu like parser & document generator +      ''; +      homepage = "https://sisudoc.org"; +      license = licenses.agpl3Plus; +      platforms = platforms.linux; +      maintainers = ["RalphAmissah"]; +    }; +  }  #+END_SRC  - unused @@ -1,57 +1,58 @@  #!/usr/bin/env -S nix-shell --pure  #!nix-shell -i bash -{ pkgs ? import <nixpkgs> {} }: +{pkgs ? import <nixpkgs> {}}:  with pkgs; -mkShell { -  buildInputs = [ -    # ❯❯❯ nix_related -    #nix -    direnv -    #cachix -    nixVersions.unstable #nixFlakes -    nix-prefetch-git -    validatePkgConfig -    nix-output-monitor -    nix-tree -    jq -    git -    gnumake -    ps -    # ❯❯❯ d_build_related -    # ❯❯ package manager -    dub -    # ❯❯ compiler -    ldc -    rund -    # ❯❯ linker -    #lld -    #mold -    # ❯❯ builder -    #ninja -    #meson -    # ❯❯❯ sqlite search related -    sqlite -    # ❯❯❯ tools -    #aria #wget #curl -  ]; -  shellHook = '' -    nix flake update -    nix flake check -    nix flake show -    echo ' -      shell.nix echo ❯❯ +  mkShell { +    buildInputs = [ +      # ❯❯❯ nix_related +      #nix +      direnv +      #cachix +      nixVersions.unstable #nixFlakes +      nix-prefetch-git +      validatePkgConfig +      nix-output-monitor +      nix-tree +      jq +      alejandra +      git +      gnumake +      ps +      # ❯❯❯ d_build_related +      # ❯❯ package manager +      dub +      # ❯❯ compiler +      ldc +      rund +      # ❯❯ linker +      #lld +      #mold +      # ❯❯ builder +      #ninja +      #meson +      # ❯❯❯ sqlite search related +      sqlite +      # ❯❯❯ tools +      #aria #wget #curl +    ]; +    shellHook = '' +      nix flake update +      nix flake check +      nix flake show +      echo ' +        shell.nix echo ❯❯ -      ❯❯ nix flake update && nix flake check --show-trace && nix flake show && nix develop ".#devShell" -c zsh +        ❯❯ nix flake update && nix flake check --show-trace && nix flake show && nix develop ".#devShell" -c zsh -      ❯❯ nix develop -      ❯❯ nix develop -c zsh +        ❯❯ nix develop +        ❯❯ nix develop -c zsh -      ❯❯ nix build -      ❯❯ nix build ".#default" --print-build-logs -      ❯❯ nix build ".#spine-search-dmd" --print-build-logs |& nom -      ❯❯ nix build ".#spine-search-ldc" --print-build-logs |& nom +        ❯❯ nix build +        ❯❯ nix build ".#default" --print-build-logs +        ❯❯ nix build ".#spine-search-dmd" --print-build-logs |& nom +        ❯❯ nix build ".#spine-search-ldc" --print-build-logs |& nom -      ❯❯ dub build --compiler=ldmd --build=release --combined --skip-registry=all -    ' -  ''; -} +        ❯❯ dub build --compiler=ldmd --build=release --combined --skip-registry=all +      ' +    ''; +  }  | 
