This repository defines my portable operator environment.
It is built around a simple idea: instead of limiting myself to whatever tools happen to be installed on a machine, I make it easy to project my working environment onto any machine I control. If a system has internet access and I have about 15 minutes, I can usually make it operational.
This repo is independent from, but complementary to, my homelab repository. Where the homelab repo defines infrastructure and services, this repo defines the user environment I use to operate them.
Managed with chezmoi.
I do not optimize for the lowest common denominator of tools that might already exist on a random machine. I optimize for making a machine become mine quickly.
This repo is the source of truth for my shell, editor, CLI tooling, and day-to-day workflows. It is intended to produce a consistent environment across laptops, servers, Raspberry Pis, and ephemeral systems.
I use mise to manage tool versions and installation so that my dependencies are explicit, reproducible, and easy to provision on new systems.
Secrets are not hardcoded into the repo. Configuration is templated through chezmoi, with encrypted material unlocked through a separate identity and trust initialization path.
This repo and homelab are designed to work together, but they solve different problems:
- dotFiles: my operator workstation, shell, editor, CLI tools, and local workflow
- homelab: infrastructure, services, deployment patterns, and self-hosted platform components
In short:
dotFileshelps me become productive on a machine quicklyhomelabdefines the systems I operate once I am there
This repository manages things like:
- Fish shell configuration
- aliases, abbreviations, and shell functions
- Neovim configuration
misetool installation and version management- system provisioning patterns
- identity and trust initialization patterns
- templated config files
- operator-quality defaults that I want available everywhere
Setting up a new machine follows three distinct phases:
- System Provisioning — install the base tools required to operate the environment
- Identity & Trust Initialization — establish the local cryptographic identity used to decrypt managed secrets
- Chezmoi Bootstrap — apply the managed configuration and let the environment take over
This README covers normal provisioning and day-to-day workflow. For first-device provisioning, recovery, trust establishment, and repository metadata, see bootstrap.md.
sudo dnf install fishsudo pacman -Syu --noconfirm fishif ! grep -q "$(which fish)" /etc/shells; then
echo "$(which fish)" | sudo tee -a /etc/shells
fi
chsh -s "$(which fish)"Note: package managers are still the right tool for a few system-level dependencies during initial provisioning.
sudo pacman -Syu --noconfirm git curl fish neovim gcc base-develcurl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
⚠️ CRITICAL FOR SECURE NODES: If you are setting up a machine that requires decrypting repository secrets via YubiKey, DO NOT run the one-liners below. They will fail immediately on template compilation. Instead, follow the step-by-step pipeline in bootstrap.md.
sh -c "$(curl -fsLS get.chezmoi.io)" -- -b "$HOME/.local/bin" init --apply https://github.com/carl-parrish/dotFilessh -c "$(curl -fsLS get.chezmoi.io)" -- -b "$HOME/.local/bin" init --apply https://git.deeplydigital.net/cparrish/dotFilesReload the shell so paths and configs are active:
exec fishatuin login
infisical loginThese Fish abbreviations and commands are included to make dotfile maintenance fast and consistent:
ce [file]— edit a config file and apply changes immediatelyca— apply pending changes from source to home directorycdiff— preview changes before applying themcu— update from the remote repositoryccd— jump into the chezmoi source directorycgst/cgcmsg/cgp— status, commit, and push for this repomcheck— inspect installed and missingmisetoolsmdoctor— inspect overallmisehealth
This repo exists because context switching is expensive.
A machine becomes more useful when it can quickly provide:
- the same shell behavior
- the same editor behavior
- the same tooling
- the same authentication patterns
- the same operational shortcuts
That consistency reduces friction, mistakes, and setup time.
- This repository is opinionated.
- It is optimized for my workflow first.
- It is expected to evolve as the surrounding infrastructure evolves.
- Practicality wins over purity.
For normal machine setup, use the provisioning steps in this README.
For first-device setup, trust initialization, recovery procedures, and repository metadata, see bootstrap.md.
I do not need every machine to already be mine. I need every machine to become mine quickly.
