A package manager for Agda
Agda-pkg is a tool to manage Agda libraries with extra features like installing libraries from different kind of sources.
This tool does not modify
Agda at all, it just manages systematically the directory
.agda/libraries files used by
Agda to locate the available libraries. For more information about how Agda package
system works, please read the official documentation
The most common usages of agda-pkg are the following:
- To install
Agda-pkgjust run the following command:
$ pip3 install agda-pkg
- To install your library, go to the root directory of your source code and run:
$ apkg install --editable .
- To install a library from agda/package-index.
$ apkg init $ apkg install standard-library
A list of the available packages is shown below.
- To install a Github repository with a specific version release:
$ apkg install --github agda/agda-stdlib --version v1.3
- To install a library from a Github repository with a specific branch with a specific library name:
$ apkg install --github plfa/plfa.github.io --branch dev --name plfa
Initialisation of the package index
The easiest way to install libraries is by using the package index.
agda-pkg uses a local database to maintain a register of all
libraries available in your system. To initialize the index and the
database please run the following command:
$ apkg init Indexing libraries from https://github.com/agda/package-index.git
Note. To use a different location for your agda files
libraries, you can set up the environment variable
apkg as follows:
$ export AGDA_DIR=$HOME/.agda
Other way is to create a directory
.agda in your directory and run
agda-pkg from that directory.
agda-pkg will prioritize the
directory in the current directory.
Check all the options of a command or subcommand by using the flag
$ apkg --help $ apkg install --help
Upgrade the package index
Recall updating the index every once in a while using
$ apkg upgrade Updating Agda-Pkg from https://github.com/agda/package-index.git
If there is an issue with your installation or you suspect something is going wrong. You might want to see the environmental variables used by apkg.
$ apkg environment
List all the packages available
To see all the packages available run the following command:
$ apkg list
This command also has the flag
--full to display a version of the
this list with more details.
Installation of packages
Install a library is now easy. We have multiple ways to install a package.
- from the package-index
$ apkg install standard-library
- from a local directory
$ apkg install .
or even much simpler:
$ apkg install
Installing a library creates a copy for agda in the directory assigned
by agda-pkg. If you want your current directory to be taken into
account for any changes use the
--editable option. as shown below.
$ apkg install --editable .
- from a github repository
$ apkg install --github agda/agda-stdlib --version v1.1
- from a git repository
$ apkg install http://github.com/jonaprieto/agda-prop.git
To specify the version of a library, we use the flag
$ apkg install standard-library --version v1.0
Or simpler by using
== as it follows.
$ apkg install email@example.com $ apkg install standard-library==v1.0
Multiple packages at once
To install multiple libraries at once, we have two options:
- Using the inline method
$ apkg install standard-library agda-base
== if you need a specific version, see above
- Using a requirement file:
Generate a requirement file using
$ apkg freeze > requirements.txt $ cat requirements.txt standard-library==v1.1
Now, use the flag
-r to install all the listed libraries
in this file:
$ apkg install -r requirements.txt
Check all the options of this command with the help information:
$ apkg install --help
Uninstalling a package
Uninstalling a package will remove the library from the visible libraries for Agda.
- using the name of the library
$ apkg uninstall standard-library
- infering the library name from the current directory
$ apkg uninstall .
And if we want to remove the library completely (the sources and
everything), we use the flag
$ apkg uninstall standard-library --remove-cache
Update a package to latest version
We can get the latest version of a package from the versions registered in the package-index.
- Update all the installed libraries:
$ apkg update
- Update a specific list of libraries. If some library is not installed, this command will installed the latest version of it.
$ apkg update standard-library agdarsec
See packages installed
$ apkg freeze standard-library==v1.1
This command is useful to keep in a file the versions used for your project to install them later.
$ apkg freeze > requirements.txt
To install from this requirement file run this command.
$ apkg install < requirements.txt
Approximate search of packages
We make a search (approximate) by using keywords and title of the packages from the index. To perform such a search, see the following example:
$ apkg search metis 1 result in 0.0012656739999998834seg cubical url: https://github.com/agda/cubical.git installed: False
Get all the information of a package
$ apkg info cubical
Creating a library for Agda-Pkg
In this section, we describe how to build a library.
To build a project using
agda-pkg, we just run the following command:
$ apkg create
Some questions are going to be prompted in order to create the necessary files for Agda and for Agda-Pkg.
The output is a folder like the following showed below.
Directory structure of an agda library
A common Agda library has the following structure:
$ tree -L 1 mylibrary/ mylibrary/ ├── LICENSE ├── README.md ├── mylibrary.agda-lib ├── mylibrary.agda-pkg ├── src └── test 2 directories, 3 files
.agda-lib library file
$ cat mylibrary.agda-lib name: mylibrary -- Comment depend: LIB1 LIB2 LIB3 LIB4 include: PATH1 PATH2 PATH3
.agda-pkg library file
This file only works for
agda-pkg. The idea of
this file is to provide more information about the
package, pretty similar to the cabal files in Haskell.
This file has priority over its version
$ cat mylibrary.agda-pkg name: mylibrary version: v0.0.1 author: - AuthorName1 - AuthorName2 category: cat1, cat2, cat3 homepage: http://github.com/user/mylibrary license: MIT license-file: LICENSE.md source-repository: http://github.com/user/mylibrary.git tested-with: 2.6.0 description: Put here a description. include: - PATH1 - PATH2 - PATH3 depend: - LIB1 - LIB2 - LIB3 - LIB4
Using with Nix or NixOS
nix-shell environment that loads
agda-pkg as well as
agda-mode for Emacs is available. To use this,
apkg can put the necessary
files in your project folder by running one of the following commands:
$ curl -L https://gist.github.com/jonaprieto/53e55263405ee48a831d700f27843931/download | tar -xvz --strip-components=1
or if you already have installed agda-pkg:
$ apkg nixos
Then, you will have the following files:
./hello-world.agda ./agda_requirements.txt ./shell.nix ./deps.nix ./emacs.nix
From where you can run the nix shell.
To launch Emacs with
agda-mode enabled, run
mymacs in the newly launched
mymacs will also load your
~/.emacs file if it exists. If you are
using Spacemacs, you will need to edit
The files provided by the commands above are also available in this repository
apkg/support/nix) and in a third-party example
repository to give an idea of exactly
which files need to be copied to your project.
$ cat hello-world.agda module hello-world where open import IO main = run (putStrLn "Hello, World!")
mymacs hello-world.agda then type
C-c C-x C-c in emacs to compile the loaded hello world file.
Edit any of the
nix expressions as needed. In particular:
- To add Agda dependencies via
- To add more 4Haskell or other system dependencies or other
target-language dependencies, edit
- To add or alter the editor used, change the
shell.nixor add similar derivations.
- Optionally, create
.emacs_user_configin the repository root directory and add any additional config, such as
(setq agda2-backend "GHC")to use GHC by default when compiling Agda files from emacs.
This is a proof of concept of an Agda Package Manager. Contributions are always welcomed.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for agda_pkg-0.1.51-py2.py3-none-any.whl