diff --git a/home.org b/home.org index 6ab013a..2768024 100644 --- a/home.org +++ b/home.org @@ -201,7 +201,13 @@ These programs require a full desktop environment: { home.packages = with pkgs; [ linear - slack + (slack.overrideAttrs { + version = "4.50.143"; + src = pkgs.fetchurl { + url = "https://downloads.slack-edge.com/desktop-releases/mac/arm64/4.50.143/Slack-4.50.143-macOS.dmg"; + hash = "sha256-f5oYi8NPKXWpDcowFYMUjptbQs4V9hK2bm1TuaQeJn0="; + }; + }) teams ]; } @@ -1034,12 +1040,30 @@ content to be. (setopt persp-show-modestring nil) (persp-mode) + (defun jf/popper-group-by-owning-perspective () + "Return the name of the perspective that owns the current buffer. + + Unlike `popper-group-by-perspective', which just returns whichever + perspective happens to be active on the frame right now, this looks + up which perspective's buffer list the popup buffer actually belongs + to. This matters because popper re-groups popups on + `window-configuration-change-hook', which perspective.el triggers + ,*after* switching the frame's active perspective -- so + `popper-group-by-perspective' ends up filing a popup under the + perspective you just switched *to* rather than the one it came from." + (let ((buf (current-buffer))) + (or (cl-loop for persp being the hash-values of (perspectives-hash (selected-frame)) + if (memq buf (persp-buffers persp)) + return (persp-name persp)) + (persp-current-name)))) + (setopt popper-reference-buffers '("\\*Flymake diagnostics .*" "\\*Embark Export: .*" "\\*Embark Collect .*" "\\*xref\\*" - "\\*compilation\\*" + "\\*compilation\\*" + "\\*pnpm:.*" "\\*sly-mrepl *" "\\*Messages\\*" "\\*lispy-message\\*" @@ -1061,7 +1085,7 @@ content to be. "\\*List .*" "\\*eldoc\\*")) (setopt popper-display-control nil) - (setopt popper-group-function 'popper-group-by-perspective) + (setopt popper-group-function 'jf/popper-group-by-owning-perspective) (popper-mode) (popper-echo-mode) @@ -1075,6 +1099,7 @@ content to be. "\\*Embark Collect .*" "\\*xref\\*" "\\*compilation\\*" + "\\*pnpm:.*" "\\*sly-mrepl *" "\\*Messages\\*" "\\*lispy-message\\*" @@ -1185,7 +1210,7 @@ its own devil-mode-only repeat maps that don't interfere when using normal modif (bind-keys ("" . (lambda () (interactive) (god-mode-all 1)))) (defun my-god-mode-update-cursor-type () (setq cursor-type (cond - (org-present-mode nil) + ((and (featurep 'org-present) org-present-mode) nil) ((or (and (featurep 'god-mode) god-local-mode) buffer-read-only) 'box) (t 'bar)))) @@ -1317,6 +1342,7 @@ Just "silently" wrap when searching at the bottom of a document. # lispyville lua-mode nix-mode + pnpm-mode prisma-ts-mode rust-mode sly @@ -1576,6 +1602,9 @@ for completion. That makes it really annoying to use; don't use yasnippet with e (with-eval-after-load 'typescript-ts-mode (define-key typescript-ts-mode-map (kbd "C-c '") #'my/edit-indirect-tagged-template-at-point) (define-key tsx-ts-mode-map (kbd "C-c '") #'my/edit-indirect-tagged-template-at-point)) + + (with-eval-after-load 'eglot + (add-to-list 'eglot-server-programs '((prisma-ts-mode) "prisma-language-server" "--stdio"))) #+END_SRC *** Java @@ -1861,73 +1890,73 @@ for completion. That makes it really annoying to use; don't use yasnippet with e (set-face-attribute 'org-level-7 nil :font "Iosevka Aile") (set-face-attribute 'org-level-8 nil :font "Iosevka Aile") - (require 'org-present) - (require 'face-remap) - (require 'visual-fill-column) - (defvar-local my/org-present-face-remapping-cookies nil) - (defun my/org-present-start () - (setq-local my/org-present-face-remapping-cookies nil) - ;; Tweak font sizes - (dolist (face '((default :height 2.0) - (header-line :height 4.0 :background "#303446") - (org-document-title :height 1.75) - (org-code :height 2.0) - (org-verbatim :height 2.0) - (org-block :height 1.25) - (org-block-begin-line :height 0.7) - (org-level-1 :height 3.0) - (org-level-2 :height 3.0) - (org-level-3 :height 3.0) - (org-level-4 :height 3.0) - (org-level-5 :height 3.0) - (org-level-6 :height 3.0) - (org-level-7 :height 3.0) - (org-level-8 :height 3.0))) - (push (apply #'face-remap-add-relative face) my/org-present-face-remapping-cookies)) + (with-eval-after-load 'org-present + (require 'face-remap) + (require 'visual-fill-column) + + (defun my/org-present-start () + (setq-local my/org-present-face-remapping-cookies nil) + ;; Tweak font sizes + (dolist (face '((default :height 2.0) + (header-line :height 4.0 :background "#303446") + (org-document-title :height 1.75) + (org-code :height 2.0) + (org-verbatim :height 2.0) + (org-block :height 1.25) + (org-block-begin-line :height 0.7) + (org-level-1 :height 3.0) + (org-level-2 :height 3.0) + (org-level-3 :height 3.0) + (org-level-4 :height 3.0) + (org-level-5 :height 3.0) + (org-level-6 :height 3.0) + (org-level-7 :height 3.0) + (org-level-8 :height 3.0))) + (push (apply #'face-remap-add-relative face) my/org-present-face-remapping-cookies)) - ;; Set a blank header line string to create blank space at the top - (setq header-line-format " ") + ;; Set a blank header line string to create blank space at the top + (setq header-line-format " ") - ;; Display inline images automatically - (org-display-inline-images) - (org-present-hide-cursor) + ;; Display inline images automatically + (org-display-inline-images) + (org-present-hide-cursor) - ;; Center the presentation and wrap lines - (visual-fill-column-mode 1) - (setq visual-fill-column-center-text t) - ;; (visual-line-mode 1) - ) + ;; Center the presentation and wrap lines + (visual-fill-column-mode 1) + (setq visual-fill-column-center-text t) + ;; (visual-line-mode 1) + ) - (defun my/org-present-end () - ;; Reset font customizations - (dolist (cookie my/org-present-face-remapping-cookies) - (face-remap-remove-relative cookie)) + (defun my/org-present-end () + ;; Reset font customizations + (dolist (cookie my/org-present-face-remapping-cookies) + (face-remap-remove-relative cookie)) - ;; Clear the header line string so that it isn't displayed - (setq header-line-format nil) + ;; Clear the header line string so that it isn't displayed + (setq header-line-format nil) - ;; Stop displaying inline images - (org-remove-inline-images) - (org-present-show-cursor) + ;; Stop displaying inline images + (org-remove-inline-images) + (org-present-show-cursor) - ;; Stop centering the document - (visual-fill-column-mode 0) - ;; (visual-line-mode 0) - ) + ;; Stop centering the document + (visual-fill-column-mode 0) + ;; (visual-line-mode 0) + ) - (add-hook 'org-present-mode-hook 'my/org-present-start) - (add-hook 'org-present-mode-quit-hook 'my/org-present-end) + (add-hook 'org-present-mode-hook 'my/org-present-start) + (add-hook 'org-present-mode-quit-hook 'my/org-present-end)) - (require 'org-roam) - (bind-keys ("C-c n l" . org-roam-buffer-toggle) - ("C-c n f" . org-roam-node-find) - ("C-c n g" . org-roam-graph) - ("C-c n i" . org-roam-node-insert) - ("C-c n c" . org-roam-capture)) + ;; (require 'org-roam) + ;; (bind-keys ("C-c n l" . org-roam-buffer-toggle) + ;; ("C-c n f" . org-roam-node-find) + ;; ("C-c n g" . org-roam-graph) + ;; ("C-c n i" . org-roam-node-insert) + ;; ("C-c n c" . org-roam-capture)) ;; (setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag))) - (org-roam-db-autosync-mode) + ;; (org-roam-db-autosync-mode) (add-hook 'org-mode-hook 'org-modern-mode) @@ -1973,9 +2002,16 @@ for completion. That makes it really annoying to use; don't use yasnippet with e #+END_SRC #+BEGIN_SRC elisp - (setopt lui-time-stamp-format "[%Y-%m-%d %H:%M]") - (setopt slack-render-profile-images-p nil) - (setopt slack-buffer-function #'switch-to-buffer) + (use-package lui + :defer t + :custom + (lui-time-stamp-format "[%Y-%m-%d %H:%M]")) + + (use-package slack + :commands slack-start + :custom + (slack-render-profile-images-p nil) + (slack-buffer-function #'switch-to-buffer)) #+END_SRC ** Ledger @@ -2027,12 +2063,13 @@ for completion. That makes it really annoying to use; don't use yasnippet with e enable = true; extraPackages = epkgs: with epkgs; [ (epkgs.trivialBuild { - name = "claude-code"; + pname = "claude-code"; + version = "0.4.5"; src = pkgs.fetchFromGitHub { owner = "stevemolitor"; repo = "claude-code.el"; - rev = "4a9914bd4161eb43f489820f9174c62390e5adc8"; - sha256 = "sha256-ISlD6q1hceckry1Jd19BX1MfobHJxng5ulX2gq9f644="; + rev = "03199df8b3a1e9cd4857f0851f7a912ba524aff3"; + sha256 = "sha256-5QJrWIu4EgnHcOqMwlrs2JBBx7aI9OaSJswesr6Apfk="; }; packageRequires = [ epkgs.inheritenv ]; }) @@ -2043,8 +2080,9 @@ for completion. That makes it really annoying to use; don't use yasnippet with e #+END_SRC #+BEGIN_SRC elisp - (require 'claude-code) - (keymap-global-set "C-c c" claude-code-command-map) + (use-package claude-code + :bind-keymap ("C-c c" . claude-code-command-map) + :custom (claude-code-optimize-window-resize nil)) #+END_SRC * Theme I like Catppuccin Frappe as my theme. Let's use it in as many places as we can.