alfred-linux/config/hooks/live/0500-alfred-search.hook.chroot
Alfred 18c2bfd5c6 Initial commit: Alfred Linux v4.0 build system
- build-unified.sh: master build script (16 hooks, kernel 7.0.0-rc7)
- config/package-lists: Debian package selections
- assets: Alfred Commander extension tarball
- docs: ARM64 investigation, kernel upgrade roadmap
2026-04-07 11:38:44 -04:00

132 lines
4.1 KiB
Bash

#!/bin/bash
# ═══════════════════════════════════════════════════════════════
# Alfred Linux v2.0-b5 — Meilisearch Local Search Engine
#
# Installs Meilisearch for offline local search.
# BUILD: v2.0-b5 (Search)
# ═══════════════════════════════════════════════════════════════
set -e
echo "[Alfred Linux v2.0-b5] Installing Meilisearch..."
# ── 1. Download Meilisearch binary ──
MEILI_VER="v1.13.3"
MEILI_URL="https://github.com/meilisearch/meilisearch/releases/download/${MEILI_VER}/meilisearch-linux-amd64"
wget -q "$MEILI_URL" -O /usr/local/bin/meilisearch || {
echo "[WARN] Meilisearch download failed, trying latest..."
curl -L https://install.meilisearch.com | sh
mv meilisearch /usr/local/bin/meilisearch
}
chmod +x /usr/local/bin/meilisearch
# ── 2. Create meilisearch user ──
useradd -r -s /bin/false -d /var/lib/meilisearch meilisearch 2>/dev/null || true
mkdir -p /var/lib/meilisearch
chown meilisearch:meilisearch /var/lib/meilisearch
# ── 3. Systemd service ──
cat > /etc/systemd/system/meilisearch.service << 'SVC'
[Unit]
Description=Meilisearch Local Search Engine
Documentation=https://docs.meilisearch.com
After=network.target
[Service]
ExecStart=/usr/local/bin/meilisearch --db-path /var/lib/meilisearch --http-addr 127.0.0.1:7700 --no-analytics
User=meilisearch
Group=meilisearch
Restart=always
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
SVC
systemctl enable meilisearch 2>/dev/null || true
# ── 4. Alfred Search CLI ──
cat > /usr/local/bin/alfred-search << 'SEARCH'
#!/bin/bash
# Alfred Search — local search powered by Meilisearch
# Usage: alfred-search "query"
QUERY="${*:-}"
if [[ -z "$QUERY" ]]; then
echo "Usage: alfred-search <query>"
echo "Search local documentation and files."
exit 1
fi
# Check if Meilisearch is running
if ! curl -s http://localhost:7700/health | grep -q available; then
echo "Meilisearch is not running. Start with: sudo systemctl start meilisearch"
exit 1
fi
# Search
RESULT=$(curl -s "http://localhost:7700/multi-search" \
-H "Content-Type: application/json" \
-d "{\"queries\": [{\"indexUid\": \"docs\", \"q\": \"$QUERY\", \"limit\": 5}]}" 2>/dev/null)
if echo "$RESULT" | python3 -c "
import sys, json
data = json.load(sys.stdin)
results = data.get('results', [{}])[0].get('hits', [])
if not results:
print('No results found.')
else:
for r in results:
title = r.get('title', r.get('path', 'Untitled'))
snippet = r.get('content', '')[:200]
print(f' → {title}')
print(f' {snippet}')
print()
" 2>/dev/null; then
:
else
echo "Search returned no parseable results."
fi
SEARCH
chmod +x /usr/local/bin/alfred-search
# ── 5. First-boot indexer script ──
cat > /usr/local/bin/alfred-index-docs << 'INDEX'
#!/bin/bash
# Index local documentation into Meilisearch
echo "Indexing local documentation..."
# Wait for Meilisearch
for i in {1..30}; do
curl -s http://localhost:7700/health | grep -q available && break
sleep 1
done
# Index man pages
DOCS='[]'
ID=0
for f in /usr/share/doc/*/README* /usr/share/doc/*/changelog*; do
[[ -f "$f" ]] || continue
CONTENT=$(head -c 5000 "$f" 2>/dev/null | tr -d '\0' | python3 -c "import sys,json; print(json.dumps(sys.stdin.read()))" 2>/dev/null)
[[ -z "$CONTENT" ]] && continue
DOCS=$(echo "$DOCS" | python3 -c "
import sys, json
docs = json.load(sys.stdin)
docs.append({'id': $ID, 'path': '$f', 'title': '$(basename "$(dirname "$f")")', 'content': $CONTENT})
print(json.dumps(docs))
" 2>/dev/null)
((ID++))
[[ $ID -ge 500 ]] && break
done
# Push to Meilisearch
echo "$DOCS" | curl -s -X POST "http://localhost:7700/indexes/docs/documents" \
-H "Content-Type: application/json" \
-d @- > /dev/null 2>&1
echo "Indexed $ID documents."
INDEX
chmod +x /usr/local/bin/alfred-index-docs
echo "[Alfred Linux v2.0-b5] Meilisearch installed and configured."