(add-to-list 'default-frame-alist '(alpha . 95))
(org-babel-do-load-languages
'org-babel-load-languages
'((shell . t)))
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(global-visual-line-mode nil)
(setq inhibit-startup-screen t) ;; Desactiva la pantalla de inicio
(setq inhibit-startup-message t) ;; Desactiva el mensaje de inicio
;; hace que las lineas se extiendan mas aya del editor si es necesario
(global-visual-line-mode -1)
(setq-default truncate-lines t)
(setq-default truncate-string-ellipsis "…")
;; Mostrar el número de columna en el modo de línea
(column-number-mode)
;; Desactivar la visualización de números de columna en org-mode
(add-hook 'org-mode-hook (lambda () (column-number-mode -1)))
;; Habilitar los números de línea en la izquierda en modos de programación
(add-hook 'prog-mode-hook
(lambda ()
(display-line-numbers-mode 1)))
;; Ajustar el formato de los números de línea con espacio adicional
(setq display-line-numbers-width-start t)
;; Ocultar archivos ocultos en dired
(require 'dired-x)
(setq dired-omit-files "^\\...+$")
(add-hook 'dired-mode-hook (lambda () (dired-omit-mode 1)))
;; dont ask when kill buffer
(global-set-key [remap kill-buffer] #'kill-this-buffer)
(defun reload-config ()
(interactive)
(load-file user-init-file)
(load-file user-init-file))
(set-frame-font "DejaVu Sans Mono-13" nil t)
(use-package recentf
:defer 2
:bind ("C-c C-r" . recentf-open-files)
:init (recentf-mode)
:custom
(recentf-max-menu-items 10)
(recentf-max-saved-items 50)
(recentf-exclude (list "COMMIT_EDITMSG"
"~$"
"/scp:"
"/ssh:"
"/sudo:"
"diario.*"
"recentf*"
"bookmark*"
"/archivo*"
"birthday*"
"*elpa/*"
"/tmp/"
"drafts/*"
"/.elfeed"
"/.telega"
"/.config"
"~/.emacs.d/s*"))
:config (run-at-time nil (* 5 60) 'recentf-save-list))
;; Additional configurations
;; Move between windows using Meta key
(global-set-key [M-left] 'windmove-left)
(global-set-key [M-right] 'windmove-right)
(global-set-key [M-up] 'windmove-up)
(global-set-key [M-down] 'windmove-down)
;; Zoom in/out with mouse
(global-set-key [C-mouse-4] 'text-scale-increase)
(global-set-key [C-mouse-5] 'text-scale-decrease)
;; Incrementa el tamaño de la fuente
(global-set-key (kbd "C-+") 'text-scale-increase)
;; Disminuye el tamaño de la fuente
(global-set-key (kbd "C--") 'text-scale-decrease)
;; undo and redo
(global-unset-key (kbd "C-z"))
(global-set-key (kbd "C-z") 'undo)
;; org-agenda
(global-set-key (kbd "<f7>") 'org-agenda)
;; F10 para ir al Dashboard
(global-set-key (kbd "<f10>") 'open-dashboard)
;; recen files
(global-set-key (kbd "C-c r") 'counsel-recentf)
(defvar elpaca-installer-version 0.7)
(defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
(defvar elpaca-repos-directory (expand-file-name "repos/" elpaca-directory))
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
:ref nil :depth 1
:files (:defaults "elpaca-test.el" (:exclude "extensions"))
:build (:not elpaca--activate-package)))
(let* ((repo (expand-file-name "elpaca/" elpaca-repos-directory))
(build (expand-file-name "elpaca/" elpaca-builds-directory))
(order (cdr elpaca-order))
(default-directory repo))
(add-to-list 'load-path (if (file-exists-p build) build repo))
(unless (file-exists-p repo)
(make-directory repo t)
(when (< emacs-major-version 28) (require 'subr-x))
(condition-case-unless-debug err
(if-let ((buffer (pop-to-buffer-same-window "*elpaca-bootstrap*"))
((zerop (apply #'call-process `("git" nil ,buffer t "clone"
,@(when-let ((depth (plist-get order :depth)))
(list (format "--depth=%d" depth) "--no-single-branch"))
,(plist-get order :repo) ,repo))))
((zerop (call-process "git" nil buffer t "checkout"
(or (plist-get order :ref) "--"))))
(emacs (concat invocation-directory invocation-name))
((zerop (call-process emacs nil buffer nil "-Q" "-L" "." "--batch"
"--eval" "(byte-recompile-directory \".\" 0 'force)")))
((require 'elpaca))
((elpaca-generate-autoloads "elpaca" repo)))
(progn (message "%s" (buffer-string)) (kill-buffer buffer))
(error "%s" (with-current-buffer buffer (buffer-string))))
((error) (warn "%s" err) (delete-directory repo 'recursive))))
(unless (require 'elpaca-autoloads nil t)
(require 'elpaca)
(elpaca-generate-autoloads "elpaca" repo)
(load "./elpaca-autoloads")))
(add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca `(,@elpaca-order))
(elpaca elpaca-use-package
:ensure t
(elpaca-use-package-mode))
(elpaca flycheck
:ensure t
:init(global-flycheck-mode))
Esto permite explorar mis programas de manera mas rapida e inteligente
(elpaca imenu-list
:ensure t)
;(setq imenu-list-focus-after-activation t)
(setq imenu-list-auto-resize t)
;; seteamos los shortcuts
(global-set-key (kbd "C-c i") #'imenu-list-smart-toggle)
Estos son los ef-themes, esta configuracion setea el theme que mas me gusta por defecto -summer-. Ademas, gracias a las cualidades de ef-themes puedes seleccionar mas de un tema con el cual cambiar.
Ademas, tengo configurado que dependiendo de la hora uso el tema claro o el escuro.
(use-package ef-themes
:ensure t
:demand t
:config
(load-theme 'ef-reverie :no-confirm))
(setq ef-themes-to-toggle '(ef-reverie ef-rosa))
;; Desactivar el parpadeo del cursor y cambiarlo a tipo barra
(blink-cursor-mode 0)
(setq-default cursor-type 'bar)
;; Configuración de beacon usando elpaca
(elpaca beacon
:ensure t
;; Configurar el color del resplandor a un rozado muy fuerte
(setq beacon-color "#FF69B4")
;; Reducir el tamaño del resplandor
(setq beacon-size 20)
;; Variable para almacenar el tiempo desde el último movimiento del cursor
(defvar my-last-cursor-move-time 0)
;; Función para mostrar el resplandor periódicamente cuando el cursor está quieto
(defun my-beacon-periodic-blink ()
"Muestra el resplandor si el cursor ha estado quieto por más de 1 segundo."
(let ((idle-time (- (float-time) my-last-cursor-move-time)))
(when (>= idle-time 1) ;; Verificar si el cursor ha estado inactivo por 1 segundo
(beacon-blink))))
;; Función para manejar el movimiento del cursor y el resplandor inmediato
(defun my-beacon-on-cursor-move ()
"Muestra el resplandor inmediatamente al mover el cursor y actualiza el tiempo."
;; Actualizar el tiempo del último movimiento del cursor
(setq my-last-cursor-move-time (float-time))
;; Mostrar el resplandor inmediatamente
(beacon-blink))
;; Ejecutar el resplandor periódico cada 0.8 segundos
(run-with-timer 0 1 'my-beacon-periodic-blink)
;; Hook para mostrar el resplandor inmediatamente al mover el cursor
(add-hook 'post-command-hook 'my-beacon-on-cursor-move)
;; Habilitar el modo beacon
(beacon-mode 1))
(use-package highlight-indent-guides
:ensure t
:hook (prog-mode . highlight-indent-guides-mode)
:config
;; Configurar el método de guía de indentación a 'bitmap
(setq highlight-indent-guides-method 'bitmap)
;; (setq highlight-indent-guides-character "|")
;; Configurar el color de los guías de indentación
(custom-set-faces
'(highlight-indent-guides-stack-odd-face ((t (:background "gray20"))))
'(highlight-indent-guides-stack-even-face ((t (:background "gray40"))))
'(highlight-indent-guides-character-face ((t (:foreground "dim gray"))))
'(italic ((t (:slant italic))))))
(use-package all-the-icons
:ensure t
:if (display-graphic-p))
(use-package all-the-icons-dired
:ensure t
:if (display-graphic-p))
(add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
;; Configuración del `dashboard` en Emacs usando `elpaca`
(setq user-full-name "Cesar M.")
(setq dashboard-icon-type 'all-the-icons) ;; Usa `all-the-icons` para íconos personalizados.
(use-package dashboard
:ensure t
:config
;; Configuración básica de banner y título
;(global-page-break-lines-mode 1) ;; Habilita líneas de página a nivel global (requiere `page-break-lines`)
;; Configuración de banner
(setq dashboard-startup-banner 'logo) ;; Usa el logo de Emacs
(setq dashboard-banner-logo-title (format "Buen día %s" user-full-name))
(setq dashboard-center-content t)
(setq dashboard-set-heading-icons t)
(setq dashboard-set-file-icons t)
;; Configura los elementos a mostrar en el dashboard
(setq dashboard-items '((recents . 5)
(bookmarks . 5)
(agenda . 5)
(projects . 5)
(registers . 5)))
;; Habilita el dashboard en el inicio
(dashboard-setup-startup-hook)
;; Configuración de íconos y navegación
(setq dashboard-set-init-info t)
(setq dashboard-set-navigator t)
(setq dashboard-navigator-buttons
`(
((,(all-the-icons-octicon "mark-github" :height 1.1 :v-adjust 0.0)
"GitHub" "Visitar mi GitHub" (lambda (&rest _) (browse-url "https://github.com/kascesar")))
(,(all-the-icons-faicon "linkedin" :height 1.1 :v-adjust 0.0)
"LinkedIn" "Visitar mi LinkedIn" (lambda (&rest _) (browse-url "https://linkedin.com/in/csarmaraya")))
(,(all-the-icons-faicon "envelope" :height 1.1 :v-adjust 0.0)
"Email" "Enviar un correo" (lambda (&rest _) (compose-mail))))))
;; Personaliza el orden de widgets
(setq dashboard-startupify-list
'(dashboard-insert-banner
dashboard-insert-newline
dashboard-insert-banner-title
dashboard-insert-navigator
dashboard-insert-init-info
dashboard-insert-items
dashboard-insert-footer))
)
(elpaca vertico
:ensure t
:config
(setq vertico-cycle t)
(setq vertico-resize nil)
(vertico-mode 1))
(elpaca marginalia
:ensure t
:config
(marginalia-mode 1))
keys | order | desc |
---|---|---|
M-s M-g | counsult-grep | buscar recursivamente |
M-s M-f | counsult-find | |
M-s M-o | counsult-outline | buscar en el header |
C-f | counsult-line | buscar en el bufer |
C-F | counsult-line-multi | buscar en todos los bufer |
C-x b | counsult-bufer | buscar bufers |
En el bufer puedes hacer las siguientes cosas
- b SPC para bufers
- SPC hiden bufers
- * modified bufers
- f Files
- f Files registers
- m SPC bookmarks
- p Project
- add custom for more
(use-package consult
:ensure t
:bind (;; A recursive grep
("C-f" . consult-grep)
;; Search for files names recursively
("M-s M-f" . consult-find)
;; Search through the outline (headings) of the file
("M-s M-o" . consult-outline)
;; Search the current buffer
("C-S" . consult-line)
;; Switch to another buffer, or bookmarked file, or recently
;; opened file.
("C-x b" . consult-buffer)
("C-s" . consult-line-multi)))
(elpaca rainbow-mode
:ensure t
:demand t)
(add-hook 'org-mode-hook 'rainbow-mode)
(add-hook 'prog-mode-hook 'rainbow-mode)
- [X] elipsis icono para identificar que parte del archivo ha sido contraido
- [X] toc permite crear un indice interactivo en el archivo org
- [X] agenda y super-agenda gestores y mejoras de agenda de org-mode
- [X] modern agrega muchas mejoras visuales que emjoran la apariencia de los archivos org
- [ ] modern-ident mejora la identacion de los bloques de codigo (no me funciona)
- [X] bullets son unos cambios para las stars en org-mode
;; Aspecto mejorado al identar
;(add-hook 'org-mode-hook 'org-indent-mode)
;; recomendacion de codigo en org-mode
(defun org-mode-setup ()
(set (make-local-variable 'company-backends)
'((company-dabbrev company-yasnippet)))) ;; Para sugerencias de palabras y snippets
(add-hook 'org-mode-hook #'company-mode)
(add-hook 'org-mode-hook #'org-mode-setup)
(setq company-dabbrev-other-buffers t)
;; ocultamos los caracteres especiales
(setq org-hide-emphasis-markers t)
;; Aspecto mejorado al identar
;(add-hook 'org-mode-hook 'org-indent-mode)
;; recomendacion de codigo en org-mode
(defun org-mode-setup ()
(set (make-local-variable 'company-backends)
'((company-dabbrev company-yasnippet))))
(add-hook 'org-mode-hook #'company-mode)
(add-hook 'org-mode-hook #'org-mode-setup)
(setq company-dabbrev-other-buffers t)
;; ocultamos los caracteres especiales
(setq org-hide-emphasis-markers t)
;; configuraciones de tags y estado de las tareas
(global-set-key (kbd "C-c l") #'org-store-link)
(global-set-key (kbd "C-c a") #'org-agenda)
(global-set-key (kbd "C-c c") #'org-capture)
(use-package org
:config
(setq org-log-done 'time)
(setq org-log-into-drawer t)
(setq org-todo-keywords
'((sequence "PORHACER(p!)"
"ENPROCESO(e!)"
"BLOQUEADO(b!)"
"DETENIDO(d!)"
"|"
"HECHO(h!)"
"ARCHIVAR(a!)")))
(setq org-todo-keyword-faces
'(("PORHACER" . "red")
("ENPROCESO" . "magenta")
("BLOQUEADO" . "orange")
("HECHO" . "green")))
(setq org-file-apps
'(("\\.html\\'" . browse-url-firefox)))
(advice-add 'org-refile :after 'org-save-all-org-buffers)
(setq org-tag-alist '(("@nota" . ?n)
("@casa" . ?c)
("@finanzas" . ?d)
("@fecha" . ?f)
("@salud" . ?s)
("@tarea" . ?t)
("@coche" . ?h)
("@trabajo" . ?b)
("@personal" . ?p)
("crypt" . ?C)
("TOC_4" . ?i))
)
(setq org-tags-exclude-from-inheritance '("crypt"))
;; Progress Logging
;; When a TODO item enters DONE, add a CLOSED: property with current date-time stamp and into drawer
(setq org-log-done 'time)
(setq org-log-into-drawer "state-book")
(setq org-tags-column 81))
(use-package org
:config
(setq org-ellipsis "⤵"))
(elpaca toc-org
:ensure t
:demand t)
(add-hook 'org-mode-hook 'toc-org-mode)
(elpaca org-super-agenda
:config
(org-super-agenda-mode))
(setq org-agenda-skip-scheduled-if-done t
org-agenda-skip-deadline-if-done t
org-agenda-compact-blocks t
org-agenda-window-setup 'current-window
org-agenda-start-on-weekday 1
org-deadline-warning-days 7
org-agenda-time-grid '((daily today require-timed))
org-agenda-custom-commands
'(
("x" "Vista trabajo"
((agenda "" ((org-agenda-span 3)
(org-super-agenda-groups
'((:name "Hoy"
:discard (:tag "@personal")
:time-grid t
:scheduled past
:deadline past
:date today
:order 1)))))
(alltodo "" ((org-agenda-overriding-header "")
(org-super-agenda-groups
'((:discard (:tag "personal" ))
(:name "Vencimiento hoy"
:deadline today
:order 5)
(:name "Próximamente"
:deadline future
:order 11)
(:name "Atrasado"
:scheduled past
:deadline past
:order 12)
(:name "Por hacer"
;:discard (:scheduled future :deadline future)
:todo "PORHACER"
:order 12)
(:name "Esperando"
:todo "BLOQUEADO"
:order 14)))))
(tags "trabajo/HECHO"
((org-agenda-overriding-header " Tareas Hechas")))))
("z" "Vista personal"
((agenda "" ((org-agenda-span 3)
(org-super-agenda-groups
'((:name "Hoy"
:discard (:tag "@trabajo" :scheduled past :deadline past)
:time-grid t
:date today
:scheduled today
:order 1)
(:name ""
:tag "agenda"
:todo "Aniversarios")))))
(alltodo "" ((org-agenda-overriding-header "")
(org-super-agenda-groups
'((:discard (:tag "trabajo" ))
(:name "Vencimiento hoy"
:deadline today
:order 5)
(:name "Atrasado"
:scheduled past
:deadline past
:order 11)
(:name "Por hacer"
:discard (:scheduled future :deadline future)
:todo "PORHACER"
:order 12)
(:name "Esperando"
:todo "BLOQUEADO"
:order 14)))))
(tags "personal/HECHO"
((org-agenda-overriding-header " Tareas Hechas")))))
))
(setq calendar-month-name-array
["Enero" "Febrero" "Marzo" "Abril" "Mayo" "Junio"
"Julio" "Agosto" "Septiembre" "Octubre" "Noviembre" "Diciembre"])
(setq calendar-day-name-array
["Domingo" "Lunes" "Martes" "Miércoles" "Jueves" "Viernes" "Sábado"])
(setq org-icalendar-timezone "America/Santiago") ;; timezone
(setq calendar-week-start-day 1) ;; la semana empieza el lunes
(setq european-calendar-style t) ;; estilo europeo
(add-hook 'org-mode-hook 'org-indent-mode)
(use-package compat
:ensure (:wait t)
:demand t)
(use-package org-modern-indent
:load-path "~/.emacs.d/org-modern-indent/"
:after org-modern
:config
(add-hook 'org-mode-hook #'org-modern-indent-mode 90))
(use-package org-modern
:ensure '(org-modern :host github :repo "minad/org-modern")
:custom
(org-modern-hide-stars nil) ; Mantiene las estrellas visibles para evitar indentación adicional
(org-modern-table t) ; Activa la modernización de tablas
(org-modern-list '((?* . "•") (?+ . "‣"))) ; Define símbolos para listas de Org
(org-modern-checkbox '((?X . "✓") (?- . "✗") (?\s . "⬚"))) ; Define símbolos para checkboxes
(org-modern-star '("◉" "○" "✸" "✿")) ; Define símbolos para encabezados
(org-modern-block-name '("" . "")) ; Personaliza los bloques de código (para alinear mejor los bordes superiores)
:hook
(org-mode . org-modern-mode)
(org-agenda-finalize . org-modern-agenda))
(use-package org-bullets-mode
:ensure org-bullets
:config
:hook org-mode)
(use-package calfw
:ensure t
(calfw
:host github
:repo "kiwanami/emacs-calfw")
:config
(setq cfw:org-overwrite-default-keybinding t))
(use-package calfw-org
:ensure t
:config
(setq cfw:org-overwrite-default-keybinding t)
:bind ([f8] . cfw:open-org-calendar))
(setq calendar-month-name-array
["Enero" "Febrero" "Marzo" "Abril" "Mayo" "Junio"
"Julio" "Agosto" "Septiembre" "Octubre" "Noviembre" "Diciembre"])
(setq calendar-day-name-array
["Domingo" "Lunes" "Martes" "Miércoles" "Jueves" "Viernes" "Sábado"])
(setq org-icalendar-timezone "America/Santiago")
(setq calendar-week-start-day 1)
(setq european-calendar-style t)
Aqui configuro LSP de tal forma que quede preparado para desarrollo en Emacs.
Pylsp Servidor de python de microsoft
pip install -U 'python-lsp-server[all]' black isort pyright ruff
Ahora, configuramos el entorno de desarrollo de emacs para python
(use-package lsp-pyright
:ensure t
:custom (lsp-pyright-langserver-command "pyright")
:hook (python-mode . (lambda ()
(require 'lsp-pyright)
(lsp))))
(add-to-list 'load-path "~/.emacs.d/flymake-ruff")
(elpaca flymake-ruff
:ensure t)
(add-hook 'python-mode-hook #'flymake-ruff-load)
(use-package lsp-mode
:ensure t
:commands (lsp lsp-deferred)
:hook (python-mode . lsp-deferred)
:config
(require 'lsp-pyright))
;; herramientas adicionales
(use-package python-black
:ensure t
:hook (python-mode . python-black-on-save-mode))
(use-package py-isort
:ensure t
:hook (python-mode . py-isort-before-save))
marcar las columnas mas largas que 80 caracteres
(add-to-list 'load-path "~/.emacs.d/column-marker/")
(require 'column-marker)
;; Corrige el lambda en el hook
(add-hook 'python-mode-hook (lambda () (column-marker-1 80)))
(use-package company
:ensure t
:defer 2
:custom
(company-begin-commands '(self-insert-command))
(company-idle-delay .1)
(company-minimum-prefix-length 2)
(company-show-numbers t)
(company-tooltip-align-annotations 't)
(global-company-mode t))
Estos son los paquetes que suelo usar con git en mi dia a dia para desarrollo
- [X] magit es un gestor de repositorios git interactivo y muy poderoso
- [X] git-gutter muestra en los archivos que lineas se agregan, elimina y modifica
- [X] git-timemachine permite interactivamente las modificaciones se hicieron
(use-package transient :ensure t :demand t)
(use-package magit :ensure (:wait t) :demand t)
Esta herramienta agrega indicadores para identificar los cambios miesntras programo
(use-package git-gutter
:ensure (:wait t)
:demand t
)
(global-git-gutter-mode +1)
(custom-set-variables
'(git-gutter:modified-sign "M")
'(git-gutter:added-sign "+")
'(git-gutter:deleted-sign "-"))
Herramienta que me permite observar un archivo de manera interactiva para ver sus versiones en tiempo real
(elpaca git-timemachine
:ensure t)
Typing the below + TAB | Expands to … |
---|---|
<a | ’#+BEGIN_EXPORT ascii’ … ‘#+END_EXPORT |
<c | ’#+BEGIN_CENTER’ … ‘#+END_CENTER’ |
<C | ’#+BEGIN_COMMENT’ … ‘#+END_COMMENT’ |
<e | ’#+BEGIN_EXAMPLE’ … ‘#+END_EXAMPLE’ |
<E | ’#+BEGIN_EXPORT’ … ‘#+END_EXPORT’ |
<h | ’#+BEGIN_EXPORT html’ … ‘#+END_EXPORT’ |
<l | ’#+BEGIN_EXPORT latex’ … ‘#+END_EXPORT’ |
<q | ’#+BEGIN_QUOTE’ … ‘#+END_QUOTE’ |
<s | ’#+BEGIN_SRC’ … ‘#+END_SRC’ |
<v | ’#+BEGIN_VERSE’ … ‘#+END_VERSE’ |
(require 'org-tempo)
(use-package emacs :ensure nil :config (setq ring-bell-function #'ignore))