248 lines
8.7 KiB
EmacsLisp
248 lines
8.7 KiB
EmacsLisp
;;; Elpaca
|
|
|
|
(defvar elpaca-installer-version 0.8)
|
|
(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
|
|
: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)
|
|
(load "./elpaca-autoloads")))
|
|
(add-hook 'after-init-hook #'elpaca-process-queues)
|
|
(elpaca `(,@elpaca-order))
|
|
|
|
;; Install use-package support
|
|
(elpaca elpaca-use-package
|
|
;; Enable use-package :ensure support for Elpaca.
|
|
(elpaca-use-package-mode))
|
|
|
|
(use-package evil
|
|
:ensure t
|
|
:demand t
|
|
:init
|
|
(evil-mode 1)
|
|
:config
|
|
(define-key evil-normal-state-map (kbd "C-h") 'evil-window-left)
|
|
(define-key evil-normal-state-map (kbd "C-j") 'evil-window-down)
|
|
(define-key evil-normal-state-map (kbd "C-k") 'evil-window-up)
|
|
(define-key evil-normal-state-map (kbd "C-l") 'evil-window-right))
|
|
|
|
(use-package nord-theme
|
|
:ensure t
|
|
:demand t
|
|
:init
|
|
(add-to-list 'custom-theme-load-path (expand-file-name "~/.emacs.d/themes/"))
|
|
(load-theme 'nord t))
|
|
|
|
(use-package vterm
|
|
:ensure t
|
|
:hook (vterm-mode . (lambda () (display-line-numbers-mode -1))))
|
|
|
|
(use-package toggle-term
|
|
:bind (("M-\\" . toggle-term-vterm))
|
|
:config
|
|
(setq toggle-term-size 25)
|
|
(setq toggle-term-switch-upon-toggle t)
|
|
:hook
|
|
(vterm-mode . (lambda ()
|
|
;; Ensure M-\ toggles vterm even when inside vterm
|
|
(define-key vterm-mode-map (kbd "M-\\") 'toggle-term-vterm)
|
|
(display-line-numbers-mode -1)
|
|
)))
|
|
|
|
(use-package all-the-icons
|
|
:ensure t
|
|
:demand t)
|
|
|
|
(use-package dirvish
|
|
:ensure t
|
|
:demand t
|
|
:init
|
|
(dirvish-override-dired-mode)
|
|
:custom
|
|
(dirvish-quick-access-entries ; It's a custom option, `setq' won't work
|
|
'(("h" "~/" "Home")
|
|
("d" "~/Downloads/" "Downloads")
|
|
("m" "/mnt/" "Drives")
|
|
("t" "~/.local/share/Trash/files/" "TrashCan")))
|
|
:config
|
|
;; (dirvish-peek-mode) ; Preview files in minibuffer
|
|
;; (dirvish-side-follow-mode) ; similar to `treemacs-follow-mode'
|
|
(setq dirvish-mode-line-format
|
|
'(:left (sort symlink) :right (omit yank index)))
|
|
(setq dirvish-attributes
|
|
'(all-the-icons file-time file-size collapse subtree-state vc-state git-msg))
|
|
(setq delete-by-moving-to-trash t)
|
|
(setq dired-listing-switches
|
|
"-l --almost-all --human-readable --group-directories-first --no-group")
|
|
(setq dired-mouse-drag-files t) ; added in Emacs 29
|
|
(setq mouse-drag-and-drop-region-cross-program t) ; added in Emacs 29
|
|
(setq dirvish-default-layout '(0 0 0))
|
|
:bind ; Bind `dirvish|dirvish-side|dirvish-dwim' as you see fit
|
|
(("M-f" . dirvish-side)
|
|
:map dirvish-mode-map ; Dirvish inherits `dired-mode-map'
|
|
("a" . dirvish-quick-access)
|
|
("f" . dirvish-file-info-menu)
|
|
("y" . dirvish-yank-menu)
|
|
("N" . dirvish-narrow)
|
|
("^" . dirvish-history-last)
|
|
("h" . dirvish-history-jump) ; remapped `describe-mode'
|
|
("s" . dirvish-quicksort) ; remapped `dired-sort-toggle-or-edit'
|
|
("v" . dirvish-vc-menu) ; remapped `dired-view-file'
|
|
("TAB" . dirvish-subtree-toggle)
|
|
("C-i" . dirvish-history-go-forward)
|
|
("C-o" . dirvish-history-go-backward)
|
|
("M-l" . dirvish-ls-switches-menu)
|
|
("M-m" . dirvish-mark-menu)
|
|
("M-t" . dirvish-layout-toggle)
|
|
("M-s" . dirvish-setup-menu)
|
|
("M-e" . dirvish-emerge-menu)
|
|
("M-j" . dirvish-fd-jump)))
|
|
|
|
(use-package lambda-line
|
|
:ensure (:host github :repo "lambda-emacs/lambda-line")
|
|
:custom
|
|
(lambda-line-position 'bottom) ;; Set position of status-line
|
|
(lambda-line-abbrev t) ;; abbreviate major modes
|
|
(lambda-line-hspace " ") ;; add some cushion
|
|
(lambda-line-prefix t) ;; use a prefix symbol
|
|
(lambda-line-prefix-padding nil) ;; no extra space for prefix
|
|
(lambda-line-status-invert nil) ;; no invert colors
|
|
(lambda-line-gui-ro-symbol " ") ;; symbols
|
|
(lambda-line-gui-mod-symbol " ")
|
|
(lambda-line-gui-rw-symbol " ")
|
|
(lambda-line-space-top +.50) ;; padding on top and bottom of line
|
|
(lambda-line-space-bottom -.50)
|
|
(lambda-line-symbol-position 0.1) ;; adjust the vertical placement of symbol
|
|
:config
|
|
;; activate lambda-line
|
|
(lambda-line-mode)
|
|
;; set divider line in footer
|
|
(when (eq lambda-line-position 'top)
|
|
(setq-default mode-line-format (list "%_"))
|
|
(setq mode-line-format (list "%_"))))
|
|
|
|
;; LSP
|
|
(use-package lsp-mode
|
|
:ensure t
|
|
:demand t
|
|
:hook
|
|
(c-mode . lsp)
|
|
:commands lsp)
|
|
|
|
(use-package lsp-ui
|
|
:ensure t
|
|
:demand t
|
|
:commands lsp-ui-mode)
|
|
|
|
;; Projectile
|
|
(use-package projectile
|
|
:ensure t
|
|
:demand t
|
|
:)
|
|
|
|
;;; Other
|
|
|
|
;; TODO:
|
|
;;
|
|
;; Projectile + vertico/ivy?
|
|
;; Indent lines
|
|
;; Treesitter?
|
|
;;
|
|
;; Minimap
|
|
|
|
;; Window
|
|
(setq initial-frame-alist
|
|
(append initial-frame-alist
|
|
'((width . 100)
|
|
(height . 50))))
|
|
|
|
;; Backups
|
|
(setq backup-directory-alist `(("." . "/tmp")))
|
|
|
|
;; Line numbers
|
|
(setq-default display-line-numbers-width 5)
|
|
(global-display-line-numbers-mode)
|
|
|
|
;; Highlight
|
|
(global-hl-line-mode)
|
|
|
|
;; Font
|
|
(custom-set-faces
|
|
;; custom-set-faces was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
'(default ((t (:family "CommitMono" :foundry " " :slant normal :weight bold :height 98 :width normal)))))
|
|
|
|
;; UI
|
|
(menu-bar-mode -1)
|
|
(tool-bar-mode -1)
|
|
(scroll-bar-mode -1)
|
|
|
|
;; Fix resizing
|
|
(setq frame-resize-pixelwise t)
|
|
|
|
;; Disable bell
|
|
(setq visible-bell t)
|
|
|
|
;; Scroll
|
|
(setq-default scroll-conservatively 101)
|
|
(setq scroll-margin 5)
|
|
|
|
;;disable splash screen and startup message
|
|
(setq inhibit-startup-message t)
|
|
(setq initial-scratch-message nil)
|
|
|
|
;;; Startup
|
|
|
|
(setq elpaca-after-init-time (or elpaca-after-init-time (current-time)))
|
|
(elpaca-wait)
|
|
|
|
;; Open Dirvish on startup if no file is specified
|
|
(defun open-dirvish-on-startup ()
|
|
"Open Dirvish if no files are specified in the command line arguments."
|
|
(when (and (not (member "--file" command-line-args))
|
|
(null (buffer-file-name (current-buffer)))
|
|
(equal (buffer-name) "*scratch*"))
|
|
(dirvish)))
|
|
|
|
(add-hook 'emacs-startup-hook #'open-dirvish-on-startup)
|
|
(custom-set-variables
|
|
;; custom-set-variables was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
'(warning-suppress-types '((use-package) (use-package))))
|
|
|
|
;; LSP
|
|
(add-to-list 'load-path (expand-file-name "lib/lsp-mode" user-emacs-directory))
|
|
(add-to-list 'load-path (expand-file-name "lib/lsp-mode/clients" user-emacs-directory))
|