Skip to content
kaarmuPublic

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Latest commit

 

History

51 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Dotfiles

Personal mise configuration for macOS, Ubuntu, and Fedora. Tools are managed by mise. The only system package is zsh on Linux (apt or dnf); macOS ships it.

Set up a new machine

Install mise and ensure Git access to this repository, then run:

mise bootstrap --adopt git@github.com:kaarmu/dotfiles.git

Mise adopts the repository as a checkout at ~/.config/mise, installs the declared tools, and applies the dotfiles declared in config.toml. The shell configuration is for Zsh. Bootstrap installs zsh on Linux and sets it as the login shell, which uses sudo and may ask for your password. Log out and back in (or open a new Zsh session) to activate mise.

Repository layout

  • config.toml: global tool versions and dotfile deployment rules.
  • dot_config/shell/.zshrc: portable Zsh configuration.
  • dot_config/bat/config: terminal-palette syntax highlighting.
  • dot_config/git/config: delta pager and interactive diff settings.
  • dot_config/nvim/: active Neovim configuration and native package lockfile.
  • dot_config/ghostty/: shared Ghostty settings for macOS and Linux.

Save and share changes

The deployed files are symlinked: edits to ~/.zshrc and ~/.config/nvim change this checkout directly. Review and publish them with ordinary Git:

git status
git diff
git add <files>
git commit -m "Update dotfiles"
git push

Commit nvim-pack-lock.json together with deliberate Neovim package updates.

The checkout lives at ~/.config/mise. Run the Git commands from that directory.

Update an existing machine

From any directory:

mise run update

This pulls the checkout (git pull --ff-only), runs mise bootstrap to apply the configuration, and runs mise upgrade to move tools that track latest to their newest versions.

If the pull changed nvim-pack-lock.json, restart Neovim (new plugins install on startup), then move existing plugins to the committed revisions and confirm with :write:

:lua vim.pack.update(nil, { target = 'lockfile' })

If bootstrap stops because a regular file already exists where a dotfile should be linked, merge anything you want to keep into this repository, then replace the file with mise bootstrap --force-dotfiles.

This setup uses explicit Git commits and pulls. Automatic mise dotfile-history sync is a separate repository model and is not enabled here. Local settings belong in ignored config.local.toml files.

Terminal colors

Ghostty selects Tomorrow (light) or Tomorrow Night (dark) from the system appearance. Its shared config is deployed to ~/.config/ghostty/config.ghostty on macOS and Linux. Reload Ghostty with Cmd+Shift+, on macOS or Ctrl+Shift+, on Linux. A macOS-only config in ~/Library/Application Support/com.mitchellh.ghostty/ can override the shared settings; keep personal overrides there if needed.

Neovim uses its built-in default colorscheme with true color disabled, so its colors come from Ghostty's ANSI palette. Leave Neovim's background unset: it detects the terminal background and adjusts its highlights automatically. Refocusing Neovim requests the current terminal background again. Bat and delta also use the terminal palette. Delta supports diff navigation with n and N. Jq uses its default terminal colors and disables colors when piped; no separate jq configuration is needed.

Neovim

Requires Neovim 0.12 or newer. Plugins use only the built-in vim.pack manager; there is no LSP, debugger, or Treesitter configuration. Leap follows its new Codeberg repository. Use :lua vim.pack.update() to review package updates. Commit the native lockfile with deliberate updates.

When migrating an existing installation, remove the old cached packages from inside Neovim once (they are no longer loaded by this config):

:lua vim.pack.del({ 'mason.nvim', 'nvim-lspconfig', 'vague.nvim' })

The leader key is backslash (\). Useful mappings:

Mapping Action
- Oil in the current window, like vinegar
\e Oil in a narrow left split (files open in that split)
s Leap in normal, visual, or operator-pending mode
\ff / \fb Find files / buffers
\fg Search file contents (requires rg or git)
\h Search help
\ac / :Codex Toggle Codex in a right sidebar
\aa / :Claude Toggle Claude in the same sidebar
\o Save the current file and reload the config

Mise installs the native codex and claude CLIs as part of bootstrap. On an existing machine, run mise install codex claude after updating the repository. Upgrade them with mise upgrade codex claude; Claude background auto-updates are disabled so mise controls its installed version. Sign in to each CLI separately on each machine; authentication stays with each tool. The sidebar uses Neovim's built-in terminal and does not require an AI plugin or send buffer contents on its own. Each working directory gets separate Codex and Claude processes. Switching or hiding a sidebar keeps its process alive until it exits or Neovim quits.

Inside an AI terminal, Esc reaches the tool normally. Ctrl+] enters Neovim normal mode to scroll, search, and yank; i resumes terminal input and q hides the pane. Ctrl+W followed by h/j/k/l moves to another editor window. Outside the terminal, use normal Vim window commands. External file changes are checked when returning from terminal mode or refocusing the editor; unsaved buffers are not silently overwritten.

A typical workflow is to open Neovim from the project root, save files with :wa, open either sidebar, and ask the tool to inspect or change files on disk. Return to the editor with Ctrl+W h, then use :Git diff to review the changes. The sidebar does not automatically attach your current file or selection; mention the file path or paste relevant text in your prompt when needed.

Delta is pinned to 0.18.2 for Intel macOS compatibility; bat, jq, and eza track latest. When eza is installed, ls (and l, ll, la) use it, and tree runs eza --tree; limit its depth with -L <n>. Without eza, ls falls back to the system command.

Git identity and credentials remain in ~/.gitconfig, which takes precedence over the shared Git settings.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages