Files
lypacamacs/config.el
T
2026-05-26 03:18:34 +02:00

166 lines
5.2 KiB
EmacsLisp

;;; 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-<backspace>" #'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")