From 2d61efec239bb937f2f5b7c13d9e6baa44c1cee5 Mon Sep 17 00:00:00 2001 From: Malte Brandy Date: Mon, 31 Jan 2022 17:57:45 +0100 Subject: [PATCH] Configure mpv --- home-manager/roles/daily-driver-programs.nix | 4 +- home-manager/roles/hotkeys.nix | 1 + home-manager/roles/mpv/autosave.lua | 55 ++++++++++++++++++++ home-manager/roles/mpv/default.nix | 20 +++++++ home-manager/roles/state.nix | 1 + 5 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 home-manager/roles/mpv/autosave.lua create mode 100644 home-manager/roles/mpv/default.nix diff --git a/home-manager/roles/daily-driver-programs.nix b/home-manager/roles/daily-driver-programs.nix index 2377799f..1b249eca 100644 --- a/home-manager/roles/daily-driver-programs.nix +++ b/home-manager/roles/daily-driver-programs.nix @@ -1,5 +1,6 @@ { pkgs, lib, config, ... }: { + imports = [ ./mpv ]; home.packages = builtins.attrValues rec { zoom = pkgs.zoom-us.overrideAttrs (old: { postFixup = old.postFixup + '' @@ -25,7 +26,6 @@ abcde beets zbar # media - ncpamixer pavucontrol deluge gmpc vlc mpv youtubeDL syncplay; - + ncpamixer pavucontrol deluge gmpc vlc youtubeDL syncplay; }; } diff --git a/home-manager/roles/hotkeys.nix b/home-manager/roles/hotkeys.nix index aa451e98..cb4566e9 100644 --- a/home-manager/roles/hotkeys.nix +++ b/home-manager/roles/hotkeys.nix @@ -72,6 +72,7 @@ in Minecraft = fork "minecraft-launcher"; }; Deluge = fork "deluge"; + VoxMachina = fork "mpv https://www.youtube.com/playlist?list=PL1tiwbzkOjQz7D0l_eLJGAISVtcL7oRu_"; }; } { Files = fork "nautilus"; } diff --git a/home-manager/roles/mpv/autosave.lua b/home-manager/roles/mpv/autosave.lua new file mode 100644 index 00000000..6a89d877 --- /dev/null +++ b/home-manager/roles/mpv/autosave.lua @@ -0,0 +1,55 @@ +-- autosave.lua +-- +-- Periodically saves "watch later" data during playback, rather than only saving on quit. +-- This lets you easily recover your position in the case of an ungraceful shutdown of mpv (crash, power failure, etc.). +-- +-- You can configure the save period by creating a "lua-settings" directory inside your mpv configuration directory. +-- Inside the "lua-settings" directory, create a file named "autosave.conf". +-- The save period can be set like so: +-- +-- save_period=60 +-- +-- This will set the save period to once every 60 seconds of playback, time while paused is not counted towards the save period timer. +-- The default save period is 30 seconds. +local options = require 'mp.options' + +local o = { + save_period = 30 +} + +options.read_options(o) + +local mp = require 'mp' + +local function save() + mp.commandv("set", "msg-level", "cplayer=warn") + mp.command("write-watch-later-config") + mp.commandv("set", "msg-level", "cplayer=status") +end + +local save_period_timer = mp.add_periodic_timer(o.save_period, save) + +local function pause(name, paused) + save() + if paused then + save_period_timer:stop() + else + save_period_timer:resume() + end +end + +mp.observe_property("pause", "bool", pause) +mp.register_event("file-loaded", save) + +local function end_file(data) + if data.reason == 'eof' or data.reason == 'stop' then + local playlist = mp.get_property_native('playlist') + for i, entry in pairs(playlist) do + if entry.id == data.playlist_entry_id then + mp.commandv("delete-watch-later-config", entry.filename) + return + end + end + end +end +mp.register_event("end-file", end_file) diff --git a/home-manager/roles/mpv/default.nix b/home-manager/roles/mpv/default.nix new file mode 100644 index 00000000..ce97a420 --- /dev/null +++ b/home-manager/roles/mpv/default.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: +let script = pkgs.runCommand "autosave.lua" { passthru.scriptName = "autosave.lua"; } '' + mkdir -p $out/share/mpv/scripts/ + ln -s ${./autosave.lua} $out/share/mpv/scripts/autosave.lua +''; +in +{ + programs.mpv = { + enable = true; + config = { + save-position-on-quit = true; + osc = false; + }; + scripts = [ + pkgs.mpvScripts.mpris + pkgs.mpvScripts.thumbnail + script + ]; + }; +} diff --git a/home-manager/roles/state.nix b/home-manager/roles/state.nix index 38f87d94..5f41a09e 100644 --- a/home-manager/roles/state.nix +++ b/home-manager/roles/state.nix @@ -14,6 +14,7 @@ let ".config/gh" ".contacts" ".gnupg" + ".config/mpv/watch_later" ".local/share/Mumble" ".local/share/TelegramDesktop" ".local/share/direnv"