= Arion options

== docker-compose.extended

Attribute set that will be turned into the x-arion section of the docker-compose.yaml file.

[discrete]
=== details

Type:: attribute set
No Default:: {blank}

No Example:: {blank}

== docker-compose.raw

Attribute set that will be turned into the docker-compose.yaml file, using Nix's toJSON builtin.

[discrete]
=== details

Type:: attribute set
No Default:: {blank}

No Example:: {blank}

== host.nixStorePrefix

Prefixes store paths on the host, allowing the Nix store to be
stored at an alternate location without altering the format of
store paths.

For example: instead of mounting the host's /nix/store as the
container's /nix/store, this will mount /mnt/foo/nix/store
as the container's /nix/store.


[discrete]
=== details

Type:: string
Default::
+
----
""
----


Example::
+
----
"/mnt/foo"
----


== host.uid

The numeric user id (UID) of the user running arion.

This lets you to write modules that interact with the host
user's files, which is helpful for local development, but not
intended for production-like deployment scenarios.


[discrete]
=== details

Type:: signed integer
No Default:: {blank}

No Example:: {blank}

== out.dockerComposeYaml

A derivation that produces a docker-compose.yaml file for this composition.

[discrete]
=== details

Type:: package
No Default:: {blank}
Read Only:: {blank}
No Example:: {blank}

== out.dockerComposeYamlAttrs

The text of out.dockerComposeYaml.

[discrete]
=== details

Type:: attribute set of unspecifieds
No Default:: {blank}
Read Only:: {blank}
No Example:: {blank}

== out.dockerComposeYamlText

The text of out.dockerComposeYaml.

[discrete]
=== details

Type:: string
No Default:: {blank}
Read Only:: {blank}
No Example:: {blank}

== project.name

Name of the project.

See link:https://docs.docker.com/compose/reference/envvars/#compose_project_name[COMPOSE_PROJECT_NAME]


[discrete]
=== details

Type:: null or string
Default::
+
----
null
----


No Example:: {blank}

== services

An attribute set of service configurations. A service specifies how to run an image as a container.

[discrete]
=== details

Type:: attribute set of submodules
No Default:: {blank}

No Example:: {blank}

== services.<name>.composition

The composition configuration.


[discrete]
=== details

Type:: attribute set
No Default:: {blank}
Read Only:: {blank}
No Example:: {blank}

== services.<name>.host

The composition-level host option values.


[discrete]
=== details

Type:: attribute set
No Default:: {blank}
Read Only:: {blank}
No Example:: {blank}

== services.<name>.image.command



[discrete]
=== details

Type:: list of strings
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.image.contents

Top level paths in the container.


[discrete]
=== details

Type:: list of packages
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.image.enableRecommendedContents

Add the `/bin/sh` and `/usr/bin/env` symlinks and some lightweight
files.


[discrete]
=== details

Type:: boolean
Default::
+
----
false
----


No Example:: {blank}

== services.<name>.image.name

A human readable name for the docker image.

Shows up in the `docker ps` output in the
`IMAGE` column, among other places.


[discrete]
=== details

Type:: string
Default::
+
----
{"_type":"literalExpression","text":"\"localhost/\" + config.service.name"}
----


No Example:: {blank}

== services.<name>.image.nixBuild

Whether to build this image with Nixpkgs'
`dockerTools.buildLayeredImage`
and then load it with `docker load`.

By default, an image will be built with Nix unless `service.image`
is set. See also `image.name`, which defaults to
the service name.


[discrete]
=== details

Type:: boolean
No Default:: {blank}

No Example:: {blank}

== services.<name>.image.rawConfig

This is a low-level fallback for when a container option has not
been modeled in the Arion module system.

This attribute set does not have an appropriate merge function.
Please use the specific `image` options instead.

Run-time configuration of the container. A full list of the
options is available in the https://github.com/moby/moby/blob/master/image/spec/v1.2.md#image-json-field-descriptions[Docker Image Specification
v1.2.0].


[discrete]
=== details

Type:: attribute set of unspecifieds
Default::
+
----
{}
----


No Example:: {blank}

== services.<name>.nixos.build

NixOS build products from `config.system.build`, such as `toplevel` and `etc`.

This option is unused by default, because not all images use NixOS.

One way to use this is to enable `nixos.useSystemd`, but the
NixOS configuration can be used in other ways.


[discrete]
=== details

Type:: attribute set
No Default:: {blank}
Read Only:: {blank}
No Example:: {blank}

== services.<name>.nixos.configuration

