{ qmk }: { avr ? true, arm ? true, teensy ? true , pkgsCross, mkShell, lib, poetry2nix, stdenv, fetchurl, fetchFromGitHub , clang-tools , dfu-programmer , dfu-util, diffutils, git, which , avrBinutils' ? pkgsCross.avr.buildPackages.binutils , avrGcc' ? pkgsCross.avr.buildPackages.gcc8 , avrlibc' ? pkgsCross.avr.libcCross , avrdude , gcc-arm-embedded , teensy-loader-cli , libusb-compat-0_1 }: let avr_incflags = [ "-isystem ${avrlibc'}/avr/include" "-B${avrlibc'}/avr/lib/avr5" "-L${avrlibc'}/avr/lib/avr5" "-B${avrlibc'}/avr/lib/avr35" "-L${avrlibc'}/avr/lib/avr35" "-B${avrlibc'}/avr/lib/avr51" "-L${avrlibc'}/avr/lib/avr51" ]; pythonEnv = poetry2nix.mkPoetryEnv { projectDir = "${qmk}/util/nix"; overrides = poetry2nix.overrides.withDefaults (self: super: { qmk = super.qmk.overridePythonAttrs(old: { # Allow QMK CLI to run "bin/qmk" as a subprocess (the wrapper changes # $PATH and breaks these invocations). dontWrapPythonPrograms = true; }); }); }; in rec { bootloadhid = stdenv.mkDerivation rec { pname = "bootloadhid"; version = "2012-12-08"; src = fetchurl { url = "https://www.obdev.at/downloads/vusb/bootloadHID.2012-12-08.tar.gz"; sha256 = "sha256-FU5+OGKaOi7sLfZm7foe4vLppXAY8X2fD48GTMINh1Q="; }; sourceRoot = "bootloadHID.${version}/commandline"; nativeBuildInputs = [ libusb-compat-0_1.dev ]; installPhase = '' mkdir -p $out/bin cp bootloadHID $out/bin ''; }; shell = mkShell { name = "qmk-devshell"; buildInputs = [ clang-tools dfu-programmer dfu-util diffutils git pythonEnv bootloadhid ] ++ lib.optional avr [ avrBinutils' avrGcc' avrlibc' avrdude ] ++ lib.optional arm [ gcc-arm-embedded ] ++ lib.optional teensy [ teensy-loader-cli ]; AVR_CFLAGS = lib.optional avr avr_incflags; AVR_ASFLAGS = lib.optional avr avr_incflags; shellHook = '' # Prevent the avr-gcc wrapper from picking up host GCC flags # like -iframework, which is problematic on Darwin unset NIX_CFLAGS_COMPILE_FOR_TARGET ''; }; qmk-firmware = stdenv.mkDerivation { name = "qmk-firmware"; src = fetchFromGitHub { owner = "qmk"; repo = "qmk_firmware"; fetchSubmodules = true; leaveDotGit = true; sha256 = "sha256-bd+NOzwqQCDBw2FYYtGWpmja0tFhsfpdDFyZXlSM/U4="; rev = "0.16.5"; }; configurePhase = '' mkdir -p keyboards/wheatfield/split75/keymaps/custom cp ${./keymap.c} keyboards/wheatfield/split75/keymaps/custom/keymap.c cp ${./rules.mk} keyboards/wheatfield/split75/rules.mk cp ${./config.h} keyboards/wheatfield/split75/keymaps/custom/config.h ''; buildPhase = '' make wheatfield/split75:custom ''; nativeBuildInputs = [ clang-tools dfu-programmer dfu-util diffutils git pythonEnv bootloadhid which ] ++ lib.optional avr [ avrBinutils' avrGcc' avrlibc' avrdude ] ++ lib.optional arm [ gcc-arm-embedded ] ++ lib.optional teensy [ teensy-loader-cli ]; AVR_CFLAGS = lib.optional avr avr_incflags; AVR_ASFLAGS = lib.optional avr avr_incflags; shellHook = '' # Prevent the avr-gcc wrapper from picking up host GCC flags # like -iframework, which is problematic on Darwin unset NIX_CFLAGS_COMPILE_FOR_TARGET ''; installPhase = '' cp wheatfield_split75_custom.hex $out ''; }; }