chenyanming / spacemacs_module_for_doom

Aim to port spacemacs features (defaults keybinding, transient state, layers and more) to doom, and provides a spacemacs module for doom.
146 stars 15 forks source link
doom-emacs emacs spacemacs

+attr_org: :width 600px

[[file:img/home.png]]

Aim to port spacemacs features (keybindings, transient states, layers etc) to doom, and provides a spacemacs module for doom emacs.

** Performance I personally use it every day, and it works really great with doom.

*** Startup Time Estimate that it costs around 0.2 ~ 0.3 second.

** How to setup? There are two ways to setup this module, you can choose either one.

  1. Setup as Doom Private Module (new method, more "doom-way") If you find missing packages, welcome PR or request an Issue.
  2. Load this module directly (old method, you can clone and hack anything if you like)

** Setup as Doom Private Module This is the new method to enable as a private Doom module. It is the easiest way to setup.

  1. Clone

    +begin_src sh

    git clone git@github.com:chenyanming/spacemacs_module_for_doom.git ~/.doom.d/modules/private/spacemacs

    +end_src

    or

    +begin_src sh

    git clone git@github.com:chenyanming/spacemacs_module_for_doom.git ~/.emacs.d/modules/private/spacemacs

    +end_src

  2. Setup ~/.doom.d/init.el

    • Add ~:private spacemacs~ into ~init.el~ after ~:default~ group - the end of ~doom!~ section, so that all necessary modules are loaded before ~spacemacs~ module
    • In order to use the windows transient state properly (~SPC w w~ if windows numbers >=3), please add ~+numbers~ for ~windows-select~ module.

      +BEGIN_SRC emacs-lisp

      (window-select ; visually switch windows +numbers)

      +END_SRC

    • Important: Please enable =hydra= in ~init.el~

      +BEGIN_SRC emacs-lisp

      :ui hydra

      +END_SRC

    • To enable the spacemacs like dashboard, comment out ~doom-dashboard~.
    • To disable default doom keybindings, delete ~+bindings~, in ~:config default~ module.
  3. Setup ~/.doom.d/config.el

    • To enable the spacemacs like dashboard, add this:

      +begin_src emacs-lisp

      (add-hook 'doom-init-ui-hook #'spacemacs/home)

      +end_src

    • Spacemacs dashboard may consume 0.2 second to boot after testing.
    • Configure ~dotspacemacs-startup-banner~, ~dotspacemacs-startup-lists~ to control the dashboard details.
    • To disable doom org keybindings, add this:

      +begin_src elisp

      (remove-hook 'org-load-hook #'+org-init-keybinds-h)

      +end_src

  4. Quit Emacs and Run

    +begin_src sh

    ~./emacs.d/bin/doom sync

    +end_src

  5. Restart Emacs.

** Load this module directly This is the old method to enable as a Doom module, it is more complicated but more easy to hack. *** Clone the module

+begin_src sh

git clone git@github.com:chenyanming/spacemacs_module_for_doom.git ~/.doom.d/modules/spacemacs

+end_src

Then follow the following sections one by one, there are 5 steps:

  1. Setup ~init.el~
  2. Setup ~package.el~
  3. Adjust ~config.el~ (This module's ~config.el~)
  4. Setup ~config.el~
  5. Quit Emacs and Run ~./emacs.d/bin/doom sync~

*** Setup ~/.doom.d/init.el Enable necessary modules in ~init.el~. Make sure enable the necessary modules in ~init.el~.

At lease evil, org, gist, pdf, lookup, workspaces, eshell, and javascript etc.

In order to use the windows transient state properly, please add ~+numbers~ for ~windows-select~ module.

+BEGIN_SRC emacs-lisp

(window-select ; visually switch windows +numbers)

+END_SRC

To enable the spacemacs like dashboard, comment out ~doom-dashboard~.

To disable default doom keybindings, delete ~+bindings~, in ~:config default~ module.

*** Setup ~/.doom.d/packages.el And install the missing packages in ~packages.el~

+BEGIN_SRC emacs-lisp

(package! nov) ;; for epub layer (package! auto-highlight-symbol) ;; for spacemacs-navigation (package! eyebrowse) ;; for spacemacs-layouts (package! bm) ;; for bm layer (package! evil-iedit-state) ;; for spacemacs-navigation (package! bind-map) (package! symbol-overlay) (package! move-text) ;; for spacemacs-editing (package! string-inflection) ;; for spacemacs-editing (package! forge) ;; for github layer (package! evil-terminal-cursor-changer) ;; for spacemacs evil (package! eshell-prompt-extras) ;; for shell layer

+END_SRC

*** IMPORTANT: Adjust this module's ~config.el~ (~+spacemacs.el~ bofore) based on your need Since this package only simply load the necessary layer files and call their init functions, you can comment out them in this module's ~config.el~ if necessary.

*** Setup ~/.doom.d/config.el

*** Quit Emacs and Run ~/emacs.d/bin/doom sync Then sync the doom.

Please notice: If you want to keep sync with my commits, every time you do git pull, you should better run ~./emacs.d/bin/doom sync~ again, in case the ~packages.el~ is updated.

** Notes on transient states Spacemacs's transient states are based on ~hydra~, while it seems has some problems with doom. I am trying to fix it. You can choose ~message~, ~lv~, or ~posframe~ in ~config.el~ e.g. to choose ~posframe~:

+BEGIN_SRC emacs-lisp

(setq hydra-hint-display-type 'posframe)

+END_SRC

** Restart Emacs Finally restart emacs~

Enjoy~

** Current status

  1. Some Default spacemacs leader keybindings.
    • spacemacs-editing
    • spacemacs-layouts
    • spacemacs-navigation
    • spacemacs-defaults
    • spacemacs-evil
  2. org layer keybindings.
  3. Github layer keybindings.
  4. PDF layer keybindings.
  5. epub layer keybindings.
  6. dash layer keybindings.
  7. Some transient states:
    • Windows Transient State: ~SPC-w-.~
    • Symbol Overlay Transient State: ~SPC-s-o~
    • Symbol Highlight Transient State: ~SPC-s-h~ / ~*~ / ~#~
    • Buffer Transient State: ~SPC-b-.~
    • Error Transient State: ~SPC-e-.~
    • Font Scaling Transient State: ~SPC-z-x~
    • Frame Transparency Transient State: ~SPC-T-T~
    • Layouts Transient State: ~SPC-l~
    • Workspaces Transient State: ~SPC-l-w~
    • BM Transient State: ~SPC-a-b~
    • VCS Transient State: ~SPC-g-.~
    • Git Timemachine Transient State: ~SPC-g-t~
    • Move Text Transient State: ~SPC-x-J, SPC-x-K~
    • String Inflection Transient State: ~SPC-x-i-i~
    • Fold Transient State: ~SPC-z-.~
    • Evil number Transient State: ~SPC-n-+~
  8. JavaScript layer major mode keybindings.
  9. Spacemacs Like Dashboard.