home · contact · privacy
Add wl-paste, to installs and to status bar. master
authorPlom Heller <plom@plomlompom.com>
Fri, 18 Sep 2026 22:15:11 +0000 (00:15 +0200)
committerPlom Heller <plom@plomlompom.com>
Fri, 18 Sep 2026 22:15:11 +0000 (00:15 +0200)
home/user/.config/sway/status.py
to_install/t490s

index 2e390e4b1e826ca27c62ea6bd17d60609f8a4425..d29a5b58c835acc6089396e175dd8be86962b336 100755 (executable)
@@ -13,6 +13,10 @@ from pactl import pactl_info_default_dev
 
 METADATA = {'version': 1}
 
 
 METADATA = {'version': 1}
 
+CMD_PASTE = 'wl-paste'
+CLIP_LEN_MAX = 32
+MSG_CLIPBOARD_EMPTY = 'Nothing is copied'
+
 AUDIO_DEVS_LABELS = (('sink', 'vol'),
                      ('source', '--mic'))
 
 AUDIO_DEVS_LABELS = (('sink', 'vol'),
                      ('source', '--mic'))
 
@@ -37,6 +41,28 @@ def int_at_path(
     return int(stripped_text)
 
 
     return int(stripped_text)
 
 
+def info_clipboard(
+        ) -> tuple[str, ...]:
+    'Produce clipboard contents summary.'
+    texts = []
+    args: tuple[str, ...]
+    for args in (tuple(), ('--primary',)):
+        proc = subprocess_run((CMD_PASTE,) + args,
+                              check=False, capture_output=True)
+        if proc.returncode:
+            stderr = proc.stderr.decode('utf8', 'replace').strip()
+            clip = '(empty)' if stderr == MSG_CLIPBOARD_EMPTY else '(error)'
+        else:
+            try:
+                clip = proc.stdout.decode('utf8').replace('\n', ' ').strip()
+            except UnicodeDecodeError:
+                clip = '(binary)'
+        if len(clip) > CLIP_LEN_MAX:
+            clip = clip[:CLIP_LEN_MAX] + '…'
+        texts += [f'{(args[0] if args else CMD_PASTE)}: [{clip}]']
+    return tuple(texts)
+
+
 def info_audio(
         ) -> str:
     "Produce audio devices' volume, muteness."
 def info_audio(
         ) -> str:
     "Produce audio devices' volume, muteness."
@@ -143,9 +169,10 @@ if __name__ == '__main__':
     print('[', end='')
     while True:
         print(json_dumps([{'full_text': text}
     print('[', end='')
     while True:
         print(json_dumps([{'full_text': text}
-                          for text in info_network() + (info_battery(),
-                                                        info_thermal(),
-                                                        info_datetime(),
-                                                        info_audio())]),
+                          for text in info_clipboard() + info_network() + (
+                              info_battery(),
+                              info_thermal(),
+                              info_datetime(),
+                              info_audio())]),
               end=',\n', flush=True)
         sleep(1)
               end=',\n', flush=True)
         sleep(1)
index e13553dbc92bfb6eb4514895a2995fa81f274783..33263a6fdbc9fa02689ab8e8f17d0758030e7f7b 100644 (file)
@@ -3,12 +3,14 @@
 #
 # basic helpers
 ack
 #
 # basic helpers
 ack
-ccrypt
 chrony
 git
 man-db
 python3
 sudo
 chrony
 git
 man-db
 python3
 sudo
+# for secrets
+ccrypt
+pmount
 # battery management
 tlp
 # networking
 # battery management
 tlp
 # networking
@@ -19,6 +21,7 @@ firefox-esr
 foot
 vim-gtk3
 sway
 foot
 vim-gtk3
 sway
+wl-clipboard
 wmenu
 xwayland
 # multimedia
 wmenu
 xwayland
 # multimedia