Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ayatana-indicator-sound: init & add to Lomiri #305127

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions nixos/modules/services/desktop-managers/lomiri.nix
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ in {
]);
};

hardware.pulseaudio.enable = lib.mkDefault true;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are sure we want to use legacy pulseaudio by default and pipewire?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UBports is using PA still, as does Debian with their Lomiri packaging. I haven't had any issues with it so far, so I see no urgency to push for PW right now.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pipewire has lots of nice features for example you can easily switch the BT codec without digging deep into the menues.

networking.networkmanager.enable = lib.mkDefault true;

systemd.packages = with pkgs.lomiri; [
Expand Down Expand Up @@ -74,6 +75,8 @@ in {
ayatana-indicator-messages
ayatana-indicator-power
ayatana-indicator-session
] ++ lib.optionals (config.hardware.pulseaudio.enable || config.services.pipewire.pulse.enable) [
ayatana-indicator-sound
]) ++ (with pkgs.lomiri; [
telephony-service
] ++ lib.optionals config.networking.networkmanager.enable [
Expand Down
3 changes: 3 additions & 0 deletions nixos/tests/ayatana-indicators.nix
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ in {
ayatana-indicator-messages
ayatana-indicator-power
ayatana-indicator-session
ayatana-indicator-sound
] ++ (with pkgs.lomiri; [
lomiri-indicator-network
telephony-service
Expand All @@ -41,6 +42,8 @@ in {

services.accounts-daemon.enable = true; # messages

hardware.pulseaudio.enable = true; # sound

# Lomiri-ish setup for Lomiri indicators
# TODO move into a Lomiri module, once the package set is far enough for the DE to start

Expand Down
8 changes: 7 additions & 1 deletion nixos/tests/lomiri.nix
Original file line number Diff line number Diff line change
Expand Up @@ -290,21 +290,27 @@ in {
# There's a test app we could use that also displays their contents, but it's abit inconsistent.
with subtest("ayatana indicators work"):
mouse_click(735, 0) # the cog in the top-right, for the session indicator
machine.wait_for_text(r"(Notifications|Battery|Time|Date|System)")
machine.wait_for_text(r"(Notifications|Battery|Sound|Time|Date|System)")
machine.screenshot("indicators_open")

# Indicator order within the menus *should* be fixed based on per-indicator order setting
# Session is the one we clicked, but the last we should test (logout). Go as far left as we can test.
machine.send_key("left")
machine.send_key("left")
machine.send_key("left")
machine.send_key("left")
# Notifications are usually empty, nothing to check there

with subtest("lomiri indicator network works"):
# We start on this, don't go right
machine.wait_for_text(r"(Flight|Wi-Fi)")
machine.screenshot("indicators_network")

with subtest("lomiri indicator sound works"):
machine.send_key("right")
machine.wait_for_text(r"(Silent|Volume)")
machine.screenshot("indicators_sound")

with subtest("ayatana indicator power works"):
machine.send_key("right")
machine.wait_for_text(r"(Charge|Battery settings)")
Expand Down
125 changes: 125 additions & 0 deletions pkgs/by-name/ay/ayatana-indicator-sound/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
{ stdenv
, lib
, gitUpdater
, fetchFromGitHub
, nixosTests
, accountsservice
, cmake
, dbus
, dbus-test-runner
, glib
, gobject-introspection
, gtest
, intltool
, libayatana-common
, libgee
, libnotify
, libpulseaudio
, libqtdbusmock
, libqtdbustest
, libsForQt5
, libxml2
, lomiri
, pkg-config
, python3
, systemd
, vala
, wrapGAppsHook3
}:

stdenv.mkDerivation (finalAttrs: {
pname = "ayatana-indicator-sound";
version = "24.4.0";

src = fetchFromGitHub {
owner = "AyatanaIndicators";
repo = "ayatana-indicator-sound";
rev = "refs/tags/${finalAttrs.version}";
hash = "sha256-2B2CFUjDvBpZ8R4fnGDViS3pXO1L0kP1tnJCtqKeLaQ=";
};

postPatch = ''
# Replace systemd prefix in pkg-config query, use GNUInstallDirs location for /etc
substituteInPlace data/CMakeLists.txt \
--replace-fail 'pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir)' 'pkg_get_variable(SYSTEMD_USER_DIR systemd systemduserunitdir DEFINE_VARIABLES prefix=''${CMAKE_INSTALL_PREFIX})' \
--replace-fail 'DESTINATION "/etc' 'DESTINATION "''${CMAKE_INSTALL_FULL_SYSCONFDIR}'

# Build-time Vala codegen
substituteInPlace src/CMakeLists.txt \
--replace-fail '/usr/share/gir-1.0/AccountsService-1.0.gir' '${lib.getDev accountsservice}/share/gir-1.0/AccountsService-1.0.gir'
'';

strictDeps = true;

nativeBuildInputs = [
cmake
gobject-introspection
intltool
libpulseaudio # vala files(?)
pkg-config
vala
wrapGAppsHook3
];

buildInputs = [
accountsservice
glib
gobject-introspection
libayatana-common
libgee
libnotify
libpulseaudio
libxml2
systemd
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we could slim this down to libsystemd?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A libsystemd doesn't seem to exist.

] ++ (with lomiri; [
cmake-extras
lomiri-api
lomiri-schemas
]);

nativeCheckInputs = [
dbus
(python3.withPackages (ps: with ps; [
python-dbusmock
]))
];

checkInputs = [
dbus-test-runner
gtest
libsForQt5.qtbase
libqtdbusmock
libqtdbustest
lomiri.gmenuharness
];

cmakeFlags = [
(lib.cmakeBool "ENABLE_TESTS" finalAttrs.finalPackage.doCheck)
(lib.cmakeBool "ENABLE_LOMIRI_FEATURES" true)
(lib.cmakeBool "GSETTINGS_LOCALINSTALL" true)
(lib.cmakeBool "GSETTINGS_COMPILE" true)
];

dontWrapQtApps = true;

doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;

passthru = {
ayatana-indicators = [ "ayatana-indicator-sound" ];
tests.vm = nixosTests.ayatana-indicators;
updateScript = gitUpdater { };
};

meta = with lib; {
description = "Ayatana Indicator for managing system sound";
longDescription = ''
Ayatana Indicator Sound that provides easy control of the PulseAudio
sound daemon.
'';
homepage = "https://github.com/AyatanaIndicators/ayatana-indicator-sound";
changelog = "https://github.com/AyatanaIndicators/ayatana-indicator-sound/blob/${finalAttrs.version}/ChangeLog";
license = licenses.gpl3Only;
maintainers = with maintainers; [ OPNA2608 ];
platforms = platforms.linux;
};
})