Personal dotfiles and workstation bootstrap for my day-to-day development setup.
It is centered on Neovim, shell tooling, tmux, terminal apps, Codex configuration, and language support for Go, Java, Lua, Python, and SQL.
Warning
This is a personal, opinionated setup that changes often. The bootstrap
scripts assume my project layout under ~/Projects/IlyasYOY, clone a few
personal repositories, manage shell startup files, and still include
macOS-specific desktop tooling. Review the scripts before running them on a
machine you care about.
This repository is primarily built for macOS, with a smaller Raspberry Pi bootstrap path for Raspberry Pi OS or Debian-based Linux on Raspberry Pi hardware.
- macOS installs Homebrew formulae, casks, and App Store apps from
Brewfile.mac,Brewfile.mac.cask, andBrewfile.mac.mas, then links desktop configuration such as WezTerm, Hammerspoon, and Amethyst. - Raspberry Pi runs apt-based system bootstrap, configures the
sing-boxrepository, installs Linuxbrew when needed, and installs a smaller CLI/dev tool set fromBrewfile.raspberry-pi.
config/nvim— full Neovim configuration with eagervim.packregistration, Treesitter, LSP/DAP, snippets,fzf-lua, Git tooling, and database helpers.config/nvim-minimal— minimal Neovim setup for reproducing issues.sh— shared shell helpers plus install and update entrypoints.config/wezterm,config/alacritty,config/hammerspoon,config/gnupg,config/.tmux.conf,config/.amethyst.yml,config/.vimrc— terminal, desktop, and CLI configuration tracked in the repo.config/codex— checked-in Codex instructions and repo-managed custom skills..agents/skills— repository-local Codex skills used when working in this checkout.Brewfile.mac,Brewfile.mac.cask,Brewfile.mac.mas,Brewfile.raspberry-pi— package manifests used by the bootstrap scripts.bin— small personal utilities and executable helpers.
Before running the bootstrap flow, make sure you have:
- macOS or Raspberry Pi OS / Debian-based Linux on a Raspberry Pi
- Git
curlzshon macOS orbashon Raspberry Pi
On macOS, Homebrew is expected to be available before running make install.
On Raspberry Pi, Homebrew is bootstrapped by the installer itself, but git,
curl, sudo, and a Debian-compatible apt environment are still assumed.
mkdir -pv ~/Projects/IlyasYOY
cd ~/Projects/IlyasYOY
git clone git@github.com:IlyasYOY/dotfiles.git dotfiles
cd dotfiles
make installmake install runs sh/setup/install.sh. The install flow:
- Creates the expected project directories under
~/Projects. - Installs platform dependencies from the relevant Brewfiles.
- Clones notes and a small set of personal repositories into
~/Projects/IlyasYOY. - Links tracked config into
~/.configand$HOME. - Appends shell startup lines to the active rc file:
~/.zshrcon macOS and~/.bashrcon Raspberry Pi. - Configures Git defaults.
- Installs and configures
SDKMAN,gvm, andfnm. - Sets up tmux TPM, clones the password store, and links Codex instructions
plus repo-managed skills into
~/.codex.
On macOS, the installer uses:
Brewfile.macfor formulaeBrewfile.mac.caskfor casks, includingcodexBrewfile.mac.masfor App Store installs
On Raspberry Pi, the installer:
- runs
apt-get updateandapt-get upgrade -y - installs Homebrew and toolchain prerequisites with
apt(includingbisonforgvm) - configures the official
sing-boxapt repository and installssing-box - installs Linuxbrew if it is not already present
- installs Homebrew-managed dependencies from
Brewfile.raspberry-pi - installs Node.js and
npmwithfnmwhen they are not already available - writes shell startup config to
~/.bashrcinstead of~/.zshrc
The Brewfile-backed install steps use:
brew bundle install --file <brewfile> --jobs auto --no-upgradeThat keeps make install focused on missing dependencies instead of upgrading
everything already on the machine.
luacheck is installed by the bootstrap scripts instead of Mason. Mason's
LuaRocks package currently resolves against Lua 5.5 on newer systems, which
breaks luacheck dependency resolution upstream, so the Neovim config no
longer asks Mason to manage that tool.
Main links created by the installer:
config/nvim->~/.config/nvimconfig/nvim-minimal->~/.config/nvim-minimalconfig/gnupg/gpg-agent.conf->~/.gnupg/gpg-agent.confconfig/.gitignore-global->~/.config/git/ignoreconfig/.golangci.yml->~/.golangci.ymlconfig/codex/AGENTS.md->~/.codex/AGENTS.mdconfig/codex/skills/superpowers->~/.codex/skills/superpowersconfig/.tmux.conf->~/.tmux.confconfig/.vimrc->~/.vimrc
macOS-only links created by the installer:
config/wezterm->~/.config/weztermconfig/hammerspoon->~/.hammerspoonconfig/.amethyst.yml->~/.amethyst.yml
This repo can be a good base, but several parts of it are still wired to my personal machines, paths, repositories, and services. Review these before you try to use it unchanged.
- Project layout: the setup scripts assume
~/Projects/IlyasYOYplus~/Projects/Work, with notes living in~/Projects/IlyasYOY/notes-wikiand~/Projects/IlyasYOY/Legacy-Notes. If you use a different layout, update the path constants insh/setup/helpers.sh. - Personal repositories:
sh/setup/install.shandsh/setup/update.shclone and update personal repositories such asnotes-wiki,obs.nvim,theme.nvim,git-link.nvim,monotask, andpassword-store. Remove, replace, or comment those entries if you do not own those repositories. - Secrets and external services:
sh/helpers.shdefinescodex-time-manager, which expectspass singularity/token/full, a local Singularity MCP checkout at~/Projects/IlyasYOY/singularity-mcp-server-2.1.1, and Google Calendar integration inside Codex. If you do not use that exact setup, retarget or remove those helpers. - Java setup: Neovim Java support looks for SDKMAN-managed JDKs in
~/.sdkman/candidates/java/. The current helper supports JDK8,11,17,21,23, and25, and prefers21when available. If none of those are installed,jdtlsis skipped.
- Notes workflow:
config/nvim/after/plugin/obs.luapointsobs.nvimat~/Projects/IlyasYOY/notes-wiki, and shell aliases/helpers also assume that notes location. Change those paths if you use a different vault, or disable the integration. - Local plugin development:
config/nvim/lua/ilyasyoy/pack.luaprefers local checkouts under~/Projects/IlyasYOY/<plugin>before falling back to GitHub. That is convenient for my plugin workflow, but you may want to remove those local overrides. - Shell defaults:
sh/exports.shsets macOS-specific Colima and Docker socket environment variables. If you do not use Colima, review or remove those exports. - Packages and apps: the Brewfiles and
masentries reflect my machine, not a minimal universal setup. Trim them to the tools and desktop apps you actually want.
make updatemake update runs sh/setup/update.sh.
- On macOS it updates Homebrew itself, formulae, casks, App Store apps, tracked local repositories, and tmux plugins.
- On Raspberry Pi it updates apt packages, Homebrew, Homebrew packages, tracked local repositories, and tmux plugins.
make check
make check-lua
make check-shell
make format-luamake checkruns the first-pass validation for Lua and shell files and is the same check target used by CI.make check-luaruns the Lua lint and formatting checks.make check-shellrunsshellcheckfor shell scripts and shell fragments.make format-luaformats Lua files withstylua.