Configuration
Understanding the dotts configuration structure
Configuration
dotts uses a structured YAML-based configuration system. Your configuration repository contains profiles, packages, machines, and the actual config files.
Repository Structure
config.yaml
The root configuration file defines repository metadata and defaults:
name: my-dotfiles
description: My personal dotfiles
version: "1.0.0"
default_machine: workstation
features:
- ssh
- github
- dockerProfiles
Profiles define logical groupings of configurations. They support inheritance for maximum reusability.
# profiles/base.yaml
name: base
description: Universal base configuration
configs:
- shell
- git
- tools
packages:
- common
settings:
shell: fish
editor: nvim
theme: catppuccin# profiles/desktop.yaml
name: desktop
description: Desktop workstation with GUI
inherits:
- linux
configs:
- editor
- wm
settings:
compositor: hyprland
bar: waybarInheritance Chain
Profiles can inherit from other profiles, creating a chain:
base → linux → desktop → machineSettings and configs are merged, with more specific profiles taking precedence.
Machines
Machine configs represent specific computers. They inherit from profiles and add machine-specific settings:
# machines/workstation.yaml
machine:
hostname: archlinux
description: Primary desktop with 3 monitors
inherits:
- desktop
settings:
gpu: nvidia
monitors: 3
features:
- docker
- sshPackages
Package manifests define which packages to install using different package managers:
# packages/common.yaml - Cross-platform (nix)
nix:
- ripgrep
- fd
- fzf
- bat
- eza
- lazygit# packages/arch.yaml - Arch Linux specific
system:
arch:
- base-devel
- git
- fish
- kitty
- hyprland
- waybar
aur:
- visual-studio-code-binSee Packages for detailed package configuration.
Configs Directory
The configs/ directory contains your actual dotfiles, organized by category:
configs/
├── shell/
│ └── .config/
│ └── fish/
│ └── config.fish
├── editor/
│ └── .config/
│ └── nvim/
│ └── init.lua
└── terminal/
└── .config/
└── kitty/
└── kitty.confFiles in configs are symlinked to your home directory, preserving the path structure. For example, configs/shell/.config/fish/config.fish becomes ~/.config/fish/config.fish.
Settings
Settings are key-value pairs that flow through the inheritance chain:
settings:
shell: fish
editor: nvim
theme: catppuccin
monitors: 1
gpu: intelThese can be used in templates and are available during the setup process.
Features
Features are toggleable capabilities that can trigger additional setup:
features:
- ssh # SSH key setup
- github # GitHub CLI authentication
- docker # Docker installation
- gui # GUI applicationsFeatures influence which packages are installed and which setup steps are run.