From 68029c245778f066aff0aad1977b23f6d6f6c561 Mon Sep 17 00:00:00 2001 From: Natasha Moongrave Date: Fri, 10 Apr 2026 12:13:51 +0200 Subject: Add schrottkatze rice: Eww status bars Top bar (CPU, RAM, battery, systray, time, trans flag), bottom bar (workspaces, traveldings transit, Mullvad VPN, lesbian flag). Gruvbox CSS styling, Nushell scripts for battery and ICE train speed. --- home/rices/schrottkatze/eww.nix | 6 ++ .../eww/configDir/bottomBar/bottomBar.yuck | 77 +++++++++++++++++++++ .../eww/configDir/bottomBar/traveldings.yuck | 37 ++++++++++ .../eww/configDir/bottomBar/workspaces.yuck | 18 +++++ home/rices/schrottkatze/eww/configDir/eww.css | 58 ++++++++++++++++ home/rices/schrottkatze/eww/configDir/eww.yuck | 36 ++++++++++ .../schrottkatze/eww/configDir/scripts/bat.nu | 78 ++++++++++++++++++++++ .../schrottkatze/eww/configDir/scripts/iceTacho.nu | 38 +++++++++++ .../schrottkatze/eww/configDir/topBar/sysinfo.yuck | 22 ++++++ .../schrottkatze/eww/configDir/topBar/time.yuck | 10 +++ .../schrottkatze/eww/configDir/topBar/topBar.yuck | 55 +++++++++++++++ home/rices/schrottkatze/eww/configDir/util.yuck | 10 +++ 12 files changed, 445 insertions(+) create mode 100644 home/rices/schrottkatze/eww.nix create mode 100644 home/rices/schrottkatze/eww/configDir/bottomBar/bottomBar.yuck create mode 100644 home/rices/schrottkatze/eww/configDir/bottomBar/traveldings.yuck create mode 100644 home/rices/schrottkatze/eww/configDir/bottomBar/workspaces.yuck create mode 100644 home/rices/schrottkatze/eww/configDir/eww.css create mode 100644 home/rices/schrottkatze/eww/configDir/eww.yuck create mode 100755 home/rices/schrottkatze/eww/configDir/scripts/bat.nu create mode 100755 home/rices/schrottkatze/eww/configDir/scripts/iceTacho.nu create mode 100644 home/rices/schrottkatze/eww/configDir/topBar/sysinfo.yuck create mode 100644 home/rices/schrottkatze/eww/configDir/topBar/time.yuck create mode 100644 home/rices/schrottkatze/eww/configDir/topBar/topBar.yuck create mode 100644 home/rices/schrottkatze/eww/configDir/util.yuck diff --git a/home/rices/schrottkatze/eww.nix b/home/rices/schrottkatze/eww.nix new file mode 100644 index 0000000..599738a --- /dev/null +++ b/home/rices/schrottkatze/eww.nix @@ -0,0 +1,6 @@ +{...}: { + programs.eww = { + enable = true; + configDir = ./eww/configDir; + }; +} diff --git a/home/rices/schrottkatze/eww/configDir/bottomBar/bottomBar.yuck b/home/rices/schrottkatze/eww/configDir/bottomBar/bottomBar.yuck new file mode 100644 index 0000000..d955d31 --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/bottomBar/bottomBar.yuck @@ -0,0 +1,77 @@ +(include "bottomBar/workspaces.yuck") +(include "bottomBar/traveldings.yuck") + +(defwindow bottomBar + :monitor 0 + :stacking "fg" + :wm-ignore true + :exclusive true + :geometry (geometry + :width "100%" + :height "33px" + :anchor "bottom center") + (bottomBar)) + +(defwidget bottomBar [] + (overlay + :class "bottomBar" + (transform + :translate-y "1.5px" + (centerbox + (box + :halign "start" + (workspaceWidget) + ) + (box + :halign "center" + (traveldings) + ) + (box + :halign "end" + ; (label :text "${iceData.speed}km/h") + (mullvadThing) + ) + ) + ) + (box + :class "lesbianFlag" + :height 1 + ( flagEl :flipped true :color "#D52D00") + ( flagEl :flipped true :color "#EF7627") + ( flagEl :flipped true :color "#FF9A56") + ( flagEl :flipped true :color "#FFFFFF") + ( flagEl :flipped true :color "#D162A4") + ( flagEl :flipped true :color "#B55690") + ( flagEl :flipped true :color "#A30262") + ) + ) +) + +(deflisten mullvad + :initial "{\"state\":\"init\"}" + `mullvad status -j listen` +) + +(defwidget mullvadThing [] + (box + :class "container" + (button + :height 16 + :width 16 + :class "mullvad-state-${mullvad.state}" + ) + ) +) + +(defwidget iceTacho [] + (box + :class "iceTacho" + :tooltip "Tz${iceTachoData.tzn} (BR ${iceTachoData.br})" + (label :text "${iceTachoData.speed} km/h") + ) +) + +(deflisten iceTachoData + :initial "null" + { "~/.config/eww/scripts/iceTacho.nu" } +) diff --git a/home/rices/schrottkatze/eww/configDir/bottomBar/traveldings.yuck b/home/rices/schrottkatze/eww/configDir/bottomBar/traveldings.yuck new file mode 100644 index 0000000..62de26e --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/bottomBar/traveldings.yuck @@ -0,0 +1,37 @@ +(defwidget traveldings [] + (revealer + :class "traveldings" + :transition "crossfade" + :reveal { traveldings_data != "null" } + (traveldingsBarWidget) + ) +) + +(defwidget traveldingsBarWidget [] + (overlay + (box + :width 640 + (label + :halign "start" + :text "${traveldings_data.line} -> ${strlength(traveldings_data.arrival_station) > 24 ? "${substring(traveldings_data.arrival_station, 0, 24)}…" : traveldings_data.arrival_station}${traveldings_data.arrival_platform_data_available ? " (Gl. ${traveldings_data.arrival_platform_real})" : ""}" + ) + (label + :halign "end" + :text { traveldings_data.time_left >= 3600 ? formattime(traveldings_data.time_left, "noch %-Hh %-Mmin", "Etc/UTC") : formattime(traveldings_data.time_left, "noch %-Mmin", "Etc/UTC") } + ) + ) + (box + (progress + :class { traveldings_data.live ? "traveldings_live" : "traveldings_disconnected" } + :value {traveldings_data.progress * 100} + :orientation "horizontal" + ) + ) + ) +) + + +(deflisten traveldings_data + :initial "null" + "traveldings current" +) diff --git a/home/rices/schrottkatze/eww/configDir/bottomBar/workspaces.yuck b/home/rices/schrottkatze/eww/configDir/bottomBar/workspaces.yuck new file mode 100644 index 0000000..2709e1b --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/bottomBar/workspaces.yuck @@ -0,0 +1,18 @@ +(defwidget workspaceWidget [] + (box + :class "workspaces" + (for workspace in workspaces + (button + :style "border-bottom: 4px solid ${workspace.color}${workspace.active ? "; background-color: #3c3836" : ""}" + :class "${workspace.focused ? "focused" : ""}" + :onclick "niri msg action focus-workspace ${workspace.idx}" + (label :text "${workspace.icon ?: workspace.idx}") + ) + ) + ) +) + +(deflisten workspaces + :initial "[]" + "bar-ws-monitor" +) diff --git a/home/rices/schrottkatze/eww/configDir/eww.css b/home/rices/schrottkatze/eww/configDir/eww.css new file mode 100644 index 0000000..2ce2ac5 --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/eww.css @@ -0,0 +1,58 @@ +label { + font: 14pt "Departure Mono Nerd Font"; +} + +button { + border-radius: 0px; + padding: 0; +} + +.background { + background-color: #1d2021; +} + +.workspaces button { + border: 0px; + padding: 5px 4px 0 4px; +} + +.workspaces button.focused { + background-color: #504935; +} + +.traveldings progressbar trough { + border: none; + background-color: #3c3836; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.traveldings progressbar.traveldings_live progress { + background-color: #79740e; + border-bottom-left-radius: 0; +} + +.traveldings progressbar.traveldings_disconnected progress { + background-color: #cc241d; +} + + +.traveldingsWindow { + border-radius: 15px; +} + +.mullvad-state-connected { + background-color: #98971a +} + +.mullvad-state-connecting { + background-color: #d79921 +} + +.mullvad-state-disconnected { + background-color: #cc241d +} + +.mullvad-state-init { + background-color: #458588 +} diff --git a/home/rices/schrottkatze/eww/configDir/eww.yuck b/home/rices/schrottkatze/eww/configDir/eww.yuck new file mode 100644 index 0000000..f6f20f5 --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/eww.yuck @@ -0,0 +1,36 @@ +(include "topBar/topBar.yuck") +(include "bottomBar/bottomBar.yuck") + +(include "topBar/time.yuck") + +(defwindow streamUi + :monitor 0 + :stacking "fg" + :wm-ignore true + :exclusive true + :geometry (geometry + :width "640px" + :height "100%" + :anchor "center right") + (centerbox + :style "padding: 0 3px" + :orientation "vertical" + (label :text "hi") + (label :text "hi") + (centerbox + :valign "end" + (box + :halign "start" + (systray + :icon-size 18 + :spacing 3 + ) + ) + (box) + (box + :halign "end" + (time) + ) + ) + ) +) diff --git a/home/rices/schrottkatze/eww/configDir/scripts/bat.nu b/home/rices/schrottkatze/eww/configDir/scripts/bat.nu new file mode 100755 index 0000000..fd34c50 --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/scripts/bat.nu @@ -0,0 +1,78 @@ +#!/usr/bin/env nu + +const ICONS = [ + [ normal charging]; + [ 󰂎 󰢟 ] + [ 󰁺 󰢜 ] + [ 󰁻 󰂆 ] + [ 󰁼 󰂇 ] + [ 󰁽 󰂈 ] + [ 󰁾 󰢝 ] + [ 󰁿 󰂉 ] + [ 󰂀 󰢞 ] + [ 󰂁 󰂊 ] + [ 󰂂 󰂋 ] + [ 󰁹 󰂅 ] +]; + +const DELAY = 2sec; + +def "main auto" [] { + loop { + let paths = ls "/sys/class/power_supply" + | each {|it| $it.name | path basename} + | filter {|it| $it starts-with "BAT"}; + + if ($paths | is-not-empty) { + let result = $paths + | each {|it| get_and_format $it} + | str join " | " + | prepend "| " + | str join; + + print $result + } else { + print "" + } + sleep $DELAY; + } +} + +def main [ path: string ] { + loop { + print (get_and_format $path) + sleep $DELAY; + } +} + +def get_and_format [ path: string ] { + let fract = get_bat_charge_fraction $path; + let is_charging = get_bat_charging_status $path; + let percent = ($fract * 100) | math round; + + return $"(get_bat_icon $fract $is_charging) ($percent)%"; +} + +def get_bat_charge_fraction [ + path: string +] { + let energy_full = open $"/sys/class/power_supply/($path)/energy_full" | into float; + let energy_now = open $"/sys/class/power_supply/($path)/energy_now" | into float; + + $energy_now / $energy_full +} + +def get_bat_charging_status [ + path: string +] { + let status = open $"/sys/class/power_supply/($path)/status"; + + $status like Charging +} + +def get_bat_icon [ + frac: float + is_charging = false +] { + $ICONS | get (($frac * 10) | math round) | get (if ($is_charging) { "charging" } else { "normal" }) +} diff --git a/home/rices/schrottkatze/eww/configDir/scripts/iceTacho.nu b/home/rices/schrottkatze/eww/configDir/scripts/iceTacho.nu new file mode 100755 index 0000000..5225dc2 --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/scripts/iceTacho.nu @@ -0,0 +1,38 @@ +#!/usr/bin/env nu + +const TABLE = { + 401: 280 + 402: 280 + 403: 330 + 406: 330 + 407: 320 + 408: 320 + 411: 230 + 415: 230 + 412: 265 + 605: 200 +}; + +def main [ ] { + loop { + if ((iw dev wlp4s0 link | lines | filter {|it| $it =~ "WIFIonICE" } | length) == 1) { + let iceData = http get https://iceportal.de/api1/rs/status; + let tzn = $iceData.tzn; + let br = $iceData.series; + let speed = $iceData.speed; + let speedfrac = $speed / ($TABLE | get $br); + + print ({ + tzn: $tzn, + br: $br, + speed: $speed, + frac: $speedfrac + } | to json -r); + + sleep 2sec; + } else { + print "null"; + sleep 5sec; + } + } +} diff --git a/home/rices/schrottkatze/eww/configDir/topBar/sysinfo.yuck b/home/rices/schrottkatze/eww/configDir/topBar/sysinfo.yuck new file mode 100644 index 0000000..c37838a --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/topBar/sysinfo.yuck @@ -0,0 +1,22 @@ +(deflisten bat + :initial "BAT0 ERR" + { "~/.config/eww/scripts/bat.nu auto"} +) + +(defwidget cpu [] + (box + :class "cpuIndicator" + (label + :markup " ${strlength(round(EWW_CPU.avg, 0)) == 1 ? " ${round(EWW_CPU.avg, 0)}" : round(EWW_CPU.avg, 0)}%" + ) + ) +) + +(defwidget mem [] + (box + :class "memIndicator" + (label + :markup " ${round(EWW_RAM.used_mem_perc, 0)}%" + ) + ) +) diff --git a/home/rices/schrottkatze/eww/configDir/topBar/time.yuck b/home/rices/schrottkatze/eww/configDir/topBar/time.yuck new file mode 100644 index 0000000..ba22883 --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/topBar/time.yuck @@ -0,0 +1,10 @@ +(defwidget time [] + (label + :markup { + formattime( + EWW_TIME, + " %Y-%m-%d %H:%M:%S " + ) + } + ) +) diff --git a/home/rices/schrottkatze/eww/configDir/topBar/topBar.yuck b/home/rices/schrottkatze/eww/configDir/topBar/topBar.yuck new file mode 100644 index 0000000..4aee71f --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/topBar/topBar.yuck @@ -0,0 +1,55 @@ +(include "topBar/time.yuck") +(include "topBar/sysinfo.yuck") +(include "util.yuck") + +(defwindow topBar + :monitor 0 + :stacking "fg" + :wm-ignore true + :exclusive true + :geometry (geometry + :width "100%" + :height "33px" + :anchor "top center") + (topBar)) + +(defwidget topBar [] + (overlay + :class "topBar" + (transform + :translate-y "-1.5px" + (centerbox + (box + :halign "start" + :spacing 12 + :space-evenly false + (label :text " ") + (cpu) + (sep) + (mem) + (label :markup bat) + ) + (box + :halign "center" + (systray + :icon-size 18 + :spacing 3 + ) + ) + (box + :halign "end" + (time) + ) + ) + ) + (box + :class "transFlag" + :height 1 + ( flagEl :flipped false :color "#5BCEFA") + ( flagEl :flipped false :color "#F5A9B8") + ( flagEl :flipped false :color "#FFFFFF") + ( flagEl :flipped false :color "#F5A9B8") + ( flagEl :flipped false :color "#5BCEFA") + ) + ) +) diff --git a/home/rices/schrottkatze/eww/configDir/util.yuck b/home/rices/schrottkatze/eww/configDir/util.yuck new file mode 100644 index 0000000..3df84ab --- /dev/null +++ b/home/rices/schrottkatze/eww/configDir/util.yuck @@ -0,0 +1,10 @@ +(defwidget flagEl [color ?flipped] + (box + :style "border-${flipped ? "top" : "bottom"}: 3px solid ${color}" + :halign "fill" + ) +) + +(defwidget sep [] + (label :text "|") +) -- cgit v1.2.3