mpv-anime/flake.nix

107 lines
3 KiB
Nix

{
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, patches ? [] }: pkgs.stdenvNoCC.mkDerivation {
pname = repo;
version = builtins.substring 0 6 rev;
src = pkgs.fetchFromGitHub {
inherit owner repo rev sha256;
};
inherit patches;
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";
patches = [
./sub-select-path.patch
];
};
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 rec {
mpv-unwrapped = prev.mpv-unwrapped.overrideAttrs (oldAttrs: {
patches = (oldAttrs.patches or []) ++ [
./confdir.patch
];
});
mpv = prev.wrapMpv mpv-unwrapped {
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
];
environment.etc."mpv/script-opts/sub-select.json".text = builtins.toJSON [
{
alang = "j[ap]n?";
slang = [ "eng?" "und" ];
blacklist = [ "sign" ];
condition = "not sub.forced";
}
{
alang = "eng?";
slang = "forced";
}
{
alang = "eng?";
slang = "eng?";
whitelist = [ "sign" "song" ];
}
{
alang = [ "eng?" "no" ];
slang = "no";
}
{
alang = "*";
slang = "eng?";
condition = "not sub.forced";
}
{
alang = "*";
slang = "und";
condition = "not sub.forced";
}
{
alang = "*";
slang = "forced";
}
];
};
};
}