From NixOS Wiki


QMK (Quantum Mechanical Keyboard) is an open-source firmware for mechanical keyboards that enables users to customize and program various aspects of their keyboards. It provides a rich set of features for customization, including keymaps, macros, LED backlighting, and layers.

QMK is built on top of the popular AVR and ARM microcontrollers, making it compatible with a wide range of keyboards, including custom and commercial keyboards. It allows users to create fully programmable keyboard layouts, which can then be saved, shared, and reused across different boards or devices.

NixOS configuration

To access the keyboard for configuration as a normal non-root user add the following nixos configuration:

  hardware.keyboard.qmk.enable = true

After that you can configure keyboard settings using the Via app (if your firmware has enabled support for it).


VIA is a feature in QMK that lets you change your keymap on your keyboard without needing to reflash firmware. Your keyboard must support VIA in order for it to work.


Install the VIA package, and add the package to udev. The nixpkg disables the prompt to add the udev due to compatibility issues with NixOS, so it's necessary for the app to detect your keyboard.

  environment.systemPackages = with pkgs; [
  services.udev.packages = [ pkgs.via ];

After updating udev rules a system restart is required for the changes to take effect.

Flashing custom firmware

The qmk commandline application is fully supported in nixpkgs. After doing nix-shell -p qmk you can follow the upstream documentation for building, customizing and flashing your keyboard