{ pkgs, config, lib, ... }: with lib; let cfg = config.xyno.desktop.ibus; in { options.xyno.desktop.ibus.enable = mkEnableOption "enable ibus input daemon thing"; options.xyno.desktop.ibus.wantedBy = mkOption { type = types.str; default = "niri.service"; }; config = mkIf cfg.enable { services.libinput.enable = true; # just... enable ibus as input method and maybe now we have consistent unicode input everywhere # fuck qt tbh i18n.inputMethod = { enable = true; type = "ibus"; }; systemd.user.services.ibus = let ibusPackage = config.i18n.inputMethod.package; in assert hasPrefix "ibus-with-plugins" ibusPackage.name; { # panel is weird... # default is ${ibusPackage}/libexec/ibus-ui-gtk3 which works but sends a notification that it's misconfigured # wayland support can be enabled with --enable-wayland-im but that segfaults (possible due to zwp_input_method_v1 not being available?) script = '' exec ${ibusPackage}/bin/ibus-daemon --xim --replace --panel '${ibusPackage}/libexec/ibus-ui-gtk3' ''; serviceConfig = { Type = "dbus"; BusName = "org.freedesktop.IBus"; Restart = "on-abnormal"; }; unitConfig = { CollectMode = "inactive-or-failed"; }; # yeah we hardcoding this now, fuck it wantedBy = [ cfg.wantedBy ]; partOf = [ "graphical-session.target" ]; }; }; }