diff options
Diffstat (limited to 'config')
40 files changed, 398 insertions, 0 deletions
diff --git a/config/company/config-company.el b/config/company/config-company.el new file mode 100644 index 0000000..e98e2a2 --- /dev/null +++ b/config/company/config-company.el @@ -0,0 +1,8 @@ +(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 'config-company) diff --git a/config/conf-mode/config-conf-mode-hooks.el b/config/conf-mode/config-conf-mode-hooks.el new file mode 100644 index 0000000..c662e45 --- /dev/null +++ b/config/conf-mode/config-conf-mode-hooks.el @@ -0,0 +1 @@ +(setq conf-mode-hook (copy-tree text-mode-hook)) diff --git a/config/conf-mode/config-conf-mode.el b/config/conf-mode/config-conf-mode.el new file mode 100644 index 0000000..1e1554b --- /dev/null +++ b/config/conf-mode/config-conf-mode.el @@ -0,0 +1,5 @@ +(require 'config-text-mode) + +(load "config-conf-mode-hooks") + +(provide 'config-conf-mode) diff --git a/config/config.el b/config/config.el new file mode 100644 index 0000000..837282c --- /dev/null +++ b/config/config.el @@ -0,0 +1,54 @@ +(require 'seq) + +(defvar config-directory (file-name-directory (locate-library "config"))) + +(defun config-add-modules-to-load-path (directory) + (let* ((pattern (file-name-concat directory "*")) + (results (file-expand-wildcards pattern)) + (directories (seq-filter 'file-directory-p results)) + (non-hidden (seq-filter (lambda (d) + (let ((base (file-name-base d))) + (not (string-prefix-p "." base)))) + directories))) + (mapc (lambda (m) + (add-to-list 'load-path m)) + non-hidden))) + +(config-add-modules-to-load-path config-directory) + +(require 'config-dired) +(require 'config-display-buffer) +(require 'config-eldoc) +(require 'config-electric) +(require 'config-files) +(require 'config-flymake) +(require 'config-garbage-collection) +(require 'config-keys) +(require 'config-man) +(require 'config-package) +(require 'config-programming-languages) +(require 'config-project) +(require 'config-recentf) +(require 'config-savehist) +(require 'config-tramp) + +(require 'config-text-mode) +(require 'config-conf-mode) +(require 'config-prog-mode) + +(when (locate-library "company") + (require 'config-company)) + +(when (locate-library "eglot") + (require 'config-eglot)) + +(when (locate-library "flycheck") + (require 'config-flycheck)) + +(when (locate-library "lsp-mode") + (require 'config-lsp-mode)) + +(when (and (>= emacs-major-version 28) (native-comp-available-p)) + (require 'config-native-comp)) + +(provide 'config) diff --git a/config/dired/config-dired.el b/config/dired/config-dired.el new file mode 100644 index 0000000..d037bfb --- /dev/null +++ b/config/dired/config-dired.el @@ -0,0 +1,4 @@ +(setq dired-listing-switches "-alh" + dired-kill-when-opening-new-dired-buffer t) + +(provide 'config-dired) diff --git a/config/display-buffer/config-display-buffer-alist.el b/config/display-buffer/config-display-buffer-alist.el new file mode 100644 index 0000000..caf2229 --- /dev/null +++ b/config/display-buffer/config-display-buffer-alist.el @@ -0,0 +1,23 @@ +(defvar config-display-buffer-gaps-width 20) + +(defun config-display-buffer-which-side () + (if (> (+ (frame-pixel-width) config-display-buffer-gaps-width) (/ (x-display-pixel-width) 2)) + 'right + 'bottom)) + +(defun config-display-buffer-update-alist (_) + (let ((side (config-display-buffer-which-side))) + (setq display-buffer-alist `(("\\*Flymake diagnostics.*" + (display-buffer-in-side-window) + (side . ,side) + (window-height . 15) + (window-width . 75) + ("\*Flycheck errors\*" + (display-buffer-in-side-window) + (side . ,side) + (window-height . 15) + (window-width . 75))))))) + +(add-hook 'after-make-frame-functions 'config-display-buffer-update-alist) + +(add-hook 'window-size-change-functions 'config-display-buffer-update-alist) diff --git a/config/display-buffer/config-display-buffer.el b/config/display-buffer/config-display-buffer.el new file mode 100644 index 0000000..c36d35f --- /dev/null +++ b/config/display-buffer/config-display-buffer.el @@ -0,0 +1,5 @@ +(setq display-buffer-base-action '(display-buffer-same-window display-buffer-reuse-window)) + +(load "config-display-buffer-alist") + +(provide 'config-display-buffer) diff --git a/config/eglot/config-eglot-servers.el b/config/eglot/config-eglot-servers.el new file mode 100644 index 0000000..833766d --- /dev/null +++ b/config/eglot/config-eglot-servers.el @@ -0,0 +1,9 @@ +(defvar config-eglot-server-clangd '((c-mode c++-mode) . + ("clangd" + "--header-insersion=never"))) + +(defvar config-eglot-server-rust-analyzer '((rust-mode) . + ("rust-analyzer"))) + +(add-to-list 'eglot-server-programs config-eglot-server-clangd) +(add-to-list 'eglot-server-programs config-eglot-server-rust-analyzer) diff --git a/config/eglot/config-eglot.el b/config/eglot/config-eglot.el new file mode 100644 index 0000000..17b36de --- /dev/null +++ b/config/eglot/config-eglot.el @@ -0,0 +1,7 @@ +(require 'eglot) + +(setq eglot-autoshutdown t) + +(load "config-eglot-servers") + +(provide 'config-eglot) diff --git a/config/eldoc/config-eldoc.el b/config/eldoc/config-eldoc.el new file mode 100644 index 0000000..9513919 --- /dev/null +++ b/config/eldoc/config-eldoc.el @@ -0,0 +1,4 @@ +(setq eldoc-idle-delay 0 + eldoc-echo-area-use-multiline-p 5) + +(provide 'config-eldoc) diff --git a/config/electric/config-electric.el b/config/electric/config-electric.el new file mode 100644 index 0000000..a401739 --- /dev/null +++ b/config/electric/config-electric.el @@ -0,0 +1,7 @@ +(require 'electric) +(require 'elec-pair) + +(add-to-list 'electric-pair-pairs '("?(" . "?)")) +(add-to-list 'electric-pair-pairs '("?{" . "?}")) + +(provide 'config-electric) diff --git a/config/files/config-files-backup-on-save-hook.el b/config/files/config-files-backup-on-save-hook.el new file mode 100644 index 0000000..53b96d1 --- /dev/null +++ b/config/files/config-files-backup-on-save-hook.el @@ -0,0 +1,50 @@ +(defvar config-files-backup-directory (file-name-concat user-emacs-directory "backups")) + +(unless (file-exists-p config-files-backup-directory) + (mkdir config-files-backup-directory)) + +(defun config-files-format-backup-path (path number) + (format "%s.~%s~" path number)) + +(defun config-files-backup-extension (path) + (let* ((i (string-search "." (reverse path))) + (extension (substring path (- (length path) i)))) + extension)) + +(defun config-files-backup-no-extension (path) + (let* ((i (string-search "." (reverse path))) + (no-extension (substring path 0 (- (length path) (+ i 1))))) + no-extension)) + +(defun config-files-backup-number (path) + (let* ((extension (config-files-backup-extension path)) + (extracted (substring extension 1 (- (length extension) 1))) + (as-number (unless (zerop (length extracted)) + (string-to-number extracted)))) + as-number)) + +(defun config-files-shift-path (path) + (let* ((without-extension (config-files-backup-no-extension path)) + (number (config-files-backup-number path)) + (next-number (+ number 1)) + (shifted-path (config-files-format-backup-path + without-extension + next-number))) + shifted-path)) + +(defun config-files-shift-backup (path) + (let ((next-path (config-files-shift-path path))) + (when (file-exists-p next-path) + (config-files-shift-backup next-path)) + (rename-file path next-path))) + +(defun config-files-backup-before-save () + (unless backup-inhibited + (let* ((path (buffer-file-name)) + (backup-path (config-files-format-backup-path path 0))) + (when (file-exists-p path) + (when (file-exists-p backup-path) + (config-files-shift-backup backup-path)) + (copy-file path backup-path))))) + +(add-hook 'before-save-hook 'config-files-backup-before-save) diff --git a/config/files/config-files.el b/config/files/config-files.el new file mode 100644 index 0000000..9e92ee4 --- /dev/null +++ b/config/files/config-files.el @@ -0,0 +1,3 @@ +(load "config-files-backup-on-save-hook") + +(provide 'config-files) diff --git a/config/flycheck/config-flycheck-cargo-has-command-p-fix.el b/config/flycheck/config-flycheck-cargo-has-command-p-fix.el new file mode 100644 index 0000000..1135165 --- /dev/null +++ b/config/flycheck/config-flycheck-cargo-has-command-p-fix.el @@ -0,0 +1,7 @@ +(defun config-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 'config-flycheck-rust-cargo-has-command-p) diff --git a/config/flycheck/config-flycheck.el b/config/flycheck/config-flycheck.el new file mode 100644 index 0000000..7478606 --- /dev/null +++ b/config/flycheck/config-flycheck.el @@ -0,0 +1,7 @@ +(require 'flycheck) + +(add-hook 'flycheck-error-list-mode-hook (lambda () (visual-line-mode 1))) + +(load "config-flycheck-cargo-has-command-p-fix") + +(provide 'config-flycheck) diff --git a/config/flymake/config-flymake-hooks.el b/config/flymake/config-flymake-hooks.el new file mode 100644 index 0000000..a19bc3c --- /dev/null +++ b/config/flymake/config-flymake-hooks.el @@ -0,0 +1,2 @@ +(add-hook 'flymake-diagnostics-buffer-mode-hook (lambda () + (visual-line-mode 1))) diff --git a/config/flymake/config-flymake.el b/config/flymake/config-flymake.el new file mode 100644 index 0000000..203e52b --- /dev/null +++ b/config/flymake/config-flymake.el @@ -0,0 +1,5 @@ +(require 'flymake) + +(load "config-flymake-hooks") + +(provide 'config-flymake) diff --git a/config/garbage-collection/config-garbage-collection.el b/config/garbage-collection/config-garbage-collection.el new file mode 100644 index 0000000..1540baf --- /dev/null +++ b/config/garbage-collection/config-garbage-collection.el @@ -0,0 +1,3 @@ +(setq gc-cons-threshold (* (expt 1024 2) 25)) + +(provide 'config-garbage-collection) diff --git a/config/keys/config-keys.el b/config/keys/config-keys.el new file mode 100644 index 0000000..6d74b0a --- /dev/null +++ b/config/keys/config-keys.el @@ -0,0 +1,11 @@ +(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-buffer) + +(provide 'config-keys) diff --git a/config/lsp-mode/config-lsp-mode-disable-install-server.el b/config/lsp-mode/config-lsp-mode-disable-install-server.el new file mode 100644 index 0000000..7a3c415 --- /dev/null +++ b/config/lsp-mode/config-lsp-mode-disable-install-server.el @@ -0,0 +1,40 @@ +(setq lsp-server-install-dir "/somewhere/that/doesnt/exist") + +(defun config-lsp-mode-disable-install-server-error () + (error "lsp-mode server install features have been disabled")) + +(advice-add 'lsp-install-server + :around + 'config-lsp-mode-disable-install-server-error) + +(advice-add 'lsp-update-server + :around + 'config-lsp-mode-disable-install-server-error) + +(advice-add 'lsp-update-servers + :around + 'config-lsp-mode-disable-install-server-error) + +(advice-add 'lsp-download-install + :around + 'config-lsp-mode-disable-install-server-error) + +(advice-add 'lsp-download-path + :around + 'config-lsp-mode-disable-install-server-error) + +(advice-add 'lsp-async-start-process + :around + 'config-lsp-mode-disable-install-server-error) + +(advice-add 'lsp--download-status + :around + 'config-lsp-mode-disable-install-server-error) + +(advice-add 'lsp--install-server-internal + :around + 'config-lsp-mode-disable-install-server-error) + +(advice-add 'lsp--npm-dependency-install + :around + 'config-lsp-mode-disable-install-server-error) diff --git a/config/lsp-mode/config-lsp-mode.el b/config/lsp-mode/config-lsp-mode.el new file mode 100644 index 0000000..a42498e --- /dev/null +++ b/config/lsp-mode/config-lsp-mode.el @@ -0,0 +1,19 @@ +(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 "config-lsp-mode-disable-install-server") + +(provide 'config-lsp-mode) diff --git a/config/man/config-man-helper-functions.el b/config/man/config-man-helper-functions.el new file mode 100644 index 0000000..a58ba75 --- /dev/null +++ b/config/man/config-man-helper-functions.el @@ -0,0 +1,31 @@ +(defun config-man-pages () + (let* ((manpath (getenv "MANPATH")) + (directories (split-string manpath ":" t)) + (that-exist (seq-filter 'file-exists-p directories)) + (files (mapcar (lambda (d) + (directory-files-recursively d ".*" nil)) + that-exist)) + (flattened (flatten-list files)) + (pages (mapcar 'file-name-nondirectory flattened)) + (without-second-ext (mapcar (lambda (p) + (let ((extension (file-name-extension p))) + (if (string-match-p "^[0-9+]$" extension) + p + (file-name-sans-extension p)))) + pages))) + without-second-ext)) + +(defun config-man-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 config-man-advice (orig &rest args) + (interactive) + (let ((page (or args (list (completing-read "Select page: " (config-man-pages) nil t))))) + (apply orig page))) + +(advice-add 'man :around 'config-man-advice) diff --git a/config/man/config-man.el b/config/man/config-man.el new file mode 100644 index 0000000..566420e --- /dev/null +++ b/config/man/config-man.el @@ -0,0 +1,5 @@ +(setq Man-notify-method 'pushy) + +(load "config-man-helper-functions") + +(provide 'config-man) diff --git a/config/native-comp/config-native-comp.el b/config/native-comp/config-native-comp.el new file mode 100644 index 0000000..c44a984 --- /dev/null +++ b/config/native-comp/config-native-comp.el @@ -0,0 +1,3 @@ +(setq native-comp-async-jobs-number (string-to-number (shell-command-to-string "nproc"))) + +(provide 'config-native-comp) diff --git a/config/package/config-package.el b/config/package/config-package.el new file mode 100644 index 0000000..d3be495 --- /dev/null +++ b/config/package/config-package.el @@ -0,0 +1,4 @@ +(setq package-archives nil + package-check-signature 'all) + +(provide 'config-package) diff --git a/config/prog-mode/config-prog-mode-hooks.el b/config/prog-mode/config-prog-mode-hooks.el new file mode 100644 index 0000000..a3c63e0 --- /dev/null +++ b/config/prog-mode/config-prog-mode-hooks.el @@ -0,0 +1 @@ +(setq prog-mode-hook (copy-tree text-mode-hook)) diff --git a/config/prog-mode/config-prog-mode.el b/config/prog-mode/config-prog-mode.el new file mode 100644 index 0000000..5caf9f2 --- /dev/null +++ b/config/prog-mode/config-prog-mode.el @@ -0,0 +1,5 @@ +(require 'config-text-mode) + +(load "config-prog-mode-hooks") + +(provide 'config-prog-mode) diff --git a/config/programming-languages/c/config-c-functions.el b/config/programming-languages/c/config-c-functions.el new file mode 100644 index 0000000..b60d38c --- /dev/null +++ b/config/programming-languages/c/config-c-functions.el @@ -0,0 +1,4 @@ +(defun config-c-mode-insert-header-guard () + (interactive) + (let ((guard (upcase (format "%s_H" (file-name-base (buffer-file-name)))))) + (insert (format "#ifndef %s\n#define %s\n#endif" guard guard)))) diff --git a/config/programming-languages/c/config-c.el b/config/programming-languages/c/config-c.el new file mode 100644 index 0000000..3cb6a32 --- /dev/null +++ b/config/programming-languages/c/config-c.el @@ -0,0 +1,5 @@ +(setq c-default-style "stroustrup" c-basic-offset 4) + +(load "config-c-functions") + +(provide 'config-c) diff --git a/config/programming-languages/config-programming-languages.el b/config/programming-languages/config-programming-languages.el new file mode 100644 index 0000000..3976cce --- /dev/null +++ b/config/programming-languages/config-programming-languages.el @@ -0,0 +1,14 @@ +(defvar config-programming-languages-directory (file-name-directory + (locate-library "config-programming-languages"))) + +(defvar config-programming-languages-modules '(c shell)) + +(mapc (lambda (module) + (let ((module-load-path (file-name-concat config-programming-languages-directory (symbol-name module)))) + (add-to-list 'load-path module-load-path))) + config-programming-languages-modules) + +(require 'config-c) +(require 'config-shell) + +(provide 'config-programming-languages) diff --git a/config/programming-languages/shell/config-shell.el b/config/programming-languages/shell/config-shell.el new file mode 100644 index 0000000..0c1e82c --- /dev/null +++ b/config/programming-languages/shell/config-shell.el @@ -0,0 +1,3 @@ +(setq sh-shell-file "/bin/bash") + +(provide 'config-shell) diff --git a/config/project/config-project-find-rust-projects.el b/config/project/config-project-find-rust-projects.el new file mode 100644 index 0000000..65359bd --- /dev/null +++ b/config/project/config-project-find-rust-projects.el @@ -0,0 +1,4 @@ +(add-to-list 'project-find-functions (lambda (directory) + (let ((rust-project (locate-dominating-file directory "Cargo.toml"))) + (when rust-project + (cons 'transient rust-project))))) diff --git a/config/project/config-project.el b/config/project/config-project.el new file mode 100644 index 0000000..c4c61ea --- /dev/null +++ b/config/project/config-project.el @@ -0,0 +1,3 @@ +(load "config-project-find-rust-projects") + +(provide 'config-project) diff --git a/config/recentf/config-recentf.el b/config/recentf/config-recentf.el new file mode 100644 index 0000000..3b7466a --- /dev/null +++ b/config/recentf/config-recentf.el @@ -0,0 +1,4 @@ +(setq recentf-max-menu-items 25 + recentf-max-saved-items 25) + +(provide 'config-recentf) diff --git a/config/savehist/config-savehist.el b/config/savehist/config-savehist.el new file mode 100644 index 0000000..7a1cc40 --- /dev/null +++ b/config/savehist/config-savehist.el @@ -0,0 +1,11 @@ +(require 'savehist) + +(setq savehist-file (expand-file-name "savehist" user-emacs-directory) + savehist-save-minibuffer-history t) + +(add-to-list 'savehist-additional-variables 'command-history) + +(unless (file-exists-p savehist-file) + (make-empty-file savehist-file)) + +(provide 'config-savehist) diff --git a/config/text-mode/config-text-mode-hooks.el b/config/text-mode/config-text-mode-hooks.el new file mode 100644 index 0000000..f740e0c --- /dev/null +++ b/config/text-mode/config-text-mode-hooks.el @@ -0,0 +1,9 @@ +(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)))) diff --git a/config/text-mode/config-text-mode.el b/config/text-mode/config-text-mode.el new file mode 100644 index 0000000..f2a832e --- /dev/null +++ b/config/text-mode/config-text-mode.el @@ -0,0 +1,3 @@ +(load "config-text-mode-hooks") + +(provide 'config-text-mode) diff --git a/config/tramp/config-tramp-connection-properties.el b/config/tramp/config-tramp-connection-properties.el new file mode 100644 index 0000000..88f2dfd --- /dev/null +++ b/config/tramp/config-tramp-connection-properties.el @@ -0,0 +1,2 @@ +(add-to-list 'tramp-connection-properties (list (regexp-quote (format "/sudo:root@%s:" system-name)) + "session-timeout" (* 60 20))) diff --git a/config/tramp/config-tramp-sudo-hang-fix.el b/config/tramp/config-tramp-sudo-hang-fix.el new file mode 100644 index 0000000..3882f28 --- /dev/null +++ b/config/tramp/config-tramp-sudo-hang-fix.el @@ -0,0 +1,3 @@ +(defun sudo-edit () + (interactive) + (find-file (format "/sudo:root@%s:%s" system-name (read-file-name "Edit as root: ")))) diff --git a/config/tramp/config-tramp.el b/config/tramp/config-tramp.el new file mode 100644 index 0000000..e50ff1d --- /dev/null +++ b/config/tramp/config-tramp.el @@ -0,0 +1,10 @@ +(require 'tramp) + +(setq password-cache nil + password-cache-expiry 0 + tramp-persistency-file-name nil) + +(load "config-tramp-connection-properties") +(load "config-tramp-sudo-hang-fix") + +(provide 'config-tramp) |