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}