{
 "app_id": "org.nexa.Assistant",
 "source_url": "https://raw.githubusercontent.com/ShiroOSL/nexa-linux/main/org.nexa.Assistant.json",
 "runtime": "org.gnome.Platform",
 "runtime_version": "50",
 "sdk": "org.gnome.Sdk",
 "finish_args": [
  "--socket=wayland",
  "--socket=x11",
  "--socket=pulseaudio",
  "--device=dri",
  "--filesystem=xdg-config/nexa:create",
  "--filesystem=xdg-data/nexa:create",
  "--share=network",
  "--env=GSK_RENDERER=gl",
  "--talk-name=org.freedesktop.Notifications",
  "--talk-name=org.freedesktop.Flatpak",
  "--talk-name=org.freedesktop.ScreenSaver",
  "--talk-name=org.gnome.ScreenSaver",
  "--talk-name=org.mpris.MediaPlayer2.*",
  "--talk-name=org.kde.StatusNotifierWatcher",
  "--talk-name=org.freedesktop.portal.*",
  "--talk-name=org.nexa.NotificationBridge",
  "--own-name=org.nexa.CommandRegistry",
  "--talk-name=io.github.ShiroOSL.*",
  "--system-talk-name=org.freedesktop.login1",
  "--system-talk-name=org.freedesktop.UPower",
  "--system-talk-name=org.freedesktop.NetworkManager",
  "--system-talk-name=org.bluez",
  "--env=PYTHONPATH=/app/lib/python3.13/site-packages"
 ],
 "module_count": 9,
 "fetched_at": "2026-09-20T12:53:22.174799+00:00",
 "manifest": {
  "app-id": "org.nexa.Assistant",
  "runtime": "org.gnome.Platform",
  "runtime-version": "50",
  "sdk": "org.gnome.Sdk",
  "command": "nexa",
  "finish-args": [
   "--socket=wayland",
   "--socket=x11",
   "--socket=pulseaudio",
   "--device=dri",
   "--filesystem=xdg-config/nexa:create",
   "--filesystem=xdg-data/nexa:create",
   "--share=network",
   "--env=GSK_RENDERER=gl",
   "--talk-name=org.freedesktop.Notifications",
   "--talk-name=org.freedesktop.Flatpak",
   "--talk-name=org.freedesktop.ScreenSaver",
   "--talk-name=org.gnome.ScreenSaver",
   "--talk-name=org.mpris.MediaPlayer2.*",
   "--talk-name=org.kde.StatusNotifierWatcher",
   "--talk-name=org.freedesktop.portal.*",
   "--talk-name=org.nexa.NotificationBridge",
   "--own-name=org.nexa.CommandRegistry",
   "--talk-name=io.github.ShiroOSL.*",
   "--system-talk-name=org.freedesktop.login1",
   "--system-talk-name=org.freedesktop.UPower",
   "--system-talk-name=org.freedesktop.NetworkManager",
   "--system-talk-name=org.bluez",
   "--env=PYTHONPATH=/app/lib/python3.13/site-packages"
  ],
  "modules": [
   {
    "name": "piper-tts",
    "buildsystem": "simple",
    "build-commands": [
     "mkdir -p /app/lib/piper",
     "cp -r * /app/lib/piper/",
     "chmod +x /app/lib/piper/piper"
    ],
    "sources": [
     {
      "type": "archive",
      "url": "https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_linux_x86_64.tar.gz",
      "sha256": "a50cb45f355b7af1f6d758c1b360717877ba0a398cc8cbe6d2a7a3a26e225992"
     }
    ]
   },
   {
    "name": "whisper-cpp",
    "buildsystem": "cmake-ninja",
    "config-opts": [
     "-DCMAKE_BUILD_TYPE=Release",
     "-DBUILD_SHARED_LIBS=ON",
     "-DWHISPER_BUILD_EXAMPLES=ON",
     "-DWHISPER_BUILD_TESTS=OFF"
    ],
    "build-options": {
     "arch": {
      "x86_64": {
       "config-opts": [
        "-DGGML_SSE42=ON",
        "-DGGML_AVX=ON",
        "-DGGML_AVX2=ON",
        "-DGGML_FMA=ON",
        "-DGGML_F16C=ON",
        "-DGGML_BMI2=ON"
       ]
      },
      "aarch64": {
       "config-opts": [
        "-DGGML_NATIVE=OFF"
       ]
      }
     }
    },
    "sources": [
     {
      "type": "archive",
      "url": "https://github.com/ggerganov/whisper.cpp/archive/refs/tags/v1.8.6.tar.gz",
      "sha256": "f8e632016ceae556f3132a16c7f704be1e7715595041f474fa81a2b64c1abf7c"
     }
    ]
   },
   {
    "name": "whisper-shim",
    "buildsystem": "simple",
    "build-commands": [
     "gcc -shared -fPIC -O2 -I/app/include -o /app/lib/libnexa_whisper_shim.so nexa_whisper_shim.c -L/app/lib -lwhisper"
    ],
    "sources": [
     {
      "type": "file",
      "path": "native/nexa_whisper_shim.c"
     }
    ]
   },
   {
    "name": "pyenchant",
    "buildsystem": "simple",
    "build-commands": [
     "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} pyenchant==3.3.0"
    ],
    "sources": [
     {
      "type": "file",
      "path": "third_party/pyenchant-wheel/pyenchant-3.3.0-py3-none-any.whl",
      "sha256": "3da00b1d01314d85aac733bb997415d7a3e875666dc81735ddcf320aa36b7a70"
     }
    ]
   },
   {
    "name": "mutagen",
    "buildsystem": "simple",
    "build-commands": [
     "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} mutagen==1.48.1"
    ],
    "sources": [
     {
      "type": "file",
      "path": "third_party/mutagen-wheel/mutagen-1.48.1-py3-none-any.whl",
      "sha256": "4f077fe87d3fc7fba259aa63d8c026b18382ca6a42ef37c61e16f1b1b5b82fe7"
     }
    ]
   },
   {
    "name": "openwakeword-deps",
    "buildsystem": "simple",
    "build-commands": [
     "pip3 install --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} openwakeword==0.4.0"
    ],
    "sources": [
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/openwakeword-0.4.0-py3-none-any.whl",
      "sha256": "2c353f49a35d384507403efde3db439353d8281a52d08a0e42a5b493e5145075"
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/onnxruntime-1.28.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
      "sha256": "54fa221d669282bd8f582708ce4c96010a7e9fb0661f9006b37fe2fedafb73fe",
      "only-arches": [
       "x86_64"
      ]
     },
     {
      "type": "file",
      "url": "https://files.pythonhosted.org/packages/c0/23/b46045c3bf67a9cf54c12f5df0f018a422c65fbb9d6072b10071bebfaae2/onnxruntime-1.28.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl",
      "sha256": "f649dd6f6452d12a8059888aa489fe519e062e18793dac72b9efa0f9fdb64135",
      "only-arches": [
       "aarch64"
      ]
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
      "sha256": "da76d09304a4706db7cc1e3ebaa3b6b98a67365cc11d2996c4f1e58ba47df714",
      "only-arches": [
       "x86_64"
      ]
     },
     {
      "type": "file",
      "url": "https://files.pythonhosted.org/packages/0c/39/ffe829a5b8ecb40a518724a997794657fdc354ada5e8fe8e64d998c0bac9/scikit_learn-1.9.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl",
      "sha256": "38c3dcb9a1ffb85505ec53d54c7b4aea0cff70050425a7760c2af661ac85df05",
      "only-arches": [
       "aarch64"
      ]
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/scipy-1.18.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
      "sha256": "a46f9273dbd0eb1cefba61c9b8648b4dfe3cbc14a080176f9a73e44b8336dc7f",
      "only-arches": [
       "x86_64"
      ]
     },
     {
      "type": "file",
      "url": "https://files.pythonhosted.org/packages/ea/b2/e83ea34279a52c03374477c74006256ec78df65fc877baa4617d6de1d202/scipy-1.18.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl",
      "sha256": "0d13bca67c096d89fb95ced0d8921807300fce0275643aef9533cc63a0773468",
      "only-arches": [
       "aarch64"
      ]
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
      "sha256": "9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a",
      "only-arches": [
       "x86_64"
      ]
     },
     {
      "type": "file",
      "url": "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl",
      "sha256": "1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd",
      "only-arches": [
       "aarch64"
      ]
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/tqdm-4.70.0-py3-none-any.whl",
      "sha256": "7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953"
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/joblib-1.5.3-py3-none-any.whl",
      "sha256": "5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713"
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/narwhals-2.24.0-py3-none-any.whl",
      "sha256": "42fdedf44e5b2ca7505630d45b4ac3058f38d8485cba9fe1652ca23152df7489"
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/threadpoolctl-3.6.0-py3-none-any.whl",
      "sha256": "43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb"
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/flatbuffers-25.12.19-py2.py3-none-any.whl",
      "sha256": "7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4"
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/protobuf-7.35.1-py3-none-any.whl",
      "sha256": "4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9"
     },
     {
      "type": "file",
      "path": "third_party/openwakeword-wheels/packaging-26.2-py3-none-any.whl",
      "sha256": "5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e"
     }
    ]
   },
   {
    "name": "piper-voices",
    "buildsystem": "simple",
    "build-commands": [
     "mkdir -p /app/share/nexa/voices",
     "cp en_US-amy-medium.onnx en_US-amy-medium.onnx.json en_US-ryan-medium.onnx en_US-ryan-medium.onnx.json /app/share/nexa/voices/"
    ],
    "sources": [
     {
      "type": "file",
      "url": "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/amy/medium/en_US-amy-medium.onnx",
      "sha256": "b3a6e47b57b8c7fbe6a0ce2518161a50f59a9cdd8a50835c02cb02bdd6206c18"
     },
     {
      "type": "file",
      "url": "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/amy/medium/en_US-amy-medium.onnx.json",
      "sha256": "95a23eb4d42909d38df73bb9ac7f45f597dbfcde2d1bf9526fdeaf5466977d77"
     },
     {
      "type": "file",
      "url": "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/ryan/medium/en_US-ryan-medium.onnx",
      "sha256": "abf4c274862564ed647ba0d2c47f8ee7c9b717d27bdad9219100eb310db4047a"
     },
     {
      "type": "file",
      "url": "https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/ryan/medium/en_US-ryan-medium.onnx.json",
      "sha256": "44034c056cb15681b2ad494307c7f3f2e4499d1253c700c711fa0a4607ffe78d"
     }
    ]
   },
   {
    "name": "whisper-model",
    "buildsystem": "simple",
    "build-commands": [
     "mkdir -p /app/share/nexa/whisper-models",
     "cp ggml-tiny.en.bin /app/share/nexa/whisper-models/"
    ],
    "sources": [
     {
      "type": "file",
      "url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-tiny.en.bin",
      "sha256": "921e4cf8686fdd993dcd081a5da5b6c365bfde1162e72b08d75ac75289920b1f"
     }
    ]
   },
   {
    "name": "nexa-assistant",
    "buildsystem": "simple",
    "build-commands": [
     "mkdir -p /app/bin /app/share/nexa /app/share/nexa/wakeword-models /app/share/nexa/sounds /app/share/nexa/weather-icons",
     "cp -r src/* /app/share/nexa/",
     "cp -r data/wakeword-models/* /app/share/nexa/wakeword-models/",
     "cp -r data/sounds/* /app/share/nexa/sounds/",
     "cp -r data/weather-icons/* /app/share/nexa/weather-icons/",
     "echo '#!/bin/sh' > /app/bin/nexa",
     "echo 'exec python3 /app/share/nexa/main.py \"$@\"' >> /app/bin/nexa",
     "chmod +x /app/bin/nexa",
     "mkdir -p /app/share/applications /app/share/icons/hicolor/scalable/apps /app/share/metainfo",
     "install -Dm644 data/org.nexa.Assistant.desktop /app/share/applications/org.nexa.Assistant.desktop",
     "install -Dm644 data/org.nexa.Assistant.svg /app/share/icons/hicolor/scalable/apps/org.nexa.Assistant.svg",
     "install -Dm644 data/org.nexa.Assistant.metainfo.xml /app/share/metainfo/org.nexa.Assistant.metainfo.xml",
     "install -Dm644 LICENSE /app/share/doc/nexa/LICENSE",
     "install -Dm644 LICENSE-PRIVATE.md /app/share/doc/nexa/LICENSE-PRIVATE.md",
     "install -Dm644 TRADEMARKS.md /app/share/doc/nexa/TRADEMARKS.md"
    ],
    "sources": [
     {
      "type": "dir",
      "path": ".",
      "skip": [
       "tools",
       "build-dir",
       ".flatpak-builder",
       ".git",
       "__pycache__",
       "docs",
       "README.md",
       ".github",
       ".gitignore",
       "setup.sh",
       "third_party"
      ]
     }
    ]
   }
  ]
 }
}