Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,30 @@ in {

> **Note:** 0.2.1 以降、`libllama.package` オプションは廃止されました。llama.cpp は hazkey-server に同梱されており、バックエンドデバイス(CPU / Vulkan)の選択は `hazkey-settings` の GUI から行えます。

## Vulkan バックエンドを使う場合

Vulkan バックエンドはデフォルトで無効です(CPU のみ)。NixOS で有効にするには `hazkey-server` パッケージを override してください:

```nix
{
services.hazkey = {
server.package = inputs.nix-hazkey.packages.${system}.hazkey-server.override { enableVulkan = true; };
};
}
```

Vulkan は GPU ドライバの .so をランタイムでロードするため、チェーン全体の glibc(nixpkgs)が一致する必要があります。一致しない場合 SIGSEGV でクラッシュします。

glibc を一致させるための設定:

- NixOS:
- `inputs.nix-hazkey.inputs.nixpkgs.follows = "nixpkgs";`
- Home Manager (NixOS):
- `nixpkgs.useGlobalPkgs = true;`
- `inputs.nix-hazkey.inputs.nixpkgs.follows = "nixpkgs";`
- Home Manager (non-NixOS):
- glibc の不一致が避けられないため、Vulkan は使用できません。

## Contribution

Issue、Pull Request、スター、宣伝などの任意の形式のコントリビューションは歓迎です!
Expand Down
1 change: 1 addition & 0 deletions checks-lib/home/vulkan.nix
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

services.hazkey = {
enable = true;
server.package = flake.packages.x86_64-linux.hazkey-server.override {enableVulkan = true;};
zenzai.package = flake.packages.x86_64-linux.zenzai_v3-small;
};
}
2 changes: 1 addition & 1 deletion checks/nixos-vulkan.nix
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ pkgs.testers.nixosTest {

services.hazkey = {
enable = true;

server.package = flake.packages.x86_64-linux.hazkey-server.override {enableVulkan = true;};
zenzai.package = flake.packages.x86_64-linux.zenzai_v2;
};
};
Expand Down
20 changes: 2 additions & 18 deletions internal/mkConfig.nix
Original file line number Diff line number Diff line change
Expand Up @@ -30,24 +30,8 @@ in {
hazkeySettingsPackages = lib.optional cfg.installHazkeySettings flake.packages.${system}.hazkey-settings;

# Common systemd service configuration (used as serviceConfig in NixOS, Service in Home Manager)
serviceConfig = let
wrapper = pkgs.writeShellScript "hazkey-server-wrapper" ''
# Discover system Vulkan ICD files on non-NixOS (no-op if already set, e.g. on NixOS)
if [ -z "''${VK_DRIVER_FILES-}" ]; then
VK_DRIVER_FILES=$(${pkgs.findutils}/bin/find /usr/share/vulkan/icd.d /etc/vulkan/icd.d -name '*.json' 2>/dev/null | tr '\n' ':')
export VK_DRIVER_FILES
# GPU drivers (e.g. NVIDIA) may have dependencies in system lib dirs
# that the Nix vulkan-loader can't find without LD_LIBRARY_PATH
for dir in /usr/lib64 /usr/lib/x86_64-linux-gnu /usr/lib; do
if [ -d "$dir" ]; then
export LD_LIBRARY_PATH="''${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$dir"
fi
done
fi
exec ${lib.getExe cfg.server.package} "$@"
'';
in {
ExecStart = "${wrapper}";
serviceConfig = {
ExecStart = "${lib.getExe cfg.server.package}";
Restart = "on-failure";
Environment = environmentVariables;
};
Expand Down
43 changes: 25 additions & 18 deletions packages/hazkey-server/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,24 @@
callPackage,
autoPatchelfHook,
vulkan-loader,
makeWrapper,
addDriverRunpath,
enableVulkan ? false,
}: let
upstream = callPackage ../../internal/prebuilt/fcitx5-hazkey.nix {};
in
stdenv.mkDerivation (finalAttrs: {
stdenv.mkDerivation {
pname = "hazkey-server";
src = upstream;
inherit (upstream) version;

nativeBuildInputs = [autoPatchelfHook];
nativeBuildInputs =
[autoPatchelfHook makeWrapper]
++ lib.optional enableVulkan addDriverRunpath;

buildInputs = [
stdenv.cc.cc.lib
vulkan-loader
];
buildInputs =
[stdenv.cc.cc.lib]
++ lib.optional enableVulkan vulkan-loader;

dontBuild = true;

Expand All @@ -43,22 +47,25 @@ in
cp usr/lib/hazkey/libllama/libggml.so $out/lib/hazkey/libllama/
cp usr/lib/hazkey/libllama/libllama.so $out/lib/hazkey/libllama/
cp usr/lib/hazkey/libllama/backends/*.so $out/lib/hazkey/libllama/backends/
${lib.optionalString (!enableVulkan) "rm -f $out/lib/hazkey/libllama/backends/libggml-vulkan.so"}

# Install wrapper script
cp usr/bin/hazkey-server $out/bin/
makeWrapper $out/lib/hazkey/hazkey-server $out/bin/hazkey-server \
--run '
# Load user-defined environment variables
ENV_FILE="''${XDG_CONFIG_HOME:-$HOME/.config}/hazkey/env"
if [ -f "$ENV_FILE" ]; then
. "$ENV_FILE"
fi
'

runHook postInstall
'';

fixupPhase = ''
runHook preFixup

substituteInPlace $out/bin/hazkey-server \
--replace-fail '/usr/lib/x86_64-linux-gnu/hazkey/hazkey-server' "$out/lib/hazkey/hazkey-server"

patchShebangs $out/bin/hazkey-server

runHook postFixup
# Vulkan is opt-in (enableVulkan = true) because GPU drivers are linked
# against the host glibc, which must match this flake's glibc exactly.
# A mismatch causes SIGSEGV. See README for details.
postFixup = lib.optionalString enableVulkan ''
addDriverRunpath $out/lib/hazkey/libllama/backends/libggml-vulkan.so
'';

meta = with lib; {
Expand All @@ -69,4 +76,4 @@ in
platforms = ["x86_64-linux"];
mainProgram = "hazkey-server";
};
})
}