Welcome to my Dotfiles repository! This collection contains all the configurations for my personal machines and servers.
Dotfiles are hidden configuration files (prefixed with a .) in Unix-like systems. They store settings for shells, editors, and various tools, allowing for easy customization and consistency across different environments.
- Effortless Deployment: Easily set up new environments.
- Synchronization: Keep your settings synced across multiple devices.
- Rollback: Revert changes with ease.
- Backup: Ensure nothing is lost.
I use Dotbot to manage these dotfiles. It not only handles symlinks but also manages package installations and scripts. Symlinks allow you to maintain all your dotfiles in a central Git directory, linking them to the appropriate locations on disk.
- Linux: Full setup via apt bootstrap + Homebrew + common configuration.
- macOS: Setup via Homebrew only — no apt, font handling via
~/Library/Fonts.
git clone https://github.com/SQuent/dotfiles.git && cd dotfiles && ./installThe script auto-detects the OS (Darwin or Linux) and runs the appropriate steps.
git clone https://github.com/SQuent/dotfiles.git && cd dotfiles
docker build . -t dotfiles:linux -f Dockerfile --progress=plain
docker run -it dotfiles:linuxThe installation script is a wrapper around Dotbot with the following features:
- Auto-detects the OS (
uname -s) — no flags required. - Logs actions to
install.log. - Checks and installs prerequisites before running Dotbot.
- Syncs and updates Dotbot plugins via git submodules.
- Splits configuration across three files:
common.conf.yaml,linux.conf.yaml,mac.conf.yaml.
Linux (3 passes):
- Bootstrap:
apt-get update/upgrade, installcurl,python3,git,python3-dev. - Pass 1 —
linux.conf.yaml(--only apt): install APT packages. - Pass 2 —
common.conf.yaml: clean, create folders, symlinks, Homebrew install + packages, asdf plugins. - Pass 3 —
linux.conf.yaml(--except apt): Linux-specific brew (trash-cli), sudoers, default shell, font cache.
macOS (2 passes):
- Check Xcode Command Line Tools, set Homebrew PATH.
- Pass 1 —
common.conf.yaml: clean, create folders, symlinks, Homebrew install + packages, asdf plugins. - Pass 2 —
mac.conf.yaml: macOS-specific brew (trash),~/Library/Fontssymlink.
Manage the location of configuration files using the XDG Base Directory Specification for a clutter-free home directory. These are declared in config/.profile.
Zsh, or the Z Shell, is a powerful and highly customizable Unix shell that extends the Bourne shell (sh).
config/zsh
├── .zshrc
├── aliases.zsh # Personal Aliases
├── functions.zsh # Personal Functions
├── history.zsh # History Management
├── import-plugins.zsh # Plugins to install
└── setup-antigen.zsh # Zsh plugin installer- Syntax Highlighting:
zsh-users/zsh-syntax-highlighting - Extra Completions:
zsh-users/zsh-completions - Auto Suggestions:
zsh-users/zsh-autosuggestions - Kubectl Aliases:
dbz/kube-aliases - Alias Tips:
djui/alias-tips
Handled in config/zsh/history.zsh.
I bind the arrow keys to search through the history for commands that start with the current input.
-
Starship: For a minimal, fast, and customizable prompt. Config stored in
config/starship.toml. -
EZA: Enhanced
lscommand for better file listing. Color:export EXA_COLORS="ur=34:uw=35:ux=36:gr=34:gw=35:gx=36:tr=34:tw=35:tx=36"
-
Bat: A
catclone with syntax highlighting.if command_exists bat ; then alias cat="bat -pp" fi
Sensitive data like secrets, SSH keys, and kubeconfigs are not committed to the dotfiles repository. These are stored in Bitwarden SAAS and managed with bitwarden-cli and functions in config/zsh/functions.zsh.
First, you need to install the CLI, create client and secret id in Bitwarden, and configure ~/.bw as follows:
export BW_CLIENTSECRET=
export BW_CLIENTID=
export BW_PSSWD=
export BW_SECRET_NOTE_ID=
export BW_SSH_FOLDER_ID=Secrets are stored in a Bitwarden note (referenced by BW_SECRET_NOTE_ID). Functions to manage these secrets include:
load_secret: Load secrets from Bitwarden and source them.clean_secret: Remove files with secrets.
SSH key files and ssh config file are stored in a Bitwarden folder and managed using the load_ssh_keys function to populate the ~/.ssh folder.
Manage multiple Git profiles (github, gitlab, personnal instance of gitlab) with direnv.
Loading environment variables in directories with specific organization repositories:
git
├── github
│ ├── helm-kuma-ingress-watcher
│ └── kuma-ingress-watcher
├── gitlab
│ ├── dotfiles
├── nas
│ └── qlabv1
└── work
└── Infrastructure
And for each directory i have GIT VARS loaded from other environment VARS when i go to the dir:
export GIT_SSH_COMMAND="ssh -i ~/.ssh/gitlab_id_rsa -F /dev/null"
export GIT_AUTHOR_NAME=$USER_GIT_GITLAB
export GIT_AUTHOR_EMAIL=$EMAIL_GIT_GITLAB
export GIT_COMMITTER_NAME=$USER_GIT_GITLAB
export GIT_COMMITTER_EMAIL=$EMAIL_GIT_GITLAB
ASDF manages multiple language runtime versions per project.
- Auto-Discovery: Detects
.tool-versionsfiles in project directories - Auto-Installation: Installs missing versions when entering a directory
- Global Defaults: Uses global
.tool-versionsfor consistent defaults across projects
When you cd into a project with a .tool-versions file, ASDF automatically installs and activates the specified versions.
ASDF is used specifically for development tools and languages where version compatibility matters for projects (Python, Node.js, Terraform, etc.). System utilities and CLI tools (eza, bat, starship) remain managed by Homebrew.
Sometimes, you need to quick save some files in an external storage. I use Dropbox.
First, ensure that you have the Dropbox CLI tool installed and configure your Dropbox access token as follows:
export DROPBOX_PERSONAL_TOKEN=Dropbox integration functions include:
-
load_dbx: Creates a configuration directory and sets up Dropbox CLI authentication using theDROPBOX_PERSONAL_TOKEN. -
dbxpush: Uploads a local file or directory to /tmp directory in Dropbox. Usage example:dbxpush <local-file-or-directory>
-
dbxget: Downloads a file from /tmp directory in Dropbox to the local machine. Usage example:dbxget <remote-file>
-
dbxclean: Cleans up temporary files in Dropbox. ( including config dir with token, but not the environment var with the token)
These functions are included in config/zsh/functions.zsh, which ensures efficient management of Dropbox operations within your setup.
Tmux is a terminal multiplexer that allows you to manage multiple terminal sessions within a single window.
My Tmux configuration, stored in config/.tmux.conf, includes:
- Mouse Support: Allows window resizing with the mouse and enables a context menu with a right-click on a window.
- Custom Prefix Key:
- The default prefix key (
C-b) is changed toCtrl + Spacefor easier access. Ctrl + Space + vfor vertical splits.Ctrl + Space + hfor horizontal splits.Ctrl + Space + arrow keys (→, ←, ↑, ↓)to switch between windows.
- The default prefix key (
- Custom Screensaver: The lock screen is configured to display a
cbonsaianimation after 180 seconds of inactivity. This can be switched tocmatrixorasciiquariumfor alternative screensavers.
To avoid accidentally deleting files permanently, I replace rm with a trash tool:
- Linux:
trash-cli— follows the freedesktop.org trash spec. - macOS:
trash— moves files to the macOS Trash.
Aliases are set for trash management in both cases.
Neovim is an extensible and modular text editor based on Vim. I use a pre-built version of NvChad, a framework for Neovim that provides a ready-to-use configuration with numerous plugins and enhancements.
Visual Studio Code is a code editor developed by Microsoft.
Dotfiles for VsCode are:
- settings.json
- Profile
| Package Name | Description | Linux |
|---|---|---|
| build-essential | Essential tools for building software (GCC, g++, make…) | ✔️ |
| curl | Command line tool for transferring data with URL syntax | ✔️ |
| lsb-release | Linux Standard Base distribution information | ✔️ |
| ca-certificates | Common CA certificates for SSL validation | ✔️ |
| procps | System utilities: ps, top, vmstat, kill… | ✔️ |
| file | Determine file type from content | ✔️ |
| zsh | Z Shell | ✔️ |
| Package Name | Description | Linux | macOS |
|---|---|---|---|
| gnupg | GNU Privacy Guard | ✔️ | ✔️ |
| fontconfig | Library for configuring and customizing font access | ✔️ | ✔️ |
| wget | Network downloader | ✔️ | ✔️ |
| watch | Execute a program periodically, showing output fullscreen | ✔️ | ✔️ |
| yq | YAML processor (like jq for YAML) | ✔️ | ✔️ |
| jq | Command-line JSON processor | ✔️ | ✔️ |
| btop | Better than htop | ✔️ | ✔️ |
| direnv | Load/unload environment variables based on $PWD | ✔️ | ✔️ |
| bitwarden-cli | Bitwarden command-line interface | ✔️ | ✔️ |
| scc | For counting the lines of code, blank lines, comment lines, and physical lines of source code in many programming languages. | ✔️ | ✔️ |
| duf | Get info on mounted disks (better df) | ✔️ | ✔️ |
| sd | RegEx find and replace (better sed) | ✔️ | ✔️ |
| asdf | Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more | ✔️ | ✔️ |
| tmux | Terminal multiplexer | ✔️ | ✔️ |
| fd | Simple, fast and user-friendly alternative to 'find' | ✔️ | ✔️ |
| starship | Minimal, blazing-fast, and infinitely customizable prompt for any shell | ✔️ | ✔️ |
| eza | Listing files with info (better ls) | ✔️ | ✔️ |
| bat | Output highlighting (better cat) | ✔️ | ✔️ |
| neovim | Hyperextensible Vim-based text editor | ✔️ | ✔️ |
| thefuck | App which corrects your previous console command. | ✔️ | ✔️ |
| fastfetch | Show system data and distro info (replaces neofetch) | ✔️ | ✔️ |
| tree | Display directories as trees | ✔️ | ✔️ |
| libyaml | YAML Parser | ✔️ | ✔️ |
| docker | Platform to build, run, and share containerized applications | ✔️ | ✔️ |
| docker-compose | Define and run multi-container applications with Docker | ✔️ | ✔️ |
| kubernetes-cli | Kubernetes command-line interface | ✔️ | ✔️ |
| podman | Tool for managing OCI containers and pods | ✔️ | ✔️ |
| kubectx | Switch faster between clusters and namespaces in kubectl | ✔️ | ✔️ |
| kustomize | Kubernetes native configuration management | ✔️ | ✔️ |
| kdash | Kubernetes dashboard app | ✔️ | ✔️ |
| lazydocker | Full Docker management app | ✔️ | ✔️ |
| helm-docs | Autogenerate doc for Helm charts | ✔️ | ✔️ |
| krew | plugin manager for kubectl command-line tool. | ✔️ | ✔️ |
| derailed/k9s/k9s | Kubernetes CLI to manage your clusters in style! | ✔️ | ✔️ |
| ctop | Container metrics and monitoring | ✔️ | ✔️ |
| docker-completion | Bash, Zsh and Fish completion for Docker | ✔️ | ✔️ |
| gitlab-ci-local | Build all pipeline or specific job locally | ✔️ | ✔️ |
| k3sup | Bootstrap Kubernetes with k3s over SSH < 1 min | ✔️ | ✔️ |
| argocd-autopilot | Bootstrap ArgoCD Autopilot | ✔️ | ✔️ |
| pwgen | Password generator | ✔️ | ✔️ |
| fdupes | Duplicate file finder | ✔️ | ✔️ |
| gping | Interactive ping tool, with graph | ✔️ | ✔️ |
| httpie | HTTP / API testing client | ✔️ | ✔️ |
| entr | Run command when files change (for testing when you change code directly launch program) | ✔️ | ✔️ |
| ttygif | Make gif from terminal | ✔️ | ✔️ |
| tldr | Simplified and community-driven man pages | ✔️ | ✔️ |
| librsvg | To use rsvg-convert docker-compose.svg > docker-compose.png | ✔️ | ✔️ |
| asciiquarium | Fish tank animation in your terminal | ✔️ | ✔️ |
| cmatrix | Console Matrix | ✔️ | ✔️ |
| figlet | Banner-like program prints strings as ASCII art | ✔️ | ✔️ |
| cbonsai | terminal bonzai in ASCII | ✔️ | ✔️ |
| trash-cli | CLI for the freedesktop.org trashcan (Linux) | ✔️ | ❌ |
| trash | CLI to move files to the macOS Trash (replaces Linux trash-cli) | ❌ | ✔️ |
| Package Name | Description | Linux | macOS |
|---|---|---|---|
| python | Python programming language | ✔️ | ✔️ |
| nodejs | JavaScript runtime built on Chrome's V8 JavaScript engine | ✔️ | ✔️ |
| golang | Go programming language | ✔️ | ✔️ |
| terraform | Infrastructure as code software tool | ✔️ | ✔️ |
| opentofu | Open source version of Terraform | ✔️ | ✔️ |
| terragrunt | Thin wrapper for Terraform that provides extra tools for working with multiple Terraform modules | ✔️ | ✔️ |
| kubectl | Kubernetes command-line tool | ✔️ | ✔️ |
| helm | The Kubernetes package manager | ✔️ | ✔️ |
| minikube | Run Kubernetes locally | ✔️ | ✔️ |
| awscli | Official Amazon AWS command-line interface | ✔️ | ✔️ |
| packer | Tool for creating identical machine images for multiple platforms | ✔️ | ✔️ |
| poetry | Python dependency management and packaging made easy | ✔️ | ✔️ |
| pre-commit | Allow script to run on every commit | ✔️ | ✔️ |
| tflint | Terraform Linter | ✔️ | ✔️ |
| act | Build and test GitHub pipelines on local stack | ✔️ | ✔️ |
| glab | CLI for GitLab | ✔️ | ✔️ |
| gomplate | A template renderer that can be used to generate README | ✔️ | ✔️ |
| bitwarden-secrets-manager | Secrets Manager command-line interface | ✔️ | ✔️ |