summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: e180bcecaadb8a0d7d9aa2126b3377d289681594 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# Maintainer: mizorewww <aac6fef@icloud.com>
pkgname=arkloop-git
pkgver=26.5.19
pkgrel=1
pkgdesc="Desktop app for building conversational AI agents"
arch=('x86_64' 'aarch64')
url="https://github.com/qqqqqf-q/Arkloop"
license=('Apache-2.0')
depends=(
  'alsa-lib'
  'at-spi2-core'
  'gtk3'
  'libappindicator-gtk3'
  'libdrm'
  'libnotify'
  'libxcomposite'
  'libxdamage'
  'libxkbcommon'
  'libxrandr'
  'libxss'
  'mesa'
  'nss'
  'xdg-utils'
)
makedepends=('git' 'go' 'nodejs' 'pnpm')
provides=('arkloop' 'arkloop-desktop')
conflicts=('arkloop' 'arkloop-desktop')
options=('!strip' '!debug')
source=('git+https://github.com/qqqqqf-q/Arkloop.git')
sha256sums=('SKIP')

_pnpm() {
  pnpm --config.manage-package-manager-versions=false "$@"
}

_pnpm_install() {
  pnpm --config.manage-package-manager-versions=false --store-dir "${srcdir}/pnpm-store" "$@"
}

pkgver() {
  cd "${srcdir}/Arkloop"
  local latest_tag
  latest_tag="$(git describe --tags --abbrev=0)"
  git checkout --quiet "${latest_tag}"
  printf '%s\n' "${latest_tag#v}"
}

_electron_arch() {
  case "${CARCH}" in
    x86_64) printf '%s\n' 'x64' ;;
    aarch64) printf '%s\n' 'arm64' ;;
    *) printf 'unsupported architecture: %s\n' "${CARCH}" >&2; return 1 ;;
  esac
}

prepare() {
  cd "${srcdir}/Arkloop"
  _pnpm_install install --frozen-lockfile
}

build() {
  cd "${srcdir}/Arkloop"
  local electron_arch
  local app_dir="${srcdir}/Arkloop/src/apps/desktop"
  electron_arch="$(_electron_arch)"

  _pnpm --filter @arkloop/desktop run build:web
  _pnpm --filter @arkloop/desktop run build:electron
  node src/apps/desktop/scripts/build-sidecar.mjs --platform linux --arch "${electron_arch}"

  rm -rf "${app_dir}/release/linux-unpacked"
  _pnpm --filter @arkloop/desktop exec electron-builder \
    --linux dir \
    -c.extraMetadata.version="${pkgver}"
}

package() {
  local app_dir="${srcdir}/Arkloop/src/apps/desktop"
  local release_dir="${app_dir}/release/linux-unpacked"
  local app_bin=''

  if [[ ! -d "${release_dir}" ]]; then
    printf 'missing electron-builder output: %s\n' "${release_dir}" >&2
    return 1
  fi

  install -dm755 "${pkgdir}/opt/arkloop"
  cp -a "${release_dir}/." "${pkgdir}/opt/arkloop/"

  for candidate in arkloop Arkloop @arkloopdesktop; do
    if [[ -x "${pkgdir}/opt/arkloop/${candidate}" ]]; then
      app_bin="${candidate}"
      break
    fi
  done

  if [[ -z "${app_bin}" ]]; then
    printf 'missing Arkloop executable in %s\n' "${release_dir}" >&2
    return 1
  fi

  install -dm755 "${pkgdir}/usr/bin"
  ln -s "/opt/arkloop/${app_bin}" "${pkgdir}/usr/bin/arkloop"

  install -dm755 "${pkgdir}/usr/share/applications"
  cat > "${pkgdir}/usr/share/applications/arkloop.desktop" <<EOF
[Desktop Entry]
Name=Arkloop
Comment=Desktop app for building conversational AI agents
Exec=/usr/bin/arkloop %U
Terminal=false
Type=Application
Icon=arkloop
Categories=Development;
StartupWMClass=Arkloop
EOF

  install -Dm644 "${app_dir}/resources/icon.png" \
    "${pkgdir}/usr/share/icons/hicolor/512x512/apps/arkloop.png"
  install -Dm644 "${srcdir}/Arkloop/LICENSE" \
    "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"

  if [[ -f "${pkgdir}/opt/arkloop/chrome-sandbox" ]]; then
    chmod 4755 "${pkgdir}/opt/arkloop/chrome-sandbox"
  fi
}