KISS 💋  News  Blog  Install KISS  Team  Guidestones  FAQ

Community (NEW)  Scrots  Package System  Testimonials  Style

Ports (non-x86-64)  Software  Contact  Donate  GitHub ->

+-------------------------------------------------------+
|                                                       |
|                  KISS STYLE GUIDE                     |
|                                                       |
| * This document is a style guide which will double    |
|   as documentation for a possible linter in the       |
|   future.                                             |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                   MAINTAINERSHIP                      |
|                                                       |
| * Each package has a set maintainer stored via git    |
|   commits. Use 'git log' or 'kiss-maintainer pkg'     |
|   to find the maintainer's contact information.       |
|                                                       |
| * Only the maintainer of a package has the ability    |
|   to make changes to said package. Any pull           |
|   requests by a non-maintainer for a package will     |
|   be closed.                                          |
|                                                       |
| * If you would like to make a change to an existing   |
|   package, contact the maintainer and they will       |
|   do so on your behalf.                               |
|                                                       |
| * If the maintainer leaves a package out of date      |
|   and does not respond in a reasonable timeframe,     |
|   the package will be orphaned and up for grabs.      |
|                                                       |
| * If no one steps forward to adopt an orphaned        |
|   package, it will be dropped from the repository.    |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                      GENERAL                          |
|                                                       |
|                                                       |
| [0000]                                                |
|                                                       |
|   Package is not suitable for inclusion in the        |
|   Community repository.                               |
|                                                       |
|   Examples:                                           |
|                                                       |
|     dbus, systemd, polkit, gettext, intltool,         |
|     pulseaudio, pipewire, pam, wayland, logind,       |
|     ConsoleKit, libsn, electron and all DEs.          |
|                                                       |
|   The same rules above may apply to other software    |
|   at the discretion of the BDFL.                      |
|                                                       |
|                                                       |
| [0001]                                                |
|                                                       |
|   Questions to ask yourself.                          |
|                                                       |
|     - [0001.1] Is this patch needed?                  |
|     - [0001.2] Are these CFLAGS needed?               |
|     - [0001.3] Is this dependency needed?             |
|     - [0001.3] Are these configure flags needed?      |
|     - [0001.4] ...                                    |
|                                                       |
|                                                       |
| [0002]                                                |
|                                                       |
|   No new packages shall use GTK2 as it will be        |
|   removed once Firefox drops it as a dependency.      |
|                                                       |
|                                                       |
| [0003]                                                |
|                                                       |
|   No new packages shall use Python 2 as it will be    |
|   removed once Firefox/qtwebengine drop it as a       |
|   dependency.                                         |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                       BUILD                           |
|                                                       |
|                                                       |
| [0200]                                                |
|                                                       |
|   This guide should be used alongside shellcheck      |
|   and not in place of it.                             |
|                                                       |
|                                                       |
| [0201]                                                |
|                                                       |
|   All shell code must pass the shellcheck linter.     |
|   Any false-positives or intended behavior must       |
|   have a rationale attached with the exclusion.       |
|                                                       |
|   # Disable warning as CFLAGS must work this way.     |
|   # shellcheck disable=2086                           |
|   "${CC:-cc}" $CFLAGS ...                             |
|                                                       |
|                                                       |
| [0202]                                                |
|                                                       |
|   Use 4 spaces for indentation.                       |
|                                                       |
|                                                       |
| [0203]                                                |
|                                                       |
|   Lines should not exceed 80 characters in length.    |
|                                                       |
|                                                       |
| [0204]                                                |
|                                                       |
|   All packages must use the POSIX shell shebang       |
|   with '-e' to exit on error. Additionally, '-ef'     |
|   can be used if word-splitting is required.          |
|                                                       |
|   There must also be a blank line directly below      |
|   the shebang.                                        |
|                                                       |
|   #!/bin/sh -e                                        |
|                                                       |
|   # Code starts here.                                 |
|                                                       |
|                                                       |
| [0205]                                                |
|                                                       |
|   All comments must start with a capital letter and   |
|   use proper spelling, grammar and punctuation.       |
|                                                       |
|   # This is a comment.                                |
|                                                       |
|                                                       |
| [0206]                                                |
|                                                       |
|   Leave comments to explaining *why* the code is      |
|   needed and not *what* it does.                      |
|                                                       |
|   Bad:                                                |
|                                                       |
|     # Create a directory.                             |
|     mkdir -p "$1/usr/bin"                             |
|                                                       |
|   Good:                                               |
|                                                       |
|     # 'make install' doesn't create the directory.    |
|     mkdir -p "$1/usr/bin"                             |
|                                                       |
|                                                       |
| [0207]                                                |
|                                                       |
|   Avoid adding braces around variables if unneeded.   |
|                                                       |
|   Bad:  printf '%s\n' "${var}"                        |
|   Good: printf '%s\n' "$var"                          |
|   Good: printf '%s\n' "${var}.${var2}"                |
|                                                       |
|                                                       |
| [0208]                                                |
|                                                       |
|   Avoid quotes when unneeded.                         |
|                                                       |
|   Bad:  [ "$var" = "test" ]                           |
|   Good: [ "$var" = test ]                             |
|                                                       |
|   Bad:  install -Dm755 "file" "$1/usr/bin/file"       |
|   Good: install -Dm755 file "$1/usr/bin/file"         |
|                                                       |
|                                                       |
| [0209]                                                |
|                                                       |
|   Quote entire strings instead of variables.          |
|                                                       |
|   Bad:  install -Dm644 cat "$1"/usr/bin/cat           |
|   Good: install -Dm644 cat "$1/usr/bin/cat"           |
|                                                       |
|                                                       |
| [0210]                                                |
|                                                       |
|   Align arguments in blocks of command calls.         |
|                                                       |
|   Bad:                                                |
|                                                       |
|     install -D file.h "$1/usr/include/file.h"         |
|     install -D libfile.so "$1/usr/lib/libfile.so"     |
|                                                       |
|   Good:                                               |
|                                                       |
|     install -D file.h     "$1/usr/include/file.h"     |
|     install -D libfile.so "$1/usr/lib/libfile.so"     |
|                                                       |
|                                                       |
| [0211]                                                |
|                                                       |
|   Use 'install' instead of ...                        |
|                                                       |
|   Bad:                                                |
|                                                       |
|     mkdir -p "$1/usr/bin"                             |
|     cp ls "$1/usr/bin/"                               |
|                                                       |
|   Good:                                               |
|                                                       |
|     install -Dm755 ls "$1/usr/bin/ls"                 |
|                                                       |
|                                                       |
| [0212]                                                |
|                                                       |
|   Prefer $CC to ...                                   |
|                                                       |
|   Bad:  gcc -o file file.c                            |
|   Good: "${CC:-cc}" -o file file.c                    |
|                                                       |
|                                                       |
| [0213]                                                |
|                                                       |
|   Always use '-p' with 'mkdir'.                       |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                   GNU AUTOTOOLS                       |
|                                                       |
|                                                       |
| [0400]                                                |
|                                                       |
|   Use the following style:                            |
|                                                       |
|   ./configure \                                       |
|       --prefix=/usr \                                 |
|       --more_args_here                                |
|                                                       |
|   make                                                |
|   make DESTDIR="$1" install                           |
|                                                       |
|                                                       |
| [0401]                                                |
|                                                       |
|  Avoid running ./autogen.sh, autoreconf or similar    |
|  tools prior to starting the build process.           |
|                                                       |
|  If there are no pre-generated configure or           |
|  Makefiles, an alternate source must be sought.       |
|                                                       |
|  An exception can be made for packages in which no    |
|  such source exists.                                  |
|                                                       |
|  If autogen.sh or autoreconf are required, prefer     |
|  autoreconf.                                          |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                        MESON                          |
|                                                       |
|                                                       |
| [0600]                                                |
|                                                       |
|   Use the following style:                            |
|                                                       |
|   export DESTDIR="$1"                                 |
|                                                       |
|   meson \                                             |
|       --prefix=/usr \                                 |
|       -Dexample=false \                               |
|       . output                                        |
|                                                       |
|   ninja -C output                                     |
|   ninja -C output install                             |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                        CMAKE                          |
|                                                       |
|                                                       |
| [0800]                                                |
|                                                       |
|   Use the following style:                            |
|                                                       |
|   export DESTDIR="$1"                                 |
|                                                       |
|   cmake -B build \                                    |
|       -DCMAKE_INSTALL_PREFIX=/usr \                   |
|       -DFLAG=1                                        |
|                                                       |
|   cmake --build   build                               |
|   cmake --install build                               |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                        MAKE                           |
|                                                       |
|                                                       |
| [1000]                                                |
|                                                       |
|   Use one of the following style when applicable:     |
|                                                       |
|   make                                                |
|   make DESTDIR="$1" PREFIX=/usr install               |
|                                                       |
|                                                       |
|   make PREFIX=/usr                                    |
|   make DESTDIR="$1" install                           |
|                                                       |
|                                                       |
|   make PREFIX=/usr                                    |
|   make DESTDIR="$1" PREFIX=/usr install               |
|                                                       |
|                                                       |
|   For packages which require a few variables be       |
|   set, prefer this style.                             |
|                                                       |
|   make \                                              |
|       PREFIX=/usr \                                   |
|       SBINDIR=/usr/bin \                              |
|       OPT="$CFLAGS"                                   |
|                                                       |
|   make \                                              |
|       DESTDIR="$1" \                                  |
|       PREFIX=/usr \                                   |
|       install                                         |
|                                                       |
|                                                       |
|   For packages which require the variables be set     |
|   for all calls to make, prefer this style.           |
|                                                       |
|   mk() {                                              |
|       make \                                          |
|           PREFIX=/usr \                               |
|           DESTDIR="$1" \                              |
|           EXAMPLE=1 \                                 |
|           "$@"                                        |
|   }                                                   |
|                                                       |
|   mk                                                  |
|   mk install                                          |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                        RUST                           |
|                                                       |
|                                                       |
| [1050]                                                |
|                                                       |
|   Use the following style:                            |
|                                                       |
|   cargo build --release                               |
|                                                       |
|   install -Dm755 target/release/rg "$1/usr/bin/rg"    |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                         GO                            |
|                                                       |
|                                                       |
| [1100]                                                |
|                                                       |
|   Use the following style:                            |
|                                                       |
|   go build                                            |
|                                                       |
|   install -Dm755 lazygit "$1/usr/bin/lazygit"         |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                       PYTHON                          |
|                                                       |
|                                                       |
| [1150]                                                |
|                                                       |
|   Use the following style:                            |
|                                                       |
|   python setup.py build                               |
|   python setup.py install --prefix=/usr --root="$1"   |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                      DEPENDS                          |
|                                                       |
|                                                       |
| [1200]                                                |
|                                                       |
|   ...                                                 |
|                                                       |
|                                                       |
| [1201]                                                |
|                                                       |
|   This dependency is unneeded and can be removed.     |
|                                                       |
|                                                       |
| [1202]                                                |
|                                                       |
|   This dependency is implicit. Some packages are      |
|   assumed to always be available. This dependency     |
|   can be removed.                                     |
|                                                       |
|   Examples:                                           |
|                                                       |
|     gcc, make, pkgconf, linux-headers, musl.          |
|                                                       |
|                                                       |
| [1203]                                                |
|                                                       |
|   This dependency needs 'make' as it is only          |
|   required during build time.                         |
|                                                       |
|   Common Examples:                                    |
|                                                       |
|     autoconf, automake, cmake, meson.                 |
|                                                       |
|                                                       |
| [1204]                                                |
|                                                       |
|   This dependency doesn't need 'make' as it is        |
|   required during runtime.                            |
|                                                       |
|                                                       |
| [1205]                                                |
|                                                       |
|   The depends list must be sorted.                    |
|                                                       |
|                                                       |
| [1206]                                                |
|                                                       |
|   The depends file is empty and should be removed.    |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                      SOURCES                          |
|                                                       |
|                                                       |
| [1400]                                                |
|                                                       |
|   ...                                                 |
|                                                       |
|                                                       |
| [1401]                                                |
|                                                       |
|   Use a HTTPS source if at all possible.              |
|                                                       |
|                                                       |
| [1402]                                                |
|                                                       |
|   Don't specify patches remotely. Store them as a     |
|   part of the package's repository files.             |
|                                                       |
|   Bad:  https://example.com/fix-build.patch           |
|   Good: patches/fix-build.patch                       |
|                                                       |
|                                                       |
| [1403]                                                |
|                                                       |
|   Don't use a git repository in place of a release    |
|   tarball unless it makes sense.                      |
|                                                       |
|                                                       |
| [1404]                                                |
|                                                       |
|   Drop www. and .git from all sources if possible.    |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                      VERSION                          |
|                                                       |
|                                                       |
| [1600]                                                |
|                                                       |
|   ...                                                 |
|                                                       |
|                                                       |
| [1601]                                                |
|                                                       |
|   Version doesn't match upstream.                     |
|                                                       |
|                                                       |
| [1602]                                                |
|                                                       |
|   Use 'git' in place of '9999'.                       |
|                                                       |
|                                                       |
| [1603]                                                |
|                                                       |
|   Missing relative version number.                    |
|                                                       |
|   Bad:  1.0.0                                         |
|   Good: 1.0.0 1                                       |
|                                                       |
|                                                       |
+-------------------------------------------------------+

+-------------------------------------------------------+
|                                                       |
|                      PATCHES                          |
|                                                       |
|                                                       |
| [1800]                                                |
|                                                       |
|   Use the following style:                            |
|                                                       |
|     patch -p1 < patch.patch                           |
|                                                       |
|     # If there is more than one patch.                |
|     for patch in *.patch; do                          |
|         patch -p1 < "$patch"                          |
|     done                                              |
|                                                       |
|                                                       |
| [1801]                                                |
|                                                       |
|   All patches should use the same strip amount.       |
|   If this is not possible, modify the patches.        |
|                                                       |
|   Strip amount is controlled by the -p flag.          |
|                                                       |
|                                                       |
+-------------------------------------------------------+


The registered trademark Linux(R) is used pursuant to a sublicense from the Linux Foundation, the exclusive licensee of Linus Torvalds, owner of the mark on a world­wide basis. (C) Dylan Araps 2019-2020 View page source