Última actividad 1704241163

xbps update checker for waybar

Revisión 1968b3bf1368c0c4ad3de52085b991814a95c449

xbps-check-updates.py Sin formato
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
12import json
13from 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 ?
21UPDATE_FILE = "/tmp/xbps_updates_available"
22
23
24class 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
33def 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
60if __name__ == "__main__":
61 main()
62