Skip to content

Instantly share code, notes, and snippets.

@phanviet
Last active December 26, 2022 05:01
Show Gist options
  • Save phanviet/8efed5463a2d511d580f772f3a265292 to your computer and use it in GitHub Desktop.
Save phanviet/8efed5463a2d511d580f772f3a265292 to your computer and use it in GitHub Desktop.
(tool-bar-mode -1)
(show-paren-mode 1)
(setq auto-save-default nil)
(setq make-backup-files nil)
(setq ring-bell-function 'ignore)
(setq-default indent-tabs-mode nil)
(setq tab-width 2)
(add-hook 'before-save-hook 'delete-trailing-whitespace)
(setq require-final-newline t)
(set-frame-font "Anonymous Pro 16" nil t)
(setq-default line-spacing 4)
(global-display-line-numbers-mode)
(setq display-line-numbers-type 'relative)
(setq package-enable-at-startup nil)
(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(bootstrap-version 6))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
(straight-use-package 'use-package)
(use-package straight
:custom
(straight-use-package-by-default t))
;;; BASE
(use-package diminish)
(use-package delight)
(when (memq window-system '(mac ns x))
(use-package exec-path-from-shell
:config
(exec-path-from-shell-initialize)))
(defun move-to-tab-1 ()
(interactive)
(tab-bar-select-tab 1))
(defun move-to-tab-2 ()
(interactive)
(tab-bar-select-tab 2))
(defun move-to-tab-3 ()
(interactive)
(tab-bar-select-tab 3))
(defun move-to-tab-4 ()
(interactive)
(tab-bar-select-tab 4))
(defun move-to-tab-5 ()
(interactive)
(tab-bar-select-tab 5))
(use-package tab-bar
:init
(setq tab-bar-show 1)
(setq tab-bar-new-tab-choice "*Untitled*")
(setq tab-bar-tab-hints t)
(setq tab-bar-format '(tab-bar-format-tabs tab-bar-separator))
(global-set-key (kbd "s-{") 'tab-bar-switch-to-prev-tab)
(global-set-key (kbd "s-}") 'tab-bar-switch-to-next-tab)
(global-set-key (kbd "s-t") 'tab-bar-new-tab)
(global-set-key (kbd "s-w") 'tab-bar-close-tab)
(global-set-key (kbd "s-1") 'move-to-tab-1)
(global-set-key (kbd "s-2") 'move-to-tab-2)
(global-set-key (kbd "s-3") 'move-to-tab-3)
(global-set-key (kbd "s-4") 'move-to-tab-4)
(global-set-key (kbd "s-5") 'move-to-tab-5)
:config
(tab-bar-mode 1))
(unless (display-graphic-p)
(xterm-mouse-mode 1)
(global-set-key (kbd "<mouse-4>") 'scroll-down-line)
(global-set-key (kbd "<mouse-5>") 'scroll-up-line))
(use-package autorevert
:delight auto-revert-mode)
(use-package editorconfig
:diminish
:config
(editorconfig-mode 1))
(use-package tree-sitter
:diminish
:config
(global-tree-sitter-mode))
(use-package tree-sitter-langs)
(use-package which-key
:config
(which-key-mode))
(use-package smartparens
:init
(require 'smartparens-config)
:config
(smartparens-global-mode))
(use-package key-chord
:config
(key-chord-mode 1))
(use-package magit)
(use-package origami
:config
(global-origami-mode))
;;; THEME
(load-theme 'leuven t)
;; (use-package intellij-theme
;; :config
;; (load-theme 'intellij t))
;; EVIL MODE
(use-package evil
:after (key-chord)
:init
(setq evil-want-keybinding nil)
(setq evil-want-C-u-scroll t)
(setq evil-undo-system 'undo-redo)
(setq key-chord-two-keys-delay 0.5)
:config
(key-chord-define evil-insert-state-map "jj" 'evil-normal-state)
(evil-mode))
(unless (display-graphic-p)
(use-package evil-terminal-cursor-changer
:after evil
:config
(evil-terminal-cursor-changer-activate)))
(use-package evil-commentary
:after evil
:config
(evil-commentary-mode))
(use-package evil-collection
:after evil
:config
(evil-collection-init))
(use-package evil-easymotion
:init
(evilem-default-keybindings "SPC")
(evilem-define (kbd "SPC w") 'evil-forward-word-begin))
;;; LINTING
(use-package flycheck
:config
(global-flycheck-mode))
;;; AUTOCOMPLETE
(use-package company
:diminish
:init
(add-hook 'after-init-hook 'global-company-mode)
(setq company-dabbrev-downcase nil)
(setq company-idle-delay 0))
;;; FORMAT
(use-package format-all)
;;; IVY
(use-package ivy
:diminish
:init
(setq ivy-use-virtual-buffers t)
(setq ivy-height 20)
(setq ivy-count-format "%d/%d ")
:config
(ivy-mode))
(use-package counsel
:bind*
(("M-x" . counsel-M-x)
("C-s" . swiper)
("C-x C-f" . counsel-find-file)
("C-x C-r" . counsel-recentf) ; search for recently edited
("C-c g" . counsel-git) ; search for files in git repo
("C-c j" . counsel-git-grep) ; search for regexp in git repo
("C-c /" . counsel-ag) ; Use ag for regexp
("C-x l" . counsel-locate)
("C-x C-f" . counsel-find-file)
("<f1> f" . counsel-describe-function)
("<f1> v" . counsel-describe-variable)
("<f1> l" . counsel-find-library)
("<f2> i" . counsel-info-lookup-symbol)
("<f2> u" . counsel-unicode-char)
("C-c C-r" . ivy-resume)))
;;; PROJECT
(use-package projectile
:delight '(:eval (concat " " (projectile-project-name)))
:bind-keymap
("C-c p" . projectile-command-map)
:config
(projectile-register-project-type 'npm '("package.json")
:project-file "package.json"
:compile "npm install"
:test "npm test"
:test-suffix ".spec")
:config
(projectile-global-mode))
(use-package projectile-ripgrep
:after (projectile))
(use-package counsel-projectile
:after (projectile counsel))
;;; SIDEBAR
(use-package treemacs
:ensure t
:defer t
:init
(with-eval-after-load 'winum
(define-key winum-keymap (kbd "M-0") #'treemacs-select-window))
:config
(progn
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
treemacs-deferred-git-apply-delay 0.5
treemacs-directory-name-transformer #'identity
treemacs-display-in-side-window t
treemacs-eldoc-display 'simple
treemacs-file-event-delay 2000
treemacs-file-extension-regex treemacs-last-period-regex-value
treemacs-file-follow-delay 0.2
treemacs-file-name-transformer #'identity
treemacs-follow-after-init t
treemacs-expand-after-init t
treemacs-find-workspace-method 'find-for-file-or-pick-first
treemacs-git-command-pipe ""
treemacs-goto-tag-strategy 'refetch-index
treemacs-header-scroll-indicators '(nil . "^^^^^^")
treemacs-hide-dot-git-directory t
treemacs-indentation 2
treemacs-indentation-string " "
treemacs-is-never-other-window nil
treemacs-max-git-entries 5000
treemacs-missing-project-action 'ask
treemacs-move-forward-on-expand nil
treemacs-no-png-images nil
treemacs-no-delete-other-windows t
treemacs-project-follow-cleanup nil
treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory)
treemacs-position 'left
treemacs-read-string-input 'from-child-frame
treemacs-recenter-distance 0.1
treemacs-recenter-after-file-follow nil
treemacs-recenter-after-tag-follow nil
treemacs-recenter-after-project-jump 'always
treemacs-recenter-after-project-expand 'on-distance
treemacs-litter-directories '("/node_modules" "/.venv" "/.cask")
treemacs-show-cursor nil
treemacs-show-hidden-files t
treemacs-silent-filewatch nil
treemacs-silent-refresh nil
treemacs-sorting 'alphabetic-asc
treemacs-select-when-already-in-treemacs 'move-back
treemacs-space-between-root-nodes t
treemacs-tag-follow-cleanup t
treemacs-tag-follow-delay 1.5
treemacs-text-scale nil
treemacs-user-mode-line-format nil
treemacs-user-header-line-format nil
treemacs-wide-toggle-width 70
treemacs-width 35
treemacs-width-increment 1
treemacs-width-is-initially-locked t
treemacs-workspace-switch-cleanup nil)
;; The default width and height of the icons is 22 pixels. If you are
;; using a Hi-DPI display, uncomment this to double the icon size.
;;(treemacs-resize-icons 44)
(treemacs-follow-mode t)
(treemacs-filewatch-mode t)
(treemacs-fringe-indicator-mode 'always)
(when treemacs-python-executable
(treemacs-git-commit-diff-mode t))
(pcase (cons (not (null (executable-find "git")))
(not (null treemacs-python-executable)))
(`(t . t)
(treemacs-git-mode 'deferred))
(`(t . _)
(treemacs-git-mode 'simple)))
(treemacs-hide-gitignored-files-mode nil))
:bind
(:map global-map
("M-0" . treemacs-select-window)
("C-x t 1" . treemacs-delete-other-windows)
("C-x t t" . treemacs)
("C-x t d" . treemacs-select-directory)
("C-x t B" . treemacs-bookmark)
("C-x t C-t" . treemacs-find-file)
("C-x t M-t" . treemacs-find-tag)))
(use-package treemacs-evil
:after (treemacs evil)
:ensure t)
(use-package treemacs-projectile
:after (treemacs projectile)
:ensure t)
(use-package treemacs-icons-dired
:hook (dired-mode . treemacs-icons-dired-enable-once)
:ensure t)
(use-package treemacs-magit
:after (treemacs magit)
:ensure t)
(use-package treemacs-persp ;;treemacs-perspective if you use perspective.el vs. persp-mode
:after (treemacs persp-mode) ;;or perspective vs. persp-mode
:ensure t
:config (treemacs-set-scope-type 'Perspectives))
(use-package treemacs-tab-bar ;;treemacs-tab-bar if you use tab-bar-mode
:after (treemacs)
:ensure t
:config (treemacs-set-scope-type 'Tabs))
;;; IDE
(use-package lsp-mode
:hook
((lsp-mode . lsp-enable-which-key-integration)
(typescript-mode . lsp-deferred)
(js2-mode . lsp-deferred)
(ruby-mode . lsp-deferred)
(lua-mode . lsp-deferred))
:init
(setq lsp-keymap-prefix "C-c l")
(setq gc-cons-threshold 100000000) ;; 100mb
(setq read-process-output-max (* 1024 1024)) ;; 1mb
(setq lsp-headerline-breadcrumb-enable nil)
:commands (lsp lsp-deferred))
(use-package lsp-ui
:after lsp-mode
:init
(setq lsp-idle-delay 0.500)
:commands lsp-ui-mode)
(use-package lsp-ivy
:after lsp-mode
:commands lsp-ivy-workspace-symbol)
(use-package yasnippet
:config
(yas-global-mode 1))
;;; DOCKER
(use-package docker
:bind ("C-c d" . docker))
;;; LANGS
(use-package json-mode
:init
(add-hook 'json-mode-hook
(lambda ()
(make-local-variable 'js-indent-level)
(setq js-indent-level 2))))
;; JS
(use-package js2-mode)
(use-package typescript-mode)
(use-package jest-test-mode
:commands jest-test-mode
:init
(setq jest-test-command-string "TZ=UTC NODE_ENV=test npx %s jest %s %s")
(setq jest-test-options '("--color" "--passWithNoTests" "--detectOpenHandles" "--silent" "--maxWorkers=50%"))
(setq jest-test-npx-options '())
:hook (typescript-mode js-mode typescript-tsx-mode))
;; LUA
(use-package lua-mode
:after (format-all)
:init
(setq lua-indent-level 2)
(add-hook 'lua-mode-hook 'format-all-mode))
;;; GLOBAL KEY BINDINGS
(global-set-key (kbd "C-c s") 'evil-avy-goto-char)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment