summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.emacs.d/emacs.org444
-rw-r--r--.emacs.d/init.el371
2 files changed, 815 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
diff --git a/.emacs.d/init.el b/.emacs.d/init.el
new file mode 100644
index 0000000..1bdee80
--- /dev/null
+++ b/.emacs.d/init.el
@@ -0,0 +1,371 @@
+;;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)
+
+(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))))
+
+(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)
+
+(use-package doom-themes
+ :init (load-theme 'doom-dracula t))
+
+(use-package all-the-icons
+ :ensure t)
+
+
+(use-package doom-modeline
+ :ensure t
+ :init (doom-modeline-mode 1)
+ :custom ((doom-modeline-height 35)))
+
+(use-package which-key
+ :init (which-key-mode)
+ :diminish which-key-mode
+ :config
+ (setq which-key-idle-delay 0.5)
+ )
+
+(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))
+
+(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))
+
+(use-package smart-cursor-color
+ :config
+ (smart-cursor-color-mode +1))
+
+;; 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)
+
+(apollo/leader-keys
+ "g" '(:ignore t :which-key "Git")
+ "gs" '(magit-status :which-key "status"))
+
+(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)
+)
+
+;; 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
+ )
+
+(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"))
+
+(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"))
+
+(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)
+
+(org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((emacs-lisp . t)
+ (python . t)))
+
+(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"))
+
+;; 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)))
+
+(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))
+
+(use-package lsp-ui
+ :hook (lsp-mode . lsp-ui-mode)
+ :custom
+ (lsp-ui-doc-position 'bottom))
+
+(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")))
+
+
+
+(use-package typescript-mode
+:mode "\\.ts\\'"
+:hook (typescript-mode .lsp-deferred)
+:config
+(setq typescript-indent-level 2))
+
+(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))
+
+(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))
+
+(use-package magit
+ :custom
+ (magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1))