119 lines
4.7 KiB
Nix
Executable File
119 lines
4.7 KiB
Nix
Executable File
{ lib, config, pkgs, ... }:
|
|
let
|
|
configuredMpv = config.programs.mpv.finalPackage;
|
|
shimWatchdog = pkgs.custom.jellyfin-mpv-shim-watchdog;
|
|
in{
|
|
|
|
config = lib.mkIf (config.syscfg.make.gui) {
|
|
programs.mpv = {
|
|
enable = true;
|
|
scripts = with pkgs.mpvScripts; [ mpris ];
|
|
config = {
|
|
hwdec ="auto";
|
|
profile ="high-quality";
|
|
ytdl-format = "bestvideo+bestaudio";
|
|
};
|
|
|
|
bindings =
|
|
let
|
|
shadersPkg = "${pkgs.mpv-shim-default-shaders}/share/mpv-shim-default-shaders/shaders";
|
|
setShader = message: files:
|
|
''no-osd change-list glsl-shaders set "${lib.concatStringsSep ":" files}"; show-text "${message}"'';
|
|
in
|
|
{
|
|
"CTRL+1" = setShader "Anime4K: Mode A+A (Balanced)" [
|
|
"${shadersPkg}/Anime4K_Clamp_Highlights.glsl"
|
|
"${shadersPkg}/Anime4K_Restore_CNN_M.glsl"
|
|
"${shadersPkg}/Anime4K_Upscale_CNN_x2_M.glsl"
|
|
"${shadersPkg}/Anime4K_Restore_CNN_S.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x2.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x4.glsl"
|
|
"${shadersPkg}/Anime4K_Upscale_CNN_x2_S.glsl"
|
|
];
|
|
"CTRL+2" = setShader "Anime4K: Mode B+B (Soft)" [
|
|
"${shadersPkg}/Anime4K_Clamp_Highlights.glsl"
|
|
"${shadersPkg}/Anime4K_Restore_CNN_Soft_M.glsl"
|
|
"${shadersPkg}/Anime4K_Upscale_CNN_x2_M.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x2.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x4.glsl"
|
|
"${shadersPkg}/Anime4K_Restore_CNN_Soft_S.glsl"
|
|
"${shadersPkg}/Anime4K_Upscale_CNN_x2_S.glsl"
|
|
];
|
|
"CTRL+3" = setShader "Anime4K: Mode C+A (Heavy Denoise)" [
|
|
"${shadersPkg}/Anime4K_Clamp_Highlights.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x2.glsl"
|
|
"${shadersPkg}/Anime4K_Upscale_Denoise_CNN_x2_M.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x2.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x4.glsl"
|
|
"${shadersPkg}/Anime4K_Restore_CNN_S.glsl"
|
|
"${shadersPkg}/Anime4K_Upscale_CNN_x2_S.glsl"
|
|
];
|
|
"CTRL+4" = setShader "Hybrid: FSRCNNX + Anime4K Balanced" [
|
|
"${shadersPkg}/Anime4K_Clamp_Highlights.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x2.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x4.glsl"
|
|
"${shadersPkg}/Anime4K_Restore_CNN_M.glsl"
|
|
"${shadersPkg}/FSRCNNX_x2_16-0-4-1.glsl"
|
|
"${shadersPkg}/CAS-scaled.glsl"
|
|
];
|
|
|
|
"CTRL+5" = setShader "Hybrid: FSRCNNX + Anime4K Fast" [
|
|
"${shadersPkg}/Anime4K_Clamp_Highlights.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x2.glsl"
|
|
"${shadersPkg}/Anime4K_AutoDownscalePre_x4.glsl"
|
|
"${shadersPkg}/Anime4K_Restore_CNN_VL.glsl"
|
|
"${shadersPkg}/FSRCNNX_x2_16-0-4-1.glsl"
|
|
"${shadersPkg}/CAS-scaled.glsl"
|
|
];
|
|
|
|
"CTRL+6" = setShader "Movie: FSRCNNX + Natural Sharp" [
|
|
"${shadersPkg}/FSRCNNX_x2_16-0-4-1.glsl"
|
|
"${shadersPkg}/CAS-scaled.glsl"
|
|
];
|
|
|
|
"CTRL+0" = ''no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared"'';
|
|
};
|
|
};#--target-colorspace-hint-mode=source for HDR
|
|
xdg.configFile."jellyfin-mpv-shim/conf.json".text = builtins.toJSON {
|
|
"mpv_ext" = true;
|
|
"mpv_ext_path" = "${configuredMpv}/bin/mpv";
|
|
"mpv_ext_start" = true;
|
|
"mpv_ext_no_ovr" = true;
|
|
};
|
|
|
|
programs.yt-dlp.enable = true;
|
|
|
|
# The upstream jellyfin-mpv-shim service has no Restart and no network
|
|
# ordering: it happily starts while offline (silently dead) and never
|
|
# recovers a connection dropped by a network blip. Gate its start on the
|
|
# network being up, and let a watchdog notice the "up but not connected"
|
|
# state that systemd can't see. See pkgs.custom.jellyfin-mpv-shim-watchdog.
|
|
systemd.user.services.jellyfin-mpv-shim.Service = {
|
|
ExecStartPre = "${shimWatchdog}/bin/jellyfin-mpv-shim-watchdog wait-online";
|
|
TimeoutStartSec = "infinity"; # stay in start-pre until the network is back
|
|
Restart = "on-failure";
|
|
RestartSec = 5;
|
|
};
|
|
|
|
systemd.user.services.jellyfin-mpv-shim-watchdog = {
|
|
Unit = {
|
|
Description = "Restart jellyfin-mpv-shim when it is up but not connected";
|
|
After = [ "jellyfin-mpv-shim.service" ];
|
|
};
|
|
Service = {
|
|
Type = "oneshot";
|
|
ExecStart = "${shimWatchdog}/bin/jellyfin-mpv-shim-watchdog check";
|
|
};
|
|
};
|
|
|
|
systemd.user.timers.jellyfin-mpv-shim-watchdog = {
|
|
Unit.Description = "Periodic health check for jellyfin-mpv-shim";
|
|
Timer = {
|
|
OnActiveSec = "60s";
|
|
OnUnitActiveSec = "60s";
|
|
};
|
|
Install.WantedBy = [ "timers.target" ];
|
|
};
|
|
};
|
|
}
|