this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

:sparkles: emacs configuration

+681 -2
+3 -2
home-manager/default.nix
··· 8 8 9 9 imports = [ 10 10 ./alacritty 11 + ./emacs 11 12 ./git 12 13 ./firefox 13 14 ]; ··· 91 92 programs = { 92 93 home-manager.enable = true; 93 94 94 - emacs.enable = true; 95 - 96 95 gpg.enable = true; 97 96 98 97 starship.enable = true; ··· 125 124 client.enable = true; 126 125 127 126 defaultEditor = true; 127 + 128 + startWithUserSession = true; 128 129 }; 129 130 }; 130 131
+13
home-manager/emacs/default.nix
··· 1 + { 2 + programs.emacs = { 3 + enable = true; 4 + 5 + extraConfig = '' 6 + (setq vc-follow-symlinks t) 7 + 8 + (org-babel-load-file "~/.emacs.d/emacs.org") 9 + ''; 10 + }; 11 + 12 + home.file.".emacs.d/emacs.org".source = ./emacs.org; 13 + }
+665
home-manager/emacs/emacs.org
··· 1 + #+title Emacs Configuration 2 + 3 + * Emacs Basic Configuration 4 + 5 + Here I'm forcing some basic configuration from emacs for my liking 6 + #+begin_src emacs-lisp 7 + (setq user-mail-address "pedro.correa@zigpay.com.br") 8 + (setq user-full-name "Pedro Correa") 9 + 10 + (set-mouse-color "GhostWhite") 11 + #+end_src 12 + 13 + Activating ~hs-minor-mode~ on `prog-mode~ so I can fold functions based on indentation 14 + #+begin_src emacs-lisp 15 + (add-hook 'prog-mode-hook #'(lambda () (hs-minor-mode t))) 16 + #+end_src 17 + 18 + * Package 19 + 20 + #+begin_src emacs-lisp 21 + 22 + ;; Initialize package sources 23 + (require 'package) 24 + 25 + (setq package-archives '(("melpa" . "https://melpa.org/packages/") 26 + ("org" . "https://orgmode.org/elpa/") 27 + ("elpa" . "https://elpa.gnu.org/packages/"))) 28 + 29 + (package-initialize) 30 + (unless package-archive-contents 31 + (package-refresh-contents)) 32 + 33 + ;; Initialize use-package on non-Linux platforms 34 + (unless (package-installed-p 'use-package) 35 + (package-install 'use-package)) 36 + 37 + (require 'use-package) 38 + (setq use-package-always-ensure t) 39 + #+end_src 40 + 41 + Forcing emacs to get all the env var from my machine 42 + #+begin_src emacs-lisp 43 + (use-package exec-path-from-shell 44 + :config (exec-path-from-shell-initialize)) 45 + 46 + (dolist (var '("SSH_AUTH_SOCK" "GPG_AGENT_INFO" "LANG" "NIX_PATH" "GPG_TTY")) 47 + (add-to-list 'exec-path-from-shell-variables var)) 48 + #+end_src 49 + 50 + * Basic UI Configuration 51 + 52 + #+begin_src emacs-lisp 53 + (set-frame-parameter (selected-frame) 'alpha '(100 . 100)) 54 + (add-to-list 'default-frame-alist '(alpha . (100 . 100))) 55 + 56 + (setq inhibit-startup-message t) 57 + 58 + (scroll-bar-mode -1) ; Disable visible scroll 59 + (tool-bar-mode -1) ; Disable the toolbar 60 + (tooltip-mode -1) ; Disable tooltips 61 + (set-fringe-mode 10) ; Give some breathing room 62 + 63 + (menu-bar-mode -1) ; Disable the menu bar 64 + 65 + ;; Set up visible bell 66 + (setq visible-bell t) 67 + #+end_src 68 + 69 + ** Dashboard 70 + #+begin_src emacs-lisp 71 + (use-package dashboard 72 + :ensure t 73 + :config 74 + (dashboard-setup-startup-hook) 75 + (setq dashboard-startup-banner "~/Pictures/ship-it.png") 76 + (setq dashboard-week-agenda t) 77 + (setq dashboard-items '((recents . 5) 78 + (projects . 5) 79 + (agenda . 5)))) 80 + #+end_src 81 + 82 + ** Line Numbers 83 + #+begin_src emacs-lisp 84 + (column-number-mode) 85 + (global-display-line-numbers-mode t) 86 + (setq display-line-numbers-type 'relative) 87 + 88 + ;; Disable line numbers for some modes 89 + (dolist (mode '(org-mode-hook 90 + term-mode-hook 91 + eshell-mode-hook 92 + shell-mode-hook 93 + neotree-mode-hook 94 + elfeed-mode-hook)) 95 + (add-hook mode (lambda () (display-line-numbers-mode 0)))) 96 + #+end_src 97 + 98 + ** Font Configuration 99 + 100 + #+begin_src emacs-lisp 101 + (set-face-attribute 'default nil 102 + :family "Hasklig" 103 + :height 110 104 + :weight 'normal 105 + :width 'normal) 106 + 107 + (use-package hasklig-mode 108 + :hook (haskell-mode prog-mode)) 109 + #+end_src 110 + 111 + *** Emoji 112 + #+begin_src emacs-lisp 113 + (use-package emojify 114 + :hook (after-init . global-emojify-mode)) 115 + #+end_src 116 + 117 + ** Themes 118 + 119 + #+begin_src emacs-lisp 120 + (use-package doom-themes 121 + :ensure t 122 + :config 123 + (setq doom-themes-enable-bold t 124 + doom-themes-enable-italic t) 125 + (load-theme 'doom-snazzy t) 126 + (doom-themes-visual-bell-config) 127 + (doom-themes-org-config)) 128 + 129 + 130 + (use-package doom-modeline 131 + :ensure t 132 + :hook (after-init . doom-modeline-mode) 133 + :custom ((doom-modeline-height 15))) 134 + 135 + (use-package all-the-icons 136 + :if (display-graphic-p)) 137 + #+end_src 138 + 139 + ** Neotree 140 + #+begin_src emacs-lisp 141 + (use-package neotree 142 + :config 143 + (setq neo-theme 'ascii) 144 + (setq neo-smart-open nil)) 145 + #+end_src 146 + 147 + * Keybinding 148 + 149 + ** Custom 150 + 151 + #+begin_src emacs-lisp 152 + ;; Make ESC quit prompts 153 + (global-set-key (kbd "<escape>") 'keyboard-escape-quit) 154 + 155 + ;; Toggle neotree panel 156 + (global-set-key (kbd "<f5>") 'neotree-toggle) 157 + #+end_src 158 + 159 + ** Ivy and Counsel 160 + 161 + #+begin_src emacs-lisp 162 + (use-package ivy 163 + :diminish 164 + :bind (("C-s" . swiper) 165 + :map ivy-minibuffer-map 166 + ("TAB" . ivy-alt-done) 167 + ("C-l" . ivy-alt-done) 168 + ("C-j" . ivy-next-line) 169 + ("C-k" . ivy-previous-line) 170 + :map ivy-switch-buffer-map 171 + ("C-k" . ivy-previous-line) 172 + ("C-l" . ivy-done) 173 + ("C-d" . ivy-switch-buffer-kill) 174 + :map ivy-reverse-i-search-map 175 + ("C-k" . ivy-previous-line) 176 + ("C-d" . ivy-reverse-i-search-kill)) 177 + :config 178 + (ivy-mode 1)) 179 + 180 + (use-package ivy-rich 181 + :init 182 + (ivy-rich-mode 1)) 183 + 184 + (use-package which-key 185 + :init (which-key-mode) 186 + :diminish which-key-mode 187 + :config 188 + (setq which-key-idle-delay 0.3)) 189 + 190 + (use-package counsel 191 + :bind (("M-x" . counsel-M-x) 192 + ("C-x b" . counsel-ibuffer) 193 + ("C-x C-f" . counsel-find-file) 194 + :map minibuffer-local-map 195 + ("C-r" . 'counsel-minibuffer-history))) 196 + #+end_src 197 + 198 + ** Evil and General 199 + 200 + #+begin_src emacs-lisp 201 + (use-package general 202 + :after evil 203 + :config 204 + (general-create-definer tulkdan/leader-keys 205 + :states '(normal insert visual emacs) 206 + :prefix "SPC" 207 + :global-prefix "C-SPC") 208 + (tulkdan/leader-keys 209 + "g" 'magit-status 210 + "c" (general-simulate-key "C-c") 211 + "x" (general-simulate-key "C-x"))) 212 + 213 + (use-package evil 214 + :init 215 + (setq evil-want-integration t) 216 + (setq evil-want-keybinding nil) 217 + (setq evil-want-C-u-scroll t) 218 + (setq evil-want-C-i-jump nil) 219 + :config 220 + (evil-mode 1) 221 + 222 + (evil-global-set-key 'motion "j" 'evil-next-visual-line) 223 + (evil-global-set-key 'motion "k" 'evil-previous-visual-line) 224 + 225 + (evil-set-initial-state 'messages-buffer-mode 'normal) 226 + (evil-set-initial-state 'dashboard-mode 'normal)) 227 + 228 + (use-package evil-collection 229 + :after evil 230 + :config 231 + (evil-collection-init)) 232 + #+end_src 233 + 234 + * Development 235 + 236 + ** EditorConfig 237 + #+begin_src emacs-lisp 238 + (use-package editorconfig 239 + :ensure t 240 + :config 241 + (editorconfig-mode 1)) 242 + #+end_src 243 + 244 + ** Magit 245 + 246 + #+begin_src emacs-lisp 247 + (use-package magit 248 + :custom 249 + (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) 250 + #+end_src 251 + 252 + ** Projectile 253 + 254 + #+begin_src emacs-lisp 255 + (use-package projectile 256 + :diminish projectile-mode 257 + :custom ((projectile-completion-system 'ivy)) 258 + :bind-keymap 259 + ("C-c p" . projectile-command-map) 260 + :init 261 + (projectile-mode t) 262 + :config 263 + (setq projectile-enable-caching t) 264 + (setq projectile-switch-project-action #'projectile-dired) 265 + (setq projectile-switch-project-action #'neotree-projectile-action)) 266 + 267 + (use-package counsel-projectile 268 + :after projectile 269 + :config (counsel-projectile-mode)) 270 + #+end_src 271 + 272 + ** LSP 273 + #+begin_src emacs-lisp 274 + (use-package lsp-mode 275 + :commands (lsp lsp-deferred) 276 + :init 277 + (setq lsp-keymap-prefix "C-c l") 278 + :custom 279 + (lsp-rust-analyzer-cargo-watch-command "clippy") 280 + (lsp-rust-analyzer-server-display-inlay-hints t) 281 + (lsp-eldoc-render-all t) 282 + :config 283 + (lsp-enable-which-key-integration t) 284 + (lsp-javascript-inlay-hints-mode t) 285 + (lsp-idle-delay 0.5) 286 + :hook 287 + (typescript-mode . lsp-deferred) ;; auto activating lsp when typescript mode is active 288 + (haskell-mode . lsp-deferred) 289 + (kotlin-mode . lsp-deferred) 290 + (haskell-literate-mode . lsp-deferred)) 291 + #+end_src 292 + 293 + *** lsp-ui 294 + #+begin_src emacs-lisp 295 + (use-package lsp-ui 296 + :hook (lsp-mode . lsp-ui-mode) 297 + :custom 298 + (lsp-ui-doc-position 'bottom)) 299 + #+end_src 300 + 301 + *** lsp-ivy 302 + #+begin_src emacs-lisp 303 + (use-package lsp-ivy) 304 + #+end_src 305 + 306 + *** lsp-treemacs 307 + #+begin_src emacs-lisp 308 + (use-package lsp-treemacs) 309 + #+end_src 310 + 311 + *** Dap Mode 312 + #+begin_src emacs-lisp 313 + (use-package dap-mode) 314 + #+end_src 315 + ** Company (code completion) 316 + #+begin_src emacs-lisp 317 + (use-package company 318 + :after lsp-mode 319 + :hook (lsp-mode . company-mode) 320 + :custom 321 + (company-idle-delay 0.0) 322 + (company-minimum-prefix-length 1) 323 + (company-show-numbers t "Numbers are helpful.") 324 + (company-tooltip-limit 10 "The more the merrier.") 325 + :config 326 + (setq company-lsp-cache-candidates 'auto) 327 + :bind 328 + (:map company-active-map 329 + ("<tab>" . company-complete-selection)) 330 + (:map lsp-mode-map 331 + ("<tab>" . company-indent-or-complete-common))) 332 + #+end_src 333 + 334 + ** Flycheck (Inline Errors) 335 + #+begin_src emacs-lisp 336 + (use-package flycheck 337 + :ensure t 338 + :init (global-flycheck-mode) 339 + :config 340 + (add-hook 'prog-mode-hook 'flycheck-mode)) ;; always lint my code 341 + #+end_src 342 + 343 + ** Eglot 344 + #+begin_src emacs-lisp 345 + (use-package eglot 346 + :hook 347 + (typescript-mode . eglot-ensure) 348 + (kotlin-mode . eglot-ensure) 349 + :ensure t) 350 + #+end_src 351 + 352 + ** Direnv 353 + #+begin_src emacs-lisp 354 + (use-package direnv 355 + :config 356 + (direnv-mode)) 357 + #+end_src 358 + 359 + ** Languages 360 + *** Web 361 + #+begin_src emacs-lisp 362 + (use-package web-mode 363 + :config 364 + (add-to-list 'auto-mode-alist '("\\.html\\'" . web-mode)) 365 + (add-to-list 'auto-mode-alist '("\\.vue\\'" . web-mode))) 366 + #+end_src 367 + 368 + *** Typescript 369 + #+begin_src emacs-lisp 370 + (use-package typescript-mode 371 + :mode "\\.ts\\'" 372 + :hook (typecript-mode . lsp-deferred)) 373 + #+end_src 374 + 375 + *** Haskell 376 + #+begin_src emacs-lisp 377 + (use-package lsp-haskell) 378 + (use-package haskell-mode 379 + :hook (haskell-mode . lsp-deferred)) 380 + #+end_src 381 + 382 + *** Lua 383 + #+begin_src emacs-lisp 384 + (use-package lua-mode 385 + :mode "\\.lua\\'") 386 + #+end_src 387 + 388 + *** Kotlin 389 + #+begin_src emacs-lisp 390 + (use-package kotlin-mode 391 + :mode "\\.kt\\'" 392 + :hook (kotlin-mode . lsp-deferred)) 393 + #+end_src 394 + 395 + *** Yuck (EWW) 396 + #+begin_src emacs-lisp 397 + (use-package yuck-mode 398 + :mode "\\.yuck\\'") 399 + #+end_src 400 + 401 + *** Flutter 402 + #+begin_src emacs-lisp 403 + (use-package dart-mode) 404 + (use-package lsp-dart 405 + :hook (dart-mode . lsp-deferred)) 406 + #+end_src 407 + 408 + *** Nix 409 + #+begin_src emacs-lisp 410 + (use-package nix-mode 411 + :mode "\\.nix\\'") 412 + #+end_src 413 + 414 + ** DevOps 415 + *** Kubernetes 416 + Enables plugin to we can use kubectl inside of emacs 417 + #+begin_src emacs-lisp 418 + (use-package kubernetes 419 + :config 420 + (setq kubernetes-poll-frequency (* 60 5)) ; frequency in seconds 421 + (setq kubernetes-redraw-frequency (* 60 5)) ; frequency in seconds 422 + (setq kubernetes-pod-restart-warning-threshold 60)) 423 + #+end_src 424 + 425 + Install package to be compatible with evil mode 426 + #+begin_src emacs-lisp 427 + (use-package kubernetes-evil 428 + :ensure t 429 + :after kubernetes) 430 + #+end_src 431 + 432 + * Org Mode 433 + 434 + ** Better Font Faces 435 + #+begin_src emacs-lisp 436 + (defun tulkdan/org-font-setup () 437 + ;; Replace list hyphen with dot 438 + (font-lock-add-keywords 'org-mode 439 + '(("^ *\\([-]\\) " 440 + (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•")))))) 441 + 442 + ;; Set faces for heading levels 443 + (dolist (face '((org-level-1 . 1.2) 444 + (org-level-2 . 1.1) 445 + (org-level-3 . 1.05) 446 + (org-level-4 . 1.0) 447 + (org-level-5 . 1.1) 448 + (org-level-6 . 1.1) 449 + (org-level-7 . 1.1) 450 + (org-level-8 . 1.1))) 451 + (set-face-attribute (car face) nil :font "Hasklig" :weight 'regular :height (cdr face))) 452 + 453 + ;; Ensure that anything that should be fixed-pitch in Org files appears that way 454 + (set-face-attribute 'org-block nil :foreground nil :inherit 'fixed-pitch) 455 + (set-face-attribute 'org-table nil :inherit 'fixed-pitch) 456 + (set-face-attribute 'org-formula nil :inherit 'fixed-pitch) 457 + (set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch)) 458 + (set-face-attribute 'org-table nil :inherit '(shadow fixed-pitch)) 459 + (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) 460 + (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch)) 461 + (set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch)) 462 + (set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch) 463 + (set-face-attribute 'line-number nil :inherit 'fixed-pitch) 464 + (set-face-attribute 'line-number-current-line nil :inherit 'fixed-pitch)) 465 + #+end_src 466 + 467 + ** Basic Configuration 468 + 469 + #+begin_src emacs-lisp 470 + (defun tulkdan/org-mode-setup () 471 + ;; (org-indent-mode) 472 + (variable-pitch-mode 1) 473 + (visual-line-mode 1)) 474 + 475 + (use-package org 476 + :pin org 477 + :commands (org-capture org-agenda) 478 + :hook (org-mode . tulkdan/org-mode-setup) 479 + :config 480 + (setq org-ellipsis " ▾") 481 + 482 + (setq org-log-done 'time) 483 + (setq org-log-into-drawer t) 484 + 485 + (setq org-agenda-file-regexp ".*\\.org$") 486 + (setq org-agenda-files '("~/Documents/Tasks")) 487 + 488 + (setq org-todo-keywords 489 + '((sequence "BLOCKED(b@)" "PLAN(p)" "NEXT(n)" "WORKING(w)" "REVIEW(v)" "|" "DONE(d!)" "CANC(k@)") 490 + (sequence "TODO(t)" "DOING(a)" "|" "COMPLETED(c!)" "CANCELED(C)"))) 491 + 492 + (setq org-todo-keyword-faces 493 + '(("BLOCKED" . "red") )) 494 + 495 + (setq org-refile-targets 496 + '(("Archive.org" :maxlevel . 1) 497 + ("Tasks.org" :maxlevel . 1))) 498 + 499 + ;; Configure custom agenda views 500 + (setq org-agenda-custom-commands 501 + '(("d" "Dashboard" 502 + ((agenda "" ((org-deadline-warning-days 7))) 503 + (todo "NEXT" 504 + ((org-agenda-overriding-header "Next Tasks"))) 505 + (todo "WORKING" 506 + ((org-agenda-overriding-header "Active Projects"))) 507 + (todo "REVIEW" 508 + ((org-agenda-overriding-header "In Review"))))) 509 + 510 + ("w" "Workflow Status" 511 + ((todo "BLOCKED" 512 + ((org-agenda-overriding-header "Blocked on External") 513 + (org-agenda-files org-agenda-files))) 514 + (todo "PLAN" 515 + ((org-agenda-overriding-header "In Planning") 516 + (org-agenda-todo-list-sublevels nil) 517 + (org-agenda-files org-agenda-files))) 518 + (todo "REVIEW" 519 + ((org-agenda-overriding-header "In Review") 520 + (org-agenda-files org-agenda-files))) 521 + (todo "WORKING" 522 + ((org-agenda-overriding-header "Active Projects") 523 + (org-agenda-files org-agenda-files))) 524 + (todo "DONE" 525 + ((org-agenda-overriding-header "Completed Projects") 526 + (org-agenda-files org-agenda-files))) 527 + (todo "CANC" 528 + ((org-agenda-overriding-header "Cancelled Projects") 529 + (org-agenda-files org-agenda-files))))))) 530 + 531 + (setq org-link-abbrev-alist 532 + '(("clickup" . "https://app.clickup.com/t/"))) 533 + 534 + (tulkdan/org-font-setup)) 535 + #+end_src 536 + 537 + ** Nicer Heading Bullets 538 + 539 + #+begin_src emacs-lisp 540 + ;; using org modern 541 + ;; (use-package org-bullets 542 + ;; :hook (org-mode . org-bullets-mode) 543 + ;; :custom 544 + ;; (org-bullets-bullet-list '("◉" "○" "●" "○" "●" "○" "●"))) 545 + #+end_src 546 + 547 + ** Center Org Buffers 548 + 549 + #+begin_src emacs-lisp 550 + (defun tulkdan/org-mode-visual-fill () 551 + (setq visual-fill-column-width 100 552 + visual-fill-column-center-text t) 553 + (visual-fill-column-mode 1)) 554 + 555 + (use-package visual-fill-column 556 + :hook (org-mode . tulkdan/org-mode-visual-fill)) 557 + #+end_src 558 + 559 + ** Org Modern 560 + 561 + #+begin_src emacs-lisp 562 + (use-package org-modern 563 + :hook (org-mode . org-modern-mode)) 564 + #+end_src 565 + 566 + ** Structure Templates 567 + 568 + #+begin_src emacs-lisp 569 + ;; This is needed as of Org 9.2 570 + (require 'org-tempo) 571 + 572 + (add-to-list 'org-structure-template-alist '("sh" . "src shell")) 573 + (add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp")) 574 + (add-to-list 'org-structure-template-alist '("py" . "src python")) 575 + (add-to-list 'org-structure-template-alist '("hs" . "src haskell")) 576 + (add-to-list 'org-structure-template-alist '("js" . "src js")) 577 + (add-to-list 'org-structure-template-alist '("sql" . "src sql")) 578 + (add-to-list 'org-structure-template-alist '("nix" . "src nix")) 579 + 580 + (org-babel-do-load-languages 581 + 'org-babel-load-languages 582 + '((haskell . t) 583 + (emacs-lisp . t))) 584 + #+end_src 585 + 586 + * Managing Mail with mu4e 587 + 588 + #+begin_src emacs-lisp 589 + (use-package mu4e 590 + :ensure nil 591 + :load-path "/usr/share/emacs25/site-lisp/mu4e/" 592 + :custom 593 + 594 + ;; This is set to 't' to avoid mail syncing issues when using mbsync 595 + (mu4e-change-filenames-when-moving t) 596 + 597 + ;; Make sure plain text mails flow correctly for recipients 598 + (mu4e-compose-format-flowed t) 599 + 600 + ;; Configure the function to use for sending mail 601 + (message-send-mail-function 'smtpmail-send-it) 602 + 603 + ;; Refresh mail using isync every 10 minutes 604 + (mu4e-update-interval (* 10 60)) 605 + (mu4e-get-mail-command "mbsync -a") 606 + (mu4e-maildir "~/Mail") 607 + 608 + (mu4e-drafts-folder "/[Gmail]/Drafts") 609 + (mu4e-sent-folder "/[Gmail]/Sent Mail") 610 + (mu4e-refile-folder "/[Gmail]/All Mail") 611 + (mu4e-trash-folder "/[Gmail]/Trash") 612 + 613 + (smtpmail-smtp-server "smtp.gmail.com") 614 + (smtpmail-smtp-service 465) 615 + (smtpmail-stream-type 'ssl) 616 + 617 + (mu4e-compose-signature 618 + (concat 619 + "Pedro Correa • Developer\n" 620 + "pedro.correa@ciandt.com • ciandt.com")) 621 + 622 + (mu4e-maildir-shortcuts 623 + '(("/Inbox" . ?i) 624 + ("/[Gmail]/Sent Mail" . ?s) 625 + ("/[Gmail]/Trash" . ?t) 626 + ("/[Gmail]/Drafts" . ?d) 627 + ("/[Gmail]/All Mail" . ?a)))) 628 + #+end_src 629 + 630 + ** org-mime 631 + 632 + This is a configuration to send org files into email 633 + #+begin_src emacs-lisp 634 + (use-package org-mime 635 + :ensure t 636 + :config 637 + (setq org-mime-export-options '(:section-numbers nil 638 + :with-author nil 639 + :with-toc nil)) 640 + (add-hook 'message-send-hook 'org-mime-htmlize) 641 + (add-hook 'org-mime-html-hook 642 + (lambda () 643 + (org-mime-change-element-style 644 + "pre" (format "color: %s; background-color: %s; padding: 0.5rem;" 645 + "#e6e1dc" "#232323"))))) 646 + #+end_src 647 + 648 + * Elfeed 649 + #+begin_src emacs-lisp 650 + (use-package elfeed 651 + :config 652 + (setq elfeed-feeds 653 + '(("https://newsletter.mollywhite.net/feed.xml" dev tech) 654 + ("https://stackoverflow.blog/feed/" tech) 655 + ("http://news.ycombinator.com/rss" tech) 656 + ("http://feeds.gawker.com/gizmodo/full" news) 657 + ("http://thepracticaldev.com/feed" dev tech) 658 + ("https://www.nexojornal.com.br/rss.xml" news) 659 + ("https://theintercept.com/feed/?lang=pt" news) 660 + ("http://piaui.folha.uol.com.br/feed/" news) 661 + ("http://www.newslookup.com/rss/business/bloomberg.rss" news) 662 + ("https://xkcd.com/rss.xml") 663 + ("https://github.com/readme.rss" tech dev)))) 664 + #+end_src 665 +