From dee2dab7c6a84c7615e81d20aec5e12ed3b0ae1b Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sun, 16 Sep 2018 18:36:21 +0200 Subject: ibus-engines.typing-booster: init at 2.1.1 This package providesa completion input method for faster typing. See https://mike-fabian.github.io/ibus-typing-booster Detailed instructions how to activate this IBus engine on your desktop can be found in the upstream docs: https://mike-fabian.github.io/ibus-typing-booster/documentation.html A simple VM with the Gnome3 desktop and activated `ibus' looks like this: ```nix { emojipicker = { pkgs, ... }: { services.xserver = { enable = true; desktopManager.gnome3.enable = true; desktopManager.xterm.enable = false; }; users.extraUsers.vm = { password = "vm"; isNormalUser = true; }; i18n.inputMethod.ibus.engines = [ pkgs.ibus-engines.typing-booster ]; i18n.inputMethod.enabled = "ibus"; virtualisation.memorySize = 2048; }; } ``` Fixes #38721 --- doc/package-notes.xml | 60 ++++++++++++++++++++++ .../ibus-engines/ibus-typing-booster/default.nix | 41 +++++++++++++++ .../ibus-typing-booster/hunspell-dirs.patch | 31 +++++++++++ .../ibus-engines/ibus-typing-booster/wrapper.nix | 30 +++++++++++ pkgs/top-level/all-packages.nix | 6 +++ 5 files changed, 168 insertions(+) create mode 100644 pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix create mode 100644 pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/hunspell-dirs.patch create mode 100644 pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix diff --git a/doc/package-notes.xml b/doc/package-notes.xml index 1f088e8aaa0e..05e820bcabe5 100644 --- a/doc/package-notes.xml +++ b/doc/package-notes.xml @@ -814,4 +814,64 @@ citrix_receiver.override { +
+ ibus-engines.typing-booster + + This package is an ibus-based completion method to speed up typing. + +
+ Activating the engine + + + IBus needs to be configured accordingly to activate typing-booster. The configuration + depends on the desktop manager in use. For detailed instructions, please refer to the + upstream docs. + + + On NixOS you need to explicitly enable ibus with given engines + before customizing your desktop to use typing-booster. This can be achieved + using the ibus module: +{ pkgs, ... }: { + i18n.inputMethod = { + enabled = "ibus"; + ibus.engines = with pkgs.ibus-engines; [ typing-booster ]; + }; +} + +
+ +
+ Using custom hunspell dictionaries + + + The IBus engine is based on hunspell to support completion in many languages. + By default the dictionaries de-de, en-us, es-es, + it-it, sv-se and sv-fi + are in use. To add another dictionary, the package can be overridden like this: +ibus-engines.typing-booster.override { + langs = [ "de-at" "en-gb" ]; +} + + + Note: each language passed to langs must be an attribute name in + pkgs.hunspellDicts. + +
+ +
+ Built-in emoji picker + + + The ibus-engines.typing-booster package contains a program + named emoji-picker. To display all emojis correctly, + a special font such as noto-fonts-emoji is needed: + + + On NixOS it can be installed using the following expression: +{ pkgs, ... }: { + fonts.fonts = with pkgs; [ noto-fonts-emoji ]; +} + +
+
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix new file mode 100644 index 000000000000..c5aaa032b40e --- /dev/null +++ b/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix @@ -0,0 +1,41 @@ +{ stdenv, fetchFromGitHub, autoreconfHook, python3, ibus, pkgconfig, gtk3, m17n_lib +, wrapGAppsHook, gobjectIntrospection +}: + +let + + python = python3.withPackages (ps: with ps; [ + pygobject3 + dbus-python + ]); + +in + +stdenv.mkDerivation rec { + name = "ibus-typing-booster-${version}"; + version = "2.1.1"; + + src = fetchFromGitHub { + owner = "mike-fabian"; + repo = "ibus-typing-booster"; + rev = version; + sha256 = "01kpxplk9nh56f32fkq3nnsqykbzpi7pcxbfp38dq0prgrhw9a6b"; + }; + + patches = [ ./hunspell-dirs.patch ]; + + nativeBuildInputs = [ autoreconfHook pkgconfig wrapGAppsHook gobjectIntrospection ]; + buildInputs = [ python ibus gtk3 m17n_lib ]; + + preFixup = '' + gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${m17n_lib}/lib") + ''; + + meta = with stdenv.lib; { + homepage = https://mike-fabian.github.io/ibus-typing-booster/; + license = licenses.gpl3Plus; + description = "A typing booster engine for the IBus platform"; + maintainers = with maintainers; [ ma27 ]; + isIbusEngine = true; + }; +} diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/hunspell-dirs.patch b/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/hunspell-dirs.patch new file mode 100644 index 000000000000..7b624b379a26 --- /dev/null +++ b/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/hunspell-dirs.patch @@ -0,0 +1,31 @@ +diff --git a/engine/itb_util.py b/engine/itb_util.py +index ded236a..633525a 100755 +--- a/engine/itb_util.py ++++ b/engine/itb_util.py +@@ -1876,14 +1876,18 @@ def find_hunspell_dictionary(language): + If no dictionary can be found for the requested language, + the return value is ('', ''). + ''' +- dirnames = [ +- '/usr/share/hunspell', +- '/usr/share/myspell', +- '/usr/share/myspell/dicts', +- '/usr/local/share/hunspell', # On FreeBSD the dictionaries are here +- '/usr/local/share/myspell', +- '/usr/local/share/myspell/dicts', +- ] ++ ++ if "NIX_HUNSPELL_DIRS" in os.environ: ++ dirnames = os.environ["NIX_HUNSPELL_DIRS"].split(":") ++ else: # fallback to the original behavior ++ dirnames = [ ++ '/usr/share/hunspell', ++ '/usr/share/myspell', ++ '/usr/share/myspell/dicts', ++ '/usr/local/share/hunspell', # On FreeBSD the dictionaries are here ++ '/usr/local/share/myspell', ++ '/usr/local/share/myspell/dicts', ++ ] + dic_path = '' + aff_path = '' + for language in expand_languages([language]): diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix new file mode 100644 index 000000000000..e6505f3cc468 --- /dev/null +++ b/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix @@ -0,0 +1,30 @@ +{ typing-booster, symlinkJoin, hunspellDicts, lib, makeWrapper +, langs ? [ "de-de" "en-us" "es-es" "it-it" "sv-se" "sv-fi" ] +}: + +let + + hunspellDirs = with lib; makeSearchPath ":" (flatten (flip map langs (lang: [ + "${hunspellDicts.${lang}}/share/hunspell" + "${hunspellDicts.${lang}}/share/myspell" + "${hunspellDicts.${lang}}/share/myspell/dicts" + ]))); + +in + +symlinkJoin { + name = "${typing-booster.name}-with-hunspell"; + paths = [ typing-booster ]; + nativeBuildInputs = [ makeWrapper ]; + + postBuild = '' + for i in bin/emoji-picker libexec/ibus-{setup,engine}-typing-booster; do + wrapProgram "$out/$i" \ + --prefix NIX_HUNSPELL_DIRS : ${hunspellDirs} + done + + sed -i -e "s,${typing-booster},$out," $out/share/ibus/component/typing-booster.xml + ''; + + inherit (typing-booster) meta; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9722e945594e..708eef1e49ed 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1906,6 +1906,12 @@ with pkgs; }; uniemoji = callPackage ../tools/inputmethods/ibus-engines/ibus-uniemoji { }; + + typing-booster-unwrapped = callPackage ../tools/inputmethods/ibus-engines/ibus-typing-booster { }; + + typing-booster = callPackage ../tools/inputmethods/ibus-engines/ibus-typing-booster/wrapper.nix { + typing-booster = ibus-engines.typing-booster-unwrapped; + }; }; ibus-with-plugins = callPackage ../tools/inputmethods/ibus/wrapper.nix { -- cgit 1.4.1