A modern, keyboard-driven Wayland desktop environment for developers who love vim keybindings
- โจ Features
- ๐ผ๏ธ Screenshots
- ๐จ What's Inside
- ๐ป Hardware
- ๐ง Installation
- โ๏ธ Configuration
- โจ๏ธ Keybindings
- ๐ ๏ธ Troubleshooting
- ๐ Documentation
- ๐ Changelog
Optimized for laptops with Intel + NVIDIA GPUs. Eliminates input lag on external displays through smart GPU routing.
- ๐บ Internal display โ Intel iGPU (direct rendering)
- ๐ฅ๏ธ External display โ NVIDIA dGPU (direct rendering)
- โก No cross-GPU frame copying = zero lag
- ๐ Full docs: NVIDIA_HYBRID_FIX.md
- ๐ Auto brightness detection (internal vs external)
- ๐๏ธ F5/F6 for brightness control (5% steps)
- ๐ฅ๏ธ Super+P to toggle monitors
- ๐ก Waybar brightness widget with scroll support
- ๐ฏ hjkl navigation throughout the system
- ๐ช Window management with vim bindings
- ๐ Consistent keybindings across all apps
- ๐ Super (Windows) key as modifier
- ๐ Gruvbox color scheme
- ๐ญ Arc-Dark GTK theme
- โก Buttery smooth animations
- ๐ผ๏ธ Transparent terminal (0.8 opacity)
- ๐ Lock screen with blur effect
- ๐ Waybar status bar with custom modules
- ๐ฅ๏ธ Kitty terminal with Gruvbox theme
| Component | What I Use | Why |
|---|---|---|
| ๐ Compositor | Hyprland 0.53.3 | Modern tiling Wayland compositor |
| ๐ Bar | Waybar | Highly customizable status bar |
| ๐ป Terminal | Kitty | Fast, GPU-accelerated, Wayland-native |
| ๐ฅ Dropdown | Kitty (Super+C / F12) | Centered floating scratchpad terminal |
| ๐ Launcher | Rofi | Quick app launcher |
| ๐ Notifications | mako | Lightweight notification daemon |
| ๐ Lock | hyprlock | Beautiful lock screen with blur |
| ๐ธ Screenshots | grim + slurp + swappy | Screenshot, select, edit, done! |
- ๐ Editors: Neovim + VS Code (Wayland-native)
- ๐ IDE: PyCharm (native Wayland via WLToolkit)
- ๐ Shell: ZSH with custom completions
- ๐ฆ Dotfiles: Bare git repo (no symlinks!)
- ๐ต Audio: PipeWire + WirePlumber (auto device switching)
- ๐ง USB-C headphones: Plug & play, auto-routes on connect/disconnect
- ๐ Volume: wpctl with 100% cap (
wpctl set-volume -l 1.0) - ๐ PDF: Sioyek (replaced Zathura)
- ๐ฌ Video: mpv (Vulkan,
gpu-next, uosc + thumbfast)
- ๐จ GTK: Arc-Dark
- ๐ญ Icons: Papirus-Dark
- ๐ค UI Font: Noto Sans 10
- ๐ป Terminal Font: Hack 10
- ๐ Colors: Gruvbox Dark Soft
- Terminal:
#32302f - Waybar:
#1d2021
- Terminal:
Device: ThinkPad X1 Extreme 2nd Gen (20QV0007US)
| Component | Spec |
|---|---|
| ๐ง CPU | Intel i7-9750H (6c/12t) @ 4.5GHz |
| ๐ฎ iGPU | Intel UHD 630 |
| ๐ฅ๏ธ dGPU | NVIDIA GTX 1650 Mobile |
| ๐ฑ Internal | 1920ร1080 @ 60Hz (eDP-1) |
| ๐ฅ๏ธ External | ASUS PA279CV 27" 4K @ 60Hz (DP-2, 1.5ร scale) |
# Core desktop
sudo pacman -S hyprland waybar kitty rofi mako swaybg grim slurp swappy
# Audio (PipeWire + WirePlumber for auto device switching)
sudo pacman -S pipewire pipewire-pulse wireplumber
# Fonts & themes
sudo pacman -S ttf-jetbrains-mono-nerd ttf-nerd-fonts-symbols
sudo pacman -S arc-gtk-theme papirus-icon-theme
# Hybrid GPU support
sudo pacman -S nvidia-open-lts brightnessctl ddcutil
# Development tools
sudo pacman -S neovim zsh fzf ripgrep# Clone as bare repo
git clone --bare https://github.com/funnydman/my-dot-files.git $HOME/.cfg
# Setup alias
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
# Checkout configs
config checkout master
# Hide untracked files
config config --local status.showUntrackedFiles no# NVIDIA setup
sudo systemctl enable --now nvidia-persistenced
sudo udevadm control --reload-rules && sudo udevadm trigger
# Fonts
fc-cache -fv
# Launch Hyprland
Hyprland๐ Hyprland Configs
~/.config/hypr/hyprland.conf(460 lines) - Main configuration~/.config/hypr/hypridle.conf- Idle management~/.config/hypr/hyprlock.conf- Lock screen config~/.config/hypr/hyprpaper.conf- Wallpaper settings~/.config/hypr/NVIDIA_HYBRID_FIX.md- GPU docs
๐ Status Bar
~/.config/waybar/config(120 lines) - Modules & layout~/.config/waybar/style.css(285 lines) - Gruvbox styling
๐ป Terminal
~/.config/kitty/kitty.conf(105 lines) - Kitty config (also used as dropdown terminal)~/.claude/keybindings.json- Claude Code keybindings (image paste on Ctrl+Shift+V)
Copy/Paste Setup (IDE-style):
Ctrl+C- Copy if text selected, SIGINT if not (copy_and_clear_or_interrupt)Ctrl+V- Paste text from clipboardCtrl+Shift+V- Paste image (in Claude Code only)- Remote control enabled (
allow_remote_control socket-only) for TUI app compatibility
๐จ Theme
~/.config/gtk-3.0/settings.ini- GTK3 theme~/.config/gtk-4.0/settings.ini- GTK4 theme~/.gtkrc-2.0- GTK2 legacy~/.config/fontconfig/fonts.conf- Font rendering~/.Xresources- Xft settings
๐ Development
~/.config/nvim/init.vim(209 lines) - Neovim config~/.ideavimrc- Vim bindings for PyCharm~/.config/code-flags.conf- VS Code Wayland flags~/.zshrc(184 lines) - Shell config
๐ Smart Brightness (~/.config/scripts/brightness-adjust.sh)
- Auto-detects which display is active
- Internal:
brightnessctlfor laptop screen - External:
ddcutilfor monitor (DDC/CI)
๐ฅ๏ธ Monitor Toggle (~/.config/scripts/monitor-toggle.sh)
- Switch between internal/external displays
- Bound to Super+P
- Auto-runs on startup
๐ Volume Control (direct in hyprland.conf)
- Uses
wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+directly - Legacy
volume.shscript no longer used by media keys
Note:
Mod= Super (Windows key)
| Keys | Action |
|---|---|
Mod + Return |
๐ป Launch terminal |
Mod + Q |
โ Close window |
Mod + F |
โถ Toggle fullscreen |
Mod + Shift + Space |
๐ Toggle floating |
Mod + hjkl / Arrows |
๐งญ Focus windows |
Mod + Shift + hjkl / Arrows |
๐ Move windows |
| Keys | Action |
|---|---|
Mod + 1-9, 0 |
๐ข Switch workspace 1-10 |
Mod + Shift + 1-9, 0 |
๐ฆ Move window to workspace |
Mod + Tab |
โฎ๏ธ Previous workspace |
| Keys | Action |
|---|---|
Ctrl + C |
๐ Copy (if selected) / SIGINT (if not) |
Ctrl + V |
๐ Paste text from clipboard |
Ctrl + Shift + V |
๐ผ๏ธ Paste image (Claude Code) |
Shift + Insert |
๐ Paste text (alternative) |
Nuance: Kitty intercepts
Ctrl+Vfor text paste before TUI apps see it. Claude Code's image paste is remapped toCtrl+Shift+Vvia~/.claude/keybindings.json. Kitty's defaultCtrl+Shift+Vis cleared so it passes through to Claude Code.
| Keys | Action |
|---|---|
Mod + D |
๐ Launch Rofi |
Mod + C / F12 |
๐ฅ Toggle kitty dropdown |
Mod + Escape |
๐ Lock screen |
| Keys | Action |
|---|---|
Mod + P |
๐ฅ๏ธ Toggle monitor |
F5 / F6 |
๐ Brightness down/up |
Print |
๐ธ Screenshot region |
Shift + Print |
๐ธ Screenshot fullscreen |
XF86Audio* |
๐ Volume/media controls |
| Keys | Mode |
|---|---|
Mod + R |
๐ Resize mode (hjkl/arrows to resize) |
Mod + X |
๐ช Exit mode (L=logout, R=reboot, S=shutdown) |
Mod + Shift + G |
๐ Gap mode (O=outer, I=inner) |
๐ Full keybindings: ~/.config/hypr/hyprland.conf (lines 209-393)
Symptoms: 0.1-0.3s delay when typing/moving mouse
Fix: Apply the GPU configuration from NVIDIA_HYBRID_FIX.md
- Creates stable GPU device symlinks
- Routes each display to its physically-connected GPU
- Eliminates cross-GPU frame copying
# Rebuild font cache
fc-cache -fv
# Verify Nerd Fonts are installed
pango-list | grep -i nerd
# Check config
cat ~/.config/fontconfig/fonts.conf# Install fonts
sudo pacman -S ttf-jetbrains-mono-nerd ttf-nerd-fonts-symbols
# Restart waybar
killall waybar && waybar &Internal display: Check brightnessctl -l
External display: Verify DDC/CI support
ddcutil detectCheck GPU configuration in ~/.config/hypr/hyprland.conf:
- Verify
AQ_DRM_DEVICESsetting - See troubleshooting in
NVIDIA_HYBRID_FIX.md
PyCharm 2026's reworked terminal engine breaks zsh vi-mode. Fix:
- Disable "Move focus to editor with Esc" โ Settings โ Tools โ Terminal, uncheck it. Intercepts ESC before zsh vi-mode can receive it.
- Disable Shell integration โ Settings โ Tools โ Terminal, uncheck Shell integration. Still intercepts input even after the ESC fix.
If keyboard was on Russian layout when screen locked, hyprlock inherits that layout and you can't type your password. Already fixed: hyprctl switchxkblayout all 0 runs before hyprlock in both hyprland.conf and hypridle.conf.
# Hyprland logs
cat ~/.hyprland.log
# Check which GPU is rendering
cat /proc/$(pgrep -x Hyprland)/maps | grep -E "nvidia|i915"
# Waybar debug
killall waybar && waybar-
๐ฎ NVIDIA_HYBRID_FIX.md - Complete hybrid GPU setup guide
- Root cause analysis of input lag
- Step-by-step fix with udev rules
- Verification commands
-
โจ๏ธ IDEAVIM_GUIDE.md - IdeaVim configuration & plugins
- Available plugins (20+ options)
- Recommended additions (which-key, NERDTree, exchange)
- Modern best practices (2025-2026)
- Action mappings for refactoring & testing
-
๐ brightness-auto-detection.md - DDC bus auto-detection for external monitor brightness
-
๐ mac-setup.md - MacBook Pro M4 Pro setup (display, sleep, audio, KVM)
-
๐ช flexispot-e7-plus-memory.md - FlexiSpot E7 Plus memory presets
Managing dotfiles:
# Add new config
config add ~/.config/newapp/config.conf
config commit -m "Add newapp config"
config push
# Check status
config status
# List tracked files
config ls-filesConfig locations:
- ๐ Hyprland:
~/.config/hypr/ - ๐ Waybar:
~/.config/waybar/ - ๐ง Scripts:
~/.config/scripts/ - ๐ Docs:
~/.config/*.md
| Version | Date | Changes |
|---|---|---|
| v2.2 | 2026-03 | ๐ง Media & Fixes |
| - Added Sioyek PDF viewer (replaced Zathura) | ||
| - Added mpv with Vulkan, uosc, thumbfast | ||
| - Fixed hyprlock Russian layout lockout (auto-switch to EN before lock) | ||
| - Volume keys now use wpctl directly (replaced broken volume.sh) | ||
| - Fixed monitor-toggle detection for disabled displays | ||
| - WirePlumber priority config for stable audio defaults | ||
| - Waybar startup race condition fix (delayed start) | ||
| - Kitty Ctrl+F search in terminal | ||
| v2.1 | 2026-02 | ๐ง Polish & Modernization |
| - Replaced Guake with Kitty dropdown (Super+C, centered float) | ||
| - Per-app scratchpads (Telegram, KeePass) | ||
| - PipeWire + WirePlumber (auto USB-C audio switching) | ||
| - Fixed font rendering with croscore metric-compatible fonts | ||
| - Focus follows mouse | ||
| v2.0 | 2025-02 | ๐ Hyprland/Wayland Migration |
| - Switched from i3 to Hyprland | ||
| - X11 โ Wayland (native) | ||
| - polybar โ Waybar | ||
| - st โ Kitty (Wayland-native) | ||
| - i3lock-fancy โ hyprlock | ||
| - dunst โ mako | ||
| - Fixed NVIDIA hybrid GPU input lag | ||
| - Preserved vim keybindings & workflow | ||
| v1.0 | 2020 | ๐ Initial i3/X11 setup |
Despite the major migration, these features remained unchanged:
- โจ๏ธ Vim-style hjkl navigation
- ๐ข Workspace numbers (1-10)
- ๐ฅ Dropdown terminal (now Kitty instead of Guake)
- ๐ Negative gaps (i3-style: 4px inner, -4px outer)
- ๐จ Arc-Dark + Gruvbox theme combination
- โก Zero-lag external display support
- ๐ฎ Hybrid GPU optimization
- ๐ Smart brightness control
- ๐ฅ๏ธ Monitor toggle (Super+P)
- ๐ธ Modern screenshot workflow (grim + slurp + swappy)
- ๐ญ Native Wayland app support
- Hyprland - Amazing Wayland compositor
- Waybar - Highly customizable status bar
- Gruvbox - Retro groove color scheme
- Arc Theme - Flat GTK theme
- Nerd Fonts - Icon fonts for developers
Personal dotfiles - use freely, modify as needed! ๐
