bro na emacs flatpak la irundu emacs debian ku mathunan
ippo emacs config.org load aguthu but full la aagala custom keybinds work panala like register,ibuffer
emacs version
27.1
emacs init.el file
(org-babel-load-file
(expand-file-name
"config.org"
user-emacs-directory))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(package-selected-packages
'(ef-themes which-key visual-fill-column vertico use-package rainbow-delimiters orderless nov marginalia helpful emms doom-themes doom-modeline consult)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
emacs config.org file
#+title: My Configuration
#+author: Thanga Ayyanar
#+startup: overview
* User Interface
** Hide menubar
#+begin_src emacs-lisp
(menu-bar-mode 0)
#+end_src
** Hide toolbar and scrollbar
#+begin_src emacs-lisp
;(when (display-graphic-p)
(tool-bar-mode 0)
(scroll-bar-mode 0);)
#+end_src
** No inhibit startup message
#+begin_src emacs-lisp
(setq inhibit-startup-screen t)
#+end_src
** Set number
#+begin_src emacs-lisp
(column-number-mode)
(global-display-line-numbers-mode t)
#+end_src
** Theme
#+begin_src emacs-lisp
(use-package ef-themes
:config
(load-theme 'ef-dark t))
#+end_src
** Font configuration
#+begin_src emacs-lisp
(set-face-attribute 'default nil :font "Liberation Mono" :height 200)
#+end_src
* Behavior
** No (backup, Lock, autosave)
#+begin_src emacs-lisp
;; No autoback up and lock files
(setq
make-backup-files nil
auto-save-default nil
create-lockfiles nil)
#+end_src
** Y or N instead of Yes or No
#+begin_src emacs-lisp
(fset 'yes-or-no-p 'y-or-n-p)
#+end_src
** Electric auto pair mode
#+begin_src emacs-lisp
(electric-pair-mode 1)
#+end_src
** Turn off blinking cursor
#+begin_src emacs-lisp
;(blink-cursor-mode -1)
#+end_src
** Vertical bar
#+begin_src emacs-lisp
(setq-default cursor-type 'bar)
#+end_src
** Auto revert
- Auto revert Files
#+begin_src elisp
(global-auto-revert-mode 1)
#+end_src
- Auto revert Directory
#+begin_src elisp
(setq global-auto-revert-non-file-buffers t)
#+end_src
- Auto revert issues i faced
#+begin_src elisp
(add-to-list 'global-auto-revert-ignore-modes 'Buffer-menu-mode)
#+end_src
** Registers
#+begin_src elisp
;; Registers
(set-register ?I '(file . "/home/linux/.emacs.d/config.org")) ;; C-x r j E
(set-register ?T '(file . "/home/linux/.config/i3/config")) ;; C-x r j T
#+end_src
** Buffers
*** Buffer switching
#+begin_src elisp
(global-set-key [(meta shift j)] 'previous-buffer)
(global-set-key [(meta shift l)] 'next-buffer)
#+end_src
*** Buffer kill
#+begin_src elisp
(global-set-key (kbd "C-x K") 'kill-this-buffer)
#+end_src
*** iBuffer
#+begin_src elisp
(global-set-key (kbd "C-x C-b") 'ibuffer)
; Ibuffer options
(setq ibuffer-saved-filter-groups
(quote (("default"
("dired" (mode . dired-mode))
("org" (name . "^.*org$"))
;; ("web" (or (mode . web-mode) (mode . js2-mode)))
("shell" (or (mode . eshell-mode) (mode . shell-mode)))
;; ("mu4e" (name . "\*mu4e\*"))
;; ("programming" (or
;; (mode . python-mode)
;; (mode . c++-mode)))
("emacs" (or
(name . "^\\*scratch\\*$")
(name . "^\\*Messages\\*$")))
))))
(add-hook 'ibuffer-mode-hook
(lambda ()
(ibuffer-auto-mode 1)
(ibuffer-switch-to-saved-filter-groups "default")))
;; Don't show filter groups if there are no buffers in that group
(setq ibuffer-show-empty-filter-groups nil)
;; Don't ask for confirmation to delete marked buffers
(setq ibuffer-expert t)
#+end_src
* Use package
** Installation
#+begin_src emacs-lisp
(require 'package)
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
("org" . "https://orgmode.org/elpa/")
("elpa" . "https://elpa.gnu.org/packages/")))
(package-initialize)
(unless package-archive-contents
(package-refresh-contents))
;; Initialize use package on non-linux based system
(unless (package-installed-p 'use-package)
(package-install 'use-package))
(require 'use-package)
(setq use-package-always-ensure t)
#+end_src
* Third party packages
** Which Key
#+begin_src emacs-lisp
(use-package which-key
:init (which-key-mode)
:diminish which-key-mode
:config
(setq which-key-idle-delay 0.3))
#+end_src
** Helpful
#+begin_src emacs-lisp
(use-package helpful
:commands (helpful-callable helpful-variable helpful-command helpful-key)
:bind
([remap describe-function] . helpful-callable)
([remap describe-command] . helpful-command)
([remap describe-variable] . helpful-variable)
([remap describe-key] . helpful-key))
#+end_src
** DooM modeline
#+begin_src emacs-lisp
(use-package doom-modeline
:init (doom-modeline-mode 1))
#+end_src
** Nerd icons
#+begin_src emacs-lisp
(use-package nerd-icons
;; :custom
;; The Nerd Font you want to use in GUI
;; "Symbols Nerd Font Mono" is the default and is recommended
;; but you can use any other Nerd Font if you want
;; (nerd-icons-font-family "Symbols Nerd Font Mono")
)
#+end_src
** Doom themes
#+begin_src emacs-lisp
(use-package doom-themes
:config
;; Global settings (defaults)
(setq doom-themes-enable-bold t ; if nil, bold is universally disabled
doom-themes-enable-italic t) ; if nil, italics is universally disabled
(load-theme 'doom-one t)
;; Enable custom neotree theme (all-the-icons must be installed!)
;;(doom-themes-neotree-config)
;; or for treemacs users
;;(setq doom-themes-treemacs-theme "doom-atom") ; use "doom-colors" for less minimal icon theme
;;(doom-themes-treemacs-config)
;; Corrects (and improves) org-mode's native fontification.
(doom-themes-org-config))
#+end_src
** Completion
#+begin_src emacs-lisp
;; Enable vertico
(use-package vertico
:init
(vertico-mode)
;; Different scroll margin
;; (setq vertico-scroll-margin 0)
;; Show more candidates
;; (setq vertico-count 20)
;; Grow and shrink the Vertico minibuffer
;; (setq vertico-resize t)
;; Optionally enable cycling for `vertico-next' and `vertico-previous'.
(setq vertico-cycle t)
)
;; Persist history over Emacs restarts. Vertico sorts by history position.
(use-package savehist
:init
(savehist-mode))
;; Optionally use the `orderless' completion style.
(use-package orderless
:init
;; Configure a custom style dispatcher (see the Consult wiki)
;; (setq orderless-style-dispatchers '(+orderless-consult-dispatch orderless-affix-dispatch)
;; orderless-component-separator #'orderless-escapable-split-on-space)
(setq completion-styles '(orderless basic)
completion-category-defaults nil
completion-category-overrides '((file (styles partial-completion)))))
;; Enable rich annotations using the Marginalia package
(use-package marginalia
;; Bind `marginalia-cycle' locally in the minibuffer. To make the binding
;; available in the *Completions* buffer, add it to the
;; `completion-list-mode-map'.
:bind (:map minibuffer-local-map
("M-A" . marginalia-cycle))
;; The :init section is always executed.
:init
;; Marginalia must be activated in the :init section of use-package such that
;; the mode gets enabled right away. Note that this forces loading the
;; package.
(marginalia-mode))
#+end_src
** Rainbow delimters
#+begin_src emacs-lisp
(use-package rainbow-delimiters
:hook (prog-mode . rainbow-delimiters-mode))
#+end_src
** consult
#+begin_src emacs-lisp
;; Example configuration for Consult
(use-package consult
;; Replace bindings. Lazily loaded due by `use-package'.
:bind (;; C-c bindings in `mode-specific-map'
("C-c M-x" . consult-mode-command)
("C-c h" . consult-history)
("C-c k" . consult-kmacro)
("C-c m" . consult-man)
("C-c i" . consult-info)
([remap Info-search] . consult-info)
;; C-x bindings in `ctl-x-map'
("C-x M-:" . consult-complex-command) ;; orig. repeat-complex-command
("C-x b" . consult-buffer) ;; orig. switch-to-buffer
("C-x 4 b" . consult-buffer-other-window) ;; orig. switch-to-buffer-other-window
("C-x 5 b" . consult-buffer-other-frame) ;; orig. switch-to-buffer-other-frame
("C-x r b" . consult-bookmark) ;; orig. bookmark-jump
("C-x p b" . consult-project-buffer) ;; orig. project-switch-to-buffer
;; Custom M-# bindings for fast register access
("M-#" . consult-register-load)
("M-'" . consult-register-store) ;; orig. abbrev-prefix-mark (unrelated)
("C-M-#" . consult-register)
;; Other custom bindings
("M-y" . consult-yank-pop) ;; orig. yank-pop
;; M-g bindings in `goto-map'
("M-g e" . consult-compile-error)
("M-g f" . consult-flymake) ;; Alternative: consult-flycheck
("M-g g" . consult-goto-line) ;; orig. goto-line
("M-g M-g" . consult-goto-line) ;; orig. goto-line
("M-g o" . consult-outline) ;; Alternative: consult-org-heading
("M-g m" . consult-mark)
("M-g k" . consult-global-mark)
("M-g i" . consult-imenu)
("M-g I" . consult-imenu-multi)
;; M-s bindings in `search-map'
("M-s d" . consult-find)
("M-s D" . consult-locate)
("M-s g" . consult-grep)
("M-s G" . consult-git-grep)
("M-s r" . consult-ripgrep)
("M-s l" . consult-line)
("M-s L" . consult-line-multi)
("M-s k" . consult-keep-lines)
("M-s u" . consult-focus-lines)
;; Isearch integration
("M-s e" . consult-isearch-history)
:map isearch-mode-map
("M-e" . consult-isearch-history) ;; orig. isearch-edit-string
("M-s e" . consult-isearch-history) ;; orig. isearch-edit-string
("M-s l" . consult-line) ;; needed by consult-line to detect isearch
("M-s L" . consult-line-multi) ;; needed by consult-line to detect isearch
;; Minibuffer history
:map minibuffer-local-map
("M-s" . consult-history) ;; orig. next-matching-history-element
("M-r" . consult-history)) ;; orig. previous-matching-history-element
;; Enable automatic preview at point in the *Completions* buffer. This is
;; relevant when you use the default completion UI.
:hook (completion-list-mode . consult-preview-at-point-mode)
;; The :init configuration is always executed (Not lazy)
:init
;; Optionally configure the register formatting. This improves the register
;; preview for `consult-register', `consult-register-load',
;; `consult-register-store' and the Emacs built-ins.
(setq register-preview-delay 0.5
register-preview-function #'consult-register-format)
;; Optionally tweak the register preview window.
;; This adds thin lines, sorting and hides the mode line of the window.
(advice-add #'register-preview :override #'consult-register-window)
;; Use Consult to select xref locations with preview
(setq xref-show-xrefs-function #'consult-xref
xref-show-definitions-function #'consult-xref)
;; Configure other variables and modes in the :config section,
;; after lazily loading the package.
:config
;; Optionally configure preview. The default value
;; is 'any, such that any key triggers the preview.
;; (setq consult-preview-key 'any)
;; (setq consult-preview-key "M-.")
;; (setq consult-preview-key '("S-<down>" "S-<up>"))
;; For some commands and buffer sources it is useful to configure the
;; :preview-key on a per-command basis using the `consult-customize' macro.
(consult-customize
consult-theme :preview-key '(:debounce 0.2 any)
consult-ripgrep consult-git-grep consult-grep
consult-bookmark consult-recent-file consult-xref
consult--source-bookmark consult--source-file-register
consult--source-recent-file consult--source-project-recent-file
;; :preview-key "M-."
:preview-key '(:debounce 0.4 any))
;; Optionally configure the narrowing key.
;; Both < and C-+ work reasonably well.
(setq consult-narrow-key "<") ;; "C-+"
;; Optionally make narrowing help available in the minibuffer.
;; You may want to use `embark-prefix-help-command' or which-key instead.
;; (define-key consult-narrow-map (vconcat consult-narrow-key "?") #'consult-narrow-help)
;; By default `consult-project-function' uses `project-root' from project.el.
;; Optionally configure a different project root function.
;;;; 1. project.el (the default)
;; (setq consult-project-function #'consult--default-project--function)
;;;; 2. vc.el (vc-root-dir)
;; (setq consult-project-function (lambda (_) (vc-root-dir)))
;;;; 3. locate-dominating-file
;; (setq consult-project-function (lambda (_) (locate-dominating-file "." ".git")))
;;;; 4. projectile.el (projectile-project-root)
;; (autoload 'projectile-project-root "projectile")
;; (setq consult-project-function (lambda (_) (projectile-project-root)))
;;;; 5. No project support
;; (setq consult-project-function nil)
)
#+end_src
** Nov - epub reader
#+begin_src emacs-lisp
(use-package visual-fill-column)
(use-package nov
:defer t
:init
(add-to-list 'auto-mode-alist '("\\.epub\\'" . nov-mode))
:config
(setq nov-text-width t)
(setq visual-fill-column-center-text t)
(add-hook 'nov-mode-hook 'visual-line-mode)
(add-hook 'nov-mode-hook 'visual-fill-column-mode)
)
#+end_src
** EMMS - MPV player integration
#+begin_src emacs-lisp
(use-package emms
:config
(emms-all)
(setq emms-player-list '(emms-player-mpv)
emms-info-functions '(emms-info-native)))
#+end_src
** Denote
#+begin_src emacs-lisp
;(use-package denote
; :custom
; (denote-directory "~/Notes"))
#+end_src
* Load Custom Elisp files
** Tell me how much time it takes to load configuration
#+begin_src emacs-lisp
;;(add-hook 'emacs-startup-hook
;; (lambda ()
;; (message "Emacs loaded in %s."
;; (emacs-init-time))))
#+end_src
* Inbuild programs
** Newsticker - RSS feed reader
#+begin_src emacs-lisp
(setq newsticker-url-list `(
("Kaniyam Foundation" "https://www.kaniyam.com/feed/" nil 3600)
("Julia Evans" "https://jvns.ca/atom.xml" nil 3600)
))
#+end_src