conl 1.3.0

CONL is a post-modern configuration language
Documentation
# CONL is a post-minimalist, human-centric configuration language.

# There are four ways to define a value:
scalar = value

list
  = value1
  = value2

map
  key1 = value1
  key2 = value2

multiline_scalar = """
  value

# For multiline scalars, you can specify a tag for syntax highlighting.
init_script = """bash
  #!/bin/bash

  echo "hello world"

# There is no quoting. Leading and trailing whitespace is ignored.
# but keys and values can contain any characters (*conditions apply)
spaced out key = value with = signs

# To make it safe to include URLs as values, # is only a comment
# at the start of a line, after whitespace, or after the first =
# sign on a line.
a = https://example.com#a # jump to section a

# But the space around the = sign is purely for readability
short=16 bits

# It is possible to nest lists and maps as needed.
# (and as in JSON, types can be mixed however you want)
json_like
  sub_map
    key = value
  sub_list
    = value
    =
      map = no problem
    =
      = a list in a list # in a map in a map
  sub_value = 5

# For things that cannot be otherwise represented, you can use escapes:
escapes
  = "" # '"'
  = "= # '=' (needed only if you want an equals in your key)
  = "# # '#' (needed if you want a literal # after whitespace)
  = "_ # normal space (needed only for leading/trailing whitespace)
  = "> # tab (recommended but only needed for leading/trailing whitespace)
  = "/ # newline
  = "\ # carriage return
  = "{1F321} # 🐱 (you can refer to any Unicode codepoint valid in UTF-8)
  = "{} # gives an empty string (and must stand alone)

# Variable types are not syntactically distinct.
# The app you are configuring already knows what to expect.
enabled = yes
country_code = no

# CONL also has no null, so you should comment out values you don't wish to set.
# (or use "{} as a placeholder)
overrides
  # bits_per_byte = 8
  int_size = 32

# A map from the empty key to a list with a single empty value?
# (this is supported for round-trip JSON compatibility, not because
# you should design your configuration file to need this...)
"{}
  = "{}