Fork 0
Browse Source

[NUCLEAR OPTION] Move everything over to chezmoi

Sebastian Schulze 3 years ago
Signed by: bascht
GPG Key ID: 5BCB1D3B4D38A35A
  1. 9
  2. 25
  3. 46
  4. 0
  5. 0
  6. 0
  7. 0
  8. 0
  9. 0
  10. 0
  11. 0
  12. 0
  13. 0
  14. 0
  15. 0
  16. 0
  17. 0
  18. 0
  19. 0
  20. 0
  21. 0
  22. 0
  23. 0
  24. 0
  25. 0
  26. 0
  27. 0
  28. 0
  29. 0
  30. 0
  31. 0
  32. 0
  33. 0
  34. 0
  35. 0
  36. 0
  37. 0
  38. 0
  39. 0
  40. 0
  41. 0
  42. 0
  43. 0
  44. 0
  45. 0
  46. 0
  47. 0
  48. 0
  49. 0
  50. 0
  51. 0
  52. 0
  53. 0
  54. 0
  55. 0
  56. 0
  57. 0
  58. 0
  59. 0
  60. 0
  61. 0
  62. 0
  63. 0
  64. 0
  65. 0
  66. 0
  67. 0
  68. 0
  69. 0
  70. 0
  71. 0
  72. 0
  73. 0
  74. 0
  75. 0
  76. 253
  77. 3271
  78. 5219
  79. 124
  80. 376
  81. 55
  82. 287
  83. 542
  84. 166
  85. 405
  86. 119
  87. 7
  88. 8
  89. 8
  90. 16
  91. 16
  92. 7
  93. 25
  94. 26
  95. 25
  96. BIN
  97. BIN
  98. BIN
  99. BIN
  100. 73
  101. Some files were not shown because too many files have changed in this diff Show More

.gitignore vendored

@ -1,8 +1,3 @@ @@ -1,8 +1,3 @@

.gitmodules vendored

@ -1,27 +1,4 @@ @@ -1,27 +1,4 @@
[submodule "home/.emacs.d"]
path = home/.emacs.d
url = https://github.com/syl20bnr/spacemacs
[submodule "home/.oh-my-zsh"]
path = home/.oh-my-zsh
url = https://github.com/robbyrussell/oh-my-zsh.git
[submodule "home/.kubectx"]
path = home/.kubectx
url = https://github.com/ahmetb/kubectx.git
[submodule "home/.zsh-custom/themes/powerlevel10k"]
path = home/.zsh-custom/themes/powerlevel10k
url = https://github.com/romkatv/powerlevel10k.git
[submodule "home/.zsh-custom/plugins/fzf-marks"]
path = home/.zsh-custom/plugins/fzf-marks
url = https://github.com/urbainvaes/fzf-marks.git
[submodule "home/.fzf"]
path = home/.fzf
url = https://github.com/junegunn/fzf.git
[submodule "home/.config/base16-shell"]
path = home/.config/base16-shell
url = https://github.com/chriskempson/base16-shell.git
[submodule "home/.vim/bundle/Vundle.vim"]
path = home/.vim/bundle/Vundle.vim
url = https://github.com/VundleVim/Vundle.vim.git
[submodule "home/.zsh-custom/plugins/zsh-completions"]
path = home/.zsh-custom/plugins/zsh-completions
url = https://github.com/zsh-users/zsh-completions.git


@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
export PATH := ~/bin:$(PATH)
all: update
chezmoi apply
vim -c PlugUpdate -c qa
vim -c GoInstallBinaries -c qa
mkdir -p ~/.config/systemd/user/default.target.wants
mkdir -p ~/.config/systemd/user/timers.target.wants
ln -s ~/.config/systemd/user/emacs.service ~/.config/systemd/user/default.target.wants/
ln -s ~/.config/systemd/user/mopidy.service ~/.config/systemd/user/default.target.wants/
ln -s ~/.config/systemd/user/ical2org.service ~/.config/systemd/user/timers.target.wants/
ln -s ~/.config/systemd/user/maid.service ~/.config/systemd/user/timers.target.wants/
ln -s ~/.config/systemd/user/worklogger.service ~/.config/systemd/user/timers.target.wants/
update-third-parties: update-zsh update-plug.vim update-spacemacs update-kubectx
curl -s -L -o spacemacs-develop.tar.gz https://github.com/syl20bnr/spacemacs/archive/develop.tar.gz
chezmoi import --strip-components 1 --destination ${HOME}/.emacs.d spacemacs-develop.tar.gz
curl -s -L -o oh-my-zsh-master.tar.gz https://github.com/robbyrussell/oh-my-zsh/archive/master.tar.gz
chezmoi import --strip-components 1 --destination ${HOME}/.oh-my-zsh oh-my-zsh-master.tar.gz
curl -s -L -o powerlevel10k-master.tar.gz https://github.com/romkatv/powerlevel10k/archive/master.tar.gz
chezmoi import --strip-components 1 --destination ${HOME}/.zsh-custom/themes/powerlevel10k powerlevel10k-master.tar.gz
curl -s -L -o fzf-master.tar.gz https://github.com/junegunn/fzf/archive/master.tar.gz
chezmoi import --strip-components 1 --destination ${HOME}/.fzf fzf-master.tar.gz
curl -s -L -o fzf-marks-master.tar.gz https://github.com/urbainvaes/fzf-marks/archive/master.tar.gz
chezmoi import --strip-components 1 --destination ${HOME}/.zsh-custom/plugins/fzf-marks fzf-marks-master.tar.gz
curl -s -L -o zsh-completions-master.tar.gz https://github.com/zsh-users/zsh-completions/archive/master.tar.gz
chezmoi import --strip-components 1 --destination ${HOME}/.zsh-custom/plugins/zsh-completions zsh-completions-master.tar.gz
curl -s -L -o kubectx-master.tar.gz https://github.com/ahmetb/kubectx/archive/master.tar.gz
chezmoi import --strip-components 1 --destination ${HOME}/.kubectx kubectx-master.tar.gz
curl -s -L https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim > $$(~/bin/chezmoi source-path ~/.vim/autoload/plug.vim)

home/bin/archive → bin/executable_archive

home/bin/chromium-proxy → bin/executable_chromium-proxy

home/bin/convert-to-gif → bin/executable_convert-to-gif

home/bin/drop → bin/executable_drop

home/bin/em → bin/executable_em

home/bin/epsonscan → bin/executable_epsonscan

home/bin/gajim-gpg → bin/executable_gajim-gpg

home/bin/i3-autostart → bin/executable_i3-autostart

home/bin/i3-blur-lock → bin/executable_i3-blur-lock

home/bin/i3-blur-lock-and-screen-off → bin/executable_i3-blur-lock-and-screen-off

home/bin/i3-blur-lock-and-suspend → bin/executable_i3-blur-lock-and-suspend

home/bin/i3-displayconfig → bin/executable_i3-displayconfig

home/bin/i3-dropshot → bin/executable_i3-dropshot

home/bin/i3-inputconfig → bin/executable_i3-inputconfig

home/bin/i3-mail → bin/executable_i3-mail

home/bin/i3-polybar → bin/executable_i3-polybar

home/bin/i3-rofi → bin/executable_i3-rofi

home/bin/i3-screenshot → bin/executable_i3-screenshot

home/bin/install-binreleases → bin/executable_install-binreleases

home/bin/mittach → bin/executable_mittach

