1 Commits

Author SHA1 Message Date
75df6d502a split hyprland config: common + per-host monitors 2026-06-14 19:37:35 -04:00
23 changed files with 712 additions and 4408 deletions

View File

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

View File

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

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

View File

@@ -0,0 +1,48 @@
# Laptop (Ingenuity/Valkyrie) — NVIDIA + external monitors
################
### MONITORS ###
################
$LAPTOP=eDP-1
$EXTERNAL_L1=DP-4
$EXTERNAL_R1=DP-5
$EXTERNAL_L2=DP-6
$EXTERNAL_R2=DP-7
monitor=$LAPTOP, 1920x1080, 0x0, 1
monitor=DP-3, 1920x1080, 1920x0, 1
monitor=$EXTERNAL_L1, 1920x1080, 0x-1080, 1, transform, 0
monitor=$EXTERNAL_L2, 1920x1080,0x-1080,1,transform,0
monitor=$EXTERNAL_R1, 1920x1080, 1920x-1480, 1, transform, 1
monitor=$EXTERNAL_R2, 1920x1080,1920x-1480,1,transform,1
#############################
### ENVIRONMENT VARIABLES ###
#############################
env = LIBVA_DRIVER_NAME,nvidia
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
env = WLR_NO_HARDWARE_CURSOR,1
env = GBM_BACKEND,nvidia-drm
env = WLR_RENDERER_ALLOW_SOFTWARE,1
####################
### WORKSPACES ###
####################
workspace = 1, name:short-1, monitor:DP-4
workspace = 2, name:short-2, monitor:DP-4
workspace = 3, name:long-1, monitor:DP-5
workspace = 4, name:long-2, monitor:DP-5
workspace = 5, name:smoll, monitor:eDP-1
workspace = special:tools, layout:dwindle, gapsin:0
### WALLPAPER ###
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

View File

@@ -0,0 +1,27 @@
# uConsole CM5 — DSI display
################
### MONITORS ###
################
monitor=DSI-2, 720x1280, 0x0, 1
#############################
### ENVIRONMENT VARIABLES ###
#############################
env = WLR_NO_HARDWARE_CURSOR,1
####################
### WORKSPACES ###
####################
workspace = 1, name:short-1, monitor:DSI-2
workspace = 2, name:short-2, monitor:DSI-2
workspace = 3, name:long-1, monitor:DSI-2
####################
### AUTOSTART ###
####################
exec-once = swww img ~/.config/wallpapers/green_yellow_forest.jpg --outputs DSI-2

View File

