diff --git a/Makefile b/Makefile index cc4073f..e7de0fa 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # Define list of directories you want to stow -CONFIG_DIRS := btop doom hypr kitty nvim rclone starship tmux wallpapers waybar wireplumber wofi yazi zsh +CONFIG_DIRS := btop doom hypr kitty local nvim rclone starship tmux wallpapers waybar wireplumber wofi yazi zsh all: stow_all wal -i ~/.config/wallpapers/green_yellow_forest.jpg -o ~/.config/waybar/launch.sh diff --git a/doom/.config/doom/README.org b/doom/.config/doom/README.org index 584784a..bc5f6be 100644 --- a/doom/.config/doom/README.org +++ b/doom/.config/doom/README.org @@ -112,7 +112,9 @@ My current workflow consist in having the 3-5 files I work on open in vertical s #+begin_src emacs-lisp (map! :leader (:prefix ("w" . "window") - :desc "Minimize window" "O" #'minimize-window)) + :desc "Minimize window" "O" #'minimize-window) + (:prefix ("z" . "Personal") + :desc "Hermes Agent" "h" #'gortium/hermes-vterm)) #+end_src ** Ultra-scroll @@ -1830,6 +1832,25 @@ Org-AI (org-ai-install-yasnippets)) ; if you are using yasnippet and want `ai` snippets #+end_src +** +Hermes Agent+ +Hermes Agent runs on lazyworkhorse server. Launched via SSH in a vterm buffer. + +#+begin_src emacs-lisp +(after! vterm + (defun gortium/hermes-vterm () + "Launch Hermes Agent in vterm via SSH to lazyworkhorse (CLI mode)." + (interactive) + (let ((buf (get-buffer-create "*hermes*"))) + (switch-to-buffer buf) + (unless (and (eq major-mode 'vterm-mode) + (get-buffer-process buf)) + (vterm-mode) + (let ((proc (get-buffer-process buf))) + (when proc + (process-send-string + proc "ssh -t lazyworkhorse 'docker exec -it hermes /opt/hermes/.venv/bin/hermes'\n"))))))) +#+end_src + * Tramp Remote connection to server inside emacs (with all my config) <3 diff --git a/doom/.config/doom/config.el b/doom/.config/doom/config.el index ee75e4d..64b3639 100644 --- a/doom/.config/doom/config.el +++ b/doom/.config/doom/config.el @@ -18,7 +18,9 @@ (map! :leader (:prefix ("w" . "window") - :desc "Minimize window" "O" #'minimize-window)) + :desc "Minimize window" "O" #'minimize-window) + (:prefix ("z" . "Personal") + :desc "Hermes Agent" "h" #'gortium/hermes-vterm)) (use-package! ultra-scroll :init @@ -1053,6 +1055,20 @@ DIFF: :desc "GPT generate commit" "g" #'gortium/magit-gptel-generate-commit) +(after! vterm + (defun gortium/hermes-vterm () + "Launch Hermes Agent in vterm via SSH to lazyworkhorse (CLI mode)." + (interactive) + (let ((buf (get-buffer-create "*hermes*"))) + (switch-to-buffer buf) + (unless (and (eq major-mode 'vterm-mode) + (get-buffer-process buf)) + (vterm-mode) + (let ((proc (get-buffer-process buf))) + (when proc + (process-send-string + proc "ssh -t lazyworkhorse 'docker exec -it hermes /opt/hermes/.venv/bin/hermes'\n"))))))) + ;; set `tramp-direct-async-process' locally in all ssh connections (connection-local-set-profile-variables 'remote-direct-async-process diff --git a/hypr/.config/hypr/hyprland.conf b/hypr/.config/hypr/hyprland.conf index c18446a..9982a2f 100644 --- a/hypr/.config/hypr/hyprland.conf +++ b/hypr/.config/hypr/hyprland.conf @@ -228,6 +228,7 @@ bind = $mainMod, X, swapwindow bind = $mainMod, B, exec, python /home/tpouplier/ExoKortex/4-Automata/recordntrans/record_transcribe.py # bind = $mainMod, G, exec, nerd-dictation end bind = $mainMod, A, exec, $music +bind = $mainMod, C, exec, emacsclient -n -c -e '(gortium/hermes-vterm)' # Full screen bind = SUPER, F, fullscreen diff --git a/local/.local/share/applications/qet-xephyr.desktop b/local/.local/share/applications/qet-xephyr.desktop new file mode 100644 index 0000000..bbdfadd --- /dev/null +++ b/local/.local/share/applications/qet-xephyr.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=QET (Xephyr) +Comment=QElectroTech in nested X server for Wayland compatibility +Exec=/home/tpouplier/ExoKortex/4-Automata/dotfiles/scripts/qet-xephyr.sh +Icon=qelectrotech +Type=Application +Categories=Graphics;Engineering; +Terminal=false diff --git a/scripts/qet-xephyr.sh b/scripts/qet-xephyr.sh new file mode 100755 index 0000000..e034534 --- /dev/null +++ b/scripts/qet-xephyr.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Launch QElectroTech in a nested Xephyr X server with Openbox +# Works around Wayland drag-and-drop issue in QET + +XEPHYR_PID="" + +cleanup() { + kill $XEPHYR_PID 2>/dev/null + exit 0 +} +trap cleanup SIGINT SIGTERM + +Xephyr -screen 1920x1080 :1 -title QET -br & +XEPHYR_PID=$! + +sleep 1 +DISPLAY=:1 openbox & +sleep 0.5 +DISPLAY=:1 qelectrotech & + +wait $XEPHYR_PID diff --git a/zsh/.zshrc b/zsh/.zshrc index 742eaeb..23bd7c6 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -19,6 +19,33 @@ alias emacs="emacsclient -c -a emacs" # Opencode alias oc="opencode" +# Hermes Agent - SSH directly to remote server +alias hermes="ssh -t lazyworkhorse 'docker exec -it hermes /opt/hermes/.venv/bin/hermes'" + +hermes-cp() { + if [ $# -eq 0 ]; then + echo "Usage: hermes-cp [...]" + echo "" + echo "Copies files/directories from your Arch laptop into the Hermes" + echo "agent container at /opt/data/home/ preserving directory structure." + echo "" + echo "Examples:" + echo " hermes-cp document.pdf # single file" + echo " hermes-cp *.pdf # multiple files (glob)" + echo " hermes-cp manuals/ # whole directory" + echo " hermes-cp manuals/ keyence-docs/ # multiple items" + echo "" + echo "To copy to a different destination inside the container:" + echo " tar -czf - . | ssh gortium@lazyworkhorse \\" + echo " \"docker exec -i hermes sh -c 'cd /opt/data/projects && tar -xzf -'\"" + return 1 + fi + # tar everything into a single SSH pipe, extract inside container + # Supports: single files, directories, glob patterns, mixed args + tar -czf - "$@" | ssh gortium@lazyworkhorse \ + "docker exec -i hermes sh -c 'cd /opt/data/home && tar -xzf -'" +} + # Yazi alias y="yazi" function yy() {