Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
2edc77e
wip
freekmurze Jan 26, 2021
aece394
[ImgBot] Optimize images
ImgBotApp Mar 3, 2021
29de06f
Merge pull request #38 from MichaelDeBoey/imgbot
freekmurze Mar 3, 2021
8eb9edc
wip
freekmurze Mar 10, 2021
868fa54
wip
freekmurze Mar 10, 2021
2521391
Merge branch 'master' of github.com:freekmurze/dotfiles
freekmurze Mar 10, 2021
58acb44
Update installscript
freekmurze Mar 17, 2021
1129c7a
Update installscript
freekmurze Mar 17, 2021
78b5a78
wip
freekmurze Mar 18, 2021
815a56c
Merge branch 'master' of github.com:freekmurze/dotfiles
freekmurze Mar 18, 2021
002a9b6
Added db list
victoryoalli Apr 14, 2021
b93de89
Merge pull request #39 from victoryoalli/patch-1
freekmurze Apr 15, 2021
527b368
Update .aliases
mertasan Jun 16, 2021
1e5656f
Merge pull request #40 from mertasan/patch-1
freekmurze Jun 16, 2021
36fa4b8
Update set-defaults.sh
mertasan Jun 22, 2021
4e5f8bc
Merge pull request #42 from mertasan/master
freekmurze Jun 22, 2021
ee122a6
wip
freekmurze Jul 7, 2021
bfe5807
Merge branch 'master' of github.com:freekmurze/dotfiles
freekmurze Jul 7, 2021
d86411f
wip
freekmurze Jul 8, 2021
0780cd4
Update .exports
freekmurze Aug 31, 2021
b22ee19
add function
freekmurze Oct 17, 2021
a054199
Merge branch 'main' of github.com:freekmurze/dotfiles
freekmurze Oct 17, 2021
7d5eba4
Update installscript
freekmurze Oct 27, 2021
4c57c62
Update installscript
freekmurze Oct 27, 2021
00826e4
Update installscript
freekmurze Oct 27, 2021
b585052
Update installscript
freekmurze Oct 27, 2021
2a1019e
Update installscript
freekmurze Oct 27, 2021
d466827
Update installscript
freekmurze Oct 27, 2021
66b4970
Rename OSX plugin to macOS
jacobgraf Nov 9, 2021
b01fff7
Merge pull request #45 from jacobgraf/patch-1
freekmurze Nov 9, 2021
2c30862
improve test functions
freekmurze Dec 5, 2021
3d28cd3
Merge branch 'main' of https://github.com/freekmurze/dotfiles
freekmurze Dec 5, 2021
f9a2180
Fix PHP support removal for macOS Monterey
stephenjude Dec 25, 2021
6cd5e31
Merge pull request #46 from stephenjude/patch-1
freekmurze Dec 25, 2021
9871dbd
Update installscript
freekmurze Jan 19, 2022
210628e
Update commit function
AlexVanderbist Apr 14, 2022
5d91d39
Merge pull request #47 from AlexVanderbist/patch-1
freekmurze Apr 14, 2022
aa73fb4
Fix typo in bootstrap
Jul 19, 2022
940e5e4
Merge pull request #48 from outofcontrol/main
freekmurze Jul 29, 2022
445fc5b
Update installscript
freekmurze Aug 26, 2022
fb3b857
Update weather function
marcell-ferenc Nov 21, 2022
9d1671e
Merge pull request #52 from marcell-ferenc/feature/weather
freekmurze Nov 22, 2022
8d05998
Updates public ip command
RhysLees Jan 17, 2023
4f0beb9
Removes conflicting VSCode cli command
RhysLees Jan 17, 2023
55b87f3
Merge pull request #53 from RhysLees/patch-1
freekmurze Jan 17, 2023
fbc3013
Merge branch 'freekmurze:main' into patch-2
RhysLees Jan 17, 2023
ff777be
Merge pull request #54 from RhysLees/patch-2
freekmurze Jan 17, 2023
509ecf9
add log aliases
freekmurze Mar 23, 2023
9932c0a
feat(shell): add copilot alias to zshrc and opencommit function to co…
freekmurze Apr 27, 2023
8a8ebd7
Add auto-commit option if commit message is empty
freekmurze Apr 27, 2023
caa1194
Update installscript
freekmurze Apr 30, 2023
f367f8b
Replace hard-coded user directory with $HOME
glennforrest May 23, 2023
1a821fa
Merge pull request #55 from glennforrest/patch-1
freekmurze May 23, 2023
0fb4a6e
install fvm
freekmurze Jul 25, 2023
b7ffab9
add browse function
freekmurze Aug 28, 2023
6f6abfb
Merge branch 'main' of https://github.com/freekmurze/dotfiles
freekmurze Aug 28, 2023
c39a2c3
add uncommit alias
freekmurze Aug 28, 2023
8255de3
do not update homebrew stuff automatically
freekmurze Dec 18, 2023
5f19052
Update .zshrc
ashgibson Jan 22, 2024
dd56ee8
Merge pull request #56 from ashgibson/patch-1
freekmurze Jan 22, 2024
a683af3
wip
freekmurze Mar 12, 2025
d7bffe5
Add .claude to .gitignore
freekmurze Jun 19, 2025
ab155ae
wip
freekmurze Jun 23, 2025
ac8a714
wip
freekmurze Jun 23, 2025
8594869
Update installscript
freekmurze Jun 23, 2025
1c55766
wip
freekmurze Jun 27, 2025
7e24e51
Merge branch 'main' of github.com:freekmurze/dotfiles
freekmurze Jun 27, 2025
666248c
wip
freekmurze Jul 15, 2025
8a1ce79
wip
freekmurze Sep 4, 2025
2c0a28e
wip
freekmurze Jan 22, 2026
4c3df2d
new dotfles
freekmurze Jan 22, 2026
c45344d
wip
freekmurze Jan 22, 2026
ddd0f64
wip
freekmurze Jan 22, 2026
96b002d
wip
freekmurze Jan 22, 2026
4f637d4
wip
freekmurze Jan 22, 2026
7948bf9
wip
freekmurze Jan 22, 2026
fe39b28
wip
freekmurze Jan 22, 2026
ffb45a9
wip
freekmurze Jan 22, 2026
2335320
wip
freekmurze Jan 22, 2026
5cc4ff5
Update SKILL.md
freekmurze Jan 22, 2026
1e6a027
wip
freekmurze Jan 22, 2026
7f2fb52
Fix layout in What's Included section
freekmurze Jan 22, 2026
3e18e73
Remove Troubleshooting section
freekmurze Jan 22, 2026
5d69ee6
Remove bin/doctor and Starship references
freekmurze Jan 22, 2026
c93ee77
Add version-controlled .gitconfig with git-delta
freekmurze Jan 22, 2026
7de43a6
Enhance eza aliases with git status, headers, and hyperlinks
freekmurze Jan 22, 2026
fe03211
Remove git status and headers from eza aliases
freekmurze Jan 22, 2026
c498322
wip
freekmurze Jan 22, 2026
8ca5d58
wip
freekmurze Jan 23, 2026
26b33fb
fix skill
freekmurze Jan 23, 2026
c8869d3
wip
freekmurze Jan 23, 2026
a9ab7af
wip
freekmurze Jan 25, 2026
159759a
wip
freekmurze Jan 25, 2026
79c730c
Add spinner and use claude for auto-generating commit messages
freekmurze Jan 25, 2026
219f3c6
Add auto-approval for laravel-boost MCP and remove aicommits
freekmurze Jan 25, 2026
fdc035a
Add jq, yq, and bottom to CLI tools
freekmurze Jan 25, 2026
1755eb9
Add chrome-devtools MCP to auto-approved tools
freekmurze Jan 25, 2026
939a5b6
Remove cd to z alias to fix initialization issue
freekmurze Jan 26, 2026
4ee2a6d
Remove .claude from global gitignore
freekmurze Jan 26, 2026
dd4f61b
Rename convert-issue-to-discussion skill to include GitHub
freekmurze Jan 27, 2026
9a1224b
Add claude-yolo function for running Claude without permission checks
freekmurze Feb 11, 2026
5edff71
Add .claude/settings.local.json to global gitignore
freekmurze Feb 11, 2026
4cd7790
Add namespace import and variable naming rules to PHP guidelines skill
freekmurze Feb 11, 2026
7c0e51f
Add ios-simulator, spatie-package-skeleton, and vercel-react skills
freekmurze Feb 11, 2026
312fb4c
Add nested ifs guideline to PHP guidelines skill
freekmurze Feb 11, 2026
0252072
Add laravel-inertia-react-structure skill, editor aliases, and agnost…
freekmurze Feb 12, 2026
1dc83b4
Add Zed editor config, keybindings, and install symlinks
freekmurze Feb 12, 2026
2cc5cba
wip
freekmurze Feb 14, 2026
9927c62
Change c alias from composer to claude
freekmurze Feb 14, 2026
f1ad6d8
Clean up dotfiles: remove hub, simplify git-prune-local, prune unused…
freekmurze Feb 15, 2026
425cf3b
Update git aliases: add push/pull, remove gc and gm
freekmurze Feb 15, 2026
871c40f
Add clone shorthand function
freekmurze Feb 15, 2026
73a7cb3
Update Claude skills, Zed formatter, and install script
freekmurze Feb 17, 2026
83dcd96
Add cy alias for claude-yolo
freekmurze Feb 17, 2026
0ea527c
Add statusline.sh to dotfiles
freekmurze Feb 20, 2026
53ce044
wip
freekmurze Feb 22, 2026
355d067
Replace iTerm2 with Ghostty, add Claude Code skills (flare, react, ve…
freekmurze Mar 8, 2026
3ff3e8d
Update commit message generation command
kamilkozak Mar 25, 2026
05d40bb
Merge pull request #59 from kamilkozak/patch-1
freekmurze Mar 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
11 changes: 10 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,10 @@
shell/.yarnrc
# macOS
.DS_Store

# IDEs
.idea/
.vscode/

# Local configs
home/.yarnrc
.claude/
352 changes: 341 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,353 @@
# My personal dotfiles
# My dotfiles

My personal dotfiles. Also used by nearly all other geeks at [spatie.be](http://spatie.be) and [the amazing Frederick Vanbrabant](https://twitter.com/maybeFrederick/status/912620087538016257).
![Terminal](images/terminal.png)

It contains the installation of some basic tools, some handy aliases and functions. Backups of settings are done via [Mackup](https://github.com/lra/mackup).
Personal dotfiles with modern shell tooling, optimized for Laravel/PHP development. Features fast startup times, smart directory navigation, and modern CLI tools.

You can install them by cloning the repository as `.dotfiles` in your home directory and running the bootstrap script.
## Key Features

- **Custom Agnoster Theme** - Clean powerline prompt with no branch symbols, `•` for changes
- **Version-Controlled Skills & Agents** - All Claude Code skills and agents synced via dotfiles
- **Fast Tools** - fnm, zoxide, ripgrep, bat, eza (all Rust-based for speed)
- **One Command Install** - `bin/install` sets up everything including Claude Code

---

## Quick Start

```bash
git clone git@github.com:freekmurze/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
bin/install
```

---

## What's Included

### Shell & Prompt

- **Oh My Zsh** - Framework for managing Zsh configuration (with agnoster theme by default)
- **zoxide** - Smart directory jumping based on frecency
- **fzf** - Fuzzy finder for files and history
- **direnv** - Automatic environment variables per directory

### Modern CLI Tools

- **fnm** - Fast Node.js version manager
- **bat** - Cat with syntax highlighting
- **eza** - Modern ls replacement with icons
- **ripgrep** - Fast grep alternative
- **fd** - Fast find alternative
- **git-delta** - Better git diffs
- **jq** - JSON processor and formatter
- **yq** - YAML processor and formatter
- **bottom** - Modern system monitor

### Development Tools

- **PHP** - Latest version via Homebrew
- **Composer** - Dependency manager via Homebrew
- **Node.js** - LTS version managed via fnm
- **Laravel Valet** - Local development server
- **MySQL** - Database with auto-start

### QuickLook Plugins

Instant file previews in Finder: code files, markdown, JSON, CSV, patches, and archives.

---

## How It Works

### Symlinked Files

The installation creates symlinks from your home directory to the dotfiles repository. This allows you to version control your configuration while keeping files in their expected locations.

| Symlink Location | Points To | Purpose |
|-----------------|-----------|---------|
| `~/.zshrc` | `~/.dotfiles/home/.zshrc` | Main Zsh configuration (Oh My Zsh with custom agnoster theme) |
| `~/.gitconfig` | `~/.dotfiles/home/.gitconfig` | Git configuration with delta diff viewer |
| `~/.global-gitignore` | `~/.dotfiles/home/.global-gitignore` | Global Git ignore patterns |
| `~/.vimrc` | `~/.dotfiles/home/.vimrc` | Vim configuration |
| `~/.vim/` | `~/.dotfiles/home/.vim/` | Vim runtime files |
| `~/.mackup.cfg` | `~/.dotfiles/macos/.mackup.cfg` | Mackup backup configuration |
| `~/.claude/skills` | `~/.dotfiles/config/claude/skills/` | All Claude Code skills (version-controlled) |
| `~/.claude/agents` | `~/.dotfiles/config/claude/agents/` | All Claude Code agents (version-controlled) |
| `~/.claude/CLAUDE.md` | `~/.dotfiles/config/claude/CLAUDE.md` | Claude Code configuration |
| `~/.claude/laravel-php-guidelines.md` | `~/.dotfiles/config/claude/laravel-php-guidelines.md` | Laravel coding standards |
| `~/.claude/settings.json` | `~/.dotfiles/config/claude/settings.json` | Claude Code settings |
| `~/.config/zed/settings.json` | `~/.dotfiles/config/zed/settings.json` | Zed editor settings |
| `~/.config/zed/keymap.json` | `~/.dotfiles/config/zed/keymap.json` | Zed custom keybindings |
| `~/.config/ghostty/config` | `~/.dotfiles/config/ghostty/config` | Ghostty terminal settings |

To manually symlink the Zed configuration (if not using `bin/install`):

```bash
mkdir -p ~/.config/zed
ln -sf ~/.dotfiles/config/zed/settings.json ~/.config/zed/settings.json
ln -sf ~/.dotfiles/config/zed/keymap.json ~/.config/zed/keymap.json
```

### Sourced Files

These files are loaded by `.zshrc` but remain in the dotfiles directory:

- `home/.aliases` - Shell command aliases
- `home/.functions` - Custom shell functions
- `home/.exports` - Environment variables

### Custom Agnoster Theme

The default configuration uses a customized agnoster theme stored in `oh-my-zsh-custom/themes/agnoster.zsh-theme`:

**Customizations:**
- No git branch symbol (cleaner look)
- Uses `•` for unstaged changes instead of `±`
- Powerline arrows for segment separators
- Requires a font with powerline glyphs

**Git Status Symbols:**
- `✚` - Staged changes (files added with `git add`)
- `•` - Unstaged changes (modified files not yet staged)
- Yellow background - Uncommitted changes
- Green background - Clean working directory

---

## Daily Usage

### Smart Navigation

```bash
z dotfiles # Jump to frequently used directories
zi # Interactive directory picker
Ctrl+R # Fuzzy search command history
Ctrl+T # Fuzzy find files
Alt+C # Fuzzy change directory
```

### Laravel/PHP Shortcuts

```bash
a # php artisan
p # Run Pest/PHPUnit tests
c # composer
mfs # php artisan migrate:fresh --seed
nah # git reset --hard; git clean -df
```

### Data Processing

```bash
# JSON processing with jq
curl api.github.com/users/freekmurze | jq
cat composer.json | jq '.require'
php artisan tinker --execute="echo json_encode(User::first());" | jq

# YAML processing with yq
yq '.jobs' .github/workflows/ci.yml
yq -o json docker-compose.yml

# System monitoring
btm # Modern system monitor (aliased from top/htop)
```

### Maintenance Commands

```bash
bin/update # Update all packages and tools
```

---

## Version Management

### Node.js (via fnm)

```bash
fnm install --lts # Install latest LTS
fnm use lts-latest # Use latest LTS
fnm install 20 # Install specific version
fnm use 20 # Switch to specific version
fnm list # Show installed versions
```

### PHP & Composer (via Homebrew)

```bash
brew upgrade php # Update PHP to latest
brew upgrade composer # Update Composer
```

---

## Package Management

All Homebrew packages are declared in `config/Brewfile`. To add a new tool:

```bash
echo 'brew "neovim"' >> ~/.dotfiles/config/Brewfile
brew bundle --file=~/.dotfiles/config/Brewfile
```
git clone git@github.com:freekmurze/dotfiles.git .dotfiles
cd .dotfiles
./bootstrap

**Complete package list:**

- **Core**: node, php, composer, pkg-config, wget, httpie, ncdu, hub, ack, doctl, 1password-cli, git-secret, imagemagick, mysql, yarn, ghostscript, mackup
- **Modern CLI**: zoxide, bat, eza, ripgrep, fd, git-delta, fnm, fzf, direnv, jq, yq, bottom, zsh-autosuggestions
- **QuickLook**: qlcolorcode, qlstephen, qlmarkdown, quicklook-json, qlprettypatch, quicklook-csv, betterzip, suspicious-package
- **PHP Extensions**: imagick, memcached, xdebug, redis
- **Global npm**: agent-browser
- **Global Composer**: laravel/envoy, spatie/phpunit-watcher, laravel/valet

---

## Claude Code Integration

### Quick Install (Standalone)

Install just Claude Code without the full dotfiles:

```bash
curl -fsSL https://raw.githubusercontent.com/freekmurze/dotfiles/main/bin/install-claude-code | bash
```

### What's Included

- **Claude Code CLI** - Installed via Homebrew
- **Custom configuration** - CLAUDE.md with coding guidelines, laravel-php-guidelines.md
- **Version-controlled skills** - Entire `~/.claude/skills` directory symlinked to dotfiles
- **Version-controlled agents** - Entire `~/.claude/agents` directory symlinked to dotfiles

### Skills (Version Controlled)

All skills are stored in `config/claude/skills/` and version-controlled with your dotfiles. When you run the installer on a new Mac, all skills are immediately available.

**Custom Skills:**
- `ray-skill` - Ray debugging integration
- `fix-github-issue` - GitHub issue automation
- `convert-issue-to-discussion` - GitHub workflow helpers

**Community Skills:**
- `vercel-labs/agent-skills` - Web design guidelines and React best practices
- `anthropics/skills` - Frontend design and skill creation tools
- `vercel-labs/agent-browser` - Browser automation
- `expo/skills` - React Native with Expo
- `callstackincubator/agent-skills` - React Native performance
- `coreyhaines31/marketingskills` - Copywriting and programmatic SEO
- `copy-editing` - Marketing copy editing
- `copywriting` - Marketing copywriting
- `frontend-design` - Frontend design patterns
- `pdf` - PDF manipulation
- `seo-audit` - SEO auditing
- `web-design-guidelines` - Web design best practices

### Adding New Skills

```bash
# Install a new skill (adds directly to your dotfiles)
npx skills add <owner/repo>

# Commit to version control
cd ~/.dotfiles
git add config/claude/skills/
git commit -m "Add new skill"
git push
```

Browse more skills at [skills.sh](https://skills.sh)

### Agents (Version Controlled)

All custom agents are stored in `config/claude/agents/` and version-controlled with your dotfiles. When you run the installer on a new Mac, all agents are immediately available.

**Custom Agents:**
- `laravel-simplifier` - Simplifies and refines PHP/Laravel code for clarity and maintainability
- `laravel-debugger` - Diagnoses and fixes issues in Laravel applications
- `laravel-feature-builder` - Implements new features in Laravel applications
- `task-planner` - Breaks down complex tasks into actionable steps

---

## Customization

### Personal Aliases & Functions

Create custom configurations that won't be committed:

```bash
mkdir -p ~/.dotfiles-custom/shell
vim ~/.dotfiles-custom/shell/.aliases
```

The bootstrap script can be run by cd-ing into the `.dotfiles` directory and performing this command:
These files are automatically loaded by `.zshrc` if they exist.

### Project-Specific Variables

Use `direnv` for automatic environment loading:

```bash
./bootstrap
cd my-project
echo 'export DEBUG=true' > .envrc
direnv allow
```

Feel free to create an issue on this repo if you have any questions about them.
Variables load when you enter the directory and unload when you leave.

---

## Post-Installation

1. **Restore settings** (optional): Run `mackup restore` if you have backups

2. **Migrate history** (upgrading only): Run `migration/migrate-z-to-zoxide.sh` if you have `~/.z`

---

## Tool Comparisons

| Old Tool | New Tool | Why Better |
|----------|----------|------------|
| z.sh / autojump | zoxide | Smarter frecency algorithm, Rust speed |
| nvm | fnm | 40x faster, simpler, Rust-based |
| cat | bat | Syntax highlighting, git integration |
| ls | eza | Icons, tree view, git status |
| grep | ripgrep | 5-10x faster, respects .gitignore |
| find | fd | Simpler syntax, 10x faster |
| diff | delta | Side-by-side diffs, syntax highlighting |
| htop | bottom | Better UI, graphs, Rust-based |

---

## Utilities

The `bin/` directory contains helper scripts:

- **install** - Main installation script (idempotent, safe to re-run)
- **install-claude-code** - Standalone Claude Code installer
- **update** - Update dotfiles, Homebrew, npm, and Composer packages
- **doctor** - Health check and diagnostic tool

---

## Migration Notes

If upgrading from an older setup:

1. **Directory history**: Run `migration/migrate-z-to-zoxide.sh` to import your `~/.z` data
2. **Prompt**: The default is now Oh My Zsh with custom agnoster theme
3. **Version managers**:
- fnm replaces nvm for Node.js
- Homebrew manages PHP/Composer (no more compilation or mise)
4. **Terminal**: Ghostty replaces iTerm2 (config symlinked from dotfiles)
5. **Claude Code Skills**: Now version-controlled in `config/claude/skills/` and symlinked to `~/.claude/skills`
6. **Claude Code Agents**: Now version-controlled in `config/claude/agents/` and symlinked to `~/.claude/agents`
7. **Custom Theme**: Custom agnoster theme stored in `oh-my-zsh-custom/themes/`

---

## Credits

Created by [Freek Van der Herten](https://github.com/freekmurze). Used by many at [Spatie](https://spatie.be).

![screenshot](https://freekmurze.github.io/dotfiles/screenshot.png)
See `config/Brewfile` for complete package list.
Binary file removed bin/hostfile
Binary file not shown.
Loading