mpd: add module

This commit is contained in:
rembo10 2018-07-15 09:33:32 +03:00 committed by Robert Helgesson
parent 34db8df6d9
commit d3871ed774
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
3 changed files with 156 additions and 0 deletions

View file

@ -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'.
'';
}
]; ];
}; };
} }

View file

@ -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
View 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}'"'';
};
};
};
}