(require 'package) (setq package-enable-at-startup nil) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) ;;(add-to-list 'package-archives '("marmalade" . "https://marmalade-repo.org/packages/")) (add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/")) (package-initialize) (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) (eval-when-compile (require 'use-package)) (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(ansi-color-faces-vector [default default default italic underline success warning error]) '(company-idle-delay 0.1) '(company-show-numbers ''t) '(custom-enabled-themes '(wombat)) '(inhibit-startup-screen t) '(package-selected-packages '(company-box company-capf company-tern lsp-ui company add-node-modules-path which-key yasnippet flycheck web-mode dumb-jump lsp-javascript company-mode lsp-mode prettier-js prettier-js-mode neotree rjsx-mode powerline evil evil-mode use-package))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) ;; Line numbers in modern emacs (when (version<= "26.0.50" emacs-version ) (global-display-line-numbers-mode)) ;; dumb-jump for "go to definition" (use-package dumb-jump :ensure t :config (dumb-jump-mode)) ;; neotree for project navigation (use-package neotree :ensure t :bind (([f8] . neotree-toggle))) ;; powerline status bar (use-package powerline :ensure t :config (powerline-default-theme)) (use-package web-mode :ensure t :config (add-to-list 'auto-mode-alist '("\\.jsx?$" . web-mode))) ;; auto-enable for js/jsx files (use-package flycheck :ensure t :config (flycheck-add-mode 'javascript-eslint 'web-mode) ;; use eslint for jsx files (add-hook 'after-init-hook #'global-flycheck-mode) ;; enable in all buffers (setq-default flycheck-disabled-checkers (append flycheck-disabled-checkers '(javascript-jshint json-jsonlist)))) ;; prefer eslint (use-package prettier-js :ensure t :config (add-hook 'web-mode-hook 'prettier-js-mode)) (use-package lsp-mode :ensure t :config (add-hook 'web-mode-hook #'lsp)) (use-package yasnippet :ensure t) (use-package which-key :ensure t :config (which-key-mode)) (use-package add-node-modules-path :ensure t :config (add-hook 'flycheck-mode-hook 'add-node-modules-path)) ;; use eslint from node_modules ;; evil mode for vim emulation (use-package evil :ensure t :init (setq evil-want-integration nil) ;; required by evil-collection (setq evil-search-module 'evil-search) (setq evil-ex-complete-emacs-commands nil) (setq evil-vsplit-window-right t) ;; like vim's 'splitright' (setq evil-split-window-below t) ;; like vim's 'splitbelow' (setq evil-shift-round nil) (setq evil-want-C-u-scroll t) :config (evil-mode)) (use-package company :ensure t :config ;;(push 'company-capf company-backends) (add-hook 'after-init-hook 'global-company-mode)) ;;(use-package company-box ; :ensure t ;; :hook (company-mode . company-box-mode)) ;; Sane Defaults (setq delete-old-versions -1 ) ; delete excess backup versions silently (setq version-control t ) ; use version control (setq vc-make-backup-files t ) ; make backups file even when in version controlled dir (setq backup-directory-alist `(("." . "~/.emacs.d/backups")) ) ; which directory to put backups file (setq vc-follow-symlinks t ) ; don't ask for confirmation when opening symlinked file (setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save-list/" )) ) ;transform backups file name (setq inhibit-startup-screen t ) ; inhibit useless and old-school startup screen (setq ring-bell-function 'ignore ) ; silent bell when you make a mistake (setq coding-system-for-read 'utf-8 ) ; use utf-8 by default (setq coding-system-for-write 'utf-8 ) (setq sentence-end-double-space nil) ; sentence SHOULD end with only a point. (setq default-fill-column 100) ; toggle wrapping text at the 80th character (defun web-mode-init-hook () "Hooks for Web mode. Adjust indent." (setq web-mode-markup-indent-offset 2)) (add-hook 'web-mode-hook 'web-mode-init-hook) ;; JSX syntax highlighting (setq web-mode-content-types-alist '(("jsx" . "\\.js[x]?\\'")))