🏡 index : quine-global-labs/mozsync.git

version: "3"

tasks:
  build:
    desc: Compile mozsync (via a flatpak-builder sandbox, for Qt6WebEngine headers only)
    sources:
      - main.go
      - go.mod
      - go.sum
      - org.mozsync.App.yml
    generates:
      - mozsync
    cmds:
      # Deliberately NOT wiping .flatpak-builder here: it holds flatpak-builder's
      # own build-stage cache (under .flatpak-builder/build/mozsync-1) plus our
      # persistent GOCACHE (see org.mozsync.App.yml), so unchanged files in the
      # ~260-file vendored Qt6 binding layer don't get recompiled on every run.
      # --force-clean only empties build-dir (the final app output), which is cheap.
      # (Not using --ccache: its lock file went stale after an interrupted build
      # and hung a subsequent one indefinitely; GOCACHE alone already caches the
      # compiled cgo/C++ objects, so it's redundant anyway.)
      #
      # Wrapped in a low-priority, memory-capped systemd scope so this doesn't
      # fight other heavy builds (e.g. a concurrent Ladybird/WebKit build) for
      # RAM and get OOM-killed or thrash into swap. CPUWeight/IOWeight=10 is a
      # low *share* (yields under contention, still gets full speed if idle);
      # MemoryHigh=3G is a soft cap Go/cgo get throttled against rather than
      # killed for. GOMAXPROCS=2 (below) also caps how many parallel cc1plus
      # processes cgo spawns compiling the vendored Qt6 binding layer, which is
      # the main memory hog.
      - systemd-run --user --scope --collect -p CPUWeight=10 -p IOWeight=10 -p MemoryHigh=3G -- flatpak run --command=flatpak-builder org.flatpak.Builder --force-clean build-dir org.mozsync.App.yml
      - cp build-dir/files/bin/mozsync ./mozsync
      - echo "Built ./mozsync - runs directly against the host's Qt6 runtime libs, no flatpak needed."

  login:
    desc: One-time Mozilla account sign-in, saves credentials to ~/.config/mozsync/credentials.json
    deps: [build]
    cmds:
      - ./mozsync login

  dump:
    desc: Fetch and print your Firefox Sync bookmarks as JSON
    deps: [build]
    cmds:
      - ./mozsync dump

  chrome-import:
    desc: Import your Firefox Sync bookmarks into the Chromium flatpak's bookmark store
    vars:
      CHROME_BOOKMARKS: '{{.CHROME_BOOKMARKS | default (printf "%s/.var/app/org.chromium.Chromium/config/chromium/Default/Bookmarks" (env "HOME"))}}'
    deps: [build]
    cmds:
      - ./mozsync dump | ./mozsync chrome-import "{{.CHROME_BOOKMARKS}}"

  falkon-import:
    desc: Import your Firefox Sync bookmarks into the Falkon flatpak's bookmark store
    vars:
      FALKON_BOOKMARKS: '{{.FALKON_BOOKMARKS | default (printf "%s/.var/app/org.kde.falkon/config/falkon/profiles/default/bookmarks.json" (env "HOME"))}}'
    deps: [build]
    cmds:
      - ./mozsync dump | ./mozsync falkon-import "{{.FALKON_BOOKMARKS}}"

  clean:
    desc: Remove build artifacts
    cmds:
      - rm -rf build-dir .flatpak-builder mozsync