Configs, customizations, and themes to personalize my macOS experience, with a heavy focus on Laravel (Herd) development and modern CLI tools.
Important
Feel free to look around, contribute and suggest improvements. However, these will remain my personal config files/preferences written to selfishly fit my needs.
- Shell: Zsh optimized with
zinitfor fast plugin loading and Powerlevel10k instant prompt. - Terminals: Ghostty (Catppuccin) and WezTerm (Palenight in dark mode, Flexoki in light mode), both using Monaspace Krypton.
- Navigation: zoxide (
cd) for smarter directory jumping. - Session Management: Tmux with TPM, a custom
thelper script, and plugins for sessions, floating panes, and URL opening. - Editor: Neovim (kickstart-based,
lazy.nvim, Catppuccin theme) — aliased tovimandvi. - Laravel Integration: deep integration with Herd, Artisan, Composer, and NPM, including extensive aliases and helper functions.
- Modern CLI Tools: Replaces standard tools with better alternatives:
ls→lsd(icons, colors)cat→bat(syntax highlighting)top→bpytop(beautiful resource monitoring)neofetch→fastfetch(system info)
- AI & Dev Tools: Claude CLI, LM Studio, WakaTime (Neovim).
- Home Lab Helpers: SSH shortcuts, Wake-on-LAN, and Transmission remote control.
Ensure you have the following installed before running the setup:
- git
- zsh
- tmux
- neovim
- fzf (Required for the
tscript and shell integrations) - tree-sitter-cli 0.26.1 or later, from a package manager rather than npm (Required to build Neovim's Treesitter parsers)
- A C compiler (Required to build Neovim's Treesitter parsers)
- Recommended Modern Tools:
lsdbatzoxidefastfetchbpytop
-
Set
zshas your default shell. -
Clone the repository to your home directory:
git clone https://github.com/yourusername/dotfiles.git $HOME/bin -
Run the installation script:
cd $HOME/bin chmod +x install ./install
The install script links configuration files from this repo to your home directory.
- Dry run:
./install -n(See what happens without changes) - Verbose:
./install -v(Detailed output) - Safe: Backs up existing configurations before linking (never deletes them).
It also clones Powerlevel10k automatically if it isn't already present.
| Path | Description |
|---|---|
zsh/ |
Shell aliases (aliases.sh) and environment exports/integrations (exports.sh). |
tmux/ |
Tmux configuration, TPM plugins, and helper scripts. |
rex/ |
Rex configuration (init.lua key bindings, actions.lua custom actions) and the open-project.sh picker, linked to ~/.config/rex. |
nvim/ |
Complete Neovim configuration based on kickstart.nvim. |
wezterm/ |
WezTerm terminal configuration (Monaspace Krypton font, Palenight dark and Flexoki light themes). |
ghostty/ |
Ghostty terminal configuration (Monaspace Krypton font, Catppuccin adaptive theme). |
scripts/ |
Custom scripts, including the t session helper and transmission controller. |
.zshrc |
Main shell configuration file (zinit plugins, keybindings, history, completions). |
Create a .env file in ~/bin/ to store local secrets and machine-specific configs. This file is ignored by git and safely loaded on shell startup.
# Example ~/bin/.env
HOME_IP=192.168.1.5
HOME_MAC=aa:bb:cc:dd:ee:ff
HOME_TRANSMISSION_PORT=9091
HOME_TRANSMISSION_USERNAME=admin
HOME_TRANSMISSION_PASSWORD=secretThe shell automatically detects .nvmrc files and switches Node versions via nvm when changing directories.
| Alias | Command | Description |
|---|---|---|
a |
php artisan |
Run artisan commands |
migrate |
a migrate |
Run migrations |
mfs |
a migrate:fresh --seed && a optimize:clear |
Fresh migration with seeds |
mfsr |
mfs && redis-cli flushdb |
Fresh migration, seed, and flush Redis |
tinker |
a tinker |
Enter execution loop |
a:t |
a test |
Run tests |
a:tp |
a:t --parallel |
Run tests in parallel |
a:tc |
herd coverage ./vendor/bin/pest --coverage --coverage-html=public/test-coverage |
Run tests with HTML coverage report |
a:cc |
a cache:clear |
Clear caches |
a:op |
a optimize:clear |
Clear optimized files |
expose |
expose --server-host=repounlock.com |
Expose local site |
share / h:s |
herd share --server-host=repounlock.com |
Share via Herd |
| Alias | Command | Description |
|---|---|---|
g |
git |
Git shorthand |
gst |
git status |
Status |
ga |
git add |
Stage files |
gaa |
git add . |
Stage all |
gc |
git commit -S |
Signed commit |
gcm |
git commit -S -m |
Signed commit with message |
gp |
git push |
Push |
gco |
git checkout |
Checkout branch |
gd |
git diff |
Diff |
gl / gll |
git log / git log --oneline --decorate --all --graph |
Log |
| Alias | Command | Description |
|---|---|---|
l / ls |
lsd |
List files with icons |
la |
lsd -A |
List all files |
ll |
lsd -Fl |
List with details |
cat |
bat |
View file with syntax highlighting |
top |
bpytop |
System resource monitor |
neofetch |
fastfetch |
System info |
tmux |
tmux -u |
Start Tmux |
vim / vi / v |
nvim |
Open Neovim |
| Function | Description |
|---|---|
commit [message] |
Stage all and commit (WIP if no message) |
commit:push [message] / wip |
Stage, commit, and push to current branch |
switch:master |
Checkout master and pull |
schedule:run |
Loop php artisan schedule:run every 60 seconds |
lab [command] |
SSH into home server, or run a remote command |
lab:suspend |
Suspend home server |
lab:sleep |
Suspend home server with RTC wake time |
lab:wake |
Wake home server via Wake-on-LAN |
The t script (on PATH via scripts/) is a powerhouse for managing workflow.
t: Opensfzfto select a project from~/develop,~/develop/laravel,~/develop/packages/php,~/develop/packages/js, or~/bin.t [directory]: Directly opens or attaches to a tmux session for that directory.
It automatically names sessions based on the folder name and handles attaching/detaching seamlessly.
The Rex counterpart to t. Ctrl-a s (or Open Project in the command palette) opens an fzf picker in a floating pane, then switches to a Rex session for the chosen project, creating it in that folder if none is open.
- Projects: each git repo directly in
~/develop, the folders inside every other~/developfolder (laravel/,worktrees/,cipherwill/), the Composer and npm packages in~/develop/packages/php/and~/develop/packages/js/, and~/bin.~/develop/flutter(the Flutter SDK) and~/develop/templatesare skipped. - Sessions are labelled with the folder name, or
parent/namewhen two projects share a name. A session is reused by that label, so renaming it means the next pick opens a new one. - Switching needs Remote Control on in Rex Settings > Rex Server. Without it the session is still created, and the picker says so.
Plugins are managed via TPM. Key features include:
- Catppuccin theme with custom status modules: session, directory, todos, meetings (calendar), and date/time.
tmux-sessionx(Ctrl-a+s): Fuzzy session switcher with zoxide integration.tmux-floax(Ctrl-a+p): Floating popup window for quick tasks.tmux-fzf-url: Open URLs from the buffer withfzf.tmux-thumbs: Rapid copy-paste of file paths, IPs, etc.- Pane navigation:
Ctrl-h/j/k/lmoves between tmux panes, or between splits inside Neovim. To leave a Neovim pane, press the prefix and thenh/j/k/l.
A Python CLI script to manage a remote Transmission daemon.
transmission --list # List all torrents
transmission --downloading # List active downloads
transmission --pause-all # Pause everything
transmission --start-all # Resume everything
transmission --stop 1 2 3 # Stop specific torrent IDs