96 lines
2.5 KiB
Nix
Executable File
96 lines
2.5 KiB
Nix
Executable File
{
|
|
config,
|
|
lib,
|
|
namespace,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
cfg = config.${namespace}.programs.waybar;
|
|
|
|
waybar-notifications = pkgs.writeScriptBin "waybar-notifications" ''
|
|
#!/usr/bin/env python
|
|
|
|
import subprocess
|
|
import json
|
|
import codecs
|
|
import re
|
|
|
|
def check_notifications(args = "history"):
|
|
notifications = []
|
|
number = None
|
|
content = None
|
|
appname = None
|
|
urgency = None
|
|
cmd = "makoctl"
|
|
temp = subprocess.Popen([cmd, args], stdout = subprocess.PIPE)
|
|
output = str(temp.communicate()).replace("(b\'", "").replace("\', None)", "")
|
|
lines = output.split("\\n")
|
|
for line in lines:
|
|
if "Notification" in line:
|
|
number = line.split(":")[0].replace("Notification ", "")
|
|
content = re.sub(r"[\u2066\u2067\u2068\u2069, \u00e2\u0081\u00a8]", "", codecs.decode(line.split(": ")[-1].encode("latin1").decode("utf-8"), "unicode_escape"))
|
|
content = re.sub(r"[\u00a9]", " ", content)
|
|
|
|
if "App name" in line:
|
|
appname = line.split(": ")[-1]
|
|
if "Urgency" in line:
|
|
urgency = line.split(": ")[-1]
|
|
|
|
if number is not None and content is not None and appname is not None and urgency is not None:
|
|
notifications.append((number, content, appname, urgency))
|
|
number = None
|
|
content = None
|
|
appname = None
|
|
urgency = None
|
|
|
|
return notifications
|
|
|
|
def get_icon(notifications):
|
|
status = ""
|
|
icon = ""
|
|
|
|
for number, content, appname, urgency in notifications:
|
|
status = "notify"
|
|
if urgency != "normal":
|
|
status = "alert"
|
|
break
|
|
|
|
if status == "notify":
|
|
icon = ""
|
|
if status == "alert":
|
|
icon = ""
|
|
|
|
return icon, status
|
|
|
|
def build_tooltip(notifications):
|
|
tooltip = ""
|
|
for number, content, appname, urgency in notifications:
|
|
tooltip += "{0}: {1}\n".format(appname, content)
|
|
|
|
return tooltip
|
|
|
|
def main():
|
|
notifications = check_notifications()
|
|
data = {}
|
|
|
|
icon, status = get_icon(notifications)
|
|
|
|
data["text"] = icon
|
|
data["tooltip"] = build_tooltip(notifications)
|
|
data["class"] = status
|
|
|
|
print(json.dumps(data, ensure_ascii=False))
|
|
|
|
main()
|
|
|
|
'';
|
|
in
|
|
{
|
|
imports = [ ../options.nix ];
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
home.packages = [ waybar-notifications ];
|
|
};
|
|
}
|