This repository contains a comprehensive Nix flake configuration for managing dotfiles and user environment with Home Manager, specifically designed for a development workstation with extensive tooling.
- Fish shell as default shell with extensive custom configuration
- Go development environment with full toolchain (gopls, delve, golangci-lint)
- Neovim with Lazy.nvim plugin manager and comprehensive development setup
- Starship prompt with custom styling and Git integration
- Zoxide for intelligent directory navigation
- Git with conditional configuration for work/personal projects
- GPG with SSH agent integration and multiple key support
- Direnv with nix-direnv for project-specific environments
- Tmux with Rose Pine theme and enhanced keybindings
- Yazi file manager with custom keybindings and preview support
- Modern file tools: eza, bat, ripgrep, fd, tree
- Search & navigation: fzf, zoxide
- System monitoring: htop, gdu, fastfetch
- Development utilities: entr, lolcat, fortune
- Kubernetes: kubectl, helm, k9s, kubectx, kustomize, tilt
- Containerization: Docker, Docker Compose
- Infrastructure as Code: Terraform
- Cloud platforms: AWS CLI, Azure CLI, Google Cloud SDK
- Service mesh: Istio
- Go: Complete development toolchain
- Node.js: TypeScript and Bash language servers
- Markdown: Marksman language server
- Nix: nil language server and alejandra formatter
- Ollama for local AI models
- Obsidian for note-taking
- Auto-sync systemd service for notes repository
- Full Wayland support for modern Linux desktop
- Electron and Qt application compatibility
- Firefox and Mozilla applications optimized for Wayland
-
Install Nix (if not already installed):
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
-
Enable flakes (if not already enabled):
mkdir -p ~/.config/nix echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf
-
Clone this repository:
git clone <your-repo-url> cd <repo-directory>
-
Apply the Home Manager configuration:
nix run home-manager/master -- switch --flake .#aragao
After modifying home.nix, apply the changes:
home-manager switch --flake .#aragaoTo test your configuration without applying it:
home-manager build --flake .#aragaoEnter a temporary development environment:
nix developflake.nix- Main flake configuration defining inputs and outputshome.nix- Home Manager configuration with all user settingsneovim/- Comprehensive Neovim configuration with Lazy.nvimflake.lock- Lock file ensuring reproducible builds
The Fish shell is configured with:
- Extensive aliases for Git, Go, Kubernetes, Docker, and Terraform
- Custom functions for development workflows (
mkcd,gitclean,kpf,kshell,kwait) - Vi key bindings and custom key mappings
- Environment variables for Go development and Wayland support
- Custom greeting with fastfetch and fortune
Multi-account Git setup with conditional includes:
- Work projects (
/home/aragao/projects/work/): Uses work email and GPG key - Personal projects (
/home/aragao/projects/personal/): Uses personal email and GPG key - Automatic GPG signing for commits and tags
- Custom aliases for common Git operations
Modern Neovim configuration featuring:
- Lazy.nvim plugin manager
- LSP support for Go, TypeScript, and other languages
- Telescope for fuzzy finding and navigation
- Treesitter for syntax highlighting and code analysis
- Lualine status bar with custom styling
- Trouble for diagnostics and quickfix
- DAP for debugging support
- Conform for code formatting
- Oil for file tree navigation
Enhanced terminal multiplexer with:
- Rose Pine theme styling
- Vi key bindings
- Mouse support and better scrolling
- Window management improvements
- Plugin integration (sensible, vim-tmux-navigator, tmux-fzf)
Comprehensive cloud development setup:
- kubectl with custom aliases and functions
- k9s for cluster management
- kubectx/kubens for context switching
- Helm for package management
- Terraform for infrastructure
- Docker with custom aliases
Add new programs by extending the home.packages list in home.nix:
home.packages = with pkgs; [
your-new-package
another-package
];Update shell aliases in the programs.fish.shellAliases section:
shellAliases = {
custom = "your-command";
};Add new Neovim plugins or modify existing configuration in the neovim/ directory. The configuration is modular and easy to extend.
The configuration includes comprehensive Wayland support for modern Linux desktops, ensuring compatibility with:
- Electron applications
- Qt applications
- Firefox and other Mozilla applications
- SDL applications
- Java applications
A systemd user service automatically syncs the notes repository every 15 minutes, with desktop notifications for successful syncs.
- Fish not starting: Ensure the configuration is applied with
home-manager switch - Command not found: Check if the package is listed in
home.packages - Git configuration: Update the email addresses in
home.nixfor your work and personal accounts - GPG issues: Verify your GPG keys are properly configured and the agent is running
- Wayland issues: Check that the Wayland environment variables are properly set
This configuration requires:
- Nix with flakes enabled
- Home Manager
- A Linux system (tested on Arch Linux with aarch64)
- GPG keys for Git signing (optional but recommended)
Feel free to submit issues or pull requests to improve this configuration. The setup is designed to be modular and easily extensible.