build(treewide): Update to newest build tooling

This commit is contained in:
Benedikt Peetz 2024-05-03 19:10:49 +02:00
parent d28f6684f7
commit 7d0a36bc08
23 changed files with 519 additions and 191 deletions

7
.envrc
View File

@ -1,4 +1,6 @@
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> # Copyright (C) 2024 - 2024:
# The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
# SPDX-License-Identifier: LGPL-3.0-or-later
# #
# This file is part of the Keymaps crate for Trinitrix. # 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. # and the Lesser GNU General Public License along with this program.
# If not, see <https://www.gnu.org/licenses/>. # If not, see <https://www.gnu.org/licenses/>.
use flake || use nix use flake || use nix
watch_file flake.nix watch_file flake.nix
PATH_add ./scripts
if on_git_branch; then if on_git_branch; then
echo && git status --short --branch && echo && git status --short --branch &&
echo && git fetch --verbose echo && git fetch --verbose

20
.gitignore vendored
View File

@ -1,3 +1,23 @@
# Copyright (C) 2024 - 2024:
# The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
# 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 <https://www.gnu.org/licenses/>.
# build # build
/target /target
/result /result

View File

@ -1,16 +1,34 @@
# Copyright (C) 2024 - 2024:
# The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
# 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 <https://www.gnu.org/licenses/>.
--- ---
# Regexes which if matched by a file path will always be excluded from # Regexes which if matched by a file path will always be excluded from
# getting a license header # getting a license header
excludes: excludes:
- \.gitignore
- .*lock - .*lock
- \.git/.* - \.git/.*
- \.licensure\.yml
- README.*
- LICENSE.spdx - LICENSE.spdx
- LICENSE
- COPYING - COPYING
- COPYING.LESSER - COPYING.LESSER
- .*\.(md|rst|txt|pdf) - .*\.(rst|txt|pdf)
# Definition of the licenses used on this project and to what files # Definition of the licenses used on this project and to what files
# they should apply. # they should apply.
# #
@ -25,29 +43,29 @@ licenses:
# #
# If "any" is provided all files will match this license. # If "any" is provided all files will match this license.
- files: any - files: any
# #
# The license identifier, a list of common identifiers can be # The license identifier, a list of common identifiers can be
# found at: https://spdx.org/licenses/ but existence of the ident # found at: https://spdx.org/licenses/ but existence of the ident
# in this list it is not enforced unless auto_template is set to # in this list it is not enforced unless auto_template is set to
# true. # true.
ident: LGPL-3.0-or-later 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: authors:
# Provide either your full name or company name for copyright purposes - name: "The Trinitrix Project"
- name: The Trinitrix Project email: "bpeetz@b-peetz.de, antifallobst@systemausfall.org"
# 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:
# The template that will be rendered to generate the header before # - [year]: substituted with the current year.
# comment characters are applied. Available variables are: # - [name of author]: Substituted with name of the author and email
# - [year]: substituted with the current year. # if provided. If email is provided the output appears as Full
# - [name of author]: Substituted with name of the author and email # Name <email@example.com>. If multiple authors are provided the
# if provided. If email is provided the output appears as Full # list is concatenated together with commas.
# Name <email@example.com>. If multiple authors are provided the
# list is concatenated together with commas.
template: | 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. 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 You should have received a copy of the GNU General Public License
and the Lesser GNU General Public License along with this program. and the Lesser GNU General Public License along with this program.
If not, see <https://www.gnu.org/licenses/>. If not, see <https://www.gnu.org/licenses/>.
#
# If auto_template is true then template is ignored and the SPDX
# API will be queried with the ident value to automatically # If auto_template is true then template is ignored and the SPDX
# determine the license header template. auto_template works best # API will be queried with the ident value to automatically
# with licenses that have a standardLicenseHeader field defined in # determine the license header template. auto_template works best
# their license info JSON, if it is not then we will use the full # with licenses that have a standardLicenseHeader field defined in
# licenseText to generate the header which works fine for short # their license info JSON, if it is not then we will use the full
# licenses like MIT but can be quite lengthy for other licenses # licenseText to generate the header which works fine for short
# like BSD-4-Clause. The above default template is valid for most # licenses like MIT but can be quite lengthy for other licenses
# licenses and is recommended for MIT, and BSD licenses. Common # like BSD-4-Clause. The above default template is valid for most
# licenses that work well with the auto_template feature are GPL # licenses and is recommended for MIT, and BSD licenses. Common
# variants, and the Apache 2.0 license. # 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 # 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 true try to detect the text wrapping of the template, and unwrap it
unwrap_text: false unwrap_text: false
# Define type of comment characters to apply based on file extensions. # Define type of comment characters to apply based on file extensions.
@ -103,7 +122,7 @@ comments:
commenter: commenter:
type: line type: line
comment_char: "//" comment_char: "//"
trailing_lines: 2 trailing_lines: 1
- extensions: - extensions:
- rs - rs
@ -111,6 +130,7 @@ comments:
- css - css
- cpp - cpp
- c - c
- h
# This demonstrates a block commenter configuration. A block # This demonstrates a block commenter configuration. A block
# commenter type will add start_block_char as the first character # commenter type will add start_block_char as the first character
# in the license header and add end_block_char as the last character # in the license header and add end_block_char as the last character
@ -125,14 +145,16 @@ comments:
start_block_char: "/*\n" start_block_char: "/*\n"
end_block_char: "*/\n" end_block_char: "*/\n"
per_line_char: "*" per_line_char: "*"
trailing_lines: 2 trailing_lines: 1
# In this case extension is singular and a single string extension is provided. - extension:
- extension: html - html
- md
commenter: commenter:
type: block type: block
start_block_char: "<!--\n" start_block_char: "<!--\n"
end_block_char: "-->" end_block_char: "-->\n"
trailing_lines: 1
- extensions: - extensions:
- el - el
@ -140,16 +162,15 @@ comments:
commenter: commenter:
type: line type: line
comment_char: ";;;" comment_char: ";;;"
trailing_lines: 2 trailing_lines: 1
- extensions: - extensions:
- ebnf - tex
- bib
commenter: commenter:
type: block type: line
start_block_char: "#(*\n" comment_char: "%"
end_block_char: "#*)\n" trailing_lines: 1
per_line_char: "#"
trailing_lines: 2
# The extension string "any" is special and so will match any file # The extension string "any" is special and so will match any file
# extensions. Commenter configurations are always checked in the # extensions. Commenter configurations are always checked in the
@ -163,4 +184,4 @@ comments:
commenter: commenter:
type: line type: line
comment_char: '#' comment_char: '#'
trailing_lines: 2 trailing_lines: 1

