(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 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 lua-mode :ensure t) (use-package which-key :ensure t :config (which-key-mode))