home/bin/rofi-clipboard → bin/executable_rofi-clipboard

home/bin/rofi-marks → bin/executable_rofi-marks

home/bin/tmux-statusline → bin/executable_tmux-statusline

home/bin/worklogger → bin/executable_worklogger

home/.p10k.zsh → dot_10k.zsh

home/.Xresources → dot_Xresources

home/.config/Kvantum/kvantum.kvconfig → dot_config/Kvantum/kvantum.kvconfig

home/.config/alacritty/alacritty.yml → dot_config/alacritty/alacritty.yml

home/.config/awesome/rc.lua → dot_config/awesome/rc.lua

home/.config/bat/config → dot_config/bat/config

home/.config/bspwm/bspwmrc → dot_config/bspwm/bspwmrc

home/.config/dunst/dunstrc → dot_config/dunst/dunstrc

home/.config/environment.d/10-bascht.conf → dot_config/environment.d/10-bascht.conf

home/.config/fish/config.fish → dot_config/fish/config.fish

home/.config/fish/functions/scale.fish → dot_config/fish/functions/scale.fish

home/.config/git/hooks/prepare-commit-msg → dot_config/git/hooks/prepare-commit-msg

home/.config/gtk-3.0/gtk.css → dot_config/gtk-3.0/gtk.css

home/.config/gtk-3.0/settings.ini → dot_config/gtk-3.0/settings.ini

home/.config/gtkrc → dot_config/gtkrc

home/.config/gtkrc-2.0 → dot_config/gtkrc-2.0

home/.config/i3/compton.conf → dot_config/i3/compton.conf

home/.config/i3/config → dot_config/i3/config

home/.config/i3/conky/conkyrc → dot_config/i3/conky/conkyrc

home/.config/i3/i3blocks.conf → dot_config/i3/i3blocks.conf

home/.config/kdeglobals → dot_config/kdeglobals

home/.config/kitty/kitty.conf → dot_config/kitty/kitty.conf

home/.config/kitty/nord.conf → dot_config/kitty/nord.conf

home/.config/kitty/snazzy.conf → dot_config/kitty/snazzy.conf

home/.config/lab.hcl → dot_config/lab.hcl

home/.config/omf/bundle → dot_config/omf/bundle

home/.config/omf/channel → dot_config/omf/channel

home/.config/omf/init.fish → dot_config/omf/init.fish

home/.config/omf/theme → dot_config/omf/theme

home/.config/polybar/config → dot_config/polybar/config

home/.config/profanity/profrc → dot_config/profanity/profrc

home/.config/profanity/themes/bascht → dot_config/profanity/themes/bascht

home/.config/rofi-pass/.gitignore → dot_config/rofi-pass/.gitignore vendored

home/.config/rofi-pass/config → dot_config/rofi-pass/config

home/.config/rofi/config.rasi → dot_config/rofi/config.rasi

home/.config/sway/config → dot_config/sway/config

home/.config/sxhkd/.sxhkdrc.swp → dot_config/sxhkd/.sxhkdrc.swp

home/.config/sxhkd/eload → dot_config/sxhkd/eload

home/.config/sxhkd/sxhkdrc → dot_config/sxhkd/sxhkdrc

home/.config/systemd/user/emacs.service → dot_config/systemd/user/emacs.service

home/.config/systemd/user/ical2org.service → dot_config/systemd/user/ical2org.service

home/.config/systemd/user/ical2org.timer → dot_config/systemd/user/ical2org.timer

home/.config/systemd/user/maid.service → dot_config/systemd/user/maid.service

home/.config/systemd/user/maid.timer → dot_config/systemd/user/maid.timer

home/.config/systemd/user/mopidy.service → dot_config/systemd/user/mopidy.service

home/.config/systemd/user/worklogger.service → dot_config/systemd/user/worklogger.service

home/.config/systemd/user/worklogger.timer → dot_config/systemd/user/worklogger.timer

home/.config/termite/config → dot_config/termite/config


@ -0,0 +1,253 @@ @@ -0,0 +1,253 @@
# Copyright (C) 2017-present Arctic Ice Studio <development@arcticicestudio.com>
# Copyright (C) 2017-present Sven Greb <development@svengreb.de>
# Project: Nord dircolors
# Version: 0.2.0
# Repository: https://github.com/arcticicestudio/nord-dircolors
# License: MIT
TERM ansi
TERM *color*
TERM con[0-9]*x[0-9]*
TERM cons25
TERM console
TERM cygwin
TERM dtterm
TERM dvtm
TERM dvtm-256color
TERM Eterm
TERM eterm-color
TERM fbterm
TERM gnome
TERM gnome-256color
TERM hurd
TERM jfbterm
TERM konsole
TERM konsole-256color
TERM kterm
TERM linux
TERM linux-c
TERM mlterm
TERM putty
TERM putty-256color
TERM rxvt*
TERM rxvt-unicode
TERM rxvt-256color
TERM rxvt-unicode256
TERM screen*
TERM screen-256color
TERM st-256color
TERM terminator
TERM tmux*
TERM tmux-256color
TERM vt100
TERM xterm*
TERM xterm-color
TERM xterm-88color
TERM xterm-256color
#+ Global Defaults +
DIR 01;34
FIFO 04;01;36
SOCK 04;33
DOOR 04;01;36
BLK 01;33
CHR 33
MISSING 01;37;41
EXEC 01;36
SETUID 01;04;37
SETGID 01;04;37
STICKY 04;37;44
#+ Extension Pattern +
#+--- Archives ---+
.7z 01;32
.ace 01;32
.alz 01;32
.arc 01;32
.arj 01;32
.bz 01;32
.bz2 01;32
.cab 01;32
.cpio 01;32
.deb 01;32
.dz 01;32
.ear 01;32
.gz 01;32
.jar 01;32
.lha 01;32
.lrz 01;32
.lz 01;32
.lz4 01;32
.lzh 01;32
.lzma 01;32
.lzo 01;32
.rar 01;32
.rpm 01;32
.rz 01;32
.sar 01;32
.t7z 01;32
.tar 01;32
.taz 01;32
.tbz 01;32
.tbz2 01;32
.tgz 01;32
.tlz 01;32
.txz 01;32
.tz 01;32
.tzo 01;32
.tzst 01;32
.war 01;32
.xz 01;32
.z 01;32
.Z 01;32
.zip 01;32
.zoo 01;32
.zst 01;32
#+--- Audio ---+
.aac 32
.au 32
.flac 32
.m4a 32
.mid 32
.midi 32
.mka 32
.mp3 32
.mpa 32
.mpeg 32
.mpg 32
.ogg 32
.opus 32
.ra 32
.wav 32
#+--- Customs ---+
.3des 01;35
.aes 01;35
.gpg 01;35
.pgp 01;35
#+--- Documents ---+
.doc 32
.docx 32
.dot 32
.odg 32
.odp 32
.ods 32
.odt 32
.otg 32
.otp 32
.ots 32
.ott 32
.pdf 32
.ppt 32
.pptx 32
.xls 32
.xlsx 32
#+--- Executables ---+
.app 01;36
.bat 01;36
.btm 01;36
.cmd 01;36
.com 01;36
.exe 01;36
.reg 01;36
#+--- Ignores ---+
*~ 02;37
.bak 02;37
.BAK 02;37
.log 02;37
.log 02;37
.old 02;37
.OLD 02;37
.orig 02;37
.ORIG 02;37
.swo 02;37
.swp 02;37
#+--- Images ---+
.bmp 32
.cgm 32
.dl 32
.dvi 32
.emf 32
.eps 32
.gif 32
.jpeg 32
.jpg 32
.JPG 32
.mng 32
.pbm 32
.pcx 32
.pgm 32
.png 32
.PNG 32
.ppm 32
.pps 32
.ppsx 32
.ps 32
.svg 32
.svgz 32
.tga 32
.tif 32
.tiff 32
.xbm 32
.xcf 32
.xpm 32
.xwd 32
.xwd 32
.yuv 32
#+--- Video ---+
.anx 32
.asf 32
.avi 32
.axv 32
.flc 32
.fli 32
.flv 32
.gl 32
.m2v 32
.m4v 32
.mkv 32
.mov 32
.MOV 32
.mp4 32
.mpeg 32
.mpg 32
.nuv 32
.ogm 32
.ogv 32
.ogx 32
.qt 32
.rm 32
.rmvb 32
.swf 32
.vob 32
.webm 32
.wmv 32


