From 6bc6e37af5b21b0356d0e008f83eee5378fc8b43 Mon Sep 17 00:00:00 2001 From: Caroline Larimore Date: Tue, 17 Sep 2024 21:37:33 -0700 Subject: home: desktop: update eww widgets --- roles/home/desktop/eww.nix | 2 + roles/home/desktop/eww/eww.css | 77 +++++++++++++++------ roles/home/desktop/eww/eww.yuck | 4 +- roles/home/desktop/eww/panels/bar.css | 39 +++++++++++ roles/home/desktop/eww/panels/bar.yuck | 102 ++++++++++++++++++++++++++++ roles/home/desktop/eww/panels/cpu.yuck | 45 ++++++++++++ roles/home/desktop/eww/panels/default.css | 4 ++ roles/home/desktop/eww/panels/default.yuck | 7 ++ roles/home/desktop/eww/panels/fs.css | 13 ++++ roles/home/desktop/eww/panels/fs.yuck | 74 ++++++++++++++++++++ roles/home/desktop/eww/panels/launcher.css | 7 ++ roles/home/desktop/eww/panels/launcher.yuck | 27 ++++++++ roles/home/desktop/eww/panels/memory.yuck | 28 ++++++++ roles/home/desktop/eww/panels/music.css | 38 +++++++++++ roles/home/desktop/eww/panels/music.yuck | 102 ++++++++++++++++++++++++++++ roles/home/desktop/eww/panels/volume.yuck | 40 +++++++++++ roles/home/desktop/eww/widgets/default.css | 1 + roles/home/desktop/eww/widgets/default.yuck | 2 + roles/home/desktop/eww/widgets/meter.css | 9 +++ roles/home/desktop/eww/widgets/meter.yuck | 41 +++++++++++ roles/home/desktop/eww/widgets/stat.yuck | 24 +++++++ roles/home/desktop/eww/windows/default.yuck | 2 + roles/home/desktop/eww/windows/music.yuck | 71 +------------------ roles/home/desktop/eww/windows/net.yuck | 38 +++++++++++ roles/home/desktop/eww/windows/sys.yuck | 84 +++++++++++++++++++++++ 25 files changed, 789 insertions(+), 92 deletions(-) create mode 100644 roles/home/desktop/eww/panels/bar.css create mode 100644 roles/home/desktop/eww/panels/bar.yuck create mode 100644 roles/home/desktop/eww/panels/cpu.yuck create mode 100644 roles/home/desktop/eww/panels/default.css create mode 100644 roles/home/desktop/eww/panels/default.yuck create mode 100644 roles/home/desktop/eww/panels/fs.css create mode 100644 roles/home/desktop/eww/panels/fs.yuck create mode 100644 roles/home/desktop/eww/panels/launcher.css create mode 100644 roles/home/desktop/eww/panels/launcher.yuck create mode 100644 roles/home/desktop/eww/panels/memory.yuck create mode 100644 roles/home/desktop/eww/panels/music.css create mode 100644 roles/home/desktop/eww/panels/music.yuck create mode 100644 roles/home/desktop/eww/panels/volume.yuck create mode 100644 roles/home/desktop/eww/widgets/default.css create mode 100644 roles/home/desktop/eww/widgets/default.yuck create mode 100644 roles/home/desktop/eww/widgets/meter.css create mode 100644 roles/home/desktop/eww/widgets/meter.yuck create mode 100644 roles/home/desktop/eww/widgets/stat.yuck create mode 100644 roles/home/desktop/eww/windows/default.yuck create mode 100644 roles/home/desktop/eww/windows/net.yuck create mode 100644 roles/home/desktop/eww/windows/sys.yuck (limited to 'roles/home/desktop') diff --git a/roles/home/desktop/eww.nix b/roles/home/desktop/eww.nix index 4bfdf63..ee93f92 100644 --- a/roles/home/desktop/eww.nix +++ b/roles/home/desktop/eww.nix @@ -51,7 +51,9 @@ lib.mkIf config.home.roles.desktop.eww { xdg.configFile."eww/eww.yuck".source = eww/eww.yuck; xdg.configFile."eww/eww.css".source = eww/eww.css; + xdg.configFile."eww/panels".source = eww/panels; xdg.configFile."eww/windows".source = eww/windows; + xdg.configFile."eww/widgets".source = eww/widgets; xdg.configFile."eww/colors.css".text = let c = config.theme.colors; in '' @define-color accent #${c.accent}; diff --git a/roles/home/desktop/eww/eww.css b/roles/home/desktop/eww/eww.css index 075beb8..f770055 100644 --- a/roles/home/desktop/eww/eww.css +++ b/roles/home/desktop/eww/eww.css @@ -1,35 +1,29 @@ @import "colors.css"; +@import "panels/default.css"; +@import "widgets/default.css"; window { color: @fg; - background-color: @bg; - border: 2px solid @bg1; + background-color: rgba(0, 0, 0, 0); + /*border: 2px solid @yellow;*/ font-family: monospace, sans-serif; } -.main { - margin: 8px; -} - -.left { - margin-top: 8px; -} - -.song-title { - font-size: 17px; - font-weight: bold; -} - -.song-album { - color: @fg2; +.panel { + color: @fg; + background-color: @bg; + opacity: 1; + border: 2px solid @bg1; + font-family: monospace, sans-serif; + padding: 8px; } -.song-artist { - color: @fg2; +.unpadded { + padding: 0px; } -.control { - font-size: 24; +.padded { + padding: 8px; } button { @@ -40,6 +34,8 @@ button { border-radius: 0; box-shadow: none; text-shadow: none; + margin: 0; + padding: 0; } button:hover { @@ -48,4 +44,41 @@ button:hover { button:active { background: @bg2; -} \ No newline at end of file +} + +button.icon { + font-family: 'monospace'; + font-size: 24; +} + +.cutout { + background: @bg1; +} + +.faint { + font-weight: normal; + color: @fg4; +} + +graph { + color: @accent; + background: alpha(@accent, 0.2); +} + +scale trough { + background: @bg2; + min-height: 4px; + min-width: 4px; +} + +scale highlight { + background: @accent; +} + +scale slider { + box-shadow: none; + background: @accent; + margin: -6px; + min-height: 0; + min-width: 0; +} diff --git a/roles/home/desktop/eww/eww.yuck b/roles/home/desktop/eww/eww.yuck index 37d2efc..320a207 100644 --- a/roles/home/desktop/eww/eww.yuck +++ b/roles/home/desktop/eww/eww.yuck @@ -1 +1,3 @@ -(include "./windows/music.yuck") \ No newline at end of file +(include "./panels/default.yuck") +(include "./widgets/default.yuck") +(include "./windows/default.yuck") diff --git a/roles/home/desktop/eww/panels/bar.css b/roles/home/desktop/eww/panels/bar.css new file mode 100644 index 0000000..a07c3b1 --- /dev/null +++ b/roles/home/desktop/eww/panels/bar.css @@ -0,0 +1,39 @@ +.bar .shutdown { + color: @brightRed; +} + +.bar .restart { + color: @brightGreen; +} + +.bar .sleep { + color: @brightYellow; +} + +.bar .dismiss { + color: @red; +} + +.bar .ws { + font-family: 'Symbols Nerd Font Mono'; + font-size: 18; + + color: @bg2; +} + +.bar .ws.active { + color: @fg4; +} + +.bar .ws.visible { + color: @fg; +} + +.bar .ws.focused { + background: @bg1; + color: @fg0; +} + +.bar .ws.urgent { + background: @red; +} diff --git a/roles/home/desktop/eww/panels/bar.yuck b/roles/home/desktop/eww/panels/bar.yuck new file mode 100644 index 0000000..6dc4771 --- /dev/null +++ b/roles/home/desktop/eww/panels/bar.yuck @@ -0,0 +1,102 @@ +(defwidget bar [] + (centerbox :class "bar" + :orientation "h" + + (box + :orientation "h" + :spacing 8 + :space-evenly false + + (tooltip :class "panel" + {EWW_TIME} + {formattime(EWW_TIME, "%T", "America/Los_Angeles")} + ) + + (tooltip :class "panel" + {formattime(EWW_TIME, "%F", "America/Los_Angeles")} + {formattime(EWW_TIME, "%A, %B %d, %Y", "America/Los_Angeles")} + ) + ) + + (box + :orientation "h" + :spacing 8 + :space-evenly false + + ;(label :class "panel" + ; :text "i have no idea what to put here :3" + ;) + + (box :class "unpadded panel" + (ws :num 0 :icon "󱄅" :name "Main") + (ws :num 1 :icon "" :name "Terminal") + (ws :num 2 :icon "󰈹" :name "Browser") + (ws :num 3 :icon "󰙯" :name "Chat") + (ws :num 4 :icon "󰓓" :name "Gaming") + (ws :num 5 :icon "󰎱" :name "5") + (ws :num 6 :icon "󰎳" :name "6") + (ws :num 7 :icon "󰎶" :name "7") + (ws :num 8 :icon "󰄛" :name "Meow") + (ws :num 9 :icon "󰲸" :name "Music") + (ws :num 10 :icon "󰁴" :name "Misc") + ) + ) + + (box + :orientation "h" + :spacing 8 + :space-evenly false + :halign "end" + + (box :class "unpadded panel" + :space-evenly false + (button :class "sleep icon" + :width 31 + "󰤄" + ) + + (button :class "restart icon" + :width 33 + "󰜉" + ) + + (button :class "shutdown icon" + :width 31 + "󰐥" + ) + ) + + (box :class "unpadded panel" + (button :class "dismiss icon" + :width 29 + :onclick `${EWW_CMD} close sys` + "󰅖" + ) + ) + ) + ) +) + +(defwidget ws [num icon name] + (tooltip {name} + (button :class {"ws" + + (ws-status[num].active ? " active" : "") + + (ws-status[num].visible ? " visible" : "") + + (ws-status[num].focused ? " focused" : "") + + (ws-status[num].urgent ? " urgent" : "") + } + :width { + num == 0 ? 31 : + num == 10 ? 31 : + 33 + } + + {icon} + ) + ) +) + +(defpoll ws-status + :interval "0.1s" + `i3-msg -t get_workspaces | jq -caM 'map({"ws-\\(.num)": {visible, focused, urgent, active: true}}) | add as $orig | [range(0;11)] | [.[] as $i | $orig."ws-\\($i)" // {visible: false, focused: false, urgent: false, active: false}]'` +) diff --git a/roles/home/desktop/eww/panels/cpu.yuck b/roles/home/desktop/eww/panels/cpu.yuck new file mode 100644 index 0000000..ef57fa6 --- /dev/null +++ b/roles/home/desktop/eww/panels/cpu.yuck @@ -0,0 +1,45 @@ +(defwidget cpu [] + (box :class "panel" + :orientation "h" + :spacing 8 + :space-evenly false + + (tooltip :class "cutout" + {round(EWW_CPU.avg, 2) + "%"} + (graph + :value {EWW_CPU.avg} + :time-range "30s" + :width 76 + :height 76 + :hexpand true + ) + ) + + (box :orientation "v" + :spacing 8 + :space-evenly false + :hexpand true + + (label :halign "start" :markup {"" + cpu-name + ""}) + + (stat :key "Temperature" :value {round(EWW_TEMPS.K10TEMP_TCTL, 2) + "°C"}) + (stat :key "Frequency" :value {round(cpu-max-freq * cpu-freq/100, 0) + " MHz"}) + (stat :key "Usage" :value {round(EWW_CPU.avg, 2) + "%"}) + ) + ) +) + +(defpoll cpu-freq + :interval "2s" + `lscpu | sed -n '/CPU(s) scaling MHz/ s/.*:\\s*\\(.*\\)%/\\1/p'` +) + +(defpoll cpu-max-freq + :interval "9999s" + `lscpu | sed -n '/CPU max MHz/ s/.*:\\s*\\(.*\\)/\\1/p'` +) + +(defpoll cpu-name + :interval "9999s" + `lscpu | sed -n '/Model name/ s/.*:\\s*\\(.*\\)/\\1/p'` +) diff --git a/roles/home/desktop/eww/panels/default.css b/roles/home/desktop/eww/panels/default.css new file mode 100644 index 0000000..8cd39a3 --- /dev/null +++ b/roles/home/desktop/eww/panels/default.css @@ -0,0 +1,4 @@ +@import "bar.css"; +@import "fs.css"; +@import "launcher.css"; +@import "music.css"; diff --git a/roles/home/desktop/eww/panels/default.yuck b/roles/home/desktop/eww/panels/default.yuck new file mode 100644 index 0000000..3c20c4b --- /dev/null +++ b/roles/home/desktop/eww/panels/default.yuck @@ -0,0 +1,7 @@ +(include "./panels/bar.yuck") +(include "./panels/cpu.yuck") +(include "./panels/fs.yuck") +(include "./panels/launcher.yuck") +(include "./panels/memory.yuck") +(include "./panels/music.yuck") +(include "./panels/volume.yuck") diff --git a/roles/home/desktop/eww/panels/fs.css b/roles/home/desktop/eww/panels/fs.css new file mode 100644 index 0000000..8ca2dd2 --- /dev/null +++ b/roles/home/desktop/eww/panels/fs.css @@ -0,0 +1,13 @@ +.disks .meter.almost-full .progress { + color: @orange; + background: rgba(0, 0, 0, 0); +} + +.disks .meter.full .progress { + color: @red; + background: rgba(0, 0, 0, 0); +} + +.zfs .total { + font-weight: bold; +} diff --git a/roles/home/desktop/eww/panels/fs.yuck b/roles/home/desktop/eww/panels/fs.yuck new file mode 100644 index 0000000..54bbd46 --- /dev/null +++ b/roles/home/desktop/eww/panels/fs.yuck @@ -0,0 +1,74 @@ +(defwidget disks [] + (box :class "panel disks" + :orientation "h" + :spacing 8 + :space-evenly false + :height {100+16} + + (disk :mount "total" + :zfs true + :name "zpool" + ) + + (disk :mount "/mnt/4tb" + :name "4tb" + ) + (disk :mount "/mnt/ssd" + :name "ssd" + ) + ) +) + +(defwidget zfs [] + (box :class "panel zfs" + :orientation "v" + :spacing 8 + :space-evenly false + :hexpand true + + (label :halign "start" :markup "ZFS Volumes") + + (zvol :mount "/nix") + (zvol :mount "/persist") + + (zvol :class "faint" + :mount "/home" + ) + + (zvol :class "faint" + :mount "/" + ) + + (zvol :class "total" + :mount "total" + :name "Total" + ) + ) +) + +(defwidget disk [mount ?name ?zfs] + (meter + :value { + (zfs == true ? zpool : disks)[mount].used / ((zfs == true ? zpool : disks)[mount].used + (zfs == true ? zpool : disks)[mount].free) * 100} + :label {name != "" ? name : mount} + + {round((zfs == true ? zpool : disks)[mount].used/1024/1024, 0) + " GiB"} + ) +) + +(defwidget zvol [mount ?name ?class] + (stat :class {class} + :key {name != "" ? name : mount} + :value {round(zpool[mount].used/1024/1024, 2) + " GiB"} + ) +) + +(defpoll disks + :interval "10s" + `df -x fuse -x tmpfs -x efivarfs -x devtmpfs -x zfs | tail -n +2 | awk '{ printf "%s free %d\\n%s used %d\\n", $6, $4, $6, $3 }' | xargs printf '{"%s": {"%s": %d}}\\n' | jq -scaM 'map(to_entries) | flatten | group_by(.key) | map({"\\(.[0].key)": map(.value | to_entries) | flatten | from_entries}) | add'` +) + +(defpoll zpool + :interval "10s" + `df -t zfs --total | tail -n +2 | awk '{ printf "%s free %d\\n%s used %d\\n", $6, $4, $6, $3 }' | xargs printf '{"%s": {"%s": %d}}\\n' | jq -scaM 'map(to_entries) | flatten | group_by(.key) | map({"\\(.[0].key)": map(.value | to_entries) | flatten | from_entries}) | add | .total = ."-" | del(."-") | .total.free = ."/zpool".free'` +) diff --git a/roles/home/desktop/eww/panels/launcher.css b/roles/home/desktop/eww/panels/launcher.css new file mode 100644 index 0000000..5055191 --- /dev/null +++ b/roles/home/desktop/eww/panels/launcher.css @@ -0,0 +1,7 @@ +.launcher entry { + border-radius: 0; +} + +.launcher entry:focus { + box-shadow: 0 0 0 2px @accent inset; +} diff --git a/roles/home/desktop/eww/panels/launcher.yuck b/roles/home/desktop/eww/panels/launcher.yuck new file mode 100644 index 0000000..a568346 --- /dev/null +++ b/roles/home/desktop/eww/panels/launcher.yuck @@ -0,0 +1,27 @@ +(defwidget launcher [] + (box :class "launcher panel" + :orientation "v" + :spacing 8 + :space-evenly false + :height {556 - ((128 + 16 + 4) + 8)} + :width 768 + + (input + :valign "start" + ) + + (scroll + :vscroll true + :hscroll false + :vexpand true + + (literal :content {lunch}) + ) + ) +) + +(defpoll lunch + :interval "60s" + ;`~/lunch.sh` + `~/code/lunch/zig-out/bin/lunch` +) diff --git a/roles/home/desktop/eww/panels/memory.yuck b/roles/home/desktop/eww/panels/memory.yuck new file mode 100644 index 0000000..4f6633a --- /dev/null +++ b/roles/home/desktop/eww/panels/memory.yuck @@ -0,0 +1,28 @@ +(defwidget memory [] + (box :class "panel" + :orientation "v" + :spacing 8 + :space-evenly false + + (box + (label :markup "Memory" + :halign "start" + ) + + (label :markup {round(EWW_RAM.used_mem/1024/1024/1024, 2) + " GiB / " + round(EWW_RAM.total_mem/1024/1024/1024, 2) + " GiB"} + :halign "end" + ) + ) + + (tooltip :class "cutout" + {round(EWW_RAM.used_mem_perc, 2) + "%"} + (graph + :hexpand true + :value {EWW_RAM.used_mem} + :max {EWW_RAM.total_mem} + :time-range "30s" + :height 100 + ) + ) + ) +) diff --git a/roles/home/desktop/eww/panels/music.css b/roles/home/desktop/eww/panels/music.css new file mode 100644 index 0000000..e5bbc60 --- /dev/null +++ b/roles/home/desktop/eww/panels/music.css @@ -0,0 +1,38 @@ +.music { + padding: 8px; + opacity: 1.0; +} + +.music .right { + margin-top: 8px; +} + +.music .song-title { + font-size: 17px; + font-weight: bold; +} + +.music .song-album { + color: @fg2; +} + +.music .song-artist { + color: @fg2; +} + +.music scale trough { + background: @bg2; + min-height: 4px; +} + +.music scale highlight { + background: @accent; +} + +.music scale slider { + box-shadow: none; + background: @accent; + margin: -6px; + min-height: 0; + min-width: 0; +} diff --git a/roles/home/desktop/eww/panels/music.yuck b/roles/home/desktop/eww/panels/music.yuck new file mode 100644 index 0000000..757efd5 --- /dev/null +++ b/roles/home/desktop/eww/panels/music.yuck @@ -0,0 +1,102 @@ + +(defwidget music [] + (box :class "panel music" + :orientation "h" + :spacing 8 + :space-evenly false + :height {128 + 16 + 4} + + (image + :path song-cover + :image-width 128 + :image-height 128 + ) + + (box :class "right" + :orientation "v" + :spacing 0 + :space-evenly true + :hexpand true + + (box :class "info" + :orientation "v" + :space-evenly false + :valign "center" + + (tooltip {song.title} + (label :class "song-title" + :text {song.title} + :halign "start" + :truncate true + ) + ) + (tooltip {song.album} + (label :class "song-album" + :text {song.album} + :halign "start" + :truncate true + ) + ) + (tooltip {song.artist} + (label :class "song-artist" + :text {song.artist} + :halign "start" + :truncate true + ) + ) + ) + + (box + :valign "end" + :space-evenly false + + (box :class "control" + :space-evenly false + + (button :class "icon" + :width 36 + :onclick `playerctl --player=cmus,firefox,%any previous` + + "󰒮" + ) + (button :class "icon" + :onclick `playerctl --player=cmus,firefox,%any play-pause` + :width 36 + + { song.status == "Playing" ? "󰏤" : "󰐊" } + ) + (button :class "icon" + :width 36 + :onclick `playerctl --player=cmus,firefox,%any next` + + "󰒭" + ) + ) + + (scale + :hexpand true + :value {song-position} + :max {song.length/1000/1000} + ;:onchange `/home/c/seek.sh {}` + ) + + {formattime(round(song-position, 0), "%M:%S") + " / " + formattime(round(song.length/1000/1000, 0), "%M:%S")} + + (box :width 16) + ) + ) + ) +) + +(deflisten song-cover + `playerctl --player=cmus,firefox,%any -F metadata title | get-album-art` +) + +(deflisten song + `playerctl --player=cmus,firefox,%any -F metadata --format='{"title": "{{title}}", "album": "{{album}}", "artist": "{{artist}}", "status": "{{status}}", "length": "{{mpris:length}}"}'` +) + +(defpoll song-position + :interval "0.2s" + `playerctl --player=cmus,firefox,%any position` +) \ No newline at end of file diff --git a/roles/home/desktop/eww/panels/volume.yuck b/roles/home/desktop/eww/panels/volume.yuck new file mode 100644 index 0000000..0c342c3 --- /dev/null +++ b/roles/home/desktop/eww/panels/volume.yuck @@ -0,0 +1,40 @@ +(defwidget volume [] + (box :class "volume panel" + :orientation "v" + :space-evenly false + + (label :markup "Volume") + + (box + :orientation "h" + :vexpand true + + (box + :orientation "v" + :space-evenly false + :vexpand true + + (scale + :orientation "v" + :flipped true + :value {sink-volume} + :max 101 + :onchange `pactl set-sink-volume @DEFAULT_SINK@ {}%` + :vexpand true + ) + + {sink-volume + "%"} + ) + ) + ) +) + +(defpoll sink-volume + :interval "0.2s" + `pactl get-sink-volume @DEFAULT_SINK@ | head -n1 | awk '{print substr($5, 1, length($5)-1)}'` +) + +;(defpoll source-volume +; :interval "0.2s" +; `pactl get-source-volume @DEFAULT_SOURCE@ | head -n1 | awk '{print substr($5, 1, length($5)-1)}'` +;) diff --git a/roles/home/desktop/eww/widgets/default.css b/roles/home/desktop/eww/widgets/default.css new file mode 100644 index 0000000..e6d3764 --- /dev/null +++ b/roles/home/desktop/eww/widgets/default.css @@ -0,0 +1 @@ +@import "meter.css"; diff --git a/roles/home/desktop/eww/widgets/default.yuck b/roles/home/desktop/eww/widgets/default.yuck new file mode 100644 index 0000000..bedb80e --- /dev/null +++ b/roles/home/desktop/eww/widgets/default.yuck @@ -0,0 +1,2 @@ +(include "./widgets/meter.yuck") +(include "./widgets/stat.yuck") diff --git a/roles/home/desktop/eww/widgets/meter.css b/roles/home/desktop/eww/widgets/meter.css new file mode 100644 index 0000000..df65382 --- /dev/null +++ b/roles/home/desktop/eww/widgets/meter.css @@ -0,0 +1,9 @@ +.meter .background { + color: @bg1; + background: rgba(0, 0, 0, 0); +} + +.meter .progress { + color: @accent; + background: rgba(0, 0, 0, 0); +} diff --git a/roles/home/desktop/eww/widgets/meter.yuck b/roles/home/desktop/eww/widgets/meter.yuck new file mode 100644 index 0000000..af2c3f3 --- /dev/null +++ b/roles/home/desktop/eww/widgets/meter.yuck @@ -0,0 +1,41 @@ +(defwidget meter [value label] + (overlay :class {"meter" + + (value >= 90 ? " almost-full" : "") + + (value >= 99 ? " full" : "") + + (value <= 10 ? " almost-empty" : "") + + (value <= 1 ? " empty" : "") + } + + :width 100 + + (circular-progress :class "background" + :value 80 + :start-at 35 + :thickness 10 + :width 100 + ) + + (circular-progress :class "progress" + :value {value*0.8} + :start-at 35 + :thickness 10 + :width 100 + ) + + (box + :orientation "v" + :valign "center" + :space-evenly false + :spacing 2 + + (children) + + {round(value, 2)+"%"} + ) + + (transform + :translate-y "44px" + (label :markup {""+label+""}) + ) + ) +) diff --git a/roles/home/desktop/eww/widgets/stat.yuck b/roles/home/desktop/eww/widgets/stat.yuck new file mode 100644 index 0000000..1ef76f2 --- /dev/null +++ b/roles/home/desktop/eww/widgets/stat.yuck @@ -0,0 +1,24 @@ +(defwidget stat [key value ?class] + (overlay + (box :class {class} + :orientation "h" + :spacing 45 + + (label + :text {key} + :halign "start" + :hexpand true + ) + + (label + :text {value} + :halign "end" + :hexpand true + ) + ) + + (label :class "faint" + :text "..." + ) + ) +) diff --git a/roles/home/desktop/eww/windows/default.yuck b/roles/home/desktop/eww/windows/default.yuck new file mode 100644 index 0000000..77e8cf3 --- /dev/null +++ b/roles/home/desktop/eww/windows/default.yuck @@ -0,0 +1,2 @@ +(include "./windows/sys.yuck") +(include "./windows/music.yuck") diff --git a/roles/home/desktop/eww/windows/music.yuck b/roles/home/desktop/eww/windows/music.yuck index 91ee05f..f6cf02b 100644 --- a/roles/home/desktop/eww/windows/music.yuck +++ b/roles/home/desktop/eww/windows/music.yuck @@ -8,79 +8,12 @@ : "0px" } :y { gaps == "true" ? "-8px" : "2px" } - :height {128 + 16} + :width 512 :anchor { pos == "right" ? "bottom right" : "bottom center" } ) :stacking "fg" :windowtype "dock" :wm-ignore true - (box :class "main" - :orientation "h" - :spacing 8 - :space-evenly false - :height {128 + 16} - - (image - :path song-cover - :image-width 128 - :image-height 128 - ) - - (box :class "left" - :orientation "v" - :spacing 0 - :space-evenly true - :hexpand true - - (box :class "info" - :orientation "v" - :space-evenly false - :valign "center" - - (label :class "song-title" - :text {song.title} - :halign "start" - ) - (label :class "song-album" - :text {song.album} - :halign "start" - ) - (label :class "song-artist" - :text {song.artist} - :halign "start" - ) - ) - - (box :class "control" - :space-evenly false - :halign "center" - :valign "end" - - (button - :onclick `playerctl --player=cmus,firefox,%any previous` - "󰒮" - ) - (button - :onclick `playerctl --player=cmus,firefox,%any play-pause` - { song.status == "Playing" ? "󰏤" : "󰐊" } - ) - (button - :onclick `playerctl --player=cmus,firefox,%any next` - "󰒭" - ) - - ; Offset controls to center of screen - (box :width {128 + 8}) - ) - ) - ) -) - -(deflisten song-cover - `playerctl --player=cmus,firefox,%any -F metadata title | get-album-art` -) - -(deflisten song - `playerctl --player=cmus,firefox,%any -F metadata --format='{"title": "{{title}}", "album": "{{album}}", "artist": "{{artist}}", "status": "{{status}}"}'` + (music) ) \ No newline at end of file diff --git a/roles/home/desktop/eww/windows/net.yuck b/roles/home/desktop/eww/windows/net.yuck new file mode 100644 index 0000000..b1e9792 --- /dev/null +++ b/roles/home/desktop/eww/windows/net.yuck @@ -0,0 +1,38 @@ +(box :class "panel" + :orientation "v" + :spacing 8 + :space-evenly true + :height {100+16} + :width {(100+8)*3+8} + + (graph + :value {net.rx} + :thickness 2 + :time-range "30s" + :min 0 + :max 100 + :dynamic true + :line-style "round" + ) + + {"Download: " + round(net.rx/1024/1024, 2) + " MiB/s (peak: " + round(net.rx_peak/1024/1024, 2) + " MiB/s)"} + + (graph + :value {net.tx} + :thickness 2 + :time-range "30s" + :min 0 + :max 100 + :dynamic true + :line-style "round" + ) + + {"Upload: " + round(net.tx/1024/1024, 2) + " MiB/s (peak: " + round(net.tx_peak/1024/1024, 2) + " MiB/s)"} + ) + + + + +(deflisten net + `/home/c/net.sh` +) \ No newline at end of file diff --git a/roles/home/desktop/eww/windows/sys.yuck b/roles/home/desktop/eww/windows/sys.yuck new file mode 100644 index 0000000..a84e5aa --- /dev/null +++ b/roles/home/desktop/eww/windows/sys.yuck @@ -0,0 +1,84 @@ +(defwindow sys + ;:monitor "" + :monitor "DisplayPort-1" + :geometry (geometry + :x "0px" + :y "0px" + :anchor "center" + ) + :stacking "fg" + :windowtype "dialog" + :wm-ignore false + + (box :class "main" + :orientation "v" + :spacing 8 + :space-evenly false + + (bar) + + (box + :orientation "h" + :spacing 8 + :space-evenly false + + (box + :orientation "v" + :spacing 8 + :space-evenly false + + (disks) + + (box + :orientation "h" + :spacing 8 + :space-evenly false + + (zfs) + + (box :class "unpadded panel" + (image + :path "/home/c/Pictures/suit ryo.png" + :image-width 134 + ) + ) + ) + + (centerbox :class "panel" + (image + :path "/home/c/Pictures/car.png" + :image-height 13 + ) + + "silly zone :3" + + (image + :path "/home/c/Pictures/car.png" + :image-height 13 + ) + ) + + (memory) + (cpu) + ) + + (box + :orientation "v" + :spacing 8 + :space-evenly false + + (launcher) + + (box + :orientation "h" + :spacing 8 + :space-evenly false + + (box :hexpand true (music)) + + (volume) + ) + ) + ) + ) +) -- cgit v1.2.3