From 7e84f7980e884cbff73c0c9a5e74132cbd1757e1 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Tue, 18 Oct 2022 20:04:46 -0400 Subject: [PATCH] Starting a custom clock in python. --- ansible/roles/sway/files/style.css | 1 + ansible/roles/sway/files/waybar_config.json | 2 +- .../roles/sway/files/waybar_custom_clock.py | 53 +++++++++++++++++++ ansible/roles/sway/tasks/common.yaml | 11 ++++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 ansible/roles/sway/files/waybar_custom_clock.py diff --git a/ansible/roles/sway/files/style.css b/ansible/roles/sway/files/style.css index 45f73d6..bc42938 100644 --- a/ansible/roles/sway/files/style.css +++ b/ansible/roles/sway/files/style.css @@ -51,6 +51,7 @@ #clock, #cpu, #custom-keyboard-layout, +#custom-clock, #memory, #mode, #network, diff --git a/ansible/roles/sway/files/waybar_config.json b/ansible/roles/sway/files/waybar_config.json index b44b7bb..4d13bc9 100644 --- a/ansible/roles/sway/files/waybar_config.json +++ b/ansible/roles/sway/files/waybar_config.json @@ -20,7 +20,7 @@ "spacing": 10 }, "custom/clock": { - "exec": "$HOME/.bin/.waybar_date", + "exec": "waybar_custom_clock", "return-type": "json", "restart-interval": 30 } diff --git a/ansible/roles/sway/files/waybar_custom_clock.py b/ansible/roles/sway/files/waybar_custom_clock.py new file mode 100644 index 0000000..9cef0b2 --- /dev/null +++ b/ansible/roles/sway/files/waybar_custom_clock.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# +# Custom waybar module for clocks. Implemented because the official clock module was downloading timezone definitions on every boot. +import json +import sys +import time +from dataclasses import dataclass +from typing import Final, List, Optional + +INTERVAL: Final[int] = 10 + + +@dataclass +class Update: + text: Optional[str] + alt: Optional[str] + tooltip: Optional[str] + css_class: Optional[List[str]] + percentage: Optional[str] + + def dump(self) -> str: + # Dump a dict because we can't name our member variable "class" + return json.dumps( + { + k: v + for k, v in { + "text": self.text, + "alt": self.alt, + "tooltip": self.tooltip, + "class": self.css_class, + "percentage": self.percentage, + }.items() + if v is not None + } + ) + + +def main(): + next_update = time.time() + while True: + time_before_next_update = next_update - time.time() + if time_before_next_update > 0: + time.sleep(time_before_next_update) + next_update = time.time() + INTERVAL + argv = json.dumps(sys.argv) + out = Update( + text="foo", alt=argv, tooltip=argv, css_class=["foo"], percentage="100" + ) + print(out.dump(), flush=True) + + +if __name__ == "__main__": + main() diff --git a/ansible/roles/sway/tasks/common.yaml b/ansible/roles/sway/tasks/common.yaml index d7c1735..a3c22b8 100644 --- a/ansible/roles/sway/tasks/common.yaml +++ b/ansible/roles/sway/tasks/common.yaml @@ -1,3 +1,14 @@ +- name: Install scripts + copy: + src: "files/{{ item.src }}" + dest: "{{ item.dest }}" + mode: 0755 + owner: root + group: wheel + loop: + - src: waybar_custom_clock.py + dest: /usr/local/bin/waybar_custom_clock + - import_tasks: tasks/freebsd.yaml when: 'os_flavor == "freebsd"'