summaryrefslogtreecommitdiff
path: root/modules/mpv.nix
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
committerAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
commite6ed60548397627bf10f561f9438201dbba0a36e (patch)
treef9a84c5957d2cc4fcd148065ee9365a0c851ae1c /modules/mpv.nix
parent9ac64328603d44bd272175942d3ea3eaadcabd04 (diff)
2024-04-21
Diffstat (limited to 'modules/mpv.nix')
-rw-r--r--modules/mpv.nix240
1 files changed, 240 insertions, 0 deletions
diff --git a/modules/mpv.nix b/modules/mpv.nix
new file mode 100644
index 0000000..9b26b08
--- /dev/null
+++ b/modules/mpv.nix
@@ -0,0 +1,240 @@
+{
+ 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 =
+ with pkgs;
+ wrapMpv
+ (mpv-unwrapped.override {
+ bs2bSupport = false;
+ cacaSupport = false;
+ dvbinSupport = false;
+ dvdnavSupport = false;
+ swiftSupport = false;
+ })
+ {
+ scripts = with mpvScripts; [
+ autoload
+ sponsorblock
+ ];
+ };
+
+ 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";
+
+ # osc = false;
+
+ 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='';
+ };
+ };
+ };
+}