Personal Linux dotfiles for a terminal-first workflow. This repo is symlinked
into $HOME with GNU Stow. Fish is the main shell.
The repo is public for reference and backup, but it is machine-specific in several places. Review it before you copy it onto another system.
- Fish as the main shell
- tmux for terminal multiplexing
- Neovim for editing
- starship for the prompt
- atuin for shell history
- yazi for file management
- lazygit and lazydocker
- opencode for AI editing
- ghostty, alacritty, and wezterm terminals
- Git, htop, and other app configs
This setup 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 app configs.config/fish/— Fish config, aliases, functions, completions, and scripts.config/opencode/— opencode config, agents, commands, and MCP servers.config/git/— Git config.config/starship.toml— prompt config.config/{ghostty,alacritty,yazi,atuin,lazygit,lazydocker}/— app configs.tmux.conf— upstream tmux base config. Do not edit this file..tmux.conf.local— personal tmux overrides.vimrc— fallback Vim config.wezterm.lua— WezTerm configenv-configs/— extra app and environment files.zsh/— legacy zsh config, kept for referenceredis.conf— placeholder for a standalone Redis config
Neovim is not currently checked in as a git submodule. .gitmodules is empty.
If you want the Neovim setup, add it as a submodule yourself.
Install the main tools with:
sudo dnf install fish tmux neovim git fzf zoxide starship ripgrep fd-find bat htop btop lazygit zoxide eza mpv procs gdu hyperfineInstall clipboard tools for tmux and terminal workflows:
sudo dnf install wl-clipboard xclip xselSome tools come from Homebrew/Linuxbrew instead of dnf:
brew install atuin yazi duf dua tabiew topgradeClone the repo:
git clone https://github.com/samarth-na/dotfiles.git ~/dotfilesThis repo has no bootstrap script and no stow setup. To use it, review the
files you want and symlink them manually. Example:
ln -s ~/dotfiles/.config/fish ~/.config/fish
ln -s ~/dotfiles/.config/opencode ~/.config/opencode
ln -s ~/dotfiles/.config/ghostty ~/.config/ghostty
ln -s ~/dotfiles/.config/alacritty ~/.config/alacritty
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 before you replace them.
After installing Fish, make it your login shell:
chsh -s $(which fish)The Fish config references these tools:
- starship
- atuin
- bun
- nvm
- go
- Homebrew/Linuxbrew
It also contains machine-specific paths. Review ~/.config/fish/config.fish
before you use it as-is.
This setup assumes JetBrains Mono Nerd Font. Install a Nerd Font first if icons or prompt symbols look wrong.
Some parts of this repo are intentionally personal. Review them before reuse:
- Hardcoded
/home/samarth/...paths - Homebrew paths under
/home/linuxbrew/.linuxbrew - GNOME
gsettingschanges in the shell startup - Local env files such as
/home/samarth/.deno/envand$HOME/.turso/env - Personal Git identity in
.config/git/config
Keep secrets and machine-local paths in untracked local files.
Pull changes with:
git pullThen restart Fish, tmux, or your terminal apps as needed.
- This repo is meant first for my own machines.
- It is still useful as reference or a starting point.
- Fork it, trim it, and make it yours instead of copying it blindly.