{ pkgs, inputs, lib, ... }: let inherit (lib.attrsets) mapAttrsToList; inherit (lib.meta) getExe'; wssrc = inputs.mpv-websocket.outPath; wspkg = inputs.mpv-websocket.packages.${pkgs.system}.default; in { xdg.configFile."mpv/mpv_websocket".source = getExe' wspkg "mpv_websocket"; xdg.configFile."mpv/input.conf".source = "${wssrc}/mpv/input.conf"; programs.mpv = { enable = true; scripts = with pkgs.mpvScripts; [ sponsorblock mpris uosc thumbfast (pkgs.stdenvNoCC.mkDerivation rec { pname = "run_websocket_server"; inherit (wspkg) version; src = wssrc; dontBuild = true; dontUnpack = true; installPhase = '' install -Dm644 ${src}/mpv/scripts/run_websocket_server.lua $out/share/mpv/scripts/run_websocket_server.lua ''; passthru.scriptName = "run_websocket_server.lua"; }) ]; config = { profile = "gpu-hq"; hwdec = "auto"; vo = "gpu"; volume-max = 200; opengl-waitvsync = true; # https://github.com/kuroahna/mpv_websocket/blob/master/mpv/mpv.conf input-ipc-server = "/tmp/mpv-socket"; script-opts = builtins.concatStringsSep "," (mapAttrsToList (k: v: "${k}=${builtins.toString v}") { ytdl_hook-ytdl_path = "${pkgs.yt-dlp}/bin/yt-dlp"; osc-layout = "slimbox"; osc-vidscale = "no"; osc-deadzonesize = 0.75; osc-minmousemove = 4; osc-hidetimeout = 2000; osc-valign = 0.9; osc-timems = "yes"; osc-seekbarstyle = "knob"; osc-seekbarkeyframes = "no"; osc-seekrangestyle = "slider"; }); }; }; programs.zsh.shellAliases = { yt = "mpv --ytdl-format='bestvideo[height<=?720][fps<=?30][vcodec!=?vp9]+bestaudio/best[height<=720]'"; # Laptop doesn't like above 720p :c }; home.packages = with pkgs; [ yt-dlp # Watch videos from multiple sources without having to use a browser for it ytcc # Subscriptions manager and RSS feed exporter for YouTube # TODO: Broken: 2025-10-28 ]; }