{"id":20228485,"url":"https://github.com/64j0/emacs-config","last_synced_at":"2025-07-28T08:03:45.347Z","repository":{"id":37240491,"uuid":"393692579","full_name":"64J0/emacs-config","owner":"64J0","description":"This repository is used to store my personal emacs configuration file.","archived":false,"fork":false,"pushed_at":"2025-07-09T14:02:43.000Z","size":9740,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-20T16:39:32.772Z","etag":null,"topics":["emacs","lisp","yasnippet"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/64J0.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null}},"created_at":"2021-08-07T13:34:07.000Z","updated_at":"2025-07-09T14:02:46.000Z","dependencies_parsed_at":"2024-06-28T20:23:14.245Z","dependency_job_id":"7970ab7d-3bcb-4df3-8d08-b9c69bc0e0b0","html_url":"https://github.com/64J0/emacs-config","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/64J0/emacs-config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/64J0%2Femacs-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/64J0%2Femacs-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/64J0%2Femacs-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/64J0%2Femacs-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/64J0","download_url":"https://codeload.github.com/64J0/emacs-config/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/64J0%2Femacs-config/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267482003,"owners_count":24094506,"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","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["emacs","lisp","yasnippet"],"created_at":"2024-11-14T07:30:44.137Z","updated_at":"2025-07-28T08:03:45.236Z","avatar_url":"https://github.com/64J0.png","language":"Emacs Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+TITLE: My Personal .emacs Config\n#+AUTHOR: Vinícius Gajo Marques Oliveira\n#+DATE: [2022-08-01 seg]\n\nAccording to the official docs, ~Emacs~ is an extensible, customizable,\nfree/libre text editor - and more. *Much more!*\n\nAt its core is an interpreter for *Emacs Lisp*, a dialect of the Lisp\nprogramming language with extensions to support text editing.\n\nReference: [[https://www.gnu.org/software/emacs/][Emacs website]].\n\n* Installation\n\n** Debian: Install using ~apt~\n\n~apt~ is the package manager available for Ubuntu Linux (Debian based OS). To\ninstall Emacs using this package manager is pretty straigh forward:\n\n#+BEGIN_SRC bash :tangle no\n  sudo apt install emacs\n  # uninstall with\n  # sudo apt remove emacs\n#+END_SRC\n\n** Install Using Terminal\n\nYou can find the Emacs versions in this [[https://www.gnu.org/software/emacs/][link]].\n\n#+BEGIN_SRC bash :tangle no\n  # download emacs version 29.4\n  export EMACS_VERSION=\"29.4\"\n  wget https://ftp.gnu.org/pub/gnu/emacs/emacs-${EMACS_VERSION}.tar.gz\n\n  # org-roam demands sqlite, so before running the following commands, if you\n  # intend to use this package, you need to install this package (debian):\n  # sudo apt install libsqlite3-dev\n\n  # extract the content\n  tar xvzf emacs-${EMACS_VERSION}.tar.gz\n  cd emacs-${EMACS_VERSION}/\n  ./configure\n  make\n  sudo make install\n#+END_SRC\n\n*** Uninstall\n\n+ Reference: [[https://askubuntu.com/questions/377245/how-to-completely-remove-my-emacs][link]].\n\n#+BEGIN_SRC bash :tangle no\n  # download emacs version 28.2\n  export EMACS_VERSION=\"28.2\"\n  wget https://ftp.gnu.org/pub/gnu/emacs/emacs-${EMACS_VERSION}.tar.gz\n\n  # extract the content\n  tar xvzf emacs-${EMACS_VERSION}.tar.gz\n  cd emacs-${EMACS_VERSION}/\n  ./configure\n  sudo make uninstall\n#+END_SRC\n\n* Package Management\n\nIn order to have a more reliable packages configuration, instead of using\n~package.el~, I decided to use ~straight.el~: \"next-generation, purely\nfunctional package manager for the Emacs hacker\".\n\nOne can find the project repository in this [[https://github.com/radian-software/straight.el][link]].\n\nAlso, there is this cool video from System Crafter regarding this package\nmanager: YouTube [[https://www.youtube.com/watch?v=UmbVeqphGlc\u0026ab_channel=SystemCrafters][link]].\n\n* Launching Emacs\n\nIn my experience I noticed that the Emacs $PATH is different based on how you\nlaunch it. ~This is something I still want to research more to understand.~\n\nBut, as a rule of thumb, to avoid major problems, always launch your Emacs\nprogram from a terminal:\n\n#+BEGIN_SRC bash\n  emacs\u0026\n#+END_SRC\n\nHow I noticed this?\n\nMy LSP in general was very bad. Most of things did not work properly, although I\nhad the necessary stuff installed. Then, I went to the [[https://emacs-lsp.github.io/lsp-mode/page/troubleshooting/][troubleshooting page in\nLSP docs]] and tested my $PATH using ~M-: (getenv \"PATH\")~.\n\nLater I compared with the value of ~echo $PATH~ from a terminal window, and for\nmy surprise they were different. Emacs $PATH was lacking several configurations.\n\n** Load Custom Scripts\n\nOne can leverage the composibility powers of Emacs to create their own custom\nELisp configuration and decide to load it in the start up process of Emacs. In\norder to do it, you can use this function:\n\n#+BEGIN_SRC elisp\n  (load-file \"~/Desktop/codes/custom-emacs/my-cool-script.el\")\n#+END_SRC\n\n* Learning Emacs\n\nAccording to [[http://tilde.town/~ramin_hal9001/articles/2022-04-27_best-way-to-learn-emacs.html][this post]], the best way to learn Emacs consists in two things:\n\n1. Read blog posts about how other people use Emacs.\n2. Learning how to read the manual.\n\nNotice that this order is actually controversial.\n\n** Emacs distributions\n\nFor newcomers, it is usually easier to start using a pre-built configuration\ninstead of creating one by yourself.\n\nConsider taking a look at those distributions to start your Emacs journey:\n\n+ https://prelude.emacsredux.com/en/latest/\n+ https://www.spacemacs.org/\n+ https://github.com/rdallasgray/graphene\n+ https://github.com/doomemacs/doomemacs\n\n** Some Blogs\n\nLater in this ~README.org~ I cite other cool articles and references. Here I'll\njust store the non-exhaustive links mentioned by Ramin in his article.\n\n+ [[https://www.masteringemacs.org/all-articles][Mickey Peterson - Mastering Emacs]]\n+ [[https://sachachua.com/blog/][Sacha Chua - Blog]]\n+ [[https://systemcrafters.net/][David Willson - System Crafters]]\n+ [[https://cestlaz.github.io/stories/emacs/][Mike Zamansky - Blog]]\n+ [[https://irreal.org/blog/?tag=emacs][The Irreal Blog]]\n+ [[https://protesilaos.com/][Protesilaos Stavrou - Blog]]\n+ [[https://karthinks.com/tags/emacs/][Karthik Chikmagalur - Blog]]\n\n** Emacs Manual - Cheatsheet\n\n+ ~C-h i~ - *open the Info-mode* app, which lists a \"menu\" of all installed\n  manuals.\n+ ~C-h r~ - *read manual*, jumps straight to the Emacs manual table of contents.\n+ ~q~ - *quit*, hides the manual and goes back to where you were before reading\n  the manual.\n+ ~C-h v~ - display documentation of variable.\n+ ~C-h f~ - display documentation of function.\n  \nThose are the points I think are worth knowing, at least in the beginning.\n\n** Other Cool Emacs Links\n\n+ [[https://orgmode.org/worg/org-contrib/org-drill.html#:~:text=Running%20the%20drill%20session][org-drill]] reference for running the drill session. This part of the docs is\n  very good since it explains what each number means and how to run the session\n  passing the scope to read our drills.\n  - Before publishing an org-drill deck we should use ~org-drill-strip-all-data~\n    to remove personal scheduling data.\n  - This is currently my favorite tool along with ~org-mode~.\n+ [[https://lucidmanager.org/productivity/emacs-bibtex-mode/][Emacs and BibTeX]]\n+ [[https://leanpub.com/lisphackers/read][(Book) Lisp Hackers]]\n+ [[https://github.com/MatthewZMD/.emacs.d][MatthewZMD/.emacs.d]]\n+ [[https://github.com/redguardtoo/mastering-emacs-in-one-year-guide/blob/master/guide-en.org][redguardtoo/mastering-emacs-in-one-year-guide]]\n+ [[https://planet.emacslife.com/][Planet Emacslife]]\n+ [[https://emacs-lsp.github.io/lsp-mode/][LSP Mode - Language Server Protocol support for Emacs]]\n+ [[https://github.com/daviwil/emacs-from-scratch][daviwil - Emacs From Scratch]]\n+ [[https://www.oreilly.com/library/view/writing-gnu-emacs/9781449395056/][(Book) Writing GNU Emacs Extensions]]\n+ [[https://www.labri.fr/perso/nrougier/GTD/index.html][Nicolas P. Rougier - Get Things Done with Emacs]]\n  \n**** Articles\n\n+ [[https://www.aidanscannell.com/post/org-mode-resume/][Creating a CV/Resume in Org-Mode using LaTeX Templates]]\n+ [[https://www.fugue.co/blog/2015-11-11-guide-to-emacs.html][Fugue - A CEO's guite to Emacs]]\n+ [[https://www.fugue.co/blog/2018-08-09-two-years-with-emacs-as-a-cto.html][Fugue - Two Years With Emacs as a CEO (and now CTO)]]\n+ [[https://a-nickels-worth.blogspot.com/2007/11/effective-emacs.html][A Nickel's Worth - Effective .emacs]]\n+ [[https://coredumped.dev/2022/05/19/a-vision-of-a-multi-threaded-emacs/][Core Dumped - A vision of multi-threaded Emacs]]\n+ [[http://tilde.town/~ramin_hal9001/emacs-for-professionals/index.html][Emacs for Professionals]]\n+ [[http://steve-yegge.blogspot.com/2008/01/emergency-elisp.html][Stevey's Blog Rants - Emergency Elisp]]\n+ [[http://www.paulgraham.com/wealth.html][Paul Graham - How to Make Wealth]]\n+ [[http://www.paulgraham.com/taste.html][Paul Graham - Taste for Makers]]\n+ [[http://www.paulgraham.com/avg.html][Paul Graham - Beating the Averages]]\n+ [[http://www.paulgraham.com/icad.html][Paul Graham - Revenge of the Nerds]]\n+ [[https://tuhdo.github.io/c-ide.html][C/C++ Development Environment for Emacs]]\n  \n** Update packages\n\nFirst, you need to run ~M-x list-packages~, then hit capital \"u\" (~U~), and\nfinally \"x\" to execute the update.\n\nThere are packages created automatically to do this update for us automatically\n(~auto-package-update~, for example), but in my case I don't want to use it,\nsince I want to have more control over this process.\n\nI found this trick watching this video from System Crafters:\n\n+ [[https://www.youtube.com/watch?v=dtjq68F2dXw\u0026ab_channel=SystemCrafters][Keeping Your Emacs Packages Up To Date - Emacs From Scratch #11]]\n\n** Emacs Modes\n\n#+BEGIN_QUOTE\nEach kind of editor is an Emacs mode, a chunk of Lisp code that combines Emacs's\nprimitive types and operations in some new way. Each mode is therefore an\nextension of Emacs, which means that when you strip away all those modes — when\nyou remove the extensions and you're left with just the core of Emacs — you\ndon't have any editors at all; you have the raw materials for making\neditors. You have an editor-builder.\n\nWhat can you build with an editor-builder? Editors, of course, but what's an\neditor? An editor is a program for viewing and altering a representation of data\nof some kind. By \"representation\" I mean a set of rules for showing the data's\nstructure and content, and for indicating naturally how interactions with the\ndata are supposed to proceed. When editing a text file, the rules are pretty\nsimple: each printable byte gets displayed in sequence, with newline characters\ncausing line breaks; and a cursor indicates where in the byte sequence the next\nuser-invoked operation will occur. When editing a directory, the metaphor is a\nlittle less straightforward—data in the directory file must first be translated\ninto a human-readable form—but the resulting interactions still seem natural.\n\n--- (Book) Writing GNU Emacs Extensions\n#+END_QUOTE\n\n* Learning Elisp - Emacs Lisp\n\nSince Emacs could be configured using Elisp it is totally useful to learn this\nprogramming language in order to create new functionalities or even get more\nfamiliar with this tool.\n\nIn order to learn this I'm currently using this reference: [[https://www.gnu.org/software/emacs/manual/eintr.html][(Book) Introduction\nto programming in Emacs Lisp]].\n\nAfter finishing this first book, I plan to read [[https://github.com/norvig/paip-lisp][Paradigms of Artificial\nIntelligence Programming: Case Studies in Common Lisp]].\n\nThere is also this reference for GNU Emacs extensions (written in 1997 btw):\n[[https://www.amazon.com/Writing-GNU-Emacs-Extensions-Glickstein/dp/1565922611][Writing GNU Emacs Extensions]].\n\nIf you'd like to jump into exercises, check this [[https://exercism.org/tracks/emacs-lisp][Exercism track]].\n\n** Emacs Lisp Code Tips\n\nIn this section I'm going to add some links for useful resources that can help\nyou in this journey.\n\n+ [[https://github.com/bbatsov/emacs-lisp-style-guide][Emacs Lisp code style guide]]\n+ My submissions in the Exercism Emacs Lisp track: [[https://github.com/64J0/Exercism-Emacs-Lisp][link]]\n\nAbout the project structure (along with some comments):\n\n+ [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Simple-Packages.html][Simple Packages]]\n+ [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Library-Headers.html][Conventional Headers for Emacs libraries]]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F64j0%2Femacs-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F64j0%2Femacs-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F64j0%2Femacs-config/lists"}