diff options
Diffstat (limited to '')
| -rw-r--r-- | modules/by-name/mp/mpd/module.nix | 17 | ||||
| -rw-r--r-- | modules/by-name/mp/mpd/mpc.nix | 44 | ||||
| -rw-r--r-- | modules/by-name/mp/mpd/mpdconf.example.license | 9 | ||||
| -rw-r--r-- | modules/by-name/mp/mpdpopm/module.nix | 68 |
4 files changed, 123 insertions, 15 deletions
diff --git a/modules/by-name/mp/mpd/module.nix b/modules/by-name/mp/mpd/module.nix index 6f045f9f..474d81c4 100644 --- a/modules/by-name/mp/mpd/module.nix +++ b/modules/by-name/mp/mpd/module.nix @@ -1,3 +1,12 @@ +# nixos-config - My current NixOS configuration +# +# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de> +# SPDX-License-Identifier: GPL-3.0-or-later +# +# This file is part of my nixos-config. +# +# You should have received a copy of the License along with this program. +# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>. { config, pkgs, @@ -53,6 +62,11 @@ in { services.mpd = { enable = true; + + package = pkgs.mpd.override { + ffmpeg = pkgs.ffmpeg-headless; + }; + network = { listenAddress = socketPath; }; @@ -62,6 +76,7 @@ in { extraConfig = '' metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc,comment" + # Updated by the beets `mpdupdate` plugin auto_update "no" @@ -73,6 +88,8 @@ in { replaygain "track" replaygain_limit "yes" + sticker_file "${cfg.directories.data}/sticker.sql" + #database { # plugin "simple" # path "~/.local/share/mpd/db diff --git a/modules/by-name/mp/mpd/mpc.nix b/modules/by-name/mp/mpd/mpc.nix index 031465fe..5fbeddc5 100644 --- a/modules/by-name/mp/mpd/mpc.nix +++ b/modules/by-name/mp/mpd/mpc.nix @@ -1,3 +1,12 @@ +# nixos-config - My current NixOS configuration +# +# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de> +# SPDX-License-Identifier: GPL-3.0-or-later +# +# This file is part of my nixos-config. +# +# You should have received a copy of the License along with this program. +# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>. { config, lib, @@ -5,11 +14,28 @@ ... }: let cfg = config.soispha.services.mpd.mpc; - parentCfg = config.soispha.services.mpd; + + mpp = pkgs.mpp.override { + # Removes the currently playing song from the disk and storage + mpp-beetrm = pkgs.mpp-beetrm.override { + beets = cfg.beetsPkg; + }; + + # Works like normal `mpc searchadd` but uses the `beets` query syntax + mpp-searchadd = pkgs.mpp-searchadd.override { + beets = cfg.beetsPkg; + }; + }; in { options.soispha.services.mpd.mpc = { enable = lib.mkEnableOption "mpc with extensions"; + mppPackage = lib.mkOption { + type = lib.types.package; + description = "The package to use, when calling `mpp`"; + default = mpp; + }; + beetsPkg = lib.mkOption { type = lib.types.package; description = "The package to use, when calling `beet`"; @@ -18,20 +44,8 @@ in { 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; - }) + # Wrapper around `mpc` that allows the usage of `mpc-{beetsrm,lyrics,searchadd}` + cfg.mppPackage ]; }; } diff --git a/modules/by-name/mp/mpd/mpdconf.example.license b/modules/by-name/mp/mpd/mpdconf.example.license new file mode 100644 index 00000000..eae6a84c --- /dev/null +++ b/modules/by-name/mp/mpd/mpdconf.example.license @@ -0,0 +1,9 @@ +nixos-config - My current NixOS configuration + +Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de> +SPDX-License-Identifier: GPL-3.0-or-later + +This file is part of my nixos-config. + +You should have received a copy of the License along with this program. +If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>. diff --git a/modules/by-name/mp/mpdpopm/module.nix b/modules/by-name/mp/mpdpopm/module.nix new file mode 100644 index 00000000..82943fe8 --- /dev/null +++ b/modules/by-name/mp/mpdpopm/module.nix @@ -0,0 +1,68 @@ +# nixos-config - My current NixOS configuration +# +# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de> +# SPDX-License-Identifier: GPL-3.0-or-later +# +# This file is part of my nixos-config. +# +# You should have received a copy of the License along with this program. +# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>. +{ + config, + pkgs, + libraries, + lib, + ... +}: let + cfg = config.soispha.services.mpdpopm; + + settingsFormat = pkgs.formats.json {}; +in { + options.soispha.services.mpdpopm = { + enable = libraries.base.options.mkEnable "mpdpopm"; + + settings = lib.mkOption { + # Setting this type allows for correct merging behavior + inherit (settingsFormat) type; + default = {}; + description = '' + Configuration for foo, see + <link xlink:href="https://example.com/docs/foo"/> + for supported settings. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + soispha.services.mpdpopm.settings = { + version = "1"; + log = "${config.home-manager.users.soispha.xdg.dataHome}/mpdpopm/log"; + + conn.Local = { + path = config.home-manager.users.soispha.home.sessionVariables.MPD_HOST; + }; + + # Automatically start in DJ mode. + mode = "Dj"; + + local_music_dir = config.soispha.services.mpd.directories.music; + }; + + home-manager.users.soispha = { + systemd.user.services.mpdpopm = { + Unit = { + Description = "mpdpopm ratings and playcounts for MPD"; + Requires = ["mpd.service"]; + After = ["mpd.service"]; + }; + + Service = { + Restart = "on-failure"; + ExecStart = "${lib.getExe' pkgs.mpdpopm "mpdpopmd"} --config ${settingsFormat.generate "config.json" cfg.settings}"; + }; + + Install = {WantedBy = ["default.target"];}; + }; + }; + }; +} |
