audiveris
CI / Nix Flake Check (push) Successful in 53s
CI / Build Packages (default) (push) Successful in 50s
CI / Build Packages (example-b) (push) Successful in 45s
CI / Build Packages (example-a) (push) Successful in 46s
CI / Build Packages (pyzotero) (push) Successful in 55s
CI / Build Packages (pyzotero-cli) (push) Successful in 56s
CI / Nix Flake Check (push) Successful in 53s
CI / Build Packages (default) (push) Successful in 50s
CI / Build Packages (example-b) (push) Successful in 45s
CI / Build Packages (example-a) (push) Successful in 46s
CI / Build Packages (pyzotero) (push) Successful in 55s
CI / Build Packages (pyzotero-cli) (push) Successful in 56s
This commit is contained in:
@@ -6,6 +6,7 @@ A Nix flake exposing custom packages, a development shell, checks, and a nixpkgs
|
|||||||
|
|
||||||
| Package | Version | Description |
|
| Package | Version | Description |
|
||||||
|----------------|---------|--------------------------------------------------------------|
|
|----------------|---------|--------------------------------------------------------------|
|
||||||
|
| `audiveris` | 5.10.2 | Open-source Optical Music Recognition (OMR) engine & editor |
|
||||||
| `example-a` | 0.1.0 | Example package A |
|
| `example-a` | 0.1.0 | Example package A |
|
||||||
| `example-b` | 0.1.0 | Example package B |
|
| `example-b` | 0.1.0 | Example package B |
|
||||||
| `pyzotero` | 1.6.11 | Python API client for the Zotero API |
|
| `pyzotero` | 1.6.11 | Python API client for the Zotero API |
|
||||||
|
|||||||
@@ -2,14 +2,12 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
}:
|
}:
|
||||||
pkgs.mkShell {
|
pkgs.mkShell {
|
||||||
packages =
|
packages = with pkgs; [
|
||||||
with pkgs;
|
nixfmt-rfc-style
|
||||||
[
|
nil
|
||||||
nixfmt-rfc-style
|
nix-tree
|
||||||
nil
|
nix
|
||||||
nix-tree
|
];
|
||||||
nix
|
|
||||||
];
|
|
||||||
|
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
echo "Nix packages development environment"
|
echo "Nix packages development environment"
|
||||||
|
|||||||
+12
-1
@@ -3,5 +3,16 @@ let
|
|||||||
packages = import ../pkgs { pkgs = prev; };
|
packages = import ../pkgs { pkgs = prev; };
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
inherit (packages) example-a example-b pyzotero pyzotero-cli khal-export org-zotero-export jls harper-ls eqc;
|
inherit (packages)
|
||||||
|
audiveris
|
||||||
|
example-a
|
||||||
|
example-b
|
||||||
|
pyzotero
|
||||||
|
pyzotero-cli
|
||||||
|
khal-export
|
||||||
|
org-zotero-export
|
||||||
|
jls
|
||||||
|
harper-ls
|
||||||
|
eqc
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
fetchurl,
|
||||||
|
dpkg,
|
||||||
|
unzip,
|
||||||
|
zip,
|
||||||
|
patchelf,
|
||||||
|
autoPatchelfHook,
|
||||||
|
makeWrapper,
|
||||||
|
alsa-lib,
|
||||||
|
freetype,
|
||||||
|
fontconfig,
|
||||||
|
libGL,
|
||||||
|
dejavu_fonts,
|
||||||
|
xorg,
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
ccLib = stdenv.cc.cc.lib;
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "audiveris";
|
||||||
|
version = "5.10.2";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "https://github.com/Audiveris/audiveris/releases/download/${version}/Audiveris-${version}-ubuntu24.04-x86_64.deb";
|
||||||
|
hash = "sha256-ytufr8C+IocYwvvvLoAuBHhyQRUDmHFCUbAMUeMbUZg=";
|
||||||
|
};
|
||||||
|
|
||||||
|
# The .deb bundles its own JRE and the Tesseract/Leptonica native libs (via
|
||||||
|
# JavaCPP); we only supply the GUI/system runtime libs those binaries load.
|
||||||
|
nativeBuildInputs = [
|
||||||
|
dpkg
|
||||||
|
unzip
|
||||||
|
zip
|
||||||
|
patchelf
|
||||||
|
autoPatchelfHook
|
||||||
|
makeWrapper
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
ccLib
|
||||||
|
alsa-lib
|
||||||
|
freetype
|
||||||
|
fontconfig
|
||||||
|
libGL
|
||||||
|
dejavu_fonts
|
||||||
|
xorg.libX11
|
||||||
|
xorg.libXext
|
||||||
|
xorg.libXrender
|
||||||
|
xorg.libXtst
|
||||||
|
xorg.libXi
|
||||||
|
];
|
||||||
|
|
||||||
|
dontBuild = true;
|
||||||
|
|
||||||
|
unpackPhase = ''
|
||||||
|
runHook preUnpack
|
||||||
|
dpkg-deb -x $src .
|
||||||
|
runHook postUnpack
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/opt $out/bin
|
||||||
|
cp -r opt/audiveris $out/opt/
|
||||||
|
|
||||||
|
# Java AWT initializes its font subsystem (and fontconfig) even in batch
|
||||||
|
# mode, so ship a fontconfig file pointing at a bundled font. Without this,
|
||||||
|
# the JVM dies with "Fontconfig head is null".
|
||||||
|
mkdir -p $out/etc/fonts
|
||||||
|
cat > $out/etc/fonts/fonts.conf <<'CONF'
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
|
||||||
|
<fontconfig>
|
||||||
|
<dir>@dejavu@/share/fonts/truetype</dir>
|
||||||
|
<dir>/usr/share/fonts</dir>
|
||||||
|
<cachedir>~/.cache/fontconfig</cachedir>
|
||||||
|
</fontconfig>
|
||||||
|
CONF
|
||||||
|
substituteInPlace $out/etc/fonts/fonts.conf \
|
||||||
|
--replace-fail "@dejavu@" "${dejavu_fonts}"
|
||||||
|
|
||||||
|
# The jpackage launcher derives its layout from its own path, so relocating
|
||||||
|
# /opt/audiveris -> $out/opt/audiveris needs no path rewriting. The bundled
|
||||||
|
# JRE dlopens libfontconfig/libfreetype at runtime (not a NEEDED dep), so we
|
||||||
|
# put the runtime libs on the loader path.
|
||||||
|
makeWrapper $out/opt/audiveris/bin/Audiveris $out/bin/audiveris \
|
||||||
|
--set FONTCONFIG_FILE "$out/etc/fonts/fonts.conf" \
|
||||||
|
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath buildInputs}"
|
||||||
|
|
||||||
|
# Desktop integration with relocated paths (source .desktop ships in the deb).
|
||||||
|
mkdir -p $out/share/applications $out/share/icons/hicolor/256x256/apps
|
||||||
|
cp $out/opt/audiveris/lib/Audiveris.png \
|
||||||
|
$out/share/icons/hicolor/256x256/apps/audiveris.png
|
||||||
|
substitute $out/opt/audiveris/lib/audiveris-Audiveris.desktop \
|
||||||
|
$out/share/applications/audiveris.desktop \
|
||||||
|
--replace-fail "/opt/audiveris/bin/Audiveris" "$out/bin/audiveris" \
|
||||||
|
--replace-fail "/opt/audiveris/lib/Audiveris.png" \
|
||||||
|
"$out/share/icons/hicolor/256x256/apps/audiveris.png"
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Tesseract/Leptonica native libs are zipped inside JavaCPP platform jars and
|
||||||
|
# extracted by JavaCPP at runtime, so autoPatchelfHook cannot reach them. We
|
||||||
|
# pull them out, bake an RPATH to libstdc++/libgcc_s, and repack the jars.
|
||||||
|
postInstall = ''
|
||||||
|
repack_jar() {
|
||||||
|
local jar="$1"
|
||||||
|
local tmp
|
||||||
|
tmp="$(mktemp -d)"
|
||||||
|
( cd "$tmp" && unzip -o "$jar" >/dev/null )
|
||||||
|
find "$tmp" -name '*.so*' -type f -print0 \
|
||||||
|
| xargs -0 -r ${patchelf}/bin/patchelf --add-rpath ${ccLib}/lib 2>/dev/null || true
|
||||||
|
( cd "$tmp" && zip -r -X "$jar" . >/dev/null )
|
||||||
|
rm -rf "$tmp"
|
||||||
|
}
|
||||||
|
for j in \
|
||||||
|
$out/opt/audiveris/lib/app/tesseract-5.5.1-1.5.12-linux-x86_64.jar \
|
||||||
|
$out/opt/audiveris/lib/app/leptonica-1.85.0-1.5.12-linux-x86_64.jar; do
|
||||||
|
repack_jar "$j"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Open-source Optical Music Recognition (OMR) engine and editor";
|
||||||
|
homepage = "https://github.com/Audiveris/audiveris";
|
||||||
|
license = lib.licenses.agpl3Only;
|
||||||
|
mainProgram = "audiveris";
|
||||||
|
platforms = [ "x86_64-linux" ];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
self = {
|
self = {
|
||||||
|
audiveris = pkgs.callPackage ./audiveris { };
|
||||||
dolos = pkgs.callPackage ./dolos { nodejs = pkgs.nodejs_22; };
|
dolos = pkgs.callPackage ./dolos { nodejs = pkgs.nodejs_22; };
|
||||||
eqc = pkgs.callPackage ./eqc { };
|
eqc = pkgs.callPackage ./eqc { };
|
||||||
example-a = pkgs.callPackage ./example-a { };
|
example-a = pkgs.callPackage ./example-a { };
|
||||||
|
|||||||
+53
-53
@@ -48,65 +48,65 @@ buildNpmPackage rec {
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
preBuild = ''
|
preBuild = ''
|
||||||
cp -r ${tree-sitter-elixir} parsers/elixir
|
cp -r ${tree-sitter-elixir} parsers/elixir
|
||||||
chmod -R u+w parsers/elixir
|
chmod -R u+w parsers/elixir
|
||||||
|
|
||||||
cat > parsers/elixir/binding.gyp << 'GYPEOF'
|
cat > parsers/elixir/binding.gyp << 'GYPEOF'
|
||||||
{
|
|
||||||
"targets": [
|
|
||||||
{
|
{
|
||||||
"target_name": "tree_sitter_elixir_binding",
|
"targets": [
|
||||||
"dependencies": [
|
{
|
||||||
"<!(node -p \"require('node-addon-api').targets\"):node_addon_api_except",
|
"target_name": "tree_sitter_elixir_binding",
|
||||||
],
|
"dependencies": [
|
||||||
"include_dirs": [
|
"<!(node -p \"require('node-addon-api').targets\"):node_addon_api_except",
|
||||||
"src",
|
],
|
||||||
"src/tree_sitter",
|
"include_dirs": [
|
||||||
],
|
"src",
|
||||||
"sources": [
|
"src/tree_sitter",
|
||||||
"bindings/node/binding.cc",
|
],
|
||||||
"src/parser.c",
|
"sources": [
|
||||||
"src/scanner.c",
|
"bindings/node/binding.cc",
|
||||||
],
|
"src/parser.c",
|
||||||
"cflags_c": ["-std=c11"],
|
"src/scanner.c",
|
||||||
|
],
|
||||||
|
"cflags_c": ["-std=c11"],
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
GYPEOF
|
||||||
}
|
|
||||||
GYPEOF
|
|
||||||
|
|
||||||
cat > parsers/binding.gyp << 'GYPEOF'
|
cat > parsers/binding.gyp << 'GYPEOF'
|
||||||
{
|
{
|
||||||
"includes": [
|
"includes": [
|
||||||
"bash/binding.gyp",
|
"bash/binding.gyp",
|
||||||
"c/binding.gyp",
|
"c/binding.gyp",
|
||||||
"cpp/binding.gyp",
|
"cpp/binding.gyp",
|
||||||
"c_sharp/binding.gyp",
|
"c_sharp/binding.gyp",
|
||||||
"elm/binding.gyp",
|
"elm/binding.gyp",
|
||||||
"elixir/binding.gyp",
|
"elixir/binding.gyp",
|
||||||
"go/binding.gyp",
|
"go/binding.gyp",
|
||||||
"groovy/binding.gyp",
|
"groovy/binding.gyp",
|
||||||
"java/binding.gyp",
|
"java/binding.gyp",
|
||||||
"javascript/binding.gyp",
|
"javascript/binding.gyp",
|
||||||
"modelica/binding.gyp",
|
"modelica/binding.gyp",
|
||||||
"ocaml/binding.gyp",
|
"ocaml/binding.gyp",
|
||||||
"php/binding.gyp",
|
"php/binding.gyp",
|
||||||
"python/binding.gyp",
|
"python/binding.gyp",
|
||||||
"r/binding.gyp",
|
"r/binding.gyp",
|
||||||
"rust/binding.gyp",
|
"rust/binding.gyp",
|
||||||
"scala/binding.gyp",
|
"scala/binding.gyp",
|
||||||
"sql/binding.gyp",
|
"sql/binding.gyp",
|
||||||
"typescript/binding.gyp",
|
"typescript/binding.gyp",
|
||||||
"verilog/binding.gyp"
|
"verilog/binding.gyp"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
GYPEOF
|
GYPEOF
|
||||||
|
|
||||||
sed -i '/^parsers.verilog/a \
|
sed -i '/^parsers.verilog/a \
|
||||||
parsers.elixir = require("./build/Release/tree_sitter_elixir_binding");\
|
parsers.elixir = require("./build/Release/tree_sitter_elixir_binding");\
|
||||||
parsers.elixir.nodeTypeInfo = require("./elixir/src/node-types.json");
|
parsers.elixir.nodeTypeInfo = require("./elixir/src/node-types.json");
|
||||||
' parsers/index.js
|
' parsers/index.js
|
||||||
|
|
||||||
npm run build -w parsers
|
npm run build -w parsers
|
||||||
'';
|
'';
|
||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
|
|||||||
+39
-10
@@ -7,17 +7,46 @@
|
|||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
versions = {
|
versions = {
|
||||||
"28" = { eqcVersion = "1.48.3"; hash = "sha256-qWV8lsBGwCcrdgJdgpL2Blj3BU92NTfIFy3AkmkcR8o="; };
|
"28" = {
|
||||||
"27" = { eqcVersion = "1.48.3"; hash = "sha256-Y/JgElZkRtIP139/f+fmTESerMlFK3g++8lyNDLuBM8="; };
|
eqcVersion = "1.48.3";
|
||||||
"26" = { eqcVersion = "1.48.1"; hash = "sha256-Acnm74iEEpdwYDJzFo0cBZd4DH9y9jXFtgKmodUHzBM="; };
|
hash = "sha256-qWV8lsBGwCcrdgJdgpL2Blj3BU92NTfIFy3AkmkcR8o=";
|
||||||
"25" = { eqcVersion = "1.46.2"; hash = "sha256-oGclmRf15XpdO6J9CVIiC4rF9mq84r1C7nbvve4Qgrw="; };
|
};
|
||||||
"24" = { eqcVersion = "1.46.1"; hash = "sha256-crofH7OZ35Xs2JT9uONBO2YmCjTNaELkJ+dGfiGSM9c="; };
|
"27" = {
|
||||||
"23" = { eqcVersion = "1.45.1"; hash = "sha256-ifObOCNvQQniQFG9jf8FkMNYT2NhH6K12AX/D14rttY="; };
|
eqcVersion = "1.48.3";
|
||||||
"22" = { eqcVersion = "1.45.1"; hash = "sha256-iIxI+UavRpbXWRcI6u50SX6PGzL5ZZ918rhLKyJFHqg="; };
|
hash = "sha256-Y/JgElZkRtIP139/f+fmTESerMlFK3g++8lyNDLuBM8=";
|
||||||
"21" = { eqcVersion = "1.45.1"; hash = "sha256-k57376cDfStG72Jue6sDP830lTiIkCuPsSjf2kQ4="; };
|
};
|
||||||
"20" = { eqcVersion = "1.45.1"; hash = "sha256-Bi5nccILoJidDCHb7TK+Ha+YV2FRYZFiNVJ3WZFMCr0="; };
|
"26" = {
|
||||||
|
eqcVersion = "1.48.1";
|
||||||
|
hash = "sha256-Acnm74iEEpdwYDJzFo0cBZd4DH9y9jXFtgKmodUHzBM=";
|
||||||
|
};
|
||||||
|
"25" = {
|
||||||
|
eqcVersion = "1.46.2";
|
||||||
|
hash = "sha256-oGclmRf15XpdO6J9CVIiC4rF9mq84r1C7nbvve4Qgrw=";
|
||||||
|
};
|
||||||
|
"24" = {
|
||||||
|
eqcVersion = "1.46.1";
|
||||||
|
hash = "sha256-crofH7OZ35Xs2JT9uONBO2YmCjTNaELkJ+dGfiGSM9c=";
|
||||||
|
};
|
||||||
|
"23" = {
|
||||||
|
eqcVersion = "1.45.1";
|
||||||
|
hash = "sha256-ifObOCNvQQniQFG9jf8FkMNYT2NhH6K12AX/D14rttY=";
|
||||||
|
};
|
||||||
|
"22" = {
|
||||||
|
eqcVersion = "1.45.1";
|
||||||
|
hash = "sha256-iIxI+UavRpbXWRcI6u50SX6PGzL5ZZ918rhLKyJFHqg=";
|
||||||
|
};
|
||||||
|
"21" = {
|
||||||
|
eqcVersion = "1.45.1";
|
||||||
|
hash = "sha256-k57376cDfStG72Jue6sDP830lTiIkCuPsSjf2kQ4=";
|
||||||
|
};
|
||||||
|
"20" = {
|
||||||
|
eqcVersion = "1.45.1";
|
||||||
|
hash = "sha256-Bi5nccILoJidDCHb7TK+Ha+YV2FRYZFiNVJ3WZFMCr0=";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
cfg = versions.${erlangVersion} or (throw "Unsupported Erlang/OTP version: ${erlangVersion}. Supported: ${builtins.concatStringsSep ", " (builtins.attrNames versions)}");
|
cfg =
|
||||||
|
versions.${erlangVersion}
|
||||||
|
or (throw "Unsupported Erlang/OTP version: ${erlangVersion}. Supported: ${builtins.concatStringsSep ", " (builtins.attrNames versions)}");
|
||||||
in
|
in
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
name = "eqc";
|
name = "eqc";
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
stdenv,
|
stdenv,
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
lib,
|
lib,
|
||||||
stdenv,
|
stdenv,
|
||||||
|
|||||||
+12
-12
@@ -59,22 +59,22 @@ maven.buildMavenPackage rec {
|
|||||||
];
|
];
|
||||||
in
|
in
|
||||||
''
|
''
|
||||||
runHook preInstall
|
runHook preInstall
|
||||||
|
|
||||||
mkdir -p $out/share/jls $out/bin
|
mkdir -p $out/share/jls $out/bin
|
||||||
|
|
||||||
cp dist/classpath/*.jar $out/share/jls/
|
cp dist/classpath/*.jar $out/share/jls/
|
||||||
|
|
||||||
cat > $out/bin/jls <<'WRAPPER'
|
cat > $out/bin/jls <<'WRAPPER'
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
exec @java@ ${jvmFlags} -classpath "@classpath@" org.javacs.Main "$@"
|
exec @java@ ${jvmFlags} -classpath "@classpath@" org.javacs.Main "$@"
|
||||||
WRAPPER
|
WRAPPER
|
||||||
chmod +x $out/bin/jls
|
chmod +x $out/bin/jls
|
||||||
substituteInPlace $out/bin/jls \
|
substituteInPlace $out/bin/jls \
|
||||||
--replace-fail "@java@" "${jdk}/bin/java" \
|
--replace-fail "@java@" "${jdk}/bin/java" \
|
||||||
--replace-fail "@classpath@" "$out/share/jls/*"
|
--replace-fail "@classpath@" "$out/share/jls/*"
|
||||||
|
|
||||||
runHook postInstall
|
runHook postInstall
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ python3Packages.buildPythonApplication rec {
|
|||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
pyzotero
|
pyzotero
|
||||||
] ++ (with python3Packages; [
|
]
|
||||||
|
++ (with python3Packages; [
|
||||||
click
|
click
|
||||||
pyyaml
|
pyyaml
|
||||||
tabulate
|
tabulate
|
||||||
|
|||||||
Reference in New Issue
Block a user