KISS GUIDESTONES
________________________________________________________________________________

Below are a set of notes which make KISS... KISS. I felt the need to define in
as much detail as possible philosophy behind the distribution.

There is no requirement to follow or even agree with my words. Some of the
technical details for how packages are written will apply to package inclusion
in the official repositories however.

Bear in mind, I develop and release KISS for free. I owe you nothing. Any help
I provide is at my own discretion. KISS is my gift to you from the love of what
I do. I hope you find it as useful as I have.

- Dylan Araps

These guidestones will be in perpetuity. Until a sufficiently good reason to
alter them is provided (such as security concerns, kernel requirements), these
will continue to be the guiding principles behind the direction of KISS.

- Dilyn Corner


USERS
________________________________________________________________________________

* KISS is the vessel with which to shape your system in your own way and to
  optionally share your ideas with others.

* Every user has the means to keep their entire system up-to-date without the
  need for or reliance on the BDFL. Every KISS install contains the entirety of
  the repositories with full history.

* If a piece of software is missing, package it! If it is suitable for inclusion
  in the repositories, send a pull request. If it is not, keep it in your own
  repository and/or share it with others.

* Don't ask a question to ask a question. If you have a question, out with it or
  forever hold your peace.

* If you have a problem, think about it first. Present as much information as
  possible and logs if applicable. The more information given to those willing
  to help, the higher the chance and quicker the speed of resolution.

* Most importantly. LEARN TO LEARN. Don't jump into irc at a moment's notice.
  Try and solve the issue yourself first. Learn to solve your own problems,
  gain a better understanding over your system and take control. Be a doer.


KISS
________________________________________________________________________________

* There must always be a sole commander-in-chief in charge of the distribution.
  There must never be a below governance structure.

* With great power comes great responsibility. The user must have some kind of
  brain in their skull and must exercise its use where necessary.

* Prefer less software over more software where possible. e.g If all a library
  does is make the cursor spin while waiting for a program to launch, it should
  be purged.

* Favour usability over ideals. If software B is simpler than software A but is
  missing essential functionality (for all users), software A shall be the
  default provider.

* User choice matters. Maintain this strict philosophy while at the same time
  keeping the ability to go against this philosophy open to all.

* The ends do not justify the means. A package, fix, feature or what have you
  will not be implemented if it requires gross hacks to accomplish.

* Only target the English language. English is the World Language. What we write
  our code in and what we use to communicate.

* All shell code must be written in a safe way, pass the shellcheck linter and
  match the style of any existing code.

* All distribution tooling and shell code must be written in a portable way.
  Otherwise, the user will be locked into a single coreutils and shell.

* One exception is made for 'sed -i' as it is too useful to let go of. The '-i'
  flag has rather good support across implementations regardless.

* Avoid the next new shiny thing until or unless certain that it brings real
  improvements over what it is intended to replace.

* The above excludes versions of the same software. Software should always be
  kept up-to-date unless there is a blocker in doing so.

* Continue to work towards the removal of unneeded software, patching existing
  software or writing replacements if required.

* There shall never be rules centred around speech or the way in which one must
  carry themselves to communicate. Do unto others as you would have them do
  unto you.


OFFICIAL REPOSITORIES
________________________________________________________________________________

* The number of packages in the repositories shall never exceed that which is
  maintainable by a single person with minimal effort.

* Any packages unsuitable for the repositories must be kept in user or
  3rd-party repositories.

* The repositories (excluding Community) must remain a useful base containing
  everything up to a Graphical session with a browser and media player. They
  shall go no further.

* All software in the repositories must be F(L)OSS. See above point if
  proprietary software is needed.

* The build process of a package should not require a network connection,
  otherwise signature verification and checksums are useless.

* Avoid patches for single line changes. Patches require rewriting on changes
  of the sources whereas a simple call to 'sed' can stand the test of time.

* Avoid running autogen.sh or autotools in builds if pre-generated files
  already exist.

* Sources must use HTTPS where possible. If no HTTPS source is available one
  must be sought out or created by the BDFL of KISS.

* Install files to '/usr/{bin,lib,share}' always. The singular directory
  ensures simplicity and keeps KISS tooling and user scripts simple.

* The following list of software must never make its way into the repositories
  as their inclusion will open the floodgates for software which unoptionally
  depends on them.

  dbus, systemd, polkit, gettext, intltool, pulseaudio, pipewire, pam, wayland,
  logind, ConsoleKit, libsn, electron and all DEs.

* These above rules may apply to other software at the discretion of the BDFL.

* No package shall ship with telemetry enabled by default and if at all
  feasible it must be patched out entirely.


COMMUNITY REPOSITORIES
________________________________________________________________________________

* The community repository is maintained by the users of KISS. Each maintainer
  is responsible for the packages they have opted to add.

* The BDFL's only responsibility is to review pull requests sent to this
  repository.

* Only the maintainer of a package is allowed to make any changes to said
  package. Don't send pull requests for packages you do not own.

* Contact the maintainer of the package via their set git email if you would
  like to report an out-of-date package or request changes.


PACKAGE MANAGER
________________________________________________________________________________

* The package manager must not exceed 1000 lines of code. This number excludes
  blank lines and comments which make up around 50% of the program's current
  size.

* The user is smart, the package manager is dumb. The package manager is
  written under the assumption that the user has some kind of functioning brain
  in their skull.

* There are some things which can't be, shouldn't be, and won't be automated.
  Firstly, for my sanity. Secondly, for yours.

* Prefer extensibility through scripts over baking every additional feature into
  the package manager.

* Circular dependencies are a bug and not a feature. See: freetype-harfbuzz


INIT SYSTEM
________________________________________________________________________________

* The user should not be tied to a single provider of PID 1. No unrelated piece
  of software should require a specific init be in use.

* No software violating the above rule shall be included in the official
  repositories as it paves the road for the inclusion of software that will
  explicitly depend on it.

* The boot and shutdown scripts shall be written in an init-agnostic fashion
  and work with all init systems which require it as a means of starting the
  machine.