2 Commits

Author SHA1 Message Date
bd57909664 feat: add proper local stow package targets to Makefile
- Add STOW_LOCAL_DIR variable explicitly defining the local package
- Add dedicated stow_local target with cleanup (follows rclone pattern)
- Add .PHONY declaration for all targets
- Add clean target for unstowing all packages
2026-05-20 14:31:04 -04:00
44c9b11c9d feat: add disk-monitor daemon autostart to Hyprland config 2026-05-20 14:29:07 -04:00
24 changed files with 654 additions and 3983 deletions

View File

@@ -1,3 +1,2 @@
archive/
scripts/
secrets/

View File

@@ -1,40 +1,57 @@
# 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 local nvim rclone starship tmux wallpapers waybar wireplumber wofi yazi zsh
# Default target for a fully-equipped workstation
all: stow_all stow_rclone stow_exokortex
# Local stow package directory (installed to ~/.local)
STOW_LOCAL_DIR := local
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..."
.PHONY: all stow_all stow_local stow_rclone post_install_rclone clean
# 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
# Special target for the local stow package
stow_local:
@echo "Cleaning broken symlinks in ~/.local/share/applications..."
find ~/.local/share/applications -xtype l -delete -print
@echo "Stowing local package"
stow -v -t $(HOME) $(STOW_LOCAL_DIR)
# 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
# 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
# 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
# Unstow all packages
clean:
@echo "Unstowing all packages..."
@for dir in $(CONFIG_DIRS); do \
echo "Unstowing $$dir..."; \
stow -v -D -t $(HOME) $$dir 2>/dev/null || true; \
done

View File

@@ -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.

View File

@@ -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

View File

@@ -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))

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -1,9 +0,0 @@
[Unit]
Description=Run Automated ExoKortex Sweep Hourly
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.target

View File

@@ -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

35
hypr/.config/hypr/hyprland.conf Executable file → Normal file
View 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,21 @@ $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
exec-once = $HOME/.config/waybar/scripts/disk-monitor.sh --daemon
#############################
### ENVIRONMENT VARIABLES ###
@@ -217,13 +210,12 @@ 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,
@@ -234,8 +226,7 @@ bind = $mainMod, P, pseudo, # 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)'

View File

@@ -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
View 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)

View File

@@ -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]

View File

@@ -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."

View File

@@ -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!"

View File

@@ -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."

View File

@@ -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"

View File

@@ -213,6 +213,28 @@ tooltip label {
}
/* custom modules */
#custom-disk-monitor {
margin: 0px 0px 0px 5px;
padding: 1px 8px 0px 8px;
font-size: 16px;
color: @text;
border-radius: 5px;
background-color: @set;
}
#custom-disk-monitor.warning {
background-color: #ff9a3c;
color: #FFFFFF;
}
#custom-disk-monitor.critical {
background-color: #dc2f2f;
color: #FFFFFF;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#custom-exit {
margin: 0px 18px 0px 5px;
padding: 0px;

View File

@@ -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]

View File

@@ -20,19 +20,9 @@ alias emacs="emacsclient -c -a emacs"
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
}
alias hermes="ssh -t lazyworkhorse 'docker exec -it hermes /opt/hermes/.venv/bin/hermes'"
hermes-rmt-cp() {
hermes-cp() {
if [ $# -eq 0 ]; then
echo "Usage: hermes-cp <file_or_directory> [...]"
echo ""
@@ -67,9 +57,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 +66,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 +155,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