cfclient: init at 2025.2 (#410846)

authored by

Gaétan Lepage and committed by
GitHub
758723bc e2e96414

+218
+79
pkgs/by-name/cf/cfclient/package.nix
···
··· 1 + { 2 + lib, 3 + python3Packages, 4 + fetchFromGitHub, 5 + qt6, 6 + }: 7 + 8 + python3Packages.buildPythonApplication rec { 9 + pname = "cfclient"; 10 + version = "2025.2"; 11 + pyproject = true; 12 + 13 + src = fetchFromGitHub { 14 + owner = "bitcraze"; 15 + repo = "crazyflie-clients-python"; 16 + tag = version; 17 + hash = "sha256-LCGTMLIfGH59KFwQACyuEQTh/zkGgzXd3e6MkFTgKhA="; 18 + }; 19 + 20 + strictDeps = true; 21 + 22 + buildInputs = [ 23 + qt6.qtbase 24 + ]; 25 + 26 + nativeBuildInputs = [ 27 + qt6.wrapQtAppsHook 28 + ]; 29 + 30 + dontWrapQtApps = true; 31 + 32 + build-system = with python3Packages; [ 33 + setuptools 34 + setuptools-scm 35 + ]; 36 + 37 + pythonRelaxDeps = [ 38 + "numpy" 39 + "pyqt6" 40 + "vispy" 41 + ]; 42 + 43 + dependencies = with python3Packages; [ 44 + appdirs 45 + cflib 46 + numpy 47 + pyopengl 48 + pyserial 49 + pysdl2 50 + pyqtgraph 51 + pyqt6 52 + pyqt6-sip 53 + pyyaml 54 + pyzmq 55 + scipy 56 + setuptools 57 + vispy 58 + ]; 59 + 60 + # No tests 61 + doCheck = false; 62 + 63 + # Use wrapQtApp for Python scripts as the manual mentions that wrapQtAppsHook only applies to binaries 64 + postFixup = '' 65 + wrapQtApp "$out/bin/cfclient" \ 66 + --set QT_QPA_PLATFORM "wayland" \ 67 + --set XDG_CURRENT_DESKTOP "Wayland" \ 68 + ''${qtWrapperArgs[@]} 69 + ''; 70 + 71 + meta = { 72 + description = "Host applications and library for Crazyflie drones written in Python"; 73 + homepage = "https://github.com/bitcraze/crazyflie-clients-python"; 74 + changelog = "https://github.com/bitcraze/crazyflie-clients-python/releases/tag/${version}"; 75 + license = lib.licenses.gpl2Only; 76 + maintainers = [ lib.maintainers.brianmcgillion ]; 77 + platforms = lib.platforms.linux; 78 + }; 79 + }
+90
pkgs/development/python-modules/cflib/default.nix
···
··· 1 + { 2 + lib, 3 + buildPythonPackage, 4 + fetchFromGitHub, 5 + setuptools, 6 + setuptools-scm, 7 + libusb-package, 8 + numpy, 9 + packaging, 10 + pyserial, 11 + pyusb, 12 + scipy, 13 + pytestCheckHook, 14 + pyyaml, 15 + udevCheckHook, 16 + }: 17 + 18 + buildPythonPackage rec { 19 + pname = "cflib"; 20 + version = "0.1.28"; 21 + pyproject = true; 22 + 23 + src = fetchFromGitHub { 24 + owner = "bitcraze"; 25 + repo = "crazyflie-lib-python"; 26 + tag = version; 27 + hash = "sha256-vGqwQVD80NcFJosVAmqj66uxYNoVtAqzVhVQiuWP5yM="; 28 + }; 29 + 30 + strictDeps = true; 31 + 32 + build-system = [ 33 + setuptools 34 + setuptools-scm 35 + ]; 36 + 37 + pythonRelaxDeps = [ "numpy" ]; 38 + 39 + dependencies = [ 40 + libusb-package 41 + numpy 42 + packaging 43 + pyserial 44 + pyusb 45 + scipy 46 + ]; 47 + 48 + disabledTestPaths = [ 49 + # exception: Cannot find a Crazyradio Dongle (HW required) 50 + "sys_test/single_cf_grounded/" 51 + "sys_test/swarm_test_rig/" 52 + ]; 53 + 54 + pythonImportsCheck = [ "cflib" ]; 55 + nativeCheckInputs = [ 56 + pytestCheckHook 57 + pyyaml 58 + ]; 59 + 60 + # The udevCheckHook is used to verify udev rules 61 + # requires diInstallCheck to be enabled, which is default for pythonPackages 62 + nativeInstallCheckInputs = [ 63 + udevCheckHook 64 + ]; 65 + 66 + # Install udev rules as defined 67 + # https://www.bitcraze.io/documentation/repository/crazyflie-lib-python/master/installation/usb_permissions/ 68 + postInstall = '' 69 + # Install udev rules 70 + mkdir -p $out/etc/udev/rules.d 71 + 72 + cat <<EOF > $out/etc/udev/rules.d/99-bitcraze.rules 73 + # Crazyradio (normal operation) 74 + SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="7777", MODE="0664", GROUP="plugdev" 75 + # Bootloader 76 + SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", ATTRS{idProduct}=="0101", MODE="0664", GROUP="plugdev" 77 + # Crazyflie (over USB) 78 + SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", MODE="0664", GROUP="plugdev" 79 + EOF 80 + ''; 81 + 82 + meta = { 83 + description = "Python library for the Crazyflie quadcopter by Bitcraze"; 84 + homepage = "https://github.com/bitcraze/crazyflie-lib-python"; 85 + changelog = "https://github.com/bitcraze/crazyflie-lib-python/releases/tag/${version}"; 86 + license = lib.licenses.gpl2Only; 87 + maintainers = [ lib.maintainers.brianmcgillion ]; 88 + platforms = lib.platforms.linux; 89 + }; 90 + }
+43
pkgs/development/python-modules/libusb-package/default.nix
···
··· 1 + { 2 + lib, 3 + buildPythonPackage, 4 + fetchFromGitHub, 5 + setuptools, 6 + setuptools-scm, 7 + tomli, 8 + importlib-resources, 9 + libusb1, 10 + }: 11 + 12 + buildPythonPackage rec { 13 + pname = "libusb-package"; 14 + version = "1.0.26.3"; 15 + pyproject = true; 16 + 17 + src = fetchFromGitHub { 18 + owner = "pyocd"; 19 + repo = "libusb-package"; 20 + tag = "v${version}"; 21 + hash = "sha256-4zTyaidpSlledTcEztWzRgwj43oNV7xWrhMXCE9Qz3k="; 22 + }; 23 + 24 + build-system = [ 25 + setuptools 26 + setuptools-scm 27 + tomli 28 + ]; 29 + 30 + dependencies = [ 31 + importlib-resources 32 + libusb1 33 + ]; 34 + 35 + meta = { 36 + description = "Python package for simplified libusb distribution and usage with pyOCD"; 37 + homepage = "https://github.com/pyocd/libusb-package"; 38 + changelog = "https://github.com/pyocd/libusb-package/releases/tag/v${version}"; 39 + license = lib.licenses.asl20; 40 + maintainers = [ lib.maintainers.brianmcgillion ]; 41 + platforms = lib.platforms.linux; 42 + }; 43 + }
+6
pkgs/top-level/python-packages.nix
··· 2368 2369 cfgv = callPackage ../development/python-modules/cfgv { }; 2370 2371 cfn-flip = callPackage ../development/python-modules/cfn-flip { }; 2372 2373 cfn-lint = callPackage ../development/python-modules/cfn-lint { }; ··· 8042 8043 libtorrent-rasterbar = 8044 (toPythonModule (pkgs.libtorrent-rasterbar.override { python3 = python; })).python; 8045 8046 libusb1 = callPackage ../development/python-modules/libusb1 { inherit (pkgs) libusb1; }; 8047
··· 2368 2369 cfgv = callPackage ../development/python-modules/cfgv { }; 2370 2371 + cflib = callPackage ../development/python-modules/cflib { }; 2372 + 2373 cfn-flip = callPackage ../development/python-modules/cfn-flip { }; 2374 2375 cfn-lint = callPackage ../development/python-modules/cfn-lint { }; ··· 8044 8045 libtorrent-rasterbar = 8046 (toPythonModule (pkgs.libtorrent-rasterbar.override { python3 = python; })).python; 8047 + 8048 + libusb-package = callPackage ../development/python-modules/libusb-package { 8049 + inherit (pkgs) libusb1; 8050 + }; 8051 8052 libusb1 = callPackage ../development/python-modules/libusb1 { inherit (pkgs) libusb1; }; 8053