A tool to manage shared cabal-install sandboxes.
Haskell
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitignore
.stylish-haskell.yaml
Castle.hs
LICENSE
README.md
Setup.hs
castle.cabal

README.md

Castle

I really like having sandboxes baked into cabal-install (see Cabal Sandboxes for more information).

I got tired of waiting for big packages like Yesod and Lens to compile in project after project that used them. However, I still didn't want to install them in the user database. I wanted to maintain some sandboxing among a group of projects that all share a common set of packages, but I wanted to be able to switch from them or upgrade them easily.

That's the itch I was trying to scratch with castle.

It allows you to share one Cabal sandbox between multiple projects. This keeps the package versions for all of these projects in line. It also means that you don't have to constantly be re-installing everything, but you still get the ability to blow away a set of packages without borking your whole system.

Usage

First, we need to create a new Castle for a new sandbox. We'll use this one for Yesod projects.

castle new yesod

Now let's change into a project where we want to use that castle and set up the configuration for it.

cd awesome-site
castle use yesod

This works by putting the cabal.sandbox.config file for the yesod Castle into the current directory. From this point on, cabal should pick up on the location of the sandbox and everything should work seamlessly.

If something happens and you want to use a local, not-shared sandbox for this project, just use the remove command:

castle remove

And if you decide that you no longer need the Castle for any project, you can delete it.

castle delete yesod

Help

You can get an overview of the commands by executing castle --help:

$ castle --help
castle - manage shared cabal sandboxes.

Usage: castle COMMAND
  Manage shared cabal sandboxes.

Available options:
  -h,--help                Show this help text

Available commands:
  list                     List sand castles.
  new                      Create a new castle.
  use                      Use an existing castle.
  current                  Display the current castle name.
  remove                   Removes the sandbox from the current directory.
  delete                   Deletes the castle.
  clear                    Clears a castle by deleting and re-creating it.
  search                   Searches for a castle with a name containing the QUERY.

Likewise, for more information about a specific command, call --help on that command.

$ castle new --help
Usage: castle new CASTLE_NAME
  Create a new castle.

Available options:
  -h,--help                Show this help text
  CASTLE_NAME              The name of the castle to create.

Bug Reports

Please report any bugs to the Github Issues page for this project.