diff --git a/home.org b/home.org index eecb056..94b8e6b 100644 --- a/home.org +++ b/home.org @@ -858,7 +858,10 @@ its own devil-mode-only repeat maps that don't interfere when using normal modif ("z" . repeat)) (bind-keys ("" . (lambda () (interactive) (god-mode-all 1)))) (defun my-god-mode-update-cursor-type () - (setq cursor-type (if (or god-local-mode buffer-read-only) 'box 'bar))) + (setq cursor-type (cond + (org-present-mode nil) + ((or god-local-mode buffer-read-only) 'box) + (t 'bar)))) (add-hook 'post-command-hook #'my-god-mode-update-cursor-type) (which-key-enable-god-mode-support)) @@ -968,191 +971,203 @@ available? It seems to work for now anyway... #+END_SRC #+BEGIN_SRC elisp :noweb-ref emacs_config - (use-package nix-mode - :mode "\\.nix\\'") + (use-package nix-mode + :mode "\\.nix\\'") - (use-package nix-flake - :bind ("C-x p n" . project-nix-flake) - :config - (defun project-nix-flake () - (interactive) - (nix-flake (project-root (project-current t))))) - - (use-package lua-mode - :mode "\\.lua\\'") - - (use-package jenkinsfile-mode - :mode "\\.jenkinsfile\\'") - - (setq major-mode-remap-alist '((rust-mode . rust-mode))) - - (use-package rust-mode - :init (setq rust-mode-treesitter-derive t)) - - (defun yaml-validate () + (use-package nix-flake + :bind ("C-x p n" . project-nix-flake) + :config + (defun project-nix-flake () (interactive) - (compile (concat "yamllint -d '{extends: default, rules: {indentation: {indent-sequences: false}, braces: {max-spaces-inside: 1}}}' " (buffer-file-name)) t)) + (nix-flake (project-root (project-current t))))) - (use-package yaml-ts-mode - :mode "\\.yaml\\'") + (use-package lua-mode + :mode "\\.lua\\'") - (use-package yaml-pro - :hook (yaml-ts-mode . yaml-pro-ts-mode)) + (use-package jenkinsfile-mode + :mode "\\.jenkinsfile\\'") - (use-package sly - :hook lisp-mode-hook - :custom - (inferior-lisp-program "sbcl")) + (setq major-mode-remap-alist '((rust-mode . rust-mode))) - (use-package sly-macrostep - :defer t - :after sly - :init - (add-to-list 'sly-contribs 'sly-macrostep)) + (use-package rust-mode + :init (setq rust-mode-treesitter-derive t)) - (use-package consult-eglot - :commands - consult-eglot-symbols) + (defun yaml-validate () + (interactive) + (compile (concat "yamllint -d '{extends: default, rules: {indentation: {indent-sequences: false}, braces: {max-spaces-inside: 1}}}' " (buffer-file-name)) t)) - (use-package typescript-ts-mode - :mode "\\.ts\\'" ("\\.tsx\\'" . tsx-ts-mode) - :custom - (typescript-ts-mode-indent-offset 4) - (defun tsx-ts-mode--indent-compatibility-b893426 () - "Indent rules helper, to handle different releases of tree-sitter-tsx. - Check if a node type is available, then return the right indent rules." - ;; handle https://github.com/tree-sitter/tree-sitter-typescript/commit/b893426b82492e59388a326b824a346d829487e8 - (condition-case nil - (progn (treesit-query-capture 'tsx '((jsx_fragment) @capture)) - `(((match "<" "jsx_fragment") parent 0) - ((parent-is "jsx_fragment") parent typescript-ts-mode-indent-offset))) - (treesit-query-error - `(((match "<" "jsx_text") parent 0) - ((parent-is "jsx_text") grand-parent typescript-ts-mode-indent-offset)))))) + (use-package yaml-ts-mode + :mode "\\.yaml\\'") - (use-package rust-ts-mode - :mode "\\.rs\\'" - :config - (bind-keys :map rust-ts-mode-map - ("C-c u" . string-inflection-rust-style-cycle))) + (use-package yaml-pro + :hook (yaml-ts-mode . yaml-pro-ts-mode)) - (use-package java-ts-mode - :mode "\\.java\\'" - :config - (bind-keys :map java-ts-mode-map - ("C-c u" . string-inflection-java-style-cycle))) + (use-package sly + :hook lisp-mode-hook + :custom + (inferior-lisp-program "sbcl")) - (use-package sql-indent - :hook (sql-mode-hook . sqlind-minor-mode)) + (use-package sly-macrostep + :defer t + :after sly + :init + (add-to-list 'sly-contribs 'sly-macrostep)) - (use-package haskell-ts-mode - :mode "\\.hs\\'" - :custom (haskell-ts-use-indent tc)) + (use-package consult-eglot + :commands + consult-eglot-symbols) - (use-package flymake - :bind - (:map prog-mode-map - ("C-c D" . flymake-show-project-diagnostics) - ("M-n" . flymake-goto-next-error) - ("M-p" . flymake-goto-prev-error))) + (use-package typescript-ts-mode + :mode "\\.ts\\'" ("\\.tsx\\'" . tsx-ts-mode) + :custom + (typescript-ts-mode-indent-offset 4) + (defun tsx-ts-mode--indent-compatibility-b893426 () + "Indent rules helper, to handle different releases of tree-sitter-tsx. + Check if a node type is available, then return the right indent rules." + ;; handle https://github.com/tree-sitter/tree-sitter-typescript/commit/b893426b82492e59388a326b824a346d829487e8 + (condition-case nil + (progn (treesit-query-capture 'tsx '((jsx_fragment) @capture)) + `(((match "<" "jsx_fragment") parent 0) + ((parent-is "jsx_fragment") parent typescript-ts-mode-indent-offset))) + (treesit-query-error + `(((match "<" "jsx_text") parent 0) + ((parent-is "jsx_text") grand-parent typescript-ts-mode-indent-offset)))))) - (use-package eglot - :commands eglot - :custom - (eglot-ignored-server-capabilities '(:inlayHintProvider)) - :config - (bind-keys :map eglot-mode-map - ("C-c A" . eglot-code-actions) - ("C-c R" . eglot-rename) - ("C-c I" . eglot-find-implementation)) - - (add-hook 'eglot-managed-mode-hook (lambda () (eglot-inlay-hints-mode -1)) nil t)) + (use-package rust-ts-mode + :mode "\\.rs\\'" + :config + (bind-keys :map rust-ts-mode-map + ("C-c u" . string-inflection-rust-style-cycle))) - (use-package lispy - :hook (emacs-lisp-mode lisp-mode) - :init (setq lispy-compat '(god-mode edebug)) - :config - (bind-keys :map lispy-mode-map - ("i" . (lambda () - (interactive) - (if god-global-mode - (god-mode-all -1) - (special-lispy-tab)))))) + (use-package java-ts-mode + :mode "\\.java\\'" + :config + (bind-keys :map java-ts-mode-map + ("C-c u" . string-inflection-java-style-cycle)) + (push `((n-p-gp nil "block" "lambda_expression") parent-bol java-ts-mode-indent-offset) + (cdar java-ts-mode--indent-rules)) + (push `((n-p-gp "}" "block" "lambda_expression") parent-bol 0) + (cdar java-ts-mode--indent-rules))) - (use-package smartparens - :hook - emacs-lisp-mode - common-lisp-mode - :config - (add-to-list 'sp-lisp-modes 'sly-mrepl-mode) - (require 'smartparens-config) - (setq sp-highlight-pair-overlay nil - sp-highlight-wrap-overlay nil - sp-highlight-wrap-tag-overlay nil)) + (use-package sql-indent + :hook (sql-mode-hook . sqlind-minor-mode)) - (setq-default indent-tabs-mode nil) - (setq-default tab-width 4) - (global-tree-sitter-mode 1) - (setq-default fill-column 100) - (defun jf-init-fill-column () - (display-fill-column-indicator-mode 1)) + (use-package haskell-ts-mode + :mode "\\.hs\\'" + :custom (haskell-ts-use-indent tc)) - (defvar jf/class-name-to-file-search-path (list "src/main/java" "src/test/java")) + (use-package flymake + :bind + (:map prog-mode-map + ("C-c D" . flymake-show-project-diagnostics) + ("M-n" . flymake-goto-next-error) + ("M-p" . flymake-goto-prev-error))) - (defun jf/class-name-to-file (class-name) - (let ((root (project-root (project-current t))) - (fragment (format "%s.java" (replace-regexp-in-string "\\." "/" class-name))) - (result)) - (dolist (p jf/class-name-to-file-search-path result) - (unless result - (let ((path (format "%s/%s" p fragment))) - (when (file-exists-p (concat root path)) - (setq result path))))))) + (use-package eglot + :commands eglot + :custom + (eglot-ignored-server-capabilities '(:inlayHintProvider)) + :config + (bind-keys :map eglot-mode-map + ("C-c A" . eglot-code-actions) + ("C-c R" . eglot-rename) + ("C-c I" . eglot-find-implementation)) + + (add-hook 'eglot-managed-mode-hook (lambda () (eglot-inlay-hints-mode -1)) nil t)) - (defun jf/compile-class-to-file () - (jf/class-name-to-file (concat (match-string 1) (match-string 2)))) + (use-package lispy + :hook (emacs-lisp-mode lisp-mode) + :init (setq lispy-compat '(god-mode edebug)) + :config + (bind-keys :map lispy-mode-map + ("i" . (lambda () + (interactive) + (if god-global-mode + (god-mode-all -1) + (special-lispy-tab)))))) - ;(add-to-list 'compilation-error-regexp-alist-alist - ; '(java-stack-trace . - ; ("^[[:space:]]*at \\(\\(?:[[:lower:]]+\\.\\)+\\)[^(]+(\\([[:alnum:]]+\\)\\.java:\\([[:digit:]]+\\))" - ; jf/compile-class-to-file 3))) - ;(add-to-list 'compilation-error-regexp-alist 'java-stack-trace) + (use-package smartparens + :hook + emacs-lisp-mode + common-lisp-mode + :config + (add-to-list 'sp-lisp-modes 'sly-mrepl-mode) + (require 'smartparens-config) + (setq sp-highlight-pair-overlay nil + sp-highlight-wrap-overlay nil + sp-highlight-wrap-tag-overlay nil)) - (add-hook 'prog-mode-hook 'jf-init-fill-column) - (add-hook 'java-mode-hook (lambda () (c-set-offset 'arglist-intro '+))) + (setq-default indent-tabs-mode nil) + (setq-default tab-width 4) + (global-tree-sitter-mode 1) + (setq-default fill-column 100) + (defun jf-init-fill-column () + (display-fill-column-indicator-mode 1)) - (dolist (hook - (list 'grep-mode-hook - 'flymake-project-diagnostics-mode-hook - 'xref--xref-buffer-mode-hook - 'embark-collect-mode-hook - 'compilation-mode-hook - 'sly-mrepl-mode-hook - 'eglot-list-connections-mode-hook)) - (add-hook hook 'tab-line-mode)) + (defvar jf/class-name-to-file-search-path (list "src/main/java" "src/test/java")) - (let ((bottom-window-params '((side . bottom) - (slot . 1) - (window-height . 0.33) - (window-parameters (no-delete-other-windows . t)))) - (right-window-params '((side . right) - (window-width . 0.5) - (window-parameters (no-delete-other-windows . t))))) - (setopt display-buffer-alist - (mapcar (lambda (buffer) `(,buffer - (display-buffer-reuse-window display-buffer-in-side-window) - ,@bottom-window-params)) - (list - "\\*Flymake diagnostics *" - "\\*Embark Export *" - "\\*Embark Collect *" - "\\*xref*" - "\\*compilation\\*" - "\\*sly-mrepl *" - "\\*Messages\\*" - "\\*EGLOT connections\\*")))) + (defun jf/class-name-to-file (class-name) + (let ((root (project-root (project-current t))) + (fragment (format "%s.java" (replace-regexp-in-string "\\." "/" class-name))) + (result)) + (dolist (p jf/class-name-to-file-search-path result) + (unless result + (let ((path (format "%s/%s" p fragment))) + (when (file-exists-p (concat root path)) + (setq result path))))))) - (setq ediff-split-window-function 'split-window-horizontally) + (defun jf/compile-class-to-file () + (jf/class-name-to-file (concat (match-string 1) (match-string 2)))) + + ;(add-to-list 'compilation-error-regexp-alist-alist + ; '(java-stack-trace . + ; ("^[[:space:]]*at \\(\\(?:[[:lower:]]+\\.\\)+\\)[^(]+(\\([[:alnum:]]+\\)\\.java:\\([[:digit:]]+\\))" + ; jf/compile-class-to-file 3))) + ;(add-to-list 'compilation-error-regexp-alist 'java-stack-trace) + + (add-hook 'prog-mode-hook 'jf-init-fill-column) + (add-hook 'java-mode-hook (lambda () (c-set-offset 'arglist-intro '+))) + + (dolist (hook + (list 'grep-mode-hook + 'flymake-project-diagnostics-mode-hook + 'xref--xref-buffer-mode-hook + 'embark-collect-mode-hook + 'compilation-mode-hook + 'sly-mrepl-mode-hook + 'eglot-list-connections-mode-hook)) + (add-hook hook 'tab-line-mode)) + + (let ((bottom-window-params '((side . bottom) + (slot . 1) + (window-height . 0.33) + (window-parameters (no-delete-other-windows . t)))) + (right-window-params '((side . right) + (window-width . 0.5) + (window-parameters (no-delete-other-windows . t))))) + (setopt display-buffer-alist + (append + (mapcar (lambda (buffer) `(,buffer + (display-buffer-reuse-window display-buffer-in-side-window) + ,@bottom-window-params)) + (list + "\\*Flymake diagnostics *" + "\\*Embark Export *" + "\\*Embark Collect *" + "\\*xref*" + "\\*compilation\\*" + "\\*sly-mrepl *" + "\\*Messages\\*" + "\\*EGLOT connections\\*")) + (mapcar (lambda (buffer) `(,buffer + (display-buffer-reuse-window display-buffer-in-side-window) + ,@right-window-params)) + (list + "magit: *" + "magit-revision: *" + "\\*eldoc\\*"))))) + + (setq ediff-split-window-function 'split-window-horizontally) #+END_SRC ** Envrc @@ -1327,8 +1342,11 @@ available? It seems to work for now anyway... #+BEGIN_SRC nix :noweb-ref emacs_packages org-modern + org-present org-roam + ox-slack verb + visual-fill-column #+END_SRC #+BEGIN_SRC elisp :noweb-ref emacs_config @@ -1380,6 +1398,62 @@ available? It seems to work for now anyway... (set-face-attribute 'org-level-7 nil :font "Iosevka Aile") (set-face-attribute 'org-level-8 nil :font "Iosevka Aile")) + (use-package org-present + :commands (org-present) + :config + (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 " ") + + ;; 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) + ) + + (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) + + ;; 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) + ) + + (add-hook 'org-present-mode-hook 'my/org-present-start) + (add-hook 'org-present-mode-quit-hook 'my/org-present-end)) + (use-package org-roam :bind (("C-c n l" . org-roam-buffer-toggle) ("C-c n f" . org-roam-node-find)