CodyReichert / awesome-cl

A curated list of awesome Common Lisp frameworks, libraries and other shiny stuff.
https://awesome-cl.com
Other
2.47k stars 183 forks source link

Atlas N-libraries #475

Closed aartaka closed 8 months ago

aartaka commented 8 months ago

We've built a lot of libraries in Atlas, most of them based on web browsing and graphical application use-cases. These often cover the niches in between other libraries, so it might be useful to add these to awesome-cl.

This PR has every library addition in a separate commit, so that these can be cherry-picked and squashed at will.

Thanks!

Hexstream commented 8 months ago

Clickable links for easier review: NJSON, NClasses, NDebug, NFiles, NTemplate, NKeymaps.

vindarel commented 8 months ago

Hi, thanks. nkeymaps might be too specialized, and we don't see what ntemplates brings (can't see what the generated template is) (it reads specific to Atlas projects too).

nfiles seems to do a lot, but isn't the first example typically solved with a function?

(defvar *foo-path* (uiop:xdg-config-home))
;; =»
(defvar *foo-path*)
(defun foo-path ()
  (if (boundp '*foo-path*)
     *foo-path*
     (setf *foo-path* (uiop:xdg-config-home))) ;; you got the idea
aartaka commented 8 months ago

Hi, thanks. nkeymaps might be too specialized,

Fair points. That's exactly the reason I've separated commits—you can remove/modify them whenever you find it right.

and we don't see what ntemplates brings (can't see what the generated template is) (it reads specific to Atlas projects too).

While it's opinionated (BSD license, NASDF build extension, several hard-coded repository links), that's mostly due to Quickproject limitations. Even with these limitations, the skeleton saves some hour of work even for non-Atlas libraries (like my https://github.com/aartaka/graven-image)

nfiles seems to do a lot, but isn't the first example typically solved with a function?

(defvar *foo-path* (uiop:xdg-config-home))
;; =»
(defvar *foo-path*)
(defun foo-path ()
 (if (boundp '*foo-path*)
    *foo-path*
    (setf *foo-path* (uiop:xdg-config-home))) ;; you got the idea

Well, that's only the first example among many others. As a wider and more realistic set of examples, Nyxt use-cases for it are:

And yes, path resolution part you've highlighted is there in the library. But there's also file watching, object persistence, synchronization, user profiles—basically all the stuff I've listed. And, likely, some more that I've forgotten.

aartaka commented 8 months ago

Cool, thanks @vindarel!