about summary refs log tree commit diff
path: root/nixpkgs/pkgs/desktops/lomiri/services/lomiri-url-dispatcher/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/desktops/lomiri/services/lomiri-url-dispatcher/default.nix')
-rw-r--r--nixpkgs/pkgs/desktops/lomiri/services/lomiri-url-dispatcher/default.nix169
1 files changed, 169 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/desktops/lomiri/services/lomiri-url-dispatcher/default.nix b/nixpkgs/pkgs/desktops/lomiri/services/lomiri-url-dispatcher/default.nix
new file mode 100644
index 000000000000..7629da2cbb84
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/lomiri/services/lomiri-url-dispatcher/default.nix
@@ -0,0 +1,169 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, fetchpatch
+, gitUpdater
+, testers
+, cmake
+, cmake-extras
+, dbus
+, dbus-test-runner
+, glib
+, gtest
+, intltool
+, json-glib
+, libapparmor
+, libxkbcommon
+, lomiri-app-launch
+, lomiri-ui-toolkit
+, makeWrapper
+, pkg-config
+, python3
+, qtbase
+, qtdeclarative
+, qtwayland
+, runtimeShell
+, sqlite
+, systemd
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "lomiri-url-dispatcher";
+  version = "0.1.3";
+
+  src = fetchFromGitLab {
+    owner = "ubports";
+    repo = "development/core/lomiri-url-dispatcher";
+    rev = finalAttrs.version;
+    hash = "sha256-kde/HzhBHxTeyc2TCUJwpG7IfC8doDd/jNMF8KLM7KU=";
+  };
+
+  outputs = [
+    "out"
+    "dev"
+  ];
+
+  patches = [
+    # Fix case-sensitivity in tests
+    # Remove when https://gitlab.com/ubports/development/core/lomiri-url-dispatcher/-/merge_requests/8 merged & in release
+    (fetchpatch {
+      url = "https://gitlab.com/sunweaver/lomiri-url-dispatcher/-/commit/ebdd31b9640ca243e90bc7b8aca7951085998bd8.patch";
+      hash = "sha256-g4EohB3oDcWK4x62/3r/g6CFxqb7/rdK51+E/Fji1Do=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace data/CMakeLists.txt \
+      --replace "\''${SYSTEMD_USER_UNIT_DIR}" "\''${CMAKE_INSTALL_LIBDIR}/systemd/user"
+
+    substituteInPlace tests/url_dispatcher_testability/CMakeLists.txt \
+      --replace "\''${PYTHON_PACKAGE_DIR}" "$out/${python3.sitePackages}"
+
+    # Update URI handler database whenever new url-handler is installed system-wide
+    substituteInPlace data/lomiri-url-dispatcher-update-system-dir.*.in \
+      --replace '@CMAKE_INSTALL_FULL_DATAROOTDIR@' '/run/current-system/sw/share'
+  '' + lib.optionalString finalAttrs.finalPackage.doCheck ''
+    patchShebangs tests/test-sql.sh
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    cmake
+    glib # for gdbus-codegen
+    intltool
+    makeWrapper
+    pkg-config
+    (python3.withPackages (ps: with ps; [
+      setuptools
+    ] ++ lib.optionals finalAttrs.finalPackage.doCheck [
+      python-dbusmock
+    ]))
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    cmake-extras
+    dbus-test-runner
+    glib
+    gtest
+    json-glib
+    libapparmor
+    lomiri-app-launch
+    lomiri-ui-toolkit
+    qtdeclarative
+    sqlite
+    systemd
+    libxkbcommon
+  ];
+
+  nativeCheckInputs = [
+    dbus
+    sqlite
+  ];
+
+  cmakeFlags = [
+    "-DLOCAL_INSTALL=ON"
+    "-Denable_mirclient=OFF"
+  ];
+
+  doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
+
+  # Tests work with an sqlite db, cannot handle >1 test at the same time
+  enableParallelChecking = false;
+
+  dontWrapQtApps = true;
+
+  preFixup = ''
+    substituteInPlace $out/bin/lomiri-url-dispatcher-dump \
+      --replace '/bin/sh' '${runtimeShell}'
+
+    wrapProgram $out/bin/lomiri-url-dispatcher-dump \
+      --prefix PATH : ${lib.makeBinPath [ sqlite ]}
+
+    # Move from qmlscene call in desktop file to easier-to-wrap script
+    guiScript=$out/bin/lomiri-url-dispatcher-gui
+    guiExec=$(grep 'Exec=' $out/share/applications/lomiri-url-dispatcher-gui.desktop | cut -d'=' -f2-)
+
+    cat <<EOF >$guiScript
+    #!${runtimeShell}
+    $guiExec
+    EOF
+    chmod +x $guiScript
+
+    mkdir -p $out/share/icons/hicolor/scalable/apps
+    ln -s $out/share/lomiri-url-dispatcher/gui/lomiri-url-dispatcher-gui.svg $out/share/icons/hicolor/scalable/apps/
+
+    substituteInPlace $out/share/applications/lomiri-url-dispatcher-gui.desktop \
+      --replace "Exec=$guiExec" "Exec=$(basename $guiScript)" \
+      --replace "Icon=$out/share/lomiri-url-dispatcher/gui/lomiri-url-dispatcher-gui.svg" "Icon=lomiri-url-dispatcher-gui"
+
+    # Calls qmlscene from PATH, needs Qt plugins & QML components
+    qtWrapperArgs+=(
+      --prefix PATH : ${lib.makeBinPath [ qtdeclarative.dev ]}
+    )
+    wrapQtApp $guiScript
+  '';
+
+  passthru = {
+    tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
+    updateScript = gitUpdater { };
+  };
+
+  meta = with lib; {
+    description = "Lomiri operating environment service for requesting URLs to be opened";
+    longDescription = ''
+       Allows applications to request a URL to be opened and handled by another
+       process without seeing the list of other applications on the system or
+       starting them inside its own Application Confinement.
+    '';
+    homepage = "https://gitlab.com/ubports/development/core/lomiri-url-dispatcher";
+    license = with licenses; [ lgpl3Only gpl3Only ];
+    maintainers = teams.lomiri.members;
+    platforms = platforms.linux;
+    pkgConfigModules = [
+      "lomiri-url-dispatcher"
+    ];
+  };
+})