From 2f8a11d905f018e41e9cf3a7e70edf48d30e258f Mon Sep 17 00:00:00 2001 From: Luka Jankovic Date: Fri, 27 Dec 2024 03:36:38 +0100 Subject: [PATCH] initial emacs setup --- .emacs.d/early-init.el | 1 + .emacs.d/init.el | 206 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 207 insertions(+) create mode 100644 .emacs.d/early-init.el create mode 100644 .emacs.d/init.el diff --git a/.emacs.d/early-init.el b/.emacs.d/early-init.el new file mode 100644 index 0000000..512068a --- /dev/null +++ b/.emacs.d/early-init.el @@ -0,0 +1 @@ +(setq package-enable-at-startup nil) diff --git a/.emacs.d/init.el b/.emacs.d/init.el new file mode 100644 index 0000000..e57671f --- /dev/null +++ b/.emacs.d/init.el @@ -0,0 +1,206 @@ +;;; 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))))