# `ket` **ket** is the configuration language of **tek**. it's based on [edn](https://en.wikipedia.org/wiki/Clojure#Extensible_Data_Notation) but without all the features. ## usage ### with `tengri_output` this is a `tengri_output` view layout defined using ket: ```edn (bsp/s (fixed/y 2 :toolbar) (fill/x (align/c (bsp/w :pool (bsp/s :outputs (bsp/s :inputs (bsp/s :tracks :scenes))))))) ``` ### with `tengri_input` this is a `tengri_input` keymap defined using ket: ```edn (@u undo 1) (@shift-u redo 1) (@e editor show :pool-clip) (@ctrl-a scene add) (@ctrl-t track add) (@tab pool toggle) ``` ## tokens ket has 4 "types", represented by variants of the `Value` enum: * `Num` - numeric literal * `Sym` - textual symbol * `Key` - textual key * `Exp` - parenthesized group of tokens ### numeric literal numbers are passed through as is. only non-negative integers are supported. ```edn 0 123456 ``` ### keys keys are the names of available operations. they look like this: ```edn simple-key multi-part/key ``` keys are implemented by the underlying subsystem: * in `tengri_output`, keys are names of layout primitives * in `tengri_input`, keys are names of commands ### symbols symbols that start with `:` represent the names of variables provided by the `Context` trait - such as command parameters, or entire layout components: ```edn :symbol-name ``` symbols that start with `@` represent keybindings. they are parsed in `tengri_tui` and look like this: ```edn @ctrl-alt-shift-space ``` ### parenthesized groups parenthesized groups represent things like expressions or configuration statements, and look like this: ```edn (some-key :symbol (some/other-key @another-symbol 123) 456) ``` ## goals * [ ] const parse * [ ] live reload * [ ] serialize modified code back to original indentation