ollie/justfile

361 lines
16 KiB
Makefile

# Ollie monorepo build system
#
# Two variants:
# just Default (KF6): core, 9p, acme, kde, httpgw, webui, emacs
# just kf5 KF5/Qt5 variant (Plasma 5.27)
#
# Build and install are separate phases. No sudo.
set dotenv-load := false
home := env_var('HOME')
cfg := home / ".config/ollie"
bin := home / "bin"
# === Default (KF6) path ===
default: build install
# === KF5 variant ===
kf5: build-kf5 install-kf5
# === Build targets ===
build: core ninep acme httpgw webui kde
build-kf5: core ninep acme httpgw webui kde-kf5
core:
@echo === Building ollie-core ===
cd core && go build ./...
ninep:
@echo === Building ollie-9p ===
cd 9p && go build -buildvcs=false -o {{bin}}/olliesrv .
cd 9p && go build -buildvcs=false -o {{bin}}/ollie-9p ./cmd/ollie-9p/
acme:
@echo === Building ollie-acme ===
cd acme && go build -o {{bin}}/Ollie .
install -m755 acme/scripts/Kmpl {{bin}}/Kmpl
install -m755 acme/scripts/Oi {{bin}}/Oi
install -m755 acme/scripts/Theo {{bin}}/Theo
httpgw:
@echo === Building ollie-httpgw ===
cd httpgw && go build -o {{bin}}/ollie-httpgw .
webui:
@echo === Building ollie-webui ===
cd webui && npm run build
ollie-remote:
@echo === Building ollie-remote ===
rm -rf remote/tools && cp -a tools remote/tools
cd remote && go build -buildvcs=false -o {{bin}}/ollie-remote .
kde:
@echo === Building kde tools ===
cd kde && cmake -B build-cmake -S . -DCMAKE_INSTALL_PREFIX=~/.local
cd kde && cmake --build build-cmake -j$(nproc)
kde-kf5:
@echo === Building kde tools \(KF5\) ===
cd kde && cmake -B build-kf5 -S . -DOLLIE_KF5=ON -DCMAKE_INSTALL_PREFIX=~/.local
cd kde && cmake --build build-kf5 -j$(nproc)
# === Install targets ===
install: test install-data install-scripts install-contrib install-kde install-el
install -m644 prompts/SYSTEM_PROMPT.md {{cfg}}/prompts/SYSTEM_PROMPT.md
install -m644 prompts/session-9p.md {{cfg}}/prompts/session.md
@echo === Install complete ===
@echo 'Restart Plasma to pick up KDE plugins.'
install-kf5: test install-data install-scripts install-contrib install-kde-kf5 install-el
install -m644 prompts/SYSTEM_PROMPT.md {{cfg}}/prompts/SYSTEM_PROMPT.md
install -m644 prompts/session-9p.md {{cfg}}/prompts/session.md
@echo === Install complete \(KF5\) ===
@echo 'Restart Plasma to pick up KDE plugins.'
install-kde:
@echo === Installing ollie-kde \(KF6\) ===
cmake --install kde/build-cmake
# Desktop file and icon
mkdir -p ~/.local/share/applications
install -m644 kde/gui/org.ollie.gui.desktop ~/.local/share/applications/
mkdir -p ~/.local/share/icons/hicolor/scalable/apps
install -m644 kde/gui/ollie.svg ~/.local/share/icons/hicolor/scalable/apps/ollie.svg
# Dolphin service menus + helper scripts
mkdir -p ~/.local/share/kio/servicemenus
install -m755 kde/dolphin/ollie-actions.desktop ~/.local/share/kio/servicemenus/
install -m755 kde/dolphin/ollie-ask ~/.local/bin/
install -m755 kde/dolphin/ollie-session-here ~/.local/bin/
# Plasma session environment
mkdir -p ~/.config/plasma-workspace/env
install -m755 kde/99-ollie.sh ~/.config/plasma-workspace/env/99-ollie.sh
# Finalize
kbuildsycoca6 --noincremental 2>/dev/null; true
kquitapp6 krunner 2>/dev/null; true
@echo === KDE install complete. Restart Plasma to pick up plugins. ===
install-kde-kf5:
@echo === Installing ollie-kde \(KF5\) ===
cmake --install kde/build-kf5
# Desktop file and icon
mkdir -p ~/.local/share/applications
install -m644 kde/gui/org.ollie.gui.desktop ~/.local/share/applications/
mkdir -p ~/.local/share/icons/hicolor/scalable/apps
install -m644 kde/gui/ollie.svg ~/.local/share/icons/hicolor/scalable/apps/ollie.svg
# Dolphin service menus + helper scripts
mkdir -p ~/.local/share/kio/servicemenus
install -m755 kde/dolphin/ollie-actions-kf5.desktop ~/.local/share/kio/servicemenus/ollie-actions.desktop
install -m755 kde/dolphin/ollie-ask ~/.local/bin/
install -m755 kde/dolphin/ollie-session-here ~/.local/bin/
# Plasma session environment
mkdir -p ~/.config/plasma-workspace/env
install -m755 kde/99-ollie-kf5.sh ~/.config/plasma-workspace/env/99-ollie.sh
# Finalize
kbuildsycoca5 --noincremental 2>/dev/null; true
kquitapp5 krunner 2>/dev/null; true
@echo === KDE KF5 install complete. Restart Plasma to pick up plugins. ===
install-el:
@echo === Installing ellie.el ===
mkdir -p ~/.config/emacs/ellie
install -m644 el/ellie.el ~/.config/emacs/ellie/ellie.el
install-data:
@echo === Installing data ===
# Agents
mkdir -p {{cfg}}/agents
install -m644 agents/copilot.json {{cfg}}/agents/copilot.json
install -m644 agents/default.json {{cfg}}/agents/default.json
install -m644 agents/explorer.json {{cfg}}/agents/explorer.json
install -m644 agents/librarian.json {{cfg}}/agents/librarian.json
install -m644 agents/navigator.json {{cfg}}/agents/navigator.json
install -m644 agents/driver.json {{cfg}}/agents/driver.json
install -m644 agents/README.md {{cfg}}/agents/README.md
install -m644 agents/taskmanager.json {{cfg}}/agents/taskmanager.json
install -m644 agents/theo.json {{cfg}}/agents/theo.json
# Prompts
mkdir -p {{cfg}}/prompts
mkdir -p {{cfg}}/memory
install -m644 prompts/agent-coding.md {{cfg}}/prompts/agent-coding.md
install -m644 prompts/agent-copilot.md {{cfg}}/prompts/agent-copilot.md
install -m644 prompts/agent-explorer.md {{cfg}}/prompts/agent-explorer.md
install -m644 prompts/agent-librarian.md {{cfg}}/prompts/agent-librarian.md
install -m644 prompts/agent-navigator.md {{cfg}}/prompts/agent-navigator.md
install -m644 prompts/agent-taskmanager.md {{cfg}}/prompts/agent-taskmanager.md
install -m644 prompts/agent-theo.md {{cfg}}/prompts/agent-theo.md
install -m644 prompts/SYSTEM_PROMPT.md {{cfg}}/prompts/SYSTEM_PROMPT.md
install -m644 prompts/SYSTEM_PROMPT_QWEN.md {{cfg}}/prompts/SYSTEM_PROMPT_QWEN.md
install -m644 prompts/session-9p.md {{cfg}}/prompts/session-9p.md
install -m644 prompts/session-dbus.md {{cfg}}/prompts/session-dbus.md
install -m644 prompts/tools-core.md {{cfg}}/prompts/tools-core.md
# Sandbox
mkdir -p {{cfg}}/sandbox
install -m644 sandbox/default.yaml {{cfg}}/sandbox/default.yaml
install -m644 sandbox/restricted.yaml {{cfg}}/sandbox/restricted.yaml
# Skills
mkdir -p {{cfg}}/skills/acme-api {{cfg}}/skills/agent-kb {{cfg}}/skills/denote \
{{cfg}}/skills/duckduckgo-search {{cfg}}/skills/github-cli {{cfg}}/skills/rc-shell \
{{cfg}}/skills/web-dev-browser-screencapture {{cfg}}/skills/write-skills
install -m644 skills/LICENSE.md {{cfg}}/skills/LICENSE.md
install -m644 skills/README.md {{cfg}}/skills/README.md
install -m644 skills/acme-api/SKILL.md {{cfg}}/skills/acme-api/SKILL.md
install -m644 skills/agent-kb/SKILL.md {{cfg}}/skills/agent-kb/SKILL.md
install -m644 skills/denote/SKILL.md {{cfg}}/skills/denote/SKILL.md
install -m644 skills/duckduckgo-search/SKILL.md {{cfg}}/skills/duckduckgo-search/SKILL.md
install -m644 skills/github-cli/SKILL.md {{cfg}}/skills/github-cli/SKILL.md
install -m644 skills/rc-shell/SKILL.md {{cfg}}/skills/rc-shell/SKILL.md
install -m644 skills/web-dev-browser-screencapture/SKILL.md {{cfg}}/skills/web-dev-browser-screencapture/SKILL.md
install -m644 skills/write-skills/SKILL.md {{cfg}}/skills/write-skills/SKILL.md
# Tools (executables)
mkdir -p {{cfg}}/tools/_lib/lsp/adapters
install -m755 tools/browser_screencap {{cfg}}/tools/browser_screencap
install -m755 tools/denote_view {{cfg}}/tools/denote_view
install -m755 tools/env {{cfg}}/tools/env
install -m755 tools/file_edit {{cfg}}/tools/file_edit
install -m755 tools/file_glob {{cfg}}/tools/file_glob
install -m755 tools/file_grep {{cfg}}/tools/file_grep
install -m755 tools/file_read {{cfg}}/tools/file_read
install -m755 tools/file_write {{cfg}}/tools/file_write
install -m755 tools/grep {{cfg}}/tools/grep
install -m755 tools/gui_accessibility {{cfg}}/tools/gui_accessibility
install -m755 tools/gui_activities {{cfg}}/tools/gui_activities
install -m755 tools/gui_apps {{cfg}}/tools/gui_apps
install -m755 tools/gui_brightness {{cfg}}/tools/gui_brightness
install -m755 tools/gui_clipboard {{cfg}}/tools/gui_clipboard
install -m755 tools/gui_files {{cfg}}/tools/gui_files
install -m755 tools/gui_input {{cfg}}/tools/gui_input
install -m755 tools/gui_media {{cfg}}/tools/gui_media
install -m755 tools/gui_notify {{cfg}}/tools/gui_notify
install -m755 tools/gui_screenshot {{cfg}}/tools/gui_screenshot
install -m755 tools/gui_shortcuts {{cfg}}/tools/gui_shortcuts
install -m755 tools/gui_windows {{cfg}}/tools/gui_windows
install -m755 tools/image_read {{cfg}}/tools/image_read
install -m755 tools/lsp_completion {{cfg}}/tools/lsp_completion
install -m755 tools/lsp_definition {{cfg}}/tools/lsp_definition
install -m755 tools/lsp_diagnostics {{cfg}}/tools/lsp_diagnostics
install -m755 tools/lsp_hover {{cfg}}/tools/lsp_hover
install -m755 tools/lsp_references {{cfg}}/tools/lsp_references
install -m755 tools/lsp_rename {{cfg}}/tools/lsp_rename
install -m755 tools/lsp_symbols {{cfg}}/tools/lsp_symbols
install -m755 tools/memory_recall {{cfg}}/tools/memory_recall
install -m755 tools/memory_remember {{cfg}}/tools/memory_remember
install -m755 tools/process_dismiss {{cfg}}/tools/process_dismiss
install -m755 tools/process_list {{cfg}}/tools/process_list
install -m755 tools/process_output {{cfg}}/tools/process_output
install -m755 tools/process_signal {{cfg}}/tools/process_signal
install -m755 tools/reasoning_think {{cfg}}/tools/reasoning_think
install -m755 tools/route {{cfg}}/tools/route
install -m755 tools/subagent_generate {{cfg}}/tools/subagent_generate
install -m755 tools/subagent_spawn {{cfg}}/tools/subagent_spawn
# Tools (library modules)
install -m644 tools/_lib/__init__.py {{cfg}}/tools/_lib/__init__.py
install -m644 tools/_lib/lsp/__init__.py {{cfg}}/tools/_lib/lsp/__init__.py
install -m644 tools/_lib/lsp/bridge.py {{cfg}}/tools/_lib/lsp/bridge.py
install -m644 tools/_lib/lsp/client.py {{cfg}}/tools/_lib/lsp/client.py
install -m644 tools/_lib/lsp/workspace.py {{cfg}}/tools/_lib/lsp/workspace.py
install -m644 tools/_lib/lsp/adapters/__init__.py {{cfg}}/tools/_lib/lsp/adapters/__init__.py
install -m644 tools/_lib/lsp/adapters/clangd.py {{cfg}}/tools/_lib/lsp/adapters/clangd.py
install -m644 tools/_lib/lsp/adapters/gopls.py {{cfg}}/tools/_lib/lsp/adapters/gopls.py
install -m644 tools/_lib/lsp/adapters/intelephense.py {{cfg}}/tools/_lib/lsp/adapters/intelephense.py
# Help
install -m644 doc/help.md {{cfg}}/help.md
install-scripts:
@echo === Installing scripts ===
mkdir -p {{cfg}}/scripts/s {{cfg}}/scripts/u {{cfg}}/scripts/x
install -m755 scripts/s/sh {{cfg}}/scripts/s/sh
install -m755 scripts/s/ls {{cfg}}/scripts/s/ls
install -m755 scripts/s/kill {{cfg}}/scripts/s/kill
install -m755 scripts/s/b {{cfg}}/scripts/s/b
install -m755 scripts/s/bfg {{cfg}}/scripts/s/bfg
install -m755 scripts/s/bbg {{cfg}}/scripts/s/bbg
install -m755 scripts/s/cleanup {{cfg}}/scripts/s/cleanup
install -m755 scripts/u/optimize {{cfg}}/scripts/u/optimize
install -m755 scripts/u/complete {{cfg}}/scripts/u/complete
install -m755 scripts/u/cascade {{cfg}}/scripts/u/cascade
install -m755 scripts/x/bd {{cfg}}/scripts/x/bd
install -m755 scripts/x/prime {{cfg}}/scripts/x/prime
install -m755 scripts/x/freeloader {{cfg}}/scripts/x/freeloader
install-autostart:
@echo === Installing autostart files ===
mkdir -p ~/.config/autostart
install -m644 services/xdg-autostart/org.ollie.olliesrv.desktop ~/.config/autostart/
install-systemd:
@echo === Installing systemd service ===
mkdir -p ~/.config/systemd/user
install -m644 services/systemd/ollie.service ~/.config/systemd/user/
install-contrib:
@echo === Installing contrib scripts ===
mkdir -p {{bin}}
install -m755 contrib/ollie-remount {{bin}}/ollie-remount
install -m755 scripts/s/ollie-watchdog {{bin}}/ollie-watchdog
# === Uninstall ===
uninstall:
@echo === Uninstalling ollie ===
rm -f {{bin}}/ollie-httpgw
rm -f {{bin}}/Ollie {{bin}}/Kmpl {{bin}}/Oi {{bin}}/Theo
rm -f {{bin}}/ollie-remount {{bin}}/ollie-watchdog
rm -rf {{cfg}}
# Service files
rm -f ~/.config/systemd/user/ollie.service
rm -f ~/.config/autostart/org.ollie.olliesrv.desktop
# KDE (KF6)
rm -f ~/.local/bin/ollie-tray ~/.local/bin/ollie-gui
rm -f ~/.local/bin/ollie-ask ~/.local/bin/ollie-session-here
rm -f ~/.local/share/applications/org.ollie.gui.desktop
rm -f ~/.local/share/icons/hicolor/scalable/apps/ollie.svg
rm -f ~/.local/lib64/qt6/plugins/kf6/krunner/krunner_ollie.so
rm -f ~/.local/lib64/qt6/plugins/ktexteditor/ollie_kate.so
rm -rf ~/.local/share/plasma/plasmoids/org.ollie.plasmoid
rm -rf ~/.local/lib64/qml/org/ollie
rm -f ~/.local/share/kio/servicemenus/ollie-actions.desktop
kquitapp6 krunner 2>/dev/null; true
# Emacs
rm -rf ~/.config/emacs/ellie
# Plasma env
rm -f ~/.config/plasma-workspace/env/99-ollie.sh
@echo === Uninstall complete ===
uninstall-kf5:
@echo === Uninstalling ollie \(KF5\) ===
rm -f {{bin}}/ollie-httpgw
rm -f {{bin}}/Ollie {{bin}}/Kmpl {{bin}}/Oi {{bin}}/Theo
rm -f {{bin}}/ollie-remount {{bin}}/ollie-watchdog
rm -rf {{cfg}}
# Service files
rm -f ~/.config/systemd/user/ollie.service
rm -f ~/.config/autostart/org.ollie.olliesrv.desktop
# KDE (KF5)
rm -f ~/.local/bin/ollie-tray ~/.local/bin/ollie-gui
rm -f ~/.local/bin/ollie-ask ~/.local/bin/ollie-session-here
rm -f ~/.local/share/applications/org.ollie.gui.desktop
rm -f ~/.local/share/icons/hicolor/scalable/apps/ollie.svg
rm -f ~/.local/share/kio/servicemenus/ollie-actions.desktop
rm -f ~/.local/lib/qt5/plugins/kf5/krunner/krunner_ollie.so
rm -f ~/.local/lib/qt5/plugins/ktexteditor/ollie_kate.so
rm -rf ~/.local/share/plasma/plasmoids/org.ollie.plasmoid
rm -f ~/.local/share/metainfo/org.ollie.plasmoid.appdata.xml
rm -rf ~/.local/lib/x86_64-linux-gnu/qml/org/ollie
kquitapp5 krunner 2>/dev/null; true
# Emacs
rm -rf ~/.config/emacs/ellie
# Plasma env
rm -f ~/.config/plasma-workspace/env/99-ollie.sh
@echo === Uninstall complete \(KF5\) ===
# === Test targets ===
test: test-core test-9p
test-core:
@echo === Testing ollie-core ===
cd core && go test ./...
test-9p:
@echo === Testing ollie-9p ===
cd 9p && go test ./...
test-remote:
@echo === Testing ollie-remote ===
cd remote && go build ./...
# === Clean ===
clean:
cd core && go clean ./... 2>/dev/null || true
rm -f {{bin}}/ollie-httpgw
rm -f {{bin}}/Ollie {{bin}}/Kmpl {{bin}}/Oi {{bin}}/Theo
rm -f {{bin}}/ollie-remote
rm -rf kde/build-cmake kde/build-kf5
# === Help ===
help:
@echo 'Ollie monorepo build targets:'
@echo ' just Build + install (default, KF6)'
@echo ' just kf5 Build + install (KF5/Qt5, Plasma 5.27)'
@echo ' just build Build only (KF6): core, 9p, acme, kde, httpgw, webui'
@echo ' just build-kf5 Build only (KF5): core, 9p, acme, kde-kf5, httpgw, webui'
@echo ' just install Install (KF6)'
@echo ' just install-kf5 Install (KF5)'
@echo ' just test Run all tests (core + 9p)'
@echo ' just test-core Run core tests'
@echo ' just test-9p Run 9p tests'
@echo ' just uninstall Remove all installed files (KF6)'
@echo ' just uninstall-kf5 Remove all installed files (KF5)'
@echo ' just clean Clean build artifacts'
@echo ''
@echo 'Individual: just core | ninep | acme | httpgw | webui | kde | kde-kf5 | ollie-remote'