]> glassweightruler.freedombox.rocks Git - xdg-ninja.git/blobdiff - xdg-ninja.sh
Merge pull request #29 from diogo464/dirname_fix
[xdg-ninja.git] / xdg-ninja.sh
index 5a51bc62afbf2aaf4dcf568e01d446aaf59e612d..b324a72e0e4d35ed8d36a3167aacf8438dfdf79c 100755 (executable)
@@ -1,11 +1,18 @@
-#!/usr/bin/env bash
-
-USE_GLOW=true
-if ! command -v glow &>/dev/null; then
-    printf "Glow not found, markdown rendering not available."
-    printf "Output will be raw markdown and might look weird."
-    printf "Install glow for easier reading & copy-paste."
-    USE_GLOW=false
+#!/usr/bin/env sh
+# shellcheck disable=SC2016
+
+USE_GLOW=false
+USE_BAT=false
+if command -v glow >/dev/null 2>/dev/null; then
+    USE_GLOW=true
+elif command -v bat >/dev/null 2>/dev/null; then
+    USE_BAT=true
+    printf "Glow not found, markdown rendering will be done by bat.\n"
+    printf "Install glow for easier reading & copy-paste.\n"
+else
+    printf "Glow or bat not found, markdown rendering not available.\n"
+    printf "Output will be raw markdown and might look weird.\n"
+    printf "Install glow for easier reading & copy-paste.\n"
 fi
 
 unalias -a
 fi
 
 unalias -a
@@ -13,58 +20,58 @@ unalias -a
 HELPSTRING="""\
 
 
 HELPSTRING="""\
 
 