View File

@ -1,4 +1,6 @@
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> # Copyright (C) 2024 - 2024:
# The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
# SPDX-License-Identifier: LGPL-3.0-or-later
# #
# This file is part of the Keymaps crate for Trinitrix. # 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. # and the Lesser GNU General Public License along with this program.
# If not, see <https://www.gnu.org/licenses/>. # If not, see <https://www.gnu.org/licenses/>.
[package] [package]
name = "keymaps" name = "keymaps"
description = "A rust crate which provides a standardized encoding for key codes"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"
@ -33,7 +35,7 @@ crossterm = { version = "0.25", optional = true }
log = "0.4.20" log = "0.4.20"
thiserror = "1.0.50" thiserror = "1.0.50"
pest = "2.7.5" pest = "2.7.5"
pest_derive = {version = "2.7.5", features = ["grammar-extras"]} pest_derive = { version = "2.7.5", features = ["grammar-extras"] }
[dev-dependencies] [dev-dependencies]
pretty_assertions = "1.4.0" pretty_assertions = "1.4.0"

View File

@ -1,7 +1,7 @@
SPDXVersion: SPDX-2.3 SPDXVersion: SPDX-2.3
DataLicense: CC0-1.0 DataLicense: CC0-1.0
Creator: trinitrix contributers Creator: flake template init
PackageName: Trinitrix-keymaps PackageName: keymaps
PackageOriginator: trinitrix contributers PackageOriginator: Benedikt Peetz
PackageHomePage: https://git.nerdcult.net/trinitrix/keymaps PackageHomePage: https://git.nerdcult.net/trinitrix/keymaps
PackageLicenseDeclared: LGPL-3.0-or-later PackageLicenseDeclared: LGPL-3.0-or-later

