diff options
author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2024-11-17 10:29:06 +0100 |
---|---|---|
committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2024-11-17 10:32:58 +0100 |
commit | a4b85b9601be68c66d3bf33bf05c1ef1c0032526 (patch) | |
tree | e36e53220dc1d36bf77e779d0f1e5ebfa90d524e /modules/by-name | |
parent | fix(legacy/wms/river): Ensure that `mpc` is available to river (diff) | |
download | nixos-config-a4b85b9601be68c66d3bf33bf05c1ef1c0032526.tar.gz nixos-config-a4b85b9601be68c66d3bf33bf05c1ef1c0032526.zip |
refactor(legacy/conf/mpd): Move to a unified `mpd` by-name module
Diffstat (limited to '')
-rw-r--r-- | modules/by-name/mp/mpd/module.nix | 86 | ||||
-rw-r--r-- | modules/by-name/mp/mpd/mpc.nix | 37 | ||||
-rw-r--r-- | modules/by-name/mp/mpd/mpdconf.example (renamed from modules/home.legacy/conf/mpd/mpdconf.example) | 0 |
3 files changed, 123 insertions, 0 deletions
diff --git a/modules/by-name/mp/mpd/module.nix b/modules/by-name/mp/mpd/module.nix new file mode 100644 index 00000000..6f045f9f --- /dev/null +++ b/modules/by-name/mp/mpd/module.nix @@ -0,0 +1,86 @@ +{ + config, + pkgs, + lib, + ... +}: let + cfg = config.soispha.services.mpd; +in { + imports = [ + ./mpc.nix + ]; + + options.soispha.services.mpd = { + enable = lib.mkEnableOption "mpd"; + + directories = { + runtime = lib.mkOption { + type = lib.types.path; + description = "The directory to put the sockets and such things."; + }; + playlists = lib.mkOption { + type = lib.types.path; + description = "The directory to put the playlists."; + default = "${cfg.directories.data}/playlists"; + }; + data = lib.mkOption { + type = lib.types.path; + description = "The directory to put general data."; + }; + music = lib.mkOption { + type = lib.types.path; + description = '' + The directory to search for music files. + + # Info + This should be the same value as [`config.home-manager.users.soispha.beets.settings.directory`], if you use beets. + ''; + }; + }; + }; + + config.home-manager.users.soispha = let + socketPath = "${cfg.directories.runtime}/socket"; + in + lib.mkIf cfg.enable { + home.sessionVariables = { + MPD_HOST = socketPath; + }; + + systemd.user.services.mpd.Service.ExecStartPre = lib.mkForce '' + ${pkgs.coreutils}/bin/mkdir --parents "${cfg.directories.data}" "${cfg.directories.playlists}" "${cfg.directories.runtime}" + ''; + + services.mpd = { + enable = true; + network = { + listenAddress = socketPath; + }; + dataDir = cfg.directories.data; + playlistDirectory = cfg.directories.playlists; + musicDirectory = cfg.directories.music; + + extraConfig = '' + metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc,comment" + # Updated by the beets `mpdupdate` plugin + auto_update "no" + + audio_output { + type "pipewire" + name "pipewire" + } + + replaygain "track" + replaygain_limit "yes" + + #database { + # plugin "simple" + # path "~/.local/share/mpd/db + # cache_directory "~/.local/share/mpd/cache" + #} + + filesystem_charset "UTF-8" + ''; + }; + }; +} diff --git a/modules/by-name/mp/mpd/mpc.nix b/modules/by-name/mp/mpd/mpc.nix new file mode 100644 index 00000000..031465fe --- /dev/null +++ b/modules/by-name/mp/mpd/mpc.nix @@ -0,0 +1,37 @@ +{ + config, + lib, + pkgs, + ... +}: let + cfg = config.soispha.services.mpd.mpc; + parentCfg = config.soispha.services.mpd; +in { + options.soispha.services.mpd.mpc = { + enable = lib.mkEnableOption "mpc with extensions"; + + beetsPkg = lib.mkOption { + type = lib.types.package; + description = "The package to use, when calling `beet`"; + }; + }; + + config = lib.mkIf cfg.enable { + home-manager.users.soispha.home.packages = [ + pkgs.mpp # Wrapper around `mpc` that allows the usage of `mpc-{beetsrm,lyrics,searchadd}` (below) without the `-` + + # Removes the currently playing song from the disk and storage + (pkgs.mpp-beetrm.override { + beets = cfg.beetsPkg; + }) + # Works like normal `mpc searchadd` but uses the `beets` query syntax + (pkgs.mpp-searchadd.override { + beets = cfg.beetsPkg; + }) + # Displays the lyrics of the currently playing song + (pkgs.mpp-lyrics.override { + mpd_music_dir = parentCfg.directories.music; + }) + ]; + }; +} diff --git a/modules/home.legacy/conf/mpd/mpdconf.example b/modules/by-name/mp/mpd/mpdconf.example index eaa5e641..eaa5e641 100644 --- a/modules/home.legacy/conf/mpd/mpdconf.example +++ b/modules/by-name/mp/mpd/mpdconf.example |