confi-emacs-actual/configs/init-packages.el

390 lines
12 KiB
EmacsLisp

;;; init-packages.el --- Extensiones/paquetes instalados y su configuración -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;; Aquí se encuentran los paquetes de uso general.
;;
;; Aquellos de uso más específico, por ejemplo, los que
;; pertenecen a un lenguaje de programación en específico
;; estarán en el respectivo archivo de configuración
;; para dicho uso específico.
;;; Code:
;; Intercamiar buffers de lugar
(use-package buffer-move
:defer t
:bind (("M-S-<up>" . buf-move-up)
("M-S-<down>" . buf-move-down)
("M-S-<left>" . buf-move-left)
("M-S-<right>" . buf-move-right))
)
;; Mostrar la ayuda de eldoc/documentación en un childframe
(use-package eldoc-box
:defer t
:bind ("<f1>" . eldoc-box-help-at-point))
;; AI integrada en emacs usando ollama (https://ollama.ai/)
(use-package ellama
:defer t)
;; Seleccionar por regiones (similar a mark-sexp, pero toma en cuenta hacia atrás del cursor también)
(use-package expand-region
:defer t
:bind ("C-+" . er/expand-region))
;; Major mode para archivos CSV
(use-package csv-mode
:defer t
:hook ((csv-mode . csv-align-mode)
(csv-mode . csv-header-line))
)
;; Un bonito y sencillo panel de inicio
(use-package dashboard
:defer t
:init
(dashboard-setup-startup-hook)
:config
(setq dashboard-set-file-icons t
dashboard-set-heading-icons t
dashboard-set-file-icons t
dashboard-week-agenda nil
dashboard-agenda-time-string-format "%Y-%m-%d %H:%M")
(setq dashboard-startup-banner
(expand-file-name "duck.svg" user-emacs-directory))
(setq dashboard-items '(
(agenda . 10)
;;(recents . 10)
))
)
;; Sidebar a la derecha con los archivos
(use-package dired-sidebar
:defer t
:hook (dired-mode . hl-line-mode)
:ensure t
:bind ([f9] . dired-sidebar-toggle-sidebar)
:commands (dired-sidebar-toggle-sidebar)
:config
(setq dired-sidebar-theme 'nerd
;; dired-sidebar-should-follow-file t
;; dired-sidebar-follow-file-idle-delay 0.5
))
;; Mover líneas o regiones
(use-package drag-stuff
:defer t
:hook
(elpaca-after-init . drag-stuff-global-mode)
:config
(drag-stuff-define-keys))
;; La línea bonita esa de abajo
(use-package doom-modeline
:defer t
:ensure t
:hook (elpaca-after-init . doom-modeline-mode)
:config
(setq doom-modeline-project-detection 'auto
doom-modeline-buffer-file-name-style 'relative-from-project
doom-modeline-major-mode-color-icon t
doom-modeline-buffer-modification-icon t
doom-modeline-indent-info nil
doom-modeline-persp-name t))
;; Emparejamiento automático de comillas, paréntesis, corchetes y llaves
(use-package electric-pair
:defer t
:elpaca nil
:hook (elpaca-after-init . electric-pair-mode)
:config
(setq electric-pair-delete-adjacent-pairs nil))
;; Git Gutter - Marca a la izq. si una linea ha sido agregada, editada o eliminada desde el último commit.
(use-package git-gutter
:defer t
:hook
(elpaca-after-init . global-git-gutter-mode))
;; Resalta los escapes de secuencia
(use-package highlight-escape-sequences
:defer t
:hook (prog-mode . hes-mode)
:config
(setq hes-mode-alist
`((c-mode . ,hes-c/c++/objc-escape-sequence-re)
(c++-mode . ,hes-c/c++/objc-escape-sequence-re)
(objc-mode . ,hes-c/c++/objc-escape-sequence-re)
(go-mode . ,hes-c/c++/objc-escape-sequence-re)
(php-mode . ,hes-c/c++/objc-escape-sequence-re)
(java-mode . ,hes-java-escape-sequence-re)
(clojure-mode . ,hes-java-escape-sequence-re)
(js-mode . ,hes-js-escape-sequence-re)
(js2-mode . ,hes-js-escape-sequence-re)
(ruby-mode . ,hes-ruby-escape-sequence-keywords)
(lisp-mode . ,hes-elisp-escape-sequence-re)
(lisp-interaction-mode . ,hes-elisp-escape-sequence-re)
(emacs-lisp-mode . ,hes-elisp-escape-sequence-re))
)
)
;; Mostrar lo que se está presionando en pantalla
(use-package keypression
:defer t
:config
(setq keypression-use-child-frame t
keypression-fade-out-delay 1.0
keypression-frame-justify 'keypression-left-justified
keypression-cast-command-name t
keypression-cast-command-name-format "%s %s"
keypression-combine-same-keystrokes t
keypression-x-offset 50
keypression-y-offset 100
keypression-font-face-attribute '(:width normal :height 180 :weight bold))
)
;; Generador automatizado de archivos de licencia
(use-package license-templates
:defer t)
;; Magia para git
(use-package magit
:defer t)
;; Modo markdown
(use-package markdown-mode
:defer t)
;; Multiple vterm
(use-package multi-vterm
:defer t
:bind* (("<f5>" . multi-vterm-dedicated-toggle)
("C-x tt" . multi-vterm-dedicated-toggle)
("C-x tf" . multi-vterm)
("C-x tp" . multi-vterm-project)
;;("<tab>" . vterm-send-tab)
)
:ensure t)
;; Iconos bonitos para varias cosas
(use-package nerd-icons
:defer t)
;; Usar nerd-icons en dired
(use-package nerd-icons-dired
:defer t
:hook (dired-mode . nerd-icons-dired-mode))
;; Lector EPUB
(use-package nov
:defer t)
;; Múltiples modos en un mismo buffer
(use-package polymode
:defer t)
;; Des-minifica / ordena el código
(use-package prettier
:defer t)
;; Paquete para manejo de proyectos
(use-package projectile
:defer t
:bind ("C-c p" . projectile-command-map)
:hook (elpaca-after-init . projectile-mode)
:init
(setq projectile-mode-line-prefix ""
projectile-sort-order 'recentf
projectile-use-git-grep t)
:config
;; Rutas de archivos temporales.
(setq projectile-cache-file (expand-file-name "projectile.cache" temp-dir))
(setq projectile-known-projects-file (expand-file-name
"projectile-bookmarks.eld" temp-dir))
;; Cambiar el título de la ventana de emacs
(setq frame-title-format
'(
(:eval
(let ((project-name (projectile-project-name)))
(unless (string= "-" project-name)
(format "[%s] " project-name))))
"%b"
" - Emacs")
)
(defun projectile-desktop-save-hook ()
"Nombres de los archivos de desktop-save según el nombre del proyecto."
(setq desktop-hash
(secure-hash 'md5 (concat (projectile-project-root))))
(setq
desktop-base-file-name (concat ".emacs-" desktop-hash ".desktop")
desktop-base-lock-name (concat ".emacs-" desktop-hash ".desktop" ".lock"))
)
(add-hook 'projectile-after-switch-project-hook #'projectile-desktop-save-hook)
)
;; Recentf - Guarda registro de los archivos abiertos recientemente
(use-package recentf
:defer t
:elpaca nil
:bind ("C-x C-r" . recentf-open-files)
:config
(setq recentf-save-file
(recentf-expand-file-name (concat temp-dir "/recentf")))
(recentf-mode 1))
;; Busqueda rápida con ripgrep
(use-package rg
:defer t
:defines projectile-command-map
:hook (elpaca-after-init . rg-enable-default-bindings)
:bind (:map rg-global-map
("c" . rg-dwim-current-dir)
("f" . rg-dwim-current-file)
("m" . rg-menu))
:init (setq rg-group-result t
rg-show-columns t)
:config
(cl-pushnew '("tmpl" . "*.tmpl") rg-custom-type-aliases)
(with-eval-after-load 'projectile
(bind-key "s R" #'rg-project projectile-command-map)))
;; Guardar la posición del cursor en un archivo para volver allí cuando se lo vuelva a abrir.
(use-package saveplace
:elpaca nil
:hook (elpaca-after-init . save-place-mode)
:config
(setq save-place-file (locate-user-emacs-file (concat temp-dir "/places"))))
;; Paquete para crear imágens (solo lo uso para sacar capturas SVG de emacs)
(use-package silicon
:ensure t
:defer t
:elpaca (:host github :repo "iensu/silicon-el"))
;; Mejorando el scroll
(use-package smooth-scrolling
:defer t
:hook (elpaca-after-init . smooth-scrolling-mode)
:config
(setq mouse-wheel-scroll-amount
'(8 ((shift) . 1) ((control) . nil))) ; Cambia el scroll a 8 líneas a la vez, 1 cuando se preciona SHIFT y saltos de página cuando presionas CTRL
(setq mouse-wheel-progressive-speed nil) ; Deshabilita la velocidad progresiva del scroll (mientras más scroll haces, mas rápido va)
)
;; Ayuda a manipular los archivos con líneas demasiado largas
(use-package so-long
:defer t
:elpaca nil
:bind (:map so-long-mode-map
("C-s" . isearch-forward)
("C-r" . isearch-backward))
:config
(setq so-long-variable-overrides
'((bidi-inhibit-bpa . t)
(bidi-paragraph-direction . left-to-right)
(buffer-read-only . nil)
(global-hl-line-mode . nil)
(line-move-visual . t)
(show-paren-mode . nil)
(truncate-lines . nil)
(which-func-mode . nil)))
)
;; Mecanografía
(use-package speed-type
:defer t
:hook
(speed-type-mode . (lambda ()
(display-line-numbers-mode 0)
(visual-line-mode 1)
(visual-fill-column-mode 1)))
:diminish
:config
(setq speed-type-gb-book-list '(66867 66866 66591 57303)
speed-type-min-chars 500
speed-type-max-chars 600))
;; Tree-sitter :)
(use-package treesit
:defer t
:elpaca nil
:commands (treesit-install-language-grammar nf/treesit-install-all-languages)
:config
(setq treesit-language-source-alist
'((bash . ("https://github.com/tree-sitter/tree-sitter-bash"))
(c . ("https://github.com/tree-sitter/tree-sitter-c"))
(cpp . ("https://github.com/tree-sitter/tree-sitter-cpp"))
(css . ("https://github.com/tree-sitter/tree-sitter-css"))
(go . ("https://github.com/tree-sitter/tree-sitter-go"))
(haskell . ("https://github.com/tree-sitter/tree-sitter-haskell"))
(html . ("https://github.com/tree-sitter/tree-sitter-html"))
(java . ("https://github.com/tree-sitter/tree-sitter-java"))
(javascript . ("https://github.com/tree-sitter/tree-sitter-javascript"))
(json . ("https://github.com/tree-sitter/tree-sitter-json"))
(julia . ("https://github.com/tree-sitter/tree-sitter-julia"))
(lua . ("https://github.com/Azganoth/tree-sitter-lua"))
(make . ("https://github.com/alemuller/tree-sitter-make"))
(python . ("https://github.com/tree-sitter/tree-sitter-python"))
(php . ("https://github.com/tree-sitter/tree-sitter-php"))
(ruby . ("https://github.com/tree-sitter/tree-sitter-ruby"))
(rust . ("https://github.com/tree-sitter/tree-sitter-rust"))
(sql . ("https://github.com/m-novikov/tree-sitter-sql"))
(toml . ("https://github.com/tree-sitter/tree-sitter-toml"))
(zig . ("https://github.com/GrayJack/tree-sitter-zig"))))
(defun nf/treesit-install-all-languages ()
"Install all languages specified by `treesit-language-source-alist'."
(interactive)
(let ((languages (mapcar 'car treesit-language-source-alist)))
(dolist (lang languages)
(treesit-install-language-grammar lang)
(message "`%s' parser was installed." lang)
(sit-for 0.75)))))
;; Cuando presionas enter en un bloque de comentario sigue el estilo del bloque.
;; (use-package vs-comment-return
;; :elpaca (:host github :repo "emacs-vs/vs-comment-return")
;; :defer t
;; :hook (prog-mode . vs-comment-return-mode)
;; )
;; Mostrar el último commit que modificó la linea actual
(use-package vc-msg
:defer t
:bind (("C-c v" . vc-msg-show)
("C-c C-v" . vc-msg-show))
)
;; Terminal
(use-package vterm
:ensure t
:defer t)
;; Cuando iniicias un atajo de teclas te muestra las posibilidades
(use-package which-key
:defer t
:hook (elpaca-after-init . which-key-mode))
;; Restaurar el estado de los frames
(use-package winner
:elpaca nil
:defer t
:hook (elpaca-after-init . winner-mode))
;; Emacs Start Up Profiler
(use-package esup
:defer t)
(provide 'init-packages)
;;; init-packages.el ends here