(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.
'(display-time-mode t )
'(global-command-log-mode t )
'(inhibit-startup-screen t )
'(ivy-mode t )
'(menu-bar-mode nil )
'(package-selected-packages
'(org-bullets evil-magit magit counsel-projectile projectile hydra evil-collection evil general doom-themes helpful ivy-rich which-key rainbow-delimiters doom-modeline counsel ivy use-package exwm))
'(scroll-bar-mode nil )
'(set-fringe-mode 10 )
'(tool-bar-mode nil )
'(visible-bell t ))
(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.
)
(global-set-key (kbd " <escape>" ) 'keyboard-escape-quit )
(column-number-mode )
(global-display-line-numbers-mode t )
; ; Frame transparency
(set-frame-parameter (selected-frame ) 'alpha '(90 . 90 ))
(add-to-list 'default-frame-alist '(alpha . (90 . 90 )))
(set-frame-parameter (selected-frame ) 'fullscreen 'maximized )
(add-to-list 'default-frame-alist '(fullscreen . maximized))
; ; Disable line numbers for some modes
(dolist (mode '(org-mode-hook
term-mode-hook
vterm-mode-hook
eshell-mode-hook))
(add-hook mode (lambda () (display-line-numbers-mode 0 ))))
(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-installed-p 'use-package )
(package-refresh-contents )
(package-install 'use-package ))
(require 'use-package )
(setq use-package-always-ensure t )
(use-package ivy
:diminish
:bind ((" C-s" . swiper)
:map ivy-minibuffer-map
(" TAB" . 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))
:config
(ivy-mode 1 ))
(use-package ivy-rich
:init (ivy-rich-mode 1 ))
; ; NOTE: The first time you load your config on a new machine, need to run following:
; ; M-x all-the-icons-install-fonts
(use-package all-the-icons)
(use-package doom-themes)
(load-theme 'doom-dark+ t )
(use-package doom-modeline
:ensure t
:init (doom-modeline-mode t ))
(use-package which-key
:init (which-key-mode)
:diminish which-key-mode
:config
(setq which-key-idle-delay 0.3 ))
(use-package counsel
:bind ((" M-x" . counsel-M-x)
(" C-x b" . counsel-ibuffer)
(" C-x C-f" . counsel-find-file)
(" C-M-j" . counsel-switch-buffer)
:map minibuffer-local-map
(" C-r" . 'counsel-minibuffer-history ))
:custom
(counsel-linux-app-format-function #'counsel-linux-app-format-function-name-only )
:config
(counsel-mode 1 ))
(use-package helpful
:custom
(counsel-describe-function-function #'helpful-callable )
(counsel-describe-variable-function #'helpful-variable )
:bind
([remap describe-function] . counsel-describe-function)
([remap describe-command] . helpful-command)
([remap describe-variable] . counsel-describe-variable)
([remap describe-key] . helpful-key))
(defun gg/evil-hook ()
(dolist (mode '(custom-mode
gim-rebase-mode))
(add-to-list 'evil-emacs-state-modes mode)))
(use-package evil
:demand t
:init
(setq evil-want-integration t )
(setq evil-want-keybinding nil )
(setq evil-want-C-u-scroll t )
(setq evil-want-C-i-jump nil )
:hook (evil-mode . gg/evil-hook)
:config
(evil-mode 1 )
(define-key evil-insert-state-map (kbd " C-g" ) 'evil-normal-state )
(define-key evil-insert-state-map (kbd " C-h" ) 'evil-delete-backward-char-and-join )
; ; Use visual line motions even outside visual-line-mode buffers
(evil-global-set-key 'motion " j" 'evil-next-visual-line )
(evil-global-set-key 'motion " k" 'evil-previous-visual-line )
(evil-set-initial-state 'message-buffer-mode 'normal )
(evil-set-initial-state 'dashboard-mode 'normal ))
(use-package evil-collection
:after evil
:config
(evil-collection-init))
(use-package general
:config
(general-create-definer gg/leader-keys
:keymaps '(normal insert visual emacs)
:prefix " SPC"
:global-prefix " C-SPC" )
(gg/leader-keys
" t" '(:ignore t :which-key " toggles" )
" tt" '(counsel-load-theme :which-key " choose theme" )
" ts" '(hydra-text-scale/body :which-key " scale text" )
" g" '(magit :which-key " magit" )
" v" '(vterm :which-key " vterm" )))
(defun gg/org-mode-visual-fill ()
(setq visual-fill-column-width 100
visual-fill-column-center-text t )
(visual-fill-column-mode 1 ))
(use-package visual-fill-column
:hook (org-mode . gg/org-mode-visual-fill))
(defun gg/org-mode-setup ()
(org-indent-mode )
(variable-pitch-mode 1 )
(auto-fill-mode 0 )
(visual-line-mode 1 )
(setq evil-auto-indent nil ))
(use-package org
:hook (org-mode . gg/org-mode-setup))
(use-package org-bullets
:after org )
(require 'org-tempo )
(add-to-list 'org-structure-template-alist '(" el" . " src emacs-lisp" ))
Auto-tangle Configuration Files
(defun gg/org-babel-tangle-config ()
(when (string-equal (file-name-directory (buffer-file-name ))
(expand-file-name " ~/Documents/dotfiles/" ))
; ; Dynamic scoping to the rescue
(let ((org-confirm-babel-evaluate nil ))
(org-babel-tangle ))))
(add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'gg/org-babel-tangle-config )))
Configure Babel Languages
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t )
(python . t )))
(use-package hydra)
(defhydra hydra-text-scale (:timeout 4 )
" scale text"
(" j" text-scale-increase " in" )
(" k" text-scale-decrease " out" )
(" f" nil " finished" :exit t ))
(use-package projectile
:diminish projectile-mode
:config (projectile-mode)
:custom ((projectile-completion-system 'ivy ))
:bind-keymap
(" C-c p" . projectile-command-map)
:init
(when (file-directory-p " ~/Documents/go_projects/src" )
(setq projectile-project-search-path '(" ~/Documents/go_projects/src" )))
(setq projectile-switch-project-action #'projectile-dired ))
(use-package counsel-projectile
:config (counsel-projectile-mode))
(use-package magit
:commands (magit-status magit-get-current-branch)
:custom
(magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1 ))
(use-package rainbow-delimiters
:hook (prog-mode . rainbow-delimiters-mode))
(use-package dired
:ensure nil
:commands (dired dired-jump)
:bind ((" C-x C-j" . dired-jump))
:custom ((dired-listing-switches " -agho --group-directories-first" ))
:config
(evil-collection-define-key 'normal 'dired-mode-map
" h" 'dired-single-up-directory
" l" 'dired-single-buffer ))
(use-package dired-single)
(use-package all-the-icons-dired
:hook (dired-mode . all-the-icons-dired-mode))
(defun gg/lsp-mode-setup ()
(setq lsp-headerline-breadcrumb-segments '(path-up-to-project file symbols))
(lsp-headerline-breadcrumb-mode))
(use-package lsp-mode
:commands (lsp lsp-deferred)
:hook (lsp-mode . gg/lsp-mode-setup)
:init
(setq lsp-keymap-prefix " C-c l" )
:config
(lsp-enable-which-key-integration t ))
(use-package lsp-ui
:hook (lsp-mode . lsp-ui-mode))
(use-package company
:after lsp-mode
:hook (lsp-mod . 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))
(use-package python-mode
:ensure nil
:hook (python-mode . lsp-deferred)
:custom
(python-shell-interpreter " python3" ))
(defun lsp-go-install-save-hooks ()
(add-hook 'before-save-hook #'lsp-format-buffer t t )
(add-hook 'before-save-hook #'lsp-organize-imports t t ))
(add-hook 'go-mode-hook #'lsp-go-install-save-hooks )
(use-package go-mode
:ensure nil
:hook (go-mode . lsp-deferred))