Personal dotfiles managed with chezmoi and doppler.
I store the below secrets in Doppler:
- AWS SSO account details
- Azure DevOps account details
- git user name and email
- kubeconfig and some custom kubernetes aliases
- SSH keys: RSA and ED25519
- wakapi API key and URL
I store the sensitive files for my Windows machine in an AWS S3 bucket.
- Export required environment variables:
export GITHUB_USERNAME=clement-deltel
# Machine configuration. Options: pro, perso
export MACHINE=pro
# Linux distribution family. Options: arch, debian, nixos, redhat
export FAMILY=debian
# Update with your Doppler CLI token
export DOPPLER_TOKEN=""- Install dependencies:
# Debian-like Systems
sudo apt update -y && sudo apt install -y curl
# RedHat-like Systems
sudo yum update -y && sudo yum install -y curl
# Arch
# NixOS- Run installation script:
curl -fLSs https://raw.githubusercontent.com/${GITHUB_USERNAME}/dotfiles/refs/heads/main/docker/linux/${FAMILY}/install.sh | bash- After pulling and configuring the dotfiles, chezmoi run a script installing ansible, and then running playbooks.
- Ansible playbooks automatically install and configure these apps.
- Clear sensitive information:
unset DOPPLER_TOKENZsh is my default shell, for which I use plugins.
Here is my theme: robbyrussell
Here are some useful Linux system commands:
- Built-ins
- dig - DNS lookup utility.
- lshw - list hardware.
- lsof - list open files.
- rsync - remote (and local) file-copying tool.
- shred - overwrite a file to hide its contents, and optionally delete it.
- stat - display file or file system status.
- systemd-analyze - analyze and debug system manager.
- tcpdump - dump traffic on a network.
- watch - execute a program periodically, showing output fullscreen.
- More Utils
Run the command below to refresh the configuration after an update on the repository:
chezmoi update
# or the alias
cmu- Export required environment variables and build Docker image:
export GITHUB_USERNAME=clement-deltel
# Machine configuration. Options: pro, perso
export MACHINE=pro
# Set image parameters
export FAMILY=debian
export IMAGE=ubuntu:24.04
# See all options and more details at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
export TIMEZONE=Etc/GMT
# Update with your Doppler CLI token
export DOPPLER_TOKEN=""
# Docker build and then run
# Use option --progress=plain to see steps in more details
docker build --build-arg GITHUB_USERNAME --build-arg MACHINE --build-arg IMAGE --build-arg TIMEZONE --build-arg DOPPLER_TOKEN --file docker/linux/${FAMILY}/Dockerfile --tag ${IMAGE}-dotfiles-dev --target development docker/linux/${FAMILY}/
unset DOPPLER_TOKEN- Run a container:
docker run --interactive --name dotfiles-dev --tty --rm --volume ~/.local/share/chezmoi:/home/linux/.local/share/chezmoi ${IMAGE}-dotfiles-dev- Install Docker to test this setup. The following images have been tested so far:
- Debian-like Systems
- ubuntu:22.04
- ubuntu:24.04
- Export required environment variables and build Docker image:
export GITHUB_USERNAME=clement-deltel
# Machine configuration. Options: pro, perso
export MACHINE=pro
# Set image parameters
export FAMILY=debian
export IMAGE=ubuntu:24.04
# See all options and more details at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
export TIMEZONE=Etc/GMT
# Update with your Doppler CLI token
export DOPPLER_TOKEN=""
# Docker build and then run
# Use option --progress=plain to see steps in more details
docker build --build-arg GITHUB_USERNAME --build-arg MACHINE --build-arg IMAGE --build-arg TIMEZONE --build-arg DOPPLER_TOKEN --file docker/linux/${FAMILY}/Dockerfile --tag ${IMAGE}-dotfiles --target production docker/linux/${FAMILY}/
unset DOPPLER_TOKEN- Run a container:
docker run --interactive --name dotfiles --tty --rm ${IMAGE}-dotfilesTo be tested:
- Debian-like Systems
- debian:12:10
- ubuntu:24.04
- RedHat-like Systems
- quay.io/centos/centos:10
- fedora:42
- ArchLinux
- archlinux:base-20250302.0.316047
- NixOS
- nixos/nix:2.27.1
docker run --interactive --name dotfiles --tty --rm <image> bashIf needed, run this extra playbook to pull quite handy base images:
# Pull Docker images: archlinux, centos, debian, fedora, mongodb, nixos, postgis, postgres, rabbitmq, redis, ubuntu
ansible-playbook --become --connection local --inventory "localhost," --tags init ~/ansible/orchestration/images.ymlHere is the list of containerized tools that I use:
- Faster Whisper - faster whisper transcription with ctranslate2. I use more specifically the image provided by linuxserver.
- Export required environment variables:
$Env:GITHUB_USERNAME=clement-deltel
# Machine configuration. Options: pro, perso
$Env:MACHINE=pro
# Update with your Doppler CLI token
$Env:$DOPPLER_TOKEN=""- Run installation script:
curl -fLSs https://raw.githubusercontent.com/clement-deltel/dotfiles/refs/heads/main/docker/microsoft/install.sh | powershell-
After pulling and configuring the dotfiles, chezmoi run several powershell scripts, executing the steps below:
-
Chocolatey install and configure these apps.
-
Winget install and configure these apps.
-
chezmoi also restore some files from backups stored in AWS S3:
- Google Chrome
- Outlook Signatures
- Windows Explorer - Quick Access
- Windows Start Menu
- Windows Subsystem for Linux (WSL)
- Windows Taskbar
-
Finally, install the softwares requiring manual effort.
-
Clean sensitive information:
$Env:DOPPLER_TOKEN=$nullInstall Docker to test this setup.
Then, build an image:
$Env:GITHUB_USERNAME=clement-deltel
# Machine configuration. Options: pro, perso
$Env:MACHINE=pro
# Update with your Doppler CLI token
$Env:$DOPPLER_TOKEN=""
# Docker build and then run
# Use option --progress=plain to see steps in more details
docker build --build-arg GITHUB_USERNAME --build-arg MACHINE --build-arg DOPPLER_TOKEN --file docker/microsoft/Dockerfile --tag dotfiles docker/microsoft/
$Env:DOPPLER_TOKEN=$nullAnd run a container:
docker run --interactive --name dotfiles --tty --rm dotfilesTo be tested:
docker run --interactive --name dotfiles --tty --rm mcr.microsoft.com/windows/nanoserver:ltsc2022 powershellI am still figuring out a way to install these extensions programmatically.