# dotfiles Minimal personal development environment for Fedora Linux. **Stack:** Bash · Neovim · mise · GNU Stow → **New machine?** Start with [GETTING_STARTED.md](GETTING_STARTED.md) --- ## How stow works Stow creates symlinks from `~` into this repo, mirroring each package's internal directory structure. ``` dotfiles/bash/.bashrc → ~/.bashrc dotfiles/nvim/.config/nvim/init.lua → ~/.config/nvim/init.lua ``` Editing the symlink edits the repo file. Then commit like any other change. To stow a single package: ```bash stow --restow --target=$HOME --dir=~/dotfiles bash ``` --- ## Packages | Package | Symlinks to | Purpose | |---|---|---| | `bash` | `~/.bashrc` | Shell config, aliases, note functions | | `git` | `~/.gitconfig` | Git settings | | `mise` | `~/.config/mise/config.toml` | Runtime versions | | `nvim` | `~/.config/nvim/init.lua` | Neovim config | Note commands in `.bashrc` expect templates at `~/notes/templates/`. These come from your notes repo, not this one. --- ## Neovim Config is a single `init.lua` — read it top to bottom before using it. Plugins are managed by [lazy.nvim](https://github.com/folke/lazy.nvim) which bootstraps itself on first launch. **Installed plugins:** | Plugin | Purpose | |---|---| | `nvim-treesitter` | Syntax highlighting | | `nvim-lspconfig` + `mason` | Language servers | | `nvim-cmp` | Completion | | `telescope.nvim` | Fuzzy finder | | `Comment.nvim` | `gc` to comment | | `vim-sleuth` | Auto-detect indent | | `kanagawa.nvim` | Colorscheme | **Language servers installed automatically by Mason:** - `ts_ls` — TypeScript / JavaScript - `omnisharp` — C# and F# - `marksman` — Markdown - `lua_ls` — Lua (for editing this config) **Keymaps (leader = Space):** | Keys | Action | |---|---| | `Space ff` | Find files | | `Space fg` | Search text in files | | `Space fb` | Switch buffer | | `Space w` | Save | | `Space e` | File explorer | | `Space d` | Show diagnostic | | `Space rn` | Rename symbol | | `Space ca` | Code action | | `gd` | Go to definition | | `K` | Hover docs | | `[d` / `]d` | Prev / next diagnostic | | `Ctrl+h/j/k/l` | Move between splits | | `gcc` | Toggle comment | --- ## mise — runtime versions Configured in `mise/.config/mise/config.toml`. ```bash mise install # install all configured versions mise ls # list installed runtimes mise ls-remote node # list available node versions ``` To pin a version in a specific project, add a `.mise.toml` to that project directory. The global config here is the fallback. --- ## Bash aliases | Alias / Function | Does | |---|---| | `ll` | `ls -lah` with color | | `..` / `...` | Navigate up one / two directories | | `gs` / `ga` / `gc` / `gp` / `gl` | Git shortcuts | | `today` | Open or create today's daily note | | `thisweek` | Open or create this week's weekly note | | `inbox` | Open inbox for quick capture | | `tasks` | Grep all open tasks across notes | | `decisions` | Open decisions log | | `mkcd` | Create directory and cd into it | | `bashrc` | Edit and reload `.bashrc` | --- ## Notes workflow Notes live in `~/notes/` — a separate private git repo, not this one. The shell commands in `.bashrc` expect this structure to exist: ``` ~/notes/ ├── inbox.md ├── decisions.md ├── templates/ │ ├── daily.md │ └── weekly.md ├── daily/ └── weekly/ ``` Clone your notes repo to `~/notes/` before using the note commands. --- ## Dependencies | Tool | Install | |---|---| | `stow` | `dnf install stow` | | `git` | `dnf install git` | | `neovim` | `dnf install neovim` | | `ripgrep` | `dnf install ripgrep` (needed by Telescope) | | `mise` | `curl https://mise.run \| bash` | --- ## Learning resources - `nvim +Tutor` — built-in hands-on tutor, ~30 min - `man bash` — full bash reference - `https://www.shellcheck.net` — paste a script, get feedback - `https://mywiki.wooledge.org/BashGuide` — best bash guide - `:help` in nvim — the built-in docs are good