Skip to content

Commit 1d08729

Browse files
committed
beets: add mpdIntegration
Allow configuration of mpdstats and mpdupdate plugins for Beets using Home Manager. Signed-off-by: Sefa Eyeoglu <[email protected]>
1 parent 36999b8 commit 1d08729

File tree

9 files changed

+116
-7
lines changed

9 files changed

+116
-7
lines changed

.github/CODEOWNERS

+2-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ Makefile @thiagokokada
8181

8282
/modules/programs/bat.nix @marsam
8383

84-
/modules/programs/beets.nix @rycee
84+
/modules/programs/beets.nix @rycee @Scrumplex
85+
/tests/modules/programs/beets @Scrumplex
8586

8687
/modules/programs/bottom.nix @polykernel
8788
/tests/modules/programs/bottom @polykernel

modules/programs/beets.nix

+47-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ let
99
yamlFormat = pkgs.formats.yaml { };
1010

1111
in {
12-
meta.maintainers = [ maintainers.rycee ];
12+
meta.maintainers = with maintainers; [ rycee Scrumplex ];
1313

1414
options = {
1515
programs.beets = {
@@ -48,13 +48,54 @@ in {
4848
<filename>$XDG_CONFIG_HOME/beets/config.yaml</filename>
4949
'';
5050
};
51+
52+
mpdIntegration = {
53+
enableStats = mkEnableOption "mpdstats plugin and service";
54+
enableUpdate = mkEnableOption "mpdupdate plugin";
55+
host = mkOption {
56+
type = types.str;
57+
default = "localhost";
58+
description = "Host mpdstats will connect to";
59+
example = "10.0.0.42";
60+
};
61+
port = mkOption {
62+
type = types.port;
63+
default = config.services.mpd.network.port;
64+
defaultText = "6600";
65+
description = "Port mpdstats will connect to";
66+
example = "6601";
67+
};
68+
};
5169
};
5270
};
5371

54-
config = mkIf cfg.enable {
55-
home.packages = [ cfg.package ];
72+
config = mkIf cfg.enable (mkMerge [
73+
{
74+
home.packages = [ cfg.package ];
5675

57-
xdg.configFile."beets/config.yaml".source =
58-
yamlFormat.generate "beets-config" cfg.settings;
59-
};
76+
xdg.configFile."beets/config.yaml".source =
77+
yamlFormat.generate "beets-config" cfg.settings;
78+
}
79+
(mkIf (cfg.mpdIntegration.enableStats || cfg.mpdIntegration.enableUpdate) {
80+
programs.beets.settings.mpd = {
81+
host = cfg.mpdIntegration.host;
82+
port = cfg.mpdIntegration.port;
83+
};
84+
})
85+
(mkIf cfg.mpdIntegration.enableStats {
86+
programs.beets.settings.plugins = [ "mpdstats" ];
87+
88+
systemd.user.services."beets-mpdstats" = {
89+
Unit = {
90+
Description = "Beets MPDStats daemon";
91+
After = [ "mpd.service" ];
92+
Requires = [ "mpd.service" ];
93+
};
94+
Service.ExecStart = "${cfg.package}/bin/beet mpdstats";
95+
};
96+
})
97+
(mkIf cfg.mpdIntegration.enableUpdate {
98+
programs.beets.settings.plugins = [ "mpdupdate" ];
99+
})
100+
]);
60101
}

tests/default.nix

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ import nmt {
6161
./modules/programs/autojump
6262
./modules/programs/bash
6363
./modules/programs/bat
64+
./modules/programs/beets
6465
./modules/programs/bottom
6566
./modules/programs/broot
6667
./modules/programs/browserpass
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
beets-mpdstats = ./mpdstats.nix;
3+
beets-mpdupdate = ./mpdupdate.nix;
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[Service]
2+
ExecStart=@beets@/bin/beet mpdstats
3+
4+
[Unit]
5+
After=mpd.service
6+
Description=Beets MPDStats daemon
7+
Requires=mpd.service
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
mpd:
2+
host: localhost
3+
port: 6600
4+
plugins:
5+
- mpdstats
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{ config, lib, pkgs, ... }:
2+
3+
{
4+
config = {
5+
home.stateVersion = "23.05";
6+
7+
programs.beets = {
8+
enable = true;
9+
package = config.lib.test.mkStubPackage { outPath = "@beets@"; };
10+
mpdIntegration.enableStats = true;
11+
};
12+
13+
nmt.script = ''
14+
assertFileExists home-files/.config/beets/config.yaml
15+
assertFileContent \
16+
home-files/.config/beets/config.yaml \
17+
${./mpdstats-expected.yaml}
18+
19+
assertFileExists home-files/.config/systemd/user/beets-mpdstats.service
20+
assertFileContent \
21+
home-files/.config/systemd/user/beets-mpdstats.service \
22+
${./mpdstats-expected.service}
23+
'';
24+
};
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
mpd:
2+
host: localhost
3+
port: 6600
4+
plugins:
5+
- mpdupdate
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{ config, lib, pkgs, ... }:
2+
3+
{
4+
config = {
5+
home.stateVersion = "23.05";
6+
7+
programs.beets = {
8+
enable = true;
9+
package = config.lib.test.mkStubPackage { outPath = "@beets@"; };
10+
mpdIntegration.enableUpdate = true;
11+
};
12+
13+
nmt.script = ''
14+
assertFileExists home-files/.config/beets/config.yaml
15+
assertFileContent \
16+
home-files/.config/beets/config.yaml \
17+
${./mpdupdate-expected.yaml}
18+
'';
19+
};
20+
}

0 commit comments

Comments
 (0)