summaryrefslogtreecommitdiffhomepage
path: root/org/config_nix.org
diff options
context:
space:
mode:
Diffstat (limited to 'org/config_nix.org')
-rw-r--r--org/config_nix.org509
1 files changed, 240 insertions, 269 deletions
diff --git a/org/config_nix.org b/org/config_nix.org
index b371dab..630d972 100644
--- a/org/config_nix.org
+++ b/org/config_nix.org
@@ -24,35 +24,28 @@
{
description = "a sisu like document parser search form";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
- #inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.spine-d-overlay = {
url = "<<sisudoc_dlang_nix_overlay_src>>";
inputs.nixpkgs.follows = "nixpkgs";
- flake = true;
};
outputs = {
self,
nixpkgs,
- #flake-utils,
spine-d-overlay,
...
}@inputs: let
pname = "spine_search";
version = "<<spine_version>>";
- shell = ./shell.nix;
- devEnv = ./nixDevEnv.sh;
+ #shell = ./shell.nix;
+ #devEnv = ./nixDevEnv.sh;
supportedSystems = ["x86_64-linux"];
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;}); # nixpkgs instantiated for supported system types
- checkPhase = ''
- runHook preCheck
- dub test --combined --skip-registry=all
- runHook postCheck
- '';
localOverlay = (final: prev: {
- ldc = prev.callPackage ./nix-overlays/ldc { };
- dmd = prev.callPackage ./nix-overlays/dmd { };
- dub = prev.callPackage ./nix-overlays/dub { };
+ ldc = prev.callPackage ./nix-overlays/ldc { }; # -> ok <<ldc_version>>
+ # dmd overlay: revert to GCC14; (current) GCC 15 introduced nullptr in its headers, and DMD's ImportC parser needs update to handle it, monitor and update:
+ dmd = prev.callPackage ./nix-overlays/dmd { stdenv = prev.gcc14Stdenv; }; # -> ok <<dmd_version>>
+ dub = prev.callPackage ./nix-overlays/dub { }; # -> ? <<dub_version>>
#gdc = prev.callPackage ./nix-overlays/gdc { };
});
pkgsForSystem = system: import nixpkgs {
@@ -64,165 +57,79 @@
preBuild = ''
export HOME=$(pwd)
'';
+ checkPhase = ''
+ runHook preCheck
+ 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
+ mkdir -p $out/cgi-bin
+ install -m755 -D ./cgi-bin/spine_search $out/cgi-bin/spine_search
runHook postInstall
'';
postInstall = ''
- echo `ls -la $out/share/cgi-bin/spine_search`
+ echo `ls -la $out/cgi-bin/spine_search`
'';
+ # Helper to reduce duplication across build variants
+ mkSpineSearch = {pkgs, compiler, compilerCmd, dubConfig}: pkgs.stdenv.mkDerivation {
+ inherit pname version;
+ meta.mainProgram = "spine_search";
+ src = self;
+ buildInputs = [pkgs.sqlite];
+ nativeBuildInputs = [pkgs.dub compiler pkgs.gnumake];
+ buildPhase = ''
+ runHook preBuild
+ buildCMD="dub run --cache=local --compiler=$(type -P ${compilerCmd}) --build=${dubConfig} --combined --skip-registry=all"
+ echo $buildCMD
+ $buildCMD
+ echo $buildCMD
+ runHook postBuild
+ '';
+ inherit preBuild;
+ inherit checkPhase;
+ inherit installPhase;
+ inherit postInstall;
+ };
in {
packages = forAllSystems (system: let
pkgs-ovl = pkgsForSystem system;
pkgs-nix = nixpkgsFor.${system};
- in
- with pkgs-nix; {
- default = stdenv.mkDerivation {
- inherit pname;
- inherit version;
- meta.mainProgram = "spine-search";
- executable = true;
- src = self;
- inherit shell;
- inherit devEnv;
- buildInputs = [sqlite];
- nativeBuildInputs = [dub ldc gnumake];
- buildPhase = ''
- runHook preBuild
- 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"
- buildCMD="dub run --cache=local --compiler=$DC --build=$DC_ --combined --skip-registry=all"
- echo $buildCMD
- $buildCMD
- echo $buildCMD
- runHook postBuild
- '';
- inherit preBuild;
- inherit checkPhase;
- inherit installPhase;
- inherit postInstall;
- };
- spine-search-nixpkgs-dmd = stdenv.mkDerivation {
- inherit pname;
- inherit version;
- meta.mainProgram = "spine_search-dmd";
- executable = true;
- src = self;
- inherit shell;
- inherit devEnv;
- buildInputs = with pkgs-nix; [sqlite];
- nativeBuildInputs = with pkgs-nix; [dub dmd gnumake];
- buildPhase = ''
- runHook preBuild
- buildCMD="dub run --cache=local --compiler=$(type -P dmd) --build=dmd --combined --skip-registry=all"
- echo $buildCMD
- $buildCMD
- echo $buildCMD
- runHook postBuild
- '';
- inherit preBuild;
- inherit checkPhase;
- inherit installPhase;
- inherit postInstall;
- };
- spine-search-nixpkgs-ldc = stdenv.mkDerivation {
- inherit pname;
- inherit version;
- meta.mainProgram = "spine_search-ldc";
- executable = true;
- src = self;
- inherit shell;
- inherit devEnv;
- buildInputs = with pkgs-nix; [sqlite];
- nativeBuildInputs = with pkgs-nix; [dub ldc gnumake];
- buildPhase = ''
- runHook preBuild
- buildCMD="dub run --cache=local --compiler=$(type -P ldmd2) --build=ldmd2 --combined --skip-registry=all"
- echo $buildCMD
- $buildCMD
- echo $buildCMD
- runHook postBuild
- '';
- inherit preBuild;
- inherit checkPhase;
- inherit installPhase;
- inherit postInstall;
- };
- spine-search-overlay-dmd = stdenv.mkDerivation {
- inherit pname;
- inherit version;
- meta.mainProgram = "spine_search-dmd";
- executable = true;
- src = self;
- inherit shell;
- inherit devEnv;
- buildInputs = with pkgs-ovl; [sqlite];
- nativeBuildInputs = with pkgs-ovl; [dub dmd gnumake];
- buildPhase = ''
- runHook preBuild
- buildCMD="dub run --cache=local --compiler=$(type -P dmd) --build=dmd --combined --skip-registry=all"
- echo $buildCMD
- $buildCMD
- echo $buildCMD
- runHook postBuild
- '';
- inherit preBuild;
- inherit checkPhase;
- inherit installPhase;
- inherit postInstall;
- };
- spine-search-overlay-ldc = stdenv.mkDerivation {
- inherit pname;
- inherit version;
- meta.mainProgram = "spine_search-ldc";
- executable = true;
- src = self;
- inherit shell;
- inherit devEnv;
- buildInputs = with pkgs-ovl; [sqlite];
- nativeBuildInputs = with pkgs-ovl; [dub ldc gnumake];
- buildPhase = ''
- runHook preBuild
- buildCMD="dub run --cache=local --compiler=$(type -P ldmd2) --build=ldmd2 --combined --skip-registry=all"
- echo $buildCMD
- $buildCMD
- echo $buildCMD
- runHook postBuild
- '';
- inherit preBuild;
- inherit checkPhase;
- inherit installPhase;
- inherit postInstall;
- };
- #spine-search-overlay-gdc = stdenv.mkDerivation {
- # inherit pname;
- # inherit version;
- # meta.mainProgram = "spine_search-gdc";
- # executable = true;
- # src = self;
- # inherit shell;
- # inherit devEnv;
- # buildInputs = with pkgs-ovl; [ sqlite ];
- # nativeBuildInputs = with pkgs-ovl; [ dub gdc gnumake ];
- # buildPhase = ''
- # runHook preBuild
- # dub run --cache=local --compiler=$(type -P gdc) --build=gdc --combined --skip-registry=all
- # runHook postBuild
- # '';
- # inherit preBuild;
- # inherit checkPhase;
- # inherit installPhase;
- # inherit postInstall;
- #};
- #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000=";
- });
+ in {
+ default = self.packages.${system}.spine-search-nixpkgs-ldc;
+ spine-search-nixpkgs-dmd = mkSpineSearch {
+ pkgs = pkgs-nix;
+ # nixpkgs dmd: revert to GCC14 (same nullptr/ImportC fix as overlay dmd)
+ compiler = pkgs-nix.dmd.override { stdenv = pkgs-nix.gcc14Stdenv; };
+ #compiler = pkgs-nix.dmd;
+ compilerCmd = "dmd";
+ dubConfig = "dmd";
+ };
+ spine-search-nixpkgs-ldc = mkSpineSearch {
+ pkgs = pkgs-nix;
+ compiler = pkgs-nix.ldc;
+ compilerCmd = "ldmd2";
+ dubConfig = "ldmd2";
+ };
+ spine-search-overlay-dmd = mkSpineSearch {
+ pkgs = pkgs-ovl;
+ compiler = pkgs-ovl.dmd;
+ compilerCmd = "dmd";
+ dubConfig = "dmd";
+ };
+ spine-search-overlay-ldc = mkSpineSearch {
+ pkgs = pkgs-ovl;
+ compiler = pkgs-ovl.ldc;
+ compilerCmd = "ldmd2";
+ dubConfig = "ldmd2";
+ };
+ #spine-search-overlay-gdc = mkSpineSearch {
+ # pkgs = pkgs-ovl;
+ # compiler = pkgs-ovl.gdc;
+ # compilerCmd = "gdc";
+ # dubConfig = "gdc";
+ #};
+ });
devShells = forAllSystems (system: let
pkgs-ovl = pkgsForSystem system;
pkgs-nix = nixpkgsFor.${system};
@@ -234,9 +141,7 @@
with pkgs-nix; {
dsh-d-overlay = spine-d-overlay.devShells.${system}.default;
dsh-overlay = mkShell {
- name = "spine-<<spine_version>> base dev shell, ldc-<<ldc_version>>, dub-<<dub_version>>";
- inherit shell;
- inherit devEnv;
+ name = "${pname}-${version} dev shell (overlay)";
packages = with pkgs-ovl; [
ldc
#dmd
@@ -246,10 +151,8 @@
];
inherit shellHook;
};
- dsh-nixpkgs-dmd-dub = mkShell {
- name = "spine-<<spine_version>> base dev shell";
- inherit shell;
- inherit devEnv;
+ dsh-nixpkgs-dmd = mkShell {
+ name = "${pname}-${version} dev shell (nixpkgs dmd)";
packages = [
dmd
dub
@@ -258,10 +161,8 @@
];
inherit shellHook;
};
- dsh-nixpkgs-ldc-dub = mkShell {
- name = "spine-<<spine_version>> base dev shell";
- inherit shell;
- inherit devEnv;
+ dsh-nixpkgs-ldc = mkShell {
+ name = "${pname}-${version} dev shell (nixpkgs ldc)";
packages = [
ldc
dub
@@ -270,10 +171,9 @@
];
inherit shellHook;
};
- dsh-overlay-dmd-dub = mkShell {
- name = "spine-<<spine_version>> base dev shell, dmd-<<dmd_version>>, dub-<<dub_version>>";
- inherit shell;
- inherit devEnv;
+ dsh-overlay-dmd = mkShell {
+ name = "${pname}-${version} dev shell (overlay dmd)";
+ # "spine-<<spine_version>> base dev shell, dmd-<<dmd_version>>, dub-<<dub_version>>";
packages = with pkgs-ovl; [
dmd
dub
@@ -282,10 +182,9 @@
];
inherit shellHook;
};
- dsh-overlay-ldc-dub = mkShell {
- name = "spine-<<spine_version>> base dev shell, ldc-<<ldc_version>>, dub-<<dub_version>>";
- inherit shell;
- inherit devEnv;
+ dsh-overlay-ldc = mkShell {
+ name = "${pname}-${version} dev shell (overlay ldc)";
+ # "spine-<<spine_version>> base dev shell, ldc-<<ldc_version>>, dub-<<dub_version>>";
packages = with pkgs-ovl; [
ldc
dub
@@ -295,9 +194,7 @@
inherit shellHook;
};
dsh-sqlite = mkShell {
- name = "spine dev shell for latex & pdf output";
- inherit shell;
- inherit devEnv;
+ name = "${pname}-${version} dev shell (sqlite)";
packages = [
ldc
#dmd
@@ -307,7 +204,8 @@
];
inherit shellHook;
};
- default = import ./shell.nix {inherit pkgs-nix;};
+ default = self.devShells.${system}.dsh-nixpkgs-ldc;
+ #default = import ./shell.nix {pkgs = pkgs-nix;};
});
};
}
@@ -316,10 +214,75 @@
** shell.nix :shell:
#+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
+#!/usr/bin/env -S nix-shell --pure
+#!nix-shell -i bash
+# Development environment for sisudoc-spine-search-cgi.
+# Builds the spine_search CGI binary via ./package.nix.
+#
+# Build logic for the spine_search derivation lives in ./package.nix -
+# this file only describes the dev shell.
+#
+# Usage:
+# nix-shell # enters shell, builds spine_search
+# nix-shell --run 'echo $SPINE_SEARCH_BIN'
+{
+ pkgs ? import <nixpkgs> {},
+ spine-search ? 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_search base dev shell";
+ packages = [
+ # ❯❯❯ spine_search CGI binary built from ./package.nix
+ spine-search
+ # ❯❯❯ d_build_related
+ ldc
+ #dmd
+ dub
+ # ❯❯❯ dev
+ gnumake
+ git
+ # ❯❯❯ nix workflow
+ direnv
+ nix-direnv
+ nix-prefetch-git
+ nix-output-monitor
+ nix-tree
+ jq
+ # ❯❯❯ sqlite
+ sqlite
+ ];
+ shellHook = ''
+ export Date=$(date "+%Y%m%d")
+ ## set local values in .envrc-local (or here if you must)
+ ## spine_search lives under cgi-bin, not bin - expose it via env
+ ## var and prepend cgi-bin to PATH for convenience.
+ export SPINE_SEARCH_BIN="${spine-search}/cgi-bin/spine_search"
+ export PATH="${spine-search}/cgi-bin:$PATH"
+ echo "spine_search: $SPINE_SEARCH_BIN"
+ ## 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_SEARCH_SHELL_HANDOFF" ] \
+ && [ -n "$__spine_user_shell" ] \
+ && [ "$(basename "$__spine_user_shell")" != "bash" ] \
+ && [[ $- == *i* ]]; then
+ export __SPINE_SEARCH_SHELL_HANDOFF=1
+ exec "$__spine_user_shell"
+ fi
+ unset __spine_user_shell
+ '';
+ }
+#+END_SRC
+
+#+BEGIN_SRC nix
{pkgs-nix ? import <nixpkgs> {}}:
with pkgs-nix;
mkShell {
@@ -327,6 +290,7 @@ with pkgs-nix;
# ❯❯❯ nix_related
#nix
direnv
+ nix-direnv
nixVersions.latest #nixVersions.latest #nixVersions.git
nix-prefetch-git
validatePkgConfig
@@ -363,80 +327,90 @@ with pkgs-nix;
echo "ldc `${pkgs.ldc}/bin/ldc2 -v`"
-** 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
-
-#+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:
+** 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_search CGI derivation (build logic)
+#
+# Standalone, callPackage-style derivation for the spine_search CGI
+# binary. Used by shell.nix to put a freshly-built spine_search into
+# 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-search-nixpkgs-ldc`). Override to build with dmd:
+# pkgs.callPackage ./package.nix {
+# compilerPkg = pkgs.dmd;
+# compilerBin = "dmd";
+# buildType = "dmd";
+# }
+#
+# Note: spine_search is a CGI binary and is installed to
+# $out/cgi-bin/spine_search (not $out/bin/), since it is intended to
+# be served by a web server, not invoked directly from PATH.
{
- pkgs ? import <nixpkgs> {},
- name ? "user-env",
+ lib,
+ stdenv,
+ dub,
+ ldc,
+ gnumake,
+ sqlite,
+ compilerPkg ? ldc,
+ compilerBin ? "ldmd2",
+ buildType ? "ldmd2",
}:
-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
- 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
- # ❯❯❯ 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_search";
+ version = "0.18.0";
+ src = lib.cleanSource ./.;
+ buildInputs = [ sqlite ];
+ nativeBuildInputs = [ dub compilerPkg gnumake ];
+ preBuild = ''
+ export HOME=$(pwd)
+ '';
+ 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/cgi-bin
+ install -m755 -D ./cgi-bin/spine_search $out/cgi-bin/spine_search
+ runHook postInstall
+ '';
+ postInstall = ''
+ echo `ls -la $out/cgi-bin/spine_search`
+ '';
+ meta = {
+ description = "CGI search interface for spine document collections";
+ homepage = "https://sisudoc.org";
+ license = lib.licenses.agpl3Plus;
+ platforms = lib.platforms.linux;
+ mainProgram = "spine_search";
+ };
+}
#+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
{
@@ -458,7 +432,7 @@ with (
);
targetOf = package: "${package.targetPath or "."}/${package.targetName or package.name}";
# remove reference to build tools and library sources
- disallowedReferences = deps: [dcompiler dub];
+ disallowedRefs = [dcompiler dub];
removeExpr = refs: ''remove-references-to ${lib.concatMapStrings (ref: " -t ${ref}") refs}'';
in {
mkDubDerivation = lib.makeOverridable ({
@@ -471,9 +445,9 @@ with (
} @ attrs:
stdenv.mkDerivation (attrs
// {
- pname = package.name;
+ pname = attrs.pname or package.name;
nativeBuildInputs = [dcompiler dub pkgs.removeReferencesTo] ++ nativeBuildInputs;
- disallowedReferences = disallowedReferences deps;
+ disallowedReferences = disallowedRefs;
passthru =
passthru
// {
@@ -484,7 +458,7 @@ with (
src = lib.cleanSource src;
};
preFixup = ''
- find $out/share/cgi-bin -type f -exec ${removeExpr (disallowedReferences deps)} '{}' + || true
+ find $out/cgi-bin -type f -exec ${removeExpr disallowedRefs} '{}' + || true
'';
buildPhase = ''
runHook preBuild
@@ -498,7 +472,8 @@ with (
fi
done
if [ "$DC" == "" ]; then
- exit "Error: could not find D compiler"
+ echo "Error: could not find D compiler" >&2
+ exit 1
fi
echo "$DC_ used as D compiler to build $pname"
dub run --compiler=$DC --build=release --combined --skip-registry=all
@@ -512,14 +487,12 @@ with (
'';
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
+ mkdir -p $out/cgi-bin
+ install -m755 -D "${targetOf package}" "$out/cgi-bin/spine_search"
runHook postInstall
'';
postInstall = ''
- echo "HERE ${targetOf package} $out/share/cgi-bin"
- echo `ls -la $out/share/cgi-bin/spine_search`
+ echo `ls -la $out/cgi-bin/spine_search`
'';
meta =
lib.optionalAttrs (package ? description) {
@@ -533,35 +506,33 @@ with (
}
);
mkDubDerivation rec {
- name = "spine-search-<<spine_version>>";
- #name = "spine-search-${version}";
+ pname = "spine-search";
+ version = "<<spine_version>>";
src = ./.;
buildInputs = [
pkgs.sqlite
(
- with pkgs-nix; [
+ with pkgs; [
nixVersions.latest #nixVersions.latest #nixVersions.git
## package manager
dub
## compiler
ldc
- rund
+ #rund
sqlite
]
)
];
- meta = with pkgs-nix.lib; {
- pname = "spine-search";
- version = "<<spine_version>>";
+ meta = with pkgs.lib; {
homepage = "https://sisudoc.org";
description = "cgi sqlite search form for document object search";
longDescription = ''
a sisu like parser & document generator
'';
- homepage = "https://sisudoc.org";
license = licenses.agpl3Plus;
platforms = platforms.linux;
maintainers = ["RalphAmissah"];
+ mainProgram = "spine_search";
};
}
#+END_SRC