(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-") 'windmove-up) (global-set-key (kbd "s-") 'windmove-down) (global-set-key (kbd "s-") 'windmove-right) (global-set-key (kbd "s-") 'windmove-left) (global-set-key (kbd "C-") '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-") (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 "" . 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")))