118 lines
2.4 KiB
Nix
118 lines
2.4 KiB
Nix
|
{ lib
|
||
|
, stdenv
|
||
|
, python3
|
||
|
, fetchFromGitHub
|
||
|
, tesseract4
|
||
|
, leptonica
|
||
|
, wl-clipboard
|
||
|
, libnotify
|
||
|
, xorg
|
||
|
}:
|
||
|
|
||
|
let
|
||
|
|
||
|
ps = python3.pkgs;
|
||
|
|
||
|
wrapperDeps = [
|
||
|
leptonica
|
||
|
tesseract4
|
||
|
libnotify
|
||
|
] ++ lib.optionals stdenv.isLinux [
|
||
|
wl-clipboard
|
||
|
];
|
||
|
|
||
|
in
|
||
|
|
||
|
ps.buildPythonApplication rec {
|
||
|
pname = "normcap";
|
||
|
version = "0.4.4";
|
||
|
format = "pyproject";
|
||
|
|
||
|
disabled = ps.pythonOlder "3.9";
|
||
|
|
||
|
src = fetchFromGitHub {
|
||
|
owner = "dynobo";
|
||
|
repo = "normcap";
|
||
|
rev = "refs/tags/v${version}";
|
||
|
hash = "sha256-dShtmoqS9TC3PHuwq24OEOhYfBHGhDCma8Du8QCkFuI=";
|
||
|
};
|
||
|
|
||
|
pythonRemoveDeps = [
|
||
|
"PySide6-Essentials"
|
||
|
];
|
||
|
|
||
|
nativeBuildInputs = [
|
||
|
ps.pythonRelaxDepsHook
|
||
|
ps.poetry-core
|
||
|
];
|
||
|
|
||
|
propagatedBuildInputs = [
|
||
|
ps.pyside6
|
||
|
];
|
||
|
|
||
|
preFixup = ''
|
||
|
makeWrapperArgs+=(
|
||
|
"''${qtWrapperArgs[@]}"
|
||
|
--set QT_QPA_PLATFORM xcb
|
||
|
--prefix PATH : ${lib.makeBinPath wrapperDeps}
|
||
|
)
|
||
|
'';
|
||
|
|
||
|
nativeCheckInputs = wrapperDeps ++ [
|
||
|
ps.pytestCheckHook
|
||
|
ps.pytest-qt
|
||
|
ps.toml
|
||
|
] ++ lib.optionals stdenv.isLinux [
|
||
|
ps.pytest-xvfb
|
||
|
xorg.xorgserver
|
||
|
];
|
||
|
|
||
|
preCheck = ''
|
||
|
export HOME=$(mktemp -d)
|
||
|
'' + lib.optionalString stdenv.isLinux ''
|
||
|
# setup a virtual x11 display
|
||
|
export DISPLAY=:$((2000 + $RANDOM % 1000))
|
||
|
Xvfb $DISPLAY -screen 5 1024x768x8 &
|
||
|
xvfb_pid=$!
|
||
|
'';
|
||
|
|
||
|
postCheck = lib.optionalString stdenv.isLinux ''
|
||
|
# cleanup the virtual x11 display
|
||
|
kill $xvfb_pid
|
||
|
'';
|
||
|
|
||
|
disabledTests = [
|
||
|
# requires a wayland session (no xclip support)
|
||
|
"test_wl_copy"
|
||
|
# times out, unknown why
|
||
|
"test_update_checker_triggers_checked_signal"
|
||
|
# touches network
|
||
|
"test_urls_reachable"
|
||
|
# requires xdg
|
||
|
"test_synchronized_capture"
|
||
|
] ++ lib.optionals stdenv.isDarwin [
|
||
|
# requires impure pbcopy
|
||
|
"test_get_copy_func_with_pbcopy"
|
||
|
"test_get_copy_func_without_pbcopy"
|
||
|
"test_perform_pbcopy"
|
||
|
];
|
||
|
|
||
|
disabledTestPaths = [
|
||
|
# touches network
|
||
|
"tests/tests_gui/test_downloader.py"
|
||
|
# fails to import, causes pytest to freeze
|
||
|
"tests/tests_gui/test_language_manager.py"
|
||
|
] ++ lib.optionals stdenv.isDarwin [
|
||
|
# requires a display
|
||
|
"tests/integration/test_normcap.py"
|
||
|
];
|
||
|
|
||
|
meta = with lib; {
|
||
|
description = "OCR powered screen-capture tool to capture information instead of images";
|
||
|
homepage = "https://dynobo.github.io/normcap/";
|
||
|
license = licenses.gpl3Plus;
|
||
|
maintainers = with maintainers; [ cafkafk pbsds ];
|
||
|
mainProgram = "normcap";
|
||
|
};
|
||
|
}
|