1{ 2 lib, 3 4 buildPythonPackage, 5 fetchFromGitHub, 6 fetchPypi, 7 pythonOlder, 8 9 nix-update-script, 10 pcpp, 11 platformdirs, 12 poetry-core, 13 pydantic, 14 pydantic-settings, 15 pyparsing, 16 pyyaml, 17 tree-sitter, 18 tree-sitter-grammars, 19 versionCheckHook, 20}: 21let 22 version = "0.22.1"; 23in 24buildPythonPackage { 25 inherit version; 26 pname = "keymap-drawer"; 27 pyproject = true; 28 disabled = pythonOlder "3.12"; 29 30 src = fetchFromGitHub { 31 owner = "caksoylar"; 32 repo = "keymap-drawer"; 33 tag = "v${version}"; 34 hash = "sha256-X3O5yspEdey03YQ6JsYN/DE9NUiq148u1W6LQpUQ3ns="; 35 }; 36 37 build-system = [ poetry-core ]; 38 39 pythonRelaxDeps = [ 40 "tree-sitter-devicetree" 41 ]; 42 43 dependencies = [ 44 pcpp 45 platformdirs 46 pydantic 47 pydantic-settings 48 pyparsing 49 pyyaml 50 # keymap-drawer currently requires tree-sitter 0.24.0 51 # See https://github.com/caksoylar/keymap-drawer/issues/183 52 (tree-sitter.overrideAttrs rec { 53 version = "0.24.0"; 54 src = fetchPypi { 55 inherit version; 56 inherit (tree-sitter) pname; 57 hash = "sha256-q9la9lyi9Pfso1Y0M5HtZp52Tzd0i1NSlG8A9/x45zQ="; 58 }; 59 }) 60 tree-sitter-grammars.tree-sitter-devicetree 61 ]; 62 63 nativeCheckInputs = [ 64 versionCheckHook 65 ]; 66 67 pythonImportsCheck = [ "keymap_drawer" ]; 68 69 versionCheckProgram = "${placeholder "out"}/bin/keymap"; 70 versionCheckProgramArg = "--version"; 71 72 passthru.updateScript = nix-update-script { }; 73 74 meta = { 75 description = "Module and CLI tool to help parse and draw keyboard layouts"; 76 homepage = "https://github.com/caksoylar/keymap-drawer"; 77 changelog = "https://github.com/caksoylar/keymap-drawer/releases/tag/v${version}"; 78 license = lib.licenses.mit; 79 maintainers = with lib.maintainers; [ 80 MattSturgeon 81 ]; 82 mainProgram = "keymap"; 83 }; 84}