Modules to add to the NixOS configuration.

This option is unused by default, because not all images use NixOS.

One way to use this is to enable `nixos.useSystemd`, but the
NixOS configuration can be used in other ways.


[discrete]
=== details

Type:: list of unspecifieds or unspecified convertible to it
Default::
+
----
{}
----


No Example:: {blank}

== services.<name>.nixos.evaluatedConfig

Evaluated NixOS configuration, to be read by service-level modules.

This option is unused by default, because not all images use NixOS.

One way to use this is to enable `nixos.useSystemd`, but the
NixOS configuration can be used in other ways.


[discrete]
=== details

Type:: attribute set
No Default:: {blank}
Read Only:: {blank}
No Example:: {blank}

== services.<name>.nixos.useSystemd

When enabled, call the NixOS systemd-based init system.

Configure NixOS with the `nixos.configuration` option.


[discrete]
=== details

Type:: boolean
Default::
+
----
false
----


No Example:: {blank}

== services.<name>.out.extendedInfo

Information about a service to include in the Docker Compose file,
but that will not be used by the `docker-compose`> command
itself.

It will be inserted in `x-arion.serviceInfo.<service.name>`.


[discrete]
=== details

Type:: attribute set of unspecifieds
Default::
+
----
{}
----


No Example:: {blank}

== services.<name>.out.service

Raw input for the service in `docker-compose.yaml`.

You should not need to use this option. If anything is
missing, please contribute the missing option.

This option is user accessible because it may serve as an
escape hatch for some.


[discrete]
=== details

Type:: attribute set of unspecifieds
No Default:: {blank}

No Example:: {blank}

== services.<name>.service.build.context

Locates a Dockerfile to use for creating an image to use in this service.

See link:https://docs.docker.com/compose/compose-file/#context[Docker Compose#context]


[discrete]
=== details

Type:: null or string
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.capabilities

Enable/disable linux capabilities, or pick Docker's default.

Setting a capability to `true` means that it will be
"added". Setting it to `false` means that it will be "dropped".
See link:https://docs.docker.com/compose/compose-file/#cap_add-cap_drop[Docker Compose#cap_add-cap_drop]

Omitted and `null` capabilities will therefore be set
according to Docker's link:https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities[default list of capabilities.]


[discrete]
=== details

Type:: attribute set of null or booleans
Default::
+
----
{}
----


Example::
+
----
{"ALL":true,"NET_ADMIN":false,"SYS_ADMIN":false}
----


== services.<name>.service.command

See link:https://docs.docker.com/compose/compose-file/#command[Docker Compose#command]

[discrete]
=== details

Type:: null or unspecified
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.container_name

See link:https://docs.docker.com/compose/compose-file/#container_name[Docker Compose#container_name]

[discrete]
=== details

Type:: null or string
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.defaultExec

Container program and arguments to invoke when calling
`arion exec <service.name>` without further arguments.


[discrete]
=== details

Type:: list of strings
Default::
+
----
["/bin/sh"]
----


No Example:: {blank}

== services.<name>.service.depends_on

See link:https://docs.docker.com/compose/compose-file/#depends_on[Docker Compose#depends_on]

[discrete]
=== details

Type:: list of strings
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.service.devices

See link:https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities[`docker run --device` documentation]

See link:https://docs.docker.com/compose/compose-file/#devices[Docker Compose#devices]


[discrete]
=== details

Type:: list of strings
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.service.dns

See link:https://docs.docker.com/compose/compose-file/#dns[Docker Compose#dns]

[discrete]
=== details

Type:: list of strings
Default::
+
----
[]
----


Example::
+
----
["8.8.8.8","8.8.4.4"]
----


== services.<name>.service.entrypoint

See link:https://docs.docker.com/compose/compose-file/#entrypoint[Docker Compose#entrypoint]

[discrete]
=== details

Type:: null or string
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.env_file

See link:https://docs.docker.com/compose/compose-file/#env_file[Docker Compose#env_file]

[discrete]
=== details

Type:: list of strings
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.service.environment

See link:https://docs.docker.com/compose/compose-file/#environment[Docker Compose#environment]

[discrete]
=== details

Type:: attribute set of string or signed integers
Default::
+
----
{}
----


No Example:: {blank}

== services.<name>.service.expose

See link:https://docs.docker.com/compose/compose-file/#expose[Docker Compose#expose]

[discrete]
=== details

Type:: list of strings
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.service.external_links

See link:https://docs.docker.com/compose/compose-file/#external_links[Docker Compose#external_links]

