  '(flycheck-flake8rc ".flake8")
  '(js-indent-level 2)
  '(package-selected-packages
-   (quote
-    (flycheck-rust cargo rust-mode arduino-mode dash terraform-mode flymd protobuf-mode flycheck go-eldoc auto-complete-config go-autocomplete auto-complete go-mode groovy-emacs-mode groovy-mode multi-term magithub magit yaml-mode web-mode use-package rjsx-mode rainbow-mode py-isort markdown-mode json-mode exec-path-from-shell ess ensime elpy dockerfile-mode counsel-projectile ace-window)))
+   '(typescript javascript-mode js-mode flycheck-rust cargo rust-mode arduino-mode dash terraform-mode flymd protobuf-mode flycheck go-eldoc auto-complete-config go-autocomplete auto-complete go-mode groovy-emacs-mode groovy-mode multi-term magithub magit yaml-mode web-mode use-package rjsx-mode rainbow-mode py-isort markdown-mode json-mode exec-path-from-shell ess ensime elpy dockerfile-mode counsel-projectile ace-window))
  '(safe-local-variable-values
-   (quote
-    ((eval remove-hook
-           (quote before-save-hook)
-           (quote py-isort-before-save)
-           t)))))
+   '((eval remove-hook 'before-save-hook 'py-isort-before-save t))))
 (custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.

  :ensure t
  :commands yas-minor-mode
  :hook (go-mode . yas-minor-mode))

;;----------;;
;; Flycheck ;;
;;----------;;
(defun my/use-eslint-from-node-modules ()
  (let* ((root (locate-dominating-file
                (or (buffer-file-name) default-directory)
                "node_modules"))
         (eslint (and root
                      (expand-file-name "node_modules/eslint/bin/eslint.js"
                                        root))))
    (when (and eslint (file-executable-p eslint))
      (setq-local flycheck-javascript-eslint-executable eslint))))

(defun eslint-fix-file ()
  (interactive)
  (message "eslint --fixing the file" (buffer-file-name))
  (shell-command (concat "eslint --fix " (buffer-file-name))))

(defun eslint-fix-file-and-revert ()
  (interactive)
  (eslint-fix-file)
  (revert-buffer t t))


(use-package flycheck
  :ensure t
  :init
  (global-flycheck-mode)
  (setq-default flycheck-disabled-checkers
                (append flycheck-disabled-checkers
                        '(javascript-jshint)))
  (flycheck-add-mode 'javascript-eslint 'rjsx-mode)
  (flycheck-add-mode 'javascript-eslint 'js2-mode)
  (setq flycheck-checkers '(javascript-eslint))
  (setq-default flycheck-temp-prefix ".flycheck")
  (add-hook 'flycheck-mode-hook #'my/use-eslint-from-node-modules)
  (add-hook 'js2-mode-hook
            (lambda ()
              (add-hook 'after-save-hook #'eslint-fix-file-and-revert)))
  (add-hook 'rjsx-mode-hook
            (lambda ()
              (add-hook 'after-save-hook #'eslint-fix-file-and-revert)))
  )


;;----------;;
;; Protobuf ;;

(use-package terraform-mode)


;;----------;;
;; Web mode ;;
;;----------;;
