diff --git a/nixos/tests/ayatana-indicators.nix b/nixos/tests/ayatana-indicators.nix index bc7ff75f390f7..2111a4a65b920 100644 --- a/nixos/tests/ayatana-indicators.nix +++ b/nixos/tests/ayatana-indicators.nix @@ -4,7 +4,7 @@ in { name = "ayatana-indicators"; meta = { - maintainers = with lib.maintainers; [ OPNA2608 ]; + maintainers = lib.teams.lomiri.members; }; nodes.machine = { config, ... }: { @@ -28,16 +28,34 @@ in { enable = true; packages = with pkgs; [ ayatana-indicator-messages - ]; + ] ++ (with pkgs.lomiri; [ + lomiri-indicator-network + ]); }; - # Services needed by some indicators + # Setup needed by some indicators + services.accounts-daemon.enable = true; # messages + + # Lomiri-ish setup for Lomiri indicators + # TODO move into a Lomiri module, once the package set is far enough for the DE to start + + networking.networkmanager.enable = true; # lomiri-network-indicator + # TODO potentially urfkill for lomiri-network-indicator? }; # TODO session indicator starts up in a semi-broken state, but works fine after a restart. maybe being started before graphical session is truly up & ready? testScript = { nodes, ... }: let - runCommandPerIndicatorService = command: lib.strings.concatMapStringsSep "\n" command nodes.machine.systemd.user.targets."ayatana-indicators".wants; + runCommandOverServiceList = list: command: + lib.strings.concatMapStringsSep "\n" command list; + + runCommandOverAyatanaIndicators = runCommandOverServiceList + (builtins.filter + (service: !(lib.strings.hasPrefix "lomiri" service || lib.strings.hasPrefix "telephony-service" service)) + nodes.machine.systemd.user.targets."ayatana-indicators".wants); + + runCommandOverAllIndicators = runCommandOverServiceList + nodes.machine.systemd.user.targets."ayatana-indicators".wants; in '' start_all() machine.wait_for_x() @@ -50,7 +68,7 @@ in { machine.sleep(10) # Now check if all indicators were brought up successfully, and kill them for later - '' + (runCommandPerIndicatorService (service: let serviceExec = builtins.replaceStrings [ "." ] [ "-" ] service; in '' + '' + (runCommandOverAyatanaIndicators (service: let serviceExec = builtins.replaceStrings [ "." ] [ "-" ] service; in '' machine.succeed("pgrep -f ${serviceExec}") machine.succeed("pkill -f ${serviceExec}") '')) + '' @@ -65,7 +83,7 @@ in { machine.sleep(10) # Now check if all indicator services were brought up successfully - '' + runCommandPerIndicatorService (service: '' + '' + runCommandOverAllIndicators (service: '' machine.wait_for_unit("${service}", "${user}") ''); }) diff --git a/pkgs/desktops/lomiri/default.nix b/pkgs/desktops/lomiri/default.nix index 70caa9d644203..3e044ab69055f 100644 --- a/pkgs/desktops/lomiri/default.nix +++ b/pkgs/desktops/lomiri/default.nix @@ -34,6 +34,7 @@ let hfd-service = callPackage ./services/hfd-service { }; history-service = callPackage ./services/history-service { }; lomiri-download-manager = callPackage ./services/lomiri-download-manager { }; + lomiri-indicator-network = callPackage ./services/lomiri-indicator-network { }; lomiri-url-dispatcher = callPackage ./services/lomiri-url-dispatcher { }; mediascanner2 = callPackage ./services/mediascanner2 { }; }; diff --git a/pkgs/desktops/lomiri/services/lomiri-indicator-network/default.nix b/pkgs/desktops/lomiri/services/lomiri-indicator-network/default.nix new file mode 100644 index 0000000000000..ccabf1da7eca6 --- /dev/null +++ b/pkgs/desktops/lomiri/services/lomiri-indicator-network/default.nix @@ -0,0 +1,148 @@ +{ stdenv +, lib +, fetchFromGitLab +, fetchpatch +, gitUpdater +, nixosTests +, testers +, cmake +, cmake-extras +, coreutils +, dbus +, doxygen +, gettext +, glib +, gmenuharness +, gtest +, intltool +, libsecret +, libqofono +, libqtdbusmock +, libqtdbustest +, lomiri-api +, lomiri-url-dispatcher +, networkmanager +, ofono +, pkg-config +, python3 +, qtdeclarative +, qtbase +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "lomiri-indicator-network"; + version = "1.0.1"; + + src = fetchFromGitLab { + owner = "ubports"; + repo = "development/core/lomiri-indicator-network"; + rev = finalAttrs.version; + hash = "sha256-rJKWhW082ndVPEQHjuSriKtl0zQw86adxiINkZQq1hY="; + }; + + outputs = [ + "out" + "dev" + "doc" + ]; + + patches = [ + # Remove when version > 1.0.1 + (fetchpatch { + name = "0001-lomiri-indicator-network-Make-less-assumptions-about-where-files-will-end-up.patch"; + url = "https://gitlab.com/ubports/development/core/lomiri-indicator-network/-/commit/065212b22ab9aa8d25a61b5482ad6511e4c8510b.patch"; + hash = "sha256-WrDTBKusK1808W8LZRGWaTOExu7gKpYBvkQ8hzoHoHk="; + }) + + # Remove when version > 1.0.1 + (fetchpatch { + name = "0002-lomiri-indicator-network-Honour-CMAKE_INSTALL_DOCDIR_fordocumentation-installation.patch"; + url = "https://gitlab.com/ubports/development/core/lomiri-indicator-network/-/commit/79b9e12313f765ab6e95b4d4dfefbdbca50ef3c6.patch"; + hash = "sha256-vRfdegEi892UlrC9c1+5Td7CHLh7u0foPggLNBfc8lw="; + }) + ]; + + postPatch = '' + # Queried via pkg-config, would need to override a prefix variable + # Needs CMake 3.28 or higher to do as part of the call, https://github.com/NixOS/nixpkgs/pull/275284 + substituteInPlace data/CMakeLists.txt \ + --replace 'pkg_get_variable(DBUS_SESSION_BUS_SERVICES_DIR dbus-1 session_bus_services_dir)' 'set(DBUS_SESSION_BUS_SERVICES_DIR "''${CMAKE_INSTALL_SYSCONFDIR}/dbus-1/services")' \ + --replace 'pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)' 'set(SYSTEMD_USER_DIR "''${CMAKE_INSTALL_PREFIX}/lib/systemd/user")' + ''; + + strictDeps = true; + + nativeBuildInputs = [ + cmake + doxygen + gettext + intltool + pkg-config + qtdeclarative + ]; + + buildInputs = [ + cmake-extras + dbus + glib + libqofono + libsecret + lomiri-api + lomiri-url-dispatcher + networkmanager + ofono + qtbase + ]; + + nativeCheckInputs = [ + (python3.withPackages (ps: with ps; [ + python-dbusmock + ])) + ]; + + checkInputs = [ + gmenuharness + gtest + libqtdbusmock + libqtdbustest + ]; + + dontWrapQtApps = true; + + cmakeFlags = [ + (lib.cmakeBool "GSETTINGS_LOCALINSTALL" true) + (lib.cmakeBool "GSETTINGS_COMPILE" true) + (lib.cmakeBool "ENABLE_TESTS" finalAttrs.doCheck) + (lib.cmakeBool "ENABLE_UBUNTU_COMPAT" true) # just in case something needs it + (lib.cmakeBool "BUILD_DOC" true) # lacks QML docs, needs qdoc: https://github.com/NixOS/nixpkgs/pull/245379 + ]; + + doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform; + + postInstall = '' + substituteInPlace $out/etc/dbus-1/services/com.lomiri.connectivity1.service \ + --replace '/bin/false' '${lib.getExe' coreutils "false"}' + ''; + + passthru = { + ayatana-indicators = [ + "lomiri-indicator-network" + ]; + tests = { + pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage; + vm = nixosTests.ayatana-indicators; + }; + updateScript = gitUpdater { }; + }; + + meta = with lib; { + description = "Ayatana indiator exporting the network settings menu through D-Bus"; + homepage = "https://gitlab.com/ubports/development/core/lomiri-indicator-network"; + license = licenses.gpl3Only; + maintainers = teams.lomiri.members; + platforms = platforms.linux; + pkgConfigModules = [ + "lomiri-connectivity-qt1" + ]; + }; +})