-    \e[37;45;1mxdg-ninja\e[0m
+    \033[37;45;1mxdg-ninja\033[0m
 
 
-    \e[1;3mCheck your \$HOME for unwanted files.\e[1;0m
+    \033[1;3mCheck your \$HOME for unwanted files.\033[1;0m
 
     ────────────────────────────────────
 
 
     ────────────────────────────────────
 
-    \e[3m--help\e[0m              \e[1mThis help menu\e[0m
-    \e[3m-h\e[0m
+    \033[3m--help\033[0m              \033[1mThis help menu\033[0m
+    \033[3m-h\033[0m
 
 
-    \e[3m--no-skip-ok\e[0m        \e[1mDisplay messages for all files checked (verbose)\e[0m
-    \e[3m-v\e[0m
+    \033[3m--no-skip-ok\033[0m        \033[1mDisplay messages for all files checked (verbose)\033[0m
+    \033[3m-v\033[0m
 
 
-    \e[3m--skip-ok\e[0m           \e[1mDon't display anything for files that do not exist (default)\e[0m
+    \033[3m--skip-ok\033[0m           \033[1mDon't display anything for files that do not exist (default)\033[0m
 
 """
 
 SKIP_OK=true
 for i in "$@"; do
 
 """
 
 SKIP_OK=true
 for i in "$@"; do
-    if [ "$i" == "--help" ] || [ "$i" == "-h" ]; then
+    if [ "$i" = "--help" ] || [ "$i" = "-h" ]; then
         printf "%b" "$HELPSTRING"
         exit
         printf "%b" "$HELPSTRING"
         exit
-    elif [ "$i" == "--skip-ok" ]; then
+    elif [ "$i" = "--skip-ok" ]; then
         SKIP_OK=true
         SKIP_OK=true
-    elif [ "$i" == "--no-skip-ok" ]; then
+    elif [ "$i" = "--no-skip-ok" ]; then
         SKIP_OK=false
         SKIP_OK=false
-    elif [ "$i" == "-v" ]; then
+    elif [ "$i" = "-v" ]; then
         SKIP_OK=false
     fi
 done
 
 if [ -z "${XDG_DATA_HOME}" ]; then
         SKIP_OK=false
     fi
 done
 
 if [ -z "${XDG_DATA_HOME}" ]; then
-    printf '\e[1;36m%s\e[1;0m\n' "The \$XDG_DATA_HOME environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!"
-    printf '\e[1;36m    ⤷ \e[1mThe recommended value is: \e[1;3m$HOME/.local/share\e[1;0m\n'
+    printf '\033[1;36m%s\033[1;0m\n' "The \$XDG_DATA_HOME environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!"
+    printf '\033[1;36m    ⤷ \033[1mThe recommended value is: \033[1;3m$HOME/.local/share\033[1;0m\n'
 fi
 if [ -z "${XDG_CONFIG_HOME}" ]; then
 fi
 if [ -z "${XDG_CONFIG_HOME}" ]; then
-    printf '\e[1;36m%s\e[1;0m\n' "The \$XDG_CONFIG_HOME environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!"
-    printf '\e[1;36m    ⤷ \e[1mThe recommended value is: \e[1;3m$HOME/.config\e[1;0m\n'
+    printf '\033[1;36m%s\033[1;0m\n' "The \$XDG_CONFIG_HOME environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!"
+    printf '\033[1;36m    ⤷ \033[1mThe recommended value is: \033[1;3m$HOME/.config\033[1;0m\n'
 fi
 if [ -z "${XDG_STATE_HOME}" ]; then
 fi
 if [ -z "${XDG_STATE_HOME}" ]; then
-    printf '\e[1;36m%s\e[1;0m\n' "The \$XDG_STATE_HOME environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!"
-    printf '\e[1;36m    ⤷ \e[1mThe recommended value is: \e[1;3m$HOME/.local/state\e[1;0m\n'
+    printf '\033[1;36m%s\033[1;0m\n' "The \$XDG_STATE_HOME environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!"
+    printf '\033[1;36m    ⤷ \033[1mThe recommended value is: \033[1;3m$HOME/.local/state\033[1;0m\n'
 fi
 if [ -z "${XDG_CACHE_HOME}" ]; then
 fi
 if [ -z "${XDG_CACHE_HOME}" ]; then
-    printf '\e[1;36m%s\e[1;0m\n' "The \$XDG_CACHE_HOME environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!"
-    printf '\e[1;36m    ⤷ \e[1mThe recommended value is: \e[1;3m$HOME/.cache\e[1;0m\n'
+    printf '\033[1;36m%s\033[1;0m\n' "The \$XDG_CACHE_HOME environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!"
+    printf '\033[1;36m    ⤷ \033[1mThe recommended value is: \033[1;3m$HOME/.cache\033[1;0m\n'
 fi
 if [ -z "${XDG_RUNTIME_DIR}" ]; then
 fi
 if [ -z "${XDG_RUNTIME_DIR}" ]; then
-    printf '\e[1;36m%s\e[1;0m\n' "The \$XDG_RUNTIME_DIR environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!"
-    printf '\e[1;36m    ⤷ \e[1mThe recommended value is: \e[1;3m/run/user/$UID\e[1;0m\n'
+    printf '\033[1;36m%s\033[1;0m\n' "The \$XDG_RUNTIME_DIR environment variable is not set, make sure to add it to your shell's configuration before setting any of the other environment variables!"
+    printf '\033[1;36m    ⤷ \033[1mThe recommended value is: \033[1;3m/run/user/$UID\033[1;0m\n'
 fi
 
 fi
 
-if ! command -v jq &>/dev/null; then
+if ! command -v jq >/dev/null 2>/dev/null; then
     printf "jq is needed to run this script, but it wasn't found. Please install it to be able to use this script."
     exit
 fi
     printf "jq is needed to run this script, but it wasn't found. Please install it to be able to use this script."
     exit
 fi
@@ -74,9 +81,9 @@ printf "\n"
 # Function to expand environment variables in string
 # https://stackoverflow.com/a/20316582/11110290
 apply_shell_expansion() {
 # Function to expand environment variables in string
 # https://stackoverflow.com/a/20316582/11110290
 apply_shell_expansion() {
-    declare data="$1"
-    declare delimiter="__apply_shell_expansion_delimiter__"
-    declare command="cat <<$delimiter"$'\n'"$data"$'\n'"$delimiter"
+    data="$1"
+    delimiter="__apply_shell_expansion_delimiter__"
+    command=$(printf "cat <<%s\n%s\n%s" "$delimiter" "$data" "$delimiter")
     eval "$command"
 }
 
     eval "$command"
 }
 
@@ -103,27 +110,29 @@ log() {
     case "$MODE" in
 
     ERR)
     case "$MODE" in
 
     ERR)
-        printf '[\e[1;31m%s\e[1;0m]: \e[1;3m%s\e[1;0m\n' "$NAME" "$FILENAME"
+        printf '[\033[1;31m%s\033[1;0m]: \033[1;3m%s\033[1;0m\n' "$NAME" "$FILENAME"
         ;;
 
     WARN)
         ;;
 
     WARN)
-        printf '[\e[1;33m%s\e[1;0m]: \e[1;3m%s\e[1;0m\n' "$NAME" "$FILENAME"
+        printf '[\033[1;33m%s\033[1;0m]: \033[1;3m%s\033[1;0m\n' "$NAME" "$FILENAME"
         ;;
 
     INFO)
         ;;
 
     INFO)
-        printf '[\e[1;36m%s\e[1;0m]: \e[1;3m%s\e[1;0m\n' "$NAME" "$FILENAME"
+        printf '[\033[1;36m%s\033[1;0m]: \033[1;3m%s\033[1;0m\n' "$NAME" "$FILENAME"
         ;;
 
     SUCS)
         [ "$SKIP_OK" = false ] &&
         ;;
 
     SUCS)
         [ "$SKIP_OK" = false ] &&
-            printf '[\e[1;32m%s\e[1;0m]: \e[1;3m%s\e[1;0m\n' "$NAME" "$FILENAME"
+            printf '[\033[1;32m%s\033[1;0m]: \033[1;3m%s\033[1;0m\n' "$NAME" "$FILENAME"
         ;;
 
     HELP)
         if $USE_GLOW; then
         ;;
 
     HELP)
         if $USE_GLOW; then
-            printf "%s" "$HELP" | glow -
+            printf "%s\n" "$HELP" | glow -
+        elif $USE_BAT; then
+            printf "%s\n" "$HELP" | bat -pp -f --language markdown
         else
         else
-            printf "%s" "$HELP"
+            printf "%s\n" "$HELP"
         fi
         ;;
 
         fi
         ;;
 
@@ -165,25 +174,27 @@ check_file() {
 
 # Reads a file from programs/, calls check_file on each file specified for the program
 check_program() {
 
 # Reads a file from programs/, calls check_file on each file specified for the program
 check_program() {
-    INPUT=$1
+    PROGRAM=$1
 
 
-    NAME=$(printf "%s" "$INPUT" | jq -r .name)
+    NAME=$(jq -r .name "$PROGRAM")
 
     while IFS= read -r file; do
         check_file "$file" "$NAME"
 
     while IFS= read -r file; do
         check_file "$file" "$NAME"
-    done <<<"$(printf "%s" "$INPUT" | jq -rc '.files[]')"
+    done <<EOF
+$(jq -rc '.files[]' "$PROGRAM")
+EOF
 }
 
 # Loops over all files in the programs/ directory and calls check_program
 enumerate_programs() {
 }
 
 # Loops over all files in the programs/ directory and calls check_program
 enumerate_programs() {
-    printf "\e[1;3mStarting to check your \e[1;36m\$HOME.\e[1;0m\n"
+    printf "\033[1;3mStarting to check your \033[1;36m\$HOME.\033[1;0m\n"
     printf "\n"
     printf "\n"
-       for prog_filename in "$(dirname "${BASH_SOURCE[0]}")"/programs/*; do
-        check_program "$(cat "$prog_filename")"
+    for prog_filename in "$(dirname "$0")"/programs/*; do
+        check_program "$prog_filename"
     done
     done
-    printf "\e[1;3mDone checking your \e[1;36m\$HOME.\e[1;0m\n"
+    printf "\033[1;3mDone checking your \033[1;36m\$HOME.\033[1;0m\n"
     printf "\n"
     printf "\n"
-    printf "\e[3mIf you have files in your \e[1;36m\$HOME\e[1;0m that shouldn't be there, but weren't recognised by xdg-ninja, please consider creating a configuration file for it and opening a pull request on github.\e[1;0m\n"
+    printf "\033[3mIf you have files in your \033[1;36m\$HOME\033[1;0m that shouldn't be there, but weren't recognised by xdg-ninja, please consider creating a configuration file for it and opening a pull request on github.\033[1;0m\n"
     printf "\n"
 }
 
     printf "\n"
 }