Skip to content

adeotek/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

87 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AdeoTEK Dotfiles

A comprehensive, modular collection of Linux dotfiles and automated installation scripts for setting up development environments across multiple distributions.

License Distributions Shell Packages

✨ Features

  • 🎯 Modular Architecture - 50+ individual installation scripts for granular control
  • 🐧 Multi-Distribution - Supports Arch, Debian, Ubuntu, Pop!OS, Fedora, and RHEL
  • πŸ”§ GNU Stow - Symlink-based configuration management
  • ⚑ Interactive & Unattended - Both modes supported for flexibility
  • πŸš€ Comprehensive Tools - Development tools, CLI utilities, desktop applications, AI coding assistants
  • 🎨 Shell Configurations - Bash and advanced ZSH configurations with Oh My Posh/Starship prompts
  • πŸ”’ WSL2 Support - Special handling for Windows Subsystem for Linux
  • πŸ§ͺ Dry Run & Verbose Modes - Test installations and debug with detailed output
  • πŸ“¦ Package Groups - Predefined groups (Minimal, Console, Desktop) for quick setup

πŸ“¦ What's Included

Development Tools

  • Languages: Node.js (v22/24), Python, Go (1.25.4), Rust, .NET SDK (10.0), PowerShell
  • Cloud/DevOps: Docker, AWS CLI, GCP CLI, Terraform, Ansible, Helm, kubectl
  • Editors: Neovim (with custom config), Zed, VS Code, JetBrains Toolbox
  • AI/Code Assistants: Claude Code, OpenCode

CLI Utilities

  • Core: git, tmux, fzf, ripgrep, bat, fd, eza, zoxide, yazi
  • System: fastfetch, onefetch, glow, GitHub CLI
  • Package Managers: Homebrew (Linux), Rustup

Shell Environments

  • Bash: Comprehensive configuration with Oh My Posh prompt (default) and Starship support
  • ZSH: Two configurations available (see zsh/README.md for details):
    • config.zsh β€” standard config requiring external plugins (zsh-syntax-highlighting, zsh-autosuggestions)
    • config-standalone.zsh β€” self-contained config with no plugin manager; recommended for new setups
  • Default prompt: Oh My Posh for Bash, Starship for ZSH

Desktop Applications

  • Terminals: Ghostty, Kitty, Tabby
  • Editors: VS Code, Zed, JetBrains Toolbox
  • Window Managers: Hyprland configuration

Prompts & Themes

  • Oh My Posh (with custom themes)
  • Starship (with custom config)

πŸš€ Quick Start

One-Line Installation

git clone https://github.com/adeotek/dotfiles.git ~/.dotfiles && ~/.dotfiles/setup.sh

Step-by-Step Installation

  1. Clone the repository:

    git clone https://github.com/adeotek/dotfiles.git ~/.dotfiles
    cd ~/.dotfiles
  2. Run the interactive setup:

    ./setup.sh
  3. Select installation mode:

    • Manual selection - Choose specific packages by ID
    • Minimal - Essential tools (base-tools, bash, git, tmux, yazi)
    • Console - Minimal + development tools (nodejs, golang, fastfetch, onefetch, glow, claude-code)
    • Desktop - Console + desktop apps (ghostty, zed)
    • Interactive - Prompted for each package individually
    • All - Everything including extra packages

Unattended Installation

For automated setups (CI/CD, provisioning):

# List all available packages
./unattended_setup.sh ls

# Install specific packages
./unattended_setup.sh --packages <package-1>,<package-2>,<package-3>,...

# Examples:
./unattended_setup.sh --packages base-tools,git,zsh,docker,nodejs
./unattended_setup.sh --packages git,nvim,tmux --verbose
./unattended_setup.sh --packages docker,nodejs --dry-run

πŸ“¦ Available Packages

The following packages can be installed individually or in groups:

Core/Minimal Packages

  • base-tools - Essential CLI utilities (fzf, ripgrep, bat, fd, eza, zoxide, etc.)
  • git - Git configuration with custom aliases and settings
  • bash - Bash shell configuration with Oh My Posh or Starship prompt
  • tmux - Terminal multiplexer configuration
  • yazi - Modern file manager

