Cross-platform terminal environment setup — Neovim, Oh My Posh, and dev tools with psmux (Windows) or tmux (Linux/WSL).
Windows (PowerShell):
git clone <this-repo> ~/repos/dotfiles
cd ~/repos/dotfiles
.\setup.ps1Linux / WSL (zsh):
git clone <this-repo> ~/repos/dotfiles
cd ~/repos/dotfiles
chmod +x setup.sh scripts/*.sh scripts/fzf/*.sh
./setup.sh| Tool | Windows | Linux/WSL | Purpose |
|---|---|---|---|
| Neovim | scoop | apt | Text editor (aliased as vim) |
| fzf | scoop | apt | Fuzzy finder |
| ripgrep | scoop | apt | Fast search (rg) |
| sd | scoop | cargo | Find & replace (sed alternative) |
| glow | scoop | apt | Markdown renderer |
| Rust | rustup | rustup | Toolchain (needed by sd, omp-manager) |
| psmux | scoop | — | Terminal multiplexer (Windows) |
| tmux | — | apt | Terminal multiplexer (Linux) |
| Oh My Posh | scoop | installer script | Prompt theme engine |
| MesloLGS Nerd Font | oh-my-posh | oh-my-posh | Icons for Oh My Posh + terminal |
Windows — psmux (declared in config/.psmux.conf, installed via tmuxpanel):
- ppm — Plugin package manager
- psmux-pain-control — Pane/window key bindings
- psmux-prefix-highlight — Visual prefix indicator
- psmux-sidebar — Sidebar panel
- psmux-git-status — Git status in status bar
- psmux-continuum — Auto save/restore sessions
- psmux-resurrect — Session persistence
Linux/WSL — tmux (declared in config/.tmux.conf, installed via tpm):
- tmux-pain-control — Pane/window key bindings
- tmux-prefix-highlight — Visual prefix indicator
- tmux-continuum — Auto save/restore sessions
- tmux-resurrect — Session persistence
All prefixed with Ctrl+b unless noted (same on both platforms):
| Key | Action |
|---|---|
e |
Reload config |
P |
Reload shell profile |
| |
Split pane horizontally |
- |
Split pane vertically |
Shift+←/→ |
Previous/next window (no prefix) |
< / > |
Move current window left/right |
s |
Fuzzy switch session (fzf) |
w |
Fuzzy switch window (fzf) |
g |
Fuzzy switch pane (fzf) |
/ |
Search scrollback |
r |
Fuzzy find & replace across files (fzf) |
Config is config/init.lua (Lua). Uses lazy.nvim for plugin management.
Plugins: Gruvbox theme (dark, hard contrast) · Telescope (fuzzy finder) · Rustaceanvim (Rust LSP, code actions, debugging) · nvim-treesitter (syntax highlighting) · C# LSP via roslyn.nvim (Roslyn language server)
Note: roslyn.nvim requires Neovim ≥ 0.12 and the .NET SDK. The Roslyn server is installed as a global dotnet tool (
roslyn-language-server) byinstall-roslyn.ps1/.sh.
| File | Windows Destination | Linux Destination |
|---|---|---|
config/.psmux.conf |
~/.psmux.conf |
— |
config/.tmux.conf |
— | ~/.tmux.conf |
config/init.lua |
~/AppData/Local/nvim/init.lua |
~/.config/nvim/init.lua |
config/.ripgreprc |
~/.ripgreprc |
~/.ripgreprc |
This setup is incremental — edit configs or add plugins in the repo, then re-run:
.\setup.ps1 # Windows./setup.sh # Linux / WSL- Install scripts skip already-installed tools
- Config files are synced (repo → home) on every run
- New plugins are installed automatically
dotfiles/
├── setup.ps1 # Main entry point (Windows)
├── setup.sh # Main entry point (Linux/WSL)
├── config/
│ ├── .psmux.conf # Psmux config + plugin list (Windows)
│ ├── .tmux.conf # Tmux config + plugin list (Linux)
│ ├── .ripgreprc # Ripgrep config (cross-platform)
│ └── init.lua # Neovim config (cross-platform)
└── scripts/
├── install-scoop.ps1 # Scoop package manager (Win)
├── install-packages.sh # apt packages (Linux)
├── install-tools.ps1 # Dev tools via scoop (Win)
├── install-psmux.ps1 # psmux via scoop (Win)
├── install-tmux.sh # tmux + tpm (Linux)
├── install-psmux-plugins.ps1 # psmux plugins (Win)
├── install-tmux-plugins.sh # tmux plugins via tpm (Linux)
├── install-omp-manager.ps1 # oh-my-posh for PowerShell (Win)
├── install-omp.sh # oh-my-posh for zsh (Linux)
├── install-font.ps1 # Nerd Font + Windows Terminal (Win)
├── install-font.sh # Nerd Font + fontconfig (Linux)
├── install-rust.ps1 # Rust via rustup (Win)
├── install-rust.sh # Rust via rustup (Linux)
├── setup-vim.ps1 # Neovim config sync (Win)
├── setup-vim.sh # Neovim config sync (Linux)
├── install-roslyn.ps1 # C# LSP (Roslyn) via dotnet tool (Win)
├── install-roslyn.sh # C# LSP (Roslyn) via dotnet tool (Linux)
├── install-zig.ps1 # zig + sets CC=zig cc (Win, for tree-sitter)
└── fzf/
├── switch-session.ps1/.sh # Fuzzy session switcher
├── switch-window.ps1/.sh # Fuzzy window switcher
├── switch-pane.ps1/.sh # Fuzzy pane switcher
├── find-replace.ps1/.sh # Interactive find & replace
└── preview-diff.ps1/.sh # Diff preview for find-replace