about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--home/profiles/base-darwin/default.nix3
-rwxr-xr-xhome/profiles/base-darwin/scripts/0x0.nix87
2 files changed, 89 insertions, 1 deletions
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}<file>''${STYLE_RESET}\n"
+  echo -e "  Upload from an URL (the file won't be fetched locally):"
+  echo -e "      ''${STYLE_COMMAND}''${base} ''${STYLE_ARG}<url>''${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
+''