You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
You can run the lints manually almost the same as running tests.
@@ -443,36 +442,30 @@ are on MacOS. =nixpkgs-unstable= or =master= are your other less common options.
443
442
git rebase -i
444
443
#+end_src
445
444
446
-
* Compared to Other Similar Work
445
+
* Package scope and relation to other work
447
446
448
447
This repository mainly captures the annoying work necessary to set up a new
449
-
repository. By focusing on just one minimal task, cloning itself and renaming,
450
-
there is very little work a user will need to identify and remove to reach
451
-
foundation.
448
+
repository with everyting working. By focusing on just one minimal task,
449
+
cloning itself and renaming, there is very little work a user will need to
450
+
identify and remove to reach the clean foundation.
452
451
453
-
** Most similar existing work
454
-
455
-
[[https://github.com/purcell/nix-emacs-ci][nix-emacs-ci]] capture the work needed to provide a running Emacs to CI. Tools
456
-
like [[https://github.com/doublep/eldev#continuous-integration][eldev]] and [[https://github.com/alphapapa/makem.sh/blob/master/test.yml][makem.sh]] have support for providing dependencies to that Emacs.
457
-
The Nix flake [[./flake.nix][in this project]] describes both of these tasks. Makem and Eldev
458
-
etc document Gihub workflows, but the workflows in this repository are meant to
459
-
be used out-of-the-box after cloning. What remains for the user to focus on is
460
-
*test discovery and running tests*.
461
-
462
-
Nix-emacs-ci provides a lot of backwards-compatibility versions of Emacs. The
463
-
nix-overlay is more forward looking, providing =emacsGit= and sometimes other
464
-
upstream branches when a big feature like native compilation is in the pipeline.
465
-
Nix-emacs-ci is also still using legacy Nix, without flakes. Flakes are just
466
-
nicer and the way Nix is going.
452
+
Commands within this package will focus on cleaner integration of the tests and
453
+
lints with Emacs. There has been a lot of work in this area, but much of it is
454
+
tangled with dependency management and sandbox creation.
467
455
468
456
** Dependency Management
469
457
470
458
Many tools for testing Emacs packages provide dependency management and loading
471
-
those dependencies into a fresh Emacs instance. Use of the [[https://github.com/nix-community/emacs-overlay][Nix Overlay]] greatly
472
-
simplifies how this is accomplished. Nix is extremely reliable at dependency
473
-
management, and it is no surprise that much complexity is normalized away by
474
-
just the basic behavior model of Nix. The [[https://github.com/nix-community/emacs-overlay][emacs-overlay]] is what makes it so
475
-
easy. In addition, *if your project needs or includes additional binary
459
+
those dependencies into a fresh Emacs instance. This package will never attempt
460
+
to manage dependencies. Dependencies will always be expressed through the Nix
461
+
flake expressions and at most a lock file describing a frozen set of Emacs
462
+
dependencies.
463
+
464
+
Use of the [[https://github.com/nix-community/emacs-overlay][Emacs Nix Overlay]] is a simple way of stating and obtaining elisp
465
+
dependencies for now. Non-elisp dependencies are trivially provided form
466
+
nixpkgs. Nix is extremely reliable at dependency management, and it is no
467
+
surprise that much complexity is normalized away by just the basic behavior
468
+
model of Nix. In addition, *if your project needs or includes additional binary
476
469
dependencies or modules*, Nix is an excellent way to provide them to CI and
477
470
users.
478
471
@@ -485,11 +478,61 @@ familiar make style of user interaction.
485
478
The CI scripts are arranged to present a useful environment first. The commands
486
479
to invoke tests follow. If the commands need to be changed, it is
487
480
straightforward to change them /independently of how you provide dependencies/.
488
-
Just be sure to propagate changes to the Makefile and README.
481
+
Just be sure to propagate changes to the Makefile and README of your project.
489
482
490
483
Future versions of this project will continue to favor elisp scripts for test
491
484
discovery and integration with Emacs. Make and bash will be minimized.
492
485
486
+
** Comparisons
487
+
488
+
There are many comparisons available to understand the roles of similar tools
- [[https://github.com/emacs-twist/nomake][nomake]] Is another project with Nix work
494
+
495
+
[[https://github.com/purcell/nix-emacs-ci][nix-emacs-ci]] capture the work needed to provide a running Emacs to CI. Tools
496
+
like [[https://github.com/doublep/eldev#continuous-integration][eldev]] and [[https://github.com/alphapapa/makem.sh/blob/master/test.yml][makem.sh]] have support for providing dependencies to that Emacs.
497
+
The Nix flake [[./flake.nix][in this project]] describes both of these tasks. Makem and Eldev
498
+
etc document Gihub workflows, but the workflows in this repository are meant to
499
+
be used out-of-the-box after cloning, although to be fare, this is very little
500
+
work.
501
+
502
+
Nix-emacs-ci provides a lot of backwards-compatibility versions of Emacs. The
503
+
nix-overlay is more forward looking, providing =emacsGit= and sometimes other
504
+
upstream branches when a big feature like native compilation is in the pipeline.
505
+
Nix-emacs-ci is also still using legacy Nix, without flakes. Flakes are just
506
+
nicer and the way Nix is going.
507
+
508
+
* Contributing
509
+
510
+
First decide if you want to work on this repository or fork it to something
511
+
entirely different. Non-exhaustive list of changes that are very welcome:
512
+
513
+
- To the maximum degree possible, this project should lean on elisp as a CLI
514
+
script backend
515
+
- Running additional kinds of tests
516
+
- Running additional lints
517
+
- Fix bugs
518
+
- Expose trivial options where a structural choice has limited them
519
+
unnecessarily
520
+
- Behave the same, but with a less complicated code
521
+
522
+
Changes will likely be rejected if it is aimed at:
523
+
524
+
- Managing dependencies outside of Nix expressions other than a package that is
525
+
supposed to manage dependencies or test obtaining dependencies in a
526
+
user-present use case
527
+
- Backwards compatibility for Emacs two versions behind next release. Master,
528
+
current stable release, and release - 1 are the only versions being supported
529
+
- pre-flake Nix support
530
+
- Guix support without proper lockfile commonality between Emacs, Nix, and Guix.
531
+
All pure build systems are good, but if Emacs, Nix, and Guix are not *yet*
532
+
benefitting from a common lock format to describe what dependencies will be
533
+
obtained, it's not time to support them alongside each other in a single
534
+
repository
535
+
493
536
* Shout-outs
494
537
495
538
- [[https://github.com/alphapapa][alphapapa]] for being super prolific at everything, including package writing,
@@ -501,12 +544,15 @@ discovery and integration with Emacs. Make and bash will be minimized.
501
544
* Footnote on FSF and Emacs Core Licensing
502
545
503
546
Free Software Foundation currently requires copyright assignment on all code
504
-
that goes into Emacs core. The DCO is a practice accepted by git, GCC, and the
505
-
[[https://wiki.linuxfoundation.org/dco][Linux Kernel]]. Doing DCO sign-off is not the same as copyright assignment, and
506
-
serves a different purpose. DCO is more defensive of /any/ users while
507
-
copyright assignment is offensive in the case of GPL non-compliance. What DCO
508
-
sign-off gains you is being able to prove that your project is 100% covered by
509
-
the license you chose.
547
+
that goes into Emacs core. Many GNU projects have since switched to using a
548
+
Developer Certificate of Origin. DCO sign-off is a practice accepted by git,
549
+
GCC, and the [[https://wiki.linuxfoundation.org/dco][Linux Kernel]]. Doing DCO sign-off is not the same as copyright
550
+
assignment, and serves a slightlly different purpose. DCO is more defensive of
551
+
/any/ users while copyright assignment is offensive in the case of GPL
552
+
non-compliance. In any case, with DCO sign-off, you can be assured that changes
553
+
submitted to a code base you control are incontrovertibly covered by the license
554
+
you chose. Using the DCO *may* make it easier for code in your project to be
0 commit comments