diff options
45 files changed, 656 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..16271d5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +/* +!/.gitignore +!/init.el +!/early-init.el +!/check-init.el +!/themes +!/init +!/lisp +!/packages +!/dir-locals diff --git a/check-init.el b/check-init.el new file mode 100755 index 0000000..0723e82 --- /dev/null +++ b/check-init.el @@ -0,0 +1,8 @@ +#!/usr/bin/env -S emacs --script + +(kill-emacs (condition-case nil + (progn + (load (file-name-concat user-emacs-directory "early-init.el")) + (load (file-name-concat user-emacs-directory "init.el"))) + (error 1) + (:success 0))) diff --git a/dir-locals/c++-dir-locals.el b/dir-locals/c++-dir-locals.el new file mode 100644 index 0000000..a5c04b4 --- /dev/null +++ b/dir-locals/c++-dir-locals.el @@ -0,0 +1,6 @@ +((c++-mode + . ((fmt-executable . "clang-format") + (eval . (add-hook 'before-save-hook 'fmt-current-buffer nil t)) + (eval . (add-to-list 'eglot-server-programs '(c++-mode . ("clangd" "-header-insertion=never")))) + (eval . (eglot-ensure)) + (eval . (company-mode 1))))) diff --git a/dir-locals/elisp-dir-locals.el b/dir-locals/elisp-dir-locals.el new file mode 100644 index 0000000..b6c3793 --- /dev/null +++ b/dir-locals/elisp-dir-locals.el @@ -0,0 +1,2 @@ +((emacs-lisp-mode) . ((company-mode . 1) + (eldoc-mode . 1))) diff --git a/dir-locals/python-dir-locals.el b/dir-locals/python-dir-locals.el new file mode 100644 index 0000000..8bd8ac1 --- /dev/null +++ b/dir-locals/python-dir-locals.el @@ -0,0 +1,6 @@ +((python-ts-mode . ((eval . (flycheck-mode 1)) + (eval . (flycheck-select-checker 'python-mypy)) + (eval . (flycheck-add-next-checker 'python-mypy (cons t 'python-flake8))) + (eval . (add-hook 'before-save-hook 'fmt-current-buffer nil t)) + (eval . (setq-local fmt-executable "black" + fmt-args '("-")))))) diff --git a/dir-locals/rust-dir-locals.el b/dir-locals/rust-dir-locals.el new file mode 100644 index 0000000..ef4f8fa --- /dev/null +++ b/dir-locals/rust-dir-locals.el @@ -0,0 +1,4 @@ +((rust-ts-mode . ((eglot-workspace-configuration . (:rust-analyzer (:check (:command "clippy")))) + (fmt-executable . "rustfmt") + (eval . (eglot-ensure)) + (eval . (add-hook 'before-save-hook 'fmt-current-buffer nil t))))) diff --git a/early-init.el b/early-init.el new file mode 100644 index 0000000..da48e00 --- /dev/null +++ b/early-init.el @@ -0,0 +1,2 @@ +(setq native-comp-async-jobs-number (string-to-number (shell-command-to-string "nproc")) + native-compile-target-directory (file-name-concat (getenv "HOME") ".cache/emacs-native-comp")) @@ -0,0 +1,94 @@ +(require 'site-gentoo) +(require 'use-package) +(require 'cl-lib) +(require 'seq) +(require 'server) +(require 'edebug) +(require 'xdg) + +(global-unset-key (kbd "<left>")) +(global-unset-key (kbd "<right>")) +(global-unset-key (kbd "<up>")) +(global-unset-key (kbd "<down>")) +(global-unset-key (kbd "<C-left>")) +(global-unset-key (kbd "<C-right>")) +(global-unset-key (kbd "<C-up>")) +(global-unset-key (kbd "<C-down>")) +(global-set-key (kbd "C-x k") 'kill-this-buffer) +(global-set-key (kbd "C-x C-b") 'ibuffer) + +(setq auth-source-save-behavior nil + auto-save-default nil + change-major-mode-with-file-name nil + custom-buffer-indent 4 + custom-file "/dev/null" + custom-theme-directory (file-name-concat user-emacs-directory "themes/") + debugger 'edebug + display-buffer-base-action '(display-buffer-same-window display-buffer-reuse-window) + initial-buffer-choice (lambda () + (let ((initial-file (file-name-concat + user-emacs-directory + "initial-buffer"))) + (if (file-exists-p initial-file) + (find-file initial-file) + (get-buffer-create "*scratch*")))) + enable-local-variables :safe + gc-cons-threshold (* 8 (expt 1024 2)) + inhibit-splash-screen t + make-backup-files nil + mouse-wheel-progressive-speed nil + tab-width 4 + temporary-file-directory (file-name-concat (or (getenv "TMPDIR") "/tmp") ".emacs") + use-package-always-demand t + use-package-ensure-function 'ignore + user-full-name "John Turner" + user-mail-address "jturner.usa@gmail.com") + +(setq-default create-lockfiles nil + display-fill-column-indicator-column 120 + indent-tabs-mode nil) + +(setq-default mode-line-format '("%*" + " " + (:eval (if buffer-file-name + (abbreviate-file-name buffer-file-name) + (buffer-name))) + " " + "(" mode-name ")" + " " + "(" (:eval (if server-process + (process-name server-process) + "_")) + ")")) + +(load-file (locate-user-emacs-file "lisp/packages.el")) + +(cl-loop with packages-directory = (file-name-concat user-emacs-directory "packages") + for package in (directory-files packages-directory t) + unless (seq-contains-p '("." "..") (file-name-base package)) + do (load-file package)) + +(mkdir temporary-file-directory t) + +(cua-mode 1) +(save-place-mode 1) +(show-paren-mode 1) +(recentf-mode 1) +(savehist-mode 1) +(when (featurep 'pixel-scroll) + (pixel-scroll-mode 1)) + +(menu-bar-mode 0) +(scroll-bar-mode 0) +(tool-bar-mode 0) +(tooltip-mode 0) +(auto-save-mode 0) + +(load-theme 'wombat) +(load-theme 'badger t) + +(set-face-attribute + 'default nil + :family "Noto Sans Mono" + :foundry "GOOG" + :slant 'normal) diff --git a/lisp/best-side-window/best-side-window.el b/lisp/best-side-window/best-side-window.el new file mode 100644 index 0000000..12118fa --- /dev/null +++ b/lisp/best-side-window/best-side-window.el @@ -0,0 +1,52 @@ +;;; best-side-window.el --- -*- lexical-binding: t; -*- + +;; Copyright John Turner (C) 2023 + +;; Author: John Turner + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <https://www.gnu.org/licenses/>. + +(require 'cl-lib) + +(defgroup best-side-window nil "Select ideal side to display buffer") + +(defcustom -default-side 'bottom + "Default side to display buffer if -choose-best-side-functions fails to choose a side") + +(defcustom -choose-best-side-functions nil + "The first non-nil return value will be used as the side to use for display buffer") + +(defun -best-side () + (cl-loop for f in -choose-best-side-functions + for result = (funcall f) + if result + return result)) + +(defun -display-buffer-in-best-side-window (buffer alist) + (let ((side (or (-best-side) -default-side))) + (display-buffer-in-side-window buffer (cons (cons 'side side) alist)))) + +(defun -bottom-when-frame-split () + (if (< (frame-pixel-width) (/ (display-pixel-width) 2)) + 'bottom + -default-side)) + +(add-to-list '-choose-best-side-functions '-bottom-when-frame-split) + +(provide 'best-side-window) +;;; best-side-window.el ends here + +;; Local Variables: +;; read-symbol-shorthands: (("-" . "best-side-window-")) +;; End: diff --git a/lisp/flycheck-nasm/flycheck-nasm.el b/lisp/flycheck-nasm/flycheck-nasm.el new file mode 100644 index 0000000..9ff9bde --- /dev/null +++ b/lisp/flycheck-nasm/flycheck-nasm.el @@ -0,0 +1,37 @@ +;;; flycheck-nasm-mode.el --- flycheck checker for NASM -*- lexical-binding: t; -*- + +;; Copyright (C) 2024 John Turner + +;; Author: John Turner jturner.usa@gmail.com + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <https://www.gnu.org/licenses/>. + + +;;; Code: + +(require 'flycheck) + +(flycheck-def-option-var flycheck-nasm-format "elf64" nasm + "NASM executable format." + :type 'string) + +(flycheck-define-checker nasm + "Flycheck checker for NASM." + :command ("nasm" "-o" "/dev/null" (option "-f" flycheck-nasm-format) source) + :error-patterns ((error line-start (file-name) ":" line ":" space "error:" space (message) line-end) + (warning line-start (file-name) ":" line ":" space "warning:" space (message) line-end)) + :modes (asm-mode nasm-mode)) + +(provide 'flycheck-nasm) +;;; flycheck-nasm-mode.el ends here diff --git a/lisp/fmt/fmt.el b/lisp/fmt/fmt.el new file mode 100644 index 0000000..5ac97e3 --- /dev/null +++ b/lisp/fmt/fmt.el @@ -0,0 +1,80 @@ +;;; fmt.el --- -*- lexical-binding: t; -*- + +;; Copyright (C) 2023 John Turner + +;; Author: John Turner <notroot@gentoo-pc> + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <https://www.gnu.org/licenses/>. + +(defgroup fmt nil + "Format buffers using external programs such as rustfmt.") + +(defcustom fmt-executable nil + "Formatter executable to use for formatting a buffer." + :local t + :type '(string) + :group 'fmt) + +(defcustom fmt-args nil + "Args to use when running fmt-executable." + :local t + :type '(repeat string) + :group 'fmt) + +(defcustom fmt-stdout-buffer "*fmt stdout*" + "Buffer to send fmt-executable stdout to." + :type '(string) + :group 'fmt) + +(defcustom fmt-stderr-buffer "*fmt stderr*" + "Buffer to send fmt-executable stderr to." + :type '(string) + :group 'fmt) + +(defcustom fmt-before-format-hook nil + "Hooks to run before fmt-executable runs." + :type '(hook) + :group 'fmt) + +(define-error 'fmt-failure "fmt-failure") + +(defun fmt-buffer () + (run-hooks 'fmt-before-format-hook) + (let ((exit-status (apply 'call-process-region `(,(point-min) ,(point-max) ,fmt-executable + nil ,(list fmt-stdout-buffer fmt-stderr-buffer) + nil ,@fmt-args)))) + (if (zerop exit-status) + (replace-buffer-contents fmt-stdout-buffer) + (signal 'fmt-failure nil)))) + +(defun fmt-current-buffer () + (interactive) + (condition-case _ (fmt-buffer) + ('fmt-failure (message "%s failed, see %s for more details" fmt-executable fmt-stderr-buffer)))) + +;; hooks + +(defun fmt-erase-stdout-buffer () + (with-current-buffer (get-buffer-create fmt-stdout-buffer) + (erase-buffer))) + +(defun fmt-erase-stderr-buffer () + (with-current-buffer (get-buffer-create fmt-stderr-buffer) + (erase-buffer))) + +(add-hook 'fmt-before-format-hook 'fmt-erase-stdout-buffer) +(add-hook 'fmt-before-format-hook 'fmt-erase-stderr-buffer) + +(provide 'fmt) +;;; fmt.el ends here diff --git a/lisp/license-boilerplate/license-boilerplate.el b/lisp/license-boilerplate/license-boilerplate.el new file mode 100644 index 0000000..008d8ad --- /dev/null +++ b/lisp/license-boilerplate/license-boilerplate.el @@ -0,0 +1,32 @@ +(defgroup license-boilerplate nil + "A small script for inserting license boilerplate text into source files.") + +(defcustom license-boilerplate-copyright-author user-full-name + "The value to insert into the Copyright line." + :group 'license-boilerplate + :type 'string) + +(defun license-boilerplate-gpl-3 () + (interactive) + (save-excursion + (let ((saved-point (point))) + (insert (format "Copyright (C) %s" (format-time-string "%Y"))) + (when-let ((author license-boilerplate-copyright-author)) + (insert (format " %s" author))) + (insert "\n") + (insert " +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <https://www.gnu.org/licenses/>.") + (comment-region saved-point (point))))) + +(provide 'license-boilerplate) diff --git a/lisp/man-completion/man-completion.el b/lisp/man-completion/man-completion.el new file mode 100644 index 0000000..31c5bf7 --- /dev/null +++ b/lisp/man-completion/man-completion.el @@ -0,0 +1,48 @@ +(defun man-completion-is-compression-suffix (suffix) + (string-match-p "\\.bz2$\\|gzip$\\|zst$" suffix)) + +(defun man-completion-get-man-paths () + (let* ((manpath (getenv "MANPATH")) + (manpaths (split-string manpath ":" t)) + (manpaths (mapcar (lambda (path) + (file-expand-wildcards (file-name-concat path "man*"))) + manpaths)) + (manpaths (flatten-list manpaths)) + (manpaths (seq-filter 'file-exists-p manpaths))) + manpaths)) + +(defun man-completion-find-pages () + (let* ((files (mapcar (lambda (p) + (directory-files-recursively p ".+" nil)) + (man-completion-get-man-paths))) + (files (flatten-list files)) + (files (mapcar 'file-name-base files)) + (files (mapcar (lambda (f) + (if (man-completion-is-compression-suffix f) + (file-name-sans-extension f) + f)) + files))) + files)) + +(defun man-completion-locate-page (page) + (with-temp-buffer + (let ((exit-code (call-process "man" nil (current-buffer) nil "--where" page))) + (when exit-code + (let* ((output (buffer-string)) + (trimmed (string-trim-right output "\n"))) + trimmed))))) + +(defun man-completion (orig &rest args) + (interactive) + (let* ((arg (if args + (nth 0 args) + (completing-read "Select page: " + (man-completion-find-pages) + nil + t))) + (page (man-completion-locate-page arg))) + (funcall orig page))) + +(advice-add 'man :around 'man-completion) + +(provide 'man-completion) diff --git a/lisp/packages.el b/lisp/packages.el new file mode 100644 index 0000000..3a32b2b --- /dev/null +++ b/lisp/packages.el @@ -0,0 +1,41 @@ +;;; packages.el --- -*- lexical-binding: t; -*- + +;; Copyright (C) 2023 + +;; Author: John Turner + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <https://www.gnu.org/licenses/>. + +(use-package man-completion + :load-path (lambda () (locate-user-emacs-file "lisp/man-completion"))) + +(use-package reload-library + :load-path (lambda () (locate-user-emacs-file "lisp/reload-library"))) + +(use-package toggle-local-vars + :load-path (lambda () (locate-user-emacs-file "lisp/toggle-local-vars"))) + +(use-package license-boilerplate + :load-path (lambda () (locate-user-emacs-file "lisp/license-boilerplate")) + :custom + (license-boilerplate-copyright-author "John Turner")) + +(use-package best-side-window + :load-path (lambda () (locate-user-emacs-file "lisp/best-side-window"))) + +(use-package fmt + :load-path (lambda () (locate-user-emacs-file "lisp/fmt"))) + +(use-package flycheck-nasm + :load-path (lambda () (locate-user-emacs-file "lisp/flycheck-nasm"))) diff --git a/lisp/reload-library/reload-library.el b/lisp/reload-library/reload-library.el new file mode 100644 index 0000000..fde75e4 --- /dev/null +++ b/lisp/reload-library/reload-library.el @@ -0,0 +1,37 @@ +;;; reload-library.el --- -*- lexical-binding: t; -*- + +;; Copyright (C) 2023 + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <https://www.gnu.org/licenses/>. + +(require 'loadhist) + +(defun reload-library () + (interactive) + (let* ((library (read-string + "Library to reload: " + (buffer-file-name))) + (feature (intern (file-name-base library))) + (loaded (featurep feature)) + (dependents (file-dependents library))) + (when (and loaded (or (not dependents) + (yes-or-no-p (format "%s is required by another library, force reload?" feature)))) + (unload-feature feature t)) + (load-library library))) + + + +(provide 'reload-library) +;;; reload-library.el ends here + diff --git a/lisp/toggle-local-vars/toggle-local-vars.el b/lisp/toggle-local-vars/toggle-local-vars.el new file mode 100644 index 0000000..9d20454 --- /dev/null +++ b/lisp/toggle-local-vars/toggle-local-vars.el @@ -0,0 +1,22 @@ +(defun toggle-local-vars-on () + (interactive) + (setq enable-local-variables t) + (message "enabled local variables")) + +(defun toggle-local-vars-off () + (interactive) + (setq enable-local-variables nil) + (message "disabled local variables")) + +(defun toggle-remote-local-vars-on () + (interactive) + (setq enable-remote-dir-locals t + enable-local-variables t) + (message "enabled local variables")) + +(defun toggle-remote-local-vars-off () + (interactive) + (setq enable-remote-dir-locals nil) + (message "disabled local variables")) + +(provide 'toggle-local-vars) diff --git a/LICENSE b/lisp/wgetpaste/LICENSE index f288702..f288702 100644 --- a/LICENSE +++ b/lisp/wgetpaste/LICENSE diff --git a/README.org b/lisp/wgetpaste/README.org index 7c84957..7c84957 100644 --- a/README.org +++ b/lisp/wgetpaste/README.org diff --git a/wgetpaste.el b/lisp/wgetpaste/wgetpaste.el index 64f8350..64f8350 100644 --- a/wgetpaste.el +++ b/lisp/wgetpaste/wgetpaste.el diff --git a/packages/company.el b/packages/company.el new file mode 100644 index 0000000..59612c4 --- /dev/null +++ b/packages/company.el @@ -0,0 +1,4 @@ +(use-package company + :custom + (company-minimum-prefix-length 2) + (company-idle-delay 0)) diff --git a/packages/conf-mode.el b/packages/conf-mode.el new file mode 100644 index 0000000..304f72a --- /dev/null +++ b/packages/conf-mode.el @@ -0,0 +1,9 @@ +(use-package conf-mode + :hook + (prog-mode . visual-line-mode) + (prog-mode . display-line-numbers-mode) + (prog-mode . electric-pair-mode) + (prog-mode . electric-indent-mode) + (prog-mode . (lambda () + (when (featurep 'highlight-indentation) + (highlight-indentation-mode 1))))) diff --git a/packages/dired.el b/packages/dired.el new file mode 100644 index 0000000..02f6d72 --- /dev/null +++ b/packages/dired.el @@ -0,0 +1,4 @@ +(use-package dired + :custom + (dired-listing-switches "-ahl --group-directories-first") + (dired-kill-when-opening-new-dired-buffer t)) diff --git a/packages/ebuild-mode.el b/packages/ebuild-mode.el new file mode 100644 index 0000000..f3b3448 --- /dev/null +++ b/packages/ebuild-mode.el @@ -0,0 +1,11 @@ +(use-package ebuild-mode + :if (locate-library "ebuild-mode") + :mode (rx (literal ".") (or "ebuild" "eclass") eos) + :custom + (ebuild-mode-full-name "John Turner") + (ebuild-mode-mail-address "jturner.usa@gmail.com") + (ebuild-mode-portage-tmpdir (file-name-concat (getenv "HOME") "tmp" "ebuild")) + (ebuild-mode-portdir "/var/db/repos/gentoo") + (ebuild-mode-xml-indent-tabs t) + (ebuild-mode-process-environment (list (format "ROOT=%s" ebuild-mode-portage-tmpdir) + (format "PORTAGE_TMPDIR=%s" ebuild-mode-portage-tmpdir)))) diff --git a/packages/ediff.el b/packages/ediff.el new file mode 100644 index 0000000..88f1eb1 --- /dev/null +++ b/packages/ediff.el @@ -0,0 +1,4 @@ +(use-package ediff + :custom + (ediff-split-window-function 'split-window-horizontally) + (ediff-window-setup-function 'ediff-setup-windows-plain)) diff --git a/packages/eglot.el b/packages/eglot.el new file mode 100644 index 0000000..dc72df2 --- /dev/null +++ b/packages/eglot.el @@ -0,0 +1,3 @@ +(use-package eglot + :if (locate-library "eglot") + :custom (eglot-autoshutdown t)) diff --git a/packages/flycheck.el b/packages/flycheck.el new file mode 100644 index 0000000..2ea1e66 --- /dev/null +++ b/packages/flycheck.el @@ -0,0 +1,9 @@ +(use-package flycheck + :hook + (flycheck-error-list-mode . visual-line-mode) + :custom + (flycheck-python-mypy-cache-dir (file-name-concat (getenv "HOME") ".cache" "mypy")) + :config + (when (require 'best-side-window nil t) + (add-to-list 'display-buffer-alist '((major-mode . flycheck-error-list-mode) + best-side-window-display-buffer-in-best-side-window)))) diff --git a/packages/flymake.el b/packages/flymake.el new file mode 100644 index 0000000..b39be0f --- /dev/null +++ b/packages/flymake.el @@ -0,0 +1,8 @@ +(use-package flymake + :hook + (flymake-diagnostics-buffer-mode . visual-line-mode) + :config + (when (require 'best-side-window nil t) + (add-to-list 'display-buffer-alist '((major-mode . flymake-diagnostics-buffer-mode) + best-side-window-display-buffer-in-best-side-window)))) + diff --git a/packages/highlight-indentation.el b/packages/highlight-indentation.el new file mode 100644 index 0000000..499f6e9 --- /dev/null +++ b/packages/highlight-indentation.el @@ -0,0 +1,2 @@ +(use-package highlight-indentation + :if (locate-library "highlight-indentation")) diff --git a/packages/ibuffer.el b/packages/ibuffer.el new file mode 100644 index 0000000..d5d4cd9 --- /dev/null +++ b/packages/ibuffer.el @@ -0,0 +1,10 @@ +(use-package ibuffer + :custom + (ibuffer-display-summary nil) + (ibuffer-expert t) + (ibuffer-formats '((mark modified read-only locked + " " (name 32 32 :left :elide) + " " (size 5 5 :right) + " " (mode 16 16 :left :elide) + " " filename-and-process) + (mark " " (name 16 -1) " " filename)))) diff --git a/packages/ielm.el b/packages/ielm.el new file mode 100644 index 0000000..fce4ddd --- /dev/null +++ b/packages/ielm.el @@ -0,0 +1,3 @@ +(use-package ielm + :hook + (ielm-mode . visual-line-mode)) diff --git a/packages/image-dired.el b/packages/image-dired.el new file mode 100644 index 0000000..c81e7a3 --- /dev/null +++ b/packages/image-dired.el @@ -0,0 +1,3 @@ +(use-package image-dired + :custom + (image-dired-dir (file-name-concat (xdg-cache-home) "image-dired"))) diff --git a/packages/magit.el b/packages/magit.el new file mode 100644 index 0000000..1b052ae --- /dev/null +++ b/packages/magit.el @@ -0,0 +1,3 @@ +(use-package magit + :commands magit + :custom (magit-inhibit-libgit t)) diff --git a/packages/man.el b/packages/man.el new file mode 100644 index 0000000..68c2766 --- /dev/null +++ b/packages/man.el @@ -0,0 +1,3 @@ +(use-package man + :custom + (Man-notify-method 'pushy)) diff --git a/packages/nasm-mode.el b/packages/nasm-mode.el new file mode 100644 index 0000000..d30f5ed --- /dev/null +++ b/packages/nasm-mode.el @@ -0,0 +1,3 @@ +(use-package nasm-mode + :config + (advice-add 'nasm-comment :around (lambda (&rest _) (insert ";")))) diff --git a/packages/pixel-scroll.el b/packages/pixel-scroll.el new file mode 100644 index 0000000..a682571 --- /dev/null +++ b/packages/pixel-scroll.el @@ -0,0 +1,8 @@ +(use-package pixel-scroll + :if (and (locate-library "pixel-scroll") + (display-graphic-p)) + :custom + (pixel-dead-time 0) + (pixel-wait 0) + (pixel-resolution-fine-flag 10)) + diff --git a/packages/prog-mode.el b/packages/prog-mode.el new file mode 100644 index 0000000..3da5cfd --- /dev/null +++ b/packages/prog-mode.el @@ -0,0 +1,9 @@ +(use-package prog-mode + :hook + (prog-mode . visual-line-mode) + (prog-mode . display-line-numbers-mode) + (prog-mode . electric-pair-mode) + (prog-mode . electric-indent-mode) + (prog-mode . (lambda () + (when (featurep 'highlight-indentation) + (highlight-indentation-mode 1))))) diff --git a/packages/recentf.el b/packages/recentf.el new file mode 100644 index 0000000..d548149 --- /dev/null +++ b/packages/recentf.el @@ -0,0 +1,3 @@ +(use-package recentf + :custom + (recentf-save-file (file-name-concat (xdg-state-home) "emacs/recentf"))) diff --git a/packages/savehist.el b/packages/savehist.el new file mode 100644 index 0000000..71a032e --- /dev/null +++ b/packages/savehist.el @@ -0,0 +1,4 @@ +(use-package savehist + :custom + (savehist-file (file-name-concat (xdg-state-home) "emacs/savehist")) + (savehist-save-minibuffer-history t)) diff --git a/packages/saveplace.el b/packages/saveplace.el new file mode 100644 index 0000000..cfe0a21 --- /dev/null +++ b/packages/saveplace.el @@ -0,0 +1,4 @@ +(use-package saveplace + :custom + (save-place-file (file-name-concat (xdg-state-home) "saveplace/places")) + (save-place-limit nil)) diff --git a/packages/sh-script.el b/packages/sh-script.el new file mode 100644 index 0000000..9ac8cca --- /dev/null +++ b/packages/sh-script.el @@ -0,0 +1,3 @@ +(use-package sh-script + :custom + (sh-indent-statement-after-and nil)) diff --git a/packages/text-mode.el b/packages/text-mode.el new file mode 100644 index 0000000..b281d95 --- /dev/null +++ b/packages/text-mode.el @@ -0,0 +1,4 @@ +(use-package text-mode + :hook + (text-mode . display-line-numbers-mode) + (text-mode . visual-line-mode)) diff --git a/packages/tramp.el b/packages/tramp.el new file mode 100644 index 0000000..5af23df --- /dev/null +++ b/packages/tramp.el @@ -0,0 +1,8 @@ +(use-package tramp + :custom + (tramp-password-cache nil) + (tramp-persistency-file-name (file-name-concat (xdg-state-home) "emacs/tramp/persistency-file")) + :config + (add-to-list 'tramp-connection-properties + (list (regexp-quote (format "/sudo:root@%s:" system-name)) + "session-timeout" (* 60 60)))) diff --git a/packages/transient.el b/packages/transient.el new file mode 100644 index 0000000..7e6690a --- /dev/null +++ b/packages/transient.el @@ -0,0 +1,5 @@ +(use-package transient + :custom + (transient-levels-file (file-name-concat (xdg-state-home) "emacs/transient/levels.el")) + (transient-values-file (file-name-concat (xdg-state-home) "emacs/transient/values.el")) + (transient-history-file (file-name-concat (xdg-state-home) "emacs/transient/history.el"))) diff --git a/packages/treesit.el b/packages/treesit.el new file mode 100644 index 0000000..0ba4a14 --- /dev/null +++ b/packages/treesit.el @@ -0,0 +1,36 @@ +(use-package treesit + :if (ignore-errors (treesit-available-p)) + :config + (let ((setup-treesit-mode (lambda (parser treesit-mode modes &optional interpreters) + (if (not (treesit-language-available-p parser)) + (message "treesit language parser not available for %s" + (symbol-name language)) + (seq-each (lambda (mode) + (add-to-list 'auto-mode-alist + (cons (rx (literal ".") + (literal mode) eos) + treesit-mode))) + modes) + (seq-each (lambda (interpreter) + (add-to-list 'interpreter-mode-alist + (cons interpreter treesit-mode))) + interpreters))))) + (funcall setup-treesit-mode 'python 'python-ts-mode '("py") '("python" "python3")) + (funcall setup-treesit-mode 'bash 'bash-ts-mode '("sh") '("bash" "sh" "openrc-run")) + (funcall setup-treesit-mode 'rust 'rust-ts-mode '("rs")) + (funcall setup-treesit-mode 'cpp 'c++-ts-mode '("cpp" "cxx" "c++" "hpp" "hxx" "h++")))) + +(use-package rust-ts-mode + :requires treesit + :hook + (rust-ts-mode . (lambda () + (when (require 'rust-mode nil t) + (add-hook 'before-save-hook 'rust-before-save-method nil t) + (add-hook 'after-save-hook 'rust-after-save-method nil t) + (use-local-map (make-composed-keymap (list rust-ts-mode-map rust-mode-map))))))) + +(use-package c-ts-mode + :requires treesit + :custom + (c-ts-mode-indent-style 'linux) + (c-ts-mode-indent-offset 2)) diff --git a/themes/badger-theme.el b/themes/badger-theme.el new file mode 100644 index 0000000..41102ed --- /dev/null +++ b/themes/badger-theme.el @@ -0,0 +1,12 @@ +(require-theme 'wombat-theme) + +(deftheme badger) + +(custom-theme-set-faces + 'badger + `(fringe ((t (:foreground ,(face-foreground 'default) :background ,(face-background 'default))))) + '(elisp-shorthand-font-lock-face ((t (:foreground "dark cyan")))) + '(line-number-current-line ((t (:background "gray")))) + '(highlight-indentation-face ((t (:background "gray20"))))) + +(provide-theme 'badger) |