Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .bashrc

This file was deleted.

202 changes: 41 additions & 161 deletions .freshrc
Original file line number Diff line number Diff line change
@@ -1,179 +1,59 @@
# freshshell.com
#
# Examples:
#
# fresh twe4ked/dotfiles shell/functions.sh
# fresh jasoncodes/dotfiles aliases/rails.sh
# fresh jasoncodes/dotfiles config/tmux.conf --file
#
# See http://freshshell.com/readme for documentation.
# Zsh-focused dotfiles configuration

# Meta: handles updating fresh
fresh freshshell/fresh bin/fresh --bin

### ~/.bash_profile internals
# ============================================================
# Shell configs (symlinked to ~/)
# ============================================================
fresh shell/exports.sh --file=~/.exports
fresh shell/path.sh --file=~/.path
fresh shell/aliases.sh --file=~/.aliases
fresh shell/functions.sh --file=~/.functions

# inspired by mathiasbynens/dotfiles
# Zsh config
fresh zsh/.zshrc --file

# this `fresh` code symlinks each listed dotfile to ~/.$dotfile
# linked files are then source`d in ~/.bash_profile constructed below
for dotfile in path exports aliases functions; do
fresh bash/$dotfile.bash --file=~/.$dotfile
done
unset dotfile

# construct ~/.bash_prompt
fresh-options --file=~/.bash_prompt
# bash-it theme: doubletime with custom extension
# load colors, base prompt setup
fresh Bash-it/bash-it themes/colors.theme.bash
fresh Bash-it/bash-it themes/base.theme.bash
fresh Bash-it/bash-it themes/githelpers.theme.bash
# Original
fresh Bash-it/bash-it themes/doubletime/doubletime.theme.bash
# Customizations based on Bash-It theme
fresh bash/doubletime.setup.bash
fresh-options

### end ~/.bash_profile setup

### CONFIG FILE LINKING
# Alternatively, copy manually along with this file,
# instead of symlinking with fresh.
# Comment out the lines below.
###
fresh-options --file=~/.bash_profile
# composure shell scripting
fresh erichs/composure composure.sh
# Start with some simple defaults.
fresh bash/profile.start.bash
fresh bash/bash-it-cite.bash
fresh Bash-it/bash-it lib/helpers.bash
# loads path,bash_prompt,exports,aliases,functions,extra
fresh bash/mathias.dotfiles.bash

# source fresh's output
fresh freshshell/fresh contrib/source-build.sh

# nvm sourced in functions; now we can set it up.
fresh bash/nvm-setup.bash
# theme obscures working dir from terminal; this fixes it
# e.g. new tab opens in same (current) directory
fresh bash/apple.terminal.working-dir.bash
fresh-options

# .bashrc delegates to .bash_profile
fresh .bashrc --file

# .inputrc for bash / readline config
fresh .inputrc --file
# GNU ls dircolors
fresh shell/dircolors.sh
fresh seebi/dircolors-solarized dircolors.ansi-universal --file=~/.dircolors

# gitconfig
fresh-options --file=~/.gitconfig
fresh .gituserconfig
fresh .gitconfig
# ============================================================
# Git
# ============================================================
fresh-options --file=gitconfig
fresh git/.gituserconfig
fresh git/.gitconfig
fresh-options

fresh .gitattributes --file
fresh .gitignore --file
fresh git/.gitattributes --file
fresh git/.gitignore --file

# tmux
# ============================================================
# Tmux
# ============================================================
fresh-options --file=~/.tmux.conf
if [[ "$(uname)" == "Darwin" ]]; then
fresh tmux/.tmux.macOS.conf
fi
fresh seebi/tmux-colors-solarized tmuxcolors-dark.conf
fresh-options

# emacs
fresh-options --file=~/.emacs.d/init.el
fresh emacs/init.el
fresh tmux/.tmux.conf
fresh seebi/tmux-colors-solarized tmuxcolors-dark.conf
fresh-options

### end config file linking
# ============================================================
# Emacs
# ============================================================
# fresh emacs/init.el --file=~/.emacs.d/init.el

# dircolors
fresh bash/dircolors.bash

# fasd init (source'd)
# this provides the aliases
# & data from a cached init code
# to keep things speedy
fresh bash/fasd.setup.bash

# https://github.com/nvbn/thefuck
fresh bash/thefuck.sh

# brew command-not-found
fresh bash/command-not-found.bash
# ============================================================
# Readline (still useful for other programs)
# ============================================================
fresh .inputrc --file

### BIN management
# ============================================================
# Starship
# ============================================================
fresh starship/starship.toml --file=~/.config/starship.toml

# Re-install fresh with bootstrap
# ============================================================
# Bin scripts
# ============================================================
fresh install.sh --bin=~/bin/dotfiles

# git friendly
# abstractions around common git tasks
for gitHelper in branch merge pull push; do
fresh jamiew/git-friendly $gitHelper --bin
done
unset gitHelper

# FASD
# autojump, z util for directory jumping sorted by "frecency"
fresh clvv/fasd fasd --bin

# Leiningen Clojure Build System
# awesome way to bootstrap Clojure.
# there's a `brew` for it but whatevs.
# needs Java installed (JDK)
fresh technomancy/leiningen bin/lein --bin --ref=origin/stable

# Leiningen-Powered Clojure Scripting
fresh kumarshantanu/lein-exec lein-exec --bin
fresh kumarshantanu/lein-exec lein-exec-p --bin

