A modular and well-organized collection of configuration files for development environments across multiple operating systems.
- Modularity: Shell functions and scripts are organized in
./src/and loaded dynamically - Cross-platform: Support for Linux (Arch, Ubuntu), macOS, and various development environments
- Privacy-conscious: Private configurations managed via git submodules
- Make-driven: Simple, documented automation for setup and maintenance
dotfiles/
├── config/ # Configuration files for various tools
│ ├── bashrc # Bash configuration
│ ├── zshrc # Zsh configuration
│ ├── tmux.conf # Tmux configuration
│ ├── emacs/ # Emacs configuration
│ └── nvim/ # Neovim configuration
├── src/ # Modular shell functions and scripts
│ ├── functions/ # Domain-specific shell functions
│ └── scripts/ # Standalone utility scripts
├── makefiles/ # Modular Makefile components
│ ├── base.mk # Base variables and utilities
│ ├── shells.mk # Shell configuration
│ ├── tools.mk # Tool installations
│ └── distros/ # OS-specific configurations
├── distros/ # OS-specific installation scripts
├── private/ # Private configurations (git submodule)
└── docs/ # Documentation and examples
- POSIX-compatible shell (bash, zsh)
- make build system
- git for cloning and submodule management
- NERD font for proper display of shell prompts
sudo pacman -Syu base-devel git makesudo apt update && sudo apt upgrade -y
sudo apt install build-essential git make dnsutils# Install Homebrew first
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"-
Clone the repository:
git clone https://github.com/asajaroff/dotfiles.git ~/Code/github.com/asajaroff/dotfiles cd ~/Code/github.com/asajaroff/dotfiles
-
Initialize everything:
make init
-
Set up shell configurations:
make shells
Run make help to see all available targets:
make init- Initialize git config and private submodulesmake workspace- Create workspace directory structuremake shells- Set up bash, zsh, and tmux configurations
make archlinux- Install Arch Linux packagesmake ubuntu- Install Ubuntu/Debian packagesmake macos-base- Install basic macOS packages
make emacs- Set up Emacs configurationmake kubernetes- Install kubectl, helm, kubectxmake tenv- Install Terraform environment managermake istioctl- Install Istio service mesh CLI
make update- Update system packages (OS-agnostic)
- Starship prompt with Git integration
- Custom aliases for common development tasks
- Modular functions organized by domain (AWS, Git, Kubernetes, etc.)
- Cross-shell compatibility (bash/zsh)
- Tmux with vi key bindings and proper clipboard integration
- Emacs with evil mode and use-package management
- Neovim with LSP support for Go, Python, Bash, YAML
- Git with sensible defaults and helpful aliases
- Arch Linux: pacman integration and AUR helpers
- macOS: Homebrew integration and native app management
- Ubuntu/Debian: apt integration and package management
This dotfiles setup supports private configurations through git submodules:
-
Set up private submodule:
make git-submodules-private
-
Private configurations are stored in:
private/ ├── functions/ # Private shell functions ├── bin/ # Private scripts and binaries └── config/ # Private config files
Create new shell functions in src/functions/ organized by domain:
src/functions/
├── aws.sh # AWS-related functions
├── git.sh # Git utilities
├── kubernetes.sh # Kubernetes helpers
└── your-domain.sh # Your custom functionsAdd new OS support in makefiles/distros/:
makefiles/distros/
├── arch.mk # Arch Linux
├── ubuntu.mk # Ubuntu/Debian
├── macos.mk # macOS
└── fedora.mk # Your new OS- Fork the repository
- Create a feature branch
- Make your changes
- Test across different environments
- Submit a pull request
This project is licensed under the GPL-3.0 License - see the LICENSE file for details.
Current version: Development branch (feat/workflows) Latest stable: v0.2.0
See CHANGELOG.md for detailed version history.