[discrete]
=== details

Type:: list of strings
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.service.extra_hosts

See link:https://docs.docker.com/compose/compose-file/#extra_hosts[Docker Compose#extra_hosts]

[discrete]
=== details

Type:: list of strings
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.service.hostStoreAsReadOnly

Adds a ':ro' (read-only) access mode to the host nix store bind mount.

[discrete]
=== details

Type:: boolean
Default::
+
----
true
----


No Example:: {blank}

== services.<name>.service.hostname

Analogous to the `docker run` counterpart.

See link:https://docs.docker.com/compose/compose-file/#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir[Docker Compose#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir]


[discrete]
=== details

Type:: null or string
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.image

See link:https://docs.docker.com/compose/compose-file/#image[Docker Compose#image]

[discrete]
=== details

Type:: string
No Default:: {blank}

No Example:: {blank}

== services.<name>.service.labels

See link:https://docs.docker.com/compose/compose-file/#labels[Docker Compose#labels]

[discrete]
=== details

Type:: attribute set of strings
Default::
+
----
{}
----


Example::
+
----
{"com.example.foo":"bar","traefik.enable":"true","traefik.http.routers.my-service.entrypoints":"web","traefik.http.routers.my-service.rule":"Host(`my-service.localhost`)"}
----


== services.<name>.service.links

See link:https://docs.docker.com/compose/compose-file/#links[Docker Compose#links]

[discrete]
=== details

Type:: list of strings
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.service.name

The name of the service - `<name>` in the composition-level `services.<name>`


[discrete]
=== details

Type:: string
No Default:: {blank}
Read Only:: {blank}
No Example:: {blank}

== services.<name>.service.network_mode

See link:https://docs.docker.com/compose/compose-file/#network_mode[Docker Compose#network_mode]

[discrete]
=== details

Type:: null or string
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.networks

See link:https://docs.docker.com/compose/compose-file/#networks[Docker Compose#networks]

[discrete]
=== details

Type:: null or list of strings
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.ports

Expose ports on host. "host:container" or structured.

See link:https://docs.docker.com/compose/compose-file/#ports[Docker Compose#ports]


[discrete]
=== details

Type:: list of unspecifieds
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.service.privileged

Analogous to the `docker run` counterpart.

See link:https://docs.docker.com/compose/compose-file/#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir[Docker Compose#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir]


[discrete]
=== details

Type:: null or boolean
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.restart

See link:https://docs.docker.com/compose/compose-file/#restart[Docker Compose#restart]

[discrete]
=== details

Type:: null or string
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.stop_signal

See link:https://docs.docker.com/compose/compose-file/#stop_signal[Docker Compose#stop_signal]

[discrete]
=== details

Type:: null or string
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.sysctls

See link:https://docs.docker.com/compose/compose-file/#sysctls[Docker Compose#sysctls]

[discrete]
=== details

Type:: attribute set of string or signed integers
Default::
+
----
{}
----


No Example:: {blank}

== services.<name>.service.tmpfs

See link:https://docs.docker.com/compose/compose-file/#tmpfs[Docker Compose#tmpfs]

[discrete]
=== details

Type:: list of strings
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.service.tty

Analogous to the `docker run` counterpart.

See link:https://docs.docker.com/compose/compose-file/#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir[Docker Compose#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir]


[discrete]
=== details

Type:: null or boolean
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.useHostNixDaemon

Make the host Nix daemon available.

[discrete]
=== details

Type:: boolean
Default::
+
----
false
----


No Example:: {blank}

== services.<name>.service.useHostStore

Bind mounts the host store if enabled, avoiding copying.

[discrete]
=== details

Type:: boolean
Default::
+
----
false
----


No Example:: {blank}

== services.<name>.service.user

Analogous to the `docker run` counterpart.

See link:https://docs.docker.com/compose/compose-file/#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir[Docker Compose#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir]


[discrete]
=== details

Type:: null or string
Default::
+
----
null
----


No Example:: {blank}

== services.<name>.service.volumes

See link:https://docs.docker.com/compose/compose-file/#volumes[Docker Compose#volumes]

[discrete]
=== details

Type:: list of unspecifieds
Default::
+
----
[]
----


No Example:: {blank}

== services.<name>.service.working_dir

Analogous to the `docker run` counterpart.

See link:https://docs.docker.com/compose/compose-file/#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir[Docker Compose#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir]


[discrete]
=== details

Type:: null or string
Default::
+
----
null
----


No Example:: {blank}

