{
 "app_id": "com.lotus.Grain",
 "source_url": "https://raw.githubusercontent.com/jeasoncc/grain/main/flatpak/com.lotus.Grain.yml",
 "runtime": "org.freedesktop.Platform",
 "runtime_version": "24.08",
 "sdk": "org.freedesktop.Sdk",
 "finish_args": [
  "--share=ipc",
  "--socket=fallback-x11",
  "--socket=wayland",
  "--device=dri",
  "--share=network",
  "--filesystem=home",
  "--filesystem=xdg-documents",
  "--filesystem=xdg-download",
  "--talk-name=org.freedesktop.Notifications",
  "--talk-name=org.freedesktop.FileManager1",
  "--talk-name=org.freedesktop.portal.Desktop",
  "--talk-name=org.freedesktop.portal.Documents",
  "--socket=pulseaudio",
  "--talk-name=org.kde.StatusNotifierWatcher",
  "--talk-name=org.freedesktop.StatusNotifierWatcher",
  "--filesystem=xdg-config/gtk-3.0:ro",
  "--filesystem=xdg-config/gtk-4.0:ro",
  "--talk-name=org.freedesktop.ScreenSaver"
 ],
 "module_count": 1,
 "fetched_at": "2026-09-20T13:02:00.530263+00:00",
 "manifest": {
  "app-id": "com.lotus.Grain",
  "runtime": "org.freedesktop.Platform",
  "runtime-version": "24.08",
  "sdk": "org.freedesktop.Sdk",
  "sdk-extensions": [
   "org.freedesktop.Sdk.Extension.node20",
   "org.freedesktop.Sdk.Extension.rust-stable"
  ],
  "command": "grain",
  "finish-args": [
   "--share=ipc",
   "--socket=fallback-x11",
   "--socket=wayland",
   "--device=dri",
   "--share=network",
   "--filesystem=home",
   "--filesystem=xdg-documents",
   "--filesystem=xdg-download",
   "--talk-name=org.freedesktop.Notifications",
   "--talk-name=org.freedesktop.FileManager1",
   "--talk-name=org.freedesktop.portal.Desktop",
   "--talk-name=org.freedesktop.portal.Documents",
   "--socket=pulseaudio",
   "--talk-name=org.kde.StatusNotifierWatcher",
   "--talk-name=org.freedesktop.StatusNotifierWatcher",
   "--filesystem=xdg-config/gtk-3.0:ro",
   "--filesystem=xdg-config/gtk-4.0:ro",
   "--talk-name=org.freedesktop.ScreenSaver"
  ],
  "modules": [
   {
    "name": "grain",
    "buildsystem": "simple",
    "build-options": {
     "append-path": "/usr/lib/sdk/node20/bin:/usr/lib/sdk/rust-stable/bin",
     "env": {
      "CARGO_HOME": "/run/build/grain/cargo",
      "npm_config_cache": "/run/build/grain/npm-cache",
      "CARGO_PROFILE_RELEASE_LTO": "true",
      "CARGO_PROFILE_RELEASE_CODEGEN_UNITS": "1",
      "CARGO_PROFILE_RELEASE_PANIC": "abort"
     }
    },
    "build-commands": [
     "echo \"=== Checking Node.js environment ===\"\nnode --version\nnpm --version\n",
     "echo \"=== Checking pre-installed dependencies ===\"\nif [ -d \"node_modules\" ]; then\n  echo \"\u2705 node_modules found (pre-installed by Bun)\"\n  echo \"Size: $(du -sh node_modules | cut -f1)\"\nelse\n  echo \"\u26a0 node_modules not found, installing with npm...\"\n  npm install --legacy-peer-deps --force\nfi\n",
     "echo \"=== Building frontend ===\"\ncd apps/desktop\nnpm run build\n\n# Verify build output\nif [ ! -d \"dist\" ]; then\n  echo \"ERROR: Frontend build failed - dist directory not found\"\n  exit 1\nfi\necho \"Frontend build successful\"\n",
     "echo \"=== Building Tauri application ===\"\ncd apps/desktop/src-tauri\n\n# \u76f4\u63a5\u7528 cargo \u6784\u5efa\uff0c\u8df3\u8fc7 Tauri \u7684\u6253\u5305\u6b65\u9aa4\ncargo build --release\n\n# Verify binary exists\nif [ ! -f \"target/release/grain\" ]; then\n  echo \"ERROR: Binary not found\"\n  ls -la target/release/ || true\n  exit 1\nfi\necho \"Tauri build successful\"\nls -la target/release/grain\n",
     "echo \"=== Installing binary ===\"\ninstall -Dm755 apps/desktop/src-tauri/target/release/grain /app/bin/grain\n\n# Verify installation\nif [ ! -x \"/app/bin/grain\" ]; then\n  echo \"ERROR: Binary installation failed\"\n  exit 1\nfi\necho \"Binary installed successfully\"\n",
     "echo \"=== Installing desktop file ===\"\ninstall -Dm644 flatpak/com.lotus.Grain.desktop /app/share/applications/com.lotus.Grain.desktop\n\n# Validate desktop file\ndesktop-file-validate /app/share/applications/com.lotus.Grain.desktop || echo \"Desktop file validation warning (non-fatal)\"\n",
     "echo \"=== Installing icons ===\"\n# Install available icon sizes\nfor size in 32 128 256; do\n  if [ -f \"apps/desktop/src-tauri/icons/${size}x${size}.png\" ]; then\n    install -Dm644 \"apps/desktop/src-tauri/icons/${size}x${size}.png\" \\\n      \"/app/share/icons/hicolor/${size}x${size}/apps/com.lotus.Grain.png\"\n    echo \"Installed ${size}x${size} icon\"\n  fi\ndone\n\n# Install scalable icon if available\nif [ -f \"apps/desktop/src-tauri/icons/icon.svg\" ]; then\n  install -Dm644 \"apps/desktop/src-tauri/icons/icon.svg\" \\\n    \"/app/share/icons/hicolor/scalable/apps/com.lotus.Grain.svg\"\n  echo \"Installed scalable icon\"\nfi\n",
     "echo \"=== Installing metainfo ===\"\ninstall -Dm644 flatpak/com.lotus.Grain.metainfo.xml /app/share/metainfo/com.lotus.Grain.metainfo.xml\n\n# Validate metainfo\nappstream-util validate-relax /app/share/metainfo/com.lotus.Grain.metainfo.xml || echo \"Metainfo validation warning (non-fatal)\"\n",
     "echo \"=== Installing license ===\"\nif [ -f \"LICENSE\" ]; then\n  install -Dm644 LICENSE /app/share/licenses/com.lotus.Grain/LICENSE\nfi\n",
     "echo \"=== Installing documentation ===\"\nif [ -f \"README.md\" ]; then\n  install -Dm644 README.md /app/share/doc/com.lotus.Grain/README.md\nfi\n\necho \"=== Installation completed successfully ===\"\n"
    ],
    "sources": [
     {
      "type": "dir",
      "path": ".."
     }
    ]
   }
  ]
 }
}