Development Languages & Runtimes

  • nodejs - Node.js runtime (v22/24, configurable)
  • python - Python programming environment
  • golang - Go programming language (v1.25.4)
  • dotnet - .NET SDK (v10.0)
  • rustup - Rust toolchain installer
  • powershell - PowerShell cross-platform shell

Cloud & DevOps Tools

  • docker - Container platform
  • ansible - Automation and configuration management
  • terraform - Infrastructure as Code
  • aws-cli - Amazon Web Services CLI
  • gcp-cli - Google Cloud Platform CLI
  • helm - Kubernetes package manager
  • kubectl - Kubernetes CLI

Editors & IDEs

  • nvim - Neovim with custom configuration
  • zed - Zed code editor
  • vscode - Visual Studio Code
  • jetbrains-toolbox - JetBrains development tools manager

Terminal Emulators

  • ghostty - Fast, native terminal emulator (Desktop tier)
  • kitty - GPU-accelerated terminal emulator (Desktop Extra)
  • tabby - Modern terminal application (Desktop Extra)

System & Display Tools

  • fastfetch - System information display
  • onefetch - Git repository information display
  • glow - Markdown renderer for the terminal

Developer Tools

  • github-cli - GitHub command-line interface
  • claude-code - Claude AI coding assistant
  • opencode - OpenCode configuration

Desktop Environment

  • hypr - Hyprland window manager configuration

Advanced Shell

  • zsh - Z shell with Oh My Zsh or standalone configuration

Package Groups

Packages are organized into logical tiers for easy installation:

  • Minimal: base-tools,bash,git,tmux,yazi
  • Console: Minimal + fastfetch,claude-code,glow,golang,nodejs,onefetch
  • Desktop: Console + ghostty,zed
  • Console Extra: ansible,aws-cli,docker,dotnet,github-cli,gcp-cli,helm,kubectl,nvim,opencode,powershell,python,rustup,terraform
  • Desktop Extra: Console Extra + kitty,tabby,vscode,jetbrains-toolbox
  • All Console: Console + Console Extra
  • All Desktop: Desktop + Desktop Extra

To see the complete, current list of available packages:

./unattended_setup.sh ls

πŸ“ Project Structure

dotfiles/
β”œβ”€β”€ setup.sh                    # Interactive setup script
β”œβ”€β”€ unattended_setup.sh         # Automated setup script
β”œβ”€β”€ update.sh                   # Update installed tools
β”œβ”€β”€ _scripts/
β”‚   └── core/                   # 50+ modular install scripts
β”‚       β”œβ”€β”€ _helpers.sh         # Shared functions library
β”‚       β”œβ”€β”€ _options.sh         # Package definitions
β”‚       β”œβ”€β”€ *-install.sh        # Tool installation scripts
β”‚       └── *-setup.sh          # Configuration setup scripts
β”œβ”€β”€ bash/                       # Bash configuration
β”‚   └── .config/bash/
β”‚       └── config.bash
β”œβ”€β”€ zsh/                        # ZSH configurations
β”‚   β”œβ”€β”€ README.md               # Detailed ZSH documentation
β”‚   └── .config/zsh/
β”‚       β”œβ”€β”€ config.zsh          # Standard ZSH config
β”‚       └── config-standalone.zsh  # Self-contained ZSH config
β”œβ”€β”€ git/                        # Git configuration
β”œβ”€β”€ nvim/                       # Neovim configuration
β”œβ”€β”€ tmux/                       # Tmux configuration
β”œβ”€β”€ kitty/                      # Kitty terminal config
β”œβ”€β”€ tabby/                      # Tabby terminal config
β”œβ”€β”€ zed/                        # Zed editor config
β”œβ”€β”€ hypr/                       # Hyprland config
β”œβ”€β”€ starship/                   # Starship prompt config
β”œβ”€β”€ oh-my-posh/                 # Oh My Posh themes
β”œβ”€β”€ yazi/                       # Yazi file manager config
β”œβ”€β”€ fastfetch/                  # Fastfetch system info config
β”œβ”€β”€ opencode/                   # OpenCode configuration
└── _extra/                     # Additional configs & templates

