Commit b79d33b

Ansari <ping@ansari.wtf>
2025-12-23 23:07:02
Enhance arch-spring-cleanup script with sudo check; add mimetypes configuration script; improve packages script for better package management and user interaction; update rofi theme
1 parent 696ad91
.wraith/scripts/arch-spring-cleanup.sh
@@ -129,10 +129,15 @@ sub_text() {
 
 show_header
 
+# get sudo upfront
+if ! sudo -v; then
+  gum_safe style --foreground "$MOCHA_RED" "โŒ Error: Sudo authentication failed."
+  exit 1
+fi
+
 # --- Step 1 ---
 section_title "1. System Upgrade"
 if gum_safe confirm "Upgrade system packages?"; then
-  sudo -v
   $AUR_HELPER -Syu
 else
   sub_text "Skipped upgrade."
@@ -159,7 +164,7 @@ else
   echo "$ORPHANS" | gum_safe format
 
   if gum_safe confirm "Remove orphaned packages?"; then
-    run_task "Removing orphaned packages" "sudo $AUR_HELPER -Rns $ORPHANS"
+    run_task "Removing orphaned packages" "sudo pacman -Rns $ORPHANS"
   else
     sub_text "Skipped orphan removal."
   fi
@@ -201,6 +206,5 @@ fi
 
 echo ""
 gum_safe style --padding "1" "โœจ Maintenance Complete."
-gum_safe style --foreground "$MOCHA_GREEN" --bold "๐ŸŽ‰ All tasks completed! Review the log at: $LOG_FILE"
-sub_text "Press any key to exit..."
-read -n 1
\ No newline at end of file
+gum_safe style --foreground "$MOCHA_GREEN" --bold "Review the log at: $LOG_FILE"
+gum spin --spinner "moon" --title "Press any key to close..." -- bash -c 'read -n 1 -s'
\ No newline at end of file
.wraith/scripts/mimetypes.sh
@@ -0,0 +1,53 @@
+update-desktop-database ~/.local/share/applications
+
+# Open all images with imv
+xdg-mime default imv.desktop image/png
+xdg-mime default imv.desktop image/jpeg
+xdg-mime default imv.desktop image/gif
+xdg-mime default imv.desktop image/webp
+xdg-mime default imv.desktop image/bmp
+xdg-mime default imv.desktop image/tiff
+
+# Open PDFs with the Document Viewer
+xdg-mime default org.gnome.Evince.desktop application/pdf
+
+# Use zen as the default browser
+xdg-settings set default-web-browser zen.desktop
+xdg-mime default zen.desktop x-scheme-handler/http
+xdg-mime default zen.desktop x-scheme-handler/https
+
+# Open video files with mpv
+xdg-mime default mpv.desktop video/mp4
+xdg-mime default mpv.desktop video/x-msvideo
+xdg-mime default mpv.desktop video/x-matroska
+xdg-mime default mpv.desktop video/x-flv
+xdg-mime default mpv.desktop video/x-ms-wmv
+xdg-mime default mpv.desktop video/mpeg
+xdg-mime default mpv.desktop video/ogg
+xdg-mime default mpv.desktop video/webm
+xdg-mime default mpv.desktop video/quicktime
+xdg-mime default mpv.desktop video/3gpp
+xdg-mime default mpv.desktop video/3gpp2
+xdg-mime default mpv.desktop video/x-ms-asf
+xdg-mime default mpv.desktop video/x-ogm+ogg
+xdg-mime default mpv.desktop video/x-theora+ogg
+xdg-mime default mpv.desktop application/ogg
+
+# Open text files with nvim
+xdg-mime default nvim.desktop text/plain
+xdg-mime default nvim.desktop text/english
+xdg-mime default nvim.desktop text/x-makefile
+xdg-mime default nvim.desktop text/x-c++hdr
+xdg-mime default nvim.desktop text/x-c++src
+xdg-mime default nvim.desktop text/x-chdr
+xdg-mime default nvim.desktop text/x-csrc
+xdg-mime default nvim.desktop text/x-java
+xdg-mime default nvim.desktop text/x-moc
+xdg-mime default nvim.desktop text/x-pascal
+xdg-mime default nvim.desktop text/x-tcl
+xdg-mime default nvim.desktop text/x-tex
+xdg-mime default nvim.desktop application/x-shellscript
+xdg-mime default nvim.desktop text/x-c
+xdg-mime default nvim.desktop text/x-c++
+xdg-mime default nvim.desktop application/xml
+xdg-mime default nvim.desktop text/xml
\ No newline at end of file
.wraith/scripts/packages.sh
@@ -17,22 +17,56 @@ packages_total() {
 
 
 packages_installed_explicitly() {
-    out=$''
-    while IFS= read -r pkg; do
-        info=$(pacman -Qi -- "$pkg")
-        name=$(printf "%s" "$info" | awk -F': ' '/^Name/{print $2}')
-        ver=$(printf "%s" "$info" | awk -F': ' '/^Version/{print $2}')
-        desc=$(printf "%s" "$info" | awk -F': ' '/^Description/{print $2}')
+    out=$(pacman -Qi - < <(
+            pacman -Qiqe | awk -F': ' '/^Name/ {name=$2}/^Install Date/ { 
+                cmd = "date -d \"" $2 "\" +\"%Y-%m-%d %H:%M:%S\""
+                cmd | getline iso
+                close(cmd)
+                print iso, name
+            }' | sort -r | awk '{print $NF}'
+        ) | awk -v RS= '
+            {
+                # Extract fields using Regex from the full text block
+                match($0, /Name[[:space:]]*:[[:space:]]*([^\n]*)/, n)
+                match($0, /Version[[:space:]]*:[[:space:]]*([^\n]*)/, v)
+                match($0, /Description[[:space:]]*:[[:space:]]*([^\n]*)/, d)
+                
+                name = n[1]
+                ver = v[1]
+                desc = d[1]
 
-        short_desc=$(printf "%.80s" "$desc")
-        [[ ${#desc} -gt 80 ]] && short_desc="${short_desc}โ€ฆ"
+                # Truncate Description
+                if (length(desc) > 80) desc = substr(desc, 1, 80) "โ€ฆ"
+                
+                # Escape Ampersands (Critical for Rofi Pango markup)
+                gsub("&", "&amp;", desc)
+                gsub("<", "&lt;", desc)
+                gsub(">", "&gt;", desc)
 
-        out+=$'๐Ÿ“ฆ  '"<b>$name</b> ($ver)"$'\n'"<span size=\"small\">$short_desc</span>"$'\x0f'
+                # Output formatted string
+                printf "๐Ÿ“ฆ <b>%s</b> (%s)\n<span size=\"small\">%s</span>\x0f", name, ver, desc
+            }
+        ')
+    selected_package_raw=$(printf "%b" "$out" | rofi -dmenu -sep $'\x0f' -eh 2 -i -p "Packages :" -no-show-icons -markup-rows -no-cycle -theme-str 'listview {lines:5;}')
 
-    done < <(pacman -Qiqe | awk -F': ' '/^Name/ {name=$2}/^Install Date/ {print $2 " " name}' | sort -r | awk '{print $NF}')
-    printf "%b" "$out" | rofi -dmenu -sep $'\x0f' -eh 2 -i -p "Packages :" -no-show-icons -markup-rows -no-cycle
-}
+    if [[ -n "$selected_package_raw" ]]; then
+        pkg_name=$(echo "$selected_package_raw" | sed -E 's/.*<b>([^<]+)<\/b>.*/\1/' | head -n 1)
+
+        action=$(printf "Info\nUninstall\nCancel" | rofi -dmenu -i -theme $HOME/.wraith/theme/scripts.rofi.rasi -theme-str 'listview {lines:3;}')
+        case "$action" in
+            "Info")
+                smart-launch --tui "Package Info $pkg_name" "bash -c 'pacman -Qi $pkg_name; gum spin --spinner moon --title \"Press any key to close...\" -- bash -c \"read -n 1 -s\"'"
+                ;;
+            "Uninstall")
+                smart-launch --tui "Uninstall Package $pkg_name" "bash -c 'sudo pacman -Rns $pkg_name --noconfirm;  gum spin --spinner moon --title \"Press any key to close...\" -- bash -c \"read -n 1 -s\"'"
+                ;;
+            *)
+                exit 0
+                ;;
+        esac
+    fi
 
+}
 
 case "$1" in
     "details")
.wraith/theme/scripts.rofi.rasi
@@ -1,8 +1,8 @@
 @import "wraith-theme.rasi"
 
 mainbox {
-    padding:    0px;
-    margin: 0px;
+    padding: 10px;
+    margin: 10px;
 }
 
 inputbar {
@@ -10,11 +10,6 @@ inputbar {
     padding:0px;
 }
 
-listview {
-    margin:0px;
-    lines:5;
-}
-
 element {
     padding:        10px 0px;
     spacing:        0px;