{ config, lib, pkgs, ... }: { config = { services.mako = { enable = true; font = "Fira Sans 10"; format = "%s\\n%b"; margin = "2"; maxVisible = -1; backgroundColor = "#000000dd"; progressColor = "source #223544ff"; width = 384; extraConfig = '' outer-margin=1 max-history=100 max-icon-size=48 [grouped] format=(%g) %s\n%b [urgency=low] text-color=#999999ff [urgency=critical] background-color=#900000dd [app-name=Element] group-by=summary [mode=silent] invisible=1 ''; }; systemd.user.services.mako = { Unit = { Description = "Mako notification daemon"; PartOf = [ "graphical-session.target" ]; }; Install = { WantedBy = [ "graphical-session.target" ]; }; Service = { Type = "dbus"; BusName = "org.freedesktop.Notifications"; ExecStart = lib.getExe config.services.mako.package; RestartSec = 5; Restart = "always"; }; }; systemd.user.services.mako-follows-focus = { Unit = { BindsTo = [ "niri.service" "mako.service" ]; After = [ "niri.service" "mako.service" ]; }; Service = { Type = "simple"; Restart = "always"; ExecStart = pkgs.writers.writePython3 "mako-follows-focus" { libraries = with pkgs.python3Packages; []; } '' import os import socket import json import subprocess current_output = None workspaces = [] def output_changed(new_output): global current_output if current_output == new_output: return current_output = new_output subprocess.run(["makoctl", "reload"]) sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) sock.connect(os.environ["NIRI_SOCKET"]) sock.send(b"\"EventStream\"\n") for line in sock.makefile(buffering=1, encoding='utf-8'): if line_json := json.loads(line): if "WorkspacesChanged" in line_json: workspaces = line_json["WorkspacesChanged"]["workspaces"] for workspace in workspaces: if not workspace["is_focused"]: continue output_changed(workspace["output"]) break if "WorkspaceActivated" in line_json and line_json["WorkspaceActivated"]["focused"]: # noqa: E501 for workspace in workspaces: if not workspace["id"] == line_json["WorkspaceActivated"]["id"]: # noqa: E501 continue output_changed(workspace["output"]) break ''; }; Install = { WantedBy = [ "mako.service" ]; }; }; }; }