This is my private doom emacs configuration. Specifically configured for Javascript, Python, C++, Rust, and Go.
Table of Contents :TOC:
[[#screenshot][Screenshot]]
[[#installation][Installation]]
[[#features][Features]]
[[#configuration][Configuration]]
[[#appendix][Appendix]]
[[#faq][FAQ]]
doom upgrade
and get too many open files issue on MacOS.]]Opening output file: Permission denied, /dev/pts/3
.]]Screenshot
Installation ** Step1: Install Emacs *** MacOS
Method 1: Use brew cask(Recommended). Pick emacs-mac or emacs-plus.
brew tap railwaycat/emacsmacport brew install --cask emacs-mac
brew tap d12frosted/emacs-plus brew install emacs-plus@29 --with-native-comp
ln -Fs sudo find /usr/local/Cellar/emacs-* -name "Emacs.app"
/Applications/Emacs.app
*** Linux
sudo add-apt-repository ppa:kelleyk/emacs sudo apt-get update sudo apt install emacs29
sudo pacman -S emacs
** Step2: Install Doom Emacs
rm -r ~/.emacs.d git clone --depth 1 https://github.com/hlissner/doom-emacs ~/.config/emacs
git clone https://github.com/ztlevi/doom-config ~/.config/doom
~/.config/emacs/bin/doom install
** 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
brew install ripgrep grep exa zstd fd brew install --HEAD universal-ctags/universal-ctags/universal-ctags
brew install sqlite hub gpg2 coreutils gnu-tar mplayer direnv libtool git-delta
brew install shellcheck aspell languagetool clang-format google-java-format
***** Arch Linux
sudo pacman --needed --noconfirm -S sqlite ripgrep fd wmctrl exa languagetool zstd ctags git-delta
Note: for windows users, [[http://aspell.net/win32/][aspell]] is used instead. ripgrep can be installed via [[https://chocolatey.org/][choco]]
***** Ubuntu
sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
brew install cmake sudo apt install libvterm-dev libtool-bin
***** Install CJK fonts for your linux machines if you use them. https://github.com/googlefonts/noto-cjk
**** npm
npm install -g cspell prettier
**** pip
pip3 install --upgrade pylint gnureadline black cpplint
**** go: This module requires a valid ~GOPATH~, and the following Go packages:
brew install go
sudo pacman --needed --noconfirm -S go
*** 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.
npm i -g pyright pip3 install --user debugpy
npm i -g bash-language-server
brew install llvm
rustup update rustup component add rls rust-analysis rust-src
npm i -g typescript typescript-language-server
npm install vue-language-server -g
go install golang.org/x/tools/gopls@latest
*** 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.
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
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.
(after! cc-mode (setq-hook! 'cc-mode-hook tab-width 2 c-basic-offset 2))
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~).
machine api.github.com login yourlogin^forge password MYTOKENGOESHERE machine api.github.com login yourlogin^code-review password MYTOKENGOESHERE
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.