{ stdenv, fetchgit, # deps qmk, gnumake, git, }: let layout_id = "KWBYA"; layout_geometry = "moonlander"; firmware_version = "24"; in stdenv.mkDerivation { pname = "moonlander-layout"; version = "25"; src = fetchgit { url = "https://github.com/qmk/qmk_firmware/"; rev = "refs/tags/0.27.1"; hash = "sha256-Chq4R8rICY1eyt5r2dkPm34zDOm6TqPKAXQWPp0nByA="; fetchSubmodules = true; # This allows for a compiled in version leaveDotGit = true; }; nativeBuildInputs = [ gnumake qmk git ]; buildPhase = /* bash */ '' runHook preBuild ## Set keyboard directory and make prefix based on firmware version if [ "${firmware_version}" -ge 24 ]; then keyboard_directory="keyboards/zsa" keyboard_folder="zsa/${layout_geometry}" else keyboard_directory="keyboards" keyboard_folder="${layout_geometry}" fi ## Copy layout files to the qmk folder key_dir="$keyboard_directory/${layout_geometry}/keymaps/${layout_id}" [ -d "$key_dir" ] && rm --recursive "$key_dir" mkdir --parents "$(dirname "$key_dir")" cp --recursive "${./src}" "$key_dir" ## Build the layout make "$keyboard_folder:${layout_id}" runHook postBuild ''; installPhase = '' runHook preInstall mkdir --parents "$out/binary_output" cp --recursive "./.build" "$out/build" rm --recursive "$out/build/obj_zsa_moonlander_${layout_id}" ln --symbolic --relative "$out/build/zsa_moonlander_${layout_id}.bin" "$out/binary_output/" runHook postInstall ''; }