A collection of my personal configuration files (dotfiles), carefully organized and managed with Git. The aim is to create a consistent and comfortable environment across different machines.
These dotfiles are tailored to my workflow, prioritizing simplicity, efficiency, and a clean aesthetic. They are shared in the hope that they might be useful to others, or provide a starting point for your own configurations.
This repository follows the XDG Base Directory Specification where possible, keeping the home directory tidy. Most configurations are located within the .config
directory. The repository also includes scripts for setup and maintenance:
dotfiles/
├── .config/
│ ├── bash/ # Shell environment, aliases, and custom prompt
│ │ └── bashrc
│ ├── nvim/ # Neovim setup with Lua, plugins via lazy.nvim
│ │ ├── init.lua
│ │ ├── lazy-lock.json
│ │ └── lua/
│ ├── kitty/ # Kitty terminal emulator settings
│ │ └── kitty.conf
│ ├── tmux/ # Tmux (terminal multiplexer) configuration
│ │ └── tmux.conf
│ ├── git/ # Git aliases and user configuration
│ │ └── .gitconfig
│ ├── htop/ # htop process viewer settings
│ │ └── htoprc
│ └── lazygit/ # Lazygit TUI for Git commands
│ └── config.yml
├── scripts/
│ ├── setup/ # Platform-specific setup scripts (macOS, Ubuntu, Windows)
│ │ ├── setup-mac-dev.sh
│ │ ├── setup-ubuntu-dev.sh
│ │ ├── setup-windows-dev.ps1
│ │ ├── setup-windows-dev.sh
│ │ ├── python_version.txt
│ │ ├── requirements.txt
│ │ └── system-packages.txt
│ └── refresh-dotfiles.sh # Script to refresh or update dotfiles (e.g., re-symlink)
├── LICENSE # Apache License 2.0
└── README.md # This file
(Other application configs might be present as well)
-
Clone the repository: It's generally a good practice to clone dotfiles into a dedicated directory like
~/.dotfiles
.# Example: git clone https://github.com/yourusername/dotfiles.git ~/.dotfiles # Remember to replace "yourusername" with your actual username/repo! cd ~/.dotfiles
-
Run Setup Scripts (Recommended): Navigate to the
scripts/setup
directory and execute the appropriate script for your operating system. These scripts typically handle symlinking configurations and may install necessary dependencies or software.cd ~/.dotfiles/scripts/setup # For Ubuntu: # ./setup-ubuntu-dev.sh # For macOS: # ./setup-mac-dev.sh # For Windows (using Git Bash or WSL): # ./setup-windows-dev.sh # Or using PowerShell: # ./setup-windows-dev.ps1
Always review scripts from the internet before running them to understand the changes they will make to your system.
-
Create Symbolic Links (Manual Alternative): If you prefer manual control, the setup scripts do not suit your needs, or you only want to link specific configurations, you can create symbolic links manually. The following commands link the files from this repository to their expected locations in your home directory.
# For Bash (ensure you backup or remove your existing ~/.bashrc if needed) ln -sf ~/.dotfiles/.config/bash/bashrc ~/.bashrc # For other configurations within .config (ensure you backup or remove existing configs) # This command links the nvim, kitty, and tmux directories. Add other directories as needed. ln -sf ~/.dotfiles/.config/nvim ~/.config/ ln -sf ~/.dotfiles/.config/kitty ~/.config/ ln -sf ~/.dotfiles/.config/tmux ~/.config/ ln -sf ~/.dotfiles/.config/git ~/.config/git # Git config often lives in ~/.config/git ln -sf ~/.dotfiles/.config/htop ~/.config/htop ln -sf ~/.dotfiles/.config/lazygit ~/.config/lazygit # If your .gitconfig is expected directly in ~, you might do: # ln -sf ~/.dotfiles/.config/git/.gitconfig ~/.gitconfig
Adjust the
ln -sf
commands based on your specific setup and which configurations you want to use.
- Bash (
.config/bash/bashrc
):- Sets up
PATH
, environment variables. - Includes useful shell options (
autocd
,cdspell
,globstar
). - Defines a custom color-coded prompt.
- Sets up
- Neovim (
.config/nvim/
):- Modern Neovim setup primarily in Lua.
- Plugin management via
lazy.nvim
. - Includes LSP integration, autocompletion, and various UI enhancements.
- Kitty (
.config/kitty/kitty.conf
):- Font (JetBrains Mono), size, and theme settings.
- URL detection and tab bar styling.
- Tmux (
.config/tmux/tmux.conf
):- Terminal multiplexer setup with
Ctrl+a
as the prefix. - Vi mode for navigation and copy-pasting.
- Custom status bar and pane controls.
- Terminal multiplexer setup with
- Git (
.config/git/.gitconfig
):- User details and common aliases (
co
,br
,ci
,st
,lg
).
- User details and common aliases (
- htop (
.config/htop/htoprc
):- Customized layout and display settings for the htop process viewer.
- Lazygit (
.config/lazygit/config.yml
):- Theme and editor settings for the Lazygit terminal UI for Git.
- Edit the configuration files directly within this cloned repository (
~/.dotfiles
). - Since they are symlinked, changes will take effect immediately (or upon restarting the relevant application).
- Commit and push any changes to this repository to keep your dotfiles backed up and versioned.
- The
scripts/refresh-dotfiles.sh
script might be available to help automate tasks like re-applying symlinks or other maintenance actions. Check its contents for usage.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
This repository contains all of your personal configuration files (dotfiles), organized for clarity and easy reference. Each .config/
subfolder now includes a README.md
that explains its purpose, key features, and—where relevant—keymaps and shortcuts.
- Bash: Add custom keymaps in
bashrc
usingbind
orbind -x
(see.config/bash/README.md
). - Neovim: All keymaps are in
lua/keymaps.lua
(see.config/nvim/README.md
). - Kitty: Keymaps in
kitty.conf
(see.config/kitty/README.md
). - Tmux: Keymaps in
tmux.conf
(see.config/tmux/README.md
). - Lazygit: Custom commands in
config.yml
(see.config/lazygit/README.md
). - WezTerm: Keymaps in
wezterm.lua
(see.config/wezterm/README.md
). - VS Code: Keymaps set in the UI or
keybindings.json
(see.config/.vscode/README.md
).
- Each
.config/
folder is self-documented—open itsREADME.md
for details on usage, keymaps, and customization. - For a summary of all available shortcuts, check the relevant
README.md
or config file in each folder.
- Edit config files directly in this repo.
- Refer to each folder's
README.md
for tips on adding or updating keymaps and shortcuts. - After changes, reload the relevant app (or source the config) to apply updates.
Tip: Use these READMEs as your quick reference for all your customizations and shortcuts!