mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-27 23:02:16 -05:00
gnu: Add qmk-firmware-ergodox-ez-default.
* gnu/packages/firmware.scm (make-qmk-firmware/implementation) (make-qmk-firmware): New procedures. (qmk-firmware-ergodox-ez-default): New variable. Series-changes: 2 - Install firmware from root directory, not .build - Also honor .bin and .uf2 firmware file extensions
This commit is contained in:
parent
a1ce7487d3
commit
26025fa802
1 changed files with 129 additions and 1 deletions
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
(define-module (gnu packages firmware)
|
(define-module (gnu packages firmware)
|
||||||
#:use-module ((guix licenses) #:prefix license:)
|
#:use-module ((guix licenses) #:prefix license:)
|
||||||
|
#:use-module (guix memoization)
|
||||||
#:use-module (guix packages)
|
#:use-module (guix packages)
|
||||||
#:use-module (guix download)
|
#:use-module (guix download)
|
||||||
#:use-module (guix gexp)
|
#:use-module (guix gexp)
|
||||||
|
@ -43,6 +44,7 @@ (define-module (gnu packages firmware)
|
||||||
#:use-module (gnu packages admin)
|
#:use-module (gnu packages admin)
|
||||||
#:use-module (gnu packages autotools)
|
#:use-module (gnu packages autotools)
|
||||||
#:use-module (gnu packages avr)
|
#:use-module (gnu packages avr)
|
||||||
|
#:use-module (gnu packages avr-xyz)
|
||||||
#:use-module (gnu packages assembly)
|
#:use-module (gnu packages assembly)
|
||||||
#:use-module (gnu packages backup)
|
#:use-module (gnu packages backup)
|
||||||
#:use-module (gnu packages base)
|
#:use-module (gnu packages base)
|
||||||
|
@ -80,7 +82,10 @@ (define-module (gnu packages firmware)
|
||||||
#:use-module (gnu packages tls)
|
#:use-module (gnu packages tls)
|
||||||
#:use-module (gnu packages version-control)
|
#:use-module (gnu packages version-control)
|
||||||
#:use-module (gnu packages xml)
|
#:use-module (gnu packages xml)
|
||||||
#:use-module (ice-9 match))
|
#:use-module (ice-9 format)
|
||||||
|
#:use-module (ice-9 match)
|
||||||
|
|
||||||
|
#:export (make-qmk-firmware))
|
||||||
|
|
||||||
(define-public ath9k-htc-firmware
|
(define-public ath9k-htc-firmware
|
||||||
(package
|
(package
|
||||||
|
@ -1308,3 +1313,126 @@ (define-public qmk
|
||||||
install the udev rules provided by the @code{qmk-udev-rules} package to avoid
|
install the udev rules provided by the @code{qmk-udev-rules} package to avoid
|
||||||
having to run @command{qmk} as root when flashing the firmware.")
|
having to run @command{qmk} as root when flashing the firmware.")
|
||||||
(license license:expat)))
|
(license license:expat)))
|
||||||
|
|
||||||
|
(define* (make-qmk-firmware/implementation keyboard keymap
|
||||||
|
#:key (description "")
|
||||||
|
keymap-json
|
||||||
|
keymap-source-directory)
|
||||||
|
"Return a package to build the QMK firmware for KEYBOARD with KEYMAP.
|
||||||
|
Keyboard should be the name of a sub-directory under the @file{keyboards}
|
||||||
|
directory. For custom keymaps, KEYMAP-JSON, a file-like object of a JSON
|
||||||
|
representation of KEYMAP as generated by the @url{https://config.qmk.fm/, QMK
|
||||||
|
Configurator} tool or KEYMAP-SOURCE-DIRECTORY, a file-like object directory
|
||||||
|
containing the keymap source files files such as @file{keymap.c}, can be
|
||||||
|
provided."
|
||||||
|
(package
|
||||||
|
(name (string-append "qmk-firmware-"
|
||||||
|
(string-replace-substring keyboard "_" "-") "-"
|
||||||
|
(string-replace-substring keymap "_" "-")))
|
||||||
|
;; Note: When updating this package, make sure to also update the commit
|
||||||
|
;; used for the LUFA submodule in the 'copy-lufa-source' phase below.
|
||||||
|
(version "0.22.3")
|
||||||
|
(source (origin
|
||||||
|
(method git-fetch)
|
||||||
|
(uri (git-reference
|
||||||
|
(url "https://github.com/qmk/qmk_firmware")
|
||||||
|
(commit version)))
|
||||||
|
(file-name (git-file-name "qmk-firmware" version))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"0s1lcnv7cddpn768p7mrc5bkxhx0ba5p77ya007dnkbk36c33d0w"))))
|
||||||
|
(build-system gnu-build-system)
|
||||||
|
(arguments
|
||||||
|
(list
|
||||||
|
#:modules '((guix build gnu-build-system)
|
||||||
|
(guix build utils)
|
||||||
|
(ice-9 ftw)
|
||||||
|
(ice-9 match)
|
||||||
|
(srfi srfi-26))
|
||||||
|
;; XXX: Running a test target like "test:$keyboard" doesn't seem to run
|
||||||
|
;; anything and causes the .hex file to be regenerated; leave the tests
|
||||||
|
;; out for now.
|
||||||
|
#:tests? #f
|
||||||
|
#:make-flags
|
||||||
|
#~(list #$(format #f "~a:~a" keyboard keymap)
|
||||||
|
(string-append "SHELL=" (search-input-file
|
||||||
|
%build-inputs "bin/sh")))
|
||||||
|
#:phases
|
||||||
|
#~(modify-phases %standard-phases
|
||||||
|
(replace 'configure
|
||||||
|
(lambda _
|
||||||
|
;; Do not attempt to retrieve information from git during the
|
||||||
|
;; build.
|
||||||
|
(setenv "SKIP_GIT" "1")))
|
||||||
|
(add-after 'unpack 'copy-lufa-source
|
||||||
|
;; QMK carries a custom fork of LUFA as a git submodule; make sure
|
||||||
|
;; the same commit is used (see:
|
||||||
|
;; https://github.com/qmk/qmk_firmware/tree/master/lib).
|
||||||
|
(lambda _
|
||||||
|
(copy-recursively
|
||||||
|
#$(let ((commit "549b97320d515bfca2f95c145a67bd13be968faa"))
|
||||||
|
(origin
|
||||||
|
(inherit (package-source lufa))
|
||||||
|
(uri (git-reference
|
||||||
|
(url "https://github.com/qmk/lufa")
|
||||||
|
(commit commit)))
|
||||||
|
(file-name (git-file-name "lufa" commit))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"1rmhm4rxvq8skxqn6vc4n4ly1ak6whj7c386zbsci4pxx548n9h4"))))
|
||||||
|
"lib/lufa")))
|
||||||
|
#$@(if keymap-source-directory
|
||||||
|
#~((add-after 'unpack 'copy-keymap-source-directory
|
||||||
|
(lambda _
|
||||||
|
(let ((keymap-dir #$(string-append "keyboards/" keyboard
|
||||||
|
"/keymaps/" keymap)))
|
||||||
|
(false-if-exception (delete-file-recursively
|
||||||
|
keymap-dir))
|
||||||
|
(copy-recursively #$keymap-source-directory
|
||||||
|
keymap-dir)))))
|
||||||
|
#~())
|
||||||
|
#$@(if keymap-json
|
||||||
|
#~((replace 'build
|
||||||
|
(lambda _
|
||||||
|
(invoke "qmk" "compile" #$keymap-json))))
|
||||||
|
#~())
|
||||||
|
(replace 'install
|
||||||
|
(lambda _
|
||||||
|
(match (scandir "." (lambda (f)
|
||||||
|
(false-if-exception
|
||||||
|
(member (string-take-right f 4)
|
||||||
|
'(".bin" ".hex" ".uf2")))))
|
||||||
|
(()
|
||||||
|
(error "no built binary file found"))
|
||||||
|
((hex ..1)
|
||||||
|
(for-each (cut install-file <> #$output) hex))))))))
|
||||||
|
;; Some of the build tools are required to be on the PATH, as the make
|
||||||
|
;; files do not always operate through 'qmk'; all of qmk's inputs must
|
||||||
|
;; thus be made available.
|
||||||
|
(native-inputs (modify-inputs (package-inputs qmk)
|
||||||
|
(append qmk)))
|
||||||
|
(home-page "https://qmk.fm/")
|
||||||
|
(synopsis "Keyboard firmware for Atmel AVR and Arm USB families")
|
||||||
|
(description
|
||||||
|
(format #f "QMK (Quantum Mechanical Keyboard Firmware) is a keyboard
|
||||||
|
firmware based on the @url{https://github.com/tmk/tmk_keyboard, tmk_keyboard
|
||||||
|
firmware} with some useful features for Atmel AVR and ARM controllers, and
|
||||||
|
more specifically, the @url{https://olkb.com/, OLKB product line}, the
|
||||||
|
@url{https://ergodox-ez.com/, ErgoDox EZ keyboard}, and the
|
||||||
|
@url{https://clueboard.co/, Clueboard product line}.~@[~%~%~a~]" description))
|
||||||
|
(license license:gpl2+)))
|
||||||
|
|
||||||
|
(define make-qmk-firmware (memoize make-qmk-firmware/implementation))
|
||||||
|
|
||||||
|
(define-public qmk-firmware-ergodox-ez-default
|
||||||
|
(make-qmk-firmware
|
||||||
|
"ergodox_ez" "default" #:description
|
||||||
|
"This is the default keymap used on the ErgoDox EZ keyboard. It includes
|
||||||
|
the novel MEH and Hyper keys pioneered by the ErgoDox EZ, easy to reach
|
||||||
|
Control/Shift modifiers keys, and two-functions hold keys to access layer 1.
|
||||||
|
Layer 1 contains function keys, symbols, a numpad as well as brightness keys.
|
||||||
|
Layer 2 contains multimedia and mouse keys. See the
|
||||||
|
@file{keyboards/ergodox_ez/keymaps/default/keymap.c} source file for the
|
||||||
|
keymap definition, or the
|
||||||
|
@url{https://configure.ergodox-ez.com/ergodox-ez/layouts/JwwW/latest/0,
|
||||||
|
ErgoDox EZ Configurator} page."))
|
||||||
|
|
Loading…
Reference in a new issue