nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 125 lines 2.9 kB view raw
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}