Last active
December 26, 2022 05:01
-
-
Save phanviet/8efed5463a2d511d580f772f3a265292 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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