diff --git a/AGENTS.md b/AGENTS.md index 3a2ad1b..4250aa5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,42 +8,31 @@ - All actions must be idempotent, explicit, and user-approved. - Violating these rules risks breaking the user’s system and is strictly forbidden. - -## Setup, Lint, and Test +## Build/Lint/Test - Main entrypoint: `./setup.sh` (runs all `modules/*.sh` in order) -- To re-run a single module: `bash modules/XX-name.sh` -- All scripts must be idempotent and safe to re-run -- No traditional build/lint/test; test by running setup and checking symlinks/configs +- To run a single module: `bash modules/XX-name.sh` +- No traditional build/lint/test; test by running setup and verifying symlinks/configs +- NEVER run the scripts on your own, ALWAYS ask for permission ## Code Style & Conventions - Bash scripts only; use `paru` for package management (never `pacman`) - Add new packages to the relevant `modules/XX-*.sh` script -- Place new dotfiles in repo root or `.config/` as appropriate -- Symlinking logic is in `modules/02-symlinks.sh` -- Scripts must be modular: one concern per module, no duplicated logic -- Use `$HOME` and relative paths, never hardcode absolute paths -- Prefer arrays for package lists, and always quote variables -- Use `set -e` for error handling in scripts -- Follow naming: `XX-feature.sh` for modules, lowercase, hyphen-separated +- Place dotfiles in repo root or `.config/` as appropriate +- Use `$HOME` and relative paths; never hardcode absolute paths +- Prefer arrays for package lists; always quote variables +- Use `set -e` for error handling +- Scripts must be modular, readable, commented, and extensible +- Naming: `XX-feature.sh` for modules, lowercase, hyphen-separated - App configs (Hyprland, Waybar, etc.) go in `.config/` and use includes/fragments if possible -- All scripts and configs should be readable, commented, and extensible ## Device Profiles -- Support multiple device types (e.g., laptop, desktop) via an environment variable or setup prompt (`DOTFILES_DEVICE=laptop|desktop`) -- Use device-specific config fragments (e.g., `monitors-laptop.conf`, `monitors-desktop.conf`) and symlink/include them conditionally -- Waybar, Hyprland, and input configs should only enable battery, backlight, wifi, and touchpad modules for laptops -- Setup scripts and symlinking logic must detect device type and use the correct configs +- Support device types via `DOTFILES_DEVICE=laptop|desktop`; use device-specific config fragments and conditional symlinking ## Copilot/AI Rules - See `.github/copilot-instructions.md` for full conventions -- Never use other package managers or hardcoded paths - All changes must be modular, idempotent, and version-controlled -For more, see `README.md` and `.github/copilot-instructions.md`. - ## Commit Workflow -- After every change, stage and commit your work with a clear, descriptive commit message explaining the purpose of the change (not just the file or function name) +- After every change, commit with a clear, descriptive message explaining the purpose (not just the file or function name) - Example: `git add && git commit -m "fix: correct Waybar config for desktop profile"` -- Always commit after each logical change, not just at the end of a session -- The commit message should focus on the "why" and "what" (e.g., "fix: remove battery module for desktop profile") - Do not use generic messages like "Update" or "Fix" without context