pastebin
This commit is contained in:
parent
a602310088
commit
d2e3d05e29
@ -8,6 +8,7 @@
|
|||||||
imports =
|
imports =
|
||||||
[
|
[
|
||||||
./kakoune.nix
|
./kakoune.nix
|
||||||
|
./pastebin.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
nix = {
|
nix = {
|
||||||
|
27
kakoune.nix
27
kakoune.nix
@ -192,17 +192,26 @@ let
|
|||||||
name = "edit";
|
name = "edit";
|
||||||
runtimeInputs = [ myKakoune ];
|
runtimeInputs = [ myKakoune ];
|
||||||
text = ''
|
text = ''
|
||||||
BUFFER_NAME=''$(echo -n "''$PWD" | xxd -ps -c 200 | tr -d '\n' | shasum | head -c -4)
|
CMND=$(cat <<'END'
|
||||||
|
BUFFER_NAME=''$(echo -n "''$PWD" | xxd -ps -c 200 | tr -d '\n' | shasum | head -c -4)
|
||||||
|
|
||||||
tmux -L "$BUFFER_NAME" has-session -t "$BUFFER_NAME" || {
|
tmux -L "$BUFFER_NAME" has-session -t "$BUFFER_NAME" || {
|
||||||
tmux -L "$BUFFER_NAME" new-session -d -s "$BUFFER_NAME" "kak -e 'kaktree-enable; kaktree-toggle'"
|
tmux -L "$BUFFER_NAME" new-session -d -s "$BUFFER_NAME" "kak -e 'kaktree-enable; kaktree-toggle'"
|
||||||
tmux -L "$BUFFER_NAME" set -g status off
|
tmux -L "$BUFFER_NAME" set -g status off
|
||||||
tmux -L "$BUFFER_NAME" set -g pane-border-style fg=#0c0c0c
|
tmux -L "$BUFFER_NAME" set -g pane-border-style fg=#0c0c0c
|
||||||
tmux -L "$BUFFER_NAME" set -g pane-active-border-style "bg=default fg=#0c0c0c"
|
tmux -L "$BUFFER_NAME" set -g pane-active-border-style "bg=default fg=#0c0c0c"
|
||||||
}
|
}
|
||||||
|
|
||||||
tmux -L "$BUFFER_NAME" attach -t "$BUFFER_NAME"
|
tmux -L "$BUFFER_NAME" attach -t "$BUFFER_NAME"
|
||||||
'';
|
END
|
||||||
|
)
|
||||||
|
|
||||||
|
if [ -f "shell.nix" ] && [ -z ''${IN_NIX_SHELL+x} ]; then
|
||||||
|
nix-shell --command "$CMND"
|
||||||
|
else
|
||||||
|
eval "$CMND"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
234
pastebin.nix
Normal file
234
pastebin.nix
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
{ pkgs, lib, config, specialArgs, options, modulesPath }:
|
||||||
|
|
||||||
|
with pkgs;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
pastebin = (writeShellApplication {
|
||||||
|
name = "pb";
|
||||||
|
runtimeInputs = [ curl ];
|
||||||
|
text = ''
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# init variables
|
||||||
|
version="v2020.10.27"
|
||||||
|
ENDPOINT="https://stp.cx"
|
||||||
|
flag_options=":hvcufe:s::"
|
||||||
|
flag_version=0
|
||||||
|
flag_help=0
|
||||||
|
flag_file=0
|
||||||
|
flag_url=0
|
||||||
|
flag_colors=0
|
||||||
|
flag_ext=0
|
||||||
|
data=""
|
||||||
|
EXT=""
|
||||||
|
|
||||||
|
# help message available via func
|
||||||
|
show_help() {
|
||||||
|
cat > /dev/stdout << END
|
||||||
|
pb [options] filename
|
||||||
|
or
|
||||||
|
(command-with-stdout) | pb
|
||||||
|
|
||||||
|
Uploads a file or data to steph's 0x0 paste bin
|
||||||
|
|
||||||
|
OPTIONAL FLAGS:
|
||||||
|
-h Show this help
|
||||||
|
-v Show current version number
|
||||||
|
-f Explicitly interpret stdin as filename
|
||||||
|
-c Pretty color output
|
||||||
|
-u Shorten URL
|
||||||
|
-s server_address Use alternative pastebin server address
|
||||||
|
-e bin_extension Specify a binary file extension used in the upload
|
||||||
|
END
|
||||||
|
}
|
||||||
|
|
||||||
|
show_usage() {
|
||||||
|
cat > /dev/stdout << END
|
||||||
|
usage: pb [-hfvcux] [-s server_address] filename
|
||||||
|
END
|
||||||
|
}
|
||||||
|
|
||||||
|
# helper for program exit, supports error codes and messages
|
||||||
|
die () {
|
||||||
|
msg="$1"
|
||||||
|
code="$2"
|
||||||
|
# exit code defaults to 1
|
||||||
|
if printf "%s" "''${code}" | grep -q '^[0-9]+$'; then
|
||||||
|
code=1
|
||||||
|
fi
|
||||||
|
# output message to stdout or stderr based on code
|
||||||
|
if [ -n "''${msg}" ]; then
|
||||||
|
if [ "''${code}" -eq 0 ]; then
|
||||||
|
printf "%s\\n" "''${msg}"
|
||||||
|
else
|
||||||
|
printf "%s%s%s\\n" "$ERROR" "''${msg}" "$RESET" >&2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
exit "''${code}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# attempt to parse options or die
|
||||||
|
if ! parsed=$(getopt ''${flag_options} "$@"); then
|
||||||
|
printf "pb: unknown option\\n"
|
||||||
|
show_usage
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# handle options
|
||||||
|
eval set -- "''${parsed}"
|
||||||
|
while true; do
|
||||||
|
case "$1" in
|
||||||
|
-h|?)
|
||||||
|
flag_help=1
|
||||||
|
;;
|
||||||
|
-v)
|
||||||
|
flag_version=1
|
||||||
|
;;
|
||||||
|
-c)
|
||||||
|
flag_colors=1
|
||||||
|
;;
|
||||||
|
-f)
|
||||||
|
flag_file=1
|
||||||
|
;;
|
||||||
|
-e)
|
||||||
|
shift
|
||||||
|
flag_ext=1
|
||||||
|
EXT="$1"
|
||||||
|
;;
|
||||||
|
-s)
|
||||||
|
shift
|
||||||
|
ENDPOINT="$1"
|
||||||
|
;;
|
||||||
|
-u)
|
||||||
|
flag_url=1
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
die "Internal error: $1" 3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# display current version
|
||||||
|
if [ ''${flag_version} -gt 0 ]; then
|
||||||
|
printf "%s\\n" "''${version}"
|
||||||
|
die "" 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# display help
|
||||||
|
if [ ''${flag_help} -gt 0 ]; then
|
||||||
|
show_help
|
||||||
|
die "" 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# is not interactive shell, use stdin
|
||||||
|
if [ -t 0 ]; then
|
||||||
|
flag_file=1
|
||||||
|
else
|
||||||
|
if [ ''${flag_ext} -gt 0 ]; then
|
||||||
|
# short-circuit stdin access to ensure binary data is transferred to curl
|
||||||
|
curl -sF"file=@-;filename=null.''${EXT}" "''${ENDPOINT}" < /dev/stdin
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
data="$(cat < /dev/stdin )"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# if data variable is empty (not a pipe) use params as fallback
|
||||||
|
if [ -z "$data" ]; then
|
||||||
|
data="$*"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
if [ ''${flag_colors} -gt 0 ]; then
|
||||||
|
SUCCESS=$(tput setaf 190)
|
||||||
|
ERROR=$(tput setaf 196)
|
||||||
|
RESET=$(tput sgr0)
|
||||||
|
else
|
||||||
|
SUCCESS=""
|
||||||
|
ERROR=""
|
||||||
|
RESET=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# URL shortening reference
|
||||||
|
|
||||||
|
# If URL mode detected, process URL shortener and end processing without
|
||||||
|
# checking for a file to upload to the pastebin
|
||||||
|
if [ ''${flag_url} -gt 0 ]; then
|
||||||
|
|
||||||
|
if [ -z "''${data}" ]; then
|
||||||
|
# if no data
|
||||||
|
# print error message
|
||||||
|
printf "%sProvide URL to shorten%s\\n" "$ERROR" "$RESET"
|
||||||
|
else
|
||||||
|
# shorten URL and print results
|
||||||
|
result=$(curl -sF"shorten=''${data}" "''${ENDPOINT}")
|
||||||
|
printf "%s%s%s\\n" "$SUCCESS" "$result" "$RESET"
|
||||||
|
fi
|
||||||
|
die "" 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ''${flag_file} -gt 0 ]; then
|
||||||
|
# file mode
|
||||||
|
if [ -z "''${data}" ]; then
|
||||||
|
# if no data
|
||||||
|
# print error message
|
||||||
|
printf "%sProvide data to upload%s\\n" "$ERROR" "$RESET"
|
||||||
|
elif [ ! -f "''${data}" ]; then
|
||||||
|
# file not found with name provided
|
||||||
|
# print error messagse
|
||||||
|
printf "%s%s%s\\tFile not found.%s\\n" "$RESET" "''${data}" "$ERROR" "$RESET"
|
||||||
|
# attempt to split data string (multi-line?) and upload each string as file
|
||||||
|
for f in ''${data}; do
|
||||||
|
# if there's nothing to parse, skip this loop
|
||||||
|
if [ "$f" = "$data" ]; then
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
# check if file exists
|
||||||
|
if [ -f "''${f}" ]; then
|
||||||
|
if [ ''${flag_ext} -gt 0 ]; then
|
||||||
|
# send file to endpoint masked with new extension
|
||||||
|
result=$(curl -sF"file=@''${f};filename=null.''${EXT}" "''${ENDPOINT}")
|
||||||
|
else
|
||||||
|
# send file to endpoint
|
||||||
|
result=$(curl -sF"file=@''${f}" "''${ENDPOINT}")
|
||||||
|
fi
|
||||||
|
printf "%s%s%s\\n" "$SUCCESS" "$result" "$RESET"
|
||||||
|
else
|
||||||
|
# print error message
|
||||||
|
printf "%sFile not found.%s\\n" "$ERROR" "$RESET"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
# data available in file
|
||||||
|
# send file to endpoint
|
||||||
|
result=$(curl -sF"file=@''${data}" "''${ENDPOINT}")
|
||||||
|
printf "%s%s%s\\n" "$SUCCESS" "$result" "$RESET"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# non-file mode
|
||||||
|
if [ -z "''${data}" ]; then
|
||||||
|
# if no data
|
||||||
|
# print error message
|
||||||
|
printf "%sNo data found for upload. Please try again.%s\\n" "$ERROR" "$RESET"
|
||||||
|
else
|
||||||
|
# data available
|
||||||
|
# send data to endpoint
|
||||||
|
result=$(printf "%s" "''${data}" | curl -sF"file=@-;filename=null.txt" "''${ENDPOINT}")
|
||||||
|
printf "%s%s%s\\n" "$SUCCESS" "$result" "$RESET"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ pastebin ];
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user