Files
TamaASR/packaging/nix/package.nix
T
MeloriseandCodex 7ce1c246ab fix: 恢复 Nix 的 npm 配置阶段
AI-assisted-by: Codex

AI-model: gpt-5.6-sol

AI-reasoning-effort: medium

Co-authored-by: Codex <codex@openai.com>
2026-08-23 19:20:25 +08:00

97 lines
2.3 KiB
Nix

{ lib
, stdenv
, importNpmLock
, nodejs
, electron
, cmake
, pkg-config
, makeWrapper
, fcitx5
, nlohmann_json
}:
stdenv.mkDerivation (finalAttrs: {
pname = "meloasr";
version = (builtins.fromJSON (builtins.readFile ../../package.json)).version;
src = ../..;
npmDeps = importNpmLock {
npmRoot = finalAttrs.src;
};
nativeBuildInputs = [
nodejs
importNpmLock.npmConfigHook
cmake
pkg-config
makeWrapper
];
buildInputs = [ fcitx5 nlohmann_json ];
# 保留 npmConfigHook 的 postConfigure 生命周期,但不对项目根目录运行默认 CMake 配置。
configurePhase = ''
runHook preConfigure
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
npm run build
cmake -S linux/fcitx5 -B build/fcitx5 \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$out" \
-DFCITX_INSTALL_USE_FCITX_SYS_PATHS=OFF
cmake --build build/fcitx5 --parallel "$NIX_BUILD_CORES"
runHook postBuild
'';
checkPhase = ''
runHook preCheck
npm test
ctest --test-dir build/fcitx5 --output-on-failure
runHook postCheck
'';
doCheck = true;
installPhase = ''
runHook preInstall
appDir="$out/share/meloasr/app"
mkdir -p "$appDir" "$out/bin" "$out/share/applications" \
"$out/share/pixmaps" "$out/share/metainfo" \
"$out/etc/xdg/autostart"
cp package.json "$appDir/"
cp -r dist "$appDir/"
if [ -d node_modules ]; then
npm prune --omit=dev --ignore-scripts
cp -r node_modules "$appDir/"
fi
install -Dm644 packaging/assets/meloasr.desktop \
"$out/share/applications/meloasr.desktop"
install -Dm644 packaging/assets/meloasr-autostart.desktop \
"$out/etc/xdg/autostart/meloasr.desktop"
install -Dm644 packaging/assets/meloasr.metainfo.xml \
"$out/share/metainfo/meloasr.metainfo.xml"
install -Dm644 src/assets/logo.png \
"$out/share/pixmaps/meloasr.png"
cmake --install build/fcitx5
makeWrapper ${electron}/bin/electron "$out/bin/meloasr" \
--add-flags "$appDir"
runHook postInstall
'';
meta = {
description = "Web-backed voice input for Fcitx5";
homepage = "https://github.com/Melorise/MeloASR";
license = lib.licenses.mpl20;
mainProgram = "meloasr";
platforms = lib.platforms.linux;
};
})