{ pkgs, ... }@all: with all; { programs.mpv = { enable = true; package = pkgs.mpv; config = { # osc = false; # Disables the on-screen controller (seekbar, volume, etc.) # osd-bar = false; # Disables the on-screen display progress bar demuxer-max-back-bytes = 4294967296; # Sets the maximum number of bytes to buffer for seeking backwards demuxer-max-bytes = 4294967296; # Sets the maximum number of bytes to buffer for seeking forwards interpolation = true; # Enables frame interpolation for smoother playback video-sync = "display-resample"; # Synchronizes video playback to the display's refresh rate sub-visibility = true; # Hides subtitles by default sub-auto = "fuzzy"; # Automatically loads subtitles if their filename is similar to the video file sub-font = rice.font.base.name; # sub-blur = 10; # this blurs the whole thing, text aswell sub-color = rice.color.accent.bright; sub-back-color = "${rice.color.background}${rice.lib.float-to-drune 0.8}"; # does not seem to work # sub-border-size = 0; sub-border-style = "opaque-box"; background-color = "${rice.color.background}"; # transparency breaks blur on hyprland sometimes, so just rgb alang = "en,eng,de,ger"; # Sets preferred audio languages in order slang = "en,eng,de,ger"; # Sets preferred subtitle languages in order vlang = "en,eng,de,ger"; # Sets preferred video languages in order save-position-on-quit = true; # Saves the playback position when quitting ignore-path-in-watch-later-config = true; # Ignores the path in the watch-later configuration ytdl-format = "bestvideo[height<=?1080]+bestaudio/best"; # Sets the format for downloading YouTube videos vo = pkgs.lib.mkIf hyper.nvidia.enable "gpu"; hwdec = if hyper.nvidia.enable then "no" else "no"; # bugged }; scripts = with pkgs.mpvScripts; [ mpris # use media keys thumbfast # thumbnails on timeline hover # uosc # custom ui sponsorblock ]; bindings = { "O" = ''no-osd cycle-values glsl-shaders "~~/shaders/invert.glsl" ""; show-text "Invert Shader"''; # "tab" = ''script-binding uosc/toggle-ui''; # "space" = ''cycle pause; script-binding uosc/flash-pause-indicator''; # "right" = ''seek 5''; # "left" = ''seek -5''; # "shift+right" = ''seek 30; script-binding uosc/flash-timeline''; # "shift+left" = ''seek -30; script-binding uosc/flash-timeline''; # "m" = ''no-osd cycle mute; script-binding uosc/flash-volume''; # "up" = ''no-osd add volume 10; script-binding uosc/flash-volume''; # "down" = ''no-osd add volume -10; script-binding uosc/flash-volume''; # "[" = ''no-osd add speed -0.25; script-binding uosc/flash-speed''; # "]" = ''no-osd add speed 0.25; script-binding uosc/flash-speed''; # "\\" = ''no-osd set speed 1; script-binding uosc/flash-speed''; # ">" = ''script-binding uosc/next; script-message-to uosc flash-elements top_bar,timeline''; # "<" = ''script-binding uosc/prev; script-message-to uosc flash-elements top_bar,timeline>''; }; scriptOpts = { thumbfast = { spawn_first = true; network = true; hwdec = true; }; uosc = { timeline_size = 25; timeline_persistency = "paused,audio"; progress = "always"; progress_size = 4; progress_line_width = 4; controls = "subtitles,audio,video,editions,stream-quality"; top_bar = "never"; refine = "text_width"; }; }; }; xdg.configFile."mpv/shaders/invert.glsl".text = /* glsl */ '' //!HOOK LUMA //!BIND HOOKED vec4 hook() { float luma = LUMA_texOff(0).x; return vec4(1.0 - luma); } ''; }