diff --git a/.config/emacs/early-init.el b/.config/emacs/early-init.el new file mode 100644 index 0000000..080ecb9 --- /dev/null +++ b/.config/emacs/early-init.el @@ -0,0 +1,10 @@ +;;; early-init.el -*- lexical-binding: t; -*- + +;; Copyright © 2025 caem + +;; Author: caem +;; URL: https://git.caem.dev/caem/dotfiles + +;; Code: + +;;; early-init.el ends here diff --git a/.config/emacs/init.el b/.config/emacs/init.el new file mode 100644 index 0000000..a03da8d --- /dev/null +++ b/.config/emacs/init.el @@ -0,0 +1,149 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; Copyright © 2025 caem + +;; Author: caem +;; URL: https://git.caem.dev/caem/dotfiles + +;; Code: + +;; === Package Manager === +(require 'package) +(setq package-archives '(("melpa" . "https://melpa.org/packages/") + ("nongnu" . "https://elpa.nongnu.org/nongnu/") + ("gnu" . "https://elpa.gnu.org/packages/"))) +(package-initialize) + +;; === Littering === +(setq custom-file "~/.emacs.d/custom.el" + backup-by-copying t + backup-directory-alist '(("." . "~/.emacs.d/backups"))) + +;; === User Interface === +(setq inhibit-splash-screen t + ring-bell-function 'ignore) +(tool-bar-mode 0) +(menu-bar-mode 0) +(scroll-bar-mode 0) +(tooltip-mode 0) + +;; === Appearance === +(global-hl-line-mode t) +(use-package rainbow-delimiters + :ensure t + :hook (prog-mode . rainbow-delimiters-mode)) + +(if (display-graphic-p) + (progn + (let ((font-size 11)) + (add-to-list 'default-frame-alist + `(font . ,(concat + (cond + ((find-font (font-spec :name "Adwaita Mono Nerd Font")) + "Adwaita Mono Nerd Font") + ((find-font (font-spec :name "Adwaita Mono")) + "Adwaita Mono") + (t (let ((font (font-get-system-font))) + (if (eq (type-of font) 'font-spec) + (font-get font 'name) + (replace-regexp-in-string " [0-9]+$" "" font))))) + (format "-%d" font-size))))) + (let ((opacity 95)) + (set-frame-parameter nil 'alpha-background opacity) + (add-to-list 'default-frame-alist `(alpha-background . ,opacity))) + (use-package darktooth-theme + :ensure t + :config + (load-theme 'darktooth-dark t) + (set-face-background 'hl-line "#262626"))) + (progn + (set-face-attribute 'hl-line nil :background + (let ((bg (face-attribute 'default ':background))) + (if (string= "unspecified-bg" bg) + "#1c1c1c" + (format "#%x" (+ 1118481 (string-to-number + (substring bg 1) 16)))))))) + +;; === Scrolling === +(setq display-line-numbers-type 'relative + compilation-scroll-output t + scroll-step 1 + scroll-margin 8) + +(global-display-line-numbers-mode t) + +;; === Searching === +(use-package helm + :ensure t + :bind (("M-x" . helm-M-x) + ("C-x C-f" . helm-find-files)) + :config + (require 'helm-autoloads) + (require 'helm) + (helm-mode 1)) + +;; === Treesitter === +(use-package tree-sitter + :ensure t) + +(use-package tree-sitter-langs + :ensure t) + +(global-tree-sitter-mode) +(add-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode) + +;; === Completions === +(use-package lsp-mode + :ensure t + :init (setq lsp-keymap-prefix "C-c l") + :hook (prog-mode . lsp) + :commands lsp) + +(use-package lsp-ui + :ensure t + :commands lsp-ui-mode) + +(use-package company + :ensure t + :hook (after-init-hook . global-company-mode)) + +;; --- Lsp servers --- +(use-package elsa + :ensure t + :config (elsa-lsp-register)) + +(use-package lsp-pyright + :ensure t + :custom (lsp-pyright-langserver-command "basedpyright") + :hook (python-mode . (lambda () + (require 'lsp-pyright) + (lsp)))) + +;; === Major Modes === +(setq-default indent-tabs-mode nil) + +;; --- Term Mode --- +(defun reset-scroll-config () + (setq-local scroll-margin 0)) +(add-hook 'term-mode-hook #'reset-scroll-config) + +;; --- Lisp Modes --- +(use-package paredit + :ensure nil + :hook + ((emacs-lisp-mode . enable-paredit-mode) + (scheme-mode . enable-paredit-mode)) + :config + (show-paren-mode 1) + (setq show-paren-style 'parenthesis)) + +(add-hook 'emacs-lisp-mode-hook (lambda () (setq tab-width 2))) +(add-hook 'scheme-mode-hook (lambda () (setq tab-wdith 2))) + +;; --- C Mode --- +(add-hook 'c-mode-hook (lambda () (setq tab-width 4))) + +;; --- Python Mode --- +(add-hook 'python-mode-hook (lambda () (setq tab-width 4))) + +;;; init.el ends here diff --git a/.emacs.d/early-init.el b/.emacs.d/early-init.el new file mode 100644 index 0000000..f496c7f --- /dev/null +++ b/.emacs.d/early-init.el @@ -0,0 +1,22 @@ +;;; early-init.el -*- lexical-binding: t; -*- + +;; Copyright © 2025 caem + +;; Author: caem +;; URL: https://git.caem.dev/caem/dotfiles + +;; Commentary: + +;; This is a stub early-init file to lead the actual early-init file of my emacs +;; configuration. +;; +;; Refer to init.el in the same directory as this for the rationale behind for +;; having this file where it is and why it is the way that it is. + +;; Code: + +(require 'xdg) + +(load (expand-file-name "emacs/early-init.el" (xdg-config-home))) + +;;; early-init.el ends here diff --git a/.emacs.d/init.el b/.emacs.d/init.el new file mode 100644 index 0000000..878cc29 --- /dev/null +++ b/.emacs.d/init.el @@ -0,0 +1,30 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; Copyright © 2025 caem + +;; Author: caem +;; URL: https://git.caem.dev/caem/dotfiles + +;; Commentary: + +;; This is a stub init file to load the actual init file of my emacs +;; configuration. +;; +;; The reason they're seperated is that this allows me to have +;; emacs think that my configuration resides in the ~/.emacs.d directory when in +;; reality all my files are located in ~/.config/emacs. This prevents all the +;; 9 million different things that want to write to my configuration directory +;; from actually writing in my configuration directory. All other ways, even +;; chaning the user-emacs-directory and setting up no-littering are not remotely +;; enough to prevent stuff shitting all over my configuration directory so this +;; is esentially my last resort. +;; +;; I would've much preferred to place this in to +;; ~/.local/share/emacs instead but it's unfortunately not possible so it has to +;; reside in ~/.emacs.d due to load priorities inside of emacs. + +;; Code: + +(load (expand-file-name "emacs/init.el" (xdg-config-home))) + +;;; init.el ends here diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..31331b2 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +setup linguist-vendored +scripts/** linguist-vendored \ No newline at end of file