nixpkgs/pkgs/by-name/ka/kando/package.nix
2024-10-31 19:56:31 +01:00

149 lines
3.5 KiB
Nix

{
lib,
stdenv,
buildNpmPackage,
fetchFromGitHub,
electron,
nodejs,
cmake,
zip,
makeWrapper,
wayland-scanner,
copyDesktopItems,
makeDesktopItem,
libxkbcommon,
libX11,
libXtst,
libXi,
wayland,
apple-sdk_11,
}:
buildNpmPackage rec {
pname = "kando";
version = "1.4.0";
src = fetchFromGitHub {
owner = "kando-menu";
repo = "kando";
rev = "refs/tags/v${version}";
hash = "sha256-JcPTplqrMgDsT0HDTh7liChUWvLqe9gwS51ANM3Wsds=";
};
npmDepsHash = "sha256-13NuhGq5Pv5GSLeXASWxbXZYaUb9KzMgR7y5I7mv+MA=";
npmFlags = [ "--ignore-scripts" ];
makeCacheWritable = true;
nativeBuildInputs =
[
cmake
zip
makeWrapper
]
++ lib.optionals stdenv.isLinux [
wayland-scanner
copyDesktopItems
];
buildInputs =
lib.optionals stdenv.isLinux [
libxkbcommon
libX11
libXtst
libXi
wayland
]
++ lib.optionals stdenv.isDarwin [
apple-sdk_11
];
dontUseCmakeConfigure = true;
env = {
ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
# use our own node headers since we skip downloading them
NIX_CFLAGS_COMPILE = "-I${nodejs}/include/node";
# disable code signing on Darwin
CSC_IDENTITY_AUTO_DISCOVERY = lib.optionalString stdenv.isDarwin "false";
};
postConfigure = ''
# electron files need to be writable on Darwin
cp -r ${electron.dist} electron-dist
chmod -R u+w electron-dist
pushd electron-dist
zip -0Xqr ../electron.zip .
popd
rm -r electron-dist
# force @electron/packager to use our electron instead of downloading it, even if it is a different version
substituteInPlace node_modules/@electron/packager/dist/packager.js \
--replace-fail 'await this.getElectronZipPath(downloadOpts)' '"electron.zip"'
# don't fetch node headers
substituteInPlace node_modules/cmake-js/lib/dist.js \
--replace-fail '!this.downloaded' 'false'
'';
# we used --ignore-scripts to have time to patch the dependencies
# now we'll have to call npm rebuild manually
preBuild = ''
npm rebuild --verbose
'';
npmBuildScript = "package";
installPhase = ''
runHook preInstall
${lib.optionalString stdenv.isLinux ''
mkdir -p $out/share/kando
cp -r out/*/{locales,resources{,.pak}} $out/share/kando
install -Dm644 assets/icons/icon.svg $out/share/icons/hicolor/scalable/apps/kando.svg
makeWrapper ${lib.getExe electron} $out/bin/kando \
--add-flags $out/share/kando/resources/app \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
--inherit-argv0
''}
${lib.optionalString stdenv.isDarwin ''
mkdir -p $out/Applications
cp -r out/*/Kando.app $out/Applications
makeWrapper $out/Applications/Kando.app/Contents/MacOS/Kando $out/bin/kando
''}
runHook postInstall
'';
desktopItems = [
(makeDesktopItem {
name = "kando";
exec = "kando %U";
icon = "kando";
desktopName = "Kando";
genericName = "Pie Menu";
comment = "The Cross-Platform Pie Menu";
categories = [ "Utility" ];
})
];
meta = {
changelog = "https://github.com/kando-menu/kando/releases/tag/v${version}";
description = "Cross-Platform Pie Menu";
homepage = "https://github.com/kando-menu/kando";
license = lib.licenses.mit;
mainProgram = "kando";
maintainers = with lib.maintainers; [ tomasajt ];
platforms = electron.meta.platforms;
};
}