# todo.txt: simple todo list
fresh ginatrapani/todo.txt-cli todo.sh --bin=~/bin/todo
# store todos in dropbox for effortless syncing
fresh todo.cfg --file=~/.todo/config

# Cross-Origin --disable-web-security Chrome with clean slate
fresh bin/crossOriginChrome.sh --bin

### completions

fresh autocompletion/local.sh
# local completions
# brew git git-flow etc.
# Homebrew: Mac OS X package management (used to download most everything else listed here)
# git Source Control Management
# git flow - Toolkit for Higher Level Branching abstractions

# bash-it completions
# gem pip ssh todo
# Ruby gems
# pip Python Package Management
# ssh completion with allowed hosts
# todo.txt cli
for completion in gem pip ssh todo; do
fresh Bash-it/bash-it completion/available/$completion.completion.bash
done
unset completion

# GNU ls dircolors
fresh seebi/dircolors-solarized dircolors.ansi-universal --file=~/.dircolors

# fresh completion (how meta)
fresh freshshell/fresh contrib/completion/fresh-completion.bash

# apex
fresh autocompletion/apex.sh

# git-friendly
fresh autocompletion/git-friendly.sh

# vault
fresh autocompletion/vault.sh

### end completions
133 changes: 133 additions & 0 deletions 2026_REFRESH.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
# 2026 Dotfiles Refresh

## Why

macOS switched to zsh as the default shell in Catalina (2019). These dotfiles were
originally bash-focused using Bash-It framework. Time to modernize.

## Future Plans

### mise - Polyglot Version Manager
Replace nvm (and rvm, pyenv, etc.) with [mise](https://mise.jdx.dev/):
- Single tool for Node, Ruby, Python, Go, Java, etc.
- Faster than nvm (no shell startup penalty)
- Compatible with `.nvmrc`, `.node-version`, `.ruby-version`
- Configuration in `~/.config/mise/config.toml`

```bash
brew install mise
# In .zshrc: eval "$(mise activate zsh)"
```

### GNU Stow - Simpler Symlink Management
Consider replacing Fresh with [GNU Stow](https://www.gnu.org/software/stow/):
- Simpler mental model (directories mirror `~/`)
- No build step - what you see is what you link
- Widely used in dotfiles community
- Each "package" is a directory that gets symlinked

```bash
brew install stow
cd ~/.dotfiles
stow zsh shell git tmux # Creates symlinks to ~/
```

### Other Considerations
- **zsh-autosuggestions** - Fish-like suggestions as you type
- **zsh-syntax-highlighting** - Command highlighting

---

## What Changed

### Shell: bash → zsh
- Primary config: `~/.zshrc` (was `~/.bash_profile`)
- History: `~/.zsh_history` with zsh-specific options
- Completions: Native zsh completion system

### Architecture: Intel → Apple Silicon
- Homebrew location: `/opt/homebrew` (was `/usr/local`)
- Universal path handling for both architectures

### Directory Structure
```
bash/ → shell/ # Shell-agnostic configs
├── exports.bash ├── exports.sh
├── path.bash ├── path.sh
├── aliases.bash ├── aliases.sh
└── functions.bash └── functions.sh
```

Old bash-specific files removed (git history preserved).

### Tools Replaced

| Old | New | Why |
|-----|-----|-----|
| Bash-It themes | Starship | Cross-shell, fast, configurable |
| fasd | zoxide | Faster, maintained, better algorithm |
| hub | gh | Official GitHub CLI |
| reattach-to-user-namespace | (removed) | Not needed since tmux 2.6 |
| Python 2 http.server | Python 3 | Python 2 EOL |

### Tools Added

| Tool | Purpose |
|------|---------|
| bat | Better cat with syntax highlighting |
| fd | Better find |
| ripgrep (rg) | Better grep |
| fzf | Fuzzy finder |
| git-delta | Better git diff |

### Brewfile Pared Down

Removed deprecated packages and trimmed to essentials:
- `boot2docker`, `docker-machine`, `fig` (old Docker tooling)
- `reattach-to-user-namespace` (tmux workaround)
- `mongodb` with args (needs tap now)
- `lighttable`, `lightpaper` (discontinued editors)
- `growl` (deprecated)
- Old cask tap names (`caskroom/*` → `homebrew/*`)

## Configuration

### Fresh Shell Manager

Still using [Fresh](http://freshshell.com/) for symlink management. Updated `.freshrc`
to build zsh configs instead of bash.

Fresh builds:
- `~/.zshrc` ← `zsh/.zshrc`
- `~/.exports` ← `shell/exports.sh`
- `~/.path` ← `shell/path.sh`
- `~/.aliases` ← `shell/aliases.sh`
- `~/.functions` ← `shell/functions.sh`
- `~/.config/starship.toml` ← `starship/starship.toml`
- `~/.gitconfig` ← `git/.gitconfig` + `git/.gituserconfig`
- `~/.tmux.conf` ← `tmux/.tmux.conf` + solarized colors
- `~/.dircolors` ← seebi/dircolors-solarized

### Git Config

Uses `include.path` to allow `git config --global` while preserving Fresh defaults.
Set up by `install.sh`.

## Installation

```bash
git clone https://github.com/simshanith/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./install.sh
exec zsh
```

## Verification

```bash
echo $SHELL # /bin/zsh
which brew # /opt/homebrew/bin/brew
starship --version # Prompt
zoxide --version # Directory jumping
fresh # No errors
```
Loading