From 4afda11dfe3897cd452a3a392906837da388a796 Mon Sep 17 00:00:00 2001 From: sefidel Date: Sun, 18 Sep 2022 15:04:53 +0900 Subject: feat(home/base): add 0x0 script --- home/profiles/base-darwin/default.nix | 3 +- home/profiles/base-darwin/scripts/0x0.nix | 87 +++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100755 home/profiles/base-darwin/scripts/0x0.nix (limited to 'home/profiles/base-darwin') diff --git a/home/profiles/base-darwin/default.nix b/home/profiles/base-darwin/default.nix index 63454bd..53421bf 100644 --- a/home/profiles/base-darwin/default.nix +++ b/home/profiles/base-darwin/default.nix @@ -46,8 +46,9 @@ in (pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default)) pkgs.go pkgs.gcc - ]; + (pkgs.writeShellScriptBin "0x0" (import ./scripts/0x0.nix)) + ]; programs = { direnv.enable = true; diff --git a/home/profiles/base-darwin/scripts/0x0.nix b/home/profiles/base-darwin/scripts/0x0.nix new file mode 100755 index 0000000..2d7ef51 --- /dev/null +++ b/home/profiles/base-darwin/scripts/0x0.nix @@ -0,0 +1,87 @@ +'' +# Copyright © 2018-2019 Hugo Locurcio and contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +set -euo pipefail +IFS=$'\n\t' + +if [[ -t 1 ]]; then + # stdout is a TTY, enable colors + STYLE_COMMAND="\\e[0;97m" + STYLE_ARG="\\e[0;96m" + STYLE_ERROR="\\e[91m" + STYLE_BOLD="\\e[1m" + STYLE_NORMAL="\\e[22m" + STYLE_RESET="\\e[0m" +else + # stdout is not a TTY, disable colors + STYLE_COMMAND="" + STYLE_ARG="" + STYLE_ERROR="" + STYLE_BOLD="" + STYLE_NORMAL="" + STYLE_RESET="" +fi + +# Prints an error message to stderr +print_error() { + echo -e "''${STYLE_ERROR}''${STYLE_BOLD}Error:''${STYLE_NORMAL} $1''${STYLE_RESET}" >&2 + exit 1 +} + +print_help() { + base="''${0##*/}" + echo -e "''${STYLE_BOLD}0x0, a wrapper script for https://0x0.st/''${STYLE_RESET}\n" + echo -e " Upload a file:" + echo -e " ''${STYLE_COMMAND}''${base} ''${STYLE_ARG}''${STYLE_RESET}\n" + echo -e " Upload from an URL (the file won't be fetched locally):" + echo -e " ''${STYLE_COMMAND}''${base} ''${STYLE_ARG}''${STYLE_RESET}\n" + echo -e " Upload from standard input:" + echo -e " ''${STYLE_COMMAND}''${base} ''${STYLE_ARG}-''${STYLE_RESET}\n" + echo -e "The uploaded file's URL is printed to standard output when the upload is completed." +} + +case "''${1:-}" in + # Exit with code 0 only if help was explicitly requested + -h|--help) + print_help + exit 0 + ;; + ''') + print_help + exit 1 + ;; +esac + +if [[ -f "$1" || "$1" = '-' ]]; then + # Upload from file or stdin + curl -F "file=@$1" https://0x0.st + +elif [[ "$1" =~ ^https?://.* ]]; then + # Upload from URL + curl -F "url=$1" https://0x0.st + +elif [[ -d "$1" ]]; then + print_error "\"$1\" is a directory." + +else + print_error "\"$1\": no such file." +fi +'' -- cgit 1.4.1