lolcommits
git-based selfies for software developers
lolcommits takes a snapshot with your webcam every time you git commit code, and archives a lolcat style image with it. Git blame has never been so much fun.
By default, the lol images are stored by a Github style short SHA in a
~/.lolcommits
directory created for you.
Sample images
Please add your own lolcommit to the People Using Lolcommits page on our wiki!
Requirements
- Ruby >= 2.0.0
- A webcam
- ImageMagick
- ffmpeg (optional) for animated gif capturing
Installation
macOS
You'll need ImageMagick installed. Homebrew makes this easy.
brew install imagemagick
Then install with:
[sudo] gem install lolcommits
If you're using RVM (or rbenv), you can/should probably omit the sudo, but the default macOS Ruby install usually requires it.
Lolcommits v0.8.1 was the last release to support Ruby < 2.0. If you'd like to use older Rubies try:
[sudo] gem install lolcommits --version 0.8.1 # for Ruby 1.9
[sudo] gem install lolcommits --version 0.7.0 # for Ruby 1.8
Linux
Install these dependencies using your package manager of choice, for example in Ubuntu:
sudo apt-get install mplayer imagemagick libmagickwand-dev
For Ubuntu 14.04 or newer, you need to manually install ffmpeg since it no longer ships with the default Ubuntu sources (downloads here).
Then install with:
gem install lolcommits
For more details, see Installing on Linux.
Windows - here be dragons!
It works, but you'll need some more detailed instructions to get the dependencies installed. See the wiki page for Installing on Windows.
Usage
Enabling and basic usage
Within any git repository, simply run lolcommits --enable
. From that point on,
any git commit will automatically trigger a lolcommit capture! By default, all
lolcommits are stored in ~/.lolcommits
and placed in a subdirectory by project
name, with a filename matching the commit hash.
Follow these
steps
to enable lolcommits across all your repos; using git init
and the
init.templatedir
setting.
Don't worry about it too much, half the fun of lolcommits is forgetting it's installed!
Other commands
OK, if you insist... Since you know about --enable
, common sense suggests
there is also a repository specific --disable
, hopefully you can guess what
that does.
Other handy common commands include --last
, which will open for display your
most recent lolcommit, or --browse
, which pops open the directory containing
all the lolcommit images for your current repository. You can always do --help
for a full list of available commands.
NOTE: Any extra arguments you pass with --enable
are appended to the
git post-hook capture command. For example;
lolcommits --enable --delay 5 --animate 4 --fork
Will configure capturing of an animated gif (4 secs) after a 5 sec delay in a forked process. See the section below for more capture configuration options.
Capture configuration options
lolcommits has some capture options for additional lulz. You can enable these via environment variables like so;
LOLCOMMITS_DEVICE
set a webcam device - mac and linux onlyLOLCOMMITS_ANIMATE
(in seconds) set time for capturing an animated gif - requires ffmpegLOLCOMMITS_DELAY
(in seconds) set delay time before capturing (for slow webcams to warmup)LOLCOMMITS_FORK
fork lolcommit runner (capture command forks to a new process, speedily returning you to your terminal)LOLCOMMITS_STEALTH
disable all notification messages when capturingLOLCOMMITS_DIR
set the output directory used for all repositories (defaults to ~/.lolcommits)LOLCOMMITS_CAPTURE_DISABLED
disables lolcommit capturing in the commit hook (when set as 'true')
Or they can be set with arguments to the capture command (located in your
repository's .git/hooks/post-commit
file).
--device {name}
or-d {name}
--animate {seconds}
or-a {seconds}
--delay {seconds}
or-w {seconds}
--fork
--stealth
Use lolcommits --devices
to list all attached video devices available for
capturing.
You can configure lolcommit text positions, font styles (type, size, color etc.) or add a transparent overlay to your images. Simply configure the default loltext plugin with this command:
lolcommits --config -p loltext
To find out more about styling, read about the loltext options.
Animated Gif Capturing
Animated gifs can take a while to generate (depending on the number of seconds you capture and the capabilities of your machine). ffmpeg is required and can be installed like so;
- Linux - follow this guide
- macOS -
brew install ffmpeg
To enable, just set the LOLCOMMITS_ANIMATE
environment variable with the
number of seconds to capture. If you find animated capturing takes too long, try
setting LOLCOMMITS_FORK=true
. Animated gif captures are currently NOT
supported on Windows.
Plugins
A growing number of plugins are available, allowing you to transform or share your lolcommits with others. The default plugin simply appends your commit message and sha to the captured image. Others can post to Twitter, Tumblr (and other services), or even translate your commit messages to lolspeak. Check them out on our plugins page.
Until recently, all plugins lived inside the main lolcommits gem. We are in the process of extracting them to individual gems. For gem plugins, you'll need to install the gem first:
[sudo] gem install lolcommits-plugin-sample
To list all installed plugins use:
lolcommits --plugins
Installed plugins can be easily enabled, configured or disabled with the
--config
option:
lolcommits --config
# or
lolcommits --config -p loltext
Interested in developing your own plugin? Follow this simple guide at the Lolcommits Plugin Sample README.
Timelapse
Watch your face decay while you program, with an animated timelapse gif!
lolcommits --timelapse
# or for just today's lolcommits
lolcommits --timelapse --period today
Troubles?
Try our trouble-shooting FAQ, or take a read through our wiki. If you think something is broken or missing, please raise a Github issue (and please check if we haven't already addressed it).
License
The program is available as open source under the terms of LGPL-3.