# AGENTS.md - Guidelines for Agentic Coding in Azos This is a NixOS/Nix flake-based configuration repository using home-manager for dotfiles and system configuration. ## Build Commands ### Evaluating ```bash nix eval .#nixosConfigurations.lauretta.config.system.build.toplevel nix flake show ``` ### Building ```bash # VM (with submodules for azos-core) nix build '.?submodules=1#nixosConfigurations.vm.config.system.build.vm' # Formatter nix build .#formatter.x86_64-linux ``` ### Deploying ```bash sudo nixos-rebuild switch --flake '.?submodules=1#lauretta' nix flake update # Update all inputs nix flake lock --update-input X # Update specific input ``` ### Dev Shell & REPL ```bash nix develop .#shells.x86_64-linux.default nix repl :lf . ``` ## Linting/Formatting Uses [alejandra](https://github.com/kamadorama/alejandra): ```bash nix fmt # Format all Nix files alejandra . ``` ## Testing Manual VM testing: ```bash nix build '.?submodules=1#nixosConfigurations.vm.config.system.build.vm' ./result/bin/run-nixos-vm ``` ## Emacs Debugging When adding or debugging Emacs functionality, you can interact with the running Emacs session via `emacsclient` (with user permission): ```bash # Create and switch to a buffer emacsclient -c -e '(switch-to-buffer (get-buffer-create "test"))' # Evaluate arbitrary Elisp emacsclient -e '(message "hello")' ``` ## Code Style Guidelines ### File Organization - **Home-manager modules**: `modules/home-manager/.nix` - **NixOS modules**: `modules/nixos/.nix` - **Imports**: All modules in `modules/home-manager/default.nix` and `modules/nixos/default.nix` (alphabetical order) - **Home config**: `home-manager/home.nix` - main home-manager user config - **Custom packages**: `pkgs/` - custom package definitions - **Overlays**: `overlays/` - package overlays (addpkgs, modifications, unstable-packages) ### Nix Module Template ```nix { lib, config, pkgs, ... }: let isEnabled = config.azos..enable; in { options.azos..enable = lib.mkOption { default = true; example = true; type = lib.types.bool; }; config = lib.mkIf isEnabled { home.packages = with pkgs; [ pkg1 pkg2 ]; }; } ``` ### Naming Conventions - Option paths: `config.azos..