## This is the configuration file for Headroom.
## See https://github.com/vaclavsvejcar/headroom for more details.

## Defines the behaviour how to handle license headers, possible options are:
##
##   - add     = (default) adds license header to files with no existing header
##               (same as '-a|--add-headers' command line argument)
##   - drop    = drops existing license header from without replacement
##               (same as '-d|--drop-headers' command line argument)
##   - replace = adds or replaces existing license header
##               (same as '-r|--replace-headers' command line argument)
run-mode: add

## Paths to source code files (either files or directories),
## same as '-s|--source-path=PATH' command line argument (can be used multiple
## times for more than one path).
##
## NOTE: Not defined in default configuration as this options must be defined by
## the user.
# source-paths: []

## Allows to define list of regular expressions that will be matched against
## 'source-paths' and such paths will be excluded from processing. Same as
## '-e|--excluded-path=REGEX' command line argument (can be used multiple times
## for more than one path).
excluded-paths: []

## Paths to template files (either files or directories),
## same as '-t|--template-path=PATH' command line argument (can be used multiple
## times for more than one path).
##
## NOTE: Not defined in default configuration as this options must be defined by
## the user.
# template-paths: []

## Variables (key-value) to replace in templates,
## same as '-v|--variable="KEY=VALUE"' command line argument (can be used
## multiple times for more than one path).
variables:
  _haskell_module_copyright: "!!! INSERT HASKELL MODULE COPYRIGHT !!!"
  _haskell_module_name: "!!! INSERT HASKELL MODULE NAME !!!"
  _haskell_module_license: "!!! INSERT MODULE LICENSE !!!"
  _haskell_module_maintainer: "!!! INSERT MODULE MAINTAINER !!!"
  _haskell_module_stability: "!!! INSERT MODULE STABILITY !!!"
  _haskell_module_portability: "!!! INSERT MODULE PORTABILITY !!!"
  _haskell_module_longdesc: "!!! INSERT MODULE LONG DESCRIPTION !!!"
  _haskell_module_shortdesc: "!!! INSERT MODULE SHORT DESCRIPTION !!!"
  _java_package_name: "!!! UNKNOWN JAVA PACKAGE NAME !!!"
  _purescript_module_name: "!!! INSERT PURESCRIPT MODULE NAME !!!"

## Allows to change behaviour of license header detection and placement. Such
## configuration is defined for every supported file type, where individual
## configuration keys are:
##
##  - file-extensions    = List of file extensions valid for given file type.
##  - margin-after       = Number of blank lines to put AFTER the rendered
##                         license header text.
##  - margin-before      = Number of blank lines to put BEFORE the rendered
##                         license header text.
##  - put-after          = List of regexp patterns, where the license header is
##                         placed AFTER the very last line matching one of the
##                         given regular expressions. If no match found, header
##                         is placed at the very beginning of the file.
##  - put-before         = List of regexp patterns, where the license header is
##                         placed BEFORE the very first line matching one of the
##                         given regular expressions. If no match found, header
##                         is placed at the very beginning of the file.
##  - block-comment      = Defines that the license header is rendered using the
##                         multi-line (block) comment syntax (such as '/* */').
##                         Has two mandatory fields:
##      starts-with        = Defines how the license header comment starts.
##      ends-with          = Defines how the license header comment ends.
##                         NOTE: cannot be used together with 'line-comment'.
##  - line-comment       = Defines that the license header is rendered using the
##                         single-line comment syntax (such as '//').
##                         Has one mandatory field:
##      prefixed-by        = Defines how the license header comment starts.
license-headers:
  ## C configuration
  c:
    file-extensions: ["c"]
    margin-after: 0
    margin-before: 0
    put-after: []
    put-before: ["^#include"]
    block-comment:
      starts-with: "/*"
      ends-with: "*/"

  ## C++ configuration
  cpp:
    file-extensions: ["cpp"]
    margin-after: 0
    margin-before: 0
    put-after: []
    put-before: ["^#include"]
    block-comment:
      starts-with: "/*"
      ends-with: "*/"

  ## CSS configuration
  css:
    file-extensions: ["css"]
    margin-after: 0
    margin-before: 0
    put-after: []
    put-before: ['([^\r\n,{}]+)(,(?=[^}]*{)|\s*{)']
    block-comment:
      starts-with: "/*"
      ends-with: "*/"

  ## Haskell configuration
  haskell:
    file-extensions: ["hs"]
    margin-after: 0
    margin-before: 0
    put-after: []
    put-before: ["^module"]
    block-comment:
      starts-with: "{-|"
      ends-with: "-}"

  ## HTML configuration
  html:
    file-extensions: ["htm", "html"]
    margin-after: 0
    margin-before: 0
    put-after: []
    put-before: ["^(<!DOCTYPE|<[a-zA-Z])"]
    block-comment:
      starts-with: "<!--"
      ends-with: "-->"

  ## Java configuration
  java:
    file-extensions: ["java"]
    margin-after: 0
    margin-before: 0
    put-after: []
    put-before: ["^package"]
    block-comment:
      starts-with: "/*"
      ends-with: "*/"

  ## JS configuration
  js:
    file-extensions: ["js"]
    margin-after: 0
    margin-before: 0
    put-after: []
    put-before: []
    block-comment:
      starts-with: "/*"
      ends-with: "*/"

  ## PureScript configuration
  purescript:
    file-extensions: ["purs"]
    margin-after: 0
    margin-before: 0
    put-after: []
    put-before: ["^module"]
    line-comment:
      prefixed-by: "--"

  ## Rust configuration
  rust:
    file-extensions: ["rs"]
    margin-after: 0
    margin-before: 0
    put-after: []
    put-before: ["^use"]
    block-comment:
      starts-with: "/*"
      ends-with: "*/"

  ## Scala configuration
  scala:
    file-extensions: ["scala"]
    margin-after: 0
    margin-before: 0
    put-after: []
    put-before: ["^package"]
    block-comment:
      starts-with: "/*"
      ends-with: "*/"

  ## Shell configuration
  shell:
    file-extensions: ["sh"]
    margin-after: 1
    margin-before: 1
    put-after: ["^#!"]
    put-before: []
    line-comment:
      prefixed-by: "#"

## Configuration for post-processing license header functions. These functions
## allows to modify/enhance already rendered license headers, e.g. update years
## in copyright statements, etc. Each function can be enabled/disabled using the
## 'enabled' key and eventually customized using the 'config' key.
post-process:
  ## License header function that updates years in copyright statements in
  ## rendered license header. If you need to update copyright year only for
  ## selected author(s), define them in 'selected-authors-only' key, otherwise
  ## ommit/comment out this key completely and all copyright statements will be
  ## updated.
  update-copyright:
    enabled: false
    config:
      ## If used, updates copyright statements of selected authors only.
      # selected-authors-only: ["John Smith"]