Files
NubNix/home-manager/20_eww/default.nix
2025-11-13 14:15:48 +00:00

546 lines
24 KiB
Nix

{ config, pkgs, ... }:
{
imports = [
./01_windows.nix
./02_scripts.nix
];
home.file.".config/eww/eww.yuck".text = ''
;;
;; °˖* ( )🍸 pewdiepie/archdaemon/dionysh
;; shhheersh
;; EWW HUD config, some stuff duct taped, some stuff glued
;; vers. 1.0-nix
;;
;; === Windows
(include "./windows/ascii/visualizer_window.yuck")
(include "windows/ascii/audio_status.yuck")
(include "windows/sys/four_boxes.yuck")
(include "windows/sys/workspace_window_text.yuck")
(include "windows/bar/cpu_ram_storage_bars.yuck")
(include "windows/sys/active_workspace.yuck")
(include "windows/sys/orange_workspace.yuck")
(include "windows/sys/power_cooling_header_text.yuck")
(include "windows/sys/power_mode_text.yuck")
(include "windows/sys/right_fan_data.yuck")
(include "windows/net/ascii_decor_frame.yuck")
(include "windows/net/net_bars.yuck")
(include "windows/net/right_internet_text.yuck")
(include "windows/misc/welcome_text.yuck")
;; === Variables
(defvar max_fan_rpm "5000")
(defvar ascii_decor1 "
- -
-- --
- -
-- --
- -
-- --
- -
-- --
- -
-- --
- -
")
;; === Workspace Status
(defpoll ws1 :interval "1s" "bash ~/.config/eww/scripts/sys/sys_workspace.sh | grep ws1= | cut -d= -f2 || echo 'null'")
(defpoll ws2 :interval "1s" "bash ~/.config/eww/scripts/sys/sys_workspace.sh | grep ws2= | cut -d= -f2 || echo 'null'")
(defpoll ws3 :interval "1s" "bash ~/.config/eww/scripts/sys/sys_workspace.sh | grep ws3= | cut -d= -f2 || echo 'null'")
(defpoll ws4 :interval "1s" "bash ~/.config/eww/scripts/sys/sys_workspace.sh | grep ws4= | cut -d= -f2 || echo 'null'")
(defpoll current_workspace :interval "0.5s" "hyprctl activeworkspace -j | jq -r '.id' || echo 'null'")
;; === Power & Voltage
(defpoll gpu_voltage :interval "5s" "bash ~/.config/eww/scripts/sys/sys_gpu_voltage.sh || echo 'null'")
(defpoll cpu_voltage :interval "5s" "bash ~/.config/eww/scripts/sys/sys_cpu_voltage.sh || echo 'null'")
(defpoll dc_voltage :interval "10s" "bash ~/.config/eww/scripts/sys/sys_dc_voltage.sh || echo 'null'")
(defpoll power_mode :interval "10s" "bash ~/.config/eww/scripts/sys/sys_power_mode.sh || echo 'null'")
(defpoll power_draw :interval "5s" "sensors | grep -m 1 'power1:' | awk '{print $2 \" \"$3}' || echo 'N/A'")
;; === CPU & GPU Stats
(defpoll cpu :interval "10m" "lscpu | grep 'Model name' | cut -d ':' -f2 | xargs || echo 'null'")
(defpoll gpu :interval "10m" "lspci | grep -i vga | cut -d ':' -f3 || echo 'null'")
(defpoll cpu_usage :interval "2s" "top -bn1 | grep 'Cpu(s)' | awk '{print int($2 + $4)}' || echo 'null'")
(defpoll cpu_bar :interval "2s" "bash ~/.config/eww/scripts/bar/bar_render.sh $(top -bn1 | grep 'Cpu(s)' | awk '{print int($2 + $4)}') || echo 'null'")
(defpoll gpu_usage :interval "2s" "nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits || echo 'N/A'")
(defpoll cpu_temp :interval "5s" "sensors | grep 'Tctl' | awk '{print $2}' || echo 'N/A'")
(defpoll gpu_temp :interval "5s" "nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits || echo 'N/A'")
;; Fan RPM values
(defpoll cpu_fan_rpm :interval "5s" "sensors | grep -i 'cpu_fan' | awk '{print $2 \" RPM\"}' || echo 'null'")
(defpoll gpu_fan_rpm :interval "5s" "sensors | grep -i 'gpu_fan' | awk '{print $2 \" RPM\"}' || echo 'null'")
;; Fan ASCII spinners
(defpoll cpu_fan_ascii :interval "0.2s" "bash ~/.config/eww/scripts/sys/sys_fan_spin.sh cpu || echo 'null'")
(defpoll gpu_fan_ascii :interval "0.2s" "bash ~/.config/eww/scripts/sys/sys_fan_spin.sh gpu || echo 'null'")
;; === Memory & Storage
(defpoll ram_info :interval "5s" "free -h | awk '/Mem:/ {print $3\" / \"$2}' || echo 'null'")
(defpoll ram_percent :interval "5s" "free | awk '/Mem:/ {printf \"%d\", $3/$2 * 100}' || echo 'null'")
(defpoll ram_bar :interval "5s" "bash ~/.config/eww/scripts/bar/bar_render.sh $(free | awk '/Mem:/ {printf(\"%.0f\", $3/$2 * 100)}') || echo 'null'")
(defpoll ram :interval "5s" "free -h | awk '/Mem:/ {print $3 \"/\" $2}' || echo 'null'")
(defpoll disk :interval "10s" "df -h / | awk 'NR==2 {print $3 \"/\" $2}' || echo 'null'")
(defpoll storage_percent :interval "5s" "df / | awk 'NR==2 {print int($3*100/$2)}' || echo 'null'")
(defpoll storage_bar :interval "5s" "bash ~/.config/eww/scripts/bar/bar_render.sh $(df / | awk 'NR==2 {print int($3*100/$2)}') || echo 'null'")
;; === Networking
(defpoll upload_speed :interval "3s" "bash ~/.config/eww/scripts/net/net_upload.sh || echo 'null'")
(defpoll upload_bar :interval "3s" "bash ~/.config/eww/scripts/net/net_upload.sh | xargs bash ~/.config/eww/scripts/net/net_upload_bar.sh || echo 'null'")
(defpoll download_speed :interval "3s" "bash ~/.config/eww/scripts/net/net_download.sh || echo 'null'")
(defpoll download_bar :interval "3s" "bash ~/.config/eww/scripts/net/net_download.sh | xargs bash ~/.config/eww/scripts/net/net_download_bar.sh || echo 'null'")
(defpoll ping_ms :interval "5s" "bash ~/.config/eww/scripts/net/net_ping.sh || echo 'null'")
(defpoll ping_bar :interval "5s" "bash ~/.config/eww/scripts/net/net_ping.sh | xargs bash ~/.config/eww/scripts/net/net_ping_latency.sh || echo 'null'")
(defpoll vpn_status_text :interval "5s" "bash ~/.config/eww/scripts/net/net_vpn_status.sh || echo 'null'")
(defpoll vpn_bar :interval "5s" "bash ~/.config/eww/scripts/net/net_vpn.sh | xargs bash ~/.config/eww/scripts/net/net_vpn_bar.sh || echo 'null'")
;; === Time & Date
(defpoll welcome_date :interval "30s" "date '+%A, %d %B %Y' || echo 'null'")
(defpoll weekday_str :interval "10s" "date +%A || echo 'null'")
(defpoll datetime_str :interval "10s" "date '+%H:%M %d %B %Y' || echo 'null'")
(defpoll weather_forecast :interval "30m" "curl -s 'wttr.in?format=%C+%t' || echo 'N/A'")
;; === System Info
(defpoll os :interval "10m" "uname -o || echo 'null'")
(defpoll desktop :interval "10m" "echo $XDG_CURRENT_DESKTOP || echo 'null'")
(defpoll wm :interval "10m" "echo $XDG_SESSION_TYPE || echo 'null'")
(defpoll shell :interval "10m" "basename $SHELL || echo 'null'")
(defpoll USER :interval "10m" "whoami || echo 'null'")
(defpoll install-age :interval "1h" "uptime -s | xargs -I{} date -d {} +%s | xargs -I{} echo $(( ($(date +%s) - {}) / 86400 ))' days' || echo 'null'")
(defpoll since-boot :interval "5s" "uptime -s || echo 'null'")
(defpoll uptime_full :interval "0.5s" "awk '{sec=int($1); ms=substr(sprintf(\"%.3f\", $1 - sec), 3); printf \"%02d:%02d:%02d.%s\\n\", sec/3600, (sec%3600)/60, sec%60, ms}' /proc/uptime || echo 'null'")
(defpoll centered-name :interval "10m" "echo $USER@$(hostname) || echo 'null'")
(defpoll battery_time :interval "10s"
"upower -i $(upower -e | grep BAT) 2>/dev/null | awk '
/state:/ { state = $2 }
/time to empty/ { print $4 \" \"$5 }
/time to full/ { full = $4 \" \"$5 }
END {
if (state == \"discharging\") exit 0;
else if (state == \"charging\") print \"Re-establishing\";
else print \"N/A\"
}' || echo 'null'")
;; === ASCII Widgets & Feeds ===
(defpoll visualizer_gen :interval "0.2s" "cat /tmp/visualizer.txt || echo 'null'")
(defpoll visualizer_content :interval "0.2s" "cat /tmp/visualizer.txt || echo '----------------------------standby--------------------------'")
(defpoll reactor_gen :interval "0.5s" "cat /tmp/reactor_frame.txt || echo 'null'")
(defpoll reactor_ascii :interval "0.5s" "cat /tmp/reactor_frame.txt || echo 'standby'")
(defpoll reactor_core_layout :interval "1s" "bash ~/.config/eww/scripts/ascii/ascii_core_layout.sh && cat /tmp/core_layout.txt || echo 'standby'")
(defpoll live_log_gen :interval "5s" "bash ~/.config/eww/scripts/ascii/ascii_live_log.sh || echo 'null'")
(defpoll live_text :interval "5s" "cat /tmp/live_text.txt || echo '--------------'")
(defpoll ascii_audio_status :interval "2s" "bash ~/.config/eww/scripts/audio/audio_cava_status.sh || echo 'null'")
;; === Widgets
(defwidget audio-visualizer []
(box :class "outer-frame"
(box :class "inner-frame"
(box :class "visualizer-container"
(label
:text visualizer_content
:markup true
:class "visualizer-text")))))
'';
home.file.".config/eww/eww.scss".text = ''
//
// °˖* ( )🍸 pewdiepie/archdaemon/dionysh
// shhheersh
// EWW HUD style
// vers. 1.0-nix
//
// Visualizer
.visualizer-container {
background-color: transparent;
}
.visualizer {
color: #08c0d0; // Nord Cyan
font-family: monospace;
background-color: transparent;
font-size: 9px;
}
.visualizer-container {
border-radius: 2px;
background: linear-gradient(to top, rgba(25,25,25,0.5), rgba(25,25,25,0));
padding: 4px;
}
.visualizer-text {
font-family: monospace;
font-size: 8px;
color: #56b6c2;
}
// Windows
window {
background-color: transparent;
box-shadow: none;
border: none;
}
.window {
background-color: transparent;
}
// Pixel ASCII
.pixel-container {
background-color: transparent;
padding: 2px;
}
.pixel-ascii {
font-family: monospace;
font-size: 6px;
color: #e5c07b;
background-color: transparent;
}
// Color Classes
.red_1 { color: #ff6c6b; }
.green_1 { color: #9cdef2; }
.blue_1 { color: #61afef; }
.yellow_1 { color: #9cdef2; }
.red_2 { color: #ff6c6b; }
.green_2 { color: #98c379; }
.blue_2 { color: #61afef; }
.yellow_2 { color: #fab387; }
// Frames
.outer-frame {
border: 2px solid #61afef;
border-radius: 3px;
padding: 4px;
background-color: transparent;
min-width: 350px;
}
.inner-frame {
border: 2px solid #56b6c2;
border-radius: 1px;
padding: 6px;
//background-color: rgba(25, 25, 25, 0.4);
}
.module-frame {
border: 2px solid #61afef;
border-radius: 2px;
margin-bottom: 5px;
margin-left: 5px;
margin-right: 5px;
margin-top: 5px;
min-height: 10px;
min-width: 140px;
}
.module-frame {
border: 2px solid #61afef;
border-radius: 2px;
margin: 5px;
padding: 1px;
min-height: 10px;
min-width: 140px;
background-image: linear-gradient(to left, rgba(0,0,0,0.4), rgba(0,0,0,0));
transition: all 0.2s ease-in-out;
}
.module-frame2 {
border: 2px solid #61afef;
border-radius: 2px;
margin: 5px;
padding: 1px;
min-height: 10px;
min-width: 10px;
background-image: linear-gradient(to left, rgba(0,0,0,0.4), rgba(0,0,0,0));
transition: all 0.2s ease-in-out;
}
.module-frame:hover {
border-color: #88c0d0;
background-image: linear-gradient(to left, rgba(136, 192, 208, 0.1), rgba(0, 0, 0, 0));
box-shadow: 0 0 8px rgba(136, 192, 208, 0.4);
}
// Labels & Stats
.label-primary {
font-size: 14px;
font-weight: bold;
color: #9cdef2;
}
.label-primary2 {
font-size: 9px;
font-weight: bold;
color: #9cdef2;
border: 2px solid #61afef;
border-radius: 2px;
margin-bottom: 50px;
margin-left: 27px;
margin-right: 4px;
margin-top: 5px;
padding: 1px;
min-height: 10px;
min-width: 50px;
border: none;
}
.label-secondary {
font-size: 8px;
color: #888;
}
.internet-clean-box {
background: transparent;
border: none;
box-shadow: none;
padding: 0;
}
.stats-label {
font-size: 10px;
font-weight: bold;
color: #56b6c2;
letter-spacing: 1px;
}
.stats-label2 {
font-size: 10px;
font-weight: bold;
color: #56b6c2;
letter-spacing: 1px;
}
.stats-label3 {
font-size: 10px;
margin-left: 87px;
font-weight: bold;
color: #56b6c2;
letter-spacing: 1px;
}
.stats-box {
border-radius: 12px;
min-height: 10px;
min-width: 100px;
}
// RAM & Bars
.ascii-bar-frame {
border: 1px solid #61afef;
border-radius: 4px;
margin: 4px;
padding: 4px;
min-width: 220px;
font-size: 10px;
}
.ram-bar {
font-size: 20px;
font-family: monospace;
color: #9cdef2;
letter-spacing: 4px;
padding: 2px 2px;
}
.ram-bar2 {
color: #9cdef2;
letter-spacing: 1.5px;
padding: 1px 1px;
font-size: 10px;
}
.ram-bar4 {
color: #9cdef2;
letter-spacing: 1.5px;
padding: 1px 1px;
font-size: 10px;
}
// Date & Time
.day-time-container {
padding: 1em;
border-radius: 12px;
border: 2px solid #88c0d0;
}
.weekday-container {
border: 2px solid #3b4252;
border-radius: 12px;
padding: 16px;
min-width: 200px;
}
.weekday-text {
font-size: 34px;
font-weight: bold;
color: #fab387;
}
.time-text {
font-size: 18px;
color: #a3be8c;
margin-top: 6px;
}
// Welcome
.welcome-box {
background-color: rgba(25,25,25,0.6);
border: 2px solid #88c0d0;
border-radius: 8px;
padding: 12px 20px;
margin-top: 10px;
}
.welcome-text { font-size: 18px; font-weight: bold; color: #9cdef2; }
.welcome-sub { font-size: 12px; color: #eceff4; margin-top: 4px; }
.welcome-label { color: #56b6c2; font-size: 12px; font-weight: bold; }
.welcome-value { color: #9cdef2; font-size: 12px; font-weight: bold; letter-spacing: 1px; }
// Shades & Animations
.shade2 { background: linear-gradient(to right, black 3px, rgba(19,19,19,0) 15%); }
.shade { background-color: #9cdef2; }
$window_visible: true;
.animated {
transition: opacity 0.4s ease, transform 0.4s ease;
opacity: 1;
}
@if not $window_visible {
.animated {
opacity: 0;
pointer-events: none;
}
}
// Fans
.fan-ascii {
font-family: "JetBrainsMono Nerd Font", monospace;
font-size: 15px;
color: #88c0d0;
letter-spacing: 3px;
transition: color 0.3s ease, transform 0.3s ease;
}
.fan-frame, .fan-frame2 {
padding: 0;
margin: 2px;
font-size: 10px;
min-height: 31.2px;
margin-bottom: 15px;
margin-top: 15px;
margin-left: 5px;
}
.fan-rpm { font-size: 10px; color: #9cdef2; }
.fan-rpm2 { font-size: 11px; min-width: 30px; color: #9cdef2; padding: 0; }
// Workspaces
.workspace-ascii {
font-family: monospace;
font-size: 14px;
color: #61afef;
}
.workspace-ascii-highlight {
font-family: monospace;
font-size: 20px;
font-weight: bold;
color: #9cdef2;
}
// Terminal & Reactor
.terminal-feed {
font-family: monospace;
font-size: 12px;
color: #08c0d0;
padding-left: 8px;
}
.reactor-ascii {
font-family: monospace;
font-size: 4px;
color: #9cdef2;
font-weight: bold;
min-height: 140px;
min-width: 280px;
}
.ascii-core-status {
font-family: monospace;
font-size: 10px;
border-radius: 0px;
color: #9cdef2;
}
.ascii-core-status2 {
font-family: monospace;
font-size: 14px;
padding: 4px;
border-radius: 0px;
color: #9cdef2;
}
.log-line {
font-family: monospace;
font-size: 10px;
color: #9cdef2;
padding: 4px;
}
.ascii-decor1 {
font-family: monospace;
font-size: 12px;
color: #9cdef2;
letter-spacing: 1px;
padding: 6px;
margin: 4px;
font-size: 10px;
}
// Info Panels
.data-row {
background-color: transparent;
padding: 2px;
}
.info-left {
background-color: #1e1e1e;
min-width: 1px;
border: 2px solid #61afef;
border-radius: 1px;
}
.info-left2 { min-height: 1px; }
.info-right-box {
background-color:#fab387;
min-height: 31.2px;
margin-bottom: 15px;
min-width: 26px;
}
.info-right-text {
font-size: 13px;
font-weight: bold;
color: #1e1e1e;
}
// Power
.power-label { font-size: 12px; color: #fab387; font-family: monospace; }
.power-label2 { font-size: 12px; color: #c4ecf0; font-family: monospace; }
.power-label3 { font-size: 12px; color: #61afef; font-family: monospace; }
.power-value { font-size: 10px; color: #9cdef2; font-family: monospace; margin: 5px; }
.power-header {
font-size: 10px;
font-weight: bold;
color:#56b6c2;
padding: 4px 8px;
min-width: 150px;
}
.power-header-alt {
font-size: 6px;
font-weight: bold;
color: #61afef;
padding: 4px 8px;
letter-spacing: 1px;
min-width: 15px;
}
'';
home.file.".config/eww/eww-state.yml".text = ''
window_visible: true
'';
}