- Scheme 99.7%
- Shell 0.3%
| .guix/modules/emacspackages | Remove port 80 from site service | |
| assets/svg | Switch to feather icons for performance | |
| deploy | Clean up service files | |
| scripts |
Use context from webframe library
|
|
| src | Switch to feather icons for performance | |
| test | Add initial DB migration framework | |
| .dir-locals.el | Add .dir-locals.el | |
| .gitignore | Add initial DB migration framework | |
| .guix-channel | Use new guile-webframe channel | |
| guix.scm | Convert repo into a Guix channel | |
| README.org | Add password salting, plan package sync and disambiguation | |
emacspackages.com
- Getting Started
- Requirements
- Design
- Tasks
- Scrape ELPA and MELPA package repositories to populate package DB
- Offload database access to a separate thread, communicate via channels (to help with concurrent request handling)
- Integrate the CSS generation code that was written in another stream to craft the site's stylesheet
- Write an initial Guix server configuration for the site, run it in a local container (nginx, let's encrypt)
- Design the actual user-facing features (account creation, linking user configuration, possibly scanning config)
- License
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 :)