mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 00:12:56 +00:00
Merge pull request #119058 from Riey/kime
This commit is contained in:
commit
b0899c7d3b
@ -29,7 +29,7 @@ in
|
||||
options.i18n = {
|
||||
inputMethod = {
|
||||
enabled = mkOption {
|
||||
type = types.nullOr (types.enum [ "ibus" "fcitx" "fcitx5" "nabi" "uim" "hime" ]);
|
||||
type = types.nullOr (types.enum [ "ibus" "fcitx" "fcitx5" "nabi" "uim" "hime" "kime" ]);
|
||||
default = null;
|
||||
example = "fcitx";
|
||||
description = ''
|
||||
@ -46,6 +46,7 @@ in
|
||||
<listitem><para>nabi: A Korean input method based on XIM. Nabi doesn't support Qt 5.</para></listitem>
|
||||
<listitem><para>uim: The universal input method, is a library with a XIM bridge. uim mainly support Chinese, Japanese and Korean.</para></listitem>
|
||||
<listitem><para>hime: An extremely easy-to-use input method framework.</para></listitem>
|
||||
<listitem><para>kime: Koream IME.</para></listitem>
|
||||
</itemizedlist>
|
||||
'';
|
||||
};
|
||||
|
@ -40,6 +40,11 @@
|
||||
Hime: An extremely easy-to-use input method framework.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Kime: Korean IME
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<section xml:id="module-services-input-methods-ibus">
|
||||
<title>IBus</title>
|
||||
@ -264,6 +269,23 @@ i18n.inputMethod = {
|
||||
i18n.inputMethod = {
|
||||
<link linkend="opt-i18n.inputMethod.enabled">enabled</link> = "hime";
|
||||
};
|
||||
</programlisting>
|
||||
</section>
|
||||
<section xml:id="module-services-input-methods-kime">
|
||||
<title>Kime</title>
|
||||
|
||||
<para>
|
||||
Kime is Korean IME. it's built with Rust language and let you get simple, safe, fast Korean typing
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The following snippet can be used to configure Kime:
|
||||
</para>
|
||||
|
||||
<programlisting>
|
||||
i18n.inputMethod = {
|
||||
<link linkend="opt-i18n.inputMethod.enabled">enabled</link> = "kime";
|
||||
};
|
||||
</programlisting>
|
||||
</section>
|
||||
</chapter>
|
||||
|
49
nixos/modules/i18n/input-method/kime.nix
Normal file
49
nixos/modules/i18n/input-method/kime.nix
Normal file
@ -0,0 +1,49 @@
|
||||
{ config, pkgs, lib, generators, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.i18n.inputMethod.kime;
|
||||
yamlFormat = pkgs.formats.yaml { };
|
||||
in
|
||||
{
|
||||
options = {
|
||||
i18n.inputMethod.kime = {
|
||||
config = mkOption {
|
||||
type = yamlFormat.type;
|
||||
default = { };
|
||||
example = literalExample ''
|
||||
{
|
||||
daemon = {
|
||||
modules = ["Xim" "Indicator"];
|
||||
};
|
||||
|
||||
indicator = {
|
||||
icon_color = "White";
|
||||
};
|
||||
|
||||
engine = {
|
||||
hangul = {
|
||||
layout = "dubeolsik";
|
||||
};
|
||||
};
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
kime configuration. Refer to <link xlink:href="https://github.com/Riey/kime/blob/v${pkgs.kime.version}/docs/CONFIGURATION.md"/> for details on supported values.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf (config.i18n.inputMethod.enabled == "kime") {
|
||||
i18n.inputMethod.package = pkgs.kime;
|
||||
|
||||
environment.variables = {
|
||||
GTK_IM_MODULE = "kime";
|
||||
QT_IM_MODULE = "kime";
|
||||
XMODIFIERS = "@im=kime";
|
||||
};
|
||||
|
||||
environment.etc."xdg/kime/config.yaml".text = replaceStrings [ "\\\\" ] [ "\\" ] (builtins.toJSON cfg.config);
|
||||
};
|
||||
}
|
||||
|
@ -92,6 +92,7 @@
|
||||
./i18n/input-method/ibus.nix
|
||||
./i18n/input-method/nabi.nix
|
||||
./i18n/input-method/uim.nix
|
||||
./i18n/input-method/kime.nix
|
||||
./installer/tools/tools.nix
|
||||
./misc/assertions.nix
|
||||
./misc/crashdump.nix
|
||||
|
113
pkgs/tools/inputmethods/kime/default.nix
Normal file
113
pkgs/tools/inputmethods/kime/default.nix
Normal file
@ -0,0 +1,113 @@
|
||||
{ lib, stdenv, rustPlatform, rustc, cargo, fetchFromGitHub, pkg-config, cmake, extra-cmake-modules, llvmPackages
|
||||
, withWayland ? true
|
||||
, withIndicator ? true, dbus, libdbusmenu
|
||||
, withXim ? true, xorg, cairo
|
||||
, withGtk2 ? true, gtk2
|
||||
, withGtk3 ? true, gtk3
|
||||
, withQt5 ? true, qt5
|
||||
}:
|
||||
|
||||
let
|
||||
cmake_args = lib.optionals withGtk2 ["-DENABLE_GTK2=ON"]
|
||||
++ lib.optionals withGtk3 ["-DENABLE_GTK3=ON"]
|
||||
++ lib.optionals withQt5 ["-DENABLE_QT5=ON"];
|
||||
|
||||
optFlag = w: (if w then "1" else "0");
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "kime";
|
||||
version = "2.5.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Riey";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "10zd4yrqxzxf4nj3b5bsblcmlbqssxqq9pac0misa1g61jdbszj8";
|
||||
};
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoTarball {
|
||||
inherit src;
|
||||
sha256 = "1bimi7020m7v287bh7via7zm9m7y13d13kqpd772xmpdbwrj8nrl";
|
||||
};
|
||||
|
||||
# Replace autostart path
|
||||
postPatch = ''
|
||||
substituteInPlace res/kime.desktop --replace "/usr/bin/kime" "$out/bin/kime"
|
||||
'';
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
dontWrapQtApps = true;
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
export KIME_BUILD_CHECK=1
|
||||
export KIME_BUILD_INDICATOR=${optFlag withIndicator}
|
||||
export KIME_BUILD_XIM=${optFlag withXim}
|
||||
export KIME_BUILD_WAYLAND=${optFlag withWayland}
|
||||
export KIME_BUILD_KIME=1
|
||||
export KIME_CARGO_ARGS="-j$NIX_BUILD_CORES --frozen"
|
||||
export KIME_MAKE_ARGS="-j$NIX_BUILD_CORES"
|
||||
export KIME_CMAKE_ARGS="${lib.concatStringsSep " " cmake_args}"
|
||||
bash scripts/build.sh -r
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
doCheck = true;
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
cargo test --release --frozen
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
export KIME_BIN_DIR=bin
|
||||
export KIME_INSTALL_HEADER=1
|
||||
export KIME_INSTALL_DOC=1
|
||||
export KIME_INCLUDE_DIR=include
|
||||
export KIME_DOC_DIR=share/doc/kime
|
||||
export KIME_ICON_DIR=share/icons
|
||||
export KIME_LIB_DIR=lib
|
||||
export KIME_QT5_DIR=lib/qt-${qt5.qtbase.version}
|
||||
bash scripts/install.sh "$out"
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
doInstallCheck = true;
|
||||
installCheckPhase = ''
|
||||
runHook preInstallCheck
|
||||
# Don't pipe output to head directly it will cause broken pipe error https://github.com/rust-lang/rust/issues/46016
|
||||
kimeVersion=$(echo "$($out/bin/kime --version)" | head -n1)
|
||||
echo "'kime --version | head -n1' returns: $kimeVersion"
|
||||
[[ "$kimeVersion" == "kime ${version}" ]]
|
||||
runHook postInstallCheck
|
||||
'';
|
||||
|
||||
buildInputs = lib.optionals withIndicator [ dbus libdbusmenu ]
|
||||
++ lib.optionals withXim [ xorg.libxcb cairo ]
|
||||
++ lib.optionals withGtk2 [ gtk2 ]
|
||||
++ lib.optionals withGtk3 [ gtk3 ]
|
||||
++ lib.optionals withQt5 [ qt5.qtbase ];
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
llvmPackages.clang
|
||||
llvmPackages.libclang
|
||||
llvmPackages.bintools
|
||||
cmake
|
||||
extra-cmake-modules
|
||||
rustPlatform.cargoSetupHook
|
||||
rustc
|
||||
cargo
|
||||
];
|
||||
|
||||
RUST_BACKTRACE = 1;
|
||||
LIBCLANG_PATH = "${llvmPackages.libclang}/lib";
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/Riey/kime";
|
||||
description = "Korean IME";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = [ maintainers.riey ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
@ -3467,6 +3467,8 @@ in
|
||||
|
||||
gebaar-libinput = callPackage ../tools/inputmethods/gebaar-libinput { };
|
||||
|
||||
kime = callPackage ../tools/inputmethods/kime { };
|
||||
|
||||
libpinyin = callPackage ../development/libraries/libpinyin { };
|
||||
|
||||
libskk = callPackage ../development/libraries/libskk {
|
||||
|
Loading…
Reference in New Issue
Block a user