Bunch of changes

This commit is contained in:
2026-01-24 00:43:32 +00:00
parent 9fafe74378
commit 504bdc17f3
11 changed files with 223 additions and 122 deletions

View File

@@ -1,6 +1,6 @@
alias l ls -la alias l ls -la
alias ss sudo-switch alias ss sudo-switch
alias pr project-root alias pr project-root $1
alias gt goto alias gt goto
alias gs magit-status alias gs magit-status
alias fw find-file-other-window $1 alias fw find-file-other-window $1

View File

@@ -1,6 +1,9 @@
00527 Wed Sep 3 17:15:36 2025 Aryadev Chavali <aryadev@aryadevchavali.com> 00527 Wed Sep 3 17:15:36 2025 Aryadev Chavali <aryadev@aryadevchavali.com>
00458 Tue Oct 1 18:22:44 2024 Aryadev Chavali <aryadev@aryadevchavali.com> 00458 Tue Oct 1 18:22:44 2024 Aryadev Chavali <aryadev@aryadevchavali.com>
00424 Tue Oct 1 14:20:22 2024 Aryadev Chavali <aryadev@aryadevchavali.com> 00424 Tue Oct 1 14:20:22 2024 Aryadev Chavali <aryadev@aryadevchavali.com>
00382 Sat Jan 24 00:41:28 2026 Aryadev Chavali <aryadev@aryadevchavali.com>
00381 Tue Dec 9 01:41:15 2025 Aryadev Chavali <aryadev@aryadevchavali.com>
00364 Sat Jan 24 00:38:27 2026 Aryadev Chavali <aryadev@aryadevchavali.com>
00288 Sun Jun 1 14:24:57 2025 Aryadev Chavali <aryadev@aryadevchavali.com> 00288 Sun Jun 1 14:24:57 2025 Aryadev Chavali <aryadev@aryadevchavali.com>
00281 Thu Jul 13 03:07:51 2023 Aryadev Chavali <aryadev@aryadevchavali.com> 00281 Thu Jul 13 03:07:51 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00267 Fri Aug 16 10:54:52 2024 Aryadev Chavali <aryadev@aryadevchavali.com> 00267 Fri Aug 16 10:54:52 2024 Aryadev Chavali <aryadev@aryadevchavali.com>
@@ -11,8 +14,8 @@
00204 Wed Dec 28 14:50:42 2022 Aryadev Chavali <aryadev@aryadevchavali.com> 00204 Wed Dec 28 14:50:42 2022 Aryadev Chavali <aryadev@aryadevchavali.com>
00187 Thu Jan 12 01:30:09 2023 Aryadev Chavali <aryadev@aryadevchavali.com> 00187 Thu Jan 12 01:30:09 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00172 Mon Jan 9 12:59:13 2023 Aryadev Chavali <aryadev@aryadevchavali.com> 00172 Mon Jan 9 12:59:13 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00166 Fri Aug 16 11:05:23 2024 Aryadev Chavali <aryadev@aryadevchavali.com>
00166 Mon May 6 02:40:23 2024 Aryadev Chavali <aryadev@aryadevchavali.com> 00166 Mon May 6 02:40:23 2024 Aryadev Chavali <aryadev@aryadevchavali.com>
00166 Fri Aug 16 11:05:23 2024 Aryadev Chavali <aryadev@aryadevchavali.com>
00154 Sat Jul 26 18:43:42 2025 Aryadev Chavali <aryadev@aryadevchavali.com> 00154 Sat Jul 26 18:43:42 2025 Aryadev Chavali <aryadev@aryadevchavali.com>
00120 Thu Aug 29 18:45:32 2024 Aryadev Chavali <aryadev@aryadevchavali.com> 00120 Thu Aug 29 18:45:32 2024 Aryadev Chavali <aryadev@aryadevchavali.com>
00114 Fri Jul 21 11:58:31 2023 Aryadev Chavali <aryadev@aryadevchavali.com> 00114 Fri Jul 21 11:58:31 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
@@ -29,12 +32,12 @@
00048 Sun May 5 19:34:16 2024 Aryadev Chavali <aryadev@aryadevchavali.com> 00048 Sun May 5 19:34:16 2024 Aryadev Chavali <aryadev@aryadevchavali.com>
00046 Wed Oct 12 11:27:19 2022 Aryadev Chavali <aryadev@aryadevchavali.com> 00046 Wed Oct 12 11:27:19 2022 Aryadev Chavali <aryadev@aryadevchavali.com>
00042 Tue Aug 1 19:58:49 2023 Aryadev Chavali <aryadev@aryadevchavali.com> 00042 Tue Aug 1 19:58:49 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00038 Tue Oct 11 16:47:44 2022 Aryadev Chavali <aryadev@aryadevchavali.com>
00038 Fri Oct 14 13:05:44 2022 Aryadev Chavali <aryadev@aryadevchavali.com> 00038 Fri Oct 14 13:05:44 2022 Aryadev Chavali <aryadev@aryadevchavali.com>
00038 Tue Oct 11 16:47:44 2022 Aryadev Chavali <aryadev@aryadevchavali.com>
00037 Thu Aug 17 18:11:59 2023 Aryadev Chavali <aryadev@aryadevchavali.com> 00037 Thu Aug 17 18:11:59 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00027 Thu Jan 12 01:14:32 2023 Aryadev Chavali <aryadev@aryadevchavali.com> 00027 Thu Jan 12 01:14:32 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00024 Thu Jan 12 01:14:54 2023 Aryadev Chavali <aryadev@aryadevchavali.com> 00024 Thu Jan 12 01:14:54 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00012 Tue Jan 17 13:58:01 2023 Aryadev Chavali <aryadev@aryadevchavali.com> 00012 Tue Jan 17 13:58:01 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00006 Thu Jun 22 23:16:42 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00006 Mon Jan 9 11:04:43 2023 Aryadev Chavali <aryadev@aryadevchavali.com> 00006 Mon Jan 9 11:04:43 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00006 Thu Jun 22 23:16:42 2023 Aryadev Chavali <aryadev@aryadevchavali.com>
00000 Fri Dec 2 13:58:02 2022 Aryadev Chavali <aryadev@aryadevchavali.com> 00000 Fri Dec 2 13:58:02 2022 Aryadev Chavali <aryadev@aryadevchavali.com>

