     (exec-path-from-shell-initialize)
     (exec-path-from-shell-copy-env "GOPATH")))
 
-;; Enable magit
+;; Use spaces instead of tabs
+(setq-default indent-tabs-mode nil)
+
+;; Wrap everything at 80 char
+(add-hook 'text-mode-hook '(lambda () (auto-fill-mode 1)))
+
+;; Enable UTF-8 Everywhere
+(prefer-coding-system 'utf-8-unix)
+(set-default-coding-systems 'utf-8)
+(set-terminal-coding-system 'utf-8)
+(set-keyboard-coding-system 'utf-8)
+(set-selection-coding-system 'utf-8)
+(set-file-name-coding-system 'utf-8)
+(set-clipboard-coding-system 'utf-8)
+(set-buffer-file-coding-system 'utf-8)
+
+;; Use macOS Built In Menlo Font
+(set-face-attribute 'default nil
+		    :font "Menlo-12"
+                    :height 100
+                    :weight 'normal
+                    :width 'normal)
+(set-frame-font "Menlo-12" nil t)
+
 (use-package magit
   :ensure t
-  :bind (("C-x g" . magit-status)))
+  :bind (("C-x g" . magit-status)
+         ("C-x M-g" . magit-dispatch)))
 
-;; Support Extra Github Functions
-(use-package forge
+(use-package projectile
   :ensure t
-  :after magit)
+  :config
+  (define-key projectile-mode-map (kbd "s-p") 'projectile-command-map)
+  (define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)
+  (projectile-mode +1))
+  
+(use-package treemacs
+  :ensure t
+  :bind
+  (:map global-map
+        ("C-<f8>" . treemacs-select-window)
+        ([f8]     . treemacs))
+  :config
+  (setq treemacs-is-never-other-window t))
 
-(use-package htmlize
+(use-package treemacs-projectile
+  :after treemacs projectile
   :ensure t)
 
-(use-package nord-theme
+(use-package treemacs-magit
+  :after treemacs magit
+  :ensure t)
+
+;; Only trim whitespace for lines you have edited
+(use-package ws-butler
   :ensure t
   :config
-  (load-theme 'nord t))
+  (ws-butler-global-mode)
+  (setq ws-butler-keep-whitespace-before-point nil))
 
-;; Use `nord8` from Nord's "Frost" palette as background color.
-(setq nord-region-highlight "snowstorm")
-
-;; Enable language server protocol support
-;; https://github.com/golang/tools/blob/master/gopls/doc/emacs.md
-(use-package lsp-mode
-  :ensure t
-  :commands (lsp lsp-deferred)
-  :config
-  (setq lsp-prefer-flymake nil)
-  :hook (go-mode . lsp-deferred))
-
-;; Set up before-save hooks to format buffer and add/delete imports.
-;; Make sure you don't have other gofmt/goimports hooks enabled.
-(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)
-
-;; Optional - provides fancier overlays.
-(use-package lsp-ui
-  :ensure t
-  :commands lsp-ui-mode
-  :hook (lsp-mode-hook . lsp-ui-mode)
-  :config
-  (setq lsp-ui-doc-enable nil
-        lsp-ui-peek-enable t
-        lsp-ui-sideline-enable t
-        lsp-ui-imenu-enable t
-        lsp-ui-flycheck-enable t)
-  :init)
-
-;; optional, provides snippets for method signature completion
-(use-package yasnippet
-  :ensure t
-  :commands yas-minor-mode
-  :hook (go-mode . yas-minor-mode))
-
-(use-package web-mode
-  :ensure t
-  :config
-  (add-to-list 'auto-mode-alist '("\\.gohtml\\'" . web-mode))
-  (setq web-mode-engines-alist
-        '(("go" . "\\.gohtml\\'"))
-        )
-  )
-
-;; Company mode is a standard completion package that works well with lsp-mode.
-(use-package company
-  :ensure t
-  :config
-  (setq company-idle-delay 0)
-  (setq company-minimum-prefix-length 1)
-  (setq company-tooltop-align-annotations t))
-
-;; optional package to get the error squiggles as you edit
-(use-package flycheck
-  :ensure t)
-
-;; company-lsp integrates company mode completion with lsp-mode.
-;; completion-at-point also works out of the box but doesn't support snippets.
-(use-package company-lsp
-  :ensure t
-  :after company
-  :commands company-lsp
-  :config
-  (push 'company-lsp company-backends))
-
-;; Enable Golang Support
-(use-package go-mode
-  :ensure t
-  :bind (
-         ;; If you want to switch existing go-mode bindings to use lsp-mode/gopls instead
-         ;; uncomment the following lines
-         ;; ("C-c C-j" . lsp-find-definition)
-         ;; ("C-c C-d" . lsp-describe-thing-at-point)
-         )
-  :hook ((go-mode . lsp-deferred)
-         (before-save . lsp-format-buffer)
-         (before-save . lsp-organize-imports)))
-
-(use-package sql-indent
-  :ensure t)
-
-;; Fancy titlebar for macOS
-(add-to-list 'default-frame-alist '(ns-transparent-titlebar . t))
-(add-to-list 'default-frame-alist '(ns-appearance . darl))
-(setq ns-use-proxy-icon nil)
-(setq frame-title-format nil)
-
-;; Setup Org Mode
-(use-package org
-  :ensure t
-  :bind (
-         ("C-c a" . org-agenda)))
-
-(use-package ob-go
-  :ensure t)
-
-(setq org-directory "~/org")
-(setq org-default-notes-file "~/org/todo.org")
-(setq org-log-done 'note)
-(setq org-log-done 'time)
-
-;; Setup C-c c to capture new TODOs
-(global-set-key (kbd "C-c c") 'org-capture)
-;; Setup a key bind for the agenda
-(global-set-key (kbd "C-c a") 'org-agenda)
-
-(setq org-agenda-files (quote ("~/org")))
-
-(use-package org-fancy-priorities
-  :ensure t
-  :hook
-  (org-mode . org-fancy-priorities-mode)
-  :config
-  (setq org-fancy-priorities-list '("⚡" "⬆" "⬇" "☕")))
-
-;; A new template
-(setq org-capture-templates
-      '(("t" "Todo" entry (file "~/org/todo.org")
-         "* TODO %?\n%U\n")
-        ("n" "Notes" entry (file+headline "~/org/notes.org" "Notes")
-         "* %? :NOTE:\n%U\n")))
-
-(setq org-todo-keywords
-      (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)")
-              (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING"))))
-
-(setq org-todo-keyword-faces
-      (quote (("TODO" :foreground "red" :weight bold)
-              ("NEXT" :foreground "blue" :weight bold)
-              ("DONE" :foreground "forest green" :weight bold)
-              ("WAITING" :foreground "orange" :weight bold)
-              ("HOLD" :foreground "magenta" :weight bold)
-              ("CANCELLED" :foreground "forest green" :weight bold)
-              ("MEETING" :foreground "forest green" :weight bold)
-              ("PHONE" :foreground "forest green" :weight bold))))
-
-(setq org-use-fast-todo-selection t)
-(setq org-treat-S-cursor-todo-selection-as-state-change nil)
-
-(setq org-todo-state-tags-triggers
-      (quote (("CANCELLED" ("CANCELLED" . t))
-              ("WAITING" ("WAITING" . t))
-              ("HOLD" ("WAITING") ("HOLD" . t))
-              (done ("WAITING") ("HOLD"))
-              ("TODO" ("WAITING") ("CANCELLED") ("HOLD"))
-              ("NEXT" ("WAITING") ("CANCELLED") ("HOLD"))
-              ("DONE" ("WAITING") ("CANCELLED") ("HOLD")))))
-
-(use-package ob-mermaid
-  :ensure t)
-
-(setq ob-mermaid-cli-path "/usr/local/bin/mmdc")
-
-;; Don't ask for confirmation on eval buffers
-(setq org-confirm-babel-evaluate nil)
-
-;; active Babel languages
-(org-babel-do-load-languages
- 'org-babel-load-languages
- '((R . t)
-   (mermaid . t)
-   (sql . t)
-   (sqlite . t)
-   (go . t)
-   (emacs-lisp . nil)))
-
-;; Remove trailling whitespace on save
-(add-hook 'before-save-hook 'delete-trailing-whitespace)
-
-(provide 'init)
-
-;;; init.el ends here
 (custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.


;;; Code:

;; Minimal UI
(scroll-bar-mode -1)
(tool-bar-mode -1)

 ;; If there is more than one, they won't work right.
 '(package-selected-packages
   (quote
    (treemacs yasnippet yaml-mode web-mode use-package sql-indent org-fancy-priorities ob-mermaid ob-go nord-theme lsp-ui htmlize go-mode github-theme forge flycheck exec-path-from-shell company-lsp))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
