-(setq auth-source-save-behavior nil
- auto-save-default nil
- change-major-mode-with-file-name nil
- custom-buffer-indent 4
- custom-file (file-name-concat user-emacs-directory "custom.el")
- custom-theme-directory (file-name-concat user-emacs-directory "themes/")
- debugger 'edebug
- 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
- inferior-lisp-program "sbcl"
- inhibit-splash-screen t
- make-backup-files nil
- scheme-program-name "guile"
- tab-width 4
- temporary-file-directory (file-name-concat (getenv "HOME") "tmp" ".emacs"))
-
-(setq-default display-fill-column-indicator-column 120
- indent-tabs-mode nil)
-
-(let* ((init-modules-wildcard
- (file-name-concat user-emacs-directory "init" "*"))
- (lisp-modules-wildcard
- (file-name-concat user-emacs-directory "lisp" "*"))
- (init-modules-files
- (file-expand-wildcards init-modules-wildcard t))
- (lisp-modules-files
- (file-expand-wildcards lisp-modules-wildcard t))
- (files
- (append init-modules-files lisp-modules-files))
- (directories
- (seq-filter 'file-directory-p files)))
- (mapc (lambda (directory)
- (add-to-list 'load-path directory))
- directories))
-
-(mkdir temporary-file-directory t)
-
-(require 'init-garbage-collection)
-
-(when (and (>= emacs-major-version 29) (native-comp-available-p))
- (require 'init-native-comp))
+(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"))
-(defmacro require? (feature)
- `(require ,feature nil t))
+(require 'use-package)
+(require 'cl-lib)
+(require 'seq)
+(require 'server)
+(require 'edebug)
+
+(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 (file-name-concat user-emacs-directory "custom.el")
+ 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
+ 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)
+
+(setq-default 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)
+ "_"))
+ ")"))
-(unless (when-let ((e (getenv "NO_SITE_GENTOO")))
- (string= e "1"))
- (require? 'site-gentoo))
-
-(require? 'magit)
-
-(require 'init-text-mode)
-(require 'init-conf-mode)
-(require 'init-prog-mode)
-(require 'init-compile)
-(require 'init-dired)
-(require 'init-display-buffer)
-(require 'init-ediff)
-(require 'init-eldoc)
-(require 'init-electric)
-(require 'init-flymake)
-(require 'init-ibuffer)
-(require 'init-ielm)
-(require 'init-keys)
-(require 'init-man)
-(require 'init-mode-line)
-(require 'init-package)
-(require 'init-project)
-(require 'init-recentf)
-(require 'init-savehist)
-(require 'init-tramp)
-
-(when (require? 'company)
- (require 'init-company))
-
-(when (require? 'flycheck)
- (require 'init-flycheck))
-
-(when (require? 'lsp-mode)
- (require 'init-lsp-mode))
-
-(when (require? 'eglot)
- (require 'init-eglot))
-
-(when (require? 'pixel-scroll)
- (require 'init-pixel-scroll))
-
-(when (and (require? 'treesit) (treesit-available-p))
- (require 'init-treesit))
-
-(require 'man-completion)
-
-(require 'license-boilerplate)
+(when (file-exists-p custom-file)
+ (load-file custom-file))
-(require 'toggle-local-vars)
+(load-file (locate-user-emacs-file "lisp/packages.el"))
-(require 'reload-library)
+(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))
-(when (file-exists-p custom-file)
- (load custom-file))
+(mkdir temporary-file-directory t)
(cua-mode 1)
(save-place-mode 1)
(show-paren-mode 1)
+(recentf-mode 1)
+(savehist-mode 1)
+(when (and (featurep 'pixel-scroll) (display-graphic-p))
+ (pixel-scroll-mode 1))
+
(menu-bar-mode 0)
(scroll-bar-mode 0)
(tool-bar-mode 0)
+++ /dev/null
-(require 'company)
-
-(setq company-idle-delay 0
- company-clang-executable "/usr/lib/llvm/11/bin/clang"
- company-clang-insert-arguments nil
- company-minimum-prefix-length 1)
-
-(provide 'init-company)
+++ /dev/null
-(add-hook 'compilation-mode-hook 'visual-line-mode)
-
-(provide 'init-compile)
+++ /dev/null
-(setq conf-mode-hook (copy-tree text-mode-hook))
+++ /dev/null
-(require 'init-text-mode)
-
-(load "init-conf-mode-hooks")
-
-(provide 'init-conf-mode)
+++ /dev/null
-(setq dired-listing-switches "-alh"
- dired-kill-when-opening-new-dired-buffer t)
-
-(provide 'init-dired)
+++ /dev/null
-(defun init-display-buffer-frame-wide-p ()
- (> (frame-pixel-width) (/ (x-display-pixel-width) 2)))
-
-(defun init-display-buffer-best-side (buffer alist)
- (let* ((side (funcall (alist-get 'which-side alist)))
- (alist (append (cdr alist) (list (cons 'side side)))))
- (display-buffer-in-side-window buffer alist)))
+++ /dev/null
-(setq display-buffer-base-action '(display-buffer-same-window display-buffer-reuse-window))
-
-(load "init-display-buffer-best-side")
-
-(provide 'init-display-buffer)
+++ /dev/null
-(setq ediff-split-window-function 'split-window-horizontally
- ediff-window-setup-function 'ediff-setup-windows-plain)
-
-(provide 'init-ediff)
+++ /dev/null
-(setq eglot-autoshutdown t
- eglot-events-buffer-size 0)
-
-(provide 'init-eglot)
+++ /dev/null
-(setq eldoc-idle-delay 0
- eldoc-echo-area-use-multiline-p 5)
-
-(provide 'init-eldoc)
+++ /dev/null
-(require 'electric)
-(require 'elec-pair)
-
-(add-to-list 'electric-pair-pairs '("?(" . "?)"))
-(add-to-list 'electric-pair-pairs '("?{" . "?}"))
-
-(provide 'init-electric)
+++ /dev/null
-(defun init-flycheck-rust-cargo-has-command-p (command)
- (let* ((commands (process-lines "cargo" "--list"))
- (trimmed (-map (lambda (row) (-slice row 4 (string-search " " 4))) commands)))
- (seq-contains-p (-rest trimmed) command)))
-
-(advice-add 'flycheck-rust-cargo-has-command-p
- :override 'init-flycheck-rust-cargo-has-command-p)
+++ /dev/null
-(require 'flycheck)
-
-(load "init-flycheck-cargo-has-command-p-fix")
-
-(add-hook 'flycheck-error-list-mode-hook (lambda () (visual-line-mode 1)))
-
-(add-to-list 'display-buffer-alist '("\\*Flycheck errors.*"
- (init-display-buffer-best-side)
- (which-side . (lambda ()
- (if (init-display-buffer-frame-wide-p)
- 'right
- 'bottom)))))
-
-
-(provide 'init-flycheck)
+++ /dev/null
-(add-hook 'flymake-diagnostics-buffer-mode-hook (lambda ()
- (visual-line-mode 1)))
+++ /dev/null
-(require 'flymake)
-
-(load "init-flymake-hooks")
-
-(add-to-list 'display-buffer-alist '("\\*Flymake diagnostics.*"
- (init-display-buffer-best-side)
- (which-side . (lambda ()
- (if (init-display-buffer-frame-wide-p)
- 'right
- 'bottom)))))
-
-(provide 'init-flymake)
+++ /dev/null
-(setq gc-cons-threshold (* (expt 1024 2) 25))
-
-(provide 'init-garbage-collection)
+++ /dev/null
-(setq ibuffer-saved-filter-groups
- '(("default"
- ("Misc" (and (name . "^\\*.*$")
- (not (mode . Man-mode))))
- ("Dired" (mode . dired-mode))
- ("Man" (mode . Man-mode)))))
-
-(add-hook 'ibuffer-mode-hook (lambda () (ibuffer-switch-to-saved-filter-groups "default")))
-
-(provide 'init-ibuffer-filter-groups)
+++ /dev/null
-(define-ibuffer-column size-human-readable
- (:name "Size" :inline t)
- (let ((size (buffer-size)))
- (cond
- ((> size (expt 1000 4))
- (error "buffer is over 1TB large!"))
- ((> size (expt 1000 3))
- (format "%sG" (/ size (expt 1000 3))))
- ((> size (expt 1000 2))
- (format "%sM" (/ size (expt 1000 2))))
- ((> size 1000)
- (format "%sK" (/ size 1000)))
- (t
- (format "%sB" size)))))
-
-(provide 'init-ibuffer-human-readable-size)
+++ /dev/null
-(defvar init-ibuffer-never-show '("^\\*Messages\\*$"
- "^\\*Completions\\*$"
- "^\\*Async-native-compile-log\\*$"
- "^\\*Native-compile-Log\\*$"
- "^\\*Warnings\\*$"))
-
-(mapc (lambda (p)
- (add-to-list 'ibuffer-never-show-predicates p))
- init-ibuffer-never-show)
-
-(provide 'init-ibuffer-never-show)
+++ /dev/null
-(require 'ibuffer)
-(require 'ibuf-ext)
-(require 'init-ibuffer-human-readable-size)
-(require 'init-ibuffer-never-show)
-
-(setq ibuffer-display-summary nil
- ibuffer-expert t)
-
-(setq ibuffer-formats
- '((mark modified read-only locked " "
- (name 32 32 :left :elide)
- " "
- (size-human-readable 5 5 :right)
- " "
- (mode 16 16 :left :elide)
- " " filename-and-process)
- (mark " "
- (name 16 -1)
- " " filename)))
-
-(provide 'init-ibuffer)
+++ /dev/null
-(add-hook 'ielm-mode-hook 'visual-line-mode)
-
-(provide 'init-ielm)
+++ /dev/null
-(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)
-
-(provide 'init-keys)
+++ /dev/null
-(setq lsp-server-install-dir "/somewhere/that/doesnt/exist")
-
-(defun init-lsp-mode-disable-install-server-error ()
- (error "lsp-mode server install features have been disabled"))
-
-(advice-add 'lsp-install-server
- :around
- 'init-lsp-mode-disable-install-server-error)
-
-(advice-add 'lsp-update-server
- :around
- 'init-lsp-mode-disable-install-server-error)
-
-(advice-add 'lsp-update-servers
- :around
- 'init-lsp-mode-disable-install-server-error)
-
-(advice-add 'lsp-download-install
- :around
- 'init-lsp-mode-disable-install-server-error)
-
-(advice-add 'lsp-download-path
- :around
- 'init-lsp-mode-disable-install-server-error)
-
-(advice-add 'lsp-async-start-process
- :around
- 'init-lsp-mode-disable-install-server-error)
-
-(advice-add 'lsp--download-status
- :around
- 'init-lsp-mode-disable-install-server-error)
-
-(advice-add 'lsp--install-server-internal
- :around
- 'init-lsp-mode-disable-install-server-error)
-
-(advice-add 'lsp--npm-dependency-install
- :around
- 'init-lsp-mode-disable-install-server-error)
+++ /dev/null
-(require 'lsp-mode)
-(require 'flycheck)
-
-(setq lsp-enable-dap-auto-configure nil
- lsp-enable-folding nil
- lsp-enable-indentation t
- lsp-enable-on-type-formatting nil
- lsp-completion-enable nil
- lsp-enable-snippet nil
- lsp-modeline-code-actions-enable nil
- lsp-lens-enable nil
- lsp-signature-auto-activate nil
- lsp-eldoc-render-all t
- lsp-rls-server-command nil
- lsp-enable-suggest-server-download nil)
-
-(load "init-lsp-mode-disable-install-server")
-
-(provide 'init-lsp-mode)
+++ /dev/null
-(setq Man-notify-method 'pushy)
-
-(provide 'init-man)
+++ /dev/null
-(setq-default mode-line-format '("%*"
- " "
- (:eval (if buffer-file-name
- (abbreviate-file-name buffer-file-name)
- (buffer-name)))
- " "
- "(" mode-name ")"
- " "
- "[" (:eval (abbreviate-file-name default-directory)) "]"
- " "
- "(" (:eval (if server-process
- (process-name server-process)
- "none"))
- ")"))
-
-(provide 'init-mode-line)
+++ /dev/null
-(setq native-comp-async-jobs-number (string-to-number (shell-command-to-string "nproc"))
- native-compile-target-directory temporary-file-directory)
-
-(provide 'init-native-comp)
+++ /dev/null
-(setq package-archives nil
- package-check-signature 'all)
-
-(provide 'init-package)
+++ /dev/null
-(require 'pixel-scroll)
-
-(setq mouse-wheel-progressive-speed nil
- pixel-dead-time 0
- pixel-wait 0
- pixel-resolution-fine-flag 10)
-
-(pixel-scroll-mode 1)
-
-(provide 'init-pixel-scroll)
+++ /dev/null
-(setq prog-mode-hook (copy-tree text-mode-hook))
+++ /dev/null
-(require 'init-text-mode)
-
-(load "init-prog-mode-hooks")
-
-(provide 'init-prog-mode)
+++ /dev/null
-(add-to-list 'project-find-functions (lambda (directory)
- (let ((rust-project (locate-dominating-file directory "Cargo.toml")))
- (when rust-project
- (cons 'transient rust-project)))))
+++ /dev/null
-(load "init-project-find-rust-projects")
-
-(provide 'init-project)
+++ /dev/null
-(setq recentf-max-menu-items 25
- recentf-max-saved-items 25)
-
-(recentf-mode 1)
-
-(provide 'init-recentf)
+++ /dev/null
-(require 'savehist)
-
-(defvar init-savehist-history-size 9999999999)
-
-(setq savehist-file (expand-file-name "savehist" user-emacs-directory)
- savehist-save-minibuffer-history t)
-
-(add-to-list 'savehist-additional-variables `(command-history . ,init-savehist-history-size))
-
-(unless (file-exists-p savehist-file)
- (make-empty-file savehist-file))
-
-(savehist-mode 1)
-
-(provide 'init-savehist)
+++ /dev/null
-(add-hook 'text-mode-hook (lambda ()
- (display-line-numbers-mode 1)
- (visual-line-mode 1)
- (display-fill-column-indicator-mode 1)
- (electric-pair-mode 1)
- (electric-indent-mode 1)
- (setq-local display-fill-column-indicator-column 120)
- (when (require 'highlight-indentation nil t)
- (highlight-indentation-mode 1))))
+++ /dev/null
-(load "init-text-mode-hooks")
-
-(provide 'init-text-mode)
+++ /dev/null
-(add-to-list 'tramp-connection-properties (list (regexp-quote (format "/sudo:root@%s:" system-name))
- "session-timeout" (* 60 20)))
+++ /dev/null
-(defun sudo-edit ()
- (interactive)
- (find-file (format "/sudo:root@%s:%s" system-name (read-file-name "Edit as root: "))))
+++ /dev/null
-(require 'tramp)
-
-(setq password-cache nil
- password-cache-expiry 0
- tramp-persistency-file-name nil)
-
-(load "init-tramp-connection-properties")
-(load "init-tramp-sudo-hang-fix")
-
-(provide 'init-tramp)
+++ /dev/null
-;; -*- lexical-binding: t; -*-
-
-;; This script is a quick workaround for setting up treesitter modes.
-;; Hopefully this won't be needed for long but it works for now!
-;;
-;; This just runs through the list of modes below, checks if the
-;; required treesitter parsers are installed, and if so,
-;; sets up auto-mode-alist and interpreter-mode-alist
-;; to open the respective source files with the treesitter
-;; mode for that language.
-;;
-;; To use, you should just add the modes and other info to the list
-;; below, and then "require" this file in your init.
-;; The messages that get generated by this script may be burried
-;; by other startup messages, so it may not appear to have done
-;; anything!
-;;
-;; To test if it works, visit a file such as "x.py", then run
-;; "M-x describe-mode". There should be some info about
-;; the current major mode that looks like this:
-;;
-;; "The major mode is Python mode defined in python.el:
-;; Major mode for editing Python files, using tree-sitter library."
-
-(defvar -quiet? nil
- "Suppress messages when setting up treesitter modes.")
-
-(defvar -modes `((python-ts-mode
- ((:parsers . python)
- (:file-ext . ,(rx ".py"))
- (:interpreters . ("python" "python3"))))
- (rust-ts-mode
- ((:parsers . rust)
- (:file-ext . ,(rx ".rs"))))
- (bash-ts-mode
- ((:parsers . bash)
- (:file-ext . ,(rx ".sh"))
- (:interpreters . ("bash" "sh" "openrc-run"))))
- (c-ts-mode
- ((:parsers . c)
- (:file-ext . ,(rx ".c"))))
- (c++-ts-mode
- ((:parsers . cpp)
- (:file-ext . ,(rx (or ".c++" ".cpp" ".cxx"
- ".h++" ".hpp" ".hxx")))))
- (c-or-c++-ts-mode
- ((:parsers . (c c++))
- (:file-ext . ,(rx ".h"))))
- (toml-ts-mode
- ((:parsers . toml)
- (:file-ext . ,(rx ".toml")))))
- "Treesitter modes and some information required to set them up.
-
-Parsers are the treesitter packages that need to be installed to
-use the associated mode. python-ts-mode requires the python treesitter
-parser package to be installed for example.
-
-File extension is for example .py for python scripts. Some
-modes like c++-ts-mode are associated with a few
-extensions, and c-or-c++-mode is associated with .h
-because the extension is ambiguous.
-
-Interpreters are used to associate certain shebangs with the treesitter
-mode. Files that start with '#!/usr/bin/env python' for example will
-be associated with python-ts-mode if 'python' is included in the
-interpreters list.")
-
-(defun -ready-quiet? (parser)
- (treesit-ready-p parser t))
-
-(cl-defun -setup-mode? (&key ts-mode
- required-parsers
- file-extensions
- interpreters)
- (when (seq-every-p '-ready-quiet? (ensure-list required-parsers))
- (add-to-list 'auto-mode-alist (cons file-extensions ts-mode))
- (when interpreters
- (seq-each (lambda (interpreter)
- (add-to-list 'interpreter-mode-alist (cons interpreter ts-mode)))
- (ensure-list interpreters)))
- t))
-
-(seq-each (lambda (mode)
- (when (and (-setup-mode?
- :ts-mode (car mode)
- :required-parsers (alist-get :parsers (cadr mode))
- :file-extensions (alist-get :file-ext (cadr mode))
- :interpreters (alist-get :interpreters (cadr mode)))
- (not -quiet?))
- (message "Setup treesitter mode %s" (car mode))))
- -modes)
-
-(provide 'init-treesit-setup-available-languages)
-
-;; Local Variables:
-;; read-symbol-shorthands: (("-" . "init-treesit-setup-available-languages-"))
-;; End:
+++ /dev/null
-(require 'init-treesit-setup-available-languages)
-
-(provide 'init-treesit)
--- /dev/null
+;;; 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")))