diff --git a/forge-database.sqlite b/forge-database.sqlite
deleted file mode 100644
index cba00b83c1b7c33b29277e4f22727477762dd701..0000000000000000000000000000000000000000
Binary files a/forge-database.sqlite and /dev/null differ
diff --git a/init.el b/init.el
index 13e034e45762437f256bd885c60ec83a76312b79..7e1053dbfa48b620a6128a516df1d3c93ffa2287 100644
--- a/init.el
+++ b/init.el
@@ -12,7 +12,7 @@
 
 (let (
       ;; adjust garbage collection at startup
-      (gc-cons-threshold most-positive-fixnum)
+      (gc-cons-threshold (* 128 1024 1024))
       (gc-cons-percentage 0.6))
 
   ;; Use a hook so the messages doesn't get clobbered by other messages.
@@ -72,6 +72,12 @@
       (progn
         (package-refresh-contents)
         (package-install 'use-package)))
+  ;; Install use-package from melpa
+  (unless (package-installed-p 'quelpa)
+    (progn
+        (package-refresh-contents)
+        (package-install 'quelpa)))
+  (setq quelpa-checkout-melpa-p nil)
 
   (require 'keybindings)
   (require 'editor)
@@ -82,6 +88,8 @@
   (require 'prog-c-cpp)
   (require 'prog-python)
   (require 'prog-haskell)
+  (require 'prog-lisp)
+  (require 'prog-verilog)
   (require 'init-org)
   (require 'apps)
 
diff --git a/lisp/apps.el b/lisp/apps.el
index 76d7e4e71f3ba4c2b514bfab85246d58b3681483..730c8f938e91ce5f715b52cab46dd9d7361e67e2 100644
--- a/lisp/apps.el
+++ b/lisp/apps.el
@@ -49,6 +49,23 @@
   (setq rime-show-candidate 'posframe
         default-input-method "rime"))
 
+;;; EAF
+(quelpa '(eaf :fetcher github
+              :repo "manateelazycat/emacs-application-framework"
+              :files ("*")))
+
+(use-package eaf
+  :load-path "quelpa/build/eaf"
+  :init
+  (use-package epc :defer t :ensure t)
+  (use-package ctable :defer t :ensure t)
+  (use-package deferred :defer t :ensure t)
+  :custom
+  (eaf-browser-continue-where-left-off t)
+  :config
+  (eaf-setq eaf-browser-enable-adblocker "true")
+  (eaf-bind-key scroll_up "C-n" eaf-pdf-viewer-keybinding)
+  (eaf-bind-key scroll_down "C-p" eaf-pdf-viewer-keybinding))
 
 (provide 'apps)
 ;;; apps.el ends here
diff --git a/lisp/prog-common.el b/lisp/prog-common.el
index c8a1ee012b9fe24b91e6b9774fb1349536579cfa..de4dd56c0471c0aba698a515bfc32f17fc5dae5a 100644
--- a/lisp/prog-common.el
+++ b/lisp/prog-common.el
@@ -10,30 +10,35 @@
   :ensure t
   :init
   (setq lsp-keymap-prefix "C-c l")
+  <<<<<<< HEAD
   :commands (lsp lsp-deferred)
-  :hook ((c-mode . lsp-deferred)
-         (c++-mode . lsp-deferred)
-         (python-mode . lsp-deferred)
-         (lsp-mode . lsp-enable-which-key-integration))
+  :hook ((c-mode c++-mode python-mode) . lsp-deferred)
   :config
   (setq lsp-enable-snippet nil
         lsp-modeline-diagnostics-enable nil
         lsp-prefer-capf t)
-
-  (push '("*lsp-help*" :dedicated t :position bottom :stick t :noselect t :height 0.4)
+  (setq lsp-enable-snippet nil)
+  (setq lsp-modeline-diagnostics-enable nil)
+  (push '("^\\*[Ll]sp.+\\*$"
+          :regexp t
+          :dedicated t
+          :position bottom
+          :stick t
+          :noselect t)
         popwin:special-display-config)
 
   (user/set-leader-key* nil lsp-mode-map
-    ;; format
-    "=b" #'lsp-format-buffer
-    "=r" #'lsp-format-region
-    "=o" #'lsp-organize-imports
-    ;; code
-    "cr" #'lsp-rename
-    ;; backends
-    "bd" #'lsp-describe-session
-    "br" #'lsp-workspace-restart
-    "bx" #'lsp-workspace-shutdown))
+                        ;; format
+                        "=b" #'lsp-format-buffer
+                        "=r" #'lsp-format-region
+                        "=o" #'lsp-organize-imports
+                        ;; code
+                        "cr" #'lsp-rename
+                        ;; backends
+                        "bd" #'lsp-describe-session
+                        "br" #'lsp-workspace-restart
+                        "bx" #'lsp-workspace-shutdown)
+  :commands (lsp lsp-deferred))
 
 (use-package lsp-ui
   :ensure t
diff --git a/lisp/prog-lisp.el b/lisp/prog-lisp.el
index a3fc4f444fa40328b8a6529b93e5bea03b268cce..06057f07a18726a4b8061dd21ca041673af68b72 100644
--- a/lisp/prog-lisp.el
+++ b/lisp/prog-lisp.el
@@ -8,14 +8,23 @@
   :ensure t
   :commands run-geiser)
 
-(use-package parinfer
-  :ensure t
-  :hook (scheme-mode . parinfer-mode))
-
 (use-package lispy-mode
   :ensure lispy
   :hook emacs-lisp-mode
   :diminish lispy-mode)
 
+(use-package ielm
+  :defer t)
+
+(use-package debug
+  :defer t)
+
+(use-package edebug
+  :ensure nil
+  :defer t)
+
+(use-package emr
+  :ensure t)
+
 (provide 'prog-lisp)
 ;;; prog-lisp.el ends here
diff --git a/lisp/prog-python.el b/lisp/prog-python.el
index 4fd77d765ce595dd6bcb67746d7021f76a9b80c9..3fb5bbfd42da594b480d7dce8b8ee83164d9e659 100644
--- a/lisp/prog-python.el
+++ b/lisp/prog-python.el
@@ -1,24 +1,51 @@
+;;; prog-python.el --- Configuration for python.
+;;; Commentary:
 
 ;;; Code:
+(defvar python/pyvenv-modes nil)
 
-(use-package importmagic
-  :defer t
-  :ensure t
-  :diminish importmagic-mode
-  :init
-  (add-hook 'python-mode-hook 'importmagic-mode))
+(defun python/pyvenv-set-local-virtualenv ()
+  "Set pyvenv virtualenv from \".venv\" by looking in parent directories."
+  (interactive)
+  (let ((root-path (locate-dominating-file default-directory ".venv")))
+    (when root-path
+      (let ((file-path (expand-file-name ".venv" root-path)))
+        (cond ((file-directory-p file-path)
+               (pyvenv-activate file-path)
+               (message "Activated local virtualenv"))
+              (t (message ".venv is not a directory")))))))
 
-(use-package pipenv
+(use-package python
   :defer t
+  :ensure nil
+  :after flycheck
+  :mode "\\.py\\'"
+  :custom
+  (python-indent-offset 4)
+  (flycheck-python-pycompile-executable "python3")
+  :config
+  (setq python-shell-interpreter "python3"))
+
+(use-package lsp-pyright
   :ensure t
-  :init
-  (add-hook 'python-mode-hook #'pyvenv-tracking-mode))
+  :hook (python-mode . (lambda () (require 'lsp-pyright)))
+  :init (when (executable-find "python3")
+          (setq lsp-pyright-python-executable-cmd "python3")))
 
-(use-package python
+(use-package yapfify
+  :ensure t
   :defer t
+  :hook (python-mode . yapf-mode))
+
+(use-package pyvenv
+  :ensure t
   :init
-  :config
-  )
+  (add-hook 'python-mode-hook #'pyvenv-tracking-mode)
+  (add-to-list 'python/pyvenv-modes 'python-mode)
+  ;; Set for auto active virtual env
+  (dolist (m python/pyvenv-modes)
+    (add-hook (intern (format "%s-hook" m))
+              'python/pyvenv-set-local-virtualenv())))
 
 (provide 'prog-python)
 ;;; prog-python.el ends here
diff --git a/lisp/prog-verilog.el b/lisp/prog-verilog.el
new file mode 100644
index 0000000000000000000000000000000000000000..939dd321214713e3fa4f63f380a646f0f4ddcc2a
--- /dev/null
+++ b/lisp/prog-verilog.el
@@ -0,0 +1,26 @@
+;;; prog-verilog.el --- programming verilog configurations
+;;; Commentary:
+;;; Code:
+(use-package verilog-mode
+  :ensure nil
+  :defer t
+  :mode ("\\.[ds]?va?h?\\'" . verilog-mode)
+  :config
+  (setq verilog-indent-level             3
+        verilog-indent-level-module      3
+        verilog-indent-level-declaration 3
+        verilog-indent-level-behavioral  3
+        verilog-indent-level-directive   1
+        verilog-case-indent              2
+        verilog-auto-newline             t
+        verilog-auto-indent-on-newline   t
+        verilog-tab-always-indent        t
+        verilog-auto-endcomments         t
+        verilog-minimum-comment-distance 40
+        verilog-indent-begin-after-if    t
+        verilog-auto-lineup              'declarations
+        verilog-linter                   "my_lint_shell_command"
+        ))
+
+(provide 'prog-verilog)
+;;; prog-verilog.el ends here