Compare commits
1 Commits
master
...
feat/agent
| Author | SHA1 | Date | |
|---|---|---|---|
| 882fe4aa3c |
@@ -1,3 +1,2 @@
|
||||
archive/
|
||||
scripts/
|
||||
secrets/
|
||||
|
||||
12
AGENTS.md
Normal file
12
AGENTS.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# AGENTS.md
|
||||
|
||||
Personal development conventions — applies to all projects unless overridden by a project-level AGENTS.md.
|
||||
|
||||
## Workflow
|
||||
|
||||
- New feature → clean branch from `origin/master` → push → PR on Gitea
|
||||
- Branch naming: `feat/description` (features), `fix/description` (bugs/docs/docs/chores)
|
||||
- Always branch from `origin/master`, never from another feature branch
|
||||
- PR title describes the change; body explains motivation + summary
|
||||
- After PR merge, delete the feature branch
|
||||
- Always validate before push (build, lint, test)
|
||||
53
Makefile
53
Makefile
@@ -1,40 +1,37 @@
|
||||
# Define list of directories you want to stow
|
||||
CONFIG_DIRS := btop doom hypr kitty exokortex nvim rclone starship tmux wallpapers waybar wireplumber wofi yazi zsh
|
||||
CONFIG_DIRS := btop doom hypr kitty nvim rclone starship tmux wallpapers waybar wireplumber wofi yazi zsh
|
||||
|
||||
# Default target for a fully-equipped workstation
|
||||
all: stow_all stow_rclone stow_exokortex
|
||||
all: stow_all
|
||||
wal -i ~/.config/wallpapers/green_yellow_forest.jpg -o ~/.config/waybar/launch.sh
|
||||
fastfetch
|
||||
neofetch
|
||||
|
||||
# Base configurations common to ALL hosts (excludes host-specific network/system automation)
|
||||
stow_all: $(filter-out rclone exokortex, $(CONFIG_DIRS))
|
||||
@echo "Removing legacy shell symlinks if they exist..."
|
||||
# Main target to handle stowing for all directories except rclone
|
||||
stow_all: $(filter-out rclone, $(CONFIG_DIRS))
|
||||
@echo "Cleaning broken symlinks in ~/.config..."
|
||||
find ~/.config -xtype l -delete -print
|
||||
@echo "Removing symlink ~/.zshrc if it exists..."
|
||||
@if [ -L $$HOME/.zshrc ]; then rm $$HOME/.zshrc; fi
|
||||
@echo "Removing symlink ~/.tmux.conf if it exists..."
|
||||
@if [ -L $$HOME/.tmux.conf ]; then rm $$HOME/.tmux.conf; fi
|
||||
@echo "Stowing baseline configurations..."
|
||||
@$(foreach dir,$(filter-out rclone exokortex, $(CONFIG_DIRS)), $(MAKE) stow_$(dir);)
|
||||
@echo "Stowing all configurations except rclone..."
|
||||
@$(foreach dir,$(filter-out rclone, $(CONFIG_DIRS)), $(MAKE) stow_$(dir);)
|
||||
|
||||
# Generic atomic stow command using Restow (-R) for clean tracking
|
||||
# Generic stow command for user-scoped directories
|
||||
stow_%:
|
||||
@echo "Stowing package: $*"
|
||||
stow -R -v -t $(HOME) $*
|
||||
@echo "Stowing $*"
|
||||
stow -v -t $(HOME) $*
|
||||
|
||||
# Dedicated target for rclone (Omit this target on hosts that don't need it)
|
||||
stow_rclone:
|
||||
@echo "Stowing rclone securely..."
|
||||
stow -R -v -t $(HOME) rclone
|
||||
# Post-installation script for rclone (executed after stowing)
|
||||
post_install_rclone:
|
||||
@echo "Running post-installation script for rclone"
|
||||
@bash $(CURDIR)/scripts/rclone_post_install.sh
|
||||
|
||||
# Dedicated target for exokortex (Omit this target on sterile servers if needed)
|
||||
stow_exokortex:
|
||||
@echo "Stowing exokortex automation layers..."
|
||||
stow -R -v -t $(HOME) exokortex
|
||||
@echo "Running post-installation script for exokortex"
|
||||
@bash $(CURDIR)/scripts/exokortex_post_install.sh
|
||||
|
||||
# Optional: Global cleanup target you only run manually when you want a deep system purge
|
||||
prune_dead_links:
|
||||
@echo "Purging all broken symlinks across core configuration profiles..."
|
||||
find ~/.config -xtype l -delete -print
|
||||
find ~/.local/bin -xtype l -delete -print
|
||||
# Special target for rclone to run post-install after stowing
|
||||
stow_rclone:
|
||||
@echo "Cleaning broken symlinks in ~/.config/rclone/..."
|
||||
find ~/.config/rclone/ -xtype l -delete -print
|
||||
@echo "Removing symlink ~/.local/bin/rclone_mount_check.sh if it exists..."
|
||||
@if [ -L $$HOME/.local/bin/rclone_mount_check.sh ]; then rm $$HOME/.local/bin/rclone_mount_check.sh; fi
|
||||
@echo "Stowing rclone"
|
||||
stow -v -t $(HOME) rclone
|
||||
@$(MAKE) post_install_rclone
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#? Config file for btop v.1.4.7
|
||||
#? Config file for btop v.1.4.6
|
||||
|
||||
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
|
||||
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
|
||||
@@ -14,11 +14,6 @@ truecolor = true
|
||||
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
|
||||
force_tty = false
|
||||
|
||||
#* Option to disable presets. Either the default preset, custom presets, or all presets.
|
||||
#* "Off" All presets are enabled.
|
||||
#* "Default" preset is disabled.#* "Custom" presets are disabled.#* "All" presets are disabled.
|
||||
disable_presets = "Off"
|
||||
|
||||
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
|
||||
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
|
||||
#* Use whitespace " " as separator between different presets.
|
||||
@@ -29,9 +24,6 @@ presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:defaul
|
||||
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
|
||||
vim_keys = true
|
||||
|
||||
#* Disable all mouse events.
|
||||
disable_mouse = false
|
||||
|
||||
#* Rounded corners on boxes, is ignored if TTY mode is ON.
|
||||
rounded_corners = true
|
||||
|
||||
@@ -100,9 +92,6 @@ proc_left = false
|
||||
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
|
||||
proc_filter_kernel = false
|
||||
|
||||
#* Should the process list follow the selected process when detailed view is open.
|
||||
proc_follow_detailed = true
|
||||
|
||||
#* In tree-view, always accumulate child process resources in the parent process.
|
||||
proc_aggregate = true
|
||||
|
||||
@@ -219,9 +208,6 @@ io_graph_combined = false
|
||||
#* Example: "/mnt/media:100 /:20 /boot:1".
|
||||
io_graph_speeds = ""
|
||||
|
||||
#* Swap the positions of the upload and download speed graphs. When true, upload will be on top.
|
||||
swap_upload_download = false
|
||||
|
||||
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
|
||||
net_download = 100
|
||||
|
||||
@@ -264,7 +250,7 @@ rsmi_measure_pcie_speeds = true
|
||||
#* Horizontally mirror the GPU graph.
|
||||
gpu_mirror_graph = true
|
||||
|
||||
#* Set which GPU vendors to show. Available values are "nvidia amd intel apple"
|
||||
#* Set which GPU vendors to show. Available values are "nvidia amd intel"
|
||||
shown_gpus = "nvidia amd intel"
|
||||
|
||||
#* Custom gpu0 model name, empty string to disable.
|
||||
|
||||
1
doom/.config/doom/.gitignore
vendored
1
doom/.config/doom/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
*.bak
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
Before Width: | Height: | Size: 5.4 KiB |
@@ -14,8 +14,6 @@
|
||||
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
|
||||
;; directory (for easy access to its source code).
|
||||
|
||||
(setq +literate-config-file "~/.config/doom/README.org")
|
||||
|
||||
(doom! :input
|
||||
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
|
||||
;;chinese
|
||||
@@ -33,7 +31,7 @@
|
||||
:ui
|
||||
;;deft ; notational velocity for Emacs
|
||||
doom ; what makes DOOM look the way it does
|
||||
dashboard ; a nifty splash screen for Emacs
|
||||
doom-dashboard ; a nifty splash screen for Emacs
|
||||
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
|
||||
(emoji +unicode) ; 🙂
|
||||
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
||||
@@ -70,7 +68,7 @@
|
||||
;;word-wrap ; soft wrapping with language-aware indent
|
||||
|
||||
:emacs
|
||||
(dired +dirvish +icons) ; making dired pretty [functional]
|
||||
(dired +dirvish + icons) ; making dired pretty [functional]
|
||||
electric ; smarter, keyword-based electric-indent
|
||||
eww ; the internet is gross
|
||||
|
||||
@@ -165,7 +163,7 @@
|
||||
+pretty
|
||||
+journal
|
||||
+present
|
||||
+roam
|
||||
+roam2
|
||||
+pandoc
|
||||
+noter)
|
||||
;;php ; perl's insecure younger brother
|
||||
@@ -203,11 +201,11 @@
|
||||
|
||||
:app
|
||||
calendar
|
||||
emms ; Multimedia system
|
||||
;;emms ; Multimedia system
|
||||
everywhere ; *leave* Emacs!? You must be joking
|
||||
irc ; how neckbeards socialize
|
||||
(rss +org +youtube) ; emacs as an RSS reader
|
||||
;;(rss +org) ; emacs as an RSS reader
|
||||
|
||||
:config
|
||||
literate
|
||||
;;literate
|
||||
(default +bindings +smartparens))
|
||||
|
||||
@@ -1,297 +0,0 @@
|
||||
;;; hermes-preview.el --- Preview & apply Emacs Lisp edits with inline diff overlays -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright (C) 2026 Thierry Pouplier
|
||||
;; Version: 0.1
|
||||
|
||||
;;; Commentary:
|
||||
;;
|
||||
;; Takes a list of Emacs Lisp command forms, executes each on a copy
|
||||
;; of the current buffer, diffs the result, and presents the diff as
|
||||
;; an inline overlay (green/red, +/- lines) on the original buffer.
|
||||
;;
|
||||
;; Each overlay has its own accept/reject commands — you can approve
|
||||
;; changes one by one. On accept, the exact same command is replayed
|
||||
;; on the real buffer, ensuring org timestamps, LOGBOOK entries,
|
||||
;; properties drawers etc. are formatted correctly.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'cl-lib)
|
||||
|
||||
(defvar hermes-preview-alist nil
|
||||
"List of active preview entries.
|
||||
Each element is (COMMAND BUFFER OVERLAY STATUS) where
|
||||
COMMAND — the Emacs Lisp form to execute
|
||||
BUFFER — the temp buffer holding the result
|
||||
OVERLAY — the overlay on the real buffer
|
||||
STATUS — 'pending, 'accepted, or 'rejected")
|
||||
|
||||
(defvar-keymap hermes-preview-actions-map
|
||||
:doc "Keymap for hermes preview overlays."
|
||||
"RET" #'hermes-preview-dispatch
|
||||
"C-c C-a" #'hermes-preview-accept
|
||||
"C-c C-k" #'hermes-preview-reject
|
||||
"C-c C-d" #'hermes-preview-diff
|
||||
"C-c C-n" #'hermes-preview-next
|
||||
"C-c C-p" #'hermes-preview-previous)
|
||||
|
||||
(defface hermes-preview-removed
|
||||
'((t (:inherit diff-removed)))
|
||||
"Face for removed lines in the preview overlay."
|
||||
:group 'hermes-preview)
|
||||
|
||||
(defface hermes-preview-added
|
||||
'((t (:inherit diff-added)))
|
||||
"Face for added lines in the preview overlay."
|
||||
:group 'hermes-preview)
|
||||
|
||||
;;;###autoload
|
||||
(defun hermes-preview-start (commands &optional file)
|
||||
"Execute COMMANDS (list of Emacs Lisp forms) as previews on FILE.
|
||||
Each command is run on a temp copy, diffed, and an inline overlay
|
||||
is placed on the real buffer showing the +/- diff in green/red.
|
||||
You can then accept or reject each overlay individually."
|
||||
(interactive)
|
||||
(let ((file (or file (buffer-file-name))))
|
||||
(unless file
|
||||
(user-error "Buffer is not visiting a file"))
|
||||
(unless (listp commands)
|
||||
(user-error "COMMANDS must be a list of Emacs Lisp forms"))
|
||||
(dolist (cmd commands)
|
||||
(hermes-preview--process-one cmd file))
|
||||
(hermes-preview--status-message)))
|
||||
|
||||
(defun hermes-preview--process-one (cmd file)
|
||||
"Preview a single COMMAND on FILE, creating an overlay."
|
||||
(let* ((orig-buf (current-buffer))
|
||||
(temp-buf (generate-new-buffer (format " *hermes-preview-%d*"
|
||||
(length hermes-preview-alist))))
|
||||
(cmd-str (prin1-to-string cmd))
|
||||
(ov nil))
|
||||
;; Copy file content to temp buffer
|
||||
(with-current-buffer temp-buf
|
||||
(insert-file-contents file)
|
||||
(delay-mode-hooks (funcall major-mode))
|
||||
(goto-char (point-min)))
|
||||
;; Execute command on temp buffer
|
||||
(condition-case err
|
||||
(with-current-buffer temp-buf
|
||||
(eval cmd t))
|
||||
(error
|
||||
(kill-buffer temp-buf)
|
||||
(display-warning '(hermes-preview)
|
||||
(format "Command failed: %s\n %s" cmd-str err))
|
||||
(cl-return-from hermes-preview--process-one nil)))
|
||||
;; Diff original vs temp
|
||||
(let* ((diff-buf (get-buffer-create " *hermes-preview-diff*"))
|
||||
(patch-text
|
||||
(with-current-buffer diff-buf
|
||||
(erase-buffer)
|
||||
(save-excursion
|
||||
(insert (shell-command-to-string
|
||||
(format "diff -u \"%s\" /dev/stdin <<< \"%s\""
|
||||
file
|
||||
(shell-quote-argument
|
||||
(with-current-buffer temp-buf
|
||||
(buffer-string)))))))
|
||||
(buffer-string))))
|
||||
;; Actually we need a proper diff between two buffers
|
||||
;; Let's use Emacs's diff-no-select
|
||||
(let ((diff-buf (diff-no-select orig-buf temp-buf nil t)))
|
||||
(with-current-buffer diff-buf
|
||||
;; Parse the hunks
|
||||
(goto-char (point-min))
|
||||
;; Find the first hunk
|
||||
(when (re-search-forward "^@@ -\\([0-9]+\\),\\([0-9]*\\) \\+\\([0-9]+\\),\\([0-9]*\\) @@" nil t)
|
||||
(let* ((orig-line (string-to-number (match-string 1)))
|
||||
(orig-count (string-to-number (or (match-string 2) "1")))
|
||||
(new-line (string-to-number (match-string 3)))
|
||||
(new-count (string-to-number (or (match-string 4) "1")))
|
||||
(ov-end (save-excursion
|
||||
(goto-char (point-min))
|
||||
(forward-line (1- orig-line))
|
||||
(if (zerop orig-count)
|
||||
(point)
|
||||
(forward-line orig-count)
|
||||
(point))))
|
||||
;; Build the diff display string
|
||||
(diff-lines (hermes-preview--parse-hunk diff-buf))
|
||||
(display-str (hermes-preview--diff-to-string diff-lines)))
|
||||
;; Create overlay on the real buffer
|
||||
(with-current-buffer orig-buf
|
||||
(save-excursion
|
||||
(goto-char (point-min))
|
||||
(forward-line (1- orig-line))
|
||||
(setq ov (make-overlay (point)
|
||||
(if (zerop orig-count)
|
||||
(point)
|
||||
(progn (forward-line orig-count)
|
||||
(point)))
|
||||
nil t nil)))
|
||||
;; If 0 lines removed, overlay at insertion point
|
||||
(when (and (zerop orig-count) (not (zerop new-count)))
|
||||
(move-overlay ov (1- (point)) (point)))
|
||||
;; Store data in overlay
|
||||
(overlay-put ov 'hermes-preview t)
|
||||
(overlay-put ov 'hermes-preview-cmd cmd)
|
||||
(overlay-put ov 'hermes-preview-temp-buf temp-buf)
|
||||
(overlay-put ov 'hermes-preview-diff-str display-str)
|
||||
(overlay-put ov 'hermes-preview-status 'pending)
|
||||
;; Face: grey out original text
|
||||
(overlay-put ov 'face '(:inherit shadow :strike-through t))
|
||||
;; Display the diff inline
|
||||
(overlay-put ov 'after-string
|
||||
(propertize (concat "\n" display-str "\n")
|
||||
'face '(:inherit default)))
|
||||
;; Keymap
|
||||
(overlay-put ov 'keymap hermes-preview-actions-map)
|
||||
;; Add to alist
|
||||
(push (list cmd temp-buf ov 'pending) hermes-preview-alist)))))))))
|
||||
|
||||
(defun hermes-preview--parse-hunk (diff-buf)
|
||||
"Parse diff hunks in DIFF-BUF into a list of (type . text) entries.
|
||||
TYPE is 'context, 'removed, or 'added."
|
||||
(let ((lines))
|
||||
(with-current-buffer diff-buf
|
||||
(goto-char (point-min))
|
||||
(while (not (eobp))
|
||||
(let ((line (buffer-substring-no-properties
|
||||
(point) (min (1+ (line-end-position)) (point-max)))))
|
||||
(cond ((string-match-p "^[-+][^-+]" line)
|
||||
(push (cons (if (eq (aref line 0) ?-) 'removed 'added)
|
||||
(substring line 1))
|
||||
lines))
|
||||
((string-match-p "^[ ]" line)
|
||||
(push (cons 'context (substring line 1)) lines))
|
||||
;; skip header lines
|
||||
(t nil)))
|
||||
(forward-line 1)))
|
||||
(nreverse lines)))
|
||||
|
||||
(defun hermes-preview--diff-to-string (lines)
|
||||
"Convert LINES (from `hermes-preview--parse-hunk') to a propertized string."
|
||||
(mapconcat
|
||||
(lambda (entry)
|
||||
(pcase (car entry)
|
||||
('removed (propertize (concat "- " (cdr entry)) 'face 'hermes-preview-removed))
|
||||
('added (propertize (concat "+ " (cdr entry)) 'face 'hermes-preview-added))
|
||||
('context (propertize (concat " " (cdr entry)) 'face '(:inherit shadow)))))
|
||||
lines "\n"))
|
||||
|
||||
(defun hermes-preview--status-message ()
|
||||
"Show how many pending previews there are."
|
||||
(let ((pending (cl-count-if (lambda (e) (eq (nth 3 e) 'pending)) hermes-preview-alist)))
|
||||
(message "%d preview(s) pending — RET to act, C-c C-n/p to navigate"
|
||||
pending)))
|
||||
|
||||
;;; Actions
|
||||
|
||||
(defun hermes-preview-overlay-at (&optional pt)
|
||||
"Get the hermes-preview overlay at PT (or point)."
|
||||
(let ((ov (car-safe (get-char-property-and-overlay
|
||||
(or pt (point)) 'hermes-preview))))
|
||||
(unless ov (user-error "No preview overlay at point"))
|
||||
ov))
|
||||
|
||||
(defun hermes-preview--entry-for-overlay (ov)
|
||||
"Find the preview entry for overlay OV."
|
||||
(cl-find-if (lambda (e) (eq (nth 2 e) ov)) hermes-preview-alist))
|
||||
|
||||
(defun hermes-preview-accept (ov)
|
||||
"Accept the preview at OV — replay command on the real file."
|
||||
(interactive (list (hermes-preview-overlay-at)))
|
||||
(when-let ((entry (hermes-preview--entry-for-overlay ov)))
|
||||
(let ((cmd (nth 0 entry))
|
||||
(temp-buf (nth 1 entry)))
|
||||
;; Replay the exact command on the real buffer
|
||||
(condition-case err
|
||||
(eval cmd t)
|
||||
(error (user-error "Accept failed: %s" err)))
|
||||
;; Clean up overlay
|
||||
(hermes-preview--cleanup ov)
|
||||
(setf (nth 3 entry) 'accepted)
|
||||
;; Also delete the temp buffer if 0 refs remain
|
||||
(hermes-preview--maybe-kill-temp temp-buf)
|
||||
(message "Preview accepted."))))
|
||||
|
||||
(defun hermes-preview-reject (ov)
|
||||
"Reject the preview at OV — discard change."
|
||||
(interactive (list (hermes-preview-overlay-at)))
|
||||
(when-let ((entry (hermes-preview--entry-for-overlay ov)))
|
||||
(let ((temp-buf (nth 1 entry)))
|
||||
(hermes-preview--cleanup ov)
|
||||
(setf (nth 3 entry) 'rejected)
|
||||
(hermes-preview--maybe-kill-temp temp-buf)
|
||||
(message "Preview rejected."))))
|
||||
|
||||
(defun hermes-preview-dispatch (ov)
|
||||
"Dispatch menu for a preview overlay."
|
||||
(interactive (list (hermes-preview-overlay-at)))
|
||||
(let ((action (read-char-choice
|
||||
(concat "Action: [a]ccept, [r]eject, [d]iff, [q]uit? ")
|
||||
'(?a ?r ?d ?q))))
|
||||
(pcase action
|
||||
(?a (hermes-preview-accept ov))
|
||||
(?r (hermes-preview-reject ov))
|
||||
(?d (hermes-preview-show-diff ov))
|
||||
(?q nil))))
|
||||
|
||||
(defun hermes-preview-show-diff (ov)
|
||||
"Show a proper unified diff buffer for OV."
|
||||
(interactive (list (hermes-preview-overlay-at)))
|
||||
(when-let ((entry (hermes-preview--entry-for-overlay ov)))
|
||||
(let* ((orig-buf (current-buffer))
|
||||
(temp-buf (nth 1 entry))
|
||||
(diff-buf (get-buffer-create "*hermes-preview-full-diff*")))
|
||||
(with-current-buffer diff-buf
|
||||
(erase-buffer)
|
||||
(diff-no-select orig-buf temp-buf nil nil diff-buf)
|
||||
(diff-mode))
|
||||
(display-buffer diff-buf))))
|
||||
|
||||
(defun hermes-preview-next ()
|
||||
"Move to the next pending preview."
|
||||
(interactive)
|
||||
(let ((pt (next-single-char-property-change (point) 'hermes-preview)))
|
||||
(if (get-char-property pt 'hermes-preview)
|
||||
(goto-char pt)
|
||||
(user-error "No next preview"))))
|
||||
|
||||
(defun hermes-preview-previous ()
|
||||
"Move to the previous pending preview."
|
||||
(interactive)
|
||||
(let ((pt (previous-single-char-property-change (point) 'hermes-preview)))
|
||||
(if (get-char-property (max (1- pt) (point-min)) 'hermes-preview)
|
||||
(goto-char (max (1- pt) (point-min)))
|
||||
(user-error "No previous preview"))))
|
||||
|
||||
;;; Cleanup
|
||||
|
||||
(defun hermes-preview--cleanup (ov)
|
||||
"Remove overlay OV and any display artifacts."
|
||||
(overlay-put ov 'after-string nil)
|
||||
(overlay-put ov 'face nil)
|
||||
(overlay-put ov 'hermes-preview nil)
|
||||
(delete-overlay ov))
|
||||
|
||||
(defun hermes-preview--maybe-kill-temp (buf)
|
||||
"Kill temp BUF if no other entry references it."
|
||||
(when (buffer-live-p buf)
|
||||
(unless (cl-find-if (lambda (e)
|
||||
(and (eq (nth 3 e) 'pending)
|
||||
(eq (nth 1 e) buf)))
|
||||
hermes-preview-alist)
|
||||
(kill-buffer buf))))
|
||||
|
||||
(defun hermes-preview-clear-all ()
|
||||
"Reject all pending previews and clean up."
|
||||
(interactive)
|
||||
(dolist (entry hermes-preview-alist)
|
||||
(when (eq (nth 3 entry) 'pending)
|
||||
(hermes-preview--cleanup (nth 2 entry))
|
||||
(hermes-preview--maybe-kill-temp (nth 1 entry))
|
||||
(setf (nth 3 entry) 'rejected)))
|
||||
(message "All previews cleared."))
|
||||
|
||||
(provide 'hermes-preview)
|
||||
;;; hermes-preview.el ends here
|
||||
@@ -7,16 +7,6 @@
|
||||
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
||||
;; (package! some-package)
|
||||
|
||||
;; Emacs = kirby
|
||||
;; (package! emacs-application-framework
|
||||
;; :recipe (:host github
|
||||
;; :repo "emacs-eaf/emacs-application-framework"
|
||||
;; :files ("*")
|
||||
;; ;; Automatically pull the browser and video-player modules during doom sync
|
||||
;; :post-build (shell-command "python3 install-eaf.py --install browser video-player")))
|
||||
(package! emskin
|
||||
:recipe (:host github :repo "emskin/emskin"))
|
||||
|
||||
;; pywal for emacs
|
||||
(package! ewal)
|
||||
|
||||
@@ -26,30 +16,6 @@
|
||||
;; Pointer highlight
|
||||
(package! beacon)
|
||||
|
||||
;; Centered view
|
||||
(package! olivetti)
|
||||
|
||||
;; The real gruvbox
|
||||
(package! gruvbox-theme)
|
||||
|
||||
;; token theme
|
||||
(package! token-theme
|
||||
:recipe (:host github :repo "ThorstenRhau/token"
|
||||
:protocol ssh
|
||||
:files ("contrib/emacs/*.el")))
|
||||
|
||||
;; vscode theme
|
||||
(package! vscode-dark-plus-theme)
|
||||
|
||||
;; tomorrow theme
|
||||
(package! color-theme-sanityinc-tomorrow)
|
||||
|
||||
;; Prot themes
|
||||
(package! ef-themes)
|
||||
|
||||
;; Colored parenthesis
|
||||
(package! rainbow-delimiters)
|
||||
|
||||
;; Weather in the agenda
|
||||
;; (package! weather-metno) ;; Not working.. :(
|
||||
|
||||
@@ -169,13 +135,11 @@
|
||||
(package! passage
|
||||
:recipe (:host github :repo "anticomputer/passage.el" :protocol ssh))
|
||||
|
||||
;; Server is down, deactivated for now
|
||||
;; (package! krl-mode
|
||||
;; :recipe (:host nil
|
||||
;; :repo "ssh://code.lazyworkhorse.net:2222/gortium/krl-mode.git"
|
||||
;; :files ("*.el")))
|
||||
(package! krl-mode
|
||||
:recipe (:local-repo "/home/tpouplier/ExoKortex/3-Resources/krl-mode"
|
||||
:files ("*.el")))
|
||||
|
||||
(package! auto-highlight-symbol)
|
||||
|
||||
@@ -224,6 +188,3 @@
|
||||
;; (unpin! pinned-package another-pinned-package)
|
||||
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
||||
;; (unpin! t)
|
||||
|
||||
;; Transmission BitTorrent client interface
|
||||
(package! transmission)
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
[Unit]
|
||||
Description=Automated ExoKortex PARA Node Git Sweep
|
||||
Documentation=https://github.com/gortium
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
ExecStart=%h/.local/bin/exokortex_auto_commit.sh
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
@@ -1,9 +0,0 @@
|
||||
[Unit]
|
||||
Description=Run Automated ExoKortex Sweep Hourly
|
||||
|
||||
[Timer]
|
||||
OnCalendar=hourly
|
||||
Persistent=true
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
@@ -1,37 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# ==============================================================================
|
||||
# PARA TARGET CONTROLS
|
||||
# Comment out (#) any directory to completely deactivate it from the sweep.
|
||||
# ==============================================================================
|
||||
TARGETS=(
|
||||
"$HOME/ExoKortex/1-Projects"
|
||||
"$HOME/ExoKortex/2-Areas"
|
||||
# "$HOME/ExoKortex/3-Resources"
|
||||
# "$HOME/ExoKortex/4-Archives/"
|
||||
)
|
||||
|
||||
# Protect against empty arrays if all targets get disabled
|
||||
if [ ${#TARGETS[@]} -eq 0 ]; then
|
||||
echo "Drop execution: No active PARA targets configured."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Root ExoKortex repo (root-level org files only; see ~/ExoKortex/.gitignore)
|
||||
if git -C "$HOME/ExoKortex" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
if [ -n "$(git -C "$HOME/ExoKortex" status --porcelain)" ]; then
|
||||
git -C "$HOME/ExoKortex" add -A
|
||||
git -C "$HOME/ExoKortex" commit -m "System: Automated background sweep $(date +'%Y-%m-%d %H:%M')"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Execute strict structural scanning on active paths only
|
||||
find "${TARGETS[@]}" -mindepth 2 -maxdepth 2 -type d -name ".git" | while read -r gitdir; do
|
||||
repo_dir=$(dirname "$gitdir")
|
||||
cd "$repo_dir"
|
||||
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
git add .
|
||||
git commit -m "System: Automated background sweep $(date +'%Y-%m-%d %H:%M')"
|
||||
fi
|
||||
done
|
||||
42
hypr/.config/hypr/hyprland.conf
Executable file → Normal file
42
hypr/.config/hypr/hyprland.conf
Executable file → Normal file
@@ -8,7 +8,6 @@
|
||||
# You can split this configuration into multiple files
|
||||
# Create your files separately and then link them to this file like this:
|
||||
# source = ~/.config/hypr/myColors.conf
|
||||
source = mocha.conf
|
||||
source = ~/.cache/wal/colors-hyprland.conf
|
||||
|
||||
################
|
||||
@@ -24,32 +23,22 @@ $EXTERNAL_R2=DP-7
|
||||
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||
# Useful command:
|
||||
# hyprctl monitors all
|
||||
|
||||
## Valkyrie setup
|
||||
# monitor=eDP-1,highres,auto,2 #3200x1800,0x0,2
|
||||
# monitor=HDMI-A-2,2560x1600,auto,1 #1600x0,1 #x-370,1,transform,1
|
||||
|
||||
## Ingenuity setup
|
||||
monitor=$LAPTOP, 1920x1080, 0x0, 1
|
||||
monitor=DP-3, 1920x1080, 1920x0, 1 # HDMI screen
|
||||
|
||||
# Horizontal setup
|
||||
#monitor=DP-4,1920x1080,-960x-1080,1 # Left screen
|
||||
#monitor=DP-6,1920x1080,-960x-1080,1 # Left screen
|
||||
#monitor=DP-5,1920x1080,960x-1080,1 # Right screen
|
||||
#monitor=DP-7,1920x1080,960x-1080,1 # Right screen
|
||||
|
||||
# Vertical setup
|
||||
# monitor=$EXTERNAL_L1, 1920x1080, 0x-1080, 1, transform, 0 # Left screen
|
||||
# monitor=$EXTERNAL_L2, 1920x1080,0x-1080,1,transform,0 # Left screen
|
||||
# monitor=$EXTERNAL_R1, 1920x1080, 1920x-1480, 1, transform, 1 # Right screen
|
||||
# monitor=$EXTERNAL_R2, 1920x1080,1920x-1480,1,transform,1 # Right screen
|
||||
|
||||
# Double Vertical setup
|
||||
monitor=$EXTERNAL_L1, 1920x1080, -1080x-1480, 1, transform, 3 # Left screen
|
||||
monitor=$EXTERNAL_L2, 1920x1080, -1080x-1480, 1, transform, 3 # Left screen
|
||||
monitor=$EXTERNAL_L1, 1920x1080, 0x-1080, 1, transform, 0 # Left screen
|
||||
monitor=$EXTERNAL_L2, 1920x1080,0x-1080,1,transform,0 # Left screen
|
||||
monitor=$EXTERNAL_R1, 1920x1080, 1920x-1480, 1, transform, 1 # Right screen
|
||||
monitor=$EXTERNAL_R2, 1920x1080, 1920x-1480, 1, transform, 1 # Right screen
|
||||
monitor=$EXTERNAL_R2, 1920x1080,1920x-1480,1,transform,1 # Right screen
|
||||
|
||||
###################
|
||||
### MY PROGRAMS ###
|
||||
@@ -74,17 +63,20 @@ $monitoring = kitty btop
|
||||
|
||||
# exec-once = $terminal
|
||||
# exec-once = nm-applet &
|
||||
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE
|
||||
exec = hyprshade auto
|
||||
exec-once = udiskie
|
||||
exec-once = waybar
|
||||
exec-once = swww-daemon
|
||||
exec-once = swww img ~/.config/wallpapers/green_yellow_forest.jpg --outputs $LAPTOP
|
||||
exec-once = swww img ~/.config/wallpapers/green_yellow_forest.jpg --outputs $EXTERNAL_L1
|
||||
exec-once = swww img ~/.config/wallpapers/green_yellow_forest.jpg --outputs $EXTERNAL_L2
|
||||
exec-once = swww img ~/.config/wallpapers/buck_head.jpg --outputs $EXTERNAL_R1
|
||||
exec-once = swww img ~/.config/wallpapers/buck_head.jpg --outputs $EXTERNAL_R2
|
||||
exec-once = swaync
|
||||
exec-once = hypridle
|
||||
exec-once = hyprlock
|
||||
exec-once = /usr/bin/emacs --daemon
|
||||
exec-once = swww-daemon
|
||||
exec-once = sleep 1 && swww img ~/.config/wallpapers/green_yellow_forest.jpg --outputs $LAPTOP,$EXTERNAL_L1,$EXTERNAL_L2
|
||||
exec-once = sleep 1 && swww img ~/.config/wallpapers/buck_head.jpg --outputs $EXTERNAL_R1,$EXTERNAL_R2
|
||||
exec-once = dbus-update-activation-environment --systemd HYPRLAND_INSTANCE_SIGNATURE
|
||||
|
||||
#############################
|
||||
### ENVIRONMENT VARIABLES ###
|
||||
@@ -155,8 +147,7 @@ animations {
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||
dwindle {
|
||||
# Note: pseudotile variable removed in 0.55+. Use `pseudo` dispatcher to toggle per-window.
|
||||
# Bound to $mainMod + P below.
|
||||
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
|
||||
# This prevents the layout from collapsing if you close one window
|
||||
preserve_split = true # You probably want this
|
||||
@@ -217,28 +208,25 @@ device {
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||
$mainMod = SUPER # Sets "Windows" key as main modifier
|
||||
$dotfiles = ~/ExoKortex/2-Areas/Home-Infra/4-Outputs/dotfiles
|
||||
|
||||
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||
bind = $mainMod, T, exec, $terminal
|
||||
bind = $mainMod, D, killactive,
|
||||
bind = $mainMod SHIFT, Q, exit,
|
||||
bind = $mainMod, U, exec, $dotfiles/scripts/make_all.sh && swww img ~/.config/wallpapers/green_yellow_forest.jpg --outputs $LAPTOP,$EXTERNAL_L1,$EXTERNAL_L2 && swww img ~/.config/wallpapers/buck_head.jpg --outputs $EXTERNAL_R1,$EXTERNAL_R2
|
||||
bind = $mainMod, U, exec, ~/ExoKortex/4-Automata/dotfiles/scripts/make_all.sh
|
||||
bind = $mainMod, M, exec, $monitoring
|
||||
bind = $mainMod, E, exec, $editor
|
||||
bind = $mainMod, V, togglefloating,
|
||||
bind = $mainMod, R, exec, $menu
|
||||
bind = $mainMod, Z, exec, $zen
|
||||
# togglesplit removed as standalone dispatcher in 0.55+; use `layoutmsg togglesplit` instead
|
||||
bind = $mainMod, P, pseudo, # dwindle
|
||||
#bind = $mainMod, P, pseudo, # dwindle
|
||||
bind = $mainMod, P, togglesplit, # dwindle
|
||||
bind = $mainMod, N, movecurrentworkspacetomonitor, -1
|
||||
bind = $mainMod SHIFT, N, movecurrentworkspacetomonitor, +1
|
||||
bind = $mainMod, X, swapwindow
|
||||
bind = $mainMod, B, exec, python $dotfiles/recordntrans/record_transcribe.py
|
||||
bind = $mainMod, i, exec, $dotfiles/scripts/scrot-ocr.sh
|
||||
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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
source = $HOME/.cache/wal/colors-hyprland.conf
|
||||
|
||||
general {
|
||||
# ignore_empty_input = true
|
||||
ignore_empty_input = true
|
||||
}
|
||||
|
||||
background {
|
||||
|
||||
8
hypr/.config/hypr/mocha.conf
Executable file → Normal file
8
hypr/.config/hypr/mocha.conf
Executable file → Normal file
@@ -76,11 +76,3 @@ $mantleAlpha = 181825
|
||||
|
||||
$crust = rgb(11111b)
|
||||
$crustAlpha = 11111b
|
||||
|
||||
# Fallback colors for when pywal hasn't generated colors-hyprland.conf
|
||||
# (sourced by hyprland.conf — $color1/$color2 for active border gradients,
|
||||
# $background for inactive border and general bg usage)
|
||||
$color1 = rgb(cba6f7)
|
||||
$color2 = rgb(f5c2e7)
|
||||
$color3 = rgb(89b4fa)
|
||||
$background = rgb(1e1e2e)
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
[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
|
||||
@@ -2,26 +2,14 @@
|
||||
Description=Mount Rclone FTP
|
||||
After=network-online.target network.target
|
||||
Wants=network-online.target
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
# Use Environment to explicitly set $HOME
|
||||
Environment=HOME=%h
|
||||
RestartSec=60
|
||||
ExecStartPre=%h/.local/bin/rclone_mount_check.sh
|
||||
ExecStartPre=-/bin/fusermount -uz %h/mnt/tdnde_server
|
||||
ExecStart=/usr/bin/rclone mount tdnde_ftp: %h/mnt/tdnde_server \
|
||||
--vfs-cache-mode full \
|
||||
--vfs-cache-max-size 4G \
|
||||
--vfs-read-chunk-size 4M \
|
||||
--vfs-read-chunk-size-limit 128M \
|
||||
--buffer-size 32M \
|
||||
--ftp-concurrency 20 \
|
||||
--timeout 300s \
|
||||
--contimeout 60s \
|
||||
--dir-cache-time 1h
|
||||
ExecStop=/bin/fusermount -uz %h/mnt/tdnde_server
|
||||
ExecStopPost=/bin/fusermount -uz %h/mnt/tdnde_server
|
||||
ExecStart=/usr/bin/rclone mount tdnde_ftp: %h/mnt/tdnde_server --vfs-cache-mode full --vfs-cache-max-size 1G --ftp-concurrency 20 --timeout 60s --contimeout 30s --dir-cache-time 1h
|
||||
ExecStop=/bin/fusermount -u %h/mnt/tdnde_server
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Define paths
|
||||
SWEEP_SCRIPT="$HOME/.local/bin/exokortex_auto_commit.sh"
|
||||
TIMER_FILE="$HOME/.config/systemd/user/exokortex_auto_commit.timer"
|
||||
|
||||
# Ensure the sweeper script is executable
|
||||
if [ -f "$SWEEP_SCRIPT" ] && [ ! -x "$SWEEP_SCRIPT" ]; then
|
||||
echo "Making the exokortex sweep script executable: $SWEEP_SCRIPT"
|
||||
chmod +x "$SWEEP_SCRIPT" || { echo "Failed to make the script executable"; exit 1; }
|
||||
else
|
||||
echo "Sweep script already executable or doesn't exist yet."
|
||||
fi
|
||||
|
||||
# Reload user systemd to recognize the new units
|
||||
systemctl --user daemon-reload
|
||||
|
||||
# Enable and start the timer if the configuration file is in place
|
||||
if [ -f "$TIMER_FILE" ]; then
|
||||
if ! systemctl --user is-enabled --quiet exokortex_auto_commit.timer; then
|
||||
echo "Enabling the exokortex_auto_commit timer."
|
||||
systemctl --user enable exokortex_auto_commit.timer || { echo "Failed to enable the timer"; exit 1; }
|
||||
else
|
||||
echo "Exokortex timer already enabled."
|
||||
fi
|
||||
else
|
||||
echo "Timer file does not exist at $TIMER_FILE."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Start the timer if it is not currently ticking
|
||||
if systemctl --user is-active --quiet exokortex_auto_commit.timer; then
|
||||
echo "exokortex_auto_commit timer is already running."
|
||||
else
|
||||
echo "Starting the exokortex_auto_commit timer."
|
||||
systemctl --user start exokortex_auto_commit.timer || echo "Warning: ExoKortex timer failed to start, skipping..."
|
||||
fi
|
||||
|
||||
echo "Post-installation steps for exokortex completed."
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/bin/bash
|
||||
cd ~/ExoKortex/2-Areas/Home-Infra/4-Outputs/dotfiles
|
||||
cd ~/ExoKortex/4-Automata/dotfiles/
|
||||
make all
|
||||
if [ $? -eq 0 ]; then
|
||||
notify-send "Dotfiles" "Configuration reloaded successfully!"
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/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
|
||||
@@ -33,7 +33,7 @@ if systemctl --user is-active --quiet rclone_ftp_mount.service; then
|
||||
echo "Rclone service is already running."
|
||||
else
|
||||
echo "Starting the rclone service."
|
||||
systemctl --user start rclone_ftp_mount.service || echo "Warning: Rclone service failed to start, skipping..."
|
||||
systemctl --user start rclone_ftp_mount.service || { echo "Failed to start the service"; exit 1; }
|
||||
fi
|
||||
|
||||
echo "Post-installation steps for rclone completed."
|
||||
echo "Post-installation steps for rclone completed successfully."
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/bash
|
||||
scrot-ocr: Select screen region → OCR → clipboard
|
||||
Deps: grim, slurp, tesseract, wl-clipboard, libnotify
|
||||
set -euo pipefail
|
||||
|
||||
LANG="${1:-eng}"
|
||||
IMG="/tmp/scrot-ocr-$(date +%s).png"
|
||||
|
||||
grim -g "$(slurp -d)" "$IMG"
|
||||
TEXT=$(tesseract "$IMG" stdout -l "$LANG" 2>/dev/null | sed '/^[[:space:]]*$/d')
|
||||
|
||||
echo -n "$TEXT" | wl-copy --paste-once
|
||||
echo "$TEXT"
|
||||
|
||||
notify-send "scrot-ocr" "$(echo "$TEXT" | wc -l) lines copied to clipboard" -t 3000
|
||||
rm -f "$IMG"
|
||||
@@ -1,5 +1,6 @@
|
||||
# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
|
||||
# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
|
||||
"$schema" = "https://yazi-rs.github.io/schemas/yazi.json"
|
||||
|
||||
[mgr]
|
||||
ratio = [ 1, 4, 3 ]
|
||||
@@ -60,7 +61,7 @@ play = [
|
||||
[open]
|
||||
rules = [
|
||||
# Folder
|
||||
{ url = "*/", use = [ "edit", "open", "reveal" ] },
|
||||
{ name = "*/", use = [ "edit", "open", "reveal" ] },
|
||||
# Text
|
||||
{ mime = "text/*", use = [ "edit", "reveal" ] },
|
||||
# Image
|
||||
@@ -75,7 +76,7 @@ rules = [
|
||||
# Empty file
|
||||
{ mime = "inode/empty", use = [ "edit", "reveal" ] },
|
||||
# Fallback
|
||||
{ url = "*", use = [ "open", "reveal" ] },
|
||||
{ name = "*", use = [ "open", "reveal" ] },
|
||||
]
|
||||
|
||||
[tasks]
|
||||
|
||||
45
zsh/.zshrc
45
zsh/.zshrc
@@ -19,43 +19,6 @@ alias emacs="emacsclient -c -a emacs"
|
||||
# Opencode
|
||||
alias oc="opencode"
|
||||
|
||||
# Hermes Agent - SSH directly to remote server
|
||||
hermes-rmt() {
|
||||
if [[ -n "$1" ]]; then
|
||||
ssh -t lazyworkhorse \
|
||||
"docker exec -e HERMES_HONCHO_PEER_NAME=$1 -it hermes \
|
||||
/opt/hermes/.venv/bin/hermes --profile $1"
|
||||
else
|
||||
ssh -t lazyworkhorse \
|
||||
"docker exec -e HERMES_HONCHO_PEER_NAME=thierry -it hermes \
|
||||
/opt/hermes/.venv/bin/hermes"
|
||||
fi
|
||||
}
|
||||
|
||||
hermes-rmt-cp() {
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Usage: hermes-cp <file_or_directory> [...]"
|
||||
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() {
|
||||
@@ -67,9 +30,6 @@ function yy() {
|
||||
rm -f -- "$tmp"
|
||||
}
|
||||
|
||||
# dua
|
||||
alias dua="dua i"
|
||||
|
||||
# Nvim
|
||||
export LANG=en_CA.UTF-8
|
||||
export LC_ALL=en_CA.UTF-8
|
||||
@@ -79,7 +39,7 @@ export EDITOR="nvim"
|
||||
source <(fzf --zsh)
|
||||
|
||||
# Capitalization fixing in tab completion
|
||||
autoload -Uz compinit && compinit -u
|
||||
autoload -Uz compinit && compinit
|
||||
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
|
||||
|
||||
# Bat
|
||||
@@ -168,6 +128,3 @@ export HYPRSHOT_DIR="Images"
|
||||
|
||||
# Created by `pipx` on 2026-03-03 16:51:31
|
||||
export PATH="$PATH:/home/tpouplier/.local/bin"
|
||||
|
||||
# autosuggestions
|
||||
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
|
||||
|
||||
Reference in New Issue
Block a user