diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2026-04-11 01:04:08 +0000 |
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2026-04-11 01:18:49 +0000 |
| commit | 0abf018794e7d32e5b9f670b9458033aa38c04e1 (patch) | |
| tree | 323268c1c195a7a24032a31b1934bff1a335f2f4 /org | |
| parent | flake.nix dmd build fix overlay: revert to GCC14 (diff) | |
nix keeping: nix-shell, nix-build derivation.nix
Diffstat (limited to 'org')
| -rw-r--r-- | org/config_misc.org | 2 | ||||
| -rw-r--r-- | org/config_nix.org | 230 |
2 files changed, 130 insertions, 102 deletions
diff --git a/org/config_misc.org b/org/config_misc.org index 24eda02..675ac75 100644 --- a/org/config_misc.org +++ b/org/config_misc.org @@ -23,7 +23,7 @@ babel tangle) org files in ./org/ to create .d source files in ./src/sisudoc/ (similar functionality is contained within the "makefile" created by this "dr_build_scaffold.org" file make tangle) -#+HEADER: :tangle ../tangle +#+HEADER: :tangle-NO ../tangle #+HEADER: :tangle-mode (identity #o755) #+HEADER: :shebang "#!/bin/sh" #+BEGIN_SRC shell diff --git a/org/config_nix.org b/org/config_nix.org index eba0917..a7206e2 100644 --- a/org/config_nix.org +++ b/org/config_nix.org @@ -162,7 +162,8 @@ pkgs-ovl = pkgsForSystem system; pkgs-nix = nixpkgsFor.${system}; in { - default = import ./shell.nix {inherit pkgs-nix;}; + default = self.devShells.${system}.dsh-overlay; + #default = import ./shell.nix {pkgs = pkgs-nix; flake = self;}; dsh-overlay = mkDevShell { pkgs = pkgs-ovl; # "spine-<<spine_version>> base dev shell, ldc-<<ldc_version>>, dub-<<dub_version>> - dtools-<<dtools_version>>"; @@ -260,45 +261,44 @@ #+HEADER: :shebang "#!/usr/bin/env -S nix-shell --pure\n#!nix-shell -i bash" #+HEADER: :noweb yes #+BEGIN_SRC nix -{pkgs-nix ? import <nixpkgs> {}}: -with pkgs-nix; +# Development environment for sisudoc-spine. +# Builds the spine binary via ./package.nix and puts it on PATH. +# +# Build logic for the spine derivation lives in ./package.nix +# this file only describes the dev shell. +# +# Usage: +# nix-shell # enters shell, builds spine +# nix-shell --run 'spine --version' # runs spine after build +{ + pkgs ? import <nixpkgs> {}, + spine ? pkgs.callPackage ./package.nix {}, + # captured at eval time - nix-shell rewrites $SHELL at runtime, + # so we must remember the user's real login shell here. + userShell ? builtins.getEnv "SHELL", +}: +with pkgs; mkShell { - buildInputs = [ + name = "spine base dev shell"; + packages = [ + # ❯❯❯ spine binary built from ./package.nix + spine + # ❯❯❯ d_build_related + ldc + #dmd + dub + # ❯❯❯ dev + gnumake + git # ❯❯❯ nix_related - #nix direnv nix-direnv - nixVersions.latest #nixVersions.latest #nixVersions.git nix-prefetch-git - validatePkgConfig nix-output-monitor nix-tree - jq #gx - #nixfmt-rfc-style - git - # ❯❯❯ dev - gnumake - #ps - # ❯❯❯ d_build_related - # ❯❯ package manager - #dub - # ❯❯ compiler - #dmd - #ldc - #rund - # ❯❯ linker - #lld - #mold - # ❯❯ builder - #ninja - #meson + jq # ❯❯❯ sqlite search related - #sqlite - # ❯❯❯ pdf_latex_related - # source-sans-pro - # source-serif-pro - # source-code-pro - # texlive.combined.scheme-full + sqlite # ❯❯❯ xml_and_epub_related # libxml2 # html-tidy @@ -310,93 +310,121 @@ with pkgs-nix; # calibre #(suite includes: ebook-viewer) # koreader # foliate + # ❯❯❯ pdf reader + # evince + # ❯❯❯ pdf_latex_related + # source-sans-pro + # source-serif-pro + # source-code-pro + # texlive.combined.scheme-full # ❯❯❯ i18n translation related # perlPackages.Po4a - # ❯❯❯ dev - # openssl_3_3 ]; shellHook = '' - echo '❯❯ nix build'; - SpineGitVer=`git describe | sed "s/^[a-z_-]\+\([0-9.]\+\)/\1/" | sed "s/\([^-]*-g\)/r\1/" | sed "s/-/./g"` && \ - SpineGitBranch=`git branch --show-current` && \ - echo "❯❯ spine - ($SpineGitBranch: $SpineGitVer)" - echo '❯❯ $SpineBIN -v --source --pod --text --epub --html --html-link-pdf --html-link-curate --html-link-markup --curate --output=$SpineOUT $SpinePOD/*'; - echo "❯❯ $SpineBIN -v --source --pod --text --epub --html --html-link-pdf --html-link-curate --html-link-markup --curate --output=$SpineOUT $SpinePOD/*"; - echo '❯❯ nix flake update && nix flake check && nix flake show'; + export DFLAGS="-O2 -boundscheck=on" + export Date=$(date "+%Y%m%d") + ## set local values in .envrc-local (or here if you must) + echo "spine: $(command -v spine)" + ## hand off to the user's login shell (e.g. zsh) only when this is + ## an interactive nix-shell entry - not under `nix-shell --run` or + ## `--command`, where exec would swallow the command. Guard env var + ## prevents re-entry loops. + __spine_user_shell=${if userShell == "" then "" else "\"" + userShell + "\""} + if [ -z "$__SPINE_SHELL_HANDOFF" ] \ + && [ -n "$__spine_user_shell" ] \ + && [ "$(basename "$__spine_user_shell")" != "bash" ] \ + && [[ $- == *i* ]]; then + export __SPINE_SHELL_HANDOFF=1 + spine --version + exec "$__spine_user_shell" + fi + unset __spine_user_shell + spine --version ''; } #+END_SRC -** default.nix :default: - -#+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 - -* devEnv -** devenv.nix :default:devenv: +** package.nix :default: -#+HEADER: :tangle ../devenv.nix +#+HEADER: :tangle ../package.nix #+HEADER: :tangle-mode (identity #o644) +#+HEADER: :noweb yes #+BEGIN_SRC nix +# package.nix - spine derivation (build logic) +# +# Standalone, callPackage-style derivation for the spine binary. Used by +# shell.nix to put a freshly-built spine on PATH inside the dev shell. +# May also be consumed via: +# nix-build ./package.nix +# pkgs.callPackage ./package.nix {} +# +# Compiler defaults to ldc/ldmd2 (matching the flake's default package +# `spine-nixpkgs-ldc`). Override to build with dmd: +# pkgs.callPackage ./package.nix { +# compilerPkg = pkgs.dmd; +# compilerBin = "dmd"; +# buildType = "dmd"; +# } { - pkgs ? import <nixpkgs> {}, - name ? "user-env", + lib, + stdenv, + dub, + ldc, + gnumake, + sqlite, + compilerPkg ? ldc, + compilerBin ? "ldmd2", + buildType ? "ldmd2", + rev ? "unknown", }: -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 - nix-direnv - nixVersions.latest #nixVersions.latest #nixVersions.git - nix-prefetch-git - validatePkgConfig - nix-output-monitor - nix-tree - jq #gx - #nixfmt-rfc-style - git - # ❯❯❯ dev - gnumake - ps - dtools - # ❯❯❯ 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; - }) - ]; - } +stdenv.mkDerivation { + pname = "spine"; + version = "<<spine_version>>"; + src = lib.cleanSource ./.; + buildInputs = [ sqlite ]; + nativeBuildInputs = [ dub compilerPkg gnumake ]; + preBuild = '' + export HOME=$TMPDIR + ''; + buildPhase = '' + runHook preBuild + buildCMD="dub run --cache=local --compiler=$(type -P ${compilerBin}) --build=${buildType} --combined --skip-registry=all" + echo $buildCMD + $buildCMD + runHook postBuild + ''; + 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` + echo "❯❯ spine-v0.18.0 (rev: ${rev})" + $out/bin/spine -v + ''; + meta = { + description = "A sisu like parser & document generator"; + longDescription = "a sisu like parser & document generator"; + homepage = "https://sisudoc.org"; + license = lib.licenses.agpl3Plus; + platforms = lib.platforms.linux; + mainProgram = "spine"; + }; +} #+END_SRC ** derivation.nix :default: #+HEADER: :tangle ../derivation.nix -#+HEADER: :tangle-mode (identity #o644) +#+HEADER: :tangle-mode (identity #o755) +#+HEADER: :shebang "#!/usr/bin/env -S nix-build derivation.nix" #+HEADER: :noweb yes #+BEGIN_SRC nix { |
