;;; config.el -*- lexical-binding: t; -*- ;; ============================================================ ;; Custom & Packages Loading ;; ============================================================ (let ((custom-dir (expand-file-name "custom/" user-emacs-directory))) (when (file-directory-p custom-dir) (mapc #'load (directory-files custom-dir t "\\.el$")))) ;; (let ((pkg-dir (expand-file-name "packages/" user-emacs-directory))) ;; (when (file-directory-p pkg-dir) ;; (mapc #'load (directory-files pkg-dir t "\\.el$")))) (add-to-list 'load-path (expand-file-name "packages/" user-emacs-directory)) ;;(add-to-list 'load-path (expand-file-name "custom/" user-emacs-directory)) (add-to-list 'custom-theme-load-path (expand-file-name "themes/" user-emacs-directory)) (require 'visuals-packages) ;;ui, eye candy (require 'editing-packages) ;;text editing (require 'system-packages) ;; emacs itself (require 'tutilities-packages) ;; tertiary utilities (require 'completion-packages) ;; ui, functional (use-package general :config (general-def :keymaps 'global "C-S-c" #'my/system-copy "C-S-x" #'my/system-cut "C-S-v" #'my/system-paste "C-z" #'undo "C-S-z" #'undo-redo "C-k" #'avy-kill-whole-line "C-r" #'recenter-top-bottom "C-b" #'scroll-down-command "C-" #'my/delete-word-backward "M-w" #'clipetty-kill-ring-save ) (general-def :keymaps 'override "M-g g" #'avy-goto-line "C-s C-f" #'avy-goto-char-timer "C-s C-s C-f" #'my/avy-char-region "C-s C-S-s" #'my/avy-line-region "C-s w" #'my/vterm-sync-here "C-x C-b" #'buffer-table "C-s C-l" #'consult-line "C-s C-e" #'expreg-expand ) (general-define-key :keymaps 'global "C-w" #'delete-window)) ;; ============================================================ ;; Core Settings & UI ;; ============================================================ (setq kill-ring-max 1 select-enable-clipboard nil select-enable-primary nil save-interprogram-paste-before-kill nil ;;xterm-extra-capabilities '(getSelection setSelection modifyOtherKeys) mouse-drag-copy-region nil tab-width 4 truncate-lines nil display-line-numbers-type t cursor-type 'bar savehist-additional-variables '(kill-ring search-ring) recentf-max-saved-items 75 global-auto-revert-non-file-buffers t undo-limit 60000000 undo-strong-limit 90000000 undo-outer-limit 120000000 ) (setq-default tab-width 4 js-indent-level 4 typescript-indent-level 4 typescript-ts-mode-indent-offset 4 typescript-ts-mode-indent-offset 4) ;; Modes (global-hl-line-mode t ) (global-display-line-numbers-mode 1) (hl-line-mode 1) (savehist-mode 1) (global-clipetty-mode) (global-auto-revert-mode) (yas-global-mode t) ;; Fonts (set-face-attribute 'default nil :family "Noto Sans Mono" :height 120) (set-face-attribute 'variable-pitch nil :family "Noto Sans" :height 140) ;; Apply variable pitch to specific modes (dolist (hook '(markdown-mode-hook org-mode-hook json-mode-hook)) (add-hook hook (lambda () (buffer-face-set '(:family "Noto Sans" :height 140))))) (add-to-list 'auto-mode-alist '("\\.qd$" . markdown-mode)) (add-to-list 'auto-mode-alist '("\\.ino$" . c++-mode)) (add-to-list 'term-file-aliases '("xterm-256" . "xterm")) ;; Recentf cleanup (with-eval-after-load 'recentf (run-at-time nil 600 #'recentf-cleanup) (setq recentf-exclude '(".*/$"))) ;; ============================================================ ;; Native Emacs Configuration ;; ============================================================ (use-package emacs :ensure nil :custom (mason-setup) (tab-always-indent 'complete) (completion-ignore-case t) (read-file-name-completion-ignore-case t) (read-buffer-completion-ignore-case t) (text-mode-ispell-word-completion nil) (backup-directory-alist '(("." . "~/MyEmacsBackups"))) (backup-by-copying t) ) ;; Tree-sitter & LSP tweaks (Core transformative changes) (with-eval-after-load 'treesit (setq treesit-font-lock-level 4)) ;; (with-eval-after-load 'typescript-ts-mode ;; (setq typescript-ts-mode-indent-offset 2) ;; (defvaralias 'typescript-indent-level 'typescript-ts-mode-indent-offset)) (use-package mason :config (mason-setup)) (use-package lsp-mode :hook ((prog-mode . lsp-deferred) ;try to automatically start lsp-mode when prog-mode (typescript-ts-mode . lsp-deferred) (js-ts-mode . lsp-deferred) (tsx-ts-mode . lsp-deferred) (arduino-mode . lsp-deferred) (lsp-mode . lsp-enable-which-key-integration)) :commands lsp :config (add-to-list 'lsp-language-id-configuration '(arduino-mode . "cpp")) (lsp-register-client (make-lsp-client :new-connection (lsp-stdio-connection '("clangd" "--header-insertion=never")) :activation-fn (lsp-activate-on "arduino") :server-id 'lsp-arduino-clangd ))) ;; ============================================================ ;; Theming ;; ============================================================ (my/apply-theme (selected-frame)) ;;(add-hook 'window-setup-hook (lambda () (my/apply-theme (selected-frame)))) (add-hook 'after-make-frame-functions 'my/apply-theme) (setq nerd-icons-font-family "Symbols Nerd Font Mono")