tvl-depot/users/Profpatsch/ytextr/default.nix
Profpatsch 71fe30a87c feat(users/Profpatsch): add ytextr, a sandboxed yt-dlp wrapper
Change-Id: Id0992e5c1f52ac2c95444721c7565a66ef484e2b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/4836
Tested-by: BuildkiteCI
Reviewed-by: Profpatsch <mail@profpatsch.de>
2022-01-09 12:52:09 +00:00

59 lines
2.1 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ depot, pkgs, lib, ... }:
# ytextr is a wrapper arount yt-dlp (previously youtube-dl)
# that extracts a single video according to my preferred settings.
#
# It will be sandboxed to the current directory, since I dont particularly
# trust the massive codebase of that tool (with hundreds of contributors).
#
# Since the rules for downloading videos is usually against the wishes
# of proprietary vendors, and a video is many megabytes anyway,
# it will be fetched from the most recent nixpkgs unstable channel before running.
let
bins = depot.nix.getBins pkgs.nix [ "nix-build" ]
// depot.nix.getBins pkgs.bubblewrap [ "bwrap" ];
# Run a command, with the given packages in scope, and `packageNamesAtRuntime` being fetched at the start in the given nix `channel`.
nix-run-with-channel = {
# The channel to get `packageNamesAtRuntime` from
channel,
# executable to run with `packageNamesAtRuntime` in PATH
# and the argv
executable,
# A list of nixpkgs package attribute names that should be put into PATH when running `command`.
packageNamesAtRuntime,
}: depot.nix.writeExecline "nix-run-with-channel-${channel}" {} [
# TODO: prevent race condition by writing a temporary gc root
"backtick" "-iE" "storepath" [
bins.nix-build
"-I" "nixpkgs=channel:${channel}"
"--arg"
"packageNamesAtRuntimeJsonPath"
(pkgs.writeText "packageNamesAtRuntime.json" (builtins.toJSON packageNamesAtRuntime))
./create-symlink-farm.nix
]
"importas" "-ui" "PATH" "PATH"
"export" "PATH" "\${storepath}/bin:\${PATH}"
executable "$@"
];
in nix-run-with-channel {
channel = "nixos-unstable";
packageNamesAtRuntime = [ "yt-dlp" ];
executable = depot.nix.writeExecline "ytextr" { readNArgs = 1; } [
"getcwd" "-E" "cwd"
bins.bwrap
"--ro-bind" "/nix/store" "/nix/store"
"--ro-bind" "/etc" "/etc"
"--bind" "$cwd" "$cwd"
"yt-dlp"
"--no-playlist"
"--write-sub"
"--all-subs"
"--embed-subs"
"--merge-output-format" "mkv"
"-f" "bestvideo[height<=?1080]+bestaudio/best"
"$1"
];
}