   :ensure t
   :init (global-flycheck-mode))
 
+;; company, the best auto completion support around
+(use-package company
+  :ensure t
+  :hook (prog-mode . company-mode))
+
+;; LSP mode for all the things
+(use-package lsp-mode
+  :ensure t
+  :commands (lsp lsp-execute-code-action)
+  :hook ((go-mode . lsp-deferred)
+         (lsp-mode . lsp-enable-which-key-integration)
+         (lsp-mode . lsp-diagnostics-modeline-mode))
+  :bind ("C-c C-c" . #'lsp-execute-code-action)
+  :custom
+  (lsp-print-performance t)
+  (lsp-log-io t)
+  (lsp-diagnostics-modeline-scope :project)
+  (lsp-file-watch-threshold 5000)
+  (lsp-enable-file-watchers nil))
+
+(use-package lsp-ui
+  :ensure t
+  :custom
+  (lsp-ui-doc-delay 0.75)
+  (lsp-ui-doc-max-height 200)
+  :after lsp-mode)
+
+(use-package lsp-ivy
+  :ensure t
+  :after (ivy lsp-mode))
+
+(use-package company-lsp
+  :ensure t
+  :custom (company-lsp-enable-snippet t)
+  :after (company lsp-mode))
+
 ;; org mode configuration
 (use-package org
   :ensure t

  (setq org-log-done t)                             ; default log time when todo is completed
  (setq org-ellipsis " ▼")                          ; fancy collapse of blocks
  (setq org-directory "~/Documents/org")            ; default org directory for files
  (setq org-agenda-files '("~/Documents/org/")))    ; pull in agenda files

;; org language support
(org-babel-do-load-languages


(save-place-mode 1)                           ;; return to the last place we were in the file
(show-paren-mode t)                           ;; show matching parens
(electric-pair-mode)                          ;; insert a matching paren
(size-indication-mode t)                      ;; display the size of the buffer
(global-hl-line-mode t)                       ;; highlight the current line we're on
(global-auto-revert-mode t)                   ;; automatically revert buffer if changes are made outside of emacs
