(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(bootstrap-version 5))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
(straight-use-package 'use-package)
(setq straight-use-package-by-default t)
(setq gc-cons-threshold (* 100 1024 1024))
(setq default-directory "~/")
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
(load-file (expand-file-name "custom.el" user-emacs-directory))
(setq inhibit-startup-message t)
(setq inhibit-splash-screen t)
(setq initial-scratch-message nil)
(scroll-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)
(tool-bar-mode -1)
(fringe-mode 20)
(add-to-list 'default-frame-alist '(undecorated . t))
(setq frame-title-format '("%b (emacs@" system-name ")"))
;; remove dialog "Risky local variables"
(defun risky-local-variable-p (sym &optional _ignored) nil)
(set-face-attribute 'default nil :family "Julia Mono" :height 150)
(load-theme 'modus-operandi)
(use-package org
:defer
:init
(add-hook 'org-mode-hook 'org-indent-mode)
(require 'org-tempo)
:config
(setq org-latex-packages-alist '(("" "preamble" t)))
(setq org-export-with-toc nil)
(setq org-directory "~/w/school")
(setq org-agenda-files (list "schedule.org"))
(setq org-startup-folded 'showeverything)
(setq org-special-ctrl-a/e t)
(setq calendar-week-start-day 1)
(setq org-hide-emphasis-markers t)
:bind (("C-c a" . 'org-agenda)))
(use-package org-roam
:init
(org-roam-db-autosync-mode)
:bind
(("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n g" . org-roam-ui-open)
("C-c n i" . org-roam-node-insert)
("C-c n c" . org-roam-capture)
("C-c n m" . org-id-get-create)))
(setq org-roam-directory "~/doc/base")
(define-key minibuffer-local-completion-map (kbd "SPC") 'self-insert-command)
(use-package org-roam-ui
:straight
(:host github :repo "org-roam/org-roam-ui" :branch "main" :files ("*.el" "out"))
:after org-roam
: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 nil))
(use-package org-fragtog
:init
(add-hook 'org-mode-hook 'org-fragtog-mode))
(use-package org-anki
:config
(setq org-anki-default-deck "discrete")
:bind
("C-c f s e" . org-anki-sync-entry)
("C-c f s a" . org-anki-sync-all)
("C-c f d e" . org-anki-delete-entry)
("C-c f d a" . org-anki-delete-all))
(use-package org-journal
:config
(setq org-journal-dir "~/doc/journal")
:bind
("C-c j n" . org-journal-new-entry))
(global-auto-revert-mode)
(setq tab-width 4)
(setq-default auto-fill-function 'do-auto-fill)
(setq-default fill-column 100)
(use-package rustic
:defer
:bind (("M-j" . lsp-ui-imenu)
("M-?" . lsp-find-references)
("C-c C-c l" . flycheck-list-errors)
("C-c C-c a" . lsp-execute-code-action)
("C-c C-c r" . lsp-rename)
("C-c C-c q" . lsp-workspace-restart)
("C-c C-c Q" . lsp-workspace-shutdown)
("C-c C-c s" . lsp-rust-analyzer-status))
:config
;; uncomment for less flashiness
(setq lsp-eldoc-hook nil)
(setq lsp-enable-symbol-highlighting nil)
(setq lsp-signature-auto-activate nil)
;; comment to disable rustfmt on save
(setq rustic-format-on-save t)
(add-hook 'rustic-mode-hook 'rk/rustic-mode-hook))
(defun rk/rustic-mode-hook ()
;; so that run C-c C-c C-r works without having to confirm, but don't try to
;; save rust buffers that are not file visiting. Once
;; https://github.com/brotzeit/rustic/issues/253 has been resolved this should
;; no longer be necessary.
(when buffer-file-name
(setq-local buffer-save-without-query t))
(add-hook 'before-save-hook 'lsp-format-buffer nil t))
(use-package lsp-mode
:ensure
:commands lsp
:custom
;; what to use when checking on-save. "check" is default, I prefer clippy
(lsp-rust-analyzer-cargo-watch-command "clippy")
(lsp-eldoc-render-all t)
(lsp-idle-delay 0.6)
;; enable / disable the hints as you prefer:
(lsp-rust-analyzer-server-display-inlay-hints t)
(lsp-rust-analyzer-display-lifetime-elision-hints-enable "skip_trivial")
(lsp-rust-analyzer-display-chaining-hints t)
(lsp-rust-analyzer-display-lifetime-elision-hints-use-parameter-names nil)
(lsp-rust-analyzer-display-closure-return-type-hints t)
(lsp-rust-analyzer-display-parameter-hints nil)
(lsp-rust-analyzer-display-reborrow-hints nil)
:config
(add-hook 'lsp-mode-hook 'lsp-ui-mode))
(use-package lsp-ui
:commands lsp-ui-mode
:custom
(lsp-ui-peek-always-show nil)
(lsp-ui-sideline-show-hover nil)
(lsp-ui-doc-enable nil)
(setq lsp-signature-auto-activate nil)
(setq lsp-enable-symbol-highlighting nil))
(use-package pdf-tools)
(pdf-tools-install)
(use-package haskell-mode)