{"id":40188606,"url":"https://github.com/kotct/dot","last_synced_at":"2026-01-19T19:30:55.000Z","repository":{"id":149270146,"uuid":"62471487","full_name":"kotct/dot","owner":"kotct","description":"A collaborative configuration for various tools.","archived":false,"fork":false,"pushed_at":"2025-02-25T17:02:58.000Z","size":505,"stargazers_count":3,"open_issues_count":21,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-02-25T18:20:29.555Z","etag":null,"topics":["autoload","byte-compilation","dot","emacs","emacs-configuration","emacs-lisp","modular"],"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/kotct.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"2016-07-02T22:10:09.000Z","updated_at":"2025-02-25T17:03:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"57611b40-4c0c-4f50-b77b-bb71d9e1b504","html_url":"https://github.com/kotct/dot","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/kotct/dot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotct%2Fdot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotct%2Fdot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotct%2Fdot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotct%2Fdot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kotct","download_url":"https://codeload.github.com/kotct/dot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotct%2Fdot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28581416,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T19:06:42.549Z","status":"ssl_error","status_checked_at":"2026-01-19T19:06:42.040Z","response_time":67,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["autoload","byte-compilation","dot","emacs","emacs-configuration","emacs-lisp","modular"],"created_at":"2026-01-19T19:30:54.934Z","updated_at":"2026-01-19T19:30:54.994Z","avatar_url":"https://github.com/kotct.png","language":"Emacs Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kotct/dot [![Build Status](https://travis-ci.org/kotct/dot.svg?branch=master)](https://travis-ci.org/kotct/dot) [![Coverage Status](https://coveralls.io/repos/github/kotct/dot/badge.svg)](https://coveralls.io/github/kotct/dot)\n\nDot is a collective configuration system which contains configurations\nfor programs like Emacs and zsh, but also (potentially) Vim.  Dot is\nwritten under the following principles:\n\n* Configurations should only be run if necessary\u0026mdash;that is, if the\n  *user* wants it.\n* Configurations should be as lean, modular, and standalone as\n  possible, utilizing autoload and byte compilation mechanisms\n  whenever possible and only running what is necessary.\n* Configurations should be clean, well-documented, and\n  consistently-written throughout.\n* Configurations should have a focus on truly excellent support for\n  everything.\n* Configurations should also have clear error messages handling common\n  PEBKAC errors.\n\n## Installation\n\nYou can use this command to install our configuration.  (Ruby must be\ninstalled for this to work, so make sure you have done that.)\n\n    $ \\ruby -e \"$(\\curl -fsSL https://raw.githubusercontent.com/kotct/dot/master/scripts/install)\"\n\nThis script will interactively ask you if there are any conflicts or\ndecisions to be made, but will immediately start installing the\nconfiguration, so make sure that you are sure of what you want to do.\n\nThis script assumes a fairly regular system with the requisite\nsoftware installed, so if you are in an esoteric environment, you can\nplan on manually installing this by symlinking into `~`.  If something\nbreaks down on a normal system, (like Ubuntu, Fedora) please open an\nIssue and we will get back to you ASAP.\n\nIf your system is running an older version of a dependency software,\n(i.e. Emacs \u003c 25.1, Ruby \u003c 2.4) please do your best to update to the\nlatest version directly available from your package manager.  If an\nissue is not reproducible on our system, we cannot fix it.\n\nIt is worth noting that you should be able to simply simlink the\nrespective files and directories into your `HOME` directory.\n\nYou can do this by cloning this repository, then running:\n\n    $ bundle install\n    $ rake install\n\nThis is effectively what the above script does, except it allows you\nto clone to your own desired location.\n\n## Emacs\n\nThe Emacs configuration is the primary focus of this project and is\nthe defining feature of this project.  Most of the work done here will\nbe done on the Emacs configuration, as the primary goal in writing\nthis configuration is and was to write a robust, fast, and efficient\nEmacs configuration.\n\nBelow is included the discussion about the rewrite of the Emacs\nconfiguration, which will take place in this repository.\n\n### Goals\n\nCreate fast configurations for common developer tools with a clean,\nunified style, that has IDE-level support for many languages.\n\nIn addition, the following guidelines apply to our Emacs configuration:\n\n- Autoload things as much as possible\u0026mdash;that is, load as little as\n  possible on startup so as to minimize start-up time.\n- Automatically byte-compile on start.\n- Use a clean, consistent EmacsLISP style.\n- Have a focus on excellent support for individual languages.\n- Make sure everything is well-thought-out and well-documented.\n- Have clear error messages handling most user fuck-ups.\n\n### Personal Configs\n\nTo create a personal config, create a personal, public GitHub repo\ncalled `.emacs`. Emacs may prompt you to add a \"personal config\" on\nstart. If your emacs is already up and running, and no longer prompts\nyou as such, you can add your personal config by doing\n`M-x kotct/user-set-default-username`. Emacs will automatically grab\nyour config from GitHub and load it. The clone that emacs uses is\nstored in a directory named after your GitHub username in\n`.emacs.d/lisp/user/users/`.\n\nTo update the clone of your personal config, do\n`M-x kotct/user-update-config`. In addition, to switch to another user\nconfig, do `C-x C-z`.\n\n### Structure\n\nWithin the base `.emacs.d` directory, the only checked-in emacs lisp\nfile is `init.el`.  This file contains any code that must be loaded\nbefore the elisp hubs and any code that manages loading, autoloading,\nor byte compilation.\n\nAll other codes is organized into directories based on language.  For\ninstance, all emacs lisp code goes into the `lisp` directory, and ruby\nor python code goes into the `ruby` and `python` directories,\nrespectively.\n\nThe `lisp` directory contains a directory for each \"hub\".  Within each\nhub directory is a `\u003chub-name\u003e-hub.el` directory containing the hub\ndefinition (using the `kotct/hub` function).  Each file within the hub\nthat is loaded at startup should provide a feature with a simple name\n(e.g. \"startup\", \"backup\", or \"recentf-c\").  If the file is\nconfiguring another package, name it `\u003cpackage\u003e-c` (as in \"recentf-c\"\nabove), with \"c\" standing for \"configuration.\"  Try to avoid this \"-c\"\nsuffix when possible.\n\n### Autoloading\n\n#### Autoloading custom features\n\nAutoloaded files should contain at least one function or other symbol\nwhose definition is preceded by an autoload token (`;;;###autoload`).\n\nAt the top of the file, include the following comment:\n\n```\n;;; THIS FILE IS NOT LOADED AT STARTUP.\n;;; This file is autoloaded on the following symbols:\n;;;  kotct/function1\n;;;  kotct/function2\n```\n\nTo make sure the file is checked for autoloads, ensure that in the\nhub file's call to `kotct/hub`, the final argument is `'autoloads`.\n\nCalls to `autoload` will be automatically generated and saved in\n`lisp/kotct-loaddefs.el` and loaded on startup.\n\n#### Preserving package autoloads\n\nGenerally, calls to `require` should be avoided, since these calls\nwill sometimes force loading of features that would otherwise be\nautoloaded.  Cases can occur in which a `require` is appropriate, for\ninstance, if the package does not have autoloads or an autoload will\nbe triggered later in the file anyway.\n\nIf an autoloaded package needs configuration, instead of using\n`require` to load the package in order to configure it, wrap the\nconfiguration in a `with-eval-after-load` block so that it will only\nbe loaded after the package is autoloaded.\n\n### Byte compilation\n\nAll files are automatically bytecompiled asynchnonously after emacs\nstarts. This aims to be a totally hands-off experience. That said,\nany files more than one subdirectory below the `lisp/` directory\nneed to be manually added to `kotct/files-to-compile`, which keeps\ntrack of all the files that are to be byte compiled.\n\n### Keybindings\n\nKeybindings should be located at whatever places makes sense.  Most\ncommonly, they will be located after the definition of the function\nthey are binding, or after relevant configuration.\n\nTo globally bind a key, use a line such as:\n\n```\n(global-set-key (kbd \"C-x C-r\") #'kotct/ido-recentf-open)\n```\n\nAt the top of any file with keybindings, add a comment like the\nfollowing for each keybinding:\n\n```\n;;; C-x C-r: find recent files and directories using recentf\n```\n\n### Portability\n\nThe only assumptions we can make about our environment are that we are\nusing a certain minimum version of emacs (tbd) and we have all package\ndependencies installed (although we should handle the case at startup\nwhere not all dependencies are installed).\n\nThings we CANNOT assume:\n- We are using a POSIX-compliant OS.\n- We have external dependencies installed (such as Ruby or Python).\n- The user is not an idiot.\n\nUp for debate:\n- Can we assume we are not running from a terminal (i.e. can we design\n  so that some functionality may not be present when running from a\n  terminal)?\n\n### Emacs lisp style guide\n\n- Prefix all global function or variable names with `kotct/`, as in\n  `kotct/ido-recentf-open` or `kotct/hub-names`.\n- Always use `setf` instead of `setq`.  `setq` should never be used in\n  this project.\n- When referencing a function name, always use a function quote (`#'`)\n  instead of a regular quote (`'`). This function quote (or funquote)\n  translates to a call to `function` instead of `quote`.\n- As described in\n  the [Autoloading](https://github.com/kotct/dot#autoloading) section,\n  avoid `require` and use `with-eval-after-load`.\n- Make sure all `defun`s, `defvar`s, and `defmacro`s (and any other\n  global definitions) have docstrings that are properly formatted.\n- Comment when it's not immediately clear what the code is doing.\n- Write modular, clean, and fast code.\n\n## License\n\n`dot` is released and distributed under the terms of the MIT license.\nSee [`LICENSE`](https://github.com/kotct/dot/blob/master/LICENSE) for\nmore information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkotct%2Fdot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkotct%2Fdot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkotct%2Fdot/lists"}