+Here is a list of the colorscheme groups that you can use:
+
+* default (color of the background and foreground for unhighlighted text)
+* comment
+* identifier
+* constant
+* statement
+* symbol
+* preproc
+* type
+* special
+* underlined
+* error
+* todo
+* selection (Color of the text selection)
+* statusline (Color of the statusline)
+* tabbar (Color of the tabbar that lists open files)
+* indent-char (Color of the character which indicates tabs if the option is
+ enabled)
+* line-number
+* gutter-error
+* gutter-warning
+* diff-added
+* diff-modified
+* diff-deleted
+* cursor-line
+* current-line-number
+* color-column
+* ignore
+* scrollbar
+* divider (Color of the divider between vertical splits)
+* message (Color of messages in the bottom line of the screen)
+* error-message (Color of error messages in the bottom line of the screen)
+
+Colorschemes must be placed in the `~/.config/micro/colorschemes` directory to
+be used.
+
+---
+
+In addition to the main colorscheme groups, there are subgroups that you can
+specify by adding `.subgroup` to the group. If you're creating your own custom
+syntax files, you can make use of your own subgroups.
+
+If micro can't match the subgroup, it'll default to the root group, so it's
+safe and recommended to use subgroups in your custom syntax files.
+
+For example if `constant.string` is found in your colorscheme, micro will us
+that for highlighting strings. If it's not found, it will use constant instead.
+Micro tries to match the largest set of groups it can find in the colorscheme
+definitions, so if, for examle `constant.bool.true` is found then micro will
+use that. If `constant.bool.true` is not found but `constant.bool` is found
+micro will use `constant.bool`. If not, it uses `constant`.
+
+Here's a list of subgroups used in micro's built-in syntax files.
+
+* comment.bright (Some filetypes have distinctions between types of comments)
+* constant.bool
+* constant.bool.true
+* constant.bool.false
+* constant.number
+* constant.specialChar
+* constant.string
+* constant.string.url
+* identifier.class (Also used for functions)
+* identifier.macro
+* identifier.var
+* preproc.shebang (The #! at the beginning of a file that tells the os what
+ script interpreter to use)
+* symbol.brackets (`{}()[]` and sometimes `<>`)
+* symbol.operator (Color operator symbols differently)
+* symbol.tag (For html tags, among other things)
+* type.keyword (If you want a special highlight for keywords like `private`)
+
+In the future, plugins may also be able to use color groups for styling.
+
+
+## Syntax files
+
+The syntax files are written in yaml-format and specify how to highlight
+languages.
+
+Micro's builtin syntax highlighting tries very hard to be sane, sensible and
+provide ample coverage of the meaningful elements of a language. Micro has
+syntax files built in for over 100 languages now! However, there may be
+situations where you find Micro's highlighting to be insufficient or not to
+your liking. The good news is that you can create your own syntax files, and
+place them in `~/.config/micro/syntax` and Micro will use those instead.
+
+### Filetype definition
+
+You must start the syntax file by declaring the filetype:
+
+```
+filetype: go
+```
+
+### Detect definition
+
+Then you must provide information about how to detect the filetype:
+
+```
+detect:
+ filename: "\\.go$"
+```
+
+Micro will match this regex against a given filename to detect the filetype.
+You may also provide an optional `header` regex that will check the first line
+of the file. For example:
+
+```
+detect:
+ filename: "\\.ya?ml$"
+ header: "%YAML"
+```
+
+### Syntax rules
+
+Next you must provide the syntax highlighting rules. There are two types of
+rules: patterns and regions. A pattern is matched on a single line and usually
+a single word as well. A region highlights between two patterns over multiple
+lines and may have rules of its own inside the region.
+
+Here are some example patterns in Go:
+
+```
+rules:
+ - special: "\\b(break|case|continue|default|go|goto|range|return)\\b"
+ - statement: "\\b(else|for|if|switch)\\b"
+ - preproc: "\\b(package|import|const|var|type|struct|func|go|defer|iota)\\b"
+```
+
+The order of patterns does matter as patterns lower in the file will overwrite
+the ones defined above them.
+
+And here are some example regions for Go:
+
+```
+- constant.string:
+ start: "\""
+ end: "\""
+ rules:
+ - constant.specialChar: "%."
+ - constant.specialChar: "\\\\[abfnrtv'\\\"\\\\]"
+ - constant.specialChar: "\\\\([0-7]{3}|x[A-Fa-f0-9]{2}|u[A-Fa-f0-9]{4}|U[A-Fa-f0-9]{8})"
+
+- comment:
+ start: "//"
+ end: "$"
+ rules:
+ - todo: "(TODO|XXX|FIXME):?"
+
+- comment:
+ start: "/\\*"
+ end: "\\*/"
+ rules:
+ - todo: "(TODO|XXX|FIXME):?"
+```
+
+Notice how the regions may contain rules inside of them. Any inner rules that
+are matched are then skipped when searching for the end of the region. For
+example, when highlighting `"foo \" bar"`, since `\"` is matched by an inner
+rule in the region, it is skipped. Likewise for `"foo \\" bar`, since `\\` is
+matched by an inner rule, it is skipped, and then the `"` is found and the
+string ends at the correct place.
+
+You may also explicitly mark skip regexes if you don't want them to be
+highlighted. For example:
+
+```
+- constant.string:
+ start: "\""
+ end: "\""
+ skip: "\\."
+ rules: []
+```
+
+#### Includes
+
+You may also include rules from other syntax files as embedded languages. For
+example, the following is possible for html:
+
+```
+- default:
+ start: "<script.*?>"
+ end: "</script.*?>"
+ rules:
+ - include: "javascript"
+
+- default:
+ start: "<style.*?>"
+ end: "</style.*?>"
+ rules:
+ - include: "css"
+```