32
README.md Normal file
View File

@ -0,0 +1,32 @@
<!--
Copyright (C) 2024 - 2024:
The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
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 <https://www.gnu.org/licenses/>.
-->
# 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.

View File

@ -1,4 +1,6 @@
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> # Copyright (C) 2024 - 2024:
# The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
# SPDX-License-Identifier: LGPL-3.0-or-later
# #
# This file is part of the Keymaps crate for Trinitrix. # 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. # and the Lesser GNU General Public License along with this program.
# If not, see <https://www.gnu.org/licenses/>. # If not, see <https://www.gnu.org/licenses/>.
tag_prefix = "v" tag_prefix = "v"
branch_whitelist = [ "main" ] branch_whitelist = ["main", "prime"]
ignore_merge_commits = false ignore_merge_commits = false
[commit_types]
pre_bump_hooks = [ pre_bump_hooks = [
"licensur -p -i" # update the license header in each file "nix flake check", # verify the project builds
"nix build", # verify the project builds "./scripts/renew_copyright_header.sh", # update the license header in each file
"cargo fmt --all" # format "cargo set-version {{version}}", # bump version in Cargo.toml
"cargo set-version {{version}}", # bump version in Cargo.toml "nix fmt", # format
] ]
post_bump_hooks = [ post_bump_hooks = [
"git push", "git push",
"cargo publish", "cargo publish",
"git push origin v{{version}}", # push the new tag to origin "git push origin v{{version}}", # push the new tag to origin
] ]
[bump_profiles] [bump_profiles]
[changelog] [changelog]
path = "NEWS.md" path = "NEWS.md"
remote = "git.nerdcult.net" template = "remote"
remote = "codeberg.org"
repository = "keymaps" repository = "keymaps"
owner = "trinitrix" owner = "trinitrix"
authors = [ authors = [{ signature = "Benedikt Peetz", username = "soispha" }]
{ signature = "Soispha", username = "soispha" },
]
[packages]

View File

@ -7,11 +7,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1703089493, "lastModified": 1714536327,
"narHash": "sha256-WUjYqUP/Lhhop9+aiHVFREgElunx1AHEWxqMT8ePfzo=", "narHash": "sha256-zu4+LcygJwdyFHunTMeDFltBZ9+hoWvR/1A7IEy7ChA=",
"owner": "ipetkov", "owner": "ipetkov",
"repo": "crane", "repo": "crane",
"rev": "2a5136f14a9ac93d9d370d64a36026c5de3ae8a4", "rev": "3124551aebd8db15d4560716d4f903bd44c64e4a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -38,14 +38,16 @@
}, },
"flake-utils": { "flake-utils": {
"inputs": { "inputs": {
"systems": "systems" "systems": [
"systems"
]
}, },
"locked": { "locked": {
"lastModified": 1701680307, "lastModified": 1710146030,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725", "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -56,16 +58,16 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1703349974, "lastModified": 1714656196,
"narHash": "sha256-BcR1wW63W4baNtWbpg25d/mt0DVkEBIFssAY9JPNpZg=", "narHash": "sha256-kjQkA98lMcsom6Gbhw8SYzmwrSo+2nruiTcTZp5jK7o=",
"owner": "soispha", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "7e33c3c5db1c69a50efc2143ffa53539e8b4c0ed", "rev": "94035b482d181af0a0f8f77823a790b256b7c3cc",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "soispha", "owner": "NixOS",
"ref": "licensure", "ref": "nixpkgs-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@ -76,7 +78,9 @@
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
"flake-utils": "flake-utils", "flake-utils": "flake-utils",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay",
"systems": "systems",
"treefmt-nix": "treefmt-nix"
} }
}, },
"rust-overlay": { "rust-overlay": {
@ -89,11 +93,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1703297543, "lastModified": 1714702555,
"narHash": "sha256-d4QlzcoSNzb/iZheWtjOyRxoBSaLETSpViENGEkxv9g=", "narHash": "sha256-/NoUbE5S5xpK1FU3nlHhQ/tL126+JcisXdzy3Ng4pDU=",
"owner": "oxalica", "owner": "oxalica",
"repo": "rust-overlay", "repo": "rust-overlay",
"rev": "fc77c8b416b1537522d30c710baaaaebf769f816", "rev": "7f0e3ef7b7fbed78e12e5100851175d28af4b7c6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -104,16 +108,36 @@
}, },
"systems": { "systems": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1680978846,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-Gtqg8b/v49BFDpDetjclCYXm8mAnTrUzR0JnE2nv5aw=",
"owner": "nix-systems", "owner": "nix-systems",
"repo": "default", "repo": "x86_64-linux",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "rev": "2ecfcac5e15790ba6ce360ceccddb15ad16d08a8",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-systems", "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" "type": "github"
} }
} }

