depot/third_party/nixpkgs/pkgs/by-name/bo/boxflat/package.nix

123 lines
2.8 KiB
Nix

{
lib,
fetchFromGitHub,
gtk4,
libadwaita,
python3Packages,
gobject-introspection,
wrapGAppsHook4,
copyDesktopItems,
makeDesktopItem,
nix-update-script,
}:
python3Packages.buildPythonPackage rec {
pname = "boxflat";
version = "1.28.4";
pyproject = true;
src = fetchFromGitHub {
owner = "Lawstorant";
repo = "boxflat";
tag = "v${version}";
hash = "sha256-szKGrP+z0HsCV/FhhKPlOMcb6LkQhOA1pZfwR86xa3Y=";
};
build-system = [ python3Packages.setuptools ];
propagatedBuildInputs = [
gtk4
libadwaita
python3Packages.pyyaml
python3Packages.psutil
python3Packages.pyserial
python3Packages.pycairo
python3Packages.pygobject3
python3Packages.evdev
];
nativeBuildInputs = [
copyDesktopItems
wrapGAppsHook4
gobject-introspection
];
postPatch = ''
substituteInPlace requirements.txt \
--replace-fail "psutil==6.1.0" "psutil" \
--replace-fail "evdev==1.7.1" "evdev"
'';
preBuild = ''
cat > setup.py << EOF
import shutil
from setuptools import setup
with open('requirements.txt') as f:
install_requires = f.read().splitlines()
shutil.copyfile('entrypoint.py', 'boxflat/entrypoint.py')
setup(
name='boxflat',
packages=['boxflat', 'boxflat.panels', 'boxflat.widgets'],
version='${version}',
install_requires=install_requires,
entry_points={
'console_scripts': ['boxflat=boxflat.entrypoint:main']
},
)
EOF
'';
preInstall = ''
mkdir -p $out/{usr/share/boxflat,lib/udev/rules.d,share/icons}
cp -r data "$out/usr/share/boxflat/"
cp -r icons "$out/share/icons/hicolor"
cp -r udev "$out/usr/share/boxflat"
cp udev/99-boxflat.rules "$out/lib/udev/rules.d/"
'';
dontWrapGApps = true;
preFixup = ''
makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
makeWrapperArgs+=(--add-flags "--data-path $out/usr/share/boxflat/data")
'';
desktopItems = [
(makeDesktopItem rec {
name = "Boxflat";
desktopName = name;
genericName = "settings";
comment = "Moza Racing settings app";
exec = "boxflat";
icon = "io.github.lawstorant.boxflat";
startupWMClass = icon;
startupNotify = true;
categories = [
"Game"
"Utility"
];
keywords = [
"game"
"racing"
"cars"
"wheels"
"moza"
];
})
];
passthru.updateScript = nix-update-script { };
meta = {
homepage = "https://github.com/Lawstorant/boxflat";
changelog = "https://github.com/Lawstorant/boxflat/releases/tag/v${version}";
description = "Control your Moza gear settings";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ racci ];
platforms = lib.platforms.linux;
mainProgram = "boxflat";
};
}