aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/i3blocks/.local/lib
diff options
context:
space:
mode:
Diffstat (limited to 'i3blocks/.local/lib')
-rwxr-xr-xi3blocks/.local/lib/i3blocks/i3blocks-dunst38
-rwxr-xr-xi3blocks/.local/lib/i3blocks/i3blocks-miniflux26
-rwxr-xr-xi3blocks/.local/lib/i3blocks/i3blocks-notmuch33
-rwxr-xr-xi3blocks/.local/lib/i3blocks/i3blocks-title49
4 files changed, 146 insertions, 0 deletions
diff --git a/i3blocks/.local/lib/i3blocks/i3blocks-dunst b/i3blocks/.local/lib/i3blocks/i3blocks-dunst
new file mode 100755
index 0000000..b21042f
--- /dev/null
+++ b/i3blocks/.local/lib/i3blocks/i3blocks-dunst
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+
+import os
+import subprocess
+
+
+def muted():
+ """Returns True if Dunst is muted"""
+ cmd = ["dunstctl", "is-paused"]
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ output = proc.communicate()[0]
+ return "true" == output.strip().decode("UTF-8")
+
+
+def notif(t):
+ """Returns notification count"""
+ cmd = ["dunstctl", "count", t]
+ proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ output = proc.communicate()[0]
+ return int(output.strip().decode("UTF-8"))
+
+
+button = os.environ.get("BLOCK_BUTTON", None)
+
+if button == "1":
+ subprocess.run(["dunstctl", "history-pop"], check=True)
+elif button == "3":
+ subprocess.run(["dunstctl", "set-paused", "toggle"], check=True)
+
+
+if notif("waiting") > 0:
+ print("\uf1f6")
+elif notif("displayed") > 0:
+ print("\uf0f3")
+elif muted():
+ print("\uf1f7")
+else:
+ print("\uf0a2")
diff --git a/i3blocks/.local/lib/i3blocks/i3blocks-miniflux b/i3blocks/.local/lib/i3blocks/i3blocks-miniflux
new file mode 100755
index 0000000..05224e2
--- /dev/null
+++ b/i3blocks/.local/lib/i3blocks/i3blocks-miniflux
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+
+import os
+
+import requests
+
+ICON = "\U0000f09e"
+
+
+def main():
+ url = "https://miniflux.tobyvin.dev/v1/feeds/counters"
+ headers = {"X-Auth-Token": os.environ.get("MINIFLUX_TOKEN")}
+ resp = requests.get(url, headers=headers)
+ count = sum(resp.json().get("unreads").values())
+
+ print(f" {ICON} {count} \n")
+ if count > 50:
+ print(os.environ.get("black"))
+ print(os.environ.get("red"))
+ elif count > 0:
+ print(os.environ.get("black"))
+ print(os.environ.get("yellow"))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/i3blocks/.local/lib/i3blocks/i3blocks-notmuch b/i3blocks/.local/lib/i3blocks/i3blocks-notmuch
new file mode 100755
index 0000000..b25c971
--- /dev/null
+++ b/i3blocks/.local/lib/i3blocks/i3blocks-notmuch
@@ -0,0 +1,33 @@
+#!/usr/bin/env python3
+
+import notmuch
+import os
+
+ICON = "\U000f01ee" # 󰇮
+
+
+def main():
+ # Workaround for bug in the notmuch module's default config resolution
+ if os.environ.get("NOTMUCH_CONFIG") is None:
+ os.environ["NOTMUCH_CONFIG"] = os.path.join(
+ os.environ.get(
+ "XDG_CONFIG_HOME", os.path.join(os.path.expanduser("~"), ".config")
+ ),
+ "notmuch",
+ os.environ.get("NOTMUCH_PROFILE", "default"),
+ "config",
+ )
+
+ count = notmuch.Database().create_query("tag:unread").count_messages()
+
+ print(f" {ICON} {count} \n")
+ if count > 50:
+ print(os.environ.get("black"))
+ print(os.environ.get("red"))
+ elif count > 0:
+ print(os.environ.get("black"))
+ print(os.environ.get("yellow"))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/i3blocks/.local/lib/i3blocks/i3blocks-title b/i3blocks/.local/lib/i3blocks/i3blocks-title
new file mode 100755
index 0000000..9cd6abe
--- /dev/null
+++ b/i3blocks/.local/lib/i3blocks/i3blocks-title
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+import os
+from typing import Union
+
+import i3ipc
+from i3ipc import Event
+from i3ipc.events import WindowEvent, WorkspaceEvent
+
+
+class Connection(i3ipc.Connection):
+ def handle(
+ self,
+ *events: Union[Event, str],
+ ):
+ def wrapped(handler):
+ for event in events:
+ self.on(event, handler)
+ return handler
+
+ return wrapped
+
+
+max_length = int(os.environ.get("max_length", 30))
+
+
+sway = Connection()
+
+
+@sway.handle(
+ Event.WINDOW_FOCUS,
+ Event.WINDOW_TITLE,
+ Event.WINDOW_NEW,
+ Event.WINDOW_CLOSE,
+ Event.WORKSPACE_FOCUS,
+)
+def on_window_event(sway: i3ipc.Connection, event: WindowEvent | WorkspaceEvent):
+ focused = sway.get_tree()
+ while focused is not None and focused.ipc_data["type"] != "con":
+ focused = focused.find_focused()
+
+ if focused:
+ print(focused.ipc_data["name"][:max_length], flush=True)
+ else:
+ print("", flush=True)
+
+
+if __name__ == "__main__":
+ sway.main()