Files
2026-05-30 15:33:27 +00:00

68 lines
1.4 KiB
Nix

{
lib,
crystal,
fetchFromGitHub,
llvmPackages,
openssl,
makeWrapper,
}:
let
version = "0.18.0";
src = fetchFromGitHub {
owner = "elbywan";
repo = "crystalline";
tag = "v${version}";
hash = "sha256-Z5qVm1ovhMUccS9KSp8i7UowxxgEr9OvnJRYREaNmnM=";
};
in
crystal.buildCrystalPackage {
pname = "crystalline";
inherit version src;
format = "crystal";
shardsFile = ./shards.nix;
nativeBuildInputs = [
llvmPackages.llvm
openssl
makeWrapper
];
env.LLVM_CONFIG = lib.getExe' (lib.getDev llvmPackages.llvm) "llvm-config";
preConfigure = ''
substituteInPlace "./src/crystalline/main.cr" \
--replace-fail '`shards version #{__DIR__}`' '"${version}"' \
--replace-fail 'system("git rev-parse --short HEAD || echo unknown").stringify' '"${src.rev}"'
'';
doCheck = false;
doInstallCheck = false;
crystalBinaries.crystalline = {
src = "src/crystalline.cr";
options = [
"--release"
"--no-debug"
"--progress"
"-Dpreview_mt"
];
};
postInstall = ''
wrapProgram "$out/bin/crystalline" --prefix PATH : '${
lib.makeBinPath [
(lib.getDev llvmPackages.llvm)
]
}'
'';
meta = {
description = "Language Server Protocol implementation for Crystal";
mainProgram = "crystalline";
homepage = "https://github.com/elbywan/crystalline";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ donovanglover ];
};
}