commit 2021acf418a3a7eaa0383e64c638e2e417b85faa Author: Caleb G Date: Mon Jun 2 15:37:22 2025 -0700 initial diff --git a/init.el b/init.el new file mode 100644 index 0000000..60017ce --- /dev/null +++ b/init.el @@ -0,0 +1,258 @@ +(add-to-list 'default-frame-alist '(fullscreen . maximized)) + +(require 'package) +(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) +(package-initialize) +(unless package-archive-contents + (package-refresh-contents)) + +;; Basic UI cleanup +(menu-bar-mode -1) +(tool-bar-mode -1) +(scroll-bar-mode -1) + +;; Save customization info elsewhere +(setq custom-file "~/.config/emacs-custom.el") +(when (file-exists-p custom-file) + (load custom-file)) + +;; Some Global Settings +(show-paren-mode 1) +(global-hl-line-mode t) +(global-auto-revert-mode t) +(global-prettify-symbols-mode t) +(add-hook 'before-save-hook #'delete-trailing-whitespace) + +(setf user-full-name "Caleb Gossler" + user-mail-address "caleb.gossler@gmail.com" + calendar-latitude 47.4 + calendar-longitude -122.3 + calendar-location-name "Seattle, WA" + indent-tabs-mode nil + ring-bell-function 'ignore + vc-follow-symlinks t + confirm-kill-emacs 'y-or-n-p + diray-file "~/org/diary" + backup-directory-alist '(("." . "~/.emacs.d/backup")) + abbrev-file-name "~/org/abbrev_defs" + backup-directory-alist `(("." . "~/.emacs.d/backups")) + compilation-scroll-output t) + +(use-package doom-themes + :ensure t + :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-one t) + + ;; Enable flashing mode-line on errors + (doom-themes-visual-bell-config) + ;; Corrects (and improves) org-mode's native fontification. + (doom-themes-org-config)) + + +(use-package doom-modeline + :ensure t + :init (doom-modeline-mode 1) + :config + (setq doom-modeline-icon nil)) + +(use-package flyspell + :config + (setf ispell-personal-dictionary "~/org/dictionary")) + +(use-package markdown-mode :ensure t) + +(use-package rg :ensure t) + +(use-package org + :after flyspell + :hook + (org-mode . visual-line-mode) + (org-mode . org-display-inline-images) + :config + (setq org-startup-indented t + org-hide-leading-stars t + org-startup-folded 'content + org-ellipsis " ▾" + org-agenda-files '("~/org/agenda") + org-agenda-include-diary t + org-refile-targets '((org-agenda-files :maxlevel . 2)) + org-startup-indented t + org-agenda-span 'day + org-agenda-todo-ignore-scheduled 'future + org-log-into-drawer t + org-clock-idle-time 10 + org-return-follows-link t + org-special-ctrl-a/e t + org-pretty-entities t + org-pretty-entities-include-sub-superscripts t + org-agenda-skip-scheduled-if-deadline-is-shown t + org-log-done 'time + org-latex-create-formula-image-program 'dvipng + org-capture-templates + '(("c" "Clock into new") + ("ct" "Task" entry (file+headline "~/org/agenda/inbox.org" "Inbox") + "* TODO %?\nSCHEDULED: %T Created: %U\n Context: %a\n %i" :clock-in t :clock-keep t) + ("cm" "Meeting" entry (file+datetree "~/org/agenda/meetings.org") + "* %?\n** Details\n + *Agenda*:\n + *Attendees*:\n" :clock-in t :clock-keep t) + ("t" "New Task" entry (file+headline "~/org/agenda/inbox.org" "Inbox") + "* TODO %?\n Created: %U\n Context: %a\n %i") + ("j" "New Journal Entry" entry (file+datetree "~/org/agenda/journal.org.gpg") + "* %? %^g\n\nPosted At: %U" :empty-lines-after 1 :kill-buffer t) + ("l" "New Log Entry" entry (file+datetree "~/org/agenda/log.org.gpg") + "* %? \nPosted At: %U" :empty-lines-after 1 :kill-buffer t) + ("r" "Random" entry (file "~/org/agenda/random.org.gpg") + "* %?\nCreated At: %U" :empty-lines-after 1 :kill-buffer t) + ("n" "Add Note to Clocked in Entry" item (clock) + "+ %i%? (%<%r>)") + ("b" "Add Checkbox to Clocked in Entry" item (clock) + "+ [ ] %? (%<%r>)" :prepend t) + ("a" "Add Task to Clocked in Entry" entry (clock) + "* TODO %?" :prepend t)) + org-agenda-custom-commands + '(("a" "Combined Agenda" + ((agenda) + (tags-todo "+inbox" ((org-agenda-overriding-header "Inbox:"))))) + ("t" "Study" + ((agenda) + (todo "READING" ((org-agenda-overriding-header "Currently Reading"))) + (todo "PAUSED" ((org-agenda-overriding-header "On Hold"))) + (todo "TO-WATCH" ((org-agenda-overriding-header "Videos to Watch"))) + (todo "RESEARCH")) + ((org-agenda-category-filter-preset '("+study")))) + ("w" "Work" + ((agenda) + (todo "BLOCKED" ((org-agenda-overriding-header "Blocked:"))) + (tags-todo "+inbox" ((org-agenda-overriding-header "Inbox:"))) + (todo "REVIEW" ((org-agenda-overriding-header "Code Reviews:"))) + (todo "WAITING" ((org-agenda-overriding-header "Waiting:"))) + (todo "IN-PROGRESS" ((org-agenda-overriding-header "In Progress:"))) + (todo "TODO" ((org-agenda-overriding-header "Backlog:"))) + (tags "officehours" ((org-agenda-overriding-header "Office Hours:"))) + (tags "pullrequest" ((org-agenda-overriding-header "Pull Requests:")))) + ((org-agenda-category-filter-preset '("+work"))))) ) + :bind + ("\C-ca" . org-agenda) + ("\C-cc" . org-capture) + ("\C-cb" . org-iswitchb) + ("\C-cl" . org-store-link)) + +(use-package org-drill + :after org + :commands (org-drill org-drill-all org-drill-again) + :ensure + :config + (setq org-drill-spaced-repetition-algorithm 'sm5 + org-drill-learn-fraction 0.3 + org-drill-add-random-noise-to-intervals-p t + org-drill-leech-method 'warn)) + +(defun org-drill-all () + (interactive) + (org-drill + (directory-files-recursively "~/org/notes/" "\.org$"))) + +(when (eq system-type 'gnu/linux) + (use-package pdf-tools + :ensure t + :magic ("%PDF" . pdf-view-mode) + :config + (pdf-tools-install :no-query))) + +(use-package yasnippet + :ensure t + :config + (setq yas-snippet-dirs '("~/.emacs.d/snippets")) + (yas-global-mode 1)) + +(use-package zenburn-theme + :ensure t + :config (load-theme 'zenburn t)) + +(use-package magit + :ensure t + :commands (magit-status magit-get-current-branch) + :bind (("C-x g" . magit-status))) + +(use-package multiple-cursors + :ensure t + :bind (("C->" . mc/mark-next-like-this) + ("C-<" . mc/mark-previous-like-this) + ("C-c C-<" . mc/mark-all-like-this))) + +(use-package ivy + :ensure t + :config (ivy-mode 1) + (setq ivy-use-virtual-buffers t + ivy-count-format "(%d/%d) " + enable-recursive-minibuffers t + magit-completing-read-function 'ivy-completing-read)) + +(use-package counsel + :ensure t + :bind (("C-s" . swiper-isearch)) + :config + (setq swiper-include-line-number-in-search t)) + +(use-package projectile + :ensure + :init (projectile-mode +1) + :config + (setq project-find-functions '(project-projectile)) + :bind-keymap + ("C-c p" . projectile-command-map) + :bind + ("C-x f" . projectile-find-file) + ("C-c s" . projectile-ripgrep) + ("C-c t" . eglot-find-typeDefinition)) + +(use-package sharper + :ensure t + :bind + ("C-c n" . sharper-main-transient)) + +(use-package corfu + :ensure t + :pin gnu + :init + (global-corfu-mode) + :config + (setq corfu-min-width 250 + corfu-min-height 750 + corfu-count 20 + corfu-auto t + corfu-cycle t + corfu-separator ?\s + corfu-preview-current "insert" + corfu-scroll-margin 25 + ;; enable corfu on TAB + tab-always-indent 'complete + ;; shows documentation after `corfu-popupinfo-delay' + corfu-popupinfo-delay '(1.25 . 0.5)) + (corfu-popupinfo-mode 1) + + ;; Sort by input history (no need to modify `corfu-sort-function'). + (with-eval-after-load 'savehist + (corfu-history-mode 1) + (add-to-list 'savehist-additional-variables 'corfu-history))) + +(use-package fsharp-mode + :defer t + :ensure t + :config + (remove-hook 'project-find-functions #'fsharp-mode-project-root)) + +(use-package eglot-fsharp + :ensure t + :after fsharp-mode + :config + (add-hook 'fsharp-mode-hook #'eglot-ensure) + (setq eglot-fsharp-server-args '("--use-fcs-transparent-compiler" "--project-graph-enabled") + eglot-report-progress nil + eglot-ignored-server-capabilities '(:inlayHintProvider))) + +(use-package which-key + :ensure t + :config (which-key-mode))