{ description = "MPV overlay with scripts and configuration for watching anime"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, utils }: let packages = utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; mpvScript = { owner, repo, rev, sha256, scriptName }: pkgs.stdenvNoCC.mkDerivation { pname = repo; version = builtins.substring 0 6 rev; src = pkgs.fetchFromGitHub { inherit owner repo rev sha256; }; dontBuild = true; installPhase = '' install -Dm644 ${scriptName} $out/share/mpv/scripts/${scriptName} ''; passthru = { inherit scriptName; }; }; in { packages.sub-select = mpvScript { owner = "CogentRedTester"; repo = "mpv-sub-select"; rev = "5d2fb7ab73fc0e36d44109e75c9be26bd42084e2"; sha256 = "0dyh2kyvivj81lrkyqhc3czmi9hqjkh7xg8dqjnnr3kh3yn62dpi"; scriptName = "sub-select.lua"; }; packages.segment-linking = mpvScript { owner = "CogentRedTester"; repo = "mpv-segment-linking"; rev = "bb0fdb7961859df57c64b42d75dbbd60a4024e97"; sha256 = "1ykl24p96wwka4fillrzni6i0xkk4s2l9zg1scqypcbs5w491qsj"; scriptName = "segment-linking.lua"; }; }); in packages // rec { overlays.default = final: prev: let newScripts = packages.packages.${prev.system}; in { mpv = prev.mpv.override { scripts = builtins.attrValues newScripts; }; mpvScripts = prev.mpvScripts // newScripts; }; nixosModules.default = { pkgs, lib, ... }: { nixpkgs.overlays = [ overlays.default ]; # needed for mpv segment-linking plugin environment.systemPackages = [ pkgs.mkvtoolnix ]; home-manager.sharedModules = [ ({ config, ... }: { config = lib.mkIf config.programs.mpv.enable { xdg.configFile."mpv/script-opts/sub-select.json".text = builtins.toJSON [ # English audio: # 1. English signs/songs subs # 2. Forced subs # 3. No subs { alang = "eng?"; slang = "eng?"; whitelist = [ "sign" "song" ]; } { alang = "eng?"; slang = "forced"; } { alang = [ "eng?" "no" ]; slang = "no"; } # Non-English audio: # 1. English non-signs non-forced subs, default subs iff default audio # 2. English non-signs non-forced subs # 3. English non-signs forced subs # 4. Undefined non-signs non-forced subs, default subs iff default audio # 5. Undefined non-signs non-forced subs # 6. Undefined non-signs forced subs # 7. English signs/songs subs, I guess # 8. Undefined signs/songs subs, I guess # 9. Forced subs in other languages, I guess { alang = "*"; slang = "eng?"; blacklist = [ "sign" "song" ]; condition = "not sub.forced and ((audio.default and sub.default) or (not audio.default and not sub.default))"; } { alang = "*"; slang = "eng?"; blacklist = [ "sign" "song" ]; condition = "not sub.forced"; } { alang = "*"; slang = "eng?"; blacklist = [ "sign" "song" ]; } { alang = "*"; slang = "und"; blacklist = [ "sign" "song" ]; condition = "not sub.forced and ((audio.default and sub.default) or (not audio.default and not sub.default))"; } { alang = "*"; slang = "und"; blacklist = [ "sign" "song" ]; condition = "not sub.forced"; } { alang = "*"; slang = "und"; blacklist = [ "sign" "song" ]; } { alang = "*"; slang = "eng?"; } { alang = "*"; slang = "und"; } { alang = "*"; slang = "forced"; } ]; }; }) ]; }; }; }