Personal Linux configuration files, built around an Arch-based setup with Neovim as the primary editor, a Sway (Wayland) desktop, and a set of rofi-powered launcher scripts.
The repository is expected to live at ~/projects/dotfiles — several configs and scripts reference that path directly.
dotfiles/
├── nvim/ # Neovim configuration (the centerpiece)
│ ├── init.lua # Entry point → loads lua/kheb
│ ├── lazy-lock.json # Locked plugin versions
│ ├── lua/kheb/ # Options, plugin manager, keymaps
│ ├── after/plugin/ # Per-plugin setup files
│ └── after/snippets/ # Custom LuaSnip snippets (html, java)
├── sway/ # Sway window manager config
├── sxhkrc/ # sxhkd hotkey daemon config (X11)
├── waybar/ # Waybar status bar
├── rofi/ # Launcher themes + scripts
│ ├── projects.sh # Project picker (rofi + kitty + nvim)
│ ├── config.rasi # Base rofi config (adi1090x style)
│ ├── project-picker.rasi # Theme for the project picker
│ ├── new-project.rasi # Theme for the "New Project" prompt
│ ├── launchers/ # App launcher theme variants
│ ├── applets/ # Applet themes
│ ├── powermenu/ # Power menu themes
│ ├── scripts/ # Launcher scripts
│ └── colors/ # Color scheme themes
├── kitty/ # Kitty terminal emulator
├── tmux/ # Tmux config
├── zsh/ # Zsh config (aliases, plugins, paths)
├── qutebrowser/ # Qutebrowser config
├── website-picker/ # Rofi website launcher script
├── sddm-minimal/ # Minimal SDDM login theme
├── fastfetch/ # Fastfetch system info
├── xdg-desktop-portal/ # Portal backend preferences
├── keyd/ # keyd keyboard remapping (Caps Lock → Esc)
├── .ideavimrc # IdeaVim config (IntelliJ)
└── .luarc.json # Lua language server config
Opens a rofi menu listing all folders in ~/projects (plus a New Project option). Selecting an entry opens it in kitty running nvim, dropping to a shell on exit. Bound to $mod+v in Sway.
Rofi menu of frequently visited sites (GitHub, Classroom, Drive, YouTube, ChatGPT, …). Opens the selection in Firefox. Special cases:
- LocalHost — prompts for a port and opens
http://localhost:<port> - CodeChum — opens in Chrome instead of Firefox
- Any other text — treated as a search, opened as a Google query (URL-encoded)
Requires Neovim 0.11+ (native LSP support) and uses lazy.nvim as the plugin manager (auto-bootstrapped on first run).
nvim/
├── init.lua # Entry point
├── lua/kheb/
│ ├── init.lua # Filetypes + editor options
│ ├── lazy.lua # Plugin manager bootstrap + plugin list
│ └── remap.lua # Leader keymaps, LSP + DAP bindings
├── after/plugin/ # One file per plugin: mason, cmp, telescope,
│ # treesitter, lspconfig, oil, colors, luasnip,
│ # livepreview, autopairs…
└── after/snippets/ # Custom snippets: html.lua, java.lua
- Native LSP via
nvim-lspconfig+ mason.nvim for server installs - LSP servers enabled:
clangd,rust_analyzer,gopls,ts_ls,pyright,bashls,lua_ls,templ,tailwindcss,html,cssls,kotlin_language_server,yamlls,jdtls,roslyn - Autocompletion — nvim-cmp (LSP, buffer, path sources) with LuaSnip snippets + friendly-snippets
- Treesitter — parsers for templ, html, css, javascript, lua, go, java, python, rust
- Debugging — nvim-dap with
codelldb(C/C++/Rust) and python, auto-opening dap-ui - Live preview for web dev (
live-preview.nvim) - Rose-pine color scheme with transparent background
- Compile & run with
compiler.nvim+overseer.nvim(e.g.gccviamakeprg) - SQL support with vim-dadbod + dadbod-ui + completion
- Auto-pairing (nvim-autopairs) and auto-tagging (nvim-ts-autotag)
- Visual settings: relative line numbers, clipboard = system, undo files, no swap/backup, smart case search
| Category | Keybind | Action |
|---|---|---|
| General | <leader>w |
Save file |
<leader>fq / <leader><Esc> |
Force quit / quit all | |
<leader>so |
Source current file | |
| Splits | <leader>sl / <leader>sj |
Vertical / horizontal split |
<C-h/j/k/l> |
Navigate splits | |
<A-h/j/k/l> |
Resize splits | |
<leader>sq / <leader>se |
Close split / equalize | |
| Buffers | <leader>l / <leader>h |
Next / previous buffer |
<leader>q |
Close buffer | |
| Terminal | <leader>t |
Open terminal in current directory (oil-aware) |
<Esc><Esc> (term) |
Exit terminal mode | |
| LSP | gd / gr / K |
Definition / references / hover |
<leader>rn / <leader>ca / <leader>f |
Rename / code action / format | |
<leader>z / <leader>Z |
Next / previous diagnostic | |
| Debug | <leader>dc / dn / di / do |
Continue / over / into / out |
<leader>b / <leader>B |
Toggle / conditional breakpoint | |
<leader>dr / dl / du / dq |
REPL / run last / toggle UI / terminate | |
| Find | <leader>ff / fg / fb / fh |
Telescope files / grep / buffers / help |
| Tools | <leader>e / - |
Toggle oil.nvim |
<leader>u |
Toggle undotree | |
<leader>gs |
Git status (fugitive) | |
<leader>` |
Start live preview | |
| Snippets | <C-v> (insert/select) |
Expand / jump (LuaSnip) |
| Completion | <Tab> / <S-Tab> / <CR> |
Select / confirm (nvim-cmp) |
Custom snippets live in after/snippets/ and are loaded via LuaSnip's Lua loader.
Wayland tiling window manager config. $mod = Super.
| Keybind | Action |
|---|---|
$mod+Return |
Launch kitty |
$mod+v |
Project picker (rofi/projects.sh) |
$mod+b |
Website picker |
$mod+Space |
App launcher (rofi) |
$mod+i |
nmtui (network) |
$mod+m |
btop (system monitor) |
$mod+e |
yazi (file manager) |
$mod+t |
Toggle waybar |
$mod+q |
Kill focused window |
$mod+h/j/k/l |
Focus left/down/up/right |
$mod+Shift+h/j/k/l |
Move window |
$mod+1..4 |
Named workspaces (main, second, third, fourth) |
$mod+Ctrl+h/l |
Previous / next workspace |
Print |
Screenshot region → clipboard (grim + slurp) |
F2/F3, F5/F6 |
Volume / brightness |
$mod+Delete / $mod+End / $mod+Home |
Power off / reboot / suspend |
X11 hotkey daemon config with similar bindings (launchers, workspaces, window management, media/volume/brightness keys, screenshots via flameshot, and power controls).
Top status bar with sway workspaces, CPU/memory stats drawer, volume, battery, and clock.
Minimal black login screen theme (password field centered, auto-login as user me).
- JetBrains Mono, 18pt, borderless window
ctrl+enter→ nvim overlay,ctrl+e→ yazi overlay (current dir),ctrl+f→ freebuffalt+hjklword movement,alt+j/kscroll,ctrl+±font zoomalt+tnew tab,alt+1..njump to tab
- Prefix changed to
Alt+a alt+tnew window,alt+1..njump to window, windows start at index 1
- Plugins: git, zsh-autopair, zsh-syntax-highlighting; vi-mode (
bindkey -v) - Lazy-loaded nvm
- Aliases for esp-idf, Android SDK/NDK, Java version switching (
java17/21/25), config editing (czsh,csway,ckitty), sway/zsh reloads - PATH additions: rofi scripts,
~/.local/bin, Go, Android platform-tools
Minimal config: h / l (space-prefixed) for previous / next tab.
| File | Purpose |
|---|---|
fastfetch/config.jsonc |
System info display modules |
xdg-desktop-portal/portals.conf |
Prefer wlr portal backend on Wayland |
keyd/default.conf |
Remap Caps Lock to Escape |
.ideavimrc |
IdeaVim setup for IntelliJ (leader Space, IDE action mappings) |
.luarc.json |
Lua language server globals (vim) for editing the nvim config |
Dotfiles are meant to be symlinked into their config locations. The repo is expected at ~/projects/dotfiles:
sudo ln -sf ~/projects/dotfiles/nvim ~/.config/nvim
sudo ln -sf ~/projects/dotfiles/kitty ~/.config/kitty
sudo ln -sf ~/projects/dotfiles/sway ~/.config/sway
sudo ln -sf ~/projects/dotfiles/waybar ~/.config/waybar
sudo ln -sf ~/projects/dotfiles/rofi ~/.config/rofi
sudo ln -sf ~/projects/dotfiles/tmux/tmux.conf ~/.tmux.conf
sudo ln -sf ~/projects/dotfiles/.ideavimrc ~/.ideavimrcNeovim 0.11+ is required. On first launch, lazy.nvim bootstraps itself and installs all plugins automatically:
nvimInstall language servers and debuggers with:
:Mason| Plugin | Purpose |
|---|---|
| lazy.nvim | Plugin manager |
| nvim-lspconfig, mason.nvim, mason-lspconfig.nvim | LSP setup & server installs |
| nvim-cmp + cmp-* sources | Autocompletion |
| LuaSnip, friendly-snippets | Snippets |
| nvim-treesitter, nvim-ts-autotag | Syntax highlighting & auto-tags |
| telescope.nvim, plenary.nvim | Fuzzy finding |
| undotree | Persistent undo history |
| vim-fugitive | Git integration |
| oil.nvim, oil-git-status.nvim | File explorer with git status |
| gitsigns.nvim | Git signs in the gutter |
| nvim-autopairs | Auto-close pairs |
| live-preview.nvim | Live HTML/CSS preview |
| compiler.nvim, overseer.nvim | Compile & run tasks |
| nvim-dap, nvim-dap-ui, nvim-dap-virtual-text, mason-nvim-dap | Debugging |
| vim-dadbod, vim-dadbod-ui, vim-dadbod-completion | SQL database client |
| rose-pine | Color scheme |
| nui.nvim, dressing.nvim, nvim-web-devicons | UI helpers & icons |