Files

102 lines
2.4 KiB
Nix

{ lib
, stdenv
, fetchPnpmDeps
, nodejs
, pnpm_11
, pnpmConfigHook
, electron_44
, cmake
, pkg-config
, makeWrapper
, fcitx5
, nlohmann_json
}:
let
pnpm = pnpm_11;
in
stdenv.mkDerivation (finalAttrs: {
pname = "tama-asr";
version = (builtins.fromJSON (builtins.readFile ../../package.json)).version;
src = ../..;
pnpmDeps = fetchPnpmDeps {
inherit (finalAttrs) pname version src;
inherit pnpm;
fetcherVersion = 4;
hash = "sha256-KoxRIhZVhshxTpl5rzzfUnaSAuGo3gCvFD2FsltN1gc=";
};
nativeBuildInputs = [
nodejs
pnpm
pnpmConfigHook
cmake
pkg-config
makeWrapper
];
buildInputs = [ fcitx5 nlohmann_json ];
# 保留 pnpmConfigHook 的 postConfigure 生命周期,但不对项目根目录运行默认 CMake 配置。
configurePhase = ''
runHook preConfigure
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
pnpm 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
pnpm test
ctest --test-dir build/fcitx5 --output-on-failure
runHook postCheck
'';
doCheck = true;
installPhase = ''
runHook preInstall
appDir="$out/share/tama-asr/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/"
install -Dm644 packaging/assets/tama-asr.desktop \
"$out/share/applications/tama-asr.desktop"
install -Dm644 packaging/assets/tama-asr-autostart.desktop \
"$out/etc/xdg/autostart/tama-asr.desktop"
install -Dm644 packaging/assets/tama-asr.metainfo.xml \
"$out/share/metainfo/tama-asr.metainfo.xml"
install -Dm644 src/assets/logo.png \
"$out/share/pixmaps/tama-asr.png"
cmake --install build/fcitx5
makeWrapper ${electron_44}/bin/electron "$out/bin/tama-asr" \
--add-flags "--ozone-platform=x11" \
--add-flags "$appDir"
runHook postInstall
'';
meta = {
description = "Web-backed voice input for Fcitx5";
homepage = "https://github.com/Melorise/TamaASR";
license = lib.licenses.mpl20;
mainProgram = "tama-asr";
platforms = lib.platforms.linux;
};
})