No description
  • Shell 69%
  • Lua 31%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jeremie Fraeys 589254275e
chore(wezterm): bump sessionizer for faster basename
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-17 13:12:17 -04:00
aerospace/.config/aerospace feat(theme): apply light/dark changes the moment the OS switches 2026-10-06 11:49:14 -04:00
bash refactor(shell): cut config to what's used; make failures loud 2026-10-06 11:47:09 -04:00
bat/.config/bat feat(bat): add default config 2026-09-10 11:12:08 -04:00
btop/.config/btop feat(theme): let tools follow the terminal palette instead of rewriting files 2026-10-06 11:47:21 -04:00
colima/.config/colima chore(repo): stop tracking runtime state and non-config packages 2026-10-06 11:12:43 -04:00
conda chore: remove unused configs (zathura, oh-my-zsh colour-ssh) 2026-02-07 21:03:15 -05:00
direnv/.config/direnv feat: track direnvrc and lazygit config 2026-10-06 11:12:43 -04:00
gh/.config/gh fix: update app configs (starship, btop, mpv, vim, aerospace, hyprland, gh) 2026-10-06 11:12:43 -04:00
git feat(git): add allowed signers for SSH commit verification 2026-10-06 11:14:02 -04:00
hyprland/.config/hypr fix: update app configs (starship, btop, mpv, vim, aerospace, hyprland, gh) 2026-10-06 11:12:43 -04:00
launchd/Library/LaunchAgents feat(theme): apply light/dark changes the moment the OS switches 2026-10-06 11:49:14 -04:00
lazygit/.config/lazygit fix(lazygit): use diffRenderers (git.paging is deprecated) 2026-10-06 12:06:56 -04:00
mlx-server/.config/mlx-server feat(stow): add mlx-server and openlogi packages 2026-09-10 11:12:02 -04:00
mpv/.config/mpv fix: update app configs (starship, btop, mpv, vim, aerospace, hyprland, gh) 2026-10-06 11:12:43 -04:00
nvim/.config chore(nvim): update nvim submodule 2026-09-24 07:35:31 -04:00
opencode/.config/opencode feat(theme): let tools follow the terminal palette instead of rewriting files 2026-10-06 11:47:21 -04:00
openlogi/.config/openlogi fix(openlogi): sync config with the app 2026-10-06 11:12:43 -04:00
parallel/.parallel chore(repo): stop tracking runtime state and non-config packages 2026-10-06 11:12:43 -04:00
rclone feat: add hyprland config and rclone gdrive service 2026-04-02 13:49:07 -04:00
shell-shared/.config/shell perf(zsh): cache tool inits, set vi keymap, skip untracked scan in prompt 2026-10-10 11:44:49 -04:00
starship/.config perf(zsh): cache tool inits, set vi keymap, skip untracked scan in prompt 2026-10-10 11:44:49 -04:00
systemd/.config/systemd/user feat(theme): apply light/dark changes the moment the OS switches 2026-10-06 11:49:14 -04:00
vim fix: update app configs (starship, btop, mpv, vim, aerospace, hyprland, gh) 2026-10-06 11:12:43 -04:00
wezterm chore(wezterm): bump sessionizer for faster basename 2026-10-17 13:12:17 -04:00
yt-dlp/.config/yt-dlp feat(yt-dlp): add config with browser cookies and download guard 2026-09-24 07:35:28 -04:00
zsh perf(zsh): cache tool inits, set vi keymap, skip untracked scan in prompt 2026-10-10 11:44:49 -04:00
.gitignore chore(repo): stop tracking runtime state and non-config packages 2026-10-06 11:12:43 -04:00
.gitmodules fix(gitmodules): correct submodule URL usernames 2026-09-24 07:42:04 -04:00
.luarc.json some changes 2024-07-21 21:04:51 -04:00
.stowrc chore(repo): stop tracking runtime state and non-config packages 2026-10-06 11:12:43 -04:00
default-apps refactor(shell): cut config to what's used; make failures loud 2026-10-06 11:47:09 -04:00
README.md feat(theme): apply light/dark changes the moment the OS switches 2026-10-06 11:49:14 -04:00
setup fix(setup): stop rewriting git.jfraeys.com to SSH 2026-10-06 11:55:52 -04:00

