4
8
Fork
You've already forked emacspackages.com
6
A website for rating Emacs packages and sharing example configurations.
  • Scheme 99.7%
  • Shell 0.3%
2025年04月30日 12:30:56 +03:00
.guix/modules/emacspackages Remove port 80 from site service 2025年03月31日 11:38:58 +03:00
assets/svg Switch to feather icons for performance 2025年04月30日 12:30:56 +03:00
deploy Clean up service files 2025年03月05日 10:47:35 +02:00
scripts Use context from webframe library 2025年04月09日 09:59:04 +03:00
src Switch to feather icons for performance 2025年04月30日 12:30:56 +03:00
test Add initial DB migration framework 2025年02月17日 13:46:00 +02:00
.dir-locals.el Add .dir-locals.el 2025年04月09日 09:57:06 +03:00
.gitignore Add initial DB migration framework 2025年02月17日 13:46:00 +02:00
.guix-channel Use new guile-webframe channel 2025年03月19日 11:39:57 +02:00
guix.scm Convert repo into a Guix channel 2025年03月05日 10:14:23 +02:00
README.org Add password salting, plan package sync and disambiguation 2025年02月24日 12:37:54 +02:00

emacspackages.com

Rate, review, and share example configurations for Emacs packages.

Source code at: https://codeberg.org/SystemCrafters/emacspackages.com

Getting Started

Requirements

  • Use Fibers for HTTP for concurrent request handling, plus more
  • Use sqlite database at first but maybe use PostreSQL later
  • Consider using other things like redis, etc if warranted
  • Deploy the website using Guix (maybe on Contabo)
  • Find a way to use Guile Hoot on the client side (restricted to some optional component)
  • Use server-side rendered sxml for pages and templates, maybe some interactivity via HTMX et al

Design

  • Show a listing of known Emacs packages across ELPA, NonGNU ELPA, and MELPA (including Stable). Possibly even packages that are only available on Git repositories (using package-vc-install). Also mention whether the package is in Guix, too (and what version).
  • Keep an up-to-date index of all these packages, including versions if possible.
  • Provide a way for community members to share example configuration snippets from their configuration files (maybe automatically?)
  • User-supplied tips about packages
  • A usage count for packages to show relative popularity (different than a raw install count)

Conceptual Model

Package

  • name
  • version
  • url
  • user count

Package Tips

Sort of like comments on a package, but only for sharing tips, not for complaining!

  • user who posted it
  • the package it relates to
  • tip content

Users

  • id
  • name
  • configuration repo(s)
  • profile text

User / Package table

  • user_id
  • package_id

User / Tip table

  • user_id
  • tip_id

Syncing Package Information

At first, we need a quick and easy way to populate the package database by reading the package archives for the various repositories. Perhaps a script that makes it easier to roll the DB?

Initial sync of all package details will produce a whole bunch of package entires.

What happens when we sync again? How do we merge new information into the existing package rows?

Need a stable package identifier.

  • name
  • url where the package comes from
  • source where the package comes from

We should write a merge algorithm that handles the most obvious cases, then require human intervention for anything that is unclear?

Create entries for the unmergeable package details and allow a user to request that the package be merged with another package?

Tasks

TODO Scrape ELPA and MELPA package repositories to populate package DB

TODO Offload database access to a separate thread, communicate via channels (to help with concurrent request handling)

TODO Integrate the CSS generation code that was written in another stream to craft the site's stylesheet

TODO Write an initial Guix server configuration for the site, run it in a local container (nginx, let's encrypt)

TODO Design the actual user-facing features (account creation, linking user configuration, possibly scanning config)

License

Let's just assume it's MIT or similar for now :)