this repo has no description
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

init

+435 -199
+5
.envrc
··· 1 + # shellcheck shell=bash 2 + if ! has nix_direnv_version || ! nix_direnv_version 3.0.6; then 3 + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.6/direnvrc" "sha256-RYcUJaRMf8oF5LznDrlCXbkOQrywm0HDv1VjYGaJGdM=" 4 + fi 5 + use flake
+8
.github/dependabot.yml
··· 1 + version: 2 2 + updates: 3 + - package-ecosystem: github-actions 4 + directory: "/" 5 + schedule: 6 + interval: daily 7 + commit-message: 8 + prefix: "ci"
+26
.github/workflows/build.yaml
··· 1 + name: build 2 + 3 + on: 4 + pull_request: 5 + push: 6 + branches: 7 + - main 8 + workflow_dispatch: 9 + 10 + jobs: 11 + build: 12 + name: Build 13 + runs-on: ubuntu-latest 14 + steps: 15 + - uses: actions/checkout@v4 16 + 17 + - uses: DeterminateSystems/nix-installer-action@v14 18 + 19 + - run: nix -vL --show-trace flake check 20 + 21 + - run: nix -vL --show-trace build 22 + 23 + - uses: actions/upload-artifact@v4 24 + with: 25 + name: zmk_firmware 26 + path: result
+26
.github/workflows/ci.yml
··· 1 + name: CI 2 + 3 + on: 4 + pull_request: 5 + push: 6 + branches: 7 + - main 8 + workflow_dispatch: 9 + 10 + jobs: 11 + build: 12 + name: Build 13 + runs-on: ubuntu-latest 14 + steps: 15 + - uses: actions/checkout@v4 16 + 17 + - uses: DeterminateSystems/nix-installer-action@v11 18 + 19 + - run: nix -vL --show-trace flake check 20 + 21 + - run: nix -vL --show-trace build 22 + 23 + - uses: actions/upload-artifact@v4 24 + with: 25 + name: zmk_firmware 26 + path: result
+44
.github/workflows/deps.yml
··· 1 + name: Dependencies 2 + 3 + on: 4 + schedule: 5 + - cron: '0 0 * * 0' 6 + workflow_dispatch: 7 + 8 + permissions: 9 + pull-requests: write 10 + contents: write 11 + 12 + jobs: 13 + update: 14 + name: Update 15 + runs-on: ubuntu-latest 16 + permissions: 17 + actions: write 18 + contents: write 19 + pull-requests: write 20 + steps: 21 + - uses: actions/checkout@v4 22 + 23 + - uses: DeterminateSystems/nix-installer-action@v12 24 + 25 + - run: nix -vL run --show-trace .#update 26 + 27 + - id: create-pr 28 + uses: peter-evans/create-pull-request@v6 29 + with: 30 + branch: update_zmk_config_deps 31 + delete-branch: true 32 + committer: 'github-actions[bot] <github-actions[bot]@users.noreply.github.com>' 33 + author: 'github-actions[bot] <github-actions[bot]@users.noreply.github.com>' 34 + commit-message: 'config,nix: update deps' 35 + title: 'config,nix: update deps' 36 + labels: 'dependencies' 37 + body: | 38 + Automated bump of ZMK dependencies 39 + 40 + - uses: benc-uk/workflow-dispatch@v1 41 + if: ${{ contains(fromJSON('["created", "updated"]'), steps.create-pr.outputs.pull-request-operation) }} 42 + with: 43 + workflow: ci.yml 44 + ref: refs/heads/update_zmk_config_deps
+32
.github/workflows/flake.yml
··· 1 + name: Flake 2 + 3 + on: 4 + schedule: 5 + - cron: '0 0 * * 0' 6 + workflow_dispatch: 7 + 8 + jobs: 9 + update: 10 + name: Update 11 + runs-on: ubuntu-latest 12 + permissions: 13 + actions: write 14 + contents: write 15 + pull-requests: write 16 + steps: 17 + - uses: actions/checkout@v4 18 + 19 + - uses: DeterminateSystems/nix-installer-action@v11 20 + 21 + - id: update-flake-lock 22 + uses: DeterminateSystems/update-flake-lock@v21 23 + with: 24 + commit-msg: 'flake: update inputs' 25 + pr-title: 'flake: update inputs' 26 + pr-labels: 'dependencies' 27 + 28 + - uses: benc-uk/workflow-dispatch@v1 29 + if: ${{ contains(fromJSON('["created", "updated"]'), steps.update-flake-lock.outputs.pull-request-operation) }} 30 + with: 31 + workflow: ci.yml 32 + ref: refs/heads/update_flake_lock_action
-3
config/cradio.conf
··· 1 - CONFIG_ZMK_SLEEP=y 2 - CONFIG_ZMK_IDLE_TIMEOUT=30000 3 - CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=900000
-196
config/cradio.keymap
··· 1 - /* 2 - * Copyright (c) 2020 The ZMK Contributors 3 - * 4 - * SPDX-License-Identifier: MIT 5 - */ 6 - 7 - #include <behaviors.dtsi> 8 - #include <dt-bindings/zmk/keys.h> 9 - #include <dt-bindings/zmk/bt.h> 10 - #include <dt-bindings/zmk/keys.h> 11 - #include <dt-bindings/zmk/outputs.h> 12 - #include <behaviors.dtsi> 13 - 14 - #define COLEMAK 0 15 - #define NAV 1 16 - #define NUM 2 17 - #define SYM 3 18 - #define FUN 4 19 - 20 - /* krita base */ 21 - #define KRB 5 22 - 23 - /* play */ 24 - #define PLAY 6 25 - 26 - 27 - &mt { 28 - flavor = "tap-preferred"; 29 - tapping_term_ms = <200>; 30 - quick_tap_ms = <75>; 31 - }; 32 - 33 - 34 - / { 35 - 36 - combos { 37 - compatible = "zmk,combos"; 38 - combo_caps_word { 39 - timeout-ms = <100>; 40 - key-positions = <20 29>; 41 - bindings = <&caps_word>; 42 - }; 43 - combo_esc { 44 - timeout-ms = <150>; 45 - key-positions = <12 13 16 17>; 46 - bindings = <&kp ESC>; 47 - }; 48 - 49 - // ( 50 - combo_lpar { 51 - timeout-ms = <150>; 52 - key-positions = <4 14>; 53 - bindings = <&kp LPAR>; 54 - }; 55 - 56 - // ) 57 - combo_rpar { 58 - timeout-ms = <150>; 59 - key-positions = <5 15>; 60 - bindings = <&kp RPAR>; 61 - }; 62 - 63 - // { 64 - combo_lcurly { 65 - timeout-ms = <150>; 66 - key-positions = <3 13>; 67 - bindings = <&kp LBRC>; 68 - }; 69 - // } 70 - combo_rcurly { 71 - timeout-ms = <150>; 72 - key-positions = <6 16>; 73 - bindings = <&kp RBRC>; 74 - }; 75 - 76 - // [ 77 - combo_lsquare { 78 - timeout-ms = <150>; 79 - key-positions = <13 23>; 80 - bindings = <&kp LBKT>; 81 - }; 82 - 83 - // ] 84 - combo_rsquare { 85 - timeout-ms = <150>; 86 - key-positions = <16 26>; 87 - bindings = <&kp RBKT>; 88 - }; 89 - 90 - // < 91 - combo_less_than { 92 - timeout-ms = <150>; 93 - key-positions = <14 24>; 94 - bindings = <&kp LT>; 95 - }; 96 - 97 - // > 98 - combo_greater_than { 99 - timeout-ms = <150>; 100 - key-positions = <15 25>; 101 - bindings = <&kp GT>; 102 - }; 103 - 104 - combo_minus { 105 - timeout-ms = <150>; 106 - key-positions = <2 3 6 7>; 107 - bindings = <&kp MINUS>; 108 - }; 109 - combo_under { 110 - timeout-ms = <150>; 111 - key-positions = <22 23 26 27>; 112 - bindings = <&kp UNDER>; 113 - }; 114 - combo_ble { 115 - timeout-ms = <20>; 116 - key-positions = <0 1>; 117 - bindings = <&out OUT_BLE>; 118 - }; 119 - combo_krita { 120 - timeout-ms = <100>; 121 - key-positions = <0 10 20>; 122 - bindings = <&tog KRB>; 123 - }; 124 - combo_draw { 125 - timeout-ms = <100>; 126 - key-positions = <9 19 29>; 127 - bindings = <&tog PLAY>; 128 - }; 129 - }; 130 - 131 - keymap { 132 - compatible = "zmk,keymap"; 133 - default_layer { 134 - bindings = < 135 - &kp Q &kp W &kp F &kp P &kp G &kp J &kp L &kp U &kp Y &kp SCLN 136 - &kp A &kp R &lt FUN S &lt NAV T &kp D &kp H &lt SYM N &lt NUM E &kp I &kp O 137 - &kp Z &kp X &kp C &kp V &kp B &kp K &kp M &kp CMMA &kp DOT &kp FSLH 138 - &mt LALT TAB &mt LGUI SPC &mt LSHIFT RET &mt LCTRL BSPC 139 - >; 140 - }; 141 - 142 - nav_layer { 143 - bindings = < 144 - &bt BT_CLR &trans &trans &bootloader &sys_reset &trans &kp LBRC &kp RBRC &kp LPAR &kp RPAR 145 - &bt BT_SEL 0 &trans &trans &trans &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans 146 - &bt BT_SEL 1 &trans &trans &trans &trans &trans &kp LBKT &kp RBKT &trans &trans 147 - &trans &trans &trans &kp BSPC 148 - >; 149 - }; 150 - 151 - num_layer { 152 - bindings = < 153 - &trans &kp F7 &kp F8 &kp F9 &trans &trans &trans &trans &trans &trans 154 - &kp SQT &kp F4 &kp F5 &kp F6 &kp EQUAL &trans &trans &trans &trans &trans 155 - &kp GRAVE &kp F1 &kp F2 &kp F3 &kp BSLH &trans &trans &trans &trans &trans 156 - &trans &trans &trans &trans 157 - >; 158 - }; 159 - 160 - sym_layer { 161 - bindings = < 162 - &kp LS(Q) &kp LS(Z) &kp STAR &kp AMPS &trans &sys_reset &bootloader &trans &trans &trans 163 - &kp DQT &kp CARET &kp PRCNT &kp DLLR &kp KP_PLUS &trans &trans &trans &trans &trans 164 - &kp TILDE &kp HASH &kp AT &kp EXCL &kp PIPE &trans &trans &trans &trans &trans 165 - &kp LPAR &kp RPAR &trans &trans 166 - >; 167 - }; 168 - 169 - fun_layer { 170 - bindings = < 171 - &trans &trans &trans &trans &trans &trans &kp N7 &kp N8 &kp N9 &trans 172 - &trans &trans &trans &trans &trans &kp BSPC &kp N4 &kp N5 &kp N6 &trans 173 - &trans &trans &trans &trans &trans &trans &kp N1 &kp N2 &kp N3 &trans 174 - &trans &trans &trans &kp N0 175 - >; 176 - }; 177 - 178 - krita_base_layer { 179 - bindings = < 180 - &kp M &trans &kp BSLH &kp LBKT &kp RBKT &trans &trans &trans &trans &trans 181 - &trans &trans &kp F &kp I &kp O &trans &trans &trans &trans &trans 182 - &kp LC(S) &trans &kp P &kp K &kp L &trans &trans &trans &trans &trans 183 - &kp LS(LC(Z)) &kp LC(Z) &trans &trans 184 - >; 185 - }; 186 - 187 - draw { 188 - bindings = < 189 - &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P 190 - &kp N1 &kp S &kp N3 &mt LCTRL F &kp G &kp H &mt LCTRL J &mt RSHIFT K &mt LALT L &mt LGUI SCLN 191 - &kp Z &kp X &kp C &kp V &kp B &kp M &kp LEFT &kp DOWN &kp RIGHT &trans 192 - &kp R &kp U &kp RET &kp BSPC 193 - >; 194 - }; 195 - }; 196 - };
+23
config/urchin.conf
··· 1 + # increase bluetooth signal power 2 + CONFIG_BT_CTLR_TX_PWR_PLUS_8=y 3 + 4 + # enable deep sleep support 5 + CONFIG_ZMK_SLEEP=y 6 + 7 + # the keyboard disconnects from bluetooth. 8 + # uses very little power, but it may take 9 + # a few seconds to reconnect after waking. 10 + # 1.800.000 ms = 30 minutes 11 + CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=1800000 12 + 13 + # "Eager Debouncing" 14 + # Trying to lower the input lag. 15 + # CONFIG_ZMK_KSCAN_DEBOUNCE_PRESS_MS=1 16 + # CONFIG_ZMK_KSCAN_DEBOUNCE_RELEASE_MS=5 17 + 18 + # --- DISPLAY SETTINGS --- 19 + 20 + # disable the WPM widget 21 + CONFIG_ZMK_WIDGET_WPM_STATUS=n 22 + # display battery as n% 23 + CONFIG_ZMK_WIDGET_BATTERY_STATUS_SHOW_PERCENTAGE=y
+164
config/urchin.keymap
··· 1 + /* 2 + * Copyright (c) 2020 duckyb 3 + * 4 + * SPDX-License-Identifier: MIT 5 + */ 6 + 7 + #include <behaviors.dtsi> 8 + #include <dt-bindings/zmk/keys.h> 9 + #include <dt-bindings/zmk/bt.h> 10 + #include <dt-bindings/zmk/outputs.h> 11 + 12 + // Layer definitions 13 + #define BASE 0 14 + #define SYM 1 15 + #define EXT 2 16 + #define FNC 3 17 + #define SYM2 4 18 + #define ACCENT 5 19 + #define SETTINGS 6 20 + // ----------------- 21 + 22 + &sk { 23 + // don't release mods on other mods presses 24 + ignore-modifiers; 25 + }; 26 + 27 + 28 + / { 29 + behaviors { 30 + // Enables holding the first mod-tap key 31 + // by performing a tap-release-hold sequence. 32 + // To use it: "&qt KEYCODE1 KEYCODE2" 33 + qt: quick_tap { 34 + compatible = "zmk,behavior-hold-tap"; 35 + label = "QUICK_TAP"; 36 + #binding-cells = <2>; 37 + flavor = "hold-preferred"; 38 + tapping-term-ms = <200>; 39 + quick-tap-ms = <200>; 40 + bindings = <&kp>, <&kp>; 41 + }; 42 + }; 43 + 44 + macros { 45 + // sometimes my device thinks a modifier is being held down 46 + // pressing all modifiers fixes it. 47 + unstick: unstick { 48 + label = "ZM_unstick"; 49 + compatible = "zmk,behavior-macro"; 50 + #binding-cells = <0>; 51 + bindings = <&kp LSHIFT &kp RSHIFT &kp LCTRL &kp RCTRL &kp LALT &kp RALT &kp LGUI &kp RGUI>; 52 + }; 53 + }; 54 + 55 + combos { 56 + compatible = "zmk,combos"; 57 + // Escape key 58 + combo_esc { 59 + timeout-ms = <150>; 60 + key-positions = <12 13 16 17>; 61 + bindings = <&kp ESC>; 62 + }; 63 + 64 + // IMPORTED FROM ZMK // 65 + // both right thumb keys 66 + combo_accent { 67 + timeout-ms = <200>; 68 + key-positions = <32 33>; 69 + bindings = <&mo ACCENT>; 70 + }; 71 + // internal-left & external-right thumb keys 72 + combo_sym2 { 73 + timeout-ms = <200>; 74 + key-positions = <31 33>; 75 + bindings = <&mo SYM2>; 76 + }; 77 + // both left thumb keys 78 + combo_settings { 79 + timeout-ms = <200>; 80 + key-positions = <30 31>; 81 + bindings = <&mo SETTINGS>; 82 + }; 83 + // left index & middle fingers (home-row) 84 + // hold control & space for Adobe workflow 85 + combo_ctrl_space { 86 + timeout-ms = <200>; 87 + key-positions = <12 13>; 88 + bindings = <&kp LC(SPACE)>; 89 + layers = <BASE>; 90 + }; 91 + }; 92 + 93 + keymap { 94 + compatible = "zmk,keymap"; 95 + default_layer { 96 + bindings = < 97 + &kp SQT &kp CMMA &kp DOT &kp P &kp Y &kp F &kp G &kp C &kp R &kp L &kp A &kp O &lt FUN E &lt NAV U &kp I &kp D &lt SYM H &lt NUM T &kp N &kp S 98 + &kp SCLN &kp Q &kp J &kp K &kp X &kp B &kp M &kp W &kp V &kp Z &mt LALT TAB &mt LGUI SPC &mt LSHIFT RET &mt LCTRL BSPC 99 + >; 100 + }; 101 + 102 + nav_layer { 103 + bindings = < 104 + &bt BT_CLR &trans &trans &bootloader &sys_reset &trans &kp LBRC &kp RBRC &kp LPAR &kp RPAR 105 + &bt BT_SEL 0 &trans &trans &trans &trans &kp LEFT &kp DOWN &kp UP &kp RIGHT &trans 106 + &bt BT_SEL 1 &trans &trans &trans &trans &trans &kp LBKT &kp RBKT &IT_LESS &IT_GREAT 107 + &trans &trans &trans &kp BSPC 108 + >; 109 + }; 110 + 111 + num_layer { 112 + bindings = < 113 + &trans &kp F7 &kp F8 &kp F9 &trans &trans &trans &trans &trans &trans 114 + &kp DQT &kp F4 &kp F5 &kp F6 &kp EQUAL &trans &trans &trans &trans &trans 115 + &kp GRAVE &kp F1 &kp F2 &kp F3 &kp BSLH &trans &trans &trans &trans &trans 116 + &trans &trans &trans &trans 117 + >; 118 + }; 119 + 120 + sym_layer { 121 + label = "Sym."; 122 + bindings = < 123 + &kp LS(Q) &kp LS(Z) &kp STAR &kp AMPS &trans &sys_reset &bootloader &trans &trans &trans 124 + &kp DQT &kp CARET &kp PRCNT &kp DLLR &kp KP_PLUS &trans &trans &trans &trans &trans 125 + &kp TILDE &kp HASH &kp AT &kp EXCL &kp PIPE &trans &trans &trans &trans &trans 126 + &kp LPAR &kp RPAR &trans &trans 127 + >; 128 + }; 129 + 130 + 131 + // Numbers and high frequency symbols 132 + sym_layer { 133 + label = "Sym."; 134 + bindings = < 135 + &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 136 + &kp IT_LESS &kp IT_USD &kp IT_LPAR &kp IT_LBRC &kp IT_LBKT &kp IT_EQL &kp IT_QUES &kp IT_SQUOT &kp IT_MINUS &kp IT_AST 137 + &kp IT_GREAT &kp IT_PERC &kp IT_RPAR &kp IT_RBRC &kp IT_RBKT &kp IT_AT &kp IT_EXCL &kp IT_DQUOT &kp IT_PLUS &kp IT_FSLH 138 + &mo FNC &mo SYM2 &trans &trans 139 + >; 140 + }; 141 + 142 + // Main modifiers and arrow keys 143 + ext_layer { 144 + label = "Mods"; 145 + bindings = < 146 + &kp ESC &kp C_PREV &kp C_PP &kp C_NEXT &kp C_PAUSE &kp PG_UP &kp HOME &kp UP &kp END &kp CAPS 147 + &sk LALT &sk LGUI &sk LSHIFT &sk LCTRL &kp RALT &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL 148 + &kp LC(Z) &kp LC(X) &kp LC(C) &kp TAB &kp LC(V) &kp LC(BSPC) &kp BSPC &trans &trans &trans 149 + &trans &kp LCTRL &kp ENTER &mo FNC 150 + >; 151 + }; 152 + 153 + // Low frequency symbols. 154 + symbols_2_layer { 155 + label = "Sym.2"; 156 + bindings = < 157 + &kp IT_CARET &kp IT_UNDER &kp IT_PND &kp IT_EUR &kp IT_HASH &none &none &none &none &none 158 + &kp IT_BKTK &kp IT_TILDE &kp IT_BSLH &kp IT_PIPE &kp IT_AND &none &none &none &none &none 159 + &none &none &kp IT_SECT &kp IT_CCED &kp IT_DEG &none &none &none &none &none 160 + &none &none &none &none 161 + >; 162 + }; 163 + }; 164 + };
+7
config/west.yml
··· 1 1 manifest: 2 2 remotes: 3 + # zmk official 3 4 - name: zmkfirmware 4 5 url-base: https://github.com/zmkfirmware 6 + # kyek / duckyb 7 + - name: duckyb 8 + url-base: https://github.com/duckyb 5 9 projects: 6 10 - name: zmk 7 11 remote: zmkfirmware 8 12 revision: main 9 13 import: app/west.yml 14 + - name: urchin-zmk-module 15 + remote: duckyb 16 + revision: 10 17 self: 11 18 path: config
+48
flake.lock
··· 1 + { 2 + "nodes": { 3 + "nixpkgs": { 4 + "locked": { 5 + "lastModified": 1726871744, 6 + "narHash": "sha256-V5LpfdHyQkUF7RfOaDPrZDP+oqz88lTJrMT1+stXNwo=", 7 + "owner": "NixOS", 8 + "repo": "nixpkgs", 9 + "rev": "a1d92660c6b3b7c26fb883500a80ea9d33321be2", 10 + "type": "github" 11 + }, 12 + "original": { 13 + "owner": "NixOS", 14 + "ref": "nixpkgs-unstable", 15 + "repo": "nixpkgs", 16 + "type": "github" 17 + } 18 + }, 19 + "root": { 20 + "inputs": { 21 + "nixpkgs": "nixpkgs", 22 + "zmk-nix": "zmk-nix" 23 + } 24 + }, 25 + "zmk-nix": { 26 + "inputs": { 27 + "nixpkgs": [ 28 + "nixpkgs" 29 + ] 30 + }, 31 + "locked": { 32 + "lastModified": 1726965294, 33 + "narHash": "sha256-GVXPzSVtcdEqeRIYhW8vLoDP2l97ElGcjP8eEpd6BWo=", 34 + "owner": "lilyinstarlight", 35 + "repo": "zmk-nix", 36 + "rev": "58b3bb81f0823a071d9688c552b5ed7d1d5ecfaa", 37 + "type": "github" 38 + }, 39 + "original": { 40 + "owner": "lilyinstarlight", 41 + "repo": "zmk-nix", 42 + "type": "github" 43 + } 44 + } 45 + }, 46 + "root": "root", 47 + "version": 7 48 + }
+52
flake.nix
··· 1 + { 2 + inputs = { 3 + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; 4 + 5 + zmk-nix = { 6 + url = "github:lilyinstarlight/zmk-nix"; 7 + inputs.nixpkgs.follows = "nixpkgs"; 8 + }; 9 + }; 10 + 11 + outputs = { self, nixpkgs, zmk-nix }: 12 + let 13 + forAllSystems = 14 + nixpkgs.lib.genAttrs (nixpkgs.lib.attrNames zmk-nix.packages); 15 + in { 16 + packages = forAllSystems (system: rec { 17 + default = firmware; 18 + 19 + firmware = zmk-nix.legacyPackages.${system}.buildSplitKeyboard { 20 + name = "firmware"; 21 + 22 + src = nixpkgs.lib.sourceFilesBySuffices self [ 23 + ".conf" 24 + ".keymap" 25 + ".dtsi" 26 + ".yml" 27 + ".shield" 28 + ".overlay" 29 + ".defconfig" 30 + ]; 31 + 32 + board = "nice_nano_v2"; 33 + shield = "urchin_%PART%"; 34 + 35 + zephyrDepsHash = 36 + "sha256-TBGBB8VowUxdvlBGY4jprgKg6fjmb712ennqr88TyZE="; 37 + 38 + meta = { 39 + description = "ZMK firmware"; 40 + license = nixpkgs.lib.licenses.mit; 41 + platforms = nixpkgs.lib.platforms.all; 42 + }; 43 + }; 44 + 45 + flash = zmk-nix.packages.${system}.flash.override { inherit firmware; }; 46 + update = zmk-nix.packages.${system}.update; 47 + }); 48 + 49 + devShells = forAllSystems 50 + (system: { default = zmk-nix.devShells.${system}.default; }); 51 + }; 52 + }