From 74f78edc9dd6590e1c01e27b39083ea838ecb976 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Mon, 10 Apr 2023 16:36:59 -0400 Subject: nix org cleaning - including run of alejandra nix formater --- .envrc | 15 +- default.nix | 2 +- derivation.nix | 193 ++++++------- devenv.nix | 85 +++--- flake.lock | 61 +++- flake.nix | 300 ++++++++++---------- org/config_nix.org | 802 ++++++++++++++++++++++++++++------------------------- shell.nix | 128 +++++---- 8 files changed, 852 insertions(+), 734 deletions(-) diff --git a/.envrc b/.envrc index 94e0187..093f4ee 100644 --- a/.envrc +++ b/.envrc @@ -1,16 +1,17 @@ -use flake . -#use flake .#default NIX_ENFORCE_PURITY=1 # - https://github.com/nix-community/nix-direnv NixDirEnvVersion="2.2.1" +NixDirEnvSHA="sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" +#NixDirEnvSHAget="sha256-0000000000000000000000000000000000000000000=" if ! has nix_direnv_version || ! nix_direnv_version ${NixDirEnvVersion}; then -# source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/${NixDirEnvVersion}/direnvrc" "sha256-0000000000000000000000000000000000000000000=" - source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/${NixDirEnvVersion}/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/${NixDirEnvVersion}/direnvrc" "${NixDirEnvSHA}" fi watch_file flake.lock watch_file flake.nix watch_file makefile -if [ -f .envrc-local ]; then - source_env_if_exists .envrc-local || source .envrc-local -fi +#if [ -f .envrc-local ]; then +# source_env_if_exists .envrc-local || source .envrc-local +#fi PATH_add result/bin +use flake . +#use flake .#default 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 {} }: +{pkgs ? import {}}: pkgs.callPackage ./devenv.nix {} diff --git a/derivation.nix b/derivation.nix index 7c8f816..c59ee23 100644 --- a/derivation.nix +++ b/derivation.nix @@ -1,107 +1,114 @@ -{ pkgs ? import {}, +{ + pkgs ? import {}, 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 - #cp -rv "${targetOf package}" $out/spine-markup-samples/. - #cp -rv ./markup $out/spine-markup-samples/. - runHook postInstall - ''; - #postInstall= '' - # cp -rv ./markup $out/spine-markup-samples/. - #''; - 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 + #cp -rv "${targetOf package}" $out/spine-markup-samples/. + #cp -rv ./markup $out/spine-markup-samples/. + runHook postInstall + ''; + #postInstall= '' + # cp -rv ./markup $out/spine-markup-samples/. + #''; + 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"; - zipfile = "spine-0.12.0-tag-0.11.2.r107.gf89a107.tar.gz"; - src = fetchTarball { - #url = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/tarball/${pname}-${version}.tar.gz"; - #url = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine/tarballGitHEAD/${pname}-${version}.tar.gz"; - #sha256 = "sha256:0000000000000000000000000000000000000000000000000000"; - url = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/tarball/spine-0.12.0-tag-0.11.2.r107.gf89a107.tar.gz"; - sha256 = "sha256:03dr7dn7kq6arw4ry7qar13iqmi1caw70imfjwi8qr7g2j4mnk2q"; - }; - 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"; + #zipfile = "spine-0.12.0-tag-0.11.2.r107.gf89a107.tar.gz"; + src = fetchTarball { + url = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/tarball/spine-0.12.0-tag-0.11.2.r107.gf89a107.tar.gz"; + sha256 = "sha256:03dr7dn7kq6arw4ry7qar13iqmi1caw70imfjwi8qr7g2j4mnk2q"; + }; + 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"]; + }; + } diff --git a/devenv.nix b/devenv.nix index 6984ace..894b0ec 100644 --- a/devenv.nix +++ b/devenv.nix @@ -1,42 +1,45 @@ -{ pkgs ? import { }, name ? "user-env" }: +{ + pkgs ? import {}, + 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 || 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 + 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 + # ❯❯❯ 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 || 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; + }) + ]; + } diff --git a/flake.lock b/flake.lock index 4293446..3e1bbb8 100644 --- a/flake.lock +++ b/flake.lock @@ -1,12 +1,15 @@ { "nodes": { "flake-utils": { + "inputs": { + "systems": "systems" + }, "locked": { - "lastModified": 1676283394, - "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", + "lastModified": 1681037374, + "narHash": "sha256-XL6X3VGbEFJZDUouv2xpKg2Aljzu/etPLv5e1FPt1q0=", "owner": "numtide", "repo": "flake-utils", - "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", + "rev": "033b9f258ca96a10e543d4442071f614dc3f8412", "type": "github" }, "original": { @@ -16,12 +19,15 @@ } }, "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, "locked": { - "lastModified": 1676283394, - "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", + "lastModified": 1681037374, + "narHash": "sha256-XL6X3VGbEFJZDUouv2xpKg2Aljzu/etPLv5e1FPt1q0=", "owner": "numtide", "repo": "flake-utils", - "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", + "rev": "033b9f258ca96a10e543d4442071f614dc3f8412", "type": "github" }, "original": { @@ -32,11 +38,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1677229269, - "narHash": "sha256-awE2w6oi9rzQ8qj1lwKEDm6qIA0a239fiB+AyPjXR2w=", + "lastModified": 1681092589, + "narHash": "sha256-I11GYL+6yD6dX89H0WaMiptE52NZ2Tmx+rA23TUyfH8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7d0ed7f2e5aea07ab22ccb338d27fbe347ed2f11", + "rev": "83ca2cd74539fb8e79d46e233f6bb1d978c36f32", "type": "github" }, "original": { @@ -61,8 +67,11 @@ ] }, "locked": { - "lastModified": 1677293337, - "narHash": "sha256-4NHEjFqgnoukc6bC+79NWu1QIpLsWChGRQLI0OC1Pwo=", + "lastModified": 1681162928, + "narHash": "sha256-lR+36LESgWKUtGc74TABMeBsPB9R8AKVKil/CDBA0LY=", + "ref": "refs/heads/main", + "rev": "e3ced89491d3b39d29ba2ae824a474ef14ebb207", + "revCount": 576, "type": "git", "url": "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine" }, @@ -70,6 +79,36 @@ "type": "git", "url": "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine" } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "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", diff --git a/flake.nix b/flake.nix index 4bdbcba..79ce2a1 100644 --- a/flake.nix +++ b/flake.nix @@ -1,148 +1,170 @@ { - description = "spine (sisu like parser & document generator) made available to process markup samples"; + description = "spine (sisu like parser & document generator) made available to process markup samples"; inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # "github:nixos/nixpkgs"; - flake-utils.url = "github:numtide/flake-utils"; - spine.url = "git+file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine"; + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # "github:nixos/nixpkgs"; + flake-utils.url = "github:numtide/flake-utils"; + spine.url = "git+file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine"; spine.inputs.nixpkgs.follows = "nixpkgs"; - spine.flake = true; + spine.flake = true; }; - outputs = { self, nixpkgs, flake-utils, spine } @inputs: - let - 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. + outputs = { + self, + nixpkgs, + flake-utils, + spine, + } @ inputs: let + 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. + in { + packages = forAllSystems (system: let + pkgs = nixpkgsFor.${system}; in { - packages = forAllSystems (system: - let pkgs = nixpkgsFor.${system}; - in { - default = spine.packages.${system}.default; - spine-dmd = spine.packages.${system}.spine-dmd; - spine-ldc = spine.packages.${system}.spine-ldc; - #spine-gdc = spine.packages.${system}.spine-gdc; - #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; - }); - apps = forAllSystems (system: { - default = { - type = "app"; - program = "${self.packages.${system}.default}/bin/spine"; + default = spine.packages.${system}.default; + spine-dmd = spine.packages.${system}.spine-dmd; + spine-ldc = spine.packages.${system}.spine-ldc; + #spine-gdc = spine.packages.${system}.spine-gdc; + #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"` + ### 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 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; }; - }); - devShells = forAllSystems (system: - let - pkgs = nixpkgsFor.${system}; - shellHook = '' - export DFLAGS="-O2 -inline -boundscheck=on -color=on" - export Date=`date "+%Y%m%d"` - ### 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 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; }; + 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 896aaed..e43ffbd 100644 --- a/org/config_nix.org +++ b/org/config_nix.org @@ -16,44 +16,34 @@ #+OPTIONS: H:3 num:nil toc:t \n:t ::t |:t ^:nil -:t f:t *:t * nix :nix: - -#+NAME: nixpkgs_local -#+BEGIN_SRC sh -/srv/nixpkgs-dev/nixpkgs -#+END_SRC - -** spine markup samples - -- default.nix -- shell.nix - -*** envrc :envrc: -**** .envrc +** envrc :envrc: +*** .envrc - https://github.com/nix-community/nix-direnv - source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/${NixDirEnvVersion}/direnvrc" "sha256-0000000000000000000000000000000000000000000=" #+HEADER: :tangle ../.envrc #+BEGIN_SRC sh -use flake . -#use flake .#default NIX_ENFORCE_PURITY=1 # - https://github.com/nix-community/nix-direnv NixDirEnvVersion="2.2.1" +NixDirEnvSHA="sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" +#NixDirEnvSHAget="sha256-0000000000000000000000000000000000000000000=" if ! has nix_direnv_version || ! nix_direnv_version ${NixDirEnvVersion}; then -# source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/${NixDirEnvVersion}/direnvrc" "sha256-0000000000000000000000000000000000000000000=" - source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/${NixDirEnvVersion}/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/${NixDirEnvVersion}/direnvrc" "${NixDirEnvSHA}" fi watch_file flake.lock watch_file flake.nix watch_file makefile -if [ -f .envrc-local ]; then - source_env_if_exists .envrc-local || source .envrc-local -fi +#if [ -f .envrc-local ]; then +# source_env_if_exists .envrc-local || source .envrc-local +#fi PATH_add result/bin +use flake . +#use flake .#default #+END_SRC -**** .envrc-local CHECK MODIFY +*** .envrc-local CHECK MODIFY - bespoke modify appropriately and generate if needed @@ -77,157 +67,178 @@ export SpineCGIform='spine_search' export SpineSQLdb='spine.search.db' #+END_SRC -*** flake :flake: -**** flake.nix +** flake.nix :flake: #+HEADER: :tangle ../flake.nix #+HEADER: :noweb yes #+BEGIN_SRC nix { - description = "spine (sisu like parser & document generator) made available to process markup samples"; + description = "spine (sisu like parser & document generator) made available to process markup samples"; inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # "github:nixos/nixpkgs"; - flake-utils.url = "github:numtide/flake-utils"; - spine.url = "<>"; + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # "github:nixos/nixpkgs"; + flake-utils.url = "github:numtide/flake-utils"; + spine.url = "<>"; spine.inputs.nixpkgs.follows = "nixpkgs"; - spine.flake = true; + spine.flake = true; }; - outputs = { self, nixpkgs, flake-utils, spine } @inputs: - let - version = "<>"; - 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. + outputs = { + self, + nixpkgs, + flake-utils, + spine, + } @ inputs: let + version = "<>"; + 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. + in { + packages = forAllSystems (system: let + pkgs = nixpkgsFor.${system}; in { - packages = forAllSystems (system: - let pkgs = nixpkgsFor.${system}; - in { - default = spine.packages.${system}.default; - spine-dmd = spine.packages.${system}.spine-dmd; - spine-ldc = spine.packages.${system}.spine-ldc; - #spine-gdc = spine.packages.${system}.spine-gdc; - #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; - }); - apps = forAllSystems (system: { - default = { - type = "app"; - program = "${self.packages.${system}.default}/bin/spine"; + default = spine.packages.${system}.default; + spine-dmd = spine.packages.${system}.spine-dmd; + spine-ldc = spine.packages.${system}.spine-ldc; + #spine-gdc = spine.packages.${system}.spine-gdc; + #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"` + ### 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 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; }; - }); - devShells = forAllSystems (system: - let - pkgs = nixpkgsFor.${system}; - shellHook = '' - export DFLAGS="-O2 -inline -boundscheck=on -color=on" - export Date=`date "+%Y%m%d"` - ### 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 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; }; + 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;}; }); }; } @@ -276,15 +287,15 @@ nix flake clone git+file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/ #+NAME: flake_inputs_nix #+HEADER: :noweb yes #+BEGIN_SRC nix -nixpkgs.url = "github:nixos/nixpkgs"; -flake-utils.url = "github:numtide/flake-utils"; +nixpkgs.url = "github:nixos/nixpkgs"; +flake-utils.url = "github:numtide/flake-utils"; #+END_SRC #+NAME: flake_inputs_spine #+HEADER: :noweb yes #+BEGIN_SRC nix -spine.url = "git+file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine"; -spine.flake = true; +spine.url = "git+file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine"; +spine.flake = true; #+END_SRC ***** flake outputs @@ -301,11 +312,11 @@ self, nixpkgs, flake-utils #+NAME: flake_devshells #+HEADER: :noweb yes #+BEGIN_SRC nix -devShells = forAllSystems (system: - let pkgs = nixpkgsFor.${system}; +devShells = forAllSystems (system: + let pkgs = nixpkgsFor.${system}; in { default = pkgs.mkShell { - buildInputs = with pkgs; [ git dub dmd ldc sqlite ]; + buildInputs = with pkgs; [ git dub dmd ldc sqlite ]; }; }); #+END_SRC @@ -337,28 +348,28 @@ packages.x86_64-linux.spine-tarball = spine-tarball.packages.x86_64-linux.defaul #+BEGIN_SRC nix packages.x86_64-linux.spine-markup-samples = let - pkgs = import nixpkgs { - system = "x86_64-linux"; + pkgs = import nixpkgs { + system = "x86_64-linux"; }; in pkgs.stdenv.mkDerivation { - pname = "spine-markup-samples"; - version = "<>"; - description = "markup samples for spine, a sisu like parser & document generator"; + pname = "spine-markup-samples"; + version = "<>"; + description = "markup samples for spine, a sisu like parser & document generator"; inherit self; - src = self; - shell = ./shell.nix; - buildPhase = '' + src = self; + shell = ./shell.nix; + buildPhase = '' runHook preBuild HOME="$PWD" runHook postBuild ''; - checkPhase = '' + checkPhase = '' runHook preCheck HOME="$PWD" runHook postCheck ''; - installPhase = '' + installPhase = '' runHook preInstall mkdir -p $out/lib/spine-markup-samples echo "pwd: $PWD" @@ -378,8 +389,8 @@ postInstall = '' #+BEGIN_SRC nix inputs.spine.url = fetchTarball { - url = "<>"; - sha256 = "<>"; + url = "<>"; + sha256 = "<>"; }; #+END_SRC @@ -391,70 +402,78 @@ inputs.spine.url = fetchTarball { #+HEADER: :shebang "#!/usr/bin/env -S nix-shell --pure\n#!nix-shell -i bash" #+HEADER: :noweb yes #+BEGIN_SRC nix -{ pkgs ? import {} }: +{pkgs ? import {}}: with pkgs; -mkShell { - buildInputs = [ - # ❯❯❯ nix_related - # direnv - # nixVersions.unstable #nixFlakes - # nix-prefetch-git - # validatePkgConfig - # nix-tree jq nix-output-monitor - # git - # 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 + + ❯❯ nix profile install . + ' + ''; + } #+END_SRC **** Notes @@ -560,7 +579,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 {} }: +{pkgs ? import {}}: pkgs.callPackage ./devenv.nix {} #+END_SRC @@ -571,48 +590,51 @@ nix profile install . #+HEADER: :tangle ../devenv.nix #+HEADER: :tangle-mode (identity #o644) #+BEGIN_SRC nix -{ pkgs ? import { }, name ? "user-env" }: +{ + pkgs ? import {}, + 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 || 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 + 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 + # ❯❯❯ 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 || 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: @@ -621,121 +643,132 @@ buildEnv { #+HEADER: :tangle-mode (identity #o644) #+HEADER: :noweb yes #+BEGIN_SRC nix -{ pkgs ? import {}, +{ + pkgs ? import {}, 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 - #cp -rv "${targetOf package}" $out/spine-markup-samples/. - #cp -rv ./markup $out/spine-markup-samples/. - runHook postInstall - ''; - #postInstall= '' - # cp -rv ./markup $out/spine-markup-samples/. - #''; - 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 + #cp -rv "${targetOf package}" $out/spine-markup-samples/. + #cp -rv ./markup $out/spine-markup-samples/. + runHook postInstall + ''; + #postInstall= '' + # cp -rv ./markup $out/spine-markup-samples/. + #''; + 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 = "<>"; - zipfile = "<>"; - src = fetchTarball { - #url = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/tarball/${pname}-${version}.tar.gz"; - #url = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine/tarballGitHEAD/${pname}-${version}.tar.gz"; - #sha256 = "sha256:0000000000000000000000000000000000000000000000000000"; - url = "<>"; - sha256 = "<>"; - }; - 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 = "<>"; + #zipfile = "spine-0.12.0-tag-0.11.2.r107.gf89a107.tar.gz"; + src = fetchTarball { + url = "<>"; + sha256 = "<>"; + }; + 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 +#url = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/tarball/${pname}-${version}.tar.gz"; +#url = "file:///home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine/tarballGitHEAD/${pname}-${version}.tar.gz"; +#sha256 = "sha256:0000000000000000000000000000000000000000000000000000"; + # src = fetchTarball { -# url = "file:///[path]/${pname}-${version}.tar.gz"; -# sha256 = "sha256:0000000000000000000000000000000000000000000000000000"; +# url = "file:///[path]/${pname}-${version}.tar.gz"; +# sha256 = "sha256:0000000000000000000000000000000000000000000000000000"; # }; -#src = ./.; +#src = ./.; ** variables *** spine version SET VERSION :version:set:project: @@ -769,6 +802,11 @@ file://<>/<> /home/ralph/grotto/repo/git.repo/projects/doc-reform/code/software/spine #+END_SRC +#+NAME: nixpkgs_local +#+BEGIN_SRC sh +/srv/nixpkgs-dev/nixpkgs +#+END_SRC + #+NAME: spine_git_file_path_url #+HEADER: :noweb yes #+BEGIN_SRC nix diff --git a/shell.nix b/shell.nix index 92dd067..72f6984 100755 --- a/shell.nix +++ b/shell.nix @@ -1,66 +1,74 @@ #!/usr/bin/env -S nix-shell --pure #!nix-shell -i bash -{ pkgs ? import {} }: +{pkgs ? import {}}: with pkgs; -mkShell { - buildInputs = [ - # ❯❯❯ nix_related - # direnv - # nixVersions.unstable #nixFlakes - # nix-prefetch-git - # validatePkgConfig - # nix-tree jq nix-output-monitor - # git - # 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 + + ❯❯ nix profile install . + ' + ''; + } -- cgit v1.2.3