# `Astral.Config`
[🔗](https://github.com/elixir-volt/astral/blob/v0.7.0/lib/astral/config.ex#L1)

Normalized build configuration for an Astral site.

Paths are stored as absolute paths so downstream modules can work without
repeatedly resolving them against the site root.

# `t`

```elixir
@type t() :: %Astral.Config{
  asset_entry: [String.t()],
  asset_hash: boolean(),
  asset_outdir: String.t(),
  asset_url_prefix: String.t(),
  assets: String.t(),
  collections: [Astral.Collection.t()],
  components: String.t(),
  image: Astral.Image.Config.t() | nil,
  islands: Astral.Islands.Config.t(),
  layout: String.t(),
  layouts: String.t(),
  markdown: keyword(),
  outdir: String.t(),
  pages: String.t(),
  plugins: [Astral.Plugin.plugin()],
  public: String.t(),
  root: String.t()
}
```

# `__flush_top_level__`

Return and clear accumulated top-level configuration options.

# `__put_top_level__`

Accumulate keyword options in the current process's top-level configuration scope.

# `__reset_top_level__`

Reset all process-local configuration scopes before evaluating a site declaration.

# `adapter`
*macro* 

Enable an island framework adapter in the islands block.

# `allow_remote`
*macro* 

Append an allowed remote image URL pattern to the image configuration.

# `asset_entry`
*macro* 

Append a browser entry path, resolved relative to the assets directory.

# `asset_outdir`
*macro* 

Set the browser output directory, relative to the site output directory.

# `asset_url_prefix`
*macro* 

Set the public URL prefix used for browser assets.

# `assets`
*macro* 

Use the default assets directory.

# `assets`
*macro* 

Set the directory containing browser assets.

# `assets`
*macro* 

Collect browser build settings for the specified assets directory.

# `collection`
*macro* 

Append a named content collection using its default settings.

# `collection`
*macro* 

Configure a named collection's directory, schema, layout and route settings.

# `component`
*macro* 

Declare a runtime-selected island component path and its framework adapter.

# `components`
*macro* 

Set the directory containing local `.astral` components.

# `default`
*macro* 

Set the site's default layout from a layouts block.

# `drafts`
*macro* 

Choose whether the current collection includes draft entries.

# `entry`
*macro* 

Append a browser entry in an assets block.

# `field`
*macro* 

Append a schema field with its type, optional default and required flag.

# `generated_route`

Build a generated route whose renderer evaluates quoted code with route and site bindings.

# `get`
*macro* 

Declare a generated route whose block renders with site, route, config and assigns bindings.

# `hash`
*macro* 

Enable or disable content hashes in generated browser asset filenames.

# `image`
*macro* 

Set image processing options directly as a keyword list.

# `islands`
*macro* 

Collect enabled island adapters and explicitly declared browser components.

# `layout`
*macro* 

Set the default layout for the current collection or, outside a collection, the site.

# `layouts`
*macro* 

Use the default layouts directory.

# `layouts`
*macro* 

Set the directory containing layouts.

# `layouts`
*macro* 

Set the layouts directory and evaluate nested layout directives.

# `markdown`
*macro* 

Set MDEx Markdown options for pages, collections and rendered content.

# `new`

```elixir
@spec new(keyword()) :: t()
```

Build a normalized config from keyword options.

# `outdir`
*macro* 

Set the site output directory, or the browser output directory inside an assets block.

# `pages`
*macro* 

Set the directory containing file-based pages.

# `permalink`
*macro* 

Set the current collection's route pattern.

# `plug`
*macro* 

Append middleware for config-generated routes without options.

# `plug`
*macro* 

Append middleware for config-generated routes with options.

# `plugin`
*macro* 

Append a site plugin without options.

# `plugin`
*macro* 

Append a site plugin with keyword options.

# `public`
*macro* 

Set the directory of public files copied into static output.

# `root`
*macro* 

Set the site root against which relative configuration paths are resolved.

# `schema`
*macro* 

Set a collection schema, converting literal map syntax through JSONSpec.

# `schema_value`

Convert quoted map schemas through JSONSpec; preserve other schema representations.

# `site`
*macro* 

Declare an Astral site configuration.

# `url_prefix`
*macro* 

Set the browser asset URL prefix in an assets block.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
