homebrew-cask/README.md

166 lines
6.4 KiB
Markdown
Raw Normal View History

# "To install, drag this icon..." no more!
2013-04-05 16:12:40 +08:00
[![Build Status](https://travis-ci.org/phinze/homebrew-cask.png?branch=master)](https://travis-ci.org/phinze/homebrew-cask)
2013-04-05 16:35:15 +08:00
[![Code Climate](https://codeclimate.com/github/phinze/homebrew-cask.png)](https://codeclimate.com/github/phinze/homebrew-cask)
2013-04-05 16:10:59 +08:00
Let's see if we can get the elegance, simplicity, and speed of Homebrew for the
installation and management GUI Mac applications like Google Chrome and Adium.
`brew-cask` provides a friendly homebrew-style CLI workflow for the
administration of Mac applications distributed as binaries.
It's implemented as a `homebrew` "[external
command](https://github.com/mxcl/homebrew/wiki/External-Commands)" called
`cask`.
# Let's try it!
## Get brew-cask
First ensure you have Homebrew version '0.9' or higher:
$ brew --version
0.9.3
2012-08-26 10:32:06 +08:00
Tap this repository and install the `brew-cask` tool:
2012-08-26 10:32:06 +08:00
$ brew tap phinze/homebrew-cask
$ brew install brew-cask
## Now let's install our first Cask
Let's see if there's a Cask for Chrome:
$ brew cask search chrome
google-chrome
Cool, there it is. Let's install it.
$ brew cask install google-chrome
Downloading...
Success! google-chrome installed to /opt/homebrew-cask/Caskroom/google-chrome/stable-channel
Now we have `Google Chrome.app` in our Caskroom. Cool.
2012-08-26 11:01:34 +08:00
If you like, it's easy to get it linked somewhere more visible (see ["Alfred
Integration"](#alfred-integration) below for an idea that makes this step
unnecessary):
$ brew cask linkapps
/Users/phinze/Applications/Google Chrome.app -> /opt/homebrew-cask/Caskroom/google-chrome/17.0.963.56/Google Chrome.app
And there we have it. Google Chrome installed with a few quick commands; no clicking, no dragging, no dropping.
open "~/Applications/Google Chrome.app"
# What Casks are available?
Just run `brew cask search` with no arguments to get a list.
# How do I update brew-cask?
2012-08-26 11:01:34 +08:00
Since this repository is a Tap, you'll pull down the latest Casks with a simple
`brew-update`. When the `brew-cask` tool itself is updated, it will show in
`brew outdated` and you can upgrade it via the normal Homebrew workflow.
# What is a Cask?
A `Cask` is like a `Formula` in Homebrew except it describes how to download
and install a binary application.
Casks currently have three fields:
* __url__: (required) points to binary distribution of the application
* __version__: (required) describes the version of the application available at the URL
* __homepage__: the same as Homebrew's - it doesn't do anything yet, but will be wired in
# What's the status of this project? Where's it headed?
It's really just a start at this point, but it works, and I've got big plans!
`brew-cask` currently understands how to install `dmg` and `zip` files that
2012-08-26 11:01:34 +08:00
contain a `.app` file. I'd like to extend it to be able to handle `pkg` files
as well as the numerous other permutations of compression and distribution in
2012-08-26 11:01:34 +08:00
the wild (`.app` inside `dmg` inside `zip`; folder inside `dmg`; etc.).
I plan to use the `Cask` model to allow per-project customization of behavior,
2012-08-26 11:01:34 +08:00
like Homebrew does with `Formula`. This would allow weirdo applications like,
say, Eclipse ("you really want me to drag that whole *folder* to
`Applications`? ew.") to contain their complexity.
Each Cask will then encapsulate and automate the story of how a given
application should be installed. If all goes well - I'm hoping to build up a
community-maintained collection of Casks that becomes the standard way that
hackers install Mac apps.
2012-08-26 11:01:34 +08:00
# Can I contribute?
__Yes, yes, yes!__ Please fork/pull request to update Casks, to add features,
to clean up documentation—anything at all that you can do to help out is very
2012-08-26 11:01:34 +08:00
welcome.
It's also [__pretty darn easy__ to create Casks (see wiki)][c1], so please
build more of them for the software you use. And if `brew-cask` doesn't
support the packaging format of your software, please [open an issue][c2]
and we can get it working together.
2012-08-26 11:01:34 +08:00
The whole idea is to build a _community-maintained_ list of easily installable
packages, so the community part is important! Every little bit counts.
[c1]: https://github.com/phinze/homebrew-cask/wiki/How-to-Contribute
[c2]: https://github.com/phinze/homebrew-cask/issues
2012-09-24 12:47:45 +08:00
# Taps
You can add Casks to your existing (or new) taps: just create a directory named
`Casks` inside your tap, put your Casks there, and everything will just work.
# Options
You can set options on the command-line and/or using the `HOMEBREW_CASK_OPTS` environment variable, e.g. (again, using google-chrome):
```bash
# This probably should happen in your ~/.{ba|z}shrc
2013-01-03 10:18:05 +08:00
$ export HOMEBREW_CASK_OPTS="--appdir=/Applications"
# Installs app links to /Applications
$ brew cask install google-chrome
# Trumps the ENV and installs app links to ~/Applications
$ brew cask install --appdir="~/Applications" google-chrome
```
# Alfred Integration
I've been using Casks along with Alfred to great effect. Just add
`/opt/homebrew-cask/Caskroom` as a Search Scope in Alfred's preferences (you
may need to press Cmd-Shift-G in the file chooser), and then
applications become available in Alfred immediately after a
`brew cask install`. Your fingertips will thank you.
2012-08-26 11:01:34 +08:00
With this setup, you don't actually need `brew cask linkapps` if you always
open your apps from Alfred. This means that everything stays nice and tidy.
Oh, and you can `brew cask install alfred` too! Not bad, eh?
# Why use the Caskroom? Why not just manage apps directly in `Applications`?
The short answer to this would be: for the same reason that Homebrew does not
install applications directly into `/usr/local`.
We don't know up-front precisely what files are going to be in the
dmg/zip/tgz/etc, so it's really helpful to have a place to dump all of them
safely then iterate through and act on the files we care about. For a `.app`
file this may be symlinking it into `~/Applications` or `/Applications`, for a
`.pkg` file this might be running the installer. For a screensaver it may be
symlinking it into the appropriate directory for it to show up in System
Preferences.
The reason I implemented this project on top of Homebrew was because I believe
that their methodology for managing applications has a lot of merit. I'd prefer
to try and work things so that we can keep ourselves Homebrewy both in
implementation and idioms. Trying to manage all of `~/Applications` would move
the project more towards a standalone system, which would mean reimplementing a
lot of the Homebrew stuff we lean on now.