#!/usr/bin/env -S nix-shell --pure #!nix-shell -i bash # 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 {}, 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 { name = "spine base dev shell"; packages = [ # ❯❯❯ spine binary built from ./package.nix spine # ❯❯❯ d_build_related ldc #dmd dub # ❯❯❯ dev gnumake git # ❯❯❯ nix_related direnv nix-direnv nix-prefetch-git nix-output-monitor nix-tree jq # ❯❯❯ sqlite search related sqlite # ❯❯❯ xml_and_epub_related # libxml2 # html-tidy # xmlstarlet # epubcheck # ebook_tools # epr # sigil # 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 ]; shellHook = '' 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 ''; }