diff --git a/.gitignore b/.gitignore index d5de471..fa3ed0e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ /.lsp-session-v1 /projectile-bookmarks.eld /transient/ +projectile.cache diff --git a/init.el b/init.el index c9563c2..91832e3 100644 --- a/init.el +++ b/init.el @@ -11,15 +11,15 @@ (setq version-control t ) ; use version control (setq vc-make-backup-files t ) ; make backups file even when in version controlled dir (setq backup-directory-alist `(("." . "~/.emacs.d/backups")) ) ; which directory to put backups file -(setq vc-follow-symlinks t ) ; don't ask for confirmation when opening symlinked file +(setq vc-follow-symlinks t ) ; don't ask for confirmation when opening symlinked file (setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save-list/" t)) ) ;transform backups file name (setq inhibit-startup-screen t ) ; inhibit useless and old-school startup screen (setq ring-bell-function 'ignore ) ; silent bell when you make a mistake (setq coding-system-for-read 'utf-8 ) ; use utf-8 by default (setq coding-system-for-write 'utf-8 ) (setq sentence-end-double-space nil) ; sentence SHOULD end with only a point. -(setq default-fill-column 80) ; toggle wrapping text at the 80th character (setq initial-scratch-message "Welcome in Emacs") ; print a default message in the empty scratch buffer opened at startup +(setq focus-follows-mouse nil) ;; global keybindings (global-set-key (kbd "C-k") 'previous-line) @@ -40,9 +40,10 @@ (require 'use-package) ;; themes -(use-package doom-themes :ensure t +(use-package doom-themes :ensure t) +(use-package monokai-theme :ensure t :config - (load-theme 'doom-snazzy t)) + (load-theme 'doom-laserwave t)) (use-package all-the-icons :ensure t) (use-package doom-modeline :ensure t :hook (after-init . doom-modeline-mode)) @@ -61,12 +62,11 @@ (global-evil-surround-mode 1) (evil-define-key 'visual evil-surround-mode-map "s" 'evil-surround-region) ) +(use-package evil-matchit :ensure t + :config (global-evil-matchit-mode 1)) ;; ivy config (use-package ivy :ensure t - :bind - (:map ivy-mode-map - ("C-'" . ivy-avy)) :config (setq ivy-height 10) (setq ivy-use-virtual-buffers t) @@ -81,11 +81,8 @@ (define-key ivy-minibuffer-map (kbd "C-S-h") help-map) (define-key ivy-minibuffer-map (kbd "C-l") 'ivy-alt-done) (define-key ivy-minibuffer-map (kbd "") 'minibuffer-keyboard-quit)) - (ivy-mode 1) (use-package ivy-xref :ensure t - :init (if (< emacs-major-version 27) - (setq xref-show-xrefs-function #'ivy-xref-show-xrefs) - (setq xref-show-definitions-function #'ivy-xref-show-defs))) + :init (setq xref-show-xrefs-function #'ivy-xref-show-xrefs)) (use-package ivy-rich :ensure t :config (ivy-rich-mode 1)) @@ -109,15 +106,53 @@ ) ;; langs + +;; vue +(use-package vue-mode :ensure t + :config + (add-to-list 'auto-mode-alist '("\\.vue\\'" . vue-mode))) +;; js +(use-package js2-mode :ensure t + :config (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))) +;; puppet +(use-package puppet-mode :ensure t + :config + (add-to-list 'auto-mode-alist '("\\.pp\\'" . puppet-mode)) + (general-define-key + :states '(normal visual insert emacs) + :keymaps 'puppet-mode-map + :prefix "SPC" + :non-normal-prefix "C-SPC" + "ma" 'puppet-align-block + ) + ) +;; php +(use-package php-mode :ensure t) +;; k8s +(use-package k8s-mode :ensure t) +;; hcl +(use-package hcl-mode :ensure t) +;; rust (use-package rust-mode :ensure t - :config (add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-mode))) + :config + (setq rust-format-on-save t) + (add-hook 'rust-mode-hook + (lambda () (setq indent-tabs-mode nil))) + ) +(add-hook 'rust-mode-hook + (lambda () (setq indent-tabs-mode nil))) +;; golang (use-package go-mode :ensure t - :config (add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode))) + :config + (add-to-list 'auto-mode-alist '("\\.go\\'" . go-mode)) + ) +;; yaml (use-package yaml-mode :ensure t :config (add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-mode)) (add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode)) ) +;; dockerfile (use-package dockerfile-mode :ensure t :config (add-to-list 'auto-mode-alist '("Dockerfile\\'" . dockerfile-mode))) (use-package evil-org @@ -136,6 +171,17 @@ (use-package hl-todo :ensure t) (use-package company :ensure t + +;; bazel / starlak +(use-package bazel-mode :ensure t) + + +;; code-with-fun +(use-package whitespace + :config + (setq whitespace-style '(face empty tabs lines-tail trailing)) + (global-whitespace-mode t)) +(use-package company :config (global-company-mode 1) (define-key company-active-map (kbd "C-n") 'company-select-next) @@ -148,24 +194,64 @@ company-dabbrev-ignore-case nil company-dabbrev-downcase nil) ) +(use-package highlight-indentation :ensure t) + +;; lsp (use-package lsp-mode :ensure t :commands (lsp lsp-deferred) :hook - (go-mode . lsp-deferred) (c++-mode . lsp-deferred) - (python-mode . lsp-deferred) + (dockerfile-mode . lsp-deferred) + (go-mode . lsp-deferred) (javascript-mode . lsp-deferred) - (js-mode . lsp-deferred) + (js2-mode . lsp-deferred) + (puppet-mode . lsp-deferred) + (python-mode . lsp-deferred) + (ruby-mode . lsp-deferred) (rust-mode . lsp-deferred) + (vue-mode . lsp-deferred) :config + (lsp-register-client + (make-lsp-client :new-connection (lsp-stdio-connection '("/usr/bin/terraform-lsp" "-enable-log-file")) + :major-modes '(hcl-mode) + :server-id 'terraform-ls)) + (lsp-register-client + (make-lsp-client + :new-connection + (lsp-stdio-connection '("bundle" + "exec" + "--keep-file-descriptors" + "/home/stefan/Apps/puppet-editor-services/puppet-languageserver" + "--debug=/tmp/puplsp" + "--stdio")) + :major-modes '(puppet-mode) + :server-id 'puppet-languageserver)) + (add-to-list 'lsp-language-id-configuration '(puppet-mode . "puppet-languageserver")) + (lsp-register-client + (make-lsp-client + :new-connection + (lsp-stdio-connection '("/home/stefan/Apps/yaml-language-server/bin/yaml-language-server" + "--stdio")) + :major-modes '(yaml-mode) + :server-id 'yaml-languageserver)) + (add-to-list 'lsp-language-id-configuration '(yaml-mode . "yaml-languageserver")) (setq lsp-auto-configure t - lsp-prefer-flymake nil - lsp-auto-guess-root nil) + lsp-auto-guess-root t + lsp-enable-indentation t + lsp-enable-on-type-formatting t + lsp-before-save-edits t + lsp-enable-snippet t + ) + (defvar lsp-vetur-validation-template nil) ) (use-package flycheck :ensure t :init (global-flycheck-mode)) (use-package lsp-ui :ensure t - :commands lsp-ui-mode) + :commands lsp-ui-mode + :config + (setq lsp-ui-doc-position 'at-point + lsp-ui-doc-use-childframe t) + ) (use-package company-lsp :ensure t :commands company-lsp) (use-package yasnippet :ensure t @@ -193,7 +279,7 @@ (use-package general :ensure t :config (menu-bar-mode -1) - (toggle-scroll-bar -1) + (toggle-scroll-bar -1) (tool-bar-mode -1) (general-define-key :states '(normal visual insert emacs) @@ -205,7 +291,7 @@ "'" '(iterm-focus :which-key "iterm") "?" '(iterm-goto-filedir-or-home :which-key "iterm - goto dir") "/" 'counsel-ag - "TAB" '(switch-to-last-buffer :which-key "prev buffer") + "TAB" '(foo/switch-to-last-buffer :which-key "prev buffer") ;; Applications "a" '(:ignore t :which-key "Applications") @@ -218,15 +304,15 @@ "bd" 'evil-delete-buffer "bn" 'next-buffer "bn" 'next-buffer - "bs" 'switch-to-scratch-buffer + "bs" 'foo/switch-to-scratch-buffer ;; Files "ff" 'counsel-find-file "fL" 'counsel-locate "fr" 'counsel-recentf - "fR" 'rename-current-buffer-file - "fD" 'delete-current-buffer-file - "fc" 'foo-copy-file' + "fR" 'foo/rename-current-buffer-file + "fD" 'foo/delete-current-buffer-file + "fc" 'foo/copy-file' ;; Git "g" '(:ignore t :which-key "Magit") @@ -236,12 +322,19 @@ "gS" 'magit-stage-file "gU" 'magit-unstage-file + ;; Jumps + "j" '(:ignore t :which-key "Jump") + "jj" 'avy-goto-char-2 + ;; Langs + "mf" 'lsp "mf" 'lsp-format-buffer + "mi" 'lsp-organize-imports "mgg" 'lsp-find-definition "mh" 'lsp-describe-thing-at-point "mj" 'imenu "me" 'lsp-ui-flycheck-list + "mn" 'flycheck-next-error ;; Projectile "p" '(:ignore t :which-key "Projectile") @@ -280,7 +373,7 @@ "w " 'evil-window-left "wL" 'evil-window-move-far-right "wl" 'evil-window-right - "wm" 'toggle-maximize-buffer + "wm" 'foo/toggle-maximize-buffer "wo" 'other-frame "w " 'evil-window-right "w " 'evil-window-move-very-bottom @@ -303,7 +396,8 @@ )) ;; custom functions -(defun toggle-maximize-buffer () "Maximize buffer." + +(defun foo/toggle-maximize-buffer () "Maximize buffer." (interactive) (save-excursion (if (and (= 1 (length (window-list))) @@ -313,7 +407,7 @@ (window-configuration-to-register ?_) (delete-other-windows))))) -(defun switch-to-scratch-buffer (&optional arg) +(defun foo/switch-to-scratch-buffer (&optional arg) "Switch to the `*scratch*' buffer, creating it first if needed. if prefix argument ARG is given, switch to it in an other, possibly new window." (interactive "P") @@ -322,12 +416,12 @@ if prefix argument ARG is given, switch to it in an other, possibly new window." (switch-to-buffer-other-window (get-buffer-create "*scratch*")) (switch-to-buffer (get-buffer-create "*scratch*"))))) -(defun switch-to-last-buffer () +(defun foo/switch-to-last-buffer () "Switch to the last buffer, allowes quick jumping between the last two." (interactive) (switch-to-buffer nil)) -(defun delete-current-buffer-file () +(defun foo/delete-current-buffer-file () "Remove file connected to current buffer and kill buffer." (interactive) (let ((filename (buffer-file-name)) @@ -345,7 +439,7 @@ if prefix argument ARG is given, switch to it in an other, possibly new window." (message "File deleted: '%s'" filename)) (message "Canceled: File deletion"))))) -(defun rename-current-buffer-file (&optional arg) +(defun foo/rename-current-buffer-file (&optional arg) "Rename the current buffer and the file it is visiting. If the buffer isn't visiting a file, ask if it should be saved to a file, or just renamed. @@ -407,7 +501,7 @@ initialized with the current directory instead of filename." ;; ?\a = C-g, ?\e = Esc and C-[ ((memq key '(?\a ?\e)) (keyboard-quit)))))))) -(defun foo-copy-file () +(defun foo/copy-file () "Write the file under new name." (interactive) (call-interactively 'write-file)) @@ -421,16 +515,17 @@ initialized with the current directory instead of filename." ;; If there is more than one, they won't work right. '(custom-safe-themes (quote - ("ab9456aaeab81ba46a815c00930345ada223e1e7c7ab839659b382b52437b9ea" "f8c30fa07ba7e8fe884f22b428dae6724955fa61ad84a658c3b0164ae391fb52" "e838d6375a73fda607820c65eb3ea1f9336be7bd9a5528c9161e10c4aa663b5b" "4ea0aa360264ff861fb0212abe4161b83ad1d8c8b74d8a04bcd1baf0ebdceeae" "427fa665823299f8258d8e27c80a1481edbb8f5463a6fb2665261e9076626710" "614e5089876ea69b515c50b6d7fa0a37eb7ed50fda224623ec49e1c91a0af6a1" "93a0885d5f46d2aeac12bf6be1754faa7d5e28b27926b8aa812840fe7d0b7983" "b0fd04a1b4b614840073a82a53e88fe2abc3d731462d6fde4e541807825af342" "cdb3e7a8864cede434b168c9a060bf853eeb5b3f9f758310d2a2e23be41a24ae" "ef4edbfc3ec509612f3cf82476beddd2aeb3da7bdc3a35726337a0cc838a4ef4" "a16e816774b437acb78beb9916a60ea236cfcd05784227a7d829623f8468c5a2" "8c847a5675ece40017de93045a28ebd9ede7b843469c5dec78988717f943952a" "e3c87e869f94af65d358aa279945a3daf46f8185f1a5756ca1c90759024593dd" "db10381a554231a40b7474eaac28bd58f05067faacce3b25d294bb179a3511a1" "34c99997eaa73d64b1aaa95caca9f0d64229871c200c5254526d0062f8074693" "868abc288f3afe212a70d24de2e156180e97c67ca2e86ba0f2bf9a18c9672f07" default))) + ("99ea831ca79a916f1bd789de366b639d09811501e8c092c85b2cb7d697777f93" "e074be1c799b509f52870ee596a5977b519f6d269455b84ed998666cf6fc802a" "ca849ae0c889eb918785cdc75452b1e11a00848a5128a95a23872e0119ccc8f4" "1ca1f43ca32d30b05980e01fa60c107b02240226ac486f41f9b790899f6f6e67" "55257ccc6763185dde2146bcc5aa2b83130cc55042c45daaf5efe3c3137b578f" "5091eadbb87fa0a168a65f2c3e579d1a648d764f12ab9d3ab7bdefca709cd2a5" "5a411e7cb2d7955b28c514cd5b75782c6dd4ba027089fec17a2573405b0fdd5c" "aed6332e9a38b49bb044b994e8be0d57a2f67ff6ca96f5ce8e0130562c4cc233" "2d1fe7c9007a5b76cea4395b0fc664d0c1cfd34bb4f1860300347cdad67fb2f9" "7dc3fe8fadb914563790a3fbe587fd455626442f66da333ea4de2c455feefb98" "37ba833442e0c5155a46df21446cadbe623440ccb6bbd61382eb869a2b9e9bf9" "09cadcc2784baa744c6a7c5ebf2a30df59c275414768b0719b800cabd8d1b842" "427fa665823299f8258d8e27c80a1481edbb8f5463a6fb2665261e9076626710" "614e5089876ea69b515c50b6d7fa0a37eb7ed50fda224623ec49e1c91a0af6a1" "93a0885d5f46d2aeac12bf6be1754faa7d5e28b27926b8aa812840fe7d0b7983" "b0fd04a1b4b614840073a82a53e88fe2abc3d731462d6fde4e541807825af342" "cdb3e7a8864cede434b168c9a060bf853eeb5b3f9f758310d2a2e23be41a24ae" "ef4edbfc3ec509612f3cf82476beddd2aeb3da7bdc3a35726337a0cc838a4ef4" "a16e816774b437acb78beb9916a60ea236cfcd05784227a7d829623f8468c5a2" "8c847a5675ece40017de93045a28ebd9ede7b843469c5dec78988717f943952a" "e3c87e869f94af65d358aa279945a3daf46f8185f1a5756ca1c90759024593dd" "db10381a554231a40b7474eaac28bd58f05067faacce3b25d294bb179a3511a1" "34c99997eaa73d64b1aaa95caca9f0d64229871c200c5254526d0062f8074693" "868abc288f3afe212a70d24de2e156180e97c67ca2e86ba0f2bf9a18c9672f07" default))) '(package-selected-packages (quote - (rainbow-mode smartparens yaml-mode ivy-hydra ivy-rich evy use-package general evil avy)))) + (bazel-mode rainbow-mode highlight-indentation k8s-mode darkokai-theme monokai-pro-theme php-mode puppet-mode smartparens yaml-mode ivy-hydra ivy-rich evy use-package general evil avy))) + '(require-final-newline t)) (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. - ) + '(lsp-clients-php-server-command (quote ("php /home/stefan/Apps/php-language-server/vendor/bin/psalm-language-server")))) (provide 'init) ;;; init.el ends here