nixos/generic/mpv: init
This commit is contained in:
parent
d9a2100e69
commit
16c1dd9c79
1 changed files with 90 additions and 0 deletions
90
nix-os/generic/mpv.nix
Normal file
90
nix-os/generic/mpv.nix
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
{config, lib, options, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.programs.mpv;
|
||||||
|
opts = options.programs.mpv;
|
||||||
|
|
||||||
|
toMpvIniString = attrset: lib.pipe attrset [
|
||||||
|
(lib.mapAttrsToList (name: value: "${name}=${value}"))
|
||||||
|
(lib.concatStringsSep "\n")
|
||||||
|
];
|
||||||
|
|
||||||
|
configDir = pkgs.symlinkJoin {
|
||||||
|
name = "mpv-config-dir";
|
||||||
|
paths = lib.optional opts.settings.mpv.isDefined (pkgs.writeTextFile {
|
||||||
|
name = "mpv-config-dir-mpv.conf";
|
||||||
|
destination = "/share/mpv/mpv.conf";
|
||||||
|
text = toMpvIniString cfg.settings.mpv;
|
||||||
|
}) ++ lib.optional opts.settings.input.isDefined (pkgs.writeTextFile {
|
||||||
|
name = "mpv-config-dir-input.conf";
|
||||||
|
destination = "/share/mpv/input.conf";
|
||||||
|
text = cfg.settings.input;
|
||||||
|
}) ++ lib.mapAttrsToList (filename: opts: pkgs.writeTextFile {
|
||||||
|
name = "mpv-config-dir-script-opts-${filename}";
|
||||||
|
destination = "/share/mpv/script-opts/${filename}";
|
||||||
|
text = toMpvIniString opts;
|
||||||
|
}) cfg.settings.script-opts;
|
||||||
|
};
|
||||||
|
|
||||||
|
wrappedMpv = pkgs.wrapMpv cfg.package {
|
||||||
|
youtubeSupport = cfg.youtubeSupport;
|
||||||
|
scripts = cfg.scripts;
|
||||||
|
extraMakeWrapperArgs = lib.optionals (lib.any (x: x) [
|
||||||
|
opts.settings.mpv.isDefined
|
||||||
|
opts.settings.input.isDefined
|
||||||
|
(lib.length (lib.attrNames cfg.settings.script-opts) > 0)
|
||||||
|
]) [
|
||||||
|
"--add-flags" "--config-dir='${configDir}/share/mpv'"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.programs.mpv = {
|
||||||
|
enable = lib.mkEnableOption "mpv";
|
||||||
|
package = lib.mkPackageOption pkgs "mpv-unwrapped" {};
|
||||||
|
scripts = lib.mkOption {
|
||||||
|
type = lib.types.listOf lib.types.package;
|
||||||
|
default = [];
|
||||||
|
};
|
||||||
|
youtubeSupport = lib.mkEnableOption "yt-dlp support for mpv" // {
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
settings = let
|
||||||
|
mpvini = lib.types.attrsOf lib.types.str;
|
||||||
|
in {
|
||||||
|
script-opts = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf mpvini;
|
||||||
|
default = {};
|
||||||
|
example = {
|
||||||
|
"crop.conf".draw_crosshair = "yes";
|
||||||
|
};
|
||||||
|
description = ''
|
||||||
|
A map of script options for mpv scripts.
|
||||||
|
The key is the filename of the script, and the value is a map of options.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
input = lib.mkOption {
|
||||||
|
type = lib.types.separatedString "\n";
|
||||||
|
example = ''
|
||||||
|
Alt+1 set window-scale 0.125
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
A list of input commands to be added to the input.conf file.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
mpv = lib.mkOption {
|
||||||
|
type = mpvini;
|
||||||
|
example = {
|
||||||
|
keep-open = "yes";
|
||||||
|
osd-fractions = "yes";
|
||||||
|
};
|
||||||
|
description = ''
|
||||||
|
A map of mpv options.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
environment.systemPackages = [ wrappedMpv ];
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue