Skip to content

Instantly share code, notes, and snippets.

@nicerobot
Last active December 12, 2015 05:59
Show Gist options
  • Save nicerobot/4726285 to your computer and use it in GitHub Desktop.
Save nicerobot/4726285 to your computer and use it in GitHub Desktop.
Mac OS X Dropbox-like Github repository.

Create a project:

curl -sk https://gist.github.com/nicerobot/4726285/raw/project | bash -s [project-name]

By using a LaunchAgent and a few simple scripts, this somewhat emulates something like Dropbox but on a Github repository.

Currently, the automated means of adding projects to ~/.dropgit just uses a bare git repository so requires a push but there's absolutely no reason that directories can't be manually added to ~/.dropgit and folders to org.nicerobot.dropgit.plist.

e.g.

mkdir ~/.dropgit/mydata
ln -s ~/.dropgit/mydata ~/MyData
perl -pi -e 's/(^(\s+)<!--# (.*?)PROJECT.git(.*?) -->)/$2$3mydata$4\n$1/' ~/Library/LaunchAgents/org.nicerobot.dropgit.plist 
curl -sk https://gist.github.com/nicerobot/4726285/raw/dropgit | bash -s reload
#!/bin/bash
cd ${HOME}
[ -d .dropgit ] || mkdir .dropgit
[ -L /var/dropgit ] || sudo ln -s ~/.dropgit /var/dropgit
cd Library/LaunchAgents
[ -f org.nicerobot.dropgit.plist ] || curl -skO https://gist.github.com/nicerobot/4726285/raw/org.nicerobot.dropgit.plist
lctl() {
launchctl ${1} ~/Library/LaunchAgents/org.nicerobot.dropgit.plist
}
f=${1:-load}
[ 'reload' = "${f}" ] && {
lctl unload
f=load
}
lctl ${f}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.nicerobot.dropgit</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>cd /var/dropgit; git commit -am "auto commit $(date)"</string>
</array>
<key>WorkingDirectory</key>
<string>/var/dropgit</string>
<key>StandardOutPath</key>
<string>/var/dropgit/log.out</string>
<key>StandardErrorPath</key>
<string>/var/dropgit/log.err</string>
<key>WatchPaths</key>
<array>
<!--# <string>/var/dropgit/PROJECT.git</string> -->
<!-- DON'T CHANGE THE ABOVE LINE. IT'S A TEMPLATE. -->
</array>
</dict>
</plist>
#!/bin/bash
project=${1:-$(basename ${PWD})}
[ -d ~/.dropgit/${project}/git ] && exit 0
[ -d ~/.dropgit ] || curl -sk https://gist.github.com/nicerobot/4726285/raw/dropgit | bash
mkdir -p ${project}
(
cd ~/.dropgit
git init --bare ${project}.git
git add ${project}.git
# update LaunchAgent and reload it
perl -pi -e 's/(^(\s+)<!--# (.*?)PROJECT(.*?) -->)/$2$3'${project}'$4\n$1/' ~/Library/LaunchAgents/org.nicerobot.dropgit.plist
curl -sk https://gist.github.com/nicerobot/4726285/raw/dropgit | bash -s reload
)
cd ${project}
git init
echo ${project} > README.md
git add .
git commit -m "init"
git remote add origin ~/.dropgit/${project}.git
git push -u origin master
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment