If you'd like to hack on the Ruby code that drives this project, please join us, we'd love to have you!
Homebrew-cask is an attempt to make a Linux-style package manager for
precompiled OS X software. Homebrew-cask is not yet as featureful as
apt
or yum
, but we are trying to be as close as we can get to those
tools from the user's point of view.
We manage installed files via the "symlink farm" method, like GNU Stow and Homebrew.
Homebrew-cask is designed to work like a traditional Unix tool:
- All functionality should be accessible from the CLI. The user should be freed (freed!) from interacting with a GUI.
- homebrew-cask should itself be scriptable.
Homebrew-cask is designed to work like Homebrew:
- Like Homebrew, we don't require the user to install with
sudo
. In fact, we recommend against it.
This is a young project. We are just getting off the ground. We are still revising our goals and adding new ones.
Plenty. Start with open issues !
Yes, definitely! Bring your own expertise. Just remember that the user always comes first.
Yes! (We call them "artifacts"). If something is useful (and precompiled) then we'd like to enable users to install it via homebrew-cask.
It's a neat idea! We have talked about it but nobody has worked on it:
It's a neat idea! We have talked about it but nobody has worked on it:
We would want to make sure that uninstall works equally well when copying.
Yes, definitely! We have started working on it, so please contact us directly if you want to help.
Yes, definitely! We have started working on it, so please contact us directly if you want to help.
We are independent of Homebrew as a project.
From the user's point of view, homebrew-cask is a subcommand of Homebrew, so we try to match Homebrew semantics and philosophy wherever possible.
From the programmer's point of view, very little code is shared with Homebrew. It turns out that Homebrew's code is tightly linked with the Homebrew Formula definition. Casks are defined differently than Formulae, which (unfortunately) is a barrier to re-using code.
Cask authors often work directly within the Homebrew directory
under /usr/local
. For coding, that is usually not sufficient.
We recommend the following:
-
Fork our repo: https://github.com/phinze/homebrew-cask/fork
-
Clone a private copy of the repo:
git clone https://github.com/<username>/homebrew-cask.git
-
Add the official repo as the
upstream
remote:cd homebrew-cask git remote add upstream https://github.com/phinze/homebrew-cask.git
-
Now you have two copies of the homebrew-cask codebase on disk: the released version in
/usr/local/Library/Taps/phinze-cask
, and a development version in your private repo. To symlink theCasks
andrubylib
folders from/usr/local/...
into your private repo, run the following script:/<path>/<to>/<private>/<repo>/developer/bin/develop_brew_cask
Now you can hack on your private repo, and use the
brew cask
CLI like normal -- it will interact with your latest code. -
Important: while in development mode, you can't safely run Homebrew's
brew update
command. To switch back to production mode, run/<path>/<to>/<private>/<repo>/developer/bin/production_brew_cask
We're on IRC at #homebrew-cask
on Freenode. If you are going to develop for
homebrew-cask, it's a great idea to hang out with us there. Here's why:
- discuss your thoughts before coding and maybe get new ideas
- get feedback from the Travis-CI bot on build failures
- talk to caskbot about checksums, version info, and releases
- just to be social!
If you're making changes - please write some tests for them! Also be sure to
run the whole test suite using rake test
before submitting (if you forget,
Travis-CI will do that for you and embarrass you in front of all your friends). :)
See the relevant section in CONTRIBUTING.md
:
Submitting Your Changes
If your pull request has multiple commits which revise the same lines of code, it is better to squash those commits together into one logical unit.
But you don't always have to squash -- it is fine for a pull request to contain multiple commits when there is a logical reason for the separation.