{ config, lib, pkgs, inputs, ... }: with pkgs; # HACK Replace youtube-dl with yt-dlp in mopidy-youtube let mopidy-youtube-yt_dlp = mopidy-youtube.overrideAttrs (old: rec { propagatedBuildInputs = old.propagatedBuildInputs ++ [ python3.pkgs.yt-dlp ]; }); in { # Configure pipewire as sound server services.pipewire = { enable = true; alsa = { enable = true; support32Bit = true; }; pulse.enable = true; wireplumber.enable = true; config.pipewire-pulse = let defaultConf = lib.importJSON "${inputs.nixpkgs}/nixos/modules/services/desktops/pipewire/daemon/pipewire-pulse.conf.json"; in lib.recursiveUpdate defaultConf { "pulse.properties" = { "server.address" = [ "unix:native" "tcp:4713" ]; }; }; }; security.rtkit.enable = true; # Set up Mopidy services.mopidy = { enable = true; extensionPackages = [ mopidy-mpd mopidy-youtube-yt_dlp mopidy-somafm mopidy-local ]; configuration = '' [audio] mixer_volume = output = pulsesink server=127.0.0.1 visualizer = [local] media_dir = /home/coolneng/Music directories = Album Artists local:directory?type=artist&role=albumartist Albums local:directory?type=album Artists local:directory?type=artist Genres local:directory?type=genre excluded_file_extensions = .directory .html .jpeg .jpg .log .nfo .png .txt [mpd] zeroconf = "" [m3u] playlists_dir = /home/coolneng/.config/mpd/playlists base_dir = /home/coolneng/Music [youtube] allow_cache = true search_results = 50 youtube_dl_package = yt_dlp [somafm] encoding = aac quality = highest ''; }; }