nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 fetchFromGitHub,
4 gtk4,
5 libadwaita,
6 python3Packages,
7 gobject-introspection,
8 wrapGAppsHook4,
9 copyDesktopItems,
10 makeDesktopItem,
11 nix-update-script,
12 udevCheckHook,
13}:
14
15python3Packages.buildPythonPackage rec {
16 pname = "boxflat";
17 version = "1.35.5";
18 pyproject = true;
19
20 src = fetchFromGitHub {
21 owner = "Lawstorant";
22 repo = "boxflat";
23 tag = "v${version}";
24 hash = "sha256-R03mQIsa6T1ApV8SMWvilBfiCGcAWvyZ5hDDgAuGd6s=";
25 };
26
27 build-system = [ python3Packages.setuptools ];
28
29 propagatedBuildInputs = [
30 gtk4
31 libadwaita
32
33 python3Packages.pyyaml
34 python3Packages.psutil
35 python3Packages.pyserial
36 python3Packages.pycairo
37 python3Packages.pygobject3
38 python3Packages.evdev
39 ];
40
41 nativeBuildInputs = [
42 copyDesktopItems
43 wrapGAppsHook4
44 gobject-introspection
45 udevCheckHook
46 ];
47
48 pythonRelaxDeps = [
49 "psutil"
50 "evdev"
51 "pycairo"
52 "pygobject"
53 "PyYAML"
54 ];
55
56 preBuild = ''
57 cat > setup.py << EOF
58 import shutil
59 from setuptools import setup
60
61 with open('requirements.txt') as f:
62 install_requires = f.read().splitlines()
63
64 shutil.copyfile('entrypoint.py', 'boxflat/entrypoint.py')
65
66 setup(
67 name='boxflat',
68 packages=['boxflat', 'boxflat.panels', 'boxflat.widgets'],
69 version='${version}',
70 install_requires=install_requires,
71 entry_points={
72 'console_scripts': ['boxflat=boxflat.entrypoint:main']
73 },
74 )
75 EOF
76 '';
77
78 preInstall = ''
79 mkdir -p $out/{usr/share/boxflat,lib/udev/rules.d,share/icons}
80 cp -r data "$out/usr/share/boxflat/"
81 cp -r icons "$out/share/icons/hicolor"
82 cp -r udev "$out/usr/share/boxflat"
83 cp udev/99-boxflat.rules "$out/lib/udev/rules.d/"
84 '';
85
86 dontWrapGApps = true;
87 preFixup = ''
88 makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
89 makeWrapperArgs+=(--add-flags "--data-path $out/usr/share/boxflat/data")
90 '';
91
92 desktopItems = [
93 (makeDesktopItem rec {
94 name = "Boxflat";
95 desktopName = name;
96 genericName = "settings";
97 comment = "Moza Racing settings app";
98 exec = "boxflat";
99 icon = "io.github.lawstorant.boxflat";
100 startupWMClass = icon;
101 startupNotify = true;
102 categories = [
103 "Game"
104 "Utility"
105 ];
106 keywords = [
107 "game"
108 "racing"
109 "cars"
110 "wheels"
111 "moza"
112 ];
113 })
114 ];
115
116 passthru.updateScript = nix-update-script { };
117
118 meta = {
119 homepage = "https://github.com/Lawstorant/boxflat";
120 changelog = "https://github.com/Lawstorant/boxflat/releases/tag/v${version}";
121 description = "Control your Moza gear settings";
122 license = lib.licenses.gpl3Only;
123 maintainers = with lib.maintainers; [ racci ];
124 platforms = lib.platforms.linux;
125 mainProgram = "boxflat";
126 };
127}