View File

@@ -154,6 +154,12 @@ no need to check with me first!
#+begin_src emacs-lisp #+begin_src emacs-lisp
(setopt async-shell-command-buffer 'new-buffer) (setopt async-shell-command-buffer 'new-buffer)
#+end_src #+end_src
Let's also ensure we don't hear that stupid bell whenever we do a
keyboard quit or other such operation.
#+begin_src emacs-lisp
(setopt ring-bell-function nil)
#+end_src
* Custom functionality and libraries * Custom functionality and libraries
This is custom Lisp that I or someone else has written which I really This is custom Lisp that I or someone else has written which I really
need to setup ASAP due to how necessary it is throughout the rest of need to setup ASAP due to how necessary it is throughout the rest of
@@ -243,7 +249,7 @@ must be preserved for any operation suggested by the above.
(eq 4 (car arg))) (eq 4 (car arg)))
(setq items (setq items
(thread-first (current-buffer) (thread-first (current-buffer)
(--get-dir-or-project-dir ) (+cfg/--get-dir-or-project-dir )
(assoc buffer-alist #'string=) (assoc buffer-alist #'string=)
(cdr)))) (cdr))))
((and (listp arg) ((and (listp arg)
@@ -336,9 +342,9 @@ expression. Here's a macro to do that for me.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(defmacro add-multiple-to-list (listvar &rest elements) (defmacro add-multiple-to-list (listvar &rest elements)
(->> elements (thread-last elements
(mapcar (lambda (el) (list 'cl-pushnew el listvar))) (mapcar (lambda (el) (list 'cl-pushnew el listvar)))
(cons 'progn))) (cons 'progn)))
#+end_src #+end_src
** Setting number of native jobs ** Setting number of native jobs
Emacs has a native compilation capability to make things /even Emacs has a native compilation capability to make things /even
@@ -358,21 +364,6 @@ never used before, 3 seems to be a reasonable default.
3) 3)
(setq native-comp-async-jobs-number))) (setq native-comp-async-jobs-number)))
#+end_src #+end_src
** Proper paths in Emacs
Imagine you adjust your path in ZSH. This change won't necessarily
affect the results of ~(getenv "PATH")~ - you'd need to ensure Emacs
was loaded from a recent ZSH instance. This package allows you to
synchronise the PATH variable with the shell to avoid any silly
issues.
#+begin_src emacs-lisp
(use-package exec-path-from-shell
:straight t
:demand t
:config
(when (member window-system '(mac ns x))
(exec-path-from-shell-initialize)))
#+end_src
** Reset font size ** Reset font size
I define a function here that sets the font size for the so-called I define a function here that sets the font size for the so-called
"default" face; this is usually the face that all other faces in a "default" face; this is usually the face that all other faces in a
@@ -422,7 +413,7 @@ works for any theme!
* Essential packages * Essential packages
External and internal packages absolutely necessary for the rest of External and internal packages absolutely necessary for the rest of
this configuration. this configuration.
** TODO General - Bindings package ** General - Bindings package
What's the point of an editor with no keybindings? Vanilla Emacs has What's the point of an editor with no keybindings? Vanilla Emacs has
the ~bind-key~ function (and the ~bind-key*~ macro) for this, but the ~bind-key~ function (and the ~bind-key*~ macro) for this, but
[[*Evil - Vim Emulation][Evil]] has it's own ~evil-define-key~. I'd [[*Evil - Vim Emulation][Evil]] has it's own ~evil-define-key~. I'd
@@ -435,9 +426,10 @@ over some pre-defined configuration, all through one interface.
Here I setup the rough outline of how bindings should be made in the Here I setup the rough outline of how bindings should be made in the
global scope, namely: global scope, namely:
- Use "SPC" as a "leader", the root of all general bindings - Use "SPC" as a "leader", the root of all general bindings when in
normal/motion mode.
- Use "\" as a local-leader, the root of all major mode (read "mode - Use "\" as a local-leader, the root of all major mode (read "mode
specific") bindings specific") bindings in normal/motion mode.
- A few "definers" for the different sub bindings for the leader key - A few "definers" for the different sub bindings for the leader key
- ~nmmap~ macro, for defining keys under both normal and motion - ~nmmap~ macro, for defining keys under both normal and motion
states. states.
@@ -447,7 +439,6 @@ global scope, namely:
:straight t :straight t
:demand t :demand t
:config :config
;; General which key definitions for leaders
(general-def (general-def
:states '(normal motion) :states '(normal motion)
"SPC" nil "SPC" nil
@@ -569,7 +560,9 @@ set of examples on how to use general.
"S" (proc-int (find-file (concat user-emacs-directory "straight/")))) "S" (proc-int (find-file (concat user-emacs-directory "straight/"))))
(insert-leader (insert-leader
"c" #'insert-char) "y" #'yank-from-kill-ring
"c" #'insert-char
"e" #'emoji-search)
(dir-leader (dir-leader
"v" #'add-dir-local-variable) "v" #'add-dir-local-variable)
@@ -1118,18 +1111,17 @@ fundamental mode and call it a day.
(setq inhibit-startup-screen t (setq inhibit-startup-screen t
inhibit-startup-echo-area-message user-login-name inhibit-startup-echo-area-message user-login-name
initial-major-mode 'text-mode initial-major-mode 'text-mode
initial-scratch-message "" initial-scratch-message "")
ring-bell-function 'ignore)
:config :config
(add-hook 'after-init-hook (add-hook 'after-init-hook
(proc (proc
(with-current-buffer "*scratch*" (with-current-buffer "*scratch*"
(goto-char (point-max)) (goto-char (point-max))
(thread-last (insert
(straight-recipes-list) (format "Emacs v%s - %s - %s packages\n"
length emacs-version
(format "Emacs v%s - %s - %s packages\n" emacs-version (emacs-init-time)) (emacs-init-time)
(insert)))))) (length (straight-recipes-list))))))))
#+end_src #+end_src
** Cursor and the highlighted line ** Cursor and the highlighted line
Configure the blinking cursor. Configure the blinking cursor.
@@ -1158,8 +1150,10 @@ to look at, without even being that immediately informative.
I've got a custom Emacs lisp package I've got a custom Emacs lisp package
([[file:elisp/better-mode-line.el][here]]) which sets up the default ([[file:elisp/better-mode-line.el][here]]) which sets up the default
mode line as a set of 3 segments: left, centre and right. It pads out mode line as a sequence of 3 segments: left, centre and right. It
the mode line with space strings to achieve this. pads out the mode line with relevant space strings, computed using the
current windows width, to make the three segments actually justify to
their relevant sides.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package better-mode-line (use-package better-mode-line
@@ -1167,8 +1161,8 @@ the mode line with space strings to achieve this.
:demand t :demand t
:init :init
(defun +mode-line/evil-state () (defun +mode-line/evil-state ()
"Returns either \"E\" if no evil-state is defined or the first character "Returns either \"E\" if no evil-state is defined or the first character of
of the evil state capitalised" the evil state capitalised"
(if (bound-and-true-p evil-state) (if (bound-and-true-p evil-state)
(--> (-->
(format "%s" evil-state) (format "%s" evil-state)
@@ -1176,8 +1170,16 @@ of the evil state capitalised"
(upcase it)) (upcase it))
"E")) "E"))
(defun +mode-line/rsync-state ()
"Returns an indicator on the current progress of the rsync process if
dired-rsync is being used"
(when (and (eq major-mode 'dired-mode)
(bound-and-true-p dired-rsync-modeline-status)
(mode-line-window-selected-p))
(concat " " dired-rsync-modeline-status)))
(setq better-mode-line/left-segment (setq better-mode-line/left-segment
'(" " ;; Left padding '(" " ;; Left padding
(:eval (:eval
(if (mode-line-window-selected-p) (if (mode-line-window-selected-p)
'("%l:%c" ;; Line and column count '("%l:%c" ;; Line and column count
@@ -1188,28 +1190,23 @@ of the evil state capitalised"
(+mode-line/evil-state)) (+mode-line/evil-state))
"]")))) "]"))))
better-mode-line/centre-segment better-mode-line/centre-segment
'("%+" ;; Buffer state (changed or not) '("%+" ;; Buffer state (changed or not)
"%b" ;; Buffer name "%b" ;; Buffer name
"(" ;; Major mode "(" ;; Major mode
(:eval (format "%s" major-mode)) (:eval (format "%s" major-mode))
")") ")")
better-mode-line/right-segment better-mode-line/right-segment
'((:eval '((:eval
(when (mode-line-window-selected-p) (when (mode-line-window-selected-p)
(if vc-mode ;; Project and Git branch (if vc-mode ;; Project and Git branch
vc-mode vc-mode
""))) "")))
mode-line-misc-info ;; Any other information mode-line-misc-info ;; Any other information
(:eval (:eval (+mode-line/rsync-state))
(when (and (eq major-mode 'dired-mode) (:eval ;; Compilation mode errors
(bound-and-true-p dired-rsync-modeline-status)
(mode-line-window-selected-p))
(concat " "
dired-rsync-modeline-status)))
(:eval ;; Compilation mode errors
(if (eq major-mode 'compilation-mode) (if (eq major-mode 'compilation-mode)
compilation-mode-line-errors)) compilation-mode-line-errors))
" " ;; Right padding " " ;; Right padding
)) ))
:config :config
(better-mode-line/setup-mode-line)) (better-mode-line/setup-mode-line))
@@ -1377,10 +1374,7 @@ Nice set of icons, for even more emojis.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package all-the-icons (use-package all-the-icons
:straight t :straight t
:defer t :defer t)
:general
(insert-leader
"e" #'all-the-icons-insert))
#+end_src #+end_src
** Pretty symbols ** Pretty symbols
Prettify symbols mode allows users to declare "symbols" that replace Prettify symbols mode allows users to declare "symbols" that replace
@@ -1662,9 +1656,6 @@ Here I setup dired with a few niceties
dired instance will automatically target the other dired window dired instance will automatically target the other dired window
(~dired-dwim~) (~dired-dwim~)
- If opening an application on a PDF file, suggest ~zathura~ - If opening an application on a PDF file, suggest ~zathura~
- Examine all the subdirectories within the same buffer
(~+dired/insert-all-subdirectories~)
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package dired (use-package dired
:defer t :defer t
@@ -1782,8 +1773,6 @@ Here I setup dired with a few niceties
:keymaps 'dired-mode-map :keymaps 'dired-mode-map
"i" #'dired-maybe-insert-subdir "i" #'dired-maybe-insert-subdir
"d" #'dired-goto-subdir "d" #'dired-goto-subdir
"I" #'+dired/insert-all-subdirectories
"o" #'dired-omit-mode
"K" #'dired-kill-subdir "K" #'dired-kill-subdir
"m" #'dired-mark-files-regexp "m" #'dired-mark-files-regexp
"u" #'dired-undo) "u" #'dired-undo)
@@ -1795,7 +1784,43 @@ Here I setup dired with a few niceties
'("\\.png\\'" "feh") '("\\.png\\'" "feh")
'("\\.webm\\'" "mpv") '("\\.webm\\'" "mpv")
'("\\.mp[34]\\'" "mpv") '("\\.mp[34]\\'" "mpv")
'("\\.mkv\\'" "mpv")) '("\\.mkv\\'" "mpv")))
#+end_src
*** Dired Custom
Some custom to add functionality to Dired.
- ~+dired/insert-all-subdirectories~ will "insert" all subdirectories
currently present in the dired buffer; equivalent to expanding them
out into their own mini-session - but in the same buffer. A ~C-u~
will do it recursively till everything is in front of you, while
doing it without it will just do one level of depth. Useful for a
quick tree based look at your project.
- ~+dired/sort~ will sort out the current dired buffer, with a nice
little ~completing-read~ menu to choose from a few options on how to
do so.
#+begin_src emacs-lisp
(use-package dired
:defer t
:general
(local-leader
:keymaps 'dired-mode-map
"I" #'+dired/insert-all-subdirectories
"s" #'+dired/sort)
:config
(defun +dired/sort ()
;; Inspired by (read: slightly rewritten and expanded from) THE XahLee
;; himself http://xahlee.info/emacs/emacs/dired_sort.html
(interactive)
(let* ((options-alist `(("default" . "-Al --group-directories-first")
("date" . "-Al -t")
("size" . "-Al -S")
("ext" . "-Al -X")))
(choice (completing-read "Enter sorting order: " options-alist nil t nil nil
(caar options-alist))))
(thread-last options-alist
(assoc choice)
(cdr)
(dired-sort-other))))
(defun +dired/--subdirs-not-inserted () (defun +dired/--subdirs-not-inserted ()
(dired-unmark-all-marks) (dired-unmark-all-marks)
@@ -1817,15 +1842,42 @@ Here I setup dired with a few niceties
(setq subdirs-left (+dired/--subdirs-not-inserted))))))) (setq subdirs-left (+dired/--subdirs-not-inserted)))))))
#+end_src #+end_src
*** image-dired *** image-dired
Image dired is a little cherry on top for Dired: the ability to look Image dired is the little cherry on top for Dired: the ability to
through swathes of images in a centralised fashion while still being manage loads of images with Dired movements and functionality is
able to do all the usual dired stuff as well is really cool. really cool.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package dired (use-package dired
:defer t :defer t
:display
("\\*image-dired\\*"
(display-buffer-reuse-mode-window display-buffer-in-side-window)
(side . bottom)
(window-height . 0.5))
("\\*image-dired-display-image\\*"
(display-buffer-reuse-mode-window display-buffer-in-side-window)
(side . right)
(window-width . 0.35))
:init :init
(setq image-dired-external-viewer "nsxiv") (setq image-dired-external-viewer "nsxiv")
:config
(define-advice image-dired-display-image (:override (file &optional _ignored))
(setq file (expand-file-name file))
(when (not (file-exists-p file))
(error "No such file: %s" file))
(let ((buf (get-buffer image-dired-display-image-buffer))
(cur-win (selected-window)))
(when buf
(kill-buffer buf))
(when-let ((buf (find-file-noselect file nil t)))
(with-current-buffer buf
(rename-buffer image-dired-display-image-buffer)
(if (string-match (image-file-name-regexp) file)
(image-dired-image-mode)
;; Support visiting PDF files.
(normal-mode))
(display-buffer buf))
(select-window cur-win))))
:general :general
(nmmap (nmmap
:keymaps 'image-dired-thumbnail-mode-map :keymaps 'image-dired-thumbnail-mode-map
@@ -1839,18 +1891,6 @@ able to do all the usual dired stuff as well is really cool.
"m" #'image-dired-mark-thumb-original-file "m" #'image-dired-mark-thumb-original-file
"q" #'quit-window)) "q" #'quit-window))
#+end_src #+end_src
*** fd-dired
Uses fd for finding file results in a directory: ~find-dired~ ->
~fd-dired~.
#+begin_src emacs-lisp
(use-package fd-dired
:straight t
:after dired
:general
(dir-leader
"g" #'fd-dired))
#+end_src
*** wdired *** wdired
Similar to [[*(Rip)grep][wgrep]] =wdired= provides Similar to [[*(Rip)grep][wgrep]] =wdired= provides
the ability to use Emacs motions and editing on file names. This the ability to use Emacs motions and editing on file names. This
@@ -2453,10 +2493,10 @@ playing.
(app-leader (app-leader
"e" #'empv-hydra/body) "e" #'empv-hydra/body)
:init :init
(setq empv-audio-dir (list (expand-file-name "~/Media/music")) (setq empv-audio-dir (list (expand-file-name "~/Media/Music"))
empv-video-dir (list (expand-file-name "~/Media/videos") empv-video-dir (list (expand-file-name "~/Media/Videos")
(expand-file-name "~/Media/anime")) (expand-file-name "~/Media/Anime"))
empv-playlist-dir (expand-file-name "~/Media/playlists") empv-playlist-dir (expand-file-name "~/Media/Playlists")
empv-audio-file-extensions (list "mp3" "ogg" "wav" "m4a" "flac" "aac" "opus") empv-audio-file-extensions (list "mp3" "ogg" "wav" "m4a" "flac" "aac" "opus")
empv-video-file-extensions (list "mkv" "mp4" "avi" "mov" "webm") empv-video-file-extensions (list "mkv" "mp4" "avi" "mov" "webm")
empv-radio-channels empv-radio-channels
@@ -2475,7 +2515,9 @@ hydra which provides a ton of the useful =gud= keybindings that exist
in an Emacs-only map. in an Emacs-only map.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package gud (use-package gud
:general :config
(evil-set-initial-state 'gdb-disassembly-mode 'motion)
(evil-set-initial-state 'gdb-registers-mode 'motion)
:after hydra :after hydra
:hydra :hydra
(gud-hydra (gud-hydra
@@ -2512,7 +2554,7 @@ in an Emacs-only map.
:column "Control Flow")) :column "Control Flow"))
:general :general
(code-leader "d" #'gud-hydra/body (code-leader "d" #'gud-hydra/body
"D" #'gud-gdb)) "D" #'gdb))
#+end_src #+end_src
** Jira ** Jira
#+begin_src emacs-lisp #+begin_src emacs-lisp
@@ -2577,7 +2619,8 @@ modes that need the help.
(before-save-hook . whitespace-cleanup) (before-save-hook . whitespace-cleanup)
((c-mode-hook ((c-mode-hook
c++-mode-hook haskell-mode-hook python-mode-hook c++-mode-hook haskell-mode-hook python-mode-hook
org-mode-hook text-mode-hook js-mode-hook nasm-mode-hook) org-mode-hook text-mode-hook js-mode-hook nasm-mode-hook
makefile-mode-hook)
. whitespace-mode) . whitespace-mode)
:init :init
(setq whitespace-line-column nil (setq whitespace-line-column nil
@@ -2874,8 +2917,7 @@ so you can actually read the text.
"j" #'move-error-hydra/next-error "j" #'move-error-hydra/next-error
"k" #'move-error-hydra/previous-error) "k" #'move-error-hydra/previous-error)
(code-leader (code-leader
"c" #'compile "c" #'compile)
"r" #'recompile)
(nmap (nmap
"M-r" #'recompile) "M-r" #'recompile)
(:keymaps 'compilation-mode-map (:keymaps 'compilation-mode-map
@@ -2985,6 +3027,22 @@ apply diffs - here I configure a small subset.
"M-RET" #'diff-apply-hunk "M-RET" #'diff-apply-hunk
"RET" #'diff-goto-source)) "RET" #'diff-goto-source))
#+end_src #+end_src
** rmsbolt
Godbolt but in Emacs! Need I say more?
#+begin_src emacs-lisp
(use-package rmsbolt
:straight t
:config
(defun +rmsbolt/set-compiler-cmd ()
(interactive)
(setq-local rmsbolt-command
(read-string "Enter rmsbolt command: ")))
:general
(code-leader
"r" #'rmsbolt
"R" #'+rmsbolt/set-compiler-cmd))
#+end_src
* Languages * Languages
Emacs comes with support for many different types of Emacs comes with support for many different types of
programming/markup languages. Here I configure the ones I use, as programming/markup languages. Here I configure the ones I use, as
@@ -3599,7 +3657,7 @@ a regular expression which captures file names and digits
(add-to-list 'compilation-error-regexp-alist-alist (add-to-list 'compilation-error-regexp-alist-alist
`(fsan ,(rx (and `(fsan ,(rx (and
line-start " #" (1+ digit) " 0x" (1+ hex) " in " line-start " #" (1+ digit) " 0x" (1+ hex) " in "
(1+ (or word "_")) " " (1+ (or word "_" ":" "(" ")")) " "
(group (seq (* any) (or ".c" ".cpp" ".h" ".hpp"))) ":" (group (seq (* any) (or ".c" ".cpp" ".h" ".hpp"))) ":"
(group (+ digit)))) (group (+ digit))))
@@ -3632,7 +3690,9 @@ programming.
:keymaps 'rust-mode-map :keymaps 'rust-mode-map
"c" #'rust-run-clippy) "c" #'rust-run-clippy)
:init :init
(setq rust-format-on-save t) (setq rust-format-on-save t
rust-format-goto-problem nil
rust-format-show-buffer nil)
(with-eval-after-load "eglot" (with-eval-after-load "eglot"
(add-to-list 'eglot-server-programs '(rust-mode "rust-analyzer")))) (add-to-list 'eglot-server-programs '(rust-mode "rust-analyzer"))))
#+end_src #+end_src
@@ -4406,13 +4466,12 @@ does:
gptel-response-prefix-alist '((markdown-mode . "# Response:\n") gptel-response-prefix-alist '((markdown-mode . "# Response:\n")
(org-mode . "* Response:\n") (org-mode . "* Response:\n")
(text-mode . "# Response:\n")) (text-mode . "# Response:\n"))
gptel-directives gptel-model 'gpt-5-mini)
'((default . "You are a large language model living in Emacs and a helpful assistant. Respond concisely and with justification.")
(programming . "You are a large language model and a careful programmer. Provide code and only code as output without any additional text, prompt or note.")
(writing . "You are a large language model and a writing assistant. Respond concisely.")
(chat . "You are a large language model and a conversation partner. Respond concisely.")
(networking . "You are a large language model and an experienced networking technician talking to a colleague. You have the CCNA qualification. Respond concisely and with justification.")))
:config :config
(gptel-make-anthropic "Claude"
:key #'gptel-api-key-from-auth-source
:stream t)
(defun gptel-auto-fill-response (beg end) (defun gptel-auto-fill-response (beg end)
"Auto-fill the text response inserted between BEG and END, skipping Org "Auto-fill the text response inserted between BEG and END, skipping Org
source code blocks." source code blocks."
@@ -4722,10 +4781,13 @@ itself. The only feature left is describing changes...
"j" #'undo-tree-visualize-redo "j" #'undo-tree-visualize-redo
"k" #'undo-tree-visualize-undo "k" #'undo-tree-visualize-undo
"l" #'undo-tree-visualize-switch-branch-right "l" #'undo-tree-visualize-switch-branch-right
"h" #'undo-tree-visualize-switch-branch-left) "h" #'undo-tree-visualize-switch-branch-left
"q" #'undo-tree-visualizer-quit)
:init :init
(setq undo-tree-auto-save-history t (setq undo-tree-auto-save-history t
undo-tree-history-directory-alist backup-directory-alist) undo-tree-history-directory-alist backup-directory-alist)
(with-eval-after-load "evil"
(evil-set-initial-state 'undo-tree-visualizer-mode 'normal))
:config :config
(global-undo-tree-mode)) (global-undo-tree-mode))
#+end_src #+end_src
@@ -4833,3 +4895,21 @@ are some movements to package that movement in one go.
"M-[" (+cfg/--then-recenter-top (backward-paragraph)) "M-[" (+cfg/--then-recenter-top (backward-paragraph))
"M-]" (+cfg/--then-recenter-top (forward-paragraph)))) "M-]" (+cfg/--then-recenter-top (forward-paragraph))))
#+end_src #+end_src
** WAIT Proper paths in Emacs
:PROPERTIES:
:header-args:emacs-lisp: :tangle no :results none
:END:
Imagine you adjust your path in ZSH. This change won't necessarily
affect the results of ~(getenv "PATH")~ - you'd need to ensure Emacs
was loaded from a recent ZSH instance. This package allows you to
synchronise the PATH variable with the shell to avoid any silly
issues.
#+begin_src emacs-lisp
(use-package exec-path-from-shell
:straight t
:demand t
:config
(when (member window-system '(mac ns x))
(exec-path-from-shell-initialize)))
#+end_src

View File

@@ -39,24 +39,23 @@
"Minimum size of padding string.") "Minimum size of padding string.")
(defun bml/--get-padding-size (other-size) (defun bml/--get-padding-size (other-size)
"Compute length of padding to ensure string of size OTHER is on an "Compute length of padding to ensure string of size OTHER-SIZE is on an
extreme end to CENTRE-SEGMENT." extreme end to CENTRE-SEGMENT."
(let* ((centre-size (length (format-mode-line bml/centre-segment))) (let ((centre-size (length (format-mode-line bml/centre-segment)))
(win-width (window-width)) (window-width ;; compute total width of window (including margins)
(margins (window-margins)) (thread-last (cons (window-width) (window-margins))
(width (if (null (car margins)) (mapcar (lambda (x) (if (null x) 0 x)))
win-width (cl-reduce #'+))))
(+ (car margins) win-width (cdr margins))))) (floor (- (/ window-width 2) (/ centre-size 2) other-size))))
(floor (- (/ width 2) (/ centre-size 2) other-size))))
(defun bml/--generate-padding (segment) (defun bml/--generate-padding (segment)
"Make padding string to separate center segment from SEGMENT." "Make padding string to separate center segment from SEGMENT."
(let* ((segment-size (length (format-mode-line segment))) (let* ((segment-size (length (format-mode-line segment)))
(padding-size (bml/--get-padding-size segment-size))) (padding-size (bml/--get-padding-size segment-size)))
(make-string (min padding-size bml/--minimum-padding) ?\s))) (make-string (max padding-size bml/--minimum-padding) ?\s)))
(defun bml/setup-mode-line () (defun bml/setup-mode-line ()
"Call this to setup the mode-line when: "Call this to setup the mode-line when either:
- first loading the package. - first loading the package.
- segments are updated." - segments are updated."
(setq-default mode-line-format (setq-default mode-line-format

View File

@@ -53,16 +53,29 @@
(find-file name)))) (find-file name))))
(defun eshell/project-root (&rest args) (defun eshell/project-root (&rest args)
"Change to directory `project-root'" "Change to directory of `project-root', if current working directory is
(cond in a project."
((project-current) (eshell-eval-using-options
(eshell-goto-latest-prompt) "project-root"
(eshell/cd (list (project-root (project-current))))) args
(t '((?h "help" nil nil "show usage")
(setq eshell-last-command-status 1) :usage "
(eshell/echo
(format "[%s]: No project in current directory" Go to the root of the project which the current working directory is a
(propertize "Error" 'font-lock-face '(:foreground "red"))))))) member of. If the current working directory is not in a valid project,
an error is produced.")
(cond
((project-current)
(eshell-goto-latest-prompt)
(thread-last (project-current)
(project-root)
(list)
(eshell/cd)))
(t
(setq eshell-last-command-status 1)
(thread-last (propertize "Error" 'font-lock-face '(:foreground "red"))
(format "[%s]: No project in current directory")
(eshell/echo))))))
(defun eshell/sudo-switch (&rest args) (defun eshell/sudo-switch (&rest args)
"Switch to and from administrative (sudo) mode in Eshell. "Switch to and from administrative (sudo) mode in Eshell.

View File

@@ -1,4 +1,5 @@
(("Emacs-wgrep" . "3132abd3750b8c87cbcf6942db952acfab5edccd") (("Emacs-wgrep" . "3132abd3750b8c87cbcf6942db952acfab5edccd")
("Tidal" . "fefb1c364af42be265e9f02477d6d2d8fb2ec2b9")
("ace-link" . "06ab398df85e81d1dc763b3210732dd26cba60a1") ("ace-link" . "06ab398df85e81d1dc763b3210732dd26cba60a1")
("ace-window" . "77115afc1b0b9f633084cf7479c767988106c196") ("ace-window" . "77115afc1b0b9f633084cf7479c767988106c196")
("aggressive-indent-mode" . "a437a45868f94b77362c6b913c5ee8e67b273c42") ("aggressive-indent-mode" . "a437a45868f94b77362c6b913c5ee8e67b273c42")
@@ -50,6 +51,7 @@
("goto-chg" . "278cd3e6d5107693aa2bb33189ca503f22f227d0") ("goto-chg" . "278cd3e6d5107693aa2bb33189ca503f22f227d0")
("gptel" . "8a39875973a97c1e4aa53edf27407e8c0daaae5e") ("gptel" . "8a39875973a97c1e4aa53edf27407e8c0daaae5e")
("guile" . "a0f111f8dedd31c593c4ed12c0b99745f3c1340f") ("guile" . "a0f111f8dedd31c593c4ed12c0b99745f3c1340f")
("haskell-mode" . "383b4b77753ef83420c7a755f86e1ec4770f551b")
("helpful" . "4ba24cac9fb14d5fdc32582cd947572040e82b2c") ("helpful" . "4ba24cac9fb14d5fdc32582cd947572040e82b2c")
("hl-todo" . "0faf8569b67f5b23891416d9e7a67e3843338f2a") ("hl-todo" . "0faf8569b67f5b23891416d9e7a67e3843338f2a")
("htmlize" . "c9a8196a59973fabb3763b28069af9a4822a5260") ("htmlize" . "c9a8196a59973fabb3763b28069af9a4822a5260")
@@ -78,6 +80,7 @@
("queue" . "130c2d656cd5d7376552272fab9e50a7c37d0c4a") ("queue" . "130c2d656cd5d7376552272fab9e50a7c37d0c4a")
("rainbow-delimiters" . "f40ece58df8b2f0fb6c8576b527755a552a5e763") ("rainbow-delimiters" . "f40ece58df8b2f0fb6c8576b527755a552a5e763")
("rg.el" . "e9dc4ed342e0212d08fb82554dfd3c57fdfa5b1a") ("rg.el" . "e9dc4ed342e0212d08fb82554dfd3c57fdfa5b1a")
("rmsbolt" . "05c4795226f859009bc570940139473b6b6f7555")
("rust-mode" . "9915b3a585a7a75e9126df9e0e9d1df8057ae3cf") ("rust-mode" . "9915b3a585a7a75e9126df9e0e9d1df8057ae3cf")
("s.el" . "dda84d38fffdaf0c9b12837b504b402af910d01d") ("s.el" . "dda84d38fffdaf0c9b12837b504b402af910d01d")
("separedit.el" . "bfd0902d771f9f0160e4f16a7b6e8c29ce3447fe") ("separedit.el" . "bfd0902d771f9f0160e4f16a7b6e8c29ce3447fe")

View File

@@ -1,7 +1,7 @@
{ {
"NeoSolarized": { "branch": "master", "commit": "b94b1a9ad51e2de015266f10fdc6e142f97bd617" }, "NeoSolarized": { "branch": "master", "commit": "b94b1a9ad51e2de015266f10fdc6e142f97bd617" },
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"telescope.nvim": { "branch": "master", "commit": "e69b434b968a33815e2f02a5c7bd7b8dd4c7d4b2" }, "telescope.nvim": { "branch": "master", "commit": "ad7d9580338354ccc136e5b8f0aa4f880434dcdc" },
"vim-tmux-navigator": { "branch": "master", "commit": "c45243dc1f32ac6bcf6068e5300f3b2b237e576a" } "vim-tmux-navigator": { "branch": "master", "commit": "c45243dc1f32ac6bcf6068e5300f3b2b237e576a" }
} }

View File

@@ -24,7 +24,7 @@ export SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"
sh /etc/profile.d/debuginfod.sh sh /etc/profile.d/debuginfod.sh
# Import useful variables to systemd # Import useful variables to systemd
systemctl --user import-environment PATH SSH_AUTH_SOCK EDITOR systemctl --user import-environment PATH SSH_AUTH_SOCK EDITOR DEBUGINFOD_URLS
# Run some programs # Run some programs
echo "Welcome to..." echo "Welcome to..."

View File

@@ -3,16 +3,16 @@
killall sxhkd; killall sxhkd;
sh .xprofile; sh .xprofile;
screentimer on; $HOME/.local/scripts/screentimer on;
xrandr --output HDMI1 --auto --mode 1920x1080 --left-of eDP1; xrandr --output HDMI1 --auto --mode 1920x1080 --left-of eDP1;
xrandr --output eDP1 --auto --mode 1920x1080; xrandr --output eDP1 --auto --mode 1920x1080;
xrandr --output HDMI-0 --auto --mode 1920x1080 --right-of HDMI-1-1; xrandr --output HDMI-0 --auto --mode 1920x1080 --right-of HDMI-1-1;
xrandr --output HDMI-1-1 --auto --mode 1920x1080 --left-of HDMI-0; xrandr --output HDMI-1-1 --auto --mode 1920x1080 --left-of HDMI-0;
$(xss-lock --transfer-sleep-lock -- $HOME/.local/scripts/lock) &
sxhkd & sxhkd &
dunst & dunst &
$(xss-lock --transfer-sleep-lock -- $HOME/.local/scripts/lock) &
dwmblocks & dwmblocks &
# $HOME/.local/scripts/compositor & # $HOME/.local/scripts/compositor &
$HOME/.local/scripts/background & $HOME/.local/scripts/background &

View File

@@ -1,4 +1,4 @@
personal_ws-1.1 en 190 personal_ws-1.1 en 192
Architecting Architecting
Aryadev Aryadev
Automorphism Automorphism
@@ -53,6 +53,7 @@ artifacting
artifacts artifacts
automorphism automorphism
automorphisms automorphisms
behoove
biconnected biconnected
bijection bijection
bijections bijections
@@ -184,6 +185,7 @@ undealt
undebatable undebatable
undirected undirected
unipotent unipotent
unoptimised
variadic variadic
vectorisation vectorisation
verifier verifier

1
gdb/.gdbinit Normal file
View File

@@ -0,0 +1 @@
set disassembly-flavor intel