]> glassweightruler.freedombox.rocks Git - xdg-ninja.git/blobdiff - xdg-ninja.sh
Update nss & python; fix intellij filename
[xdg-ninja.git] / xdg-ninja.sh
index c7b4ab21d9fcf313a4ad4030a8547c6f70c244dc..6c8a2f200daff1e819659bd4fc10206c8d2a6522 100755 (executable)
@@ -1,5 +1,4 @@
 #!/usr/bin/env sh
 #!/usr/bin/env sh
-# shellcheck disable=SC2016
 
 USE_GLOW=false
 USE_BAT=false
 
 USE_GLOW=false
 USE_BAT=false
@@ -7,10 +6,12 @@ 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
     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"
 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 or bat for easier reading & copy-paste.\n"
+    printf "Install glow for easier reading & copy-paste.\n"
 fi
 
 unalias -a
 fi
 
 unalias -a
@@ -18,19 +19,19 @@ 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
 
 """
 
 
 """
 
@@ -49,28 +50,28 @@ for i in "$@"; do
 done
 
 if [ -z "${XDG_DATA_HOME}" ]; then
 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
 
 if ! command -v jq >/dev/null 2>/dev/null; then
 fi
 
 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."
+    printf "jq is needed to run this script, but it wasn't found. Please install it to be able to use this script.\n"
     exit
 fi
 
     exit
 fi
 
@@ -86,18 +87,21 @@ apply_shell_expansion() {
 }
 
 # Returns 0 if the path doesn't lead anywhere
 }
 
 # Returns 0 if the path doesn't lead anywhere
-# Return 1 if the path points to a file, 2 if it points to a directory
-check_not_exists_file() {
+# Returns 1 if the path leads to something
+check_if_file_exists() {
     FILE_PATH=$(apply_shell_expansion "$1")
     FILE_PATH=$(apply_shell_expansion "$1")
-    if [ -f "$FILE_PATH" ]; then
+    if [ -e "$FILE_PATH" ]; then
         return 1
         return 1
-    elif [ -d "$FILE_PATH" ]; then
-        return 2
     else
         return 0
     fi
 }
 
     else
         return 0
     fi
 }
 
+decode_string() {
+    printf "%s\n" "$1" | sed -e 's/\\n/\
+/g' -e 's/\\\"/\"/g' # Replace \n with literal newline and \" with "
+}
+
 # Function to handle the formatting of output
 log() {
     MODE="$1"
 # Function to handle the formatting of output
 log() {
     MODE="$1"
@@ -108,29 +112,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 -
+            decode_string "$HELP" | glow -
         elif $USE_BAT; then
         elif $USE_BAT; then
-            printf "%s" "$HELP" | bat -pp -f --language markdown
+            decode_string "$HELP" | bat -pp --decorations=always --color=always --language markdown
         else
         else
-            printf "%s" "$HELP"
+            decode_string "$HELP"
         fi
         ;;
 
         fi
         ;;
 
@@ -139,14 +143,12 @@ log() {
 
 # Checks that the given file does not exist, otherwise outputs help
 check_file() {
 
 # Checks that the given file does not exist, otherwise outputs help
 check_file() {
-    INPUT="$1"
-    NAME="$2"
-
-    FILENAME=$(printf "%s" "$INPUT" | jq -r .path)
-    MOVABLE=$(printf "%s" "$INPUT" | jq -r .movable)
-    HELP=$(printf "%s" "$INPUT" | jq -r .help)
+    NAME="$1"
+    FILENAME="$2"
+    MOVABLE="$3"
+    HELP="$4"
 
 
-    check_not_exists_file "$FILENAME"
+    check_if_file_exists "$FILENAME"
 
     case $? in
 
 
     case $? in
 
@@ -154,7 +156,7 @@ check_file() {
         log SUCS "$NAME" "$FILENAME" "$HELP"
         ;;
 
         log SUCS "$NAME" "$FILENAME" "$HELP"
         ;;
 
-    1 | 2)
+    1)
         if "$MOVABLE"; then
             log ERR "$NAME" "$FILENAME" "$HELP"
         else
         if "$MOVABLE"; then
             log ERR "$NAME" "$FILENAME" "$HELP"
         else
@@ -170,30 +172,25 @@ check_file() {
     esac
 }
 
     esac
 }
 
-# Reads a file from programs/, calls check_file on each file specified for the program
-check_program() {
-    INPUT=$1
-
-    NAME=$(printf "%s" "$INPUT" | jq -r .name)
-
-    while IFS= read -r file; do
-        check_file "$file" "$NAME"
+# Reads files from programs/, calls check_file on each file specified for each program
+do_check_programs() {
+    while IFS="
+" read -r name; read -r filename; read -r movable; read -r help; do
+        check_file "$name" "$filename" "$movable" "$help"
     done <<EOF
     done <<EOF
-$(echo "$INPUT" | jq -rc '.files[]')
+$(jq 'inputs as $input | $input.files[] as $file | $input.name, $file.path, $file.movable, $file.help' "$(dirname "$0")"/programs/* | sed -e 's/^"//' -e 's/"$//')
 EOF
 EOF
+# sed is to trim quotes
 }
 
 }
 
-# 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"
+check_programs() {
+    printf "\033[1;3mStarting to check your \033[1;36m\$HOME.\033[1;0m\n"
     printf "\n"
     printf "\n"
-    for prog_filename in "${0%/*}"/programs/*; do
-        check_program "$(cat "$prog_filename")"
-    done
-    printf "\e[1;3mDone checking your \e[1;36m\$HOME.\e[1;0m\n"
+    do_check_programs
+    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"
 }
 
-enumerate_programs
+check_programs