Commit b79d33b
Changed files (4)
.wraith
theme
.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("&", "&", desc)
+ gsub("<", "<", desc)
+ gsub(">", ">", 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;