Emacs: Mis archivos de configuración
Contenido
El mundo de Emacs es infinito y dentro de ese universo hay galaxias enteras que tratan acerca de los archivos de configuración.
Hay quienes utilizan Emacs hace años y estas configuraciones son abrumadoras.
Valga este humilde post para presentar mi pequeño (y bastante genérico) archivo de configuración.
La estructura de directorios
En el directorio .emacs.d/ ubicado dentro del /home, tenemos todo lo que hace a la configuración personal de Emacs.
El primer archivo que se ejecuta es init.el.
En este archivo tengo configurados cuales serán los próximos archivos que emacs usará para configurarse y que me permiten tener todo mejor organizado.
Este archivo indica la ruta donde se encuentran los otros archivos, enn este caso el directorio "elisp".
Archivos de configuración
init.el
(add-to-list 'load-path (concat user-emacs-directory "elisp"))
(require 'early-init) ;; Archivos que se inician primero
(require 'base) ;; Configuración básica o general de Emacs
(require 'orgmode) ;; Archivos de configuración de Org-mode
(require 'theme) ;; Archivos referentes a la configuracion del tema visual
(require 'completion) ;; Paquetes de completado automático y snippets
(require 'keymappings) ;; Atajos de teclado personalizados
(require 'varios) ;; Otras configuraciones
(require 'zettelkasten) ;; Configuración para el método Zettelkasten
(require 'markdown) ;; Configuración de Markdown
(require 'splash) ;; Pantalla de inicio
(require 'hugo) ;; Configuración de paquetes para manejo de Blogs en Hugo
early-init.el
;; Esta configuración fue tomada de Doom
;; Difiere la 'garbage collection' más tardiamente en el proceso de inicio.
(setq gc-cons-threshold most-positive-fixnum
gc-cons-percentage 0.6)
;; Esto evita que Emacs cargue paquetes tempranamente y asi tenemos un inicio más rápido.
(setq package-enable-at-startup nil)
;; No permitir la carga desde la memoria caché del paquete (mismo motivo).
(setq package-quickstart nil)
;; Evita la aparición de Emacs 'sin estilo' al deshabilitar estos elementos de la interfaz de usuario antes de tiempo.
(push '(menu-bar-lines . 0) default-frame-alist)
(push '(tool-bar-lines . 0) default-frame-alist)
(push '(vertical-scroll-bars) default-frame-alist)
;; Cambiar el tamaño del marco de Emacs puede ser una parte muy costosa al cambiar la fuente.
;; Al inhibir esto, reducimos los tiempos de inicio con fuentes que son más grandes que las predeterminadas del sistema.
(setq frame-inhibit-implied-resize t)
;; Desactiva elementos de la interfaz gráfica
(menu-bar-mode -1) ;; Barra de menú
(tool-bar-mode -1) ;; Barra de heramientas
(scroll-bar-mode -1) ;; Barra de scroll
(setq inhibit-splash-screen t) ;; Pantalla de inicio
(setq use-file-dialog nil)
;; Evita las compilaciones no deseadas
(setq comp-deferred-compilation nil)
(provide 'early-init)
base.el
;; === Información Personal ===
(setq user-full-name "Javier Schulz"
user-mail-address "[email protected]")
;; === Iniciar con la ventana maximizada ===
(add-to-list 'initial-frame-alist '(fullscreen . maximized))
;; === No utiliza para `init.el` para código `custom-*` - Utiliza `custom-file.el`. ===
(setq custom-file "~/.emacs.d/.custom-file.el")
;; Asumir que el código en el archivo custom-file.el se ejecuta antes que el código anterior a esta línea no es una suposición segura.
;; Así que cargue este archivo de forma proactiva.
(load-file custom-file)
;; === Manejo de Paquetes ===
(require 'package)
(add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/") t)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
(package-initialize)
(when (not package-archive-contents)
(package-refresh-contents))
;; === Use-packacke ===
(unless (package-installed-p 'use-package)
(package-install 'use-package))
(require 'use-package)
;; === Configuración de ventana ===
(tool-bar-mode -1)
(display-time-mode 1)
;; === Smooth scroll ==
(setq redisplay-dont-pause t
scroll-margin 1
scroll-step 1
scroll-conservatively 10000
scroll-preserve-screen-position 1)
;; === Mantener los buffers actualizados automáticamente ===
(global-auto-revert-mode t)
;; === Mostrar paréntesis coincidentes ===
(show-paren-mode 1)
;; === Codificación ===
(set-file-name-coding-system 'utf-8)
(set-clipboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
(setq locale-coding-system 'utf-8)
(set-language-environment "UTF-8")
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(if (boundp 'buffer-file-coding-system)
(setq-default buffer-file-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8))
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
;; === Highlight current line. ===
(global-hl-line-mode t)
;; === FUENTES: ===
(set-frame-font "DejaVu Sans Mono-12" nil t)
;; (set-frame-font "Fantasque Sans Mono-16" nil t)
;; (set-frame-font "Source Code Pro-14" nil t)
;; (set-frame-font "Monaco-14" nil t)
;; (set-frame-font "Cousine-14" nil t)
(setq default-frame-alist '((font . "DejaVu Sans Mono-12")))
;; === Entorno de shell del sistema a Emacs. ===
;; Importante principalmente para el shell dentro de Emacs,
;; También cosas como la exportación del modo Org a Tex PDF
(use-package exec-path-from-shell
:ensure t
:config
(when (memq window-system '(mac ns x))
(exec-path-from-shell-initialize)))
;; === Backups y autosalvados se graban en carpeta /home/javier/.emacs.d/auto-save-list/ ===
(setq
backup-directory-alist '(("." . "/home/javier/.emacs.d/auto-save-list/"))
backup-by-copying t
auto-save-file-name-transforms '((".*" "/home/javier/.emacs.d/auto-save-list/" t))
kept-new-versions 6
kept-old-versions 2
delete-old-versions t
version-control t)
;; === Transforma las pregutnas yes-or-no en y-or-n ===
(defalias 'yes-or-no-p 'y-or-n-p)
;; === iMenu ===
;; Mostrar el menu con las funciones de los archivos
(use-package imenu
:ensure nil
:bind (("C-." . imenu)))
;; === Activar chequeo ortográfico ===
(setq ispell-dictionary "castellano") ;set the default dictionary
(dolist (hook '(text-mode-hook))
(add-hook hook (lambda () (flyspell-mode 1))))
;; === Activar botón derecho para cambiar palabra sugerida por chequeo ortográfico ===
(eval-after-load "flyspell"
'(progn
(define-key flyspell-mouse-map [down-mouse-3] #'flyspell-correct-word)
(define-key flyspell-mouse-map [mouse-3] #'undefined)))
;; === cambiar idiomas de diccionario ortográfico ===
(defun fd-switch-dictionary()
(interactive)
(let* ((dic ispell-current-dictionary)
(change (if (string= dic "castellano") "english" "castellano")))
(ispell-change-dictionary change)
(message "Dictionary switched from %s to %s" dic change)
))
(global-set-key (kbd "<f8>") 'fd-switch-dictionary)
;; === DIRECTORIO POR DEFECTO DE DOCUMENTOS DE EMACS ===
(setq default-directory "/media/datos/javier/Nextcloud/Notes/org/")
(provide 'base)
orgmode.el
;; === Evita que los heading se expandan al inicio ===
(setq org-startup-folded 't)
;; === Soporte habitual de la tecla Shift para selección de texto ===
(setq org-support-shift-select t)
;; === Opciones de la agenda de org-mode ===
(custom-set-variables
'(org-agenda-files
'("/media/datos/javier/Nextcloud/Notes/org/agenda.org" "/media/datos/javier/Nextcloud/Notes/org/inbox.org"))
'(org-deadline-warning-days 7)
'(org-directory "/media/datos/javier/Nextcloud/Notes/org/")
'(org-clock-persist t)
'(org-agenda-breadcrumbs-separator " ❱ "))
;; === Elimina la visualización de etiquetas en la agenda ===
;; (setq org-agenda-hide-tags-regexp ".") ;; Oculta todas las etiquetas
(setq org-agenda-hide-tags-regexp "inbox")
;; Compact the block agenda view
(setq org-agenda-compact-blocks t)
;; Archivo de notas por defecto
(setq org-default-notes-file "/media/datos/javier/Nextcloud/Notes/org/inbox.org")
;; Prioridades en Org-mode: (A B C)
(setq org-priority-faces '((?A . error)
(?B . warning)
(?C . success)))
(setq org-ellipsis (if (char-displayable-p ?) " " nil))
;;
(setq org-log-done t)
;; === Configuracion de Org-refile (C-c C-w) ===
(setq org-refile-use-outline-path 'file)
(setq org-outline-path-complete-in-steps nil)
(setq org-refile-allow-creating-parent-nodes 'confirm)
;; (setq org-refile-targets '((org-agenda-files :maxlevel . 2)))
(setq org-refile-targets (quote (("projects.org" :maxlevel . 2)
("agenda.org" :level . 2)
("Notas Medicas.org" :level . 4))))
;; === Org-Alert ===
;; === COLORES DE ESTADOS ===
(setq org-todo-keyword-faces
(quote (("TODO" :foreground "red" :weight bold)
("NEXT" :foreground "blue" :weight bold)
("DONE" :foreground "forest green" :weight bold)
("WAITING" :foreground "orange" :weight bold)
("HOLD" :foreground "magenta" :weight bold)
("CANCELLED" :foreground "forest green" :weight bold))))
;; === Toc-org ===
;; Mantendrá una tabla de contenido en el primer encabezado que tiene una etiqueta :TOC:.
(use-package toc-org
:ensure t
:after org
:hook (org-mode . toc-org-enable))
;; === ORG-indent ===
;; Aspecto mejorado al indentar
;; === Configuracion para archivar notas en archivo dedicado a tal fin, por orden cronológico: ===
(setq org-archive-location "/media/datos/javier/Nextcloud/Notes/org/archive/%s_archivo.org::datetree/")
;; === Justifica el texto ==
;; Las lineas largas no se cortan, sino que van bajando a la siguiente linea.
(global-visual-line-mode t)
;; === ORG-CAPTURE ===
(global-set-key (kbd "C-c c") 'org-capture)
(setq org-default-notes-file "/media/datos/javier/Nextcloud/Notes/org/inbox.org")
;; === Capture templates ===
(setq org-capture-templates
'(("t" "Nuevo TODO" entry
(file+headline "/media/datos/javier/Nextcloud/Notes/org/agenda.org" "Pendientes")
"* TODO %?\nCreada en: %U" :prepend t :empty-lines 1)
("i" "Ideas y notas" entry
(file+headline "/media/datos/javier/Nextcloud/Notes/org/inbox.org" "Ideas")
"** %?\nCreada en: %U" :prepend t :empty-lines 1)
("n" "Nota médica" entry
(file "/media/datos/javier/Nextcloud/Notes/org/Notas Medicas.org")
"* %?\n:PROPERTIES:\n:CUSTOM_ID: %<%Y%m%d%H%M%S - >\n:CREATED: %u\n:END:\n" :prepend nil :time-prompt t :empty-lines 1)
("a" "Audio Podcast" entry
(file+olp "/media/datos/javier/Nextcloud/Notes/org/milangaelectronica.com.ar.org" "Homepage" "Audios")
"** TODO %? %[~/.emacs.d/org-capture-template-milanga-podcast.txt]" :empty-lines 1 :prepend t)
("p" "Post milanga" entry
(file+olp "/media/datos/javier/Nextcloud/Notes/org/milangaelectronica.com.ar.org" "Homepage" "Blog")
"** TODO %? %[~/.emacs.d/org-capture-template-milanga-blog.txt]" :empty-lines 1 :prepend t)
("j" "Journal entry" entry
(file+headline "/media/datos/javier/Nextcloud/Notes/org/tech.org" "Journal")
"** %u %?" :prepend t :empty-lines 1 :time-prompt t :tree-type week)
("z" "Zettel" entry
(file+headline "/media/datos/javier/Nextcloud/Notes/org/zettelkasten.org" "Zettels")
"* %? %[~/.emacs.d/zettels.txt]" :empty-lines 1 :prepend t)))
;; === Org-superstar: Mejora estética de los encabezados ===
(use-package org-superstar
:ensure t
:after org
:hook (org-mode . org-superstar-mode))
;; === Org-super-agenda ===
(use-package org-super-agenda
:ensure t
:config (org-super-agenda-mode))
(setq org-agenda-custom-commands
'(("c" "Super Agenda" agenda
(org-super-agenda-mode)
((org-super-agenda-groups
'(;; Each group has an implicit boolean OR operator between its selectors.
(:name "Programado para este dia"
:time-grid t
:scheduled today
:order 0)
(:name "Important"
;; Single arguments given alone
:tag "Turnos"
:priority "A"
:order 1)
(:name "Due soon"
:deadline future)
(:name "Reschedule"
:scheduled past)
(:name "Overdue"
:deadline past)
;; Groups supply their own section names when none are given
(:todo "WAITING" :order 8) ; Set order of this section
(:todo ("SOMEDAY" "HOLD" "CHECK" "NEXT" "WATCHING")
;; Show this group at the end of the agenda (since it has the
;; highest number). If you specified this group last, items
;; with these todo keywords that e.g. have priority A would be
;; displayed in that group instead, because items are grouped
;; out in the order the groups are listed.
:order 9)
(:priority<= "B"
;; Show this section after "Today" and "Important", because
;; their order is unspecified, defaulting to 0. Sections
;; are displayed lowest-number-first.
:order 2)
;; After the last group, the agenda will display items that didn't
;; match any of these groups, with the default order position of 99
)))
'("t" "Todo View"
(
(todo "" ((org-agenda-overriding-header "")
(org-super-agenda-groups
'((:name "agenda"
:file-path "agenda"
:order 0
)
(:auto-category t
:order 9)
(org-agenda nil "a"))))))))))
;; === CALENDARIO calfw ===
;; https://github.com/kiwanami/emacs-calfw
(use-package calfw-org
:ensure t
:config
(setq cfw:org-overwrite-default-keybinding t)
(setq calendar-week-start-day 1)
(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"])
:bind ("C-c f" . cfw:open-org-calendar))
(provide 'orgmode)
theme.el
;; === Tema de Emacs ===
(use-package dracula-theme
:init
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes")
(load-theme 'dracula t)
:ensure t)
;; === ARREGLOS VISUALES ===
;; === Mostrar emojis ===
(use-package emojify
:ensure t
:hook (after-init . global-emojify-mode))
;; == Iconos ===
;; Primero es necesario hacer esto!!: "M-x all-the-icons-install-fonts"
(use-package all-the-icons
:ensure t)
;; === Pretty-mode ===
;; Cambiar ciertos caracteres por unos visualmente atractivos
(use-package pretty-mode
:ensure t
:config (global-pretty-mode t))
(use-package smart-mode-line-powerline-theme :ensure t)
(use-package smart-mode-line
:ensure t
:init (add-hook 'after-init-hook 'sml/setup)
:config
(sml/apply-theme 'powerline))
(provide 'theme)
completion.el
;; === Completado automatico ==
(use-package ivy
:diminish (ivy-mode . "")
:init (ivy-mode 1) ; globally at startup
:config
(setq ivy-use-virtual-buffers t)
(setq ivy-height 20)
(setq ivy-count-format "%d/%d ")
(provide 'init-ivy)
:ensure t)
;; === Hacer más usable ivy ===
;; FLX ordena los resultados de M-x de acorde al último usado.
;; === Yasnippet===
;; YASnippet es un sistema de plantillas para Emacs. Le permite escribir una abreviatura y expandirla automáticamente.
(use-package yasnippet
:ensure t
:defer t
:config
(setq yas-snippet-dirs
'("~/.emacs.d/snippets/")))
(use-package ivy-yasnippet
:ensure t)
(add-hook 'org-mode-hook 'yas-minor-mode)
(global-set-key (kbd "C-c x") 'ivy-yasnippet)
(use-package company
:ensure t
:bind (:map company-active-map
("C-n" . company-select-next)
("C-p" . company-select-previous))
:config
(setq company-idle-delay 0.3)
(global-company-mode t))
(provide 'completion)
keymappings.el
;; === ATAJOS DE TECLADO ==
;; F1 Borra ventana
;; F2 Treemacs
;; F5 Deft
;; F8 Cambia idioma del corrector.
;; F11 Abre el archivo agenda.org
;; F12 Agenda
;; C-x tt treemacs
;; C-c ac Super-agenda
;; C-x C-n Dired sidebar
;; C-c x Ivy Snippets
(global-set-key (kbd "<f1>") 'delete-window)
(global-set-key (kbd "<f2>") 'treemacs)
(global-set-key (kbd "<f12>") 'org-agenda-list)
(define-key global-map "\C-cl" 'org-store-link)
(define-key global-map "\C-ca" 'org-agenda)
;; asigna "F11" para abrir mi agenda.org sin tener que buscarlo
(global-set-key (kbd "<f11>")
(lambda () (interactive) (find-file "/media/datos/javier/Nextcloud/Notes/org/agenda.org")))
;; asigna "C-c i" para abrir mi inbox.org sin tener que buscarlo
(global-set-key (kbd "C-c i")
(lambda () (interactive) (find-file "/media/datos/javier/Nextcloud/Notes/org/inbox.org")))
;; asigna "C-c n" para abrir mi Notas médicas sin tener que buscarlo
(global-set-key (kbd "C-c n")
(lambda () (interactive) (find-file "/media/datos/javier/Nextcloud/Notes/org/Notas Medicas.org")))
;; asigna "C-c p" para abrir mi Projects sin tener que buscarlo
(global-set-key (kbd "C-c p")
(lambda () (interactive) (find-file "/media/datos/javier/Nextcloud/Notes/org/projects.org")))
;; === Regular undo-redo ===
(global-unset-key (kbd "C-z"))
(global-set-key (kbd "C-z") 'undo-fu-only-undo)
;; make some use of the Super key
(define-key global-map [?\s-a] 'dired-sidebar-toggle-sidebar)
(define-key global-map [?\s-c] 'cfw:open-org-calendar)
(provide 'keymappings)
varios.el
;; === Dired ==
;;
(use-package dired-sidebar
:bind (("C-x C-n" . dired-sidebar-toggle-sidebar))
:ensure t
:commands (dired-sidebar-toggle-sidebar)
:init
(add-hook 'dired-sidebar-mode-hook
(lambda ()
(unless (file-remote-p default-directory)
(auto-revert-mode))))
:config
(push 'toggle-window-split dired-sidebar-toggle-hidden-commands)
(push 'rotate-windows dired-sidebar-toggle-hidden-commands)
(setq dired-sidebar-subtree-line-prefix "__")
(setq dired-sidebar-theme 'vscode)
(setq dired-sidebar-use-term-integration t)
(setq dired-sidebar-use-custom-font t))
;; === Treemacs ===
;;
(use-package treemacs
:ensure t
:defer t
:init
(with-eval-after-load 'winum
(define-key winum-keymap (kbd "F2") #'treemacs-select-window))
:config
(progn
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
treemacs-deferred-git-apply-delay 0.5
treemacs-directory-name-transformer #'identity
treemacs-display-in-side-window t
treemacs-eldoc-display t
treemacs-file-event-delay 5000
treemacs-file-extension-regex treemacs-last-period-regex-value
treemacs-file-follow-delay 0.2
treemacs-file-name-transformer #'identity
treemacs-follow-after-init t
treemacs-git-command-pipe ""
treemacs-goto-tag-strategy 'refetch-index
treemacs-indentation 2
treemacs-indentation-string " "
treemacs-is-never-other-window nil
treemacs-max-git-entries 5000
treemacs-missing-project-action 'ask
treemacs-move-forward-on-expand nil
treemacs-no-png-images nil
treemacs-no-delete-other-windows t
treemacs-project-follow-cleanup nil
treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory)
treemacs-position 'left
treemacs-read-string-input 'from-child-frame
treemacs-recenter-distance 0.1
treemacs-recenter-after-file-follow nil
treemacs-recenter-after-tag-follow nil
treemacs-recenter-after-project-jump 'always
treemacs-recenter-after-project-expand 'on-distance
treemacs-show-cursor nil
treemacs-show-hidden-files t
treemacs-silent-filewatch nil
treemacs-silent-refresh nil
treemacs-sorting 'alphabetic-asc
treemacs-space-between-root-nodes t
treemacs-tag-follow-cleanup t
treemacs-tag-follow-delay 1.5
treemacs-user-mode-line-format nil
treemacs-user-header-line-format nil
treemacs-width 35
treemacs-workspace-switch-cleanup nil)
;; The default width and height of the icons is 22 pixels. If you are
;; using a Hi-DPI display, uncomment this to double the icon size.
;;(treemacs-resize-icons 44)
(treemacs-follow-mode t)
(treemacs-filewatch-mode t)
(treemacs-fringe-indicator-mode 'always)
(pcase (cons (not (null (executable-find "git")))
(not (null treemacs-python-executable)))
(`(t . t)
(treemacs-git-mode 'deferred))
(`(t . _)
(treemacs-git-mode 'simple))))
:bind
(:map global-map
("M-0" . treemacs-select-window)
("C-x t 1" . treemacs-delete-other-windows)
("C-x t t" . treemacs)
("C-x t B" . treemacs-bookmark)
("C-x t C-t" . treemacs-find-file)
("C-x t M-t" . treemacs-find-tag)))
(use-package treemacs-icons-dired
:after (treemacs dired)
:ensure t
:config (treemacs-icons-dired-mode))
(provide 'varios)
zettelkasten
;; Arreglos para uso del método Zettelkasten con Zetteldeft
;; === Zetteldeft ===
(use-package zetteldeft
:ensure t
:after deft
:config (zetteldeft-set-classic-keybindings))
(custom-set-variables
'(zetteldeft-id-format "%Y%m%d%H%M%S")
'(zetteldeft-id-regex "20[0-9]\\{4\\}\\([0-9]\\{2,\\}\\)\\{4\\}")
'(zetteldeft-link-indicator "[[")
'(zetteldeft-link-suffix "]]")
'(zetteldeft-title-prefix "# "))
;; === Deft ===
(use-package deft
:init
(setq deft-directory "/media/datos/javier/Gdrive/Notes/zettelkasten/")
(setq deft-extensions '("md" "org"))
(setq deft-use-filename-as-title t)
(setq deft-use-filter-string-for-filename t)
(setq deft-recursive t)
:bind
("<f5>" . deft)
:ensure t)
(setq-default truncate-lines 1) ;; Hace que Deft ponga archivos y descripcion en una linea
;; === Obsidian ===
;; https://github.com/licht1stein/obsidian.el
(use-package obsidian
:ensure t
:demand t
:config
(obsidian-specify-path "/media/datos/javier/Nextcloud/Notes/Notes/")
(global-obsidian-mode t)
:custom
;; This directory will be used for `obsidian-capture' if set.
(obsidian-inbox-directory "Inbox"))
(provide 'zettelkasten)
markdown.el
;; === Markdown Mode ===
(use-package markdown-mode
:ensure t
:commands (markdown-mode gfm-mode)
:mode (("README\\.md\\'" . gfm-mode)
("\\.md\\'" . markdown-mode)
("\\.markdown\\'" . markdown-mode))
:init (setq markdown-command "multimarkdown"))
(provide 'markdown)
splash.el
;; === DASHBOARD ===
;; Dependencies
(use-package page-break-lines
:ensure t)
(use-package all-the-icons)
(use-package dashboard
:init
(add-hook 'after-init-hook 'dashboard-refresh-buffer)
:ensure t
:config
(dashboard-setup-startup-hook)
(add-to-list 'dashboard-items '(agenda) t)
(setq dashboard-week-agenda t)
(setq dashboard-set-heading-icons t)
(setq dashboard-set-file-icons t)
(setq dashboard-startup-banner 3)
(setq dashboard-set-init-info t)
(setq dashboard-items '((recents . 5)
(bookmarks . 5)
(projects . 5)
(agenda . 5)
(registers . 5))))
(provide 'splash)
hugo.el
;; Configuracion de easy-hugo
(use-package easy-hugo
:ensure t
:init
:config
(setq easy-hugo-basedir "/media/datos/javier/Nextcloud/Blog/milanga-blog/")
(setq easy-hugo-url "https://milangaelectronica.com.ar")
(setq easy-hugo-sshdomain "milangaelectronica.com.ar")
(setq easy-hugo-root "/media/datos/javier/Nextcloud/Blog/milanga-blog/")
(setq easy-hugo-postdir "content/posts")
(setq easy-hugo-previewtime "300")
(define-key global-map (kbd "C-c C-e") 'easy-hugo)
(setq easy-hugo-server-flags "-D"))
(provide 'hugo)