diff --git a/pkgs/default.nix b/pkgs/default.nix index 64d3ea4b..1058b696 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -21,6 +21,7 @@ let emulsion-palette = callPackage ./emulsion-palette.nix { }; gol-c = callPackage ./gol-c.nix { }; gnome-dialect = callPackage ./dialect { }; + gnome-frog = callPackage ./frog { }; gnome-search-provider-recoll = callPackage ./gnome-search-provider-recoll.nix { }; gnome-extension-manager = callPackage ./gnome-extension-manager.nix { }; diff --git a/pkgs/frog/default.nix b/pkgs/frog/default.nix new file mode 100644 index 00000000..ce4adaec --- /dev/null +++ b/pkgs/frog/default.nix @@ -0,0 +1,84 @@ +{ stdenv +, lib +, fetchFromGitHub +, python3Packages +, wrapGAppsHook4 +, gtk4 +, meson +, ninja +, pkg-config +, appstream-glib +, desktop-file-utils +, glib +, gobject-introspection +, libnotify +, libadwaita +, libportal +, gettext +, librsvg +, tesseract5 +, zbar +}: + +python3Packages.buildPythonApplication rec { + pname = "frog"; + version = "1.1.3"; + + src = fetchFromGitHub { + owner = "TenderOwl"; + repo = "Frog"; + rev = version; + sha256 = "sha256-yOjfiGJUU25zb/4WprPU59yDAMpttS3jREp1kB5mXUE="; + }; + + format = "other"; + + patches = [ ./patches/update-compatible-with-non-flatpak-env.patch ]; + postPatch = '' + chmod +x ./build-aux/meson/postinstall.py + patchShebangs ./build-aux/meson/postinstall.py + substituteInPlace ./build-aux/meson/postinstall.py \ + --replace "gtk-update-icon-cache" "gtk4-update-icon-cache" + substituteInPlace ./frog/language_manager.py --subst-var out + ''; + + nativeBuildInputs = [ + appstream-glib + desktop-file-utils + gettext + meson + ninja + pkg-config + glib + wrapGAppsHook4 + ]; + + buildInputs = [ + librsvg + gobject-introspection + libnotify + libadwaita + libportal + zbar + tesseract5 + ]; + + propagatedBuildInputs = with python3Packages; [ + pygobject3 + pillow + pytesseract + pyzbar + ]; + + dontWrapGApps = true; + preFixup = '' + makeWrapperArgs+=("''${gappsWrapperArgs[@]}") + ''; + + meta = with lib; { + homepage = "https://getfrog.app/"; + description = + "Intuitive optical character recognition (OCR) for GNOME desktop"; + license = licenses.mit; + }; +} diff --git a/pkgs/frog/patches/update-compatible-with-non-flatpak-env.patch b/pkgs/frog/patches/update-compatible-with-non-flatpak-env.patch new file mode 100644 index 00000000..aac9b4f7 --- /dev/null +++ b/pkgs/frog/patches/update-compatible-with-non-flatpak-env.patch @@ -0,0 +1,33 @@ +diff --git a/frog/config.py b/frog/config.py +index 9837755..b73e4e3 100644 +--- a/frog/config.py ++++ b/frog/config.py +@@ -30,10 +30,14 @@ import os + APP_ID = "com.github.tenderowl.frog" + RESOURCE_PREFIX = "/com/github/tenderowl/frog" + ++# This is based from the XDG Base Directory specification. ++if not os.getenv('XDG_DATA_HOME'): ++ os.environ['XDG_DATA_HOME'] = os.path.expanduser("~/.local/share") ++ + if not os.path.exists(os.path.join(os.environ['XDG_DATA_HOME'], 'tessdata')): + os.mkdir(os.path.join(os.environ['XDG_DATA_HOME'], 'tessdata')) + + tessdata_url = "https://github.com/tesseract-ocr/tessdata/raw/main/" + tessdata_best_url = "https://github.com/tesseract-ocr/tessdata_best/raw/main/" + tessdata_dir = os.path.join(os.environ['XDG_DATA_HOME'], 'tessdata') +-tessdata_config = f'--tessdata-dir {tessdata_dir} –psm 6' ++tessdata_config = f'–-psm 6 --tessdata-dir {tessdata_dir}' +diff --git a/frog/language_manager.py b/frog/language_manager.py +index 5752be6..4f6a908 100644 +--- a/frog/language_manager.py ++++ b/frog/language_manager.py +@@ -156,7 +156,7 @@ class LanguageManager(GObject.GObject): + os.mkdir(tessdata_dir) + + dest_path = os.path.join(tessdata_dir, 'eng.traineddata') +- source_path = pathlib.Path('/app/share/appdata/eng.traineddata') ++ source_path = pathlib.Path('@out@/share/appdata/eng.traineddata') + if os.path.exists(dest_path): + return +