#!/usr/bin/env python # Get needed modules import yaml import subprocess from os import path from PyQt5.QtCore import QTimer from PyQt5.QtGui import * from PyQt5.QtWidgets import * # Available Updates count holder avail = "" # Use config.yml file to allow for compatibility with # most terminal emulators possible & custom icon #confPath = "~/.config/systrayUpdater/systrayUpdater.yml" #conf = path.expanduser(confPath) with open(path.expanduser("~/.config/systrayUpdater/systrayUpdater.yml")) as f: conf = yaml.load(f, yaml.FullLoader) term = str(conf['terminal']) opt = str(conf['option']) wait = int(conf['timer']) * 60000 #icnPath = "~/.config/systrayUpdater/" + str(conf['icon']) #icn = path.expanduser(icnPath) icn = path.join(path.expanduser("~/.config/systrayUpdater/"), str(conf['icon'])) f.close() # Run checkupdates command # Populates the available updates count holder def count(): cmd = ['checkupdates'] p1 = subprocess.Popen(cmd, stdout=subprocess.PIPE) p2 = subprocess.Popen(['wc', '-l'], stdin=p1.stdout, stdout=subprocess.PIPE) output = ((p2.communicate()[0]).decode()).rstrip('\n') global avail avail = str(output)+" Updates" # Run system update def update(): cmd = [ term, opt, 'sudo', 'pacman', '-Syu'] subprocess.Popen(cmd) # Sets new text for available updates def newText(): count() option1.setText(avail) tray.setToolTip(avail) # Initially populate available updates count() app = QApplication([]) app.setQuitOnLastWindowClosed(False) # Adding an icon icon = QIcon(icn) # Adding item on the menu bar tray = QSystemTrayIcon() tray.setIcon(icon) tray.setToolTip(avail) tray.setVisible(True) # Creating the options menu = QMenu() option1 = QAction(avail) option1.triggered.connect(update) option1.triggered.connect(newText) menu.addAction(option1) # Set up timer to update count timer = QTimer() timer.timeout.connect(newText) timer.start(wait) # To quit the app quit = QAction("Quit") quit.triggered.connect(app.quit) menu.addAction(quit) # Adding options to the System Tray tray.setContextMenu(menu) app.exec_()