Personal dotfiles for Ubuntu Linux, organized by domain. Targets a Zsh + Neovim + tmux development environment with a modern terminal setup.
Configs are managed via symbolic links — edit once in this repo, changes reflect everywhere instantly.
# 1. Clone the repo
git clone https://github.com/mrp4sten/.dotfiles.git ~/.dotfiles
git submodule update --init --recursive
# 2. Install all tools
bash ~/.dotfiles/automation/install/bootstrap.sh
# 3. Link all configs
bash ~/.dotfiles/automation/install/install.sh
# 4. Reload your shell
exec zshThat's it. Two scripts, done.
# Prerequisites (one-time) — see docs/windows-setup.md
# Enable Developer Mode + Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 1. Clone
git clone https://github.com/mrp4sten/.dotfiles.git $HOME\.dotfiles
cd $HOME\.dotfiles
git submodule update --init --recursive
# 2. Install tools
pwsh -ExecutionPolicy Bypass -File automation\install\windows\bootstrap.ps1
# 3. Link configs
pwsh -File automation\install\windows\install.ps1
# 4. Reload shell
. $PROFILE.dotfiles/
├── automation/
│ ├── generators/config-craft/ # Scaffold JS/Webpack config files
│ └── install/
│ ├── bootstrap.sh # Install all tools (nvm, pyenv, lazygit, nvim, etc.)
│ ├── install.sh # Create all symlinks (~/.config → dotfiles)
│ └── desktop-craft.sh # Create .desktop launcher entries
├── core/
│ ├── editor/nvim/ # LazyVim-based Neovim setup
│ ├── multiplexer/tmux/ # tmux config + TPM plugins
│ ├── shell/bash/ # .bashrc + oh-my-bash
│ ├── shell/zsh/ # .zshrc + oh-my-zsh + starship prompt
│ └── terminal/
│ ├── ghostty/ # Ghostty terminal config
│ └── kitty/ # Kitty terminal config + color schemes
├── development/
│ ├── git/lazygit/ # Lazygit config
│ ├── IA/
│ │ ├── agents-teams-lite/ # Agent orchestration framework (git submodule)
│ │ └── opencode/ # opencode AI assistant config
│ ├── languages/{java,node,python}/ # Language tooling guides
│ └── vscode/ # VSCode settings.json
├── docs/ # Documentation
├── system/ # Boot, desktop, service configs
├── utilities/
│ └── system-info/fastfetch/ # fastfetch config (sm / md / lg layouts)
└── visual/ # Fonts, icons, themes, wallpapers (git submodules)
Installs every tool this setup depends on. Safe to re-run — skips anything already installed.
bash ~/.dotfiles/automation/install/bootstrap.sh # Install everything
bash ~/.dotfiles/automation/install/bootstrap.sh --core # Shell: zsh, oh-my-zsh, starship
bash ~/.dotfiles/automation/install/bootstrap.sh --langs # Runtimes: nvm, pyenv, sdkman
bash ~/.dotfiles/automation/install/bootstrap.sh --devtools # CLI: lazygit, fzf, bat, lsd, atuin...
bash ~/.dotfiles/automation/install/bootstrap.sh --apps # Apps: nvim, kitty, tmux+TPM, fontsWhat each flag installs:
| Flag | Tools |
|---|---|
--core |
zsh, oh-my-zsh + plugins, oh-my-bash, starship |
--langs |
nvm + Node LTS, pyenv + build deps, sdkman + Java 21 |
--devtools |
lazygit, fzf, atuin, lsd, bat + catppuccin themes, eza, gum, yazi, fastfetch, opencode, Homebrew, engram |
--apps |
Neovim AppImage, stylua, kitty, tmux + TPM, Nerd Fonts (Hack, Cascadia, Fantasque, Martian) |
Creates symbolic links from ~/.config and ~/ into this repo. Backs up anything it replaces.
bash ~/.dotfiles/automation/install/install.shSymlinks created:
| Link | Source in dotfiles |
|---|---|
~/.config/nvim |
core/editor/nvim/ |
~/.config/tmux |
core/multiplexer/tmux/ |
~/.config/kitty |
core/terminal/kitty/ |
~/.config/ghostty/config |
core/terminal/ghostty/config |
~/.config/lazygit |
development/git/lazygit/ |
~/.config/opencode |
development/IA/opencode/ |
~/.config/fastfetch |
utilities/system-info/fastfetch/ |
~/.config/starship.toml |
core/shell/zsh/starship.toml |
~/.config/Code/User/settings.json |
development/vscode/vscode/settings.json |
~/.zshrc |
core/shell/zsh/.zshrc |
~/.p10k.zsh |
core/shell/zsh/.p10k.zsh |
~/.bashrc |
core/shell/bash/.bashrc |
~/.git-prompt.sh |
core/shell/bash/.git-prompt.sh |
Interactively generates config files (.gitignore, .prettierrc, .htmlhintrc,
.stylelintrc.json, webpack.config.js) for JS/Webpack projects.
bash ~/.dotfiles/automation/generators/config-craft/config-craft.sh
# or via zsh function:
config_craftCreates .desktop launcher entries for AppImage or manually installed apps.
bash ~/.dotfiles/automation/install/desktop-craft.sh
# or via zsh function:
desktop_craftLazyVim-based setup. Plugins install automatically on first launch.
See core/editor/nvim/README.md for full setup guide.
oh-my-zsh + starship prompt. Config split across three files sourced by .zshrc:
| File | Purpose |
|---|---|
_aliases/utils.sh |
Aliases for lsd, bat, fastfetch, etc. |
_exports/exports.sh |
PATH, pyenv, nvm, sdkman, atuin exports |
_functions/functions.sh |
Shell functions: config_craft, desktop_craft |
See core/shell/zsh/README.md for full setup guide.
oh-my-bash + manual git prompt config.
See core/shell/bash/README.md for full setup guide.
TPM-managed plugins: tmux-sensible, vim-tmux-navigator, tmux-resurrect,
tmux-continuum, tmux-gruvbox, tmux-yank.
See core/multiplexer/tmux/README.md for full setup guide.
| Language | Manager | Config |
|---|---|---|
| Node.js | nvm | exports.sh — NVM_DIR |
| Python | pyenv | exports.sh — PYENV_ROOT |
| Java | sdkman | exports.sh — SDKMAN_DIR |
| Gradle / Maven | sdkman | via sdk install |
Detailed setup guides:
See development/git/lazygit/README.md
AI-powered development tools and agent orchestration:
- opencode — AI coding assistant in the terminal
- Agent Teams Lite — Agent orchestration framework
- Engram — Persistent memory for AI agents
See development/IA/README.md for full setup and usage.
Settings: development/vscode/vscode/settings.json
Highlights: 2-space indent, Hack Nerd Font Mono, Andromeda Italic theme,
format-on-save + organize-imports for JS/TS/Python/Shell.
Fresh install? Run these before anything else.
# 1. Update & upgrade
sudo apt-get install nala
sudo nala update && sudo nala upgrade
# 2. Common system packages
sudo nala install preload ubuntu-restricted-extras gnome-tweaks gnome-browser-connector gufw bleachbitFirefox — hardware acceleration: open about:config and set:
layers.acceleration.force-enabled→truegfx.webrender.all→true
DNS — switch to Google DNS via nmcli:
nmcli con mod "Wired connection 1" ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con mod "Wired connection 1" ipv6.dns "2001:4860:4860::8888 2001:4860:4860::8844"
nmcli con up "Wired connection 1"- Google Chrome, Firefox
- Kitty Terminal, Ghostty
- Visual Studio Code
- YouTube Music, Discord, OBS, Kdenlive
- Bruno, Postman
- LibreOffice, Thunderbird
- Bitwarden, Stacer, Timeshift, Ulauncher
lazygit— terminal UI for gityazi/ranger— terminal file managersatuin— shell history sync + searchfzf— fuzzy finder (history, file search)lsd— modernlsbat— moderncateza— modernls(eza successor)pass— GPG-based password managertmux— terminal multiplexerncdu— disk usage analyzeropencode— AI coding assistant in the terminalengram— Persistent memory for AI agents
- Supported platforms: Arch Linux, Ubuntu/Debian, Windows (native PowerShell)
- Configs are deployed via symlinks, not copies — edit in the repo, changes apply instantly
- See
AGENTS.mdfor coding conventions and script style guidelines - Git submodules live in
visual/— rungit submodule update --init --recursiveafter cloning