summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: f64ccedfbd5f1e1eebbc2af31f7137ab492a4cdd (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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
pkgname=chatgtk_client-git
pkgver=0.2.263.g2b938e1
pkgrel=1
pkgdesc="GTK3 client for OpenAI, Gemini, Grok and Claude APIs with voice and tools"
arch=('any')
url="https://github.com/rabfulton/ChatGTK"
license=('MIT')
depends=(
  'python'
  'python-openai'
  'python-gobject'
  'python-sounddevice'
  'python-soundfile'
  'python-numpy'
  'python-websockets'
  'python-requests'
  'gtk3'
  'gtksourceview4'
)
makedepends=('git')
optdepends=(
  'texlive-latexrecommended: LaTeX support for math rendering'
  'beets: Music library management for the music control tool'
  'playerctl: MPRIS control for music playback'
  'python-qdrant-client: Semantic memory feature'
  'python-sentence-transformers: Local embeddings for memory (optional if using hosted embeddings)'
)
provides=('chatgtk_client')
conflicts=('chatgtk_client')
source=("git+$url.git")
sha256sums=('SKIP')

pkgver() {
  cd "$srcdir/ChatGTK"
  # Use descriptive version based on git history; fall back to short commit hash
  if git describe --tags --long >/dev/null 2>&1; then
    git describe --tags --long | sed 's/^v//' | tr '-' '.'
  else
    printf '0.0.0.r%s.g%s' "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
  fi
}

build() {
  cd "$srcdir/ChatGTK"
  # No build step required; pure Python/GTK application.
  :
}

package() {
  cd "$srcdir/ChatGTK"

  # Install Python sources and assets into /usr/lib/${pkgname%-git}
  local appname=${pkgname%-git}
  local appdir="$pkgdir/usr/lib/$appname"

  install -d "$appdir"
  install -m644 src/"ChatGTK.py" "$appdir/ChatGTK.py"
  install -m644 src/"config.py" "$appdir/config.py"
  install -m644 src/"ai_providers.py" "$appdir/ai_providers.py"
  install -m644 src/"controller.py" "$appdir/controller.py"
  install -m644 src/"conversation.py" "$appdir/conversation.py"
  install -m644 src/"dialogs.py" "$appdir/dialogs.py"
  install -m644 src/"gtk_utils.py" "$appdir/gtk_utils.py"
  install -m644 src/"latex_utils.py" "$appdir/latex_utils.py"
  install -m644 src/"markup_utils.py" "$appdir/markup_utils.py"
  install -m644 src/"message_renderer.py" "$appdir/message_renderer.py"
  install -m644 src/"tools.py" "$appdir/tools.py"
  install -m644 src/"utils.py" "$appdir/utils.py"
  install -m644 src/"__init__.py" "$appdir/__init__.py"

  # model_cards package
  install -d "$appdir/model_cards"
  install -m644 src/model_cards/"__init__.py" "$appdir/model_cards/__init__.py"
  install -m644 src/model_cards/"schema.py" "$appdir/model_cards/schema.py"
  install -m644 src/model_cards/"catalog.py" "$appdir/model_cards/catalog.py"
  install -m644 src/model_cards/"loader.py" "$appdir/model_cards/loader.py"
  install -m644 src/model_cards/"overrides.py" "$appdir/model_cards/overrides.py"

  # repositories package
  install -d "$appdir/repositories"
  install -m644 src/repositories/*.py "$appdir/repositories/"

  # services package
  install -d "$appdir/services"
  install -m644 src/services/*.py "$appdir/services/"

  # events package
  install -d "$appdir/events"
  install -m644 src/events/*.py "$appdir/events/"

  # settings package
  install -d "$appdir/settings"
  install -m644 src/settings/*.py "$appdir/settings/"

  # ui package
  install -d "$appdir/ui"
  install -m644 src/ui/*.py "$appdir/ui/"

  # realtime package
  install -d "$appdir/realtime"
  install -m644 src/realtime/*.py "$appdir/realtime/"

  # memory package (optional feature)
  install -d "$appdir/memory"
  install -m644 src/memory/*.py "$appdir/memory/"

  # Icons and audio preview assets
  install -m644 src/"icon.png" "$appdir/icon.png"
  install -d "$appdir/preview"
  install -m644 src/preview/*.wav "$appdir/preview/"
  install -d "$appdir/xai_preview"
  install -m644 src/xai_preview/*.wav "$appdir/xai_preview/"

  # Launcher script in /usr/bin
  install -d "$pkgdir/usr/bin"
  cat >"$pkgdir/usr/bin/$appname" <<EOF
#!/usr/bin/env bash
exec python -u /usr/lib/$appname/ChatGTK.py "\$@"
EOF
  chmod 755 "$pkgdir/usr/bin/$appname"

  # Desktop entry for menus
  install -d "$pkgdir/usr/share/applications"
  cat >"$pkgdir/usr/share/applications/chatgtk.desktop" <<'EOF'
[Desktop Entry]
Type=Application
Name=ChatGTK
Comment=GTK client for OpenAI, Gemini, Grok and Claude APIs
Exec=chatgtk_client
Icon=chatgtk
Categories=Network;Chat;Utility;
Terminal=false
StartupNotify=true
Keywords=chat;ai;gpt;openai;gemini;grok;claude;
EOF

  # Icon in hicolor theme
  install -d "$pkgdir/usr/share/icons/hicolor/64x64/apps"
  install -m644 src/"icon.png" "$pkgdir/usr/share/icons/hicolor/64x64/apps/chatgtk.png"

  # Install license file for MIT license compliance
  install -d "$pkgdir/usr/share/licenses/$pkgname"
  install -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}