{ config, lib, pkgs, ... }: let cfg = config.hm.soft.mpv; s = "~~/shaders/shim"; in { options.hm.soft.mpv.enable = lib.mkEnableOption "mpv media player"; config = lib.mkIf cfg.enable { home.packages = with pkgs; [ mpv-shim-default-shaders ]; home.file = { ".config/mpv/shaders/shim".source = "${pkgs.mpv-shim-default-shaders}/share/mpv-shim-default-shaders/shaders"; }; programs.mpv = { enable = true; bindings = { "CTRL+1" = "apply-profile movie-ultra; show-text \"Movie Ultra Active\""; "CTRL+2" = "apply-profile anime-mode-a; show-text \"Anime4K: Mode A (UL)\""; "CTRL+3" = "apply-profile anime-mode-b; show-text \"Anime4K: Mode B (UL)\""; "CTRL+4" = "apply-profile anime-mode-c; show-text \"Anime4K: Mode C (UL)\""; "CTRL+5" = "apply-profile anime-mode-aa; show-text \"Anime4K: Mode A+A (UL)\""; "CTRL+6" = "apply-profile anime-mode-bb; show-text \"Anime4K: Mode B+B (UL)\""; "CTRL+7" = "apply-profile anime-mode-ca; show-text \"Anime4K: Mode C+A (UL)\""; "CTRL+0" = "apply-profile restore; show-text \"Shaders Cleared / Defaults Restored\""; "s" = "screenshot"; "WHEEL_UP" = "add volume 2"; "WHEEL_DOWN" = "add volume -2"; "Q" = "quit-watch-later"; }; config = { keep-open = "yes"; profile = "gpu-hq"; gpu-api = "vulkan"; vo = "gpu-next"; hwdec = "auto"; scale = "ewa_lanczossharp"; cscale = "ewa_lanczos"; dscale = "mitchell"; scale-antiring = 0.6; cscale-antiring = 0.6; deband = "yes"; deband-iterations = 2; deband-threshold = 35; dither-depth = "auto"; dither = "fruit"; sub-auto = "fuzzy"; sub-ass-override = "force"; blend-subtitles = "no"; slang = "enm,eng,en,enCA,enUS"; ao = "pipewire"; volume-max = "200"; demuxer-max-back-bytes = "50Mib"; demuxer-max-bytes = "600Mib"; demuxer-readahead-secs = 300; force-seekable = "yes"; screenshot-format = "png"; screenshot-sw = "no"; screenshot-directory = "${toString config.hm.conf.xdg-dirs.mediaPath}/pics/ss"; screenshot-template = "mpv-%f-%wH.%wM.%wS-#%#00n"; }; profiles = { "movie-ultra" = { glsl-shaders = lib.concatStringsSep ":" [ "${s}/KrigBilateral.glsl" "${s}/FSRCNNX_x2_16-0-4-1.glsl" "${s}/SSimDownscaler.glsl" "${s}/CAS-scaled.glsl" ]; scale = "ewa_lanczos"; linear-upscaling = "yes"; sigmoid-upscaling = "yes"; }; "anime-mode-a" = { glsl-shaders = lib.concatStringsSep ":" [ "${s}/Anime4K_Clamp_Highlights.glsl" "${s}/Anime4K_Restore_CNN_UL.glsl" "${s}/Anime4K_Upscale_CNN_x2_UL.glsl" "${s}/Anime4K_AutoDownscalePre_x2.glsl" "${s}/Anime4K_AutoDownscalePre_x4.glsl" "${s}/Anime4K_Upscale_CNN_x2_UL.glsl" ]; }; "anime-mode-b" = { glsl-shaders = lib.concatStringsSep ":" [ "${s}/Anime4K_Clamp_Highlights.glsl" "${s}/Anime4K_Restore_CNN_Soft_UL.glsl" "${s}/Anime4K_Upscale_CNN_x2_UL.glsl" "${s}/Anime4K_AutoDownscalePre_x2.glsl" "${s}/Anime4K_AutoDownscalePre_x4.glsl" "${s}/Anime4K_Upscale_CNN_x2_UL.glsl" ]; }; "anime-mode-c" = { glsl-shaders = lib.concatStringsSep ":" [ "${s}/Anime4K_Clamp_Highlights.glsl" "${s}/Anime4K_Upscale_Denoise_CNN_x2_UL.glsl" "${s}/Anime4K_AutoDownscalePre_x2.glsl" "${s}/Anime4K_AutoDownscalePre_x4.glsl" "${s}/Anime4K_Upscale_CNN_x2_UL.glsl" ]; }; "anime-mode-aa" = { glsl-shaders = lib.concatStringsSep ":" [ "${s}/Anime4K_Clamp_Highlights.glsl" "${s}/Anime4K_Restore_CNN_UL.glsl" "${s}/Anime4K_Upscale_CNN_x2_UL.glsl" "${s}/Anime4K_Restore_CNN_UL.glsl" "${s}/Anime4K_Upscale_CNN_x2_UL.glsl" ]; }; "anime-mode-bb" = { glsl-shaders = lib.concatStringsSep ":" [ "${s}/Anime4K_Clamp_Highlights.glsl" "${s}/Anime4K_Restore_CNN_Soft_UL.glsl" "${s}/Anime4K_Upscale_CNN_x2_UL.glsl" "${s}/Anime4K_AutoDownscalePre_x2.glsl" "${s}/Anime4K_AutoDownscalePre_x4.glsl" "${s}/Anime4K_Restore_CNN_Soft_UL.glsl" "${s}/Anime4K_Upscale_CNN_x2_UL.glsl" ]; }; "anime-mode-ca" = { glsl-shaders = lib.concatStringsSep ":" [ "${s}/Anime4K_Clamp_Highlights.glsl" "${s}/Anime4K_Upscale_Denoise_CNN_x2_UL.glsl" "${s}/Anime4K_AutoDownscalePre_x2.glsl" "${s}/Anime4K_AutoDownscalePre_x4.glsl" "${s}/Anime4K_Restore_CNN_UL.glsl" "${s}/Anime4K_Upscale_CNN_x2_UL.glsl" ]; }; "restore" = { glsl-shaders = ""; scale = "ewa_lanczossharp"; }; }; scripts = with pkgs.mpvScripts; [ webtorrent-mpv-hook visualizer videoclip thumbfast reload mpv-subtitle-lines mpv-notify-send mpv-cheatsheet modernx memo autosubsync-mpv autosub sponsorblock ]; }; hm.soft = { media.enable = true; yt-dlp.enable = true; }; }; }