1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
{
config,
pkgs,
lib,
...
}: let
cfg = config.soispha.services.mpd;
in {
imports = [
./mpc.nix
];
options.soispha.services.mpd = {
enable = lib.mkEnableOption "mpd";
directories = {
runtime = lib.mkOption {
type = lib.types.path;
description = "The directory to put the sockets and such things.";
};
playlists = lib.mkOption {
type = lib.types.path;
description = "The directory to put the playlists.";
default = "${cfg.directories.data}/playlists";
};
data = lib.mkOption {
type = lib.types.path;
description = "The directory to put general data.";
};
music = lib.mkOption {
type = lib.types.path;
description = ''
The directory to search for music files.
# Info
This should be the same value as [`config.home-manager.users.soispha.beets.settings.directory`], if you use beets.
'';
};
};
};
config.home-manager.users.soispha = let
socketPath = "${cfg.directories.runtime}/socket";
in
lib.mkIf cfg.enable {
home.sessionVariables = {
MPD_HOST = socketPath;
};
systemd.user.services.mpd.Service.ExecStartPre = lib.mkForce ''
${pkgs.coreutils}/bin/mkdir --parents "${cfg.directories.data}" "${cfg.directories.playlists}" "${cfg.directories.runtime}"
'';
services.mpd = {
enable = true;
network = {
listenAddress = socketPath;
};
dataDir = cfg.directories.data;
playlistDirectory = cfg.directories.playlists;
musicDirectory = cfg.directories.music;
extraConfig = ''
metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc,comment"
# Updated by the beets `mpdupdate` plugin
auto_update "no"
audio_output {
type "pipewire"
name "pipewire"
}
replaygain "track"
replaygain_limit "yes"
#database {
# plugin "simple"
# path "~/.local/share/mpd/db
# cache_directory "~/.local/share/mpd/cache"
#}
filesystem_charset "UTF-8"
'';
};
};
}
|