about summary refs log tree commit diff stats
path: root/modules/home.legacy/conf/yambar
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-18 17:07:46 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-18 17:07:46 +0200
commitc52c7f314ccadcc2fcd91e28c8fd1b88f6d5ce0c (patch)
treee8b947710b467b32740598ff574982097836f66c /modules/home.legacy/conf/yambar
parentchore(pkgs/yt): 1.2.1 -> 1.3.0 (diff)
downloadnixos-config-c52c7f314ccadcc2fcd91e28c8fd1b88f6d5ce0c.tar.gz
nixos-config-c52c7f314ccadcc2fcd91e28c8fd1b88f6d5ce0c.zip
refactor(modules): Move all system modules to `by-name`
From now on all modules should be added to the new `by-name` directory.
This should help remove the (superficial and utterly useless)
distinction between `home-manager` and `NixOS` modules.
Diffstat (limited to 'modules/home.legacy/conf/yambar')
-rw-r--r--modules/home.legacy/conf/yambar/config/config.yml243
-rw-r--r--modules/home.legacy/conf/yambar/config/laptop.yml243
-rw-r--r--modules/home.legacy/conf/yambar/default.nix50
-rwxr-xr-xmodules/home.legacy/conf/yambar/scripts/disk.sh21
-rwxr-xr-xmodules/home.legacy/conf/yambar/scripts/mpd_song_name.sh21
-rwxr-xr-xmodules/home.legacy/conf/yambar/scripts/network.sh47
-rwxr-xr-xmodules/home.legacy/conf/yambar/scripts/sound-volume.sh20
7 files changed, 645 insertions, 0 deletions
diff --git a/modules/home.legacy/conf/yambar/config/config.yml b/modules/home.legacy/conf/yambar/config/config.yml
new file mode 100644
index 00000000..3d9f0687
--- /dev/null
+++ b/modules/home.legacy/conf/yambar/config/config.yml
@@ -0,0 +1,243 @@
+---
+# Config file for yambar
+# Note that this may be version-dependent, this file is written for v1.8.0
+
+
+# Font anchors
+font-main: &fontmain Source Code Pro:pixelsize=26
+font-aws: &awesome Font Awesome 5 Free:style=solid:pixelsize=23
+
+# Color anchors
+fg-none: &fgnone 00000000
+fg-1: &fg1 c6ceefff
+fg-blue: &fgblue 99d1dbff
+fg-sapphire: &fgsapp 74c7ecdd
+fg-green: &fggreen a6e3a1dd
+fg-peach: &fgpeach fab387dd
+fg-mauve: &fgmauve cba6f7dd
+fg-teal: &fgteal 94e2d5dd
+fg-lavendar: &fglav b4befedd
+fg-focus: &fgfocus e78284ff
+bg-1: &bg1 303446ff
+bg-tag: &bgtag 585b70ff
+bg-tag2: &bgtag2 45475aff
+bg-urgent: &bgurgent e78284ff
+
+# Background blocks
+background-block: &bgcblock {background: {color: *bg1 }}
+background-block-urgent: &bgcurg {background: {color: *bgurgent }}
+
+# Underlines
+underline-focused: &line {underline: { size: 3, color: *fgfocus}}
+underline-urgent: &lineurgent {underline: { size: 3, color: *fgblue}}
+underline-utils: &lineutil {underline: { size: 3, color: *fgpeach}}
+underline-resources: &linemem {underline: { size: 3, color: *fggreen}}
+underline-battery: &linebat {underline: { size: 3, color: *fgsapp}}
+underline-clock: &lineclock {underline: { size: 3, color: *fgteal}}
+underline-weather: &linewea {underline: { size: 3, color: *fglav}}
+underline-title: &linetitle {underline: { size: 3, color: *bgtag}}
+
+# Combined decorations
+combination-utils: &combutil {stack: [ <<: *bgcblock, <<: *lineutil]}
+combination-resources: &combmem {stack: [ <<: *bgcblock, <<: *linemem]}
+combination-battery: &combbat {stack: [ <<: *bgcblock, <<: *linebat]}
+combination-clock: &combclock {stack: [ <<: *bgcblock, <<: *lineclock]}
+combination-weather: &combwea {stack: [ <<: *bgcblock, <<: *linewea]}
+
+
+### Main
+
+bar:
+  location: top
+  height: 45
+  layer: bottom
+  spacing: 0
+  margin: 10
+  border: {margin: 0, top-margin: 10}
+  foreground: *fg1
+  background: *fgnone
+  font: *fontmain
+
+  ### Left, river tags
+  left:
+    - river:
+        anchors:
+          - id: &name { text: "{id}" }
+          - string: &focus { stack: [ {background: {color: *bg1}} ] }
+          - string: &normal { string: { <<: *name, margin: 10 } }
+          - string:
+              &occupied { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } }
+          - string: &urgent { string: { <<: *name, deco: {stack: [background: {color: *bgurgent}, <<: *lineurgent]}, margin: 10 } }
+          - string: &focused { string: { <<: *name, deco: {stack: [background: {color: *bgtag}, <<: *line]}, margin: 10 } }
+          - string: &unfocused { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } }
+          - base: &river_base
+              default: *normal
+              conditions:
+                state == focused: *focused
+                state == unfocused: *unfocused
+                state == urgent: *urgent
+                state == invisible:
+                  map:
+                    conditions:
+                      occupied: *occupied
+                      ~occupied: *normal
+        content:
+          map:
+            on-click:
+              left: sh -c "riverctl set-focused-tags $((1 << ({id} - 1)))"
+              right: sh -c "riverctl toggle-focused-tags $((1 << ({id} -1)))"
+              middle: sh -c "riverctl toggle-view-tags $((1 << ({id} -1)))"
+            conditions:
+              id == 1: { map: { <<: *river_base } }
+              id == 2: { map: { <<: *river_base } }
+              id == 3: { map: { <<: *river_base } }
+              id == 4: { map: { <<: *river_base } }
+              id == 5: { map: { <<: *river_base } }
+              id == 6: { map: { <<: *river_base } }
+              id == 7: { map: { <<: *river_base } }
+              id == 8: { map: { <<: *river_base } }
+              id == 9: { map: { <<: *river_base } }
+        title:
+          map:
+            default:
+              {
+                string:
+                  {
+                    text: "{title}",
+                    left-margin: 12,
+                    right-margin: 12,
+                    # max: 35,
+                    deco: *linetitle
+                  },
+              }
+            conditions:
+              title == "": { string: { text: "" } }
+
+  ### Center, clock & weather gadget
+  center:
+    - clock:
+        time-format: "%H:%M:%S %Z"
+        date-format: "%d/%m/%y (%a)"
+        foreground: *fgblue
+        content:
+          string:
+            text: " {date} {time} "
+            deco: *combclock
+
+  ### Right, system tray
+  right:
+    #- network:
+    #    name: wlp5s0
+    #    poll-interval: 10
+    #    content:
+    #      map:
+    #        on-click: /bin/sh -c "nmtui"
+    #        conditions:
+    #          ~carrier: {empty: {}}
+    #          carrier:
+    #            string: {text: "  {ssid} ", deco: *combutil}
+    #- network:
+    #    name: enp4s0
+    #    content:
+    #      map:
+    #        on-click: /bin/sh -c "nmtui"
+    #        conditions:
+    #          ~carrier:
+    #            string: {text: "  Eth failed ", deco: *combutil}
+    #          carrier: {empty: {}}
+
+    - script:   # mpd song name
+        path: @mpd_song_name_script@
+        content:
+          map:
+            conditions:
+              playing:
+                string: {text: "{song} ", deco: *combwea}
+              ~playing:
+                string: {text: "", deco: *combwea}
+    - script:   # Sound volume
+        path: @volume_script@
+        content:
+          map:
+            on-click: /bin/sh -c "pavucontrol"
+            conditions:
+              muted:
+                string:
+                  text: " 󰝟 "
+                  deco: *bgcurg
+              ~muted:
+                string: {text: "  {volume}% ", deco: *combutil}
+
+    # - script:   # Grade average
+    #     path: @grade_average_script@
+    #     content:
+    #       string:
+    #         text: "   {grade} "
+    #         deco: *combmem
+
+    #- backlight:
+    #   name: intel_backlight
+    #   content:
+    #     - string: {text: "  {percent}% ", deco: *combutil}
+
+    - script:   # CPU
+        path: @cpu_script@
+        content:
+          string:
+            text: "  {cpu}% "
+            deco: *combmem
+
+    - script:   # Memory info
+        path: @memory_script@
+        content:
+          map:
+            conditions:
+              swapstate:
+                string:
+                  text: "  {memperc}%({swapperc}%) "
+                  deco: *combmem
+              ~swapstate:
+                string:
+                  text: "  {memperc}% "
+                  deco: *combmem
+    - script:   # Disk space
+        path: @disk_script@
+        content:
+          string:
+            text: " 󰋊 {diskspace}({diskperc})"
+            deco: *combmem
+   #- battery:
+   #    name: BAT0
+   #    poll-interval: 30
+   #    content:
+   #      list:
+   #        items:
+   #          - ramp:
+   #              tag: capacity
+   #              items:
+   #                - string:
+   #                    text: "  {capacity}%({estimate}) "
+   #                    deco: *bgcurg
+   #                - string:
+   #                    text: "  {capacity}%({estimate}) "
+   #                    deco: {stack: [ <<: *bgcblock, <<: *linebat]}
+   #                - string:
+   #                    text: "  {capacity}%({estimate}) "
+   #                    deco: {stack: [ <<: *bgcblock, <<: *linebat]}
+   #                - string:
+   #                    text: "  {capacity}%({estimate}) "
+   #                    deco: {stack: [ <<: *bgcblock, <<: *linebat]}
+   #                - string:
+   #                    text: "  {capacity}%({estimate}) "
+   #                    deco: {stack: [ <<: *bgcblock, <<: *linebat]}
+   #- script:   # tray
+   #    path: /home/dt/.config/yambar/scripts/yambar-tray
+   #    content:
+   #      empty: {}
+   #- script:
+   #    path: /home/dt/.config/yambar/scripts/yambar-tray-width
+   #    poll-interval: 10
+   #    content:
+   #      string:
+   #         text: "{padding}"
+   #         deco: *combmem
diff --git a/modules/home.legacy/conf/yambar/config/laptop.yml b/modules/home.legacy/conf/yambar/config/laptop.yml
new file mode 100644
index 00000000..8de2f508
--- /dev/null
+++ b/modules/home.legacy/conf/yambar/config/laptop.yml
@@ -0,0 +1,243 @@
+---
+# Config file for yambar
+# Note that this may be version-dependent, this file is written for v1.8.0
+
+
+# Font anchors
+font-main: &fontmain Source Code Pro:pixelsize=22
+font-aws: &awesome Font Awesome 5 Free:style=solid:pixelsize=20
+
+# Color anchors
+fg-none: &fgnone 00000000
+fg-1: &fg1 c6ceefff
+fg-blue: &fgblue 99d1dbff
+fg-sapphire: &fgsapp 74c7ecdd
+fg-green: &fggreen a6e3a1dd
+fg-peach: &fgpeach fab387dd
+fg-mauve: &fgmauve cba6f7dd
+fg-teal: &fgteal 94e2d5dd
+fg-lavendar: &fglav b4befedd
+fg-focus: &fgfocus e78284ff
+bg-1: &bg1 303446ff
+bg-tag: &bgtag 585b70ff
+bg-tag2: &bgtag2 45475aff
+bg-urgent: &bgurgent e78284ff
+
+# Background blocks
+background-block: &bgcblock {background: {color: *bg1 }}
+background-block-urgent: &bgcurg {background: {color: *bgurgent }}
+
+# Underlines
+underline-focused: &line {underline: { size: 3, color: *fgfocus}}
+underline-urgent: &lineurgent {underline: { size: 3, color: *fgblue}}
+underline-utils: &lineutil {underline: { size: 3, color: *fgpeach}}
+underline-resources: &linemem {underline: { size: 3, color: *fggreen}}
+underline-battery: &linebat {underline: { size: 3, color: *fgsapp}}
+underline-clock: &lineclock {underline: { size: 3, color: *fgteal}}
+underline-weather: &linewea {underline: { size: 3, color: *fglav}}
+underline-title: &linetitle {underline: { size: 3, color: *bgtag}}
+
+# Combined decorations
+combination-utils: &combutil {stack: [ <<: *bgcblock, <<: *lineutil]}
+combination-resources: &combmem {stack: [ <<: *bgcblock, <<: *linemem]}
+combination-battery: &combbat {stack: [ <<: *bgcblock, <<: *linebat]}
+combination-clock: &combclock {stack: [ <<: *bgcblock, <<: *lineclock]}
+combination-weather: &combwea {stack: [ <<: *bgcblock, <<: *linewea]}
+
+
+### Main
+
+bar:
+  location: top
+  height: 25
+  layer: bottom
+  spacing: 0
+  margin: 10
+  border: {margin: 0, top-margin: 5}
+  foreground: *fg1
+  background: *fgnone
+  font: *fontmain
+
+  ### Left, river tags
+  left:
+    - river:
+        anchors:
+          - id: &name { text: "{id}" }
+          - string: &focus { stack: [ {background: {color: *bg1}} ] }
+          - string: &normal { string: { <<: *name, margin: 10 } }
+          - string:
+              &occupied { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } }
+          - string: &urgent { string: { <<: *name, deco: {stack: [background: {color: *bgurgent}, <<: *lineurgent]}, margin: 10 } }
+          - string: &focused { string: { <<: *name, deco: {stack: [background: {color: *bgtag}, <<: *line]}, margin: 10 } }
+          - string: &unfocused { string: { <<: *name, deco: {background: {color: *bgtag2}}, margin: 10 } }
+          - base: &river_base
+              default: *normal
+              conditions:
+                state == focused: *focused
+                state == unfocused: *unfocused
+                state == urgent: *urgent
+                state == invisible:
+                  map:
+                    conditions:
+                      occupied: *occupied
+                      ~occupied: *normal
+        content:
+          map:
+            on-click:
+              left: sh -c "riverctl set-focused-tags $((1 << ({id} - 1)))"
+              right: sh -c "riverctl toggle-focused-tags $((1 << ({id} -1)))"
+              middle: sh -c "riverctl toggle-view-tags $((1 << ({id} -1)))"
+            conditions:
+              id == 1: { map: { <<: *river_base } }
+              id == 2: { map: { <<: *river_base } }
+              id == 3: { map: { <<: *river_base } }
+              id == 4: { map: { <<: *river_base } }
+              id == 5: { map: { <<: *river_base } }
+              id == 6: { map: { <<: *river_base } }
+              id == 7: { map: { <<: *river_base } }
+              id == 8: { map: { <<: *river_base } }
+              id == 9: { map: { <<: *river_base } }
+        title:
+          map:
+            default:
+              {
+                string:
+                  {
+                    text: "{title}",
+                    left-margin: 12,
+                    right-margin: 12,
+                    # max: 35,
+                    deco: *linetitle
+                  },
+              }
+            conditions:
+              title == "": { string: { text: "" } }
+
+  ### Center, clock & weather gadget
+  center:
+    - clock:
+        time-format: "%H:%M:%S %Z"
+        date-format: "%d/%m/%y (%a)"
+        foreground: *fgblue
+        content:
+          string:
+            text: " {date} {time} "
+            deco: *combclock
+
+  ### Right, system tray
+  right:
+    #- network:
+    #    name: wlp5s0
+    #    poll-interval: 10
+    #    content:
+    #      map:
+    #        on-click: /bin/sh -c "nmtui"
+    #        conditions:
+    #          ~carrier: {empty: {}}
+    #          carrier:
+    #            string: {text: "  {ssid} ", deco: *combutil}
+    #- network:
+    #    name: enp4s0
+    #    content:
+    #      map:
+    #        on-click: /bin/sh -c "nmtui"
+    #        conditions:
+    #          ~carrier:
+    #            string: {text: "  Eth failed ", deco: *combutil}
+    #          carrier: {empty: {}}
+
+    - script:   # mpd song name
+        path: @mpd_song_name_script@
+        content:
+          map:
+            conditions:
+              playing:
+                string: {text: "{song} ", deco: *combwea}
+              ~playing:
+                string: {text: "", deco: *combwea}
+    - script:   # Sound volume
+        path: @volume_script@
+        content:
+          map:
+            on-click: /bin/sh -c "pavucontrol"
+            conditions:
+              muted:
+                string:
+                  text: " 󰝟 "
+                  deco: *bgcurg
+              ~muted:
+                string: {text: "  {volume}% ", deco: *combutil}
+
+    # - script:   # Grade average
+    #     path: @grade_average_script@
+    #     content:
+    #       string:
+    #         text: "   {grade} "
+    #         deco: *combmem
+
+    - backlight:
+       name: @backlight@
+       content:
+         - string: {text: "  {percent}% ", deco: *combutil}
+
+    - script:   # CPU
+        path: @cpu_script@
+        content:
+          string:
+            text: "  {cpu}% "
+            deco: *combmem
+
+    - script:   # Memory info
+        path: @memory_script@
+        content:
+          map:
+            conditions:
+              swapstate:
+                string:
+                  text: "  {memperc}%({swapperc}%) "
+                  deco: *combmem
+              ~swapstate:
+                string:
+                  text: "  {memperc}% "
+                  deco: *combmem
+    - script:   # Disk space
+        path: @disk_script@
+        content:
+          string:
+            text: " 󰋊 {diskspace}({diskperc})"
+            deco: *combmem
+    - battery:
+        name: BAT0
+        poll-interval: 300
+        content:
+          list:
+            items:
+              - ramp:
+                  tag: capacity
+                  items:
+                    - string:
+                        text: "  {capacity}%({estimate}) "
+                        deco: *bgcurg
+                    - string:
+                        text: "  {capacity}%({estimate}) "
+                        deco: {stack: [ <<: *bgcblock, <<: *linebat]}
+                    - string:
+                        text: "  {capacity}%({estimate}) "
+                        deco: {stack: [ <<: *bgcblock, <<: *linebat]}
+                    - string:
+                        text: "  {capacity}%({estimate}) "
+                        deco: {stack: [ <<: *bgcblock, <<: *linebat]}
+                    - string:
+                        text: "  {capacity}%({estimate}) "
+                        deco: {stack: [ <<: *bgcblock, <<: *linebat]}
+   #- script:   # tray
+   #    path: /home/dt/.config/yambar/scripts/yambar-tray
+   #    content:
+   #      empty: {}
+   #- script:
+   #    path: /home/dt/.config/yambar/scripts/yambar-tray-width
+   #    poll-interval: 10
+   #    content:
+   #      string:
+   #         text: "{padding}"
+   #         deco: *combmem
diff --git a/modules/home.legacy/conf/yambar/default.nix b/modules/home.legacy/conf/yambar/default.nix
new file mode 100644
index 00000000..007e7f25
--- /dev/null
+++ b/modules/home.legacy/conf/yambar/default.nix
@@ -0,0 +1,50 @@
+{
+  nixosConfig,
+  sysLib,
+  pkgs,
+  lib,
+  ...
+}: let
+  makeScript = {
+    name,
+    dependencies,
+    ...
+  }:
+    sysLib.writeShellScript {
+      inherit name;
+      src = ./scripts/${name}.sh;
+      dependencies = dependencies ++ (builtins.attrValues {inherit (pkgs) dash;});
+    }
+    + "/bin/${name}";
+in {
+  xdg.configFile."yambar/config.yml".source = pkgs.substituteAll {
+    src =
+      if nixosConfig.soispha.laptop.enable
+      then ./config/laptop.yml
+      else ./config/config.yml;
+
+    backlight =
+      if nixosConfig.soispha.laptop.enable
+      then nixosConfig.soispha.laptop.backlight
+      else "";
+
+    mpd_song_name_script = makeScript {
+      dependencies = builtins.attrValues {inherit (pkgs) mpc-cli;};
+      name = "mpd_song_name";
+    };
+
+    volume_script = makeScript {
+      dependencies = builtins.attrValues {inherit (pkgs) pulseaudio gawk coreutils;};
+      name = "sound-volume";
+    };
+
+    cpu_script = lib.getExe pkgs.yambar-cpu;
+
+    memory_script = lib.getExe pkgs.yambar-memory;
+
+    disk_script = makeScript {
+      dependencies = builtins.attrValues {inherit (pkgs) gawk btrfs-progs coreutils;};
+      name = "disk";
+    };
+  };
+}
diff --git a/modules/home.legacy/conf/yambar/scripts/disk.sh b/modules/home.legacy/conf/yambar/scripts/disk.sh
new file mode 100755
index 00000000..a5547a74
--- /dev/null
+++ b/modules/home.legacy/conf/yambar/scripts/disk.sh
@@ -0,0 +1,21 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+
+# Main loop
+while true; do
+    # vars
+    used_space=$(btrfs filesystem usage /srv 2>/dev/null | awk '{if ( /Used:/ ) { print $2 } } ' | head -n1)
+    all_space=$(btrfs filesystem usage /srv 2>/dev/null | awk '{if ( /Device size:/ ) { print $3 } } ' | head -n1 | tr -d "GiB")
+
+    # Check space available (4) and percentage used (5)
+    spaceperc=$(echo "$(echo "$used_space" | tr -d "GiB")" "$all_space" | awk '{div=$1/$2;div *= 100; printf"%2d%%\n",div }')
+
+    echo "diskspace|string|$used_space"
+    echo "diskperc|string|$spaceperc"
+    echo ""
+    sleep 1
+done
+
+# vim: ft=sh
diff --git a/modules/home.legacy/conf/yambar/scripts/mpd_song_name.sh b/modules/home.legacy/conf/yambar/scripts/mpd_song_name.sh
new file mode 100755
index 00000000..7d294781
--- /dev/null
+++ b/modules/home.legacy/conf/yambar/scripts/mpd_song_name.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+
+while true; do
+    state="$(mpc status '%state%')"
+
+    if [ "$state" = "playing" ]; then
+        song="$(mpc --format '[[%artist% - ]%title%]|[%file%]' current)"
+        echo "playing|bool|true"
+        echo "song|string|$song :: $(mpc status "%currenttime%/%totaltime%")"
+    else
+        echo "playing|bool|false"
+    fi
+    echo "" # commit
+
+    sleep 2
+done
+
+# vim: ft=sh
diff --git a/modules/home.legacy/conf/yambar/scripts/network.sh b/modules/home.legacy/conf/yambar/scripts/network.sh
new file mode 100755
index 00000000..adfc93df
--- /dev/null
+++ b/modules/home.legacy/conf/yambar/scripts/network.sh
@@ -0,0 +1,47 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+
+retest=120
+retest_if_con_fails=10
+backend=nmcli
+
+case "$backend" in
+"nmcli") # Test for connectivity with nmcli
+    while true; do
+        connection_status=$(nmcli networking connectivity)
+        if [ "$connection_status" = "full" ]; then
+            echo "internet|string|Connected"
+            echo ""
+            sleep $retest
+        else
+            echo "internet|string|Disconnected"
+            echo ""
+            sleep $retest_if_con_fails
+        fi
+    done
+    ;;
+"ping") # Test for connectivity with ping
+    ip_address='8.8.8.8'
+    ping_number=3
+
+    while true; do
+
+        ping_result=$(mktmp)
+        ping $ip_address -c $ping_number -q | awk 'BEGIN {FS="/"} END {print $5}' >"$ping_result"
+
+        if [ "$(wc -l <"$ping_result")" -eq 0 ]; then
+            echo "med|string|No connection"
+            echo ""
+            sleep $retest_if_con_fails
+        else
+            echo "med|string|$(cat "$ping_result") ms"
+            echo ""
+            sleep $retest
+        fi
+    done
+    ;;
+esac
+
+# vim: ft=sh
diff --git a/modules/home.legacy/conf/yambar/scripts/sound-volume.sh b/modules/home.legacy/conf/yambar/scripts/sound-volume.sh
new file mode 100755
index 00000000..8a98daf7
--- /dev/null
+++ b/modules/home.legacy/conf/yambar/scripts/sound-volume.sh
@@ -0,0 +1,20 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="2.1.2" . %SHELL_LIBRARY_PATH
+
+while true; do
+    volume="$(pactl get-sink-volume 0 | awk 'BEGIN { FS="/" } {gsub("%","",$2); gsub(" ","",$2)} {printf $2}')"
+
+    if [ "$volume" -eq 0 ]; then
+        echo "muted|bool|true"
+    else
+        echo "volume|string|$volume"
+        echo "muted|bool|false"
+    fi
+    echo ""
+
+    sleep 3
+done
+
+# vim: ft=sh