7b1ff73004
Collapse redundant template tags into a cleaner data model: - drop the desktop tag (use "not laptop"); replace hyprland/niri with compositor = "hyprland"|"niri"; replace cs2/entertainment with an apps list (gated via has); drop the dead waybar tag. - move app->workspace->monitor routing into a portable [[data.placement]] table keyed by monitor role (left/right/primary), resolved per machine with fallback to the primary monitor. workspaces.lua.tmpl and rules.lua.tmpl now generate the workspace/window rules from it, so single-monitor machines work with no hardcoded monitor names. Update CLAUDE.md / AGENTS.md / GEMINI.md schema references to match.
4.2 KiB
4.2 KiB
Repository Guidelines
Project Structure & Module Organization
This is 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/(app data, scripts, etc.).dot_profile.tmplrenders to~/.profile..chezmoiscripts/contains chezmoi hooks (e.g.,run_onchange_*scripts).- Host-specific variants use
##hostname.<name>(e.g.,hyprpaper.conf##hostname.owlenlap01).
Documentation
- Docs live under
dot_local/share/docs/as git submodules and use theexternal_attribute so chezmoi does not interpret their contents. dot_local/share/docs/external_chezmoi-docs(sparse checkoutassets/chezmoi.io) renders to~/.local/share/docs/chezmoi-docs.dot_local/share/docs/external_hyprland.wiki(sparse checkoutcontent) renders to~/.local/share/docs/hyprland.wiki.dot_local/share/docs/external_waybar.wikirenders to~/.local/share/docs/waybar.wiki.- Waybar manual pages are not stored in the repo; use
man 5 waybarandman 5 waybar-<module>for module docs. - Ghostty docs are available locally at
/usr/share/ghostty.
Chezmoi Config (chezmoi.toml)
- Source of truth:
~/.config/chezmoi/chezmoi.toml(not tracked here). - The data model splits machine traits from structured config:
tags— booleans only:laptop,touchscreen,pipewire,dev,bluetooth. Nodesktoptag; usenot (index $tags "laptop").compositor—"hyprland"|"niri"; branch witheq …data.compositor "hyprland".apps— optional programs present, e.g.["steam","spotify","jellyfin"]; gate withhas "steam" …data.apps.data.monitors— array (varies per machine); each hasname, optionalprimary, and arole("primary"/"left"/"right").data.placement— app-home workspaces keyed by monitorrole(resolves per machine, falls back to primary). Seedot_config/hypr/hyprland.d.lua/{workspaces,rules}.lua.tmpl.data.microphones— array, meaningful only whenpipewire = true.
- Reference structure (current machine):
[data] tags = { laptop = false, touchscreen = false, pipewire = true, dev = true, bluetooth = false } compositor = "hyprland" apps = ["steam", "spotify", "jellyfin"] [[data.placement]] id = 4; name = "joplin"; role = "left"; apps = ["joplin-app-desktop"]; silent = true [[data.placement]] id = 5; name = "steam"; role = "left"; apps = ["steam"]; silent = true; layout = "scrolling"; requires = "steam" # --- Primary Monitor --- [[data.monitors]] name = "DP-1" primary = true role = "primary" width = 2560 height = 1440 position = "1920x0" workspaces = [{ id = 24, name = "4" }, { id = 25, name = "5" }] # --- Secondary Monitor --- [[data.monitors]] name = "DP-2" role = "right" position = "4480x0" workspaces = [{ id = 28, name = "8" }, { id = 29, name = "9", layout = "scrolling" }]
Build, Test, and Development Commands
There is no build system; apply and verify changes with chezmoi:
chezmoi diffpreview pending changes.chezmoi applyrender and apply to$HOME.chezmoi statusshow managed file status. After applying, restart the affected app (e.g., reload Hyprland/Waybar) to validate.
Coding Style & Naming Conventions
- Match the existing file’s formatting; don’t reflow unrelated sections.
- Lua configs in
dot_config/nvim/use 2‑space indents and includedot_config/nvim/dot_stylua.tomlanddot_config/nvim/selene.tomlfor format/lint settings. - Use chezmoi prefixes:
dot_for dotfiles,executable_for executable files,symlink_for symlinks,private_for restricted‑permission files, and.tmplfor Go templates.
Testing Guidelines
No automated tests are defined. Validate by:
- Running
chezmoi diffandchezmoi apply. - Smoke‑testing the specific tool you changed (e.g., open Neovim, restart Waybar, reload Hyprland).
Commit & Pull Request Guidelines
This repository has no commits yet, so there is no established commit message convention. Use short, imperative subjects and include a scope when helpful (e.g., hypr: adjust keybinds). For PRs, include a clear summary, affected paths, and screenshots for visual/UI changes.