dotfiles: update waybar, mpv, and launcher configs
- tweak Waybar layout/styling, add temp cycling + volume group - template mpv config and add jellyfin-mpv-shim defaults - add owlry config, Hyprland launcher bind, and agent notes
This commit is contained in:
@@ -36,3 +36,6 @@
|
||||
|
||||
AGENTS.md
|
||||
GEMINI.md
|
||||
|
||||
.config/hypr/AGENTS.md
|
||||
.config/waybar/AGENTS.md
|
||||
|
||||
36
AGENTS.md
36
AGENTS.md
@@ -9,6 +9,42 @@ This is a chezmoi dotfiles source tree. Key paths:
|
||||
- Host-specific variants use `##hostname.<name>` (e.g., `hyprpaper.conf##hostname.owlenlap01`).
|
||||
- `dot_config/waybar/waybar.wiki/` and `dot_config/hypr/hyprland.wiki/` are mirrored docs with `dot_git/` metadata; treat them as upstream mirrors unless intentionally updating.
|
||||
|
||||
## Chezmoi Config (chezmoi.toml)
|
||||
- Source of truth: `~/.config/chezmoi/chezmoi.toml` (not tracked here).
|
||||
- Tag keys are stable across machines; templates must access them via `.chezmoi.config.data.tags.<tag>`.
|
||||
- `microphone` is only present when `pipewire` is true; guard access with the tag.
|
||||
- `data.monitors` is an array and the number of entries varies by machine.
|
||||
- Reference structure (current machine):
|
||||
```
|
||||
[data]
|
||||
tags = { desktop = true, laptop = false, hyprland = true, waybar = true, pipewire = true, dev = true, entertainment = true, cs2 = true, bluetooth = false }
|
||||
microphone = "alsa_input.usb-DCMT_Technology_USB_Condenser_Microphone_214b206000000178-00.mono-fallback"
|
||||
|
||||
# --- Primary Monitor ---
|
||||
[[data.monitors]]
|
||||
name = "DP-1"
|
||||
primary = true
|
||||
width = 1920
|
||||
height = 1080
|
||||
refresh_rate = 60
|
||||
position = "0x0"
|
||||
scale = 1.0
|
||||
workspaces = [1, 2, 3, 4, 5]
|
||||
wallpaper = "/home/mpuchstein/Pictures/wallpaper/ki/1920x1080/rosepinesuccubus11.png"
|
||||
|
||||
# --- Secondary Monitor ---
|
||||
[[data.monitors]]
|
||||
name = "DP-2"
|
||||
width = 1920
|
||||
height = 1080
|
||||
refresh_rate = 144
|
||||
position = "1920x0"
|
||||
scale = 1.0
|
||||
vrr = 1
|
||||
workspaces = [6, 7, 8, 9, 10]
|
||||
wallpaper = "/home/mpuchstein/Pictures/wallpaper/ki/1920x1080/witch_autumn.png"
|
||||
```
|
||||
|
||||
## Build, Test, and Development Commands
|
||||
There is no build system; apply and verify changes with chezmoi:
|
||||
- `chezmoi diff` preview pending changes.
|
||||
|
||||
75
dot_config/hypr/AGENTS.md
Normal file
75
dot_config/hypr/AGENTS.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# Repository Guidelines
|
||||
|
||||
## Project Structure & Module Organization
|
||||
This directory is the Hyprland portion of a chezmoi dotfiles source tree. Key paths:
|
||||
- `dot_config/` maps to `~/.config/` (e.g., `dot_config/hypr/`, `dot_config/nvim/`, `dot_config/waybar/`).
|
||||
- `dot_local/` maps to `~/.local/` (scripts, data, and app state).
|
||||
- `dot_profile.tmpl` renders to `~/.profile`.
|
||||
- `.chezmoiscripts/` holds chezmoi hooks such as `run_onchange_*`.
|
||||
- Host-specific variants use `##hostname.<name>` (e.g., `hyprpaper.conf##hostname.owlenlap01`).
|
||||
- `dot_config/hypr/hyprland.wiki/` is a mirrored docs subtree; treat it as upstream unless intentionally updating.
|
||||
|
||||
Hyprland configuration lives here in `hyprland.conf`, with modular includes under `hyprland.d/` and related configs like `hypridle.conf`, `hyprlock.conf.tmpl`, and `hyprpaper.conf.tmpl`.
|
||||
|
||||
## Chezmoi Config (chezmoi.toml)
|
||||
- Source of truth: `~/.config/chezmoi/chezmoi.toml` (not tracked here).
|
||||
- Tag keys are stable across machines; templates must access them via `.chezmoi.config.data.tags.<tag>`.
|
||||
- `microphone` is only present when `pipewire` is true; guard access with the tag.
|
||||
- `data.monitors` is an array and the number of entries varies by machine.
|
||||
- Reference structure (current machine):
|
||||
```
|
||||
[data]
|
||||
tags = { desktop = true, laptop = false, hyprland = true, waybar = true, pipewire = true, dev = true, entertainment = true, cs2 = true, bluetooth = false }
|
||||
microphone = "alsa_input.usb-DCMT_Technology_USB_Condenser_Microphone_214b206000000178-00.mono-fallback"
|
||||
|
||||
# --- Primary Monitor ---
|
||||
[[data.monitors]]
|
||||
name = "DP-1"
|
||||
primary = true
|
||||
width = 1920
|
||||
height = 1080
|
||||
refresh_rate = 60
|
||||
position = "0x0"
|
||||
scale = 1.0
|
||||
workspaces = [1, 2, 3, 4, 5]
|
||||
wallpaper = "/home/mpuchstein/Pictures/wallpaper/ki/1920x1080/rosepinesuccubus11.png"
|
||||
|
||||
# --- Secondary Monitor ---
|
||||
[[data.monitors]]
|
||||
name = "DP-2"
|
||||
width = 1920
|
||||
height = 1080
|
||||
refresh_rate = 144
|
||||
position = "1920x0"
|
||||
scale = 1.0
|
||||
vrr = 1
|
||||
workspaces = [6, 7, 8, 9, 10]
|
||||
wallpaper = "/home/mpuchstein/Pictures/wallpaper/ki/1920x1080/witch_autumn.png"
|
||||
```
|
||||
|
||||
## Build, Test, and Development Commands
|
||||
There is no build system. Validate changes via chezmoi:
|
||||
- `chezmoi diff` shows pending changes between source and target files.
|
||||
- `chezmoi apply` renders templates and applies updates to `$HOME`.
|
||||
- `chezmoi status` summarizes managed file state.
|
||||
|
||||
After applying, reload Hyprland (e.g., `hyprctl reload`) or restart related tools to verify behavior.
|
||||
|
||||
## Coding Style & Naming Conventions
|
||||
- Match existing formatting; avoid reflowing unrelated blocks.
|
||||
- Use chezmoi prefixes: `dot_` for dotfiles, `executable_` for executables, `symlink_` for symlinks, `private_` for restricted files, and `.tmpl` for Go templates.
|
||||
- Keep templates minimal and use `##hostname.<name>` for host-specific variants.
|
||||
|
||||
## Testing Guidelines
|
||||
No automated tests are defined. Validate by:
|
||||
- Running `chezmoi diff` and `chezmoi apply`.
|
||||
- Smoke-testing the affected tool (e.g., reload Hyprland, start Waybar).
|
||||
|
||||
## Commit & Pull Request Guidelines
|
||||
No established Git history. Use concise, imperative commit subjects with optional scope (e.g., `hypr: adjust keybinds`). For PRs, include:
|
||||
- A clear summary of changes.
|
||||
- Affected paths (e.g., `dot_config/hypr/hyprland.conf`).
|
||||
- Screenshots for visible UI changes.
|
||||
|
||||
## Agent-Specific Notes
|
||||
When editing mirrored docs under `dot_config/hypr/hyprland.wiki/`, treat them as upstream mirrors unless explicitly asked to update.
|
||||
@@ -9,7 +9,7 @@ $term_tmux = uwsm app -- kitty tmux
|
||||
$term_tmux_append = uwsm app -- kitty tmux a
|
||||
$filemanager = uwsm app -- nautilus
|
||||
$launcher = uwsm app -- sherlock
|
||||
$powermenu = uwsm app -- sherlock -sm pm
|
||||
$launcheralt = uwsm app -- owlry
|
||||
$clipman = uwsm app -- sherlock-clp | sherlock | cliphist decode | wl-copy
|
||||
$browser = uwsm app -- firefox
|
||||
$browserprv = uwsm app -- firefox --private-window
|
||||
@@ -40,7 +40,7 @@ bind = $mainMod CTRL, W, exec, $altbrowser
|
||||
bind = $mainMod Shift, E, exec, $editor
|
||||
bind = $mainMod CTRL, E, exec, $alteditor
|
||||
bind = $mainMod, X, exec, $launcher
|
||||
bind = $mainMod, B, exec, $powermenu
|
||||
bind = $mainMod SHIFT, X, exec, $launcheralt
|
||||
bind = $mainMod, C, exec, $clipman
|
||||
bind = $mainMod, Return, exec, $terminal_backup
|
||||
bind = $mainMod SHIFT, Return, exec, $term_tmux
|
||||
|
||||
0
dot_config/jellyfin-mpv-shim/empty_input.conf
Normal file
0
dot_config/jellyfin-mpv-shim/empty_input.conf
Normal file
0
dot_config/jellyfin-mpv-shim/fonts/.keep
Normal file
0
dot_config/jellyfin-mpv-shim/fonts/.keep
Normal file
24
dot_config/jellyfin-mpv-shim/mpv.conf.tmpl
Normal file
24
dot_config/jellyfin-mpv-shim/mpv.conf.tmpl
Normal file
@@ -0,0 +1,24 @@
|
||||
# --- Video & Quality ---
|
||||
{{- if .chezmoi.config.data.tags.desktop }}
|
||||
profile=high-quality
|
||||
vo=gpu-next
|
||||
gpu-api=vulkan
|
||||
hwdec=vaapi
|
||||
{{- else }}
|
||||
vo=gpu-next
|
||||
hwdec=auto-safe
|
||||
{{- end }}
|
||||
|
||||
# --- Motion ---
|
||||
video-sync=display-resample
|
||||
interpolation=yes
|
||||
tscale=oversample
|
||||
|
||||
# --- Window ---
|
||||
geometry=50%:50%
|
||||
|
||||
# --- Screenshots ---
|
||||
screenshot-format=png
|
||||
screenshot-high-bit-depth=yes
|
||||
screenshot-png-compression=7
|
||||
screenshot-directory=~/Pictures/Screenshots
|
||||
0
dot_config/jellyfin-mpv-shim/scripts/.keep
Normal file
0
dot_config/jellyfin-mpv-shim/scripts/.keep
Normal file
@@ -1,150 +0,0 @@
|
||||
#
|
||||
# Example mpv configuration file
|
||||
#
|
||||
# Warning:
|
||||
#
|
||||
# The commented example options usually do _not_ set the default values. Call
|
||||
# mpv with --list-options to see the default values for most options. There is
|
||||
# no builtin or example mpv.conf with all the defaults.
|
||||
#
|
||||
#
|
||||
# Configuration files are read system-wide from /etc/mpv or /usr/local/etc/mpv,
|
||||
# and per-user from ~/.config/mpv, where per-user settings override
|
||||
# system-wide settings, all of which are overridden by the command line.
|
||||
#
|
||||
# Configuration file settings and the command line options use the same
|
||||
# underlying mechanisms. Most options can be put into the configuration file
|
||||
# by dropping the preceding '--'. See the man page for a complete list of
|
||||
# options.
|
||||
#
|
||||
# Lines starting with '#' are comments and are ignored.
|
||||
#
|
||||
# See the CONFIGURATION FILES section in the man page
|
||||
# for a detailed description of the syntax.
|
||||
#
|
||||
# Profiles should be placed at the bottom of the configuration file to ensure
|
||||
# that settings wanted as defaults are not restricted to specific profiles.
|
||||
|
||||
##################
|
||||
# video settings #
|
||||
##################
|
||||
|
||||
# Start in fullscreen mode by default.
|
||||
#fs=yes
|
||||
|
||||
# force starting with centered window
|
||||
#geometry=50%:50%
|
||||
|
||||
# don't allow a new window to have a size larger than 90% of the screen size
|
||||
#autofit-larger=90%x90%
|
||||
|
||||
# Do not close the window on exit.
|
||||
#keep-open=yes
|
||||
|
||||
# Do not wait with showing the video window until it has loaded. (This will
|
||||
# resize the window once video is loaded. Also always shows a window with
|
||||
# audio.)
|
||||
#force-window=immediate
|
||||
|
||||
# Disable the On Screen Controller (OSC).
|
||||
#osc=no
|
||||
|
||||
# Keep the player window on top of all other windows.
|
||||
#ontop=yes
|
||||
|
||||
# Specify fast video rendering preset (for --vo=<gpu|gpu-next> only)
|
||||
# Recommended for mobile devices or older hardware with limited processing power
|
||||
#profile=fast
|
||||
|
||||
# Specify high quality video rendering preset (for --vo=<gpu|gpu-next> only)
|
||||
# Offers superior image fidelity and visual quality for an enhanced viewing
|
||||
# experience on capable hardware
|
||||
#profile=high-quality
|
||||
|
||||
# Force video to lock on the display's refresh rate, and change video and audio
|
||||
# speed to some degree to ensure synchronous playback - can cause problems
|
||||
# with some drivers and desktop environments.
|
||||
#video-sync=display-resample
|
||||
|
||||
# Enable hardware decoding if available. Often, this does not work with all
|
||||
# video outputs, but should work well with default settings on most systems.
|
||||
# If performance or energy usage is an issue, forcing the vdpau or vaapi VOs
|
||||
# may or may not help.
|
||||
hwdec=auto
|
||||
|
||||
##################
|
||||
# audio settings #
|
||||
##################
|
||||
|
||||
# Specify default audio device. You can list devices with: --audio-device=help
|
||||
# The option takes the device string (the stuff between the '...').
|
||||
#audio-device=alsa/default
|
||||
|
||||
# Do not filter audio to keep pitch when changing playback speed.
|
||||
#audio-pitch-correction=no
|
||||
|
||||
# Output 5.1 audio natively, and upmix/downmix audio with a different format.
|
||||
#audio-channels=5.1
|
||||
# Disable any automatic remix, _if_ the audio output accepts the audio format.
|
||||
# of the currently played file. See caveats mentioned in the manpage.
|
||||
# (The default is "auto-safe", see manpage.)
|
||||
#audio-channels=auto
|
||||
|
||||
##################
|
||||
# other settings #
|
||||
##################
|
||||
|
||||
# Pretend to be a web browser. Might fix playback with some streaming sites,
|
||||
# but also will break with shoutcast streams.
|
||||
#user-agent="Mozilla/5.0"
|
||||
|
||||
# cache settings
|
||||
#
|
||||
# Use a large seekable RAM cache even for local input.
|
||||
#cache=yes
|
||||
#
|
||||
# Use extra large RAM cache (needs cache=yes to make it useful).
|
||||
#demuxer-max-bytes=500M
|
||||
#demuxer-max-back-bytes=100M
|
||||
#
|
||||
# Disable the behavior that the player will pause if the cache goes below a
|
||||
# certain fill size.
|
||||
#cache-pause=no
|
||||
#
|
||||
# Store cache payload on the hard disk instead of in RAM. (This may negatively
|
||||
# impact performance unless used for slow input such as network.)
|
||||
#cache-dir=~/.cache/
|
||||
#cache-on-disk=yes
|
||||
|
||||
# Display English subtitles if available.
|
||||
#slang=en
|
||||
|
||||
# Play Finnish audio if available, fall back to English otherwise.
|
||||
#alang=fi,en
|
||||
|
||||
# Change subtitle encoding. For Arabic subtitles use 'cp1256'.
|
||||
# If the file seems to be valid UTF-8, prefer UTF-8.
|
||||
# (You can add '+' in front of the codepage to force it.)
|
||||
#sub-codepage=cp1256
|
||||
|
||||
# You can also include other configuration files.
|
||||
#include=/path/to/the/file/you/want/to/include
|
||||
|
||||
############
|
||||
# Profiles #
|
||||
############
|
||||
|
||||
# The options declared as part of profiles override global default settings,
|
||||
# but only take effect when the profile is active.
|
||||
|
||||
# The following profile can be enabled on the command line with: --profile=eye-cancer
|
||||
|
||||
#[eye-cancer]
|
||||
#sharpen=5
|
||||
|
||||
# uosc provides seeking & volume indicators (via flash-timeline and flash-volume commands)
|
||||
# if you decide to use them, you don't need osd-bar
|
||||
osd-bar=no
|
||||
|
||||
# uosc will draw its own window controls and border if you disable window border
|
||||
border=no
|
||||
40
dot_config/mpv/mpv.conf.tmpl
Normal file
40
dot_config/mpv/mpv.conf.tmpl
Normal file
@@ -0,0 +1,40 @@
|
||||
# --- General ---
|
||||
keep-open=yes
|
||||
save-position-on-quit=yes
|
||||
geometry=50%:50%
|
||||
|
||||
# --- UI (uosc support) ---
|
||||
osd-bar=no
|
||||
border=no
|
||||
|
||||
# --- Video ---
|
||||
# Smooth motion handling
|
||||
video-sync=display-resample
|
||||
interpolation=yes
|
||||
tscale=oversample
|
||||
|
||||
# --- Hardware & Quality (Chezmoi) ---
|
||||
{{- if .chezmoi.config.data.tags.desktop }}
|
||||
profile=high-quality
|
||||
vo=gpu-next
|
||||
gpu-api=vulkan
|
||||
hwdec=vaapi
|
||||
{{- else }}
|
||||
vo=gpu-next
|
||||
hwdec=auto-safe
|
||||
{{- end }}
|
||||
|
||||
# --- Languages ---
|
||||
# English, German, French, Japanese
|
||||
alang=eng,en,deu,de,fra,fr,jpn,jp
|
||||
slang=eng,en,deu,de,fra,fr
|
||||
|
||||
# --- Subtitles ---
|
||||
sub-auto=fuzzy
|
||||
sub-font-size=48
|
||||
|
||||
# --- Screenshots ---
|
||||
screenshot-format=png
|
||||
screenshot-high-bit-depth=yes
|
||||
screenshot-png-compression=7
|
||||
screenshot-directory=~/Pictures/Screenshots
|
||||
77
dot_config/owlry/config.toml
Normal file
77
dot_config/owlry/config.toml
Normal file
@@ -0,0 +1,77 @@
|
||||
# Owlry Configuration
|
||||
# Copy to ~/.config/owlry/config.toml
|
||||
|
||||
[general]
|
||||
show_icons = true
|
||||
max_results = 10
|
||||
terminal_command = "kitty" # Auto-detected if not set
|
||||
|
||||
# Launch wrapper for app execution (auto-detected if not set)
|
||||
# Examples:
|
||||
# "uwsm app --" # For uwsm sessions
|
||||
# "hyprctl dispatch exec --" # For Hyprland
|
||||
# "" # Direct execution
|
||||
# launch_wrapper = "uwsm app --"
|
||||
|
||||
[appearance]
|
||||
width = 600
|
||||
height = 400
|
||||
font_size = 14
|
||||
border_radius = 12
|
||||
|
||||
# Theme: "owl" for built-in dark theme, or leave unset for GTK default
|
||||
theme = "owl"
|
||||
|
||||
# Individual color overrides (CSS color values)
|
||||
# [appearance.colors]
|
||||
# background = "#1a1b26"
|
||||
# background_secondary = "#24283b"
|
||||
# border = "#414868"
|
||||
# text = "#c0caf5"
|
||||
# text_secondary = "#565f89"
|
||||
# accent = "#7aa2f7"
|
||||
# accent_bright = "#89b4fa"
|
||||
# badge_app = "#9ece6a"
|
||||
# badge_calc = "#e0af68"
|
||||
# badge_cmd = "#7aa2f7"
|
||||
# badge_dmenu = "#bb9af7"
|
||||
# badge_uuctl = "#f7768e"
|
||||
|
||||
[providers]
|
||||
applications = true
|
||||
commands = true
|
||||
uuctl = true
|
||||
|
||||
# Calculator provider (type "= 5+3" or "calc 5+3")
|
||||
calculator = true
|
||||
|
||||
# Frecency: boost frequently/recently used items in search results
|
||||
frecency = true
|
||||
frecency_weight = 0.3 # 0.0 = disabled, 1.0 = strong boost
|
||||
|
||||
# Web search provider (type "? query" or "web query")
|
||||
websearch = true
|
||||
# Options: google, duckduckgo, bing, startpage, searxng, brave, ecosia
|
||||
# Or custom URL with {query} placeholder, e.g. "https://search.example.com/?q={query}"
|
||||
search_engine = "duckduckgo"
|
||||
|
||||
# System commands (shutdown, reboot, lock, suspend, hibernate, logout, BIOS)
|
||||
system = true
|
||||
|
||||
# SSH connections from ~/.ssh/config
|
||||
ssh = true
|
||||
|
||||
# Clipboard history (requires cliphist)
|
||||
clipboard = true
|
||||
|
||||
# Browser bookmarks (Chrome, Chromium, Brave, Edge, Vivaldi)
|
||||
bookmarks = true
|
||||
|
||||
# Emoji picker (copies to clipboard)
|
||||
emoji = true
|
||||
|
||||
# Custom scripts from ~/.config/owlry/scripts/
|
||||
scripts = true
|
||||
|
||||
# File search (requires fd or locate, trigger with "/ pattern" or "find pattern")
|
||||
files = true
|
||||
0
dot_config/owlry/scripts/.keep
Normal file
0
dot_config/owlry/scripts/.keep
Normal file
70
dot_config/waybar/AGENTS.md
Normal file
70
dot_config/waybar/AGENTS.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# Repository Guidelines
|
||||
|
||||
## Project Structure & Module Organization
|
||||
This is a chezmoi dotfiles source tree scoped to Waybar. The current directory maps to `~/.config/waybar/` on apply.
|
||||
- `dot_config/waybar/` contains Waybar config, style, and module files.
|
||||
- `dot_config/waybar/waybar.wiki/` is a mirrored upstream doc set with `dot_git/` metadata; avoid editing unless intentionally updating the mirror.
|
||||
- Host-specific variants use `##hostname.<name>` suffixes (e.g., `config##hostname.laptop`).
|
||||
|
||||
## Chezmoi Config (chezmoi.toml)
|
||||
- Source of truth: `~/.config/chezmoi/chezmoi.toml` (not tracked here).
|
||||
- Tag keys are stable across machines; templates must access them via `.chezmoi.config.data.tags.<tag>`.
|
||||
- `microphone` is only present when `pipewire` is true; guard access with the tag.
|
||||
- `data.monitors` is an array and the number of entries varies by machine.
|
||||
- Reference structure (current machine):
|
||||
```
|
||||
[data]
|
||||
tags = { desktop = true, laptop = false, hyprland = true, waybar = true, pipewire = true, dev = true, entertainment = true, cs2 = true, bluetooth = false }
|
||||
microphone = "alsa_input.usb-DCMT_Technology_USB_Condenser_Microphone_214b206000000178-00.mono-fallback"
|
||||
|
||||
# --- Primary Monitor ---
|
||||
[[data.monitors]]
|
||||
name = "DP-1"
|
||||
primary = true
|
||||
width = 1920
|
||||
height = 1080
|
||||
refresh_rate = 60
|
||||
position = "0x0"
|
||||
scale = 1.0
|
||||
workspaces = [1, 2, 3, 4, 5]
|
||||
wallpaper = "/home/mpuchstein/Pictures/wallpaper/ki/1920x1080/rosepinesuccubus11.png"
|
||||
|
||||
# --- Secondary Monitor ---
|
||||
[[data.monitors]]
|
||||
name = "DP-2"
|
||||
width = 1920
|
||||
height = 1080
|
||||
refresh_rate = 144
|
||||
position = "1920x0"
|
||||
scale = 1.0
|
||||
vrr = 1
|
||||
workspaces = [6, 7, 8, 9, 10]
|
||||
wallpaper = "/home/mpuchstein/Pictures/wallpaper/ki/1920x1080/witch_autumn.png"
|
||||
```
|
||||
|
||||
## Build, Test, and Development Commands
|
||||
There is no build system. Use chezmoi to preview and apply changes:
|
||||
- `chezmoi diff` preview pending changes.
|
||||
- `chezmoi apply` render and apply files to `$HOME`.
|
||||
- `chezmoi status` show managed file status.
|
||||
After applying, restart Waybar to validate changes.
|
||||
|
||||
## Coding Style & Naming Conventions
|
||||
- Match existing file formatting; avoid reflowing unrelated sections.
|
||||
- Prefer ASCII unless the file already uses Unicode.
|
||||
- Use chezmoi naming conventions: `dot_` for dotfiles, `executable_` for executables, `private_` for restricted files, `.tmpl` for Go templates, `symlink_` for symlinks.
|
||||
- Keep module names descriptive and aligned with Waybar’s config keys.
|
||||
|
||||
## Testing Guidelines
|
||||
No automated tests are defined. Validate by:
|
||||
- Running `chezmoi diff` and `chezmoi apply`.
|
||||
- Smoke-testing Waybar (reload or restart) to confirm layout and modules.
|
||||
|
||||
## Commit & Pull Request Guidelines
|
||||
The repository has no established Git history. Use short, imperative commit subjects and include a scope when helpful (e.g., `waybar: tweak clock format`). For pull requests, include:
|
||||
- A concise summary of changes.
|
||||
- Affected paths (e.g., `dot_config/waybar/config`).
|
||||
- Screenshots for visual/UI changes.
|
||||
|
||||
## Notes for Contributors
|
||||
Avoid editing unrelated dotfiles unless requested. If you touch mirrored docs or host-specific files, call it out explicitly in your summary.
|
||||
@@ -8,10 +8,10 @@
|
||||
"layer": "top",
|
||||
"position": "left",
|
||||
"output": "{{ $primary_output }}",
|
||||
"width": 95,
|
||||
"spacing": 6,
|
||||
"margin-top": 6,
|
||||
"margin-bottom": 6,
|
||||
"width": 90,
|
||||
"spacing": 4,
|
||||
"margin-top": 0,
|
||||
"margin-bottom": 0,
|
||||
|
||||
"modules-left": [
|
||||
"clock",
|
||||
@@ -28,8 +28,7 @@
|
||||
"memory",
|
||||
"disk#root",
|
||||
"network",
|
||||
"temperature#cpu",
|
||||
"temperature#gpu_hotspot"
|
||||
"group/temps"
|
||||
],
|
||||
|
||||
"modules-right": [
|
||||
@@ -37,17 +36,20 @@
|
||||
"custom/hyprsunset",
|
||||
"gamemode",
|
||||
"privacy",
|
||||
"wireplumber#source",
|
||||
"wireplumber#sink",
|
||||
"group/volume",
|
||||
"tray",
|
||||
{{- if .chezmoi.config.data.tags.bluetooth }}
|
||||
"bluetooth",
|
||||
{{- end }}
|
||||
{{- if .chezmoi.config.data.tags.laptop }}
|
||||
"power-profiles-daemon",
|
||||
"battery"
|
||||
{{- end }}
|
||||
],
|
||||
|
||||
"hyprland/window": {
|
||||
"format": "{title}",
|
||||
"max-length": 28,
|
||||
"max-length": 18,
|
||||
"icon": true,
|
||||
"icon-size": 18,
|
||||
"separate-outputs": false
|
||||
@@ -86,8 +88,8 @@
|
||||
|
||||
"network": {
|
||||
"interval": 3,
|
||||
"format-wifi": " {essid}%",
|
||||
"format-ethernet": " {ifname}",
|
||||
"format-wifi": " {signalStrength}%",
|
||||
"format-ethernet": "",
|
||||
"tooltip-format-wifi": "{signalStrength}\n {bandwidthUpBytes}\n {bandwidthDownBytes}",
|
||||
"tooltip-format-ethernet": " {bandwidthUpBytes}\n {bandwidthDownBytes}",
|
||||
"format-disconnected": ""
|
||||
@@ -197,23 +199,26 @@
|
||||
|
||||
|
||||
"group/temps": {
|
||||
"orientation": "horizontal",
|
||||
"orientation": "vertical",
|
||||
"drawer": {
|
||||
"transition-duration": 300,
|
||||
"transition-left-to-right": true,
|
||||
"click-to-reveal": true
|
||||
},
|
||||
"modules": [
|
||||
"custom/temps-wrap", // leader, always visible
|
||||
"custom/temps-cycle", // leader, always visible
|
||||
"temperature#cpu",
|
||||
"temperature#gpu_hotspot",
|
||||
"temperature#nvme"
|
||||
]
|
||||
},
|
||||
|
||||
"custom/temps-wrap": {
|
||||
"format": "",
|
||||
"tooltip-format": "Temperatures"
|
||||
"custom/temps-cycle": {
|
||||
"exec": "$HOME/.config/waybar/scripts/temps-cycle.sh",
|
||||
"return-type": "json",
|
||||
"interval": 3,
|
||||
"format": "{text}",
|
||||
"tooltip": true
|
||||
},
|
||||
|
||||
"temperature#cpu": {
|
||||
@@ -221,8 +226,8 @@
|
||||
"input-filename": "temp1_input",
|
||||
"interval": 5,
|
||||
"critical-threshold": 85,
|
||||
"format": " CPU: {temperatureC}°C",
|
||||
"format-critical": " CPU: {temperatureC}°C ",
|
||||
"format": " {temperatureC}°C",
|
||||
"format-critical": " {temperatureC}°C ",
|
||||
"tooltip-format": "CPU Tctl: {temperatureC}°C"
|
||||
},
|
||||
|
||||
@@ -241,8 +246,8 @@
|
||||
"input-filename": "temp2_input",
|
||||
"interval": 5,
|
||||
"critical-threshold": 110,
|
||||
"format": " GPU: {temperatureC}°C",
|
||||
"format-critical": " GPU: {temperatureC}°C ",
|
||||
"format": " {temperatureC}°C",
|
||||
"format-critical": " {temperatureC}°C ",
|
||||
"tooltip-format": "GPU junction: {temperatureC}°C"
|
||||
},
|
||||
|
||||
@@ -297,5 +302,13 @@
|
||||
"tooltip": true,
|
||||
"format": "{text}",
|
||||
"on-click": "kitty --hold alhp.utils -j"
|
||||
},
|
||||
|
||||
"group/volume": {
|
||||
"orientation": "vertical",
|
||||
"modules": [
|
||||
"wireplumber#source",
|
||||
"wireplumber#sink"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
96
dot_config/waybar/scripts/executable_temps-cycle.sh
Normal file
96
dot_config/waybar/scripts/executable_temps-cycle.sh
Normal file
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
cycle_seconds=3
|
||||
|
||||
resolve_hwmon_file() {
|
||||
local base="$1" file="$2" sub
|
||||
if [[ -r "$base/$file" ]]; then
|
||||
printf '%s' "$base/$file"
|
||||
return 0
|
||||
fi
|
||||
if [[ -d "$base" ]]; then
|
||||
for sub in "$base"/hwmon*; do
|
||||
if [[ -r "$sub/$file" ]]; then
|
||||
printf '%s' "$sub/$file"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
resolve_hwmon_by_name() {
|
||||
local target="$1" file="$2" h
|
||||
[[ -n "$target" ]] || return 1
|
||||
for h in /sys/class/hwmon/hwmon*; do
|
||||
[[ -r "$h/name" ]] || continue
|
||||
if [[ "$(cat "$h/name")" == "$target" && -r "$h/$file" ]]; then
|
||||
printf '%s' "$h/$file"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
read_temp() {
|
||||
local base="$1" file="$2" fallback="$3" raw path
|
||||
if path=$(resolve_hwmon_file "$base" "$file"); then
|
||||
:
|
||||
elif path=$(resolve_hwmon_by_name "$fallback" "$file"); then
|
||||
:
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
raw=$(<"$path")
|
||||
if [[ "$raw" =~ ^[0-9]+$ ]]; then
|
||||
printf '%s' "$((raw / 1000))"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
cpu_path="/sys/devices/pci0000:00/0000:00:18.3/hwmon"
|
||||
gpu_path="/sys/devices/pci0000:00/0000:00:01.1/0000:10:00.0/0000:11:00.0/0000:12:00.0/hwmon"
|
||||
nvme_path="/sys/devices/pci0000:00/0000:00:02.2/0000:23:00.0/nvme/nvme0/hwmon"
|
||||
|
||||
labels=()
|
||||
icons=()
|
||||
values=()
|
||||
|
||||
if temp=$(read_temp "$cpu_path" "temp1_input" "k10temp"); then
|
||||
labels+=("CPU")
|
||||
icons+=("")
|
||||
values+=("$temp")
|
||||
fi
|
||||
|
||||
if temp=$(read_temp "$gpu_path" "temp2_input" "amdgpu"); then
|
||||
labels+=("GPU")
|
||||
icons+=("")
|
||||
values+=("$temp")
|
||||
fi
|
||||
|
||||
if temp=$(read_temp "$nvme_path" "temp1_input" "nvme"); then
|
||||
labels+=("NVMe")
|
||||
icons+=("")
|
||||
values+=("$temp")
|
||||
fi
|
||||
|
||||
count=${#values[@]}
|
||||
if (( count == 0 )); then
|
||||
printf '{"text":" --","tooltip":"No temp sensors found"}\n'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
idx=$(( ($(date +%s) / cycle_seconds) % count ))
|
||||
text="${icons[idx]} ${values[idx]}°C"
|
||||
|
||||
tooltip=""
|
||||
for i in "${!values[@]}"; do
|
||||
if [[ -n "$tooltip" ]]; then
|
||||
tooltip+='\n'
|
||||
fi
|
||||
tooltip+="${labels[i]}: ${values[i]}°C"
|
||||
done
|
||||
|
||||
printf '{"text":"%s","tooltip":"%s"}\n' "$text" "$tooltip"
|
||||
@@ -13,12 +13,28 @@
|
||||
@define-color hl_low #21202e;
|
||||
@define-color hl_med #403d52;
|
||||
@define-color hl_high #524f67;
|
||||
@define-color bar_alpha rgba(25, 23, 36, 0.65);
|
||||
@define-color surface_alpha rgba(31, 29, 46, 0.82);
|
||||
@define-color overlay_alpha rgba(38, 35, 58, 0.9);
|
||||
|
||||
/* Bar */
|
||||
window#waybar {
|
||||
background: @base;
|
||||
background: @bar_alpha;
|
||||
color: @text;
|
||||
border-right: 1px solid @hl_low;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/* Extra breathing room for the first/last pill in each section */
|
||||
#left > :first-child,
|
||||
#center > :first-child,
|
||||
#right > :first-child {
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
#left > :last-child,
|
||||
#center > :last-child,
|
||||
#right > :last-child {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
/* Typography */
|
||||
@@ -37,7 +53,7 @@ window#waybar {
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
background: @surface;
|
||||
background: @surface_alpha;
|
||||
color: @text;
|
||||
border: 1px solid @hl_low;
|
||||
border-radius: 6px;
|
||||
@@ -46,7 +62,7 @@ window#waybar {
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background: @overlay;
|
||||
background: @overlay_alpha;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
@@ -74,18 +90,18 @@ window#waybar {
|
||||
#battery,
|
||||
#power-profiles-daemon,
|
||||
#bluetooth,
|
||||
#group-temps,
|
||||
#tray,
|
||||
#temperature,
|
||||
#custom-swaync,
|
||||
#custom-temps-cycle,
|
||||
#custom-hyprsunset,
|
||||
#custom-alhp {
|
||||
background: @surface;
|
||||
background: @surface_alpha;
|
||||
color: @text;
|
||||
border: 1px solid @hl_low;
|
||||
border-radius: 8px;
|
||||
padding: 3px 6px;
|
||||
margin: 2px 4px;
|
||||
margin: 2px 3px;
|
||||
}
|
||||
|
||||
/* Universal hover effects - FIXED */
|
||||
@@ -102,13 +118,13 @@ window#waybar {
|
||||
#battery:hover,
|
||||
#power-profiles-daemon:hover,
|
||||
#bluetooth:hover,
|
||||
#group-temps:hover,
|
||||
#tray:hover,
|
||||
#temperature:hover,
|
||||
#custom-swaync:hover,
|
||||
#custom-temps-cycle:hover,
|
||||
#custom-hyprsunset:hover,
|
||||
#custom-alhp:hover {
|
||||
background: @overlay;
|
||||
background: @overlay_alpha;
|
||||
}
|
||||
|
||||
/* Window title */
|
||||
@@ -138,18 +154,10 @@ window#waybar {
|
||||
border-left: 3px solid @pine;
|
||||
}
|
||||
|
||||
#temperature.gpu_edge {
|
||||
border-left: 3px solid @iris;
|
||||
}
|
||||
|
||||
#temperature.gpu_hotspot {
|
||||
border-left: 3px solid @rose;
|
||||
}
|
||||
|
||||
#temperature.gpu_mem {
|
||||
border-left: 3px solid @foam;
|
||||
}
|
||||
|
||||
#temperature.nvme {
|
||||
border-left: 3px solid @gold;
|
||||
}
|
||||
@@ -272,33 +280,25 @@ window#waybar {
|
||||
border-left: 3px solid @pine;
|
||||
}
|
||||
|
||||
/* Temps group: outer pill + compact rows */
|
||||
#group-temps {
|
||||
border-left: 3px solid @rose;
|
||||
}
|
||||
|
||||
#group-temps > * {
|
||||
/* Group wrappers (no extra padding to avoid width growth) */
|
||||
#group-temps,
|
||||
#group-volume {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#custom-temps-wrap {
|
||||
padding: 4px 6px;
|
||||
border-radius: 6px;
|
||||
#custom-temps-cycle {
|
||||
border-left: 3px solid @rose;
|
||||
}
|
||||
|
||||
#group-temps #temperature {
|
||||
background: transparent;
|
||||
color: @text;
|
||||
margin: 2px 0;
|
||||
padding: 4px 6px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
#group-temps #temperature:hover {
|
||||
background: @overlay;
|
||||
background: @overlay_alpha;
|
||||
}
|
||||
|
||||
/* Temperature modules within group - maintain specific colors */
|
||||
@@ -314,10 +314,6 @@ window#waybar {
|
||||
border-left: 3px solid @rose;
|
||||
}
|
||||
|
||||
#group-temps #temperature.gpu2_edge {
|
||||
border-left: 3px solid @foam;
|
||||
}
|
||||
|
||||
#group-temps #temperature.nvme {
|
||||
border-left: 3px solid @gold;
|
||||
}
|
||||
@@ -340,6 +336,15 @@ window#waybar {
|
||||
border-left: 3px solid @love;
|
||||
}
|
||||
|
||||
#group-volume #wireplumber {
|
||||
margin: 1px 0;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
#group-volume #wireplumber:hover {
|
||||
background: @overlay_alpha;
|
||||
}
|
||||
|
||||
/* Tooltips */
|
||||
tooltip,
|
||||
window#waybar tooltip {
|
||||
@@ -372,7 +377,7 @@ menuitem,
|
||||
|
||||
menuitem:hover,
|
||||
.menuitem:hover {
|
||||
background: @overlay;
|
||||
background: @overlay_alpha;
|
||||
}
|
||||
|
||||
menuitem:disabled,
|
||||
|
||||
Reference in New Issue
Block a user