Giter VIP home page Giter VIP logo

dotemacs's Introduction

 (require 'package)
 (setq package-enable-at-startup nil)

 (defun @-setup-package-repos ()
   (progn
     (defun @-set-repo-when-missing (name repo)
	(unless (assoc-default name package-archives)
	  (add-to-list 'package-archives (cons name repo))))

     (let ((repos
	     '(("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")
	       ("org" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/org/")
	       ("marmalade" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/marmalade/")
	       ("gnu" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")))
	    _)
	(dolist (pair repos _)
	  (progn
	    (@-set-repo-when-missing (car pair) (cdr pair))
	    )))

     (package-initialize)
     ))

 (defun @-setup-package-installer ()
   (progn
     (unless (package-installed-p 'use-package)
	(package-refresh-contents)
	(package-install 'use-package))

     (eval-when-compile
	(require 'use-package))

     (setq use-package-verbose t
	    use-package-always-ensure t
	    warning-minimum-level :emergency)
     ))

 (defun @-setup-macos-hack ()
   (cond ((string-equal system-type "darwin")
	   (progn
	     ;; batter copy and paste support for mac os x
	     (defun @-copy-from-osx ()
	       (shell-command-to-string "pbpaste"))

	     (defun @-paste-to-osx (text &optional push)
	       (let ((process-connection-type nil))
		 (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
		   (process-send-string proc text)
		   (process-send-eof proc))))

	     ;; modify option and command key
	     (setq mac-command-modifier 'control)
	     (setq mac-option-modifier 'meta)

	     (setq interprogram-cut-function '@-paste-to-osx)
	     (setq interprogram-paste-function '@-copy-from-osx)

	     (use-package exec-path-from-shell)
	     (when (memq window-system '(mac ns x))
	       (exec-path-from-shell-initialize))

	     (message "Wellcome To Mac OS X, Have A Nice Day!!!")))))

 (defun @-setup-global-mode ()
   (progn
     (display-time-mode 1)
     (column-number-mode 1)
     (show-paren-mode nil)
     (display-battery-mode 1)
     (tool-bar-mode -1)
     (menu-bar-mode -1)
     (global-auto-revert-mode t)
     (global-hl-line-mode nil)
     (fset 'yes-or-no-p 'y-or-n-p)
     (toggle-frame-fullscreen)

     (setq tab-width 4
	inhibit-splash-screen t
	initial-scratch-message nil
	sentence-end-double-space nil
	make-backup-files nil
	indent-tabs-mode nil
	make-backup-files nil
	auto-save-default nil
	create-lockfiles nil)    

     (savehist-mode 1)
     (setq savehist-file "~/.emacs.d/.savehist")
     (setq history-length t)
     (setq history-delete-duplicates t)
     (setq savehist-save-minibuffer-history 1)
     (setq savehist-additional-variables
	    '(kill-ring
	      search-ring
	      regexp-search-ring))
     ))

 (defun @-setup-vendor-package ()
   (progn
     (add-to-list 'load-path (expand-file-name "~/.emacs.d/vendor"))

     ;; gc magic hack
     (require 'gcmh)))

 (@-setup-vendor-package)
 (@-setup-package-repos)
 (@-setup-package-installer)
 (@-setup-macos-hack)
 (@-setup-global-mode)
 (defun @-setup-editor-theme ()
   (progn
     (setq custom-safe-themes t)
     (if (display-graphic-p)
	  (progn
	    (use-package doom-theme
	      :config
	      (setq doom-themes-enable-bold t
		    doom-themes-enable-italic t)
	      (doom-themes-visual-bell-config)
	      (doom-themes-visual-bell-config))	
	    (if (string-equal system-type "darwin")
		(load-theme 'doom-dracula)
	      (load-theme 'doom-nord)))
	(progn
	  (use-package darkokai-theme)
	 (load-theme 'darkokai))
	)
     ))

 (defun @-setup-editor-face ()
   (progn
     (let ((display-table (or standard-display-table (make-display-table))))
	(set-display-table-slot display-table 'vertical-border (make-glyph-code ?│)) ; or ┃ │
	(setq standard-display-table display-table))
     (set-face-background 'vertical-border (face-background 'default))
     (set-face-foreground 'vertical-border "color-237")
     ))

 (use-package rainbow-mode
   :init
   (defun @-enable-rainbow ()
     (rainbow-mode t))
   :hook ((prog-mode-hook . @-enable-reainbow))
   )

 (use-package rainbow-delimiters
   :init
   (defun @-enable-rainbow-delimiters ()
     (rainbow-delimiters-mode t))
   :hook ((prog-mode-hook . @-enable-rainbow-delimiters))
   )

 (use-package doom-modeline
   :ensure t
   :init
   (set-face-background 'mode-line nil)
   :hook (after-init . doom-modeline-mode))

 (@-setup-editor-theme)
 (@-setup-editor-face)
(use-package helm-swoop)
(use-package helm
  :ensure t
  :config
  (require 'helm-config)
  (helm-mode 1)
  :bind
  (("C-c s" . helm-swoop)
   ("C-x C-f" . helm-find-files)
   ("C-x b" . helm-buffers-list)
   ("M-y" . helm-show-kill-ring)
   ("M-x" . helm-M-x)))
(use-package ido-completing-read+)
(defun @-insert-src-block (src-code-type)
  "Insert a `SRC-CODE-TYPE' type source code block in org-mode."
  (interactive
   (let ((src-code-types
	    '("emacs-lisp" "python" "C" "sh" "java" "js" "clojure" "C++" "css"
	      "calc" "asymptote" "dot" "gnuplot" "ledger" "lilypond" "mscgen"
	      "octave" "oz" "plantuml" "R" "sass" "screen" "sql" "awk" "ditaa"
	      "haskell" "latex" "lisp" "matlab" "ocaml" "org" "perl" "ruby"
	      "scheme" "sqlite" "html" "go")))
     (list (ido-completing-read+ "Source code type: " src-code-types))))
  (progn
    (newline-and-indent)
    (insert (format "\n#+BEGIN_SRC %s\n" src-code-type))
    (newline-and-indent)
    (insert "#+END_SRC\n")
    (previous-line 2)
    (org-edit-src-code)))
(use-package undo-tree
  :ensure t
  :config
  (global-undo-tree-mode)
  (setq undo-tree-visualizer-timestamps t)
  (setq undo-tree-visualizer-diff t))

(use-package company
  :ensure t
  :config
  (global-company-mode))

(use-package which-key
  :ensure t
  :config
  (which-key-mode)
  (which-key-setup-side-window-bottom))

(use-package recentf
  :ensure t
  :config
  (setq recentf-max-saved-items 200
	  recentf-max-menu-items 15)
  :bind ("<f3>" . helm-recentf)
  :hook ((after-init-hook . recentf-mode)))

(use-package linum
  :ensure t
  :config
  (global-linum-mode t)
  (setq linum-format "%4d  ")
  (set-face-background 'linum nil))

(use-package autopair
  :ensure t
  :config
  (autopair-global-mode))

(use-package neotree
  :custom
  (neo-theme 'nerd2)
  :config
  (setq neo-smart-open t)
  (setq neo-theme (if (display-graphic-p) 'icons 'nerd))
  (setq neo-window-fixed-size nil)
  (setq-default neo-show-hidden-files nil)
  (global-set-key [f2] 'neotree-toggle)
  (global-set-key [f8] 'neotree-dir))

(use-package magit)
(use-package git-gutter+
  :config
  (global-git-gutter+-mode))

(use-package smart-tab
  :hook ((prog-mode-hook . smart-tab-mode)))

(use-package mwim
  :bind
  ("C-a" . mwim-beginning-of-code-or-line)
  ("C-e" . mwim-end-of-code-or-line))

(use-package guru-mode
  :config
  (guru-global-mode +1))

(use-package projectile)
(use-package helm-projectile)
 (use-package lsp-mode
   :commands lsp
   :ensure t
   :custom
   (lsp-enable-snippet t)
   (lsp-keep-workspace-alive t)
   (lsp-enable-xref t)
   (lsp-enable-imenu t)
   (lsp-enable-completion-at-point nil)
   (lsp-enable-file-watchers nil)
   (lsp-diagnostic-package :flymake)
   (lsp-prefer-capf t)
   (lsp-auto-guess-root t)
   (read-process-output-max (* 1024 1024))
   :config
   ;; setup prog mode hook
   (add-hook 'go-mode-hook #'lsp)
   (add-hook 'python-mode-hook #'lsp)
   (add-hook 'c++-mode-hook #'lsp)
   (add-hook 'c-mode-hook #'lsp)
   (add-hook 'rust-mode-hook #'lsp)
   (add-hook 'html-mode-hook #'lsp)
   (add-hook 'js-mode-hook #'lsp)
   (add-hook 'web-mode #'lsp)
   (add-hook 'typescript-mode-hook #'lsp)
   (add-hook 'json-mode-hook #'lsp)
   (add-hook 'yaml-mode-hook #'lsp)
   (add-hook 'dockerfile-mode-hook #'lsp)
   (add-hook 'shell-mode-hook #'lsp)
   (add-hook 'css-mode-hook #'lsp)

   (setq company-minimum-prefix-length 1
	  company-idle-delay 0.200)

   (require 'lsp-clients)
   (lsp-register-client
    (make-lsp-client :new-connection (lsp-stdio-connection "gopls")
		      :major-modes '(go-mode)
		      :server-id 'gopls))
   (lsp-define-stdio-client lsp-python "python"
			     #'projectile-project-root
			     '("pyls"))
   )

 ;; (use-package company-lsp
 ;;   :ensure t
 ;;   :config
 ;;   (push 'company-lsp company-backends))

 (use-package lsp-ui
   :hook (lsp-mode . lsp-ui-mode)
   :config
   (setq lsp-ui-doc-max-height 8
	  lsp-ui-doc-max-width 35
	  lsp-ui-sideline-ignore-duplicate t
	  ;; lsp-ui-doc is redundant with and more invasive than
	  ;; `+lookup/documentation'
	  lsp-ui-doc-enable nil
	  ;; Don't show symbol definitions in the sideline. They are pretty noisy,
	  ;; and there is a bug preventing Flycheck errors from being shown (the
	  ;; errors flash briefly and then disappear).
	  lsp-ui-sideline-show-hover nil)

   (set-lookup-handlers! 'lsp-ui-mode :async t
	:definition 'lsp-ui-peek-find-definitions
	:implementations 'lsp-ui-peek-find-implementation
	:references 'lsp-ui-peek-find-references))

 (use-package helm-lsp
   :commands helm-lsp-workspace-symbol helm-lsp-global-workspace-symbol)

 (use-package dap-mode
   :init
   (defun @-dap-hydra-hook ()
     (call-interactively #'dap-hydra))
   :config
   (dap-mode 1)
   (dap-ui-mode 1)
   (dap-tooltip-mode 1)
   (tooltip-mode 1)
   :hook ((dap-stopped-hook . @-dap-hydra-hook)))
(use-package go-mode
  :mode "\\.go\\'"
  :init
  (setq gofmt-command "goimports")
  (defun @-gofmat-when-save ()
    (if (equal major-mode 'go-mode)
	  (gofmt-before-save)))
  :config
  (when (memq window-system '(mac ns))
    (use-package exec-path-from-shell)
    (exec-path-from-shell-initialize)
    (exec-path-from-shell-copy-env "GOPATH"))
  (add-hook 'before-save-hook '@-gofmat-when-save)
  :hook ((go-mode . lsp)))

(use-package go-eldoc
  :hook ((gp-mode-hook . go-eldoc-setup)))

(use-package go-guru
  :hook (go-mode . go-guru-hl-identifier-mode))

(use-package go-dlv)
go get -u -v golang.org/x/tools/cmd/...
go get -u -v github.com/rogpeppe/godef
go get -u -v golang.org/x/tools/cmd/goimports
go get -u -v golang.org/x/tools/gopls
go get -u -v github.com/mdempsky/gocode
(use-package py-isort)
(use-package python
  :init
  (defun @-python-code-format()
    (if (equal major-mode 'python-mode)
	  (progn
	    (python-black-buffer)
	    (py-isort-buffer)
	    )))
  :mode ("\\.py" . python-mode)
  :hook ((python-mode . lsp)
	   (before-save-hook . @-pythoncode-format))
  :config
  (add-hook 'before-save-hook #'@-python-code-format)
  :ensure t)

;; (use-package jedi
  ;; :config
  ;; (add-hook 'python-mode-hook 'jedi:setup))

;; (use-package lsp-python-ms
;;   :ensure t
;;   :hook (python-mode . (lambda ()
;; 			 (require 'lsp-python-ms)
;; 			 (lsp)))
;;   :init
;;   (setq lsp-python-ms-executable (concat EMACS_ROOT "lsp/python-language-server/output/bin/Release/osx-x64/publish/Microsoft.Python.LanguageServer")))

(use-package pyvenv)

(use-package python-black
  :demand t
  :after python
  :config
  (python-black-on-save-mode))

(use-package pyenv-mode
  :init
  (add-to-list 'exec-path "~/.pyenv/shims")
  (setenv "WORKON_HOME" "~/.pyenv/versions/")
  :config
  (pyenv-mode))
(use-package ccls
  :ensure t
  :config
  (setq ccls-executable "ccls"))
(use-package emmet-mode)
(use-package web-beautify)
;; typescirpt tide
(use-package typescript-mode)
(use-package web-mode)

(use-package js2-mode
  :ensure t
  :mode (("\\.js\\'" . js2-mode)
	   ("\\.json\\'" . javascript-mode))
  :init
  (setq-default js2-basic-offset 2)
  (setq-default js2-global-externs '("module" "require" "assert" "setInterval" "console" "__dirname__") )
  )

(defun @-setup-tide-mode ()
  (interactive)
  (tide-setup)
  (flycheck-mode +1)
  (setq flycheck-check-syntax-automatically '(save mode-enabled))
  (eldoc-mode +1)
  (tide-hl-identifier-mode +1)
  ;; company is an optional dependency. You have to
  ;; install it separately via package-install
  ;; `M-x package-install [ret] company`
  (company-mode +1))

;; aligns annotation to the right hand side
(setq company-tooltip-align-annotations t)
;; formats the buffer before saving
(add-hook 'before-save-hook 'tide-format-before-save)
(add-hook 'typescript-mode-hook #'@-setup-tide-mode)
(add-hook 'js2-mode-hook #'setup-tide-mode)

(add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode))
(add-hook 'web-mode-hook
	    (lambda ()
	      (when (string-equal "tsx" (file-name-extension buffer-file-name))
		(@-setup-tide-mode))))

(use-package tide
  :ensure t
  :after (typescript-mode company flycheck)
  :hook ((typescript-mode . tide-setup)
	   (typescript-mode . tide-hl-identifier-mode)
	   (before-save . tide-format-before-save)))

(use-package prettier-js
  :ensure t
  :hook ((js2-mode . prettier-js-mode))
  :config
  (setq prettier-js-args '(
			     "--trailing-comma" "all"
			     "--bracket-spacing" "false"
			     ))
  )
(use-package plantuml-mode
  :custom
  (plantuml-jar-path (concat EMACS_ROOT "plantuml.jar"))
  :mode "\\.uml\\'")

(use-package json-mode
  :hook ((json-mode . lsp)))

(use-package yaml-mode

  :hook ((yaml-mode . lsp)))
(use-package dockerfile-mode
  :hook ((dockerfile-mode . lsp)))

(use-package protobuf-mode
  :hook ((protobuf-mode . lsp)))

(use-package flyspell
  :config
  (flyspell-mode +1))
;; (add-hook 'before-save-hook (lambda () (flyspell-buffer)))
(add-hook 'text-mode-hook 'flyspell-mode)
(add-hook 'prog-mode-hook 'flyspell-prog-mode)
 (defun @-close-all-buffers ()
   (interactive)
   (mapc 'kill-buffer (buffer-list)))

 (defun @-minify-buffer-contents()
   (interactive)
   (mark-whole-buffer)
   (goto-char (point-min))
   (while (search-forward-regexp "[\s\n]*" nil t) (replace-match "" nil t)))

 (defun @-copy-file-name-to-clipboard ()
   "Copy the current buffer file name to the clipboard."
   (interactive)
   (let ((filename (if (equal major-mode 'dired-mode)
			default-directory
		      (buffer-file-name))))
     (when filename
	(kill-new filename)
	(message "Copied buffer file name '%s' to the clipboard." filename))))
(global-set-key (kbd "C-\\") 'comment-line)
;; F1 for tmux
;; F2 neotree toggle
(global-set-key (kbd "<f3>") 'helm-recentf)
(global-set-key (kbd "<f4>") 'fiplr-find-file)
(global-set-key (kbd "<f5>") 'grep-find)
(global-set-key (kbd "<f6>") 'goto-line)

;; F8 neotree-dir
(global-set-key (kbd "<f9>") 'bookmark-jump)
(global-set-key (kbd "<f10>") 'helm-M-x)
(global-set-key (kbd "<f12>") 'helm-projectile-find-file)

(global-set-key (kbd "M-0") 'next-multiframe-window)
(global-set-key (kbd "M-9") 'previous-multiframe-window)

dotemacs's People

Contributors

deyuhua avatar

Watchers

 avatar  avatar  avatar

Forkers

superfpga

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.