diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2023-04-10 14:30:43 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2023-04-10 14:30:43 -0400 | 
| commit | d79a579eae032fdddc8040308a037c409e7c5989 (patch) | |
| tree | a3b817d65205ae1e7799a2a5642f1da34fc1db85 | |
| parent | org & nix flake, mod for local dev (D related) (diff) | |
nix run alejandra formatter, decided to go with it
| -rwxr-xr-x | default.nix | 2 | ||||
| -rw-r--r-- | derivation.nix | 172 | ||||
| -rw-r--r-- | devenv.nix | 85 | ||||
| -rw-r--r-- | flake.lock | 30 | ||||
| -rw-r--r-- | flake.nix | 494 | ||||
| -rw-r--r-- | org/config_nix.org | 907 | ||||
| -rwxr-xr-x | shell.nix | 131 | 
7 files changed, 958 insertions, 863 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 e7f5232..dee2286 100644 --- a/derivation.nix +++ b/derivation.nix @@ -1,95 +1,105 @@ -{ 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/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/bin -        cp -r "${targetOf package}" $out/bin -        runHook postInstall -      ''; -      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/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/bin +              cp -r "${targetOf package}" $out/bin +              runHook postInstall +            ''; +            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 { -  pname         = "spine"; -  version       = "0.12.0"; -  src           = ./.; -  nativeBuildInputs = with pkgs; [ dub ldc ]; -  buildInputs = with pkgs; [ nixVersions.unstable sqlite ]; -  meta = with pkgs.lib; { -    description = "A sisu like parser & document generator"; -    longDescription = '' -      a sisu like parser & document generator -    ''; -    homepage    = "https://sisudoc.org"; -    license     = licenses.agpl3Plus; -    platforms   = platforms.linux; -    maintainers = [ "RalphAmissah" ]; -  }; -} +  mkDubDerivation rec { +    pname = "spine"; +    version = "0.12.0"; +    src = ./.; +    nativeBuildInputs = with pkgs; [dub ldc]; +    buildInputs = with pkgs; [nixVersions.unstable sqlite]; +    meta = with pkgs.lib; { +      description = "A sisu like parser & document generator"; +      longDescription = '' +        a sisu like parser & document generator +      ''; +      homepage = "https://sisudoc.org"; +      license = licenses.agpl3Plus; +      platforms = platforms.linux; +      maintainers = ["RalphAmissah"]; +    }; +  } @@ -1,42 +1,45 @@ -{ 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 +      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,12 +1,15 @@  {    "nodes": {      "flake-utils": { +      "inputs": { +        "systems": "systems" +      },        "locked": { -        "lastModified": 1678901627, -        "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", +        "lastModified": 1681037374, +        "narHash": "sha256-XL6X3VGbEFJZDUouv2xpKg2Aljzu/etPLv5e1FPt1q0=",          "owner": "numtide",          "repo": "flake-utils", -        "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", +        "rev": "033b9f258ca96a10e543d4442071f614dc3f8412",          "type": "github"        },        "original": { @@ -17,11 +20,11 @@      },      "nixpkgs": {        "locked": { -        "lastModified": 1678875422, -        "narHash": "sha256-T3o6NcQPwXjxJMn2shz86Chch4ljXgZn746c2caGxd8=", +        "lastModified": 1681092589, +        "narHash": "sha256-I11GYL+6yD6dX89H0WaMiptE52NZ2Tmx+rA23TUyfH8=",          "owner": "NixOS",          "repo": "nixpkgs", -        "rev": "126f49a01de5b7e35a43fd43f891ecf6d3a51459", +        "rev": "83ca2cd74539fb8e79d46e233f6bb1d978c36f32",          "type": "github"        },        "original": { @@ -36,6 +39,21 @@          "flake-utils": "flake-utils",          "nixpkgs": "nixpkgs"        } +    }, +    "systems": { +      "locked": { +        "lastModified": 1681028828, +        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", +        "owner": "nix-systems", +        "repo": "default", +        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", +        "type": "github" +      }, +      "original": { +        "owner": "nix-systems", +        "repo": "default", +        "type": "github" +      }      }    },    "root": "root", @@ -1,242 +1,264 @@  { -  description                  = "a sisu like parser & document generator"; -  inputs.nixpkgs.url           = "github:NixOS/nixpkgs/nixpkgs-unstable"; -  inputs.flake-utils.url       = "github:numtide/flake-utils"; -  outputs = { self, nixpkgs, flake-utils } @inputs: -    let -      pname                    = "spine"; -      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/bin -        install -m755 ./bin/spine $out/bin/spine -        runHook postInstall -      ''; -      postInstall = '' -        echo `ls -la $out/bin/spine` -        $out/bin/spine -v -      ''; -    in { -      packages = forAllSystems (system: -        let pkgs               = nixpkgsFor.${system}; -        in with pkgs; { -          default = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            meta.mainProgram   = "spine"; -            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-dmd = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            meta.mainProgram   = "spine-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-ldc = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            meta.mainProgram   = "spine-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-gdc = stdenv.mkDerivation { -          #  inherit pname; -          #  inherit version; -          #  meta.mainProgram   = "spine-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="; -      }); -      apps = forAllSystems (system: { -        default = { -          type                 = "app"; -          program              = "${self.packages.${system}.default}/bin/spine"; +  description = "a sisu like parser & document generator"; +  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; +  inputs.flake-utils.url = "github:numtide/flake-utils"; +  outputs = { +    self, +    nixpkgs, +    flake-utils, +  } @ inputs: let +    pname = "spine"; +    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/bin +      install -m755 ./bin/spine $out/bin/spine +      runHook postInstall +    ''; +    postInstall = '' +      echo `ls -la $out/bin/spine` +      $out/bin/spine -v +    ''; +  in { +    packages = forAllSystems (system: let +      pkgs = nixpkgsFor.${system}; +    in +      with pkgs; { +        default = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          meta.mainProgram = "spine"; +          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;          }; -      }); -      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 SpineOUTversioned=$SpineOUT/$SpineVER -            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 PROG_VER_DECLARED="`cat ./views/version.txt | grep --color=never "enum" | sed 's/.\+(\([0-9]\+\),[ \t]\+\([0-9]\+\),[ \t]\+\([0-9]\+\)[ \t]*).\+/\1.\2.\3/g'`" -            export spineNixHelp="cat ./.env/nix-commands" -            export spineTest="nix shell .#default --print-build-logs --command spine --very-verbose --epub --html --html-link-search --html-link-curate --curate --output=\"\$SpineOUT\" $SpinePOD/*" -            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 spineEpub="spine --very-verbose --epub --output=\"\$SpineOUT\" $SpinePOD/*" -            export spineLatex="spine --very-verbose --latex --output=\"\$SpineOUT\" $SpinePOD/*" -            export spinePdf="spine --very-verbose --pdf --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/*" +        spine-dmd = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          meta.mainProgram = "spine-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-ldc = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          meta.mainProgram = "spine-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-epub = mkShell { -            name               = "spine dev shell for epub output"; -            inherit shell; -            inherit devEnv; -            packages = [ -              dub dmd ldc gnumake -              sqlite -              libxml2 -              html-tidy -              xmlstarlet -              epubcheck -              ebook_tools -              libxml2 -              html-tidy -              xmlstarlet -              epubcheck -              ebook_tools -              epr -              sigil -              calibre #(suite includes: ebook-viewer) -              foliate -            ]; -            inherit shellHook; -          }; -          devShell-html = mkShell { -            name               = "spine dev shell for latex & pdf output"; -            inherit shell; -            inherit devEnv; -            packages = [ -              dub dmd ldc gnumake -              sqlite -            ]; -            inherit shellHook; -          }; -          devShell-latex-pdf = mkShell { -            name               = "spine dev shell for latex & pdf output"; -            inherit shell; -            inherit devEnv; -            packages = [ -              dub dmd ldc gnumake -              sqlite -              source-sans-pro -              source-serif-pro -              source-code-pro -              texlive.combined.scheme-full -            ]; -            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; -          }; -          devShell-i18n = mkShell { -            name               = "spine dev shell internationalization, po4a"; -            inherit shell; -            inherit devEnv; -            packages = [ -              dub dmd ldc gnumake -              sqlite -              perl534Packages.Po4a -            ]; -            inherit shellHook; -          }; -          default = import ./shell.nix { inherit pkgs; }; +          inherit checkPhase; +          inherit installPhase; +          inherit postInstall; +        }; +        #spine-gdc = stdenv.mkDerivation { +        #  inherit pname; +        #  inherit version; +        #  meta.mainProgram   = "spine-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="; +      }); +    apps = forAllSystems (system: { +      default = { +        type = "app"; +        program = "${self.packages.${system}.default}/bin/spine"; +      }; +    }); +    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 SpineOUTversioned=$SpineOUT/$SpineVER +        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 PROG_VER_DECLARED="`cat ./views/version.txt | grep --color=never "enum" | sed 's/.\+(\([0-9]\+\),[ \t]\+\([0-9]\+\),[ \t]\+\([0-9]\+\)[ \t]*).\+/\1.\2.\3/g'`" +        export spineNixHelp="cat ./.env/nix-commands" +        export spineTest="nix shell .#default --print-build-logs --command spine --very-verbose --epub --html --html-link-search --html-link-curate --curate --output=\"\$SpineOUT\" $SpinePOD/*" +        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 spineEpub="spine --very-verbose --epub --output=\"\$SpineOUT\" $SpinePOD/*" +        export spineLatex="spine --very-verbose --latex --output=\"\$SpineOUT\" $SpinePOD/*" +        export spinePdf="spine --very-verbose --pdf --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-epub = mkShell { +          name = "spine dev shell for epub output"; +          inherit shell; +          inherit devEnv; +          packages = [ +            dub +            dmd +            ldc +            gnumake +            sqlite +            libxml2 +            html-tidy +            xmlstarlet +            epubcheck +            ebook_tools +            libxml2 +            html-tidy +            xmlstarlet +            epubcheck +            ebook_tools +            epr +            sigil +            calibre #(suite includes: ebook-viewer) +            foliate +          ]; +          inherit shellHook; +        }; +        devShell-html = mkShell { +          name = "spine dev shell for latex & pdf output"; +          inherit shell; +          inherit devEnv; +          packages = [ +            dub +            dmd +            ldc +            gnumake +            sqlite +          ]; +          inherit shellHook; +        }; +        devShell-latex-pdf = mkShell { +          name = "spine dev shell for latex & pdf output"; +          inherit shell; +          inherit devEnv; +          packages = [ +            dub +            dmd +            ldc +            gnumake +            sqlite +            source-sans-pro +            source-serif-pro +            source-code-pro +            texlive.combined.scheme-full +          ]; +          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; +        }; +        devShell-i18n = mkShell { +          name = "spine dev shell internationalization, po4a"; +          inherit shell; +          inherit devEnv; +          packages = [ +            dub +            dmd +            ldc +            gnumake +            sqlite +            perl534Packages.Po4a +          ]; +          inherit shellHook; +        }; +        default = import ./shell.nix {inherit pkgs;};        });    };  } diff --git a/org/config_nix.org b/org/config_nix.org index b01a5e5..4cf9368 100644 --- a/org/config_nix.org +++ b/org/config_nix.org @@ -87,244 +87,266 @@ export SpineSQLdb='spine.search.db'  #+HEADER: :noweb yes  #+BEGIN_SRC nix  { -  description                  = "a sisu like parser & document generator"; -  inputs.nixpkgs.url           = "<<nixpkgs_url>>"; -  inputs.flake-utils.url       = "github:numtide/flake-utils"; -  outputs = { self, nixpkgs, flake-utils } @inputs: -    let -      pname                    = "spine"; -      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/bin -        install -m755 ./bin/spine $out/bin/spine -        runHook postInstall -      ''; -      postInstall = '' -        echo `ls -la $out/bin/spine` -        $out/bin/spine -v -      ''; -    in { -      packages = forAllSystems (system: -        let pkgs               = nixpkgsFor.${system}; -        in with pkgs; { -          default = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            meta.mainProgram   = "spine"; -            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-dmd = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            meta.mainProgram   = "spine-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-ldc = stdenv.mkDerivation { -            inherit pname; -            inherit version; -            meta.mainProgram   = "spine-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-gdc = stdenv.mkDerivation { -          #  inherit pname; -          #  inherit version; -          #  meta.mainProgram   = "spine-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="; -      }); -      apps = forAllSystems (system: { -        default = { -          type                 = "app"; -          program              = "${self.packages.${system}.default}/bin/spine"; +  description = "a sisu like parser & document generator"; +  inputs.nixpkgs.url = "<<nixpkgs_url>>"; +  inputs.flake-utils.url = "github:numtide/flake-utils"; +  outputs = { +    self, +    nixpkgs, +    flake-utils, +  } @ inputs: let +    pname = "spine"; +    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/bin +      install -m755 ./bin/spine $out/bin/spine +      runHook postInstall +    ''; +    postInstall = '' +      echo `ls -la $out/bin/spine` +      $out/bin/spine -v +    ''; +  in { +    packages = forAllSystems (system: let +      pkgs = nixpkgsFor.${system}; +    in +      with pkgs; { +        default = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          meta.mainProgram = "spine"; +          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;          }; -      }); -      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 SpineOUTversioned=$SpineOUT/$SpineVER -            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 PROG_VER_DECLARED="`cat ./views/version.txt | grep --color=never "enum" | sed 's/.\+(\([0-9]\+\),[ \t]\+\([0-9]\+\),[ \t]\+\([0-9]\+\)[ \t]*).\+/\1.\2.\3/g'`" -            export spineNixHelp="cat ./.env/nix-commands" -            export spineTest="nix shell .#default --print-build-logs --command spine --very-verbose --epub --html --html-link-search --html-link-curate --curate --output=\"\$SpineOUT\" $SpinePOD/*" -            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 spineEpub="spine --very-verbose --epub --output=\"\$SpineOUT\" $SpinePOD/*" -            export spineLatex="spine --very-verbose --latex --output=\"\$SpineOUT\" $SpinePOD/*" -            export spinePdf="spine --very-verbose --pdf --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/*" +        spine-dmd = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          meta.mainProgram = "spine-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-ldc = stdenv.mkDerivation { +          inherit pname; +          inherit version; +          meta.mainProgram = "spine-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-epub = mkShell { -            name               = "spine dev shell for epub output"; -            inherit shell; -            inherit devEnv; -            packages = [ -              dub dmd ldc gnumake -              sqlite -              libxml2 -              html-tidy -              xmlstarlet -              epubcheck -              ebook_tools -              libxml2 -              html-tidy -              xmlstarlet -              epubcheck -              ebook_tools -              epr -              sigil -              calibre #(suite includes: ebook-viewer) -              foliate -            ]; -            inherit shellHook; -          }; -          devShell-html = mkShell { -            name               = "spine dev shell for latex & pdf output"; -            inherit shell; -            inherit devEnv; -            packages = [ -              dub dmd ldc gnumake -              sqlite -            ]; -            inherit shellHook; -          }; -          devShell-latex-pdf = mkShell { -            name               = "spine dev shell for latex & pdf output"; -            inherit shell; -            inherit devEnv; -            packages = [ -              dub dmd ldc gnumake -              sqlite -              source-sans-pro -              source-serif-pro -              source-code-pro -              texlive.combined.scheme-full -            ]; -            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; -          }; -          devShell-i18n = mkShell { -            name               = "spine dev shell internationalization, po4a"; -            inherit shell; -            inherit devEnv; -            packages = [ -              dub dmd ldc gnumake -              sqlite -              perl534Packages.Po4a -            ]; -            inherit shellHook; -          }; -          default = import ./shell.nix { inherit pkgs; }; +          inherit checkPhase; +          inherit installPhase; +          inherit postInstall; +        }; +        #spine-gdc = stdenv.mkDerivation { +        #  inherit pname; +        #  inherit version; +        #  meta.mainProgram   = "spine-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="; +      }); +    apps = forAllSystems (system: { +      default = { +        type = "app"; +        program = "${self.packages.${system}.default}/bin/spine"; +      }; +    }); +    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 SpineOUTversioned=$SpineOUT/$SpineVER +        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 PROG_VER_DECLARED="`cat ./views/version.txt | grep --color=never "enum" | sed 's/.\+(\([0-9]\+\),[ \t]\+\([0-9]\+\),[ \t]\+\([0-9]\+\)[ \t]*).\+/\1.\2.\3/g'`" +        export spineNixHelp="cat ./.env/nix-commands" +        export spineTest="nix shell .#default --print-build-logs --command spine --very-verbose --epub --html --html-link-search --html-link-curate --curate --output=\"\$SpineOUT\" $SpinePOD/*" +        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 spineEpub="spine --very-verbose --epub --output=\"\$SpineOUT\" $SpinePOD/*" +        export spineLatex="spine --very-verbose --latex --output=\"\$SpineOUT\" $SpinePOD/*" +        export spinePdf="spine --very-verbose --pdf --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-epub = mkShell { +          name = "spine dev shell for epub output"; +          inherit shell; +          inherit devEnv; +          packages = [ +            dub +            dmd +            ldc +            gnumake +            sqlite +            libxml2 +            html-tidy +            xmlstarlet +            epubcheck +            ebook_tools +            libxml2 +            html-tidy +            xmlstarlet +            epubcheck +            ebook_tools +            epr +            sigil +            calibre #(suite includes: ebook-viewer) +            foliate +          ]; +          inherit shellHook; +        }; +        devShell-html = mkShell { +          name = "spine dev shell for latex & pdf output"; +          inherit shell; +          inherit devEnv; +          packages = [ +            dub +            dmd +            ldc +            gnumake +            sqlite +          ]; +          inherit shellHook; +        }; +        devShell-latex-pdf = mkShell { +          name = "spine dev shell for latex & pdf output"; +          inherit shell; +          inherit devEnv; +          packages = [ +            dub +            dmd +            ldc +            gnumake +            sqlite +            source-sans-pro +            source-serif-pro +            source-code-pro +            texlive.combined.scheme-full +          ]; +          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; +        }; +        devShell-i18n = mkShell { +          name = "spine dev shell internationalization, po4a"; +          inherit shell; +          inherit devEnv; +          packages = [ +            dub +            dmd +            ldc +            gnumake +            sqlite +            perl534Packages.Po4a +          ]; +          inherit shellHook; +        }; +        default = import ./shell.nix {inherit pkgs;};        });    };  } @@ -563,75 +585,76 @@ src = fetchTarball {  #+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 -    # ❯❯❯ pdf_latex_related -    # source-sans-pro -    # source-serif-pro -    # source-code-pro -    # texlive.combined.scheme-full -    # ❯❯❯ xml_and_epub_related -    # libxml2 -    # html-tidy -    # xmlstarlet -    # epubcheck -    # ebook_tools -    # epr -    # sigil -    # calibre #(suite includes: ebook-viewer) -    # foliate -    # ❯❯❯ i18n translation related -    # perl534Packages.Po4a -  ]; -  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 develop -      ❯❯ nix develop -c zsh - -      ❯❯ nix build -      ❯❯ nix build ".#default" --print-build-logs -      ❯❯ nix build ".#spine-dmd" --print-build-logs |& nom -      ❯❯ nix build ".#spine-ldc" --print-build-logs |& nom -      ❯❯ nix build ".#spine-gdc" --print-build-logs |& nom -    ' -  ''; -} +  mkShell { +    buildInputs = [ +      # ❯❯❯ nix_related +      #nix +      direnv +      nixVersions.unstable #nixFlakes +      nix-prefetch-git +      validatePkgConfig +      nix-output-monitor +      nix-tree +      jq +      alejandra +      git +      # ❯❯❯ dev +      gnumake +      ps +      # ❯❯❯ d_build_related +      # ❯❯ package manager +      dub +      # ❯❯ compiler +      ldc +      #rund +      # ❯❯ linker +      #lld +      #mold +      # ❯❯ builder +      #ninja +      #meson +      # ❯❯❯ sqlite search related +      sqlite +      # ❯❯❯ pdf_latex_related +      # source-sans-pro +      # source-serif-pro +      # source-code-pro +      # texlive.combined.scheme-full +      # ❯❯❯ xml_and_epub_related +      # libxml2 +      # html-tidy +      # xmlstarlet +      # epubcheck +      # ebook_tools +      # epr +      # sigil +      # calibre #(suite includes: ebook-viewer) +      # foliate +      # ❯❯❯ i18n translation related +      # perl534Packages.Po4a +    ]; +    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 develop +        ❯❯ nix develop -c zsh + +        ❯❯ nix build +        ❯❯ nix build ".#default" --print-build-logs +        ❯❯ nix build ".#spine-dmd" --print-build-logs |& nom +        ❯❯ nix build ".#spine-ldc" --print-build-logs |& nom +        ❯❯ nix build ".#spine-gdc" --print-build-logs |& nom +      ' +    ''; +  }  #+END_SRC  echo "ldc `${pkgs.ldc}/bin/ldc2 -v`" @@ -787,7 +810,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 @@ -795,154 +818,169 @@ pkgs.callPackage ./devenv.nix {}  nix profile install . +** devenv.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 +      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: +** derivation.nix :default:  #+HEADER: :tangle ../derivation.nix  #+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/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/bin -        cp -r "${targetOf package}" $out/bin -        runHook postInstall -      ''; -      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/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/bin +              cp -r "${targetOf package}" $out/bin +              runHook postInstall +            ''; +            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 { -  pname         = "spine"; -  version       = "<<spine_version_set>>"; -  src           = ./.; -  nativeBuildInputs = with pkgs; [ dub ldc ]; -  buildInputs = with pkgs; [ nixVersions.unstable sqlite ]; -  meta = with pkgs.lib; { -    description = "A sisu like parser & document generator"; -    longDescription = '' -      a sisu like parser & document generator -    ''; -    homepage    = "https://sisudoc.org"; -    license     = licenses.agpl3Plus; -    platforms   = platforms.linux; -    maintainers = [ "RalphAmissah" ]; -  }; -} +  mkDubDerivation rec { +    pname = "spine"; +    version = "<<spine_version_set>>"; +    src = ./.; +    nativeBuildInputs = with pkgs; [dub ldc]; +    buildInputs = with pkgs; [nixVersions.unstable sqlite]; +    meta = with pkgs.lib; { +      description = "A sisu like parser & document generator"; +      longDescription = '' +        a sisu like parser & document generator +      ''; +      homepage = "https://sisudoc.org"; +      license = licenses.agpl3Plus; +      platforms = platforms.linux; +      maintainers = ["RalphAmissah"]; +    }; +  }  #+END_SRC  - unused @@ -956,7 +994,7 @@ installPhase = ''  '';  #+END_SRC -*** project meta +** project meta  #+NAME: nix_project_meta  #+HEADER: :noweb yes @@ -975,7 +1013,7 @@ meta = with pkgs.lib; {  };  #+END_SRC -*** dub.selections.json +** dub.selections.json  #+HEADER: :NO-tangle ../dub.selections.json  #+BEGIN_SRC nix @@ -1046,8 +1084,8 @@ meta = with pkgs.lib; {  } ]  #+END_SRC -*** dub2nix & shared pkgs SHARED -**** dub2nix with pkgs shared +** dub2nix & shared pkgs SHARED +*** dub2nix with pkgs shared  #+NAME: nix_with_pkgs  #+HEADER: :noweb yes @@ -1057,7 +1095,7 @@ with pkgs; [  ]  #+END_SRC -**** with pkgs list +*** with pkgs list  #+NAME: nix_shell_with_pkgs_list  #+BEGIN_SRC nix @@ -1078,6 +1116,9 @@ git  *** nixpkgs path  **** selected +- nixpkgs_url_github +- nixpkgs_url_local +  #+NAME: nixpkgs_url  #+BEGIN_SRC sh  <<nixpkgs_url_github>> @@ -1,71 +1,72 @@  #!/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 -    # ❯❯❯ pdf_latex_related -    # source-sans-pro -    # source-serif-pro -    # source-code-pro -    # texlive.combined.scheme-full -    # ❯❯❯ xml_and_epub_related -    # libxml2 -    # html-tidy -    # xmlstarlet -    # epubcheck -    # ebook_tools -    # epr -    # sigil -    # calibre #(suite includes: ebook-viewer) -    # foliate -    # ❯❯❯ i18n translation related -    # perl534Packages.Po4a -  ]; -  shellHook = '' -    nix flake update -    nix flake check -    nix flake show -    echo ' -      shell.nix echo ❯❯ +  mkShell { +    buildInputs = [ +      # ❯❯❯ nix_related +      #nix +      direnv +      nixVersions.unstable #nixFlakes +      nix-prefetch-git +      validatePkgConfig +      nix-output-monitor +      nix-tree +      jq +      alejandra +      git +      # ❯❯❯ dev +      gnumake +      ps +      # ❯❯❯ d_build_related +      # ❯❯ package manager +      dub +      # ❯❯ compiler +      ldc +      #rund +      # ❯❯ linker +      #lld +      #mold +      # ❯❯ builder +      #ninja +      #meson +      # ❯❯❯ sqlite search related +      sqlite +      # ❯❯❯ pdf_latex_related +      # source-sans-pro +      # source-serif-pro +      # source-code-pro +      # texlive.combined.scheme-full +      # ❯❯❯ xml_and_epub_related +      # libxml2 +      # html-tidy +      # xmlstarlet +      # epubcheck +      # ebook_tools +      # epr +      # sigil +      # calibre #(suite includes: ebook-viewer) +      # foliate +      # ❯❯❯ i18n translation related +      # perl534Packages.Po4a +    ]; +    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-dmd" --print-build-logs |& nom -      ❯❯ nix build ".#spine-ldc" --print-build-logs |& nom -      ❯❯ nix build ".#spine-gdc" --print-build-logs |& nom -    ' -  ''; -} +        ❯❯ nix build +        ❯❯ nix build ".#default" --print-build-logs +        ❯❯ nix build ".#spine-dmd" --print-build-logs |& nom +        ❯❯ nix build ".#spine-ldc" --print-build-logs |& nom +        ❯❯ nix build ".#spine-gdc" --print-build-logs |& nom +      ' +    ''; +  } | 
