modules/home-manager/services/mopidy: refactor and update

This commit is contained in:
Gabriel Arazas 2022-01-31 07:58:16 +08:00
parent 4800a803bd
commit 5f3e9a4022

View File

@ -4,7 +4,10 @@
let let
cfg = config.services.mopidy; cfg = config.services.mopidy;
customToINI = with lib; generators.toINI { # The configuration format of Mopidy. It seems to use configparser with
# some quirky handling of its types. You can see how they're handled in
# `mopidy/config/types.py` from the source code.
toMopidyConf = with lib; generators.toINI {
mkKeyValue = generators.mkKeyValueDefault { mkKeyValue = generators.mkKeyValueDefault {
mkValueString = v: mkValueString = v:
if isList v then "\n " + concatStringsSep "\n " v if isList v then "\n " + concatStringsSep "\n " v
@ -14,7 +17,6 @@ let
mopidyEnv = pkgs.buildEnv { mopidyEnv = pkgs.buildEnv {
name = "mopidy-with-extensions-${pkgs.mopidy.version}"; name = "mopidy-with-extensions-${pkgs.mopidy.version}";
# TODO: Improve this that doesn't use `lib.misc`.
paths = lib.closePropagation cfg.extensionPackages; paths = lib.closePropagation cfg.extensionPackages;
pathsToLink = [ "/${pkgs.mopidyPackages.python.sitePackages}" ]; pathsToLink = [ "/${pkgs.mopidyPackages.python.sitePackages}" ];
buildInputs = [ pkgs.makeWrapper ]; buildInputs = [ pkgs.makeWrapper ];
@ -22,6 +24,19 @@ let
makeWrapper ${pkgs.mopidy}/bin/mopidy $out/bin/mopidy --prefix PYTHONPATH : $out/${pkgs.mopidyPackages.python.sitePackages} makeWrapper ${pkgs.mopidy}/bin/mopidy $out/bin/mopidy --prefix PYTHONPATH : $out/${pkgs.mopidyPackages.python.sitePackages}
''; '';
}; };
mopidyConfFormat = {}: {
type = with lib.types;
let
valueType = nullOr (oneOf [ bool int float str (listOf valueType) ]) // {
description = "Mopidy config value";
};
in attrsOf (attrsOf valueType);
generate = name: value: pkgs.writeText name (toMopidyConf value);
};
settingsFormat = mopidyConfFormat {};
in { in {
options.services.mopidy = { options.services.mopidy = {
enable = lib.mkEnableOption "Mopidy music player daemon"; enable = lib.mkEnableOption "Mopidy music player daemon";
@ -39,8 +54,11 @@ in {
configuration = lib.mkOption { configuration = lib.mkOption {
default = {}; default = {};
type = lib.types.attrs; type = settingsFormat.type;
description = "The configuration Mopidy uses in the service."; description = ''
The Mopidy configuration to be written in the appropriate file in the
home directory.
'';
example = lib.literalExpression '' example = lib.literalExpression ''
{ {
file = { file = {
@ -75,7 +93,8 @@ in {
lib.platforms.linux) lib.platforms.linux)
]; ];
xdg.configFile."mopidy/mopidy.conf".text = customToINI cfg.configuration; xdg.configFile."mopidy/mopidy.conf".source =
settingsFormat.generate "mopidy-conf-${config.home.username}" cfg.configuration;
systemd.user.services.mopidy = { systemd.user.services.mopidy = {
Unit = { Unit = {