Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ztlevi/doom-config

Blazing fast Doom Emacs private configuration
https://github.com/ztlevi/doom-config

Last synced: 3 months ago
JSON representation

Blazing fast Doom Emacs private configuration

Awesome Lists containing this project

README

        

#+TITLE: My private doom emacs config

This is my private doom emacs configuration. Specifically configured for
Javascript, Python, C++, Rust, and Go.

* Table of Contents :TOC:
- [[#screenshot][Screenshot]]
- [[#installation][Installation]]
- [[#step1-install-emacs][Step1: Install Emacs]]
- [[#step2-install-doom-emacs][Step2: Install Doom Emacs]]
- [[#step3-dependencies-and-configuration][Step3: Dependencies and Configuration]]
- [[#features][Features]]
- [[#configuration][Configuration]]
- [[#appendix][Appendix]]
- [[#ctags-reference][Ctags reference]]
- [[#use-meta-key-in-terminal][Use Meta key in terminal]]
- [[#hacks][Hacks]]
- [[#faq][FAQ]]
- [[#how-to-manage-tab-width-or-indent][How to manage tab-width or indent?]]
- [[#how-to-use-magit-forge][How to use Magit Forge?]]
- [[#why-my-jdtls-java-fails-at-booting][Why my jdtls java fails at booting?]]
- [[#why-sometimes-the-floating-error-boxes-flycheck-posframe-do-not-disappear][Why sometimes the floating error boxes (flycheck posframe) do not disappear?]]
- [[#how-to-use-forge][How to use forge?]]
- [[#how-to-use-emacs-everywhere][How to use emacs-everywhere?]]
- [[#when-you-do-doom-upgrade-and-get-too-many-open-files-issue-on-macos][When you do `doom upgrade` and get too many open files issue on MacOS.]]
- [[#when-open-in-ssh-tty-clipetty-emit-opening-output-file-permission-denied-devpts3][When open in ssh tty, clipetty emit: `Opening output file: Permission denied, /dev/pts/3`.]]

* Screenshot
#+HTML:

* Installation
** Step1: Install Emacs
*** MacOS
- *Method 1*: Use brew cask(Recommended). Pick emacs-mac or emacs-plus.
#+BEGIN_SRC shell
brew tap railwaycat/emacsmacport
brew install --cask emacs-mac

brew tap d12frosted/emacs-plus
brew install emacs-plus@29 --with-native-comp

# create alias in /Applications if needed
ln -Fs `sudo find /usr/local/Cellar/emacs-* -name "Emacs.app"` /Applications/Emacs.app
#+END_SRC

*** Linux
#+BEGIN_SRC shell
# Ubuntu emacs
sudo add-apt-repository ppa:kelleyk/emacs
sudo apt-get update
sudo apt install emacs29
# Arch
sudo pacman -S emacs
#+END_SRC

** Step2: Install Doom Emacs
#+BEGIN_SRC shell
# Clone Doom Emacs
rm -r ~/.emacs.d
git clone --depth 1 https://github.com/hlissner/doom-emacs ~/.config/emacs

# Clone my config
git clone https://github.com/ztlevi/doom-config ~/.config/doom

~/.config/emacs/bin/doom install
#+END_SRC
** Step3: Dependencies and Configuration
This Emacs configuration is written for Emacs 25.1+ on Mac OS X 10.11+ and Linux Arch. Windows users may need to tweak the config for themselves.

*** Dependencies needed
Install dependencies including search tools, utils, and linters.

**** OS
***** MacOS
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
# search tool
brew install ripgrep grep exa zstd fd
brew install --HEAD universal-ctags/universal-ctags/universal-ctags
# utils
brew install sqlite hub gpg2 coreutils gnu-tar mplayer direnv libtool git-delta
# language
brew install shellcheck aspell languagetool clang-format google-java-format
#+END_SRC

***** Arch Linux
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
sudo pacman --needed --noconfirm -S sqlite ripgrep fd wmctrl exa languagetool zstd ctags git-delta
#+END_SRC

Note: for windows users, [[http://aspell.net/win32/][aspell]] is used instead. ripgrep can be installed via [[https://chocolatey.org/][choco]]

***** Ubuntu
#+BEGIN_SRC shell
# Install linuxbrew
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
# Then follow the macos installaion guide except the Cask part
#+END_SRC

- For vterm
#+BEGIN_SRC shell
brew install cmake
sudo apt install libvterm-dev libtool-bin
#+END_SRC
***** Install CJK fonts for your linux machines if you use them. https://github.com/googlefonts/noto-cjk

**** npm
#+BEGIN_SRC shell
npm install -g cspell prettier
#+END_SRC

**** pip
#+BEGIN_SRC shell
pip3 install --upgrade pylint gnureadline black cpplint
#+END_SRC

**** go: This module requires a valid ~GOPATH~, and the following Go packages:
#+BEGIN_SRC shell
# macos
brew install go

# arch
sudo pacman --needed --noconfirm -S go
#+END_SRC

*** Language Server Protocol: Install the [[https://langserver.org/][lsp]] for your languages. A few examples are listed below.
You can always do ~M-x lsp-install-server~ to install the specific language server. But I prefer to script them and install them at once.
#+BEGIN_SRC shell
# python
npm i -g pyright
pip3 install --user debugpy

# Java
# Java 11 is needed for latest eclipse.jdt.ls to function
# M-x lsp-install-server -> jdtls

# Bash
npm i -g bash-language-server

# C++ use clangd
brew install llvm
# Run ~M-x dap-codelldb-setup~ to download the ~codelldb~ vscode extension.
# You can refer the debug template here https://github.com/ztlevi/gtest-cpp-demo/blob/main/.vscode/launch.json

# Rust
rustup update
rustup component add rls rust-analysis rust-src

# Javascript
npm i -g typescript typescript-language-server

# Vue
npm install vue-language-server -g

# gopls
go install golang.org/x/tools/gopls@latest
# Run ~M-x dap-go-setup~ to download the vscode debug extension.
#+END_SRC

*** For MacOS, according to the discussion [[https://emacs-china.org/t/topic/6453/6][here]], the following codes will speed up Emacs GUI startup time.
#+BEGIN_SRC bash
defaults write org.gnu.Emacs Emacs.ToolBar -string no
defaults write org.gnu.Emacs Emacs.ScrollBar -string no
defaults write org.gnu.Emacs Emacs.MenuBar -string no
#+END_SRC

* Features
An in-depth list of features, how to use them, and their dependencies.

* Configuration
How to configure this module, including common problems and how to address them.

* Appendix
** [[https://github.com/ztlevi/dotty-config/blob/main/editor/emacs/.ctags.d/][Ctags reference]]
** Use Meta key in terminal
I have to use ssh with tmux on server. And terminal emacs becomes my daily driver. Checkout
[[https://github.com/ztlevi/dotty/blob/master/shell/alacritty/config/alacritty/keybinding.yml][Alacritty keybinding config]] to make you terminal compatible with Meta keys.
** Hacks
+ Include a list of ways this module changes default behavior

* FAQ
** How to manage tab-width or indent?
You can use `setq-hook!` to set the tab-width explicitly.
#+begin_src emacs-lisp
(after! cc-mode
(setq-hook! 'cc-mode-hook tab-width 2 c-basic-offset 2))
#+end_src
I prefer to use a global `~/.editorconfig`, it can be override by a project local `.editorconfig`. Checkout [[https://github.com/ztlevi/dotty-config/blob/main/editor/editorconfig/.editorconfig][mine]].
`setq-hook!` wii be overrided by editorconfig since editorconfig gains the highest priority.
** How to use Magit Forge?
- Create a token on Github https://github.com/settings/tokens with repo, user and admin:org permissions.
If using GitHub enterprise / for business you also need the ~write:discussion~, ~read:discussion~ scope.
- Put the following credential in ~/.authinfo.gpg~ (This location is configured by ~auth-sources~).
#+begin_src
machine api.github.com login yourlogin^forge password MYTOKENGOESHERE
machine api.github.com login yourlogin^code-review password MYTOKENGOESHERE
#+end_src
See https://magit.vc/manual/ghub/Creating-a-Token.html#Creating-a-Token and
https://magit.vc/manual/forge/Token-Creation.html#Token-Creation
** Why my jdtls java fails at booting?
Sometimes it caused by legacy cache under ~lsp-java-workspace-dir~. Delete that folder and restart lsp.
** Why sometimes the floating error boxes (flycheck posframe) do not disappear?
Call ~posframe-delete-all~ to get rid of it.
** How to use forge?
[[https://magit.vc/manual/ghub/Creating-and-Storing-a-Token.html#Creating-and-Storing-a-Token][Take a look at this manual]]. See how to create token for forge. Create the token with the full repo access.
Then in the magit status buffer, use ~@~ to dispatch the forge menu.
** How to use emacs-everywhere?
Create a Automator workflow like this https://imgur.com/Xq4xe82. And bind it to some key in Settings->Keyboard->Shortcuts->Services. You need to add Emacs to the Settings->Security&Privacy->Accessibility. Then select some text and press the key. Unfortunately, I didn't find a way to automate pasting. You'll need to press the key Cmd-v to paste it after editing.
** When you do `doom upgrade` and get too many open files issue on MacOS.
Use ~ulimit -n 10240~ to increase the limit. See post here https://discussions.apple.com/thread/251000125.
** When open in ssh tty, clipetty emit: `Opening output file: Permission denied, /dev/pts/3`.
See discussion here https://github.com/spudlyo/clipetty/issues/20. Try `unset SSH_TTY` and then restart your emacs.