Skip to content

0x0003/dotfiles

Repository files navigation

Linux Windows
Alacritty running neovim inside tmux Firefox and mpv
term ffmpv

repo size

Bootstrap

One-liners below pull the chezmoi binary, git clone --recurse-submodules this repo into ~/.local/share/chezmoi, bootstrap Nix (Linux) or Scoop (Windows), install software (including chezmoi itself), apply configuration, then attempt to remove the bootstrap binary.

Run with --exclude=encrypted to skip encrypted files;
--exclude=externals to skip external downloads;
--promptDefaults to skip interactive init prompts.

Linux

sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply --purge-binary 0x0003
Init prompts
  • `has_root`: boolean; default true - whether you have sudo/root access
  • `use_home_manager`: boolean; default true - whether to set up home-manager (only prompted if `has_root` is true)

Windows

Note

Windows needs a special setting to enable creation of symlinks 🙄
gpedit.msc -> Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment -> Create symbolic links -> click "Add User or Group" -> type your username -> click "Check Names" -> Apply -> REBOOT

Windows will not purge binary, but it will echo its location to stdout at the end.

iex "&{ $(irm 'https://get.chezmoi.io/ps1') } -- init --apply --purge-binary 0x0003"
Init prompts
  • `create_symlinks`: boolean; default true - whether to enable creation of symlinks (see note above)
  • `use_scoop`: boolean; default true - whether to install packages via Scoop

Structure

Source tree showing only things of interest.

. # repo root
├── .chezmoiversion # minimum chezmoi version required to interpret the source state
├── .chezmoiroot    # sets chezmoi root to home/
└── home/
    ├── .chezmoi.toml.tmpl  # init-time config
    ├── .chezmoiignore.tmpl # OS filtering + git submodule exclusions
    ├── .chezmoiscripts/
    │   ├── linux
    │   │   ├── run_once_before_01-home-manager.sh.tmpl     # bootstrap Nix and home-manager
    │   │   ├── run_once_after_01-post-home-manager.sh.tmpl # extra root-owned system configuration
    │   │   ├── run_once_after_02-wsl-config.sh.tmpl        # populate /etc/wsl.conf
    │   │   └── run_once_after_03-wsl-dns.sh.tmpl           # create a service for wsl NAT networking
    │   └── windows
    │       ├── run_once_before_01-install-scoop.ps1.tmpl       # bootstrap scoop and add buckets
    │       ├── run_onchange_after_02-install-packages.ps1.tmpl # scoop install packages from YAML
    │       └── run_once_after_01-configure-scoop.ps1.tmpl      # scoop config
    ├── .chezmoidata/
    │   ├── pkgs/windows.yaml # scoop packages
    │   └── themes            # colorschemes, applied through templates
    ├── secrets/              # inline age stubs (not managed)
    ├── dot_config/
    │   ├── submodule_nvim/           # git submodule (not managed)
    │   ├── symlink_nvim.tmpl         # creates a symlink referencing the submodule above
    │   ├── submodule_vim/            # ^
    │   ├── symlink_vim.tmpl          # ^
    │   ├── submodule_home-manager/   # ^
    │   └── symlink_home-manager.tmpl # ^
    ├── submodule_scripts/            # ^
    ├── symlink_scripts.tmpl          # ^
    ├── submodule_ahk/                # ^
    └── symlink_ahk.tmpl              # ^

Git submodules

Source dir Symlink template Target
/dot_config/submodule_nvim dot_config/symlink_nvim.tmpl ~/.config/nvim
/dot_config/submodule_vim dot_config/symlink_vim.tmpl ~/.config/vim
/dot_config/submodule_home-manager dot_config/symlink_home-manager.tmpl ~/.config/home-manager
/submodule_scripts /symlink_scripts.tmpl ~/scripts
/submodule_ahk /symlink_ahk.tmpl ~/ahk

The symlink templates contain just the source path, e.g. {{ .chezmoi.sourceDir }}/dot_config/submodule_nvim. Each target path gets an entry in .chezmoiignore.tmpl so chezmoi doesn't descend into the symlink.

Secrets

Chezmoi looks for age key at ~/.config/age/keys.txt.

  • Whole-file (encrypted_ prefix): auto-decrypts on apply.
  • Inline (home/secrets/*.age): stubs consumed in templates via {{ decrypt (include "secrets/<name>.age") | trim -}}.

Extra notes for myself for things I tend to forget

About

Dotfiles for Linux and Windows, all in one messy package, managed by chezmoi.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors