diff options
Diffstat (limited to 'org/config_nix.org')
-rw-r--r-- | org/config_nix.org | 1262 |
1 files changed, 1262 insertions, 0 deletions
diff --git a/org/config_nix.org b/org/config_nix.org new file mode 100644 index 0000000..4081957 --- /dev/null +++ b/org/config_nix.org @@ -0,0 +1,1262 @@ +-*- mode: org -*- +#+TITLE: configuration nix +#+DESCRIPTION: makefile for spine +#+FILETAGS: :spine:build:tools: +#+AUTHOR: Ralph Amissah +#+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]] +#+COPYRIGHT: Copyright (C) 2015 - 2022 Ralph Amissah +#+LANGUAGE: en +#+STARTUP: content hideblocks hidestars noindent entitiespretty +#+PROPERTY: header-args :exports code +#+PROPERTY: header-args+ :noweb yes +#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :cache no +#+PROPERTY: header-args+ :padline no +#+PROPERTY: header-args+ :mkdirp yes +#+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/nix/nixpkgs +#+END_SRC + +** NOTES +*** nix-shell + +- default.nix + +#+BEGIN_SRC sh +nix-shell +nix-build +#+END_SRC + +- project.nix + +#+BEGIN_SRC sh +nix-shell +nix-build project.nix +#+END_SRC + +*** nix-shell --pure + +- default.nix + +#+HEADER: :noweb yes +#+BEGIN_SRC sh +nix-shell --pure +nix-build -I nixpkgs=<<nixpkgs_local>> +nix-build -I .envrc +#+END_SRC + +#+BEGIN_SRC sh +nix build -f default.nix --print-build-logs +nix build -f derivation.nix --print-build-logs +nix shell -f default.nix --print-build-logs +# nix build -f project.nix +# nix build -f spine.nix +nix develop --build -f derivation.nix -I .envrc --print-build-logs +#+END_SRC + +*** derivation .drv + +#+BEGIN_SRC sh +nix show-derivation /nix/store/q7n14bm8j5vzm62qaraczdb4bpyf59vv-spine-0.11.1.drv +#+END_SRC + +** spine + +- default.nix +- shell.nix + +*** 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 . +NIX_ENFORCE_PURITY=1 +NixDirEnvVersion="2.2.0" +if ! has nix_direnv_version || ! nix_direnv_version ${NixDirEnvVersion}; then +# - https://github.com/nix-community/nix-direnv +# 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-5EwyKnkJNQeXrRkYbwwRBcXbibosCJqyIUuz9Xq+LRc=" +fi +if [ -f .envrc-local ]; then + source_env_if_exists .envrc-local || source .envrc-local +fi +#+END_SRC + +**** .envrc-local CHECK MODIFY + +- bespoke modify appropriately and generate if needed + +#+HEADER: :tangle ../.envrc-local_ +#+HEADER: :noweb yes +#+BEGIN_SRC sh +# reload when these files change +watch_file flake.lock +watch_file flake.nix +nix flake update; nix flake check; nix flake show +#use flake .#default +export NIX_PATH=/nix/var/nix/profiles/per-user/root/channels/nixos +#export NIX_PATH=nixpkgs=/srv/nix/nixpkgs +export DFLAGS="-O2 -inline -boundscheck=on -color=on" +## load the flake devShell +# eval "$(nix print-dev-env)" +# echo $NIX_BUILD_TOP +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') +export SpinePROJ=~/grotto/repo/git.repo/projects/doc-reform/code/software/spine-search +export SpineSRC=$SpinePROJ/src +#export SpineBIN=$SpinePROJ/result/bin +export SpineDOC=~/grotto/repo/git.repo/projects/project-spine/doc-reform-markup/spine-markup-samples +export SpinePOD=$SpineDOC/markup/pod +#export SpineOUTversioned=/srv/www/spine/$SpineVER +export SpineOUT=/srv/www/spine +export SpineDBpath=/var/www/sqlite +export SpineCgiBIN=/var/www/cgi/cgi-bin +#+END_SRC + +*** makefile + +#+HEADER: :tangle ../makefile_ +#+BEGIN_SRC make +buildPhase: + HOME=$${PWD}; \ + for DC_ in dmd ldmd2 gdmd; do \ + echo "- check for D compiler $${DC_}"; \ + DC=$$(type -P $${DC_} || echo ""); \ + if [ ! "$${DC}" == "" ]; then \ + break; \ + fi; \ + done; \ + echo "D compiler = $${DC}"; \ + if [ "$${DC}" == "" ]; then \ + echo "Error: could not find D compiler"; \ + exit 1; \ + fi; \ + echo "$${DC_} used as D compiler to build $${pname}"; \ + export DFLAGS="-O2 -inline"; \ + dub build --compiler=$${DC} --build=release --combined --skip-registry=all; +checkPhase: + runHook preCheck; \ + HOME=$${PWD}; \ + dub test --combined --skip-registry=all; \ + runHook postCheck +installPhase: + runHook preInstall; \ + mkdir -p $${out}/bin; \ + install -m755 ./bin/spine $${out}/bin/spine; \ + runHook postInstall + #cp -r bin/spine $out/bin/. +postInstall: + echo "$${out}/share/cgi-bin"; \ + echo `ls -la $${out}/bin/spine` +#+END_SRC + +*** flake :flake: +**** flake static :flake:static: +***** flake.nix + +#+HEADER: :tangle ../flake.nix +#+HEADER: :noweb yes +#+BEGIN_SRC nix +{ + description = "a sisu like document parser search form"; + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # "github:nixos/nixpkgs"; "github:NixOS/nixpkgs/nixpkgs-unstable"; "nixpkgs/nixos-unstable"; "nixpkgs/nixos-21.11"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + outputs = { self, nixpkgs, flake-utils }: + let + version = "<<spine_version_set>>"; + 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 with pkgs; { + default = stdenv.mkDerivation { + pname = "spine_search"; + inherit version; + executable = true; + src = self; + shell = ./default.nix; + devEnv = ./devenv.nix; + buildInputs = [ sqlite ]; + nativeBuildInputs = [ dub ldc ]; # [ dub dmd ]; [ dub ldc ]; [ dub gdc ]; + <<flake_phases>> + }; + #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; + }); + devShells = forAllSystems (system: + let pkgs = nixpkgsFor.${system}; + in with pkgs; { + devShell = mkShell { buildInputs = [ git dub dmd ldc gdc sqlite ]; }; + }); + }; +} +#+END_SRC + +**** flakes +***** flake single system + +#+NAME: flake_single_sytem +#+HEADER: :noweb yes +#+BEGIN_SRC nix +{ + description = "a sisu like document parser search form"; + inputs.<<flake_inputs_nix>> + outputs = { <<flake_outputs>> }: { + packages.x86_64-linux.spine_search = + let + pkgs = import nixpkgs { + system = "x86_64-linux"; + }; + #targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + in pkgs.stdenv.mkDerivation { + <<flake_metadata>> + inherit self; + src = self; + #shell = ./shell.nix; + shell = ./default.nix; + devEnv = ./devenv.nix; + <<flake_phases>> + buildInputs = [ sqlite ]; + nativeBuildInputs = with pkgs; [ dub ldc ]; + }; + packages.x86_64-linux.default = self.packages.x86_64-linux.spine_search; + }; +} +#+END_SRC + +***** flake (multi-system) + +#+NAME: flake_multi_system_possible +#+HEADER: :noweb yes +#+BEGIN_SRC nix +{ + description = "a sisu like document parser search form"; + inputs.<<flake_inputs_nix>> + outputs = { <<flake_outputs>> }: + let + version = "<<spine_version_set>>"; + supportedSystems = [ "x86_64-linux" ]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; + # helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'. + forAllSystems = nixpkgs.lib.genAttrs supportedSystems; + nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); # nixpkgs instantiated for supported system types. + <<flake_devshells>> + in { + packages = forAllSystems (system: + let + pkgs = nixpkgsFor.${system}; + in { + default = pkgs.stdenv.mkDerivation { + pname = "spine_search"; + inherit version; + src = self; + shell = ./default.nix; + devEnv = ./devenv.nix; + buildInputs = [ sqlite ]; + nativeBuildInputs = with pkgs; [ dub ldc ]; # [ dub dmd ]; [ dub ldc ]; [ dub gdc ]; + <<flake_phases>> + }; + #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; + }); + }; +} +#+END_SRC + +*** flake :flake: +**** notes? + +- flake.nix + /srv/nix/nixpkgs + ./shell.nix + - shell.nix + ./pkgs/shell-pkgs.nix + - pkgs/shell-pkgs.nix + - default.nix + ./nix/dub.selections.nix # + - dub.selections.nix + +- nix develop + +- nix flake update + +- nix shell -f default.nix --print-build-logs +- nix shell -c default.nix + +- nix build `nix-instantiate` +- nix build -f default.nix --print-build-logs +- nix shell -f default.nix --print-build-logs +- nix develop --build -f derivation.nix -I .envrc --print-build-logs +- nix develop --profile .#default --print-build-logs --command spine -v + +- nix search --json 2>/dev/null |jq +- nix flake show +- nix show-derivation + +# nix-instantiate | nix-build + +#nix flake update +#nix flake check +#nix flake show +#nix develop +#nix build .#default --print-build-logs + + +#+BEGIN_SRC nix +src = fetchTarball { + url = "file:///[path]/$(pname)-$(version).tar.gz"; + sha256 = "sha256:0000000000000000000000000000000000000000000000000000"; +}; +#+END_SRC + +**** flake parts +***** flake metadata + +#+NAME: flake_metadata +#+HEADER: :noweb yes +#+BEGIN_SRC nix +pname = "spine_search"; +version = "<<spine_version_set>>"; +description = "a sisu like document parser search form"; +#+END_SRC + +***** flake inputs +****** flake inputs static + +#+NAME: flake_inputs_nix +#+HEADER: :noweb yes +#+BEGIN_SRC nix +nixpkgs.url = "github:nixos/nixpkgs"; +flake-utils.url = "github:numtide/flake-utils"; +#+END_SRC + +***** flake outputs +****** flake outputs static + +#+NAME: flake_outputs +#+HEADER: :noweb yes +#+BEGIN_SRC nix +self, nixpkgs, flake-utils +#+END_SRC + +***** flake devshells + +#+NAME: flake_devshells +#+HEADER: :noweb yes +#+BEGIN_SRC nix +devShells = forAllSystems (system: + let pkgs = nixpkgsFor.${system}; + in { + default = pkgs.mkShell { + buildInputs = with pkgs; [ git dub dmd ldc sqlite ]; + }; +}); +#+END_SRC + +***** flake phases + +#+NAME: flake_phases +#+HEADER: :noweb yes +#+BEGIN_SRC nix +buildPhase = '' + runHook preBuild + HOME="$PWD" + 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 +''; +checkPhase = '' + runHook preCheck + HOME="$PWD" + dub test --combined --skip-registry=all + runHook postCheck +''; +installPhase = '' + runHook preInstall + mkdir -p $out/share/cgi-bin + install -m755 -D ./cgi-bin/spine_search $out/share/cgi-bin/spine_search + runHook postInstall +''; +postInstall = '' + echo `ls -la $out/share/cgi-bin/spine_search` + echo " + nix build or nix develop? (suggestions): + - nix build + nix build .#default --print-build-logs + nix flake update; nix build .#default --print-build-logs + nix build --print-build-logs + - nix run + nix run .#default --print-build-logs + nix run default.nix --print-build-logs + - nix shell + nix shell .#default --print-build-logs --command spine -v + - nix develop + nix develop --profile .#default --print-build-logs --command spine -v + nix develop ; eval \"$buildPhase\" + nix develop --build -f derivation.nix -I .envrc --print-build-logs + - nix profile install . --print-build-logs + nix-instantiate | nix show-derivation | jq + " +''; +#+END_SRC + +*** shell.nix :shell: +**** tangle + +#+HEADER: :tangle ../shell.nix +#+HEADER: :tangle-mode (identity #o755) +#+HEADER: :shebang "#!/usr/bin/env -S nix-shell --pure\n#!nix-shell -i bash" +#+HEADER: :noweb yes +#+BEGIN_SRC nix +{ pkgs ? import <nixpkgs> {} }: +with pkgs; +mkShell { + buildInputs = [ + direnv + nixVersions.unstable #nixFlakes + nix-prefetch-git + validatePkgConfig + nix-tree jq nix-output-monitor + git + ps + ### d_build_related + dub + ## compiler + ldc + rund + ## linker + #lld + #mold + ## builder + #ninja + #meson + ### sqlite search related + sqlite + ### tools + #aria #wget #curl + ### candy + #starship + ]; + shellHook = '' + #if [[ -f ".envrc" ]]; then + # source .envrc + #fi + nix flake update + echo "" + echo "nix flake metadata:" + nix flake metadata + echo "" + echo "nix flake check:" + nix flake check + echo "" + echo "nix flake show:" + nix flake show + echo " + nix flake update + nix flake metadata + nix flake check + nix flake show + + nix build or nix develop? (suggestions): + + - nix build + nix build .#default --print-build-logs + nix build --print-build-logs + nix build .#default --print-build-logs |& nom + + - nix run + nix run .#default --print-build-logs + nix run default.nix --print-build-logs + + - nix shell + nix shell --print-build-logs + + - nix develop + nix develop --build .#default --print-build-logs + nix develop --build -f derivation.nix -I .envrc --print-build-logs + nix develop ; eval \$buildPhase + + nix-build |& nom + + nix-instantiate | nix show-derivation | jq + nix-build . --no-out-link | xargs -o nix-tree + nix-tree --derivation .#spine_search + + dub build --compiler=ldmd --build=release --combined --skip-registry=all + " + ''; +} +#+END_SRC + +echo "ldc `${pkgs.ldc}/bin/ldc2 -v`" + +**** Notes + +#+BEGIN_SRC text +#% Notes + +# - shell.nix -I .envrc +# - shell.nix -I .envrc --pure + +# [ nix-shell ] + + # - nix-shell -I nixpkgs=/srv/nix/nixpkgs --pure + # - nix-shell -p "with import /srv/nix/nixpkgs {}; ldc" --pure + # - nix-shell -p "with import /srv/nix/nixpkgs {}; [dub ldc]" --pure + + # - nix-shell -p nixVersions.unstable #nixFlakes + # - nix-shell -p nixFlakes --pure + # - nix-shell -p nixFlakes --pure -p "with import /srv/nix/nixpkgs {}; [nix dub ldc git ps]" + # - nix-shell shell.nix direnv: export +IN_NIX_SHELL + # - nix-shell shell.nix + +# [ nix-build ] + + # - nix-build -I nixpkgs=/srv/nix/nixpkgs # --pure + # - nix-build -I .envrc --pure + # - nix-build default.nix -I .envrc && result/bin/spine -v + +# [ nix-instantiate ] + + # - nix-instantiate | nix show-derivation | jq + # - nix-instantiate -I .envrc | nix show-derivation -f derivation.nix -I .envrc | jq + # - nix-instantiate | nix show-derivation --recursive | jq + # - nix-instantiate -I .envrc | nix show-derivation -f derivation.nix --recursive -I .envrc | jq + # - nix-instantiate | nix-build + # - nix-instantiate -I .envrc | nix-build -I .envrc + +# [ nix shell ] + + # - nix shell -c default.nix + # - nix shell -f default.nix --print-build-logs + +# [ nix build ] + + # - nix build -I .envrc --print-build-logs + # - nix build -f default.nix --print-build-logs + # - nix build -f derivation.nix --print-build-logs + + # - nix build `nix-instantiate` + # - nix build `nix-instantiate -I .envrc` + + # - nix build -f default.nix && ./result/bin/spine -v && noti -t "spine build" -m "see ./result/bin/spine" + # - nix build .#spine + +# [ nix run ] + + # - nix run default.nix --print-build-logs + # - nix run -I .envrc default.nix --print-build-logs + # - nix run .#spine + +# - nix-shell -I .envrc --pure +# - nix develop --build -f derivation.nix -I .envrc --print-build-logs + +# - nix-shell -p nixFlakes --pure -p "with import /srv/nix/nixpkgs {}; [nix dub ldc git ps]" +# - nix-build +# - nix build `nix-instantiate -I .envrc` + +# - nix develop --build -f default.nix -I .envrc + +# - nix-shell -I .envrc --pure +# - nix-build default.nix -I .envrc && result/bin/spine -v + +# - nix shell -f default.nix --print-build-logs +# - nix-instantiate -I .envrc | nix-build -I .envrc +#+END_SRC + +#+BEGIN_SRC text +#% Notes +- nix-shell + +- shell.nix --pure +- shell.nix --pure -I .envrc + +- nix-shell --pure -I nixpkgs=<<nixpkgs_local>> +- nix-shell --pure -p "with import <<nixpkgs_local>> {}; ldc" +- nix-shell --pure -p "with import /srv/nix/nixpkgs {}; [dub ldc]" + +- shell.nix direnv: export +IN_NIX_SHELL + +- nix-shell -p nixFlakes +- nix-shell -p nixFlakes --pure +- nix-shell -p nixFlakes --pure -p "with import /srv/nix/nixpkgs {}; [dub ldc]" + +- shell.nix -I .envrc +- nix-shell -I nixpkgs=<provide local nix path> +- nix-shell -I nixpkgs=<provide local nix path> --pure +- shell.nix +- nix-shell shell.nix --pure + +- nix shell -c default.nix + +- nix run default.nix --print-build-logs +- nix run -I .envrc default.nix --print-build-logs + +- nix develop + +- nix-build -I nixpkgs=<provide local nix path> +- nix-build -I .envrc + +- nix build -f default.nix --print-build-logs +- nix build -f derivation.nix --print-build-logs +- nix build -I .envrc --print-build-logs +- nix shell -f default.nix --print-build-logs +- nix develop --build -f derivation.nix -I .envrc --print-build-logs + +- buildPhase + +- nix build -f default.nix && noti +- nix build -f default.nix && ./result/bin/spine -v && noti -t "spine build" -m "see ./result/bin/spine" +- nix develop --build -f derivation.nix -I .envrc --print-build-logs + + ./result/bin/spine +#+END_SRC + +**** shell parts (packages) +***** packages nix related + +#+NAME: shell_packages_nix_related +#+BEGIN_SRC nix +### nix_related +direnv +nixVersions.unstable #nixFlakes +nix-prefetch-git +validatePkgConfig +jq +git +ps +#+END_SRC + +***** packages d build related + +#+NAME: shell_packages_d_build_related +#+BEGIN_SRC nix +### d_build_related +## package manager +dub +## compiler +ldc +rund +## linker +#lld +#mold +## builder +#ninja +#meson +#+END_SRC + +***** packages tools + +#+NAME: shell_packages_tool_download +#+BEGIN_SRC nix +### tools +#curl +#wget +aria +#+END_SRC + +***** packages candy + +#+NAME: shell_packages_candy +#+BEGIN_SRC nix +### candy +starship +#+END_SRC + +***** packages search sqlite related + +#+NAME: shell_packages_search_related_sqlite +#+BEGIN_SRC nix +### sqlite search related +sqlite +#+END_SRC + +***** packages pdf latex related + +#+NAME: shell_packages_pdf_latex_related +#+BEGIN_SRC nix +### pdf_latex_related +source-sans-pro +source-serif-pro +source-code-pro +texlive.combined.scheme-full +#+END_SRC + +***** packages xml epub related + +#+NAME: shell_packages_xml_and_epub_related +#+BEGIN_SRC nix +### xml_and_epub_related +libxml2 +html-tidy +xmlstarlet +epubcheck +ebook_tools +epr +sigil +calibre #(suite includes: ebook-viewer) +foliate +#+END_SRC + +***** packages i18n_translation related + +#+NAME: shell_packages_i18n_translation +#+BEGIN_SRC nix +### i18n translation related +perl534Packages.Po4a +#+END_SRC + +*** default.nix :default: + +- default.nix -I nixpkgs=<provide local nix path> + e.g. default.nix -I nixpkgs=/srv/nix/nixpkgs + +- nix-build -I nixpkgs=<provide local nix path> + e.g. nix-build -I nixpkgs=<<nixpkgs_local>> + +#+HEADER: :noweb yes +#+BEGIN_SRC sh +nix-build -I nixpkgs=<<nixpkgs_local>> +nix-build -I .envrc-local +nix-build -I .envrc +default.nix -I .envrc +default.nix + +nix build -f default.nix --print-build-logs +nix build -f derivation.nix --print-build-logs +nix shell -f default.nix --print-build-logs +nix develop --build -f derivation.nix -I .envrc --print-build-logs + +# nix build -f project.nix +# nix build -f spine.nix +#+END_SRC + +#+HEADER: :tangle ../default.nix +#+HEADER: :tangle-mode (identity #o755) +#+HEADER: :shebang "#!/usr/bin/env -S nix-build" +#+BEGIN_SRC nix +{ pkgs ? import <nixpkgs> {} }: +pkgs.callPackage ./devenv.nix {} +#+END_SRC + +#+HEADER: :tangle-mode (identity #o755) +#+HEADER: :shebang "#!/usr/bin/env -S nix-build" +#+BEGIN_SRC nix +{ pkgs ? import <nixpkgs> {} }: +pkgs.callPackage ./derivation.nix {} +#+END_SRC + +*** devenv.nix :default:devenv: + +#+HEADER: :tangle ../devenv.nix +#+HEADER: :tangle-mode (identity #o755) +#+BEGIN_SRC nix +{ pkgs ? import <nixpkgs> { }, name ? "user-env" }: with pkgs; +buildEnv { + inherit name; + extraOutputsToInstall = [ "out" "man" "lib" ]; # to get all needed symlinks + paths = [ + #nix # if not on NixOS, this is needed + direnv + nixVersions.unstable #nixFlakes + nix-prefetch-git + validatePkgConfig + nix-tree jq nix-output-monitor + git + ps + ### d_build_related + dub + ## compiler + dmd + ldc + #gdc + #rund + ## linker + #lld + #mold + ## builder + #ninja + #meson + ### 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: + +#+HEADER: :tangle ../derivation.nix +#+HEADER: :tangle-mode (identity #o644) +#+HEADER: :noweb yes +#+BEGIN_SRC nix +{ pkgs ? import <nixpkgs> {}, + stdenv ? pkgs.stdenv, + lib ? pkgs.lib, + ldc ? null, + dcompiler ? pkgs.ldc, + 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" + ); + targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}"; + # remove reference to build tools and library sources + disallowedReferences = deps: [ dcompiler dub ]; + removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}''; + in { + mkDubDerivation = lib.makeOverridable ({ + src, + nativeBuildInputs ? [], + dubJSON ? src + "/dub.json", + passthru ? {}, + package ? lib.importJSON dubJSON, + ... + } @ attrs: stdenv.mkDerivation (attrs // { + pname = package.name; + nativeBuildInputs = [ dcompiler dub pkgs.removeReferencesTo ] ++ nativeBuildInputs; + disallowedReferences = disallowedReferences deps; + passthru = passthru // { + inherit dub dcompiler pkgs; + }; + src = lib.cleanSourceWith { + filter = filterDub; + src = lib.cleanSource src; + }; + preFixup = '' + find $out/share/cgi-bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true + ''; + buildPhase = '' + runHook preBuild + HOME="$PWD" + DFLAGS="-O2 -inline" + for DC_ in dmd ldmd2 gdmd; do + echo "- check for D compiler $DC_" + DC=$(type -P $DC_ || echo "") + if [ ! "$DC" == "" ]; then + break + fi + done + if [ "$DC" == "" ]; then + exit "Error: could not find D compiler" + fi + echo "$DC_ used as D compiler to build $pname" + dub build --compiler=$DC --build=release --combined --skip-registry=all + runHook postBuild + ''; + checkPhase = '' + runHook preCheck + HOME="$PWD" + dub test --combined --skip-registry=all + runHook postCheck + ''; + installPhase = '' + runHook preInstall + mkdir -p $out/share/cgi-bin + cp -r "${targetOf package}" $out/share/cgi-bin + install -m755 -D $out/share/cgi-bin/spine_search spine_search + runHook postInstall + ''; + postInstall = '' + echo "HERE ${targetOf package} $out/share/cgi-bin" + echo `ls -la $out/share/cgi-bin/spine_search` + ''; + meta = lib.optionalAttrs (package ? description) { + description = package.description; + } // attrs.meta or {}; + } // lib.optionalAttrs (!(attrs ? version)) { + name = package.name; # use name from dub.json, unless pname and version are specified + })); + } +); +mkDubDerivation rec { + name = "spine-search-${version}"; + #version = "<<spine_version_set>>"; + src = ./.; + buildInputs = [ + pkgs.sqlite ( + with pkgs; [ + nixVersions.unstable #nixFlakes + ## package manager + dub + ## compiler + ldc + rund + ## linker + #lld + #mold + ## builder + #ninja + sqlite + ] + ) + ]; + meta = with pkgs.lib; { + pname = "spine-search"; + version = "<<spine_version_set>>"; + homepage = "https://sisudoc.org"; + description = "cgi sqlite search form for document object search"; + longDescription = '' + a sisu like parser and document generator + ''; + homepage = "https://sisudoc.org"; + license = licenses.agpl3Plus; + platforms = platforms.linux; + maintainers = [ "RalphAmissah" ]; + }; +} +#+END_SRC + +- unused + - installPhase + +#+BEGIN_SRC txt +installPhase = '' + mkdir -p $out/bin + cp spine $out/bin + chmod +x $out/bin/spine +''; +#+END_SRC + +*** project meta + +#+NAME: nix_project_meta +#+HEADER: :noweb yes +#+BEGIN_SRC nix +meta = with pkgs.lib; { + pname = "spine"; + version = "<<spine_version_set>>"; + description = "a sisu like document parser"; + longDescription = '' + A sisu like parser and document generator + ''; + homepage = "https://sisudoc.org"; + license = licenses.agpl3Plus; + platforms = platforms.linux; + maintainers = [ "RalphAmissah" ]; +}; +#+END_SRC + +*** dub.selections.json + +#+HEADER: :NO-tangle ../dub.selections.json +#+BEGIN_SRC nix +{ + "fileVersion": 1, + "versions": { + "d2sqlite3": "0.19.1", + "dyaml": "0.8.3", + "imageformats": "7.0.2", + "tinyendian": "0.2.0" + } +} +#+END_SRC + +*** dub.selections.nix + +#+HEADER: :NO-tangle ../nix/dub.selections.nix +#+BEGIN_SRC nix +# This file was generated by https://github.com/lionello/dub2nix v0.2.3 +[ { + fetch = { + type = "git"; + url = "https://github.com/dlang-community/d2sqlite3.git"; + rev = "v0.19.1"; + sha256 = "0rnsgla6xyr8r34knf7v6dwhacra96q1b5rhxcz9246inwhvrk5k"; + fetchSubmodules = false; + date = "2020-07-21T12:32:51+02:00"; + deepClone = false; + leaveDotGit = false; + path = "/nix/store/hsi8xvl15w6fwlqvs042m1z5i88yc72i-d2sqlite3"; + }; +} { + fetch = { + type = "git"; + url = "https://github.com/kiith-sa/tinyendian.git"; + rev = "v0.2.0"; + sha256 = "086gf5aga52wr5rj2paq54daj8lafn980x77b706vvvqaz2mlis8"; + fetchSubmodules = false; + date = "2018-06-10T11:04:28+02:00"; + deepClone = false; + leaveDotGit = false; + path = "/nix/store/9c7fsmi5am84j6dq2mp3va306x3ay291-tinyendian"; + }; +} { + fetch = { + type = "git"; + url = "https://github.com/kiith-sa/D-YAML.git"; + rev = "v0.8.3"; + sha256 = "13wy304xjbwkpgg7ilql1lkxkm83s87jm59ffnrg26slp7cx149q"; + fetchSubmodules = false; + date = "2020-09-19T23:46:57+02:00"; + deepClone = false; + leaveDotGit = false; + path = "/nix/store/3i8i56lkmw2xq3lxr5h66v909waq2mqg-D-YAML"; + }; +} { + fetch = { + type = "git"; + url = "https://github.com/lgvz/imageformats.git"; + rev = "v7.0.2"; + sha256 = "1mfbsmi4fs1xny4zqs6jyr04d5f4h03r9f6jadvkdqj5kd1k0ws7"; + fetchSubmodules = false; + date = "2019-10-10T07:54:45+03:00"; + deepClone = false; + leaveDotGit = false; + path = "/nix/store/wn554pn21nzmpvw2hs7hvv9v9y0sgarg-imageformats"; + }; +} ] +#+END_SRC + +*** dub2nix & shared pkgs SHARED +**** dub2nix with pkgs shared + +#+NAME: nix_with_pkgs +#+HEADER: :noweb yes +#+BEGIN_SRC nix +with pkgs; [ + <<nix_shell_with_pkgs_list>> +] +#+END_SRC + +**** with pkgs list + +#+NAME: nix_shell_with_pkgs_list +#+BEGIN_SRC nix +nixVersions.unstable #nixFlakes +rund +dub +ldc +sqlite +nix-prefetch-git +validatePkgConfig +jq +git +#+END_SRC + +** variables +*** spine version SET VERSION :version:set:project: + +#+NAME: spine_version_set +#+BEGIN_SRC sh +0.12.0 +#+END_SRC + +*** set names SET + +#+NAME: spine_search_db +#+BEGIN_SRC sh +spine.search.db +#+END_SRC + +#+NAME: spine_search_cgi +#+BEGIN_SRC sh +spine_search +#+END_SRC + +*** nixpkgs_path SETUP +**** nixpkgs select path SELECT + +#+NAME: nixpkgs_path +#+HEADER: :noweb yes +#+BEGIN_SRC nix +<<nixpkgs_path_local>> +#+END_SRC + +**** nixpkgs path options + +- <nixpkgs> + +#+NAME: nixpkgs_path_default +#+HEADER: :noweb yes +#+BEGIN_SRC nix +<nixpkgs> +#+END_SRC + +#+NAME: nix_path_directory +#+HEADER: :noweb yes +#+BEGIN_SRC nix +nixpkgs=<<nixpkgs_path_local>> +#+END_SRC + +#+NAME: project_path_local_project +#+HEADER: :noweb yes +#+BEGIN_SRC nix +~/grotto/repo/git.repo/projects/project-spine/doc-reform +#+END_SRC + +#+NAME: project_path_local_src +#+HEADER: :noweb yes +#+BEGIN_SRC nix +<<project_path_local_project>>/src +#+END_SRC + +#+NAME: project_path_local_bin +#+HEADER: :noweb yes +#+BEGIN_SRC nix +<<project_path_local_project>>/result/bin +#+END_SRC + +#+NAME: project_path_cgi_bin +#+BEGIN_SRC nix +/var/www/cgi/cgi-bin +#+END_SRC + +#+NAME: project_path_local_doc +#+BEGIN_SRC nix +~/grotto/repo/git.repo/projects/project-spine/doc-reform-markup/spine-markup-samples +#+END_SRC + +#+NAME: project_path_local_out +#+BEGIN_SRC nix +/srv/www/spine/$SpineVER +#+END_SRC + +#+NAME: project_path_local_out_ +#+HEADER: :noweb yes +#+BEGIN_SRC nix +/tmp/spine/$SpineVER/www +#+END_SRC + +#+NAME: project_path_local_out_static +#+HEADER: :noweb yes +#+BEGIN_SRC nix +/srv/www/spine +#+END_SRC + +#+NAME: project_path_local_out_static_ +#+BEGIN_SRC nix +/var/www +#+END_SRC + +#+NAME: project_path_sqlite +#+BEGIN_SRC nix +/var/www/sqlite +#+END_SRC + +#+NAME: nixpkgs_url +#+BEGIN_SRC nix +github:nixos/nixpkgs +#+END_SRC + +#+HEADER: :noweb yes +#+BEGIN_SRC nix +<<nixpkgs_path_local>> +#+END_SRC + +- local path SET WARN + +#+NAME: nixpkgs_path_local +#+BEGIN_SRC nix +/srv/nix/nixpkgs +#+END_SRC + +**** project path options + +- local path SET WARN + +#+NAME: nix_path_channel +#+BEGIN_SRC nix +/nix/var/nix/profiles/per-user/root/channels/nixos +#+END_SRC + +** texlive xetex xelatex shell.nix +*** shell.nix :shell: + +#+BEGIN_SRC nix +#!/usr/bin/env -S nix-shell --pure +{ pkgs ? import <nixpkgs> {} }: +pkgs.mkShell { + buildInputs = with pkgs; [ + nixVersions.unstable #nixFlakes + nix-prefetch-git + validatePkgConfig + jq + git + fontconfig + source-sans-pro + source-serif-pro + source-code-pro + #(texlive.combine { + # inherit (texlive) scheme-tetex xetex fontspec footmisc multirow titlesec listings anysize float graphics helvetic times courier; + #}) + texlive.combined.scheme-full + dejavu_fonts dejavu_fontsEnv + liberation_ttf + evince + zathura + apvlv + ]; + #FONTCONFIG_FILE = makeFontsConf { fontDirectories = [ + # liberation_ttf + #]; + shellHook = '' + if [[ -f ".envrc" ]]; then + source .envrc + fi + #for texfile in *.tex; do xelatex -interaction=nonstopmode $texfile; done + #for texfile in *.tex; do xelatex -interaction=batchmode $texfile; done + ''; +} +#+END_SRC + +*** notes + +#+BEGIN_SRC sh +nix-shell --run 'which xetex' +echo 'for texfile in *.tex; do echo "* --> " ~ $texfile && xelatex -interaction=batchmode $texfile; rm *.aux *.log *.toc *.out; done' + +$SpineBIN/spine --latex --serial --output="$SpineOUT" $SpinePOD/* && for texfile in $SpineOUT/latex/*.tex; do xelatex -interaction=nonstopmode $texfile; done 2>&1 | tee _err.xelatex_.org; ls $SpineOUT/latex/*.{tex,pdf} + +/run/current-system/sw/share/X11/fonts/ + +kpsewhich pdftexconfig.tex +/nix/store/2r4qa8rbll085nmpx56jg1rbmbir1zkp-texlive-combined-2021/share/texmf/tex/generic/tex-ini-files/pdftexconfig.tex +/nix/store/2r4qa8rbll085nmpx56jg1rbmbir1zkp-texlive-combined-2021/share/texmf/fonts/opentype/public/ + +find: texclive-fonts.conf +fc-cache && mkfontscale && mkfontdir + +fc-match LiberationSans + +cd /nix/var/nix/profiles/system/sw/share/X11/fonts +fc-query LiberationSans-Regular.ttf | grep '^\s\+family:' | cut -d'"' -f2 +Liberation Sans +fc-query LiberationMono-Regular.ttf | grep '^\s\+family:' | cut -d'"' -f2 +Liberation Mono + +fc-query DejaVuSans.ttf | grep '^\s\+family:' | cut -d'"' -f2 + +$XDG_DATA_HOME/fonts +~/.local/share/fonts +#+END_SRC |