diff options
Diffstat (limited to '.emacs.d/emacs.org')
-rw-r--r-- | .emacs.d/emacs.org | 444 |
1 files changed, 444 insertions, 0 deletions
diff --git a/.emacs.d/emacs.org b/.emacs.d/emacs.org new file mode 100644 index 0000000..faacb83 --- /dev/null +++ b/.emacs.d/emacs.org @@ -0,0 +1,444 @@ +#+title My emacs configuration +#+PROPERTY: header-args:emacs-lisp :tangle ./init.el +* Package System Setup +#+begin_src emacs-lisp +;;Test 3 +(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)) + +(unless (package-installed-p 'use-package) +(package-install 'use-package)) + +(require 'use-package) +(setq use-package-always-ensure t) +#+end_src +* UI Configuration +** Basics Configuration +#+begin_src emacs-lisp + (setq inhibit-startup-message nil) + + (defvar apollo/default-font-size 130) + + (set-face-attribute 'default nil :font "JetBrains Mono" :height 130) + + (scroll-bar-mode -1) + (tool-bar-mode -1) + (tooltip-mode -1) + (set-fringe-mode 10) + (menu-bar-mode -1) + (blink-cursor-mode -1) + (menu-bar--visual-line-mode-enable) + ;Visible bell + (setq visible-bell t) + + + + (column-number-mode) + (global-display-line-numbers-mode t) + (menu-bar--display-line-numbers-mode-relative) + ;;Disable line numbers for some modes + (dolist (mode '(pdf-view-mode-hook + org-mode-hook + term-mode-hook + shell-mode-hook + eshell-mode-hook)) + (add-hook mode (lambda () (display-line-numbers-mode 0)))) + +#+end_src + +** Font configuration +I use *JetBrains Mono*, *Arial* and *Cantarell* for this configuration, which will need to be installed in your system for this configuration to work +#+begin_src emacs-lisp + (set-face-attribute 'default nil + :font "JetBrains Mono" + :height apollo/default-font-size) + (set-face-attribute 'fixed-pitch nil + :font "Arial" + :height 260) + + (set-face-attribute 'variable-pitch nil + :font "Cantarell" + :height 295 + :weight 'regular) +#+end_src +** Color theme +#+begin_src emacs-lisp +(use-package doom-themes + :init (load-theme 'doom-dracula t)) +#+end_src +** Modeline +#+begin_src emacs-lisp +(use-package all-the-icons + :ensure t) + + +(use-package doom-modeline + :ensure t + :init (doom-modeline-mode 1) + :custom ((doom-modeline-height 35))) +#+end_src +** 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.5) + ) +#+end_src +** Ivy and counsel +#+begin_src emacs-lisp +(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)) + +(use-package counsel + :bind (("C-M-j" . 'counsel-switch-buffer) + :map minibuffer-local-map + ("C-r" . 'counsel-minibuffer-history)) + :config + (counsel-mode 1)) +#+end_src +** Helpful Help Commands +#+begin_src emacs-lisp +(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)) +#+end_src +** Cursor color ++ I'm using smart-cursor-color-mode + #+begin_src emacs-lisp +(use-package smart-cursor-color + :config + (smart-cursor-color-mode +1)) + #+end_src +* Keybinding configuration +** The Essentials +I use [[https://evil.readthedocs.io/en/latest/index.html][evil-mode]] for a vim-like experience, with *general.el* and *evil-collection* for better integration +#+begin_src emacs-lisp + ;; Make ESC quit prompts + (global-set-key (kbd "<escape>") 'keyboard-escape-quit) + (use-package general + :config + (general-create-definer apollo/leader-keys + :keymaps '(normal insert visual emacs) + :prefix "SPC" + :global-prefix "C-SPC") + + (apollo/leader-keys + "t" '(:ignore t :which-key "toggles") + "tt" '(counsel-load-theme :which-key "choose theme"))) + + + (use-package evil + :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 . apollo/evil-hook) + :config + (evil-mode 1) + (define-key evil-insert-state-map (kbd "C-f") 'evil-normal-state) + + (evil-global-set-key 'motion "j" 'evil-next-visual-line) + (evil-global-set-key 'motion "k" 'evil-previous-visual-line) + + (evil-set-initial-state 'messages-buffer-mode 'normal) + ;; (evil-set-initial-state 'dashboard-mode 'normal) + (evil-define-key 'normal dired-mode-map + (kbd "h") 'dired-up-directory + (kbd "l") 'dired-find-file + (kbd "m") 'dired-mark + (kbd "R") 'dired-do-rename + (kbd "D") 'dired-do-delete) + ) + + (use-package evil-collection + :after evil + :config + (evil-collection-init)) + ;;Ibuffer + (global-set-key (kbd "C-x C-b") 'ibuffer) +#+end_src +** apollo/leader-keys +*** Magit +#+begin_src emacs-lisp +(apollo/leader-keys + "g" '(:ignore t :which-key "Git") + "gs" '(magit-status :which-key "status")) +#+end_src +* Org mode +** Basic configuration +#+begin_src emacs-lisp +(defun apollo/org-mode-setup () + (setq evil-auto-indent nil) + (apollo/org-theme-dracula)) + +(use-package org + :hook (org-mode . apollo/org-mode-setup) + :config + (setq org-directory "~/org/" + org-agenda-files '("~/org/agenda.org" + "~/org/med.org") + org-default-notes-file (expand-file-name "notes.org" org-directory) + org-ellipsis " ▼ " + org-log-done 'time + org-hide-emphasis-markers nil ;change to t to hide emphasis markers + org-table-convert-region-max-lines 20000 + org-todo-keywords ; This overwrites the default Doom org-todo-keywords + '((sequence + "TODO(t)" ; A task that is ready to be tackled + "BLOG(b)" ; Blog writing assignments + "GYM(g)" ; Things to accomplish at the gym + "WAIT(w)" ; Something is holding up this task + "|" ; The pipe necessary to separate "active" states and "inactive" states + "DONE(d)" ; Task has been completed + "CANCELLED(c)" ))) + (setq org-agenda-start-log-mode t) + (setq org-log-done 'time) + (setq org-log-into-drawer t) +) +#+end_src +*** Org bullets ++ Recently I've been trying out org-superstar as a replacement for org-bullets, but I kept the configuration as a comment for anyone wanting to test it out +#+begin_src emacs-lisp +;; Use either org-bullets or org-superstar + ;; (use-package org-bullets + ;; :after org + ;; :hook (org-mode . org-bullets-mode) + ;; :custom + ;; (org-bullets-bullet-list '("●" "○" "●" "○" "●" "●" ))) + (use-package org-superstar + :after org + :hook (org-mode . org-superstar-mode) + :config + (setq + org-superstar-headline-bullets-list '("◉" "●" "○" "●" "○" "●" "◆") + org-superstar-itembullet-alist '((?+ . ?➤) (?- . ?✦))) ; changes +/- symbols in item lists + ) +#+end_src +*** Org Themes +**** Dark-one +#+begin_src emacs-lisp +(defun apollo/org-theme-darkone () + "My custom org theme for doom themes" + (interactive) + (dolist + (face + '((org-level-1 1.70 "#51afef" ultra-bold) + (org-level-2 1.55 "#7FBCD2" extra-bold) + (org-level-3 1.40 "#da8548" bold) + (org-level-4 1.20 "#da8548" semi-bold) + (org-level-5 1.20 "#5699af" normal) + (org-level-6 1.20 "#a9a1e1" normal) + (org-level-7 1.10 "#46d9ff" normal) + (org-level-8 1.00 "#ff6c6b" normal))) + (set-face-attribute (nth 0 face) nil + :font "Jetbrains Mono" + :weight (nth 3 face) + :height (nth 1 face) + :foreground (nth 2 face))) + (set-face-attribute 'org-table nil + :font "Jetbrains Mono" + :weight 'normal + :height 1.0 + :foreground "#A66CFF")) +#+end_src +**** Dracula +#+begin_src emacs-lisp +(defun apollo/org-theme-dracula () + "Enable Dracula theme for Org headers." + (interactive) + (dolist + (face + '((org-level-1 1.7 "#8be9fd" ultra-bold) + (org-level-2 1.6 "#bd93f9" extra-bold) + (org-level-3 1.5 "#50fa7b" bold) + (org-level-4 1.4 "#ff79c6" semi-bold) + (org-level-5 1.3 "#9aedfe" normal) + (org-level-6 1.2 "#caa9fa" normal) + (org-level-7 1.1 "#5af78e" normal) + (org-level-8 1.0 "#ff92d0" normal))) + (set-face-attribute (nth 0 face) nil + :font "JetBrains Mono" + :weight (nth 3 face) + :height (nth 1 face) + :foreground (nth 2 face))) + (set-face-attribute 'org-table nil + :font "JetBrains Mono" + :weight 'normal + :height 1.0 + :foreground "#bfafdf")) +#+end_src +**** Center text function +#+begin_src emacs-lisp + (defun apollo/org-mode-visual () + (interactive) + (setq visual-fill-column-width 100 + visual-fill-column-center-text t) + (visual-fill-column-mode 1)) + (defun apollo/org-mode-visual-undo () + (interactive) + (setq visual-fill-column-width 2000 + visual-fill-column-center-text nil) + (visual-fill-column-mode 1)) + + + (use-package visual-fill-column) +#+end_src +** Babel Languages +#+begin_src emacs-lisp + (org-babel-do-load-languages + 'org-babel-load-languages + '((emacs-lisp . t) + (python . t))) +#+end_src +** Babel templates +#+begin_src emacs-lisp + (require 'org-tempo) + (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")) +#+end_src +** Auto-tangle configuration +#+begin_src emacs-lisp +;; Automatically tangle our Emacs.org config file when we save it +(defun apollo/org-babel-tangle-config () + (when (string-equal (buffer-file-name) + (expand-file-name "~/.emacs.d/emacs.org")) + ;; 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 #'apollo/org-babel-tangle-config))) +#+end_src +Add some text +* Development +** Languages +*** IDE Features | lsp-mode +**** lsp-mode +#+begin_src emacs-lisp +(defun apollo/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 . apollo/lsp-mode-setup) + :init + (setq lsp-keymap-prefix "C-c l") ;; Or 'C-l', 's-l' + :config + (lsp-enable-which-key-integration t)) +#+end_src +**** lsp-ui +#+begin_src emacs-lisp +(use-package lsp-ui + :hook (lsp-mode . lsp-ui-mode) + :custom + (lsp-ui-doc-position 'bottom)) +#+end_src +*** Debugging with dap +#+begin_src emacs-lisp +(use-package dap-mode + ;; Uncomment the config below if you want all UI panes to be hidden by default! + ;; :custom + ;; (lsp-enable-dap-auto-configure nil) + ;; :config + ;; (dap-ui-mode 1) + + :config + ;; Set up Node debugging + (require 'dap-node) + (dap-node-setup) ;; Automatically installs Node debug adapter if needed + + ;; Bind `C-c l d` to `dap-hydra` for easy access + (general-define-key + :keymaps 'lsp-mode-map + :prefix lsp-keymap-prefix + "d" '(dap-hydra t :wk "debugger"))) +#+end_src +*** Javascript +#+begin_src emacs-lisp +#+end_src +*** TypeScript +#+begin_src emacs-lisp + (use-package typescript-mode + :mode "\\.ts\\'" + :hook (typescript-mode .lsp-deferred) + :config + (setq typescript-indent-level 2)) +#+end_src +*** Python +If pyls and pylsp are not on path, do *M-x setenv RET PATH* in emacs, and then set enviroment variable e.g */home/apollo/.local/bin* +#+begin_src emacs-lisp + (use-package python-mode + :ensure t + :hook (python-mode . lsp-deferred) + :custom + ;; NOTE: Set these if Python 3 is called "python3" on your system! + ;; (python-shell-interpreter "python3") + ;; (dap-python-executable "python3") + (dap-python-debugger 'debugpy) + :config + (require 'dap-python)) + + ;;Pyenv +(use-package pyvenv + :config + (pyvenv-mode 1)) +#+end_src +*** Company mode +#+begin_src emacs-lisp +(use-package company + :after lsp-mode + :hook (lsp-mode . 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)) +#+end_src +** Magit +The best Git interface + #+begin_src emacs-lisp +(use-package magit + :custom + (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)) + #+end_src |