about summary refs log tree commit diff stats
path: root/home-manager
diff options
context:
space:
mode:
authorene <ene@sils.li>2023-02-15 18:22:20 +0100
committerene <ene@sils.li>2023-02-15 18:22:20 +0100
commita0c4090e6dbf665cb70d2ca2622445fec48ab95c (patch)
tree6f95d47fc36b325182fedfb7ac450c5cfd95ec1a /home-manager
parentFeat(home-manager): Add swaylock (diff)
downloadnixos-config-a0c4090e6dbf665cb70d2ca2622445fec48ab95c.tar.gz
nixos-config-a0c4090e6dbf665cb70d2ca2622445fec48ab95c.zip
Feat(home-manager): Add yambar
Diffstat (limited to 'home-manager')
-rw-r--r--home-manager/yambar/config/config.yml238
-rw-r--r--home-manager/yambar/config/config.yml.diffrent56
-rw-r--r--home-manager/yambar/config/laptop.yml117
-rw-r--r--home-manager/yambar/default.nix10
-rwxr-xr-xhome-manager/yambar/scripts/amixer-monitor24
-rwxr-xr-xhome-manager/yambar/scripts/cpu126
-rwxr-xr-xhome-manager/yambar/scripts/dfspace23
-rwxr-xr-xhome-manager/yambar/scripts/grades-average12
-rwxr-xr-xhome-manager/yambar/scripts/meminfo37
-rwxr-xr-xhome-manager/yambar/scripts/nmclitest23
-rwxr-xr-xhome-manager/yambar/scripts/pingtest28
-rwxr-xr-xhome-manager/yambar/scripts/yambar-tray27
-rwxr-xr-xhome-manager/yambar/scripts/yambar-tray-width28
13 files changed, 749 insertions, 0 deletions
diff --git a/home-manager/yambar/config/config.yml b/home-manager/yambar/config/config.yml
new file mode 100644
index 00000000..173e93a4
--- /dev/null
+++ b/home-manager/yambar/config/config.yml
@@ -0,0 +1,238 @@
+---
+# 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
+              tag: state
+              default: *normal
+              values:
+                focused: *focused
+                unfocused: *unfocused
+                urgent: *urgent
+                invisible:
+                  map:
+                    tag: occupied
+                    values:
+                      true: *occupied
+                      false: *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)))"
+            tag: id
+            values:
+              1: { map: { <<: *river_base } }
+              2: { map: { <<: *river_base } }
+              3: { map: { <<: *river_base } }
+              4: { map: { <<: *river_base } }
+              5: { map: { <<: *river_base } }
+              6: { map: { <<: *river_base } }
+              7: { map: { <<: *river_base } }
+              8: { map: { <<: *river_base } }
+              9: { map: { <<: *river_base } }
+        title:
+          map:
+            tag: title
+            default:
+              {
+                string:
+                  {
+                    text: "{title}",
+                    left-margin: 12,
+                    right-margin: 12,
+                      #max: 35,
+                    deco: *linetitle
+                  },
+              }
+            values: { "": { 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"
+            tag: carrier
+            values:
+              false: {empty: {}}
+              true:
+                string: {text: "  {ssid} ", deco: *combutil}
+    - network:
+        name: enp4s0
+        content:
+          map:
+            on-click: /bin/sh -c "nmtui"
+            tag: carrier
+            values:
+              false:
+                string: {text: "  Eth failed ", deco: *combutil}
+              true: {empty: {}}
+
+    - script:   # Sound volume
+        path: /home/dt/.config/yambar/scripts/amixer-monitor
+        content:
+          map:
+            on-click: /bin/sh -c "pavucontrol"
+            tag: muted
+            values:
+              true:
+                string:
+                  text: " ﱝ "
+                  deco: *bgcurg
+              false:
+                string: {text: "  {volume}% ", deco: *combutil}
+    - script:   # Grade average
+        path: /home/dt/.config/yambar/scripts/grades-average
+        poll-interval: 10
+        content:
+          string:
+            text: "   {grade} "
+            deco: *combmem
+    #- backlight:
+    #   name: intel_backlight
+    #   content:
+    #     - string: {text: "  {percent}% ", deco: *combutil}
+    - script:   # CPU
+        path: /home/dt/.config/yambar/scripts/cpu
+        content:
+          string:
+            text: "  {cpu}% "
+            deco: *combmem
+    - script:   # Memory info
+        path: /home/dt/.config/yambar/scripts/meminfo
+        content:
+            map:
+              tag: swapstate
+              values:
+                true:
+                 string:
+                   text: "  {memperc}%({swapperc}%) "
+                   deco: *combmem
+                false:
+                 string:
+                   text: "  {memperc}% "
+                   deco: *combmem
+    - script:   # Disk space
+        path: /home/dt/.config/yambar/scripts/dfspace
+        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/home-manager/yambar/config/config.yml.diffrent b/home-manager/yambar/config/config.yml.diffrent
new file mode 100644
index 00000000..462a329b
--- /dev/null
+++ b/home-manager/yambar/config/config.yml.diffrent
@@ -0,0 +1,56 @@
+hack: &hack Hack Nerd Font:pixelsize=13
+bg_default: &bg_default {stack: [{background: {color: 81A1C1ff}}, {underline: {size: 4, color: D8DEE9ff}}]}
+bar:
+  height: 40
+  location: top
+  font: JuliaMono:pixelsize=10
+  spacing: 2
+  margin: 0
+  layer: bottom
+  foreground: eeeeeeff
+  background: 2E3440dd
+
+  left:
+    - river:
+        anchors:
+          - base: &river_base
+              left-margin: 10
+              right-margin: 13 
+              default: {string: {text: , font: *hack}}
+              conditions:
+                id == 1: {string: {text: ﳐ, font: *hack}}  
+                id == 2: {string: {text: , font: *hack}}  
+                id == 3: {string: {text: , font: *hack}}  
+                id == 4: {string: {text: , font: *hack}}  
+                id == 5: {string: {text: , font: *hack}}  
+                id == 10: {string: {text: "scratchpad", font: *hack}}  
+                id == 11: {string: {text: "work", font: *hack}}  
+
+        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:
+              state == urgent:
+                map:
+                  <<: *river_base
+                  deco: {background: {color: D08770ff}}
+              state == focused:
+                map:
+                  <<: *river_base
+                  deco: *bg_default
+              state == visible:
+                map:
+                  conditions:
+                    ~occupied: {map: {<<: *river_base}}
+                    occupied: {map: {<<: *river_base, deco: *bg_default}}
+              state == unfocused:
+                map:
+                  <<: *river_base
+              state == invisible:
+                map:
+                  conditions:
+                    ~occupied: {empty: {}}
+                    occupied: {map: {<<: *river_base, deco: {underline: {size: 3, color: ea6962ff}}}}
diff --git a/home-manager/yambar/config/laptop.yml b/home-manager/yambar/config/laptop.yml
new file mode 100644
index 00000000..c3bfe6ab
--- /dev/null
+++ b/home-manager/yambar/config/laptop.yml
@@ -0,0 +1,117 @@
+# Config file for yambar
+# Note that this may be version-dependent, this file is written for v1.8.0
+
+
+# Font anchors
+font-main: &fontmain DejavuSansMono: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
+  monitor: DP-2
+  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
+              tag: state
+              default: *normal
+              values:
+                focused: *focused
+                unfocused: *unfocused
+                urgent: *urgent
+                invisible:
+                  map:
+                    tag: occupied
+                    values:
+                      true: *occupied
+                      false: *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)))"
+            tag: id
+            values:
+              1: { map: { <<: *river_base } }
+              2: { map: { <<: *river_base } }
+              3: { map: { <<: *river_base } }
+              4: { map: { <<: *river_base } }
+              5: { map: { <<: *river_base } }
+              6: { map: { <<: *river_base } }
+              7: { map: { <<: *river_base } }
+              8: { map: { <<: *river_base } }
+              9: { map: { <<: *river_base } }
+        title:
+          map:
+            tag: title
+            default:
+              {
+                string:
+                  {
+                    text: "{title}",
+                    left-margin: 12,
+                    right-margin: 12,
+                      #max: 35,
+                    deco: *linetitle
+                  },
+              }
+            values: { "": { string: { text: "" } } }
diff --git a/home-manager/yambar/default.nix b/home-manager/yambar/default.nix
new file mode 100644
index 00000000..9401440e
--- /dev/null
+++ b/home-manager/yambar/default.nix
@@ -0,0 +1,10 @@
+{
+  config,
+  pkgs,
+  ...
+}: {
+  xdg.configFile."yambar/config.yaml".source = ./config/config.yaml;
+  xdg.configFile."yambar/scripts".source = ./scripts;
+}
+# vim: ts=2
+
diff --git a/home-manager/yambar/scripts/amixer-monitor b/home-manager/yambar/scripts/amixer-monitor
new file mode 100755
index 00000000..9e75acfa
--- /dev/null
+++ b/home-manager/yambar/scripts/amixer-monitor
@@ -0,0 +1,24 @@
+#!/bin/sh
+# An improved amixer script that actually detects volume beyond 100%
+
+
+SLEEPTIME=1
+
+
+while true; do
+
+    volume=$(pactl get-sink-volume 0 | awk 'BEGIN { FS="/"} {print $2 }' | tr -d "%" | tr -d ' ')
+ 
+    if [ "$volume" -eq 0 ]; then
+        echo "muted|bool|true"
+
+    else
+        # Read sink volume in percentages
+        echo "volume|string|$volume"
+        echo "muted|bool|false"
+    fi
+
+    echo ""
+    sleep "$SLEEPTIME"
+
+done
diff --git a/home-manager/yambar/scripts/cpu b/home-manager/yambar/scripts/cpu
new file mode 100755
index 00000000..bae820d0
--- /dev/null
+++ b/home-manager/yambar/scripts/cpu
@@ -0,0 +1,126 @@
+#!/bin/bash
+# I didn't write this script; this is almost directly copied from the dnkl/yambar github.
+
+
+# cpu.sh - measures CPU usage at a configurable sample interval
+#
+# Usage: cpu.sh INTERVAL_IN_SECONDS
+#
+# This script will emit the following tags on stdout (N is the number
+# of logical CPUs):
+#
+#  Name   Type
+#  --------------------
+#  cpu    range 0-100
+#  cpu0   range 0-100
+#  cpu1   range 0-100
+#  ...
+#  cpuN-1 range 0-100
+#
+# I.e. ‘cpu’ is the average (or aggregated) CPU usage, while cpuX is a
+# specific CPU’s usage.
+#
+# Example configuration (update every second):
+#
+#  - script:
+#      path: /path/to/cpu.sh
+#      args: [1]
+#      content: {string: {text: "{cpu}%"}}
+#
+
+interval=2
+
+case ${interval} in
+    ''|*[!0-9]*)
+        echo "interval must be an integer"
+        exit 1
+        ;;
+    *)
+        ;;
+esac
+
+# Get number of CPUs, by reading /proc/stat
+# The output looks like:
+#
+#  cpu  A B C D ...
+#  cpu0 A B C D ...
+#  cpu1 A B C D ...
+#  cpuN A B C D ...
+#
+# The first line is a summary line, accounting *all* CPUs
+IFS=$'\n' readarray -t all_cpu_stats < <(grep -e "^cpu" /proc/stat)
+cpu_count=$((${#all_cpu_stats[@]} - 1))
+
+# Arrays of ‘previous’ idle and total stats, needed to calculate the
+# difference between each sample.
+prev_idle=()
+prev_total=()
+for i in $(seq ${cpu_count}); do
+    prev_idle+=(0)
+    prev_total+=(0)
+done
+
+prev_average_idle=0
+prev_average_total=0
+
+while true; do
+    IFS=$'\n' readarray -t all_cpu_stats < <(grep -e "^cpu" /proc/stat)
+
+    usage=()           # CPU usage in percent, 0 <= x <= 100
+
+    average_idle=0  # All CPUs idle time since boot
+    average_total=0 # All CPUs total time since boot
+
+    for i in $(seq 0 $((cpu_count - 1))); do
+        # Split this CPUs stats into an array
+        stats=($(echo "${all_cpu_stats[$((i + 1))]}"))
+
+        # man procfs(5)
+        user=${stats[1]}
+        nice=${stats[2]}
+        system=${stats[3]}
+        idle=${stats[4]}
+        iowait=${stats[5]}
+        irq=${stats[6]}
+        softirq=${stats[7]}
+        steal=${stats[8]}
+        guest=${stats[9]}
+        guestnice=${stats[10]}
+
+        # Guest time already accounted for in user
+        user=$((user - guest))
+        nice=$((nice - guestnice))
+
+        idle=$((idle + iowait))
+
+        total=$((user + nice + system + irq + softirq + idle + steal + guest + guestnice))
+
+        average_idle=$((average_idle + idle))
+        average_total=$((average_total + total))
+
+        # Diff since last sample
+        diff_idle=$((idle - prev_idle[i]))
+        diff_total=$((total - prev_total[i]))
+
+        usage[i]=$((100 * (diff_total - diff_idle) / diff_total))
+
+        prev_idle[i]=${idle}
+        prev_total[i]=${total}
+    done
+
+    diff_average_idle=$((average_idle - prev_average_idle))
+    diff_average_total=$((average_total - prev_average_total))
+
+    average_usage=$((100 * (diff_average_total - diff_average_idle) / diff_average_total))
+
+    prev_average_idle=${average_idle}
+    prev_average_total=${average_total}
+
+    echo "cpu|range:0-100|${average_usage}"
+    for i in $(seq 0 $((cpu_count - 1))); do
+        echo "cpu${i}|range:0-100|${usage[i]}"
+    done
+
+    echo ""
+    sleep "${interval}"
+done
diff --git a/home-manager/yambar/scripts/dfspace b/home-manager/yambar/scripts/dfspace
new file mode 100755
index 00000000..0b262481
--- /dev/null
+++ b/home-manager/yambar/scripts/dfspace
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# Sleep seconds
+timer="60"
+
+# Main loop
+while true; do
+
+    # vars
+    used_space=$(btrfs filesystem usage / 2> /dev/null | awk '{if ( /Used:/ ) { print $2 } } ' | head -n1)
+    all_space=$(btrfs filesystem usage / 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 $timer
+
+done
+
diff --git a/home-manager/yambar/scripts/grades-average b/home-manager/yambar/scripts/grades-average
new file mode 100755
index 00000000..a04b958c
--- /dev/null
+++ b/home-manager/yambar/scripts/grades-average
@@ -0,0 +1,12 @@
+#!/bin/sh
+# shellcheck disable=SC2086
+# shellcheck source=/dev/null
+. ~/.local/lib/shell/lib
+
+grade=$(grades list average | awk '{print $2}');
+
+echo "grade|string|$grade";
+echo "";
+
+
+if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi
diff --git a/home-manager/yambar/scripts/meminfo b/home-manager/yambar/scripts/meminfo
new file mode 100755
index 00000000..0156e94c
--- /dev/null
+++ b/home-manager/yambar/scripts/meminfo
@@ -0,0 +1,37 @@
+#!/bin/sh
+# Checks memory usage
+
+# Number of seconds to retest
+timer=5
+
+# Main loop
+while true; do
+
+    mem_total=$(LANG=C free -b|awk '/^Mem:/{print $2}')
+    mem_used=$(LANG=C free -b|awk '/^Mem:/{print $3}')
+    swap_total=$(LANG=C free -b|awk '/^Swap:/{print $2}')
+    swap_used=$(LANG=C free -b|awk '/^Swap:/{print $3}')
+
+
+    memperc=$(echo "$mem_used" "$mem_total" |  awk '{ div = 100 * ($1 / $2)} { printf "%.0f ", div }' | tr -d ' ' )
+    swapperc=$(echo "$swap_used" "$swap_total" |  awk '{
+    if ( $1 == 0 || $2 == 0 ) {
+        print "%"
+    } else {
+    div = 100 * ($1 / $2); 
+    printf "%.0f ", div
+}
+}' | tr -d ' ' )
+
+
+echo "memperc|string|$memperc"
+if [ "$swapperc" = "%" ];then
+    echo "swapstate|bool|false"
+else
+    echo "swapperc|string|$swapperc"
+    echo "swapstate|bool|true"
+fi
+echo ""
+sleep "$timer"
+
+done
diff --git a/home-manager/yambar/scripts/nmclitest b/home-manager/yambar/scripts/nmclitest
new file mode 100755
index 00000000..3e8bc73a
--- /dev/null
+++ b/home-manager/yambar/scripts/nmclitest
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Test for connectivity with nmcli
+
+Timer=${1:-120}   # Number of seconds to retest
+Timer2=${2:-10}   # Number of seconds to retest if connection fails
+
+# Main loop
+while true; do
+
+  CONN=$(nmcli networking connectivity)
+
+  if [[ "$CONN" == "full" ]]; then
+      echo "internet|string|Connected"
+      echo ""
+      sleep $Timer
+  else
+      echo "internet|string|Disconnected"
+      echo ""
+      sleep $Timer2
+  fi
+
+done
+
diff --git a/home-manager/yambar/scripts/pingtest b/home-manager/yambar/scripts/pingtest
new file mode 100755
index 00000000..2b5f9998
--- /dev/null
+++ b/home-manager/yambar/scripts/pingtest
@@ -0,0 +1,28 @@
+#!/bin/sh
+# Test for connectivity with ping
+
+Timer=${1:-120}   # Number of seconds to retest
+Timer2=${2:-10}   # Number of seconds to retest if connection fails
+IP=${3:-'8.8.8.8'}   # IP address to test, defaults to Google
+PCount=${4:-3}   # Number of pings to send
+
+# Main loop
+while true; do
+
+  # Pings the IP address for five times
+  PINGSTR=$(ping $IP -c $PCount -q)
+  # Use text formatting to get min/max ms delays
+  MED=$(echo $PINGSTR | sed 's/min\/avg\/max\/mdev = /\n/g' | tail -n 1 | sed 's/\//\t/g' | cut -f2)
+
+  if [[ "$MED" == "" ]]; then
+      echo "med|string|No connection"
+      echo ""
+      sleep $Timer2
+  else
+      echo "med|string|$MED ms"
+      echo ""
+      sleep $Timer
+  fi
+
+done
+
diff --git a/home-manager/yambar/scripts/yambar-tray b/home-manager/yambar/scripts/yambar-tray
new file mode 100755
index 00000000..1704c6dd
--- /dev/null
+++ b/home-manager/yambar/scripts/yambar-tray
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+
+pkill stalonetray
+pkill trayer
+
+# launch a tray.
+echo
+
+sleep 0.1 # make sure yambar starts first so we can draw on tpo of it
+
+# trayer-srg fork!
+trayer \
+    --edge top \
+    --tint 0x24242400 \
+    --align right \
+    --height 20 \
+    --expand false  \
+    --transparent true \
+    --alpha 0 \
+    --width 20  \
+    --monitor primary \
+    --widthtype request
+    # &>/dev/null
+
+
+
diff --git a/home-manager/yambar/scripts/yambar-tray-width b/home-manager/yambar/scripts/yambar-tray-width
new file mode 100755
index 00000000..00544e70
--- /dev/null
+++ b/home-manager/yambar/scripts/yambar-tray-width
@@ -0,0 +1,28 @@
+#!/bin/sh
+# shellcheck disable=SC2086
+# shellcheck source=/dev/null
+. ~/.local/lib/shell/lib
+
+
+CHARWIDTH=8 # i guess?
+
+tray_width_px() {
+    xwininfo -name panel | # trayer names its window "panel"
+        grep -i width: |
+        awk '{print $2}'
+}
+
+px_to_spaces() {
+    spaces="$((1 + ${1:-0} / $CHARWIDTH))"
+    printf "% *s\n" $spaces
+}
+
+sleep 0.2 # be sure trayer is already up
+
+output="$(px_to_spaces `tray_width_px`)"
+echo  "padding|string|$output"
+echo ""
+
+
+
+if [ -d /tmp/LIB_FILE_TEMP_DIR/ ];then rm -r /tmp/LIB_FILE_TEMP_DIR/; fi