{ config, lib, pkgs, ... }: with lib; let cfg = config.nixfiles.modules.mpv; in { options.nixfiles.modules.mpv.enable = mkEnableOption "mpv"; config = mkIf cfg.enable { nixfiles.modules.common = { shell.aliases.cam = "mpv av://v4l2:/dev/video0"; xdg.defaultApplications.mpv = let audio = [ "audio/aac" "audio/ac3" "audio/basic" "audio/flac" "audio/midi" "audio/mp4" "audio/mpeg" "audio/ogg" "audio/opus" "audio/vnd.dts" "audio/vnd.dts.hd" "audio/webm" "audio/x-adpcm" "audio/x-aifc" "audio/x-aiff" "audio/x-ape" "audio/x-flac+ogg" "audio/x-m4b" "audio/x-m4r" "audio/x-matroska" "audio/x-mpegurl" "audio/x-musepack" "audio/x-opus+ogg" "audio/x-speex" "audio/x-speex+ogg" "audio/x-vorbis+ogg" "audio/x-wav" "audio/x-wavpack" "x-content/audio-cdda" "x-content/audio-dvd" ]; video = [ "video/3gpp" "video/3gpp2" "video/mkv" "video/mp2t" "video/mp4" "video/mpeg" "video/ogg" "video/quicktime" "video/vnd.mpegurl" "video/vnd.radgamettools.bink" "video/vnd.radgamettools.smacker" "video/wavelet" "video/webm" "video/x-matroska" "video/x-matroska-3d" "video/x-mjpeg" "video/x-msvideo" "video/x-ogm+ogg" "video/x-theora+ogg" "x-content/video-bluray" "x-content/video-dvd" "x-content/video-hddvd" "x-content/video-svcd" "x-content/video-vcd" ]; image = [ "image/avif" "image/bmp" "image/gif" "image/jp2" "image/jpeg" "image/jpg" "image/jpm" "image/jpx" "image/jxl" "image/png" "image/tiff" "image/vnd.microsoft.icon" "image/webp" "image/webp" "image/x-tga" ]; in audio ++ video ++ image; }; hm.programs.mpv = { enable = true; package = pkgs.mpv.override { scripts = with pkgs.mpvScripts; [ autoload mpv-cheatsheet mpv-webm sponsorblock thumbfast uosc webtorrent-mpv-hook ]; }; bindings = { "RIGHT" = "seek 10"; "LEFT" = "seek -10"; "UP" = "seek 60"; "DOWN" = "seek -60"; "Shift+RIGHT" = "no-osd seek 1 exact"; "Shift+LEFT" = "no-osd seek -1 exact"; "Shift+UP" = "no-osd seek 5 exact"; "Shift+DOWN" = "no-osd seek -5 exact"; "Alt+h" = "add sub-delay +1"; "Alt+l" = "add sub-delay -1"; "Alt+k" = "add sub-scale +0.1"; "Alt+j" = "add sub-scale -0.1"; "B" = ''cycle-values background "#000000" "#ffffff"''; }; profiles = { "protocol.http".force-window = "immediate"; "protocol.https".profile = "protocol.http"; "extension.gif" = { cache = false; loop-file = true; }; "extension.png" = { profile = "extension.gif"; video-aspect-override = 0; }; "extension.jpeg".profile = "extension.png"; "extension.jpg".profile = "extension.png"; }; config = let lang = concatStringsSep "," [ "Japanese" "japanese" "jp" "jpn" "jaJP" "ja-JP" "English" "english" "en" "eng" "enUS" "en-US" "Russian" "russian" "ru" "rus" "ruRU" "ru-RU" ]; in { autofit-larger = "100%x95%"; cache = true; cursor-autohide = 1000; cursor-autohide-fs-only = true; demuxer-max-back-bytes = "20M"; demuxer-max-bytes = "20M"; force-seekable = true; fullscreen = true; msg-color = true; msg-module = true; prefetch-playlist = true; save-position-on-quit = true; screenshot-format = "png"; screenshot-template = "%F [%p]"; stop-screensaver = true; term-osd-bar = true; use-filedir-conf = true; osd-bar-align-y = 0; osd-bar-h = 2; osd-bar-w = 60; osd-border-color = "#FF262626"; osd-border-size = 2; osd-color = "#FFFFFFFF"; osd-duration = 1000; osd-font-size = 40; osd-fractions = true; osd-level = 1; osd-shadow-color = "#33000000"; blend-subtitles = true; embeddedfonts = false; sub-ass-force-margins = true; sub-ass-force-style = "kerning=yes"; sub-auto = "fuzzy"; sub-border-color = "#FF262626"; sub-border-size = 2.5; sub-color = "#FFFFFFFF"; sub-file-paths-append = "srt"; sub-fix-timing = true; sub-font-size = 40; sub-scale-with-window = true; sub-shadow-color = "#33000000"; sub-shadow-offset = 1; sub-spacing = 0.5; sub-use-margins = true; audio-file-auto = "fuzzy"; volume = 100; volume-max = 200; alang = lang; slang = lang; ytdl = true; ytdl-raw-options = ''sub-lang="${lang}",write-sub=''; }; }; }; }