xbps-check-updates.py
· 1.5 KiB · Python
原始檔案
#!/bin/env python
### Add to ~/.config/waybar/config like so
# "custom/xbps-updates": {
# "format": "{} ",
# "interval": 3600,
# "return-type": "json",
# "exec": "xbps-checkup-updates | jq --unbuffered --compact-output",
# "tooltip": true,
# }
import json
from typing import NamedTuple
## updated with hourly cronjob that contains:
# xbps-install -S
# xbps-checkvers -I > /tmp/xbps_updates_available
## output is formatted like:
# pkg name old_ver new_ver name again? random question mark??
# minizip 1.2.13_1 1.3_1 minizip ?
UPDATE_FILE = "/tmp/xbps_updates_available"
class Update(NamedTuple):
package: str
current_ver: str
new_ver: str
def __str__(self) -> str:
return f"{self.package}: {self.current_ver} -> {self.new_ver}"
def main():
output = {
"text": "",
"alt": "",
"tooltip": "",
"percentage": "",
}
updates = []
# get list of updates from UPDATE_FILE
with open(UPDATE_FILE) as file:
for line in file:
split_line = line.split(" ")
updates.append(Update(split_line[0], split_line[1], split_line[2]))
num_updates = len(updates)
# format updates for waybar
output["text"] = str(num_updates)
if num_updates <= 0:
output["tooltip"] = "Up to date!"
else:
output["tooltip"] = f"Updates available:\n{'\n'.join(str(x) for x in updates)}"
output["alt"] = f"Updates: {num_updates}"
output["percentage"] = "0"
print(json.dumps(output))
if __name__ == "__main__":
main()
1 | #!/bin/env python |
2 | |
3 | ### Add to ~/.config/waybar/config like so |
4 | # "custom/xbps-updates": { |
5 | # "format": "{} ", |
6 | # "interval": 3600, |
7 | # "return-type": "json", |
8 | # "exec": "xbps-checkup-updates | jq --unbuffered --compact-output", |
9 | # "tooltip": true, |
10 | # } |
11 | |
12 | import json |
13 | from typing import NamedTuple |
14 | |
15 | ## updated with hourly cronjob that contains: |
16 | # xbps-install -S |
17 | # xbps-checkvers -I > /tmp/xbps_updates_available |
18 | ## output is formatted like: |
19 | # pkg name old_ver new_ver name again? random question mark?? |
20 | # minizip 1.2.13_1 1.3_1 minizip ? |
21 | UPDATE_FILE = "/tmp/xbps_updates_available" |
22 | |
23 | |
24 | class Update(NamedTuple): |
25 | package: str |
26 | current_ver: str |
27 | new_ver: str |
28 | |
29 | def __str__(self) -> str: |
30 | return f"{self.package}: {self.current_ver} -> {self.new_ver}" |
31 | |
32 | |
33 | def main(): |
34 | output = { |
35 | "text": "", |
36 | "alt": "", |
37 | "tooltip": "", |
38 | "percentage": "", |
39 | } |
40 | updates = [] |
41 | # get list of updates from UPDATE_FILE |
42 | with open(UPDATE_FILE) as file: |
43 | for line in file: |
44 | split_line = line.split(" ") |
45 | updates.append(Update(split_line[0], split_line[1], split_line[2])) |
46 | num_updates = len(updates) |
47 | |
48 | # format updates for waybar |
49 | output["text"] = str(num_updates) |
50 | if num_updates <= 0: |
51 | output["tooltip"] = "Up to date!" |
52 | else: |
53 | output["tooltip"] = f"Updates available:\n{'\n'.join(str(x) for x in updates)}" |
54 | output["alt"] = f"Updates: {num_updates}" |
55 | output["percentage"] = "0" |
56 | |
57 | print(json.dumps(output)) |
58 | |
59 | |
60 | if __name__ == "__main__": |
61 | main() |
62 |