aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wells <chris@mathematicaster.org>2025-10-16 12:41:27 -0500
committerChris Wells <chris@mathematicaster.org>2025-10-16 12:41:27 -0500
commit3c986ff650f04bb19597e3d519d3ebcfbd9e18a7 (patch)
treeeddf1701ecf92ea896f4d36d1b21f5ad1ccd02bc
parent93a6c43ae005b39cce3b33a1dddf0e50ca5e06ad (diff)
downloadfw-manager-3c986ff650f04bb19597e3d519d3ebcfbd9e18a7.tar
fw-manager-3c986ff650f04bb19597e3d519d3ebcfbd9e18a7.tar.gz
fw-manager-3c986ff650f04bb19597e3d519d3ebcfbd9e18a7.tar.bz2
fw-manager-3c986ff650f04bb19597e3d519d3ebcfbd9e18a7.tar.lz
fw-manager-3c986ff650f04bb19597e3d519d3ebcfbd9e18a7.tar.xz
fw-manager-3c986ff650f04bb19597e3d519d3ebcfbd9e18a7.tar.zst
fw-manager-3c986ff650f04bb19597e3d519d3ebcfbd9e18a7.zip
qmk_firmware package and started writing build modules
-rw-r--r--.gitignore2
-rw-r--r--flake.lock111
-rw-r--r--flake.nix42
-rw-r--r--keyboards/f62/default.nix23
-rw-r--r--keyboards/f77/default.nix23
-rw-r--r--keyboards/nk87/default.nix19
-rw-r--r--keyboards/nk_classic_tkl/default.nix19
-rw-r--r--keyboards/steezy60/default.nix21
-rw-r--r--keyboards/xd60/default.nix19
-rw-r--r--keyboards/xd84pro/default.nix19
-rw-r--r--keyboards/xd87/default.nix19
-rw-r--r--modules/default.nix40
-rw-r--r--overlays/default.nix15
-rw-r--r--pkgs/qmk_firmware.nix26
14 files changed, 382 insertions, 16 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..726d2d6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+result
+.direnv
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..dbb3997
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,111 @@
+{
+ "nodes": {
+ "flake-parts": {
+ "inputs": {
+ "nixpkgs-lib": "nixpkgs-lib"
+ },
+ "locked": {
+ "lastModified": 1759362264,
+ "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=",
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "rev": "758cf7296bee11f1706a574c77d072b8a7baa881",
+ "type": "github"
+ },
+ "original": {
+ "owner": "hercules-ci",
+ "repo": "flake-parts",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1760630522,
+ "narHash": "sha256-H7Rw2hQbJO4v60jhqiYo/oftvcW6lnsF16PHRELGVPM=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "8af9bf8c93e208784d682613820cb606a963debc",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs-lib": {
+ "locked": {
+ "lastModified": 1754788789,
+ "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=",
+ "owner": "nix-community",
+ "repo": "nixpkgs.lib",
+ "rev": "a73b9c743612e4244d865a2fdee11865283c04e6",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "nixpkgs.lib",
+ "type": "github"
+ }
+ },
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1754340878,
+ "narHash": "sha256-lgmUyVQL9tSnvvIvBp7x1euhkkCho7n3TMzgjdvgPoU=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "cab778239e705082fe97bb4990e0d24c50924c04",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "flake-parts": "flake-parts",
+ "nixpkgs": "nixpkgs",
+ "systems": "systems",
+ "treefmt-nix": "treefmt-nix"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ },
+ "treefmt-nix": {
+ "inputs": {
+ "nixpkgs": "nixpkgs_2"
+ },
+ "locked": {
+ "lastModified": 1760120816,
+ "narHash": "sha256-gq9rdocpmRZCwLS5vsHozwB6b5nrOBDNc2kkEaTXHfg=",
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "rev": "761ae7aff00907b607125b2f57338b74177697ed",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "treefmt-nix",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
index 739f1cf..a51f8f7 100644
--- a/flake.nix
+++ b/flake.nix
@@ -5,9 +5,49 @@
nixpkgs.url = "github:nixos/nixpkgs";
flake-parts.url = "github:hercules-ci/flake-parts";
systems.url = "github:nix-systems/default";
+ treefmt-nix.url = "github:numtide/treefmt-nix";
};
- outputs = inputs@{self, ... }: inputs.flake-parts.mkFlake { inherit inputs self; } {
+ outputs = inputs@{self, ... }: inputs.flake-parts.lib.mkFlake { inherit inputs self; } {
systems = import inputs.systems;
+
+ flake.overlays.default = import ./overlays;
+
+ imports = [
+ inputs.treefmt-nix.flakeModule
+ ];
+
+ perSystem = { pkgs, config, system, ... }: {
+
+ _module.args.pkgs = import inputs.nixpkgs {
+ inherit system;
+ overlays = [ self.overlays.default ];
+ };
+
+ packages = {
+ inherit (pkgs) qmk_firmware qmk_firmware-modelf;
+ };
+
+
+ treefmt = {
+ programs = {
+ clang-format.enable = true;
+ nixfmt = {
+ enable = true;
+ strict = true;
+ };
+ };
+ };
+
+ devShells.default = pkgs.mkShellNoCC {
+ inputsFrom = [ config.treefmt.build.devShell ];
+ nativeBuildInputs = with pkgs; [
+ nixd
+ statix
+ deadnix
+ ];
+ };
+
+ };
};
}
diff --git a/keyboards/f62/default.nix b/keyboards/f62/default.nix
new file mode 100644
index 0000000..b3586ea
--- /dev/null
+++ b/keyboards/f62/default.nix
@@ -0,0 +1,23 @@
+{ pkgs, ... }: let
+ base = {
+ firmware = {
+ type = "qmk";
+ qmk_firmware = pkgs.qmk_firwmare-modelf;
+ };
+ qmk.keyboard.name = "model_f_labs/f62";
+ };
+in {
+ kbs = {
+ "f62:default" = base;
+
+ "f62:me" = base // {
+ qmk.keymap = rec {
+ name = "me";
+ src = builtins.path {
+ inherit name;
+ path = ./.;
+ };
+ };
+ };
+ };
+}
diff --git a/keyboards/f77/default.nix b/keyboards/f77/default.nix
new file mode 100644
index 0000000..33f8a07
--- /dev/null
+++ b/keyboards/f77/default.nix
@@ -0,0 +1,23 @@
+{ pkgs, ... }: let
+ base = {
+ firmware = {
+ type = "qmk";
+ qmk_firmware = pkgs.qmk_firmware-modelf;
+ };
+ qmk.keyboard.name = "model_f_labs/f77";
+ };
+in {
+ kbds = {
+ "f77:default" = base;
+
+ "f77:me" = base // {
+ qmk.keymap = rec {
+ name = "me";
+ src = builtins.path {
+ inherit name;
+ path = ./.;
+ };
+ };
+ };
+ };
+}
diff --git a/keyboards/nk87/default.nix b/keyboards/nk87/default.nix
new file mode 100644
index 0000000..82e163d
--- /dev/null
+++ b/keyboards/nk87/default.nix
@@ -0,0 +1,19 @@
+{ pkgs, ... }: let
+ base = {
+ firmware.type = "qmk";
+ qmk.keyboard.name = "novelkeys/nk87";
+ };
+in {
+ kbds = {
+ "nk87:default" = base;
+ "nk87:me" = base // {
+ qmk.keymap = rec {
+ name = "me";
+ src = builtins.path {
+ inherit name;
+ path = ./.;
+ };
+ };
+ };
+ };
+}
diff --git a/keyboards/nk_classic_tkl/default.nix b/keyboards/nk_classic_tkl/default.nix
new file mode 100644
index 0000000..5da4e9b
--- /dev/null
+++ b/keyboards/nk_classic_tkl/default.nix
@@ -0,0 +1,19 @@
+{ pkgs, ... }: let
+ base = {
+ firmware.type = "qmk";
+ qmk.keyboard.name = "novelkeys/nk_classic_tkl";
+ };
+in {
+ kbds = {
+ "nk_classic:default" = base;
+ "nk_classic:me" = base // {
+ qmk.keymap = rec {
+ name = "me";
+ src = builtins.path {
+ inherit name;
+ path = ./.;
+ };
+ };
+ };
+ };
+}
diff --git a/keyboards/steezy60/default.nix b/keyboards/steezy60/default.nix
new file mode 100644
index 0000000..7226430
--- /dev/null
+++ b/keyboards/steezy60/default.nix
@@ -0,0 +1,21 @@
+{ pkgs, ... }: let
+ base = {
+ qmk.keyboard = {
+ name = "4pplet/steezy60";
+ revision = "rev_a";
+ };
+ };
+in {
+ kbds = {
+ "steezy:default" = base;
+ "steezy:me" = base // {
+ qmk.keymap = rec {
+ name = "me";
+ src = builtins.path {
+ inherit name;
+ path = ./.;
+ };
+ };
+ };
+ };
+};
diff --git a/keyboards/xd60/default.nix b/keyboards/xd60/default.nix
new file mode 100644
index 0000000..e8320ff
--- /dev/null
+++ b/keyboards/xd60/default.nix
@@ -0,0 +1,19 @@
+{...}: let
+ base = {
+ firmware.type = "qmk";
+ qmk.keyboard.name = "kprepublic/xd60";
+ };
+in {
+ kbds = {
+ "xd60:default" = base;
+ "xd60:me" = base // {
+ qmk.keymap = rec {
+ name = "me";
+ src = builtins.path {
+ inherit name;
+ path = ./.;
+ };
+ };
+ };
+ };
+}
diff --git a/keyboards/xd84pro/default.nix b/keyboards/xd84pro/default.nix
new file mode 100644
index 0000000..cfd4408
--- /dev/null
+++ b/keyboards/xd84pro/default.nix
@@ -0,0 +1,19 @@
+{ pkgs, ... }: let
+ base = {
+ firmware.type = "qmk";
+ qmk.keyboard.name = "xiudi/xd84pro";
+ };
+in {
+ kbds = {
+ "xd87:default" = base;
+ "xd87:me" = base // {
+ qmk.keymap = rec {
+ name = "me";
+ src = builtins.path {
+ inherit name;
+ path = ./.;
+ };
+ };
+ };
+ };
+}
diff --git a/keyboards/xd87/default.nix b/keyboards/xd87/default.nix
new file mode 100644
index 0000000..cfd4408
--- /dev/null
+++ b/keyboards/xd87/default.nix
@@ -0,0 +1,19 @@
+{ pkgs, ... }: let
+ base = {
+ firmware.type = "qmk";
+ qmk.keyboard.name = "xiudi/xd84pro";
+ };
+in {
+ kbds = {
+ "xd87:default" = base;
+ "xd87:me" = base // {
+ qmk.keymap = rec {
+ name = "me";
+ src = builtins.path {
+ inherit name;
+ path = ./.;
+ };
+ };
+ };
+ };
+}
diff --git a/modules/default.nix b/modules/default.nix
index c5b8e4e..b6ac53a 100644
--- a/modules/default.nix
+++ b/modules/default.nix
@@ -19,7 +19,9 @@ in {
kbds = mkOption {
default = {};
- type = types.attrsOf <| types.submodule (args: {
+ type = types.attrsOf <| types.submodule (args: let
+ cfg = args.config;
+ in {
options = {
firmware = {
type = mkOption {
@@ -40,32 +42,40 @@ in {
name = mkOption {
type = types.str;
description = "path to keyboard";
+ example = "4pplet/steezy60";
};
revision = mkOption {
type = types.nullOr types.str;
description = "keyboard revision";
+ example = "rev_a"
};
- _path = mkOption {
+ _basePath = mkOption {
type = types.str;
- default = lib.concatStringsSep "/" ([ args.config.name ] ++ optional (args.config.revision != null) args.config.revision);
+ internal = true;
+ default = "keyboards/${cfg.qmk.keyboard.name}";
};
- _keymapsPath = mkOption {
+ _path = mkOption {
type = types.str;
- default = lib.concatStringsSep [ args.config.qmk.keyboard._path "keymaps" ];
+ internal = true
+ default = lib.concatStringsSep "/" ([cfg.qmk.keyboard.basePath] ++ optional (cfg.qmk.keyboard.revision != null) cfg.qmk.keyboard.revision);
};
+
};
keymap = {
name = mkOption {
type = types.str;
+ default = "default";
+ example = "default";
};
_path = mkOption {
type = types.str;
- default = "${args.config.qmk.keyboard._path}/keymaps/${args.config.qmk.keymap.name}";
+ default = "${cfg.qmk.keyboard._basePath}/keymaps/${cfg.qmk.keymap.name}";
+ internal = true;
};
src = mkOption {
@@ -78,13 +88,13 @@ in {
bin = mkOption {
type = types.path;
default = let
- ksrc = args.config.keymap.src;
+ ksrc = cfg.qmk.keymap.src;
in pkgs.stdenv.mkDerivation {
- name = "qmk:${args.config.qmk.keyboard._path}:${args.config.qmk.keymap.name}";
+ name = "qmk:${cfg.qmk.keyboard._path}:${cfg.qmk.keymap.name}";
srcs = [
{
name = "qmk_firmware";
- src = args.config.firmware.qmk_firmware;
+ src = cfg.qmk_firmware;
}
] ++ lib.optional (ksrc != null) {
name = "keymap";
@@ -93,18 +103,18 @@ in {
sourceRoot = "qmk_firmware";
- nativeBuildImports = [
- pkgs.qmk
- ];
+ # nativeBuildImports = [
+ # pkgs.qmk
+ # ];
postUnpack = lib.optionalString (ksrc != null) ''
- mkdir -pv "keyboards/${args.config.keymap._path}"
- cp -rv ../keymap/* "keyboards/${args.config.keymap._path}"
+ mkdir -pv "${cfg.qmk.keymap._path}"
+ cp -rv ../keymap/* "${cfg.qmk.keymap._path}"
'';
buildPhase = ''
SKIP_GIT=yes SKIP_VERSION=yes \
- make "keyboards/${args.config.keyboard._path}:${args.config.keymap.name}"
+ make "${cfg.qmk.keyboard._path}:${cfg.qmk.keymap.name}"
'';
installPhase = ''
diff --git a/overlays/default.nix b/overlays/default.nix
new file mode 100644
index 0000000..3a6d3bb
--- /dev/null
+++ b/overlays/default.nix
@@ -0,0 +1,15 @@
+final: prev: {
+ qmk_firmware = prev.callPackage ../pkgs/qmk_firmware.nix {};
+
+ qmk_firmware-modelf = final.qmk_firmware.overrideAttrs {
+ version = "model_f_labs";
+
+ src = prev.fetchFromGitHub {
+ owner = "matthew-wolf-n4mtt";
+ repo = "qmk_firmware";
+ fetchSubmodules = true;
+ rev = "93734d1";
+ hash = "sha256-E5zVcfELcFTqJspAyQmnD2qGRzFw4Y48Ce5c9FHl7Bk=";
+ };
+ };
+}
diff --git a/pkgs/qmk_firmware.nix b/pkgs/qmk_firmware.nix
new file mode 100644
index 0000000..49b0de6
--- /dev/null
+++ b/pkgs/qmk_firmware.nix
@@ -0,0 +1,26 @@
+{ stdenvNoCC, fetchFromGitHub, unstableGitUpdater, lib }:
+stdenvNoCC.mkDerivation {
+ pname = "qmk_firmware";
+ version = "unstable";
+
+ src = fetchFromGitHub {
+ owner = "qmk";
+ repo = "qmk_firmware";
+ fetchSubmodules = true;
+ rev = "608bcf0";
+ hash = "sha256-vYKrcaLIq194Q+OgcawwrwZonxySBAEQF4CTD7dYUtI=";
+ };
+
+ phases = [ "installPhase" ];
+
+ installPhase = ''
+ cp -r --no-preserve=mode $src $out
+ '';
+
+ passthru.updateScript = unstableGitUpdater {};
+
+ meta = with lib; {
+ homepage = "https://github.com/qmk/qmk_firmware";
+ license = licenses.gpl2;
+ };
+}