From 7d0a36bc08583e7d91b21b2b317803c963df96e6 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Fri, 3 May 2024 19:10:49 +0200 Subject: [PATCH] build(treewide): Update to newest build tooling --- .envrc | 7 +- .gitignore | 20 +++++ .licensure.yml | 129 ++++++++++++++++----------- Cargo.toml | 8 +- LICENSE.spdx | 6 +- README.md | 32 +++++++ cog.toml | 33 +++---- flake.lock | 68 +++++++++----- flake.nix | 118 +++++++++++------------- scripts/renew_copyright_header.sh | 111 +++++++++++++++++++++++ src/error/mod.rs | 5 +- src/key_repr/key/crossterm.rs | 5 +- src/key_repr/key/mod.rs | 5 +- src/key_repr/key/parsing/mod.rs | 10 ++- src/key_repr/key_representation.pest | 5 +- src/key_repr/key_value/crossterm.rs | 5 +- src/key_repr/key_value/mod.rs | 5 +- src/key_repr/keys/mod.rs | 5 +- src/key_repr/mod.rs | 5 +- src/lib.rs | 7 +- src/trie.rs | 5 +- treefmt.nix | 92 +++++++++++++++++++ update.sh | 24 +++++ 23 files changed, 519 insertions(+), 191 deletions(-) create mode 100644 README.md create mode 100755 scripts/renew_copyright_header.sh create mode 100644 treefmt.nix create mode 100755 update.sh diff --git a/.envrc b/.envrc index 1bcd4c0..bb63af7 100644 --- a/.envrc +++ b/.envrc @@ -1,4 +1,6 @@ -# Copyright (C) 2023 The Trinitrix Project +# Copyright (C) 2024 - 2024: +# The Trinitrix Project +# SPDX-License-Identifier: LGPL-3.0-or-later # # This file is part of the Keymaps crate for Trinitrix. # @@ -16,10 +18,11 @@ # and the Lesser GNU General Public License along with this program. # If not, see . - use flake || use nix watch_file flake.nix +PATH_add ./scripts + if on_git_branch; then echo && git status --short --branch && echo && git fetch --verbose diff --git a/.gitignore b/.gitignore index c1539b8..17c28aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,23 @@ +# Copyright (C) 2024 - 2024: +# The Trinitrix Project +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# This file is part of the Keymaps crate for Trinitrix. +# +# Keymaps is free software: you can redistribute it and/or modify +# it under the terms of the Lesser GNU General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# and the Lesser GNU General Public License along with this program. +# If not, see . + # build /target /result diff --git a/.licensure.yml b/.licensure.yml index 38d7a94..3602e8e 100644 --- a/.licensure.yml +++ b/.licensure.yml @@ -1,16 +1,34 @@ +# Copyright (C) 2024 - 2024: +# The Trinitrix Project +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# This file is part of the Keymaps crate for Trinitrix. +# +# Keymaps is free software: you can redistribute it and/or modify +# it under the terms of the Lesser GNU General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# and the Lesser GNU General Public License along with this program. +# If not, see . + --- # Regexes which if matched by a file path will always be excluded from # getting a license header excludes: - - \.gitignore - .*lock - \.git/.* - - \.licensure\.yml - - README.* - LICENSE.spdx + - LICENSE - COPYING - COPYING.LESSER - - .*\.(md|rst|txt|pdf) + - .*\.(rst|txt|pdf) # Definition of the licenses used on this project and to what files # they should apply. # @@ -25,29 +43,29 @@ licenses: # # If "any" is provided all files will match this license. - files: any - # - # The license identifier, a list of common identifiers can be - # found at: https://spdx.org/licenses/ but existence of the ident - # in this list it is not enforced unless auto_template is set to - # true. + # + # The license identifier, a list of common identifiers can be + # found at: https://spdx.org/licenses/ but existence of the ident + # in this list it is not enforced unless auto_template is set to + # true. ident: LGPL-3.0-or-later - # - # A list of authors who hold copyright over these files + # + # A list of authors who hold copyright over these files authors: - # Provide either your full name or company name for copyright purposes - - name: The Trinitrix Project - # Optionally provide email for copyright purposes - email: "soispha@vhack.eu, antifallobst@systemausfall.org" - # - # The template that will be rendered to generate the header before - # comment characters are applied. Available variables are: - # - [year]: substituted with the current year. - # - [name of author]: Substituted with name of the author and email - # if provided. If email is provided the output appears as Full - # Name . If multiple authors are provided the - # list is concatenated together with commas. + - name: "The Trinitrix Project" + email: "bpeetz@b-peetz.de, antifallobst@systemausfall.org" + + # The template that will be rendered to generate the header before + # comment characters are applied. Available variables are: + # - [year]: substituted with the current year. + # - [name of author]: Substituted with name of the author and email + # if provided. If email is provided the output appears as Full + # Name . If multiple authors are provided the + # list is concatenated together with commas. template: | - Copyright (C) [year] [name of author] + Copyright (C) 2024 - [year]: + [name of author] + SPDX-License-Identifier: LGPL-3.0-or-later This file is part of the Keymaps crate for Trinitrix. @@ -64,23 +82,24 @@ licenses: You should have received a copy of the GNU General Public License and the Lesser GNU General Public License along with this program. If not, see . - # - # If auto_template is true then template is ignored and the SPDX - # API will be queried with the ident value to automatically - # determine the license header template. auto_template works best - # with licenses that have a standardLicenseHeader field defined in - # their license info JSON, if it is not then we will use the full - # licenseText to generate the header which works fine for short - # licenses like MIT but can be quite lengthy for other licenses - # like BSD-4-Clause. The above default template is valid for most - # licenses and is recommended for MIT, and BSD licenses. Common - # licenses that work well with the auto_template feature are GPL - # variants, and the Apache 2.0 license. - # - # Important Note: this means the ident must be a valid SPDX identifier - # auto_template: true - # - # If true try to detect the text wrapping of the template, and unwrap it + + + # If auto_template is true then template is ignored and the SPDX + # API will be queried with the ident value to automatically + # determine the license header template. auto_template works best + # with licenses that have a standardLicenseHeader field defined in + # their license info JSON, if it is not then we will use the full + # licenseText to generate the header which works fine for short + # licenses like MIT but can be quite lengthy for other licenses + # like BSD-4-Clause. The above default template is valid for most + # licenses and is recommended for MIT, and BSD licenses. Common + # licenses that work well with the auto_template feature are GPL + # variants, and the Apache 2.0 license. + # + # Important Note: this means the ident must be a valid SPDX identifier + # auto_template: true + + # If true try to detect the text wrapping of the template, and unwrap it unwrap_text: false # Define type of comment characters to apply based on file extensions. @@ -103,7 +122,7 @@ comments: commenter: type: line comment_char: "//" - trailing_lines: 2 + trailing_lines: 1 - extensions: - rs @@ -111,6 +130,7 @@ comments: - css - cpp - c + - h # This demonstrates a block commenter configuration. A block # commenter type will add start_block_char as the first character # in the license header and add end_block_char as the last character @@ -125,14 +145,16 @@ comments: start_block_char: "/*\n" end_block_char: "*/\n" per_line_char: "*" - trailing_lines: 2 + trailing_lines: 1 - # In this case extension is singular and a single string extension is provided. - - extension: html + - extension: + - html + - md commenter: type: block start_block_char: "" + end_block_char: "-->\n" + trailing_lines: 1 - extensions: - el @@ -140,16 +162,15 @@ comments: commenter: type: line comment_char: ";;;" - trailing_lines: 2 + trailing_lines: 1 - extensions: - - ebnf + - tex + - bib commenter: - type: block - start_block_char: "#(*\n" - end_block_char: "#*)\n" - per_line_char: "#" - trailing_lines: 2 + type: line + comment_char: "%" + trailing_lines: 1 # The extension string "any" is special and so will match any file # extensions. Commenter configurations are always checked in the @@ -163,4 +184,4 @@ comments: commenter: type: line comment_char: '#' - trailing_lines: 2 + trailing_lines: 1 diff --git a/Cargo.toml b/Cargo.toml index 83d09b5..6837e4b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,6 @@ -# Copyright (C) 2023 The Trinitrix Project +# Copyright (C) 2024 - 2024: +# The Trinitrix Project +# SPDX-License-Identifier: LGPL-3.0-or-later # # This file is part of the Keymaps crate for Trinitrix. # @@ -16,9 +18,9 @@ # and the Lesser GNU General Public License along with this program. # If not, see . - [package] name = "keymaps" +description = "A rust crate which provides a standardized encoding for key codes" version = "0.1.0" edition = "2021" @@ -33,7 +35,7 @@ crossterm = { version = "0.25", optional = true } log = "0.4.20" thiserror = "1.0.50" pest = "2.7.5" -pest_derive = {version = "2.7.5", features = ["grammar-extras"]} +pest_derive = { version = "2.7.5", features = ["grammar-extras"] } [dev-dependencies] pretty_assertions = "1.4.0" diff --git a/LICENSE.spdx b/LICENSE.spdx index f0232e9..134a8ae 100644 --- a/LICENSE.spdx +++ b/LICENSE.spdx @@ -1,7 +1,7 @@ SPDXVersion: SPDX-2.3 DataLicense: CC0-1.0 -Creator: trinitrix contributers -PackageName: Trinitrix-keymaps -PackageOriginator: trinitrix contributers +Creator: flake template init +PackageName: keymaps +PackageOriginator: Benedikt Peetz PackageHomePage: https://git.nerdcult.net/trinitrix/keymaps PackageLicenseDeclared: LGPL-3.0-or-later diff --git a/README.md b/README.md new file mode 100644 index 0000000..d5a9e8b --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ + + +# Keymaps + +> A rust crate which provides a standardized encoding for key codes + +## Licence + +This program is free software: you can redistribute it and/or modify +it under the terms of the Lesser GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. diff --git a/cog.toml b/cog.toml index d8e9b2c..19e3438 100644 --- a/cog.toml +++ b/cog.toml @@ -1,4 +1,6 @@ -# Copyright (C) 2023 The Trinitrix Project +# Copyright (C) 2024 - 2024: +# The Trinitrix Project +# SPDX-License-Identifier: LGPL-3.0-or-later # # This file is part of the Keymaps crate for Trinitrix. # @@ -16,35 +18,28 @@ # and the Lesser GNU General Public License along with this program. # If not, see . - tag_prefix = "v" -branch_whitelist = [ "main" ] +branch_whitelist = ["main", "prime"] ignore_merge_commits = false -[commit_types] - pre_bump_hooks = [ - "licensur -p -i" # update the license header in each file - "nix build", # verify the project builds - "cargo fmt --all" # format - "cargo set-version {{version}}", # bump version in Cargo.toml + "nix flake check", # verify the project builds + "./scripts/renew_copyright_header.sh", # update the license header in each file + "cargo set-version {{version}}", # bump version in Cargo.toml + "nix fmt", # format ] post_bump_hooks = [ - "git push", - "cargo publish", - "git push origin v{{version}}", # push the new tag to origin + "git push", + "cargo publish", + "git push origin v{{version}}", # push the new tag to origin ] [bump_profiles] [changelog] path = "NEWS.md" -remote = "git.nerdcult.net" +template = "remote" +remote = "codeberg.org" repository = "keymaps" owner = "trinitrix" -authors = [ - { signature = "Soispha", username = "soispha" }, -] - - -[packages] +authors = [{ signature = "Benedikt Peetz", username = "soispha" }] diff --git a/flake.lock b/flake.lock index ecbf802..ca7d44c 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1703089493, - "narHash": "sha256-WUjYqUP/Lhhop9+aiHVFREgElunx1AHEWxqMT8ePfzo=", + "lastModified": 1714536327, + "narHash": "sha256-zu4+LcygJwdyFHunTMeDFltBZ9+hoWvR/1A7IEy7ChA=", "owner": "ipetkov", "repo": "crane", - "rev": "2a5136f14a9ac93d9d370d64a36026c5de3ae8a4", + "rev": "3124551aebd8db15d4560716d4f903bd44c64e4a", "type": "github" }, "original": { @@ -38,14 +38,16 @@ }, "flake-utils": { "inputs": { - "systems": "systems" + "systems": [ + "systems" + ] }, "locked": { - "lastModified": 1701680307, - "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -56,16 +58,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1703349974, - "narHash": "sha256-BcR1wW63W4baNtWbpg25d/mt0DVkEBIFssAY9JPNpZg=", - "owner": "soispha", + "lastModified": 1714656196, + "narHash": "sha256-kjQkA98lMcsom6Gbhw8SYzmwrSo+2nruiTcTZp5jK7o=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "7e33c3c5db1c69a50efc2143ffa53539e8b4c0ed", + "rev": "94035b482d181af0a0f8f77823a790b256b7c3cc", "type": "github" }, "original": { - "owner": "soispha", - "ref": "licensure", + "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } @@ -76,7 +78,9 @@ "flake-compat": "flake-compat", "flake-utils": "flake-utils", "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" + "rust-overlay": "rust-overlay", + "systems": "systems", + "treefmt-nix": "treefmt-nix" } }, "rust-overlay": { @@ -89,11 +93,11 @@ ] }, "locked": { - "lastModified": 1703297543, - "narHash": "sha256-d4QlzcoSNzb/iZheWtjOyRxoBSaLETSpViENGEkxv9g=", + "lastModified": 1714702555, + "narHash": "sha256-/NoUbE5S5xpK1FU3nlHhQ/tL126+JcisXdzy3Ng4pDU=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "fc77c8b416b1537522d30c710baaaaebf769f816", + "rev": "7f0e3ef7b7fbed78e12e5100851175d28af4b7c6", "type": "github" }, "original": { @@ -104,16 +108,36 @@ }, "systems": { "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1680978846, + "narHash": "sha256-Gtqg8b/v49BFDpDetjclCYXm8mAnTrUzR0JnE2nv5aw=", "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "repo": "x86_64-linux", + "rev": "2ecfcac5e15790ba6ce360ceccddb15ad16d08a8", "type": "github" }, "original": { "owner": "nix-systems", - "repo": "default", + "repo": "x86_64-linux", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1714058656, + "narHash": "sha256-Qv4RBm4LKuO4fNOfx9wl40W2rBbv5u5m+whxRYUMiaA=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "c6aaf729f34a36c445618580a9f95a48f5e4e03f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", "type": "github" } } diff --git a/flake.nix b/flake.nix index 64215f3..161f29a 100644 --- a/flake.nix +++ b/flake.nix @@ -1,4 +1,6 @@ -# Copyright (C) 2023 The Trinitrix Project +# Copyright (C) 2024 - 2024: +# The Trinitrix Project +# SPDX-License-Identifier: LGPL-3.0-or-later # # This file is part of the Keymaps crate for Trinitrix. # @@ -15,35 +17,17 @@ # You should have received a copy of the GNU General Public License # and the Lesser GNU General Public License along with this program. # If not, see . - - -# Copyright (C) 2023 The Trinitrix Project -# -# This file is part of the Trixy crate for Trinitrix. -# -# Trixy is free software: you can redistribute it and/or modify -# it under the terms of the Lesser GNU General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# and the Lesser GNU General Public License along with this program. -# If not, see . { - description = "A rust crate which provides a standatised encoding for keycodes"; - inputs = { - # nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - nixpkgs.url = "github:soispha/nixpkgs/licensure"; + description = "A rust crate which provides a standardized encoding for key codes"; - # inputs for following - flake-compat = { - url = "github:edolstra/flake-compat"; - flake = false; + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs = { + nixpkgs.follows = "nixpkgs"; + }; }; crane = { @@ -52,10 +36,6 @@ nixpkgs.follows = "nixpkgs"; }; }; - flake-utils = { - url = "github:numtide/flake-utils"; - inputs = {}; - }; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs = { @@ -63,11 +43,29 @@ flake-utils.follows = "flake-utils"; }; }; + + # inputs for following + systems = { + url = "github:nix-systems/x86_64-linux"; # only evaluate for this system + }; + flake-compat = { + url = "github:edolstra/flake-compat"; + flake = false; + }; + flake-utils = { + url = "github:numtide/flake-utils"; + inputs = { + systems.follows = "systems"; + }; + }; }; + outputs = { + self, nixpkgs, - crane, flake-utils, + treefmt-nix, + crane, rust-overlay, ... }: @@ -78,54 +76,46 @@ }; nightly = false; - rust = + rust_minimal = if nightly - then - (pkgs.rust-bin.selectLatestNightlyWith (toolchain: - toolchain.default)) - .override { - extensions = ["rustc-codegen-cranelift-preview"]; - } - else pkgs.rust-bin.stable.latest.default; - rust_min = - if nightly - then - (pkgs.rust-bin.selectLatestNightlyWith (toolchain: - toolchain.minimal)) - .override { - extensions = ["rustc-codegen-cranelift-preview"]; - } + then pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal) else pkgs.rust-bin.stable.latest.minimal; + rust_default = + if nightly + then pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default) + else pkgs.rust-bin.stable.latest.default; - craneLib = (crane.mkLib pkgs).overrideToolchain rust_min; - - nativeBuildInputs = []; - buildInputs = []; - + craneLib = (crane.mkLib pkgs).overrideToolchain rust_minimal; craneBuild = craneLib.buildPackage { src = craneLib.cleanCargoSource ./.; doCheck = true; - inherit nativeBuildInputs buildInputs; }; + + treefmtEval = import ./treefmt.nix {inherit treefmt-nix pkgs;}; in { - checks.default = craneBuild; - packages = { - default = craneBuild; + packages.default = craneBuild; + + checks = { + inherit craneBuild; + formatting = treefmtEval.config.build.check self; }; + formatter = treefmtEval.config.build.wrapper; + devShells.default = pkgs.mkShell { packages = with pkgs; [ - alejandra - cocogitto - licensure - rust + yq + + rust_default cargo-edit - cargo-expand + + licensure ]; - inherit nativeBuildInputs buildInputs; }; }); } +# vim: ts=2 + diff --git a/scripts/renew_copyright_header.sh b/scripts/renew_copyright_header.sh new file mode 100755 index 0000000..4943eb2 --- /dev/null +++ b/scripts/renew_copyright_header.sh @@ -0,0 +1,111 @@ +#! /usr/bin/env sh +# Copyright (C) 2024 - 2024: +# The Trinitrix Project +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# This file is part of the Keymaps crate for Trinitrix. +# +# Keymaps is free software: you can redistribute it and/or modify +# it under the terms of the Lesser GNU General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# and the Lesser GNU General Public License along with this program. +# If not, see . + +# NOTE: This is the line length of the .licensure.yml header template **plus** the extra +# line after the template comment. +TEMPLATE_LINE_LENGTH=20 +LATEX_TEMPLATE_LINE_LENGTH=9 + +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" | "pest") + sed --in-place "1,${TEMPLATE_LINE_LENGTH}d" "$file" + ;; + # LaTeX files (or TeX files in general) have a different license, use the + # $LATEX_TEMPLATE_LINE_LENGTH variable. + "tex") + sed --in-place "1,${LATEX_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' "$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/src/error/mod.rs b/src/error/mod.rs index 83ed614..ab0962a 100644 --- a/src/error/mod.rs +++ b/src/error/mod.rs @@ -1,5 +1,7 @@ /* -* Copyright (C) 2023 The Trinitrix Project +* Copyright (C) 2024 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of the Keymaps crate for Trinitrix. * @@ -18,7 +20,6 @@ * If not, see . */ - use std::{fmt::Display, num::ParseIntError}; use thiserror::Error; diff --git a/src/key_repr/key/crossterm.rs b/src/key_repr/key/crossterm.rs index 6e73766..bea630b 100644 --- a/src/key_repr/key/crossterm.rs +++ b/src/key_repr/key/crossterm.rs @@ -1,5 +1,7 @@ /* -* Copyright (C) 2023 The Trinitrix Project +* Copyright (C) 2024 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of the Keymaps crate for Trinitrix. * @@ -18,7 +20,6 @@ * If not, see . */ - use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers}; use crate::{error, key_repr::KeyValue}; diff --git a/src/key_repr/key/mod.rs b/src/key_repr/key/mod.rs index 277ca5b..eac27a3 100644 --- a/src/key_repr/key/mod.rs +++ b/src/key_repr/key/mod.rs @@ -1,5 +1,7 @@ /* -* Copyright (C) 2023 The Trinitrix Project +* Copyright (C) 2024 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of the Keymaps crate for Trinitrix. * @@ -18,7 +20,6 @@ * If not, see . */ - #[cfg(feature = "crossterm")] mod crossterm; diff --git a/src/key_repr/key/parsing/mod.rs b/src/key_repr/key/parsing/mod.rs index 7587f8b..7870cff 100644 --- a/src/key_repr/key/parsing/mod.rs +++ b/src/key_repr/key/parsing/mod.rs @@ -1,5 +1,7 @@ /* -* Copyright (C) 2023 The Trinitrix Project +* Copyright (C) 2024 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of the Keymaps crate for Trinitrix. * @@ -18,12 +20,14 @@ * If not, see . */ - use std::{fmt::Debug, hash::Hash, marker, str::FromStr}; use pest::{iterators::Pair, Parser}; -use crate::{error, key_repr::{KeyValue, key::Rule}}; +use crate::{ + error, + key_repr::{key::Rule, KeyValue}, +}; use super::Key; diff --git a/src/key_repr/key_representation.pest b/src/key_repr/key_representation.pest index 444742c..a9af1d0 100644 --- a/src/key_repr/key_representation.pest +++ b/src/key_repr/key_representation.pest @@ -1,4 +1,6 @@ -// Copyright (C) 2023 The Trinitrix Project +// Copyright (C) 2024 - 2024: +// The Trinitrix Project +// SPDX-License-Identifier: LGPL-3.0-or-later // // This file is part of the Keymaps crate for Trinitrix. // @@ -16,7 +18,6 @@ // and the Lesser GNU General Public License along with this program. // If not, see . - angular_bracket_open = _{ "<" } abo = _{ angular_bracket_open } angular_bracket_close = _{ ">" } diff --git a/src/key_repr/key_value/crossterm.rs b/src/key_repr/key_value/crossterm.rs index eccc809..9bd62d4 100644 --- a/src/key_repr/key_value/crossterm.rs +++ b/src/key_repr/key_value/crossterm.rs @@ -1,5 +1,7 @@ /* -* Copyright (C) 2023 The Trinitrix Project +* Copyright (C) 2024 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of the Keymaps crate for Trinitrix. * @@ -18,7 +20,6 @@ * If not, see . */ - use crossterm::event::KeyCode; use super::KeyValue; diff --git a/src/key_repr/key_value/mod.rs b/src/key_repr/key_value/mod.rs index b1474fd..9510f3d 100644 --- a/src/key_repr/key_value/mod.rs +++ b/src/key_repr/key_value/mod.rs @@ -1,5 +1,7 @@ /* -* Copyright (C) 2023 The Trinitrix Project +* Copyright (C) 2024 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of the Keymaps crate for Trinitrix. * @@ -18,7 +20,6 @@ * If not, see . */ - #[cfg(feature = "crossterm")] mod crossterm; diff --git a/src/key_repr/keys/mod.rs b/src/key_repr/keys/mod.rs index 9535eb9..a3b8d93 100644 --- a/src/key_repr/keys/mod.rs +++ b/src/key_repr/keys/mod.rs @@ -1,5 +1,7 @@ /* -* Copyright (C) 2023 The Trinitrix Project +* Copyright (C) 2024 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of the Keymaps crate for Trinitrix. * @@ -18,7 +20,6 @@ * If not, see . */ - use pest::Parser; use pest_derive::Parser; diff --git a/src/key_repr/mod.rs b/src/key_repr/mod.rs index fa2a16b..6bfed0f 100644 --- a/src/key_repr/mod.rs +++ b/src/key_repr/mod.rs @@ -1,5 +1,7 @@ /* -* Copyright (C) 2023 The Trinitrix Project +* Copyright (C) 2024 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of the Keymaps crate for Trinitrix. * @@ -18,7 +20,6 @@ * If not, see . */ - pub mod key; pub mod key_value; pub mod keys; diff --git a/src/lib.rs b/src/lib.rs index bb8ec2f..cdacead 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,7 @@ /* -* Copyright (C) 2023 The Trinitrix Project +* Copyright (C) 2024 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of the Keymaps crate for Trinitrix. * @@ -18,7 +20,6 @@ * If not, see . */ - +pub mod error; pub mod key_repr; pub mod trie; -pub mod error; diff --git a/src/trie.rs b/src/trie.rs index f0a4048..55f9c88 100644 --- a/src/trie.rs +++ b/src/trie.rs @@ -1,5 +1,7 @@ /* -* Copyright (C) 2023 The Trinitrix Project +* Copyright (C) 2024 - 2024: +* The Trinitrix Project +* SPDX-License-Identifier: LGPL-3.0-or-later * * This file is part of the Keymaps crate for Trinitrix. * @@ -18,7 +20,6 @@ * If not, see . */ - use std::collections::HashMap; use log::info; diff --git a/treefmt.nix b/treefmt.nix new file mode 100644 index 0000000..fdbef39 --- /dev/null +++ b/treefmt.nix @@ -0,0 +1,92 @@ +# Copyright (C) 2024 - 2024: +# The Trinitrix Project +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# This file is part of the Keymaps crate for Trinitrix. +# +# Keymaps is free software: you can redistribute it and/or modify +# it under the terms of the Lesser GNU General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# and the Lesser GNU General Public License along with this program. +# If not, see . +{ + 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"]; + }; + }; + }; + } +) diff --git a/update.sh b/update.sh new file mode 100755 index 0000000..717f9b8 --- /dev/null +++ b/update.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env sh +# Copyright (C) 2024 - 2024: +# The Trinitrix Project +# SPDX-License-Identifier: LGPL-3.0-or-later +# +# This file is part of the Keymaps crate for Trinitrix. +# +# Keymaps is free software: you can redistribute it and/or modify +# it under the terms of the Lesser GNU General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# and the Lesser GNU General Public License along with this program. +# If not, see . + +nix flake update +cargo update +[ "$1" = "upgrade" ] && cargo upgrade