mpd: add module
This commit is contained in:
parent
34db8df6d9
commit
d3871ed774
|
@ -711,6 +711,13 @@ in
|
||||||
A new module is available: 'xsession.windowManager.awesome'.
|
A new module is available: 'xsession.windowManager.awesome'.
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
time = "2018-07-18T20:14:11+00:00";
|
||||||
|
message = ''
|
||||||
|
A new module is available: 'services.mpd'.
|
||||||
|
'';
|
||||||
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ let
|
||||||
./services/keepassx.nix
|
./services/keepassx.nix
|
||||||
./services/keybase.nix
|
./services/keybase.nix
|
||||||
./services/mbsync.nix
|
./services/mbsync.nix
|
||||||
|
./services/mpd.nix
|
||||||
./services/network-manager-applet.nix
|
./services/network-manager-applet.nix
|
||||||
./services/owncloud-client.nix
|
./services/owncloud-client.nix
|
||||||
./services/parcellite.nix
|
./services/parcellite.nix
|
||||||
|
|
148
modules/services/mpd.nix
Normal file
148
modules/services/mpd.nix
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
name = "mpd";
|
||||||
|
|
||||||
|
cfg = config.services.mpd;
|
||||||
|
|
||||||
|
mpdConf = pkgs.writeText "mpd.conf" ''
|
||||||
|
music_directory "${cfg.musicDirectory}"
|
||||||
|
playlist_directory "${cfg.playlistDirectory}"
|
||||||
|
${lib.optionalString (cfg.dbFile != null) ''
|
||||||
|
db_file "${cfg.dbFile}"
|
||||||
|
''}
|
||||||
|
state_file "${cfg.dataDir}/state"
|
||||||
|
sticker_file "${cfg.dataDir}/sticker.sql"
|
||||||
|
log_file "syslog"
|
||||||
|
|
||||||
|
${optionalString (cfg.network.listenAddress != "any")
|
||||||
|
''bind_to_address "${cfg.network.listenAddress}"''}
|
||||||
|
${optionalString (cfg.network.port != 6600)
|
||||||
|
''port "${toString cfg.network.port}"''}
|
||||||
|
|
||||||
|
${cfg.extraConfig}
|
||||||
|
'';
|
||||||
|
|
||||||
|
in {
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
|
||||||
|
options = {
|
||||||
|
|
||||||
|
services.mpd = {
|
||||||
|
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to enable MPD, the music player daemon.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
musicDirectory = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "${config.home.homeDirectory}/music";
|
||||||
|
defaultText = "$HOME/music";
|
||||||
|
description = ''
|
||||||
|
The directory where mpd reads music from.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
playlistDirectory = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "${cfg.dataDir}/playlists";
|
||||||
|
defaultText = ''''${dataDir}/playlists'';
|
||||||
|
description = ''
|
||||||
|
The directory where mpd stores playlists.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
description = ''
|
||||||
|
Extra directives added to to the end of MPD's configuration
|
||||||
|
file, <filename>mpd.conf</filename>. Basic configuration
|
||||||
|
like file location and uid/gid is added automatically to the
|
||||||
|
beginning of the file. For available options see
|
||||||
|
<citerefentry>
|
||||||
|
<refentrytitle>mpd.conf</refentrytitle>
|
||||||
|
<manvolnum>5</manvolnum>
|
||||||
|
</citerefentry>.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
dataDir = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "${config.xdg.dataHome}/${name}";
|
||||||
|
defaultText = "$XDG_DATA_HOME/mpd";
|
||||||
|
description = ''
|
||||||
|
The directory where MPD stores its state, tag cache,
|
||||||
|
playlists etc.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
network = {
|
||||||
|
|
||||||
|
listenAddress = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "127.0.0.1";
|
||||||
|
example = "any";
|
||||||
|
description = ''
|
||||||
|
The address for the daemon to listen on.
|
||||||
|
Use <literal>any</literal> to listen on all addresses.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
type = types.ints.positive;
|
||||||
|
default = 6600;
|
||||||
|
description = ''
|
||||||
|
The TCP port on which the the daemon will listen.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
dbFile = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = "${cfg.dataDir}/tag_cache";
|
||||||
|
defaultText = ''''${dataDir}/tag_cache'';
|
||||||
|
description = ''
|
||||||
|
The path to MPD's database. If set to
|
||||||
|
<literal>null</literal> the parameter is omitted from the
|
||||||
|
configuration.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
|
systemd.user.services.mpd = {
|
||||||
|
Unit = {
|
||||||
|
After = [ "network.target" "sound.target" ];
|
||||||
|
Description = "Music Player Daemon";
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "default.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
Environment = "PATH=%h/.nix-profile/bin";
|
||||||
|
ExecStart = "${pkgs.mpd}/bin/mpd --no-daemon ${mpdConf}";
|
||||||
|
Type = "notify";
|
||||||
|
ExecStartPre = ''${pkgs.bash}/bin/bash -c "${pkgs.coreutils}/bin/mkdir -p '${cfg.dataDir}' '${cfg.playlistDirectory}'"'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue