bitzdots
gitlabLean Hyprland dotfiles with automatic matugen theming. Low-end optimized, full-stack auto-coloring, 26 Jinja2 templates. Rofi-powered menus, waybar modules, screenshot/recording, event-driven cache daemon.
clone
https://gitlab.com/bitzzdev/bitzdots.gitarchlinuxdotfileshyprlandhyprland-dotfileslow-endminimalricingwallustwaybarwayland
# Performance Optimizationbitzdots is designed for low-end hardware. This guide explains the optimizations and shows how to push further.## Current Baseline| Metric | Value ||--------|-------|| **Idle RAM (full stack)** | ~250-300MB || **Waybar CPU** | ~3.5% idle || **Hyprland RAM** | ~170MB || **swaync RAM** | ~85MB || **waybar RAM** | ~60MB |## Per-Component Optimization### Waybar Polling IntervalsAll intervals are tuned to balance responsiveness and CPU usage:| Module | Current Interval | CPU Impact ||--------|-----------------|------------|| Workspaces | 3s | Low (uses `hyprctl workspaces -j`, not clients) || Recording | 10s | Negligible || Network | 10s | Low || Clock | 30s | Negligible || CPU | 5s | Low (reads /proc/stat) || Memory | 10s | Negligible || Power Profiles | 30s | Negligible (D-Bus, no hanging) || Brightness | 5s | Low (timeout 2s on brightnessctl) || Notification | 10s | Negligible || Media | on-event | Only updates on player change |**To reduce CPU further**, increase intervals in `waybar/config.jsonc`:```jsonc"custom/workspaces": { "interval": 5 }, // was 3"custom/brightness": { "interval": 10 }, // was 5```### Media Player (playerctl)The media script kills stale `playerctl metadata --follow` processes on startup to prevent the well-known CPU leak where multiple instances accumulate.**If you don't use media controls**, remove `custom/media` from `modules-left` in waybar config.### Power ProfilesUses `busctl` directly on the UPower D-Bus interface instead of `powerprofilesctl`. The latter is known to randomly hang at 100% CPU when querying profiles. The D-Bus approach is instant and has zero CPU overhead.### Blur & Visual EffectsConfigurable in `hypr/appearance.lua`:```luablur = {enabled = true, -- set false to save ~20-40MB GPU memorysize = 5, -- lower = less memorypasses = 1, -- lower = less GPU work}```**For maximum performance:**```luablur = { enabled = false }shadow = { enabled = false }```### SwayNCNotification center RAM usage is ~85MB, largely from album art caching in the MPRIS widget.Optimization available in `swaync/config.json`:```jsonc"mpris": {"show-album-art": "notification", // "always" shows art in control center"image-size": 48 // lower = less memory (default 64)}```### Runcat (Python)The `custom/runcat` module uses a Python script with pyjson5 dependency (~23MB RSS for the Python process).**To disable:** Remove `custom/runcat` from `modules-left` in waybar config.## Aggressive Low-End ProfileFor systems with <2GB RAM or single-core CPUs:1. **Disable blur** in `hypr/appearance.lua`:```luablur = { enabled = false }```2. **Remove runcat** from waybar modules3. **Increase all polling intervals** in waybar config by 2-3x4. **Remove album art** from swaync:```jsonc"show-album-art": "never"```5. **Disable shadows** in Hyprland:```luashadow = { enabled = false }```6. **Use a lighter terminal** than kitty (e.g., foot or wezterm) — kitty uses ~200MB per window7. **Disable animations** in `hypr/animations.lua`:```luahl.config({ animations = { enabled = false } })```## CPU Optimization### Process Management- **Wallpaper cache daemon** runs at Nice=19 (lowest priority), IO scheduling class=idle- **All waybar scripts** are shell-based (no heavy interpreters except runcat's Python)- **`playerctl metadata --follow`** leak prevention via pkill on media.sh startup- **`workspaces.sh`** uses `hyprctl workspaces -j` instead of the heavier `hyprctl clients -j`### Active CPU Reduction Tips```bash# Check current CPU usage by componentps aux --sort=-%cpu | head -10# Find and kill stale playerctl processesps aux | grep playerctl# Check if powerprofilesctl is hangingpgrep -a powerprofilesctl```## Memory Optimization### Active Memory Reduction Tips```bash# Check current RAM usagefree -h# Per-process memoryps aux --sort=-%mem | head -15# SwayNC memory breakdownpmap $(pgrep -x swaync) | tail -5```### Swap RecommendationsOn low-RAM systems (<2GB):```bash# Increase swap for safetysudo fallocate -l 4G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile# Make permanentecho '/swapfile none swap defaults 0 0' | sudo tee -a /etc/fstab```## Benchmarking```bash# Measure full stack idle memoryfree -h# Measure per-component memoryfor p in Hyprland swaync waybar kitty; dops -o rss,comm -C "$p" | tail -1done# Measure CPU over 30 secondstop -b -n 30 -d 1 | grep -E 'Hyprland|waybar|swaync'```