πŸ”§ Configuration Management

This project uses GNU Stow for symlink-based configuration management:

  • Configurations are organized in separate directories (bash/, git/, nvim/, etc.)
  • Each directory can be "stowed" independently to $HOME
  • Easy to enable/disable individual configs
  • No file copying - uses symlinks for instant updates
  • Simple backup and version control
  • Existing configurations are automatically backed up with .bak extension

How It Works

When you install a package like git or bash, the setup script:

  1. Backs up any existing configuration files
  2. Creates symlinks from ~/.dotfiles/<package>/ to $HOME
  3. Preserves your ability to customize with local override files

Example: Installing bash configuration creates:

  • ~/.bashrc β†’ symlink to ~/.dotfiles/bash/.bashrc
  • ~/.bashrc.local β†’ your local customizations (not tracked by git)

πŸ“‹ Supported Distributions

Distribution Versions Status
Arch Linux Rolling βœ… Fully Supported
Debian 11+, 12, 13 βœ… Fully Supported
Ubuntu 22.04, 24.04, 25.04+ βœ… Fully Supported
Pop!_OS 22.04+ βœ… Fully Supported
Fedora 40+ βœ… Fully Supported
RHEL 9+ βœ… Fully Supported
WSL2 All supported distros βœ… Special WSL2 support

🎯 Update System and Installed Tools

./update.sh

This will:

  • Update system packages (apt, dnf, pacman, etc.)
  • Update Flatpak packages
  • Update Homebrew packages
  • Update npm global packages
  • Update oh-my-posh

πŸ› οΈ Customization

Local Overrides

Create local configuration files that won't be tracked by git:

  • ~/.bashrc.local - Local bash customizations
  • ~/.zshrc.local - Local zsh customizations
  • ~/.config/git.user/config - User-specific git config

Default Versions

The following default versions are configured (see _scripts/core/_options.sh):

  • Node.js: v24 (all distributions)
  • .NET SDK: v10.0
  • Go: v1.25.4
  • Nerd Fonts: v3.4.0 (CascadiaCode)
  • Bash Prompt: Oh My Posh
  • ZSH Prompt: Starship

Modify Installation Options

Edit _scripts/core/_options.sh to change default versions, installation modes, or add new packages.

🐚 Changing Your Default Shell

Switch to ZSH

  1. Install ZSH if not already present:

    # Debian/Ubuntu/Pop!_OS
    sudo apt install zsh
    
    # Fedora/RHEL
    sudo dnf install zsh
    
    # Arch
    sudo pacman -S zsh
  2. Change your login shell:

    chsh -s $(which zsh)
  3. Log out and back in (or start a new terminal session) for the change to take effect.

  4. Set up the ZSH configuration via the dotfiles installer:

    ./unattended_setup.sh --packages zsh

    This uses Starship as the default prompt. To override:

    ./unattended_setup.sh --packages zsh --prompt oh-my-posh

Switch to Bash

  1. Change your login shell:

    chsh -s $(which bash)
  2. Log out and back in for the change to take effect.

  3. Set up the Bash configuration via the dotfiles installer:

    ./unattended_setup.sh --packages bash

    This uses Oh My Posh as the default prompt. To override:

    ./unattended_setup.sh --packages bash --prompt starship

Notes

  • chsh changes your login shell β€” the shell started when you open a terminal or log in.
  • In WSL2, you may need to set the default shell via your Windows Terminal profile or by editing /etc/passwd directly if chsh is not available.
  • Verify the change took effect with: echo $SHELL

πŸ’‘ Common Use Cases

Developer Workstation Setup

# Full development environment with Docker, Node.js, and Python
./unattended_setup.sh --packages base-tools,git,bash,tmux,nvim,docker,nodejs,python,github-cli

DevOps Engineer Setup

# Infrastructure and cloud tools
./unattended_setup.sh --packages base-tools,git,bash,docker,ansible,terraform,aws-cli,gcp-cli,kubectl

Minimal Console Setup

# Lightweight setup for servers
./unattended_setup.sh --packages base-tools,git,bash,tmux

Frontend Developer Setup

