Big re-write :)

I reordered the code in a more clean an organized way. Also this improves a lot
the emacs startup time again, bucause after some updates it becomes a bit slow
with the old configuration, so i did it again in a new way.
This commit is contained in:
kj
2025-07-20 13:18:05 -03:00
parent 6ca3a756ad
commit dabaf86f28
29 changed files with 1426 additions and 838 deletions

2
.gitignore vendored
View File

@ -34,3 +34,5 @@ workspace/
/.emacs.desktop /.emacs.desktop
/.tutor/ /.tutor/
/intelephense/ /intelephense/
/auto-save-list/
/*.eld

View File

@ -11,7 +11,6 @@
;; Cliente LLM (ollama, chatgpt, gemini, etc.) ;; Cliente LLM (ollama, chatgpt, gemini, etc.)
(use-package gptel (use-package gptel
:defer t
:config :config
;; (setq gptel-model 'gemma3:4b ;; (setq gptel-model 'gemma3:4b
;; gptel-backend (gptel-make-ollama "Ollama" ;; gptel-backend (gptel-make-ollama "Ollama"

View File

@ -6,10 +6,11 @@
;;; Commentary: ;;; Commentary:
;; Configuración general de Emacs. ;; Configuración general de Emacs.
;; No incluye paquetes/extensiones, solo configuraciones generales.
;;; Code: ;;; Code:
(require 'init-functions)
;; Native compilation ;; Native compilation
(when (and (fboundp 'native-comp-available-p) (when (and (fboundp 'native-comp-available-p)
(native-comp-available-p)) (native-comp-available-p))
@ -19,131 +20,136 @@
(setq package-native-compile t) (setq package-native-compile t)
)) ))
;; Instalar elpaca.el (reemplpazando package.el) ;; Garbage Collector Magic Hack
(defvar elpaca-installer-version 0.11) (use-package gcmh
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory)) :diminish
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory)) :hook (emacs-startup . gcmh-mode)
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory)) :init
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git" (setq gcmh-idle-delay 'auto
:ref nil :depth 1 :inherit ignore gcmh-auto-idle-delay-factor 10
:files (:defaults "elpaca-test.el" (:exclude "extensions")) gcmh-high-cons-threshold #x1000000)) ; 16MB
: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))
;; Instalar use-package si no está instalado ;; Guardar la posición del cursor en un archivo para volver allí cuando se lo vuelva a abrir.
(elpaca elpaca-use-package (use-package saveplace
;; Enable :elpaca use-package keyword. :ensure nil
(elpaca-use-package-mode) :hook (after-init . save-place-mode))
;; Assume :elpaca t unless otherwise specified.
(setq elpaca-use-package-by-default t))
;; Block until current queue processed. ;; Recentf - Guarda registro de los archivos abiertos recientemente
(elpaca-wait) (use-package recentf
:ensure nil
:bind (("C-x C-r" . recentf-open-files))
:hook (after-init . recentf-mode)
:init (setq recentf-max-saved-items 300
recentf-exclude
'("\\.?cache" ".cask" "url" "COMMIT_EDITMSG\\'" "bookmarks"
"\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
"\\.?ido\\.last$" "\\.revive$" "/G?TAGS$" "/.elfeed/"
"^/tmp/" "^/var/folders/.+$" "^/ssh:" "/persp-confs/"
(lambda (file) (file-in-directory-p file package-user-dir))))
:config
(push (expand-file-name recentf-save-file) recentf-exclude)
(add-to-list 'recentf-filename-handlers #'abbreviate-file-name))
(defconst private-dir (expand-file-name "private" user-emacs-directory)) ;; Guarda el historial del minibuffer
(defconst temp-dir (format "%s/cache" private-dir) (use-package savehist
"Hostname-based elisp temp directories.") :ensure nil
:hook (after-init . savehist-mode)
:init (setq enable-recursive-minibuffers t ; Allow commands in minibuffers
history-length 1000
savehist-additional-variables '(mark-ring
global-mark-ring
search-ring
regexp-search-ring
extended-command-history)
savehist-autosave-interval 300))
;; Misc.
(use-package simple
:ensure nil
:hook ((after-init . size-indication-mode)
(text-mode . visual-line-mode))
:init
(setq column-number-mode t
line-number-mode t
kill-whole-line t ; Kill line including '\n' (C-k)
line-move-visual nil
track-eol t ; Keep cursor at end of lines. Require line-move-visual is nil.
set-mark-command-repeat-pop t) ; Repeating C-SPC after popping mark pops it again
;; Visualize TAB, (HARD) SPACE, NEWLINE
(setq-default show-trailing-whitespace nil ; Don't show trailing whitespace by default
cursor-type 'bar) ; Usar la barrita como cursor
(setq show-trailing-whitespace t)
(add-hook 'before-save-hook #'delete-trailing-whitespace nil t)
)
;; UTF-8 please ;; UTF-8 please
(set-charset-priority 'unicode) (when (fboundp 'set-charset-priority)
(setq locale-coding-system 'utf-8) ; pretty (set-charset-priority 'unicode))
(set-terminal-coding-system 'utf-8) ; pretty (set-language-environment "UTF-8")
(set-keyboard-coding-system 'utf-8) ; pretty (set-default-coding-systems 'utf-8)
(set-selection-coding-system 'utf-8) ; please (set-buffer-file-coding-system 'utf-8)
(prefer-coding-system 'utf-8) ; with sugar on top (set-clipboard-coding-system 'utf-8)
(setq default-process-coding-system '(utf-8-unix . utf-8-unix)) (set-file-name-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-next-selection-coding-system 'utf-8)
(set-selection-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(setq locale-coding-system 'utf-8)
(setq system-time-locale "C")
;; Emacs customizations ;; Misc
(when (display-graphic-p) (if (boundp 'use-short-answers)
(scroll-bar-mode -1) ; Quitar scrollbar. (setq use-short-answers t)
) (fset 'yes-or-no-p 'y-or-n-p))
(tooltip-mode -1) ; Disable tooltips. (setq-default major-mode 'text-mode
(global-display-line-numbers-mode) ; Mostar número de línea. fill-column 80
(global-so-long-mode 1) ; Abrir archivos grandes o con líneas largas en el modo so-long por defecto. tab-width 4
(show-paren-mode 1) ; Habilitar resaltado de brackets. indent-tabs-mode nil) ; Permanently indent with spaces, never with TABs
;; (global-subword-mode 1) ; Habilitar subpalabras (detectar palabras dentro de un camelCase y Pascal case.)
(pending-delete-mode t) ; Cuando selecciono un texto y escribo, el texto se borra (emacs por defecto solo escribe donde está el cursor).
;; (global-hl-line-mode) ; Resaltar línea actual por defecto.
(setq use-short-answers t) ; Usar respuesta cortas (y/n) en lugar de las largas (yes/no)
(setq-default
cursor-type 'bar ; Usar la barrita como cursor
cursor-in-non-selected-windows nil ; Desaparecer el cursor en frames no activos.
indent-tabs-mode nil ; Cambiar tabs por espacios.
inhibit-startup-message t ; Eliminar el mensaje de inicio.
)
(setq
custom-file (concat private-dir "/.custom.el") ; Cabiar la ruta del código que se genera al isntalar un theme o package
ac-ignore-case nil ; Desactivar el autocapitalizado.
ac-disable-faces nil ; Auto-complete hablitado incluso entre comillas (fuente: https://bit.ly/3a9wCB4).
tags-revert-without-query 1 ; Recargar tags (ctags) sin pedir confirmación.
)
;; Leve transparencia en emacs por defecto.
;; (set-frame-parameter nil 'alpha-background 95)
;; Font por defecto
(set-face-attribute 'default nil :font "Fira Code Retina" :height 112)
;; Backups enabled, use nil to disable (setq visible-bell t
(setq inhibit-compacting-font-caches t ; Dont compact font caches during GC
history-length 1000 delete-by-moving-to-trash t ; Deleting files go to OS's trash folder
backup-inhibited nil make-backup-files nil ; Forbide to make backup files
make-backup-files nil auto-save-default nil ; Disable auto sav
auto-save-default nil inhibit-splash-screen t
auto-save-list-file-name (concat temp-dir "/autosave") uniquify-buffer-name-style 'post-forward-angle-brackets ; Show path if names are same
create-lockfiles nil adaptive-fill-regexp "[ t]+|[ t]*([0-9]+.|*+)[ t]*"
backup-directory-alist `((".*" . ,(concat temp-dir "/backup/"))) adaptive-fill-first-line-regexp "^* *$"
auto-save-file-name-transforms `((".*" ,(concat temp-dir "/auto-save-list/") t))) sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*"
sentence-end-double-space nil
word-wrap-by-category t)
;; Configuración cuando es un server ;; Async
(defun setup-daemon () (use-package async
"Carga la configuración del modo daemon." :functions (async-bytecomp-package-mode dired-async-mode)
(message "Corriendo en modo daemon.") :init
(set-face-attribute 'default nil :font "Fira Code Retina" :height 112) (async-bytecomp-package-mode 1)
(scroll-bar-mode -1) (dired-async-mode 1))
;; Cerrar buffers al cerrar emacsclient ;; Child frame
;; (add-hook 'delete-frame-functions (use-package posframe
;; (lambda (frame) :hook (after-load-theme . posframe-delete-all)
;; (mapc 'kill-buffer (delq (get-buffer "*dashboard*") (buffer-list))) :init
;; )) (defface posframe-border
) `((t (:inherit region)))
"Face used by the `posframe' border."
:group 'posframe)
(defvar posframe-border-width 2
"Default posframe border width.")
:config
(with-no-warnings
(defun my-posframe--prettify-frame (&rest _)
(set-face-background 'fringe nil posframe--frame))
(advice-add #'posframe--create-posframe :after #'my-posframe--prettify-frame)
(if (daemonp) (defun posframe-poshandler-frame-center-near-bottom (info)
(add-hook 'after-make-frame-functions (cons (/ (- (plist-get info :parent-frame-width)
(lambda (frame) (plist-get info :posframe-width))
(with-selected-frame frame 2)
(setup-daemon)))) (/ (+ (plist-get info :parent-frame-height)
(message "Corriendo en modo normal.")) (* 2 (plist-get info :font-height)))
2)))))
(add-hook 'elpaca-after-init-hook (lambda () (load custom-file 'noerror)))
(provide 'init-base) (provide 'init-base)
;;; init-base.el ends here ;;; init-base.el ends here

View File

@ -1,4 +1,4 @@
;;; init-corfu.el --- Autocompletado con corfu -*- lexical-binding: t -*- ;;; init-completion.el --- Autocompletado con corfu -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net> ;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual ;; URL: https://git.kj2.me/kj/confi-emacs-actual
@ -15,15 +15,17 @@
;;; Code: ;;; Code:
;; childframe con los cantidatos de autocompletado
(use-package corfu (use-package corfu
:defer t
:ensure (:files (:defaults "extensions/*") :ensure (:files (:defaults "extensions/*")
:includes (corfu-info corfu-history)) :includes (corfu-info corfu-history))
:hook ((corfu-mode . corfu-popupinfo-mode)) :hook ((elpaca-after-init . global-corfu-mode)
(global-corfu-mode . corfu-popupinfo-mode))
:bind (:map corfu-map :bind (:map corfu-map
("<tab>" . corfu-quit)
("<escape>" . corfu-quit) ("<escape>" . corfu-quit)
("<SPC>" . corfu-insert-separator)) ("<SPC>" . corfu-insert-separator))
:custom-face
(corfu-border ((t (:inherit region :background unspecified))))
:custom :custom
(corfu-auto t) (corfu-auto t)
:config :config
@ -45,7 +47,6 @@
;; Cambia la forma de mostrar y buscar sugerencias (afecta a corfu, pero también a otros como vertico). ;; Cambia la forma de mostrar y buscar sugerencias (afecta a corfu, pero también a otros como vertico).
(use-package orderless (use-package orderless
:defer t
:after corfu :after corfu
:custom :custom
(completion-styles '(orderless)) ; Use orderless (completion-styles '(orderless)) ; Use orderless
@ -68,12 +69,10 @@
;; Set de funciones de para las sugerencias de corfu. ;; Set de funciones de para las sugerencias de corfu.
(use-package cape (use-package cape
:defer t
:ensure (:host github :repo "minad/cape") :ensure (:host github :repo "minad/cape")
:after corfu :after corfu
:bind (("C-c f" . cape-file) :bind (("C-c c f" . cape-file)
("C-c l" . cape-line) ("C-c c l" . cape-line))
("C-c _" . cape-tex))
:init :init
(setq text-mode-ispell-word-completion nil) (setq text-mode-ispell-word-completion nil)
;; (add-to-list 'completion-at-point-functions #'cape-line) ;; Completar línea actual en función de lo que dice otras líneas de buffer. ;; (add-to-list 'completion-at-point-functions #'cape-line) ;; Completar línea actual en función de lo que dice otras líneas de buffer.
@ -92,19 +91,35 @@
(use-package corfu-terminal (use-package corfu-terminal
:after corfu :after corfu
:ensure (:repo "https://codeberg.org/akib/emacs-corfu-terminal.git") :ensure (:repo "https://codeberg.org/akib/emacs-corfu-terminal.git")
:config :init
(corfu-terminal-mode +1)) (corfu-terminal-mode +1))
) )
;; Iconos en corfu ;; A few more useful configurations...
(use-package kind-icon (use-package emacs
:ensure t :ensure nil
:after corfu
:custom :custom
(kind-icon-default-face 'corfu-default) ; to compute blended backgrounds correctly ;; TAB cycle if there are only few candidates
:config ;; (completion-cycle-threshold 3)
(add-to-list 'corfu-margin-formatters #'kind-icon-margin-formatter))
;; Enable indentation+completion using the TAB key.
;; `completion-at-point' is often bound to M-TAB.
(tab-always-indent 'complete)
;; Emacs 30 and newer: Disable Ispell completion function. As an alternative,
;; try `cape-dict'.
(text-mode-ispell-word-completion nil)
;; Emacs 28 and newer: Hide commands in M-x which do not apply to the current
;; mode. Corfu commands are hidden, since they are not used via M-x. This
;; setting is useful beyond Corfu.
(read-extended-command-predicate #'command-completion-default-include-p))
;; Iconos en corfu
(use-package nerd-icons-corfu
:after corfu
:init (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
(provide 'init-corfu) (provide 'init-completion)
;;; init-corfu.el ends here ;;; init-completion.el ends here

View File

@ -1,69 +0,0 @@
;;; init-ctags.el --- Configuracíón de TAGS -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;; Code:
;; En esta sección está la configuración para ctags.
;; Quizá con la aparición de lsp sea menos necesaria,
;; pero dado a que sigue teniendo potencial para aportar
;; además de tener un rendimiento muy bueno es mejor
;; no dejarla de lado.
;; Ctags IDE on the True Editor
;; @see https://github.com/universal-ctags/citre#quick-start
(use-package citre
:defer t
:ensure t
:diminish
:bind (("C-x c ." . citre-jump)
("C-x c ," . citre-jump-back)
("C-x c p" . citre-peek)
("C-x c a" . citre-ace-peek)
("C-x c u" . citre-update-this-tags-file))
:init
(setq citre-auto-enable-citre-mode-modes '(prog-mode)
citre-default-create-tags-file-location 'global-cache
citre-prompt-language-for-ctags-command t)
:config
(with-no-warnings
;; Integrate with `lsp-mode' and `eglot'
(define-advice xref--create-fetcher (:around (fn &rest args) fallback)
(let ((fetcher (apply fn args))
(citre-fetcher
(let ((xref-backend-functions '(citre-xref-backend t)))
(ignore xref-backend-functions)
(apply fn args))))
(lambda ()
(or (with-demoted-errors "%s, fallback to citre"
(funcall fetcher))
(funcall citre-fetcher)))))
(defun lsp-citre-capf-function ()
"A capf backend that tries lsp first, then Citre."
(let ((lsp-result (if (fboundp #'eglot-completion-at-point)
(eglot-completion-at-point)
(when (fboundp #'lsp-completion-at-point)
(lsp-completion-at-point)))))
(if (and lsp-result
(try-completion
(buffer-substring (nth 0 lsp-result)
(nth 1 lsp-result))
(nth 2 lsp-result)))
lsp-result
(citre-completion-at-point))))
(defun enable-lsp-citre-capf-backend ()
"Enable the lsp + Citre capf backend in current buffer."
(add-hook 'completion-at-point-functions #'lsp-citre-capf-function nil t))
(add-hook 'citre-mode-hook #'enable-lsp-citre-capf-backend)
))
(provide 'init-ctags)
;;; init-ctags.el ends here

153
configs/init-editor.el Normal file
View File

@ -0,0 +1,153 @@
;; init-editor.el --- Initialize editing configurations. -*- lexical-binding: t -*-
;; Copyright (C) 2006-2025 Vincent Zhang
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;
;; Configuración en la edición de texto en general
;;
;;; Code:
;; Visor de documentos de emacs (soporta de todo: epub, pdf, odt, docx, cbz, etc.)
(use-package doc-view
:hook
(doc-view-mode . (lambda ()
(display-line-numbers-mode 0)))
:ensure nil)
;; Eliminar cuando está
(use-package delsel
:ensure nil
:hook (elpaca-after-init . delete-selection-mode))
;; Minor mode to aggressively keep your code always indented
(use-package aggressive-indent
:diminish
:autoload aggressive-indent-mode
:functions too-long-file-p
:hook ((elpaca-after-init . global-aggressive-indent-mode)
;; NOTE: Disable in large files due to the performance issues
;; https://github.com/Malabarba/aggressive-indent-mode/issues/73
(find-file . (lambda ()
(when (too-long-file-p)
(aggressive-indent-mode -1)))))
:config
;; Disable in some modes
(dolist (mode '(gitconfig-mode
asm-mode web-mode html-mode
css-mode css-ts-mode
go-mode go-ts-mode
python-ts-mode yaml-ts-mode
scala-mode
shell-mode term-mode vterm-mode
prolog-inferior-mode))
(add-to-list 'aggressive-indent-excluded-modes mode))
;; Disable in some commands
(add-to-list 'aggressive-indent-protected-commands #'delete-trailing-whitespace t)
;; Be slightly less aggressive in C/C++/C#/Java/Go/Swift
(add-to-list 'aggressive-indent-dont-indent-if
'(and (derived-mode-p 'c-mode 'c++-mode 'csharp-mode
'java-mode 'go-mode 'swift-mode)
(null (string-match "\\([;{}]\\|\\b\\(if\\|for\\|while\\)\\b\\)"
(thing-at-point 'line))))))
;; Mover líneas o regiones con M-<teclas de dirección>
(use-package drag-stuff
:diminish
:autoload drag-stuff-define-keys
:hook (elpaca-after-init . drag-stuff-global-mode)
:config
(add-to-list 'drag-stuff-except-modes 'org-mode)
(drag-stuff-define-keys))
;; A comprehensive visual interface to diff & patch
(use-package ediff
:ensure nil
:hook(;; show org ediffs unfolded
(ediff-prepare-buffer . outline-show-all)
;; restore window layout when done
(ediff-quit . winner-undo))
:config
(setq ediff-window-setup-function 'ediff-setup-windows-plain
ediff-split-window-function 'split-window-horizontally
ediff-merge-split-window-function 'split-window-horizontally))
;; Automatic parenthesis pairing
(use-package elec-pair
:ensure nil
;; :hook (elpaca-after-init . electric-pair-mode)
:init (setq electric-pair-inhibit-predicate 'electric-pair-conservative-inhibit))
;; Edit multiple regions in the same way simultaneously
(use-package iedit
:defines desktop-minor-mode-table
:bind (("C-;" . iedit-mode)
("C-x r RET" . iedit-rectangle-mode)
:map isearch-mode-map ("C-;" . iedit-mode-from-isearch)
:map esc-map ("C-;" . iedit-execute-last-modification)
:map help-map ("C-;" . iedit-mode-toggle-on-function))
:config
;; Avoid restoring `iedit-mode'
(with-eval-after-load 'desktop
(add-to-list 'desktop-minor-mode-table
'(iedit-mode nil))))
;; Seleccionar por regiones (similar a mark-sexp, pero toma en cuenta hacia atrás del cursor también)
(use-package expand-region
:functions treesit-buffer-root-node
:bind ("C-=" . er/expand-region)
:config
(defun treesit-mark-bigger-node ()
"Use tree-sitter to mark regions."
(let* ((root (treesit-buffer-root-node))
(node (treesit-node-descendant-for-range root (region-beginning) (region-end)))
(node-start (treesit-node-start node))
(node-end (treesit-node-end node)))
;; Node fits the region exactly. Try its parent node instead.
(when (and (= (region-beginning) node-start) (= (region-end) node-end))
(when-let* ((node (treesit-node-parent node)))
(setq node-start (treesit-node-start node)
node-end (treesit-node-end node))))
(set-mark node-end)
(goto-char node-start)))
(add-to-list 'er/try-expand-list 'treesit-mark-bigger-node))
;; Hungry deletion (Elimina los espacios en blancos consecutivos)
(use-package hungry-delete
:diminish
:hook (elpaca-after-init . global-hungry-delete-mode)
:init (setq hungry-delete-chars-to-skip " \t\f\v"
hungry-delete-except-modes
'(help-mode minibuffer-mode minibuffer-inactive-mode calc-mode)))
;; Mejora C-a y C-e para ir a lo que contextualmente sería el fin de la línea
(use-package mwim
:bind (([remap move-beginning-of-line] . mwim-beginning)
([remap move-end-of-line] . mwim-end)))
;; Ayuda a manipular los archivos con líneas demasiado largas
(use-package so-long
:ensure nil
:hook (after-init . global-so-long-mode)
: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))))
(provide 'init-editor)
;;; init-editor.el ends here

View File

@ -13,7 +13,6 @@
;;; Code: ;;; Code:
(use-package evil (use-package evil
:defer t
:hook ((elpaca-after-init . evil-mode) :hook ((elpaca-after-init . evil-mode)
(git-timemachine-mode . evil-emacs-state)) (git-timemachine-mode . evil-emacs-state))
:init :init
@ -81,7 +80,7 @@
;; Expand region desde motion states ;; Expand region desde motion states
(evil-define-key 'motion 'global (kbd "<leader>+") 'er/expand-region) (evil-define-key 'motion 'global (kbd "<leader>+") 'er/expand-region)
;; Identado en motion modes. ;; Indentado en motion modes.
(evil-define-key 'motion 'global (kbd "<tab>") 'indent-for-tab-command) (evil-define-key 'motion 'global (kbd "<tab>") 'indent-for-tab-command)
;; Atajos con leader key para frames ;; Atajos con leader key para frames
@ -128,15 +127,11 @@
;; Por ejemplo, para que evil-open-below funcione similar a org-return cuando ;; Por ejemplo, para que evil-open-below funcione similar a org-return cuando
;; estamos dentro de una lista. ;; estamos dentro de una lista.
(use-package evil-org (use-package evil-org
:ensure t
:defer t
:after org :after org
:hook (org-mode . evil-org-mode)) :hook (org-mode . evil-org-mode))
;; Similar a Vimtutor, pero para evil. ;; Similar a Vimtutor, pero para evil.
(use-package evil-tutor (use-package evil-tutor)
:defer t
:ensure t)
(provide 'init-evil) (provide 'init-evil)
;;; init-evil.el ends here ;;; init-evil.el ends here

View File

@ -43,9 +43,6 @@
(insert current-line) (insert current-line)
(decf n))))) (decf n)))))
;; Borrar espacios, tabs y saltos de línea innecesarios al guardar
(add-hook 'before-save-hook 'delete-trailing-whitespace)
;; Mostrar y ocultar el diff de la línea de git-gutter ;; Mostrar y ocultar el diff de la línea de git-gutter
(defun git-gutter:toggle-popup-hunk () (defun git-gutter:toggle-popup-hunk ()
"Toggle 'git-gutter' hunk window." "Toggle 'git-gutter' hunk window."
@ -58,15 +55,15 @@
(defun kj/project-name (&optional project) (defun kj/project-name (&optional project)
"Return the name for PROJECT. "Return the name for PROJECT.
If PROJECT is not specified, assume current project root." If PROJECT is not specified, assume current project root."
(when-let (root (or project (kj/project-root))) (when-let* ((root (or project (kj/project-root)))) ;; <-- ¡Aquí está el cambio!
(file-name-nondirectory (file-name-nondirectory
(directory-file-name (directory-file-name
(file-name-directory root))))) (file-name-directory root)))))
;; Obtener la raíz del proyecto desde project.el ;; Obtener la raíz del proyecto desde project.el
(defun kj/project-root () (defun kj/project-root ()
"Return the current project root." "Return the current project root."
(when-let (project (project-current)) (when-let* ((project (project-current)))
(project-root project))) (project-root project)))
;; Cambia entre ocultar o no la barra de título cuando está maximizado ;; Cambia entre ocultar o no la barra de título cuando está maximizado
@ -89,5 +86,52 @@ If PROJECT is not specified, assume current project root."
"Run `after-load-theme-hook'." "Run `after-load-theme-hook'."
(run-hooks 'after-load-theme-hook)) (run-hooks 'after-load-theme-hook))
;; Devuelve si el archivo es muy grande o no\
(defun too-long-file-p ()
"Check whether the file is too long."
(or (> (buffer-size) 500000)
(and (fboundp 'buffer-line-statistics)
(> (car (buffer-line-statistics)) 10000))))
;; Renombrar el archivo actual
(defun rename-this-file (new-name)
"Renames both current buffer and file it's visiting to NEW-NAME."
(interactive "sNew name: ")
(let ((name (buffer-name))
(filename (buffer-file-name)))
(unless filename
(error "Buffer '%s' is not visiting a file!" name))
(progn
(when (file-exists-p filename)
(rename-file filename new-name 1))
(set-visited-file-name new-name)
(rename-buffer new-name))))
;; Copiar el nombre del archivo actual
(defun copy-file-name ()
"Copy the current buffer file name to the clipboard."
(interactive)
(let ((filename (if (equal major-mode 'dired-mode)
default-directory
(buffer-file-name))))
(if filename
(progn
(kill-new filename)
(message "Copied '%s'" filename))
(warn "Current buffer is not attached to a file!"))))
;; Verifica si se puede levantar un childframe
(defun childframe-workable-p ()
"Whether childframe is workable."
(and (not noninteractive)
(not emacs-basic-display)
(or (display-graphic-p)
(featurep 'tty-child-frames))
(eq (frame-parameter (selected-frame) 'minibuffer) 't)))
(defun font-installed-p (font-name)
"Check if font with FONT-NAME is available."
(find-font (font-spec :name font-name)))
(provide 'init-functions) (provide 'init-functions)
;;; init-functions.el ends here. ;;; init-functions.el ends here.

164
configs/init-highlight.el Normal file
View File

@ -0,0 +1,164 @@
;; init-highlight.el --- Initialize highlighting configurations. -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;
;; Highlighting configurations.
;;
;;; Code:
;; Highlight the current line
(use-package hl-line
:ensure nil
:hook (((dashboard-mode eshell-mode shell-mode term-mode vterm-mode) .
(lambda () (setq-local global-hl-line-mode nil)))
;; (after-init . global-hl-line-mode)
))
;; Highlight matching parens
(use-package paren
:ensure nil
:functions childframe-workable-p
:custom-face
(show-paren-match ((((class color) (background light))
(:box (:line-width (-1 . -1) :color "gray73")))
(((class color) (background dark))
(:box (:line-width (-1 . -1) :color "gray56")))))
:hook (after-init . show-paren-mode)
:init (setq show-paren-when-point-inside-paren t
show-paren-when-point-in-periphery t)
:config
(setq blink-matching-paren-highlight-offscreen t
show-paren-context-when-offscreen
(if (childframe-workable-p) 'child-frame 'overlay))
(with-no-warnings
;; Display matching line for off-screen paren.
(defun display-line-overlay (pos str &optional face)
"Display line at POS as STR with FACE.
FACE defaults to inheriting from default and highlight."
(let ((ol (save-excursion
(goto-char pos)
(make-overlay (line-beginning-position)
(line-end-position)))))
(overlay-put ol 'display str)
(overlay-put ol 'face
(or face '(:inherit highlight)))
ol))
(defvar-local show-paren--off-screen-overlay nil)
(defun show-paren-off-screen (&rest _args)
"Display matching line for off-screen paren."
(when (overlayp show-paren--off-screen-overlay)
(delete-overlay show-paren--off-screen-overlay))
;; Check if it's appropriate to show match info,
(when (and (overlay-buffer show-paren--overlay)
(not (or cursor-in-echo-area
executing-kbd-macro
noninteractive
(minibufferp)
this-command))
(and (not (bobp))
(memq (char-syntax (char-before)) '(?\) ?\$)))
(= 1 (logand 1 (- (point)
(save-excursion
(forward-char -1)
(skip-syntax-backward "/\\")
(point))))))
;; Rebind `minibuffer-message' called by `blink-matching-open'
;; to handle the overlay display.
(cl-letf (((symbol-function #'minibuffer-message)
(lambda (msg &rest args)
(let ((msg (apply #'format-message msg args)))
(setq show-paren--off-screen-overlay
(display-line-overlay
(window-start) msg ))))))
(blink-matching-open))))
(advice-add #'show-paren-function :after #'show-paren-off-screen)))
;; Resalta los escapes de secuencia
(use-package highlight-escape-sequences
: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)
(php-ts-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))
)
)
;; Resalta todas las ocurrencias del contenido seleccionado
(use-package region-occurrences-highlighter
:diminish
:bind (:map region-occurrences-highlighter-nav-mode-map
("M-n" . region-occurrences-highlighter-next)
("M-p" . region-occurrences-highlighter-prev))
:hook (elpaca-after-init . global-region-occurrences-highlighter-mode))
;; Highlight indentions
(use-package indent-bars
:custom
(indent-bars-color '(highlight :face-bg t :blend 0.225))
(indent-bars-highlight-current-depth '(:face default :blend 0.225))
(indent-bars-color-by-depth nil)
(indent-bars-pattern ".")
(indent-bars-treesit-support t)
(indent-bars-no-descend-string t)
(indent-bars-treesit-ignore-blank-lines-types '("module"))
(indent-bars-prefer-character t)
(indent-bars-treesit-scope '((python function_definition class_definition for_statement
if_statement with_statement while_statement)))
;; :hook ((prog-mode yaml-mode) . indent-bars-mode)
:config (require 'indent-bars-ts))
;; Colorize color names in buffers
(use-package colorful-mode
:diminish
:hook (after-init . global-colorful-mode)
:init (setq colorful-use-prefix t)
:config (dolist (mode '(html-mode php-mode help-mode helpful-mode))
(add-to-list 'global-colorful-modes mode)))
;; Highlight brackets according to their depth
(use-package rainbow-delimiters)
;; Resaltar palabras clave como TODO, FIXME, etc. en comentarios del código.
(use-package hl-todo
:autoload hl-todo-flymake hl-todo-search-and-highlight
:functions rg rg-read-files rg-project
:bind (:map hl-todo-mode-map
([C-f3] . hl-todo-occur))
:hook (elpaca-after-init . global-hl-todo-mode)
:init (setq hl-todo-require-punctuation t
hl-todo-highlight-punctuation ":")
:config
(add-to-list 'hl-todo-keyword-faces '("BUG" . "#d99600"))
;; Integrate into flymake
(with-eval-after-load 'flymake
(add-hook 'flymake-diagnostic-functions #'hl-todo-flymake))
;; Integrate into magit
(with-eval-after-load 'magit
(add-hook 'magit-log-wash-summary-hook
#'hl-todo-search-and-highlight t)
(add-hook 'magit-revision-wash-message-hook
#'hl-todo-search-and-highlight t))
)
(provide 'init-highlight)
;;; init-highlight.el ends here

View File

@ -28,18 +28,14 @@
(global-set-key (kbd "C-x mh") 'mhtml-mode) (global-set-key (kbd "C-x mh") 'mhtml-mode)
(global-set-key (kbd "C-x mj") 'js-mode) (global-set-key (kbd "C-x mj") 'js-mode)
(global-set-key (kbd "C-x mp") 'php-ts-mode) (global-set-key (kbd "C-x mp") 'php-ts-mode)
(global-set-key (kbd "C-x mr") 'rust-mode)
(global-set-key (kbd "C-x mw") 'web-mode) (global-set-key (kbd "C-x mw") 'web-mode)
;; Cambiar de ventana ;; Cambiar de ventana
(global-set-key (kbd "C-S-o") 'other-window) (global-set-key (kbd "C-S-o") 'other-window)
;; Saltar entre párrafos ;; Saltar entre párrafos
(define-key global-map "\M-p" 'backward-paragraph) (define-key global-map "\M-[" 'backward-paragraph)
(define-key global-map "\M-n" 'forward-paragraph) (define-key global-map "\M-]" 'forward-paragraph)
;; Meta atajos (atajos de atajos)
;;(global-set-key (kbd "C-c l d") "\C-a\C- \C-n\M-w\C-y") ; Duplicar línea
;; Deactivar el abrir *messages* al cliquear en el minibuffer ;; Deactivar el abrir *messages* al cliquear en el minibuffer
(define-key minibuffer-inactive-mode-map [mouse-1] #'ignore) (define-key minibuffer-inactive-mode-map [mouse-1] #'ignore)

View File

@ -1,4 +1,4 @@
;;; init-eglot.el --- Configuración de eglot (LSP) -*- lexical-binding: t -*- ;;; init-lsp.el --- Configuración de eglot (LSP) -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net> ;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual ;; URL: https://git.kj2.me/kj/confi-emacs-actual
@ -30,25 +30,43 @@
;;; Code: ;;; Code:
(use-package eglot (use-package eglot
:defer t
:ensure nil :ensure nil
:hook ((css-mode . eglot-ensure) :hook ((prog-mode . (lambda ()
(html-mode . eglot-ensure) (unless (derived-mode-p
(php-mode . eglot-ensure) 'emacs-lisp-mode 'lisp-mode
(php-ts-mode . eglot-ensure) 'makefile-mode 'snippet-mode
(js-mode . eglot-ensure) 'ron-mode)
(tsx-ts-mode . eglot-ensure) (eglot-ensure))))
(typescript-ts-mode . eglot-ensure) ((markdown-mode yaml-mode yaml-ts-mode) . eglot-ensure))
(rust-mode . eglot-ensure) :init
(sh-mode . eglot-ensure)) (setq read-process-output-max (* 1024 1024)) ; 1MB
(setq eglot-autoshutdown t
eglot-events-buffer-size 0
eglot-send-changes-idle-time 0.5)
:config :config
(setq eglot-sync-connect 0) (setq eglot-sync-connect 0)
(add-to-list 'eglot-server-programs '(php-mode . ("intelephense" "--stdio"))) ;; (add-to-list 'eglot-server-programs '(php-mode . ("intelephense" "--stdio")))
(add-to-list 'eglot-server-programs
'((tsx-ts-mode
;; js-ts-mode
;; js-mode
typescript-ts-mode
typescript-mode)
.
(eglot-deno "deno" "lsp")))
(defclass eglot-deno (eglot-lsp-server) ()
:documentation "A custom class for deno lsp.")
(cl-defmethod eglot-initialization-options ((server eglot-deno))
"Passes through required deno initialization options"
(list :enable t
:lint t))
) )
;; Mejorar la velocidad de eglot (un binario en rust ) ;; Mejorar la velocidad de eglot (un binario en rust )
(use-package eglot-booster (use-package eglot-booster
:defer t
:ensure (:host github :repo "jdtsmith/eglot-booster") :ensure (:host github :repo "jdtsmith/eglot-booster")
:after eglot :after eglot
:config :config
@ -60,8 +78,6 @@
;; Emmet (mientras veo como hacer funcionar emmet-ls) ;; Emmet (mientras veo como hacer funcionar emmet-ls)
(use-package emmet-mode (use-package emmet-mode
:defer t
:after eglot
:hook :hook
((html-mode . emmet-mode) ((html-mode . emmet-mode)
(web-mode . emmet-mode)) (web-mode . emmet-mode))
@ -69,7 +85,6 @@
;; Revisar por errores en el código ;; Revisar por errores en el código
(use-package flymake (use-package flymake
:defer t
:ensure nil :ensure nil
:hook (prog-mode . (lambda () :hook (prog-mode . (lambda ()
(unless (derived-mode-p 'makefile-mode) (unless (derived-mode-p 'makefile-mode)
@ -80,10 +95,8 @@
;; Mostar los errores de flymake en un popup-tip ;; Mostar los errores de flymake en un popup-tip
(use-package flymake-diagnostic-at-point (use-package flymake-diagnostic-at-point
:defer t
:ensure t
:after flymake :after flymake
:hook (flymake-mode . flymake-diagnostic-at-point-mode)) :hook (flymake-mode . flymake-diagnostic-at-point-mode))
(provide 'init-eglot) (provide 'init-lsp)
;;; init-eglot.el ends here ;;; init-lsp.el ends here

View File

@ -10,26 +10,8 @@
;;; Code: ;;; Code:
;; UI para completado
(use-package vertico
:defer t
:bind (:map vertico-map
("RET" . vertico-directory-enter)
("DEL" . vertico-directory-delete-char)
("TAB" . minibuffer-complete)
("M-DEL" . vertico-directory-delete-word))
:hook ((elpaca-after-init . vertico-mode)
(elpaca-after-init . savehist-mode) ;; savehist sirve para recordar el último comando de M-x
(rfn-eshadow-update-overlay . vertico-directory-tidy))
:config
(setq read-file-name-completion-ignore-case t
read-buffer-completion-ignore-case t
completion-ignore-case t)
)
;; Reemplazo para counsel ;; Reemplazo para counsel
(use-package consult (use-package consult
:defer t
:bind (("C-x p" . project-find-file) :bind (("C-x p" . project-find-file)
("C-S-s" . consult-line) ("C-S-s" . consult-line)
("C-c r g" . consult-ripgrep) ("C-c r g" . consult-ripgrep)
@ -67,11 +49,11 @@
("<escape>" . minibuffer-keyboard-quit) ;; Cacelar minibuffer con escape (más rápido que C-g) ("<escape>" . minibuffer-keyboard-quit) ;; Cacelar minibuffer con escape (más rápido que C-g)
("C-<return>" . newline) ;; Insertar nueva línea estando en el minibufer (Mas rápido que C-q C-j) ("C-<return>" . newline) ;; Insertar nueva línea estando en el minibufer (Mas rápido que C-q C-j)
("C-S-s" . (lambda () ("C-S-s" . (lambda ()
"Insert the current symbol." "Insert the current symbol."
(interactive) (interactive)
(insert (save-excursion (insert (save-excursion
(set-buffer (window-buffer (minibuffer-selected-window))) (set-buffer (window-buffer (minibuffer-selected-window)))
(or (thing-at-point 'symbol t) ""))))) ;; Al presionar por segunda ves C-s busca el símbolo actual. (or (thing-at-point 'symbol t) ""))))) ;; Al presionar por segunda ves C-s busca el símbolo actual.
) )
;; Enable automatic preview at point in the *Completions* buffer. This is ;; Enable automatic preview at point in the *Completions* buffer. This is
@ -115,37 +97,39 @@
;; You may want to use `embark-prefix-help-command' or which-key instead. ;; You may want to use `embark-prefix-help-command' or which-key instead.
(define-key consult-narrow-map (vconcat consult-narrow-key "?") #'consult-narrow-help)) (define-key consult-narrow-map (vconcat consult-narrow-key "?") #'consult-narrow-help))
;; nerd-icons en ibuffer
(use-package nerd-icons-ibuffer
:defer t
:hook (ibuffer-mode . nerd-icons-ibuffer-mode))
;; Descripciones en el minibufer ;; Descripciones en el minibufer
(use-package marginalia (use-package marginalia
:defer t :hook (vertico-mode . marginalia-mode))
:hook (elpaca-after-init . marginalia-mode))
;; Nerd icons para vertico
(use-package nerd-icons-completion
:after nerd-icons
:config (nerd-icons-completion-mode))
;; Todolist de todo el projecto desde consult. ;; Todolist de todo el projecto desde consult.
(use-package consult-todo (use-package consult-todo
:demand t :demand t
:bind ("C-c t" . consult-todo) :bind ("C-c t" . consult-todo))
:defer t)
;; UI para completado del minibuffer
(use-package vertico
:bind (:map vertico-map
("RET" . vertico-directory-enter)
("DEL" . vertico-directory-delete-char)
("TAB" . minibuffer-complete)
("M-DEL" . vertico-directory-delete-word))
:hook ((elpaca-after-init . vertico-mode)
(rfn-eshadow-update-overlay . vertico-directory-tidy))
:config
(setq read-file-name-completion-ignore-case t
read-buffer-completion-ignore-case t
completion-ignore-case t)
)
;; Mover el minibufer de vertico al centro de la pantalla. ;; Mover el minibufer de vertico al centro de la pantalla.
(use-package vertico-posframe (use-package vertico-posframe
:after vertico :functions posframe-poshandler-frame-center
:config :hook (vertico-mode . vertico-posframe-mode)
(vertico-posframe-mode 1) :init (setq vertico-posframe-poshandler
(setq vertico-posframe-border-width 1) #'posframe-poshandler-frame-center
(setq vertico-posframe-parameters vertico-posframe-parameters
'((left-fringe . 8) '((left-fringe . 8)
(right-fringe . 8))) (right-fringe . 8))))
)
(provide 'init-minibuffer) (provide 'init-minibuffer)
;;; init-minibuffer.el ends here ;;; init-minibuffer.el ends here

View File

@ -21,38 +21,19 @@
"Configuración para el hook de 'org-mode'." "Configuración para el hook de 'org-mode'."
(display-line-numbers-mode 0) (display-line-numbers-mode 0)
;; (variable-pitch-mode 1)
(visual-line-mode 1) (visual-line-mode 1)
(visual-fill-column-mode 1) (visual-fill-column-mode 1)
;; Configuracin para Systanx Highlight en porg-blocks ;; Configuracin para Systanx Highlight en porg-blocks
(add-to-list 'org-src-lang-modes (cons "html" 'mhtml)) (add-to-list 'org-src-lang-modes (cons "html" 'mhtml))
;; Configuración de fonts
;; (set-face-attribute (car face) nil :font "Cantarell" :weight 'regular :height (cdr face))
;; Ensure that anything that should be fixed-pitch in Org files appears that way
;; (set-face-attribute 'org-hide nil :inherit 'fixed-pitch)
;; (set-face-attribute 'org-block nil :foreground 'unspecified :inherit 'fixed-pitch)
;; (set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch))
(setq org-fontify-quote-and-verse-blocks t) ;; Permitir configuración de bloques quote y verse. (setq org-fontify-quote-and-verse-blocks t) ;; Permitir configuración de bloques quote y verse.
;; (set-face-attribute 'org-block nil :underline nil :foreground nil :background "#282a36")
;; (set-face-attribute 'org-block-begin-line nil :underline nil :foreground nil :background "#1e1f28")
;; (set-face-attribute 'org-block-end-line nil :underline nil :foreground nil :background nil)
;; (set-face-attribute 'org-block-end-line nil :background 'unspecified)
(set-face-attribute 'org-table nil :inherit '(shadow fixed-pitch)) (set-face-attribute 'org-table nil :inherit '(shadow fixed-pitch))
(set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch))
(set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch)) (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch))
(set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch)) (set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch))
(set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch) (set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch)
;; (set-face-attribute 'org-block nil :background
;; (color-darken-name
;; (face-attribute 'default :background) 3))
;; (setq org-src-block-faces '(("emacs-lisp" (:background "#EEE2FF"))
;; ("python" (:background "#E5FFB8"))))
;; Tachar los elementos "DONE" ;; Tachar los elementos "DONE"
(set-face-attribute 'org-done nil :strike-through t) (set-face-attribute 'org-done nil :strike-through t)
(set-face-attribute 'org-headline-done nil (set-face-attribute 'org-headline-done nil
@ -104,7 +85,6 @@
;; org-mode ;; org-mode
(use-package org (use-package org
:defer t
:ensure nil :ensure nil
:hook :hook
(org-mode . kj/org-hook) (org-mode . kj/org-hook)
@ -118,7 +98,7 @@
(setq org-log-into-drawer t) (setq org-log-into-drawer t)
(setq org-cycle-separator-lines -1) (setq org-cycle-separator-lines -1)
;; Identación ;; Indentación
(setq org-startup-indented t) (setq org-startup-indented t)
(setq org-src-preserve-indentation nil) (setq org-src-preserve-indentation nil)
(setq org-edit-src-content-indentation 0) (setq org-edit-src-content-indentation 0)
@ -188,7 +168,6 @@
;; Los head "*" se ven como puntos ;; Los head "*" se ven como puntos
(use-package org-bullets (use-package org-bullets
:defer t
:hook :hook
(org-mode . org-bullets-mode) (org-mode . org-bullets-mode)
:config :config
@ -204,8 +183,6 @@
;; Mejora visualmente varias cosas de org ;; Mejora visualmente varias cosas de org
(use-package org-modern (use-package org-modern
:defer t
:ensure t
:hook ((org-mode . org-modern-mode) :hook ((org-mode . org-modern-mode)
(org-agenda . org-modern-mode)) (org-agenda . org-modern-mode))
:config :config
@ -224,7 +201,6 @@
) )
(use-package visual-fill-column (use-package visual-fill-column
:defer t
:after (org) :after (org)
:config :config
;; Tamaño de la columna ;; Tamaño de la columna
@ -237,10 +213,7 @@
;; Segundo cerebro: Base de conocimientos en formato Zettelkasten ;; Segundo cerebro: Base de conocimientos en formato Zettelkasten
(use-package org-roam (use-package org-roam
:defer t :bind ("<f3>" . org-roam-node-find)
:ensure t
:bind (("<f4>" . org-roam-node-insert)
("<f3>" . org-roam-node-find))
:init :init
(setq org-roam-v2-ack t) (setq org-roam-v2-ack t)
(setq org-roam-completion-system 'ivy) (setq org-roam-completion-system 'ivy)
@ -252,8 +225,6 @@
;; Interface web para navegar en mi base de conocimientos. ;; Interface web para navegar en mi base de conocimientos.
(use-package org-roam-ui (use-package org-roam-ui
:defer t
:ensure t
:config :config
(setq org-roam-ui-sync-theme t (setq org-roam-ui-sync-theme t
org-roam-ui-follow t org-roam-ui-follow t
@ -262,33 +233,22 @@
;; Continúa el formato de la lista cuando presionas enter. ;; Continúa el formato de la lista cuando presionas enter.
(use-package org-autolist (use-package org-autolist
:defer t
:ensure t
:hook (org-mode . org-autolist-mode)) :hook (org-mode . org-autolist-mode))
;; Org babel para PHP ;; Org babel para PHP
(use-package ob-php (use-package ob-php)
:defer t
:ensure t)
;; Org babel para GO ;; Org babel para GO
(use-package ob-go (use-package ob-go)
:defer t
:ensure t)
;; Org babel para Rust ;; Org babel para Rust
(use-package ob-rust (use-package ob-rust)
:defer t
:ensure t)
;; Org babel para traducciones (mediante google translate) ;; Org babel para traducciones (mediante google translate)
(use-package ob-translate (use-package ob-translate)
:defer t
:ensure t)
;; Org mode en modo presentación ;; Org mode en modo presentación
(use-package org-present (use-package org-present
:defer t
:after (org) :after (org)
:config :config
(add-hook 'org-present-mode-hook (add-hook 'org-present-mode-hook
@ -316,12 +276,8 @@
;; Mostrar los caracteres ocultos de org mode al pasar con el cursor. ;; Mostrar los caracteres ocultos de org mode al pasar con el cursor.
(use-package org-appear (use-package org-appear
:defer t
;; :hook (org-mode . org-appear-mode) ;; :hook (org-mode . org-appear-mode)
) )
;; Polymode para org-mode
;; (use-package poly-org)
(provide 'init-org) (provide 'init-org)
;;; init-org.el ends here ;;; init-org.el ends here

78
configs/init-package.el Normal file
View File

@ -0,0 +1,78 @@
;;; init-package.el --- Initialize package configurations. -*- lexical-binding: t -*-
;;; Commentary:
;;
;; Emacs Package management configurations.
;;
;;; Code:
;; Configuración de repositorios de paquetes
(defvar elpaca-installer-version 0.11)
(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 :inherit ignore
: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)
(let ((load-source-file-function nil)) (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))
;; Should set before loading `use-package'
(setq use-package-always-ensure t
use-package-always-defer t
use-package-expand-minimally t
use-package-enable-imenu-support t)
;; Required by `use-package'
(use-package diminish :ensure t)
;; Update GPG keyring for GNU ELPA
(use-package gnu-elpa-keyring-update)
;; Update packages
(unless (fboundp 'package-upgrade-all)
(use-package auto-package-update
:init
(setq auto-package-update-delete-old-versions t
auto-package-update-hide-results t)
(defalias 'package-upgrade-all #'auto-package-update-now)))
(provide 'init-package)
;;; init-package.el ends here

View File

@ -1,413 +0,0 @@
;;; 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:
;; Mejora del reemplazo
(use-package anzu
:defer t
:bind (([remap query-replace] . anzu-query-replace)
([remap query-replace-regexp] . anzu-query-replace-regexp)))
;; Intercamiar buffers de lugar
(use-package buffer-move
:defer 2
: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))
;; 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)
("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))
)
;; Visor de documentos de emacs (soporta de todo: epub, pdf, odt, docx, cbz, etc.)
(use-package doc-view
:defer t
:hook
(doc-view-mode . (lambda ()
(display-line-numbers-mode 0)))
:ensure nil)
;; Un bonito y sencillo panel de inicio
(use-package dashboard
:defer t
: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 '(
;; (recents . 10)
(agenda . 10)
))
)
;; Coloca en emacs la documentacón distribuída por devdocs.io
(use-package devdocs
:defer 2)
;; Sidebar a la derecha con los archivos
(use-package dired-sidebar
:defer t
:hook (dired-mode . hl-line-mode)
: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
))
;; La línea bonita esa de abajo
(use-package doom-modeline
:after emacs
:ensure t
:config
(doom-modeline-mode)
(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))
;; Modo para edición de arc docker compose
(use-package docker-compose-mode
:defer t)
;; Modo para la edición de archivos Dockerfile (y building desde emacs)
(use-package dockerfile-mode
:defer t
:config
;; Suelo tener podman siempre en lugar de docker, así que lo definimos como el comando a usar
(setq dockerfile-mode-command "podman"))
;; Mover líneas o regiones
(use-package drag-stuff
:defer 1
:config
(drag-stuff-global-mode)
(drag-stuff-define-keys))
;; Emparejamiento automático de comillas, paréntesis, corchetes y llaves
;; (use-package electric-pair
;; :defer t
;; :ensure nil
;; :config
;; (electric-pair-mode)
;; (setq electric-pair-delete-adjacent-pairs nil))
;; Cargar las variables de entorno desde la configuración del usuario
(use-package exec-path-from-shell
:config
(exec-path-from-shell-initialize))
;; 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)
(php-ts-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))
)
)
;; Resaltar palabras clave como TODO, FIXME, etc. en comentarios del código.
(use-package hl-todo
:ensure (hl-todo :version (lambda (_) "3.6.0"))
:defer t
:hook (prog-mode . hl-todo-mode)
:config
(add-to-list 'hl-todo-keyword-faces '("BUG" . "#d99600")))
;; Paquete para exportar buffers de emacs a HTML
(use-package htmlize
:defer t
:ensure t)
;; Permite crear conjuntos de atajos.
(use-package hydra
:defer t)
;; 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))
)
;; Modo markdown
(use-package markdown-mode
:defer t)
;; Multiple vterm
(use-package multi-vterm
:defer t
:after vterm
: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
:after nerd-icons
:hook (dired-mode . nerd-icons-dired-mode))
;; Modo para leer archivos de configuración de nginx
(use-package nginx-mode
: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)
(use-package project
:defer t
:ensure nil
:config
;; Colocamos un título del frame más bonito y útil que el por defecto
(setq frame-title-format
'(
(:eval
(let ((project-name (kj/project-name)))
(unless (null project-name)
(format "[%s] " project-name))))
"%b"
" - Emacs")
)
)
;; Correr el código desde el buffer de emacs
(use-package quickrun
:defer t
:ensure t
:bind (:map prog-mode-map
("C-c C-r" . quickrun)
("C-c r f" . quickrun)
("C-c r r" . quickrun-region)
("C-c r R" . quickrun-replace-region)
)
)
;; Recentf - Guarda registro de los archivos abiertos recientemente
(use-package recentf
:defer t
:ensure nil
:bind ("C-x C-r" . recentf-open-files)
:hook (after-load-theme . recentf-mode)
:config
(setq recentf-save-file
(recentf-expand-file-name (concat temp-dir "/recentf"))
recentf-auto-cleanup 'never
recentf-keep '(file-remote-p file-readable-p)
recentf-max-saved-items 1000
recentf-max-menu-items 500))
;; Busqueda rápida con ripgrep
(use-package rg
:defer t
;; :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))
:config
(setq rg-group-result t
rg-show-columns t)
(cl-pushnew '("tmpl" . "*.tmpl") rg-custom-type-aliases))
;; Guardar la posición del cursor en un archivo para volver allí cuando se lo vuelva a abrir.
(use-package saveplace
:ensure nil
:defer t
:hook
(elpaca-after-init . (lambda()
(setq save-place-file (locate-user-emacs-file (concat temp-dir "/places")))
(save-place-mode 1)
))
)
;; Mejorando el scroll
(use-package smooth-scrolling
:defer t
:config
(smooth-scrolling-mode 1)
(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
:ensure 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 ()
(corfu-mode 0)
(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 15725 24536)
speed-type-min-chars 300
speed-type-max-chars 600))
;; Tree-sitter :)
(use-package treesit
:defer t
:ensure 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"))
(jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc"))
(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" "master" "php/src"))
(phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc"))
(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"))
(tsx . ("https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src"))
(typescript . ("https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))
(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)))))
;; Terminal
(use-package vterm
:defer 1
:config
(setq tramp-histfile-override nil) ;; Dejamos que se use el history por defecto del servidor remoto
(setq vterm-tramp-shells '(("ssh" "/bin/bash")
("sshx" "/bin/bash")
("docker" "/bin/bash")
("podman" "/bin/bash"))) ;; Tanto docker como podman usarán bash cuado se contecte mediante tramp
)
;; Cuando inicias un atajo de teclas te muestra las posibilidades
(use-package which-key
:defer t
:config
(which-key-mode))
;; Muestra which-key en un frame en el centro en lugar de abajo
(use-package which-key-posframe
:after which-key
:config
(which-key-posframe-mode))
;; Restaurar el estado de los frames
(use-package winner
:ensure nil
:defer t
:config
(winner-mode))
;; Emacs Start Up Profiler
;; (use-package esup
;; :defer t)
(provide 'init-packages)
;;; init-packages.el ends here

228
configs/init-prog.el Normal file
View File

@ -0,0 +1,228 @@
;; init-prog.el --- Initialize programming configurations. -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;
;; General programming configurations.
;;
;;; Code:
;; Show function arglist or variable docstring
(use-package eldoc
:ensure nil
:diminish
:config
(when (childframe-workable-p)
;; Mostrar la ayuda de eldoc/documentación en un childframe
(use-package eldoc-box
:diminish (eldoc-box-hover-mode eldoc-box-hover-at-point-mode)
:bind ("<f1>" . eldoc-box-help-at-point)
:custom
(eldoc-box-lighter nil)
(eldoc-box-only-multi-line t)
(eldoc-box-clear-with-C-g t)
:custom-face
(eldoc-box-border ((t (:inherit posframe-border :background unspecified))))
(eldoc-box-body ((t (:inherit tooltip))))
:hook ((eglot-managed-mode . eldoc-box-hover-at-point-mode))
:config
;; Prettify `eldoc-box' frame
(setf (alist-get 'left-fringe eldoc-box-frame-parameters) 8
(alist-get 'right-fringe eldoc-box-frame-parameters) 8))))
;; Code folding indicators using Tree-sitter
(use-package treesit-fold-indicators
:ensure treesit-fold
:hook (after-init . global-treesit-fold-indicators-mode)
:init (setq treesit-fold-indicators-priority -1))
;; Cross-referencing commands
(use-package xref
:autoload xref-show-definitions-completing-read
:bind (("M-g ." . xref-find-definitions)
("M-g ," . xref-go-back))
:init
;; Use faster search tool
(when (executable-find "rg")
(setq xref-search-program 'ripgrep))
;; Select from xref candidates in minibuffer
(setq xref-show-definitions-function #'xref-show-definitions-completing-read
xref-show-xrefs-function #'xref-show-definitions-completing-read))
;; Code styles
(use-package editorconfig
:diminish
:hook (elpaca-after-init . editorconfig-mode))
;; Correr el código desde el buffer de emacs
(use-package quickrun
:bind (("C-<f5>" . quickrun)
("C-S-<f5>" . quickrun-region)))
;; Busqueda rápida con ripgrep
(use-package rg
:bind (:map rg-global-map
("c" . rg-dwim-current-dir)
("f" . rg-dwim-current-file)
("m" . rg-menu))
:config
(setq rg-group-result t
rg-show-columns t)
(cl-pushnew '("tmpl" . "*.tmpl") rg-custom-type-aliases))
;; Tree-sitter :)
(use-package treesit
:ensure 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"))
(jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc"))
(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" "master" "php/src"))
(phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc"))
(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"))
(tsx . ("https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src"))
(typescript . ("https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))
(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)))))
;; Browse devdocs.io documents using EWW
(use-package devdocs
:autoload (devdocs--installed-docs devdocs--available-docs)
:commands (devdocs-install devdocs-lookup)
:bind (:map prog-mode-map
("M-<f1>" . devdocs-dwim)
("C-h D" . devdocs-dwim))
:init
(defconst devdocs-major-mode-docs-alist
'((c-mode . ("c"))
(c++-mode . ("cpp"))
(python-mode . ("python~3.10" "python~2.7"))
(ruby-mode . ("ruby~3.1"))
(rustic-mode . ("rust"))
(css-mode . ("css"))
(html-mode . ("html"))
(julia-mode . ("julia~1.8"))
(js-mode . ("javascript" "jquery"))
(emacs-lisp-mode . ("elisp")))
"Alist of major-mode and docs.")
(mapc
(lambda (mode)
(add-hook (intern (format "%s-hook" (car mode)))
(lambda ()
(setq-local devdocs-current-docs (cdr mode)))))
devdocs-major-mode-docs-alist)
(setq devdocs-data-dir (expand-file-name "devdocs" user-emacs-directory))
(defun devdocs-dwim()
"Look up a DevDocs documentation entry.
Install the doc if it's not installed."
(interactive)
;; Install the doc if it's not installed
(mapc
(lambda (slug)
(unless (member slug (let ((default-directory devdocs-data-dir))
(seq-filter #'file-directory-p
(when (file-directory-p devdocs-data-dir)
(directory-files "." nil "^[^.]")))))
(mapc
(lambda (doc)
(when (string= (alist-get 'slug doc) slug)
(devdocs-install doc)))
(devdocs--available-docs))))
(alist-get major-mode devdocs-major-mode-docs-alist))
;; Lookup the symbol at point
(devdocs-lookup nil (thing-at-point 'symbol t))))
;; ---------------------------------------------------------------------------
;; Miscellaneous Programming Modes
;; ---------------------------------------------------------------------------
(use-package csv-mode)
(unless emacs/>=29p
(use-package csharp-mode))
(use-package cask-mode)
(use-package cmake-mode)
(use-package dart-mode)
(use-package julia-mode)
(use-package lua-mode)
(use-package mermaid-mode)
(use-package powershell)
(use-package scala-mode)
(use-package swift-mode)
(use-package v-mode)
(use-package vimrc-mode)
(use-package yaml-mode) ; Modo yaml
(use-package nginx-mode) ; Modo para leer archivos de configuración de nginx
;; Major mode para archivos CSV
(use-package csv-mode
;; :hook ((csv-mode . csv-align-mode)
;; (csv-mode . csv-header-line))
)
;; Modo markdown
(use-package markdown-mode)
;; Modo para edición de arc docker compose
(use-package docker-compose-mode)
;; Modo para la edición de archivos Dockerfile (y building desde emacs)
(use-package dockerfile-mode
:config
;; Suelo tener podman siempre en lugar de docker, así que lo definimos como el comando a usar
(setq dockerfile-mode-command "podman"))
;; Configuración para project.el
(use-package project
:ensure nil
:config
;; Colocamos un título del frame más bonito y útil que el por defecto
(setq frame-title-format
'(
(:eval
(let ((project-name (kj/project-name)))
(unless (null project-name)
(format "[%s] " project-name))))
"%b"
" - Emacs")
)
)
(use-package prettier
:diminish
:defines prettier-pre-warm
:hook ((js-base-mode css-mode sgml-mode web-mode) . prettier-mode)
:init (setq prettier-pre-warm 'none))
;;; init-prog.el ends here

View File

@ -12,23 +12,18 @@
;;; Code: ;;; Code:
;; Theme dracula (https://draculatheme.com/) // aún lo tengo en l config porque a Ney le gusta ;; Theme dracula (https://draculatheme.com/) // aún lo tengo en l config porque a Ney le gusta
(use-package dracula-theme (use-package dracula-theme)
:defer t)
;; El theme más cercano a adwaita dark que he encontrado ;; El theme más cercano a adwaita dark que he encontrado
(use-package adwaita-dark-theme (use-package adwaita-dark-theme)
:defer t)
;; Themes modus, vienen integrado en emacs en master (~v30) ;; Themes modus, vienen integrado en emacs en master (~v30)
(use-package modus-themes (use-package modus-themes)
:defer t)
;; Themes ef ;; Themes ef
(use-package ef-themes (use-package ef-themes
:defer t) :init
(load-theme 'ef-dream t))
;; Prendemos el theme que elijamos
(add-hook 'elpaca-after-init-hook #'(lambda() (load-theme 'ef-dream t)))
;; Los themes que recomiendo: ;; Los themes que recomiendo:
;; Oscuros: adwaita-dark y ef-dream ;; Oscuros: adwaita-dark y ef-dream

148
configs/init-ui.el Normal file
View File

@ -0,0 +1,148 @@
;; init-ui.el --- Better lookings and appearances. -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;
;; Visual (UI) configurations for better lookings and appearances.
;;
;;; Code:
;; Optimization
(setq idle-update-delay 1.0)
(setq-default cursor-in-non-selected-windows nil)
(setq highlight-nonselected-windows nil)
(setq fast-but-imprecise-scrolling t)
(setq redisplay-skip-fontification-on-input t)
;; Sidebar a la derecha con los archivos
(use-package dired-sidebar
:hook (dired-mode . hl-line-mode)
: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
))
;; Show line numbers
(use-package display-line-numbers
:ensure nil
:hook ((prog-mode
conf-mode toml-ts-mode
yaml-mode yaml-ts-mode)
. display-line-numbers-mode)
:init (setq display-line-numbers-width-start t))
;; Suppress GUI features
(setq use-file-dialog nil
use-dialog-box nil
inhibit-startup-screen t
inhibit-startup-echo-area-message user-login-name
inhibit-default-init t
initial-scratch-message nil)
(unless (daemonp)
(advice-add #'display-startup-echo-area-message :override #'ignore))
;; Display dividers between windows
(setq window-divider-default-places t
window-divider-default-bottom-width 1
window-divider-default-right-width 1)
(add-hook 'window-setup-hook #'window-divider-mode)
;; Mouse & Smooth Scroll
;; Scroll one line at a time (less "jumpy" than defaults)
(when (display-graphic-p)
(setq mouse-wheel-scroll-amount '(1 ((shift) . hscroll))
mouse-wheel-scroll-amount-horizontal 1
mouse-wheel-progressive-speed nil))
(setq scroll-step 1
scroll-margin 0
scroll-conservatively 100000
auto-window-vscroll nil
scroll-preserve-screen-position t)
;; Smooth scrolling
(use-package ultra-scroll
:hook (elpaca-after-init . ultra-scroll-mode))
;; Use fixed pitch where it's sensible
(use-package mixed-pitch
:diminish)
;; Display ugly ^L page breaks as tidy horizontal lines
(use-package page-break-lines
:diminish
:hook (elpaca-after-init . global-page-break-lines-mode)
:config (dolist (mode '(dashboard-mode emacs-news-mode))
(add-to-list 'page-break-lines-modes mode)))
;; Transient
(when (childframe-workable-p)
;; Display transient in child frame
(use-package transient-posframe
:diminish
:defines posframe-border-width
:custom-face
(transient-posframe ((t (:inherit tooltip))))
(transient-posframe-border ((t (:inherit posframe-border :background unspecified))))
:hook (after-init . transient-posframe-mode)
:init (setq transient-mode-line-format nil
transient-posframe-border-width posframe-border-width
transient-posframe-poshandler 'posframe-poshandler-frame-center
transient-posframe-parameters '((left-fringe . 8)
(right-fringe . 8)))))
;; La línea bonita esa de abajo
(use-package doom-modeline
:init
(doom-modeline-mode)
(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))
(use-package hide-mode-line
:autoload turn-off-hide-mode-line-mode
:hook (((eat-mode
eshell-mode shell-mode
term-mode vterm-mode
embark-collect-mode lsp-ui-imenu-mode
pdf-annot-list-mode) . turn-on-hide-mode-line-mode)))
;; A minor-mode menu for mode-line
(use-package minions
:hook (elpaca-after-init . minions-mode))
;; Iconos bonitos para varias cosas
(use-package nerd-icons
:commands nerd-icons-install-fonts
:functions font-installed-p
:config
(unless (font-installed-p nerd-icons-font-family)
(nerd-icons-install-fonts t)))
;; nerd-icons en ibuffer
(use-package nerd-icons-ibuffer
:hook (ibuffer-mode . nerd-icons-ibuffer-mode))
;; Nerd icons para vertico
(use-package nerd-icons-completion
:hook (vertico-mode . nerd-icons-completion-mode))
;; Usar nerd-icons en dired
(use-package nerd-icons-dired
:after nerd-icons
:hook (dired-mode . nerd-icons-dired-mode))
(provide 'init-ui)
;;; init-ui.el ends here

241
configs/init-utils.el Normal file
View File

@ -0,0 +1,241 @@
;; init-utils.el --- Initialize ultilities. -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;;
;; Some usefule Utilities.
;;
;;; Code:
;; Mejora del reemplazo
(use-package anzu
:bind (([remap query-replace] . anzu-query-replace)
([remap query-replace-regexp] . anzu-query-replace-regexp)))
;; Intercamiar buffers de lugar
(use-package buffer-move
: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))
)
;; Cuando inicias un atajo de teclas te muestra las posibilidades
(use-package which-key
:diminish
:init (setq which-key-max-description-length 30
which-key-lighter nil
which-key-show-remaining-keys t)
:autoload which-key-posframe-mode
:hook ( elpaca-after-init . which-key-mode))
;; Muestra which-key en un frame en el centro en lugar de abajo
(when (childframe-workable-p)
(use-package which-key-posframe
:diminish
:defines posframe-border-width
:functions posframe-poshandler-frame-center-near-bottom
:custom-face
(which-key-posframe ((t (:inherit tooltip))))
(which-key-posframe-border ((t (:inherit posframe-border :background unspecified))))
:init
(setq which-key-posframe-border-width posframe-border-width
which-key-posframe-poshandler #'posframe-poshandler-frame-center-near-bottom
which-key-posframe-parameters '((left-fringe . 8)
(right-fringe . 8)))
(which-key-posframe-mode 1)))
;; Fast search tool `ripgrep'
(use-package rg
:hook (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-show-columns t)
:config (add-to-list 'rg-custom-type-aliases '("tmpl" . "*.tmpl")))
;; Process
(use-package proced
:ensure nil
:init
(setq-default proced-format 'verbose)
(setq proced-auto-update-flag t
proced-auto-update-interval 3
proced-enable-color-flag t))
;; Paquete para exportar buffers de emacs a HTML
(use-package htmlize)
;; eww
(use-package eww
:ensure nil
:init
;; Install: npm install -g readability-cli
(when (executable-find "readable")
(setq eww-retrieve-command '("readable"))))
;; Restaurar el estado de los frames
(use-package winner
:ensure nil
:config
(winner-mode))
;; Terminal
(use-package vterm
:config
(setq tramp-histfile-override nil) ;; Dejamos que se use el history por defecto del servidor remoto
(setq vterm-tramp-shells '(("ssh" "/bin/bash")
("sshx" "/bin/bash")
("docker" "/bin/bash")
("podman" "/bin/bash"))) ;; Tanto docker como podman usarán bash cuado se contecte mediante tramp
)
;; Multiple vterm
(use-package multi-vterm
:after vterm
: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)
))
;; Mecanografía
(use-package speed-type
:hook
(speed-type-mode . (lambda ()
(corfu-mode 0)
(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 15725 24536)
speed-type-min-chars 300
speed-type-max-chars 600))
;; Mostrar lo que se está presionando en pantalla
(use-package keypression
: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))
)
;; Un bonito y sencillo panel de inicio
(use-package dashboard
;; :init
;; (dashboard-setup-startup-hook)
:diminish dashboard-mode
:custom-face
(dashboard-heading ((t (:inherit (font-lock-string-face bold)))))
(dashboard-items-face ((t (:weight normal))))
(dashboard-no-items-face ((t (:weight normal))))
: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 '(
;; (recents . 10)
(agenda . 10)
))
)
;; Hydra - Permite crear conjuntos de atajos.
(use-package hydra
:defines posframe-border-width
:functions childframe-workable-p
:hook (emacs-lisp-mode . hydra-add-imenu)
:init
(when (childframe-workable-p)
(setq hydra-hint-display-type 'posframe)
(with-no-warnings
(defun hydra-set-posframe-show-params ()
"Set hydra-posframe style."
(setq hydra-posframe-show-params
`(:left-fringe 8
:right-fringe 8
:internal-border-width ,posframe-border-width
:internal-border-color ,(face-background 'posframe-border nil t)
:background-color ,(face-background 'tooltip nil t)
:foreground-color ,(face-foreground 'tooltip nil t)
:lines-truncate t
:poshandler posframe-poshandler-frame-center)))
(hydra-set-posframe-show-params)
(add-hook 'after-load-theme-hook #'hydra-set-posframe-show-params t))))
;; Pretty-Hydra - Su nombre ya indica lo que hace
(use-package pretty-hydra
:bind ("<f6>" . toggles-hydra/body)
:hook (emacs-lisp-mode . (lambda ()
(add-to-list
'imenu-generic-expression
'("Hydras"
"^.*(\\(pretty-hydra-define\\) \\([a-zA-Z-]+\\)"
2))))
:init
(cl-defun pretty-hydra-title (title &optional icon-type icon-name
&key face height v-adjust)
"Add an icon in the hydra title."
(let ((face (or face 'mode-line-emphasis))
(height (or height 1.2))
(v-adjust (or v-adjust 0.0)))
(concat
(when (and icon-type icon-name)
(let ((f (intern (format "nerd-icons-%s" icon-type))))
(when (fboundp f)
(concat
(apply f (list icon-name :face face :height height :v-adjust v-adjust))
" "))))
(propertize title 'face face))))
;; Global toggles
(with-no-warnings
(pretty-hydra-define toggles-hydra (:title (pretty-hydra-title "Toggles" 'faicon "nf-fa-toggle_on")
:color pink :quit-key ("q" "C-g"))
("Basic"
(("n" (cond ((fboundp 'display-line-numbers-mode)
(display-line-numbers-mode (if display-line-numbers-mode -1 1)))
((fboundp 'gblobal-linum-mode)
(global-linum-mode (if global-linum-mode -1 1))))
"line number"
:toggle (or (bound-and-true-p display-line-numbers-mode)
(bound-and-true-p global-linum-mode)))
("a" global-aggressive-indent-mode "aggressive indent" :toggle t)
("d" global-hungry-delete-mode "hungry delete" :toggle t)
("e" electric-pair-mode "electric pair" :toggle t)
("s" prettify-symbols-mode "pretty symbol" :toggle t)
("h" display-time-mode "time" :toggle t)
("i" indent-bars-mode "indent bars" :toggle t))
"Highlight"
(("l" global-hl-line-mode "line" :toggle t)
("p" show-paren-mode "brackets pairs" :toggle t)
("r" rainbow-delimiters-mode "rainbow brackets" :toggle t)
("w" global-display-fill-column-indicator-mode "fill column indicator" :toggle t)
("t" global-hl-todo-mode "todo" :toggle t))
"Program"
(("f" flymake-mode "flymake" :toggle t)
("c" flyspell-mode "spell check" :toggle t)
("u" subword-mode "subword" :toggle t)
("v" global-diff-hl-mode "gutter" :toggle t)
("V" diff-hl-flydiff-mode "live gutter" :toggle t)
("M" diff-hl-margin-mode "margin gutter" :toggle t)
("D" diff-hl-dired-mode "dired gutter" :toggle t))
))))
(provide 'init-utils)
;;; init-utils.el ends here

View File

@ -15,7 +15,6 @@
;; Resolver diferencias entre 2 archivos o versiones del mismo. ;; Resolver diferencias entre 2 archivos o versiones del mismo.
(use-package ediff (use-package ediff
:defer t
:ensure nil :ensure nil
:config :config
(setq ediff-diff-options "") (setq ediff-diff-options "")
@ -23,48 +22,84 @@
(setq ediff-window-setup-function 'ediff-setup-windows-plain) (setq ediff-window-setup-function 'ediff-setup-windows-plain)
(setq ediff-split-window-function 'split-window-vertically)) (setq ediff-split-window-function 'split-window-vertically))
;; Git Gutter - Marca a la izq. si una linea ha sido agregada, editada o eliminada desde el último commit. ;; Marca a la izq. si una linea ha sido agregada, editada o eliminada desde el último commit.
(use-package git-gutter (use-package diff-hl
:defer t :custom (diff-hl-draw-borders nil)
:autoload diff-hl-flydiff-mode
:custom-face
(diff-hl-change ((t (:inherit custom-changed :foreground unspecified :background unspecified))))
(diff-hl-insert ((t (:inherit diff-added :background unspecified))))
(diff-hl-delete ((t (:inherit diff-removed :background unspecified))))
:bind (:map diff-hl-command-map
("SPC" . diff-hl-mark-hunk))
:hook ((elpaca-after-init . global-diff-hl-mode)
(elpaca-after-init . global-diff-hl-show-hunk-mouse-mode)
(dired-mode . diff-hl-dired-mode))
:config :config
(global-git-gutter-mode 1) ;; Highlight on-the-fly
(defhydra hydra-git-gutter (:hint nil) (diff-hl-flydiff-mode 1)
"
^Navigation^ | ^Actions^ | ^Others^ ;; Set fringe style
-^-----------^-+-^----^--------+-^-------^---------- (setq-default fringes-outside-margins t)
_p_: previous | _s_: stage | _m_: mark
_n_: next | _r_: revert | _SPC_: toggle info (with-no-warnings
-^-----------^-+-^----^--------+-^-------^---------- (unless (display-graphic-p)
" ;; Fall back to the display margin since the fringe is unavailable in tty
("p" git-gutter:previous-hunk) (diff-hl-margin-mode 1)
("n" git-gutter:next-hunk) ;; Avoid restoring `diff-hl-margin-mode'
("s" git-gutter:stage-hunk) (with-eval-after-load 'desktop
("r" git-gutter:revert-hunk) (add-to-list 'desktop-minor-mode-table
("m" git-gutter:mark-hunkmark) '(diff-hl-margin-mode nil))))
("SPC" git-gutter:toggle-popup-hunk))
) ;; Integration with magit
(with-eval-after-load 'magit
(add-hook 'magit-pre-refresh-hook #'diff-hl-magit-pre-refresh)
(add-hook 'magit-post-refresh-hook #'diff-hl-magit-post-refresh))))
;; Visitar rápidamente viejas versiones de un archivo rápidamente ;; Visitar rápidamente viejas versiones de un archivo rápidamente
(use-package git-timemachine (use-package git-timemachine
:defer t) :custom-face
(git-timemachine-minibuffer-author-face ((t (:inherit success :foreground unspecified))))
(git-timemachine-minibuffer-detail-face ((t (:inherit warning :foreground unspecified))))
:bind (:map vc-prefix-map
("t" . git-timemachine))
:hook ((git-timemachine-mode . (lambda ()
"Improve `git-timemachine' buffers."
;; Display different colors in mode-line
(if (facep 'mode-line-active)
(face-remap-add-relative 'mode-line-active 'custom-state)
(face-remap-add-relative 'mode-line 'custom-state))
;; Highlight symbols in elisp
(and (derived-mode-p 'emacs-lisp-mode)
(fboundp 'highlight-defined-mode)
(highlight-defined-mode t))
;; Display line numbers
(and (derived-mode-p 'prog-mode 'yaml-mode)
(fboundp 'display-line-numbers-mode)
(display-line-numbers-mode t))))
(before-revert . (lambda ()
(when (bound-and-true-p git-timemachine-mode)
(user-error "Cannot revert the timemachine buffer"))))))
;; Generador automatizado de archivos de licencia ;; Generador automatizado de archivos de licencia
(use-package license-templates (use-package license-templates)
:defer t)
;; Magia para git ;; Magia para git
(use-package magit (use-package magit)
:defer t)
;; Todolist en magit de todos los archivos del projecto. ;; Todolist en magit de todos los archivos del projecto.
(use-package magit-todos (use-package magit-todos
:defer t :after magit-status
:config (magit-todos-mode 1)) :commands magit-todos-mode
:init
(setq magit-todos-nice (if (executable-find "nice") t nil))
(magit-todos-mode 1))
;; Modo para resolución de confictos ;; Modo para resolución de confictos
(use-package smerge-mode (use-package smerge-mode
:ensure nil :ensure nil
:defer t
:config :config
(defhydra hydra-smerge (:color pink (defhydra hydra-smerge (:color pink
:hint nil) :hint nil)
@ -96,14 +131,11 @@ _p_rev _u_pper _=_: upper/lower _r_esolve
("q" nil "cancel" :color blue)) ("q" nil "cancel" :color blue))
) )
(use-package transient (use-package transient)
:defer t)
;; Mostrar el último commit que modificó la linea actual ;; Mostrar el último commit que modificó la linea actual
(use-package vc-msg (use-package vc-msg
:defer t :bind (("C-c C-v" . vc-msg-show))
:bind (("C-c v" . vc-msg-show)
("C-c C-v" . vc-msg-show))
) )

View File

@ -9,8 +9,7 @@
;;; Code: ;;; Code:
(use-package go-mode (use-package go-mode)
:defer t)
(provide 'lang-go) (provide 'lang-go)
;;; lang-go.el ends here ;;; lang-go.el ends here

View File

@ -10,7 +10,6 @@
;;; Code: ;;; Code:
(use-package web-mode (use-package web-mode
:defer t
:config :config
(setq web-mode-markup-indent-offset 2 (setq web-mode-markup-indent-offset 2
web-mode-css-indent-offset 2 web-mode-css-indent-offset 2
@ -21,15 +20,12 @@
) )
(use-package css-mode (use-package css-mode
:defer t
:ensure nil :ensure nil
:config :config
(setq css-indent-offset 2)) (setq css-indent-offset 2))
(use-package auto-rename-tag (use-package auto-rename-tag
:ensure (:host github :repo "jcs-elpa/auto-rename-tag") :ensure (:host github :repo "jcs-elpa/auto-rename-tag"))
:defer t
)
(provide 'lang-html) (provide 'lang-html)
;;; lang-html.el ends here ;;; lang-html.el ends here

View File

@ -10,7 +10,6 @@
;;; Code: ;;; Code:
(use-package js (use-package js
:defer t
:ensure nil :ensure nil
:mode :mode
("\\.js$" . js-mode) ("\\.js$" . js-mode)
@ -22,8 +21,6 @@
;; json-mode ;; json-mode
(use-package json-mode (use-package json-mode
:defer t
:ensure t
:mode :mode
("\\.json$" . json-mode) ("\\.json$" . json-mode)
:config :config

View File

@ -10,16 +10,10 @@
;;; Code: ;;; Code:
(use-package php-ts-mode (use-package php-ts-mode
:defer t
:mode "\\.php\\'" :mode "\\.php\\'"
;; :init
;; (add-to-list 'auto-mode-alist '("\\.php\\'" . php-ts-mode))
;; :after php-mode
:ensure nil) :ensure nil)
;; (use-package php-mode (use-package php-mode)
;; :defer t
;; :ensure t)
(use-package php-doc-block (use-package php-doc-block
:after php-ts-mode :after php-ts-mode

View File

@ -10,8 +10,6 @@
;;; Code: ;;; Code:
(use-package rust-mode (use-package rust-mode
:defer t
:ensure t
:init :init
(setq rust-mode-treesitter-derive t) (setq rust-mode-treesitter-derive t)
:config :config

View File

@ -20,23 +20,29 @@
;; ;;
;;; Code: ;;; Code:
;; Disable GC during init ;; Defer garbage collection further back in the startup process
(put 'gc-cons-percentage 'original-value-before-init gc-cons-percentage) (setq gc-cons-threshold most-positive-fixnum)
(put 'gc-cons-percentage 'value-during-init 0.6)
(defun restore-gc-cons-percentage-after-init ()
"Restaura el garbaje collection luego de iniciar."
(let ((expected-value (get 'gc-cons-percentage 'value-during-init))
(value-to-restore (get 'gc-cons-percentage 'original-value-before-init)))
(when (and value-to-restore (equal gc-cons-percentage expected-value))
(message "Setting `gc-cons-percentage' back to starting value %s" value-to-restore)
(setq gc-cons-percentage value-to-restore))))
(add-hook 'after-init-hook #'restore-gc-cons-percentage-after-init)
(setq gc-cons-percentage (get 'gc-cons-percentage 'value-during-init))
;; Color de fondo similar al theme para evitar que se vea blanco al iniciar ;; Prevent unwanted runtime compilation for gccemacs (native-comp) users;
;; (add-to-list 'default-frame-alist '(background-color . "#282a36")) ;; packages are compiled ahead-of-time when they are installed and site files
;; are compiled when gccemacs is installed.
(setq native-comp-deferred-compilation nil ;; obsolete since 29.1
native-comp-jit-compilation nil)
;; Permitir solo la búsqueda de archivos a cargar en la config en case sensitive. ;; 'use-package' is builtin since 29.
;; It must be set before loading 'use-package'.
(setq use-package-enable-imenu-support t)
;; In noninteractive sessions, prioritize non-byte-compiled source files to
;; prevent the use of stale byte-code. Otherwise, it saves us a little IO time
;; to skip the mtime checks on every *.elc file.
(setq load-prefer-newer noninteractive)
;; Explicitly set the prefered coding systems to avoid annoying prompt
;; from emacs (especially on Microsoft Windows)
(prefer-coding-system 'utf-8)
;; Permitir solo la búsqueda de archivos a cargar en la carpeta config case sensitive.
(setq auto-mode-case-fold nil) (setq auto-mode-case-fold nil)
;; Definimos que la shell por defecto será bash ;; Definimos que la shell por defecto será bash
@ -45,6 +51,12 @@
;; Personalizaciones (Tedrían que ir en init-base, pero por optimización, las pongo acá) ;; Personalizaciones (Tedrían que ir en init-base, pero por optimización, las pongo acá)
(push '(menu-bar-lines . 0) default-frame-alist) ; Quitar menús. (push '(menu-bar-lines . 0) default-frame-alist) ; Quitar menús.
(push '(tool-bar-lines . 0) default-frame-alist) ; Quitar toolbar. (push '(tool-bar-lines . 0) default-frame-alist) ; Quitar toolbar.
(push '(vertical-scroll-bars) default-frame-alist)
(when (featurep 'ns)
(push '(ns-transparent-titlebar . t) default-frame-alist))
;; Prevent flash of unstyled mode line
(setq mode-line-format nil)
;; Iniciar emacs maximizado ;; Iniciar emacs maximizado
;; (add-hook 'window-setup-hook 'toggle-frame-maximized t) ; Hacerlo mediante window-setup-hook (se maximiza al terminar de cargar la ventana) ;; (add-hook 'window-setup-hook 'toggle-frame-maximized t) ; Hacerlo mediante window-setup-hook (se maximiza al terminar de cargar la ventana)

40
init.el
View File

@ -9,21 +9,47 @@
;;; Code: ;;; Code:
;; Cargar configuraciones ;; Optimize Garbage Collection for Startup
(setq gc-cons-threshold most-positive-fixnum)
(add-to-list 'load-path (concat user-emacs-directory "configs")) ;; Optimize `auto-mode-alist`
(setq auto-mode-case-fold nil)
(unless (or (daemonp) noninteractive init-file-debug)
;; Temporarily suppress file-handler processing to speed up startup
(let ((default-handlers file-name-handler-alist))
(setq file-name-handler-alist nil)
;; Recover handlers after startup
(add-hook 'emacs-startup-hook
(lambda ()
(setq file-name-handler-alist
(delete-dups (append file-name-handler-alist default-handlers))))
101)))
;; Función para añadir 'config' a la ruta de carga código elisp de emacs
(defun update-load-path (&rest _)
"Update the `load-path` to prioritize personal configurations."
(push (expand-file-name "configs" user-emacs-directory) load-path))
;; Nos aseguramos de que ejecute 'update-load-path' antes de 'package-initialize'
(advice-add #'package-initialize :after #'update-load-path)
;; Ahora lo corremos implícitamente
(update-load-path)
;; Paquetes base ;; Paquetes base
(require 'init-package)
(require 'init-base) (require 'init-base)
(require 'init-utils)
(require 'init-ui)
(require 'init-editor)
(require 'init-highlight)
(require 'init-theme) (require 'init-theme)
(require 'init-packages)
(require 'init-functions)
(require 'init-ai) (require 'init-ai)
(require 'init-vc) (require 'init-vc)
(require 'init-org) (require 'init-org)
(require 'init-eglot) (require 'init-lsp)
(require 'init-corfu) (require 'init-completion)
;; (require 'init-ctags)
(require 'init-minibuffer) (require 'init-minibuffer)
;; (require 'init-evil) ;; (require 'init-evil)
(require 'init-keys) (require 'init-keys)

View File

View File

@ -41,7 +41,6 @@ Como ayuda lo más que puedo dar es que en las distros basadas en Debian puedes
Normalmente no es usual el tener dependencias reales para que emacs funcione, pero para el funcionamiendo adecuado y sin errores, lo mejor es tener instalado: Normalmente no es usual el tener dependencias reales para que emacs funcione, pero para el funcionamiendo adecuado y sin errores, lo mejor es tener instalado:
- El font de firacode
- cmake - cmake
- libvterm - libvterm
@ -53,7 +52,7 @@ Finalmente, recomiendo instalar [[https://github.com/blahgeek/emacs-lsp-booster]
* Atajos de teclas personalizados * Atajos de teclas personalizados
Tengo varios atajos reconfigurados, por lo que recomiento revisar primero que nada el archivo [[./configs/init-keys.el][init-keys.el]] el resto de configuraciones está principalmente en los archivos [[./configs/init-minibuffer.el][init-minibuffer.el]] e [[./configs/init-packages.el][init-packages.el]], dudo que las uses todas y yo mismo no las uso, por lo que con el tiempo las voy eliminando y a veces agrego alguna extra. Con que revises el primer archivo y sepas que =consult-project= está en =C-x p= ya estás servido. Tengo varios atajos reconfigurados, por lo que recomiento revisar primero que nada el archivo [[./configs/init-keys.el][init-keys.el]] el resto de configuraciones está principalmente en los archivos [[./configs/init-minibuffer.el][init-minibuffer.el]] e [[file:configs/init-editor.el][init-editor.el]], dudo que las uses todas y yo mismo no las uso, por lo que con el tiempo las voy eliminando y a veces agrego alguna extra. Con que revises el primer archivo y sepas que =consult-project= está en =C-x p= ya estás servido.
* Contacto * Contacto