File diff suppressed because it is too large Load Diff


File diff suppressed because it is too large Load Diff


@ -0,0 +1,124 @@ @@ -0,0 +1,124 @@
#+TITLE: Spacemacs Community
* Table of Contents :TOC_5_gh:noexport:
- [[#philosophy][Philosophy]]
- [[#for-contributors][For Contributors]]
- [[#for-users][For Users]]
- [[#moderation][Moderation]]
- [[#guidelines][Guidelines]]
- [[#people][People]]
- [[#issues][Issues]]
- [[#pull-requests-and-commmits][Pull requests and Commmits]]
- [[#messages][Messages]]
- [[#interpretation][Interpretation]]
- [[#collaborators-privacy][Collaborators privacy]]
- [[#maintainer][Maintainer]]
- [[#log][Log]]
* Philosophy
** For Contributors
- This community is a community of hackers based on meritocracy and
volunteering. Hackers strive for excellence to make the world a better place,
so does the Spacemacs community.
- Be good in what you bring to the project be it code, documentation, typo
fixes, art, humor, ideas, project management, web design, assurance quality,
mentorship, you name it! We like to award achievements to people making a
difference in a wide variety of domains and occasions, [[https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org#special-titles][see it for yourself]].
Why not you? Make it happen, make history!
- Think you are not good enough? Find support and mentors by chatting on Gitter
with fellow Spacemacs users or just open an issue on GitHub, you will find
help to fulfil your desire of contribution. We welcome anyone with good
- In a nutshell: Be good, positive and/or with good intentions and focused on
the project.
** For Users
- Any question related to the project is welcomed and encouraged, the worst
thing that can happen is that we redirect you to the documentation.
- The majority of the interactions with the community happens on GitHub via
issues and on Gitter via the official Spacemacs channel. There is also an
active official twitter account =spacemacs=.
- Any opinion on the project is valorized given it is constructive.
* Moderation
We want the community to be judged based on its moderation actions instead of
telling people how to behave. The golden rules of the community are to have good
intentions and stay focused on the project, for anything else that requires
moderation any future user or contributor can refer to this section to know
about our past moderation actions. So readers won't find any example or
definition of what collaborators judge offending or outrageous, instead they
will find at the end of this section a log of all major moderation actions taken
by the collaborators since the beginning of the project which started officially
in August 2014. It should allow you to decide whether or not you want to be part
of this community. If you are not convinced then be assured that the only evil
part in Spacemacs is the evil mode :-)
** Guidelines
These guidelines apply to all collaborators of the project, namely @syl20bnr,
@TheBB, @d12frosted and @bmag.
*** People
- Collaborators cannot ban any GitHub user from the repository but they can ban
users from the official Gitter channel.
- A user can be banned if and only if all the collaborators agree to do so.
- The reasons of the ban are mentioned in the moderation actions log (see
*** Issues
- Issues can be locked if their contents are judged _inappropriate_, _offending_
or if they deviate _dangerously_ from the project.
*** Pull requests and Commmits
- Collaborators can push to the repository without making a PR.
- PR can be rejected. Rejected PR always go with a reason explicitly written
when closing the PR.
- Commits can be reverted if they compromise the stability of the project. The
reason is contained in the commit comments.
- Pull request are also issues, thus issue guidelines also apply to pull
*** Messages
- Only the form of a message can be edited, not its meaning, except if this
meaning is _outrageous_.
- Moderators can add information to a message to improve its accuracy without
altering its meaning,
- Any edition of a message is logged in the =edits log= located at the end of
the edited message with the following format:
EDIT: [@moderator] action (reason: xxx)
- The reason is added only when needed (for instance we won't add a reason for
formatting edits)
** Interpretation
Words used in these guidelines like _good_, _inappropriate_, _offending_,
_dangerously_ and _outrageous_ are used without any explanation, their meanings
and interpretations are left solely to the discretion of the collaborators who
are educated persons working in the interest of the community.
** Collaborators privacy
Life and actions of collaborators outside of the project (i.e. outside of the
Spacemacs GitHub repository, official Spacemacs Gitter channels and Twitter
official Spacemacs account timeline) are completely detached from their
activities and roles in the project. They are free to express any opinion on the
project or any other subjects and those opinions cannot be used to compromise
their roles in the project as long as they follow the moderation guidelines with
good intentions.
** Maintainer
- The maintainer @syl20bnr as a BDFL is free to demote a collaborator in extreme
- When there is no consensus on a subject, the BDFL can decide to impose his
view on the subject.
** Log
For transparency and future reference any major moderation actions are recorded
here. As of Sunday, April 10th 2016, 7200 issues have been opened and 2 major
moderation actions have been taken:
| Date | Moderator | Action | Issue | Reason |
| 2016/01/27 | syl20bnr | lock | #3484 | comments judged to be offending towards the Spacemacs community |
| 2016/01/27 | syl20bnr | unlock | #3484 | let's make it happen, i.e. this document |


@ -0,0 +1,376 @@ @@ -0,0 +1,376 @@
#+TITLE: Contribution guidelines
Spacemacs is a volunteer effort. We encourage you to pitch in. The community
makes Spacemacs what it is. We have a few guidelines, which we ask all
contributors to follow.
You can only consider reading the sections relevant to what you are going to do:
- [[#asking-for-help][Asking for help]] if you are about to open an issue to ask a question.
- [[#reporting-issues][Reporting issues]] if you are about to open a new issue.
- [[#contributing-code][Contributing code]] if you are about to send a PR.
- [[https://github.com/syl20bnr/spacemacs/blob/develop/CONTRIBUTING.org#reviewing-pull-requests][Reviewing Pull Requests]] if you are about to review a PR.
Thanks! :heart: :heart: :heart:
* Table of Contents :TOC_5_gh:noexport:
- [[#asking-for-help][Asking for help]]
- [[#reporting-issues][Reporting issues]]
- [[#contributing-code][Contributing code]]
- [[#general-contribution-guidelines][General contribution guidelines]]
- [[#license][License]]
- [[#conventions][Conventions]]
- [[#changelog-entry][Changelog entry]]
- [[#pull-request][Pull Request]]
- [[#ideally-for-simple-prs-most-of-them][Ideally for /simple/ PRs (most of them):]]
- [[#for-complex-prs-big-refactoring-etc][For complex PRs (big refactoring, etc):]]
- [[#commit-messages][Commit messages]]
- [[#contributing-a-layer][Contributing a layer]]
- [[#file-header][File header]]
- [[#author-of-a-new-layer][Author of a new layer]]
- [[#readmeorg-tags][README.org tags]]
- [[#contributor-to-an-existing-layer][Contributor to an existing layer]]
- [[#contributing-a-key-binding][Contributing a key binding]]
- [[#contributing-a-banner][Contributing a banner]]
- [[#reviewing-pull-requests][Reviewing Pull Requests]]
- [[#using-magit-to-quickly-test-prs][Using Magit to quickly test PRs]]
- [[#additional-information][Additional information]]
- [[#testing][Testing]]
- [[#credits][Credits]]
* Asking for help
If you want to ask an usage question, be sure to look first into some places as
it may hold the answer:
- [[https://github.com/syl20bnr/spacemacs/blob/develop/doc/FAQ.org][The FAQ]]. Some of the most frequently asked questions are answered there.
- [[https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org][The documentation]]. It's the general documentation of Spacemacs.
- You may also read the =README.org= of the [[https://github.com/syl20bnr/spacemacs/blob/develop/doc/LAYERS.org][relevant layer(s)]].
If your question is not answered there, then please come into our [[https://gitter.im/syl20bnr/spacemacs][gitter chat]] to
discuss it with us :relaxed:. We will direct you to a solution, or ask you to
open an issue if it is needed.
* Reporting issues
Issues have to be reported on our [[https://github.com/syl20bnr/spacemacs/issues][issues tracker]]. Please:
- Check that the issue has not already been reported.
- This can be achieved by searching keywords on the [[https://github.com/syl20bnr/spacemacs/issues][issues tracker]].
- Check that the issue has not been fixed in the =develop= version of Spacemacs.
- This can be achieved by running Spacemacs on the =develop= branch and trying
to reproduce the bug here. You can also check at the [[https://github.com/syl20bnr/spacemacs/tree/develop][source code]] to see if
it has been changed/corrected.
- Try to use a clear title, and describe your problem with complete sentences.
See also [[https://github.com/syl20bnr/spacemacs/wiki/Debugging#how-to-make-a-great-bug-report][How to make a great bug report]] in the wiki.
- Include the following information in your issue:
- The output of =SPC h d s= (=M-m h d s= in Emacs style), which gives the
versions information about your installation.
- If relevant, include the mode in which the problem arise (e.g. javascript
files, =org-mode=, etc…).
- If possible, try to include details on how to reproduce it, like a step by
step guide.
* Contributing code
Code contributions are welcome. Please read the following sections carefully. In
any case, feel free to join us on the [[https://gitter.im/syl20bnr/spacemacs][gitter chat]] to ask questions about
** General contribution guidelines
*** License
The license is =GPLv3= for all parts specific to Spacemacs, this includes:
- The initialization and core files
- All the layer files.
For files not belonging to Spacemacs like local packages and libraries, refer
to the header file. Those files should not have an empty header, we may not
accept code without a proper header file.
*** Conventions
Spacemacs is based on conventions, mainly for naming functions, keybindings
definition and writing documentation. Please read the [[https://github.com/syl20bnr/spacemacs/blob/develop/doc/CONVENTIONS.org][CONVENTIONS.org]] file
before your first contribution to get to know them.
*** Changelog entry
Add a short entry describing your proposed change under a suitable subheading in
[[https://github.com/syl20bnr/spacemacs/blob/develop/CHANGELOG.develop][CHANGELOG.develop]]. Use the previous entries and [[https://github.com/syl20bnr/spacemacs/blob/develop/CONTRIBUTING.org#commit-messages][commit messages instructions]] as
guidelines. You can add your name or github username in parentheses at the end
of the entry if you want to. If an entry already exists describing your PR
(small documentation improvements etc.), you can omit the changelog entry or add
your name at the end of the pre-existing one.
*** Pull Request
Submit your contribution against the =develop= branch. You should not use
your =master= branch to modify Spacemacs, this branch is considered to be
You may want to [[https://github.com/syl20bnr/spacemacs/wiki/Beginner%27s-Guide-to-Contributing-a-Pull-Request-to-Spacemacs][read our beginner's guide for Pull Requests]].
/PR = Pull Request/
**** Ideally for /simple/ PRs (most of them):
- Branch from =develop=
- One topic per PR
- One commit per PR
- If you have several commits on different topics, close the PR and
create one PR per topic
- If you still have several commits, squash them into only one commit
- Rebase your PR branch on top of upstream =develop= before submitting
the PR
Those PRs are usually /cherry-picked/.
**** For complex PRs (big refactoring, etc):
- Squash only the commits with uninteresting changes like typos, syntax fixes,
etc... and keep the important and /isolated/ steps in different commits.
Those PRs are /merged/ and explicitly /not fast-forwarded/.
*** Commit messages
Write commit messages according to adapted [[http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html][Tim Pope's guidelines]]:
- Use present tense and write in the imperative: "Fix bug", not "fixed bug" or
"fixes bug".
- Start with a capitalized, short (72 characters or less) summary, followed by a
blank line.
- If necessary, add one or more paragraphs with details, wrapped at 72
- Separate paragraphs by blank lines.
This is a model commit message:
Capitalized, short (72 chars or less) summary
More detailed explanatory text, if necessary. Wrap it to about 72
characters or so. In some contexts, the first line is treated as the
subject of an email and the rest of the text as the body. The blank
line separating the summary from the body is critical (unless you omit
the body entirely); tools like rebase can get confused if you run the
two together.
Write your commit message in the imperative: "Fix bug" and not "Fixed bug"
or "Fixes bug." This convention matches up with commit messages generated
by commands like git merge and git revert.
Further paragraphs come after blank lines.
- Bullet points are okay, too
- Typically a hyphen or asterisk is used for the bullet, followed by a
single space, with blank lines in between, but conventions vary here
- Use a hanging indent
[[https://github.com/magit/magit/][Git Commit]] and [[https://github.com/magit/magit/][Magit]] provide Emacs mode for Git commit messages, which helps you
to comply to these guidelines.
** Contributing a layer
Please read the [[https://github.com/syl20bnr/spacemacs/blob/develop/doc/LAYERS.org][layers documentation]] first.
It is recommended to use the =configuration-layer/create-layer= command in order
to create a layer, as it will take care of using the files templates and will
also create the file headers correctly.
Contributed configuration layers are stored in the =layers/= folder. The
=layers/= folder also contains categories prefixed with =+= to put your layers
in. For example a layer for a language would go in the =layers/+lang/= folder.
Layer with no associated configuration will be rejected. For instance a layer
with just a package and a hook can be easily replaced by the usage of the
variable =dotspacemacs-additional-packages=.
*** File header
The file header for =elisp= files should look like the following template:
;;; FILENAME --- NAME Layer packages File for Spacemacs
;; Copyright (c) 2012-2018 Sylvain Benner & Contributors
;; URL: https://github.com/syl20bnr/spacemacs
;; This file is not part of GNU Emacs.
;;; License: GPLv3
You should replace =FILENAME= by the name of the file (e.g. =packages.el=)
and =NAME= by the name of the layer you are creating, don't forget to replace
=YOUR_NAME= and =YOUR_EMAIL= also. Some files already have a template inside
=core/templates/=, so look in there first.
Note that if you use =configuration-layer/create-layer=, spacemacs will prepare
files and headers for you, and for free :smile: !
*** Author of a new layer
In the files header, change the default author name (=Sylvain Benner=) to your
**** README.org tags
Every README.org file of a layer should have =#+TAGS:= line:
#+TITLE: My layer
#+TAGS: layer|web service
* Table of Contents :TOC_5_gh:noexport:
Individual tags are separated with "|" character.
Example above has 2 tags: "layer" and "web service".
Tags are listed in [[https://github.com/syl20bnr/spacemacs/blob/develop/.ci/spacedoc-cfg.edn][<spacemacs_root>/.ci/spacedoc-cfg.edn]] configuration file.
#+BEGIN_SRC clojure
{"chat" "Chats"
"completion" "Completion"}
Labels are used to name headlines in [[https://github.com/syl20bnr/spacemacs/blob/develop/layers/LAYERS.org][LAYERS.org]] file and
[[https://github.com/syl20bnr/spacemacs/blob/develop/.ci/spacedoc-cfg.edn][:spacetools.spacedoc.config/layers-org-query]] defines structure of the file by
chaining tags into a tree where every leaf turns into a list of
descriptions pulled out of README.org files which tags match leaf's path in the tree.
You can see how the shape of [[https://github.com/syl20bnr/spacemacs/blob/develop/.ci/spacedoc-cfg.edn][<spacemacs_root>/.ci/spacedoc-cfg.edn]]
repeats in [[https://github.com/syl20bnr/spacemacs/blob/develop/layers/LAYERS.org#table-of-contents][TOC of LAYERS.org]].
Important details:
- Every layer description will be displayed exacly one time.
- In the case when a README.org file of a layer doesn't have =#+TAGS:=
documentation formatting tool will inster dummy tags =layer|uncategorized=,
such files will be listed in [[https://github.com/syl20bnr/spacemacs/blob/develop/layers/LAYERS.org#readmeorg-files-that-need-proper-tags][LAYERS.org#readmeorg-files-that-need-proper-tags]].
- Files which tag set has not being matched by [[https://github.com/syl20bnr/spacemacs/blob/develop/.ci/spacedoc-cfg.edn][:spacetools.spacedoc.config/layers-org-query]]
will appire in [[https://github.com/syl20bnr/spacemacs/blob/develop/layers/LAYERS.org#skipped-layers][LAYERS.org#skipped-layers]]
- If [[https://github.com/syl20bnr/spacemacs/blob/develop/layers/LAYERS.org][LAYERS.org]] file has =Skipped layers:= and/or
=README.org files that need proper tags= sections - someone is slacking :wink:
If you want to experiment with the tool locally:
#+BEGIN_SRC shell
docker run --rm \
-v <SPACEMACS_REPO_ROOT>:/tmp/docs \
-v <PATH_TO_CONFIG_FILE>:/opt/spacetools/spacedoc-cfg.edn \
jare/spacetools docfmt /tmp/docs/
*** Contributor to an existing layer
If you are contributing to an already existing layer, you should not modify any
header file.
** Contributing a key binding
Key bindings are an important part of spacemacs.
First if you want to have some personal key bindings, you can freely bind them
inside the ~SPC o~ and ~SPC m o~ prefixes which are reserved for the user. This
can be done from the =dotspacemacs/user-config= function of your =.spacemacs=
file and don't require any contribution to Spacemacs.
If you think it worth contributing a new key bindings then be sure to read
the [[https://github.com/syl20bnr/spacemacs/blob/develop/doc/CONVENTIONS.org][CONVENTIONS.org]] file to find the best key bindings, then create a
PR with your changes.
*ALWAYS* document your new key bindings or key bindings changes inside the
relevant documentation file. It should be the layer's =README.org= file for
layer's key bindings, or =DOCUMENTATION.org= for general Spacemacs key
** Contributing a banner
The startup banner is by default the Spacemacs logo but there are also ASCII
banners available in the directory =core/banners/=.
If you have some ASCII skills you can submit your artwork!
You are free to choose a reasonable height size but the width size should be
around 75 characters.
* Reviewing Pull Requests
You can contribute by reviewing PRs created by others. This will help share the
workload of the project maintainers by letting them know that a PR has been
tested by an independent reviewer. The steps:
- Check that the PR complies with the guidelines in [[https://github.com/syl20bnr/spacemacs/blob/develop/CONTRIBUTING.org#contributing-code][Contributing code]].
- Check that the PR complies with [[https://github.com/syl20bnr/spacemacs/blob/develop/doc/CONVENTIONS.org][CONVENTIONS.org]].
- Check out the PR branch and test it. Remember to update your packages and your
=~/.spacemacs= file. Testing means that you actually use the features touched
by the PR, and the more complex or feature-rich the proposed changes are, the
more testing is required. Be creative in trying to find bugs! Preferably, use
the PR branch for hours or days to help stumble on unforeseen issues. Of
course, common sense can be used and typo fixes do not need to be tested
against bugs, but be thorough in actual code changes. Testing with a fresh
spacemacs installation might be a good idea as well.
- Step back and think if the proposed changes could cause any other problems not
covered by your testing. You should also ask yourself whether or not you feel
that your testing is adequate to confidently state that this PR introduces no
new bugs. If you feel that additional testing by more community members could
be helpful, state so in your review.
If you find something to improve, [[https://help.github.com/articles/reviewing-proposed-changes-in-a-pull-request/][report]] it constructively and politely so the
contributor can update the PR accordingly. When you find that the PR is ready to
merge, you can leave an approving [[https://help.github.com/articles/reviewing-proposed-changes-in-a-pull-request/][review]]. Please report explicitly how you
tested the PR for bugs, and confirm that you have checked its compliance with
the code conventions. Copy the following line to your approving review to notify
the collaborators:
Ready to be merged! (@syl20bnr @TheBB @d12frosted @bmag @JAremko)
Now the collaborators who have write access to the repository will use their
judgement to either merge the PR or require further review from another
reviewer. This is done to ensure a thorough cross-referencing in case of complex
changes, your review is very valuable in these cases as well!
** Using Magit to quickly test PRs
It is possible to manage PRs directly inside the Magit status buffer ~SPC g s~.
First add the =github= layer to your dotfile which will pull the package
=forge=. Once installed you need to set it up with a [[https://magit.vc/manual/ghub/Getting-Started.html#Getting-Started][GitHub personal access
token]] after which you can execute ~M-x forge-pull~. It will fetch all the PRs
which may take a few seconds as we have lot of PRs. Note also that all your
Magit actions will get some additional delay due to the refresh of the PRs list.
Now, from the magit status buffer you can:
- checkout a PR with ~b y~ and searching it by name or ID
- donate all commits to develop by doing ~A d~ and selecting your current branch
first and the develop branch second
- switch to the develop branch by pressing ~b b~ and selecting it
- delete the PR branch and remote by doing ~b x~ and selecting it
* Additional information
** Testing
Tests live in the =tests/= folder, with a folder structure corresponding to the
rest of the repository.
To run tests locally, navigate to the relevant subfolder and run =make=.
Spacemacs uses Travis CI to perform more comprehensive testing, where each
testable layer is enabled in turn.
To add tests for a layer, do the following:
1. Create a subfolder of =tests/= corresponding to the layer you want to test.
2. Write a file called =dotspacemacs.el= in that folder. It should be a minimal
dotfile that enables the layer in question (and other layers it may depend
3. Write a number of files with tests. Please try to separate unit and
functional tests. Look at existing tests for clues.
4. Write a =Makefile= in that folder. It should define three variables.
- a list of additional files to load before testing (relative
to the root Spacemacs folder). This should typically be =init.el=.
- a list of unit test files in the current folder.
- a list of functional test files in the current folder.
See existing tests for examples.
#+BEGIN_SRC makefile
TEST_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
include ../../spacemacs.mk
5. Add the new test to list of tests in =travis/run_build.sh=.
* Credits
This =CONTRIBUTING.org= file is partially based on the [[https://github.com/rails/rails/blob/master/CONTRIBUTING.md][Rails Contribution
guidelines]] and [[https://github.com/flycheck/flycheck/blob/master/doc/contributor/contributing.rst][Flycheck Contribution guidelines]].


@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
### Dockerfile --- spacemacs-docker dockerfile with latest Emacs
## Copyright (c) 2012-2018 Sylvain Benner & Contributors
## Author: Eugene "JAremko" Yaremenko <w3techplayground@gmail.com>
## This file is not part of GNU Emacs.
### License: GPLv3
## See spacemacs/layers/+distributions/spacemacs-docker/README.org
FROM jare/emacs:latest
MAINTAINER JAremko <w3techplaygound@gmail.com>
ENV UNAME="spacemacser" \
# Default fonts
ENV NNG_URL="https://github.com/google/fonts/raw/master/ofl/\
nanumgothic/NanumGothic-Regular.ttf" \
RUN apt-get update && apt-get install wget \
&& mkdir -p /usr/local/share/fonts \
&& wget -qO- "${SCP_URL}" | tar xz -C /usr/local/share/fonts \
&& wget -q "${NNG_URL}" -P /usr/local/share/fonts \
&& fc-cache -fv \
&& apt-get purge wget \
&& rm -rf /tmp/* /var/lib/apt/lists/* /root/.cache/*
# UHOME is /home/emacs (from jare/emacs)
ADD . ${UHOME}/.emacs.d
# Init Spacemacs
RUN cp ${UHOME}/.emacs.d/core/templates/.spacemacs.template ${UHOME}/ \
&& mv ${UHOME}/.spacemacs.template ${UHOME}/.spacemacs \
&& sed -i "s/\(-distribution 'spacemacs\)/\1-docker/" \
${UHOME}/.spacemacs \
&& asEnvUser emacs -batch -u ${UNAME} -kill \
&& asEnvUser emacs -batch -u ${UNAME} -kill \
&& chmod ug+rw -R ${UHOME}
# Test Spacemacs
RUN asEnvUser make -C ${UHOME}/.emacs.d/tests/core/ test \
&& cd ${UHOME}/.emacs.d \
&& printf "SPACEMACS REVISION: %s\n" "$(git rev-parse --verify HEAD)"
RUN ln -s \
${UHOME}/.emacs.d/layers/+distributions/spacemacs-docker/deps-install/run \
/usr/local/sbin/install-deps \
&& chown root:root /usr/local/sbin/install-deps \
&& chmod 770 /usr/local/sbin/install-deps


@ -0,0 +1,287 @@ @@ -0,0 +1,287 @@
#+TITLE: Spacemacs experimental features
* Table of Contents :TOC_5_gh:noexport:
- [[#spacemacs-dumps-using-the-portable-dumper][Spacemacs dumps using the portable dumper]]
- [[#setup][Setup]]
- [[#emacs-plus-users][=emacs-plus= users]]
- [[#clone-emacs][Clone Emacs]]
- [[#simple-patch-of-emacs-source-code][Simple patch of Emacs source code]]
- [[#compile-emacs-from-source][Compile Emacs from source]]
- [[#macos][macOS]]
- [[#ubuntu][Ubuntu]]
- [[#windows][Windows]]
- [[#install-emacs][Install Emacs]]
- [[#windows-1][Windows]]
- [[#update-your-dotfile][Update your dotfile]]
- [[#add-pre-dump-function-to-layers][Add pre-dump function to layers]]
- [[#test][Test]]
- [[#report-issues][Report issues]]
- [[#usage][Usage]]
* Spacemacs dumps using the portable dumper
The portable dumper is a feature that will be available with Emacs 27. This new
dumper should theoretically work on all the three major OSes: GNU/Linux, macOS
and Windows.
** Setup
To test the portable dumper with Spacemacs, follow these steps:
*** =emacs-plus= users
In case you are using =d12frosted/emacs-plus= on macOS, you can skip manual
Emacs installation instructions and just use =--HEAD= option passed to
#+BEGIN_SRC shell
brew install emacs-plus --HEAD
*** Clone Emacs
Clone Emacs from [[https://git.savannah.gnu.org/git/emacs.git]]:
#+BEGIN_SRC shell
git clone https://git.savannah.gnu.org/git/emacs.git
cd emacs
Note: On windows make sure that autocrlf is disabled in git before cloning or
else the =autoconf.sh= script will fail later on:
#+BEGIN_SRC shell
git config --global core.autocrlf false
*** Simple patch of Emacs source code
*Note: This seems to not be needed anymore. For reference we still keep it in
the guide.*
We need to increase the number of =remembered_data= slots in =src/pdumper.c=, we
double the number of slots by replacing 32 with 64:
static struct
void *mem;
int sz;
} remembered_data[64];
*** Compile Emacs from source
This step depends on your OS (please create a PR to add the instructions for
your OS).
**** macOS
In the root directory of your freshly cloned Emacs repository in the =master=
branch as the current branch:
#+BEGIN_SRC shell
./configure --with-ns --with-dbus --with-gnutls --with-imagemagick --with-rsvg --with-mailutils --with-xml2 --with-modules
**** Ubuntu
/Note: This is tested on Ubuntu 17.10./
In the root directory of your freshly cloned Emacs repository in the =master=
branch as the current branch:
#+BEGIN_SRC shell
# Pick one. The first one will install Emacs locally and the second one will install it globally.
./configure --with-dbus --with-gnutls --with-imagemagick --with-rsvg --with-mailutils --with-xml2 --with-modules --prefix="$HOME/.local"
./configure --with-dbus --with-gnutls --with-imagemagick --with-rsvg --with-mailutils --with-xml2 --with-modules
If you have never compiled Emacs from source on your machine then you probably
need to install the following packages:
#+BEGIN_SRC shell
sudo apt-get install build-essential automake texinfo libjpeg-dev libncurses5-dev
sudo apt-get install libtiff5-dev libgif-dev libpng-dev libxpm-dev libgtk-3-dev libgnutls28-dev
**** Windows
/Note: This is tested on Windows 10/
Install MSYS2 x86_64 from [[http://repo.msys2.org/distrib/x86_64/][here]].
Run msys2_shell.bat and in the msys2 prompt run:
#+BEGIN_SRC shell
pacman -S base-devel mingw-w64-x86_64-toolchain \
mingw-w64-x86_64-xpm-nox mingw-w64-x86_64-libtiff \
mingw-w64-x86_64-giflib mingw-w64-x86_64-jbigkit \
mingw-w64-x86_64-libpng mingw-w64-x86_64-libjpeg-turbo \
mingw-w64-x86_64-librsvg mingw-w64-x86_64-libxml2 \
Quit the msys2 shell and run mingw64.exe in the msys64 install directory. In the
mingw prompt navigate to the emacs source checkout (=cd /c/= will get you to the
root of the c drive) and run:
#+BEGIN_SRC shell
./configure --without-ns --without-dbus --with-gnutls --with-imagemagick --with-rsvg --with-mailutils --with-xml2 --with-modules
Instructions from [[https://sourceforge.net/p/emacsbinw64/wiki/Build%20guideline%20for%20MSYS2-MinGW-w64%20system/][here]].
*** Install Emacs
After the compiliation finished successfully, you may need to install Emacs.
#+BEGIN_SRC shell
make install # if you configure Emacs to install locally
sudo make install # if globally
**** Windows
In the mingw shell run:
#+BEGIN_SRC shell
make install prefix=/c/emacs
cp /mingw64/bin/{libwinpthread-*.dll,libXpm-noX*.dll,libdbus-*.dll} /c/emacs/bin
cp /mingw64/bin/{libgomp-*.dll,libgcc_s_seh-*.dll,libglib-*.dll} /c/emacs/bin
cp /mingw64/bin/{libintl-*.dll,libiconv-*.dll,libgobject-*.dll} /c/emacs/bin
cp /mingw64/bin/{libffi-*.dll,libgdk_pixbuf-*.dll,libgio-*.dll} /c/emacs/bin
cp /mingw64/bin/{libgmodule-*.dll,zlib*.dll,librsvg-*.dll} /c/emacs/bin
cp /mingw64/bin/{libcairo-*.dll,libcroco-*.dll,libpango-*.dll} /c/emacs/bin
cp /mingw64/bin/{libpangocairo-*.dll,libxml2-*.dll,libfontconfig-*.dll} /c/emacs/bin
cp /mingw64/bin/{libfreetype-*.dll,libpixman-*.dll,libpng*.dll} /c/emacs/bin
cp /mingw64/bin/{libpangoft*.dll,libpangowin32-*.dll,liblzma-*.dll} /c/emacs/bin
cp /mingw64/bin/{libexpat-*.dll,libharfbuzz-*.dll,libgnutls-*.dll} /c/emacs/bin
cp /mingw64/bin/{libgnutlsxx-*.dll,libtiff-*.dll,libtiffxx-*.dll} /c/emacs/bin
cp /mingw64/bin/{libjpeg-*.dll,libgif-*.dll,libbz2-*.dll,libjbig-*.dll} /c/emacs/bin
cp /mingw64/bin/{libgmp-*.dll,libhogweed-*.dll,libnettle-*.dll} /c/emacs/bin
cp /mingw64/bin/{libp11-kit-*.dll,libtasn1-*.dll} /c/emacs/bin
*** Update your dotfile
In the function =dotspacemacs/init= add the following variables if you don't
have them already and initialize them:
#+BEGIN_SRC emacs-lisp
(defun dotspacemacs/init ()
This function is called at the very beginning of Spacemacs startup,
before layer configuration.
It should only modify the values of Spacemacs settings."
;; If non-nil then enable support for the portable dumper. You'll need
;; to compile Emacs 27 from source following the instructions in file
;; EXPERIMENTAL.org at to root of the git repository.
;; (default nil)
dotspacemacs-enable-emacs-pdumper t
;; Name of executable file pointing to emacs 27+. This executable must be
;; in your PATH.
;; (default "emacs")
dotspacemacs-emacs-pdumper-executable-file "emacs"
;; Name of the Spacemacs dump file. This is the file will be created by the
;; portable dumper in the cache directory under dumps sub-directory.
;; To load it when starting Emacs add the parameter `--dump-file'
;; when invoking Emacs 27 executable on the command line, for instance:
;; ./emacs --dump-file=~/.emacs.d/.cache/dumps/spacemacs.pdmp
;; (default spacemacs.pdmp)
dotspacemacs-emacs-dumper-dump-file "spacemacs.pdmp"))
A new user dotfile function has been added which is called before doing the
dump. The function name is =dotspacemacs/user-load=. You can require additional
libraries before the dump so they won't need to be lazy loaded.
Add this to your dotfile if you don't have it already.
#+BEGIN_SRC emacs-lisp
(defun dotspacemacs/user-load ()
"Library to load while dumping.
This function is called while dumping Spacemacs configuration. You can
`require' or `load' the libraries of your choice that will be included
in the dump."
This is a good place to use the function =spacemacs/dump-modes= which
all to easily load modes in a temporary buffer to trigger all the possible
side effects.
For instance to load my-mode:
#+BEGIN_SRC emacs-lisp
(spacemacs/dump-modes '(my-mode))
*Friendly suggestions:*
- If you have a lot of personal configuration in =user-init= and =user-config=,
you can try to move them into =user-load= as this can reduce the time to load
those customized configurations.
*** Add pre-dump function to layers
It is also possible to execute some lisp for each used layer by defining a
function named =<layer>/pre-dump= in the =config.el= file of the layer.
Example for the org layer:
#+BEGIN_SRC emacs-lisp
;; Dumper
(defun org/pre-dump ()
(spacemacs/dump-modes '(org-mode)))
*Note*: In order to not generate dump files that are too big we try to use this
mechanism only when it makes a noticeable difference for all users.
*** Test
Restart Emacs. Each time Emacs starts, Spacemacs will check if the list of your
layers has changed, if it has changed then Emacs will be automatically dumped
for you in an asynchronous process. The buffer for the output of the process is
named =*spacemacs dumper*=.
If you have no error during the dump you can test it out!
To actually start Spacemacs with the compiled Emacs 27 and the Spacemacs dump,
on the command line in the =src= directory of the cloned Emacs source:
#+BEGIN_SRC shell
./emacs --dump-file=/Users/sylvain/.emacs.d/.cache/dumps/spacemacs.pdmp &
*** Report issues
If you want to report an issue regarding this new feature please use the label
=Portable Dumper=.
All the related issues can be found with [[https://github.com/syl20bnr/spacemacs/labels/Portable%20Dumper][this link]].
** Usage
Once =dotspacemacs-enable-emacs-pdumper= is set to =t= and
=dotspacemacs-emacs-pdumper-executable-file= is set to a valid file path to an
Emacs 27 executable, Emacs will be redumped automatically each time the layer
list changes or the =--force-dump= parameter is passed on the command line.
To use the created dump file, open a shell in the =src= directory of the cloned
Emacs source and type:
#+BEGIN_SRC shell
./emacs --dump-file=/Users/sylvain/.emacs.d/.cache/dumps/spacemacs.pdmp &
=spacemacs.pdmp= corresponds to the value of the variable
A forced dump is executed whenever the configuration is reloaded with
~SPC f e R~. If a dump is already running then it is cancelled and a new one is
started. Check the buffer =*spacemacs-dumper*= to see the progress of the
After you can generate a portable dumper of your Emacs and you can start that
pdumper file successfully, you can alias the way you usually start Emacs to the
#+BEGIN_SRC shell
./emacs --dump-file=/Users/sylvain/.emacs.d/.cache/dumps/spacemacs.pdmp &


@ -0,0 +1,542 @@ @@ -0,0 +1,542 @@
<a name="top" id="fork-destination-box"></a>
<a href="http://spacemacs.org"><img src="https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg" alt="Made with Spacemacs"></a><a href="http://www.twitter.com/spacemacs"><img src="http://i.imgur.com/tXSoThF.png" alt="Twitter" align="right"></a><br>
- - -
<p align="center"><img src="/doc/img/title2.png" alt="Spacemacs"/></p>
<p align="center">
<b><a href="http://spacemacs.org/doc/DOCUMENTATION#core-pillars">philosophy</a></b>
<b><a href="http://spacemacs.org/doc/DOCUMENTATION#who-can-benefit-from-this">for whom?</a></b>
<b><a href="http://spacemacs.org/doc/DOCUMENTATION#screenshots">screenshots</a></b>
<b><a href="http://spacemacs.org/doc/DOCUMENTATION.html">documentation</a></b>
<b><a href="CONTRIBUTING.org">contribute</a></b>
<b><a href="http://spacemacs.org/doc/DOCUMENTATION#achievements">achievements</a></b>
<b><a href="http://spacemacs.org/doc/FAQ">FAQ</a></b>
- - -
<p align="center">
<a href="https://gitter.im/syl20bnr/spacemacs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge"><img src="https://badges.gitter.im/Join Chat.svg" alt="Gitter"></a>
<a href="https://circleci.com/gh/syl20bnr/spacemacs/tree/develop"><img src="https://circleci.com/gh/syl20bnr/spacemacs/tree/develop.svg?style=shield" alt="Build Status"></a>
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ESFVNPKP4Y742"><img src="https://img.shields.io/badge/Paypal-Donate-blue.svg" alt="Donate"></a>
<a href="https://shop.spreadshirt.com/spacemacs-shop"><img src="https://img.shields.io/badge/Shop-T--Shirts-blue.svg" alt="Donate"></a>
<a href="http://www.slant.co/topics/12/~what-are-the-best-programming-text-editors"><img src="https://img.shields.io/badge/Slant-Recommend-ff69b4.svg" alt="Recommend it"></a>
- - -
**Quick Install:**
This assumes you don't have an existing Emacs setup and want to run Spacemacs as
your config. If you do have one, look at
the [full installation instructions](#install) for other options.
* For stable releases:
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
* For development updates and participation:
git clone -b develop https://github.com/syl20bnr/spacemacs ~/.emacs.d
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-generate-toc again -->
**Table of Contents**
- [Introduction](#introduction)
- [Features](#features)
- [Documentation](#documentation)
- [Getting Help](#getting-help)
- [Prerequisites](#prerequisites)
- [Emacs](#emacs)
- [Linux distros](#linux-distros)
- [macOS](#macos)
- [Windows](#windows)
- [Install](#install)
- [Default installation](#default-installation)
- [Alternative installations](#alternative-installations)
- [Modify HOME environment variable](#modify-home-environment-variable)
- [Modify spacemacs-start-directory variable](#modify-spacemacs-start-directory-variable)
- [Spacemacs logo](#spacemacs-logo)
- [Update](#update)
- [Automatic update (on master branch)](#automatic-update-on-master-branch)
- [Manual update (on master branch)](#manual-update-on-master-branch)
- [On develop branch](#on-develop-branch)
- [Revert to a specific version](#revert-to-a-specific-version)
- [Quotes](#quotes)
- [Contributions](#contributions)
- [Communities](#communities)
- [Spacemacs Everywhere](#spacemacs-everywhere)
- [License](#license)
- [Supporting Spacemacs](#supporting-spacemacs)
<!-- markdown-toc end -->
# Introduction
Spacemacs is a new way of experiencing Emacs -- it's a sophisticated and
polished set-up, focused on ergonomics, mnemonics and consistency.
Just clone and launch it, then press the space bar to explore the interactive
list of carefully-chosen key bindings. You can also press the home buffer's
`[?]` button for some great first key bindings to try.
Spacemacs can be used naturally by both Emacs and Vim users -- you can even mix
the two editing styles. Being able to quickly switch between input styles, makes
Spacemacs a great tool for pair-programming.
Spacemacs is currently in beta, and any contributions are very welcome.
# Features
- **Great documentation:** access the Spacemacs documentation with
<kbd>SPC h SPC</kbd>.
- **Beautiful GUI:** you'll love the distraction free UI and its functional
- **Excellent ergonomics:** all the key bindings are accessible by pressing the
<kbd>space bar</kbd> or <kbd>alt-m</kbd>.
- **Mnemonic key bindings:** commands have mnemonic prefixes like
<kbd>SPC b</kbd> for all the buffer commands or <kbd>SPC p</kbd> for the project
- **Batteries included:** discover hundreds of ready-to-use packages nicely
organised in configuration layers following a set of
# Documentation
Comprehensive documentation is available for each layer by pressing
<kbd>SPC h SPC</kbd>.
You can also check the [general documentation][DOCUMENTATION.org],
[quick start guide][QUICK_START.org] and the [FAQ][FAQ.org].
# Getting Help
If you need help, ask your question in the [Gitter Chat][] and a member of the
community will help you out.
If you prefer IRC, connect to the [Gitter Chat IRC server][] and join the
`#syl20bnr/spacemacs` channel.
# Prerequisites
Spacemacs is an extension of a popular text editor called Emacs. Thus you need
to first install base Emacs and then download the Spacemacs extension files with
## Emacs
Spacemacs requires Emacs 25.1 or above. The development version of Emacs is not
*officially* supported, but it should nevertheless be expected to work.
Some modes require third-party tools that you'll have to install via your
favorite package manager.
### Linux distros
Install the `emacs` package with your linux distributions package manager.
Do not install the `xemacs` package. It's not supported by Spacemacs. XEmacs is
an old fork of Emacs. The X in its name is unrelated to X11.
Emacs has graphical support.
**Note:** The Ubuntu LTS 12.04 and 14.04 repositories only have Emacs version
24.3 available. Version 25.1 or greater needs to be [built from source][build_source].
This might also be true for other linux distributions.
### macOS
#### Install emacs
##### Using emacs-plus
brew tap d12frosted/emacs-plus
brew install emacs-plus
brew link emacs-plus
##### Using emacs-mac
brew tap railwaycat/emacsmacport
brew install emacs-mac
brew link emacs-mac
##### Using cask
Homebrew now recommends to use the cask version with the following message:
"Please try the Cask for a better-supported Cocoa version". To install the cask
brew cask install emacs
This installs a pre-built package from https://emacsformacosx.com/
##### Other ways
If you're not comfortable with the ways mentioned above, then
[EmacsWiki](https://www.emacswiki.org/emacs/EmacsForMacOS#toc12) lists down
a few ways to install Emacs for macOS.
#### Install Source Code Pro font
Once Emacs is installed, run the following commands in the terminal to install
the default Source Code Pro font:
brew tap homebrew/cask-fonts
brew cask install font-source-code-pro
#### Install Spacemacs
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
After completing the Spacemacs [install process](#install), then it's also
recommended to add the [osx layer][] to your [dotfile][]. Installation
instructions are available in the documentation for the [osx layer][].
Depending on the installed version of GnuTLS securely installing emacs
packages may fail. In this case it is possible to install using
`emacs --insecure`. However be aware that this means your packages will
be transferred using http, use at your own risk.
You might also have some issues when doing some search on your projects, you
probably want to install grep through homebrew with default names:
$ brew install grep --with-default-names
### Windows
Download the official 64-bit (x86_64) stable builds from the [GNU FTP][emacs-for-windows].
You'll also need `gzip` and put it in your path, to download it go to the
[GNUWin32 project page][gzip-for-windows]
Be sure to declare an environment variable named `HOME` that's pointing to your
user directory `C:\Users\<username>`. Then you can clone Spacemacs into that
If the following error occurs after starting Emacs:
The directory ~/.emacs.d/server is unsafe
Fix it by changing the owner of the directory `~/.emacs.d/server`:
- from Properties select the Tab “Security”,
- select the button “Advanced”,