Idiomdrottning’s homepage


A while ago, I got the suggestion to set up

alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'

so I could use config to save dotfiles and such without every app believing that my entire home directory is a git repository.

I can clone the dotfiles from elsewhere with git clone ~/.cfg, but in the directory I instead call config, like config add, config commit etc.

But since apps don’t believe that my entire home directory is a git repository, that includes magit and I sometimes wanna use magit to restore files or partially stage hunks or whatever. Things that are too time-consuming to do by hand.

So here’s a script that temporarily actually does make the home directory into that git repository, waits for you to be done with Magit, and then restores things.

This does clobber the ~/.git file or even breaks if that pathname is a directory or such, so don’t have that.

echo "gitdir: $(realpath "$1")" > ~/.git
cd "$(realpath "$1")"
git config --unset core.bare
git config core.worktree ../
echo "Do your magit stuff! Then hit RET here when you're done."
read nothing
git config --unset core.worktree
git config core.bare true
rm ~/.git
cd -

Call it with your conf repo dir as an argument, in my case I’d call:

cfgmagit ~/.cfg

For a repo,

git clone