about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/office/espanso/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/office/espanso/default.nix')
-rw-r--r--nixpkgs/pkgs/applications/office/espanso/default.nix158
1 files changed, 158 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/office/espanso/default.nix b/nixpkgs/pkgs/applications/office/espanso/default.nix
new file mode 100644
index 000000000000..1b02f3be80ec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/office/espanso/default.nix
@@ -0,0 +1,158 @@
+{ lib
+, coreutils
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, extra-cmake-modules
+, dbus
+, libX11
+, libXi
+, libXtst
+, libnotify
+, libxkbcommon
+, openssl
+, xclip
+, xdotool
+, setxkbmap
+, wl-clipboard
+, wxGTK32
+, makeWrapper
+, stdenv
+, AppKit
+, Cocoa
+, Foundation
+, IOKit
+, Kernel
+, AVFoundation
+, Carbon
+, QTKit
+, AVKit
+, WebKit
+, waylandSupport ? false
+, x11Support ? stdenv.isLinux
+, testers
+, espanso
+}:
+# espanso does not support building with both X11 and Wayland support at the same time
+assert stdenv.isLinux -> x11Support != waylandSupport;
+assert stdenv.isDarwin -> !x11Support;
+assert stdenv.isDarwin -> !waylandSupport;
+rustPlatform.buildRustPackage rec {
+  pname = "espanso";
+  version = "2.1.8";
+
+  src = fetchFromGitHub {
+    owner = "espanso";
+    repo = "espanso";
+    rev = "v${version}";
+    hash = "sha256-5TUo5B1UZZARgTHbK2+520e3mGZkZ5tTez1qvZvMnxs=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "yaml-rust-0.4.6" = "sha256-wXFy0/s4y6wB3UO19jsLwBdzMy7CGX4JoUt5V6cU7LU=";
+    };
+  };
+
+  cargoPatches = lib.optionals stdenv.isDarwin [
+    ./inject-wx-on-darwin.patch
+  ];
+
+  nativeBuildInputs = [
+    extra-cmake-modules
+    pkg-config
+    makeWrapper
+    wxGTK32
+  ];
+
+  # Ref: https://github.com/espanso/espanso/blob/78df1b704fe2cc5ea26f88fdc443b6ae1df8a989/scripts/build_binary.rs#LL49C3-L62C4
+  buildNoDefaultFeatures = true;
+  buildFeatures = [
+    "modulo"
+  ] ++ lib.optionals waylandSupport[
+    "wayland"
+  ] ++ lib.optionals stdenv.isLinux [
+    "vendored-tls"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "native-tls"
+  ];
+
+  buildInputs = [
+    wxGTK32
+  ] ++ lib.optionals stdenv.isLinux [
+    openssl
+    dbus
+    libnotify
+    libxkbcommon
+  ] ++ lib.optionals stdenv.isDarwin [
+    AppKit
+    Cocoa
+    Foundation
+    IOKit
+    Kernel
+    AVFoundation
+    Carbon
+    QTKit
+    AVKit
+    WebKit
+  ] ++ lib.optionals waylandSupport [
+    wl-clipboard
+  ] ++ lib.optionals x11Support [
+    libXi
+    libXtst
+    libX11
+    xclip
+    xdotool
+  ];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace scripts/create_bundle.sh \
+      --replace target/mac/ $out/Applications/ \
+      --replace /bin/echo ${coreutils}/bin/echo
+    patchShebangs scripts/create_bundle.sh
+    substituteInPlace espanso/src/res/macos/Info.plist \
+      --replace "<string>espanso</string>" "<string>${placeholder "out"}/Applications/Espanso.app/Contents/MacOS/espanso</string>"
+    substituteInPlace espanso/src/res/macos/com.federicoterzi.espanso.plist \
+      --replace "<string>/Applications/Espanso.app/Contents/MacOS/espanso</string>" "<string>${placeholder "out"}/Applications/Espanso.app/Contents/MacOS/espanso</string>" \
+      --replace "<string>/usr/bin" "<string>${placeholder "out"}/bin:/usr/bin"
+    substituteInPlace espanso/src/path/macos.rs  espanso/src/path/linux.rs \
+      --replace '"/usr/local/bin/espanso"' '"${placeholder "out"}/bin/espanso"'
+  '';
+
+  # Some tests require networking
+  doCheck = false;
+
+  postInstall = if stdenv.isDarwin then ''
+    EXEC_PATH=$out/bin/espanso BUILD_ARCH=current ${stdenv.shell} ./scripts/create_bundle.sh
+  '' else ''
+    wrapProgram $out/bin/espanso \
+      --prefix PATH : ${lib.makeBinPath (
+        lib.optionals stdenv.isLinux [
+          libnotify
+          setxkbmap
+        ] ++ lib.optionals waylandSupport [
+          wl-clipboard
+        ] ++ lib.optionals x11Support [
+          xclip
+        ]
+      )}
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = espanso;
+  };
+
+  meta = with lib; {
+    description = "Cross-platform Text Expander written in Rust";
+    mainProgram = "espanso";
+    homepage = "https://espanso.org";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kimat thehedgeh0g ];
+    platforms = platforms.unix;
+
+    longDescription = ''
+      Espanso detects when you type a keyword and replaces it while you're typing.
+    '';
+  };
+}