From 09350e212d346bfa291e4b5930d0b75a5fe026b2 Mon Sep 17 00:00:00 2001 From: Robby Zambito Date: Sun, 5 Apr 2026 16:42:20 -0400 Subject: feat: add AGENTS.md --- AGENTS.md | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..8989112 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,72 @@ +# Repository Guidelines + +## Project Structure & Module Organization + +This is a Guix Home Environment configuration repository. Declarative system and home configurations are managed through Scheme (`.scm`) files. + +**Directory layout:** + +``` +├── home.scm # Home environment configuration (user services) +├── system.scm # System-wide configuration +├── secrets.scm # Sensitive configuration (passwords, tokens) +├── config/ # Extracted configuration modules +│ ├── packages.scm # Package definitions +│ ├── sway.scm # Sway window manager config +│ ├── emacs.scm # Emacs configuration +│ ├── foot.scm # Foot terminal config +│ └── git.scm # Git configuration +├── wofi/ # Wofi application launcher assets +├── config-generation/ # Helper modules for config generation +└── reconfigure* # Convenience scripts for deployment +``` + +**Module pattern:** Extract configurations into `config/*.scm` using `(define-library (config ))` with exported variables renamed in `home.scm` (e.g., `(rename (config git) (git-config rz/git-config))`). + +## Build, Test, and Development Commands + +| Command | Description | +|---------|-------------| +| `guix home reconfigure home.scm` | Apply home environment changes | +| `guix system reconfigure system.scm` | Apply system-wide changes | +| `guix home reconfigure home.scm --dry-run` | Validate configuration without applying | +| `./reconfigure-home` | Convenience script for home reconfiguration | +| `./reconfigure-system` | Convenience script for system reconfiguration | + +## Coding Style & Naming Conventions + +- **Indentation:** 8 spaces for Scheme files (Guix standard) +- **File extensions:** `.scm` for all Scheme modules +- **Module naming:** `(config )` for extracted configurations +- **Variable naming:** Use `rz/` prefix for renamed exports (e.g., `rz/git-config`, `rz/sway-config`) +- **Comments:** Begin files with `;;;` for major sections, use `;;` for inline comments + +**INI configuration pattern:** +```scheme +(define -config + (parameterize + ((current-output-port (open-output-string))) + (scm->ini ) + (get-output-string (current-output-port)))) +``` + +## Testing Guidelines + +- Use `--dry-run` flag to validate configurations before deployment +- Verify syntax with: `guile -c "(load \"config/.scm\")"` +- Test configuration generation with `guix home config` to preview outputs + +## Commit & Pull Request Guidelines + +- **Commit messages:** Use imperative present tense (e.g., "Add git config module", "Update sway colors") +- **Scope indication:** Prefix with affected component (e.g., "[home.scm]", "[config/git.scm]") +- **Pull requests:** Include description of changes and any related configuration dependencies +- Extract large configuration blocks into dedicated modules before adding to main files + +## Agent-Specific Instructions + +- **Ignore backup files:** All files ending with `~` are backup/temporary files and should be ignored during analysis and modification. + +- Check for existing `config/*.scm` modules before creating new ones +- Use `home.scm` imports to understand the module dependency graph +- Run validation commands before marking configuration changes complete -- cgit