Dotfiles

Personal dotfiles managed with GNU Stow. macOS runs zsh, Linux runs bash, and both shells behave the same: they source one shared layer in shell-shared/.config/shell/.

Quick Start

git clone --recurse-submodules https://git.jfraeys.com/jfraeys/.dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./setup

Shell layout

File (~/.config/shell/) Loaded by Purpose
env.sh .zshenv, .zprofile, .bash_profile, .bashrc Environment + PATH (idempotent, fork-free)
aliases.sh, functions.sh .zshrc, .bashrc Shared aliases/functions (incl. open: code files → nvim)
tools.sh .zshrc, .bashrc direnv, starship, zoxide, lazy pyenv/conda/mamba, OSC 7, ssh-agent
fzf.sh, man-colours.sh .zshrc, .bashrc fzf bindings + theme-following colours, man page colours

Only shell-specific parts stay per shell: zsh/.config/zsh/ (completion system, zinit plugins) and bash/.bashrc (readline, bash-completion).

Packages

Directory Purpose
vim/ Vim editor (fallback)
nvim/ Neovim (submodule)
git/ Git configuration + global ignore
wezterm/ Terminal emulator (sessionizer is a submodule)
btop/ System monitor
bat/ cat replacement config
mpv/ Media player
shell-shared/ Shared shell layer (see above)
openlogi/ Logitech device config (Logi Options+ alternative)
zsh/ Zsh (macOS)
aerospace/ macOS tiling window manager
launchd/ macOS login agent: theme-watch (applies light/dark changes instantly)
mlx-server/ Local MLX model serving (Apple Silicon)
bash/ Bash (Linux)
hyprland/ Linux tiling compositor
systemd/ Linux user service: theme-watch
rclone/ Cloud storage sync (Linux systemd unit)
conda/ Conda package manager
colima/ Docker runtime
direnv/ Directory-specific env vars + stdlib extensions
gh/ GitHub CLI
lazygit/ Git TUI (nvim + delta)
parallel/ GNU Parallel
opencode/ OpenCode settings
starship/ Cross-shell prompt
yt-dlp/ Video downloader

jupyter/, shpotify/ and firefox/ are machine-local (gitignored) but still stowed by setup when present.

How It Works

The setup script detects your OS and stows appropriate configurations:

  • Base (all platforms, including root): vim, nvim, git, wezterm, btop, bat, mpv, shell-shared, openlogi
  • macOS only: zsh, aerospace, mlx-server, launchd
  • Linux only: bash, hyprland, rclone, systemd
  • Any user, any platform: conda, colima, direnv, gh, jupyter, parallel, shpotify, firefox, opencode, starship, yt-dlp, lazygit

~/.config/openlogi is linked as a whole directory, because the app saves by write-and-rename (which replaces a file symlink); its runtime files there are gitignored.

Light/dark theme

The OS appearance is the single source of truth. Most tools follow it with no help because they use the terminal's ANSI palette (WezTerm switches scheme itself; starship, fzf, bat, delta, btop's TTY theme, man pages and opencode's system theme inherit it). update-app-theme (in ~/.local/bin/scripts) pushes the mode to the rest: AeroSpace borders and running nvim instances. theme-watch, started by the launchd/systemd package, runs it the moment the OS appearance changes. update-app-theme toggle|dark|light sets the OS appearance and applies it; failures notify and log to ~/.local/state/theme/update.log.

Default apps (./default-apps)

Code/config/text files open in nvim (a new WezTerm tab) from Finder and from the shell's open, driven by one list: shell-shared/.config/shell/code-filetypes. On macOS it builds ~/Applications/Neovim.app and sets handlers with duti; on Linux it writes nvim-open.desktop and uses xdg-mime. Viewer-type files (html, csv, logs, svg, ...) keep their proper apps. Original handlers are saved to ~/.local/state/default-apps/; ./default-apps --restore puts them back. macOS asks to confirm handler changes, so the script only changes what actually differs from the list.

Prerequisites

  • Git
  • GNU Stow
  • Zsh (macOS) or Bash (Linux)