@@ -1,59 +1,14 @@
# This is an example Hyprland config file.
# Refer to the wiki for more information.
# https://wiki.hyprland.org/Configuring/Configuring-Hyprland/
# Common Hyprland configuration — shared across all hosts
# Host-specific settings (monitors, env, workspaces) in host/monitors.conf
# Please note not all available settings / options are set here.
# For a full list, see the wiki
# 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
################
### MONITORS ###
################
$LAPTOP=eDP-1
$EXTERNAL_L1=DP-4
$EXTERNAL_R1=DP-5
$EXTERNAL_L2=DP-6
$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 (left horizontal, right vertical)
# monitor=desc:Dell Inc. DELL SE2725H BML2X14, 1920x1080, 0x-1080, 1, transform, 0 # Left screen (horizontal)
# monitor=desc:Dell Inc. DELL SE2725H 34R2X14, 1920x1080, 1920x-1480, 1, transform, 1 # Right screen (vertical)
# Double Vertical setup
monitor=desc:Dell Inc. DELL SE2725H BML2X14, 1920x1080, -1080x-1480, 1, transform, 3 # Left screen (vertical)
monitor=desc:Dell Inc. DELL SE2725H 34R2X14, 1920x1080, 1920x-1480, 1, transform, 1 # Right screen (vertical)
source = host/monitors.conf
###################
### MY PROGRAMS ###
###################
# See https://wiki.hyprland.org/Configuring/Keywords/
# Set programs that you use
$terminal = kitty
$editor = emacsclient -c -a emacs
$menu = wofi --show drun
@@ -65,81 +20,48 @@ $monitoring = kitty btop
### AUTOSTART ###
#################
# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:
# 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 = 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 ###
#############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
env = LIBVA_DRIVER_NAME,nvidia
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
env = WLR_NO_HARDWARE_CURSOR,1
env = XDG_SESSION_TYPE,wayland
env = GBM_BACKEND,nvidia-drm
env = WLR_RENDERER_ALLOW_SOFTWARE,1
#####################
### LOOK AND FEEL ###
#####################
# Refer to https://wiki.hyprland.org/Configuring/Variables/
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 7.5
gaps_out = 15
border_size = 2
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = $color1 $color1 $color2 45deg
col.inactive_border = $background
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
layout = dwindle
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 4
# Change transparency of focused and unfocused windows
active_opacity = 0.9
inactive_opacity = 0.75
}
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
enabled = true
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 1.6, myBezier
animation = windowsOut, 1, 1.6, default, popin 80%
animation = border, 1, 1.6, default
@@ -149,59 +71,37 @@ animations {
animation = specialWorkspace, 1, 1.6, myBezier, slidefadevert -10%
}
# 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.
# This prevents the layout from collapsing if you close one window
preserve_split = true # You probably want this
# 0 -> follow mouse, 1 -> always left/top, 2 -> always right/bottom
preserve_split = true
force_split = 2
}
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
new_status = master
}
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
force_default_wallpaper = 0
disable_hyprland_logo = true
}
#############
### INPUT ###
#############
# https://wiki.hyprland.org/Configuring/Variables/#input
input {
kb_layout = us,ca #,halmak
kb_layout = us,ca
kb_options = grp:win_space_toggle, ctrl:nocaps
# kb_variant =
# kb_model =
# kb_rules =
follow_mouse = 1
sensitivity = 0.5 # -1.0 - 1.0, 0 means no modification.
sensitivity = 0.5
touchpad {
natural_scroll = true
disable_while_typing = true
}
}
# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
# workspace_swipe = false
}
gestures {}
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device {
name = epic-mouse-v1
sensitivity = -0.5
@@ -211,73 +111,54 @@ device {
### KEYBINDINGS ###
###################
# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier
$dotfiles = ~/ExoKortex/2-Areas/Home-Infra/4-Outputs/dotfiles
$mainMod = SUPER
# 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,
# Restart compositor (fixes MST dock screens stuck black after hotplug) — wrapper respawns
bind = $mainMod SHIFT, R, exec, pkill -f '^Hyprland'
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,
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, G, exec, nerd-dictation end
bind = $mainMod, B, exec, python /home/tpouplier/ExoKortex/4-Automata/recordntrans/record_transcribe.py
bind = $mainMod, A, exec, $music
bind = $mainMod, C, exec, emacsclient -n -c -e '(gortium/hermes-vterm)'
# Full screen
bind = SUPER, F, fullscreen
# Screenshot
bind = , PRINT, exec, hyprshot -m output
bind = $mainMod, PRINT, exec, hyprshot -m window
bind = shift, PRINT, exec, hyprshot -m region
# hyprlock
bind = $mainMod, o, exec, hyprlock
# Move focus with mainMod + arrow keys
bind = $mainMod, h, movefocus, l
bind = $mainMod, j, movefocus, d
bind = $mainMod, k, movefocus, u
bind = $mainMod, l, movefocus, r
# Forward and reverse cycle (to focus floating)
bind = $mainMod, Tab, cyclenext
bind = $mainMod SHIFT, Tab, cyclenext, prev
# Resize windows
bind = $mainMod CTRL, l, resizeactive, 20 0
bind = $mainMod CTRL, h, resizeactive, -20 0
bind = $mainMod CTRL, k, resizeactive, 0 -20
bind = $mainMod CTRL, j, resizeactive, 0 20
# Swap window position
bind = $mainMod SHIFT, h, swapwindow, l
bind = $mainMod SHIFT, j, swapwindow, d
bind = $mainMod SHIFT, k, swapwindow, u
bind = $mainMod SHIFT, l, swapwindow, r
# Move floating window
bind = $mainMod SHIFT, l, moveactive, 100 0
bind = $mainMod SHIFT, h, moveactive, -100 0
bind = $mainMod SHIFT, k, moveactive, 0 -100
bind = $mainMod SHIFT, j, moveactive, 0 100
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
@@ -289,7 +170,6 @@ bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
@@ -301,19 +181,15 @@ bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Example special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, tools
bind = $mainMod SHIFT, S, movetoworkspace, special:tools
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# Laptop multimedia keys for volume and LCD brightness
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
@@ -321,13 +197,11 @@ bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%-
# Requires playerctl
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
# Emacs-everywhere
bind = $mainMod, W, exec, emacsclient --eval '(thanos/type)'
windowrule {
name = float-emacs
@@ -335,45 +209,16 @@ windowrule {
float = true
}
# Play/Pause
# bind = $mainMod, P, exec, playerctl play-pause
# Next Track
# bind = $mainmod SHIFT, L, exec, playerctl next
# Previous Track
# bind = $mainmod SHIFT, H, exec, playerctl previous
# Volume Up (player volume)
# bind = $mainmod , U, exec, playerctl volume 0.05+
# Volume Down (player volume)
# bind = $mainmod, D, exec, playerctl volume 0.05-
# Stop Playback
# bind = $mainmod, S, exec, playerctl stop
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrule = float,class:^(kitty)$,title:^(kitty)$
# Ignore maximize requests from apps. You'll probably like this.
windowrule {
name = suppress-maximize-events
match:class = .*
suppress_event = maximize
}
# Fix some dragging issues with XWayland
windowrule {
name = nofocus-xwayland-float
match:class = ^$
@@ -385,15 +230,7 @@ windowrule {
no_focus = true
}
workspace = 1, name:short-1, monitor:DP-4 # Left screen
workspace = 2, name:short-2, monitor:DP-4 # Left screen
workspace = 3, name:long-1, monitor:DP-5 # Right screen
workspace = 4, name:long-2, monitor:DP-5 # Right screen
workspace = 5, name:smoll, monitor:eDP-1 # Laptop screen
#workspace = 4, name:windows, monitor:DP-4, on-created-empty:VBoxManage startvm "Windows 11"
workspace = special:tools, layout:dwindle, gapsin:0
# Top Left: btop
# Dashboard windows for special workspace
windowrule {
name = dashboard-btop
match:class = ^(btop)$
@@ -401,7 +238,6 @@ windowrule {
workspace = special:tools
}
# Top Right: ncspot
windowrule {
name = dashboard-ncspot
match:class = ^(ncspot)$
@@ -409,7 +245,6 @@ windowrule {
workspace = special:tools
}
# Bottom Left: ncpamixer
windowrule {
name = dashboard-ncpamixer
match:class = ^(ncpamixer)$
@@ -417,7 +252,6 @@ windowrule {
workspace = special:tools
}
# Bottom Right: bluetuith
windowrule {
name = dashboard-bluetuith
match:class = ^(bluetuith)$
@@ -425,7 +259,6 @@ windowrule {
workspace = special:tools
}
# Bind to launch the suite (Run this once)
bind = $mainMod, grave, exec, kitty --class btop btop
bind = $mainMod, grave, exec, kitty --class ncspot ncspot
bind = $mainMod, grave, exec, kitty --class ncpamixer ncpamixer

View File

@@ -1,7 +1,7 @@
source = $HOME/.cache/wal/colors-hyprland.conf
general {
# ignore_empty_input = true
ignore_empty_input = true
}
background {

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

@@ -60,7 +60,7 @@ play = [
[open]
rules = [
# Folder
{ url = "*/", use = [ "edit", "open", "reveal" ] },
{ name = "*/", use = [ "edit", "open", "reveal" ] },
# Text
{ mime = "text/*", use = [ "edit", "reveal" ] },
# Image
@@ -75,7 +75,7 @@ rules = [
# Empty file
{ mime = "inode/empty", use = [ "edit", "reveal" ] },
# Fallback
{ url = "*", use = [ "open", "reveal" ] },
{ name = "*", use = [ "open", "reveal" ] },
]
[tasks]

View File

@@ -20,7 +20,7 @@ alias emacs="emacsclient -c -a emacs"
alias oc="opencode"
# Hermes Agent - SSH directly to remote server
hermes-rmt() {
hermes() {
if [[ -n "$1" ]]; then
ssh -t lazyworkhorse \
"docker exec -e HERMES_HONCHO_PEER_NAME=$1 -it hermes \
@@ -32,7 +32,7 @@ hermes-rmt() {
fi
}
hermes-rmt-cp() {
hermes-cp() {
if [ $# -eq 0 ]; then
echo "Usage: hermes-cp <file_or_directory> [...]"
echo ""
@@ -67,9 +67,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 +76,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 +165,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