tvl-depot/users/Profpatsch/ytextr/default.nix
Profpatsch de5790aba8 feat(users/Profpatsch/ytextr): allow extra arguments
Change-Id: Icf246cfb31592afa0a8ada3e0e897f78202d44e2
Reviewed-on: https://cl.tvl.fyi/c/depot/+/11088
Autosubmit: Profpatsch <mail@profpatsch.de>
Tested-by: BuildkiteCI
Reviewed-by: Profpatsch <mail@profpatsch.de>
2024-03-03 13:30:51 +00:00

82 lines
2.2 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" { } [
"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"
"$@"
];
}