depot/third_party/tvl/users/Profpatsch/ytextr/default.nix
Default email a291c8690a Project import generated by Copybara.
GitOrigin-RevId: e6e19f3d81a982a62e1bba08f0b4f7fdc21b4ea0
2022-05-19 16:39:52 +02:00

82 lines
2.2 KiB
Nix
Raw Permalink 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"
];
}