Personal dotfiles managed with Chezmoi. This repo is mainly for my own machines, so the docs focus on what the files do and what I tend to forget.
# 1. Install chezmoi and git.
# https://www.chezmoi.io/install/
# 2. Initialize and apply.
chezmoi init https://github.com/AndreasBackx/dotfiles.git
chezmoi apply
# 3. Check the expected tooling.
dot-doctorchezmoi apply prompts for a few host-specific choices and uses them to render templates.
.chezmoi.toml.tmplprompts forenvironment,gpu,headless, monitor location, and default monitor profile..chezmoidata.tomlis the main source of truth for monitor metadata, workspace ranges, profile labels, lock and screen timeouts, and theme values.private_dot_config/dot_variables.tmplrenders~/.config/.variablesso shell scripts can read the selected chezmoi data.private_dot_config/dot_secrets.tmplrenders~/.config/.secretsfrom 1Password on non-headless machines.dot_zprofile.tmplanddot_zshenvsource those generated files on shell startup.
dot_bin/: user-facing scripts and helpers. Seedot_bin/README.md.private_dot_config/hypr/: Hyprland config, monitor templates, workspace routing, session helpers. Seeprivate_dot_config/hypr/README.md.private_dot_config/ags/: AGS bar implementation. Seeprivate_dot_config/ags/README.md.private_dot_config/nvim/: LazyVim-based Neovim config. Seeprivate_dot_config/nvim/README.md.run_after_*.zsh*: post-apply hooks that set up generated state afterchezmoi apply.
These run automatically after apply:
run_after_wayland_wrappers.zsh.tmpl: creates~/.bin/wrappersfor desktop apps that should be forced onto Wayland.run_after_hyprland.zsh.tmpl: syncs Hyprland desktop session entries, creates the Hyprland log directory, reloads user systemd units, and enables Hyprland log rotation.run_after_hypr_workspace_remap.zsh.tmpl: remaps windows when apply happens inside a live Hyprland session.run_after_gnome_monitors.zsh.tmpl: copies~/.config/monitors.xmlinto GDM so the login screen uses the same layout.run_after_zsh.zsh: creates symlinks for Spaceship and tmux.run_after_macos_xdg.zsh: makes macOS XDG-compatible symlinks under~/.local.
dot-doctor: check required base and desktop tools.ags-reload: restart the AGS bar and write logs to~/.local/state/ags-reload.log.hyprland-logs: show the Hyprland file log, recent UWSM journal entries, crash reports, and logrotate config path.monitor-profiles selection: switch monitor profiles throughshikanectland update default audio devices for that profile.hypr-profile-refresh: re-render profile-sensitive Hyprland config and remap windows.power-options selection: rofi power menu.updates checkorupdates update: package update helper.backup statusorbackup start: Borg backup helper.
These are the tools the current Hyprland and AGS setup expects:
minosagsastal-gtk4-develwireplumber(wpctl)kittyrofiorrofi-waylandhyprlanduwsmshikane
Current Fedora or Terra limitation:
- only the base
AstalGtk4 package is assumed to be packaged here - feature typelibs such as
AstalTray,AstalWp,AstalNetwork,AstalBluetooth,AstalBattery,AstalMpris, andAstalHyprlandmay still be unavailable, so the AGS bar still uses shell helpers for several domains
# Dry run without changing anything.
chezmoi apply --dry-run --verbose
# Check expected tools.
dot-doctor
# Restart the AGS bar after edits.
ags-reloadCommon things to check:
- Missing wrappers: run
chezmoi applyagain after installing required desktop tools. - Missing secrets: check
~/.config/.secretsand your 1Password CLI setup. - Headless mode: desktop checks are skipped and secrets are not loaded.
- AGS reloads: logs go to
~/.local/state/ags-reload.log. - Hyprland and UWSM logs:
file log
~/.local/state/hyprland/hyprland.logsession journaljournalctl --user -u wayland-wm@hyprland.desktop.servicecrash reports~/.cache/hyprland/hyprlandCrashReport*.txthelperhyprland-logs
dot_bin/README.mdprivate_dot_config/ags/README.mdprivate_dot_config/hypr/README.mdprivate_dot_config/nvim/README.md
sudo groupadd --system i2c
sudo usermod $(whoami) -aG i2c
sudo cp /usr/share/ddcutil/data/45-ddcutil-i2c.rules /etc/udev/rules.d
# Temporary permissions for current boot:
sudo chmod a+rw /dev/i2c-*