;;; init-base.el --- Configuración base de emacs -*- lexical-binding: t -*- ;; Author: kj ;; URL: https://git.kj2.me/kj/confi-emacs-actual ;;; Commentary: ;; Configuración general de Emacs. ;; No incluye paquetes/extensiones, solo configuraciones generales. ;;; Code: ;; Native compilation (when (and (fboundp 'native-comp-available-p) (native-comp-available-p)) (progn (setq native-comp-async-report-warnings-errors nil) (setq comp-deferred-compilation t) (setq package-native-compile t) )) ;; Instalar elpaca.el (reemplpazando package.el) (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 :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 (call-process "git" nil buffer t "clone" (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 (elpaca elpaca-use-package ;; Enable :elpaca use-package keyword. (elpaca-use-package-mode) ;; Assume :elpaca t unless otherwise specified. (setq elpaca-use-package-by-default t)) ;; Block until current queue processed. (elpaca-wait) (defconst private-dir (expand-file-name "private" user-emacs-directory)) (defconst temp-dir (format "%s/cache" private-dir) "Hostname-based elisp temp directories.") ;; UTF-8 please (set-charset-priority 'unicode) (setq locale-coding-system 'utf-8) ; pretty (set-terminal-coding-system 'utf-8) ; pretty (set-keyboard-coding-system 'utf-8) ; pretty (set-selection-coding-system 'utf-8) ; please (prefer-coding-system 'utf-8) ; with sugar on top (setq default-process-coding-system '(utf-8-unix . utf-8-unix)) ;; Emacs customizations (when (display-graphic-p) (scroll-bar-mode -1) ; Quitar scrollbar. ) (tooltip-mode -1) ; Disable tooltips. (global-display-line-numbers-mode) ; Mostar número de línea. (show-paren-mode 1) ; Habilitar resaltado de brackets. (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) ;; Backups enabled, use nil to disable (setq history-length 1000 backup-inhibited nil make-backup-files nil auto-save-default nil auto-save-list-file-name (concat temp-dir "/autosave") create-lockfiles nil backup-directory-alist `((".*" . ,(concat temp-dir "/backup/"))) auto-save-file-name-transforms `((".*" ,(concat temp-dir "/auto-save-list/") t))) ;; Configuración cuando es un server (defun setup-daemon () "Carga la configuración del modo daemon." (message "Corriendo en modo daemon.") (set-face-attribute 'default nil :font "Fira Code Retina" :height 112) ;; Abrir primero el dashboard (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*") (dashboard-refresh-buffer))) ;; Cerrar buffers al cerrar emacsclient ;; (add-hook 'delete-frame-functions ;; (lambda (frame) ;; (mapc 'kill-buffer (delq (get-buffer "*dashboard*") (buffer-list))) ;; )) ) (if (daemonp) (add-hook 'after-make-frame-functions (lambda (frame) (with-selected-frame frame (setup-daemon)))) (message "Corriendo en modo normal.")) (add-hook 'elpaca-after-init-hook (lambda () (load custom-file 'noerror))) (provide 'init-base) ;;; init-base.el ends here