Files
2026-08-10 17:05:34 +00:00

84 lines
2.0 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
rustPlatform,
pkg-config,
libuv,
openssl,
vimUtils,
nix-update-script,
}:
let
version = "2.1.0";
src = fetchFromGitHub {
owner = "mistricky";
repo = "codesnap.nvim";
tag = "v${version}";
hash = "sha256-HHBk6TgFPZ7zymzIFWWuGJAKrwKf4/PHNy9X+YnHBDE=";
};
codesnap-lib = rustPlatform.buildRustPackage {
pname = "codesnap-lib";
inherit version src;
sourceRoot = "${src.name}/generator";
cargoHash = "sha256-b+S56yRtly25fW1XmOVx5D3AT6PEY186r/KXVPI13dM=";
nativeBuildInputs = [
pkg-config
rustPlatform.bindgenHook
];
env = {
# Use system openssl
OPENSSL_NO_VENDOR = 1;
# Allow undefined symbols on Darwin - they will be provided by Neovim's LuaJIT runtime
RUSTFLAGS = lib.optionalString stdenv.hostPlatform.isDarwin "-C link-arg=-undefined -C link-arg=dynamic_lookup";
};
postInstall = ''
echo "${version}" > $out/lib/.version
'';
buildInputs = [
libuv.dev
openssl
];
};
in
vimUtils.buildVimPlugin {
pname = "codesnap.nvim";
inherit version src;
postPatch =
let
extension = if stdenv.hostPlatform.isDarwin then "dylib" else "so";
in
''
substituteInPlace lua/codesnap/fetch.lua \
--replace-fail \
"local lib_name = get_platform_lib_name()" \
"local lib_name = 'libgenerator.${extension}'" \
--replace-fail \
'local lib_dir = path_utils.join(sep, vim.fn.fnamemodify(debug.getinfo(1).source:sub(2), ":p:h:h"), "libs")' \
'local lib_dir = "${codesnap-lib}/lib"'
'';
passthru = {
updateScript = nix-update-script {
attrPath = "vimPlugins.codesnap-nvim.codesnap-lib";
};
# needed for the update script
inherit codesnap-lib;
};
meta = {
homepage = "https://github.com/mistricky/codesnap.nvim/";
changelog = "https://github.com/mistricky/codesnap.nvim/releases/tag/${src.tag}";
license = lib.licenses.mit;
};
}