From ad09b481aca56cb54a2061eb2453d25f9c56e488 Mon Sep 17 00:00:00 2001
From: outfoxxed <outfoxxed@outfoxxed.me>
Date: Sat, 1 Mar 2025 00:21:40 -0800
Subject: [PATCH] change dump

---
 init.el | 109 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 92 insertions(+), 17 deletions(-)

diff --git a/init.el b/init.el
index 004f238..4d8c56f 100755
--- a/init.el
+++ b/init.el
@@ -10,7 +10,7 @@
   ;; Hide scroll bar
   (toggle-scroll-bar -1)
   ;; Use JBMono
-  (set-frame-font "-JB-JetBrainsMonoNL Nerd Font-normal-normal-normal-*-18-*-*-*-m-0-iso10646-1" nil t))
+  (set-frame-font "-JB-JetBrainsMonoNL Nerd Font-normal-normal-normal-*-14-*-*-*-m-0-iso10646-1" nil t))
 
 (apply-appearance-first-frame)
 (apply-appearance-per-frame)
@@ -47,24 +47,42 @@
       mouse-wheel-follow-mouse +1
       scroll-step 1) ;; C-n C-p scroll step
 
+;; Fix (?) mouse focus getting stuck in a single frame = https://stackoverflow.com/questions/1139124/emacs-mouse-focus-stuck-in-one-frame
+(setq focus-follows-mouse t
+      mouse-autoselect-window t)
+
 ;; Disable annoying bell sound
 (setq ring-bell-function 'ignore)
 
 ;; Highlight matching parens faster
 (setq show-paren-delay 0)
 
-(setq tab-width 2)
+;; Indentation
+(setq-default tab-width 2)
 (defun disable-tabs ()
-  (setq tab-width 2)
   (indent-tabs-mode -1))
 (defun enable-tabs ()
-  (setq tab-width 2)
-  (indent-tabs-mode +1))
+  (indent-tabs-mode t))
+(setq tab-always-indent nil) ;; tab key inserts tabs after hitting indent point
+
+;; display mismatched whitespace at the beginning or end of lines
+(add-hook 'after-change-major-mode-hook
+          (lambda ()
+            (if (derived-mode-p 'prog-mode)
+                (progn
+                  (if (eq indent-tabs-mode t)
+                      (setq whitespace-style '(face indentation::tab trailing missing-newline-at-eof))
+                    (setq whitespace-style '(face indentation::space trailing missing-newline-at-eof)))
+                  (whitespace-mode t)))))
 
 (add-hook 'prog-mode-hook 'enable-tabs)
 (add-hook 'lisp-mode-hook 'disable-tabs)
 (add-hook 'emacs-lisp-mode-hook 'disable-tabs)
 
+(add-hook 'nxml-mode-hook 'enable-tabs)
+(setq nxml-child-indent 2
+      nxml-attribute-indent 4)
+
 (let ((savedir (concat (file-name-as-directory (getenv "XDG_DATA_HOME")) "emacs/autosave/")))
   (make-directory savedir t)
   (setq backup-directory-alist `(("." . ,savedir)))
@@ -95,6 +113,11 @@
                                     (setq-local interprogram-paste-function nil)))
   (evil-mode +1))
 
+(use-package evil-collection
+  :after evil
+	:config
+	(evil-collection-init '(magit ibuffer)))
+
 (use-package better-jumper
   :after evil
   :config
@@ -107,18 +130,14 @@
   (define-key evil-normal-state-map (kbd "SPC j") #'better-jumper-set-jump)
   (better-jumper-mode))
 
-(use-package evil-collection
-  :after evil
-	:config
-	(evil-collection-init '(magit ibuffer)))
-
 (use-package crux)
 
 ;; Avy (jump to char)
 (use-package avy
-  :bind (("C-;" . avy-goto-char)
-	 ("C-:" . avy-goto-word-1)
-	 ("M-g g" . avy-goto-line)))
+  :bind
+    (("C-;" . avy-goto-char)
+	   ("C-:" . avy-goto-word-1)
+	   ("M-g g" . avy-goto-line)))
 
 (use-package undo-tree
   :after evil
@@ -130,7 +149,10 @@
   (global-undo-tree-mode))
 
 ;; Magit (git frontend)
-(use-package magit)
+(use-package magit
+  :config
+  (setq magit-diff-refine-hunk t
+        magit-diff-refine-ignore-whitespace t))
 
 ;; Rainbow-Mode (show hex strings in color)
 (use-package rainbow-mode)
@@ -140,7 +162,10 @@
   :config
   (keymap-set vertico-map "M-j" #'vertico-next)
   (keymap-set vertico-map "M-k" #'vertico-previous)
+  (keymap-set vertico-map "C-j" #'vertico-next)
+  (keymap-set vertico-map "C-k" #'vertico-previous)
   (keymap-set vertico-map "M-`" #'vertico-exit)
+  (keymap-set vertico-map "M-ESC" #'vertico-exit)
   (vertico-mode))
 
 (use-package vertico-indexed
@@ -257,6 +282,7 @@
   (define-key company-active-map (kbd "<return>") nil)
   (define-key company-active-map (kbd "RET") nil)
   (define-key company-active-map (kbd "M-`") #'company-complete-selection)
+  (define-key company-active-map (kbd "M-ESC") #'company-complete-selection)
   (define-key company-active-map (kbd "M-n") #'company-select-next)
   (define-key company-active-map (kbd "M-p") #'company-select-previous)
   (define-key company-active-map (kbd "M-j") #'company-select-next)
@@ -306,7 +332,10 @@
 (use-package lsp-treemacs
   :after (lsp-mode treemacs))
 
-;; Java lsp
+(use-package kotlin-mode
+  :after lsp-mode
+  :hook (kotlin-mode . lsp-deferred))
+
 (use-package lsp-java
   :after lsp-mode
   :hook (java-ts-mode . lsp-deferred)
@@ -318,6 +347,13 @@
           "-configuration" (concat (file-name-as-directory (getenv "XDG_CACHE_HOME")) "jdtls")
           "-data" "../.jdtls")))
 
+(setq lsp-glsl-executable '("glslls" "--stdin" "--target-env" "opengl"))
+
+(use-package groovy-mode)
+
+;; Nasm support
+(use-package nasm-mode)
+
 ;; Nix support
 (use-package nix-mode
   :mode "\\.nix\\'"
@@ -325,24 +361,63 @@
 
 ;; QML Support
 (setq qml-ts-mode-indent-offset 2)
+
+;; Haskell
+(use-package haskell-ts-mode
+  :hook (haskell-ts-mode . disable-tabs))
+
+;; Zig
+(use-package zig-ts-mode
+  :mode (("\\.zig\\'" . zig-ts-mode)
+         ("\\.zon\\'" . zig-ts-mode))
+  :hook ((zig-ts-mode . lsp-deferred)
+         (zig-ts-mode . disable-tabs)
+         (zig-ts-mode . (lambda () (setq-local tab-width 4)))))
+
 (use-package qml-ts-mode
+  :after lsp-mode
   :config
-  (add-hook 'qml-ts-mode-hook
-            (lambda () (setq-local electric-indent-chars '(?\n ?\( ?\) ?{ ?} ?\[ ?\] ?\; ?,)))))
+  (add-to-list 'lsp-language-id-configuration '(qml-ts-mode . "qml-ts"))
+  (lsp-register-client
+   (make-lsp-client :new-connection (lsp-stdio-connection '("qmlls" "-E"))
+                    :activation-fn (lsp-activate-on "qml-ts")
+                    :server-id 'qmlls))
+  (add-hook 'qml-ts-mode-hook (lambda ()
+                                (setq-local electric-indent-chars '(?\n ?\( ?\) ?{ ?} ?\[ ?\] ?\; ?,))
+                                (lsp-deferred))))
+
+;; Astro support
+;;(use-package astro-ts-mode
+  ;;:after lsp-mode
+  ;;:config
+  ;;(add-to-list 'lsp-language-id-configuration '(astro-ts-mode . "astro-ts"))
+  ;;(lsp-register-client
+   ;;(make-lsp-client :new-connection (lsp-stdio-connection "astro-ls")
+                    ;;:activation-fn (lsp-activate-on "astro-ts")
+                    ;;:server-id 'astro-ls)))
 
 (add-to-list 'auto-mode-alist '("\\.rs\\'" . rust-ts-mode))
+(add-to-list 'auto-mode-alist '("\\.hs\\'" . haskell-ts-mode))
 (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-ts-mode))
 (add-to-list 'auto-mode-alist '("\\.tsx\\'" . typescript-ts-mode))
+(add-to-list 'auto-mode-alist '("\\.astro\\'" . astro-ts-mode))
 (add-to-list 'auto-mode-alist '("\\.toml\\'" . toml-ts-mode))
 (add-to-list 'auto-mode-alist '("\\.yaml\\'" . yaml-ts-mode))
+(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-ts-mode))
 (add-hook 'rust-ts-mode-hook #'lsp-deferred)
 (add-hook 'c++-ts-mode-hook #'lsp-deferred)
 (add-hook 'typescript-ts-mode-hook #'lsp-deferred)
+(add-hook 'astro-ts-mode-hook #'lsp-deferred)
+(add-hook 'glsl-mode-hook #'lsp-deferred)
+(add-hook 'haskell-ts-mode-hook #'lsp-deferred)
+(add-hook 'zig-ts-mode-hook #'lsp-deferred)
 
 ;; Fix indent
 (add-hook 'rust-ts-mode-hook
           (lambda () (setq-local electric-indent-chars '(?\n ?\( ?\) ?{ ?} ?\[ ?\] ?\; ?,))))
 
+(add-hook 'yaml-ts-mode #'disable-tabs)
+
 (setq gc-cons-threshold (* 1024 1024 100)
       read-process-output-max (* 1024 1024))