From 07d2e081b9c4de85755fa64ca4afad75bb9a4fa4 Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 5 Aug 2026 15:38:07 -0600 Subject: [PATCH] preflight --- init.el | 143 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 81 insertions(+), 62 deletions(-) diff --git a/init.el b/init.el index bdc4513..300fdd6 100644 --- a/init.el +++ b/init.el @@ -27,15 +27,19 @@ (add-to-list 'image-types 'svg) (setq require-final-newline t) (setq warning-minimum-level :error) ; Don't show *warnings* +(add-to-list 'default-frame-alist '(fullscreen . maximized)) +(set-frame-font "ZedMono Nerd Font-16" nil t) -(set-frame-font "ComicShannsMono Nerd Font-13" nil t) +(setq create-lockfiles nil) +(setq gc-cons-threshold 100000000) ; ~100 MB +(setq read-process-output-max (* 1024 1024)) ; 1 MB read buffer chunk ;; Stupid bold font for no reason, BEGONE! (mapc - (lambda (face) - (when (eq (face-attribute face :weight) 'bold) - (set-face-attribute face nil :weight 'normal))) - (face-list)) + (lambda (face) + (when (eq (face-attribute face :weight) 'bold) + (set-face-attribute face nil :weight 'normal))) + (face-list)) ;; Don't allow C-z or C-x C-z if GUI mode (when (display-graphic-p) @@ -69,6 +73,9 @@ ;; UTILS +;; Dired +(global-set-key (kbd "S-w") #'dired-jump) + ;; Pull correct path from dir (use-package direnv :config @@ -78,6 +85,12 @@ (use-package evil :init (evil-mode +1)) +;; Shell stuff +(use-package exec-path-from-shell + :ensure t + :config + (exec-path-from-shell-initialize)) + ;; Project management (use-package projectile :init (projectile-mode +1) @@ -169,13 +182,6 @@ (use-package nix-mode) (use-package cmake-mode) (use-package meson-mode) -(use-package typescript-ts-mode) -(use-package tsx-mode - :straight '(tsx-mode - :type git - :host github - :repo "orzechowskid/tsx-mode.el" - :branch "emacs30")) ;;; With config @@ -183,7 +189,6 @@ (use-package all-the-icons) (use-package nerd-icons) (use-package doom-modeline - :ensure t :init (setq doom-modeline-height 25) (setq doom-modeline-major-mode-icon t) @@ -196,7 +201,7 @@ (doom-themes-enable-bold nil) ; if nil, bold is universally disabled (doom-themes-enable-italic nil) ; if nil, italics is universally disabled :config - (load-theme 'doom-city-lights t) + (load-theme 'doom-gruvbox t) ;; Enable flashing mode-line on errors (doom-themes-visual-bell-config) ;; Enable custom neotree theme (nerd-icons must be installed!) @@ -217,12 +222,30 @@ (add-to-list 'auto-mode-alist '("\\.tt\\'" . web-mode)) ; Template::Toolkit (add-to-list 'auto-mode-alist '("\\.html.tt\\'" . web-mode)) ; Template::Toolkit (add-to-list 'auto-mode-alist '("\\.mc\\'" . web-mode)) ; Mason - (add-to-list 'auto-mode-alist '("\\.tx\\'" . web-mode))) ; Text::Xslate + (add-to-list 'auto-mode-alist '("\\.tx\\'" . web-mode)) ; Text::Xslate + (add-to-list 'auto-mode-alist '("\\.ts\\'" . web-mode)) ; Typescript + (add-to-list 'auto-mode-alist '("\\.js\\'" . web-mode)) ; Javascript + (add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode)) ; React + (add-to-list 'auto-mode-alist '("\\.jsx\\'" . web-mode)) ; React + ) + +(defun enable-minor-mode (my-pair) + "Enable minor mode if filename match the regexp. MY-PAIR is a cons cell (regexp . minor-mode)." + (if (buffer-file-name) + (if (string-match (car my-pair) buffer-file-name) + (funcall (cdr my-pair))))) + +(use-package prettier-js + :ensure t) +(add-hook 'web-mode-hook #'(lambda () + (enable-minor-mode + '("\\.jsx?\\'" . prettier-js-mode)) + (enable-minor-mode + '("\\.tsx?\\'" . prettier-js-mode)))) ;;;; END: web-mode ;;;; BEGIN: cperl-mode -(setq perltidy-on-save t) (require 'perl-mode) (require 'cperl-mode) (require 'projectile) @@ -232,6 +255,9 @@ (setq cperl-indent-parens-as-block t) (add-to-list 'auto-mode-alist '("\\.\\(p\\([lm]\\)\\)\\'" . cperl-mode)) (setq cperl-basic-offset 2) +(add-hook 'cperl-mode-hook + (lambda () + (add-hook 'before-save-hook #'perltidy-buffer nil t))) ;;; Set Perl include path (setq flycheck-perl-include-path '()) @@ -239,7 +265,11 @@ ;;; This is kinda ugly, assuming you use perlbrew its fine :) (when (file-directory-p "~/perl5/perlbrew") (let ((rf-perl-version (shell-command-to-string "source ~/.bashrc && perl -e 'print($^V =~ s/v//r)' 2> /dev/null"))) - (add-to-list 'flycheck-perl-include-path (concat "~/perl5/perlbrew/perls/perl-" rf-perl-version "/lib/" rf-perl-version)))) + (add-to-list 'flycheck-perl-include-path + (concat "~/perl5/perlbrew/perls/perl-" rf-perl-version "/lib/" rf-perl-version)))) + +(when-let ((pr (projectile-project-root))) + (add-to-list 'flycheck-perl-include-path (concat pr "/lib"))) (add-hook 'cperl-mode-hook (lambda () @@ -261,12 +291,25 @@ :slant 'italic ) )) - ;;;; END cperl-mode +;;;; BEGIN common-lisp-mode +(use-package sly + :config + (setq inferior-lisp-program "sbcl")) +;;;; END common-lisp + +;;;; BEGIN clojure-mode +(use-package clojure-mode) + +(use-package cider + :config + (setq cider-repl-result-prefix ";; => " + cider-eval-result-prefix "")) +;;;; + ;;;; BEGIN go-mode (use-package go-mode - :ensure t :config (add-to-list 'auto-mode-alist '("\\.tmpl\\'" . web-mode))) ;;;; END go-mode @@ -275,51 +318,18 @@ (add-hook 'c++-mode-hook (lambda () (c-set-offset 'innamespace 0))) ;;;; END c++-mode -;;;; BEGIN corfu -; (use-package corfu -; :ensure t -; ;; Optional customizations -; :custom -; (corfu-cycle t) ; Allows cycling through candidates -; (corfu-auto t) ; Enable auto completion -; (corfu-auto-prefix 2) ; Minimum length of prefix for completion -; (corfu-auto-delay 0) ; No delay for completion -; (corfu-popupinfo-delay '(0.5 . 0.2)) ; Automatically update info popup after that numver of seconds -; (corfu-preview-current 'insert) ; insert previewed candidate -; (corfu-preselect 'prompt) -; (corfu-on-exact-match nil) ; Don't auto expand tempel snippets -; ;; Optionally use TAB for cycling, default is `corfu-complete'. -; :bind (:map corfu-map -; ("TAB" . corfu-next) -; ([tab] . corfu-next) -; ("S-TAB" . corfu-previous) -; ([backtab] . corfu-previous) -; ("S-" . corfu-insert) -; ("RET" . corfu-insert)) -; -; :init -; (global-corfu-mode) -; (corfu-history-mode) -; (corfu-popupinfo-mode) ; Popup completion info -; :config -; (add-hook 'eshell-mode-hook -; (lambda () (setq-local corfu-quit-at-boundary t -; corfu-quit-no-match t -; corfu-auto nil) -; (corfu-mode)) -; nil -; t)) -;;;; END corfu - +;;;; BEGIN company (use-package company - :ensure t - :init (global-company-mode)) + :init (global-company-mode) + :config + (setq company-minimum-prefix-length 1 + company-idle-delay 0.0)) +;;;; END company ;;;; BEGIN lsp (use-package yasnippet) (use-package which-key) (use-package lsp-mode - :ensure t :custom (lsp-keymap-prefix "C-c l") ; Prefix for LSP actions (lsp-diagnostics-provider :flycheck) @@ -363,11 +373,14 @@ (lsp-semantic-tokens-enable nil) ; Related to highlighting, and we defer to treesitter :init (setq lsp-use-plists t) - (setq lsp-format-buffer-on-save t) - (setq lsp-format-buffer-on-save-list '(c++-mode c-mode go-mode)) + (setq lsp-format-buffer-on-save-list '(c++-mode c-mode go-mode clojure-mode)) (setq lsp-warn-no-matched-clients nil) ; Don't warn on unsupported modes (setq lsp-clients-clangd-executable "clangd") + (setq lsp-completion-provider :capf) + (setopt backup-by-copying t) :config + (add-hook 'web-mode 'lsp) + (add-hook 'clojure-mode-hook 'lsp) (add-hook 'go-mode-hook 'lsp) (add-hook 'c++-mode-hook 'lsp) (add-hook 'lsp-mode-hook 'lsp-diagnostics-mode) @@ -377,7 +390,6 @@ completion-category-defaults nil)))) (use-package lsp-ui - :ensure t :commands (lsp-ui-doc-show lsp-ui-doc-glance) @@ -392,7 +404,14 @@ ;;;; END lsp -(custom-set-variables) +(custom-set-variables + ;; custom-set-variables 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. + '(custom-enabled-themes '(doom-gruvbox)) + '(custom-safe-themes + '("38b43b865e2be4fe80a53d945218318d0075c5e01ddf102e9bec6e90d57e2134" "e4a702e262c3e3501dfe25091621fe12cd63c7845221687e36a79e17cf3a67e0" "b99ff6bfa13f0273ff8d0d0fd17cc44fab71dfdc293c7a8528280e690f084ef0" "3061706fa92759264751c64950df09b285e3a2d3a9db771e99bcbb2f9b470037" "e14289199861a5db890065fdc5f3d3c22c5bac607e0dbce7f35ce60e6b55fc52" "7c3d62a64bafb2cc95cd2de70f7e4446de85e40098ad314ba2291fc07501b70c" "1f292969fc19ba45fbc6542ed54e58ab5ad3dbe41b70d8cb2d1f85c22d07e518" "4d5d11bfef87416d85673947e3ca3d3d5d985ad57b02a7bb2e32beaf785a100e" "4594d6b9753691142f02e67b8eb0fda7d12f6cc9f1299a49b819312d6addad1d" "d97ac0baa0b67be4f7523795621ea5096939a47e8b46378f79e78846e0e4ad3d" "f64189544da6f16bab285747d04a92bd57c7e7813d8c24c30f382f087d460a33" "0c83e0b50946e39e237769ad368a08f2cd1c854ccbcd1a01d39fdce4d6f86478" "70c88c01b0b5fde9ecf3bb23d542acba45bb4c5ae0c1330b965def2b6ce6fac3" "13096a9a6e75c7330c1bc500f30a8f4407bd618431c94aeab55c9855731a95e1" "456697e914823ee45365b843c89fbc79191fdbaff471b29aad9dcbe0ee1d5641" "9b9d7a851a8e26f294e778e02c8df25c8a3b15170e6f9fd6965ac5f2544ef2a9" "dd4582661a1c6b865a33b89312c97a13a3885dc95992e2e5fc57456b4c545176" "c3c135e69890de6a85ebf791017d458d3deb3954f81dcb7ac8c430e1620bb0f1" "8c7e832be864674c220f9a9361c851917a93f921fedb7717b1b5ece47690c098" "8d3ef5ff6273f2a552152c7febc40eabca26bae05bd12bc85062e2dc224cde9a" "e8ceeba381ba723b59a9abc4961f41583112fc7dc0e886d9fc36fa1dc37b4079" "0d2c5679b6d087686dcfd4d7e57ed8e8aedcccc7f1a478cd69704c02e4ee36fe" "77fff78cc13a2ff41ad0a8ba2f09e8efd3c7e16be20725606c095f9a19c24d3d" "e8bd9bbf6506afca133125b0be48b1f033b1c8647c628652ab7a2fe065c10ef0" "93011fe35859772a6766df8a4be817add8bfe105246173206478a0706f88b33d" "9e5e0ff3a81344c9b1e6bfc9b3dcf9b96d5ec6a60d8de6d4c762ee9e2121dfb2" "f1e8339b04aef8f145dd4782d03499d9d716fdc0361319411ac2efc603249326" "02d422e5b99f54bd4516d4157060b874d14552fe613ea7047c4a5cfa1288cf4f" "aec7b55f2a13307a55517fdf08438863d694550565dee23181d2ebd973ebd6b8" "b5fd9c7429d52190235f2383e47d340d7ff769f141cd8f9e7a4629a81abc6b19" "720838034f1dd3b3da66f6bd4d053ee67c93a747b219d1c546c41c4e425daf93" default))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful.