Compare commits
12 Commits
54b841ec81
...
40be300bf4
Author | SHA1 | Date | |
---|---|---|---|
40be300bf4 | |||
ec98d3bfab | |||
e51d89105d | |||
3dc1582585 | |||
2e7c33bef4 | |||
81ec6fa96c | |||
49552caea9 | |||
dd61440e6a | |||
17a4592aa9 | |||
21d00a7cf2 | |||
a84025dce4 | |||
ed1ae747fe |
@ -260,12 +260,12 @@ Finish up
|
|||||||
mu4e-alert
|
mu4e-alert
|
||||||
dirvish
|
dirvish
|
||||||
restclient
|
restclient
|
||||||
gptel
|
|
||||||
disaster
|
disaster
|
||||||
magit))
|
magit))
|
||||||
|
|
||||||
(setopt package-vc-selected-packages
|
(setopt package-vc-selected-packages
|
||||||
'((dotenv :url "https://github.com/pkulev/dotenv.el")
|
'((dotenv :url "https://github.com/pkulev/dotenv.el")
|
||||||
|
(gptel :url "https://github.com/karthink/gptel")
|
||||||
(indent-bars :url "https://github.com/jdtsmith/indent-bars")
|
(indent-bars :url "https://github.com/jdtsmith/indent-bars")
|
||||||
(doom-themes :url "https://github.com/JosephFerano/doom-themes")
|
(doom-themes :url "https://github.com/JosephFerano/doom-themes")
|
||||||
(org-timeblock :url "https://github.com/ichernyshovvv/org-timeblock")
|
(org-timeblock :url "https://github.com/ichernyshovvv/org-timeblock")
|
||||||
@ -364,12 +364,23 @@ Use Dashboard.el. First load `all-the-icons` for nicer rendering
|
|||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(require 'olivetti)
|
(require 'olivetti)
|
||||||
(if (equal "flowjoe-f37" (system-name))
|
|
||||||
(setq olivetti-minimum-body-width 100)
|
;; (if (equal "flowjoe-f37" (system-name))
|
||||||
(setq olivetti-minimum-body-width 120))
|
;; (setq olivetti-minimum-body-width 100)
|
||||||
|
;; (setq olivetti-minimum-body-width 120))
|
||||||
|
|
||||||
|
(setq olivetti-minimum-body-width 120)
|
||||||
|
|
||||||
(global-set-key (kbd "C-x x o") 'olivetti-mode)
|
(global-set-key (kbd "C-x x o") 'olivetti-mode)
|
||||||
(add-hook 'prog-mode-hook 'olivetti-mode)
|
;; (add-hook 'prog-mode-hook 'olivetti-mode)
|
||||||
|
(defun joe/toggle-olivetti-based-on-width ()
|
||||||
|
(when (derived-mode-p 'prog-mode)
|
||||||
|
(if (> (window-total-width) 120)
|
||||||
|
(olivetti-mode 1)
|
||||||
|
(olivetti-mode -1))))
|
||||||
|
|
||||||
|
|
||||||
|
(add-hook 'window-configuration-change-hook #'joe/toggle-olivetti-based-on-width)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
Remove this hook from Olivetti so that lines can truncate [[https://github.com/rnkn/olivetti/issues/76][Github issue]]
|
Remove this hook from Olivetti so that lines can truncate [[https://github.com/rnkn/olivetti/issues/76][Github issue]]
|
||||||
@ -540,6 +551,19 @@ Ligatures... are they that useful?
|
|||||||
(message "No region selected")))
|
(message "No region selected")))
|
||||||
|
|
||||||
(define-key ctl-x-x-map (kbd "a") #'joe/get-ascii-in-region)
|
(define-key ctl-x-x-map (kbd "a") #'joe/get-ascii-in-region)
|
||||||
|
|
||||||
|
(defun joe/project-silent-shell-command (command)
|
||||||
|
(interactive (list (or (bound-and-true-p joe/shell-command-silent-default)
|
||||||
|
(read-string "Shell command: "))))
|
||||||
|
(let* ((project-root (when (project-current)
|
||||||
|
(project-root (project-current))))
|
||||||
|
(default-directory (or project-root default-directory))
|
||||||
|
(exit-code (call-process-shell-command command nil nil)))
|
||||||
|
(unless (zerop exit-code)
|
||||||
|
(message "Command failed: %s in %s (project: %s) -> exit: %d"
|
||||||
|
command default-directory project-root exit-code))))
|
||||||
|
|
||||||
|
(global-set-key (kbd "C-M-r") #'joe/project-silent-shell-command)
|
||||||
#+end_src
|
#+end_src
|
||||||
** Text
|
** Text
|
||||||
|
|
||||||
@ -907,6 +931,7 @@ Fill region is great, except when you don't need it...
|
|||||||
(kbd "SPC p") project-prefix-map
|
(kbd "SPC p") project-prefix-map
|
||||||
(kbd "SPC q") 'kill-buffer-and-window
|
(kbd "SPC q") 'kill-buffer-and-window
|
||||||
(kbd "SPC h") 'help-command
|
(kbd "SPC h") 'help-command
|
||||||
|
(kbd "SPC k") 'kill-this-buffer
|
||||||
(kbd "SPC hf") 'helpful-callable
|
(kbd "SPC hf") 'helpful-callable
|
||||||
(kbd "SPC hv") 'helpful-variable
|
(kbd "SPC hv") 'helpful-variable
|
||||||
(kbd "SPC hk") 'helpful-key
|
(kbd "SPC hk") 'helpful-key
|
||||||
@ -984,20 +1009,8 @@ Fill region is great, except when you don't need it...
|
|||||||
#+end_src
|
#+end_src
|
||||||
** Buffers
|
** Buffers
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(defun joe/kill-this-buffer-or-popup ()
|
|
||||||
(interactive)
|
|
||||||
"Kill the buffer normally, but if it's a popper popup, call the popper version"
|
|
||||||
(with-current-buffer (current-buffer)
|
|
||||||
(if (or (eq popper-popup-status nil)
|
|
||||||
(eq popper-popup-status 'raised))
|
|
||||||
(kill-this-buffer)
|
|
||||||
(popper-kill-latest-popup))))
|
|
||||||
|
|
||||||
(global-set-key (kbd "C-x k") #'joe/kill-this-buffer-or-popup)
|
(global-set-key (kbd "C-x k") #'kill-this-buffer)
|
||||||
|
|
||||||
(when (boundp 'evil-mode)
|
|
||||||
(evil-define-key 'normal joe/evil-space-mode-map
|
|
||||||
(kbd "SPC k") #'joe/kill-this-buffer-or-popup))
|
|
||||||
|
|
||||||
(global-set-key (kbd "C-x M-k") #'kill-buffer)
|
(global-set-key (kbd "C-x M-k") #'kill-buffer)
|
||||||
(require 'all-the-icons-ibuffer)
|
(require 'all-the-icons-ibuffer)
|
||||||
@ -1046,6 +1059,9 @@ Harpoon lets you quickly switch between bookmarked buffers
|
|||||||
(global-set-key (kbd "M-3") 'harpoon-go-to-3)
|
(global-set-key (kbd "M-3") 'harpoon-go-to-3)
|
||||||
(global-set-key (kbd "M-4") 'harpoon-go-to-4)
|
(global-set-key (kbd "M-4") 'harpoon-go-to-4)
|
||||||
(global-set-key (kbd "M-5") 'harpoon-go-to-5)
|
(global-set-key (kbd "M-5") 'harpoon-go-to-5)
|
||||||
|
(global-set-key (kbd "M-6") 'harpoon-go-to-6)
|
||||||
|
(global-set-key (kbd "M-7") 'harpoon-go-to-7)
|
||||||
|
(global-set-key (kbd "M-8") 'harpoon-go-to-8)
|
||||||
|
|
||||||
(global-set-key (kbd "C-c h 1") 'harpoon-go-to-1)
|
(global-set-key (kbd "C-c h 1") 'harpoon-go-to-1)
|
||||||
(global-set-key (kbd "C-c h 2") 'harpoon-go-to-2)
|
(global-set-key (kbd "C-c h 2") 'harpoon-go-to-2)
|
||||||
@ -1194,99 +1210,6 @@ Ace Window will show a hint if there are more than 2 windows, but I don't really
|
|||||||
(beframe-unassume-current-frame-buffers-selectively (list curr))))
|
(beframe-unassume-current-frame-buffers-selectively (list curr))))
|
||||||
(evil-global-set-key 'normal (kbd "SPC b f") #'joe/beframe-switch-and-unassume)
|
(evil-global-set-key 'normal (kbd "SPC b f") #'joe/beframe-switch-and-unassume)
|
||||||
|
|
||||||
#+end_src
|
|
||||||
*** Popper
|
|
||||||
#+begin_src emacs-lisp
|
|
||||||
(require 'popper)
|
|
||||||
(setq popper-reference-buffers
|
|
||||||
'("\\*compilation\\*" compilation-mode
|
|
||||||
"^\\*vterm\\*" vterm-mode
|
|
||||||
"^\\*Flymake.*" flymake-mode
|
|
||||||
"^\\*Flycheck.*" flycheck-error-list-mode
|
|
||||||
"^\\*Occur\\*$" occur-mode
|
|
||||||
"^\\*lsp-help\\*" lsp-help-mode
|
|
||||||
"^\\*eldoc\\*" special-mode
|
|
||||||
"^\\*godot.*" godot-mode
|
|
||||||
"^\\*ert\\*" ert-results-mode
|
|
||||||
"^\\*xref\\*" xref-mode
|
|
||||||
"^\\*HTTP Response\\*" javascript-mode
|
|
||||||
"^\\*SQL.*" sql-interactive-mode
|
|
||||||
"^\\*cargo-test\\*" cargo-test-mode
|
|
||||||
"^\\*cargo-run\\*" cargo-run-mode
|
|
||||||
"^\\*rustic-compilation\\*" rustic-compilation-mode
|
|
||||||
"^\\*ansi-term\\*$" term-mode
|
|
||||||
;; "^\\*Async Shell Command\\*$" shell-mode
|
|
||||||
"^\\*Async Shell Command\\*$"
|
|
||||||
("^\\*Warnings\\*$" . hide)
|
|
||||||
help-mode
|
|
||||||
helpful-mode))
|
|
||||||
|
|
||||||
(global-set-key (kbd "C-`") 'popper-toggle-latest)
|
|
||||||
(global-set-key (kbd "C-~") 'popper-cycle)
|
|
||||||
(global-set-key (kbd "C-M-`") 'popper-toggle-type)
|
|
||||||
(require 'popper-echo)
|
|
||||||
(popper-echo-mode t)
|
|
||||||
|
|
||||||
(defun joe/get-popper-dir ()
|
|
||||||
(with-current-buffer (current-buffer)
|
|
||||||
(if (or (> (window-width) 170) (eq olivetti-mode t))
|
|
||||||
joe/popper-side-toggle
|
|
||||||
'below)))
|
|
||||||
|
|
||||||
;; TODO Prot We need to revisit this function and change the rules; I
|
|
||||||
;; just saw that Popper uses side-window for it's internal popup at
|
|
||||||
;; the bottom function. I prefer the way Popper does it for anything
|
|
||||||
;; that is going to display horizontally at the bottom. However for
|
|
||||||
;; side splits I much prefer the functionality we have here where if
|
|
||||||
;; there's a window on the right, then overtake it and then when I
|
|
||||||
;; close it, keep whatever window was there open. The issue with
|
|
||||||
;; side-windows is that they keep the two window splits in tact and
|
|
||||||
;; that's not what I want. Sort of like how Magit does it, that's what
|
|
||||||
;; I want to copy. But like I have it here, it should respect my
|
|
||||||
;; "popper side" variable so I can toggle whether it appears at the
|
|
||||||
;; bottom or above.
|
|
||||||
(defun joe/popper-display-func (buffer &optional _alist)
|
|
||||||
(cond
|
|
||||||
((eq joe/popper-side-toggle 'below)
|
|
||||||
(popper-select-popup-at-bottom buffer _alist))
|
|
||||||
((when-let ((popup-buffer
|
|
||||||
(cl-find-if
|
|
||||||
#'popper-popup-p
|
|
||||||
(mapcar #'window-buffer (window-list)))))
|
|
||||||
(window--display-buffer
|
|
||||||
buffer (get-buffer-window popup-buffer) 'reuse
|
|
||||||
`((body-function . ,#'select-window)))))
|
|
||||||
|
|
||||||
((and (eq joe/popper-side-toggle 'right)
|
|
||||||
(window-in-direction 'left))
|
|
||||||
(window--display-buffer
|
|
||||||
buffer (get-buffer-window (current-buffer)) 'reuse))
|
|
||||||
|
|
||||||
((when-let ((right-window (window-in-direction 'right))
|
|
||||||
((eq joe/popper-side-toggle 'right)))
|
|
||||||
(window--display-buffer
|
|
||||||
buffer right-window 'reuse
|
|
||||||
`((body-function . ,#'select-window)))))
|
|
||||||
|
|
||||||
((and (not (window-in-direction 'right))
|
|
||||||
(not (window-in-direction 'left)))
|
|
||||||
(display-buffer-in-direction
|
|
||||||
buffer
|
|
||||||
`((window-height . 0.45)
|
|
||||||
(window-width . 0.45)
|
|
||||||
(direction . right)
|
|
||||||
(body-function . ,#'select-window))))
|
|
||||||
(t
|
|
||||||
(display-buffer-in-direction
|
|
||||||
buffer
|
|
||||||
`((window-height . 0.45)
|
|
||||||
(window-width . 0.45)
|
|
||||||
(direction . below)
|
|
||||||
(body-function . ,#'select-window))))))
|
|
||||||
|
|
||||||
(setq popper-display-function #'joe/popper-display-func)
|
|
||||||
|
|
||||||
(popper-mode t)
|
|
||||||
#+end_src
|
#+end_src
|
||||||
*** COMMENT Tab-bar & Tab-line
|
*** COMMENT Tab-bar & Tab-line
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
@ -1565,6 +1488,22 @@ These are functions to load a project specific file given the conventions I use.
|
|||||||
(when (project-current)
|
(when (project-current)
|
||||||
(dirvish-dwim (project-root (project-current)))))
|
(dirvish-dwim (project-root (project-current)))))
|
||||||
|
|
||||||
|
(defun joe/project-vterm ()
|
||||||
|
"Start an inferior shell in the current project's root directory.
|
||||||
|
If a buffer already exists for running a shell in the project's root,
|
||||||
|
switch to it. Otherwise, create a new shell buffer.
|
||||||
|
With \\[universal-argument] prefix arg, create a new inferior shell buffer even
|
||||||
|
if one already exists."
|
||||||
|
(interactive)
|
||||||
|
(require 'comint)
|
||||||
|
(let* ((default-directory (project-root (project-current t)))
|
||||||
|
(default-project-shell-name (project-prefixed-buffer-name "shell"))
|
||||||
|
(shell-buffer (get-buffer default-project-shell-name)))
|
||||||
|
(if (and shell-buffer (not current-prefix-arg))
|
||||||
|
(if (comint-check-proc shell-buffer)
|
||||||
|
(pop-to-buffer shell-buffer (bound-and-true-p display-comint-buffer-action))
|
||||||
|
(vterm shell-buffer))
|
||||||
|
(vterm (generate-new-buffer-name default-project-shell-name)))))
|
||||||
|
|
||||||
(evil-define-key 'normal joe/evil-space-mode-map (kbd "_") #'joe/project-dirvish-dwim)
|
(evil-define-key 'normal joe/evil-space-mode-map (kbd "_") #'joe/project-dirvish-dwim)
|
||||||
(define-key project-prefix-map "t" #'joe/project-open-project-todo)
|
(define-key project-prefix-map "t" #'joe/project-open-project-todo)
|
||||||
@ -1572,7 +1511,7 @@ These are functions to load a project specific file given the conventions I use.
|
|||||||
(define-key project-prefix-map "n" #'joe/project-open-project-notes)
|
(define-key project-prefix-map "n" #'joe/project-open-project-notes)
|
||||||
(define-key project-prefix-map "r" #'joe/project-open-project-readme)
|
(define-key project-prefix-map "r" #'joe/project-open-project-readme)
|
||||||
(define-key project-prefix-map "l" #'joe/project-open-project-license)
|
(define-key project-prefix-map "l" #'joe/project-open-project-license)
|
||||||
(define-key project-prefix-map "s" #'eat-project)
|
(define-key project-prefix-map "s" #'joe/project-vterm)
|
||||||
(define-key project-prefix-map "S" #'eat-project-other-window)
|
(define-key project-prefix-map "S" #'eat-project-other-window)
|
||||||
;; Remape this
|
;; Remape this
|
||||||
(define-key project-prefix-map "C-r" #'project-query-replace-regexp)
|
(define-key project-prefix-map "C-r" #'project-query-replace-regexp)
|
||||||
@ -1594,7 +1533,7 @@ Stuff to immediately switch to Jetbrains for debugging
|
|||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
|
|
||||||
(global-set-key (kbd "C-M-r") #'joe/open-in-rider)
|
;; (global-set-key (kbd "C-M-r") #'joe/open-in-rider)
|
||||||
(defun joe/raise-frame-hook ()
|
(defun joe/raise-frame-hook ()
|
||||||
(select-frame-set-input-focus (selected-frame)))
|
(select-frame-set-input-focus (selected-frame)))
|
||||||
(add-hook 'server-switch-hook #'joe/raise-frame-hook)
|
(add-hook 'server-switch-hook #'joe/raise-frame-hook)
|
||||||
@ -1908,7 +1847,7 @@ odd looking ~'(t .t)~ is for specifying a default for all other actions.
|
|||||||
|
|
||||||
(add-to-list 'auto-mode-alist '("authinfo" . authinfo-mode))
|
(add-to-list 'auto-mode-alist '("authinfo" . authinfo-mode))
|
||||||
|
|
||||||
(setq mu4e-get-mail-command "parallel mbsync -V \"-c ~/.config/mbsync/config\" ::: ferano.io.inbox gmail.allmail")
|
(setq mu4e-get-mail-command "parallel mbsync -V \"-c ~/.config/mbsync/config\" ::: ferano.io gmail")
|
||||||
|
|
||||||
;;; Sending email (SMTP)
|
;;; Sending email (SMTP)
|
||||||
(require 'smtpmail)
|
(require 'smtpmail)
|
||||||
@ -1978,11 +1917,14 @@ odd looking ~'(t .t)~ is for specifying a default for all other actions.
|
|||||||
(user-full-name . "Joseph Ferano")
|
(user-full-name . "Joseph Ferano")
|
||||||
(mu4e-drafts-folder . "/gmail/[Gmail]/Drafts/")
|
(mu4e-drafts-folder . "/gmail/[Gmail]/Drafts/")
|
||||||
(mu4e-trash-folder . "/gmail/[Gmail]/Trash/")
|
(mu4e-trash-folder . "/gmail/[Gmail]/Trash/")
|
||||||
(mu4e-sent-folder . "/gmail/[Gmail]/Sent Mail/")))))
|
(mu4e-sent-folder . "/gmail/[Gmail]/Sent Mail/")
|
||||||
|
(smtpmail-default-smtp-server . "smtp.gmail.com")
|
||||||
|
(smtpmail-smtp-server . "smtp.gmail.com")
|
||||||
|
(smtpmail-stream-type . starttls)
|
||||||
|
(smtpmail-smtp-service . 587)))))
|
||||||
(setq mu4e-maildir-shortcuts
|
(setq mu4e-maildir-shortcuts
|
||||||
'((:maildir "/ferano.io/Inbox" :key ?f)
|
'((:maildir "/ferano.io/Inbox" :key ?f)
|
||||||
(:maildir "/gmail/[Gmail]/All Mail" :key ?g)))
|
(:maildir "/gmail/Inbox" :key ?g)))
|
||||||
|
|
||||||
(mu4e 't)
|
(mu4e 't)
|
||||||
(add-hook 'after-init-hook #'mu4e-alert-enable-mode-line-display))
|
(add-hook 'after-init-hook #'mu4e-alert-enable-mode-line-display))
|
||||||
@ -2274,6 +2216,7 @@ These help speed eglot up apparently [[https://www.reddit.com/r/emacs/comments/1
|
|||||||
;; All this changes because we are using eglot now
|
;; All this changes because we are using eglot now
|
||||||
(when (boundp 'evil-mode)
|
(when (boundp 'evil-mode)
|
||||||
(evil-global-set-key 'normal (kbd "M-d") #'lsp-ui-doc-glance)
|
(evil-global-set-key 'normal (kbd "M-d") #'lsp-ui-doc-glance)
|
||||||
|
(evil-global-set-key 'normal (kbd "M-D") #'lsp-describe-thing-at-point)
|
||||||
(evil-global-set-key 'normal (kbd "M-r") #'lsp-rename)
|
(evil-global-set-key 'normal (kbd "M-r") #'lsp-rename)
|
||||||
(evil-global-set-key 'insert (kbd "M-i") #'lsp-signature-activate)
|
(evil-global-set-key 'insert (kbd "M-i") #'lsp-signature-activate)
|
||||||
(evil-global-set-key 'normal (kbd "gD") #'xref-find-definitions-other-window)
|
(evil-global-set-key 'normal (kbd "gD") #'xref-find-definitions-other-window)
|
||||||
@ -2377,71 +2320,90 @@ These help speed eglot up apparently [[https://www.reddit.com/r/emacs/comments/1
|
|||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(setq gptel-default-mode #'org-mode)
|
(setq gptel-default-mode #'org-mode)
|
||||||
(setq
|
(setq
|
||||||
gptel-model 'claude-3-sonnet-20240229
|
gptel-model 'claude-sonnet-4-20250514
|
||||||
gptel-backend (gptel-make-anthropic "Claude"
|
gptel-backend (gptel-make-anthropic "Claude"
|
||||||
:stream t :key (with-temp-buffer
|
:stream t :key (with-temp-buffer
|
||||||
(insert-file-contents (expand-file-name "gptel-key" user-emacs-directory))
|
(insert-file-contents (expand-file-name "gptel-key" user-emacs-directory))
|
||||||
(buffer-string))))
|
(buffer-string))))
|
||||||
(add-hook 'gptel-post-response-functions #'font-lock-ensure)
|
;; (add-hook 'gptel-post-response-functions #'font-lock-ensure)
|
||||||
|
|
||||||
|
(setq gptel-prompt-prefix-alist '((markdown-mode . "### ")
|
||||||
|
(org-mode . "* ")
|
||||||
|
(text-mode . "### ")))
|
||||||
|
|
||||||
|
(evil-define-key 'normal joe/evil-space-mode-map (kbd "SPC a a") #'gptel)
|
||||||
|
(evil-define-key 'normal joe/evil-space-mode-map (kbd "SPC a RET") #'gptel-ask)
|
||||||
|
(evil-define-key 'normal joe/evil-space-mode-map (kbd "SPC a M") #'gptel-mode)
|
||||||
|
(evil-define-key 'visual joe/evil-space-mode-map (kbd "SPC a c") #'gptel-add) ;; Will delete context at point
|
||||||
|
(evil-define-key 'normal joe/evil-space-mode-map (kbd "SPC a <backspace>") #'joe/gptel-context-remove-all)
|
||||||
|
|
||||||
|
(evil-define-key 'visual joe/evil-space-mode-map (kbd "SPC a r") #'gptel-rewrite)
|
||||||
|
(evil-define-key 'visual joe/evil-space-mode-map (kbd "SPC a RET") #'gptel-ask)
|
||||||
|
(evil-define-key 'visual joe/evil-space-mode-map (kbd "SPC a c") #'gptel-add)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
This function was suggested by Karthink in order to fix an issue where gptel
|
gptel-context-remove-all without confirmation
|
||||||
org-mode was jumping back up to the top anytime the buffer was saved. Keeping it
|
|
||||||
around just in case.
|
#+begin_src emacs-lisp
|
||||||
|
(defun joe/gptel-context-remove-all (&optional verbose)
|
||||||
|
"Remove all gptel context. No confirmation."
|
||||||
|
(interactive (list t))
|
||||||
|
(if (null gptel-context--alist)
|
||||||
|
(message "No gptel context sources to remove.")
|
||||||
|
(cl-loop
|
||||||
|
for (source . ovs) in gptel-context--alist
|
||||||
|
if (bufferp source) do ;Buffers and buffer regions
|
||||||
|
(mapc #'gptel-context-remove ovs)
|
||||||
|
else do (gptel-context-remove source) ;files or other types
|
||||||
|
finally do (setq gptel-context--alist nil))))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
gptel-ask command so I can ask LLMs about whatever I have in my region. Might be
|
||||||
|
nice to add some more functionality similar to gptel-quick, like dwim behavior
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(defvar gptel-ask--history nil)
|
||||||
|
|
||||||
|
(defun gptel-ask (prompt)
|
||||||
|
(interactive
|
||||||
|
(list (read-string (format "Ask %s: " (gptel-backend-name gptel-backend)) nil 'gptel-ask--history)))
|
||||||
|
(when (string= prompt "") (user-error "A prompt is required."))
|
||||||
|
(let ((region-text (buffer-substring-no-properties (region-beginning) (region-end)))
|
||||||
|
(buffer-existed (get-buffer "*gptel-ask*"))
|
||||||
|
(buffer (get-buffer-create "*gptel-ask*")))
|
||||||
|
|
||||||
|
(with-current-buffer buffer
|
||||||
|
(unless buffer-existed
|
||||||
|
(org-mode)
|
||||||
|
(let ((map (copy-keymap (current-local-map))))
|
||||||
|
(evil-define-key 'nomal map "q" 'quit-window)
|
||||||
|
(use-local-map map)))
|
||||||
|
(erase-buffer)
|
||||||
|
(insert (format "* %s\n\n" prompt)))
|
||||||
|
|
||||||
|
(pop-to-buffer buffer)
|
||||||
|
(gptel-request
|
||||||
|
(concat prompt "\n\nRegion text:\n" region-text)
|
||||||
|
:system "You are an LLM living inside of Emacs. Answer questions concisely, no flattery"
|
||||||
|
:stream t
|
||||||
|
:callback
|
||||||
|
(lambda (response info)
|
||||||
|
(cond
|
||||||
|
((not response)
|
||||||
|
(message "gptel-ask failed with message: %s" (plist-get info :status)))
|
||||||
|
((stringp response)
|
||||||
|
(with-current-buffer (get-buffer "*gptel-ask*")
|
||||||
|
(let ((inhibit-read-only t))
|
||||||
|
(goto-char (point-max))
|
||||||
|
(insert response)))))))))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
https://github.com/karthink/gptel/issues/199
|
|
||||||
|
|
||||||
#+begin_src emacs-lisp :tangle no
|
#+begin_src emacs-lisp :tangle no
|
||||||
(defun gptel--save-state ()
|
;; Quick helper to cat the key
|
||||||
"Write the gptel state to the buffer.
|
(with-temp-buffer
|
||||||
|
(insert-file-contents (expand-file-name "gptel-key" user-emacs-directory))
|
||||||
This saves chat metadata when writing the buffer to disk. To
|
(clipboard-kill-region (point-min) (point-max)))
|
||||||
restore a chat session, turn on `gptel-mode' after opening the
|
|
||||||
file."
|
|
||||||
(pcase major-mode
|
|
||||||
('org-mode
|
|
||||||
(org-with-wide-buffer
|
|
||||||
(goto-char (point-min))
|
|
||||||
(when (org-at-heading-p)
|
|
||||||
(org-open-line 1))
|
|
||||||
(org-entry-put (point-min) "GPTEL_MODEL" gptel-model)
|
|
||||||
(org-entry-put (point-min) "GPTEL_BACKEND" (gptel-backend-name gptel-backend))
|
|
||||||
(unless (equal (default-value 'gptel-temperature) gptel-temperature)
|
|
||||||
(org-entry-put (point-min) "GPTEL_TEMPERATURE"
|
|
||||||
(number-to-string gptel-temperature)))
|
|
||||||
(unless (string= (default-value 'gptel--system-message)
|
|
||||||
gptel--system-message)
|
|
||||||
(org-entry-put (point-min) "GPTEL_SYSTEM"
|
|
||||||
gptel--system-message))
|
|
||||||
(when gptel-max-tokens
|
|
||||||
(org-entry-put
|
|
||||||
(point-min) "GPTEL_MAX_TOKENS" gptel-max-tokens))
|
|
||||||
;; Save response boundaries
|
|
||||||
(letrec ((write-bounds
|
|
||||||
(lambda (attempts)
|
|
||||||
(let* ((bounds (gptel--get-bounds))
|
|
||||||
(offset (caar bounds))
|
|
||||||
(offset-marker (set-marker (make-marker) offset)))
|
|
||||||
(org-entry-put (point-min) "GPTEL_BOUNDS"
|
|
||||||
(prin1-to-string (gptel--get-bounds)))
|
|
||||||
(when (and (not (= (marker-position offset-marker) offset))
|
|
||||||
(> attempts 0))
|
|
||||||
(funcall write-bounds (1- attempts)))))))
|
|
||||||
(funcall write-bounds 6))))
|
|
||||||
(_ (save-excursion
|
|
||||||
(save-restriction
|
|
||||||
(add-file-local-variable 'gptel-model gptel-model)
|
|
||||||
(add-file-local-variable 'gptel--backend-name
|
|
||||||
(gptel-backend-name gptel-backend))
|
|
||||||
(unless (equal (default-value 'gptel-temperature) gptel-temperature)
|
|
||||||
(add-file-local-variable 'gptel-temperature gptel-temperature))
|
|
||||||
(unless (string= (default-value 'gptel--system-message)
|
|
||||||
gptel--system-message)
|
|
||||||
(add-file-local-variable 'gptel--system-message gptel--system-message))
|
|
||||||
(when gptel-max-tokens
|
|
||||||
(add-file-local-variable 'gptel-max-tokens gptel-max-tokens))
|
|
||||||
(add-file-local-variable 'gptel--bounds (gptel--get-bounds)))))))
|
|
||||||
|
|
||||||
#+end_src
|
#+end_src
|
||||||
** Programming Languages
|
** Programming Languages
|
||||||
*** COMMENT treesitter
|
*** COMMENT treesitter
|
||||||
@ -2508,6 +2470,19 @@ And we do the rest here, including a macro
|
|||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(setq sly-lisp-implementations '((sbcl ("/usr/local/bin/sbcl" "--dynamic-space-size" "4096"))
|
(setq sly-lisp-implementations '((sbcl ("/usr/local/bin/sbcl" "--dynamic-space-size" "4096"))
|
||||||
(ecl ("/usr/bin/ecl"))))
|
(ecl ("/usr/bin/ecl"))))
|
||||||
|
(defun joe/sly-copy-call-to-repl ()
|
||||||
|
"Copy name/symbol of toplevel sexp to sly-mREPL and select sly-mREPL."
|
||||||
|
(interactive)
|
||||||
|
(let (string
|
||||||
|
replwin)
|
||||||
|
(save-excursion
|
||||||
|
(beginning-of-defun)
|
||||||
|
(forward-thing 'symbol 2)
|
||||||
|
(setq string (format "(%s )" (thing-at-point 'symbol 'no-props))))
|
||||||
|
(setq replwin (get-buffer-window (call-interactively #'sly-mrepl)))
|
||||||
|
(with-selected-window replwin
|
||||||
|
(insert string)
|
||||||
|
(forward-char -1))))
|
||||||
#+end_src
|
#+end_src
|
||||||
*** Odin
|
*** Odin
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
@ -2521,7 +2496,7 @@ And we do the rest here, including a macro
|
|||||||
:server-id 'ols
|
:server-id 'ols
|
||||||
:multi-root t))) ;; Ensures lsp-mode sends "workspaceFolders" to the server
|
:multi-root t))) ;; Ensures lsp-mode sends "workspaceFolders" to the server
|
||||||
|
|
||||||
(add-hook 'odin-mode-hook #'lsp)
|
;; (add-hook 'odin-mode-hook #'lsp)
|
||||||
|
|
||||||
(defun joe/odin-mode-hook ()
|
(defun joe/odin-mode-hook ()
|
||||||
(electric-pair-local-mode))
|
(electric-pair-local-mode))
|
||||||
@ -2537,13 +2512,25 @@ it doesn't close it.
|
|||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(require 'disaster)
|
(require 'disaster)
|
||||||
(setq c-default-style "bsd")
|
|
||||||
|
(defun joe/disaster (arg)
|
||||||
|
(interactive "P")
|
||||||
|
(if arg
|
||||||
|
(let ((disaster-cflags (concat disaster-cflags " -O2")))
|
||||||
|
(disaster))
|
||||||
|
(disaster)))
|
||||||
|
|
||||||
(defun joe/c-mode-hook ()
|
(defun joe/c-mode-hook ()
|
||||||
|
(setq c-default-style "bsd")
|
||||||
|
(define-key c-mode-map (kbd "C-c d") #'joe/disaster)
|
||||||
(local-set-key (kbd "C-x c r") (defun joe/make-run () (interactive) (compile "make run")))
|
(local-set-key (kbd "C-x c r") (defun joe/make-run () (interactive) (compile "make run")))
|
||||||
(local-set-key (kbd "C-x c c") (defun joe/make () (interactive) (compile "make")))
|
(local-set-key (kbd "C-x c c") (defun joe/make () (interactive) (compile "make")))
|
||||||
(electric-pair-local-mode t)
|
(electric-pair-local-mode t)
|
||||||
(c-toggle-comment-style -1))
|
(c-toggle-comment-style -1))
|
||||||
(add-hook 'c-mode-hook #'joe/c-mode-hook)
|
|
||||||
|
(with-eval-after-load 'cc-mode
|
||||||
|
(add-hook 'c-mode-hook #'joe/c-mode-hook))
|
||||||
|
|
||||||
#+end_src
|
#+end_src
|
||||||
*** Python
|
*** Python
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
@ -2557,9 +2544,9 @@ it doesn't close it.
|
|||||||
#+end_src
|
#+end_src
|
||||||
*** Rust
|
*** Rust
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(setq rustic-lsp-setup-p nil)
|
;; (setq rustic-lsp-setup-p nil)
|
||||||
(require 'rustic)
|
;; (require 'rustic)
|
||||||
(require 'ob-rust)
|
;; (require 'ob-rust)
|
||||||
;; Org-Babel
|
;; Org-Babel
|
||||||
;; Disabling until we figure out how to get it working
|
;; Disabling until we figure out how to get it working
|
||||||
;; (elpaca 'parsec) ;; Required by evcxr-mode
|
;; (elpaca 'parsec) ;; Required by evcxr-mode
|
||||||
@ -2570,10 +2557,21 @@ it doesn't close it.
|
|||||||
;; :host github
|
;; :host github
|
||||||
;; :repo "serialdev/evcxr-mode"))
|
;; :repo "serialdev/evcxr-mode"))
|
||||||
|
|
||||||
|
(defun joe/save-then-rustic-cargo-check ()
|
||||||
|
"Save the buffer before recompiling"
|
||||||
|
(interactive)
|
||||||
|
(when (buffer-file-name)
|
||||||
|
(save-buffer))
|
||||||
|
(rustic-cargo-check))
|
||||||
|
|
||||||
(add-hook 'rust-mode-hook
|
(add-hook 'rust-mode-hook
|
||||||
(lambda ()
|
(lambda ()
|
||||||
;; (evcxr-minor-mode)
|
;; (evcxr-minor-mode)
|
||||||
(electric-pair-local-mode)))
|
(electric-pair-local-mode)
|
||||||
|
(yas-minor-mode)
|
||||||
|
(define-key rustic-mode-map (kbd "<f9>") #'joe/save-then-rustic-cargo-check)
|
||||||
|
(define-key rustic-cargo-run-mode-map (kbd "<f9>") #'joe/save-then-rustic-cargo-check)
|
||||||
|
(define-key rustic-mode-map (kbd "<f8>") #'joe/save-then-recompile)))
|
||||||
|
|
||||||
;; (with-eval-after-load 'rustic
|
;; (with-eval-after-load 'rustic
|
||||||
;; ;; Don't autostart
|
;; ;; Don't autostart
|
||||||
@ -2722,11 +2720,11 @@ and there's no need for a middle-man when it's already been implemented.
|
|||||||
(evil-define-key 'insert haskell-interactive-mode-map (kbd "C-p") #'haskell-interactive-mode-history-previous)
|
(evil-define-key 'insert haskell-interactive-mode-map (kbd "C-p") #'haskell-interactive-mode-history-previous)
|
||||||
|
|
||||||
#+end_src
|
#+end_src
|
||||||
*** COMMENT Clojure
|
*** Clojure
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(require 'clojure-mode)
|
(require 'clojure-mode)
|
||||||
(require 'cider)
|
(require 'cider)
|
||||||
(setq cider-show-error-buffer 'only-in-repl)
|
;; (setq cider-show-error-buffer 'only-in-repl)
|
||||||
#+end_src
|
#+end_src
|
||||||
*** COMMENT FSharp
|
*** COMMENT FSharp
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
@ -3005,20 +3003,25 @@ Org mode buffers have associated files.
|
|||||||
(ocaml . t)
|
(ocaml . t)
|
||||||
(python . t)
|
(python . t)
|
||||||
(C . t)
|
(C . t)
|
||||||
|
(lisp . t)
|
||||||
(haskell . t)
|
(haskell . t)
|
||||||
;; (rust . t)
|
(rust . t)
|
||||||
|
(clojure . t)
|
||||||
(shell . t)))
|
(shell . t)))
|
||||||
|
|
||||||
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
|
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
|
||||||
|
(add-to-list 'org-structure-template-alist '("cl" . "src common-lisp"))
|
||||||
(add-to-list 'org-structure-template-alist '("ml" . "src ocaml"))
|
(add-to-list 'org-structure-template-alist '("ml" . "src ocaml"))
|
||||||
(add-to-list 'org-structure-template-alist '("rs" . "src rust"))
|
(add-to-list 'org-structure-template-alist '("rs" . "src rust"))
|
||||||
(add-to-list 'org-structure-template-alist '("py" . "src python"))
|
(add-to-list 'org-structure-template-alist '("py" . "src python"))
|
||||||
(add-to-list 'org-structure-template-alist '("hs" . "src haskell"))
|
(add-to-list 'org-structure-template-alist '("hs" . "src haskell"))
|
||||||
(add-to-list 'org-structure-template-alist '("sh" . "src shell"))
|
(add-to-list 'org-structure-template-alist '("sh" . "src shell"))
|
||||||
(add-to-list 'org-structure-template-alist '("cs" . "src csharp"))
|
(add-to-list 'org-structure-template-alist '("cs" . "src csharp"))
|
||||||
|
(add-to-list 'org-structure-template-alist '("clj" . "src clojure"))
|
||||||
(add-to-list 'org-structure-template-alist '("cc" . "src C :includes stdio.h stdlib.h"))
|
(add-to-list 'org-structure-template-alist '("cc" . "src C :includes stdio.h stdlib.h"))
|
||||||
(setq org-edit-src-content-indentation 0)
|
(setq org-edit-src-content-indentation 0)
|
||||||
(setq org-src-window-setup 'current-window)
|
(setq org-src-window-setup 'current-window)
|
||||||
|
(setq org-babel-lisp-eval-fn 'sly-eval)
|
||||||
|
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
@ -3043,7 +3046,7 @@ with the cursor you hit TAB and you complete the following;
|
|||||||
(define-key global-map (kbd "C-c t a") #'org-transclusion-add)
|
(define-key global-map (kbd "C-c t a") #'org-transclusion-add)
|
||||||
(define-key global-map (kbd "C-c t r") #'org-transclusion-remove)
|
(define-key global-map (kbd "C-c t r") #'org-transclusion-remove)
|
||||||
#+end_src
|
#+end_src
|
||||||
*** org-roam
|
*** COMMENT org-roam
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(require 'org-roam)
|
(require 'org-roam)
|
||||||
(setq org-roam-directory "/home/joe/Notes/Roam/")
|
(setq org-roam-directory "/home/joe/Notes/Roam/")
|
||||||
@ -3085,8 +3088,7 @@ with the cursor you hit TAB and you complete the following;
|
|||||||
#+end_src
|
#+end_src
|
||||||
** Magit
|
** Magit
|
||||||
|
|
||||||
The best git porcelain/client I've ever used. Also kill stray magit buffers left
|
The best git porcelain/client I've ever used. Also kill stray magit buffers left over as explained [[https://manueluberti.eu/2018/02/17/magit-bury-buffer.html][here]]
|
||||||
over as explained [[https://manueluberti.eu/2018/02/17/magit-bury-buffer.html][here]]
|
|
||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(require 'magit)
|
(require 'magit)
|
||||||
@ -3119,7 +3121,7 @@ over as explained [[https://manueluberti.eu/2018/02/17/magit-bury-buffer.html][h
|
|||||||
** Restclient
|
** Restclient
|
||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(require 'restclient)
|
;; (require 'restclient)
|
||||||
|
|
||||||
(add-to-list 'auto-mode-alist '("\\.restclient\\'" . restclient-mode))
|
(add-to-list 'auto-mode-alist '("\\.restclient\\'" . restclient-mode))
|
||||||
|
|
||||||
|
@ -15,16 +15,20 @@ complete -f -c exercism -n "__fish_seen_subcommand_from download" -s u -l uuid -
|
|||||||
|
|
||||||
# Help
|
# Help
|
||||||
complete -f -c exercism -n "__fish_use_subcommand" -a "help" -d "Shows a list of commands or help for one command"
|
complete -f -c exercism -n "__fish_use_subcommand" -a "help" -d "Shows a list of commands or help for one command"
|
||||||
complete -f -c exercism -n "__fish_seen_subcommand_from help" -a "configure download help open submit troubleshoot upgrade version workspace"
|
complete -f -c exercism -n "__fish_seen_subcommand_from help" -a "configure download help open submit test troubleshoot upgrade version workspace"
|
||||||
|
|
||||||
# Open
|
# Open
|
||||||
complete -f -c exercism -n "__fish_use_subcommand" -a "open" -d "Opens a browser to exercism.io for the specified submission."
|
complete -f -c exercism -n "__fish_use_subcommand" -a "open" -d "Opens a browser to exercism.org for the specified submission."
|
||||||
complete -f -c exercism -n "__fish_seen_subcommand_from open" -s h -l help -d "help for open"
|
complete -f -c exercism -n "__fish_seen_subcommand_from open" -s h -l help -d "help for open"
|
||||||
|
|
||||||
# Submit
|
# Submit
|
||||||
complete -f -c exercism -n "__fish_use_subcommand" -a "submit" -d "Submits a new iteration to a problem on exercism.io."
|
complete -f -c exercism -n "__fish_use_subcommand" -a "submit" -d "Submits a new iteration to a problem on exercism.org."
|
||||||
complete -f -c exercism -n "__fish_seen_subcommand_from submit" -s h -l help -d "help for submit"
|
complete -f -c exercism -n "__fish_seen_subcommand_from submit" -s h -l help -d "help for submit"
|
||||||
|
|
||||||
|
# Test
|
||||||
|
complete -f -c exercism -n "__fish_use_subcommand" -a "test" -d "Run the exercise's tests."
|
||||||
|
complete -f -c exercism -n "__fish_seen_subcommand_from submit" -s h -l help -d "help for test"
|
||||||
|
|
||||||
# Troubleshoot
|
# Troubleshoot
|
||||||
complete -f -c exercism -n "__fish_use_subcommand" -a "troubleshoot" -d "Outputs useful debug information."
|
complete -f -c exercism -n "__fish_use_subcommand" -a "troubleshoot" -d "Outputs useful debug information."
|
||||||
complete -f -c exercism -n "__fish_seen_subcommand_from troubleshoot" -s f -l full-api-key -d "display full API key (censored by default)"
|
complete -f -c exercism -n "__fish_seen_subcommand_from troubleshoot" -s f -l full-api-key -d "display full API key (censored by default)"
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
# This file contains fish universal variable definitions.
|
# This file contains fish universal variable definitions.
|
||||||
# VERSION: 3.0
|
# VERSION: 3.0
|
||||||
|
SETUVAR --export ANDROID_AVD_HOME:/home/joe/\x2econfig/\x2eandroid/avd
|
||||||
|
SETUVAR --export ANDROID_HOME:/home/joe/Android/Sdk/
|
||||||
SETUVAR --export CARGO_HOME:/home/joe/\x2elocal/share/bin/cargo/
|
SETUVAR --export CARGO_HOME:/home/joe/\x2elocal/share/bin/cargo/
|
||||||
SETUVAR EDITOR:hx
|
SETUVAR EDITOR:hx
|
||||||
SETUVAR --export LC_COLLATE:C
|
SETUVAR --export LC_COLLATE:C
|
||||||
SETUVAR --export --path LD_LIBRARY_PATH:/usr/local/lib
|
SETUVAR --export --path LD_LIBRARY_PATH:/usr/local/lib
|
||||||
|
SETUVAR --export NDK_HOME:/home/joe/Android/Sdk/ndk/29\x2e0\x2e13599879/
|
||||||
SETUVAR --export PYTHONSTARTUP:/etc/python/pythonrc
|
SETUVAR --export PYTHONSTARTUP:/etc/python/pythonrc
|
||||||
SETUVAR --export RUSTUP_HOME:/home/joe/\x2elocal/share/rustup/
|
SETUVAR --export RUSTUP_HOME:/home/joe/\x2elocal/share/rustup/
|
||||||
SETUVAR SSH_AUTH_SOCK:/run/user/1000/ssh\x2dagent\x2esocket
|
SETUVAR SSH_AUTH_SOCK:/run/user/1000/ssh\x2dagent\x2esocket
|
||||||
@ -44,4 +47,4 @@ SETUVAR fish_pager_color_description:B3A06D\x1eyellow
|
|||||||
SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
|
SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
|
||||||
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
|
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
|
||||||
SETUVAR fish_pager_color_selected_background:\x2dr
|
SETUVAR fish_pager_color_selected_background:\x2dr
|
||||||
SETUVAR --export fish_user_paths:/home/joe/\x2edotnet/tools\x1e/home/joe/Repositories/emsdk\x1e/home/joe/Repositories/emsdk/node/18\x2e20\x2e3_64bit/bin\x1e/home/joe/Repositories/emsdk/upstream/emscripten\x1e/home/joe/\x2elocal/bin/odin\x1e/home/joe/\x2elocal/scripts\x1e/home/joe/\x2elocal/opt/JetBrains\x20Rider\x2d2024\x2e1\x2e4/bin\x1e/home/joe/\x2elocal/share/bin/fasm\x1e/home/joe/\x2elocal/share/bin/zig\x1e/home/joe/\x2elocal/share/bin/cargo/bin\x1e/home/joe/\x2elocal/bin\x1e/home/joe/\x2enimble/bin
|
SETUVAR --export fish_user_paths:/home/joe/Android/Sdk/build\x2dtools\x1e/home/joe/Android/Sdk/emulator\x1e/home/joe/Android/Sdk/cmdline\x2dtools/latest/bin\x1e/home/joe/\x2elocal/android\x2dstudio/bin\x1e/home/joe/\x2edotnet/tools\x1e/home/joe/Repositories/emsdk\x1e/home/joe/Repositories/emsdk/node/18\x2e20\x2e3_64bit/bin\x1e/home/joe/Repositories/emsdk/upstream/emscripten\x1e/home/joe/\x2elocal/bin/odin\x1e/home/joe/\x2elocal/scripts\x1e/home/joe/\x2elocal/opt/JetBrains\x20Rider\x2d2024\x2e1\x2e4/bin\x1e/home/joe/\x2elocal/share/bin/fasm\x1e/home/joe/\x2elocal/share/bin/zig\x1e/home/joe/\x2elocal/share/bin/cargo/bin\x1e/home/joe/\x2elocal/bin\x1e/home/joe/\x2enimble/bin
|
||||||
|
@ -56,7 +56,8 @@ map kitty_mod+j neighboring_window down
|
|||||||
map kitty_mod+k neighboring_window up
|
map kitty_mod+k neighboring_window up
|
||||||
map kitty_mod+l neighboring_window right
|
map kitty_mod+l neighboring_window right
|
||||||
|
|
||||||
map ctrl+y paste_from_clipboard
|
map alt+y paste_from_clipboard
|
||||||
|
map alt+c copy_to_clipboard
|
||||||
|
|
||||||
map kitty_mod+p previous_tab
|
map kitty_mod+p previous_tab
|
||||||
map kitty_mod+n next_tab
|
map kitty_mod+n next_tab
|
||||||
|
@ -24,16 +24,6 @@ Remove Both
|
|||||||
Expunge Both
|
Expunge Both
|
||||||
SyncState *
|
SyncState *
|
||||||
|
|
||||||
Channel ferano.io.inbox
|
|
||||||
Far :ferano.io.remote:
|
|
||||||
Near :ferano.io.local:
|
|
||||||
Patterns INBOX
|
|
||||||
Sync All
|
|
||||||
Create Both
|
|
||||||
Remove Both
|
|
||||||
Expunge Both
|
|
||||||
SyncState *
|
|
||||||
|
|
||||||
IMAPAccount gmail
|
IMAPAccount gmail
|
||||||
Host imap.gmail.com
|
Host imap.gmail.com
|
||||||
UserCmd "age --decrypt -i ~/.local/credentials/personal ~/.local/credentials/authinfo.age | awk -F ' ' '/mail.gmail.com/ { print $(NF-2);exit; }'"
|
UserCmd "age --decrypt -i ~/.local/credentials/personal ~/.local/credentials/authinfo.age | awk -F ' ' '/mail.gmail.com/ { print $(NF-2);exit; }'"
|
||||||
@ -45,35 +35,14 @@ Account gmail
|
|||||||
|
|
||||||
MaildirStore gmail.local
|
MaildirStore gmail.local
|
||||||
Subfolders Verbatim
|
Subfolders Verbatim
|
||||||
# The trailing "/" is important
|
|
||||||
Path ~/.mail/gmail/
|
Path ~/.mail/gmail/
|
||||||
Inbox ~/.mail/gmail/Inbox
|
Inbox ~/.mail/gmail/INBOX
|
||||||
|
|
||||||
Channel gmail
|
Channel gmail
|
||||||
Far :gmail.remote:
|
Far :gmail.remote:
|
||||||
Near :gmail.local:
|
Near :gmail.local:
|
||||||
# Include everything
|
# Only sync the folders you've checked in IMAP
|
||||||
Patterns *
|
Patterns "INBOX" "[Gmail]/Sent Mail" "[Gmail]/Drafts" "[Gmail]/Trash"
|
||||||
Sync All
|
|
||||||
Create Both
|
|
||||||
Remove Both
|
|
||||||
Expunge Both
|
|
||||||
SyncState *
|
|
||||||
|
|
||||||
Channel gmail.inbox
|
|
||||||
Far :gmail.remote:
|
|
||||||
Near :gmail.local:
|
|
||||||
Patterns INBOX
|
|
||||||
Sync All
|
|
||||||
Create Both
|
|
||||||
Remove Both
|
|
||||||
Expunge Both
|
|
||||||
SyncState *
|
|
||||||
|
|
||||||
Channel gmail.allmail
|
|
||||||
Far :gmail.remote:
|
|
||||||
Near :gmail.local:
|
|
||||||
Patterns *All*
|
|
||||||
Sync All
|
Sync All
|
||||||
Create Both
|
Create Both
|
||||||
Remove Both
|
Remove Both
|
||||||
|
@ -131,6 +131,7 @@ keys = [
|
|||||||
Key([mod], "w", lazy.next_layout(), desc="Toggle between layouts"),
|
Key([mod], "w", lazy.next_layout(), desc="Toggle between layouts"),
|
||||||
Key([mod, "control"], "w", lazy.function(get_current_window_info), desc="Get window info"),
|
Key([mod, "control"], "w", lazy.function(get_current_window_info), desc="Get window info"),
|
||||||
Key([mod], "s", lazy.spawn("flameshot gui"), desc="Flameshot screenshot"),
|
Key([mod], "s", lazy.spawn("flameshot gui"), desc="Flameshot screenshot"),
|
||||||
|
Key([mod], "m", lazy.spawn("/home/joe/.local/scripts/trackball.sh", shell=True)),
|
||||||
|
|
||||||
# TODO: Figure out another binding for this
|
# TODO: Figure out another binding for this
|
||||||
# Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"),
|
# Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"),
|
||||||
@ -257,11 +258,10 @@ groups[0].label = '🎵'
|
|||||||
|
|
||||||
# groups.insert(0, Group('1', screen_affinity=0, label='🎵'))
|
# groups.insert(0, Group('1', screen_affinity=0, label='🎵'))
|
||||||
|
|
||||||
# This likely won't work when we only have 1 monitor
|
|
||||||
def go_to_group(name: str) -> Callable:
|
def go_to_group(name: str) -> Callable:
|
||||||
def _inner(qtile) -> None:
|
def _inner(qtile) -> None:
|
||||||
if num_monitors > 1:
|
if num_monitors > 1:
|
||||||
if name == '1':
|
if name == '0':
|
||||||
qtile.focus_screen(0)
|
qtile.focus_screen(0)
|
||||||
else:
|
else:
|
||||||
qtile.focus_screen(1)
|
qtile.focus_screen(1)
|
||||||
|
20
.local/scripts/show-wifi-password
Executable file
20
.local/scripts/show-wifi-password
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
curr_network=$(nmcli device wifi | rg "^\*" | awk '{print $3}')
|
||||||
|
if [ -z "$curr_network" ]; then
|
||||||
|
echo "Looks like we're not connected to any network"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
path_to_net_conns="/etc/NetworkManager/system-connections"
|
||||||
|
fullpath="${path_to_net_conns}/${curr_network}.nmconnection"
|
||||||
|
|
||||||
|
if [ ! -f "$fullpath" ]; then
|
||||||
|
echo "Could not find this wifi's Network Manager entry"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
password=$(sudo cat $fullpath | rg "^psk" | cut -d "=" -f 2)
|
||||||
|
|
||||||
|
echo Name: \ \ \ $curr_network
|
||||||
|
echo Password: $password
|
13
.local/scripts/trackball.sh
Executable file
13
.local/scripts/trackball.sh
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Set mouse buttons for elecom
|
||||||
|
# 3 = 9 (forward)
|
||||||
|
# 8 = 3 (right click)
|
||||||
|
# 9 = 2 (middle click)
|
||||||
|
# 10 = 8 (back)
|
||||||
|
dev_id=$(xinput | rg "slave\s+pointer" | rg ELECOM | rg -o "id=(\d+)" -r '$1')
|
||||||
|
if [ -n "$dev_id" ]; then
|
||||||
|
xinput set-button-map $dev_id 1 2 9 4 5 6 7 2 3 8
|
||||||
|
echo "Button mapping applied" >> /tmp/trackball.log
|
||||||
|
else
|
||||||
|
echo "No device found" >> /tmp/trackball.log
|
||||||
|
fi
|
Loading…
x
Reference in New Issue
Block a user