obsd-bkp/dotfiles/emacs/dot-emacs.d/config.el

575 lines
17 KiB
EmacsLisp
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(setq user-full-name "b2r1s8"
user-mail-address "")
;; The default is 800 kilobytes. Measured in bytes.
(setq gc-cons-threshold (* 50 1000 1000))
;; Profile emacs startup
(add-hook 'emacs-startup-hook
(lambda ()
(message "*** Emacs loaded in %s with %d garbage collections."
(format "%.2f seconds"
(float-time
(time-subtract after-init-time before-init-time)))
gcs-done)))
;; Fist things first
(setq inhibit-startup-message t)
(tool-bar-mode -1) ;; Remove tool bar C-x u undo | C-w cut | M-w copy | C-y paste
(menu-bar-mode -1) ;; Remove menus
(scroll-bar-mode -1) ;; Remove scroll bar
(global-hl-line-mode t) ;; Show current line
(global-prettify-symbols-mode t) ;; Prettify symbols mode
(set-face-attribute 'default nil :height 80) ;; Font size
(column-number-mode 1) ;; Colummns numeration
(show-paren-mode 1) ;; Show parent parentesis
(setq visible-bell t) ;; Visible bell
;;(setq-default header-line-format mode-line-format)
(setq-default mode-line-format nil)
(setq-default header-line-format nil)
(setq
backup-by-copying t ; don't clobber symlinks
backup-directory-alist
'(("." . "~/.emacs.d/backups/")) ; don't litter my fs tree
delete-old-versions t
kept-new-versions 6
kept-old-versions 2
version-control t) ; use versioned backups
;; Tabbar
(use-package tabbar)
(tab-bar-mode 1) ;; Additing tabs
;; Show time and date on the mode line
(setq display-time-day-and-date t)
(setq display-time-format "%a %b %F %R")
(display-time-mode 1)
;; Frame tansparency
(set-frame-parameter (selected-frame) 'alpha '(75 . 75))
(add-to-list 'default-frame-alist '(alpha . (75 . 75)))
(set-frame-parameter (selected-frame) 'fullscreen 'maximized)
(add-to-list 'default-frame-alist '(fullscreen . maximized))
;; Line numbers
(global-linum-mode t)
(setq linum-format "%2d \u2502")
(dolist (mode '(org-mode-hook
term-mode-hook
shell-mode-hook
treemacs-mode-hook
eshell-mode-hook))
(add-hook mode (lambda () (display-line-numbers-mode 0))))
;; Border
(setq frame-resize-pixelwise t)
(set-frame-parameter nil 'fullscreen 'fullboth)
;; Keep all backup and auto-save files in one directory
(setq backup-directory-alist '(("." . "~/.emacs.d/backups")))
(setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save-list/" t)))
;; UTF-8 please
(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
;; Identation:
(setq-default tab-width 2)
(setq-default standard-indent 2)
(setq c-basic-offset tab-width)
(setq-default electric-indent-inhibit t)
(setq-default indent-tabs-mode nil)
(setq backward-delete-char-untabify-method 'nil)
;; Enable bracket pair-matching
(setq electric-pair-pairs '(
(?\{ . ?\})
(?\( . ?\))
(?\[ . ?\])
(?\" . ?\")
))
(electric-pair-mode t)
;;; Mude o foco p/ novas janelas
(defun split-and-follow-horizontally ()
(interactive)
(split-window-below)
(balance-windows)
(other-window 1))
(defun split-and-follow-vertically ()
(interactive)
(split-window-right)
(balance-windows)
(other-window 1))
;; Alias
(defalias 'yes-or-no-p 'y-or-n-p)
(defalias 'open 'find-file-other-window)
(defalias 'clean 'eshell/clear-scrollback)
(defalias 'list-buffers 'ibuffer)
(global-unset-key (kbd "C-z")) ;; Unbind C-z
(global-unset-key (kbd "C-Z")) ;; Unbind C-Z
(global-set-key (kbd "s-<up>") 'windmove-up)
(global-set-key (kbd "s-<down>") 'windmove-down)
(global-set-key (kbd "s-<right>") 'windmove-right)
(global-set-key (kbd "s-<left>") 'windmove-left)
(global-set-key (kbd "C-<tab>") 'other-window)
(global-set-key (kbd "C-x 3") 'split-and-follow-vertically)
(global-set-key (kbd "C-x 2") 'split-and-follow-horizontally)
(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)
;; Open new tab on the dashboard
(defun new-tab ()
(interactive)
(tab-new-to)
(switch-to-buffer (get-buffer-create "*dashboard*")))
(global-set-key (kbd "s-x") 'new-tab)
(global-set-key (kbd "s-X") 'tab-close)
;; Configuring desktop
;;(require 'desktop)
;; (desktop-save-mode 1)
;; (defun my-desktop-save ()
;; (interactive)
;; ;; Don't call desktop-save-in-desktop-dir, as it prints a message.
;; (if (eq (desktop-owner) (emacs-pid))
;; (desktop-save desktop-dirname)))
;; (add-hook 'auto-save-hook 'my-desktop-save)
;;
;;(setq clean-buffer-list-delay-general 1)
;;
;;;; Configuring midnight
;;(require 'midnight)
;;(midnight-delay-set 'midnight-delay "6:30am")
(use-package dashboard
:ensure t
:defer nil
:preface
(defun init-edit ()
"Edit initialization file."
(interactive)
(find-file "~/.emacs.d/init.el"))
(defun conf-edit ()
"Edit configuration file."
(interactive)
(find-file "~/.emacs.d/config.org"))
(defun create-scratch-buffer ()
"Create a scratch buffer."
(interactive)
(switch-to-buffer (get-buffer-create "*scratch*"))
(lisp-interaction-mode))
:config
(dashboard-setup-startup-hook)
(setq dashboard-items '((recents . 25)))
(setq dashboard-banner-logo-title "Welcome to Emacs!")
(setq dashboard-startup-banner "~/.emacs.d/img/emacs.png")
(setq dashboard-center-content t)
(setq dashboard-show-shortcuts nil)
(setq dashboard-set-init-info t)
(setq dashboard-init-info (format "%d packages loaded in %s"
(length package-activated-list) (emacs-init-time)))
(setq dashboard-set-footer nil)
(setq dashboard-set-navigator t)
(setq dashboard-navigator-buttons
`(((,nil
"Open init.el file."
"Open Emacs initialization file for easy editing."
(lambda (&rest _) (init-edit))
'default)
(nil
"Open config.org file."
"Open Emacs configuration file for easy editing."
(lambda (&rest _) (conf-edit))
'default)
(nil
"Open scratch buffer."
"Switch to the scratch buffer."
(lambda (&rest _) (create-scratch-buffer))
'default)))))
(use-package pdf-tools
:defer t
:commands (pdf-view-mode pdf-tools-install)
:mode ("\\.[pP][dD][fF]\\'" . pdf-view-mode)
:load-path "site-lisp/pdf-tools/lisp"
:magic ("%PDF" . pdf-view-mode)
:config
(pdf-tools-install)
(define-pdf-cache-function pagelabels)
:hook ((pdf-view-mode-hook . (lambda () (display-line-numbers-mode -1)))
(pdf-view-mode-hook . pdf-tools-enable-minor-modes)))
(use-package pdf-view-restore
:after pdf-tools
:config
(add-hook 'pdf-view-mode-hook 'pdf-view-restore-mode))
;;(use-package org-pdftools
;; :hook (org-load-hook . org-pdftools-setup-link))
(add-hook 'pdf-view-mode-hook (lambda() (linum-mode -1)))
;; Org init
(use-package org
:config
(add-hook 'org-mode-hook
'(lambda ()
(visual-line-mode 1)))
(setq org-display-inline-images t)
(setq org-redisplay-inline-images t)
(setq org-startup-with-inline-images "inlineimages")
(setq org-directory "~/.emacs.d/org")
(setq org-agenda-files (list "inbox.org"))
(global-set-key (kbd "C-<f1>") (lambda()
(interactive)
(outline-show-all))))
(use-package org-bullets
:config
(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))
(use-package htmlize
:ensure t)
;; src exec
(org-babel-do-load-languages 'org-babel-load-languages
'(
(shell . t)
)
)
(setq org-src-fontify-natively t
org-src-window-setup 'current-window
org-src-strip-leading-and-trailing-blank-lines t
org-src-preserve-indentation t
org-src-tab-acts-natively t)
(require 'org-tempo)
;; And that'll allow you to type "<sh", "<el", "<py", "<conf" followed by tab to create src blocks for those languages, and you can add as many others as you want.
(add-to-list 'org-structure-template-alist '("sh" . "src shell"))
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
(add-to-list 'org-structure-template-alist '("py" . "src python"))
(add-to-list 'org-structure-template-alist '("conf" . "src conf"))
;; Org default head
;;(add-to-list 'org-structure-template-alist
;; '("p" "#+title:\n#+author: b2r1s8@gen2\n#+date:\n#+startup: hidestars odd overview\n\n? "))
(use-package doom-modeline
:ensure t
:init (doom-modeline-mode 1))
(setq doom-modeline-height 5)
;; Hide mode-line when is not usefull
(setq doom-hide-modeline-mode t)
;; The limit of the window width.
;; If `window-width' is smaller than the limit, some information won't be displayed.
(setq doom-modeline-window-width-limit fill-column)
;; Whether display the icon for `major-mode'. It respects `doom-modeline-icon'.
(setq doom-modeline-major-mode-icon t)
;; Whether display the colorful icon for `major-mode'.
;; It respects `all-the-icons-color-icons'.
(setq doom-modeline-major-mode-color-icon t)
;; Whether display the icon for the buffer state. It respects `doom-modeline-icon'.
(setq doom-modeline-buffer-state-icon t)
;; Whether display the modification icon for the buffer.
;; It respects `doom-modeline-icon' and `doom-modeline-buffer-state-icon'.
(setq doom-modeline-buffer-modification-icon t)
;; Whether display the buffer encoding.
(setq doom-modeline-buffer-encoding t)
;; If non-nil, only display one number for checker information if applicable.
(setq doom-modeline-checker-simple-format t)
;; Whether display the workspace name. Non-nil to display in the mode-line.
(setq doom-modeline-workspace-name t)
(use-package ace-window
:ensure t
:bind (("C-o" . ace-window)))
(use-package which-key
:ensure t
:diminish which-key-mode
:init
(which-key-mode)
:config
(setq which-key-idle-delay 0.3))
(use-package swiper
:ensure t
:bind ("s-s" . 'swiper))
(use-package beacon
:ensure t
:diminish beacon-mode
:init
(beacon-mode 1))
(use-package async
:ensure t
:init
(dired-async-mode 1))
(use-package page-break-lines
:ensure t
:diminish (page-break-lines-mode visual-line-mode))
(use-package undo-tree
:ensure t
:diminish undo-tree-mode)
(use-package saveplace
:defer nil
:config
(save-place-mode))
(use-package eldoc
:diminish eldoc-mode)
(use-package try
:ensure t)
(use-package auto-complete
:ensure t
:init
(progn
(ac-config-default)
(global-auto-complete-mode t)))
(use-package neotree
:ensure t
:bind (("C-\\" . 'neotree-toggle))) ;; Ativa a tree
(use-package color-theme-modern
:ensure t)
(use-package flycheck
:ensure t
:init (global-flycheck-mode t))
(use-package recentf
:config
(recentf-mode t)
(setq recentf-max-saved-items 500))
(use-package expand-region
:ensure t
:bind ("C-@" . er/expand-region))
(use-package smooth-scrolling
:ensure t
:config
(smooth-scrolling-mode))
(use-package emmet-mode
:ensure t
:commands emmet-mode
:config
(add-hook 'html-mode-hook 'emmet-mode)
(add-hook 'css-mode-hookg 'emmet-mode))
(use-package scratch
:ensure t
:commands scratch)
(use-package shell-pop
:ensure t
:bind ("M-<f12>" . shell-pop))
(use-package quickrun
:defer 10
:ensure t
:bind ("C-c r" . quickrun))
(use-package terminal-here
:ensure t
:bind (("C-c o t" . terminal-here-launch)
("C-c o p" . terminal-here-project-launch)))
(use-package whitespace)
(require 'whitespace)
(setq whitespace-line-column 80) ;; limit line length
(setq whitespace-style '(face lines-tail))
;; Automatically clean whitespace
(use-package ws-butler
:hook ((text-mode . ws-butler-mode)
(prog-mode . ws-butler-mode)))
(use-package ivy
:diminish
:bind (("C-s" . swiper)
:map ivy-minibuffer-map
("TAB" . ivy-alt-done)
("C-f" . ivy-alt-done)
("C-l" . ivy-alt-done)
("C-j" . ivy-next-line)
("C-k" . ivy-previous-line)
:map ivy-switch-buffer-map
("C-k" . ivy-previous-line)
("C-l" . ivy-done)
("C-d" . ivy-switch-buffer-kill)
:map ivy-reverse-i-search-map
("C-k" . ivy-previous-line)
("C-d" . ivy-reverse-i-search-kill))
:init
(ivy-mode 1)
:config
(setq ivy-use-virtual-buffers t)
(setq ivy-wrap t)
(setq ivy-count-format "(%d/%d) ")
(setq enable-recursive-minibuffers t)
;; Use different regex strategies per completion command
(push '(completion-at-point . ivy--regex-fuzzy) ivy-re-builders-alist) ;; This doesn't seem to work...
(push '(swiper . ivy--regex-ignore-order) ivy-re-builders-alist)
(push '(counsel-M-x . ivy--regex-ignore-order) ivy-re-builders-alist)
;; Set minibuffer height for different commands
(setf (alist-get 'counsel-projectile-ag ivy-height-alist) 15)
(setf (alist-get 'counsel-projectile-rg ivy-height-alist) 15)
(setf (alist-get 'swiper ivy-height-alist) 15)
(setf (alist-get 'counsel-switch-buffer ivy-height-alist) 7))
(use-package ivy-hydra
:defer t
:after hydra)
(use-package ivy-rich
:init
(ivy-rich-mode 1)
:after counsel
:config
(setq ivy-format-function #'ivy-format-function-line)
(setq ivy-rich-display-transformers-list
(plist-put ivy-rich-display-transformers-list
'ivy-switch-buffer
'(:columns
((ivy-rich-candidate (:width 40))
(ivy-rich-switch-buffer-indicators (:width 4 :face error :align right)); return the buffer indicators
(ivy-rich-switch-buffer-major-mode (:width 12 :face warning)) ; return the major mode info
(ivy-rich-switch-buffer-project (:width 15 :face success)) ; return project name using `projectile'
(ivy-rich-switch-buffer-path (:width (lambda (x) (ivy-rich-switch-buffer-shorten-path x (ivy-rich-minibuffer-width 0.3)))))) ; return file path relative to project root or `default-directory' if project is nil
:predicate
(lambda (cand)
(if-let ((buffer (get-buffer cand)))
;; Don't mess with EXWM buffers
(with-current-buffer buffer
(not (derived-mode-p 'exwm-mode)))))))))
(use-package counsel
:after ivy
:bind (("M-x" . counsel-M-x)
("C-x b" . counsel-ibuffer)
("C-x C-f" . counsel-find-file)
("C-M-j" . counsel-switch-buffer)
("C-M-l" . counsel-imenu)
:map minibuffer-local-map
("C-r" . 'counsel-minibuffer-history))
:custom
(counsel-linux-app-format-function #'counsel-linux-app-format-function-name-only)
:config
(setq ivy-initial-inputs-alist nil)) ;; Don't start searches with ^
(use-package flx ;; Improves sorting for fuzzy-matched results
:after ivy
:defer t
:init
(setq ivy-flx-limit 10000))
(use-package wgrep)
(use-package ivy-posframe
:disabled
:custom
(ivy-posframe-width 115)
(ivy-posframe-min-width 115)
(ivy-posframe-height 10)
(ivy-posframe-min-height 10)
:config
(setq ivy-posframe-display-functions-alist '((t . ivy-posframe-display-at-frame-center)))
(setq ivy-posframe-parameters '((parent-frame . nil)
(left-fringe . 8)
(right-fringe . 8)))
(ivy-posframe-mode 1))
(use-package prescient
:after counsel
:config
(prescient-persist-mode 1))
(use-package ivy-prescient
:after prescient
:config
(ivy-prescient-mode 1))
;;(dw/leader-key-def
;; "r" '(ivy-resume :which-key "ivy resume")
;; "f" '(:ignore t :which-key "files")
;; "ff" '(counsel-find-file :which-key "open file")
;; "C-f" 'counsel-find-file
;; "fr" '(counsel-recentf :which-key "recent files")
;; "fR" '(revert-buffer :which-key "revert file")
;; "fj" '(counsel-file-jump :which-key "jump to file"))
;; Dired
(require 'dired-x)
(setq dired-omit-files "^\\...+$")
(add-hook 'dired-mode-hook (lambda () (dired-omit-mode 1)))
(add-hook 'dired-mode-hook 'auto-revert-mode)
(setq global-auto-revert-non-file-buffers t)
(setq auto-revert-verbose nil)
;; Elpher
(advice-add 'eww-browse-url :around 'elpher:eww-browse-url)
;; eww
(defun elpher:eww-browse-url (original url &optional new-window)
"Handle gemini links."
(cond ((string-match-p "\\`\\(gemini\\|gopher\\)://" url)
(require 'elpher)
(elpher-go url))
(t (funcall original url new-window))))
;;; Eshell
(setq eshell-prompt-regexp "^[^αλ\n]*[αλ] ")
(setq eshell-prompt-function
(lambda nil
(concat
(if (string= (eshell/pwd) (getenv "HOME"))
(propertize "~" 'face `(:foreground "#99CCFF"))
(replace-regexp-in-string
(getenv "HOME")
(propertize "~" 'face `(:foreground "#99CCFF"))
(propertize (eshell/pwd) 'face `(:foreground "#99CCFF"))))
(if (= (user-uid) 0)
(propertize " α " 'face `(:foreground "#FF6666"))
(propertize " λ " 'face `(:foreground "#A6E22E"))))))
(setq eshell-highlight-prompt nil)
(require 'emms-setup)
(emms-all)
(emms-default-players)
(setq emms-source-file-default-directory "~/songs/")
(setq emms-info-asynchronously nil)
(setq emms-playlist-buffer-name "*Music*")
;; ERC
;;(erc :server "irc.freenode.net" :port 6667 :nick "b2r1s8")
;;(setq erc-autojoin-channels-alist
;; '(("freenode.net" "#gentoo" "#gentoo-chat" "#ratpoison" "#perl" "#monero" "#emacs" "#emacs-beginners" "#emacs-offtopic" "#org-mode")))