summaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
Diffstat (limited to 'init')
-rw-r--r--init/company/init-company.el8
-rw-r--r--init/conf-mode/init-conf-mode-hooks.el1
-rw-r--r--init/conf-mode/init-conf-mode.el5
-rw-r--r--init/dir-locals/eglot-dir-locals.el6
-rw-r--r--init/dired/init-dired.el4
-rw-r--r--init/display-buffer/init-display-buffer-best-side.el7
-rw-r--r--init/display-buffer/init-display-buffer.el5
-rw-r--r--init/eglot/init-eglot-servers.el9
-rw-r--r--init/eglot/init-eglot.el7
-rw-r--r--init/eldoc/init-eldoc.el4
-rw-r--r--init/electric/init-electric.el7
-rw-r--r--init/flycheck/init-flycheck-cargo-has-command-p-fix.el7
-rw-r--r--init/flycheck/init-flycheck.el15
-rw-r--r--init/flymake/init-flymake-hooks.el2
-rw-r--r--init/flymake/init-flymake.el12
-rw-r--r--init/garbage-collection/init-garbage-collection.el3
-rw-r--r--init/ibuffer/init-ibuffer-filter-groups.el10
-rw-r--r--init/ibuffer/init-ibuffer-human-readable-size.el16
-rw-r--r--init/ibuffer/init-ibuffer-never-show.el13
-rw-r--r--init/ibuffer/init-ibuffer.el22
-rw-r--r--init/keys/init-keys.el12
-rw-r--r--init/lsp-mode/init-lsp-mode-disable-install-server.el40
-rw-r--r--init/lsp-mode/init-lsp-mode.el19
-rw-r--r--init/man/init-man.el3
-rw-r--r--init/native-comp/init-native-comp.el3
-rw-r--r--init/package/init-package.el4
-rw-r--r--init/prog-mode/init-prog-mode-hooks.el1
-rw-r--r--init/prog-mode/init-prog-mode.el5
-rw-r--r--init/project/init-project-find-rust-projects.el4
-rw-r--r--init/project/init-project.el3
-rw-r--r--init/recentf/init-recentf.el4
-rw-r--r--init/savehist/init-savehist.el11
-rw-r--r--init/text-mode/init-text-mode-hooks.el9
-rw-r--r--init/text-mode/init-text-mode.el3
-rw-r--r--init/tramp/init-tramp-connection-properties.el2
-rw-r--r--init/tramp/init-tramp-sudo-hang-fix.el3
-rw-r--r--init/tramp/init-tramp.el10
37 files changed, 299 insertions, 0 deletions
diff --git a/init/company/init-company.el b/init/company/init-company.el
new file mode 100644
index 0000000..633efe7
--- /dev/null
+++ b/init/company/init-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 'init-company)
diff --git a/init/conf-mode/init-conf-mode-hooks.el b/init/conf-mode/init-conf-mode-hooks.el
new file mode 100644
index 0000000..c662e45
--- /dev/null
+++ b/init/conf-mode/init-conf-mode-hooks.el
@@ -0,0 +1 @@
+(setq conf-mode-hook (copy-tree text-mode-hook))
diff --git a/init/conf-mode/init-conf-mode.el b/init/conf-mode/init-conf-mode.el
new file mode 100644
index 0000000..4a77537
--- /dev/null
+++ b/init/conf-mode/init-conf-mode.el
@@ -0,0 +1,5 @@
+(require 'init-text-mode)
+
+(load "init-conf-mode-hooks")
+
+(provide 'init-conf-mode)
diff --git a/init/dir-locals/eglot-dir-locals.el b/init/dir-locals/eglot-dir-locals.el
new file mode 100644
index 0000000..9fff9e8
--- /dev/null
+++ b/init/dir-locals/eglot-dir-locals.el
@@ -0,0 +1,6 @@
+((rust-mode . ((eval . (eglot-ensure))
+ (eglot-workspace-configuration . ((:rust-analyzer . (:checkOnSave
+ (:command "clippy")))))
+ (rust-format-on-save . t)
+ (rust-format-goto-problem . t)
+ (rust-rustfmt-switches . ("--edition" "2021")))))
diff --git a/init/dired/init-dired.el b/init/dired/init-dired.el
new file mode 100644
index 0000000..1d47ccf
--- /dev/null
+++ b/init/dired/init-dired.el
@@ -0,0 +1,4 @@
+(setq dired-listing-switches "-alh"
+ dired-kill-when-opening-new-dired-buffer t)
+
+(provide 'init-dired)
diff --git a/init/display-buffer/init-display-buffer-best-side.el b/init/display-buffer/init-display-buffer-best-side.el
new file mode 100644
index 0000000..e0f588a
--- /dev/null
+++ b/init/display-buffer/init-display-buffer-best-side.el
@@ -0,0 +1,7 @@
+(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)))
diff --git a/init/display-buffer/init-display-buffer.el b/init/display-buffer/init-display-buffer.el
new file mode 100644
index 0000000..f1c4290
--- /dev/null
+++ b/init/display-buffer/init-display-buffer.el
@@ -0,0 +1,5 @@
+(setq display-buffer-base-action '(display-buffer-same-window display-buffer-reuse-window))
+
+(load "init-display-buffer-best-side")
+
+(provide 'init-display-buffer)
diff --git a/init/eglot/init-eglot-servers.el b/init/eglot/init-eglot-servers.el
new file mode 100644
index 0000000..2dce402
--- /dev/null
+++ b/init/eglot/init-eglot-servers.el
@@ -0,0 +1,9 @@
+(defvar init-eglot-server-clangd '((c-mode c++-mode) .
+ ("clangd"
+ "--header-insersion=never")))
+
+(defvar init-eglot-server-rust-analyzer '((rust-mode) .
+ ("rust-analyzer")))
+
+(add-to-list 'eglot-server-programs init-eglot-server-clangd)
+(add-to-list 'eglot-server-programs init-eglot-server-rust-analyzer)
diff --git a/init/eglot/init-eglot.el b/init/eglot/init-eglot.el
new file mode 100644
index 0000000..dd85cca
--- /dev/null
+++ b/init/eglot/init-eglot.el
@@ -0,0 +1,7 @@
+(require 'eglot)
+
+(setq eglot-autoshutdown t)
+
+(load "init-eglot-servers")
+
+(provide 'init-eglot)
diff --git a/init/eldoc/init-eldoc.el b/init/eldoc/init-eldoc.el
new file mode 100644
index 0000000..c4568e0
--- /dev/null
+++ b/init/eldoc/init-eldoc.el
@@ -0,0 +1,4 @@
+(setq eldoc-idle-delay 0
+ eldoc-echo-area-use-multiline-p 5)
+
+(provide 'init-eldoc)
diff --git a/init/electric/init-electric.el b/init/electric/init-electric.el
new file mode 100644
index 0000000..7d668b6
--- /dev/null
+++ b/init/electric/init-electric.el
@@ -0,0 +1,7 @@
+(require 'electric)
+(require 'elec-pair)
+
+(add-to-list 'electric-pair-pairs '("?(" . "?)"))
+(add-to-list 'electric-pair-pairs '("?{" . "?}"))
+
+(provide 'init-electric)
diff --git a/init/flycheck/init-flycheck-cargo-has-command-p-fix.el b/init/flycheck/init-flycheck-cargo-has-command-p-fix.el
new file mode 100644
index 0000000..48d53d6
--- /dev/null
+++ b/init/flycheck/init-flycheck-cargo-has-command-p-fix.el
@@ -0,0 +1,7 @@
+(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)
diff --git a/init/flycheck/init-flycheck.el b/init/flycheck/init-flycheck.el
new file mode 100644
index 0000000..ee59ef8
--- /dev/null
+++ b/init/flycheck/init-flycheck.el
@@ -0,0 +1,15 @@
+(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)
diff --git a/init/flymake/init-flymake-hooks.el b/init/flymake/init-flymake-hooks.el
new file mode 100644
index 0000000..a19bc3c
--- /dev/null
+++ b/init/flymake/init-flymake-hooks.el
@@ -0,0 +1,2 @@
+(add-hook 'flymake-diagnostics-buffer-mode-hook (lambda ()
+ (visual-line-mode 1)))
diff --git a/init/flymake/init-flymake.el b/init/flymake/init-flymake.el
new file mode 100644
index 0000000..0fbd45a
--- /dev/null
+++ b/init/flymake/init-flymake.el
@@ -0,0 +1,12 @@
+(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)
diff --git a/init/garbage-collection/init-garbage-collection.el b/init/garbage-collection/init-garbage-collection.el
new file mode 100644
index 0000000..96b2252
--- /dev/null
+++ b/init/garbage-collection/init-garbage-collection.el
@@ -0,0 +1,3 @@
+(setq gc-cons-threshold (* (expt 1024 2) 25))
+
+(provide 'init-garbage-collection)
diff --git a/init/ibuffer/init-ibuffer-filter-groups.el b/init/ibuffer/init-ibuffer-filter-groups.el
new file mode 100644
index 0000000..fbdd8ff
--- /dev/null
+++ b/init/ibuffer/init-ibuffer-filter-groups.el
@@ -0,0 +1,10 @@
+(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)
diff --git a/init/ibuffer/init-ibuffer-human-readable-size.el b/init/ibuffer/init-ibuffer-human-readable-size.el
new file mode 100644
index 0000000..6d62521
--- /dev/null
+++ b/init/ibuffer/init-ibuffer-human-readable-size.el
@@ -0,0 +1,16 @@
+(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)
diff --git a/init/ibuffer/init-ibuffer-never-show.el b/init/ibuffer/init-ibuffer-never-show.el
new file mode 100644
index 0000000..0cf8db2
--- /dev/null
+++ b/init/ibuffer/init-ibuffer-never-show.el
@@ -0,0 +1,13 @@
+(defvar init-ibuffer-never-show '("^\\*Messages\\*$"
+ "^\\*Help\\*$"
+ "^\\*Completions\\*$"
+ "^\\*Backtrace\\*$"
+ "^\\*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)
diff --git a/init/ibuffer/init-ibuffer.el b/init/ibuffer/init-ibuffer.el
new file mode 100644
index 0000000..209328c
--- /dev/null
+++ b/init/ibuffer/init-ibuffer.el
@@ -0,0 +1,22 @@
+(require 'ibuffer)
+(require 'ibuf-ext)
+(require 'init-ibuffer-human-readable-size)
+(require 'init-ibuffer-never-show)
+(require 'init-ibuffer-filter-groups)
+
+(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)
diff --git a/init/keys/init-keys.el b/init/keys/init-keys.el
new file mode 100644
index 0000000..4bbaa5e
--- /dev/null
+++ b/init/keys/init-keys.el
@@ -0,0 +1,12 @@
+(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)
+(global-set-key (kbd "C-x C-b") 'ibuffer)
+
+(provide 'init-keys)
diff --git a/init/lsp-mode/init-lsp-mode-disable-install-server.el b/init/lsp-mode/init-lsp-mode-disable-install-server.el
new file mode 100644
index 0000000..ed5e73a
--- /dev/null
+++ b/init/lsp-mode/init-lsp-mode-disable-install-server.el
@@ -0,0 +1,40 @@
+(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)
diff --git a/init/lsp-mode/init-lsp-mode.el b/init/lsp-mode/init-lsp-mode.el
new file mode 100644
index 0000000..f77e503
--- /dev/null
+++ b/init/lsp-mode/init-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 "init-lsp-mode-disable-install-server")
+
+(provide 'init-lsp-mode)
diff --git a/init/man/init-man.el b/init/man/init-man.el
new file mode 100644
index 0000000..521f491
--- /dev/null
+++ b/init/man/init-man.el
@@ -0,0 +1,3 @@
+(setq Man-notify-method 'pushy)
+
+(provide 'init-man)
diff --git a/init/native-comp/init-native-comp.el b/init/native-comp/init-native-comp.el
new file mode 100644
index 0000000..9ae0489
--- /dev/null
+++ b/init/native-comp/init-native-comp.el
@@ -0,0 +1,3 @@
+(setq native-comp-async-jobs-number (string-to-number (shell-command-to-string "nproc")))
+
+(provide 'init-native-comp)
diff --git a/init/package/init-package.el b/init/package/init-package.el
new file mode 100644
index 0000000..3e2129d
--- /dev/null
+++ b/init/package/init-package.el
@@ -0,0 +1,4 @@
+(setq package-archives nil
+ package-check-signature 'all)
+
+(provide 'init-package)
diff --git a/init/prog-mode/init-prog-mode-hooks.el b/init/prog-mode/init-prog-mode-hooks.el
new file mode 100644
index 0000000..a3c63e0
--- /dev/null
+++ b/init/prog-mode/init-prog-mode-hooks.el
@@ -0,0 +1 @@
+(setq prog-mode-hook (copy-tree text-mode-hook))
diff --git a/init/prog-mode/init-prog-mode.el b/init/prog-mode/init-prog-mode.el
new file mode 100644
index 0000000..eec9811
--- /dev/null
+++ b/init/prog-mode/init-prog-mode.el
@@ -0,0 +1,5 @@
+(require 'init-text-mode)
+
+(load "init-prog-mode-hooks")
+
+(provide 'init-prog-mode)
diff --git a/init/project/init-project-find-rust-projects.el b/init/project/init-project-find-rust-projects.el
new file mode 100644
index 0000000..65359bd
--- /dev/null
+++ b/init/project/init-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/init/project/init-project.el b/init/project/init-project.el
new file mode 100644
index 0000000..2e83d81
--- /dev/null
+++ b/init/project/init-project.el
@@ -0,0 +1,3 @@
+(load "init-project-find-rust-projects")
+
+(provide 'init-project)
diff --git a/init/recentf/init-recentf.el b/init/recentf/init-recentf.el
new file mode 100644
index 0000000..293db0d
--- /dev/null
+++ b/init/recentf/init-recentf.el
@@ -0,0 +1,4 @@
+(setq recentf-max-menu-items 25
+ recentf-max-saved-items 25)
+
+(provide 'init-recentf)
diff --git a/init/savehist/init-savehist.el b/init/savehist/init-savehist.el
new file mode 100644
index 0000000..7e6e311
--- /dev/null
+++ b/init/savehist/init-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 'init-savehist)
diff --git a/init/text-mode/init-text-mode-hooks.el b/init/text-mode/init-text-mode-hooks.el
new file mode 100644
index 0000000..f740e0c
--- /dev/null
+++ b/init/text-mode/init-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/init/text-mode/init-text-mode.el b/init/text-mode/init-text-mode.el
new file mode 100644
index 0000000..4318c95
--- /dev/null
+++ b/init/text-mode/init-text-mode.el
@@ -0,0 +1,3 @@
+(load "init-text-mode-hooks")
+
+(provide 'init-text-mode)
diff --git a/init/tramp/init-tramp-connection-properties.el b/init/tramp/init-tramp-connection-properties.el
new file mode 100644
index 0000000..88f2dfd
--- /dev/null
+++ b/init/tramp/init-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/init/tramp/init-tramp-sudo-hang-fix.el b/init/tramp/init-tramp-sudo-hang-fix.el
new file mode 100644
index 0000000..3882f28
--- /dev/null
+++ b/init/tramp/init-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/init/tramp/init-tramp.el b/init/tramp/init-tramp.el
new file mode 100644
index 0000000..aad0582
--- /dev/null
+++ b/init/tramp/init-tramp.el
@@ -0,0 +1,10 @@
+(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)