home-lab/dotfiles
Geir O. Jerstad ef4b4b7736 feat: add Home Manager refactoring plan and initial structure
- Add comprehensive Home Manager refactoring plan document
- Create initial Home Manager directory structure with user configs
- Add modular Emacs configuration for Home Manager integration
- Update system configurations for Home Manager compatibility
- Preserve existing functionality while preparing for migration

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-07 13:29:04 +02:00
..
geir feat: add Home Manager refactoring plan and initial structure 2025-07-07 13:29:04 +02:00
README.md some work on sound anf noise suppression and research into netdata 2025-06-19 21:15:24 +02:00

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

# 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

# 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