CLPM Sources

A repository of Common Lisp projects is called a "source". The source you are most likely familiar with is Quicklisp, but CLPM is designed to be extended to support multiple sources and source types. This will allow you to easily use CLPM for things such as internal projects that can't be released to public repositories.

The type of every source must be specified with a keyword.

Configuration

Sources are configured globally using the sources.conf file located in CLPM's config directory. Place any number of source descriptions there and they will be used for global contexts. If a desired resource is defined in multiple sources, then the source defined first has precendence.

Sources are configured for project specific contexts (bundles) by placing source descriptions in the clpmfile. See bundle.org for more details.

Source Descriptions

Each source description is list where the first element is a string naming the source (you may choose any name you like) and the rest is a plist containing the options for the source. Each source must contain a value for :type so that CLPM may instantiate the correct objects to interact with it.

Quicklisp

A Quicklisp style source contains a subscription metadata file (such as the primary Quicklisp one located at https://beta.quicklisp.org/dist/quicklisp.txt). Additionally, there must a file whose name is the same but suffixed with "-versions" (e.g., https://beta.quicklisp.org/dist/quicklisp-versions.txt) that points to the dist file for every version of the distribution.

The type designator for a Quicklisp like source is :quicklisp. A quicklisp distribution can be configured with the following options:

  • :url
    The URL to the subscription metadata file. If the URL uses the HTTPS scheme, then every interaction with this source will take place using HTTPS.

For instance, to use the primary Quicklisp distribution, you use the following description:

("quicklisp"
 :type :quicklisp
 :url "https://beta.quicklisp.org/dist/quicklisp.txt")

Currently, information cannot be fetched from a Quicklisp distribution on demand, data must be synced between your computer and the distribution. This happens automatically when using bundle commands. In order to sync manually (for installing into a global context or when you expect to have bad internet soon), run the following, where $SOURCE_NAME is the name of the source in your config file:

clpm sync $SOURCE_NAME

CLPI

Common Lisp Project Index style sources are currently under development in the CLPI project.

The primary CLPM author currently uses a CLPI style source to index packages located on a private Gitlab instance. If you are interested in doing something similar, please reach out.

The type specifier is :clpi and a :url is also required.

While CLPI sources can be synced, it is currently a fairly slow affair due to how many objects the information is spread between. It is recommended that you just let CLPM fetch data on demand.

QL-CLPI

This type of source is an extension of CLPI sources to include extra information relevant to representing a Quicklisp distribution in a CLPI style repository. Currently, this extra information includes version aliases as the same version of a project is routinely present in multiple Quicklisp distribution releases. Development of this source type happens in the QL-CLPI project.

The type designator for this source is :ql-clpi. It can be configured with the following options:

  • :url
    The URL to the index.

For instance, to use the a mirror of the primary Quicklisp distribution, you use the following description:

("quicklisp"
 :type :ql-clpi
 :url "https://quicklisp.common-lisp-project-index.org/")

While QL-CLPI sources can be synced, it is currently a fairly slow affair due to how many objects the information is spread between. It is recommended that you just let CLPM fetch data on demand.