diff options
Diffstat (limited to 'home-manager/homeModules/emacs')
| -rw-r--r-- | home-manager/homeModules/emacs/aliases | 4 | ||||
| -rw-r--r-- | home-manager/homeModules/emacs/default.nix | 52 | ||||
| -rw-r--r-- | home-manager/homeModules/emacs/early-init.el | 171 | ||||
| -rw-r--r-- | home-manager/homeModules/emacs/elpaca.el | 46 | ||||
| -rw-r--r-- | home-manager/homeModules/emacs/init.el | 848 | ||||
| -rw-r--r-- | home-manager/homeModules/emacs/templates.eld | 18 |
6 files changed, 0 insertions, 1139 deletions
diff --git a/home-manager/homeModules/emacs/aliases b/home-manager/homeModules/emacs/aliases deleted file mode 100644 index 87e9ae2..0000000 --- a/home-manager/homeModules/emacs/aliases +++ /dev/null @@ -1,4 +0,0 @@ -alias ntemplate nix flake init --template github:the-nix-way/dev-templates#$1 -alias ff find-file $1 -alias hr home-manager switch --flake /home/jerpo/nixfiles -alias nr sudo nixos-rebuild switch --flake /home/jerpo/nixfiles#ltrr-mini diff --git a/home-manager/homeModules/emacs/default.nix b/home-manager/homeModules/emacs/default.nix deleted file mode 100644 index 7a8b66f..0000000 --- a/home-manager/homeModules/emacs/default.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ - pkgs, - config, - lib, - ... -}: - -let - mkMutableSymlink = config.lib.meta.mkMutableSymlink; -in -{ - options = { - emacs.enable = lib.mkEnableOption "enable emacs"; - emacs.package = lib.mkPackageOption pkgs "emacs package" { default = [ "emacs30-pgtk" ]; }; - }; - config = lib.mkIf config.emacs.enable { - home.sessionVariables.EDITOR = "emacsclient -a emacs"; - home.packages = - with pkgs; - with python311Packages; - [ - # required dependencies - ripgrep - fd - tree-sitter - emacs-all-the-icons-fonts - libappindicator - poppler_utils - nixd - alejandra - sqlite - ]; - - programs.emacs = { - enable = true; - package = config.emacs.package; - extraPackages = - epkgs: with epkgs; [ - treesit-grammars.with-all-grammars - mu4e - ]; - }; - - xdg.configFile = { - "emacs/early-init.el".source = mkMutableSymlink ./early-init.el; - "emacs/init.el".source = mkMutableSymlink ./init.el; - "emacs/elpaca.el".source = mkMutableSymlink ./elpaca.el; - "emacs/etc/tempel/templates.eld".source = mkMutableSymlink ./templates.eld; - "emacs/etc/eshell/aliases".source = mkMutableSymlink ./aliases; - }; - }; -} diff --git a/home-manager/homeModules/emacs/early-init.el b/home-manager/homeModules/emacs/early-init.el deleted file mode 100644 index c6334f5..0000000 --- a/home-manager/homeModules/emacs/early-init.el +++ /dev/null @@ -1,171 +0,0 @@ -;;;; Optimisations from https://github.com/jamescherti/minimal-emacs.d - -;;; Garbage collection -(setq gc-cons-threshold most-positive-fixnum) - -(add-hook 'emacs-startup-hook - (lambda () - (setq gc-cons-threshold (* 16 1024 1024)))) - -;;; Performance - -;; Prefer loading newer compiled files -(setq load-prefer-newer t) - -;; Increase how much is read from processes in a single chunk (default is 4kb). -(setq read-process-output-max (* 1024 1024)) ; 512kb - -;; Disable warnings from the legacy advice API. They aren't useful. -(setq ad-redefinition-action 'accept) - -(setq warning-suppress-types '((lexical-binding))) - -;; Don't ping things that look like domain names. -(setq ffap-machine-p-known 'reject) - -;; By default, Emacs "updates" its ui more often than it needs to -(setq idle-update-delay 1.0) - -;; Font compacting can be very resource-intensive, especially when rendering -;; icon fonts on Windows. This will increase memory usage. -(setq inhibit-compacting-font-caches t) - -(unless (daemonp) - (unless noninteractive - (progn - ;; Disable mode-line-format during init - (defun minimal-emacs--reset-inhibited-vars-h () - (setq-default inhibit-redisplay nil - ;; Inhibiting `message' only prevents redraws and - inhibit-message nil) - (redraw-frame)) - - (defvar minimal-emacs--default-mode-line-format mode-line-format - "Default value of `mode-line-format'.") - (setq-default mode-line-format nil) - - (defun minimal-emacs--startup-load-user-init-file (fn &rest args) - "Advice for startup--load-user-init-file to reset mode-line-format." - (let (init) - (unwind-protect - (progn - (apply fn args) ; Start up as normal - (setq init t)) - (unless init - ;; If we don't undo inhibit-{message, redisplay} and there's an - ;; error, we'll see nothing but a blank Emacs frame. - (minimal-emacs--reset-inhibited-vars-h)) - (unless (default-toplevel-value 'mode-line-format) - (setq-default mode-line-format - minimal-emacs--default-mode-line-format))))) - - (advice-add 'startup--load-user-init-file :around - #'minimal-emacs--startup-load-user-init-file)) - - ;; Without this, Emacs will try to resize itself to a specific column size - (setq frame-inhibit-implied-resize t) - - ;; A second, case-insensitive pass over `auto-mode-alist' is time wasted. - ;; No second pass of case-insensitive search over auto-mode-alist. - (setq auto-mode-case-fold nil) - - ;; Reduce *Message* noise at startup. An empty scratch buffer (or the - ;; dashboard) is more than enough, and faster to display. - (setq inhibit-startup-screen t - inhibit-startup-echo-area-message user-login-name) - (setq initial-buffer-choice nil - inhibit-startup-buffer-menu t - inhibit-x-resources t) - - ;; Disable bidirectional text scanning for a modest performance boost. - (setq-default bidi-display-reordering 'left-to-right - bidi-paragraph-direction 'left-to-right) - - ;; Give up some bidirectional functionality for slightly faster re-display. - (setq bidi-inhibit-bpa t) - - ;; Remove "For information about GNU Emacs..." message at startup - (advice-add #'display-startup-echo-area-message :override #'ignore) - - ;; Suppress the vanilla startup screen completely. We've disabled it with - ;; `inhibit-startup-screen', but it would still initialize anyway. - (advice-add #'display-startup-screen :override #'ignore) - - ;; Shave seconds off startup time by starting the scratch buffer in - ;; `fundamental-mode' - (setq initial-major-mode 'fundamental-mode - initial-scratch-message nil))) - -;;; Native compilation and Byte compilation - -(if (and (featurep 'native-compile) - (fboundp 'native-comp-available-p) - (native-comp-available-p)) - ;; Activate `native-compile' - (setq native-comp-jit-compilation t - package-native-compile t) - ;; Deactivate the `native-compile' feature if it is not available - (setq features (delq 'native-compile features))) - -;; Suppress compiler warnings and don't inundate users with their popups. -(setq native-comp-async-report-warnings-errors 'silent) - -;;; UI elements - -;; Disable startup screens and messages -(setq inhibit-splash-screen t) - - -(push '(menu-bar-lines . 0) default-frame-alist) -(unless (memq window-system '(mac ns)) - (setq menu-bar-mode nil)) - -(unless (daemonp) - (unless noninteractive - (when (fboundp 'tool-bar-setup) - ;; Temporarily override the tool-bar-setup function to prevent it from - ;; running during the initial stages of startup - (advice-add #'tool-bar-setup :override #'ignore) - (define-advice startup--load-user-init-file - (:before (&rest _) minimal-emacs-setup-toolbar) - (advice-remove #'tool-bar-setup #'ignore) - (tool-bar-setup))))) - -(push '(tool-bar-lines . 0) default-frame-alist) -(setq tool-bar-mode nil) - -(push '(vertical-scroll-bars) default-frame-alist) -(push '(horizontal-scroll-bars) default-frame-alist) -(setq scroll-bar-mode nil) -(when (fboundp 'horizontal-scroll-bar-mode) - (horizontal-scroll-bar-mode -1)) - -(when (bound-and-true-p tooltip-mode) - (tooltip-mode -1)) - -;; Disable GUIs because they are inconsistent across systems, desktop -;; environments, and themes, and they don't match the look of Emacs. -(setq use-file-dialog nil) -(setq use-dialog-box nil) - -;; Allow for shorter responses: "y" for yes and "n" for no. -(if (boundp 'use-short-answers) - (setq use-short-answers t) - (advice-add #'yes-or-no-p :override #'y-or-n-p)) -(defalias #'view-hello-file #'ignore) ; Never show the hello file - -;;; And that's mine - -(setq package-enable-at-startup nil) -(setq-default pgtk-wait-for-event-timeout 0) - -(let ((mono-spaced-font "FiraCode Nerd Font") - (proportionately-spaced-font "Inconsonata")) - (set-face-attribute 'default nil :family mono-spaced-font :height 110 :weight 'medium) - (set-face-attribute 'fixed-pitch nil :family mono-spaced-font :height 1.0) - (set-face-attribute 'variable-pitch nil :family proportionately-spaced-font :height 1.0) - (set-face-attribute 'italic nil :underline nil)) - - -(provide 'early-init) -;;; early-init.el ends here diff --git a/home-manager/homeModules/emacs/elpaca.el b/home-manager/homeModules/emacs/elpaca.el deleted file mode 100644 index 4e1230f..0000000 --- a/home-manager/homeModules/emacs/elpaca.el +++ /dev/null @@ -1,46 +0,0 @@ -(defvar elpaca-installer-version 0.11) -(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory)) -(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory)) -(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory)) -(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git" - :ref nil :depth 1 :inherit ignore - :files (:defaults "elpaca-test.el" (:exclude "extensions")) - :build (:not elpaca--activate-package))) -(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory)) - (build (expand-file-name "elpaca/" elpaca-builds-directory)) - (order (cdr elpaca-order)) - (default-directory repo)) - (add-to-list 'load-path (if (file-exists-p build) build repo)) - (unless (file-exists-p repo) - (make-directory repo t) - (when (<= emacs-major-version 28) (require 'subr-x)) - (condition-case-unless-debug err - (if-let* ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*")) - ((zerop (apply #'call-process `("git" nil ,buffer t "clone" - ,@(when-let* ((depth (plist-get order :depth))) - (list (format "--depth=%d" depth) "--no-single-branch")) - ,(plist-get order :repo) ,repo)))) - ((zerop (call-process "git" nil buffer t "checkout" - (or (plist-get order :ref) "--")))) - (emacs (concat invocation-directory invocation-name)) - ((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch" - "--eval" "(byte-recompile-directory \".\" 0 'force)"))) - ((require 'elpaca)) - ((elpaca-generate-autoloads "elpaca" repo))) - (progn (message "%s" (buffer-string)) (kill-buffer buffer)) - (error "%s" (with-current-buffer buffer (buffer-string)))) - ((error) (warn "%s" err) (delete-directory repo 'recursive)))) - (unless (require 'elpaca-autoloads nil t) - (require 'elpaca) - (elpaca-generate-autoloads "elpaca" repo) - (let ((load-source-file-function nil)) (load "./elpaca-autoloads")))) -(add-hook 'after-init-hook #'elpaca-process-queues) -(elpaca `(,@elpaca-order)) - -(elpaca elpaca-use-package - ;; Enable :elpaca use-package keyword. - (elpaca-use-package-mode) - (setq use-package-always-ensure t)) - -(provide 'elpaca) -;;; elpaca.el ends here diff --git a/home-manager/homeModules/emacs/init.el b/home-manager/homeModules/emacs/init.el deleted file mode 100644 index 9a3053c..0000000 --- a/home-manager/homeModules/emacs/init.el +++ /dev/null @@ -1,848 +0,0 @@ -(setopt custom-file (locate-user-emacs-file "custom.el")) -(load custom-file :no-error-if-file-is-missing) - - -(load (expand-file-name "elpaca.el" user-emacs-directory)) - - -;;; Basic behaviour - - -(setopt uniquify-buffer-name-style 'forward) - - -(setopt enable-recursive-minibuffers t) - - -;; Auto save -(setopt auto-save-default t) -(setopt auto-save-include-big-deletions t) -(setopt kill-buffer-delete-auto-save-files t) - - -;; Auto revert -(setopt revert-without-query (list ".") ; Do not prompt - auto-revert-stop-on-user-input nil - auto-revert-verbose t) - - -;; Revert other buffers (e.g, Dired) -(setopt global-auto-revert-non-file-buffers t) -(add-hook 'elpaca-after-init-hook #'global-auto-revert-mode) - - -;; Save place in buffer -(setopt save-place-limit 600) -(add-hook 'elpaca-after-init-hook #'save-place-mode) - - -(defun prot/keyboard-quit-dwim () - "Do-What-I-Mean behaviour for a general `keyboard-quit'. - -The generic `keyboard-quit' does not do the expected thing when -the minibuffer is open. Whereas we want it to close the -minibuffer, even without explicitly focusing it. - -The DWIM behaviour of this command is as follows: - -- When the region is active, disable it. -- When a minibuffer is open, but not focused, close the minibuffer. -- When the Completions buffer is selected, close it. -- In every other case use the regular `keyboard-quit'." - (interactive) - (cond - ((region-active-p) - (keyboard-quit)) - ((derived-mode-p 'completion-list-mode) - (delete-completion-window)) - ((> (minibuffer-depth) 0) - (abort-recursive-edit)) - (t - (keyboard-quit)))) - -(keymap-global-set "C-g" #'prot/keyboard-quit-dwim) - - -(use-package no-littering - :config - (no-littering-theme-backups)) - - -(use-package which-key - :ensure nil - :init - (which-key-mode)) - - -(use-package vundo - :commands (vundo) - :hook (vundo-mode . (lambda () (visual-line-mode -1) (setopt truncate-lines t)))) - - -(use-package winner - :ensure nil - :bind ("C-0" . winner-undo) - :custom - (winner-dont-bind-my-keys t) - :hook (elpaca-after-init . winner-mode)) - - -(use-package repeat - :ensure nil - :hook (elpaca-after-init . repeat-mode)) - - -(use-package avy - :bind (("M-j" . avy-goto-char-timer) - ("C-c j" . avy-goto-line))) - - -(use-package helpful - :bind (("C-h f" . helpful-callable) - ("C-h v" . helpful-variable) - ("C-h k" . helpful-key) - ("C-h x" . helpful-command) - ("C-c C-d" . helpful-at-point) - ("C-h F" . helpful-function))) - - -(setopt ediff-window-setup-function #'ediff-setup-windows-plain - ediff-split-window-function #'split-window-horizontally) - - -(electric-pair-mode t) - - -(global-set-key [remap list-buffers] 'ibuffer) - -;;; Tweak the looks of Emacs -(setq-default tab-width 4) - -(global-word-wrap-whitespace-mode t) -(global-visual-line-mode t) -(global-visual-wrap-prefix-mode t) - -;; Mode Line -(defun mood-line-segment-input-method () - "Return the selected input method if it differs from the default one" - (if current-input-method - (propertize (format-mode-line - (format "[%s]" current-input-method-title)) - 'face 'mood-line-unimportant))) - -(use-package mood-line - :config - (mood-line-mode) - :custom - (mood-line-segment-modal-meow-state-alist - '((normal "N" . mood-line-meow-normal) - (insert "I" . mood-line-meow-insert) - (keypad "K" . mood-line-meow-keypad) - (beacon "B" . mood-line-meow-beacon) - (motion "M" . mood-line-meow-motion))) - (mood-line-glyph-alist mood-line-glyphs-fira-code) - - (mood-line-format '((" " (mood-line-segment-modal) " " - (or (mood-line-segment-buffer-status) " ") " " - (mood-line-segment-buffer-name) " " (mood-line-segment-anzu) " " - (mood-line-segment-multiple-cursors) " " - (mood-line-segment-cursor-position) " " (mood-line-segment-scroll) - "") - ((mood-line-segment-vc) " " - (mood-line-segment-major-mode) " " - (mood-line-segment-input-method) " " - (mood-line-segment-misc-info) " " (mood-line-segment-checker) " " - (mood-line-segment-process) " " " "))) - :custom-face - (mood-line-meow-beacon ((t (:inherit 'font-lock-function-name-face :weight bold)))) - (mood-line-meow-insert ((t (:inherit 'font-lock-string-face :weight bold)))) - (mood-line-meow-keypad ((t (:inherit 'font-lock-keyword-face :weight bold)))) - (mood-line-meow-motion ((t (:inherit 'font-lock-constant-face :weight bold)))) - (mood-line-meow-normal ((t (:inherit 'font-lock-variable-use-face :weight bold))))) - - -(defvar after-load-theme-hook nil - "Hook run after a color theme is loaded using `load-theme'.") - -(defun spl3g/after-load-theme-advice (&rest r) - "Run `after-load-theme-hook' and ignore R." - (run-hooks 'after-load-theme-hook)) -(advice-add 'load-theme :after #'spl3g/after-load-theme-advice) - -(defun widen-mode-line () - "Widen the mode-line." - (interactive) - (set-face-attribute 'mode-line nil - :inherit 'mode-line - :box '(:line-width 8 :style flat-button)) - (set-face-attribute 'mode-line-inactive nil - :inherit 'mode-line-inactive - :box '(:line-width 8 :style flat-button))) - -(add-hook 'after-load-theme-hook 'widen-mode-line) - - -(use-package rainbow-delimiters - :hook (prog-mode . rainbow-delimiters-mode)) - - -;; Scrolling -(setopt scroll-conservatively 101) -(setopt scroll-margin 5) -(setopt mouse-wheel-progressive-speed nil) -(setopt fast-but-imprecise-scrolling t) -(setopt scroll-error-top-bottom t) -(setopt scroll-preserve-screen-position t) - - -;; Annoyances -(blink-cursor-mode -1) -(setopt visible-bell nil) -(setopt ring-bell-function #'ignore) -(setopt delete-pair-blink-delay 0.03) -(setopt blink-matching-paren nil) - -(add-hook 'prog-mode-hook 'display-line-numbers-mode) -(setopt display-line-numbers-width 3) - -(kill-ring-deindent-mode) - -;; Overwrite the default function with a patched one -(defun kill-ring-deindent-buffer-substring-function (beg end delete) - "Save the text within BEG and END to kill-ring, decreasing indentation. -Delete the saved text if DELETE is non-nil. - -In the saved copy of the text, remove some of the indentation, such -that the buffer position at BEG will be at column zero when the text -is yanked." - (let ((a beg) - (b end)) - (setq beg (min a b) - end (max a b))) - (let ((indentation (save-excursion (goto-char beg) - (current-column))) - (i-t-m indent-tabs-mode) - (text (if delete - (delete-and-extract-region beg end) - (buffer-substring beg end)))) - (with-temp-buffer - ;; Indent/deindent the same as the major mode in the original - ;; buffer. - (setq indent-tabs-mode i-t-m) - (insert text) - (indent-rigidly (point-min) (point-max) - (- indentation)) - (buffer-string)))) - - -;;; TRAMP -(setq remote-file-name-inhibit-locks t - tramp-use-scp-direct-remote-copying t - remote-file-name-inhibit-auto-save-visited t) - -(setq tramp-copy-size-limit (* 1024 1024) ;; 1MB - tramp-verbose 2) - - -;;; Configure the minibuffer and completions -(use-package vertico - :ensure t - :hook (elpaca-after-init . vertico-mode) - :bind (:map vertico-map - ("RET" . vertico-directory-enter) - ("DEL" . vertico-directory-delete-char) - ("M-DEL" . vertico-directory-delete-word))) - - -(use-package marginalia - :ensure t - :hook (elpaca-after-init . marginalia-mode)) - - -(use-package orderless - :custom - (completion-styles '(orderless basic)) - (completion-category-overrides '((file (styles basic partial-completion))))) - - -(use-package savehist - :ensure nil ; it is built-in - :hook (elpaca-after-init . savehist-mode) - :custom - (savehist-file "~/.config/emacs/var/savehist.el") - (history-length 1000) - (history-delete-duplicates t) - (savehist-additional-variables '(kill-ring search-ring))) - - -(defun cape--dabbrev-project () - (let* ((project (project-current)) - (buffers (when project - (project-buffers project)))) - (if project - (butlast buffers (- (length buffers) 4)) - (cape--buffers-major-mode)))) - -(use-package cape - :after corfu - :custom - (dabbrev-ignored-buffer-modes '(archive-mode image-mode eshell-mode)) - (cape-dabbrev-check-other-buffers #'cape--dabbrev-project) - :config - (add-hook 'completion-at-point-functions #'cape-dabbrev) - (add-hook 'completion-at-point-functions #'cape-file) - (add-hook 'completion-at-point-functions #'cape-elisp-block)) - - -(use-package corfu - :hook (elpaca-after-init . global-corfu-mode) - :bind (:map corfu-map - ("M-j" . corfu-next) - ("M-k" . corfu-previous) - ([remap previous-line] . nil) - ([remap next-line] . nil)) - :custom - (corfu-preselect 'prompt) - (corfu-auto nil) - (corfu-popupinfo-delay '(1.25 . 0.5)) - (corfu-auto-delay 0) - (corfu-auto-prefix 2) - (corfu-count 16) - (corfu-max-width 120) - (corfu-min-width 20) - (corfu-scroll-margin 4) - (corfu-on-exact-match nil) - (tab-always-indent 'complete) - (corfu-cycle t) - :config - (corfu-popupinfo-mode 1) - (corfu-history-mode 1)) - - -(use-package completion-preview - :ensure nil - :hook (elpaca-after-init . global-completion-preview-mode) - :bind (:map completion-preview-active-mode-map - ("TAB" . (lambda () - (interactive) - (completion-preview-complete) - (completion-at-point))) - - ("M-i" . (lambda () - (interactive) - (completion-preview-insert))) - ("M-n" . completion-preview-next-candidate) - ("M-p" . completion-preview-prev-candidate)) - :custom - (completion-preview-minimum-symbol-length 2)) - - - -;;; Movement - - -(use-package embark - :ensure t - - :bind - (("C-." . embark-act) - ("C-;" . embark-dwim) - ("C-h B" . embark-bindings)) - :config - (defun embark-which-key-indicator () - "An embark indicator that displays keymaps using which-key. -The which-key help message will show the type and value of the -current target followed by an ellipsis if there are further -targets." - (lambda (&optional keymap targets prefix) - (if (null keymap) - (which-key--hide-popup-ignore-command) - (which-key--show-keymap - (if (eq (plist-get (car targets) :type) 'embark-become) - "Become" - (format "Act on %s '%s'%s" - (plist-get (car targets) :type) - (embark--truncate-target (plist-get (car targets) :target)) - (if (cdr targets) "…" ""))) - (if prefix - (pcase (lookup-key keymap prefix 'accept-default) - ((and (pred keymapp) km) km) - (_ (key-binding prefix 'accept-default))) - keymap) - nil nil t (lambda (binding) - (not (string-suffix-p "-argument" (cdr binding)))))))) - - (setq embark-indicators - '(embark-which-key-indicator - embark-highlight-indicator - embark-isearch-highlight-indicator)) - - (defun embark-hide-which-key-indicator (fn &rest args) - "Hide the which-key indicator immediately when using the completing-read prompter." - (which-key--hide-popup-ignore-command) - (let ((embark-indicators - (remq #'embark-which-key-indicator embark-indicators))) - (apply fn args))) - - (advice-add #'embark-completing-read-prompter - :around #'embark-hide-which-key-indicator)) - - -(use-package multiple-cursors - :config - (global-set-key (kbd "C->") 'mc/mark-next-like-this) - (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) - (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)) - - - -;;; The file manager (Dired) - - -(use-package dired - :ensure nil - :commands (dired) - :hook - ((dired-mode . dired-hide-details-mode) - (dired-mode . hl-line-mode)) - :custom - (dired-recursive-copies 'always) - (dired-recursive-deletes 'always) - (delete-by-moving-to-trash t) - (dired-dwim-target t) - (dired-listing-switches "-hal --group-directories-first")) - - -(use-package dired-subtree - :ensure t - :after dired - :bind - ( :map dired-mode-map - ("<tab>" . dired-subtree-toggle) - ("TAB" . dired-subtree-toggle) - ("<backtab>" . dired-subtree-remove) - ("S-TAB" . dired-subtree-remove)) - :custom - (dired-subtree-use-backgrounds nil)) - - -(use-package trashed - :ensure t - :commands (trashed) - :custom - (trashed-action-confirmer 'y-or-n-p) - (trashed-use-header-line t) - (trashed-sort-key '("Date deleted" . t)) - (trashed-date-format "%Y-%m-%d %H:%M:%S")) - - - -;;; Eshell - - -(use-package eshell - :ensure nil - :hook - (eshell-exec . (lambda (p) (buffer-disable-undo))) - (eshell-kill . (lambda (p s) (buffer-enable-undo))) - (eshell-pre-command . eshell-append-history) - - :bind (("C-c o t" . spl3g/eshell-dwim) - ("C-c o s" . spl3g/select-eshell) - ("C-c o r" . spl3g/rename-current-eshell)) - - :custom - (eshell-history-size 500) - (eshell-history-append t) - (eshell-save-history-on-exit nil) - - :config - ;; (add-to-list 'eshell-modules-list 'eshell-tramp) - - ;; Save history on every command - (defun eshell-append-history () - "Call `eshell-write-history' with the `append' parameter set to `t'." - (when eshell-history-ring - (let ((newest-cmd-ring (make-ring 1))) - (ring-insert newest-cmd-ring (car (ring-elements eshell-history-ring))) - (let ((eshell-history-ring newest-cmd-ring)) - (eshell-write-history eshell-history-file-name t))))) - - - (defun spl3g/eshell-dwim () - (interactive) - (defvar current-prefix-arg) - (let* ((project (project-current)) - (eshell-func (if project - 'project-eshell - 'eshell)) - (buffer-name (if project - (format "*%s-eshell*" (project-name project)) - "*eshell*")) - (current-prefix-arg t)) - (if (not (get-buffer buffer-name)) - (let ((buf (funcall eshell-func))) - (switch-to-buffer (other-buffer buf)) - (switch-to-buffer-other-window buf)) - (switch-to-buffer-other-window buffer-name)))) - - (defun spl3g/select-eshell () - (interactive) - (let* ((eshell-buffers (seq-filter (lambda (buffer) - (eq (with-current-buffer buffer major-mode) - 'eshell-mode)) - (buffer-list))) - - (eshell-windows (remove nil (mapcar (lambda (buffer) - (let* ((window (get-buffer-window buffer)) - (name (buffer-name buffer))) - (when window - (cons name window)))) - eshell-buffers))) - - (eshell-names (seq-filter (lambda (buffer) (not (eq buffer (buffer-name (current-buffer))))) - (mapcar (lambda (buffer) (buffer-name buffer)) eshell-buffers))) - - (selected-buffer (if (length> eshell-buffers 1) - (completing-read "Select eshell buffer: " eshell-names) - (car eshell-buffers))) - (selected-window (if (length> eshell-windows 1) - (cdr (assoc (completing-read "Select window to place the buffer in: " eshell-windows) eshell-windows)) - (cdar eshell-windows)))) - (if selected-window - (progn - (select-window selected-window) - (switch-to-buffer selected-buffer)) - (switch-to-buffer-other-window selected-buffer)))) - - (defun spl3g/rename-current-eshell () - "Add NAME in <> to the current project eshell buffer" - (interactive) - (let* ((eshell-buffers (seq-filter (lambda (buffer) - (eq (with-current-buffer buffer major-mode) - 'eshell-mode)) - (buffer-list))) - (eshell-names (mapcar (lambda (buffer) (buffer-name buffer)) eshell-buffers)) - (eshell-windows (remove nil (mapcar (lambda (buffer) - (let* ((window (get-buffer-window buffer)) - (name (buffer-name buffer))) - (when window - (cons name window)))) - eshell-buffers))) - (selected-window (if (and (sequencep eshell-windows) (length> eshell-windows 1)) - (assoc (completing-read "Select window to place the buffer in: " eshell-windows) eshell-windows) - (car eshell-windows))) - (additional-name (when selected-window - (read-string "Additional name: "))) - (buffer-name (when selected-window - (car (split-string (car selected-window) "<")))) - (formatted-name (if (length> additional-name 0) - (format "%s<%s>" buffer-name additional-name) - buffer-name)) - ) - (if selected-window - (with-current-buffer (car selected-window) - (rename-buffer formatted-name)) - (message "No eshell buffers"))))) - - -(use-package eat - :hook - (eshell-load . eat-eshell-mode) - (eshell-load . eat-eshell-visual-command-mode) - :custom - (eat-enable-auto-line-mode t) - :custom-face - (ansi-color-bright-blue ((t (:inherit 'ansi-color-blue)))) - (ansi-color-bright-red ((t (:inherit 'ansi-color-red)))) - (ansi-color-bright-red ((t (:inherit 'ansi-color-red)))) - (ansi-color-bright-cyan ((t (:inherit 'ansi-color-cyan)))) - (ansi-color-bright-black ((t (:inherit 'ansi-color-black)))) - (ansi-color-bright-green ((t (:inherit 'ansi-color-green)))) - (ansi-color-bright-white ((t (:inherit 'ansi-color-white)))) - (ansi-color-bright-yellow ((t (:inherit 'ansi-color-yellow)))) - (ansi-color-bright-magenta ((t (:inherit 'ansi-color-magenta))))) - - -(use-package eshell-syntax-highlighting - :hook (eshell-mode . eshell-syntax-highlighting-mode)) - - - -;;; Programming things - - -(use-package tempel - :ensure t - ;; By default, tempel looks at the file "templates" in - ;; user-emacs-directory, but you can customize that with the - ;; tempel-path variable: - ;; :custom - ;; (tempel-path (concat user-emacs-directory "custom_template_file")) - :bind (("M-*" . tempel-insert) - ("M-+" . tempel-complete) - :map tempel-map - ("C-c RET" . tempel-done) - ("C-<down>" . tempel-next) - ("C-<up>" . tempel-previous) - ("M-<down>" . tempel-next) - ("M-<up>" . tempel-previous)) - :custom - (tempel-trigger-prefix "<") - :init - ;; Make a function that adds the tempel expansion function to the - ;; list of completion-at-point-functions (capf). - (defun tempel-setup-capf () - (add-hook 'completion-at-point-functions #'tempel-expand -1 'local)) - ;; Put tempel-expand on the list whenever you start programming or - ;; writing prose. - (add-hook 'prog-mode-hook 'tempel-setup-capf) - (add-hook 'text-mode-hook 'tempel-setup-capf)) - -(use-package tempel-collection - :ensure t - :after tempel) - -(use-package lsp-snippet-tempel - :ensure (:host github :repo "tpeacock19/lsp-snippet") - :config - (lsp-snippet-tempel-eglot-init)) - - -(use-package apheleia - :hook (prog-mode-hook . apheleia-mode) - :config - (push '(alejandra . ("alejandra")) apheleia-formatters) - (setf (alist-get 'nix-mode apheleia-mode-alist) '(alejandra))) - - -(use-package envrc - :mode ("\\.envrc\\.?[[:alpha:]]*\\'" . envrc-file-mode) - :hook (elpaca-after-init . envrc-global-mode) - :bind-keymap - ("C-c e" . envrc-command-map)) - - -(use-package scratch - :commands scratch) - - -(use-package transient) - -(use-package magit - :after transient - :bind (("C-c o g" . magit))) - - -(use-package treesit-auto - :hook (elpaca-after-init . global-treesit-auto-mode) - :custom - (treesit-auto-install 'prompt) - :config - (treesit-auto-add-to-auto-mode-alist 'all) - (delete 'html treesit-auto-langs)) - - -(keymap-global-set "C-c c c" 'compile) -(keymap-global-set "C-c c r" 'recompile) - - -(defun colorize-compilation-buffer () - (ansi-color-apply-on-region compilation-filter-start (point))) -(add-hook 'compilation-filter-hook 'colorize-compilation-buffer) - - - -;; LSP shit -(use-package eglot - :ensure nil - :bind (:map eglot-mode-map - ("C-c s a" . eglot-code-actions) - ("C-c s r" . eglot-rename) - ("C-c s h" . eldoc) - ("C-c s f" . eglot-format) - ("C-c s F" . eglot-format-buffer) - ("C-c s d" . xref-find-definitions-at-mouse) - ("C-c s R" . eglot-reconnect)) - :custom - (completion-category-overrides '((eglot (styles prescient)) - (eglot-capf (styles prescient)))) - :config - (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster) - - (setq-default - eglot-workspace-configuration - `(:nixd ( :nixpkgs (:expr "import <nixpkgs> { }") - :formatting (:command ["nixpkgs-fmt"]) - :options ( :nixos (:expr "(builtins.getFlake \"/home/jerpo/nixfiles\").nixosConfigurations.ltrr-mini.options") - :home-manager (:expr "(builtins.getFlake \"/home/jerpo/nixfiles\").homeConfigurations.\"jerpo@ltrr-mini\".options")))))) - - -(use-package dumb-jump - :commands (dumb-jump-xref-activate) - :custom - (dumb-jump-force-searcher 'rg) - :init - (add-hook 'xref-backend-functions #'dumb-jump-xref-activate)) - - -(use-package dape) - - - -;;; Languages -(use-package web-mode - :mode - ("\\.html\\'" - "\\.phtml\\'" - "\\.tpl\\.php\\'" - "\\.[agj]sp\\'" - "\\.as[cp]x\\'" - "\\.erb\\'" - "\\.mustache\\'" - "\\.djhtml\\'") - :hook - (eb-mode . (lambda () (electric-pair-local-mode -1))) - :custom - (web-mode-markup-indent-offset tab-width) - (web-mode-css-indent-offset tab-width) - (web-mode-code-indent-offset tab-width) - (web-mode-script-padding tab-width) - (web-mode-style-padding tab-width) - :init - - (define-derived-mode vue-mode web-mode "Vue") - (add-to-list 'auto-mode-alist '("\\.vue\\'" . vue-mode)) - (add-hook 'vue-mode-hook - (lambda () - (with-eval-after-load 'eglot - (defun vue-eglot-init-options () - "Set SDK path and default options." - (let ((tsdk-path (expand-file-name - "lib/node_modules/typescript/lib/" - (inheritenv (shell-command-to-string - (string-join '("nix-store --query --references $(which vue-language-server)" - "xargs -n1 nix-store -q --referrers" - "grep typescript" - "head -n1" - "tr -d '\n'") - " | ")))))) - `( :typescript (:tsdk ,tsdk-path) - :hybridMode :json-false))) - (setf (alist-get 'vue-mode eglot-server-programs) ;; nix-env -iA nixpkgs.nodePackages.volar - `("vue-language-server" "--stdio" :initializationOptions ,(vue-eglot-init-options)))))) - - (define-derived-mode svelte-mode web-mode "Svelte") - (add-to-list 'auto-mode-alist '("\\.svelte\\'" . svelte-mode)) - (with-eval-after-load 'eglot - (add-to-list 'eglot-server-programs `(svelte-mode "svelteserver" "--stdio")))) - -(use-package emmet-mode - :hook (web-mode . emmet-mode)) - - -(use-package nix-mode - :mode ("\\.nix\\'" "\\.nix.in\\'")) - - -(use-package typescript-ts-mode - :ensure nil - :mode ("\\.ts\\'") - :hook (typescript-ts-mode . (lambda () (setq-local forward-sexp-function nil))) - :custom - (typescript-ts-mode-indent-offset tab-width)) - - -(use-package go-ts-mode - :ensure nil - :custom - (go-ts-mode-indent-offset tab-width)) - -(use-package c-ts-mode - :ensure nil - :hook (c-ts-mode . (lambda () (apheleia-mode -1)))) - -(use-package c-mode - :ensure nil - :hook (c-mode . (lambda () (apheleia-mode -1))) - :mode ("\\.c\\'")) - - -(use-package markdown-mode - :mode ("\\.md\\'")) - - -(use-package conf-unix-mode - :ensure nil - :mode ("\\.env\\.?[[:alpha:]]*\\'")) - - -(use-package sql-indent - :hook (sql-mode . sqlind-minor-mode)) - -(setopt sql-connection-alist - '(("postgres-sirius" - (sql-product 'postgres) - (sql-user "college") - (sql-server "127.0.0.1") - (sql-database "coll") - (sql-port 5432)))) - -(setopt sql-sqlite-program "sqlite3") - - -(use-package elm-mode - :mode "\\.elm\\'") - - -(use-package zig-ts-mode - :mode "\\.zig\\'") - - -(use-package verb - :after org - :config (define-key org-mode-map (kbd "C-c C-r") verb-command-map)) - - - -;; Notetaking - - -(use-package org-mode - :ensure nil - :hook (org-mode . variable-pitch-mode) - :custom - (org-startup-indented t) - :mode "\\.org\\'" - :config - (set-face-attribute 'org-table nil :inherit 'fixed-pitch)) - - -(use-package writeroom-mode - :custom - (writeroom-global-effects nil) - (writeroom-maximize-window nil)) - - -(use-package denote - :commands (denote denote-create-note denote-journal-extras-new-entry)) - - - -;; Other - - -(use-package kubel - :commands (kubel) - :hook (kubel-mode . hl-line-mode) - :bind ((:map kubel-mode-map - ("N" . kubel-set-namespace) - ("P" . kubel-port-forward-pod) - ("n" . #'next-line) - ("p" . #'previous-line))) - :custom-face - (kubel-status-completed ((t (:inherit 'font-lock-keyword-face :weight bold)))) - (kubel-status-terminating ((t (:inherit 'font-lock-variable-use-face :weight bold))))) - -(provide 'init) -;;; init.el ends here. diff --git a/home-manager/homeModules/emacs/templates.eld b/home-manager/homeModules/emacs/templates.eld deleted file mode 100644 index 138888f..0000000 --- a/home-manager/homeModules/emacs/templates.eld +++ /dev/null @@ -1,18 +0,0 @@ -nix-mode - -(opt "{ pkgs, config, lib, ... }:" - n - n "{" - n> "options = {" - n> (p "option name" name) ".enable = lib.mkEnableOption \"enable " (s name) "\";" - n " };" - n> "config = lib.mkIf config." (s name) ".enable {" - n> q - n " };" - n "}") - -python-ts-mode - -(view "class " (s name) "ViewSet(viewsets.ModelViewSet):" - n> "queryset = " (s name) ".objects.all()" - n> "serializer_class = " (s name) "Serializer") |
