Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/novoid/dot-emacs
My GNU/Emacs configuration
https://github.com/novoid/dot-emacs
configuration emacs personal
Last synced: 1 day ago
JSON representation
My GNU/Emacs configuration
- Host: GitHub
- URL: https://github.com/novoid/dot-emacs
- Owner: novoid
- License: other
- Created: 2013-01-20T12:23:13.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2024-03-09T11:40:14.000Z (8 months ago)
- Last Synced: 2024-03-09T12:35:37.578Z (8 months ago)
- Topics: configuration, emacs, personal
- Language: Emacs Lisp
- Size: 1.75 MB
- Stars: 177
- Watchers: 14
- Forks: 25
- Open Issues: 0
-
Metadata Files:
- Readme: README.org
- License: license.txt
Awesome Lists containing this project
README
* My GNU Emacs Configuration
** What To Expect
I am using:
- Org mode (my main Emacs focus)
- Python (as a hobby programmer, not a professional)
- Cygwin/[[http://babun.github.io/][Babun]] on Windows
- Spell checking
- Flychecking
- Templating: Yasnippet/yankpad
- File Management: dired
- Typesetting: LaTeX (not active any more)As of 2020-10-15, I am using following hosts with Emacs:
| Operating System | Emacs version |
|------------------------------+-------------------|
| Debian GNU/Linux 10 (buster) | GNU Emacs 27.0.50 |
| Xubuntu GNU/Linux 20.04 LTS | GNU Emacs 26.3 |
| Xubuntu GNU/Linux 20.04 LTS | GNU Emacs 28.0.50 |All are running the same configuration. Some settings are only used on
specific platforms though.I once was using OS X on my personal computer but this is history.
Thankfully. Corresponding OS X specific settings are for archiving
purposes.With my current employer, I'm able to use GNU/Linux also for business.
Therefore, I don't have to use Windows at the moment. Thankfully.
Corresponding OS X specific settings are for archiving purposes.** Best Navigation Experience
For navigating through my =config.org= file, please do open it in
Emacs so that you are able to collapse and expand its Org mode
headings.** Literate Configuration: My Tangling Approach
As of 2017-05, I moved my Emacs configuration format from [[http://orgmode.org/manual/Orgstruct-mode.html][OrgStruct
mode]] to Org-mode babel + tangle. Originally, I found this process on
http://www.holgerschurig.de/en/emacs-init-tangle/ However, I adapted
its code and write additional features. I also simplified the file
structure, threw away old stuff and added tons of comments for my
configuration.Now, my Emacs configuration is in a file named =config.org=. My
=init.el= got some nifty Elisp code that converts/tangles (only) the
Elisp blocks into the =config.el=. This generated file is interpreted
by my GNU/Emacs on startup.Please do read [[http://karl-voit.at/2017/06/03/emacs-org][my blog article on how tangling of this Emacs
configuration works]].Despite the size of my configuration, *tangling takes only a fraction
of a second* and *automatically happens on two occasions*:1. When I manually save the =config.org= file.
2. When Emacs starts and notices that =config.org= is newer than =config.el=.This way, there is *no unnecessary tangling process*.
This method is great in terms of speed and effort. However, I can't
follow any advanced literate programming aspect such as re-using a
snippet multiple times or changing the order of the snippets.I also added some output functionality to the tangling method. This
results in helpful lines in =*Messages*= like:#+BEGIN_EXAMPLE
[...]
config • my-frame-is-landscape() my-frame-is-portrait() …
The frame is in landscape mode
config • Default split direction according to frame aspect ratio …
config • no-littering …
config • Logging of mode versions …
Wrote /home/vk/.emacs.d/var/log/floyd.txt
Added to /home/vk/.emacs.d/var/log/floyd.txt
config • my-load-local-el() …
config • Server mode …
config • my-system-is-FOOBAR …
config • System-specific paths …
config • Cygwin Paths (Windows) …
config • my-binary-found(binaryname) …
config • my-binary-not-found-list and my-eval-if-binary-or-warn() …
config • Test queries …
»»» I could not locate the PATH-binary for: chrome
config • System-specific browse-url-browser …
»»» I could not locate the PATH-binary for: google-chrome
config • Styling …
config • Themes …
[...]
#+END_EXAMPLEUpdate 2022-06-14: If I would follow a more standard way of tangling
the el file from the org file, I'd probably take a look at
https://github.com/yilkalargaw/org-auto-tangle which is also features
on this short video demo: https://www.youtube.com/watch?v=D3FzMPZm7vY
(13min).** In Case You Want to Use My Configuration
In short: *don't*.
Not because I don't like you to have my configuration. The reason is
furthermore that it is not easy to accomplish the setup process. This
is because I left out some parts like the ~contrib~ directory as
explained above. Some of my settings are host-specific and/or depend
on path variables or external tools.You should only adopt Elisp code you need and understand to avoid
[[https://www.emacswiki.org/emacs/DotEmacsBankruptcy][Emacs Bankruptcy]].Therefore: please feel free to look up certain tricks and functions
and add it to your configuration. But don't use my repository as is
and expect it to run on your host.** Stuff Which Is Not Contained in the Git Repository
Please take a look at my ~.gitignore~ file that contains some things I
did *not* add to this git repository for a variety of reasons but are
necessary for my configuration. Most important here are the
directories ~elpa~ and ~contrib~. The latter one holds a number of
external packages:#+BEGIN_SRC sh :results output :wrap example
echo "Last update of this list: $(date)"
echo "------------------------------------------------------"
ls -1 contrib | grep -v 2del | grep -v tar
#+END_SRC: Last update of this list: Do 15 Okt 2020 13:07:24 CEST
: ------------------------------------------------------
: auto-dictionary-mode
: browse-kill-ring.el
: command-log-mode
: cygwin-mount.el
: date2name.el
: define-word
: dired-details.el
: dired-hacks
: dired-plus
: dired-recent.el
: dired-show-readme
: edit-server.el
: elpygen
: emacs-emojify
: emacs-git-gutter
: emacs-which-key
: ews-orgmode
: explain-pause-mode
: eyebrowse
: filetags.el
: goto-chg.el
: helm-org-contacts
: hideshow-orgmode
: macrostep
: message-outlook.el
: move-text
: no-littering
: ob-restclient.el
: orgaggregate
: org.el
: org-fancy-priorities
: org-import-calendar.el
: org-linker
: org-linker-edna
: org-mind-map
: org-mind-map_OLD
: org-mode
: org-notmuch.el
: org-protocol-capture-html
: org-super-agenda
: org-wunderlist
: orly
: outlookedit.el
: outshine
: ov
: ox-clip
: ox-pandoc
: ox-rst
: ox-slack
: pdf-mode
: pdf-view-restore
: plantuml-mode
: pylookup
: raml-mode
: s.el
: setup-cygwin.el
: slime-volleyball
: sphinx-doc.el
: sunrise-commander
: synonyms
: vcard-mode
: wc.elSome of those packages were added only for testing purpose. Most of
them are added to my configuration permanently.** Comments on ELPA, prelude, org-30000101
After migrating most of the package management to =use-package=, there
are much less entries in the folder =contrib= and there is a new
folder called =elpa=. Of course, I did not include elpa-packages in
this git repository.I also tested [[https://github.com/bbatsov/prelude][Emacs prelude]] for a couple of days. However, I was not
very happy about it due to performance issues, unwanted behavior, and
the feeling of losing control.Please note that ~org-30000101~ is a [[http://article.gmane.org/gmane.emacs.orgmode/104548/][manually created and installed
pseudo-package]] to prevent the installation of Org-mode via package
manager. I am using the Org Maint version from git directly (within my
~contrib~ directory).** Useful References
- http://www.emacswiki.org/emacs/CategoryDotEmacs
- http://www.emacswiki.org/emacs/LoadPath
- ~$HOME/.emacs.d/lisp/~ seems to be quite common as directory path for
installing external packages
- However, I do prefer "contrib" instead of "lisp" because:
- my own config (outside of ~$HOME/.emacs.d/lisp/~) is LISP as well
- "lisp" does not contain the notion of "contributed from other
people/projects"** License
The code provided here is licensed under a GPL v3 license: see
=license.txt= for details. Some smaller parts from other authors but
included in my configuration might have a different license. Please
check the source - it's included in the comments.