118
flake.nix
View File

@ -1,4 +1,6 @@
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> # Copyright (C) 2024 - 2024:
# The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
# SPDX-License-Identifier: LGPL-3.0-or-later
# #
# This file is part of the Keymaps crate for Trinitrix. # 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 # You should have received a copy of the GNU General Public License
# and the Lesser GNU General Public License along with this program. # and the Lesser GNU General Public License along with this program.
# If not, see <https://www.gnu.org/licenses/>. # If not, see <https://www.gnu.org/licenses/>.
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
#
# 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 <https://www.gnu.org/licenses/>.
{ {
description = "A rust crate which provides a standatised encoding for keycodes"; description = "A rust crate which provides a standardized encoding for key codes";
inputs = {
# nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
nixpkgs.url = "github:soispha/nixpkgs/licensure";
# inputs for following inputs = {
flake-compat = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
url = "github:edolstra/flake-compat";
flake = false; treefmt-nix = {
url = "github:numtide/treefmt-nix";
inputs = {
nixpkgs.follows = "nixpkgs";
};
}; };
crane = { crane = {
@ -52,10 +36,6 @@
nixpkgs.follows = "nixpkgs"; nixpkgs.follows = "nixpkgs";
}; };
}; };
flake-utils = {
url = "github:numtide/flake-utils";
inputs = {};
};
rust-overlay = { rust-overlay = {
url = "github:oxalica/rust-overlay"; url = "github:oxalica/rust-overlay";
inputs = { inputs = {
@ -63,11 +43,29 @@
flake-utils.follows = "flake-utils"; 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 = { outputs = {
self,
nixpkgs, nixpkgs,
crane,
flake-utils, flake-utils,
treefmt-nix,
crane,
rust-overlay, rust-overlay,
... ...
}: }:
@ -78,54 +76,46 @@
}; };
nightly = false; nightly = false;
rust = rust_minimal =
if nightly if nightly
then then pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal)
(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"];
}
else pkgs.rust-bin.stable.latest.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; craneLib = (crane.mkLib pkgs).overrideToolchain rust_minimal;
nativeBuildInputs = [];
buildInputs = [];
craneBuild = craneLib.buildPackage { craneBuild = craneLib.buildPackage {
src = craneLib.cleanCargoSource ./.; src = craneLib.cleanCargoSource ./.;
doCheck = true; doCheck = true;
inherit nativeBuildInputs buildInputs;
}; };
treefmtEval = import ./treefmt.nix {inherit treefmt-nix pkgs;};
in { 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 { devShells.default = pkgs.mkShell {
packages = with pkgs; [ packages = with pkgs; [
alejandra
cocogitto cocogitto
licensure
rust yq
rust_default
cargo-edit cargo-edit
cargo-expand
licensure
]; ];
inherit nativeBuildInputs buildInputs;
}; };
}); });
} }
# vim: ts=2

