;;; 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 :ensure t :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") :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 "%_")))) ;;; Other ;; 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))))