diff --git a/modules/services/espanso.nix b/modules/services/espanso.nix index f6e27e7965be..2641b59c6e00 100644 --- a/modules/services/espanso.nix +++ b/modules/services/espanso.nix @@ -4,9 +4,22 @@ let mkOption mkEnableOption mkIf maintainers literalExpression types mkRemovedOptionModule versionAtLeast; + inherit (pkgs.stdenv.hostPlatform) isDarwin isLinux; + cfg = config.services.espanso; espansoVersion = cfg.package.version; + package-bin = if isLinux then + pkgs.writeShellScriptBin "espanso" '' + if [ -n "$WAYLAND_DISPLAY" ]; then + ${lib.meta.getExe cfg.package-wayland} "$@" + else + ${lib.meta.getExe cfg.package} "$@" + fi + '' + else + cfg.package; + yaml = pkgs.formats.yaml { }; in { imports = [ @@ -26,10 +39,35 @@ in { package = mkOption { type = types.package; description = "Which espanso package to use"; - default = pkgs.espanso; + default = if isDarwin || cfg.x11Support then + pkgs.espanso + else + pkgs.espanso-wayland; defaultText = literalExpression "pkgs.espanso"; }; + package-wayland = mkOption { + type = types.package; + description = "Which espanso package to use when running under wayland"; + default = + if cfg.waylandSupport then pkgs.espanso-wayland else pkgs.espanso; + defaultText = literalExpression "pkgs.espanso-wayland"; + }; + + x11Support = mkOption { + type = types.bool; + description = "Whether to enable x11 support on linux"; + default = isLinux; + defaultText = literalExpression "enabled on linux"; + }; + + waylandSupport = mkOption { + type = types.bool; + description = "Whether to enable wayland support on linux"; + default = isLinux; + defaultText = literalExpression "enabled on linux"; + }; + configs = mkOption { type = yaml.type; default = { default = { }; }; @@ -98,14 +136,23 @@ in { }; config = mkIf cfg.enable { - assertions = [{ - assertion = versionAtLeast espansoVersion "2"; - message = '' - The services.espanso module only supports Espanso version 2 or later. - ''; - }]; + assertions = [ + { + assertion = versionAtLeast espansoVersion "2"; + message = '' + The services.espanso module only supports Espanso version 2 or later. + ''; + } + { + assertion = isLinux -> (cfg.x11Support || cfg.waylandSupport); + message = '' + In services.espanso at least x11 or wayland support must be enabled on linux. + ''; + } + ]; - home.packages = [ cfg.package ]; + # obviously conflicting to have cfg.package and cfg.package-wayland + home.packages = [ package-bin ]; xdg.configFile = let configFiles = lib.mapAttrs' (name: value: { @@ -122,7 +169,7 @@ in { Unit = { Description = "Espanso: cross platform text expander in Rust"; }; Service = { Type = "exec"; - ExecStart = "${cfg.package}/bin/espanso daemon"; + ExecStart = "${lib.meta.getExe package-bin} daemon"; Restart = "on-failure"; }; Install = { WantedBy = [ "default.target" ]; };