111
scripts/renew_copyright_header.sh Executable file
View File

@ -0,0 +1,111 @@
#! /usr/bin/env sh
# Copyright (C) 2024 - 2024:
# The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
# 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 <https://www.gnu.org/licenses/>.
# 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

View File

@ -1,5 +1,7 @@
/* /*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> * Copyright (C) 2024 - 2024:
* The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
* SPDX-License-Identifier: LGPL-3.0-or-later
* *
* This file is part of the Keymaps crate for Trinitrix. * This file is part of the Keymaps crate for Trinitrix.
* *
@ -18,7 +20,6 @@
* If not, see <https://www.gnu.org/licenses/>. * If not, see <https://www.gnu.org/licenses/>.
*/ */
use std::{fmt::Display, num::ParseIntError}; use std::{fmt::Display, num::ParseIntError};
use thiserror::Error; use thiserror::Error;

View File

@ -1,5 +1,7 @@
/* /*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> * Copyright (C) 2024 - 2024:
* The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
* SPDX-License-Identifier: LGPL-3.0-or-later
* *
* This file is part of the Keymaps crate for Trinitrix. * This file is part of the Keymaps crate for Trinitrix.
* *
@ -18,7 +20,6 @@
* If not, see <https://www.gnu.org/licenses/>. * If not, see <https://www.gnu.org/licenses/>.
*/ */
use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers}; use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind, KeyEventState, KeyModifiers};
use crate::{error, key_repr::KeyValue}; use crate::{error, key_repr::KeyValue};

View File

@ -1,5 +1,7 @@
/* /*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> * Copyright (C) 2024 - 2024:
* The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
* SPDX-License-Identifier: LGPL-3.0-or-later
* *
* This file is part of the Keymaps crate for Trinitrix. * This file is part of the Keymaps crate for Trinitrix.
* *
@ -18,7 +20,6 @@
* If not, see <https://www.gnu.org/licenses/>. * If not, see <https://www.gnu.org/licenses/>.
*/ */
#[cfg(feature = "crossterm")] #[cfg(feature = "crossterm")]
mod crossterm; mod crossterm;

View File

@ -1,5 +1,7 @@
/* /*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> * Copyright (C) 2024 - 2024:
* The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
* SPDX-License-Identifier: LGPL-3.0-or-later
* *
* This file is part of the Keymaps crate for Trinitrix. * This file is part of the Keymaps crate for Trinitrix.
* *
@ -18,12 +20,14 @@
* If not, see <https://www.gnu.org/licenses/>. * If not, see <https://www.gnu.org/licenses/>.
*/ */
use std::{fmt::Debug, hash::Hash, marker, str::FromStr}; use std::{fmt::Debug, hash::Hash, marker, str::FromStr};
use pest::{iterators::Pair, Parser}; use pest::{iterators::Pair, Parser};
use crate::{error, key_repr::{KeyValue, key::Rule}}; use crate::{
error,
key_repr::{key::Rule, KeyValue},
};
use super::Key; use super::Key;

View File

@ -1,4 +1,6 @@
// Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> // Copyright (C) 2024 - 2024:
// The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
// SPDX-License-Identifier: LGPL-3.0-or-later
// //
// This file is part of the Keymaps crate for Trinitrix. // 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. // and the Lesser GNU General Public License along with this program.
// If not, see <https://www.gnu.org/licenses/>. // If not, see <https://www.gnu.org/licenses/>.
angular_bracket_open = _{ "<" } angular_bracket_open = _{ "<" }
abo = _{ angular_bracket_open } abo = _{ angular_bracket_open }
angular_bracket_close = _{ ">" } angular_bracket_close = _{ ">" }

View File

