mpdris2: add module

This commit is contained in:
Peter Jones 2019-02-20 08:38:40 -07:00 committed by Robert Helgesson
parent b8b391ad18
commit f07510e2b6
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
3 changed files with 109 additions and 0 deletions

View file

@ -991,6 +991,13 @@ in
A new module is available: 'programs.keychain'.
'';
}
{
time = "2019-02-24T00:32:23+00:00";
message = ''
A new service is available: 'services.mpdris2'.
'';
}
];
};
}

View file

@ -96,6 +96,7 @@ let
(loadModule ./services/keybase.nix { })
(loadModule ./services/mbsync.nix { })
(loadModule ./services/mpd.nix { })
(loadModule ./services/mpdris2.nix { condition = hostPlatform.isLinux; })
(loadModule ./services/network-manager-applet.nix { })
(loadModule ./services/nextcloud-client.nix { })
(loadModule ./services/owncloud-client.nix { })

View file

@ -0,0 +1,101 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.mpdris2;
toIni = generators.toINI {
mkKeyValue = key: value:
let
value' =
if isBool value then (if value then "True" else "False")
else toString value;
in
"${key} = ${value'}";
};
mpdris2Conf = {
Connection = {
host = cfg.mpd.host;
port = cfg.mpd.port;
music_dir = cfg.mpd.musicDirectory;
};
Bling = {
notify = cfg.notifications;
mmkeys = cfg.multimediaKeys;
};
};
in
{
meta.maintainers = [ maintainers.pjones ];
options.services.mpdris2 = {
enable = mkEnableOption "mpDris2 the MPD to MPRIS2 bridge";
notifications = mkEnableOption "song change notifications";
multimediaKeys = mkEnableOption "multimedia key support";
package = mkOption {
type = types.package;
default = pkgs.mpdris2;
defaultText = "pkgs.mpdris2";
description = "The mpDris2 package to use.";
};
mpd = {
host = mkOption {
type = types.str;
default = config.services.mpd.network.listenAddress;
defaultText = "config.services.mpd.network.listenAddress";
example = "192.168.1.1";
description = "The address where MPD is listening for connections.";
};
port = mkOption {
type = types.ints.positive;
default = config.services.mpd.network.port;
defaultText = "config.services.mpd.network.port";
description = ''
The port number where MPD is listening for connections.
'';
};
musicDirectory = mkOption {
type = types.nullOr types.path;
default = config.services.mpd.musicDirectory;
defaultText = "config.services.mpd.musicDirectory";
description = ''
If set, mpDris2 will use this directory to access music artwork.
'';
};
};
};
config = mkIf cfg.enable {
assertions = [
{
assertion = config.services.mpd.enable;
message = "The mpdris2 module requires 'services.mpd.enable = true'.";
}
];
xdg.configFile."mpDris2/mpDris2.conf".text = toIni mpdris2Conf;
systemd.user.services.mpdris2 = {
Unit = {
Description = "MPRIS 2 support for MPD";
After = [ "graphical-session-pre.target" "mpd.service" ];
PartOf = [ "graphical-session.target" ];
};
Service = {
Type = "simple";
ExecStart = "${cfg.package}/bin/mpDris2";
};
};
};
}