Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ghostty: init at 1.0.0 #368404

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

ghostty: init at 1.0.0 #368404

wants to merge 2 commits into from

Conversation

jcollie
Copy link

@jcollie jcollie commented Dec 26, 2024

Adding Ghostty:

Ghostty is a terminal emulator that differentiates itself by being fast, feature-rich, and native. While there are many excellent terminal emulators available, they all force you to choose between speed, features, or native UIs. Ghostty provides all three.

Things done

  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)
    • sandbox = relaxed
    • sandbox = true
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • 25.05 Release Notes (or backporting 24.11 and 25.05 Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
  • Fits CONTRIBUTING.md.

Add a 👍 reaction to pull requests you find important.

@github-actions github-actions bot added 6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS 8.has: module (update) This PR changes an existing module in `nixos/` 8.has: maintainer-list (update) This PR changes `maintainers/maintainer-list.nix` labels Dec 26, 2024
pkgs/by-name/gh/ghostty/package.nix Outdated Show resolved Hide resolved
pkgs/by-name/gh/ghostty/package.nix Outdated Show resolved Hide resolved
@pluiedev
Copy link
Contributor

pluiedev commented Dec 26, 2024

Also needs to be reformatted w/ nixfmt-rfc-style (the nixpkgs-vet CI failure is a zig2nix bug that we can't really control)

@github-actions github-actions bot added 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 1-10 labels Dec 26, 2024
@NixOSInfra NixOSInfra added the 12. first-time contribution This PR is the author's first one; please be gentle! label Dec 26, 2024
downloadPage = "https://ghostty.org/download";

license = lib.licenses.mit;
platforms = lib.platforms.linux;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
platforms = lib.platforms.linux;
platforms = lib.platforms.linux ++ lib.platforms.darwin;

If it doesn’t build on macOS, it would be better to set broken

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's less that it doesn't build on Darwin and more it can't build on Darwin since xcodebuild has to be invoked outside of the Nix build environment. I think we should just repackage the .dmg for now until we somehow figure out a way to compile it with Nix

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I’m curious why that’s the case

And whether that’s been tested since the darwin SDK refactor

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ultimately neither I nor @jcollie have Darwin setups to test with, so either someone comes forward with a better idea, or we have to stick with a repackaging for now

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that anyone has tried since the darwin refactor. I won't be doing that work because I don't have a macOS machine to test on.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can confirm it builds. But I agree with @tymscar's suggestion to repackage the DMG. There's no need for extra work here.

Copy link
Contributor

@Eveeifyeve Eveeifyeve Dec 27, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that anyone has tried since the darwin refactor. I won't be doing that work because I don't have a macOS machine to test on.

I could test, I willing be happy to help to support darwin. I have a m2 macbook which means I can cross compile.

Copy link
Contributor

@anund anund Dec 27, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe discussions on this topic are happening on matrix https://matrix.to/#/#macos:nixos.org (though more focused on getting the build tooling chain working for source builds). I'm not sure where work to package the DMG is happening/being discussed.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Long story short is that building the Mac app from source appears to be blocked on getting our Swift situation into a better place (if anyone has ideas on how to do a source build with our current Swift setup, please chime in in that matrix room).

I haven't seen anything about packaging the DMG.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bit of a drive by comment but: for my setup and https://github.com/kovidgoyal/kitty I eventually gave up and used the dmg directly; some features (like OS notifications) require signed executables

https://github.com/nmattia/homies/blob/1c27051828b7c10ba2cda8cc790cc50bd796b423/kitty/default.nix#L11

pkgs/by-name/gh/ghostty/package.nix Outdated Show resolved Hide resolved
patchelf --add-rpath "${lib.makeLibraryPath [ libX11 ]}" "$out/bin/.ghostty-wrapped"
'';

passthru.updateScript = nix-update-script { };
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think nix-update handles zig2nix. We might need a bespoke update script for total automation

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm hoping to upstream the zig2nix generation once the dust settles on the 1.0 release, so this may be a moot issue soon.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is still an issue now though, and can easily lead to automatic PRs that aren't actually updated correctly. It should be removed until there's support for it

pkgs/by-name/gh/ghostty/package.nix Outdated Show resolved Hide resolved
@jcollie jcollie force-pushed the ghostty-init-1.0.0 branch 3 times, most recently from 9da662e to ee671bc Compare December 26, 2024 21:59
Copy link
Contributor

@pluiedev pluiedev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just needs mister @ofborg to be happy

@lilyball
Copy link
Member

Any chance we can also get Ghostty's terminfo file added to the NixOS terminfo database, or does that belong in a separate PR?

@jcollie
Copy link
Author

jcollie commented Dec 26, 2024

Any chance we can also get Ghostty's terminfo file added to the NixOS terminfo database, or does that belong in a separate PR?

That should be handled already, there's a terminfo output in the package and environment.enableAllTerminfo should install it.

@GaetanLepage
Copy link
Contributor

nixpkgs-review result

Generated using nixpkgs-review.

Command: nixpkgs-review pr 368404


x86_64-linux

⏩ 2 packages blacklisted:
  • nixos-install-tools
  • tests.nixos-functions.nixos-test
✅ 4 packages built:
  • ghostty
  • ghostty.shell_integration
  • ghostty.terminfo
  • ghostty.vim

aarch64-linux

⏩ 2 packages blacklisted:
  • nixos-install-tools
  • tests.nixos-functions.nixos-test
✅ 4 packages built:
  • ghostty
  • ghostty.shell_integration
  • ghostty.terminfo
  • ghostty.vim

Copy link
Member

@pbsds pbsds left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you add this to nixos/tests/terminal-emulators.nix and add the resulting test to passthru.tests?

@surfaceflinger
Copy link
Member

Would it be possible to include a patch so that ghostty runs without io_uring (which is disabled on linux-hardened)?

sed -i 's/^const xev = @import("xev");$/const xev = @import("xev").Epoll;/' **/*.zig

https://discord.com/channels/1005603569187160125/1312996817264181350 (sorry)
mitchellh/libxev#131

No idea if this causes any visible performance issues

@philiptaron
Copy link
Contributor

Would it be possible to include a patch so that ghostty runs without io_uring (which is disabled on linux-hardened)?

That's the sort of thing that you can patch with overrideAttrs in your own Nix config. Let's follow upstream's lead here.

@fpletz
Copy link
Member

fpletz commented Dec 27, 2024

The runtime closure includes all the zig sources:

$ nix path-info --recursive ./result
[...]
/nix/store/8pgw0b3ymk014c1v7l5pc9ymj4dfd6nx-freetype
/nix/store/9bgzradqy1346lcj56d32mfcdjyinjk6-oniguruma
/nix/store/az6rd4gxwskz4y6l94cm0axgn5bks3wa-glfw
/nix/store/b2wn0akxsjr3g5gx3yzahmgj588q44mp-vaxis
/nix/store/c1qpqqm0m13mblz3f33saa27sxxd3m1x-wuffs
/nix/store/d6h0qkxnq0abkg7483c7x66b8sappdyd-z2d
/nix/store/dpqgcdf9nc4jn0dwbxbvy1vqvfyl77sa-vulkan_headers
/nix/store/dr9nnmiawcanp8wr7p99jdyb41yxfw3a-highway
/nix/store/f5zs2lbbx451slw0h91dlgldfv3cr63v-utfcpp
/nix/store/fl90p12n0yxvkhhn2kfhirhc320lgxpk-wayland_headers
/nix/store/gj6v5dbyacy8z9ph5llmagmf128vdl1x-iterm2_themes
/nix/store/h4n0xbm6dg132v7g0v3zq9g8qvrmclmr-ghostty-1.0.0-terminfo
/nix/store/h991k3x95mmig7i993dfyibbmiqn094p-fontconfig
/nix/store/hs1vqpyyw2xg04jpy7y21127iw1sjyyz-zigimg
/nix/store/ilx7scnpgxycfmj6cq5qf31spyykma84-libpng
/nix/store/q6jsp14xjmk08zqf8gg9hfc95448sghc-harfbuzz
/nix/store/qb3f9gd22c2sbp00ng1fpk7hmfk23wvm-zig_objc
/nix/store/qp1m1zci2n60idvv79sblq82lml18l6g-imgui
/nix/store/wa8zy9z7ngwn9mzhjpqxy1260dzngczj-glslang
/nix/store/xbwlxzyyzha763mz231bia72ybnzmbbc-mach_glfw
/nix/store/xk13b5q3c3x7rh1rqm355zf0y1zdgm9p-libxev
/nix/store/xwnpf0q80wijjnn4s7sk82syxdfzqhzh-zlib
/nix/store/p9p2056gs8cqqiwsnrpdvhk12rbd40si-ghostty-cache-1.0.0
/nix/store/w6skm2pz5dc6dk8w2g92hl2jd2q2yc49-oniguruma-6.9.9-lib
/nix/store/wqnzn50w9kflabjlnm8m3sm8k5kbwgf5-ghostty-1.0.0-shell_integration
/nix/store/xgfyyyxxpq5x6rd15w2xigwzdiv10gni-ghostty-1.0.0

Would be nice if we could get rid of those references. There seems to be a reference in the binary to /nix/store/p9p2056gs8cqqiwsnrpdvhk12rbd40si-ghostty-cache-1.0.0/1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402/imgui_demo.cpp. I think we should be able remove this without causing issues using removeReferencesTo.

Here is the fix, feel free to squash into your init commit: jcollie/nixpkgs@ghostty-init-1.0.0...fpletz:nixpkgs:pr/368404/remove-zig-src-refs

Copy link
Member

@getchoo getchoo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may also be nice to pull glslang, spriv-cross, and simdutf as well since we have them in Nixpkgs: https://github.com/ghostty-org/ghostty/blob/35b9ceee2116331b83c0c86269394e2545070b0f/build.zig#L271-L280

pkgs/by-name/gh/ghostty/package.nix Outdated Show resolved Hide resolved
pkgs/by-name/gh/ghostty/package.nix Outdated Show resolved Hide resolved
pkgs/by-name/gh/ghostty/package.nix Outdated Show resolved Hide resolved
patchelf --add-rpath "${lib.makeLibraryPath [ libX11 ]}" "$out/bin/.ghostty-wrapped"
'';

passthru.updateScript = nix-update-script { };
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is still an issue now though, and can easily lead to automatic PRs that aren't actually updated correctly. It should be removed until there's support for it

pkgs/by-name/gh/ghostty/package.nix Outdated Show resolved Hide resolved
pkgs/by-name/gh/ghostty/package.nix Show resolved Hide resolved
pkgs/by-name/gh/ghostty/package.nix Outdated Show resolved Hide resolved
pkgs/by-name/gh/ghostty/package.nix Show resolved Hide resolved
maintainers/maintainer-list.nix Outdated Show resolved Hide resolved
pkgs/by-name/gh/ghostty/package.nix Show resolved Hide resolved
@ofborg ofborg bot added the 8.has: package (new) This PR adds a new package label Dec 27, 2024
@ofborg ofborg bot requested a review from pluiedev December 27, 2024 01:54
@ofborg ofborg bot added the 11.by: package-maintainer This PR was created by the maintainer of the package it changes label Dec 27, 2024
@jcollie
Copy link
Author

jcollie commented Dec 27, 2024

It may also be nice to pull glslang, spriv-cross, and simdutf as well since we have them in Nixpkgs: https://github.com/ghostty-org/ghostty/blob/35b9ceee2116331b83c0c86269394e2545070b0f/build.zig#L271-L280

I'm not prepared to make such large changes to the code in the package. That's something best taken upstream to get a proper build option to use the system version.

@getchoo
Copy link
Member

getchoo commented Dec 27, 2024

That's something best taken upstream to get a proper build option to use the system version.

Zig already has this option built in via its -fsys flag (which upstream also mentions in the comment above the one I linked). It should only require that and adding the packages to buildInputs

I'm also pretty sure this is intended for packagers, judging by the comment saying it's only not a default due to the lack of package availability in other distros/repos

@IogaMaster
Copy link
Contributor

This review has been done with warden, please report any issues!

Packages built

✅ ghostty

nix-info -m

  • system: "x86_64-linux"
  • host os: Linux 6.12.5-xanmod1, NixOS, 25.05 (Warbler), 25.05.20241219.d70bd19
  • multi-user?: yes
  • sandbox: relaxed
  • version: nix-env (Nix) 2.25.3
  • nixpkgs: /etc/nix/inputs/nixpkgs

@jcollie
Copy link
Author

jcollie commented Dec 27, 2024

That's something best taken upstream to get a proper build option to use the system version.

Zig already has this option built in via its -fsys flag (which upstream also mentions in the comment above the one I linked). It should only require that and adding the packages to buildInputs

I'm also pretty sure this is intended for packagers, judging by the comment saying it's only not a default due to the lack of package availability in other distros/repos

At this point, I'd like to get the current package merged. Once that's done we can refine things in follow-up commits.

@anund
Copy link
Contributor

anund commented Dec 27, 2024

I also recommend leaving -fsys changes to a separate PR. As a comment on the PR it's asking for open ended work that 'looks simple'. I took the bait and looked; it's not simple, it requires more than setting just -fsys flags, and then it still breaks.

  • simdutf is incompatible: 5.0.6 packaged vs 4.0.9 upstream
  • glslang might work
  • spirv-cross seems to follow a different naming convention than the one zig expects lib/libspirv-cross-c.a vs lib/libspirv-cross.a
  • -fsys=<name> also needs to be accompanied by --search-prefix ${pkgs.name}

@ofborg ofborg bot requested a review from getchoo December 27, 2024 05:29
@jcollie
Copy link
Author

jcollie commented Dec 27, 2024

Could you add this to nixos/tests/terminal-emulators.nix and add the resulting test to passthru.tests?

I tried for a while to get this to work but was not able to. It may be my lack of understanding of what's needed here or possibly there's something upstream in Ghostty that needs to be fixed. In either case I don't want to hold up the package for this. I'll work on it in a subsequent patch.

@getchoo
Copy link
Member

getchoo commented Dec 27, 2024

At this point, I'd like to get the current package merged.

Are we in that much of a rush here? This is a quite a large, popular, and a bit complicated package. I think it'd be ok for us to take some time to clean things up a bit and make sure we land this in a good state -- it's only been 9 hours since this was originally submitted after all

it's not simple, it requires more than setting just -fsys flags, and then it still breaks.

Thanks for looking at all of this. I had only glanced at build.zig, and these dependencies seemed to be linked in the same way as all the others, so I figured it would be no different.

Some of these are totally out of scope for this PR, but I think it'd be worth it to link with glslang -- which does seem to mostly work OOTB

Here's a patch that does that, fixes some formatting/lint issues, and adds the NixOS test recommended above
diff --git a/nixos/tests/terminal-emulators.nix b/nixos/tests/terminal-emulators.nix
index 1affcbf3c8f7..3fc820d3ac8b 100644
--- a/nixos/tests/terminal-emulators.nix
+++ b/nixos/tests/terminal-emulators.nix
@@ -44,6 +44,8 @@ let

     germinal.pkg = p: p.germinal;

+    ghostty.pkg = p: p.ghostty;
+
     gnome-terminal.pkg = p: p.gnome-terminal;

     guake.pkg = p: p.guake;
diff --git a/pkgs/by-name/gh/ghostty/package.nix b/pkgs/by-name/gh/ghostty/package.nix
index 38bf66e654b2..aebd3f8e7293 100644
--- a/pkgs/by-name/gh/ghostty/package.nix
+++ b/pkgs/by-name/gh/ghostty/package.nix
@@ -7,10 +7,8 @@
   fetchFromGitHub,
   fontconfig,
   freetype,
-  git,
   glib,
-  gsettings-desktop-schemas,
-  gtk4,
+  glslang,
   harfbuzz,
   libadwaita,
   libGL,
@@ -20,7 +18,6 @@
   libXi,
   libXrandr,
   ncurses,
-  nix-update-script,
   nixosTests,
   oniguruma,
   pandoc,
@@ -82,14 +79,21 @@ stdenv.mkDerivation (finalAttrs: {
   # doCheck is set to false because unit tests currently fail inside the Nix sandbox.
   doCheck = false;
   doInstallCheck = true;
-
+
   deps = callPackage ./deps.nix { name = "${finalAttrs.pname}-cache-${finalAttrs.version}"; };

-  zigBuildFlags = [
-    "--system"
-    "${finalAttrs.deps}"
-    "-Dversion-string=${finalAttrs.version}"
-  ];
+  zigBuildFlags =
+    [
+      "--system"
+      "${finalAttrs.deps}"
+      "-Dversion-string=${finalAttrs.version}"
+    ]
+    # Some dependencies are vendored by default due to package availability issues in other repositories
+    # https://github.com/ghostty-org/ghostty/blob/35b9ceee2116331b83c0c86269394e2545070b0f/build.zig#L271-L280
+    # TODO: Use our spriv-cross & simdutf -@getchoo
+    ++ lib.mapAttrsToList (depName: package: "-fsys=${depName} --search-prefix ${lib.getLib package}") {
+      inherit glslang;
+    };

   zigCheckFlags = finalAttrs.zigBuildFlags;

@@ -120,11 +124,17 @@ stdenv.mkDerivation (finalAttrs: {
   NIX_LDFLAGS = [ "-lX11" ];

   nativeInstallCheckInputs = [
-      versionCheckHook
+    versionCheckHook
   ];

   versionCheckProgramArg = [ "--version" ];

+  passthru = {
+    tests = lib.optionalAttrs stdenv.hostPlatform.isLinux {
+      nixos = nixosTests.terminal-emulators.ghostty;
+    };
+  };
+
   meta = {
     homepage = "https://ghostty.org/";
     description = "Fast, native, feature-rich terminal emulator pushing modern features";

Comment on lines +35 to +39
# Ghostty needs to be built with --release=fast, --release=debug and
# --release=safe enable too many runtime safety checks.
zig_hook = zig_0_13.hook.overrideAttrs {
zig_default_flags = "-Dcpu=baseline -Doptimize=ReleaseFast --color off";
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a question for the community, not a request: Might it be worth having separate fast, debug, and safe packages, possibly with a release ? "fast" # or "debug", or "safe" parameter? I guess the debug build might be useful for Ghostty users who want to file detailed bug reports, and from the docs (my emphasis), it looks like the safe build would appeal to some users:

-Doptimize=ReleaseFast: Build with optimizations enabled and safety checks disabled. This is the recommended build mode for distribution. I'd prefer a safe build but terminal emulators are performance-sensitive and the safe build is currently too slow. I plan to improve this in the future. Other build modes are available: Debug, ReleaseSafe, and ReleaseSmall.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this would be something best left to a follow up PR that exposes more build options in general (like the rendering backend, font backend, etc.). I like it though ;)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The debug builds are intended only for developers and are insanely slow (like, slower by a hundredfold, and there's a banner warning you that it's in debug mode and performance is going to be absolutely terrible).

The merit of offering a ReleaseSafe build is debatable but currently there's a lot of sanity checks in ReleaseSafe that also grind performance to a halt. Maybe we should disable some of them for ReleaseSafe, but that's a decision for later.

TL;DR ReleaseFast is the only option as of now that offers any reasonable performance.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pkgs/by-name/gh/ghostty/package.nix Show resolved Hide resolved
@fpletz
Copy link
Member

fpletz commented Dec 27, 2024

Are we in that much of a rush here? This is a quite a large, popular, and a bit complicated package. I think it'd be ok for us to take some time to clean things up a bit and make sure we land this in a good state -- it's only been 9 hours since this was originally submitted after all

Since this package is pretty hyped due to the private beta phase and the recent 1.0 public release, lots of people are eager to test this out. Just look at all those emoji reactions. 🚀 IMHO it makes sense to have an acceptable expression in unstable ASAP and fix minor issues later.

@PerchunPak
Copy link
Member

Just look at all those emoji reactions

Yep, this is already top 1 of open pull requests by counting 👍 and top 3 of all PRs ever created in nixpkgs.

https://github.com/NixOS/nixpkgs/pulls?q=is%3Apr+sort%3Areactions-%2B1-desc+

@pbek
Copy link
Contributor

pbek commented Dec 27, 2024

If one is that eager to test it (like me 😉), just copy the two nix files to your own config and build the package yourself. 😁
For me, that's: https://github.com/pbek/nixcfg/tree/main/apps/ghostty
I also added some theming: https://github.com/pbek/nixcfg/blob/7dca177846233172665331b17df55802020600a8/modules/mixins/ghostty.nix#L16-L40

Don't forget to do a infocmp -x | ssh YOUR-SERVER -- tic -x - when you want to SSH into a server with it (see https://ghostty.org/docs/help/terminfo).

zig_hook
];

buildInputs = [
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it will be nice when we have conditional buildInputs for Linux. It can be help for supporting MacOS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS 8.has: maintainer-list (update) This PR changes `maintainers/maintainer-list.nix` 8.has: module (update) This PR changes an existing module in `nixos/` 8.has: package (new) This PR adds a new package 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 1-10 11.by: package-maintainer This PR was created by the maintainer of the package it changes 12. first-time contribution This PR is the author's first one; please be gentle!
Projects
None yet
Development

Successfully merging this pull request may close these issues.