; ; -*- lexical-binding : t ; -*-
; ; Minimize garbage collection during startup
(setq gc-cons-threshold most-positive-fixnum)
; ; Lower threshold to speed up garbage collection
(add-hook 'emacs-statup-hook
(lambda ()
(setq gc-cons-threshold (* 5 1000 1000 ))))
; ;;PACKAGE LIST
(setq package-archives
'((" melpa" . " https://melpa.org/packages/" )
(" org" . " https://orgmode.org/elpa/" )
(" elpa" . " https://elpa.gnu.org/packages/" )))
; ;; BOOTSTRAP USE-PACKAGES
(package-initialize )
(require 'use-package-ensure )
(setq use-package-always-ensure t )
(unless (package-installed-p 'use-package )
(package-refresh-contents )
(package-install 'use-package ))
(eval-when-compile (require 'use-package ))
; ;; PACKAGE UPDATE
(use-package auto-package-update
:custom
(auto-package-update-interval 7 )
(auto-package-update-prompt-before-update t )
(auto-package-update-hide-results t )
:config
(auto-package-update-maybe)
(auto-package-update-at-time " 09:00" ))
Language spelling and typing
; ;; LANGUAGE SPELLING AND TYPING
(set-input-method 'spanish-prefix )
(use-package guess-language ; Automatically detect language for Flyspell
:ensure t
:defer t
:init (add-hook 'text-mode-hook #'guess-language-mode )
:config
(setq guess-language-langcodes '((en . (" en_US" " English" " 🇺🇸" " American" ))
(pt . (" pt_PT" " Portuguese" " 🇵🇹" " Portuguese" ))
(es . (" es_ES" " Spanish" " 🇪🇸" " Spanish" )))
guess-language-languages '(en es pt)
guess-language-min-paragraph-length 45 )
:diminish guess-language-mode)
(use-package go-translate
:ensure t
:config
(setq gt-langs '(es en))
(setq gt-default-translator (gt-translator :engines (gt-google-engine))))
; ;; KEYBINDS
(use-package general
:after evil
:config
(general-create-definer efs/leader-keys
:keymaps '(normal insert visual emacs)
:prefix " SPC"
:global-prefix " M-SPC" )
(efs/leader-keys
" C-s" '((lambda () (interactive )(set-input-method " spanish-prefix" )) :which-key " change input method to spanish" )
" C-p" '((lambda () (interactive )(set-input-method " portuguese-prefix" )) :which-key " change input method to portuguese" )
" C-j" '((lambda () (interactive )(set-input-method " japanese" )) :which-key " change input method to japanese" )
" n" '(org-roam-node-find :which-key " org file with tasks" )
" t" '(vterm :which-key " teminal" )
" a" '((lambda () (interactive )(org-agenda nil " n" )) :which-key " org week agenda with todos" )
" c" '(cfw:open-org-calendar :which-key " calendar" )
" d" '(treemacs :which-key " treemacs" )
" f" '(find-file :which-key " find file" )
" s" '(counsel-projectile-rg :which-key " search in project" )
" e" '(flycheck-list-errors :which-key " list of errors in code" )
" b" '(switch-to-buffer :which-key " buffer menu" )
" k" '(kill-buffer :which-key " kill buffer" )
" C-k" '(kill-buffer-and-window :which-key " kill buffer and window" )
))
; ;; UI
(setq inhibit-startup-message t )
(scroll-bar-mode -1 ) ; Disable visible scrollbar
(tool-bar-mode -1 ) ; Disable the toolbar
(tooltip-mode -1 ) ; Disable tooltips
(set-fringe-mode 10 ) ; Give some breathing room
(menu-bar-mode -1 ) ; Disable the menu bar
; ; Set up the visible bell
(setq visible-bell t )
(column-number-mode )
(setq display-line-numbers-type 'relative )
(global-display-line-numbers-mode t )
; ; Split to the side by default
(setq split-width-threshold 0 )
(setq split-height-threshold nil )
; ; padding
; ; (use-package spacious-padding
; ; :config (spacious-padding-mode 1))
; ; (defun bs-sp-workaround ()
; ; "Workaround issues with `spacious-padding-mode' when using emacsclient."
; ; (when server-mode
; ; (spacious-padding-mode 1)
; ; (remove-hook 'server-after-make-frame-hook #'bs-sp-workaround)))
; ; (add-hook 'server-after-make-frame-hook #'bs-sp-workaround)
; ; Disable line numbers for some modes
(dolist (mode '(org-mode-hook cfw:calendar-mode-hook
shell-mode-hook
treemacs-mode-hook
term-mode-hook
vterm-mode-hook
eshell-mode-hook))
(add-hook mode (lambda () (display-line-numbers-mode 0 ))))
; ;modeline
(use-package all-the-icons
:ensure t )
(use-package doom-modeline
:ensure t
:init (doom-modeline-mode 1 )
:custom ((doom-modeline-height 28 )))
; ;; THEME
; ; Customizations prior to loading the themes
(use-package modus-themes)
(setq modus-themes-italic-constructs t
modus-themes-bold-constructs t
modus-themes-mixed-fonts t
modus-themes-variable-pitch-ui t
modus-themes-org-blocks 'gray-background )
(require 'modus-vivendi-tinted-theme )
(setq modus-vivendi-tinted-palette-overrides
'(
(bg-main " #0f0f0f" )
(bg-dim " #191919" )
(fg-main " #ffffff" )
(fg-dim " #b9b9b9" )
(fg-alt " #e0e0e0" )
(bg-active " #4b4b4b" )
(bg-inactive " #2d2d2d" )
(border " #2d2d2d" )
(gray " #191919" )
(gray-faint " #2d2d2d" )
(gray-light " #4b4b4b" )
(whiteish " #e0e0e0" )
(light-gray " #b9b9b9" )
; ; (red "#d1143d")
; ; (red-faint "#d1536e")
; ; (red-intense red)
; ; (red-warmer red)
; ; (red-cooler red-faint)
; ; (green "#14cc4b")
; ; (green-faint "#57B272")
; ; (green-intense green)
; ; (green-warmer green)
; ; (green-cooler green-faint)
; ; (yellow "#DFAD16")
; ; (yellow-faint "#DDC16E")
; ; (yellow-intense "#efef00")
; ; (yellow-warmer orange)
; ; (yellow-cooler yellow-faint)
; ; (blue "#1861f4")
; ; (blue-faint "#7aa3f4")
; ; (blue-intense blue)
; ; (blue-warmer blue)
; ; (blue-cooler blue-faint)
; ; (magenta "#ea2eb8")
; ; (magenta-faint "#ea75cb")
; ; (magenta-intense magenta)
; ; (magenta-warmer magenta-faint)
; ; (magenta-cooler purple-faint)
; ; (cyan "#14B1CC")
; ; (cyan-faint "#51BACD")
; ; (cyan-intense cyan)
; ; (cyan-warmer cyan)
; ; (cyan-cooler cyan-faint)
; ; (purple "#732EEA")
; ; (purple-faint "#9F71EA")
; ; (orange "#E56115")
; ; (orange-faint "#E68E5C")
; ; ;;backgrounds
; ; (bg-red-intense "#990F2D")
; ; (bg-green-intense "#0F9939")
; ; (bg-blue-intense "#0F3D99")
; ; (bg-yellow-intense "#99770F")
; ; (bg-magenta-intense "#991E79")
; ; (bg-cyan-intense "#0F8499")
; ; (bg-purple-intense "#4811A7")
; ; (bg-orange-intense "#99420F")
; ; (bg-red-subtle "#660A1E")
; ; (bg-green-subtle "#0A6624")
; ; (bg-blue-subtle "#0A2966")
; ; (bg-yellow-subtle "#664F0A")
; ; (bg-magenta-subtle "#661450")
; ; (bg-cyan-subtle "#0A5866")
; ; (bg-purple-subtle "#300B6F")
; ; (bg-orange-subtle "#662C0A")
; ; (bg-red-nuanced "#33050F")
; ; (bg-green-nuanced "#053312")
; ; (bg-blue-nuanced "#051433")
; ; (bg-yellow-nuanced "#332705")
; ; (bg-magenta-nuanced "#330A28")
; ; (bg-cyan-nuanced "#052C33")
; ; (bg-purple-nuanced "#180638")
; ; (bg-orange-nuanced "#331505")
(bg-completion bg-blue-subtle)
(bg-hover bg-cyan-sublte)
(bg-hover-secondary bg-orange-subtle)
(bg-hl-line bg-purple-subtle)
(bg-region gray-light)
(fg-region witheish)
(bg-char-0 bg-blue-subtle)
(bg-char-1 bg-magenta-subtle)
(bg-char-2 bg-yellow-subtle)
(bg-mode-line-active gray)
(fg-mode-line-active whiteish)
(border-mode-line-active unespecified)
(bg-mode-line-inactive gray-faint)
(fg-mode-line-inactive light-gray)
(border-mode-line-inactive unespecified)
(modeline-err red-faint)
(modeline-warning yellow-faint)
(modeline-info cyan-faint)
(bg-tab-bar gray-faint)
(bg-tab-current bg-main)
(bg-tab-other gray-light)
; ;mapping
(fringe bg-dim)
(cursor yellow-faint)
(keybind blue-faint)
(name magenta-faint)
(identifier yellow-faint)
(err red)
(warning yellow)
(info cyan)
(underline-err red)
(underline-warning yellow)
(underline-note cyan)
; ;headings
(fg-heading-0 whiteish)
(fg-heading-1 cyan-faint)
(fg-heading-2 yellow-faint)
(fg-heading-3 blue-faint)
(fg-heading-4 magenta-faint)
(fg-heading-5 green-faint)
(fg-heading-8 purple-faint)
(fg-heading-7 orange-faint)
(fg-heading-6 red-faint)
; ;code
(builtin purple)
(comment green-faint)
(constant blue-faint)
(docstring cyan-faint)
(docmarkup orange-faint)
(fnname purple-faint)
(keyword magenta-faint)
(preprocessor red-faint)
(string green)
(type cyan-faint)
(variable cyan)
(rx-construct green-cooler)
(rx-backslash orange)
))
(load-theme 'modus-vivendi-tinted :no-confirm )
Background and terminal opacity
; ; (defun set-black-background()
; ; "Make theme's background color black."
; ; (set-face-background 'default "#000000" (selected-frame)))
; ; (if (daemonp)
; ; (add-hook 'after-make-frame-functions
; ; (lambda (frame)
; ; ;; (setq doom-modeline-icon t)
; ; (with-selected-frame frame
; ; (set-black-background))))
; ; (set-black-background))
; ; Transparent background on GUI
; ; (set-frame-parameter nil 'alpha-background 80)
; ; (add-to-list 'default-frame-alist '(alpha-background . 80))
(defun on-frame-open (&optional frame )
" If the FRAME is created in a terminal don't load background color."
(unless (display-graphic-p frame)
(set-face-background 'default " unspecified-bg" frame)))
(add-hook 'after-make-frame-functions 'on-frame-open )
(defun on-after-init ()
" If the selected FRAME is in a terminal don't load background color."
(unless (display-graphic-p (selected-frame ))
(set-face-background 'default " unspecified-bg" (selected-frame ))))
(add-hook 'window-setup-hook 'on-after-init )
; ;; FONT
(defvar efs/default-font-size 110 )
(defvar efs/default-variable-font-size 110 )
(set-face-attribute 'default nil :font " SauceCodePro Nerd Font" :height efs/default-font-size)
; ; Set the fixed pitch face
(set-face-attribute 'fixed-pitch nil :font " SauceCodePro Nerd Font" :height efs/default-font-size)
; ; Set the variable pitch face
(set-face-attribute 'variable-pitch nil :font " DejaVu Sans" :height efs/default-variable-font-size :weight 'regular )
Add support for 256colors on ST
(add-to-list 'term-file-aliases
'(" st-256color" . " xterm-256color" ))
(defun efs/org-font-setup ()
" Set faces for `org-mode' heading levels."
(dolist (face '((org-level-1 . 1.2 )
(org-level-2 . 1.1 )
(org-level-3 . 1.05 )
(org-level-4 . 1.0 )
(org-level-5 . 1.0 )
(org-level-6 . 1.0 )
(org-level-7 . 1.0 )
(org-level-8 . 1.0 )))
(set-face-attribute (car face) nil :font " SauceCodePro Nerd Font" :weight 'regular :height (cdr face)))
; ; Ensure that anything that should be fixed-pitch in Org files appears that way
(set-face-attribute 'org-block nil :foreground nil :inherit 'fixed-pitch )
(set-face-attribute 'org-table nil :inherit 'fixed-pitch )
(set-face-attribute 'org-formula nil :inherit 'fixed-pitch )
(set-face-attribute 'org-code 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-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-checkbox nil :inherit 'fixed-pitch )
(set-face-attribute 'line-number nil :inherit 'fixed-pitch )
(set-face-attribute 'line-number-current-line nil :inherit 'fixed-pitch ))
; ;; ORG-MODE
(require 'org )
(defun efs/org-mode-setup ()
" Set up `org-mode' ."
(org-indent-mode )
(variable-pitch-mode 1 )
(visual-line-mode 1 ))
(use-package org
:pin org
:commands (org-capture org-agenda)
:hook (org-mode . efs/org-mode-setup)
:config
(setq org-ellipsis " ▾" )
(setq org-todo-keywords
'((sequence " TODO(t)" " PROG(p)" " DONE(d)" )))
(setq org-agenda-custom-commands
'((" n" " Custom Agenda with TODOs"
((agenda " " )
(todo " PROG" )
(todo " TODO" )
))))
(setq org-return-follows-link t )
(setq org-agenda-span 10 )
(setq org-agenda-start-with-log-mode t )
(setq org-log-done 'time )
(setq org-log-into-drawer t )
(setq org-refile-targets
'((" ~/notes/20240707172055-archive.org" :maxlevel . 1 )))
(advice-add 'org-refile :after 'org-save-all-org-buffers )
(efs/org-font-setup))
(use-package evil-org
:ensure t
:after (evil org )
:hook (org-mode . (lambda () evil-org-mode))
:config
(require 'evil-org-agenda )
(evil-org-agenda-set-keys))
; ;org-roam
(use-package org-roam
:ensure t
:custom
(org-roam-directory (file-truename " ~/notes" ))
(org-roam-completion-everywhere t )
(org-roam-capture-templates
'((" d" " default" plain
" \n - tags :: %?"
:if-new (file+head " %<%Y%m%d%H%M%S>-${slug}.org" " #+title: ${title}\n " )
:unnarrowed t )))
:bind ((" C-c n l" . org-roam-buffer-toggle)
(" C-c n f" . org-roam-node-find)
(" C-c n i" . org-roam-node-insert)
(" C-c n g" . org-roam-ui-open)
(" C-c n c" . org-roam-capture))
:bind-keymap (" C-c j" . org-roam-dailies-map)
:config
(add-to-list 'display-buffer-alist
'(" \\ *org-roam\\ *"
(display-buffer-in-direction)
(direction . right)
(window-width . 0.33 )
(window-height . fit-window-to-buffer)))
(setq org-roam-node-display-template (concat " ${title:*} " (propertize " ${tags:10}" 'face 'org-tag ))) (org-roam-db-autosync-mode)
(require 'org-roam-dailies )
(setq org-roam-dailies-directory " journal/" )
(setq org-roam-dailies-capture-templates
'((" d" " default" entry " %?"
:target (file+head " %<%Y-%m-%d>.org"
" #+title: %<%Y-%m-%d>\n #+filetags: journal\n \n - tags :: [[id:756fbf4c-a9b6-4a52-b512-bd39842029a1][journal]] \n " ))))
(require 'org-roam-export )
(require 'org-roam-protocol ))
(use-package org-roam-ui
:ensure t
:after org-roam)
(require 'org-roam )
(defun my/org-roam-filter-by-tag (tag-name )
(lambda (node )
(member tag-name (org-roam-node-tags node))))
(defun my/org-roam-list-notes-by-tag (tag-name )
(mapcar #'org-roam-node-file
(seq-filter
(my/org-roam-filter-by-tag tag-name)
(org-roam-node-list))))
(defun my/org-roam-refresh-agenda-list ()
(interactive )
(setq org-agenda-files (my/org-roam-list-notes-by-tag " tasks" )))
; ; Build the agenda list the first time for the session
(my/org-roam-refresh-agenda-list)
(defun my/org-roam-project-finalize-hook ()
" Adds the captured project file to `org-agenda-files' if the
capture was not aborted."
; ; Remove the hook since it was added temporarily
(remove-hook 'org-capture-after-finalize-hook #'my/org-roam-project-finalize-hook )
; ; Add project file to the agenda list if the capture was confirmed
(unless org-note-abort
(with-current-buffer (org-capture-get :buffer )
(add-to-list 'org-agenda-files (buffer-file-name )))))
(defun my/org-roam-find-project ()
(interactive )
; ; Add the project file to the agenda after capture is finished
(add-hook 'org-capture-after-finalize-hook #'my/org-roam-project-finalize-hook )
; ; Select a project file to open, creating it if necessary
(org-roam-node-find
nil
nil
(my/org-roam-filter-by-tag " tasks" )))
(global-set-key (kbd " C-c n t" ) #'my/org-roam-find-project )
(use-package visual-fill-column)
(defun efs/org-mode-visual-fill ()
" Center text on `org-mode' ."
(setq visual-fill-column-width 120
visual-fill-column-center-text t )
(visual-fill-column-mode 1 ))
(use-package org-bullets
:hook (org-mode . org-bullets-mode)
:custom
(org-bullets-bullet-list '(" ✖" " ✦" " ✧" " ●" " ○" " ●" " ○" )))
(use-package visual-fill-column
:hook (org-mode . efs/org-mode-visual-fill))
; ; source block
(require 'org-tempo )
(add-to-list 'org-structure-template-alist '(" el" . " src emacs-lisp" ))
(add-to-list 'org-structure-template-alist '(" sh" . " src shell" ))
(add-to-list 'org-structure-template-alist '(" calc" . " src calc" ))
(add-to-list 'org-structure-template-alist '(" py" . " src python" ))
(add-to-list 'org-structure-template-alist '(" oc" . " src ocaml" ))
(add-to-list 'org-structure-template-alist '(" cpp" . " src cpp" ))
(add-to-list 'org-structure-template-alist '(" js" . " src javascript" ))
(add-to-list 'org-structure-template-alist '(" xml" . " src xml" ))
; ; Org babel for code blocks
(with-eval-after-load 'org
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t )
(shell . t )
(calc . t )
(ocaml . t )
(python . t )))
(push '(" conf-unix" . conf-unix) org-src-lang-modes))
; ;colors in latex export
(require 'ox-latex )
(add-to-list 'org-latex-packages-alist '(" " " minted" ))
(setq org-latex-src-block-backend 'minted )
(setq org-latex-pdf-process
'(" pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
" pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
" pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f" ))
; ;; VIM
(use-package evil
:demand t
:bind ((" <escape>" . keyboard-escape-quit))
:init
; ; allow for using cgn
; ; (setq evil-search-module 'evil-search)
(setq evil-want-keybinding nil )
; ; no vim insert bindings
(setq evil-undo-system 'undo-fu )
:config
(evil-mode t )
(define-key evil-insert-state-map (kbd " C-g" ) 'evil-normal-state )
(define-key evil-normal-state-map " \C -w\C -h" 'evil-window-left )
(define-key evil-normal-state-map " \C -w\C -j" 'evil-window-down )
(define-key evil-normal-state-map " \C -w\C -k" 'evil-window-up )
(define-key evil-normal-state-map " \C -w\C -l" 'evil-window-right )
(define-key evil-motion-state-map (kbd " SPC" ) nil )
(define-key evil-motion-state-map (kbd " RET" ) nil )
(evil-set-initial-state 'messages-buffer-mode 'normal )
(evil-set-initial-state 'dashboard-mode 'normal ))
(use-package evil-collection
:after evil
:config
(setq evil-want-integration t )
(evil-collection-init))
; ; Change cursor terminal
(unless (display-graphic-p )
(use-package evil-terminal-cursor-changer
:config (evil-terminal-cursor-changer-activate)))
Code completion and correction
; ;; Code Completion and correction
; ;lsp
(use-package lsp-mode
:commands (lsp lsp-deferred)
:hook (lsp-mode . efs/lsp-mode-setup)
:bind
(:map lsp-mode-map
((" M-RET" . lsp-execute-code-action)))
:config
(lsp-enable-which-key-integration t ))
(add-hook 'dockerfile-mode-hook #'lsp )
(add-hook 'java-mode-hook #'lsp )
(add-hook 'python-mode-hook #'lsp )
(add-hook 'sql-mode-hook #'lsp )
(add-hook 'c-mode-hook #'lsp )
(add-hook 'c++-mode-hook #'lsp )
(add-hook 'cmake-mode-hook #'lsp )
(add-hook 'bash-mode-hook #'lsp )
(add-hook 'web-mode-hook #'lsp )
(add-hook 'dart-mode-hook #'lsp )
(add-hook 'ocaml-mode-hook #'lsp )
(defun efs/lsp-mode-setup ()
" Set up lsp mode."
(setq lsp-headerline-breadcrumb-segments '(path-up-to-project file symbols))
(lsp-headerline-breadcrumb-mode))
(use-package lsp-ui
:hook (lsp-mode . lsp-ui-mode)
:custom
(lsp-ui-doc-position 'bottom ))
(use-package lsp-treemacs
:after (lsp treemacs))
; ;flycheck
(use-package flycheck
:ensure t
:init (global-flycheck-mode))
; ;company
(use-package company
:after lsp-mode
:hook (lsp-mode . company-mode)
:bind (:map company-active-map
(" <tab>" . company-complete-selection))
(:map lsp-mode-map
(" <tab>" . company-indent-or-complete-common))
:custom
(company-minimum-prefix-length 1 )
(company-idle-delay 0.0 ))
(use-package company-box
:hook (company-mode . company-box-mode))
; ;yasnippet
(use-package yasnippet
:config (yas-global-mode ))
(use-package yasnippet-snippets)
; ; fix yasnippet conflicts
(require 'company )
(defun company-yasnippet-or-completion ()
" Use Yasnippet or fall back to company completion."
(interactive )
(unless (yas-maybe-expand-abbrev-key-filter 'yas-triggers-in-field )
(call-interactively #'company-complete-common )))
(add-hook 'company-mode-hook
(lambda ()
(substitute-key-definition 'company-complete-common
'company-yasnippet-or-completion
company-active-map)))
; ;; Language specific configurations
; ;Ocaml
(require 'opam-user-setup " ~/.emacs.d/opam-user-setup.el" )
(use-package flycheck-ocaml
:config
(with-eval-after-load 'merlin
; ; Disable Merlin's own error checking
(setq merlin-error-after-save nil )
; ; Enable Flycheck checker
(flycheck-ocaml-setup))
(add-hook 'tuareg-mode-hook #'merlin-mode ))
; ;C/C++
(setq-default fill-column 80 )
(add-hook 'c-mode-hook 'display-fill-column-indicator-mode )
(add-hook 'c++-mode-hook 'display-fill-column-indicator-mode )
; ;Java
(use-package lsp-java
:config (add-hook 'java-mode-hook 'lsp ))
(require 'lsp-java-boot )
; ; to enable the lenses
(add-hook 'lsp-mode-hook #'lsp-lens-mode )
(add-hook 'java-mode-hook #'lsp-java-boot-lens-mode )
; ;Python
(use-package python-mode
:ensure t
:hook (python-mode . lsp-deferred)
:custom
; ; NOTE: Set these if Python 3 is called "python3" on your system!
; ; (python-shell-interpreter "python3")
; ; (dap-python-executable "python3")
(dap-python-debugger 'debugpy )
:config
(require 'dap-python ))
(use-package pyvenv
:after python-mode
:config
(pyvenv-mode 1 ))
; ;Erlang
; ;(setq load-path (cons "/lib/erlang/lib/tools-3.5.2/emacs"
; ;load-path))
; ;(setq erlang-root-dir "/lib/erlang")
; ;(setq exec-path (cons "/lib/erlang/bin" exec-path))
; ;(require 'erlang-start)
; ;(require 'erlang-flymake)
; ;html-js
(use-package web-mode
:mode
(" .twig$"
" .html?$"
" .hbs$"
" .vue$"
" .blade.php$" )
:config
(setq web-mode-markup-indent-offset 2
web-mode-css-indent-offset 2
web-mode-code-indent-offset 2
web-mode-style-padding 2
web-mode-script-padding 2
web-mode-enable-auto-closing t
web-mode-enable-auto-opening t
web-mode-enable-auto-pairing t
web-mode-enable-auto-indentation t ))
; ;Flutter
(use-package dart-mode)
(use-package lsp-dart
:after dart-mode
:config (setq lsp-dart-dap-flutter-hot-reload-on-save t ))
(setq gc-cons-threshold (* 100 1024 1024 )
read-process-output-max (* 1024 1024 ))
; ;Nix
(use-package nix-mode)
; ;Meson
(use-package meson-mode)
; ;;DIRED
(use-package pdf-tools)
(use-package dired-single :defer t )
(use-package dired-ranger :defer t )
(use-package dirvish
:init
(dirvish-override-dired-mode)
:custom
(dirvish-quick-access-entries ; It's a custom option, `setq' won't work
'((" h" " ~/" " Home" )
(" d" " ~/downloads/" " Downloads" )
(" u" " /universidad/" " Universidad" )
(" i" " /igalia/" " Igalia" )
(" t" " ~/.local/share/Trash/files/" " TrashCan" )))
:config
; ; (dirvish-peek-mode) ; Preview files in minibuffer
; ; (dirvish-side-follow-mode) ; similar to `treemacs-follow-mode'
(evil-make-overriding-map dirvish-mode-map 'normal )
(setq dirvish-reuse-session t )
(setq dired-mouse-drag-files t )
(setq mouse-drag-and-drop-region-cross-program t )
(setq dirvish-mode-line-format
'(:left (sort symlink) :right (omit yank index)))
(setq dirvish-attributes
'(all-the-icons file-size collapse subtree-state))
(setq delete-by-moving-to-trash t )
(setq dired-listing-switches
" -l --almost-all --human-readable --group-directories-first --no-group" )
(setq dirvish-open-with-programs
(append dirvish-open-with-programs '(
((" xlsx" " docx" " doc" " odt" " ods" ) " libreoffice" " %f" )
((" jpg" " jpeg" " png" ) " eog" " %f" )
((" pdf" ) " zathura" " %f" ))))
:bind ; Bind `dirvish|dirvish-side|dirvish-dwim' as you see fit
((" C-c f" . dirvish-fd)
:map dirvish-mode-map ; Dirvish inherits `dired-mode-map'
(" h" . dired-single-up-directory)
(" j" . dired-next-line)
(" k" . dired-previous-line)
(" l" . dired-single-buffer)
(" q" . dirvish-quit)
(" f" . dirvish-file-info-menu)
(" y" . dirvish-yank-menu)
(" N" . dirvish-narrow)
(" y" . dired-ranger-copy)
(" X" . dired-ranger-move)
(" p" . dired-ranger-paste)
(" TAB" . dirvish-subtree-toggle)
(" C-a" . dirvish-quick-access)
(" C-f" . dirvish-fd-jump)
(" C-c t" . dirvish-layout-toggle)
(" C-c d" . make-directory)
(" C-c m" . dirvish-mark-menu)
(" M-c e" . dirvish-emerge-menu)))
; ;ivy
(use-package ivy
:config
(ivy-mode t )
(setq ivy-use-virtual-buffers t )
(setq enable-recursive-minibuffers t ))
(use-package ivy-rich
:after ivy
:init (ivy-rich-mode t ))
(use-package counsel
:config (counsel-mode t ))
(use-package ivy-prescient
:after counsel
:custom
(ivy-prescient-enable-filtering nil )
:config
(prescient-persist-mode t )
(ivy-prescient-mode t ))
(use-package lsp-ivy
:after lsp)
; ;projectile
(use-package projectile
:diminish projectile-mode
:config (projectile-mode)
:custom ((projectile-completion-system 'ivy ))
:bind-keymap
(" C-c p" . projectile-command-map)
:init
; ; NOTE: Set this to the folder where you keep your Git repos!
; ; (when (file-directory-p "~/")
; ; (setq projectile-project-search-path '("~/")))
(setq projectile-switch-project-action #'projectile-dired ))
(use-package counsel-projectile
:after projectile
:config (counsel-projectile-mode))
; ;treemacs
(use-package treemacs
:ensure t
:defer t
: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 'simple
treemacs-file-event-delay 2000
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-expand-after-init t
treemacs-find-workspace-method 'find-for-file-or-pick-first
treemacs-git-command-pipe " "
treemacs-goto-tag-strategy 'refetch-index
treemacs-header-scroll-indicators '(nil . " ^^^^^^" )
treemacs-hide-dot-git-directory t
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 t
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-litter-directories '(" /node_modules" " /.venv" " /.cask" )
treemacs-project-follow-into-home nil
treemacs-show-cursor nil
treemacs-show-hidden-files t
treemacs-silent-filewatch nil
treemacs-silent-refresh nil
treemacs-sorting 'alphabetic-asc
treemacs-select-when-already-in-treemacs 'move-back
treemacs-space-between-root-nodes t
treemacs-tag-follow-cleanup t
treemacs-tag-follow-delay 0.5
treemacs-text-scale nil
treemacs-user-mode-line-format nil
treemacs-user-header-line-format nil
treemacs-wide-toggle-width 70
treemacs-width 35
treemacs-width-increment 1
treemacs-width-is-initially-locked t
treemacs-workspace-switch-cleanup nil )
(treemacs-resize-icons 15 )
(treemacs-project-follow-mode t )
(treemacs-follow-mode t )
(treemacs-filewatch-mode t )
(treemacs-fringe-indicator-mode 'always )))
(use-package treemacs-evil
:after (treemacs evil)
:ensure t )
(use-package treemacs-projectile
:after (treemacs projectile)
:ensure t )
(use-package treemacs-magit
:after (treemacs magit)
:ensure t )
; ;vterm
(use-package vterm
:commands vterm
:config
(setq vterm-shell " zsh" )
(setq vterm-max-scrollback 10000 ))
; ;org-mode calendar
(use-package calfw-org)
(setq calendar-week-start-day 1 )
; ;magit
(use-package magit
:ensure t )
; ;git-gutter
(use-package git-gutter
:hook (prog-mode . git-gutter-mode)
:config
(setq git-gutter:update-interval 0.02 ))
; ;whichKey
(use-package which-key
:defer 0
:diminish which-key-mode
:config
(which-key-mode)
(setq which-key-idle-delay 1 ))
Commenter
; ;commenting
(use-package evil-nerd-commenter
:bind (" C-/" . evilnc-comment-or-uncomment-lines))
; ;Rainbow delimiters
(use-package rainbow-delimiters
:hook (prog-mode . rainbow-delimiters-mode))
; ;colorize color names
(use-package rainbow-mode
:config
(setq rainbow-ansi-colors nil )
(setq rainbow-x-colors nil ))
; ;WakaTime
(use-package wakatime-mode)
(global-wakatime-mode)
; ; Better undo
(use-package undo-fu)
(use-package undo-fu-session
:config
(setq undo-fu-session-incompatible-files '(" /COMMIT_EDITMSG\\ '" " /git-rebase-todo\\ '" )))
(undo-fu-session-global-mode)
(setq undo-fu-session-directory " ~/.emacs.d/undo-history" )
; ;undo-tree
(use-package vundo)
; ; Resize splits
(use-package zoom
:ensure t
:init (zoom-mode t ))
; ; Ledger for finances
(use-package ledger-mode
:ensure t
:config
(defun ledger-mode-clean-buffer-after-save ()
(when (eq major-mode 'ledger-mode )
(ledger-mode-clean-buffer)))
(add-hook 'after-save-hook 'ledger-mode-clean-buffer-after-save ))
; ; Solaire mode
(use-package solaire-mode
:ensure t
:init (solaire-global-mode t ))
; ;; Other configurations
; ; always ask for `y` or `n` instead of `yes` or `no`
(defalias 'yes-or-no-p 'y-or-n-p )
; ;scrolling
(setq scroll-margin 8
scroll-step 1
scroll-conservatively 10000
scroll-preserve-screen-position 1 )
; ; set tab to 4 spaces
(setq-default indent-tabs-mode nil )
(setq-default tab-width 4 )
(setq indent-line-function 'insert-tab )
(setq c-default-style " linux" )
(setq c-basic-offset 4 )
(c-set-offset 'comment-intro 0 )
; ; autocomplete brackets
(electric-pair-mode t )
; ; set custom
(setq custom-file " ~/.emacs.d/custom.el" )
(load custom-file)
; ; backup directorie
(setq backup-directory-alist '((" ." . " ~/.emacs.d/backup" ))
backup-by-copying t ; Don't delink hardlinks
version-control t ; Use version numbers on backups
delete-old-versions t ; Automatically delete excess backups
kept-new-versions 20 ; how many of the newest versions to keep
kept-old-versions 5 ; and how many of the old
)
; ; open a browser and search
(defun search (url )
" Opens a browser and search URL DuckDuckGo for the given string."
(interactive " sSearch for: " )
(browse-url (concat " http://www.duckduckgo.com/?q="
(url-hexify-string url))))
; ;redefine dired-find-file to open on custom program
(define-key dired-mode-map [remap dired-find-file] 'dired-open-file )