166 lines
5.9 KiB
Nix
166 lines
5.9 KiB
Nix
{ pkgs, sys, ... }: {
|
|
sops.secrets.clips = {
|
|
sopsFile = ./clips.secrets;
|
|
key = "";
|
|
mode = "0440";
|
|
format = "binary";
|
|
owner = sys.username;
|
|
};
|
|
home-manager.users."${sys.username}" = {
|
|
home.packages = with pkgs; [
|
|
( writeShellApplication {
|
|
name = "convert-for-discord"; # { filePath }: { none } (side-effect: transcodes & remuxes file to x264/mp4)
|
|
runtimeInputs = [
|
|
libnotify
|
|
ffmpeg-full
|
|
];
|
|
text = ''
|
|
#!/bin/bash
|
|
|
|
INPUT_FILE=$(realpath "$1")
|
|
FILE_PATH=$(dirname "$INPUT_FILE")
|
|
FILE_NAME=$(basename "$INPUT_FILE")
|
|
#FILE_EXT="''$''\{FILE_NAME##*.}"
|
|
FILE_NAME="''$''\{FILE_NAME%.*}"
|
|
OUTFILE="$FILE_PATH/$FILE_NAME.mp4"
|
|
|
|
# Actual transcoding happens here:
|
|
notify-send -t 2000 "Transcode starting" "$FILE_NAME"
|
|
ffmpeg -hide_banner -vaapi_device /dev/dri/renderD128 -i "$INPUT_FILE" -map 0 -vf 'format=nv12,scale=-1:720,hwupload' -c:v h264_vaapi -b:v 8M -c:a copy -r 30 "$OUTFILE"
|
|
notify-send -t 4000 "Transcode complete" "$FILE_NAME"
|
|
'';
|
|
} )
|
|
( writeShellApplication {
|
|
name = "convert-lossless"; # { filePath }: { none } (side-effect: transcodes & remuxes file to x264/mp4)
|
|
runtimeInputs = [
|
|
libnotify
|
|
ffmpeg-full
|
|
];
|
|
text = ''
|
|
#!/bin/bash
|
|
|
|
INPUT_FILE="''$''\{1:-INPUT_FILE}"
|
|
INPUT_FILE=$(realpath "$INPUT_FILE")
|
|
FILE_PATH=$(dirname "$INPUT_FILE")
|
|
FILE_NAME=$(basename "$INPUT_FILE")
|
|
#FILE_EXT="''$''\{FILE_NAME##*.}"
|
|
FILE_NAME="''$''\{FILE_NAME%.*}"
|
|
OUTFILE="$FILE_PATH/$FILE_NAME.mp4"
|
|
|
|
# Actual transcoding happens here:
|
|
notify-send -t 2000 "Transcode starting" "$FILE_NAME"
|
|
ffmpeg -hide_banner -vaapi_device /dev/dri/renderD128 -i "$INPUT_FILE" -movflags faststart -map 0 -c:v copy -c:a copy "$OUTFILE"
|
|
notify-send -t 4000 "Transcode complete" "$FILE_NAME"
|
|
'';
|
|
} )
|
|
( writeShellApplication {
|
|
name = "send-to-zipline"; # { filePath }: { none } (side-effect: transcodes & remuxes file to x264/mp4)
|
|
runtimeInputs = [
|
|
libnotify
|
|
curl
|
|
jq
|
|
wl-clipboard
|
|
wl-clip-persist
|
|
];
|
|
text = ''
|
|
#!/bin/bash
|
|
|
|
INPUT_FILE="''$''\{1:-INPUT_FILE}"
|
|
INPUT_FILE=$(realpath "$INPUT_FILE")
|
|
FILE_NAME=$(basename "$INPUT_FILE")
|
|
FILE_NAME="''$''\{FILE_NAME%.*}"
|
|
|
|
ZIPLINE_HOST_ROOT=https://zipline.jafner.net
|
|
TOKEN=$(cat /run/secrets/clips/zipline)
|
|
RESPONSE=$(curl \
|
|
--header "authorization: $TOKEN" \
|
|
$ZIPLINE_HOST_ROOT/api/upload -F "file=@$INPUT_FILE" \
|
|
--header "Content-Type: multipart/form-data" \
|
|
--header "Format: name" \
|
|
--header "Embed: true" \
|
|
--header "Original-Name: true")
|
|
LINK=$(echo "$RESPONSE" | jq -r .'files[0]')
|
|
notify-send -t 4000 "Zipline - Upload complete." "Link copied to clipboard: $LINK"
|
|
echo "[$FILE_NAME]($LINK)"
|
|
'';
|
|
} )
|
|
( writeShellApplication {
|
|
name = "send-to-cloudflare"; # { filePath }: { none } (side-effect: transcodes & remuxes file to x264/mp4)
|
|
runtimeInputs = [
|
|
libnotify
|
|
curl
|
|
jq
|
|
wl-clipboard
|
|
wl-clip-persist
|
|
];
|
|
text = ''
|
|
#!/bin/bash
|
|
|
|
INPUT_FILE="''$''\{1:-INPUT_FILE}"
|
|
INPUT_FILE=$(realpath "$INPUT_FILE")
|
|
FILE_NAME=$(basename "$INPUT_FILE")
|
|
FILE_NAME="''$''\{FILE_NAME%.*}"
|
|
|
|
CF_TOKEN="$(cat /run/secrets/clips/cloudflare/token)"
|
|
CF_ID="$(cat /run/secrets/clips/cloudflare/id)"
|
|
|
|
notify-send -t 2000 "Cloudflare - Beginning upload."
|
|
|
|
# shellcheck disable=SC2086
|
|
RESPONSE=$(curl -X POST \
|
|
--header "Authorization: Bearer $CF_TOKEN" \
|
|
--form "file=@$INPUT_FILE" \
|
|
https://api.cloudflare.com/client/v4/accounts/$CF_ID/stream
|
|
)
|
|
LINK=$(echo "$RESPONSE" | jq -r '.result.preview')
|
|
notify-send -t 4000 "Cloudflare - Upload complete." "Link copied to clipboard: $LINK"
|
|
echo "[$FILE_NAME]($LINK)"
|
|
'';
|
|
} )
|
|
( writeShellApplication {
|
|
name = "send-to-zipline-and-cloudflare"; # { filePath }: { none } (side-effect: transcodes & remuxes file to x264/mp4)
|
|
runtimeInputs = [
|
|
libnotify
|
|
curl
|
|
jq
|
|
wl-clipboard
|
|
wl-clip-persist
|
|
];
|
|
text = ''
|
|
#!/bin/bash
|
|
|
|
INPUT_FILE="''$''\{1:-INPUT_FILE}"
|
|
INPUT_FILE=$(realpath "$INPUT_FILE")
|
|
FILE_NAME=$(basename "$INPUT_FILE")
|
|
FILE_NAME="''$''\{FILE_NAME%.*}"
|
|
|
|
ZIPLINE_HOST_ROOT=https://zipline.jafner.net
|
|
TOKEN=$(cat ~/.zipline-auth)
|
|
|
|
notify-send -t 2000 "Zipline and Cloudflare - Beginning upload."
|
|
RESPONSE=$(curl \
|
|
--header "authorization: $TOKEN" \
|
|
$ZIPLINE_HOST_ROOT/api/upload -F "file=@$INPUT_FILE" \
|
|
--header "Content-Type: multipart/form-data" \
|
|
--header "Format: name" \
|
|
--header "Embed: true" \
|
|
--header "Original-Name: true")
|
|
LINK=$(echo "$RESPONSE" | jq -r .'files[0]' | sed 's/\/u\//\/r\//')
|
|
|
|
CF_TOKEN="$(cat ~/.cf-auth)"
|
|
CF_ID="$(cat ~/.cf-id)"
|
|
|
|
# shellcheck disable=SC2086
|
|
RESPONSE=$(curl -X POST \
|
|
--header "Authorization: Bearer $CF_TOKEN" \
|
|
--data "{\"url\":\"$LINK\",\"meta\":{\"name\":\"$FILE_NAME\"}}" \
|
|
https://api.cloudflare.com/client/v4/accounts/$CF_ID/stream/copy
|
|
)
|
|
LINK=$(echo "$RESPONSE" | jq -r '.result.preview')
|
|
notify-send -t 4000 "Zipline and Cloudflare - Upload complete." "Link copied to clipboard: $LINK"
|
|
echo "[$FILE_NAME]($LINK)"
|
|
'';
|
|
} )
|
|
];
|
|
};
|
|
} |