# Web development environment
./unattended_setup.sh --packages base-tools,git,bash,nodejs,vscode,github-cli

.NET Developer Setup

# .NET development environment
./unattended_setup.sh --packages base-tools,git,bash,dotnet,vscode,github-cli

Desktop Environment Setup

# Full desktop with Hyprland
./unattended_setup.sh --packages base-tools,git,bash,kitty,hypr,zed,vscode

πŸ§ͺ Testing

Dry Run Mode

Test what would be installed without making changes:

./unattended_setup.sh --packages git,nvim,tmux --dry-run

Verbose Mode

Enable verbose output for debugging:

./unattended_setup.sh --packages docker,nodejs --verbose

# Combine flags
./unattended_setup.sh --packages python,golang --verbose --dry-run

πŸ” Quick Reference

Essential Commands

# List all available packages
./unattended_setup.sh ls

# Interactive installation with menu
./setup.sh

# Install specific packages
./unattended_setup.sh --packages git,bash,tmux,nvim

# Test installation (dry run)
./unattended_setup.sh --packages docker,nodejs --dry-run

# Verbose output for debugging
./unattended_setup.sh --packages python --verbose

# Update all installed tools
./update.sh

Configuration Locations

  • Bash: ~/.config/bash/config.bash (sourced from ~/.bashrc)
  • ZSH: ~/.config/zsh/config.zsh or config-standalone.zsh
  • Git: ~/.config/git/config (user settings in ~/.config/git.user/config)
  • Neovim: ~/.config/nvim/
  • Tmux: ~/.config/tmux/tmux.conf
  • Kitty: ~/.config/kitty/kitty.conf
  • Yazi: ~/.config/yazi/
  • Oh My Posh: ~/.config/oh-my-posh/themes/

Local Override Files

These files are ignored by git and allow personal customizations:

  • ~/.bashrc.local - Local bash configuration
  • ~/.zshrc.local - Local ZSH configuration
  • ~/.config/git.user/config - User-specific git settings (name, email, etc.)

🀝 Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.

Development

When adding new installation scripts:

  1. Follow the existing script structure
  2. Use the helper functions from _scripts/core/_helpers.sh
  3. Support all major distributions (or clearly document limitations)
  4. Add dry-run and verbose mode support
  5. Test on multiple distributions
  6. Add the package to _options.sh in the appropriate tier array(s)
  7. Map the task type (install or setup) in the TASK_TYPES associative array
  8. Optionally add default arguments in the TASK_ARGS associative array (e.g. --prompt starship)

For detailed coding guidelines for AI agents and developers, see AGENTS.md.

Code Style

  • Use shellcheck for linting
  • Quote all variable expansions: "$variable"
  • Use [[ ]] for conditionals, not [ ]
  • Use 2 spaces for indentation (no tabs)
  • Add comprehensive error handling
  • Support --verbose and --dry-run flags
  • Use helper functions: cecho, decho, install_package, stow_package

πŸ“„ License

This project is open source and available under the MIT License.

πŸ› Troubleshooting

Common Issues

Permission Denied

# Make scripts executable
chmod +x setup.sh unattended_setup.sh update.sh

Package Not Found

# Verify package name
./unattended_setup.sh ls

Stow Conflicts

# Existing configs are automatically backed up with .bak extension
# To manually remove stowed configs:
cd ~/.dotfiles
stow -D bash  # Unstow bash config

System Update Fails

# Update manually first
sudo apt update && sudo apt upgrade  # Debian/Ubuntu
sudo dnf update  # Fedora/RHEL
sudo pacman -Syu  # Arch

Getting Help

For detailed error information, use verbose mode:

./unattended_setup.sh --packages <package> --verbose

Check individual script logs in verbose mode for specific issues.

πŸ™ Acknowledgments

  • Inspired by various dotfiles repositories across the GitHub community
  • Built with insights from Oh-My-Zsh, Prezto, and other shell frameworks
  • Special thanks to the creators of all the amazing tools included
  • Icons and terminal themes from Nerd Fonts project

Note: These dotfiles are personalized for development workflows but designed to be easily customizable. Feel free to fork and adapt to your needs!

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors