A comprehensive dotfiles setup for a modern development environment featuring Neovim, Fish shell, and Tmux with plugin management and LSP support.
- Neovim: Fully configured with LSP, autocompletion, Git integration, and modern plugins
- Fish Shell: Enhanced with tide prompt, aliases, and productivity functions
- Tmux: Configured with custom keybindings, mouse support, and status bar
- Cross-platform: Supports macOS, Linux (Arch, Debian/Ubuntu, Alpine), and FreeBSD
- Automated Setup: One-command installation via Makefile
makeThe setup will automatically detect your operating system and install all necessary packages and configurations.
- Location:
~/.config/nvim/init.lua - Purpose: Complete Neovim setup with modern IDE-like features
- Features:
- Plugin management with Packer
- LSP support for multiple languages (Go, Python, Terraform, Bash, etc.)
- Autocompletion with nvim-cmp and GitHub Copilot
- File explorer (Neo-tree), fuzzy finder (fzf), and diagnostics
- Git integration with fugitive and git-gutter
- Syntax highlighting with Treesitter
- Custom keybindings and carbonfox colorscheme
- Location:
~/.config/fish/config.fish - Purpose: Main Fish shell configuration with aliases and functions
- Features:
- OS-specific package manager aliases (
get,search) - Kubernetes shortcuts (
k,kp,kc) - Vim/Neovim aliases and integrations
- Custom functions for
cheatlookup and Git workflows - TTY fixes for Asahi Linux
- Bash-like
!!history expansion
- OS-specific package manager aliases (
- Location:
~/.config/fish/conf.d/envvars.fish - Purpose: Environment variable definitions for Fish shell
- Features:
- PATH additions for
~/binand~/.local/bin - Template for additional environment variables
- PATH additions for
- Location:
~/.tmux.conf - Purpose: Tmux terminal multiplexer configuration
- Features:
- Custom prefix key (Ctrl+A)
- Alt-based keybindings for panes and windows
- Mouse support enabled
- Status bar with CPU/RAM monitoring
- Plugin management with TPM
- 256-color terminal support
The Makefile runs 7 sequential scripts for a complete setup:
Installs essential packages based on your OS:
- Common packages: tmux, neovim, git, fish, curl, bat, go, npm, ripgrep
- macOS: Uses Homebrew
- Arch Linux: Uses pacman and installs yay AUR helper
- Debian/Ubuntu: Uses apt
- Alpine: Uses apk
- FreeBSD: Uses pkg
Copies configuration files to their proper locations:
- Creates necessary directories (
~/.config/nvim,~/.config/fish, etc.) - Copies config files to home directory
- Preserves existing
envvars.fishif present
Installs Fisher, the Fish shell plugin manager
Installs and configures Fish plugins:
- Tide: Modern, customizable prompt with Git integration
- Pre-configured with lean style and 24-hour time format
Sets up Tmux plugin management:
- Installs TPM (Tmux Plugin Manager)
- Installs configured plugins (better mouse mode, CPU monitoring)
Configures Neovim:
- Bootstraps Packer plugin manager
- Installs all configured plugins
- Sets up LSP servers via Mason
Completes the setup:
- Adds Fish to
/etc/shells - Changes default shell to Fish
- Creates
~/bindirectory for personal scripts
If you prefer manual installation or want to customize the process:
- Install packages manually: Check
install-scripts/01-install-packages.shfor your OS - Copy config files:
# Neovim mkdir -p ~/.config/nvim cp init.lua ~/.config/nvim/ # Fish mkdir -p ~/.config/fish/conf.d cp config.fish ~/.config/fish/ cp envvars.fish ~/.config/fish/conf.d/ # Tmux cp tmux.conf ~/.tmux.conf
- Run individual scripts: Execute scripts in
install-scripts/directory in order
- Internet connection for downloading packages and plugins
- Sudo access for package installation
- Git for cloning repositories
After installation:
- Restart your terminal or run
exec fishto start using Fish shell - Start tmux with
tmuxto use the enhanced terminal multiplexer - Open Neovim with
nvimto verify plugin installation - Customize: Edit config files to suit your preferences
All configuration files are designed to be easily customizable:
- Add Fish aliases: Edit
config.fish - Modify Neovim plugins: Edit
init.lua - Change Tmux keybindings: Edit
tmux.conf - Add environment variables: Edit
envvars.fish
- Permission errors: Ensure you have sudo access
- Package not found: Check if your OS is supported in the install scripts
- Plugin installation fails: Run individual scripts manually to identify issues
- Shell not changed: Log out and back in, or restart your terminal
This repository includes automated testing via GitHub Actions to ensure the dotfiles installation works correctly across multiple Linux distributions.
When you submit a pull request, the following automated checks run:
-
Multi-distro Testing: The installation is tested on:
- Alpine Linux
- Arch Linux
- Fedora
- Ubuntu
-
Docker-based Testing: Each distribution test runs in a containerized environment using Docker Buildx with QEMU for cross-platform compatibility
-
Build Verification: The GitHub Action (
pr-test.yml) verifies that the dotfiles can be successfully built on each supported platform
The PR testing workflow:
- Triggers on pull requests to
masterormainbranches - Uses a matrix strategy to test against multiple Linux distributions
- Sets up QEMU and Docker Buildx for multi-platform testing
- Builds the dotfiles installation in each distribution's container
This ensures that changes don't break compatibility with any supported operating system before they're merged.
Please don't contribute.