Home Explore Blog Models CI



nixpkgs

nixos/modules/services/development/athens.md
8204af98ab0d25bc5a1080913ba7da16281af68ff67cfdaa000000030000072a
# Athens {#module-athens}

*Source:* {file}`modules/services/development/athens.nix`

*Upstream documentation:* <https://docs.gomods.io/>

[Athens](https://github.com/gomods/athens)
is a Go module datastore and proxy

The main goal of Athens is providing a Go proxy (`$GOPROXY`) in regions without access to `https://proxy.golang.org` or to
improve the speed of Go module downloads for CI/CD systems.

## Configuring {#module-services-development-athens-configuring}

A complete list of options for the Athens module may be found
[here](#opt-services.athens.enable).

## Basic usage for a caching proxy configuration {#opt-services-development-athens-caching-proxy}

A very basic configuration for Athens that acts as a caching and forwarding HTTP proxy is:
```nix
{
  services.athens = {
    enable = true;
  };
}
```

If you want to prevent Athens from writing to disk, you can instead configure it to cache modules only in memory:

```nix
{
  services.athens = {
    enable = true;
    storageType = "memory";
  };
}
```

To use the local proxy in Go builds (outside of `nix`), you can set the proxy as environment variable:

```nix
{
  environment.variables = {
    GOPROXY = "http://localhost:3000";
  };
}
```

To also use the local proxy for Go builds happening in `nix` (with `buildGoModule`), the nix daemon can be configured to pass the GOPROXY environment variable to the `goModules` fixed-output derivation.

This can either be done via the nix-daemon systemd unit:

```nix
{ systemd.services.nix-daemon.environment.GOPROXY = "http://localhost:3000"; }
```

or via the [impure-env experimental feature](https://nix.dev/manual/nix/2.24/command-ref/conf-file#conf-impure-env):

```nix
{
  nix.settings.experimental-features = [ "configurable-impure-env" ];
  nix.settings.impure-env = "GOPROXY=http://localhost:3000";
}
```

Chunks
45fc2b6a (1st chunk of `nixos/modules/services/development/athens.md`)
Title: Athens: A Go Module Datastore and Proxy
Summary
This document introduces Athens, a Go module datastore and proxy, primarily used to provide a `$GOPROXY` in regions without access to `https://proxy.golang.org` or to accelerate Go module downloads for CI/CD systems. It outlines basic configuration for Athens as a caching and forwarding HTTP proxy, including an option to store modules only in memory. Furthermore, it details how to set the `GOPROXY` environment variable to use the local proxy for Go builds, both outside and within Nix, by configuring the Nix daemon or using the `impure-env` experimental feature.