Commit | Line | Data |
---|---|---|
21c4e167 H |
1 | #!/bin/bash |
2 | #BANNER####################################### | |
3 | echo -n ' | |
4 | ____ ____ __ _ _ _ __ __ _ | |
5 | (__ )( __)( ( \( \/ ) / _\ ( ( \ | |
6 | / _/ ) _) / // \/ \/ \/ / | |
7 | (____)(____)\_)__)\_)(_/\_/\_/\_)__) v1.5 | |
8 | ||
9 | Zenity based frontend for pacman | |
10 | <~Harvie (http://blog.harvie.cz) | |
11 | 2oo9 | |
12 | ||
13 | '; | |
14 | ||
15 | #HELP/FEATURES################################ | |
16 | ||
17 | if [ "$1" == '--help' ]; then | |
18 | cat << END | |
19 | HELP/FEATURES: | |
20 | - zenman --help prints this help | |
21 | - when zenman started, kills last zenman runned by this user | |
22 | - you can kill zenman by zenman --stop (click on tray icon or wait after this) | |
23 | - last pid is stored in ~/.config/zenman/zenman.pid | |
24 | - shows splashscreen (can be disabled...) | |
25 | - shows tray icon for each state (on mouse over shows state) | |
26 | - system is up to date | |
27 | - refreshing pacman database | |
28 | - updates available | |
29 | - shows notification when updates available and listing them | |
30 | - clicking on icon will begin upgrade in new xterm | |
31 | - this is disabled only when refreshing | |
32 | - if pacman db is locked it will be automaticaly unlocked | |
33 | - only if there is any pacman related process running | |
34 | - if there is some pacman related operation, error message appears | |
35 | - auto refreshing of pacman db is disabled (somebody will want to use cron) | |
36 | - all settings are hardcoded to zenman (/usr/bin/zenman) | |
37 | - all settings can be overrided | |
38 | - system wide: /etc/zenman.conf | |
39 | - single user only: ~/.config/zenman/zenman.conf | |
40 | - you can also write your own translation to this files | |
41 | ||
42 | TODO: | |
43 | ( Don't shy and get involved! ;o) | |
44 | - Bugtracking/Bugfixing | |
45 | - Port to another package managers | |
46 | - apt-zen (apt-get) | |
47 | - zenmerge (emerge) | |
48 | - ipkg-zen (ipkg) | |
49 | - etc... | |
50 | - Localization to your native language | |
51 | END | |
52 | exit; | |
53 | fi; | |
54 | ||
55 | #SETTINGS##################################### | |
56 | zenman_caption='ZenMan'; | |
57 | zenman_interval=$[10*60]; | |
58 | zenman_splash=true; | |
59 | zenman_autorefresh=false; | |
60 | zenman_configdir=~/.config/zenman; | |
61 | zenman_pid="$zenman_configdir/zenman.pid"; | |
62 | zenman_true_ico='/usr/share/icons/gnome/scalable/status/software-update-urgent.svg'; #software-update-available.svg | |
63 | zenman_false_ico='/usr/share/icons/gnome/scalable/emotes/face-cool.svg'; | |
64 | zenman_refresh_ico='/usr/share/icons/gnome/scalable/actions/view-refresh.svg'; | |
65 | ||
66 | gksu='gksu'; #gksu/gksudo/... | |
67 | pacman='/usr/bin/pacman'; #want to use pacman-color, yaourt or powerpill instead? | |
68 | xterm='xterm'; #xterm/... | |
69 | pacman_refresh='-Syuw'; # -Sy ? | |
70 | pacman_upgrade='-Syu'; # -Syuf ? | |
71 | pacman_check='-Qu'; | |
72 | pacman_lock='/var/lib/pacman/db.lck'; #file to delete, when pacman locked (only if not running) | |
73 | ||
74 | zenman_true='New package(s) found! ;-)\n\nPacman output follows:\n'; | |
75 | zenman_false='No packages to update. ;-('; | |
76 | zenman_refreshing='Refreshing pacman database. ;-) Please wait...'; | |
77 | zenman_upgrade="[*] ZenMan will now execute full system upgrade! ;-)\n'$pacman' '$pacman_upgrade'\n\n"; | |
78 | zenman_close='[*] Press [ENTER] to close window...'; | |
79 | zenman_config='[*] Loading configuration from: '; | |
80 | zenman_done='[DONE]'; | |
81 | ||
82 | zenman_locked="ZenMan can't execute system upgrade! ;-( | |
83 | Please stop all pacman related applications and try again."; | |
84 | ||
85 | zenman_start="ZenMan started! ;-) | |
86 | by: Harvie 2oo9 | |
87 | For more informations please visit: | |
88 | http://blog.harvie.cz/"; | |
89 | ||
90 | mkdir -p "$zenman_configdir" | |
91 | touch "$zenman_configdir/zenman.conf" | |
92 | #read configuration files (can contain localization also)... | |
93 | for i in\ | |
94 | '/etc/zenman.conf'\ | |
95 | "$zenman_configdir/zenman.conf"\ | |
96 | ; do | |
97 | echo "$zenman_config" "$i"; | |
98 | source "$i" >/dev/null 2>&1; | |
99 | done; | |
100 | ||
101 | #fallback icons | |
102 | if [ ! -e "$zenman_true_ico" ]; then zenman_true_ico='warning'; fi; | |
103 | if [ ! -e "$zenman_false_ico" ]; then zenman_false_ico='info'; fi; | |
104 | if [ ! -e "$zenman_refresh_ico" ]; then zenman_false_ico='question'; fi; | |
105 | ||
106 | ||
107 | #CODE######################################### | |
108 | #pid | |
109 | if [ -e "$zenman_pid" ]; then | |
110 | kill $(cat "$zenman_pid") >/dev/null 2>&1; | |
111 | kill -KILL $(cat "$zenman_pid") >/dev/null 2>&1; | |
112 | fi; | |
113 | if [ "$1" == '--stop' ]; then | |
114 | echo '[!] exit'; | |
115 | exit; | |
116 | fi; | |
117 | echo "$$" > "$zenman_pid"; | |
118 | ||
119 | #splash | |
120 | echo '[i]' "$0" '--stop' to kill zenman | |
121 | echo '[i]' "$0" '--help' to show help | |
122 | if "$zenman_splash"; then | |
123 | notify-send -i info --expire-time=5000 "$zenman_caption" "$zenman_start"; | |
124 | fi; | |
125 | ||
126 | #unlocker | |
127 | zenman_force_unlock() { | |
128 | if [ -e "$pacman_lock" ]; then #check if db locked... | |
129 | ps -eo comm | grep -i '^\(pacman\|yaourt\|powerpill\|gtkpacman\|pacupdate\|kpacupdate\|guzuta\|YAPG\|Shaman\)' >/dev/null; #check if pacman is running... | |
130 | if [ $? != 0 ]; then | |
131 | "$gksu" "rm -rf '$pacman_lock'"; | |
132 | if [ $? != 0 ]; then | |
133 | return 1; #gksu failed ;-( | |
134 | else | |
135 | return 0; #unlocked!!! | |
136 | fi; | |
137 | else | |
138 | return 1; #pacman is running ;-( | |
139 | fi; | |
140 | else | |
141 | return 0; #no locked!!! | |
142 | fi; | |
143 | } | |
144 | ||
145 | while true; do | |
146 | #uncomment next line if not running -Syuw from cron (and you better set higher zenman_interval) | |
147 | if "$zenman_autorefresh"; then | |
148 | echo -ne "$zenman_refreshing "; | |
149 | zenity --notification --text "$zenman_refreshing" --window-icon="$zenman_refresh_ico" & | |
150 | zenman_force_unlock; | |
151 | "$gksu" "'$pacman' $pacman_refresh --noconfirm" >/dev/null 2>&1 | |
152 | kill $! >/dev/null 2>&1; | |
153 | kill -KILL $! >/dev/null 2>&1; | |
154 | echo "$zenman_done"; | |
155 | fi; | |
156 | #check for new packages | |
157 | pacman_new_packages=$("$pacman" $pacman_check --noconfirm 2>&1); | |
158 | if [ $? == 0 ]; then | |
159 | #new packages found | |
160 | zenman_block='read'; | |
161 | notify-send -i info "$zenman_caption" "$(echo -e "$zenman_true" "$pacman_new_packages")" | |
162 | zenity --notification --timeout="$zenman_interval" --text "$(echo -e "$zenman_true" "$pacman_new_packages")" --window-icon="$zenman_true_ico"; | |
163 | else | |
164 | #no packages to update | |
165 | zenman_block=''; | |
166 | zenity --notification --timeout="$zenman_interval" --text "$zenman_false" --window-icon="$zenman_false_ico"; | |
167 | fi; | |
168 | ||
169 | #run full system upgrade if notification icon clicked | |
170 | if [ $? == 0 ]; then | |
171 | #try to unlock pacman db if locked and pacman is not running | |
172 | zenman_force_unlock; | |
173 | if [ $? == 0 ]; then | |
174 | #update if unlocked | |
175 | "$xterm" \ | |
176 | -T "$zenman_caption"\ | |
177 | -e "echo -ne '${zenman_upgrade}'; '$gksu' '\"${pacman}\" $pacman_upgrade'; echo -e '\n${zenman_close}'; $zenman_block"; | |
178 | zenman_force_unlock; | |
179 | else | |
180 | #show error if locked | |
181 | notify-send -i error "$zenman_caption" "$zenman_locked"; | |
182 | fi; | |
183 | fi; | |
184 | done; |