Skip to main content

structure of the pog.json

the pog.json file is the central configuration place for pog. the keyboard includes a pog.py helper that will load most configurations directly from the pog.json without modifying your python files (keymap.py excluded)

pog is basically a gui to configure this pog.json file and generate a p roper keymap.py

Format

the pog.json is a simple JSON object with following keys

  • id
    • a ulid for identifying a keyboad permanently, will be autogenerated
    • Example: 01GTFNP1DX5VPDA9H5DW025VNW
  • name
    • the name of your keyboard
    • Example: New Horizons
  • manufacturer
    • the name of the keyboard manufacturer
    • Example: 0xCB
  • description
    • a description of the keyboard and its features
  • tags
    • an array of tags that define features of the keyboad
    • Example: ['65%', 'RGB']
  • controller
    • name of the microcontroller that is used in this keyboard, will be used for quick pin definitions in the future
    • Example: 0xcb-helios
  • wiringMethod
    • either direct or matrix depending on how the keyboard is wired
  • diodeDirection
    • either ROW2COL or COL2ROW depending on the direction the diodes on the matrix are facing
  • rows
    • the amount of rows your keyboard matrix has, only applies when using wiringMethod matrix
    • Example: 5
  • cols
    • the amount of columns your keyboad matrix has, only applies when using wiringMethod matrix
    • Example: 10
  • pins
    • the amount of directly wired pins when using wiringMethod direct
    • Example: 20
  • pinPrefix
    • how the pin definitions should be prefixed to make the pin definitions easier to read and add
    • options are: none, board, gp, quickpin
  • rowPins
    • pin definitions based on the pinPrefix
  • colPins
    • pin definitions based on the pinPrefix
  • directPins
    • pin definitions based on the pinPrefix
  • encoders
    • a list of rotary encoders added to the board specifying the pins for pad_a and pad_b, pin definitions follow the pinPrefix
    • Example: [{"pad_a": 2, "pad_b": 3}]
  • layouts
    • an object describing the names and selected index for layout variants (eg. ansi/iso enter toggle)
    • docs are WIP
  • keys
    • the keys in the keyboard layout, it is closely resembling the qmk key object more info in a seperate WIP documentation
  • keymap
    • the keymap consisting of an array of keymap layers and these including all the keys on that layer
    • Example: [["KC.A", "KC.B", "KC.C"]]
  • encoderKeymap
    • the keymap for encoder rotation actions its an array of layers that then have an array of encoders which have 2 entries one for rotate left and one for rotate right
    • Example: [[["KC.VOLD", "KC.VOLU"]]]
  • layers
    • an array of objects describin additional information for each layer like name and color
    • Example: [{"name":"Base", "color":"#550088"}]
  • split
    • boolean to define if the keyboard is a split keyboard
  • coordMap
    • the coord mapping for the keyboard an array of rows that have strings defining either the key index or a spc as a spacer
    • Example: [ [ "014", "000", "spc", "017", "031" ], [ "011", "001", "spc", "015", "030" ], ]
  • coordMapSetup
    • if the keyboard should run in the coordmap mode to print key indexes
    • default: false
  • lastEdited
    • a timestamp automatically placed by pog on each edit