This repo is where I keep the shell, Git, and editor customizations that make my day-to-day development smoother. I started it for myself, but the goal is for it to be useful as a public toolbox that other people can borrow from, copy selectively, or adapt to their own setup.
The problems this repo tries to solve are simple: too much repeated terminal setup, too much Git friction, and too many small workflow steps that add up over time.
At the moment, this repo includes:
git-aliases/for-branches: a Git config snippet with aliases I use for everyday branch workgit-aliases/for-worktrees: a smaller Git config snippet for worktree-oriented workflowsgit-aliases/.functions: shell functions for navigation, Python environment setup, CSV inspection, Git/worktree workflow helpers, and a saferrmthat moves files to Trash instead of deleting them outrightgit-aliases/.vimrc: a lightweight Vim config with indentation defaults, color tweaks, pane navigation mappings, andNERDTreeviavim-plug
This repo will grow over time. Right now it is Git-heavy because that is where most of my reusable setup already lives, but the intent is broader than Git alone.
I treat this repo as a source of reusable snippets, not as a one-shot installer. You can use it however you prefer:
- Copy the parts you want into your own dotfiles
- Keep this repo checked out somewhere and include pieces from it
- Start with one file and adapt it to your own conventions
For Git config, two common approaches are:
- Copy the relevant sections into
~/.gitconfig - Include one of these files from
~/.gitconfig, for example:
[include]
path = /absolute/path/to/customizations/git-aliases/for-branchesFor shell functions, source the file from your shell startup file:
source /absolute/path/to/customizations/git-aliases/.functionsFor Vim, either copy settings you want into your own ~/.vimrc or source this one from there.
Some of the helpers I reach for most often:
mkcdir: create a directory and immediatelycdinto itheaders: print CSV headers one per line with line numbersmakenv: create a Python virtualenv based on the current directory namegit co: jump between the main workspace checkout and branch-specific worktreesgit cob: create a new branch as a worktree and set it up for pushinggit com/git compull: jump back tomainormaster, optionally pullinggit pulled: pull latest changes, remove the current worktree, delete the branch, and offer pruningrm: move files to~/.Trashinstead of permanently deleting them
Some of this is intentionally opinionated. Before you adopt any of it, read it and decide whether the assumptions match your environment.
- The
git()shell function and everything ingit-config/for-worktreesassume a repo layout under~/workspaceand~/worktrees git cobandcompushcan push automatically, which is convenient for me but may be too aggressive for your workflow- The custom
git()shell function overrides the normalgitcommand for certain subcommands - The custom
rm()function changes deletion behavior by moving files to~/.Trash - Some functions assume tools like
pyenv,newsboat,vim,meld,python, orvim-plugare available - The Vim config will try to bootstrap
vim-plugand installNERDTree
I would not suggest cloning this repo and blindly sourcing everything. The better approach is:
- Read the files
- Copy the parts that solve a problem you actually have
- Rename or rewrite anything that feels too coupled to my setup
If a customization here saves you a few keystrokes or removes a little workflow friction, then it is doing its job.