aboutsummaryrefslogtreecommitdiffstats
path: root/templates/c
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-04-01 12:56:56 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-04-01 12:56:56 +0200
commit4fec87e212697a3f58245eb71a054357aa9f0898 (patch)
tree1992ad88fcebdf90c6bd76d04728c085fb5fbe21 /templates/c
parentrefactor(templates/unmaintained): Move out of the templates dir (diff)
downloadflake-templates-4fec87e212697a3f58245eb71a054357aa9f0898.zip
refactor(templates): Instantiate all symlinks
Symlinks are copied verbatim, when nix initializes a template, thus symlinking common files does not work.
Diffstat (limited to '')
-rw-r--r--templates/c/.licensure.yml18
-rwxr-xr-x[l---------]templates/c/scripts/renew_copyright_header.sh87
-rw-r--r--[l---------]templates/c/treefmt.nix74
3 files changed, 177 insertions, 2 deletions
diff --git a/templates/c/.licensure.yml b/templates/c/.licensure.yml
index e1f5a01..b7f963a 100644
--- a/templates/c/.licensure.yml
+++ b/templates/c/.licensure.yml
@@ -14,6 +14,24 @@ excludes:
# No default license configuration is provided. This section must be
# configured by the user.
licenses:
+ - files: tex
+ ident: CC-BY-SA-4.0
+ authors:
+ - name: Benedikt Peetz
+ email: "benedikt.peetz@b-peetz.de"
+
+ template: |
+ <TODO> 2024 - [year] (C) by [name of author]
+ SPDX-License-Identifier: CC-BY-SA-4.0
+
+ <TODO> is licensed under a
+ Creative Commons Attribution-ShareAlike 4.0 International License.
+
+ You should have received a copy of the license along with this
+ work. If not, see <https://creativecommons.org/licenses/by-sa/4.0/>.
+
+ unwrap_text: false
+
# Either a regex or the string "any" to determine to what files this
# license should apply. It is common for projects to have files
# under multiple licenses or with multiple copyright holders. This
diff --git a/templates/c/scripts/renew_copyright_header.sh b/templates/c/scripts/renew_copyright_header.sh
index f286da9..edb0a65 120000..100755
--- a/templates/c/scripts/renew_copyright_header.sh
+++ b/templates/c/scripts/renew_copyright_header.sh
@@ -1 +1,86 @@
-../../../common/renew_copyright_header.sh \ No newline at end of file
+#! /usr/bin/env sh
+
+# NOTE: This is the line length of the .licensure.yml header template **plus** the extra
+# line after the template comment.
+TEMPLATE_LINE_LENGTH=20
+
+PROJECT_ROOT="$(git rev-parse --show-toplevel)"
+
+remove() {
+ extension="$1"
+ file="$2"
+
+ # We need to differentiate, when removing the old copyright header, as some
+ # formatters do weird things to the file
+ case "$extension" in
+ # normal '#' comments (these are $TEMPLATE_LINE_LENGTH lines long)
+ "Makefile" | "toml" | "envrc" | "yml" | "gitignore" | "awk")
+ sed --in-place "1,${TEMPLATE_LINE_LENGTH}d" "$file"
+ ;;
+ # normal '/* ... */' like comments (these are $TEMPLATE_LINE_LENGTH + 2 lines long)
+ "c" | "h" | "md" | "rs")
+ length="$((TEMPLATE_LINE_LENGTH + 2))"
+ sed --in-place "1,${length}d;" "$file"
+ ;;
+ # alejandra (the nix formatter) removes the blank line after the comment,
+ # thus only $TEMPLATE_LINE_LENGTH - 1 lines
+ "nix")
+ length="$((TEMPLATE_LINE_LENGTH - 1))"
+ sed --in-place "1,${length}d;" "$file"
+ ;;
+ # Shell needs a shebang on the first line, only after the first line can we
+ # remove the $TEMPLATE_LINE_LENGTH lines
+ "sh")
+ sed --in-place "2,${TEMPLATE_LINE_LENGTH}d;" "$file"
+ licensure --in-place "$file"
+
+ TEMPLATE_LINE_LENGTH_NEW="$(($(yq --raw-output '.licenses | map(.template) | join("")' "$PROJECT_ROOT/.licensure.yml" | wc -l) + $(yq '.comments | last | .commenter.trailing_lines' "$PROJECT_ROOT/.licensure.yml")))"
+
+ # delete the current shebang
+ to="$((TEMPLATE_LINE_LENGTH_NEW + 1))"
+ sed --in-place "${TEMPLATE_LINE_LENGTH_NEW},${to}d;" "$file"
+
+ # add a new one
+ sed --in-place "1i#! /usr/bin/env sh" "$file"
+ ;;
+ *)
+ echo "File '$file' with extension '$extension' is not know yet, please add it!"
+ ;;
+ esac
+}
+
+list() {
+ echo "$extension -> $file"
+}
+
+if [ -f "$1" ]; then
+ file="$(realpath "$1")"
+ filename="$(basename -- "$file")"
+ extension="${filename##*.}"
+ filename="${filename%.*}"
+
+ if [ -n "$DRY_RUN" ]; then
+ list "$extension" "$file"
+ else
+ remove "$extension" "$file"
+ fi
+else
+ fd --type file --hidden . | while read -r file; do
+ if grep --quiet 'SPDX-License-Identifier: GPL-3.0-or-later' "$file"; then
+ filename="$(basename -- "$file")"
+ extension="${filename##*.}"
+ filename="${filename%.*}"
+
+ if [ -n "$DRY_RUN" ]; then
+ list "$extension" "$file"
+ else
+ remove "$extension" "$file"
+ fi
+ fi
+ done
+
+ if [ -z "$DRY_RUN" ]; then
+ licensure --in-place --project
+ nix fmt
+ fi
+fi
diff --git a/templates/c/treefmt.nix b/templates/c/treefmt.nix
index 6a4fe7d..1cbab40 120000..100644
--- a/templates/c/treefmt.nix
+++ b/templates/c/treefmt.nix
@@ -1 +1,73 @@
-../../treefmt.nix \ No newline at end of file
+{
+ treefmt-nix,
+ pkgs,
+}:
+treefmt-nix.lib.evalModule pkgs (
+ {pkgs, ...}: {
+ # Used to find the project root
+ projectRootFile = "flake.nix";
+
+ programs = {
+ alejandra.enable = true;
+ rustfmt.enable = true;
+ clang-format.enable = true;
+ mdformat.enable = true;
+ shfmt = {
+ enable = true;
+ indent_size = 4;
+ };
+ shellcheck.enable = true;
+ prettier = {
+ settings = {
+ arrowParens = "always";
+ bracketSameLine = false;
+ bracketSpacing = true;
+ editorconfig = true;
+ embeddedLanguageFormatting = "auto";
+ endOfLine = "lf";
+ # experimentalTernaries = false;
+ htmlWhitespaceSensitivity = "css";
+ insertPragma = false;
+ jsxSingleQuote = true;
+ printWidth = 80;
+ proseWrap = "always";
+ quoteProps = "consistent";
+ requirePragma = false;
+ semi = true;
+ singleAttributePerLine = true;
+ singleQuote = true;
+ trailingComma = "all";
+ useTabs = false;
+ vueIndentScriptAndStyle = false;
+
+ tabWidth = 4;
+ overrides = {
+ files = ["*.js"];
+ options.tabwidth = 2;
+ };
+ };
+ };
+ stylua.enable = true;
+ ruff = {
+ enable = true;
+ format = true;
+ };
+ taplo.enable = true;
+ };
+
+ settings = {
+ global.excludes = [
+ "CHANGELOG.md"
+ "NEWS.md"
+ ];
+ formatter = {
+ clang-format = {
+ options = ["--style" "GNU"];
+ };
+ shfmt = {
+ includes = ["*.bash"];
+ };
+ };
+ };
+ }
+)