diff --git a/emacs/.dir-locals.el b/emacs/.dir-locals.el new file mode 100644 index 0000000..c3c40e7 --- /dev/null +++ b/emacs/.dir-locals.el @@ -0,0 +1,2 @@ +((nil (eglot-workspace-configuration . ((gopls . ((staticcheck . t) + (matcher . "CaseSensitive"))))))) diff --git a/emacs/feature/feature-dev.el b/emacs/feature/feature-dev.el index be302aa..ecf50ef 100644 --- a/emacs/feature/feature-dev.el +++ b/emacs/feature/feature-dev.el @@ -22,6 +22,7 @@ (require 'module-apitest) (require 'module-qt) (require 'module-eglot) +;; (require 'module-lsp) (provide 'feature-dev) ;;; feature-dev.el ends here. diff --git a/emacs/module/module-denote-index.el b/emacs/module/module-denote-index.el index 5465aab..e25f26d 100644 --- a/emacs/module/module-denote-index.el +++ b/emacs/module/module-denote-index.el @@ -74,20 +74,14 @@ (insert "\n\n")))))))))) - (defun my/search-denote-notes () - "Use consult-ripgrep to search only the Denote metadata index file." - (interactive) - (let* ((index-file my/denote-metadata-index-file) - (default-directory (file-name-directory index-file)) - (file-name (file-name-nondirectory index-file)) - (consult-ripgrep-args - (concat "rg --null --ignore-case --type org --line-buffered --color=never " - "--max-columns=500 --no-heading --line-number " - "--max-depth 0 " - (shell-quote-argument file-name)))) - (if (file-exists-p index-file) - (consult-ripgrep default-directory) - (message "Metadata index file not found: %s" index-file)))) + (defun my/search-denote-notes () + "Use consult-ripgrep to search Denote notes in denote-directory." + (interactive) + (let ((consult-ripgrep-args + "rg --null --ignore-case --type org --line-buffered --color=never --max-columns=500 --no-heading --line-number")) + (if (file-directory-p denote-directory) + (consult-ripgrep denote-directory) + (message "Denote directory not found: %s" denote-directory)))) (global-set-key (kbd "C-x n /") #'my/search-denote-notes)) diff --git a/emacs/module/module-eglot.el b/emacs/module/module-eglot.el index 6d35cd8..5b5bdd7 100644 --- a/emacs/module/module-eglot.el +++ b/emacs/module/module-eglot.el @@ -7,8 +7,26 @@ (require 'module-pkg) (pkg/require 'eglot) +(pkg/require 'go-mode) + (add-hook 'go-mode-hook 'eglot-ensure) (add-hook 'c-mode-hook 'eglot-ensure) +(defun eglot-format-buffer-before-save () + (add-hook 'before-save-hook #'eglot-format-buffer -10 t)) +(add-hook 'go-mode-hook #'eglot-format-buffer-before-save) + +(setq-default eglot-workspace-configuration + '((:gopls . + ((staticcheck . t) + (matcher . "CaseSensitive"))))) + +(defun go-mode-setup-organize-imports () + (add-hook 'before-save-hook + (lambda () + (call-interactively 'eglot-code-action-organize-imports)) + nil t)) +(add-hook 'go-mode-hook #'go-mode-setup-organize-imports) + (provide 'module-eglot) ;;; module-eglot.el ends here diff --git a/emacs/module/module-golang.el b/emacs/module/module-golang.el index a5f4718..94705f7 100644 --- a/emacs/module/module-golang.el +++ b/emacs/module/module-golang.el @@ -10,6 +10,15 @@ (pkg/require-defer 'go-mode) +(defun project-find-go-module (dir) + (when-let ((root (locate-dominating-file dir "go.mod"))) + (cons 'go-module root))) + +(cl-defmethod project-root ((project (head go-module))) + (cdr project)) + +(add-hook 'project-find-functions #'project-find-go-module) + (with-eval-after-load 'go-mode (add-to-list 'auto-mode-alist '("\\.go$" . go-mode)) (add-hook 'before-save-hook #'gofmt-before-save)) diff --git a/emacs/module/module-lsp.el b/emacs/module/module-lsp.el new file mode 100644 index 0000000..bdc1ccb --- /dev/null +++ b/emacs/module/module-lsp.el @@ -0,0 +1,94 @@ +;;; module-lsp.el --- LSP configuration module -*- lexical-binding: t -*- + +;;; Commentary: +;; This module sets up lsp-mode with specific configurations for Please build system + +;;; Code: + +(require 'lsp-mode) +(require 'lsp-ui) +(require 'which-key) + +;; LSP Mode core settings +(setq lsp-keymap-prefix "C-c l") +(setq lsp-idle-delay 0.500) +(setq lsp-log-io nil) +(setq lsp-completion-provider :capf) +(setq lsp-prefer-flymake nil) + +;; Please build system specific configurations +(setq lsp-file-watch-ignored-directories + '("[/\\\\]\\.git$" + "[/\\\\]\\.hg$" + "[/\\\\]\\.bzr$" + "[/\\\\]_darcs$" + "[/\\\\]\\.svn$" + "[/\\\\]_FOSSIL_$" + "[/\\\\]\\.idea$" + "[/\\\\]\\.ensime_cache$" + "[/\\\\]\\.eunit$" + "[/\\\\]node_modules$" + "[/\\\\]\\.fslckout$" + "[/\\\\]\\.tox$" + "[/\\\\]\\.stack-work$" + "[/\\\\]\\.bloop$" + "[/\\\\]\\.metals$" + "[/\\\\]target$" + "[/\\\\]\\.ccls-cache$" + "[/\\\\]\\.deps$" + "[/\\\\]build-aux$" + "[/\\\\]autom4te.cache$" + "[/\\\\]\\.reference$" + "[/\\\\]plz-out$")) ;; Add plz-out to ignored directories + +;; Increase watch threshold for large Please projects +(setq lsp-file-watch-threshold 10000) + +;; LSP UI configurations +(setq lsp-ui-doc-enable t) +(setq lsp-ui-doc-show-with-cursor t) +(setq lsp-ui-doc-position 'at-point) +(setq lsp-ui-doc-delay 0.5) +(setq lsp-ui-sideline-enable t) +(setq lsp-ui-sideline-show-diagnostics t) +(setq lsp-ui-sideline-show-hover t) +(setq lsp-ui-sideline-show-code-actions t) + +;; Performance optimizations for large projects +(setq gc-cons-threshold 100000000) +(setq read-process-output-max (* 3 1024 1024)) ;; Increased for larger projects +(setq lsp-response-timeout 20) ;; Increased timeout +(setq lsp-idle-delay 0.500) + +;; Decrease the amount of data lsp has to process +(setq lsp-enable-file-watchers t) +(setq lsp-enable-folding nil) +(setq lsp-enable-text-document-color nil) +(setq lsp-enable-on-type-formatting nil) +(setq lsp-enable-links nil) + +;; Which-key integration +(with-eval-after-load 'lsp-mode + (add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration)) + +;; Enable LSP for specific modes +(add-hook 'python-mode-hook #'lsp-deferred) +(add-hook 'c-mode-hook #'lsp-deferred) +(add-hook 'c++-mode-hook #'lsp-deferred) +(add-hook 'rust-mode-hook #'lsp-deferred) +(add-hook 'go-mode-hook #'lsp-deferred) +(add-hook 'js-mode-hook #'lsp-deferred) +(add-hook 'typescript-mode-hook #'lsp-deferred) + +;; Format on save (optional) +(add-hook 'before-save-hook #'lsp-format-buffer) + +;; Keybindings +(define-key lsp-mode-map (kbd "C-c l f") #'lsp-format-buffer) +(define-key lsp-mode-map (kbd "C-c l r") #'lsp-rename) +(define-key lsp-mode-map (kbd "C-c l a") #'lsp-execute-code-action) +(define-key lsp-mode-map (kbd "C-c l d") #'lsp-find-definition) +(define-key lsp-mode-map (kbd "C-c l R") #'lsp-find-references) + +(provide 'module-lsp) +;;; module-lsp.el ends here diff --git a/emacs/module/module-plantuml.el b/emacs/module/module-plantuml.el index 908bc9b..b3a07c9 100644 --- a/emacs/module/module-plantuml.el +++ b/emacs/module/module-plantuml.el @@ -20,6 +20,10 @@ (org-babel-do-load-languages 'org-babel-load-languages '((plantuml . t)))) +(with-eval-after-load 'plantuml-mode + (add-to-list 'auto-mode-alist '("\\.puml$" . plantuml-mode))) + + (provide 'module-plantuml) ;;; module-plantuml.el ends here. diff --git a/sway/config b/sway/config index 060a645..9560849 100644 --- a/sway/config +++ b/sway/config @@ -62,6 +62,19 @@ input "2821:6246:Asus_Keyboard" { xkb_variant "dvorak" } +input "1:1:AT_Translated_Set_2_keyboard" { + xkb_layout "us" + xkb_variant "dvorak" +} + +input "1267:12811:ELAN0688:00_04F3:320B_Touchpad" { + natural_scroll enabled + dwt disabled + drag enabled + drag_lock enabled + tap enabled +} + ### Input configuration # # Example configuration: @@ -244,18 +257,6 @@ input "2821:6246:Asus_Keyboard" { input "type:keyboard" xkb_options compose:ralt exec foot --server -# setup displays -exec wlr-randr --output HDMI-A-1 --scale 1 --preferred -exec wlr-randr --output eDP-1 --scale 1.5 - -# start pipewire -exec pipewire & -exec wireplumber & - -# pulseaudio compatibility, mainly for gaming -exec pipewire-pulse & - - bindsym --locked XF86AudioRaiseVolume exec --no-startup-id amixer set Master 5%+ bindsym --locked XF86AudioLowerVolume exec --no-startup-id amixer set Master 5%- bindsym --locked XF86AudioMute exec --no-startup-id amixer set Master mute toggle @@ -272,9 +273,8 @@ exec vorta & include /etc/sway/config.d/* - - seat seat0 xcursor_theme Adwaita 48 - +exec eval $(gnome-keyring-daemon --start) +exec export SSH_AUTH_SOCK