diff options
Diffstat (limited to 'org/config_nix.org')
| -rw-r--r-- | org/config_nix.org | 699 |
1 files changed, 318 insertions, 381 deletions
diff --git a/org/config_nix.org b/org/config_nix.org index 8dbfd4e0..b7085e73 100644 --- a/org/config_nix.org +++ b/org/config_nix.org @@ -1,10 +1,10 @@ -*- mode: org -*- #+TITLE: configuration nix -#+DESCRIPTION: makefile for spine +#+DESCRIPTION: configuration nix #+FILETAGS: :sisu:build:tools: #+AUTHOR: Ralph Amissah #+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]] -#+COPYRIGHT: Copyright (C) 2015 - 2023 Ralph Amissah +#+COPYRIGHT: Copyright (C) 2015 - 2025 Ralph Amissah #+LANGUAGE: en #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code @@ -15,429 +15,357 @@ #+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 - -- 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 . -#use flake .#default -NIX_ENFORCE_PURITY=1 -NixDirEnvVersion="2.2.1" -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-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs=" -fi -watch_file flake.lock -watch_file flake.nix -if [ -f .envrc-local ]; then - source_env_if_exists .envrc-local || source .envrc-local -fi -PATH_add result/bin -#nix flake update && nix flake check --show-trace && nix flake show -#+END_SRC - -*** .envrc-local CHECK MODIFY - -- bespoke modify appropriately and generate if needed - -#+HEADER: :tangle ../.envrc-local_ -#+HEADER: :noweb yes -#+BEGIN_SRC sh -export NIX_PATH=/nix/var/nix/profiles/per-user/root/channels/nixos -#export NIX_PATH=nixpkgs=/nixpkgs-ra/nixpkgs -## reload when these files change -use flake -watch_file flake.nix -#eval "$(nix print-dev-env)" -export sisuVER=$(git describe --long --tags | sed 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g') -#export sisuBIN=bin -export sisuSRC=~/grotto/repo/git.repo/projects/project-sisu/sisu -export sisuDOC=~/grotto/repo/git.repo/projects/project-sisu/susu-markup/sisu-markup-samples/data/samples/current -export sisuOUT=/var/www -export sisuOUTver=/tmp/sisu/$sisuVER/www -export RUBYLIB+=`pwd`/lib -#+END_SRC - -** flake :flake: -*** flake -**** flake.nix +* sisu +** flake.nix :flake: #+HEADER: :tangle ../flake.nix #+HEADER: :noweb yes #+BEGIN_SRC nix { - description = "sisu parser & document generator"; - 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 } @inputs: - let - pname = "sisu"; - version = "<<sisu_version_set>>"; - shell = ./shell.nix; # ./default.nix; - devEnv = ./.envrc; # ./shell.nix; # ./default.nix; - supportedSystems = [ "x86_64-linux" ]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; - forAllSystems = nixpkgs.lib.genAttrs supportedSystems; - nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); # nixpkgs instantiated for supported system types. - checkPhase = '' - runHook preCheck - runHook postCheck - ''; - preInstall = '' - mkdir -p $out/lib - mkdir -p $out/bin - ''; - installPhase = '' - runHook preInstall - mkdir -p $out/lib - mkdir -p $out/setup - mkdir -p $out/data - mkdir -p $out/bin - #cp ./lib/sisu.rb $out/lib/sisu.rb - cp -R ./lib/* $out/lib/. - cp -R ./data/* $out/data/. - cp -R ./setup/* $out/setup/. - ln -s $out/setup/sisu_version.rb $out/version - install -m755 ./bin/sisu $out/bin/sisu - runHook postInstall - ''; - postInstall = '' - # echo `ls -la $out/bin/sisu` - ## $out/bin/sisu -v - ''; - in { - packages = forAllSystems (system: - let pkgs = nixpkgsFor.${system}; - in with pkgs; { - default = stdenv.mkDerivation { - inherit pname; - inherit version; - meta.mainProgram = "sisu"; - executable = true; - src = self; - inherit shell; - inherit devEnv; - buildInputs = [ - ruby_3_1 - rubyPackages_3_1.rake - rubyPackages_3_1.sqlite3 - rubyPackages_3_1.thor - #ruby_2_7 - #rubyPackages_2_7.rake - #rubyPackages_2_7.sqlite3 - #rubyPackages_2_7.thor - sqlite - unzip - xz - zip - openssl - nixFlakes - validatePkgConfig - jq - git - sqlite - ]; - buildPhase = '' - ''; - inherit checkPhase; - inherit installPhase; - inherit postInstall; - }; - #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; - }); - apps = forAllSystems (system: { - default = { - type = "app"; - program = "${self.packages.${system}.default}/bin/sisu"; + description = "sisu parser & document generator"; + inputs.nixpkgs.url = "<<nixpkgs_url>>"; + outputs = { + self, + nixpkgs, + } @ inputs: let + pname = "sisu"; + version = "<<sisu_project_version>>"; + shell = ./shell.nix; # ./default.nix; + devEnv = ./.envrc; # ./.envrc; # ./shell.nix; # ./default.nix; + supportedSystems = [ "x86_64-linux" ]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; + forAllSystems = nixpkgs.lib.genAttrs supportedSystems; + nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); # nixpkgs instantiated for supported system types + checkPhase = '' + runHook preCheck + runHook postCheck + ''; + preInstall = ""; + installPhase = '' + runHook preInstall + mkdir -p $out/lib + mkdir -p $out/setup + mkdir -p $out/data + mkdir -p $out/bin + cp -R ./lib/* $out/lib/. + cp -R ./data/* $out/data/. + cp -R ./setup/* $out/setup/. + ln -s $out/setup/sisu_version.rb $out/version + install -m755 ./bin/sisu $out/bin/sisu + runHook postInstall + ''; + postInstall = ""; + in { + packages = forAllSystems (system: let + pkgs = nixpkgsFor.${system}; + in + with pkgs; { + default = stdenv.mkDerivation { + inherit pname; + inherit version; + meta.mainProgram = "sisu"; + executable = true; + src = self; + inherit shell; + inherit devEnv; + buildPhase = ""; + inherit checkPhase; + inherit installPhase; + inherit postInstall; }; + #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; }); - devShells = forAllSystems (system: - let - pkgs = nixpkgsFor.${system}; - shellHook = '' - export Date=`date "+%Y%m%d"` - export sisuver=$(git describe --long --tags | sed 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g') - ### set local values in .envrc-local (or modify here if you must) - # export sisuPROJ=~/grotto/repo/git.repo/projects/doc-reform/code/software/sisu - # export sisuDOC=~/grotto/repo/git.repo/projects/project-sisu/doc-reform-markup/sisu-markup-samples - # export sisuSRC=~/grotto/repo/git.repo/projects/project-sisu/sisu - # export sisuDOC=~/grotto/repo/git.repo/projects/project-sisu/susu-markup/sisu-markup-samples/data/samples/current - # export sisuOUT=/srv/www/sisu - # export sisuOUTver=/srv/www/sisu/$sisuVER/www - # export sisu=/srv/www/sisu - # export sisu=/var/www/sqlite - # export sisu=/srv/www/sisu/sqlite - export sisu=$sisuPROJ/src - export sisu=$sisuPROJ/result/lib - export sisu=$sisuDOC/markup/pod - export sisu=$sisuOUT/$sisuVER - export sisu='http://localhost/sisu_search' - # export sisuSearchActionRemote='https://sisudoc.org/sisu_search' - export sisuCGIform='sisu_search' - export sisuSQLdb='sisusearch.db' - export PROG_VER_GIT="`git describe --long --tags | sed -e 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g'`" - export PROG_VER_DECLARED="`cat ./views/version.txt | grep --color=never "enum" | sed 's/.\+(\([0-9]\+\),[ \t]\+\([0-9]\+\),[ \t]\+\([0-9]\+\)[ \t]*).\+/\1.\2.\3/g'`" - export sisuNixHelp="cat ./.env/nix-commands" - export sisuTest="nix shell .#default --print-build-logs --command sisu --very-verbose --epub --html --html-link-search --html-link-curate --curate --output=\"\$sisuOUT\" $sisuPOD/*" - export sisuHtml="sisu --very-verbose --html --html-link-search --html-link-curate --curate --sqlite-update --sqlite-db-filename=\"sisu.search.db\" --cgi-sqlite-search-filename=\"sisu_search\" --sqlite-db-path=\"\$sisuDBpath\" --output=\"\$sisuOUT\" $sisuPOD/*" - export sisuEpub="sisu --very-verbose --epub --output=\"\$sisuOUT\" $sisuPOD/*" - export sisuLatex="sisu --very-verbose --latex --output=\"\$sisuOUT\" $sisuPOD/*" - export sisuPdf="sisu --very-verbose --pdf --output=\"\$sisuOUT\" $sisuPOD/*" - export sisuSqliteCreateDB="sisu --very-verbose --sqlite-db-recreate --sqlite-db-path=\"$sisuDBpath\" --sqlite-db-filename=\"sisu.search.db\"" - export sisuSqlite="sisu --very-verbose --sqlite-discrete --sqlite-db-path=\"$sisuDBpath\" --sqlite-db-filename=\"sisu.search.db\" --output=\"\$sisuOUT\" $sisuPOD/*" - #export sisuSqlite="sisu --very-verbose --sqlite-update --sqlite-db-path=\"$sisuDBpath\" --sqlite-db-filename=\"sisu.search.db\" --output=\"\$sisuOUT\" $sisuPOD/*" - ''; - in with pkgs; { - devShell = mkShell { - name = "sisu dev shell default"; - inherit shell; - inherit devEnv; - packages = [ sqlite ]; - inherit shellHook; - }; - devShell-epub = mkShell { - name = "sisu dev shell for epub output"; - inherit shell; - inherit devEnv; - packages = [ - ruby_3_1 - rubyPackages_3_1.rake - rubyPackages_3_1.sqlite3 - rubyPackages_3_1.thor - sqlite - zip - unzip - xz - libxml2 - html-tidy - xmlstarlet - epubcheck - ebook_tools - libxml2 - html-tidy - xmlstarlet - epubcheck - ebook_tools - epr - sigil - calibre #(suite includes: ebook-viewer) - foliate - #devenv - nixFlakes - validatePkgConfig - jq - git - ]; - inherit shellHook; - }; - devShell-html = mkShell { - name = "sisu dev shell for latex & pdf output"; - inherit shell; - inherit devEnv; - packages = [ - ruby_3_1 - rubyPackages_3_1.rake - rubyPackages_3_1.sqlite3 - rubyPackages_3_1.thor - sqlite - zip - unzip - xz - #devenv - nixFlakes - validatePkgConfig - jq - git - ]; - inherit shellHook; - }; - devShell-latex-pdf = mkShell { - name = "sisu dev shell for latex & pdf output"; - inherit shell; - inherit devEnv; - packages = [ - ruby_3_1 - rubyPackages_3_1.rake - rubyPackages_3_1.sqlite3 - rubyPackages_3_1.thor - sqlite - zip - unzip - xz - source-sans-pro - source-serif-pro - source-code-pro - texlive.combined.scheme-full - #devenv - nixFlakes - validatePkgConfig - jq - git - ]; - inherit shellHook; - }; - devShell-sqlite = mkShell { - name = "sisu dev shell for latex & pdf output"; - inherit shell; - inherit devEnv; - packages = [ - ruby_3_1 - rubyPackages_3_1.rake - rubyPackages_3_1.sqlite3 - rubyPackages_3_1.thor - sqlite - zip - unzip - xz - #devenv - nixFlakes - validatePkgConfig - jq - git - ]; - inherit shellHook; - }; - devShell-i18n = mkShell { - name = "sisu dev shell internationalization, po4a"; - inherit shell; - inherit devEnv; - packages = [ - ruby_3_1 - rubyPackages_3_1.rake - rubyPackages_3_1.sqlite3 - rubyPackages_3_1.thor - sqlite - perl534Packages.Po4a - #devenv - nixFlakes - validatePkgConfig - jq - git - ]; - inherit shellHook; - }; - }); + apps = forAllSystems (system: { + default = { + type = "app"; + program = "${self.packages.${system}.default}/bin/sisu"; + }; + }); + devShells = forAllSystems (system: let + pkgs = nixpkgsFor.${system}; + shellHook = '' + #${pkgs.nix}/bin/nix build ".#" --print-build-logs; + nix build ".#" --print-build-logs; + echo "" + sisu -v + ''; + in + with pkgs; { + default = mkShell { + name = "sisu dev base shell"; + inherit shell; + inherit devEnv; + packages = [ + <<ruby_current>> + sqlite + jq + git + ]; + inherit shellHook; + }; + rsh-epub = mkShell { + name = "sisu dev shell for epub output"; + inherit shell; + inherit devEnv; + packages = [ + <<ruby_current>> + sqlite + graphicsmagick + zip + unzip + xz + libxml2 + html-tidy + xmlstarlet + epubcheck + ebook_tools + libxml2 + html-tidy + xmlstarlet + epubcheck + ebook_tools + epr + sigil + calibre #(suite includes: ebook-viewer) + foliate + validatePkgConfig + jq + #git + ]; + inherit shellHook; + }; + rsh-html = mkShell { + name = "sisu dev shell for html output"; + inherit shell; + inherit devEnv; + packages = [ + <<ruby_current>> + sqlite + graphicsmagick + zip + unzip + xz + validatePkgConfig + jq + #git + ]; + inherit shellHook; + }; + rsh-latex-pdf = mkShell { + name = "sisu dev shell for latex & pdf output"; + inherit shell; + inherit devEnv; + packages = [ + <<ruby_current>> + sqlite + graphicsmagick + zip + unzip + xz + source-sans-pro + source-serif-pro + source-code-pro + texlive.combined.scheme-full + # texliveFull # texliveTeTeX + noto-fonts + noto-fonts-cjk-sans + takao + validatePkgConfig + jq + #git + ]; + inherit shellHook; + }; + rsh-comprehensive-shell = mkShell { + name = "comprehensive sisu dev shell (for epub & latex & pdf output)"; + inherit shell; + inherit devEnv; + packages = [ + ruby + rubyPackages.rake + rubyPackages.sqlite3 + rubyPackages.thor + sqlite + graphicsmagick + zip + unzip + xz + openssl + libxml2 + html-tidy + xmlstarlet + epubcheck + ebook_tools + libxml2 + html-tidy + xmlstarlet + epubcheck + ebook_tools + epr + sigil + calibre #(suite includes: ebook-viewer) + foliate + validatePkgConfig + jq + source-sans-pro + source-serif-pro + source-code-pro + texlive.combined.scheme-full + # texliveFull # texliveTeTeX + noto-fonts + noto-fonts-cjk-sans + takao + validatePkgConfig + jq + git + ]; + inherit shellHook; + }; + rsh-sqlite = mkShell { + name = "sisu dev shell for sqlite3 output"; + inherit shell; + inherit devEnv; + packages = [ + <<ruby_current>> + sqlite + graphicsmagick + zip + unzip + xz + validatePkgConfig + jq + #git + ]; + inherit shellHook; + }; + rsh-i18n = mkShell { + name = "sisu dev shell internationalization, po4a"; + inherit shell; + inherit devEnv; + packages = [ + <<ruby_current>> + sqlite + graphicsmagick + perl538Packages.Po4a + validatePkgConfig + jq + #git + ]; + inherit shellHook; + }; + #default = import ./shell.nix { inherit pkgs; }; + }); }; } #+END_SRC -** shell.nix TODO +** shell.nix :shell: +*** tangle #+HEADER: :tangle ../shell.nix -#+HEADER: :shebang #!/usr/bin/env -S nix-shell --pure #+HEADER: :tangle-mode (identity #o755) +#+HEADER: :shebang "#!/usr/bin/env -S nix-shell --impure\n#!nix-shell -i bash" #+BEGIN_SRC nix { pkgs ? import <nixpkgs> {} }: with pkgs; -mkShell { - buildInputs = [ - <<ruby_current>> - <<packages_project_relevant>> - <<packages_build>> - <<packages_extra>> - ]; - shellHook = '' - if [[ -e ".envrc" ]]; then - source .envrc - fi - eval "$(starship init bash)" - ''; -} + mkShell { + buildInputs = [ + <<ruby_current>> + <<packages_project_relevant>> + <<packages_build>> + <<packages_extra>> + ]; + shellHook = '' + ''; + } #+END_SRC -** packages.nix -*** default +** shared parts +*** nixpkgs url -#+HEADER: :NO-tangle ../packages.nix +#+NAME: nixpkgs_url #+BEGIN_SRC nix -{ pkgs ? import <nixpkgs> {} }: -with pkgs; [ - <<ruby_current>> - <<packages_project_relevant>> - <<packages_build>> -] +github:NixOS/nixpkgs/nixpkgs-unstable #+END_SRC -*** ruby 3.1 +*** ruby versions +**** ruby package selection +***** ruby next -#+HEADER: :tangle ../nix/pkglst/packages_ruby_3_1.nix +#+NAME: ruby_next #+BEGIN_SRC nix -{ pkgs ? import <nixpkgs> {} }: -with pkgs; [ - <<ruby_version_3_1>> - <<packages_project_relevant>> - <<packages_build>> -] +ruby<<ruby_version_next>> +rubyPackages<<ruby_version_next>>.rake +rubyPackages<<ruby_version_next>>.sqlite3 +rubyPackages<<ruby_version_next>>.thor #+END_SRC -*** ruby 3.0 +***** ruby current -#+HEADER: :tangle ../nix/pkglst/packages_ruby_3_0.nix +#+NAME: ruby_current #+BEGIN_SRC nix -{ pkgs ? import <nixpkgs> {} }: -with pkgs; [ - <<ruby_version_3_0>> - <<packages_project_relevant>> - <<packages_build>> -] +ruby<<ruby_version_current>> +rubyPackages<<ruby_version_current>>.rake +rubyPackages<<ruby_version_current>>.sqlite3 +rubyPackages<<ruby_version_current>>.thor #+END_SRC -*** ruby legacy +***** ruby legacy #+NAME: ruby_legacy #+BEGIN_SRC nix -<<ruby_version_3_0>> +ruby<<ruby_version_legacy>> +rubyPackages<<ruby_version_legacy>>.rake +rubyPackages<<ruby_version_legacy>>.sqlite3 +rubyPackages<<ruby_version_legacy>>.thor #+END_SRC -*** ruby current +**** SET ruby nix package versions (current, next) +***** SET ruby version next -#+NAME: ruby_current +#+NAME: ruby_version_next #+BEGIN_SRC nix -<<ruby_version_3_1>> +_3_4 #+END_SRC -*** ruby next +***** SET ruby version current -#+NAME: ruby_next +- default to current nix version, which is ruby 3.3 but not provided as a fixed lable/tag, so leave blank and will + follow nix current nix + +#+NAME: ruby_version_current +#+BEGIN_SRC nix +#+END_SRC + +***** SET ruby version legacy + +#+NAME: ruby_version_legacy #+BEGIN_SRC nix -<<ruby_version_3_1>> +_3_2 #+END_SRC -*** ruby 3.0 - ruby_version_3_0 +**** ruby fixed versions +***** ruby 3.4 - ruby_version_3_4 -#+NAME: ruby_version_3_0 +#+NAME: ruby_version_3_4 #+BEGIN_SRC nix -ruby_3_0 -rubyPackages_3_0.rake -rubyPackages_3_0.sqlite3 -rubyPackages_3_0.thor +ruby_3_4 +rubyPackages_3_4.rake +rubyPackages_3_4.sqlite3 +rubyPackages_3_4.thor #+END_SRC -*** ruby 3.1 - ruby_version_3_1 +***** ruby 3.2 - ruby_version_3_2 -#+NAME: ruby_version_3_1 +#+NAME: ruby_version_3_2 #+BEGIN_SRC nix -ruby_3_1 -rubyPackages_3_1.rake -rubyPackages_3_1.sqlite3 -rubyPackages_3_1.thor +ruby_3_2 +rubyPackages_3_2.rake +rubyPackages_3_2.sqlite3 +rubyPackages_3_2.thor #+END_SRC -*** nix related packages +*** packages.nix +**** nix related packages #+NAME: nix_packages #+BEGIN_SRC nix @@ -446,37 +374,46 @@ bundler bundix #+END_SRC -*** project relevant packages +**** project relevant packages #+NAME: packages_project_relevant #+BEGIN_SRC nix sqlite +graphicsmagick unzip xz zip openssl -#texlive-combined-full +#texliveFull # texliveTeTeX #+END_SRC -*** project misc build packages +**** project misc build packages #+NAME: packages_build #+BEGIN_SRC nix nixFlakes validatePkgConfig +nix-output-monitor +nix-tree jq git #+END_SRC #+NAME: packages_extra #+BEGIN_SRC nix -starship +#starship #+END_SRC -** variables -** spine version SET VERSION :version:set:project: +*** sisu version SET VERSION :version:set:project: -#+NAME: sisu_version_set +#+NAME: sisu_project_version +#+BEGIN_SRC emacs-lisp +<<./sisu_version_info_and_doc_header_including_copyright_and_license.org:sisu_project_version()>> +#+END_SRC + +* nix :nix: + +#+NAME: nixpkgs_local #+BEGIN_SRC sh -0.7.3 +/srv/nix/nixpkgs #+END_SRC |
