
- Removed system/ directory, merged applications into users/geir.nix - Simplified fonts.nix to bare minimum (users can add more) - Moved transmission.nix to sleeper-service/services/ (machine-specific) - Organized grey-area services into services/ directory - Updated import paths and tested all configurations - Added research documentation for deploy-rs and GNU Stow
101 lines
No EOL
3.1 KiB
Markdown
101 lines
No EOL
3.1 KiB
Markdown
# Users Directory Structure
|
|
|
|
This directory contains per-user configurations and dotfiles for the Home-lab infrastructure, organized to support multiple users across multiple machines.
|
|
|
|
## Directory Organization
|
|
|
|
### `geir/`
|
|
Primary user configuration for geir:
|
|
- `user.nix` - NixOS user configuration (packages, groups, shell)
|
|
- `dotfiles/` - Literate programming dotfiles using org-mode
|
|
- `README.org` - Main literate configuration file
|
|
- `emacs/` - Emacs-specific configurations
|
|
- `shell/` - Shell configurations (zsh, bash, etc.)
|
|
- `editors/` - Editor configurations (neovim, vscode)
|
|
|
|
### Future Users
|
|
Additional user directories will follow the same pattern:
|
|
- `admin/` - Administrative user for system management
|
|
- `service/` - Service accounts for automation
|
|
- `guest/` - Temporary/guest user configurations
|
|
|
|
## User Configuration Philosophy
|
|
|
|
### NixOS Integration
|
|
Each user has a `user.nix` file that defines:
|
|
- User account settings (shell, groups, home directory)
|
|
- User-specific packages
|
|
- System-level user configurations
|
|
- Integration with home lab services
|
|
|
|
### Literate Dotfiles
|
|
Each user's `dotfiles/README.org` serves as:
|
|
- Single source of truth for all user configurations
|
|
- Self-documenting setup with rationale
|
|
- Auto-tangling to generate actual dotfiles
|
|
- Version-controlled configuration history
|
|
|
|
### Multi-Machine Consistency
|
|
User configurations are designed to work across machines:
|
|
- congenital-optimist: Full development environment
|
|
- sleeper-service: Minimal server access
|
|
- Future machines: Consistent user experience
|
|
|
|
## Dotfiles Structure
|
|
|
|
### `dotfiles/README.org`
|
|
Main literate configuration file containing:
|
|
- Shell configuration (zsh, starship, aliases)
|
|
- Editor configurations (emacs, neovim)
|
|
- Development tool settings
|
|
- Git configuration
|
|
- Machine-specific customizations
|
|
|
|
### Subdirectories
|
|
- `emacs/` - Generated Emacs configuration files
|
|
- `shell/` - Generated shell configuration files
|
|
- `editors/` - Generated editor configuration files
|
|
|
|
## Usage Examples
|
|
|
|
### Importing User Configuration
|
|
```nix
|
|
# In machine configuration
|
|
imports = [
|
|
../../users/geir/user.nix
|
|
];
|
|
```
|
|
|
|
### Adding New User
|
|
1. Create user directory: `users/newuser/`
|
|
2. Copy and adapt `user.nix` template
|
|
3. Create `dotfiles/README.org` with user-specific configs
|
|
4. Import in machine configurations as needed
|
|
|
|
### Tangling Dotfiles
|
|
```bash
|
|
# From user's dotfiles directory
|
|
cd users/geir/dotfiles
|
|
emacs --batch -l org --eval "(org-babel-tangle-file \"README.org\")"
|
|
```
|
|
|
|
## Design Principles
|
|
|
|
- **User Isolation**: Each user's configs are self-contained
|
|
- **Machine Agnostic**: Configs work across different machines
|
|
- **Literate Programming**: All configs are documented and explained
|
|
- **Version Control**: Full history of configuration changes
|
|
- **Automation**: Auto-tangling and deployment workflows
|
|
|
|
## Security Considerations
|
|
|
|
- User-specific secrets managed separately
|
|
- Limited cross-user access
|
|
- Machine-appropriate privilege levels
|
|
- Service account isolation
|
|
|
|
## Naming Convention
|
|
|
|
- **User Directories**: lowercase (e.g., `geir/`, `admin/`)
|
|
- **Configuration Files**: descriptive names (e.g., `user.nix`, `README.org`)
|
|
- **Generated Files**: follow target application conventions |