diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..9922df0 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: daily + commit-message: + prefix: "ci" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..e0e90f4 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,26 @@ +name: CI + +on: + pull_request: + push: + branches: + - main + workflow_dispatch: + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: DeterminateSystems/nix-installer-action@v11 + + - run: nix -vL --show-trace flake check + + - run: nix -vL --show-trace build + + - uses: actions/upload-artifact@v4 + with: + name: zmk_firmware + path: result diff --git a/.github/workflows/deps.yml b/.github/workflows/deps.yml new file mode 100644 index 0000000..b1ba83b --- /dev/null +++ b/.github/workflows/deps.yml @@ -0,0 +1,44 @@ +name: Dependencies + +on: + schedule: + - cron: '0 0 * * 0' + workflow_dispatch: + +permissions: + pull-requests: write + contents: write + +jobs: + update: + name: Update + runs-on: ubuntu-latest + permissions: + actions: write + contents: write + pull-requests: write + steps: + - uses: actions/checkout@v4 + + - uses: DeterminateSystems/nix-installer-action@v12 + + - run: nix -vL run --show-trace .#update + + - id: create-pr + uses: peter-evans/create-pull-request@v6 + with: + branch: update_zmk_config_deps + delete-branch: true + committer: 'github-actions[bot] ' + author: 'github-actions[bot] ' + commit-message: 'config,nix: update deps' + title: 'config,nix: update deps' + labels: 'dependencies' + body: | + Automated bump of ZMK dependencies + + - uses: benc-uk/workflow-dispatch@v1 + if: ${{ contains(fromJSON('["created", "updated"]'), steps.create-pr.outputs.pull-request-operation) }} + with: + workflow: ci.yml + ref: refs/heads/update_zmk_config_deps diff --git a/.github/workflows/flake.yml b/.github/workflows/flake.yml new file mode 100644 index 0000000..5aef002 --- /dev/null +++ b/.github/workflows/flake.yml @@ -0,0 +1,32 @@ +name: Flake + +on: + schedule: + - cron: '0 0 * * 0' + workflow_dispatch: + +jobs: + update: + name: Update + runs-on: ubuntu-latest + permissions: + actions: write + contents: write + pull-requests: write + steps: + - uses: actions/checkout@v4 + + - uses: DeterminateSystems/nix-installer-action@v11 + + - id: update-flake-lock + uses: DeterminateSystems/update-flake-lock@v21 + with: + commit-msg: 'flake: update inputs' + pr-title: 'flake: update inputs' + pr-labels: 'dependencies' + + - uses: benc-uk/workflow-dispatch@v1 + if: ${{ contains(fromJSON('["created", "updated"]'), steps.update-flake-lock.outputs.pull-request-operation) }} + with: + workflow: ci.yml + ref: refs/heads/update_flake_lock_action diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f0e31f2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/.west +/modules +/zephyr +/zmk +/build +/result diff --git a/config/west.yml b/config/west.yml index b886cbe..276f5d7 100644 --- a/config/west.yml +++ b/config/west.yml @@ -2,12 +2,33 @@ manifest: remotes: - name: zmkfirmware url-base: https://github.com/zmkfirmware - # Additional modules containing boards/shields/custom code can be listed here as well - # See https://docs.zephyrproject.org/3.2.0/develop/west/manifest.html#projects projects: + - name: zephyr + remote: zmkfirmware + revision: 87fa801c5b91f13599358c003bdcafaa54e3543c # v3.5.0+zmk-fixes + import: + name-blocklist: + - ci-tools + - hal_altera + - hal_cypress + - hal_infineon + - hal_microchip + - hal_nxp + - hal_openisa + - hal_silabs + - hal_xtensa + - hal_st + - hal_ti + - loramac-node + - mcuboot + - mcumgr + - net-tools + - openthread + - edtt + - trusted-firmware-m - name: zmk remote: zmkfirmware - revision: main + revision: 8c6bda260ace119b3c22a21bdcdd6d17a83fc5eb # main import: app/west.yml self: path: config diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..ba2ce87 --- /dev/null +++ b/flake.lock @@ -0,0 +1,48 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1720781449, + "narHash": "sha256-po3TZO9kcZwzvkyMJKb0WCzzDtiHWD34XeRaX1lWXp0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8b5a3d5a1d951344d683b442c0739010b80039db", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "zmk-nix": "zmk-nix" + } + }, + "zmk-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1720312285, + "narHash": "sha256-oa3UxPaqFSdPlcB4CxQK9L4NTDV/pcubItrIda5yadM=", + "owner": "lilyinstarlight", + "repo": "zmk-nix", + "rev": "b801185a6e260faffc6459d2009626262abc779f", + "type": "github" + }, + "original": { + "owner": "lilyinstarlight", + "repo": "zmk-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..3b1830f --- /dev/null +++ b/flake.nix @@ -0,0 +1,46 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + + zmk-nix = { + url = "github:lilyinstarlight/zmk-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { + self, + nixpkgs, + zmk-nix, + }: let + forAllSystems = nixpkgs.lib.genAttrs (nixpkgs.lib.attrNames zmk-nix.packages); + in { + packages = forAllSystems (system: rec { + default = firmware; + + firmware = zmk-nix.legacyPackages.${system}.buildSplitKeyboard { + name = "firmware"; + + src = nixpkgs.lib.sourceFilesBySuffices self [".conf" ".keymap" ".dtsi" ".yml"]; + + board = "nice_nano_v2"; + shield = "corne_%PART% nice_view_adapter nice_view"; + + zephyrDepsHash = "sha256-P3QtiGgVWRzpMg8fYfkdcKTnUqqjEhoQx36aVSJpT4M="; + + meta = { + description = "ZMK firmware"; + license = nixpkgs.lib.licenses.mit; + platforms = nixpkgs.lib.platforms.all; + }; + }; + + flash = zmk-nix.packages.${system}.flash.override {inherit firmware;}; + update = zmk-nix.packages.${system}.update; + }); + + devShells = forAllSystems (system: { + default = zmk-nix.devShells.${system}.default; + }); + }; +}