home-manager/modules/programs/beets.nix
Emily 9f9e277b60 treewide: remove now-redundant lib.mdDoc calls
These (and the `*MD` functions apart from `literalMD`) are now no-ops
in nixpkgs and serve no purpose other than to add additional noise and
potentially mislead people into thinking unmarked DocBook documentation
will still be accepted.

Note that if backporting changes including documentation to 23.05,
the `mdDoc` calls will need to be re-added.

To reproduce this commit, run:

    $ NIX_PATH=nixpkgs=flake:nixpkgs/e7e69199f0372364a6106a1e735f68604f4c5a25 \
      nix shell nixpkgs#coreutils \
      -c find . -name '*.nix' \
      -exec nix run -- github:emilazy/nix-doc-munge/98dadf1f77351c2ba5dcb709a2a171d655f15099 \
      --strip {} +
    $ ./format
2023-07-17 18:49:09 +01:00

110 lines
3 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.beets;
yamlFormat = pkgs.formats.yaml { };
in {
meta.maintainers = with maintainers; [ rycee Scrumplex ];
options = {
programs.beets = {
enable = mkOption {
type = types.bool;
default = if versionAtLeast config.home.stateVersion "19.03" then
false
else
cfg.settings != { };
defaultText = "false";
description = ''
Whether to enable the beets music library manager. This
defaults to `false` for state
version  19.03. For earlier versions beets is enabled if
{option}`programs.beets.settings` is non-empty.
'';
};
package = mkOption {
type = types.package;
default = pkgs.beets;
defaultText = literalExpression "pkgs.beets";
example =
literalExpression "(pkgs.beets.override { enableCheck = true; })";
description = ''
The `beets` package to use.
Can be used to specify extensions.
'';
};
settings = mkOption {
type = yamlFormat.type;
default = { };
description = ''
Configuration written to
{file}`$XDG_CONFIG_HOME/beets/config.yaml`
'';
};
mpdIntegration = {
enableStats = mkEnableOption "mpdstats plugin and service";
enableUpdate = mkEnableOption "mpdupdate plugin";
host = mkOption {
type = types.str;
default = "localhost";
example = "10.0.0.42";
description = "The host that mpdstats will connect to.";
};
port = mkOption {
type = types.port;
default = config.services.mpd.network.port;
defaultText = literalExpression "config.services.mpd.network.port";
example = 6601;
description = "The port that mpdstats will connect to.";
};
};
};
};
config = mkMerge [
(mkIf cfg.enable {
home.packages = [ cfg.package ];
xdg.configFile."beets/config.yaml".source =
yamlFormat.generate "beets-config" cfg.settings;
})
(mkIf (cfg.mpdIntegration.enableStats || cfg.mpdIntegration.enableUpdate) {
programs.beets.settings.mpd = {
host = cfg.mpdIntegration.host;
port = cfg.mpdIntegration.port;
};
})
(mkIf cfg.mpdIntegration.enableStats {
programs.beets.settings.plugins = [ "mpdstats" ];
})
(mkIf cfg.mpdIntegration.enableUpdate {
programs.beets.settings.plugins = [ "mpdupdate" ];
})
(mkIf (cfg.enable && cfg.mpdIntegration.enableStats) {
systemd.user.services."beets-mpdstats" = {
Unit = {
Description = "Beets MPDStats daemon";
After = optional config.services.mpd.enable "mpd.service";
Requires = optional config.services.mpd.enable "mpd.service";
};
Service.ExecStart = "${cfg.package}/bin/beet mpdstats";
Install.WantedBy = [ "default.target" ];
};
})
];
}