aboutsummaryrefslogtreecommitdiffstats
path: root/modules/by-name/mp/mpd
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--modules/by-name/mp/mpd/module.nix17
-rw-r--r--modules/by-name/mp/mpd/mpc.nix44
-rw-r--r--modules/by-name/mp/mpd/mpdconf.example.license9
-rw-r--r--modules/by-name/mp/mpdpopm/module.nix68
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"];};
+ };
+ };
+ };
+}