diff --git a/TODO.org b/TODO.org index 7e83e9e..8336740 100644 --- a/TODO.org +++ b/TODO.org @@ -15,7 +15,16 @@ solution, e.g. set it up to auto-tangle all .org files within/below ** Missing Features -*** TODO flyspell languages +*** TODO IDE + +**** TODO LSP per language + +**** TODO AutoComplete, easy compile, unit test + +**** TODO Debugging of some sort + +*** TODO flyspell languages (de, en) +is it possible to detect based on existing content? *** TODO snippets? @@ -32,7 +41,7 @@ solution, e.g. set it up to auto-tangle all .org files within/below *** TODO make org-roam work with simple key chords *** TODO beautify org-mode -- https://zhangda.wordpress.com/2016/02/15/configurations-for-beautifying-emacs-org-mode/ +- https://zhangda.wordpress.com/2016/02/15/configurations-for-beautifying-emacs-org-mode/ - https://zzamboni.org/post/beautifying-org-mode-in-emacs/ - https://lucidmanager.org/productivity/ricing-org-mode/ - beautiful checkboxes https://out-of-cheese-error.netlify.app/spacemacs-config#org70b3e7c @@ -62,7 +71,6 @@ e.g. HN, golem, fefe, tagesschau ** LaTeX setup -*** TODO make letters export work +*** DONE make letters export work *** TODO make export for other texbased documents work - diff --git a/custom.el b/custom.el index 73dca5e..d8210f5 100644 --- a/custom.el +++ b/custom.el @@ -25,11 +25,6 @@ (lambda () (add-hook 'after-save-hook #'org-babel-tangle-config))) -(defvar fschl-org-file (expand-file-name "fschl-org.el" user-emacs-directory)) -(when (and fschl-org-file - (file-exists-p fschl-org-file)) - (load fschl-org-file nil :nomessage)) - (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. diff --git a/fschl-ide.el b/fschl-ide.el new file mode 100644 index 0000000..dcedc24 --- /dev/null +++ b/fschl-ide.el @@ -0,0 +1,82 @@ +;;; fschl-ide.el -- Fschl Crafted Emacs user customization file -*- lexical-binding: t; -*- +;; This file is generated from the .org-file with the same name. If you want to edit the +;; configuration, DO NOT edit this .el-file, edit .org, instead. + +(add-to-list 'package-selected-packages 'cargo) +(add-to-list 'package-selected-packages 'rustic) +(add-to-list 'package-selected-packages 'ob-rust) +(add-to-list 'package-selected-packages 'ob-rust) +(package-install-selected-packages :noconfirm) + +(use-package rustic + :ensure + :bind (:map rustic-mode-map + ("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-inlay-hint-enable t) + ;; These are optional configurations. See https://emacs-lsp.github.io/lsp-mode/page/lsp-rust-analyzer/#lsp-rust-analyzer-display-chaining-hints for a full list + (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 + :ensure + :commands lsp-ui-mode + :custom + (lsp-ui-peek-always-show t) + (lsp-ui-sideline-show-hover t) + (lsp-ui-doc-enable nil)) + +(use-package company +:ensure +:custom +(company-idle-delay 0.5) ;; how long to wait until popup +;; (company-begin-commands nil) ;; uncomment to disable popup +:bind +(:map company-active-map + ("C-n". company-select-next) + ("C-p". company-select-previous) + ("M-<". company-select-first) + ("M->". company-select-last))) + +(use-package flycheck :ensure) +(setq lsp-inlay-hint-enable t) diff --git a/fschl-ide.org b/fschl-ide.org new file mode 100644 index 0000000..0ec7da3 --- /dev/null +++ b/fschl-ide.org @@ -0,0 +1,108 @@ +#+title: Setup Fschl Ide Configuration +#+PROPERTY: header-args:emacs-lisp :tangle ./fschl-ide.el :mkdirp yes + +* Basic configuration +** Additional Packages +#+begin_src emacs-lisp + ;;; fschl-ide.el -- Fschl Crafted Emacs user customization file -*- lexical-binding: t; -*- + ;; This file is generated from the .org-file with the same name. If you want to edit the + ;; configuration, DO NOT edit this .el-file, edit .org, instead. + + (add-to-list 'package-selected-packages 'cargo) + (add-to-list 'package-selected-packages 'rustic) + (add-to-list 'package-selected-packages 'ob-rust) + (add-to-list 'package-selected-packages 'ob-rust) + (package-install-selected-packages :noconfirm) +#+end_src + +** Setup Rustic + +This is borrowed from https://robert.kra.hn/posts/rust-emacs-setup/ +#+begin_src emacs-lisp + (use-package rustic + :ensure + :bind (:map rustic-mode-map + ("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)) +#+end_src + +** Setup LSP-mode and LSP-ui +#+begin_src emacs-lisp + (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-inlay-hint-enable t) + ;; These are optional configurations. See https://emacs-lsp.github.io/lsp-mode/page/lsp-rust-analyzer/#lsp-rust-analyzer-display-chaining-hints for a full list + (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 + :ensure + :commands lsp-ui-mode + :custom + (lsp-ui-peek-always-show t) + (lsp-ui-sideline-show-hover t) + (lsp-ui-doc-enable nil)) +#+end_src + +** Auto-completion +lsp-mode integrates with company mode + +#+begin_src emacs-lisp + (use-package company + :ensure + :custom + (company-idle-delay 0.5) ;; how long to wait until popup + ;; (company-begin-commands nil) ;; uncomment to disable popup + :bind + (:map company-active-map + ("C-n". company-select-next) + ("C-p". company-select-previous) + ("M-<". company-select-first) + ("M->". company-select-last))) +#+end_src + +** Inline stuff + +hints and errors +#+begin_src emacs-lisp + (use-package flycheck :ensure) + (setq lsp-inlay-hint-enable t) +#+end_src + diff --git a/init.el b/init.el index 843a558..2539427 100644 --- a/init.el +++ b/init.el @@ -31,3 +31,13 @@ (unless crafted-startup-inhibit-splash (setq initial-buffer-choice #'crafted-startup-screen)) + +(defvar fschl-org-file (expand-file-name "fschl-org.el" user-emacs-directory)) +(when (and fschl-org-file + (file-exists-p fschl-org-file)) + (load fschl-org-file nil :nomessage)) + +(defvar fschl-ide-file (expand-file-name "fschl-ide.el" user-emacs-directory)) +(when (and fschl-ide-file + (file-exists-p fschl-ide-file)) + (load fschl-ide-file nil :nomessage)) diff --git a/init.org b/init.org index 88c38fc..052cc74 100644 --- a/init.org +++ b/init.org @@ -45,3 +45,16 @@ (unless crafted-startup-inhibit-splash (setq initial-buffer-choice #'crafted-startup-screen)) #+end_src + +** Load my custom files +#+begin_src emacs-lisp + (defvar fschl-org-file (expand-file-name "fschl-org.el" user-emacs-directory)) + (when (and fschl-org-file + (file-exists-p fschl-org-file)) + (load fschl-org-file nil :nomessage)) + + (defvar fschl-ide-file (expand-file-name "fschl-ide.el" user-emacs-directory)) + (when (and fschl-ide-file + (file-exists-p fschl-ide-file)) + (load fschl-ide-file nil :nomessage)) +#+end_src