flake/config/emacs/init.el
2023-12-06 11:39:57 -06:00

1722 lines
57 KiB
EmacsLisp
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; init.el --- Emacs Config -*- lexical-binding:
;; Author: Zonsopkomst
;; Type: Configuration
;; Created: 2023-09-17
;;
;;; Commentary:
;;
;; A copy and paste job with hopefully some thought, by Zonsopkomst
;;
;;; Code:
;; (message (system-name))
;; TODO
[[https://www.linuxjournal.com/content/org-mode-latex-exporter-latex-non-texers]]
[[https://config.daviwil.com/emacs]]
[[https://www.reddit.com/r/emacs/comments/6r32q4/orgmode_whats_your_html_export_look_like/]]
[[https://blog.aaronbieber.com/2016/09/24/an-agenda-for-life-with-org-mode.html][Agenda]]
[[https://orgmode.org/worg/org-tutorials/orgtutorial_dto.html][Agenda]]
"Straight - Package Manager"
"straight.el: next-generation, purely functional package manager for the Emacs hacker."
[[https://github.com/radian-software/straight.el]]
;; Disable package.el in favor of straight.el
(setq package-enable-at-startup nil)
(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(bootstrap-version 6))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
;; Integration with use-package
(straight-use-package 'use-package)
;; Configure use-package to use straight.el by default
(use-package straight
:custom
(straight-use-package-by-default t))
"CUSTOM"
"transparent windows"
;;(set-frame-parameter (selected-frame) 'alpha '(<active> . <inactive>))
;;(set-frame-parameter (selected-frame) 'alpha <both>)
;; (set-frame-parameter (selected-frame) 'alpha '(95 . 50))
;; (add-to-list 'default-frame-alist '(alpha . (95 . 50)))
(defun toggle-transparency ()
(interactive)
(let ((alpha (frame-parameter nil 'alpha)))
(set-frame-parameter
nil 'alpha
(if (eql (cond ((numberp alpha) alpha)
((numberp (cdr alpha)) (cdr alpha))
;; Also handle undocumented (<active> <inactive>) form.
((numberp (cadr alpha)) (cadr alpha)))
100)
'(85 . 50) '(100 . 100)))))
(global-set-key (kbd "C-c t") 'toggle-transparency)
"Garbage Collection"
"The default is 800 kilobytes. Measured in bytes."
(setq gc-cons-threshold (* 50 1000 1000))
"Profile emacs startup"
(add-hook 'emacs-startup-hook
(lambda ()
(message "*** Emacs loaded in %s seconds with %d garbage collections."
(emacs-init-time "%.2f")
gcs-done)))
"Removes *scratch* from buffer after the mode has been set."
(defun remove-scratch-buffer ()
(if (get-buffer "*scratch*")
(kill-buffer "*scratch*")))
(add-hook 'after-change-major-mode-hook 'remove-scratch-buffer)
"No more typing the whole yes or no. Just y or n will do."
;;(fset 'yes-or-no-p 'y-or-n-p)
(setq use-short-answers t)
"Remove confirmation if a file or buffer does not exist when you use C-x C-f or C-x b"
(setq confirm-nonexistent-file-or-buffer nil)
"Stop emacs from closing when hitting ESC"
(global-set-key (kbd "<escape>") 'keyboard-escape-quit)
"Add proper word wrapping"
(global-visual-line-mode t)
"Visual Appearance"
;; (menu-bar-mode -1)
(scroll-bar-mode -1)
(tool-bar-mode -1)
(context-menu-mode 1)
"Column Numbers"
;; column-number-mode
(column-number-mode)
"Line Numbers"
(global-display-line-numbers-mode 1)
(setq display-line-numbers-type 'relative)
"Copy / Paste Defaults"
(cua-mode t)
(setq cua-auto-tabify-rectangles nil) ;; Don't tabify after rectangle commands
(transient-mark-mode 1) ;; No region when it is not highlighted
(setq cua-keep-region-after-copy t) ;; Standard Windows behaviour
;;(cua-selection-mode t) ;; cua goodness without copy/paste etc.
"Delete Other Windows"
(add-hook 'emacs-startup-hook
(lambda () (delete-other-windows)) t)
"CUSTOM-SET-VARIABLES"
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(custom-safe-themes
'("f25f174e4e3dbccfcb468b8123454b3c61ba94a7ae0a870905141b050ad94b8f" default))
'(package-selected-packages
'(helm outline-magic neotree minimap nix-mode org-roam org-bullets json-mode smartparens prettier-js which-key magit dracula-theme use-package rainbow-delimiters paredit markdown-mode all-the-icons)))
(custom-set-faces)
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
;; Default Locale Coding System
(setq locale-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
;; Allow access from emacsclient
(add-hook 'after-init-hook
(lambda ()
(require 'server)
(unless (server-running-p)
(server-start))))
"CENTRALIZE BACKUP FILES"
(setq backup-directory-alist '(("." . "~/.emacs.d/backup"))
backup-by-copying t ; Don't delink hardlinks
version-control t ; Use version numbers on backups
delete-old-versions t ; Automatically delete excess backups
kept-new-versions 20 ; how many of the newest versions to keep
kept-old-versions 5) ; and how many of the old
"THEME"
;;(use-package doom-themes
;; :config
;; ;; Global settings (defaults)
;; (setq doom-themes-enable-bold t ; if nil, bold is universally disabled
;; doom-themes-enable-italic t) ; if nil, italics is universally disabled
;; (load-theme 'doom-wilmersdorf t)
;;
;; ;; Enable flashing mode-line on errors
;; (doom-themes-visual-bell-config)
;; ;; Enable custom neotree theme (all-the-icons must be installed!)
;; (doom-themes-neotree-config)
;; ;; or for treemacs users
;; (setq doom-themes-treemacs-theme "doom-atom") ; use "doom-colors" for less minimal icon theme
;; (doom-themes-treemacs-config)
;; ;; Corrects (and improves) org-mode's native fontification.
;; (doom-themes-org-config))
;; ;; Icons for treemacs
;; (setq doom-themes-treemacs-theme "doom-colors")
"dracula-theme"
[[https://github.com/dracula/emacs]]
;;(use-package dracula-theme
;; :config
;; (load-theme 'dracula t))
"monokai theme"
[[https://github.com/oneKelvinSmith/monokai-emacs]]
(use-package monokai-theme
:config
(load-theme 'monokai t))
"font"
(set-face-attribute 'default nil :family "SpaceMono Nerd Font" :weight 'regular :height 120)
(set-face-attribute 'fixed-pitch nil :font "SpaceMono Nerd Font" :weight 'bold :height 190)
(set-face-attribute 'variable-pitch nil :font "SpaceMono Nerd Font" :weight 'bold :height 1.3)
"Add frame borders and window dividers"
(modify-all-frames-parameters
'((right-divider-width . 10)
(internal-border-width . 10)))
(dolist (face '(window-divider
window-divider-first-pixel
window-divider-last-pixel))
(face-spec-reset-face face)
(set-face-foreground face (face-attribute 'default :background)))
(set-face-background 'fringe (face-attribute 'default :background))
"LANGUAGES / MODES"
"json"
[[https://github.com/json-emacs/json-mode]]
(use-package json-mode)
"nix-mode"
"Nix mode for editing nix expressions"
[[https://github.com/NixOS/nix-mode]]
(use-package nix-mode
:mode "\\.nix\\'")
"lsp-mode"
"lsp mode for expressions"
[[https://github.com/emacs-lsp/lsp-mode]]
(use-package lsp-mode
:defer t
:init
(setq lsp-keymap-prefix "C-c l")
:config
(setq lsp-headerline-breadcrumb-enable nil))
(use-package dap-mode
:after lsp-mode
:ensure t
:defer t)
(use-package lsp-ui
:commands lsp-ui-mode
:config
(setq lsp-ui-doc-enable nil)
(setq lsp-ui-doc-header t)
(setq lsp-ui-doc-include-signature t)
(setq lsp-ui-doc-border (face-foreground 'default))
(setq lsp-ui-sideline-show-code-actions t)
(setq lsp-ui-sideline-delay 0.05))
"PACKAGES"
;; In Alphabetical Order
"ace-window"
[[https://github.com/abo-abo/ace-window]]
(use-package ace-window)
(global-set-key (kbd "M-o") 'ace-window)
(setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l))
(defvar aw-dispatch-alist
'((?x aw-delete-window "Delete Window"
(?m aw-swap-window "Swap Windows")
(?M aw-move-window "Move Window")
(?c aw-copy-window "Copy Window")
(?j aw-switch-buffer-in-window "Select Buffer")
(?n aw-flip-window)
(?u aw-switch-buffer-other-window "Switch Buffer Other Window")
(?c aw-split-window-fair "Split Fair Window")
(?v aw-split-window-vert "Split Vert Window")
(?b aw-split-window-horz "Split Horz Window")
(?o delete-other-windows "Delete Other Windows")
(?? aw-show-dispatch-help)))
"List of actions for `aw-dispatch-default'.")
"all-the-icons"
[[https://github.com/domtronn/all-the-icons.el]]
(use-package all-the-icons
:if (display-graphic-p))
"avy"
"Jump to other windows"
[[https://github.com/abo-abo/avy]]
(use-package avy)
(global-set-key (kbd "C-:") 'avy-goto-char)
(avy-setup-default)
(global-set-key (kbd "C-c C-j") 'avy-resume)
"auto-package-update"
[[https://github.com/rranelli/auto-package-update.el]]
(use-package auto-package-update)
(auto-package-update-maybe)
"async"
"Emacs looks less often."
(use-package async
:defer t
:init
(dired-async-mode 1))
(use-package savehist
:defer 2
:init (savehist-mode t))
(use-package repeat
:defer 10
:init
(repeat-mode +1))
"beacon"
"highlight cursor"
[[https://github.com/Malabarba/beacon]]
(use-package beacon)
(beacon-mode 1)
(setq beacon-push-mark 35)
(setq beacon-color "#666600")
"centaur-tabs"
"Emacs tabs"
[[https://github.com/ema2159/centaur-tabs]]
(use-package centaur-tabs
:if window-system
:demand
:init
;; Set the style to alternate with icons
(setq centaur-tabs-style "alternate")
(setq centaur-tabs-set-icons t)
:config
;; Enable centaur-tabs
(centaur-tabs-mode t)
(centaur-tabs-headline-match)
(setq centaur-tabs-set-bar 'over)
(setq centaur-tabs-modified-marker ""))
(setq centaur-tabs-height 36
centaur-tabs-set-icons t
centaur-tabs-modified-marker ""
centaur-tabs-close-button ""
centaur-tabs-gray-out-icons 'buffer)
(setq x-underline-at-descent-line t)
(centaur-tabs-change-fonts "JetBrains Mono" 160)
"corfu"
"In-buffer Completion (with tab)"
[[https://github.com/minad/corfu]]
(use-package corfu
;; Optional customizations
;; :custom
;; (corfu-cycle t) ;; Enable cycling for `corfu-next/previous'
;; (corfu-auto t) ;; Enable auto completion
;; (corfu-separator ?\s) ;; Orderless field separator
;; (corfu-quit-at-boundary nil) ;; Never quit at completion boundary
;; (corfu-quit-no-match nil) ;; Never quit, even if there is no match
;; (corfu-preview-current nil) ;; Disable current candidate preview
;; (corfu-preselect 'prompt) ;; Preselect the prompt
;; (corfu-on-exact-match nil) ;; Configure handling of exact matches
;; (corfu-scroll-margin 5) ;; Use scroll margin
;; Enable Corfu only for certain modes.
;; :hook ((prog-mode . corfu-mode)
;; (shell-mode . corfu-mode)
;; (eshell-mode . corfu-mode))
;; Recommended: Enable Corfu globally.
;; This is recommended since Dabbrev can be used globally (M-/).
;; See also `global-corfu-modes'.
:init
(global-corfu-mode))
;; A few more useful configurations...
(use-package emacs
:init
;; TAB cycle if there are only few candidates
(setq completion-cycle-threshold 3)
;; Emacs 28: Hide commands in M-x which do not apply to the current mode.
;; Corfu commands are hidden, since they are not supposed to be used via M-x.
;; (setq read-extended-command-predicate
;; #'command-completion-default-include-p)
;; Enable indentation+completion using the TAB key.
;; `completion-at-point' is often bound to M-TAB.
(setq tab-always-indent 'complete))
"dashboard"
"A dashboard for Emacs"
[[https://github.com/emacs-dashboard/emacs-dashboard]]
(use-package dashboard
:config
(dashboard-setup-startup-hook))
;; Set the title
(setq dashboard-banner-logo-title "Zonsemacs | C-x C-f Open a file | C-x k Kill Buffer | C-h f TERM RET ")
;; Set the banner
;;(setq dashboard-startup-banner 'logo)
(setq dashboard-startup-banner
(pcase (system-name)
("weda" "~/.emacs.d/00 assets/ac273182b3bbd00f9e72223861d3938b.png")
("tyr" "~/.emacs.d/00 assets/ac273182b3bbd00f9e72223861d3938b.png")
("DESKTOP-FIS3P5B" "c:/Users/Church/AppData/Roaming/.emacs.d/00 assets/ac273182b3bbd00f9e72223861d3938b.png")))
;; Value can be
;; - nil to display no banner
;; - 'official which displays the official emacs logo
;; - 'logo which displays an alternative emacs logo
;; - 1, 2 or 3 which displays one of the text banners
;; - "path/to/your/image.gif", "path/to/your/image.png" or "path/to/your/text.txt" which displays whatever gif/image/text you would prefer
;; - a cons of '("path/to/your/image.png" . "path/to/your/text.txt")
;; Content is not centered by default. To center, set
(setq dashboard-center-content t)
;; To disable shortcut "jump" indicators for each section, set
(setq dashboard-show-shortcuts nil)
(setq dashboard-items '((recents . 5)
(bookmarks . 5)
(projects . 5)
(agenda . 5)
(registers . 5)))
(setq dashboard-set-navigator t)
(setq dashboard-set-init-info t)
(setq dashboard-projects-switch-function 'counsel-projectile-switch-project-by-name)
(setq dashboard-projects-switch-function 'projectile-persp-switch-project)
(add-to-list 'dashboard-items '(agenda) t)
(setq dashboard-week-agenda t)
"dired+"
[[https://www.emacswiki.org/emacs/DiredPlus]]
;; Open dired folders in same buffer
;; (put 'dired-find-alternate-file 'disabled nil)
;; (setq dired-guess-shell-alist-user `(("\\.png\\'" "gimp")
;; ("\\.jpe?g\\'" "gimp")
;; ("\\.mp4\\'" "vlc")))
(use-package dired+
;; nil
;; :commands
;; (dired dired-jump)
:custom
(dired-listing-switches
"-goah --group-directories-first --time-style=long-iso")
(dired-dwim-target t)
(delete-by-moving-to-trash t))
;; Hide hidden files
(use-package dired-hide-dotfiles
:hook
(dired-mode . dired-hide-dotfiles-mode)
:bind
(:map dired-mode-map ("." . dired-hide-dotfiles-mode)))
;; Keep folders clean (create new directory when not yet existing)
;;(make-directory (expand-file-name "backups/" user-emacs-directory) t)
(setq-default backup-directory-alist
`(("." . ,(expand-file-name "backups/" user-emacs-directory)))
create-lockfiles nil) ; No lock files
;;; Configure outline minor modes
;; Less crazy key bindings for outline-minor-mode
(setq outline-minor-mode-prefix "\C-c\C-o")
;; load outline-magic along with outline-minor-mode
(add-hook 'outline-minor-mode-hook
(lambda ()
(require 'outline-magic)
(define-key outline-minor-mode-map "\C-c\C-o\t" 'outline-cycle)
(define-key outline-minor-mode-map (kbd "<backtab>") 'outline-cycle)))
;; revert dired and other buffers
(setq global-auto-revert-non-file-buffers t)
(use-package doom-modeline
:init (doom-modeline-mode 1))
;; If non-nil, cause imenu to see `doom-modeline' declarations.
;; This is done by adjusting `lisp-imenu-generic-expression' to
;; include support for finding `doom-modeline-def-*' forms.
;; Must be set before loading doom-modeline.
(setq doom-modeline-support-imenu t)
;; How tall the mode-line should be. It's only respected in GUI.
;; If the actual char height is larger, it respects the actual height.
(setq doom-modeline-height 25)
;; How wide the mode-line bar should be. It's only respected in GUI.
(setq doom-modeline-bar-width 4)
;; Whether to use hud instead of default bar. It's only respected in GUI.
(setq doom-modeline-hud nil)
;; The limit of the window width.
;; If `window-width' is smaller than the limit, some information won't be
;; displayed. It can be an integer or a float number. `nil' means no limit."
(setq doom-modeline-window-width-limit 85)
;; How to detect the project root.
;; nil means to use `default-directory'.
;; The project management packages have some issues on detecting project root.
;; e.g. `projectile' doesn't handle symlink folders well, while `project' is unable
;; to hanle sub-projects.
;; You can specify one if you encounter the issue.
(setq doom-modeline-project-detection 'auto)
;; Determines the style used by `doom-modeline-buffer-file-name'.
;;
;; Given ~/Projects/FOSS/emacs/lisp/comint.el
;; auto => emacs/l/comint.el (in a project) or comint.el
;; truncate-upto-project => ~/P/F/emacs/lisp/comint.el
;; truncate-from-project => ~/Projects/FOSS/emacs/l/comint.el
;; truncate-with-project => emacs/l/comint.el
;; truncate-except-project => ~/P/F/emacs/l/comint.el
;; truncate-upto-root => ~/P/F/e/lisp/comint.el
;; truncate-all => ~/P/F/e/l/comint.el
;; truncate-nil => ~/Projects/FOSS/emacs/lisp/comint.el
;; relative-from-project => emacs/lisp/comint.el
;; relative-to-project => lisp/comint.el
;; file-name => comint.el
;; buffer-name => comint.el<2> (uniquify buffer name)
;;
;; If you are experiencing the laggy issue, especially while editing remote files
;; with tramp, please try `file-name' style.
;; Please refer to https://github.com/bbatsov/projectile/issues/657.
(setq doom-modeline-buffer-file-name-style 'auto)
;; Whether display icons in the mode-line.
;; While using the server mode in GUI, should set the value explicitly.
(setq doom-modeline-icon t)
;; Whether display the icon for `major-mode'. It respects `doom-modeline-icon'.
(setq doom-modeline-major-mode-icon t)
;; Whether display the colorful icon for `major-mode'.
;; It respects `nerd-icons-color-icons'.
(setq doom-modeline-major-mode-color-icon t)
;; Whether display the icon for the buffer state. It respects `doom-modeline-icon'.
(setq doom-modeline-buffer-state-icon t)
;; Whether display the modification icon for the buffer.
;; It respects `doom-modeline-icon' and `doom-modeline-buffer-state-icon'.
(setq doom-modeline-buffer-modification-icon t)
;; Whether display the time icon. It respects variable `doom-modeline-icon'.
(setq doom-modeline-time-icon t)
;; Whether to use unicode as a fallback (instead of ASCII) when not using icons.
(setq doom-modeline-unicode-fallback nil)
;; Whether display the buffer name.
(setq doom-modeline-buffer-name t)
;; Whether highlight the modified buffer name.
(setq doom-modeline-highlight-modified-buffer-name t)
;; When non-nil, mode line displays column numbers zero-based.
;; See `column-number-indicator-zero-based'.
(setq doom-modeline-column-zero-based t)
;; Specification of \"percentage offset\" of window through buffer.
;; See `mode-line-percent-position'.
(setq doom-modeline-percent-position '(-3 "%p"))
;; Format used to display line numbers in the mode line.
;; See `mode-line-position-line-format'.
(setq doom-modeline-position-line-format '("L%l"))
;; Format used to display column numbers in the mode line.
;; See `mode-line-position-column-format'.
(setq doom-modeline-position-column-format '("C%c"))
;; Format used to display combined line/column numbers in the mode line. See `mode-line-position-column-line-format'.
(setq doom-modeline-position-column-line-format '("%l:%c"))
;; Whether display the minor modes in the mode-line.
(setq doom-modeline-minor-modes nil)
;; If non-nil, a word count will be added to the selection-info modeline segment.
(setq doom-modeline-enable-word-count nil)
;; Major modes in which to display word count continuously.
;; Also applies to any derived modes. Respects `doom-modeline-enable-word-count'.
;; If it brings the sluggish issue, disable `doom-modeline-enable-word-count' or
;; remove the modes from `doom-modeline-continuous-word-count-modes'.
(setq doom-modeline-continuous-word-count-modes '(markdown-mode gfm-mode org-mode))
;; Whether display the buffer encoding.
(setq doom-modeline-buffer-encoding t)
;; Whether display the indentation information.
(setq doom-modeline-indent-info nil)
;; Whether display the total line number。
(setq doom-modeline-total-line-number nil)
;; If non-nil, only display one number for checker information if applicable.
(setq doom-modeline-checker-simple-format t)
;; The maximum number displayed for notifications.
(setq doom-modeline-number-limit 99)
;; The maximum displayed length of the branch name of version control.
(setq doom-modeline-vcs-max-length 12)
;; Whether display the workspace name. Non-nil to display in the mode-line.
(setq doom-modeline-workspace-name t)
;; Whether display the perspective name. Non-nil to display in the mode-line.
(setq doom-modeline-persp-name t)
;; If non nil the default perspective name is displayed in the mode-line.
(setq doom-modeline-display-default-persp-name nil)
;; If non nil the perspective name is displayed alongside a folder icon.
(setq doom-modeline-persp-icon t)
;; Whether display the `lsp' state. Non-nil to display in the mode-line.
(setq doom-modeline-lsp t)
;; Whether display the GitHub notifications. It requires `ghub' package.
(setq doom-modeline-github nil)
;; The interval of checking GitHub.
(setq doom-modeline-github-interval (* 30 60))
;; Whether display the modal state.
;; Including `evil', `overwrite', `god', `ryo' and `xah-fly-keys', etc.
(setq doom-modeline-modal t)
;; Whether display the modal state icon.
;; Including `evil', `overwrite', `god', `ryo' and `xah-fly-keys', etc.
(setq doom-modeline-modal-icon t)
;; Whether display the modern icons for modals.
(setq doom-modeline-modal-modern-icon t)
;; When non-nil, always show the register name when recording an evil macro.
(setq doom-modeline-always-show-macro-register nil)
;; Whether display the mu4e notifications. It requires `mu4e-alert' package.
;;(setq doom-modeline-mu4e nil)
;; also enable the start of mu4e-alert
;;(mu4e-alert-enable-mode-line-display)
;; Whether display the gnus notifications.
(setq doom-modeline-gnus t)
;; Whether gnus should automatically be updated and how often (set to 0 or smaller than 0 to disable)
(setq doom-modeline-gnus-timer 2)
;; Wheter groups should be excludede when gnus automatically being updated.
(setq doom-modeline-gnus-excluded-groups '("dummy.group"))
;; Whether display the IRC notifications. It requires `circe' or `erc' package.
(setq doom-modeline-irc t)
;; Function to stylize the irc buffer names.
(setq doom-modeline-irc-stylize 'identity)
;; Whether display the battery status. It respects `display-battery-mode'.
(setq doom-modeline-battery t)
;; Whether display the time. It respects `display-time-mode'.
(setq doom-modeline-time t)
;; Whether display the misc segment on all mode lines.
;; If nil, display only if the mode line is active.
(setq doom-modeline-display-misc-in-all-mode-lines t)
;; Whether display the environment version.
(setq doom-modeline-env-version t)
;; Or for individual languages
(setq doom-modeline-env-enable-python t)
(setq doom-modeline-env-enable-ruby t)
(setq doom-modeline-env-enable-perl t)
(setq doom-modeline-env-enable-go t)
(setq doom-modeline-env-enable-elixir t)
(setq doom-modeline-env-enable-rust t)
;; Change the executables to use for the language version string
(setq doom-modeline-env-python-executable "python") ; or `python-shell-interpreter'
(setq doom-modeline-env-ruby-executable "ruby")
(setq doom-modeline-env-perl-executable "perl")
(setq doom-modeline-env-go-executable "go")
(setq doom-modeline-env-elixir-executable "iex")
(setq doom-modeline-env-rust-executable "rustc")
;; What to display as the version while a new one is being loaded
(setq doom-modeline-env-load-string "...")
;; By default, almost all segments are displayed only in the active window. To
;; display such segments in all windows, specify e.g.
;;(setq doom-modeline-always-visible-segments '(mu4e irc))
;; Hooks that run before/after the modeline version string is updated
(setq doom-modeline-before-update-env-hook nil)
(setq doom-modeline-after-update-env-hook nil)
"emojify"
[[https://github.com/iqbalansari/emacs-emojify]]
(use-package emojify
:hook (after-init . global-emojify-mode))
(add-hook 'after-init-hook #'global-emojify-mode)
"expand region"
[[https://github.com/magnars/expand-region.el]]
(use-package expand-region)
(require 'expand-region)
(global-set-key (kbd "C-=") 'er/expand-region)
"flycheck"
"Syntax checking"
[[https://www.flycheck.org/en/latest/user/quickstart.html]]
(use-package flycheck
:init (global-flycheck-mode))
(add-hook 'after-init-hook #'global-flycheck-mode)
"format-all"
"Format code"
[[https://github.com/lassik/emacs-format-all-the-code]]
(use-package format-all)
"highlight todo"
[[https://github.com/tarsius/hl-todo]]
;;(use-package hl-todo)
;;(setq hl-todo-keyword-faces
;; '(("TODO" . "#FF0000")
;; ("WAIT" . "#FF0000")
;; ("HOLD" . "#A020F0")
;; ("SCHD" . "#1E90FF")))
"highligh indent guide"
[[https://github.com/DarthFennec/highlight-indent-guides]]
(use-package highlight-indent-guides
:defer t
:hook (prog-mode . highlight-indent-guides-mode)
:config
(setq highlight-indent-guides-method 'character)
(setq highlight-indent-guides-character ?\|)
(setq highlight-indent-guides-responsive 'top))
"ialign"
"Emacs package that provides visual version of align-regexp command."
[[https://github.com/mkcms/interactive-align]]
(use-package ialign)
(require 'ialign)
(global-set-key (kbd "C-x l") #'ialign)
"iedit"
"Edit multiple occurrences in the same way simultaneously"
[[https://github.com/victorhge/iedit]]
(use-package iedit)
(require 'iedit)
(defun iedit-dwim (arg)
"Starts iedit but uses \\[narrow-to-defun] to limit its scope."
(interactive "P")
(if arg
(iedit-mode)
(save-excursion
(save-restriction
(widen)
;; this function determines the scope of `iedit-start'.
(if iedit-mode
(iedit-done)
;; `current-word' can of course be replaced by other
;; functions.
(narrow-to-defun)
(iedit-start (current-word) (point-min) (point-max)))))))
(global-set-key (kbd "C-;") 'iedit-dwim)
"indent guide"
[[https://github.com/zk-phi/indent-guide]]
(use-package indent-guide)
(require 'indent-guide)
(indent-guide-global-mode)
(set-face-background 'indent-guide-face "dimgray")
;; You may also change the character for guides.
(setq indent-guide-char ":")
"magit"
[[https://github.com/magit/magit]]
(use-package magit)
;; Install package `delta`
;; Windows: `choco install delta`
;; Nix: `delta`
(use-package magit-delta
:hook (magit-mode . magit-delta-mode))
(use-package git-timemachine)
(use-package magit-section)
"marginalia"
(use-package marginalia
:config
(marginalia-mode))
;; Bind `marginalia-cycle' locally in the minibuffer. To make the binding
;; available in the *Completions* buffer, add it to the
;; `completion-list-mode-map'.
;; :bind (:map minibuffer-local-map
;; ("M-A" . marginalia-cycle))
(use-package embark
:bind
(("C-." . embark-act) ;; pick some comfortable binding
("C-;" . embark-dwim) ;; good alternative: M-.
("C-h B" . embark-bindings)) ;; alternative for `describe-bindings'
:init
;; Optionally replace the key help with a completing-read interface
(setq prefix-help-command #'embark-prefix-help-command)
;; Show the Embark target at point via Eldoc. You may adjust the Eldoc
;; strategy, if you want to see the documentation from multiple providers.
(add-hook 'eldoc-documentation-functions #'embark-eldoc-first-target)
;; (setq eldoc-documentation-strategy #'eldoc-documentation-compose-eagerly)
:config
;; Hide the mode line of the Embark live/completions buffers
(add-to-list 'display-buffer-alist
'("\\`\\*Embark Collect \\(Live\\|Completions\\)\\*"
nil
(window-parameters (mode-line-format . none)))))
;; Consult users will also want the embark-consult package.
(use-package embark-consult
:hook
(embark-collect-mode . consult-preview-at-point-mode))
"minimap"
[[https://github.com/dengste/minimap]]
(use-package minimap)
(minimap-create)
(setq minimap-window-location 'right)
(custom-set-faces
'(minimap-active-region-background
((((background dark)) (:background "#551a8b"))
(t (:background "#D3D3D3222222")))
"Face for the active region in the minimap.
By default, this is only a different background color."
:group 'minimap))
"move-text"
[[https://github.com/emacsfodder/move-texts]]
(use-package move-text)
(move-text-default-bindings)
(defun indent-region-advice (&rest ignored)
(let ((deactivate deactivate-mark))
(if (region-active-p)
(indent-region (region-beginning) (region-end))
(indent-region (line-beginning-position) (line-end-position)))
(setq deactivate-mark deactivate)))
(advice-add 'move-text-up :after 'indent-region-advice)
(advice-add 'move-text-down :after 'indent-region-advice)
"multiple-cursors"
[[https://github.com/magnars/multiple-cursors.el]]
(use-package multiple-cursors)
(require 'multiple-cursors)
(global-set-key (kbd "C-|") 'mc/edit-lines)
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
(global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
(global-set-key (kbd "C-S-<mouse-1>") 'mc/add-cursor-on-click)
(define-key mc/keymap (kbd "<return>") nil)
"mw-thesaurus"
[[https://github.com/agzam/mw-thesaurus.el]]
(use-package mw-thesaurus
:defer t
:commands mw-thesaurus-lookup-dwim
:hook (mw-thesaurus-mode . variable-pitch-mode)
:config
(map! :map mw-thesaurus-mode-map [remap evil-record-macro] #'mw-thesaurus--quit)
;; window on the right side
(add-to-list
'display-buffer-alist
`(,mw-thesaurus-buffer-name
(display-buffer-reuse-window
display-buffer-in-direction)
(direction . right)
(window . root)
(window-width . 0.3))))
"olivetti"
"Distraction-free writing"
(defun ews-distraction-free ()
"Distraction-free writing environment using Olivetti package."
(interactive)
(if (equal olivetti-mode nil)
(progn
(window-configuration-to-register 1)
(delete-other-windows)
(text-scale-set 2)
(olivetti-mode t))
(progn
(if (eq (length (window-list)) 1)
(jump-to-register 1))
(olivetti-mode 0)
(text-scale-set 0))))
(use-package olivetti
:demand t
:bind
(("<f9>" . ews-distraction-free)))
"orderless"
(use-package orderless
:init
;; Configure a custom style dispatcher (see the Consult wiki)
;; (setq orderless-style-dispatchers '(+orderless-dispatch)
;; orderless-component-separator #'orderless-escapable-split-on-space)
(setq completion-styles '(orderless basic)
completion-category-defaults nil
completion-category-overrides '((file (styles partial-completion)))))
"org-mode"
"Org Mode is an authoring tool and a TODO lists manager for GNU Emacs. It relies on a lightweight plain-text markup language used in files with the .org extension."
(use-package org :demand t)
"org-agenda"
;;(setq org-agenda-files
;; (cond ((string-equal (system-name) "weda")
;; (setq org-roam-directory "~/Syncthing/org-roam/stpaul's/00 org/todo.org"))
;; ((string-equal (system-name) "tyr")
;; (setq org-roam-directory "~/Syncthing/org-roam/stpaul's/00 org/todo.org"))
;; ((string-equal (system-name) "DESKTOP-FIS3P5B")
;; (setq org-roam-directory "c:/Users/Church/Documents/Syncthing/org-roam/stpaul's/00 org/stpaul's.org"))))
;;
;; set the default export scope to subtree
;;(setf org-export-initial-scope 'subtree)
(setq org-html-head "<meta http-equiv='X-UA-Compatible' content='IE=edge'><meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'><style>html{touch-action:manipulation;-webkit-text-size-adjust:100%}body{padding:0;margin:0;background:#f2f6fa;color:#3c495a;font-weight:normal;font-size:15px;font-family:'San Francisco','Roboto','Arial',sans-serif}h2,h3,h4,h5,h6{font-family:'Trebuchet MS',Verdana,sans-serif;color:#586b82;padding:0;margin:20px 0 10px 0;font-size:1.1em}h2{margin:30px 0 10px 0;font-size:1.2em}a{color:#3fa7ba;text-decoration:none}p{margin:6px 0;text-align:justify}ul,ol{margin:0;text-align:justify}ul>li>code{color:#586b82}pre{white-space:pre-wrap}#content{width:96%;max-width:1000px;margin:2% auto 6% auto;background:white;border-radius:2px;border-right:1px solid #e2e9f0;border-bottom:2px solid #e2e9f0;padding:0 115px 150px 115px;box-sizing:border-box}#postamble{display:none}h1.title{background-color:#343C44;color:#fff;margin:0 -115px;padding:60px 0;font-weight:normal;font-size:2em;border-top-left-radius:2px;border-top-right-radius:2px}@media (max-width: 1050px){#content{padding:0 70px 100px 70px}h1.title{margin:0 -70px}}@media (max-width: 800px){#content{width:100%;margin-top:0;margin-bottom:0;padding:0 4% 60px 4%}h1.title{margin:0 -5%;padding:40px 5%}}pre,.verse{box-shadow:none;background-color:#f9fbfd;border:1px solid #e2e9f0;color:#586b82;padding:10px;font-family:monospace;overflow:auto;margin:6px 0}#table-of-contents{margin-bottom:50px;margin-top:50px}#table-of-contents h2{margin-bottom:5px}#text-table-of-contents ul{padding-left:15px}#text-table-of-contents>ul{padding-left:0}#text-table-of-contents li{list-style-type:none}#text-table-of-contents a{color:#7c8ca1;font-size:0.95em;text-decoration:none}table{border-color:#586b82;font-size:0.95em}table thead{color:#586b82}table tbody tr:nth-child(even){background:#f9f9f9}table tbody tr:hover{background:#586b82!important;color:white}table .left{text-align:left}table .right{text-align:right}.todo{font-family:inherit;color:inherit}.done{color:inherit}.tag{background:initial}.tag>span{background-color:#eee;font-family:monospace;padding-left:7px;padding-right:7px;border-radius:2px;float:right;margin-left:5px}#text-table-of-contents .tag>span{float:none;margin-left:0}.timestamp{color:#7c8ca1}@media print{@page{margin-bottom:3cm;margin-top:3cm;margin-left:2cm;margin-right:2cm;font-size:10px}#content{border:none}}</style>")
"Export to Markdown"
(eval-after-load "org"
'(require 'ox-md nil t))
(setq org-todo-keywords
'((sequence "TODO(t)" "HOLD(h)" "SCHD(s)" "|" "DONE(d)" "FAIL(f)")))
(use-package org-appear
:hook
(org-mode . org-appear-mode))
(org-toggle-inline-images 1)
;;(use-package org-bullets)
;;(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))
"org-modern"
[[https://github.com/minad/org-modern]]
(use-package org-modern
:hook
(org-mode . global-org-modern-mode)
:custom
(org-modern-keyword nil)
(org-modern-checkbox nil)
(org-modern-table nil))
(require 'org-mouse)
(global-set-key (kbd "C-c l") #'org-store-link)
(global-set-key (kbd "C-c a") #'org-agenda)
(global-set-key (kbd "C-c c") #'org-capture)
(add-hook 'org-mode-hook 'visual-line-mode)
"Automatically mark parent as done when subtasks are completed"
(defun org-summary-todo (n-done n-not-done)
"Switch entry to DONE when all subentries are done, to TODO otherwise."
(let (org-log-done org-log-states) ; turn off logging
(org-todo (if (= n-not-done 0) "DONE" "TODO"))))
(add-hook 'org-after-todo-statistics-hook #'org-summary-todo)
(setq org-log-done 'time)
(setq org-log-done 'note)
"Improve org mode looks"
[[https://lucidmanager.org/productivity/ricing-org-mode/]]
(setq-default org-startup-indented t
org-pretty-entities t
org-use-sub-superscripts "{}"
org-hide-emphasis-markers t
org-startup-with-inline-images t
org-tags-column 0
org-catch-invisible-edits 'show-and-error
org-special-ctrl-a/e t
org-insert-heading-respect-content t
org-image-actual-width '(300))
;; Increase line spacing
(setq-default line-spacing 2)
;;"LaTeX previews"
;; (use-package org-fragtog
;; :after org
;; :custom
;; (org-startup-with-latex-preview t)
;; :hook
;; (org-mode . org-fragtog-mode)
;; :custom
;; (org-format-latex-options
;; (plist-put org-format-latex-options :scale 2)
;; (plist-put org-format-latex-options :foreground 'auto)
;; (plist-put org-format-latex-options :background 'auto)))
"org-inlinetask"
"Including code for a better return"
(require 'org-inlinetask)
;;(defun scimax/org-return (&optional ignore)
;; "Add new list item, heading or table row with RET.
;;A double return on an empty element deletes it.
;;Use a prefix arg to get regular RET. "
;; (interactive "P")
;; (if ignore
;; (org-return)
;; (cond
;;
;; ((eq 'line-break (car (org-element-context)))
;; (org-return-indent))
;;
;; ;; Open links like usual, unless point is at the end of a line.
;; ;; and if at beginning of line, just press enter.
;; ((or (and (eq 'link (car (org-element-context))) (not (eolp)))
;; (bolp))
;; (org-return))
;;
;; ;; It doesn't make sense to add headings in inline tasks. Thanks Anders
;; ;; Johansson!
;; ((org-inlinetask-in-task-p)
;; (org-return))
;;
;; ;; checkboxes too
;; ((org-at-item-checkbox-p)
;; (org-insert-todo-heading nil))
;;
;; ;; lists end with two blank lines, so we need to make sure we are also not
;; ;; at the beginning of a line to avoid a loop where a new entry gets
;; ;; created with only one blank line.
;; ((org-in-item-p)
;; (if (save-excursion (beginning-of-line) (org-element-property :contents-begin (org-element-context)))
;; (org-insert-heading)
;; (beginning-of-line)
;; (delete-region (line-beginning-position) (line-end-position))
;; (org-return)))
;;
;; ;; org-heading
;; ((org-at-heading-p)
;; (if (not (string= "" (org-element-property :title (org-element-context))))
;; (progn (org-end-of-meta-data)
;; (org-insert-heading-respect-content)
;; (outline-show-entry))
;; (beginning-of-line)
;; (setf (buffer-substring
;; (line-beginning-position) (line-end-position)) "")))
;;
;; ;; tables
;; ((org-at-table-p)
;; (if (-any?
;; (lambda (x) (not (string= "" x)))
;; (nth
;; (- (org-table-current-dline) 1)
;; (org-table-to-lisp)))
;; (org-return)
;; ;; empty row
;; (beginning-of-line)
;; (setf (buffer-substring
;; (line-beginning-position) (line-end-position)) "")
;; (org-return)))
;;
;; ;; fall-through case
;; (t
;; (org-return)))))
;;
;;
;;(define-key org-mode-map (kbd "RET")
;; 'scimax/org-return)
;;
"org-roam"
"Org-roam is a plain-text knowledge management system. It brings some of Roam's more powerful features into the Org-mode ecosystem."
[[https://github.com/org-roam/org-roam]]
(use-package org-roam
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert)
:map org-mode-map
("C-M-i" . completion-at-point))
:custom
(setq org-roam-complete-everywhere t)
:config
;; Change path for PC
;; (setq org-roam-directory
;; (pcase (system-name)
;; ("weda" "~/Syncthing/org-roam/")
;; ("tyr" "~/Syncthing/org-roam/")
;; ("DESKTOP-FIS3P5B" "c:/Users/Church/Documents/Syncthing/org-roam/")))
;; (setq org-roam-db-location
;; (pcase (system-name)
;; ("weda" "~/Syncthing/org-roam/org-roam.db")
;; ("tyr" "~/Syncthing/org-roam/org-roam.db")
;; ("DESKTOP-FIS3P5B" "c:/Users/Church/Documents/Syncthing/org-roam/org-roam.db"))))
(cond ((string-equal (system-name) "weda")
(setq org-roam-directory "~/Syncthing/org-roam/"))
((string-equal (system-name) "tyr")
(setq org-roam-directory "~/Syncthing/org-roam/"))
((string-equal (system-name) "DESKTOP-FIS3P5B")
(setq org-roam-directory "c:/Users/Church/Documents/Syncthing/org-roam/")))
(cond ((string-equal (system-name) "weda")
(setq org-roam-db-location "~/Syncthing/org-roam/org-roam.db"))
((string-equal (system-name) "tyr")
(setq org-roam-db-location "~/Syncthing/org-roam/org-roam.db"))
((string-equal (system-name) "DESKTOP-FIS3P5B")
(setq org-roam-db-location "c:/Users/Church/Documents/Syncthing/org-roam/org-roam.db")))
(setq org-roam-capture-templates
'(
("d" "default" plain "%?"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
"#+title: ${title}\n")
:unnarrowed t)
("b" "baptism" plain
"\n* Source\n\nAuthor: %^{Author}\nTitle: ${title}\nDate: %^{%T}\n\n* Summary\n\n%?"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
:unnarrowed t)
("e" "expense report" plain
"\n#+Author: Eric Wagner\n#+tags:\n#+OPTIONS: num:nil author:nil toc:nil\n* Expense Report\n#+ATTR_HTML: :border 2 :rules all :frame border\n|Field|Value|\n|---|---|\n|**Request for Check**|AMOUNT|\n|**Date**|%t|\n|**Reference**|${title}|\n|**Payable to**|PAYABLE_TO|\n|**Street Address**|n/a|\n|**Vendor(s)**|VENDOR|\n|**Reason**|REASON|\n|**Requested by**|NAME|\n|**Account Number**|ACT|"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
"#+title: ${title}\n")
:unnarrowed t)
("f" "flower order" plain
"\n#+Author: Eric Wagner\n#+tags:\n#+OPTIONS: num:nil author:nil toc:nil\n* Flower Order\n#+ATTR_HTML: :border 2 :rules all :frame border\n|Field|Value|\n|---|---|\n|**Total Due**|AMOUNT|\n|**Date Entered**|%t|\n|**Date Scheduled**|xxxxxx\n|**Reference**|${title}|\n|**Type**|FLOWER_TYPE|\n|**Bulletin Message**|The TYPE are given by NAME |\n|**Arrangment Instructions**|INSTRUCTIONS|\n|**Pickup Time**|TIME|\n|**Requested by**|NAME|\n|\n * [ ] Add to Prayer Chain?"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
"#+title: ${title}\n")
:unnarrowed t)
)
)
(setq org-html-validation-link nil)
(setq org-roam-node-display-template
(concat "${title:*} "
(propertize "${tags:10}" 'face 'org-tag)))
(org-roam-setup))
;;"Set Backlinks"
;;[[https://www.orgroam.com/manual.html#Configuring-what-is-displayed-in-the-buffer]]
;;(setq org-roam-mode-sections
;; '((org-roam-backlinks-section :unique t)
;; org-roam-reflinks-section))
;; (org-roam-autosync-mode)
(use-package org-roam-ui
;; :straight
;; (:host github :repo "org-roam/org-roam-ui" :branch "main" :files ("*.el" "out"))
:after org-roam
;; normally we'd recommend hooking orui after org-roam, but since org-roam does not have
;; a hookable mode anymore, you're advised to pick something yourself
;; if you don't care about startup time, use
;; :hook (after-init . org-roam-ui-mode)
;; :config
(setq org-roam-ui-sync-theme t
org-roam-ui-follow t
org-roam-ui-update-on-save t
org-roam-ui-open-on-start f
)
)
"page-break-lines"
"Display form feed characters as tidy horizontal lines"
[[https://github.com/purcell/page-break-lines]]
(use-package page-break-lines)
(page-break-lines-mode)
"popper"
"Designate any buffer to “popup” status, and it will stay out of your way"
[[https://github.com/karthink/popper]]
(use-package popper
:bind (("C-`" . popper-toggle)
("M-`" . popper-cycle)
("C-M-`" . popper-toggle-type))
:init
(setq popper-reference-buffers
'("\\*Messages\\*"
"Output\\*$"
"\\*Async Shell Command\\*"
help-mode
compilation-mode))
(popper-mode +1)
(popper-echo-mode +1)) ; For echo area hints
"prettier-js"
"Format the current buffer using prettier"
[[https://github.com/prettier/prettier-emacs]]
(use-package prettier-js
:config
(setq prettier-js-args '(
"--trailing-comma" "es5"
"--single-quote" "true"
"--print-width" "120"
"--tab-width" "4"
"--use-tabs" "false"
"--jsx-bracket-same-line" "false"
"--stylelint-integration" "true")))
"projectile"
"Project tool (find / switch / etc)"
[[https://github.com/bbatsov/projectile]]
(use-package projectile
:defer t
:config
;; Enable Projectile globally
(setq projectile-completion-system 'ido)
(setq ido-enable-flex-matching t)
(projectile-mode 1))
"rainbow-delimiters"
"Rainbow parentheses"
[[https://github.com/Fanael/rainbow-delimiters]]
(use-package rainbow-delimiters)
(add-hook 'prog-mode-hook #'rainbow-delimiters-mode)
"restart-emacs"
[[https://github.com/iqbalansari/restart-emacs]]
(use-package restart-emacs)
"smartparens"
"Smart parenthesis"
[[https://github.com/Fuco1/smartparens]]
(use-package smartparens
:init
(smartparens-global-mode))
"smex"
"M-x enhancement"
[[https://github.com/nonsequitur/smex]]
(use-package smex
:init (smex-initialize)
:bind
("M-x" . smex))
"spell-fu"
"Highlight mispelled words"
[[https://github.com/emacsmirror/spell-fu]]
(use-package spell-fu)
;; (add-hook 'org-mode-hook
;; (lambda ()
;; (setq spell-fu-faces-exclude
;; '(org-block-begin-line
;; org-block-end-line
;; org-code
;; org-date
;; org-drawer org-document-info-keyword
;; org-ellipsis
;; org-link
;; org-meta-line
;; org-properties
;; org-properties-value
;; org-special-keyword
;; org-src
;; org-tag
;; org-verbatim))
;; (spell-fu-mode)))
;;(add-hook 'emacs-lisp-mode-hook
;; (lambda ()
;; (spell-fu-mode)))
"svg-tag-mode"
"TODO rendorer for tags for certain keywords"
(use-package svg-tag-mode)
(setq svg-tag-tags
'((":TODO:" . ((lambda (tag) (svg-tag-make "TODO"))))))
(defun org-agenda-show-svg ()
(let* ((case-fold-search nil)
(keywords (mapcar #'svg-tag--build-keywords svg-tag--active-tags))
(keyword (car keywords)))
(while keyword
(save-excursion
(while (re-search-forward (nth 0 keyword) nil t)
(overlay-put (make-overlay
(match-beginning 0) (match-end 0))
'display (nth 3 (eval (nth 2 keyword)))) ))
(pop keywords)
(setq keyword (car keywords)))))
(add-hook 'org-agenda-finalize-hook #'org-agenda-show-svg)
"swiper"
"Minibuffer completion tool"
[[https://github.com/abo-abo/swiper]]
(use-package swiper
:bind (("M-s" . counsel-grep-or-swiper)))
"treemacs"
[[https://github.com/Alexander-Miller/treemacs]]
(use-package treemacs
:defer t
:init
(with-eval-after-load 'winum
(define-key winum-keymap (kbd "M-0") #'treemacs-select-window))
:config
(progn
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
treemacs-deferred-git-apply-delay 0.5
treemacs-directory-name-transformer #'identity
treemacs-display-in-side-window t
treemacs-display-current-project-exclusively t ;;
treemacs-eldoc-display 'simple
treemacs-file-event-delay 2000
treemacs-file-extension-regex treemacs-last-period-regex-value
treemacs-file-follow-delay 0.2
treemacs-file-name-transformer #'identity
treemacs-follow-after-init t
treemacs-expand-after-init t
treemacs-find-workspace-method 'find-for-file-or-pick-first
treemacs-git-command-pipe ""
treemacs-goto-tag-strategy 'refetch-index
treemacs-header-scroll-indicators '(nil . "^^^^^^")
treemacs-hide-dot-git-directory t
treemacs-indentation 2
treemacs-indentation-string " "
treemacs-is-never-other-window nil
treemacs-max-git-entries 5000
treemacs-missing-project-action 'ask
treemacs-move-forward-on-expand nil
treemacs-no-png-images nil
treemacs-no-delete-other-windows t
treemacs-project-follow-cleanup nil
treemacs-project-follow-mode t ;;
treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory)
treemacs-position 'left
treemacs-read-string-input 'from-child-frame
treemacs-recenter-distance 0.1
treemacs-recenter-after-file-follow nil
treemacs-recenter-after-tag-follow nil
treemacs-recenter-after-project-jump 'always
treemacs-recenter-after-project-expand 'on-distance
treemacs-litter-directories '("/node_modules" "/.venv" "/.cask")
treemacs-project-follow-into-home nil
treemacs-show-cursor nil
treemacs-show-hidden-files t
treemacs-silent-filewatch nil
treemacs-silent-refresh nil
treemacs-sorting 'alphabetic-asc
treemacs-select-when-already-in-treemacs 'move-back
treemacs-space-between-root-nodes t
treemacs-tag-follow-cleanup t
treemacs-tag-follow-delay 1.5
treemacs-text-scale nil
treemacs-user-mode-line-format nil
treemacs-user-header-line-format nil
treemacs-wide-toggle-width 70
treemacs-width 35
treemacs-width-increment 1
treemacs-width-is-initially-locked t
treemacs-workspace-switch-cleanup nil)
;; The default width and height of the icons is 22 pixels. If you are
;; using a Hi-DPI display, uncomment this to double the icon size.
;;(treemacs-resize-icons 44)
(treemacs-follow-mode t)
(treemacs-filewatch-mode t)
(treemacs-fringe-indicator-mode 'always)
;;(when treemacs-python-executable
;; (treemacs-git-commit-diff-mode t))
(pcase (cons (not (null (executable-find "git")))
(not (null treemacs-python-executable)))
(`(t . t)
(treemacs-git-mode 'deferred))
(`(t . _)
(treemacs-git-mode 'simple)))
(treemacs-hide-gitignored-files-mode nil))
:bind
(:map global-map
("M-0" . treemacs-select-window)
("C-x t 1" . treemacs-delete-other-windows)
("C-x t t" . treemacs)
("C-x t d" . treemacs-select-directory)
("C-x t B" . treemacs-bookmark)
("C-x t C-t" . treemacs-find-file)
("C-x t M-t" . treemacs-find-tag)))
(with-eval-after-load 'treemacs
(define-key treemacs-mode-map [mouse-1] #'treemacs-single-click-expand-action))
(add-hook 'emacs-startup-hook 'treemacs)
(use-package treemacs-projectile
:after (treemacs projectile))
(use-package treemacs-icons-dired
:hook (dired-mode . treemacs-icons-dired-enable-once))
(use-package treemacs-magit
:after (treemacs magit))
(use-package treemacs-persp ;;treemacs-perspective if you use perspective.el vs. persp-mode
:after (treemacs persp-mode) ;;or perspective vs. persp-mode
:config (treemacs-set-scope-type 'Perspectives))
(use-package treemacs-tab-bar ;;treemacs-tab-bar if you use tab-bar-mode
:after (treemacs)
:config (treemacs-set-scope-type 'Tabs));;
"undo-fu-session"
"Save & recover undo steps between Emacs sessions."
[[https://github.com/emacsmirror/undo-fu-session]]
(use-package undo-fu-session ; Persistant undo history
:ensure t
:demand t
:bind (("C-x u" . undo-only)
("C-/" . undo-only)
("C-?" . undo-redo)
("C-z" . undo-only)
("C-S-z" . undo-redo))
:config (global-undo-fu-session-mode))
"vertico"
"Vertical completion UI"
[[https://github.com/minad/vertico]]
(use-package vertico
:init
(vertico-mode))
;; Different scroll margin
;; (setq vertico-scroll-margin 0)
;; Show more candidates
;; (setq vertico-count 20)
;; Grow and shrink the Vertico minibuffer
;; (setq vertico-resize t)
;; Optionally enable cycling for `vertico-next' and `vertico-previous'.
;; (setq vertico-cycle t)
;; Persist history over Emacs restarts. Vertico sorts by history position.
(use-package savehist
:init
(savehist-mode))
;; A few more useful configurations...
(use-package emacs
:init
;; Add prompt indicator to `completing-read-multiple'.
;; We display [CRM<separator>], e.g., [CRM,] if the separator is a comma.
(defun crm-indicator (args)
(cons (format "[CRM%s] %s"
(replace-regexp-in-string
"\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
crm-separator)
(car args))
(cdr args)))
(advice-add #'completing-read-multiple :filter-args #'crm-indicator)
;; Do not allow the cursor in the minibuffer prompt
(setq minibuffer-prompt-properties
'(read-only t cursor-intangible t face minibuffer-prompt))
(add-hook 'minibuffer-setup-hook #'cursor-intangible-mode)
;; Emacs 28: Hide commands in M-x which do not work in the current mode.
;; Vertico commands are hidden in normal buffers.
;; (setq read-extended-command-predicate
;; #'command-completion-default-include-p)
;; Enable recursive minibuffers
(setq enable-recursive-minibuffers t))
"vimish-fold"
"VIM like folding"
[[https://github.com/matsievskiysv/vimish-fold]]
;;(use-package vimish-fold)
;; (require 'vimish-fold)
;; (vimish-fold-global-mode 1)
"which-key"
"Displays keybindings for incomplete command"
[[https://github.com/justbur/emacs-which-key]]
(use-package which-key
:config
(which-key-mode))
"xeft"
"Note searching interface"
"https://github.com/casouri/xeft"
(use-package xeft)
"yafolding"
"Folding code blocks based on indentation"
[[https://github.com/emacsorphanage/yafolding]]
(use-package yafolding)
(defvar yafolding-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "<C-S-return>") #'yafolding-hide-parent-element)
(define-key map (kbd "<C-M-return>") #'yafolding-toggle-all)
(define-key map (kbd "<C-return>") #'yafolding-toggle-element)
map))
(global-set-key (kbd "s-d y") 'yafolding-discover)
(add-hook 'prog-mode-hook
(lambda () (yafolding-mode)))
(require 'yafolding)
(define-key yafolding-mode-map (kbd "<C-S-return>") nil)
(define-key yafolding-mode-map (kbd "<C-M-return>") nil)
(define-key yafolding-mode-map (kbd "<C-return>") nil)
(define-key yafolding-mode-map (kbd "C-c <C-M-return>") 'yafolding-toggle-all)
(define-key yafolding-mode-map (kbd "C-c <C-S-return>") 'yafolding-hide-parent-element)
(define-key yafolding-mode-map (kbd "C-c <C-return>") 'yafolding-toggle-element)
"yasnippet"
"Yet another snippet extension for Emacs"
"Creating the snippet
To create the snippet file execute the command `yas-new-snippet` (C-c & C-n), yasnippets internally expands the snippet-writing snippet.
A new buffer will open with the base model to define the new snippet in the snippet-mode major mode."
[[https://github.com/joaotavora/yasnippet]]
(use-package yasnippet
:hook ((text-mode
prog-mode
conf-mode
snippet-mode) . yas-minor-mode-on)
:init
;;(setq yas-snippet-dir "~/.emacs.d/snippets")
(setq yas-snippet-dir "~/Documents/Syncthing/org-roam/stpaul's/snippets"))
;;; init.el ends here