aboutsummaryrefslogtreecommitdiffhomepage
path: root/org
diff options
context:
space:
mode:
authorRalph Amissah <ralph.amissah@gmail.com>2026-04-11 01:04:08 +0000
committerRalph Amissah <ralph.amissah@gmail.com>2026-04-11 01:18:49 +0000
commit0abf018794e7d32e5b9f670b9458033aa38c04e1 (patch)
tree323268c1c195a7a24032a31b1934bff1a335f2f4 /org
parentflake.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.org2
-rw-r--r--org/config_nix.org230
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
{