{"id":22901324,"url":"https://github.com/mooerslab/configorg","last_synced_at":"2025-10-06T12:42:06.320Z","repository":{"id":43478749,"uuid":"490898308","full_name":"MooersLab/configorg","owner":"MooersLab","description":"Package.el dependent config.org file for Emacs","archived":false,"fork":false,"pushed_at":"2024-05-21T12:33:51.000Z","size":1281,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-31T16:23:31.351Z","etag":null,"topics":["configuration","emacs","literate-programming","org-mode"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MooersLab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-11T00:05:35.000Z","updated_at":"2025-03-22T11:06:56.000Z","dependencies_parsed_at":"2024-05-21T13:47:06.585Z","dependency_job_id":"ae5c107b-9808-4eeb-9c9a-9cd7e1410bf2","html_url":"https://github.com/MooersLab/configorg","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MooersLab%2Fconfigorg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MooersLab%2Fconfigorg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MooersLab%2Fconfigorg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MooersLab%2Fconfigorg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MooersLab","download_url":"https://codeload.github.com/MooersLab/configorg/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252983757,"owners_count":21835764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["configuration","emacs","literate-programming","org-mode"],"created_at":"2024-12-14T01:32:55.694Z","updated_at":"2025-10-06T12:42:01.284Z","avatar_url":"https://github.com/MooersLab.png","language":"Emacs Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Version](https://img.shields.io/static/v1?label=configorg\u0026message=0.2\u0026color=brightcolor)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n\n# Blaine's initialization file for Emacs\n\n## What is this?\n\nThis repo contains my defualt Emacs cofiguration file, `config.org`, that is written in org-mode.\nGitHub can render org-mode in the web browser.\nClick in the config.org file above to render it like GitHub markdown.\n\n`config.org` is a literate programming document with code blocks of elisp code flanked by prose.\nOn startup, the code is stripped out of `config.org` and written to `config.org`, which Emacs then reads to configure it.\n\n## Introduction to Emacs\n\nEmacs is a text editor primarily used to create document files and computer code source files.\nEmacs can also do other tasks like reading e-mail and browsing the web.\nThe org-mode package also supports project planning via its strong support for making lists and outlines.\nThe org-agenda package supports the scheduling of tasks and has been widely used to deploy the *Getting Things Done* (GTD) approach to time management.\nThe org-roam package is popular for knowledge management using the zettelkasten method of note-taking.\n\nYou can also read e-mail and RSS feeds and browse the web from Emacs.\nSome people spend all day working in Emacs.\nYou can do so much in Emacs that it has been likened to an operating system.\n\n## Emacs is highly configurable\n\nEmacs is the ultimate configurable text editor.\nThe Emacs Lisp (elisp)language allows users to develop highly customized editors.\nThe customization is in the form of settings and functions.\nOften, related settings and functions are bundled into packages.\n\nThe configuring process can be an infinitely deep rabbit hole.\nThe process of configuring Emacs is never finished, only momentarily paused.\n\nEmacs was designed to be a software toolkit for building extensions to the base text editor.\nThese applications are written in elisp and are shared as packages. \nELisp is a variant of LISP, which stands for list processing.\nLISP was the second major programming language developed shortly after the first version of FORTRAN in the 1950s.\nElisp descended from MacLisp (which is not related to Mac computers) in the 1970s and emerged about the same time as common lisp.\n\nElisp has been customized for programming text editors like Emacs.\nMost of the the Emacs code base is written in elisp with a small percentage written in C for speed.\nThe elisp compiler cannot handle parallel processing, so elisp is unsuitable as a modern multipurpose programming language.\nHowever, the core Emacs developers and package developers have extensively optimized the performance of elisp.\nAlthough you can run small programs written in elisp outside of Emacs, you may be better off using Clojure, Common Lisp, Racket, or Scheme for general programming.\nLearning LISP is a common way to become a better programmer in general.\n\n\n## Text editing\n\nEmacs has highly developed support for editing plain text, LaTeX, asciidoc, markdown, RestructuredText, HTML, org-mode, and other kinds of text files.\nThis support includes autocompletion, access to Grammarly for several document types and snippets, and access to several [Language Server Protocols, LSPs](https://microsoft.github.io/language-server-protocol/).\n\nText file editing can be divided into two eras: before LSPs and after LSPs.\nLSPs are a central feature of modern Integrated Development Environments (IDEs).\nThere is also support for managing citations via BibTex and reading PDFs and ebooks inside of Emacs.\n\n## Advice for Beginners\n\nUnfortunately, premature configuration of Emacs is a common source of premature frustration for beginning users of Emacs.\nIt is best to use the GUI version of Emacs first and use the pull-down menus to do productive writing in Emacs as soon as possible to avoid getting frustrated.\nThe value of the pull-down menus is underemphasized, with new users prematurely directed to using the keyboard shortcuts.\nHowever, the pull-down menus have many of the capabilities found in the pulldowns of other text editors.\nAfter you are comfortable with basic writing and editing tasks, you can start learning keyboard shortcuts or key bindings. \nThen start to configure your Emacs profile file. \n\n## Editing Textbox on webpages inside Emacs\n\nThe edit-server package enables you to edit text areas in webpages using Emacs.\nLikewise, the atomic-chrome enables you to do so via the GhostText plugin for Chrome.\nYou click on the ghost icon in your browser's toolbar to send the text to Emacs.\nYou can then edit the text with the full power of Emacs's editing features.\nThe changed text is updated immediately in the text area on the webpage.\nThis capability works with Overleaf, the website for editing LaTeX documents on the web.\nIt also works in the code cells of Jupyter notebooks.\nI talked about this [topic](https://github.com/MooersLab/DSW22ghosttext) in July 2022.\n*Atomic-chrome* can be configured to enter the *latex-mode* whenever invoked from Overleaf.\n\n\n## Programming in Emacs\n\nEmacs is also a software-integrated development environment (IDE).\nIt supports syntax highlighting, code snippets, and autocompletion for many programming languages.\n\nEmacs also supports several approaches to literate programming.\nOne of the most developed approaches is in org-mode where the `emacs-jupyter` package enables you to tap into your Jupyter Notebook kernels to access scores of programming languages.\nYou can switch kernels between code blocks inside one org document and thereby do polyglot literate programming.\n\nThe package *emacs-jupyter* package can be hard to configure and use correctly.\nSimilar capabilities are available from *org-babel* via *ob-jupyter*.\nJust list `jupyter` last in the list of org-babel languages.\nUse `jupyter` for the language in the code block header and then select the appropriate Jupyter kernel to select the language you want to use.\n\n\n![Figure 1](https://github.com/MooersLab/configorg/blob/main/emacs-learning-curve.jpg)\n\nEmacs is a configurable workspace in addition to being an editor.\nYou can do most of your computing tasks inside of Emacs.\nEmacs is almost an operating system.\nYou can replicate your Emacs configuration on Windows, Mac, Linux, and BSD to maintain a uniform working environment regardless of the underlying operating system.\n\n## Emacs 29.0.5\n\nSince January 2022, it has the startup flag `--init-directory` that enables easy switching between start-up profiles.\nThis has displaced my use of chemacs, which is described in the section below.\nIf you use an earlier version of Emacs, you can use this `config.org` file with *chemacs2*.\n\nI use bash aliases to start *Emacs* with specific profiles and with or without the /--init-debug/ flag.\nFor example, I enter `eid` to launch Emacs version 29.0.5 with the default profile (i.e., the profile tangled from the config.org file).\nThese are defined in a `.bashAppAliases` file that I source from my `.zshenv` file which is  in turn sourced from my `.zshrc` startup file.\n\n```bash\nalias eib='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/emacs-brave'\nalias eibd='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/emacs-brave --debug-init'\n\nalias eic='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/crafted-emacs'\nalias eicd='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/crafted-emac --debug-init'\n\nalias eid='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/.emacs.default'\nalias eidd='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/.emacs.default --debug-init'\n\nalias eidm='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/doom-emacs'\nalias eidmd='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/doom-emac --debug-init'\n\nalias eie='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/ess-emacs'\nalias eied='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/ess-emacs --debug-init'\n\nalias eil='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/latex-emacs'\nalias eild='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/latex-emacs --debug-init'\n\nalias eis='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/scimax'\nalias eisd='/Applications/Emacs29.0.5.app/Contents/MacOS/Emacs --init-directory ~/scimax --debug-init'\n```\n\n\n\n## My fling with chemacs\n\nI changed my setup in January 2022.\nI switched to using the *chemacs.el* package to swap emacs configurations on the fly.\nI set up aliases to commands to use alternate configurations.\nFor example, I enter the alias *e29r* to fire up Emacs 29 with Dave Wilson's rational-emacs configuration.\nThe `e29b` alias is used to fire up Emacs 29 with the brave-emacs configuration from the GitHub site of the Emacs configuration recommended by [[https://github.com/flyingmachine/emacs-for-clojure/][Daniel Higginbotham]], the author of [[https://www.braveclojure.com/][*Clojure for the Brave and True*]].\nThe `e29m` alias fires up Emacs29 with the `mar30-emacs` configuration, which rebuilds my default configuration using the files pulled from GitHub.\nThe `mar30-emacs` configuration starts without errors and works better than before.\nSome of the prior package configurations have been commented out.\nI will fix them when time permits.\n\nThe current *init.el* file is configured with the current default Emacs directory as being *~/mar30-emacs*.\nYou will \nIn my home directory, I stored my aliases in the hidden file *.bashAppAliases*.\nThey fire up GNU Emacs with the GUI.\nChange the aliases to start Emacs in the terminal by adding the ~-nw~ flag.\nI source this file from my *.zshenv* file.:\n\n```bash\nalias e29='/Applications/Emacs.app/Contents/MacOS/Emacs'\nalias e29b='/Applications/Emacs.app/Contents/MacOS/Emacs --with-profile brave'\nalias e29m='/Applications/Emacs.app/Contents/MacOS/Emacs --with-profile mar30'\nalias e29r='/Applications/Emacs.app/Contents/MacOS/Emacs --with-profile rational'\n```\n\nI surrendered the */Users/blaine/.emacs.d* directory to */chemacs.el/*. \n\n\nI store the profiles for the alternate Emacs configurations in *~/.emacs-profiles.el*, which has the following elisp content:\n\n```bash\n((\"default\" . ((user-emacs-directory . \"~/.emacs.default\")))\n (\"brave\" . ((user-emacs-directory . \"~/.brave-emacs\")))\n (\"mar30\" . ((user-emacs-directory . \"~/.mar30-emacs\")))\n (\"rational\" . ((user-emacs-directory . \"~/.rational-emacs\")))) \n```\n\nI store of my copy of this repository in */Users/blaine/.emacs.default/configorg*.\nI then made an bash alias called *gitpull* that pulls from the GitHub repo and copies the new version to the directory above.\nThis copy is the file that Emacs reads.\n\n```bash\ngitpull='git pull \u0026\u0026 cp config.org ../.'\n```\n\nI also made an alias to switch to this folder when needed:\n\n```bash\nghcon='cd ~/.emacs.default/ghconfigorg'\n```\n\n## Keep it simple\n\nIn July 2021, I streamlined my configuration by removing about half of the context.\nI found that moving all of my workflows to Emacs was too big of a step.\nI am not quite advanced of an Emacs user to do everything Emacs.\n\nI am reverting to several of my prior workflows with other software that worked well for me.\nFor example, I maintain a diary in an Overleaf in LaTeX.\nI used the journal feature of org-mode for several months.\nI found myself converting the org entries to LaTeX and pasting them into Overleaf every day.\nThis was too much extra work.\nIf it is not broken, do not fix it.\n\nI moved the inventory of my projects and folders from proj.org file to Google Sheets.\nI accidentally deleted too many subtrees in the proj.org file that I used to track my projects.\nI could have solved this problem by keeping proj.org under version control with git.\nI am now using the Google Sheets workbook to look up projects and tasks.org to work with projects in the agenda.\nI no longer need proj.org.\n\nI am trying to limit my use *Emacs* to do the following activities:\n\n- Editing LaTeX, markdown, and org files with Grammarly running\n- Read epub and PDF documents and capture notes as I read\n- Time management with org-agenda\n- Literate programming in org\n- Exploring Clojure with using cider or the simpler *M-x inf-clojure* \n- Using Emacs as an IDE to develop code for the following languages:\n    - C++\n    - C\n    - Clojure\n    - Common Lisp\n    - csharp\n    - fsharp\n    - HTML\n    - JavaScript\n    - Python\n    - R\n    - scala\n    - Wolfram Language\n- Connecting projects with org-roam\n- Using ido-mode and dired for directory navigation \n- Using Org-ref version 3 to insert citations and to manage BibTeX file \n- Access remote computers with tramp\n- Use *term* package to run Macport updates \n- Use of *elfeed* to do literature searches\n- \nOnce I have mastered Emacs for the above activities, I will consider expanding my use to do the following:\n\n- advance my use of org-agenda\n- expand my use of other features of org\n- reading e-mail inside Emacs\n- use the time tracking feature with org-capture\n- integrate org capture with manual effort tracking\n- figure out how to generative time reports from org\n- develop a pipeline from Google Sheets projects to prog.org\n- make more regular use of the Pomodoro method\n- figure out why Magit is so great\n- master hydra\n\n## Editorial on org-roam \n\nOrg-roam is an exciting project that supports the building of electronic zettelkastens in Emacs using org files as the individual files of the card catalog.\nA zettelkasten, or card catalog, is an approach to knowledge management that political scientist Dr. Niklas Luhmann deployed to good effect just before the personal computer era.\nThe electronic enables making links between entries and powerful searching.\nThe paper version may be more laborious to maintain but be more effective at generating new connections as you fumble through the card catalog.\nThe experiment has yet to be done to establish which approach is most effective.\nI suspect that both forms require many hours of usage per day to obtain their benefit.\n\nI have been using (abusing) my zettelkasten by using it as a massive mindmap.\nI am a big fan of mindmaps and the *iThoughtsX.app*.\nI find mindmaps to be very stimulating and very effective for generating new ideas.\n\nMy zettelkasten is a hierarchical tree that organizes my interests and projects.\nIt could be thought of as a mindmap of mindmaps.\nThe *org-roam-ui* enables exploration of the tree in the browser.\nYou can focus in one subtree at a time.\nIt is very cool.\n\nI think that this tree of trees approach might be the best use of org-roam for me. \nI have not tried building a mindmap of all of my mindmaps *iThoughtsX*.\nI suppose that it would be too unwieldy.\n\nI see the potential of zettelkastens, but no one has conducted controlled experiments to test whether they really enhance productivity.\nWithout such experimental data, the zettelkasten movement is running on blind faith.\nThe same kind of criticism can be made of Emacs.\n\n\n\n## Skill levels\n\nIn the following text, I refer to the following five levels of skill acquisition in the [Dreyfus and Dreyfus model](http://www.dtic.mil/cgi-bin/GetTRDoc?AD=ADA084551\u0026Location=U2\u0026doc=GetTRDoc.pdf).\n\n- novice\n- advanced beginner\n- competent user\n- proficient user\n- expert\n\nThese levels have been very thoughtfully interpreted by Trey Jackson in terms of [Emacs skills](https://softwareengineering.stackexchange.com/questions/38131/emacs-and-self-reinforcing-performance). \n\n```bibtex\n{@TechReport{Dreyfus1980AFiveStageModelOfTheMentalActivitiesInvolvedInDirectedSkillAcquisition,\n  author      = {Dreyfus, Stuart E and Dreyfus, Hubert L},\n  title       = {A five-stage model of the mental activities involved in directed skill acquisition},\n  institution = {DTIC Document},\n  year        = {1980},\n  annote      = {The famous Dreyfus and Dreyfus model of expertise. },\n}\n```\n\n\n## My learning Emacs spiral\n\nMy skill levels with Emacs and Vim are in the advanced beginner to competent user range.\nI am not a professional programmer; I am an academic scientist.\nI am a competent user of bash, Python, R, LaTeX, and Gnuplot (one of the most badly underappreciated plotting programs available).\n\nI became competent with the basic Vim keybindings before diving into Emacs.\nThe ability to use Vim keybindings via evil-mode eased adopting Emacs.\nHowever, mastering the Vim key bindings was two weeks of hell.\nThe Emacs keybindings are easier to pick up if you go slow and easy.\nI have stopped using evil-mode and started using the Emacs key bindings. \nI try to use Vim several times a week to keep up my Vim skills.\n\nYou can do a lot in your early use of Emacs by using the intuitive pull-down menus.\nYou can start using Emacs without remembering any key bindings.\nMost tutorials start with the key bindings; they should really start with the pull-down menus.\n\nMy study of Emacs has been discontinuous due to the demands of my professional life.\nI have to relearn infrequently used commands due to these discontinuities. \nI have made a series of [quizzes](https://github.com/MooersLab/qemacs) to improve my recall of the commands. \n\nI want to take these quizzes on spaced intervals, but I have lacked the time and energy to do so.\nNonetheless, taking the relevant quiz before using some of the related features in Emacs is beneficial.\nThe quiz takes 5-10 minutes and refreshes the recall of the relevant commands.\nTaking the quiz is a faster and more effective way to refresh your recall of the commands than searching the World Wide Web, which takes much longer than most people will admit.\n\nI also found it less frustrating to start with bare-bones GNU Emacs than with pre-configured alternatives (e.g., Doom, Spacemacs, SciMax) loaded with advanced features.\nSpacemacs might be best suited for advanced Vim users and other professional developers familiar with similar advanced features in IDEs and expect these advanced features.\nAfter I master Emacs Lisp, I plan to study the preconfigured variants for ideas about how to improve my configuration for GNU Emacs.\n\nI have bounced off Emacs several times over the past three years, but I have used Emacs every day for the past twelve months.\nI want to make Emacs my primary editor because I can configure it into an almost complete work environment that reduces context switching.\nHowever, building that environment seems to be a perpetual work in progress.\nIt is the ultimate editor in that no one is more highly configurable.\nYou will never want to switch to another editor, although it may be more efficient to do so for a short while with specialized IDEs for certain kinds of programming tasks.\n\nYou can do a lot with the base installation of Emacs, but you will invariably be lured into adding packages to extend It.\nThere are over 5,000 packages available for Emacs. \nMany have overlapping functionality and objectives.\nIf there are only 2,000 unique objectives, there are 2,000 reasons to use Emacs.\nLimitations on your mental bandwidth will constrain you to use about a tenth of what is available.\n\nWhen starting with Emacs, I recommend limiting yourself to one feature you can use in your daily workflow.\nBy meeting a need in your life with Emacs, you will start to build a commitment to learning more.\nYour needs are unique to you, so you will have to design your own learning spiral.\n\nFor example, a good place to start might be using it to write simple AAAreadme.txt or AAAreadme.md files for coding projects.\nOnce you become comfortable with the basic editing tasks, you can start writing org documents.\nOrg is a supercharged markdown variant that recognizes LaTeX, so it is easy to overcome the limitations of most markdown variants.\nAn org file can be exported to a wide variety of document types.\nThen, you can start using one of the major modes for writing computer programs, or, if you are not a programmer, you might start to explore using an org-agenda to organize your life.\n\nA hard lesson that I keep relearning is not to overdo it by trying to move all of my workflows into Emacs.\nJust move one workflow at a time when it makes sense to do so.\nThe features that get you hooked may not be the ones you anticipate.\n\n\n\n## .emacs or init.el or config.org\n\nThe emacs initialization file contains the settings for parameters for various packages and functions.\nIt is written in Emacs Lisp or elisp.\nEmacs has to read these settings to load the plugins or packages that you want to use.\nYou can use Emacs without a configuration file and the extra capabilities the packages provide, but it will be a less powerful experience.\n\nYou can store your configuration in an *.emacs* file that resides in the top directory.\nEmacs reads this startup file.\nThe home directory is a convenient location to access the file quickly for editing.\nThe hiding of the file by starting the file name with a period is to hinder you from deleting the file by accident.\nI keep this file under version control with git.\n\nYou can also store your configuration in an init.el file in the *~/.emacs.d* directory.\nThe format and content are identical to the *.emacs* file.\n\nAnother approach from Derek Taylor is to have some key settings from the package repositories in the `init.el` file \nand then place the remaining settings in a *config.org* file.\nThe *config.org* file is an org-mode file with the settings in elisp code blocks.\nYou can annotate the file with explanatory text outside of the code blocks. \nThe explanatory text can contain special instructions about the installation of the package\nor it can highlight important keybindings.\nYou can add tables and even embed images.\n\nThe elisp code in the code blocks is extracted (tangled) into a *config.el* file when Emacs starts up.\nThe code enabling this magic resides in the *init.el* file.\nThe *init.el* file must be present with the *config.org* file in the *.emacs.d* directory. \nI put the *config.org* and *init.el* files under version control because I occasionally break them.\n\nMy main source of discouragement with Emacs was the frequent breaking of my *.emacs* or *init.el* file.\nThis usually happens after pasting settings copied from someone else's configuration file without fully understanding the settings.\nThis is a really bad idea for novices, but it is very tempting to do so.\n\nStoring most of the settings in code blocks in the *config.org* file reduces the temptation to copy large code blocks from someone else's config file.\nThis, in turn, dramatically reduced the frequency of the breaks and thus reduced my frustration caused by these breaks.\n\n\n## Advantages of the config.org file\n\nUsing the org file for the configuration has at least four advantages.\n\nFirst, the settings are in elisp code blocks.\nYou store comments and notes in the main text outside the code blocks.\n\nSecond, the org-mode file allows the hierarchical organization of the code blocks into sections and subsections.\nThe sections can be folded while editing the file. \nThe entire document can be visible in one screen window when all sections are folded. \n\nThird, the org file is automatically rendered nicely by GitHub.\nThe preview on GitHub also renders the org file, so you can check the beautifully rendered version as you edit it.\n\nFourth, I have an easier time spotting errors in the rendered version of the org file.\n\n## Emacs tangles on startup\n\nOn startup, Emacs strips out (tangles) the emacs-lisp code and writes it to a *config.el* file. \nThis literate programming process is called *tangling*. \nThe *config.el* file is the file that Emacs uses for its configuration. \nThe *config.el* file will be written to your Emacs directory, (aka *~/.emacs.d*). \n\nYou still need some settings in your `init.el` file including one that calls *config.org*.\nI used a function to do so. \nI obtained this function from Karl Voit. \nThis function is supposed to load the code chunks more rapidly. \n\nI added the DISABLED tag to some code chunks not to load the code to save time. \nMy *config.org* file is now over 2700 lines long.\nMy *config.el* file is about 1000 lines long.\nEmacs takes 3-5 seconds to load.\n\n\n## Instant access to Emacs via the emacsclient\n\nFor instant access to Emacs, launch the emacsclient as a daemon and tap into this daemon.\nThis procedure is outlined in the [documentation](https://www.emacswiki.org/emacs/EmacsClient).\nI currently do not use the daemon and just keep Emacs open for days on end.\n\nFirst add, the following to the `config.org` file:\n\n```elisp\n(server-start)\n```\n\nNext, start GNU Emacs version 29 in the GUI using                               \n\n```bash\n/Applications/Emacs.app/Contents/MacOS/Emacs --daemon 2\u003e\u00261 \u003c ~/emacsclient.log \u0026\n```\nYour `config.org` gets tangled at the start of the daemon.\nIf you edit the `config.org` file, you may need to restart the daemon before your edits can take effect.\n\nI added the following settings to my *.zshrc* file so that I could use the GUI when launching Emacs.\nSet the first option in line two to *-t* to run Emacs in the terminal.\n\n```bash\nexport ALTERNATE_EDITOR=\"\"\nexport EDITOR=\"emacsclient -c\"  # $EDITOR opens in terminal\nexport VISUAL=\"emacsclient -c -a /Applications/Emacs.app/Contents/MacOS/Emacs\" # $VISUAL opens in GUI mode\n```\n\nI made an alias called ec29 for emacsclient for version 29.\n\n```bash\nalias e29c=\"echo 'Must have launched daemon with /Applications/Emacs.app/Contents/MacOS/Emacs --daemon' \u0026\u0026 emacsclient -c -a /Applications/Emacs.app/Contents/MacOS/Emacs\"\n```\n\nAfter sourcing this file containing the alias, enter *e29c \u0026* to open a frame on the running Emacs daemon.\nThis enables instant access to the GNU Emacs GUI.\n\nWhen your Emacs session is finished, close the Emacs frame with the command *C-x 5 0*.\n\nTo find the daemon, enter in the terminal:\n\n```bash\npgrep -l Emacs\n```\n\nTo kill the daemon, enter the following command in the terminal:\n\n```bash\npkill Emacs\n```\n\nTo make the daemon permanent, see the documentation for [platform specific](https://www.emacswiki.org/emacs/EmacsAsDaemon) instructions.\n\nFor Mac OSX, make the following file called `gnu.emacs.daemon.plist`: \n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \n    \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e \n \u003cplist version=\"1.0\"\u003e\n  \u003cdict\u003e \n    \u003ckey\u003eLabel\u003c/key\u003e\n    \u003cstring\u003egnu.emacs.daemon\u003c/string\u003e\n    \u003ckey\u003eProgramArguments\u003c/key\u003e\n    \u003carray\u003e\n      \u003cstring\u003e/Applications/Emacs.app/Contents/MacOS/Emacs\u003c/string\u003e\n      \u003cstring\u003e--daemon\u003c/string\u003e\n    \u003c/array\u003e\n   \u003ckey\u003eRunAtLoad\u003c/key\u003e\n   \u003ctrue/\u003e\n   \u003ckey\u003eServiceDescription\u003c/key\u003e\n   \u003cstring\u003eGnu Emacs Daemon\u003c/string\u003e\n  \u003c/dict\u003e\n\u003c/plist\u003e\n```\n\nStore this file in the following directory:\n\n```bash\n~/Library/LaunchAgents\n```\n\nLaunch the daemon with the following command.\n\n```bash\nlaunchctl load -w ~/Library/LaunchAgents/gnu.emacs.daemon.plist\n```\n\n### Server shutdown\n\nStop the Emacs daemon from within Emacs with `kill-emacs` or `save-buffers-kill-emacs` in Emacs.\nA fancier approach that queries the user about saving open buffers is to add the following to the config.org file.\n\n```bash\n;; define function to shutdown emacs server instance\n(defun server-shutdown ()\n  \"Save buffers, Quit, and Shutdown (kill) server\"\n  (interactive)\n  (save-some-buffers)\n  (kill-emacs)\n  )\n```\nUse it by entering `M-x server-shutdown`.\n\nAfter all of this trouble, I have to admit that I am not using the server very often. \nIt takes some practice to master managing the server properly and it is a bit of a hassle to shut it down and restart between updates to the configuration file.\n\n## Zsh emacs plugin\n\nThere is a *emacs* plugin for zsh that I added to my list of *oh-my-zsh* plugins in my *.zshrc*.\nI am not sure that it is doing anything.\n\n## Lazy alternative\n\nAnother approach is to leave Emacs running until the next restart of your computer.\nSome people have had Emacs sessions run for many weeks or even months.\n\n## Further learning resources\n\n### The built-in documentation\n\nEmacs has an enormous amount of documentation available in-line.\nOnce you develop the habit of using the built-in documentation, it will meet most of your needs.\nEnter *C-h ?* to see a list of all the options in the '*Metahelp buffer*'.\nYou can waste an enormous amount of time by avoiding the built-in documentation.\nAfter years of using Google to look at almost everything, developing the habit of using the built-in documentation takes some effort.\n\n**Tip:** Enter *C-h k* and select a pull-down menu option to open the corresponding documentation in a new buffer.\n\n### elfeed\n\nThis feed service contains thoughtful posts of tips that can improve your use of Emacs.\nSee the `E/elfeed' section of the config.org file.\n\n### IRC channel\n\nIRC == Internet Relay Channel. \nThese are popular with Emacs users. \nThe conversations appear in Emacs. \nThere is a beginner's channel.\n\n*ERC* is a popular *IRC* client for Emacs.\n\n### Slack RSE emacs channel (M-x research)\n\nRSE == Research Software Engineer. \nA Research Software Engineer is anyone who writes code in research labs. \nThere is an international society.\nI joined the British branch before being aware of the US-RSE, which I subsequently joined.\nThe M-x research group in the RSE slack channel meets on the first and third Tuesday of every month.\nPast presentations are posted [here](https://m-x-research.github.io/).\nIn the past year, Jen Jensen has been giving a series of lectures on functional programming in Emacs and Common Lisp.\n\n### Discord System Crafters Server\n\n\n### Emacs conferences\n\nSince the 2019 conference, the conference was virtual but also global.\nEach talk was prerecorded and then transcribed.\nEach talk has a webpage with the transcript's text, a summary of the discussion, and a link to the video.\nMost talks were short so they offer a great way to learn what is available in Emacs. \nThe transcripts and links provide gateways to deeper learning.\nOnly videos are available from the 2013 and 2015 conferences.\n\n* [Emacsconf2021](https://emacsconf.org/2021/)\n* [Emacsconf2020](https://emacsconf.org/2020/)\n* [Emacsconf2019](https://emacsconf.org/2019/)\n* [Emacsconf2015](https://emacsconf.org/2015/videos/)\n* [Emacsconf2013](https://emacsconf.org/2013/)\n\n\n### YouTube series\nThese can be useful for raising your awareness of packages that are not covered in the books below.\nHowever, the videos can be frustrating when the presenter moves too fast over the keybindings that they are using.\nIn general, a novice's return on investment may be lower than expected.\nYour time is better spent reading the books listed below and the in-line documentation.\n\nMy recommendation is to start with Kauffman's tool session.\nIt will get you going in 2-3 hours.\nThen to take your skills to the next level, I recommend the System Crafters series.\n\n* [Kauffman's tool session on Emacs, part 1](https://www.youtube.com/watch?v=HyMCzEwI4cU\u0026t=2857s)\n* [Kauffman's tool session on Emacs, part 2](https://www.youtube.com/watch?v=7ReBnH0MalQ)\n* [System Crafters (Dave Wilson)](https://www.youtube.com/c/SystemCrafters)\n* [System Crafters on Github (for better list of links to videos)](https://github.com/daviwil/emacs-from-scratch)\n* [Protesilaos (a.k.a Prot) Stavrou: Emacs mindset and Unix philosophy](https://www.youtube.com/watch?v=qTncc2lI6OI)\n* [Moral lessons from switching to Emacs](https://www.youtube.com/watch?v=gwT5PoXrLVs)\n* [Protesilaos Stavrou Playlist](https://www.youtube.com/c/ProtesilaosStavrou/videos?view=0\u0026sort=dd\u0026shelf_id=0)\n* [Andrew Tropin](https://www.youtube.com/channel/UCuj_loxODrOPxSsXDfJmpng)\n* [Xah Lee](https://www.youtube.com/channel/UCXEJNKH9I4xsoyUNN3IL96)\n* [Sacha Chua](https://www.youtube.com/channel/UClT2UAbC6j7TqOWurVhkuHQ)\n* [Emacs Elements by Raoul Comninos](https://www.youtube.com/channel/UCe5excZqMeG1CIW-YhMTCEQ)\n* [Emacs: fuzzy find files (fzf, ripgrep, Ivy+Counsel)](https://www.youtube.com/watch?v=IDkx48JwDco)\n* [An Ivy, Swiper, \u0026 Counsel tutorial for Emacs Noobs](https://www.youtube.com/watch?v=AaUlOH4GTCs\u0026t=876s)\n* [Mike Zamansky: Using Emacs Series 75 episodes from a computer science professor](https://cestlaz.github.io/stories/emacs/)\n* [Using OrgMode to organize your life, Rainer König, 40 short videos](https://www.youtube.com/watch?v=sQS06Qjnkcc\u0026list=PLVtKhBrRV_ZkPnBtt_TD1Cs9PJlU0IIdE) These are in small bits and are highly accessible.\n\n\n\n### Websites\n\n* [Prot's superduper config.org file](https://gitlab.com/protesilaos/dotfiles/-/blob/master/emacs/.emacs.d/prot-emacs.org)\n* [zsh Emacs plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/emacs)\n* [Getting Things Done with Org-mode](https://lucidmanager.org/productivity/getting-things-done-with-emacs/)\n* [Org-Mode](http://doc.norang.ca/org-mode.html)\n* [Customize zsh](https://brandon.azbill.dev/how-to-customize-your-zsh-terminal)\n\n\n### GTD in org-mode\n\n* [Org Mode - Organize Your Life In Plain Text!](http://doc.norang.ca/org-mode.html)\n* [Orgmode for GTD, Nicolas Petton](https://emacs.cafe/emacs/orgmode/gtd/2017/06/30/orgmode-gtd.html)\n\n\n### Books\n\nPerhaps because of the self-documenting nature of Emacs, there are not many books about Emacs.\nIn contrast, there are three times as many books about Clojure, a language with a smaller user base and a third of the lifespan.\n\nAnyways, several of the books listed below are available in electronic form inside Emacs.\nThe initial banner package will take you to this documentation as will the *C-h ?*.\n\nWhile traveling up the Emacs learning spiral, I would read these books in the following order. \n\n\n#### [Harley Hahn's Emacs Field Guide](http://www.harley.com/emacs/) \n\nThe author recommends reading his book before taking the in-line Emacs tutorial. \nEmacs greybeards may differ in opinion on this matter.\n\nNonetheless, Hahn wrote this book for people with no experience with computing. \nMost graduate students in the biological sciences (outside of bioinformatics and computational biology) would benefit from reading the first several chapters to better understand their computers.\n\nThe author has written several technical books about Unix-like operating systems and is an excellent writer. \nSkip this book if you are already a competent user of Emacs.\n\n#### [Learning GNU Emacs, 3rd edition, 2004](https://www.oreilly.com/library/view/learning-gnu-emacs/0596006489/) \n\nA team of five authors wrote this book. \nThe first edition appeared in 1991, so the authors had over a decade to improve the text. \nI think that it is well written.\nThe authors strove to make the book accessible. \n\nNonetheless, I suspect that readers should have some experience with Emacs.\nIf you are a novice user, internalize the content of chapters 1 and 2 as recommended by the authors. \nIf you struggle with the first two chapters, read the above book by Hahn.\n\n*Learning GNU Emacs* will move advanced beginners to the competent-user level despite lacking coverage of some currently popular packages. \nThe book is 509 pages; nonetheless, the content is not too lengthy or deep.\n\nEven though I have been using Emacs off and on for three years, I first learned about bookmarks from this book. \nBookmarks combined with the recent dashboard package make a fast way to resume unfinished work. \nThis book is useful for filling holes in your knowledge that are bound to exist if you have neglected to read the official documentation.\n\nThe third edition of the book was published before Git and Org became widely used, so the version control and outline-mode chapters are outdated. \nOf course, it also does not cover the Language Server Protocols (LSPs) that empower modern autocompletion. \nLSPs are the most beneficial advance in text editors in the past decade. \n\nAlthough the book is almost two decades old, more than 95% of the commands in it still work. \nAfter mastering the content of this book, you will understand most of the features of Emacs, and you will be well-prepared to master more advanced topics. \nI recommend reading it as a second book because only chapters 1 and 2 overlap with Hahn's book.\n\n\n#### [Org Mode Compact Guide, version 9.5, 2021, The Org Mode Developers](https://orgmode.org/guide/) \n\nOrg-mode is a significant draw to Emacs for non-programmers and programmers alike. \nOrg has many features, some of which appeal to different audiences.\n\nOrg-mode has come to dominate Emacs over the past decade, so it is easy to forget that you can be productive in Emacs without ever using Org. \nIn a sense, you can view Org as a fork on the Emacs learning spiral.\n\nThis guide is a concise introduction to the essentials of Org-Mode.\nIt is 29 pages long.\n\n\n#### [Org Mode Manual, online version 9.5, 2021, The Org Mode Developers](https://orgmode.org/manual/) \n\nThis manual is more readable than it appears from its cover. \nNonetheless, Org still needs a more accessible book for beginners.\n\n#### [GNU EMacs Manual, 19th Edition, 2021, Stallman et al.](https://www.gnu.org/software/emacs/manual/emacs.html) \n\nThis manual is readable.\nIts content is similar to that of Cameron et al., but it is current.\nThe book is not illustrated and does not cover the pull-down menus.\nThe authors deemed these to be self-explanatory.\nI recommend reading it after reading Cameron et al.\n\n#### [Mastering Emacs, 2nd Edition, 2020, Micky Petersen](https://www.masteringemacs.org/)\n\nRead this book if you are a frustrated or impatient advanced beginner who has not been able to progress with the last two books. \nThe author presents his approach to mastering Emacs without using much of the official documentation. \nAlso, read this book to learn about the features of popular packages that make Emacs competitive with Microsoft's rapidly advancing Visual Studio Code editor. \nYou will eventually have to return to the last two books to fill holes in your knowledge. \nThe author has almost two decades of experience in Emacs.\n\n#### [An Introduction to Programming in Emacs Lisp by Robert Chassell](https://www.gnu.org/software/emacs/manual/eintr.html) \n\nThis book is a must-read unless you are already a master of Emacs Lisp. \nEventually, you must learn Emacs Lisp to understand the code in your Emacs configuration file. \nFortunately, that is not as hard to do as you may think because the author wrote this book for non-programmers.\n\nEmacs Lisp is a fine first programming language to learn because, unlike most other programming languages, it allows you to write executable code in only one line. \nIn addition, you can enter *C-j* to the right of the code in any Emacs buffer, and Emacs returns the result on the line below.\nYou can save the buffer to a file on your hard drive.\nIn other words, you can execute the code examples from the book interactively and retain a copy of your work in a document for later reference.\nThis interactive feature of elisp invites exploring what the code can do beyond the examples in the book.\n\nAlternatively, you can place the cursor after the closing parenthesis of an elisp expression and enter *C-x C-e* to execute the code.\nThis is a great way to test new code for the configuration file without restarting Emacs. \nThis interactivity is a blast!\n\nYou might find the book too slow and tedious if you are already a Lisp programmer. \nIf not but you are a programmer, do not try to read the book without working through the code in an open session of Emacs. \nIf you do, you will get bored by page 50 and abandon reading the rest of the book.\n\nThis book was first released in 1991 and has been updated with most updates of Emacs. \nIt was last updated in 2021 for Emacs 27.2. \nThis is one of the best-written computer books that I have encountered. \nIt is wonderful that it is available for free.\n\n#### [Writing GNU Emacs Extensions by Robert Glickstein, 1997, O'Reilly \u0026 Associates](https://www.oreilly.com/library/view/writing-gnu-emacs/9781449395056/) \n\nThis book assumes more prior knowledge of Emacs than the book by Chassell. \nIt is accessible to advanced beginners with Emacs. \nIt aims to prepare you to write a minor mode in Emacs Lisp. \nAlthough the book is a quarter-century old, most of the code still works. \nI recommend reading it after completing the book by Chassell.\n\n#### [Hacking your way around in Emacs by Marcin Borkowski](https://leanpub.com/hacking-your-way-emacs/)\n\nThis is a self-published book for intermediate users of Emacs Lisp.\nThe first chapter is free. \nThe book has three chapters.\n\n#### [GNU Emacs Lisp Reference Manual by Bill Lewis et al.](https://www.gnu.org/software/emacs/manual/eintr.html) \n\nThis book is a reference manual, but it is remarkably well-written. \nIt is an excellent supplemental source while reading the book by Chassell. \nCompetent users who want to become proficient users need to read this book.\n\n## Update history\n\n|Version      | Changes                                                                                                                                    | Date                 |\n|:-----------:|:------------------------------------------------------------------------------------------------------------------------------------------:|:--------------------:|\n| Version 0.2 |   Added badges, funding, and update table.                                                                                                 | 2024 May 21          |\n\n\n## Sources of funding\n\n- NIH: R01 CA242845\n- NIH: R01 AI088011\n- NIH: P30 CA225520 (PI: R. Mannel)\n- NIH: P20 GM103640 and P30 GM145423 (PI: A. West)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmooerslab%2Fconfigorg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmooerslab%2Fconfigorg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmooerslab%2Fconfigorg/lists"}