Personal Fedora/Linux dotfiles for my terminal-first development workflow.
This repo is centered on Fish, tmux, Neovim, and a small set of CLI tools I use every day. It is public for reference and backup, but it is still opinionated and machine-specific in a few places, so review before copying it directly onto your system.
fishas the main shelltmuxfor terminal multiplexingnvimfor editingstarshipfor the promptatuinfor historyyazifor file managementlazygitandlazydocker- terminal configs for
ghostty,alacritty, andwezterm - Git, htop, and a few extra app/env configs
This setup currently assumes:
- Fedora or another
dnf-based Linux distro - an XDG-style config layout under
~/.config - GNOME in some places
- a Nerd Font, especially JetBrains Mono Nerd Font
- Homebrew/Linuxbrew for a few extra CLI packages
.config/- main XDG application configs.config/fish/- Fish config, aliases, functions, completions, and scripts.config/nvim/- Neovim config managed as a git submodule.config/ghostty/- Ghostty terminal config.config/alacritty/- Alacritty config.config/git/- Git config.config/yazi/- Yazi config.tmux.conf- upstream tmux base config.tmux.conf.local- personal tmux overrides.vimrc- fallback Vim config.wezterm.lua- WezTerm configenv-configs/- extra app and environment config filesredis.conf- standalone Redis config
Main tools I expect to have installed:
sudo dnf install fish tmux neovim git fzf zoxide starship ripgrep fd-find bat htop btop lazygit zoxide eza mpv procs gdu hyperfineUseful clipboard tools for tmux and terminal workflows:
sudo dnf install wl-clipboard xclip xselSome tools I use come from Homebrew/Linuxbrew instead of dnf:
brew install atuin yazi duf dua tabiew topgradeClone the repo with submodules so Neovim is pulled in too:
git clone --recurse-submodules <your-repo-url> ~/dotfilesIf you already cloned without submodules:
git submodule update --init --recursiveThis repo does not currently ship with a bootstrap script or a stow setup, so the safe way to use it is to review the files you want and symlink them manually.
Example:
ln -s ~/dotfiles/.config/fish ~/.config/fish
ln -s ~/dotfiles/.config/ghostty ~/.config/ghostty
ln -s ~/dotfiles/.config/alacritty ~/.config/alacritty
ln -s ~/dotfiles/.config/nvim ~/.config/nvim
ln -s ~/dotfiles/.config/git ~/.config/git
ln -s ~/dotfiles/.config/yazi ~/.config/yazi
ln -s ~/dotfiles/.tmux.conf ~/.tmux.conf
ln -s ~/dotfiles/.tmux.conf.local ~/.tmux.conf.local
ln -s ~/dotfiles/.wezterm.lua ~/.wezterm.luaBack up your existing configs first if you already use any of these tools.
Fish is the main shell in this repo.
After installing it:
chsh -s $(which fish)The Fish config expects or references tools such as:
starshipatuinbunnvmgo- Homebrew/Linuxbrew
There are also a few machine-specific paths in the current config, so review ~/.config/fish/config.fish before using it as-is.
Neovim lives in .config/nvim/ and is tracked as a git submodule:
git submodule update --init --recursiveIf you want the full setup, make sure the language/runtime tools your Neovim config depends on are installed too.
This setup assumes JetBrains Mono Nerd Font.
I use it across terminal and editor configs, so install a Nerd Font first if icons or prompt symbols look wrong.
Some parts of this repo are intentionally personal and should be reviewed before reuse:
- hardcoded
/home/samarth/...paths - Homebrew path assumptions under
/home/linuxbrew/.linuxbrew - GNOME
gsettingschanges in shell startup - local env files such as
/home/samarth/.deno/envand$HOME/.turso/env - personal Git identity in
.config/git/config
If you adapt this repo, keep secrets, machine-local paths, and personal identity settings in untracked local files.
Other tools I use in this repo:
ghosttyalacrittyweztermlazydockerredis- browser and CSS snippets under
env-configs/
Update the repo and its submodules with:
git pull
git submodule update --init --recursiveThen restart Fish, tmux, or your terminal apps as needed.
- This repo is meant first for my own machines
- it should still be useful as reference or a starting point
- fork it, trim it, and make it yours instead of copying it blindly