mpc: 0.34 -> 0.35 (#347387)

This commit is contained in:
Sefa Eyeoglu
2024-11-02 00:29:08 +01:00
committed by GitHub
9 changed files with 294 additions and 244 deletions
@@ -1,4 +1,9 @@
{ config, lib, pkgs, ... }:
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.triggerhappy;
@@ -6,35 +11,53 @@ let
socket = "/run/thd.socket";
configFile = pkgs.writeText "triggerhappy.conf" ''
${lib.concatMapStringsSep "\n"
({ keys, event, cmd, ... }:
''${lib.concatMapStringsSep "+" (x: "KEY_" + x) keys} ${toString { press = 1; hold = 2; release = 0; }.${event}} ${cmd}''
)
cfg.bindings}
${lib.concatMapStringsSep "\n" (
{
keys,
event,
cmd,
...
}:
''${lib.concatMapStringsSep "+" (x: "KEY_" + x) keys} ${
toString
{
press = 1;
hold = 2;
release = 0;
}
.${event}
} ${cmd}''
) cfg.bindings}
${cfg.extraConfig}
'';
bindingCfg = { ... }: {
options = {
bindingCfg =
{ ... }:
{
options = {
keys = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "List of keys to match. Key names as defined in linux/input-event-codes.h";
};
event = lib.mkOption {
type = lib.types.enum [
"press"
"hold"
"release"
];
default = "press";
description = "Event to match.";
};
cmd = lib.mkOption {
type = lib.types.str;
description = "What to run.";
};
keys = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "List of keys to match. Key names as defined in linux/input-event-codes.h";
};
event = lib.mkOption {
type = lib.types.enum ["press" "hold" "release"];
default = "press";
description = "Event to match.";
};
cmd = lib.mkOption {
type = lib.types.str;
description = "What to run.";
};
};
};
in
@@ -65,9 +88,9 @@ in
bindings = lib.mkOption {
type = lib.types.listOf (lib.types.submodule bindingCfg);
default = [];
default = [ ];
example = lib.literalExpression ''
[ { keys = ["PLAYPAUSE"]; cmd = "''${pkgs.mpc-cli}/bin/mpc -q toggle"; } ]
[ { keys = ["PLAYPAUSE"]; cmd = "''${lib.getExe pkgs.mpc} -q toggle"; } ]
'';
description = ''
Key bindings for {command}`triggerhappy`.
@@ -86,7 +109,6 @@ in
};
###### implementation
config = lib.mkIf cfg.enable {
@@ -101,18 +123,22 @@ in
wantedBy = [ "multi-user.target" ];
description = "Global hotkey daemon";
serviceConfig = {
ExecStart = "${pkgs.triggerhappy}/bin/thd ${lib.optionalString (cfg.user != "root") "--user ${cfg.user}"} --socket ${socket} --triggers ${configFile} --deviceglob /dev/input/event*";
ExecStart = "${pkgs.triggerhappy}/bin/thd ${
lib.optionalString (cfg.user != "root") "--user ${cfg.user}"
} --socket ${socket} --triggers ${configFile} --deviceglob /dev/input/event*";
};
};
services.udev.packages = lib.singleton (pkgs.writeTextFile {
name = "triggerhappy-udev-rules";
destination = "/etc/udev/rules.d/61-triggerhappy.rules";
text = ''
ACTION=="add", SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{name}!="triggerhappy", \
RUN+="${pkgs.triggerhappy}/bin/th-cmd --socket ${socket} --passfd --udev"
'';
});
services.udev.packages = lib.singleton (
pkgs.writeTextFile {
name = "triggerhappy-udev-rules";
destination = "/etc/udev/rules.d/61-triggerhappy.rules";
text = ''
ACTION=="add", SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{name}!="triggerhappy", \
RUN+="${pkgs.triggerhappy}/bin/th-cmd --socket ${socket} --passfd --udev"
'';
}
);
};
+72 -55
View File
@@ -1,12 +1,13 @@
import ./make-test-python.nix ({ pkgs, lib, ... }:
import ./make-test-python.nix (
{ pkgs, lib, ... }:
let
track = pkgs.fetchurl {
# Sourced from http://freemusicarchive.org/music/Blue_Wave_Theory/Surf_Music_Month_Challenge/Skyhawk_Beach_fade_in
# License: http://creativecommons.org/licenses/by-sa/4.0/
name = "Blue_Wave_Theory-Skyhawk_Beach.mp3";
url = "https://freemusicarchive.org/file/music/ccCommunity/Blue_Wave_Theory/Surf_Music_Month_Challenge/Blue_Wave_Theory_-_04_-_Skyhawk_Beach.mp3";
sha256 = "0xw417bxkx4gqqy139bb21yldi37xx8xjfxrwaqa0gyw19dl6mgp";
hash = "sha256-91VDWwrcP6Cw4rk72VHvZ8RGfRBrpRE8xo/02dcJhHc=";
meta.license = lib.licenses.cc-by-sa-40;
};
defaultCfg = rec {
@@ -16,42 +17,56 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
musicDirectory = "${dataDir}/music";
};
defaultMpdCfg = with defaultCfg; {
inherit dataDir musicDirectory user group;
defaultMpdCfg = {
inherit (defaultCfg)
dataDir
musicDirectory
user
group
;
enable = true;
};
musicService = { user, group, musicDirectory }: {
description = "Sets up the music file(s) for MPD to use.";
requires = [ "mpd.service" ];
after = [ "mpd.service" ];
wantedBy = [ "default.target" ];
script = ''
cp ${track} ${musicDirectory}
'';
serviceConfig = {
User = user;
Group = group;
musicService =
{
user,
group,
musicDirectory,
}:
{
description = "Sets up the music file(s) for MPD to use.";
requires = [ "mpd.service" ];
after = [ "mpd.service" ];
wantedBy = [ "default.target" ];
script = ''
cp ${track} ${musicDirectory}
'';
serviceConfig = {
User = user;
Group = group;
};
};
};
mkServer = { mpd, musicService, }:
{ boot.kernelModules = [ "snd-dummy" ];
mkServer =
{ mpd, musicService }:
{
boot.kernelModules = [ "snd-dummy" ];
services.mpd = mpd;
systemd.services.musicService = musicService;
};
in {
in
{
name = "mpd";
meta = with pkgs.lib.maintainers; {
maintainers = [ emmanuelrosa ];
meta = {
maintainers = with lib.maintainers; [ emmanuelrosa ];
};
nodes =
{ client =
{ ... }: { };
nodes = {
client = { ... }: { };
serverALSA =
{ ... }: lib.mkMerge [
{ ... }:
lib.mkMerge [
(mkServer {
mpd = defaultMpdCfg // {
network.listenAddress = "any";
@@ -63,13 +78,14 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
}
'';
};
musicService = with defaultMpdCfg; musicService { inherit user group musicDirectory; };
musicService = musicService { inherit (defaultMpdCfg) user group musicDirectory; };
})
{ networking.firewall.allowedTCPPorts = [ 6600 ]; }
];
serverPulseAudio =
{ ... }: lib.mkMerge [
{ ... }:
lib.mkMerge [
(mkServer {
mpd = defaultMpdCfg // {
extraConfig = ''
@@ -80,7 +96,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
'';
};
musicService = with defaultCfg; musicService { inherit user group musicDirectory; };
musicService = musicService { inherit (defaultMpdCfg) user group musicDirectory; };
})
{
hardware.pulseaudio = {
@@ -94,40 +110,41 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
];
};
testScript = ''
mpc = "${pkgs.mpc-cli}/bin/mpc --wait"
testScript = ''
mpc = "${lib.getExe pkgs.mpc} --wait"
# Connects to the given server and attempts to play a tune.
def play_some_music(server):
server.wait_for_unit("mpd.service")
server.succeed(f"{mpc} update")
_, tracks = server.execute(f"{mpc} ls")
# Connects to the given server and attempts to play a tune.
def play_some_music(server):
server.wait_for_unit("mpd.service")
server.succeed(f"{mpc} update")
_, tracks = server.execute(f"{mpc} ls")
for track in tracks.splitlines():
server.succeed(f"{mpc} add {track}")
for track in tracks.splitlines():
server.succeed(f"{mpc} add {track}")
_, added_tracks = server.execute(f"{mpc} playlist")
_, added_tracks = server.execute(f"{mpc} playlist")
# Check we succeeded adding audio tracks to the playlist
assert len(added_tracks.splitlines()) > 0
# Check we succeeded adding audio tracks to the playlist
assert len(added_tracks.splitlines()) > 0
server.succeed(f"{mpc} play")
server.succeed(f"{mpc} play")
_, output = server.execute(f"{mpc} status")
# Assure audio track is playing
assert "playing" in output
_, output = server.execute(f"{mpc} status")
# Assure audio track is playing
assert "playing" in output
server.succeed(f"{mpc} stop")
server.succeed(f"{mpc} stop")
play_some_music(serverALSA)
play_some_music(serverPulseAudio)
play_some_music(serverALSA)
play_some_music(serverPulseAudio)
client.wait_for_unit("multi-user.target")
client.succeed(f"{mpc} -h serverALSA status")
client.wait_for_unit("multi-user.target")
client.succeed(f"{mpc} -h serverALSA status")
# The PulseAudio-based server is configured not to accept external client connections
# to perform the following test:
client.fail(f"{mpc} -h serverPulseAudio status")
'';
})
# The PulseAudio-based server is configured not to accept external client connections
# to perform the following test:
client.fail(f"{mpc} -h serverPulseAudio status")
'';
}
)
-82
View File
@@ -1,82 +0,0 @@
{ lib
, stdenv
, fetchFromGitHub
, makeWrapper
, rofi
, tmux
, fzf
, mpc-cli
, perl
, util-linux
, libnotify
, perlPackages
}:
stdenv.mkDerivation {
pname = "clerk";
version = "unstable-2023-10-07";
src = fetchFromGitHub {
owner = "carnager";
repo = "clerk";
rev = "907138d8fc2b1709fb49d062d0b663a48eb210bd";
hash = "sha256-V2nDLq2ViC5Twve0EILBEYOdEavqgYB/TQq/T+ftfmk=";
};
postPatch = ''
substituteInPlace clerk_rating_client.service \
--replace "/usr" "$out"
'';
nativeBuildInputs = [ makeWrapper ];
buildInputs = with perlPackages; [
perl
DataMessagePack
DataSectionSimple
ConfigSimple
TryTiny
IPCRun
HTTPDate
FileSlurper
ArrayUtils
NetMPD
];
dontBuild = true;
strictDeps = true;
installPhase = ''
runHook preInstall
install -D clerk.pl $out/bin/clerk
install -D clerk_rating_client $out/bin/clerk_rating_client
install -D clerk_rating_client.service $out/lib/systemd/user/clerk_rating_client.service
runHook postInstall
'';
postFixup = let
binPath = lib.makeBinPath [
libnotify
mpc-cli
rofi
tmux
fzf
util-linux
];
in
''
wrapProgram $out/bin/clerk --set PERL5LIB $PERL5LIB --prefix PATH : "${binPath}"
wrapProgram $out/bin/clerk_rating_client --set PERL5LIB $PERL5LIB --prefix PATH : "${binPath}"
'';
meta = with lib; {
description = "MPD client based on rofi/fzf";
homepage = "https://github.com/carnager/clerk";
license = licenses.mit;
maintainers = with maintainers; [ anderspapitto rewine ];
mainProgram = "clerk";
platforms = platforms.linux;
};
}
-63
View File
@@ -1,63 +0,0 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, installShellFiles
, libiconv
, libmpdclient
, meson
, ninja
, pkg-config
, sphinx
}:
stdenv.mkDerivation rec {
pname = "mpc";
version = "0.34";
src = fetchFromGitHub {
owner = "MusicPlayerDaemon";
repo = pname;
rev = "v${version}";
hash = "sha256-2FjYBfak0IjibuU+CNQ0y9Ei8hTZhynS/BK2DNerhVw=";
};
patches = [
# fix the build with meson 0.60 (https://github.com/MusicPlayerDaemon/mpc/pull/76)
(fetchpatch {
url = "https://github.com/MusicPlayerDaemon/mpc/commit/b656ca4b6c2a0d5b6cebd7f7daa679352f664e0e.patch";
sha256 = "sha256-fjjSlCKxgkz7Em08CaK7+JAzl8YTzLcpGGMz2HJlsVw=";
})
];
buildInputs = [
libmpdclient
]
++ lib.optionals stdenv.hostPlatform.isDarwin [ libiconv ];
nativeBuildInputs = [
installShellFiles
meson
ninja
pkg-config
sphinx
];
postInstall = ''
installShellCompletion --cmd mpc --bash $out/share/doc/mpc/contrib/mpc-completion.bash
'';
postFixup = ''
rm $out/share/doc/mpc/contrib/mpc-completion.bash
'';
meta = with lib; {
homepage = "https://www.musicpd.org/clients/mpc/";
description = "Minimalist command line interface to MPD";
changelog = "https://raw.githubusercontent.com/MusicPlayerDaemon/mpc/v${version}/NEWS";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ AndersonTorres ];
platforms = with platforms; unix;
mainProgram = "mpc";
};
}
@@ -89,7 +89,7 @@ in
memory.propagatedBuildInputs = [ pkgs.gnome-system-monitor ];
messagereceiver = { };
mocp.propagatedBuildInputs = [ pkgs.moc ];
mpd.propagatedBuildInputs = [ pkgs.mpc-cli ];
mpd.propagatedBuildInputs = [ pkgs.mpc ];
network.propagatedBuildInputs = [ py.netifaces pkgs.iw ];
network_traffic.propagatedBuildInputs = [ py.netifaces ];
nic.propagatedBuildInputs = [ py.netifaces pkgs.iw ];
+103
View File
@@ -0,0 +1,103 @@
{
lib,
fetchFromGitHub,
fzf,
installShellFiles,
libnotify,
makeWrapper,
mpc,
perlPackages,
rofi,
stdenv,
tmux,
unstableGitUpdater,
util-linux,
}:
stdenv.mkDerivation {
pname = "clerk";
version = "4.0.5-unstable-2023-10-07";
src = fetchFromGitHub {
owner = "carnager";
repo = "clerk";
rev = "907138d8fc2b1709fb49d062d0b663a48eb210bd";
hash = "sha256-V2nDLq2ViC5Twve0EILBEYOdEavqgYB/TQq/T+ftfmk=";
};
nativeBuildInputs = [
installShellFiles
makeWrapper
];
buildInputs = with perlPackages; [
perl
DataMessagePack
DataSectionSimple
ConfigSimple
TryTiny
IPCRun
HTTPDate
FileSlurper
ArrayUtils
NetMPD
];
dontBuild = true;
strictDeps = true;
postPatch = ''
substituteInPlace clerk_rating_client.service \
--replace "/usr" "$out"
'';
installPhase = ''
runHook preInstall
mv clerk.pl clerk
installBin clerk clerk_rating_client
install -D clerk_rating_client.service $out/lib/systemd/user/clerk_rating_client.service
runHook postInstall
'';
postFixup =
let
binPath = lib.makeBinPath [
fzf
libnotify
mpc
rofi
tmux
util-linux
];
in
''
pushd $out/bin
for f in clerk clerk_rating_client; do
wrapProgram $f \
--prefix PATH : "${binPath}" \
--set PERL5LIB $PERL5LIB
done
popd
'';
passthru.updateScript = unstableGitUpdater {
url = "https://github.com/carnager/clerk.git";
hardcodeZeroVersion = true;
};
meta = {
homepage = "https://github.com/carnager/clerk";
description = "MPD client based on rofi/fzf";
license = lib.licenses.mit;
mainProgram = "clerk";
maintainers = with lib.maintainers; [
anderspapitto
rewine
AndersonTorres
];
platforms = lib.platforms.linux;
};
}
+54
View File
@@ -0,0 +1,54 @@
{
lib,
fetchFromGitHub,
installShellFiles,
libiconv,
libmpdclient,
meson,
ninja,
pkg-config,
python3Packages,
stdenv,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "mpc";
version = "0.35";
src = fetchFromGitHub {
owner = "MusicPlayerDaemon";
repo = "mpc";
rev = "v${finalAttrs.version}";
hash = "sha256-oVdnj3nsYvOHcIOgoamLamriuWu9lucWUQtxVmXZabs=";
};
buildInputs = [
libmpdclient
] ++ lib.optionals stdenv.hostPlatform.isDarwin [ libiconv ];
nativeBuildInputs = [
installShellFiles
meson
ninja
pkg-config
python3Packages.sphinx
];
postInstall = ''
installShellCompletion --cmd mpc --bash $out/share/doc/mpc/contrib/mpc-completion.bash
'';
postFixup = ''
rm $out/share/doc/mpc/contrib/mpc-completion.bash
'';
meta = {
homepage = "https://www.musicpd.org/clients/mpc/";
description = "Minimalist command line interface to MPD";
changelog = "https://raw.githubusercontent.com/MusicPlayerDaemon/mpc/refs/heads/master/NEWS";
license = lib.licenses.gpl2Plus;
mainProgram = "mpc";
maintainers = with lib.maintainers; [ AndersonTorres ];
platforms = lib.platforms.unix;
};
})
+2 -1
View File
@@ -778,7 +778,8 @@ mapAliases {
mongodb-5_0 = throw "mongodb-5_0 has been removed, it's end of life since October 2024"; # Added 2024-10-01
moz-phab = mozphab; # Added 2022-08-09
mp3info = throw "'mp3info' has been removed due to lack of maintenance upstream. Consider using 'eartag' or 'tagger' instead"; # Added 2024-09-14
mpc_cli = mpc-cli; # moved from top-level 2022-01-24
mpc-cli = mpc; # Added 2024-10-14
mpc_cli = mpc; # Added 2024-10-14
mpd_clientlib = throw "'mpd_clientlib' has been renamed to/replaced by 'libmpdclient'"; # Converted to throw 2024-10-17
mpdevil = plattenalbum; # Added 2024-05-22
mpg321 = throw "'mpg321' has been removed due to it being unmaintained by upstream. Consider using mpg123 instead."; # Added 2024-05-10
-6
View File
@@ -30932,12 +30932,6 @@ with pkgs;
withConplay = false;
};
mpc-cli = callPackage ../applications/audio/mpc {
inherit (python3Packages) sphinx;
};
clerk = callPackage ../applications/audio/clerk { };
nbstripout = callPackage ../applications/version-management/nbstripout { };
ncmpc = callPackage ../applications/audio/ncmpc { };