diff --git a/emacs/custom.el b/emacs/custom.el new file mode 100644 index 0000000..dd85b20 --- /dev/null +++ b/emacs/custom.el @@ -0,0 +1,9 @@ +;;; custom.el --- custom faces +;;; Commentary: +;;; Code: + +(custom-set-faces + '(hl-line ((t (:extend t :background "#3a3a3a")))) + '(line-number ((t (:background "#1d2021" :foreground "#7c6f64"))))) + +;;; custom.el ends here diff --git a/emacs/init.el b/emacs/init.el index 5fc9f57..4f240a0 100644 --- a/emacs/init.el +++ b/emacs/init.el @@ -1,293 +1,73 @@ -;;; init.el --- tavo's emacs configs +;;; init.el --- Tavo's emacs config ;;; Commentary: ;;; Code: -;; MELPA - -(require 'package) -(add-to-list 'package-archives - '("melpa" . "https://melpa.org/packages/")) -(package-initialize) -;;(package-refresh-contents) - -;; Install packages - -(unless (package-installed-p 'use-package) - (package-install 'use-package)) - -(unless (package-installed-p 'gruvbox-theme) - (package-install 'gruvbox-theme)) - -(unless (package-installed-p 'nerd-icons) - (package-install 'nerd-icons)) - -(unless (package-installed-p 'rainbow-mode) - (package-install 'rainbow-mode)) - -(unless (package-installed-p 'dashboard) - (package-install 'dashboard)) - -(unless (package-installed-p 'undo-tree) - (package-install 'undo-tree)) -(require 'undo-tree) -(global-undo-tree-mode) - -(unless (package-installed-p 'goto-chg) - (package-install 'goto-chg)) - -(unless (package-installed-p 'flycheck) - (package-install 'flycheck)) - -(unless (package-installed-p 'ess) - (package-install 'ess)) - -(unless (package-installed-p 'all-the-icons) - (package-install 'all-the-icons)) - -(unless (package-installed-p 'all-the-icons-dired) - (package-install 'all-the-icons-dired)) - -(unless (package-installed-p 'evil-collection) - (package-install 'evil-collection)) -(setq evil-want-keybinding nil) - -(unless (package-installed-p 'evil) - (package-install 'evil)) -(require 'evil) -(evil-mode 1) -(evil-set-undo-system 'undo-redo) - -(unless (package-installed-p 'general) - (package-install 'general)) - -;; Configure packages - -(use-package evil-collection - :after evil - :config - (setq evil-collection-mode-list '(dashboard dired ibuffer)) - (evil-collection-init)) - -(use-package evil - :init - (setq evil-want-integration t) - (setq evil-want-keybinding t) - (setq evil-vsplit-window-right t) - (setq evil-split-window-below t) - (evil-mode)) - -(use-package all-the-icons - :ensure t - :if (display-graphic-p)) - -(use-package all-the-icons-dired - :hook (dired-mode . (lambda () (all-the-icons-dired-mode t)))) - -(use-package eshell-syntax-highlighting - :after esh-mode - :config - (eshell-syntax-highlighting-global-mode +1)) - -(use-package rainbow-mode - :hook org-mode prog-mode) - -(use-package flycheck - :ensure t - :defer t - :diminish - :init (global-flycheck-mode)) - -;; Functions - -(defvar shell-pop-last-buffer nil) -(defvar shell-pop-last-window nil) -(defvar shell-pop-window-height 30) ; percentage for shell-buffer window height -(defvar shell-pop-window-position "bottom") - -(defvar shell-pop-internal-mode "shell") -(defvar shell-pop-internal-mode-buffer "*shell*") -(defvar shell-pop-internal-mode-func '(lambda () (shell))) -(defvar shell-pop-internal-mode-shell "/bin/bash") - -(defvar shell-pop-internal-mode-list - (list - ; mode, buffer, function - '("shell" "*shell*" '(lambda () (shell))) - '("terminal" "*terminal*" '(lambda () (term shell-pop-internal-mode-shell))) - '("ansi-term" "*ansi-term*" '(lambda () (ansi-term shell-pop-internal-mode-shell))) - '("eshell" "*eshell*" '(lambda () (eshell))))) - -(defun shell-pop-set-window-height (number) - (interactive "nInput the number for the percentage of \ -selected window height (10-100): ") - (setq shell-pop-window-height number)) - -(defun shell-pop-set-window-position (position) - (interactive "sInput the position for shell-pop (top|bottom): ") - (setq shell-pop-window-position position)) - -(defun shell-pop-set-internal-mode (mode) - (interactive "sInput your favorite mode (shell|terminal|ansi-term|eshell): ") - (if (catch 'found - (dolist (l shell-pop-internal-mode-list) - (if (string-match mode (car l)) - (progn - (setq shell-pop-internal-mode-buffer (nth 1 l)) - (setq shell-pop-internal-mode-func (nth 2 l)) - (throw 'found t))))) - t - nil)) - -(defun shell-pop-set-internal-mode-shell (shell) - (interactive (list (read-from-minibuffer "Input your favorite shell:" - shell-pop-internal-mode-shell))) - (setq shell-pop-internal-mode-shell shell)) - -(defun shell-pop () - (interactive) - (if (equal (buffer-name) shell-pop-internal-mode-buffer) - (shell-pop-out) - (shell-pop-up))) - -(defun shell-pop-up () - (let ((w (get-buffer-window shell-pop-internal-mode-buffer))) - (if w - (select-window w) - (progn - ; save shell-pop-last-buffer and shell-pop-last-window to return - (setq shell-pop-last-buffer (buffer-name)) - (setq shell-pop-last-window (selected-window)) - (if (not (eq shell-pop-window-height 100)) - (progn - (split-window (selected-window) - (if (string= shell-pop-window-position "bottom") - (round (* (window-height) - (/ (- 100 shell-pop-window-height) 100.0))) - (round (* (window-height) (/ shell-pop-window-height 100.0))))) - (if (string= shell-pop-window-position "bottom") - (other-window 1)))) - (if (not (get-buffer shell-pop-internal-mode-buffer)) - (funcall (eval shell-pop-internal-mode-func)) - (switch-to-buffer shell-pop-internal-mode-buffer)))))) - -(defun shell-pop-out () - (if (not (eq shell-pop-window-height 100)) - (progn - (delete-window) - (if (string= shell-pop-window-position "bottom") - (select-window shell-pop-last-window)))) - (switch-to-buffer shell-pop-last-buffer)) - -(require 'windmove) - -(defun buf-move-up () - (interactive) - (let* ((other-win (windmove-find-other-window 'up)) - (buf-this-buf (window-buffer (selected-window)))) - (if (null other-win) - (error "No window above this one") - (set-window-buffer (selected-window) (window-buffer other-win)) - (set-window-buffer other-win buf-this-buf) - (select-window other-win)))) - -(defun buf-move-down () - (interactive) - (let* ((other-win (windmove-find-other-window 'down)) - (buf-this-buf (window-buffer (selected-window)))) - (if (or (null other-win) - (string-match "^ \\*Minibuf" (buffer-name (window-buffer other-win)))) - (error "No window under this one") - (set-window-buffer (selected-window) (window-buffer other-win)) - (set-window-buffer other-win buf-this-buf) - (select-window other-win)))) - -(defun buf-move-left () - (interactive) - (let* ((other-win (windmove-find-other-window 'left)) - (buf-this-buf (window-buffer (selected-window)))) - (if (null other-win) - (error "No left split") - (set-window-buffer (selected-window) (window-buffer other-win)) - (set-window-buffer other-win buf-this-buf) - (select-window other-win)))) - -(defun buf-move-right () - (interactive) - (let* ((other-win (windmove-find-other-window 'right)) - (buf-this-buf (window-buffer (selected-window)))) - (if (null other-win) - (error "No right split") - (set-window-buffer (selected-window) (window-buffer other-win)) - (set-window-buffer other-win buf-this-buf) - (select-window other-win)))) - -(defun reload-init-file () - (interactive) - (load-file user-init-file) - (load-file user-init-file)) - -;; Keybinds - -(setq scroll-step 1 - scroll-conservatively 10000) - -(use-package general - :config - (general-evil-setup) - - (general-create-definer leader-keys - :states '(normal insert visual emacs) - :keymaps 'override - :prefix "C-w" - :global-prefix "C-w") - - (leader-keys - ;; Splits - "h" '(evil-window-left :wk "Buffer focus left") - "j" '(evil-window-down :wk "Buffer focus down") - "k" '(evil-window-up :wk "Buffer focus up") - "l" '(evil-window-right :wk "Buffer focus right") - "H" '(buf-move-left :wk "Buffer focus left") - "J" '(buf-move-down :wk "Buffer focus down") - "K" '(buf-move-up :wk "Buffer focus up") - "L" '(buf-move-right :wk "Buffer focus right") - ;; Common - "f" '(find-file :wk "Find file") - "c" '(comment-line :wk "Comment lines") - "rr" '(reload-init-file :wk "Reload config"))) - -(global-set-key (kbd "C-g") 'shell-pop) -(global-set-key (kbd "C-") 'next-buffer) -(global-set-key (kbd "C-c") 'kill-this-buffer) -(global-set-key (kbd "C-=") 'text-scale-increase) -(global-set-key (kbd "C-+") 'text-scale-increase) -(global-set-key (kbd "C--") 'text-scale-decrease) - -;; Theming - +;; Preferences (menu-bar-mode 0) (tool-bar-mode 0) (scroll-bar-mode 0) (global-display-line-numbers-mode 1) +(setq-default display-line-numbers-width 3) (global-hl-line-mode 1) - (set-face-attribute 'default nil - :font "JetBrains Mono" - :weight 'normal) - + :font "JetBrains Mono" + :weight 'normal) (set-face-attribute 'fixed-pitch nil - :font "JetBrains Mono" - :weight 'normal) - + :font "JetBrains Mono" + :weight 'normal) (set-face-attribute 'font-lock-comment-face nil - :slant 'italic) - + :slant 'italic) (add-to-list 'default-frame-alist '(font . "JetBrains Mono-10")) +(setq scroll-step 1 + scroll-conservatively 10000) +(delete-selection-mode 1) +(electric-indent-mode -1) +(electric-pair-mode 1) -(load-theme 'gruvbox-dark-hard t) +;; Package manager +(require 'package) +(setq package-archives + '(("melpa" . "https://melpa.org/packages/") + ("elpa" . "https://elpa.gnu.org/packages/"))) +(package-initialize) +(unless (package-installed-p 'use-package) + (package-refresh-contents) + (package-install 'use-package)) +(eval-when-compile (require 'use-package)) +;; Packages +(dolist (pkg '(gruvbox-theme evil evil-collection nerd-icons all-the-icons all-the-icons-dired)) + (unless (package-installed-p pkg) + (package-install pkg))) + +;; evil +(use-package evil + :demand t + :bind (("" . keyboard-escape-quit)) + :init + (setq evil-want-integration t + evil-want-keybinding nil + evil-vsplit-window-right t + evil-split-window-below t + evil-undo-system 'undo-redo) + (evil-mode)) +(use-package evil-collection + :after evil + :config + (add-to-list 'evil-collection-mode-list 'help) + (evil-collection-init)) + +;; Theming +(use-package gruvbox-theme + :config + (load-theme 'gruvbox-dark-hard t)) +(use-package all-the-icons + :ensure t + :if (display-graphic-p)) +(use-package all-the-icons-dired + :hook (dired-mode . (lambda () (all-the-icons-dired-mode t)))) (use-package dashboard - :ensure t + :ensure t :init (setq initial-buffer-choice 'dashboard-open) (setq dashboard-set-heading-icons t) @@ -297,8 +77,20 @@ selected window height (10-100): ") (setq dashboard-startup-banner "~/.config/emacs/default.txt") (setq dashboard-items '((recents . 5)))) -(custom-set-faces - '(hl-line ((t (:extend t :background "#3a3a3a")))) - '(line-number ((t (:background "#1d2021" :foreground "#7c6f64"))))) +;; Keybinds +(global-set-key (kbd "C-") 'next-buffer) +(global-set-key (kbd "C-c") 'kill-this-buffer) +(global-set-key (kbd "C-=") 'text-scale-increase) +(global-set-key (kbd "C-+") 'text-scale-increase) +(global-set-key (kbd "C--") 'text-scale-decrease) + +(use-package flycheck + :ensure t + :defer t + :diminish + :init (global-flycheck-mode)) + +(setq custom-file (concat user-emacs-directory "custom.el")) +(load custom-file 'noerror) ;;; init.el ends here