diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 3253a3c750b..5714d4b3c5b 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -279,6 +279,7 @@ in { libresprite = handleTest ./libresprite.nix {}; libreswan = handleTest ./libreswan.nix {}; librewolf = handleTest ./firefox.nix { firefoxPackage = pkgs.librewolf; }; + libuiohook = handleTest ./libuiohook.nix {}; lidarr = handleTest ./lidarr.nix {}; lightdm = handleTest ./lightdm.nix {}; limesurvey = handleTest ./limesurvey.nix {}; diff --git a/nixos/tests/libuiohook.nix b/nixos/tests/libuiohook.nix new file mode 100644 index 00000000000..66c5033d968 --- /dev/null +++ b/nixos/tests/libuiohook.nix @@ -0,0 +1,21 @@ +import ./make-test-python.nix ({ pkgs, lib, ... }: { + name = "libuiohook"; + meta = with lib.maintainers; { maintainers = [ anoa ]; }; + + nodes.client = { nodes, ... }: + let user = nodes.client.config.users.users.alice; + in { + imports = [ ./common/user-account.nix ./common/x11.nix ]; + + environment.systemPackages = [ pkgs.libuiohook.test ]; + + test-support.displayManager.auto.user = user.name; + }; + + testScript = { nodes, ... }: + let user = nodes.client.config.users.users.alice; + in '' + client.wait_for_x() + client.succeed("su - alice -c ${pkgs.libuiohook.test}/share/uiohook_tests >&2 &") + ''; +}) diff --git a/pkgs/development/libraries/libuiohook/default.nix b/pkgs/development/libraries/libuiohook/default.nix new file mode 100644 index 00000000000..3f1f48317fd --- /dev/null +++ b/pkgs/development/libraries/libuiohook/default.nix @@ -0,0 +1,71 @@ +{ lib +, stdenv +, fetchFromGitHub +, nixosTests +, cmake +, pkg-config +, AppKit +, ApplicationServices +, Carbon +, libX11 +, libxkbcommon +, xinput +, xorg +}: + +stdenv.mkDerivation rec { + pname = "libuiohook"; + version = "1.2.2"; + + src = fetchFromGitHub { + owner = "kwhat"; + repo = pname; + rev = version; + sha256 = "1qlz55fp4i9dd8sdwmy1m8i4i1jy1s09cpmlxzrgf7v34w72ncm7"; + }; + + nativeBuildInputs = [ cmake pkg-config ]; + + buildInputs = + if stdenv.isDarwin then [ AppKit ApplicationServices Carbon ] + else [ + libX11 + libxkbcommon + xinput + ] ++ + (with xorg; [ + libXau + libXdmcp + libXi + libXinerama + libXt + libXtst + libXext + libxkbfile + ]); + + outputs = [ "out" "test" ]; + + # We build the tests, but they're only installed when using the "test" output. + # This will produce a "uiohook_tests" binary which can be run to test the + # functionality of the library on the current system. + # Running the test binary requires a running X11 session. + cmakeFlags = [ + "-DENABLE_TEST:BOOL=ON" + ]; + + postInstall = '' + mkdir -p $test/share + cp ./uiohook_tests $test/share + ''; + + meta = with lib; { + description = "A C library to provide global keyboard and mouse hooks from userland"; + homepage = "https://github.com/kwhat/libuiohook"; + license = licenses.gpl3Only; + platforms = platforms.all; + maintainers = with maintainers; [ anoa ]; + }; + + passthru.tests.libuiohook = nixosTests.libuiohook; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 04234fe9d9f..64b079b7e69 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -19662,6 +19662,10 @@ with pkgs; libuinputplus = callPackage ../development/libraries/libuinputplus { }; + libuiohook = callPackage ../development/libraries/libuiohook { + inherit (darwin.apple_sdk.frameworks) AppKit ApplicationServices Carbon; + }; + libunistring = callPackage ../development/libraries/libunistring { }; libupnp = callPackage ../development/libraries/pupnp { };