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.33.0";
18 pyproject = true;
19
20 src = fetchFromGitHub {
21 owner = "Lawstorant";
22 repo = "boxflat";
23 tag = "v${version}";
24 hash = "sha256-efEEp2FDXrMrNFalwqNiOhSgQq3uFHNJEA+o34yiS5E=";
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 postPatch = ''
49 substituteInPlace requirements.txt \
50 --replace-fail "psutil==6.1.0" "psutil" \
51 --replace-fail "evdev==1.7.1" "evdev"
52 '';
53
54 preBuild = ''
55 cat > setup.py << EOF
56 import shutil
57 from setuptools import setup
58
59 with open('requirements.txt') as f:
60 install_requires = f.read().splitlines()
61
62 shutil.copyfile('entrypoint.py', 'boxflat/entrypoint.py')
63
64 setup(
65 name='boxflat',
66 packages=['boxflat', 'boxflat.panels', 'boxflat.widgets'],
67 version='${version}',
68 install_requires=install_requires,
69 entry_points={
70 'console_scripts': ['boxflat=boxflat.entrypoint:main']
71 },
72 )
73 EOF
74 '';
75
76 preInstall = ''
77 mkdir -p $out/{usr/share/boxflat,lib/udev/rules.d,share/icons}
78 cp -r data "$out/usr/share/boxflat/"
79 cp -r icons "$out/share/icons/hicolor"
80 cp -r udev "$out/usr/share/boxflat"
81 cp udev/99-boxflat.rules "$out/lib/udev/rules.d/"
82 '';
83
84 dontWrapGApps = true;
85 preFixup = ''
86 makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
87 makeWrapperArgs+=(--add-flags "--data-path $out/usr/share/boxflat/data")
88 '';
89
90 desktopItems = [
91 (makeDesktopItem rec {
92 name = "Boxflat";
93 desktopName = name;
94 genericName = "settings";
95 comment = "Moza Racing settings app";
96 exec = "boxflat";
97 icon = "io.github.lawstorant.boxflat";
98 startupWMClass = icon;
99 startupNotify = true;
100 categories = [
101 "Game"
102 "Utility"
103 ];
104 keywords = [
105 "game"
106 "racing"
107 "cars"
108 "wheels"
109 "moza"
110 ];
111 })
112 ];
113
114 passthru.updateScript = nix-update-script { };
115
116 meta = {
117 homepage = "https://github.com/Lawstorant/boxflat";
118 changelog = "https://github.com/Lawstorant/boxflat/releases/tag/v${version}";
119 description = "Control your Moza gear settings";
120 license = lib.licenses.gpl3Only;
121 maintainers = with lib.maintainers; [ racci ];
122 platforms = lib.platforms.linux;
123 mainProgram = "boxflat";
124 };
125}