@ -1,5 +1,7 @@
/* /*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> * Copyright (C) 2024 - 2024:
* The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
* SPDX-License-Identifier: LGPL-3.0-or-later
* *
* This file is part of the Keymaps crate for Trinitrix. * This file is part of the Keymaps crate for Trinitrix.
* *
@ -18,7 +20,6 @@
* If not, see <https://www.gnu.org/licenses/>. * If not, see <https://www.gnu.org/licenses/>.
*/ */
use crossterm::event::KeyCode; use crossterm::event::KeyCode;
use super::KeyValue; use super::KeyValue;

View File

@ -1,5 +1,7 @@
/* /*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> * Copyright (C) 2024 - 2024:
* The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
* SPDX-License-Identifier: LGPL-3.0-or-later
* *
* This file is part of the Keymaps crate for Trinitrix. * This file is part of the Keymaps crate for Trinitrix.
* *
@ -18,7 +20,6 @@
* If not, see <https://www.gnu.org/licenses/>. * If not, see <https://www.gnu.org/licenses/>.
*/ */
#[cfg(feature = "crossterm")] #[cfg(feature = "crossterm")]
mod crossterm; mod crossterm;

View File

@ -1,5 +1,7 @@
/* /*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> * Copyright (C) 2024 - 2024:
* The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
* SPDX-License-Identifier: LGPL-3.0-or-later
* *
* This file is part of the Keymaps crate for Trinitrix. * This file is part of the Keymaps crate for Trinitrix.
* *
@ -18,7 +20,6 @@
* If not, see <https://www.gnu.org/licenses/>. * If not, see <https://www.gnu.org/licenses/>.
*/ */
use pest::Parser; use pest::Parser;
use pest_derive::Parser; use pest_derive::Parser;

View File

@ -1,5 +1,7 @@
/* /*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> * Copyright (C) 2024 - 2024:
* The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
* SPDX-License-Identifier: LGPL-3.0-or-later
* *
* This file is part of the Keymaps crate for Trinitrix. * This file is part of the Keymaps crate for Trinitrix.
* *
@ -18,7 +20,6 @@
* If not, see <https://www.gnu.org/licenses/>. * If not, see <https://www.gnu.org/licenses/>.
*/ */
pub mod key; pub mod key;
pub mod key_value; pub mod key_value;
pub mod keys; pub mod keys;

View File

@ -1,5 +1,7 @@
/* /*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> * Copyright (C) 2024 - 2024:
* The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
* SPDX-License-Identifier: LGPL-3.0-or-later
* *
* This file is part of the Keymaps crate for Trinitrix. * This file is part of the Keymaps crate for Trinitrix.
* *
@ -18,7 +20,6 @@
* If not, see <https://www.gnu.org/licenses/>. * If not, see <https://www.gnu.org/licenses/>.
*/ */
pub mod error;
pub mod key_repr; pub mod key_repr;
pub mod trie; pub mod trie;
pub mod error;

View File

@ -1,5 +1,7 @@
/* /*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org> * Copyright (C) 2024 - 2024:
* The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
* SPDX-License-Identifier: LGPL-3.0-or-later
* *
* This file is part of the Keymaps crate for Trinitrix. * This file is part of the Keymaps crate for Trinitrix.
* *
@ -18,7 +20,6 @@
* If not, see <https://www.gnu.org/licenses/>. * If not, see <https://www.gnu.org/licenses/>.
*/ */
use std::collections::HashMap; use std::collections::HashMap;
use log::info; use log::info;

92
treefmt.nix Normal file
View File

@ -0,0 +1,92 @@
# Copyright (C) 2024 - 2024:
# The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
# 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 <https://www.gnu.org/licenses/>.
{
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"];
};
};
};
}
)

24
update.sh Executable file
View File

@ -0,0 +1,24 @@
#! /usr/bin/env sh
# Copyright (C) 2024 - 2024:
# The Trinitrix Project <bpeetz@b-peetz.de, antifallobst@systemausfall.org>
# 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 <https://www.gnu.org/licenses/>.
nix flake update
cargo update
[ "$1" = "upgrade" ] && cargo upgrade