Merge staging-next into staging

This commit is contained in:
github-actions[bot]
2024-11-15 18:04:57 +00:00
committed by GitHub
88 changed files with 7355 additions and 252 deletions

View File

@@ -105,6 +105,11 @@ nixos/modules/installer/tools/nix-fallback-paths.nix @NixOS/nix-team @raitobeza
/nixos/modules/system/activation/bootspec.nix @grahamc @cole-h @raitobezarius
/nixos/modules/system/activation/bootspec.cue @grahamc @cole-h @raitobezarius
# NixOS Render Docs
/pkgs/by-name/ni/nixos-render-docs @fricklerhandwerk @GetPsyched @hsjobeki
/doc/redirects.json @fricklerhandwerk @GetPsyched @hsjobeki
/nixos/doc/manual/redirects.json @fricklerhandwerk @GetPsyched @hsjobeki
# NixOS integration test driver
/nixos/lib/test-driver @tfc

View File

@@ -21,7 +21,7 @@ Rendered documentation:
- [Unstable (from master)](https://nixos.org/manual/nixpkgs/unstable/)
- [Stable (from latest release)](https://nixos.org/manual/nixpkgs/stable/)
The rendering tool is [nixos-render-docs](../pkgs/tools/nix/nixos-render-docs/src/nixos_render_docs), sometimes abbreviated `nrd`.
The rendering tool is [nixos-render-docs](../pkgs/by-name/ni/nixos-render-docs), sometimes abbreviated `nrd`.
## Contributing to this documentation
@@ -42,6 +42,12 @@ It is a daemon, that:
2. HTTP serves the manual, injecting a script that triggers reload on changes
3. opens the manual in the default browser
### Testing redirects
Once you have a successful build, you can open the relevant HTML (path mentioned above) in a browser along with the anchor, and observe the redirection.
Note that if you already loaded the page and *then* input the anchor, you will need to perform a reload. This is because browsers do not re-run client JS code when only the anchor has changed.
## Syntax
As per [RFC 0072](https://github.com/NixOS/rfcs/pull/72), all new documentation content should be written in [CommonMark](https://commonmark.org/) Markdown dialect.

View File

@@ -31,6 +31,7 @@ stdenvNoCC.mkDerivation (
../anchor-use.js
../anchor.min.js
../manpage-urls.json
../redirects.json
];
};
@@ -62,6 +63,7 @@ stdenvNoCC.mkDerivation (
nixos-render-docs manual html \
--manpage-urls ./manpage-urls.json \
--redirects ./redirects.json \
--revision ${nixpkgs.rev or "master"} \
--stylesheet style.css \
--stylesheet highlightjs/mono-blue.css \

4190
doc/redirects.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -17,6 +17,12 @@ There's also [a convenient development daemon](https://nixos.org/manual/nixpkgs/
The above instructions don't deal with the appendix of available `configuration.nix` options, and the manual pages related to NixOS. These are built, and written in a different location and in a different format, as explained in the next sections.
## Testing redirects {#sec-contributing-redirects}
Once you have a successful build, you can open the relevant HTML (path mentioned above) in a browser along with the anchor, and observe the redirection.
Note that if you already loaded the page and *then* input the anchor, you will need to perform a reload. This is because browsers do not re-run client JS code when only the anchor has changed.
## Contributing to the `configuration.nix` options documentation {#sec-contributing-options}
The documentation for all the different `configuration.nix` options is automatically generated by reading the `description`s of all the NixOS options defined at `nixos/modules/`. If you want to improve such `description`, find it in the `nixos/modules/` directory, and edit it and open a pull request.

View File

@@ -122,6 +122,7 @@ in rec {
nixos-render-docs -j $NIX_BUILD_CORES manual html \
--manpage-urls ${manpageUrls} \
--redirects ${./redirects.json} \
--revision ${escapeShellArg revision} \
--generator "nixos-render-docs ${pkgs.lib.version}" \
--stylesheet style.css \

File diff suppressed because it is too large Load Diff

View File

@@ -101,6 +101,8 @@
systemd-sysusers to achieve a system without Perl, as it can create normal
users and change passwords. Available as [services.userborn](#opt-services.userborn.enable).
- [g810-led](https://github.com/MatMoul/g810-led), a LED controller for Logitech G keyboards. Available as [services.g810-led](options.html#opt-services.g810-led.enable).
- [Hatsu](https://github.com/importantimport/hatsu), a self-hosted bridge that interacts with Fediverse on behalf of your static site. Available as [services.hatsu](options.html#opt-services.hatsu.enable).
- [Soteria](https://github.com/ImVaskel/soteria), a polkit authentication agent to handle elevated prompts for any desktop environment. Normally this should only be used on DEs or WMs that do not provide a graphical polkit frontend on their own. Available as [`security.soteria`](#opt-security.soteria.enable).
@@ -707,11 +709,10 @@
- `isync` has been updated to version `1.5.0`, which introduces some breaking changes. See the [compatibility concerns](https://sourceforge.net/projects/isync/files/isync/1.5.0/) for more details.
- Legacy package `globalprotect-openconnect` 1.x and related module
`services.globalprotect` were dropped. Two new packages -- `gpauth` and `gpclient`
from the 2.x version of the GlobalProtect-openconnect project -- are added in its
place. The GUI components related to the project are non-free and not
packaged.
- Two new packages -- `gpauth` and `gpclient` from the 2.x version of the
GlobalProtect-openconnect project -- are added in parallel to
`globalprotect-openconnect`. The GUI components related to the project are
non-free and not packaged.
- Compatible string matching for `hardware.deviceTree.overlays` has been changed to a more correct behavior. See [below](#sec-release-24.11-migration-dto-compatible) for details.

View File

@@ -589,6 +589,7 @@
./services/hardware/fancontrol.nix
./services/hardware/freefall.nix
./services/hardware/fwupd.nix
./services/hardware/g810-led.nix
./services/hardware/handheld-daemon.nix
./services/hardware/hddfancontrol.nix
./services/hardware/illum.nix
@@ -1055,6 +1056,7 @@
./services/networking/gdomap.nix
./services/networking/ghostunnel.nix
./services/networking/git-daemon.nix
./services/networking/globalprotect-vpn.nix
./services/networking/gns3-server.nix
./services/networking/gnunet.nix
./services/networking/go-autoconfig.nix

View File

@@ -80,7 +80,6 @@ in
(mkRemovedOptionModule [ "services" "fourStoreEndpoint" ] "The fourStoreEndpoint module has been removed")
(mkRemovedOptionModule [ "services" "fprot" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "frab" ] "The frab module has been removed")
(mkRemovedOptionModule [ "services" "globalprotect"] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "homeassistant-satellite"] "The `services.homeassistant-satellite` module has been replaced by `services.wyoming-satellite`.")
(mkRemovedOptionModule [ "services" "hydron" ] "The `services.hydron` module has been removed as the project has been archived upstream since 2022 and is affected by a severe remote code execution vulnerability.")
(mkRemovedOptionModule [ "services" "ihatemoney" ] "The ihatemoney module has been removed for lack of downstream maintainer")

View File

@@ -0,0 +1,62 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.globalprotect;
execStart =
if cfg.csdWrapper == null then
"${pkgs.globalprotect-openconnect}/bin/gpservice"
else
"${pkgs.globalprotect-openconnect}/bin/gpservice --csd-wrapper=${cfg.csdWrapper}";
in
{
options.services.globalprotect = {
enable = lib.mkEnableOption "globalprotect";
settings = lib.mkOption {
description = ''
GlobalProtect-openconnect configuration. For more information, visit
<https://github.com/yuezk/GlobalProtect-openconnect/wiki/Configuration>.
'';
default = { };
example = {
"vpn1.company.com" = {
openconnect-args = "--script=/path/to/vpnc-script";
};
};
type = lib.types.attrs;
};
csdWrapper = lib.mkOption {
description = ''
A script that will produce a Host Integrity Protection (HIP) report,
as described at <https://www.infradead.org/openconnect/hip.html>
'';
default = null;
example = lib.literalExpression ''"''${pkgs.openconnect}/libexec/openconnect/hipreport.sh"'';
type = lib.types.nullOr lib.types.path;
};
};
config = lib.mkIf cfg.enable {
services.dbus.packages = [ pkgs.globalprotect-openconnect ];
environment.etc."gpservice/gp.conf".text = lib.generators.toINI { } cfg.settings;
systemd.services.gpservice = {
description = "GlobalProtect openconnect DBus service";
serviceConfig = {
Type = "dbus";
BusName = "com.yuezk.qt.GPService";
ExecStart = execStart;
};
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
};
};
}

View File

@@ -83,6 +83,7 @@ in
systemd.services.teleport = {
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
path = with pkgs; [ getent shadow sudo ];
serviceConfig = {
ExecStart = ''
${cfg.package}/bin/teleport start \

View File

@@ -15,11 +15,11 @@ let
archive_fmt = if stdenv.hostPlatform.isDarwin then "zip" else "tar.gz";
sha256 = {
x86_64-linux = "0xbnyi6g5a12bip1vh2b5ap5108gwxa9g9g3ncllllz3ak2jim5r";
x86_64-darwin = "0linvibppgjr4dwsrjpqd126m8izq757cnwkr0w4bv81k30j1jv6";
aarch64-linux = "1324p9av9vx8ywz55vdls53b34jp6csnqbm0y94v5azxjvwcr3kj";
aarch64-darwin = "160mwlz17fb0xq935ih35h8bd7dn7gmvy5szra0jdr754xcgn5z5";
armv7l-linux = "07dln5mgrhn0569m77rj30443hgk1z7z8xi442lh5y8ib729q10y";
x86_64-linux = "c3c97f536692f7d658ddd77dc809693d4cb48b720c9ab97d3931bec028633639";
x86_64-darwin = "0fa21f9e0562b61e755d458596bb6ed41d55efb3a9376ec07eea02641eaef631";
aarch64-linux = "0bf48851a51ee7c506d73b8633bd02c1da986b5973683eadfeac804cd73e5d2a";
aarch64-darwin = "b54453610b92c17032d4ecc71717a1a7b3c9643091e91e58c34576e5a6a78b3c";
armv7l-linux = "211b93a60bda18f62cee5ec279f6179af9b94d827535cd89f6c1c832a3ae6dfa";
}.${system} or throwSystem;
sourceRoot = lib.optionalString (!stdenv.hostPlatform.isDarwin) ".";
@@ -29,7 +29,7 @@ in
# Please backport all compatible updates to the stable release.
# This is important for the extension ecosystem.
version = "1.94.2.24284";
version = "1.95.2.24313";
pname = "vscodium";
executableName = "codium";

View File

@@ -10,13 +10,13 @@
buildPythonPackage rec {
pname = "sosreport";
version = "4.8.0";
version = "4.8.1";
src = fetchFromGitHub {
owner = "sosreport";
repo = "sos";
rev = "refs/tags/${version}";
sha256 = "sha256-8laOHFBvlSo70filTd84vMiivcZ9hE8rgFThVVrMwtE=";
sha256 = "sha256-tnc0mAWk3IqQVRLj5oDhJSG4o27Ogv/Ce6oGEZ6AamM=";
};
nativeBuildInputs = [

View File

@@ -57,8 +57,8 @@ in rec {
thunderbird = thunderbird-esr;
thunderbird-latest = common {
version = "132.0";
sha512 = "71206606d691e3b257b4b163e56604eaff221a43f88015fcbdbbbb3bbd708a7459f61b0470f7534ce9adafd41561e11b3487484fbfe3e95a06674785cae97029";
version = "132.0.1";
sha512 = "ff2ff1344c3ab6594fba2e03d3f0548221934b94972819cfb6de9cea0bf9bac4ec67d14e7c6b9ae854ecdbc472b814a5f6f7204a9ce71ddac6167ff536a6276a";
updateScript = callPackage ./update.nix {
attrPath = "thunderbirdPackages.thunderbird-latest";
@@ -69,8 +69,8 @@ in rec {
thunderbird-esr = thunderbird-128;
thunderbird-128 = common {
version = "128.4.2esr";
sha512 = "4e37b77eb4652bc36585656bd3fe5416053f6a1a96ed1ca64c17d8d73031c746cb3832fd275d25f1283d20e18aa3e7b1df6d67864ced21b5f73042a42767cb45";
version = "128.4.3esr";
sha512 = "18691722f6376f3dc0658c01164fcdbf6008fc31eff8c1bd403d34f188db0e7850883315a96fc07289d207c9977d732628d3945736aa191fefd0a01735e3037d";
updateScript = callPackage ./update.nix {
attrPath = "thunderbirdPackages.thunderbird-128";

View File

@@ -20,14 +20,14 @@
let
pname = "qownnotes";
appname = "QOwnNotes";
version = "24.11.1";
version = "24.11.2";
in
stdenv.mkDerivation {
inherit pname version;
src = fetchurl {
url = "https://github.com/pbek/QOwnNotes/releases/download/v${version}/qownnotes-${version}.tar.xz";
hash = "sha256-OQ6p5VCdQZ2P1UFiCPtK+HogIgaoBQKdKO1tEDCA/5I=";
hash = "sha256-U1yxPAYFGSNbTjpFKXcAtlsHt9u4bgSf91WtOjziT8k=";
};
nativeBuildInputs = [

View File

@@ -2310,4 +2310,4 @@ DEPENDENCIES
yajl-ruby (~> 1.4.3)
BUNDLED WITH
2.5.16
2.5.22

View File

@@ -39,10 +39,15 @@ buildGoModule rec {
buildPhase = ''
runHook preBuild
make "VERSION=v${version}" binaries
make "VERSION=v${version}" "CC=${stdenv.cc.targetPrefix}cc" binaries
runHook postBuild
'';
preCheck = ''
# Workaround for: could not create "/homeless-shelter/.lima/_config" directory: mkdir /homeless-shelter: permission denied
export LIMA_HOME="$(mktemp -d)"
'';
installPhase = ''
runHook preInstall
mkdir -p $out

View File

@@ -16,16 +16,16 @@
rustPlatform.buildRustPackage rec {
pname = "i3status-rust";
version = "0.33.1";
version = "0.33.2";
src = fetchFromGitHub {
owner = "greshake";
repo = pname;
rev = "refs/tags/v${version}";
hash = "sha256-9lzzjb6tDfgqjAT9mS/cWfC6ucNXoJ8JJwtZ0FZqlDA=";
hash = "sha256-xJm4MsEU0OVX401WvKllg3zUwgCvjLxlAQzXE/oD1J0=";
};
cargoHash = "sha256-yeijJl94v+yKMVnU/Fjzapab/nExlvoznrx8Ydz/RvM=";
cargoHash = "sha256-9jbJVnZhFbMYldBkRVSIiorUYDNtF3AAwNEpyNJXpjo=";
nativeBuildInputs = [ pkg-config makeWrapper ];

View File

@@ -0,0 +1,45 @@
{
autoreconfHook,
fetchFromGitHub,
lib,
stdenv,
testers,
unstableGitUpdater,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "alac";
version = "0.0.7-unstable-2024-10-16";
outputs = [
"out"
"dev"
];
src = fetchFromGitHub {
owner = "mikebrady";
repo = "alac";
rev = "1832544d27d01335d823d639b176d1cae25ecfd4";
hash = "sha256-xRWDeqyJ/BEaSWVlDXgaKIKJuBwM8kJDIATVTVaMn2k=";
};
nativeBuildInputs = [
autoreconfHook
];
# error: 'TARGET_OS_MAC' is not defined, evaluates to 0
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin "-DTARGET_OS_MAC";
passthru = {
updateScript = unstableGitUpdater { };
tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
};
meta = {
description = "Apple Lossless Codec and Utility with Autotools";
homepage = "https://github.com/mikebrady/alac";
license = lib.licenses.asl20;
pkgConfigModules = [ "alac" ];
platforms = lib.platforms.all;
maintainers = with lib.maintainers; [ jopejoe1 ];
};
})

View File

@@ -10,11 +10,11 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "arc-browser";
version = "1.67.0-55463";
version = "1.69.0-55816";
src = fetchurl {
url = "https://releases.arc.net/release/Arc-${finalAttrs.version}.dmg";
hash = "sha256-up3H6Ke3tlL0/WbOv4qgbLxBaG8o5dibAPxtEnSad6g=";
hash = "sha256-v9tZE0/Kv90yR1vrflPAZH6n25bdI5AHskUSHz91USU=";
};
nativeBuildInputs = [ undmg ];

View File

@@ -5,16 +5,16 @@
rustPlatform.buildRustPackage rec {
pname = "automatic-timezoned";
version = "2.0.34";
version = "2.0.38";
src = fetchFromGitHub {
owner = "maxbrunet";
repo = pname;
rev = "v${version}";
sha256 = "sha256-NWVc+rPlW3GFHTADKEHjzDAHiicKd4HlJSD4MR2mqGQ=";
sha256 = "sha256-yGDMH0MmC+jihbKfKwQ/CEflBo+/q/OPzsi+CiiRqfE=";
};
cargoHash = "sha256-6QPgBP8K4HvivlVxWzIX8y37ltHEScUzmf5Js8gMN34=";
cargoHash = "sha256-qUAst/goPhpJO26RLUPw6+q/FYHuGXaiFADOHIYmGZ8=";
meta = with lib; {
description = "Automatically update system timezone based on location";

View File

@@ -6,10 +6,10 @@
}:
let
pname = "bitcomet";
version = "2.10.0";
version = "2.11.0";
src = fetchurl {
url = "https://download.bitcomet.com/linux/x86_64/BitComet-${version}-x86_64.AppImage";
hash = "sha256-HC9kThRuDcc7oWXuMeWe9g6P/v6GZQ8ho5sc4bNzsYw=";
hash = "sha256-YBM4xeeqvzvGoGHqOPForqDYt9U9ooG31jG2ickeq4o=";
};
appimageContents = appimageTools.extractType2 { inherit pname version src; };
in

View File

@@ -1,28 +0,0 @@
{ lib, buildGoModule, fetchFromGitHub }:
buildGoModule rec {
pname = "buf-language-server";
version = "unstable-2022-08-19";
src = fetchFromGitHub {
owner = "bufbuild";
repo = pname;
rev = "6f08a7eed22c5a178cb55613f454319e09be112c";
sha256 = "sha256-UHsWrWDOC/f3YS2g533CgUkuUmz4MUQRunClQiY/YPQ=";
};
vendorHash = "sha256-ORzCOmBx6k1GZj6pYLhqPsdneCc7Tt1yHpI5mw5ruFU=";
ldflags = [
"-s"
"-w"
];
meta = with lib; {
description = "Language server for protocol buffers";
mainProgram = "bufls";
homepage = "https://github.com/bufbuild/buf-language-server";
license = licenses.asl20;
maintainers = with maintainers; [ svrana ];
};
}

View File

@@ -97,5 +97,8 @@ stdenvNoCC.mkDerivation rec {
# Broken for Musl at 2024-01-13, tracking issue:
# https://github.com/NixOS/nixpkgs/issues/280716
broken = stdenvNoCC.hostPlatform.isMusl;
# Hangs when run via Rosetta 2 on Apple Silicon
hydraPlatforms = lib.lists.remove "x86_64-darwin" lib.platforms.all;
};
}

View File

@@ -1,26 +1,21 @@
{ lib
, rustPlatform
, fetchFromGitHub
, stdenv
, darwin
{
lib,
rustPlatform,
fetchFromGitHub,
}:
rustPlatform.buildRustPackage rec {
pname = "cargo-mutants";
version = "24.9.0";
version = "24.11.0";
src = fetchFromGitHub {
owner = "sourcefrog";
repo = "cargo-mutants";
rev = "v${version}";
hash = "sha256-fMw3Whyl+zTPpDTdYpwvzMQtSdr42ueEvkdmRI0N2aA=";
hash = "sha256-A4DlHJKKopReKVF14w3c4wUXJe/vYUzbwMswuvMGs/E=";
};
cargoHash = "sha256-+vI/HPw0oe9K0kWpJXGBM0r7oVBh3+RJzSwklaywa54=";
buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
darwin.apple_sdk.frameworks.SystemConfiguration
];
cargoHash = "sha256-QyQrLkLDvnytojf92P+INYlvfBc+t3240O2cx36CzTU=";
# too many tests require internet access
doCheck = false;

View File

@@ -2,16 +2,16 @@
rustPlatform.buildRustPackage rec {
pname = "cargo-nextest";
version = "0.9.81";
version = "0.9.82";
src = fetchFromGitHub {
owner = "nextest-rs";
repo = "nextest";
rev = "cargo-nextest-${version}";
hash = "sha256-Onvi/q173af1W3wzrlrU909mfQ6bCC4csp2B4UqDsnM=";
hash = "sha256-dtZGTKC9C9akjcD56I2iafPnPEd5MKgoCjB0Rkc53o4=";
};
cargoHash = "sha256-sfjpTj+XSnxweZMlASe24qGAJZ4gazs0O7JENiu/U+g=";
cargoHash = "sha256-3V9o4DmGG4gkqrRfZkcKTJe2Ld2ON9Ne2XJMOVUeFaA=";
cargoBuildFlags = [ "-p" "cargo-nextest" ];
cargoTestFlags = [ "-p" "cargo-nextest" ];

View File

@@ -3,12 +3,12 @@
buildGraalvmNativeImage rec {
pname = "clj-kondo";
version = "2024.09.27";
version = "2024.11.14";
src = fetchurl {
url =
"https://github.com/clj-kondo/${pname}/releases/download/v${version}/${pname}-${version}-standalone.jar";
sha256 = "sha256-DrSfL1WazlNd5H0jG6m0S5aED4BLVufr1rGIAyifn6E=";
sha256 = "sha256-/pzRKx6fqcbVwp+Eif3a1mh/awmwhhLVtFldRYibp/g=";
};
graalvmDrv = graalvmCEPackages.graalvm-ce;

View File

@@ -88,5 +88,6 @@ stdenvNoCC.mkDerivation (finalAttrs: {
homepage = "https://github.com/firefly-iii/firefly-iii";
license = lib.licenses.agpl3Only;
maintainers = [ lib.maintainers.savyajha lib.maintainers.patrickdag ];
hydraPlatforms = lib.platforms.linux; # build hangs on both Darwin platforms, needs investigation
};
})

View File

@@ -2,29 +2,30 @@
stdenv.mkDerivation (finalAttrs: {
pname = "flyway";
version = "9.22.3";
version = "10.20.1";
src = fetchurl {
url = "mirror://maven/org/flywaydb/flyway-commandline/${finalAttrs.version}/flyway-commandline-${finalAttrs.version}.tar.gz";
sha256 = "sha256-utAJpbU5NkKyJyyWB0yfwHZJxQAVJgiKm12wmGK1ojQ=";
url =
"mirror://maven/org/flywaydb/flyway-commandline/${finalAttrs.version}/flyway-commandline-${finalAttrs.version}.tar.gz";
sha256 = "sha256-ntFaXwF3EThHxR7rpAivTRDN4bgS1l0RFFyvbs/8dxE=";
};
nativeBuildInputs = [ makeWrapper ];
dontBuild = true;
dontStrip = true;
installPhase = ''
mkdir -p $out/bin $out/share/flyway
cp -r sql jars drivers conf $out/share/flyway
install -Dt $out/share/flyway/lib lib/community/*.jar lib/*.jar lib/aad/*.jar lib/oracle_wallet/*.jar
cp -r drivers conf licenses README.txt $out/share/flyway
install -Dt $out/share/flyway/lib lib/*.jar lib/flyway/*.jar lib/oracle_wallet/*.jar lib/aad/msal4j-1.15.1.jar lib/aad/slf4j-api-1.7.30.jar
makeWrapper "${jre_headless}/bin/java" $out/bin/flyway \
--add-flags "-Djava.security.egd=file:/dev/../dev/urandom" \
--add-flags "-classpath '$out/share/flyway/lib/*:$out/share/flyway/drivers/*'" \
--add-flags "org.flywaydb.commandline.Main" \
--add-flags "-jarDirs='$out/share/flyway/jars'"
'';
passthru.tests = {
version = testers.testVersion { package = finalAttrs.finalPackage; };
};
meta = with lib; {
description = "Evolve your Database Schema easily and reliably across all your instances";
description =
"Evolve your Database Schema easily and reliably across all your instances";
longDescription = ''
The Flyway command-line tool is a standalone Flyway distribution.
It is primarily meant for users who wish to migrate their database from the command-line
@@ -35,7 +36,8 @@ stdenv.mkDerivation (finalAttrs: {
mainProgram = "flyway";
downloadPage = "https://github.com/flyway/flyway";
homepage = "https://flywaydb.org/";
changelog = "https://documentation.red-gate.com/fd/release-notes-for-flyway-engine-179732572.html";
changelog =
"https://documentation.red-gate.com/fd/release-notes-for-flyway-engine-179732572.html";
sourceProvenance = with sourceTypes; [ binaryBytecode ];
license = licenses.asl20;
platforms = platforms.unix;

View File

@@ -19,13 +19,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "forge-sparks";
version = "0.3.0";
version = "0.4.0";
src = fetchFromGitHub {
owner = "rafaelmardojai";
repo = "forge-sparks";
rev = finalAttrs.version;
hash = "sha256-1Aq9Bv1UEckoA9IkQ9++rM6623GD41hgBJoeXKr2ipM=";
hash = "sha256-H607u/VBuzzoYrYZc8fLqCQMZ+jRJOVZ34U8yKHfmYk=";
fetchSubmodules = true;
};

View File

@@ -8,13 +8,13 @@
buildDotnetModule rec {
pname = "garnet";
version = "1.0.36";
version = "1.0.39";
src = fetchFromGitHub {
owner = "microsoft";
repo = "garnet";
rev = "refs/tags/v${version}";
hash = "sha256-iWfRj1PN54TXiNMSYYNq0rjA50ag0lyEJdDFw0cMv4g=";
hash = "sha256-2GX6iaDSYBRozHoBxtI7XrSrpYQ0Hcdr+Psn4uXRzAM=";
};
projectFile = "main/GarnetServer/GarnetServer.csproj";

View File

@@ -10,13 +10,13 @@
buildGoModule rec {
pname = "gh";
version = "2.61.0";
version = "2.62.0";
src = fetchFromGitHub {
owner = "cli";
repo = "cli";
rev = "refs/tags/v${version}";
hash = "sha256-zzcptg2hTQDRWFbC99q/Qy+Nk2vrhekYc5dMr3fjFD0=";
hash = "sha256-1nJCI+MLqZnEeXXHYI/GbZoPqIuIyQO5kFkPiLN+Y6I=";
};
vendorHash = "sha256-b8HO4mevQcfX/VpJv1ZefXWAeXyhsy6074fvVNoH/8Y=";

View File

@@ -2,16 +2,16 @@
buildGoModule rec {
pname = "grpc-client-cli";
version = "1.20.3";
version = "1.21.1";
src = fetchFromGitHub {
owner = "vadimi";
repo = "grpc-client-cli";
rev = "v${version}";
sha256 = "sha256-aPmHvi81jqRKO3aY6bZ9bMJmk/HZVl/8MAUZN3QJByQ=";
sha256 = "sha256-fz0O/tBWTxtVbjSND0b2O+xic27zXMNhIkyF3G+Jra4=";
};
vendorHash = "sha256-ruC/JE4+ftkzmgDxg2bRxTszjBtDtKQQGvyFD9H0O3I=";
vendorHash = "sha256-M/x6Dinnja43ggcx8LD/gdIZnbdo5wJqxub2JnudSqs=";
meta = with lib; {
description = "generic gRPC command line client";

View File

@@ -6,13 +6,13 @@
}:
buildGoModule rec {
pname = "infrastructure-agent";
version = "1.57.2";
version = "1.58.0";
src = fetchFromGitHub {
owner = "newrelic";
repo = "infrastructure-agent";
rev = version;
hash = "sha256-74aBFGBrrEiqAVG3kVYLOz3P4VTCw4G3vV/iBucFPYs=";
hash = "sha256-L2er3DJ9zZb8AosHwOdNEsvQc7XPwQfGaa8d72iJOik=";
};
vendorHash = "sha256-0WLL15CXRi/flp4EV3Qt0wO1VaUmAokzsChpiqjs+YQ=";

View File

@@ -5,7 +5,7 @@
}:
let
version = "0.2.4";
version = "0.2.5";
in
rustPlatform.buildRustPackage {
inherit version;
@@ -15,10 +15,10 @@ rustPlatform.buildRustPackage {
owner = "sectordistrict";
repo = "intentrace";
rev = "refs/tags/v${version}";
hash = "sha256-Bsis8tL2xahJT/qAFVbbd/CZ7n8KJYLPTIl1a1WHR4c=";
hash = "sha256-3Pbx/ZA9DYwNzsszSzodJub+G8uKuYuNZhlTDsvL0t4=";
};
cargoHash = "sha256-pyGcQy7p0+Vqv3Khy1hLgahcOpqnbKKmRLZcKwkvVWw=";
cargoHash = "sha256-RZMhmqETPdcG0ofLPQdynaOFQuIx3H8j0mKR+SbOQ6s=";
meta = {
description = "Prettified Linux syscall tracing tool (like strace)";

View File

@@ -2,13 +2,13 @@
buildGoModule rec {
pname = "k6";
version = "0.54.0";
version = "0.55.0";
src = fetchFromGitHub {
owner = "grafana";
repo = pname;
rev = "v${version}";
hash = "sha256-jD91JZMoxk7FmhG3F1CKbvUliNLyvlECnZQnZUA751w=";
hash = "sha256-SWmKtnpG/MvSGllZSv3EJjVjOVUWcWFVLqz/FcvEl9Y=";
};
subPackages = [ "./" ];

View File

@@ -49,5 +49,6 @@ stdenv.mkDerivation (finalAttrs: {
mainProgram = "lbreakout2";
maintainers = with lib.maintainers; [ AndersonTorres ciil ];
platforms = lib.platforms.unix;
hydraPlatforms = lib.platforms.linux; # build hangs on both Darwin platforms, needs investigation
};
})

View File

@@ -5,19 +5,16 @@
, lua5_3
}:
let
version = "0.2.0";
in
stdenvNoCC.mkDerivation {
inherit version;
stdenvNoCC.mkDerivation (finalAttrs: {
version = "0.2.1";
pname = "lunarml";
src = fetchFromGitHub {
owner = "minoki";
repo = "LunarML";
rev = "refs/tags/v${version}";
hash = "sha256-w0DWvFegAdpJTab60cDLA+tketmMYeKApx1rCNr27i4=";
rev = "refs/tags/v${finalAttrs.version}";
hash = "sha256-wNcsvtIR/MbvwAIhybc7zzbS+RgfwndQ1jdDVdte+44=";
};
outputs = [ "out" "doc" ];
@@ -55,4 +52,4 @@ stdenvNoCC.mkDerivation {
maintainers = with lib.maintainers; [ toastal ratsclub ];
platforms = mlton.meta.platforms;
};
}
})

View File

@@ -0,0 +1,77 @@
# nixos-render-docs
A [CommonMark](https://commonmark.org/) and [`man-pages`](https://www.man7.org/linux/man-pages/man7/man-pages.7.html) renderer for the NixOS and Nixpkgs manuals.
## Summary
`nixos-render-docs` implements [RFC 72](https://github.com/NixOS/rfcs/pull/72) and has enabled a lossless port of Nixpkgs and NixOS documentation, which was originally written in the [DocBook](https://docbook.org/whatis) format, to [CommonMark](https://commonmark.org/) with [custom extensions](../../../../doc/README.md#syntax).
Maintaining our own documentation rendering framework may appear extreme but has practical advantages:
- We never have to work around existing tools made under different assumptions
- We don't have to deal with unexpected breakage
- We can grow the framework with our evolving requirements without relying on external support or approval or the need to maintain a small diff to upstream
- The amount of code involved is minimal because it's single-purpose
Several alternatives to `nixos-render-docs` were discussed in the past.
A detailed analysis can be found in a [table comparing documentation rendering framework](https://ethercalc.net/dc4vcnnl8zv0).
## Redirects system
Moving contents around can cause links to break.
Since we have our own markdown parser, we can hook into the rendering process to extract all of the metadata around each content identifier.
The [mechanism for checking correctness of redirects](./src/nixos_render_docs/redirects.py) takes the collection of identifiers and a mapping of the identified content to its historical locations in the output.
It validates them against a set of rules, and creates a client-side redirect mapping for each output file, as well as a `_redirects` file for server-side redirects in [Netlify syntax](https://docs.netlify.com/routing/redirects/#syntax-for-the-redirects-file).
This allows us to catch:
- Identifiers that were removed or renamed
- Content that was moved from one location to another
- Various consistency errors in the redirects mapping
### Design considerations
The creation, movement, and removal of every identifier is captured in the Git history.
However, analysing hundreds of thousands of commits during the build process is impractical.
The chosen design is a trade-off between speed, repository size, and contributor friction:
- Stricter checks always require more attention from contributors
- Checks should be reasonably fast and ideally happen locally, e.g. as part of the build, as anything else will substantially lengthen the feedback cycle.
- Computing redirects against previous revisions of the repository would be more space-efficient, but impractically slow.
- It would also require keeping an impure or otherwise continuously updated reference to those other revisions.
- The static mapping acts like a semi-automatically updated cache that we drag along with version history.
- Other setups, such as a dedicated service to cache a history of moved content, are more complicated and would still be impure.
- Checking in large amounts of data that is touched often, bears a risk of more merge conflicts or related build failures.
The solution picked here is to have a static mapping of the historical locations checked into the Git tree, such that it can be read during the build process.
This also ensures that an improper redirect mapping will cause `nixos-render-docs` to fail the build and thus enforce that redirects stay up-to-date with every commit.
### Redirects Mapping Structure
Here's an overview of this mapping:
```json
{
"<identifier>": [
"index.html#<identifier>",
"foo.html#foo",
"bar.html#foo"
]
}
```
- The keys of this mapping _must_ be an exhaustive list of all identifiers in the source files.
- The first element of the value of this mapping _must_ be the current output location (path and anchor) of the content signified by the identifier in the mapping key.
- While the order of the remaining elements is unconstrained, please only prepend to this list when the content under the indentifier moves in order to keep the diffs readable.
In case this identifier is renamed, the mapping would change into:
```json
{
"<identifier-new>": [
"index.html#<identifier-new>",
"foo.html#<identifier>",
"bar.html#foo",
"index.html#<identifier>"
]
}
```

View File

@@ -16,6 +16,7 @@ from . import md, options
from .html import HTMLRenderer, UnresolvedXrefError
from .manual_structure import check_structure, FragmentType, is_include, make_xml_id, TocEntry, TocEntryType, XrefTarget
from .md import Converter, Renderer
from .redirects import Redirects
class BaseConverter(Converter[md.TR], Generic[md.TR]):
# per-converter configuration for ns:arg=value arguments to include blocks, following
@@ -216,14 +217,16 @@ class ManualHTMLRenderer(RendererMixin, HTMLRenderer):
_base_path: Path
_in_dir: Path
_html_params: HTMLParameters
_redirects: Redirects
def __init__(self, toplevel_tag: str, revision: str, html_params: HTMLParameters,
manpage_urls: Mapping[str, str], xref_targets: dict[str, XrefTarget],
in_dir: Path, base_path: Path):
redirects: Redirects, in_dir: Path, base_path: Path):
super().__init__(toplevel_tag, revision, manpage_urls, xref_targets)
self._in_dir = in_dir
self._base_path = base_path.absolute()
self._html_params = html_params
self._redirects = redirects
def _pull_image(self, src: str) -> str:
src_path = Path(src)
@@ -306,6 +309,11 @@ class ManualHTMLRenderer(RendererMixin, HTMLRenderer):
' <hr />',
' </div>',
])
redirects_path = f'{self._base_path}/{toc.target.path.split('.html')[0]}-redirects.js'
with open(redirects_path, 'w') as file:
file.write(self._redirects.get_redirect_script(toc.target.path))
return "\n".join([
'<?xml version="1.0" encoding="utf-8" standalone="no"?>',
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"',
@@ -317,7 +325,7 @@ class ManualHTMLRenderer(RendererMixin, HTMLRenderer):
"".join((f'<link rel="stylesheet" type="text/css" href="{html.escape(style, True)}" />'
for style in self._html_params.stylesheets)),
"".join((f'<script src="{html.escape(script, True)}" type="text/javascript"></script>'
for script in self._html_params.scripts)),
for script in [*self._html_params.scripts, redirects_path])),
f' <meta name="generator" content="{html.escape(self._html_params.generator, True)}" />',
f' <link rel="home" href="{home.target.href()}" title="{home.target.title}" />' if home.target.href() else "",
f' {up_link}{prev_link}{next_link}',
@@ -501,6 +509,7 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
_revision: str
_html_params: HTMLParameters
_manpage_urls: Mapping[str, str]
_redirects: Redirects
_xref_targets: dict[str, XrefTarget]
_redirection_targets: set[str]
_appendix_count: int = 0
@@ -509,9 +518,9 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
self._appendix_count += 1
return _to_base26(self._appendix_count - 1)
def __init__(self, revision: str, html_params: HTMLParameters, manpage_urls: Mapping[str, str]):
def __init__(self, revision: str, html_params: HTMLParameters, manpage_urls: Mapping[str, str], redirects: Redirects):
super().__init__()
self._revision, self._html_params, self._manpage_urls = revision, html_params, manpage_urls
self._revision, self._html_params, self._manpage_urls, self._redirects = revision, html_params, manpage_urls, redirects
self._xref_targets = {}
self._redirection_targets = set()
# renderer not set on purpose since it has a dependency on the output path!
@@ -519,7 +528,7 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
def convert(self, infile: Path, outfile: Path) -> None:
self._renderer = ManualHTMLRenderer(
'book', self._revision, self._html_params, self._manpage_urls, self._xref_targets,
infile.parent, outfile.parent)
self._redirects, infile.parent, outfile.parent)
super().convert(infile, outfile)
def _parse(self, src: str, *, auto_id_prefix: None | str = None) -> list[Token]:
@@ -670,7 +679,13 @@ class HTMLConverter(BaseConverter[ManualHTMLRenderer]):
)
TocEntry.collect_and_link(self._xref_targets, tokens)
self._redirects.validate(self._xref_targets)
server_redirects = self._redirects.get_server_redirects()
with open(outfile.parent / '_redirects', 'w') as server_redirects_file:
formatted_server_redirects = []
for from_path, to_path in server_redirects.items():
formatted_server_redirects.append(f"{from_path} {to_path} 301")
server_redirects_file.write("\n".join(formatted_server_redirects))
def _build_cli_html(p: argparse.ArgumentParser) -> None:
@@ -683,16 +698,22 @@ def _build_cli_html(p: argparse.ArgumentParser) -> None:
p.add_argument('--chunk-toc-depth', default=1, type=int)
p.add_argument('--section-toc-depth', default=0, type=int)
p.add_argument('--media-dir', default="media", type=Path)
p.add_argument('--redirects', type=Path)
p.add_argument('infile', type=Path)
p.add_argument('outfile', type=Path)
def _run_cli_html(args: argparse.Namespace) -> None:
with open(args.manpage_urls, 'r') as manpage_urls:
with open(args.manpage_urls) as manpage_urls, open(Path(__file__).parent / "redirects.js") as redirects_script:
redirects = {}
if args.redirects:
with open(args.redirects) as raw_redirects:
redirects = json.load(raw_redirects)
md = HTMLConverter(
args.revision,
HTMLParameters(args.generator, args.stylesheet, args.script, args.toc_depth,
args.chunk_toc_depth, args.section_toc_depth, args.media_dir),
json.load(manpage_urls))
json.load(manpage_urls), Redirects(redirects, redirects_script.read()))
md.convert(args.infile, args.outfile)
def build_cli(p: argparse.ArgumentParser) -> None:

View File

@@ -0,0 +1,3 @@
const anchor = document.location.hash.substring(1);
const redirects = REDIRECTS_PLACEHOLDER;
if (redirects[anchor]) document.location.href = redirects[anchor];

View File

@@ -0,0 +1,174 @@
import json
from dataclasses import dataclass, field
from pathlib import Path
from .manual_structure import XrefTarget
class RedirectsError(Exception):
def __init__(
self,
conflicting_anchors: set[str] = None,
divergent_redirects: set[str] = None,
identifiers_missing_current_outpath: set[str] = None,
identifiers_without_redirects: set[str] = None,
orphan_identifiers: set[str] = None
):
self.conflicting_anchors = conflicting_anchors or set()
self.divergent_redirects = divergent_redirects or set()
self.identifiers_missing_current_outpath = identifiers_missing_current_outpath or set()
self.identifiers_without_redirects = identifiers_without_redirects or set()
self.orphan_identifiers = orphan_identifiers or set()
def __str__(self):
error_messages = []
if self.conflicting_anchors:
error_messages.append(f"""
Identifiers must not be identical to any historical location's anchor of the same output path.
The following identifiers violate this rule:
- {"\n - ".join(self.conflicting_anchors)}
This can break links or redirects. If you added new content, choose a different identifier.
""")
if self.divergent_redirects:
error_messages.append(f"""
All historical content locations must correspond to exactly one identifier.
The following locations violate this rule:
- {"\n - ".join(self.divergent_redirects)}
It leads to inconsistent behavior depending on which redirect is applied.
Please update doc/redirects.json or nixos/doc/manual/redirects.json!
""")
if self.identifiers_missing_current_outpath:
error_messages.append(f"""
The first element of an identifier's redirects list must denote its current location.
The following identifiers violate this rule:
- {"\n - ".join(self.identifiers_missing_current_outpath)}
If you moved content, add its new location as the first element of the redirects mapping.
Please update doc/redirects.json or nixos/doc/manual/redirects.json!
""") # TODO: automatically detect if you just missed adding a new location, and make a tool to do that for you
if self.identifiers_without_redirects:
error_messages.append(f"""
Identifiers present in the source must have a mapping in the redirects file.
- {"\n - ".join(self.identifiers_without_redirects)}
This can happen when an identifier was added or renamed.
Please update doc/redirects.json or nixos/doc/manual/redirects.json!
""") # TODO: add tooling in the development shell to do that automatically and point to that command
if self.orphan_identifiers:
error_messages.append(f"""
Keys of the redirects mapping must correspond to some identifier in the source.
- {"\n - ".join(self.orphan_identifiers)}
This can happen when an identifier was removed or renamed.
Please update doc/redirects.json or nixos/doc/manual/redirects.json!
""") # TODO: add tooling in the development shell to do that automatically and point to that command
error_messages.append("NOTE: If your Manual build passes locally and you see this message in CI, you probably need a rebase.")
return "\n".join(error_messages)
@dataclass
class Redirects:
_raw_redirects: dict[str, list[str]]
_redirects_script: str
_xref_targets: dict[str, XrefTarget] = field(default_factory=dict)
def validate(self, initial_xref_targets: dict[str, XrefTarget]):
"""
Validate redirection mappings against element locations in the output
- Ensure semantic correctness of the set of redirects with the following rules:
- Identifiers present in the source must have a mapping in the redirects file
- Keys of the redirects mapping must correspond to some identifier in the source
- All historical content locations must correspond to exactly one identifier
- Identifiers must not be identical to any historical location's anchor of the same output path
- The first element of an identifier's redirects list must denote its current location.
"""
xref_targets = {}
ignored_identifier_patterns = ("opt-", "auto-generated-", "function-library-")
for id, target in initial_xref_targets.items():
# filter out automatically generated identifiers from module options and library documentation
if id.startswith(ignored_identifier_patterns):
continue
xref_targets[id] = target
identifiers_without_redirects = xref_targets.keys() - self._raw_redirects.keys()
orphan_identifiers = self._raw_redirects.keys() - xref_targets.keys()
client_side_redirects = {}
server_side_redirects = {}
conflicting_anchors = set()
divergent_redirects = set()
identifiers_missing_current_outpath = set()
for identifier, locations in self._raw_redirects.items():
if identifier not in xref_targets:
continue
if not locations or locations[0] != f"{xref_targets[identifier].path}#{identifier}":
identifiers_missing_current_outpath.add(identifier)
for location in locations[1:]:
if '#' in location:
path, anchor = location.split('#')
if anchor in identifiers_without_redirects:
identifiers_without_redirects.remove(anchor)
if location not in client_side_redirects:
client_side_redirects[location] = f"{xref_targets[identifier].path}#{identifier}"
for identifier, xref_target in xref_targets.items():
if xref_target.path == path and anchor == identifier:
conflicting_anchors.add(anchor)
else:
divergent_redirects.add(location)
else:
if location not in server_side_redirects:
server_side_redirects[location] = xref_targets[identifier].path
else:
divergent_redirects.add(location)
if any([
conflicting_anchors,
divergent_redirects,
identifiers_missing_current_outpath,
identifiers_without_redirects,
orphan_identifiers
]):
raise RedirectsError(
conflicting_anchors=conflicting_anchors,
divergent_redirects=divergent_redirects,
identifiers_missing_current_outpath=identifiers_missing_current_outpath,
identifiers_without_redirects=identifiers_without_redirects,
orphan_identifiers=orphan_identifiers
)
self._xref_targets = xref_targets
def get_client_redirects(self, target: str):
paths_to_target = {src for src, dest in self.get_server_redirects().items() if dest == target}
client_redirects = {}
for locations in self._raw_redirects.values():
for location in locations[1:]:
if '#' not in location:
continue
path, anchor = location.split('#')
if path not in [target, *paths_to_target]:
continue
client_redirects[anchor] = locations[0]
return client_redirects
def get_server_redirects(self):
server_redirects = {}
for identifier, locations in self._raw_redirects.items():
for location in locations[1:]:
if '#' not in location and location not in server_redirects:
server_redirects[location] = self._xref_targets[identifier].path
return server_redirects
def get_redirect_script(self, target: str) -> str:
client_redirects = self.get_client_redirects(target)
return self._redirects_script.replace('REDIRECTS_PLACEHOLDER', json.dumps(client_redirects))

View File

@@ -13,3 +13,6 @@ nixos-render-docs = "nixos_render_docs:main"
[build-system]
requires = ["setuptools"]
[tool.setuptools.package-data]
nixos_render_docs = ["redirects.js"]

View File

@@ -3,6 +3,7 @@ from pathlib import Path
from markdown_it.token import Token
from nixos_render_docs.manual import HTMLConverter, HTMLParameters
from nixos_render_docs.md import Converter
from nixos_render_docs.redirects import Redirects
auto_id_prefix="TEST_PREFIX"
def set_prefix(token: Token, ident: str) -> None:
@@ -10,7 +11,7 @@ def set_prefix(token: Token, ident: str) -> None:
def test_auto_id_prefix_simple() -> None:
md = HTMLConverter("1.0.0", HTMLParameters("", [], [], 2, 2, 2, Path("")), {})
md = HTMLConverter("1.0.0", HTMLParameters("", [], [], 2, 2, 2, Path("")), {}, Redirects({}, ''))
src = f"""
# title
@@ -31,7 +32,7 @@ def test_auto_id_prefix_simple() -> None:
def test_auto_id_prefix_repeated() -> None:
md = HTMLConverter("1.0.0", HTMLParameters("", [], [], 2, 2, 2, Path("")), {})
md = HTMLConverter("1.0.0", HTMLParameters("", [], [], 2, 2, 2, Path("")), {}, Redirects({}, ''))
src = f"""
# title
@@ -57,7 +58,7 @@ def test_auto_id_prefix_repeated() -> None:
]
def test_auto_id_prefix_maximum_nested() -> None:
md = HTMLConverter("1.0.0", HTMLParameters("", [], [], 2, 2, 2, Path("")), {})
md = HTMLConverter("1.0.0", HTMLParameters("", [], [], 2, 2, 2, Path("")), {}, Redirects({}, ''))
src = f"""
# h1

View File

@@ -0,0 +1,259 @@
import json
import unittest
from pathlib import Path
from nixos_render_docs.manual import HTMLConverter, HTMLParameters
from nixos_render_docs.redirects import Redirects, RedirectsError
class TestRedirects(unittest.TestCase):
def setup_test(self, sources, raw_redirects):
with open(Path(__file__).parent / 'index.md', 'w') as infile:
indexHTML = ["# Redirects test suite {#redirects-test-suite}\n## Setup steps"]
for path in sources.keys():
outpath = f"{path.split('.md')[0]}.html"
indexHTML.append(f"```{{=include=}} appendix html:into-file=//{outpath}\n{path}\n```")
infile.write("\n".join(indexHTML))
for filename, content in sources.items():
with open(Path(__file__).parent / filename, 'w') as infile:
infile.write(content)
redirects = Redirects({"redirects-test-suite": ["index.html#redirects-test-suite"]} | raw_redirects, '')
return HTMLConverter("1.0.0", HTMLParameters("", [], [], 2, 2, 2, Path("")), {}, redirects)
def run_test(self, md: HTMLConverter):
md.convert(Path(__file__).parent / 'index.md', Path(__file__).parent / 'index.html')
def assert_redirect_error(self, expected_errors: dict, md: HTMLConverter):
with self.assertRaises(RuntimeError) as context:
self.run_test(md)
exception = context.exception.__cause__
self.assertIsInstance(exception, RedirectsError)
for attr, expected_values in expected_errors.items():
self.assertTrue(hasattr(exception, attr))
actual_values = getattr(exception, attr)
self.assertEqual(set(actual_values), set(expected_values))
def test_identifier_added(self):
"""Test adding a new identifier to the source."""
before = self.setup_test(
sources={"foo.md": "# Foo {#foo}"},
raw_redirects={"foo": ["foo.html#foo"]},
)
self.run_test(before)
intermediate = self.setup_test(
sources={"foo.md": "# Foo {#foo}\n## Bar {#bar}"},
raw_redirects={"foo": ["foo.html#foo"]},
)
self.assert_redirect_error({"identifiers_without_redirects": ["bar"]}, intermediate)
after = self.setup_test(
sources={"foo.md": "# Foo {#foo}\n## Bar {#bar}"},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["foo.html#bar"]},
)
self.run_test(after)
def test_identifier_removed(self):
"""Test removing an identifier from the source."""
before = self.setup_test(
sources={"foo.md": "# Foo {#foo}\n## Bar {#bar}"},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["foo.html#bar"]},
)
self.run_test(before)
intermediate = self.setup_test(
sources={"foo.md": "# Foo {#foo}"},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["foo.html#bar"]},
)
self.assert_redirect_error({"orphan_identifiers": ["bar"]}, intermediate)
after = self.setup_test(
sources={"foo.md": "# Foo {#foo}"},
raw_redirects={"foo": ["foo.html#foo"]},
)
self.run_test(after)
def test_identifier_renamed(self):
"""Test renaming an identifier in the source."""
before = self.setup_test(
sources={"foo.md": "# Foo {#foo}\n## Bar {#bar}"},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["foo.html#bar"]},
)
self.run_test(before)
intermediate = self.setup_test(
sources={"foo.md": "# Foo Prime {#foo-prime}\n## Bar {#bar}"},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["foo.html#bar"]},
)
self.assert_redirect_error(
{
"identifiers_without_redirects": ["foo-prime"],
"orphan_identifiers": ["foo"]
},
intermediate
)
after = self.setup_test(
sources={"foo.md": "# Foo Prime {#foo-prime}\n## Bar {#bar}"},
raw_redirects={"foo-prime": ["foo.html#foo-prime", "foo.html#foo"], "bar": ["foo.html#bar"]},
)
self.run_test(after)
def test_leaf_identifier_moved_to_different_file(self):
"""Test moving a leaf identifier to a different output path."""
before = self.setup_test(
sources={"foo.md": "# Foo {#foo}\n## Bar {#bar}"},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["foo.html#bar"]},
)
self.run_test(before)
intermediate = self.setup_test(
sources={
"foo.md": "# Foo {#foo}",
"bar.md": "# Bar {#bar}"
},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["foo.html#foo"]},
)
self.assert_redirect_error({"identifiers_missing_current_outpath": ["bar"]}, intermediate)
after = self.setup_test(
sources={
"foo.md": "# Foo {#foo}",
"bar.md": "# Bar {#bar}"
},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["bar.html#bar", "foo.html#bar"]},
)
self.run_test(after)
def test_non_leaf_identifier_moved_to_different_file(self):
"""Test moving a non-leaf identifier to a different output path."""
before = self.setup_test(
sources={"foo.md": "# Foo {#foo}\n## Bar {#bar}\n### Baz {#baz}"},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["foo.html#bar"], "baz": ["foo.html#baz"]},
)
self.run_test(before)
intermediate = self.setup_test(
sources={
"foo.md": "# Foo {#foo}",
"bar.md": "# Bar {#bar}\n## Baz {#baz}"
},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["foo.html#bar"], "baz": ["foo.html#baz"]},
)
self.assert_redirect_error({"identifiers_missing_current_outpath": ["bar", "baz"]}, intermediate)
after = self.setup_test(
sources={
"foo.md": "# Foo {#foo}",
"bar.md": "# Bar {#bar}\n## Baz {#baz}"
},
raw_redirects={
"foo": ["foo.html#foo"],
"bar": ["bar.html#bar", "foo.html#bar"],
"baz": ["bar.html#baz", "foo.html#baz"]
},
)
self.run_test(after)
def test_conflicting_anchors(self):
"""Test for conflicting anchors."""
md = self.setup_test(
sources={"foo.md": "# Foo {#foo}\n## Bar {#bar}"},
raw_redirects={
"foo": ["foo.html#foo", "foo.html#bar"],
"bar": ["foo.html#bar"],
}
)
self.assert_redirect_error({"conflicting_anchors": ["bar"]}, md)
def test_divergent_redirect(self):
"""Test for divergent redirects."""
md = self.setup_test(
sources={
"foo.md": "# Foo {#foo}",
"bar.md": "# Bar {#bar}"
},
raw_redirects={
"foo": ["foo.html#foo", "old-foo.html"],
"bar": ["bar.html#bar", "old-foo.html"]
}
)
self.assert_redirect_error({"divergent_redirects": ["old-foo.html"]}, md)
def test_no_client_redirects(self):
"""Test fetching client side redirects and ignore server-side ones."""
md = self.setup_test(
sources={"foo.md": "# Foo {#foo}\n## Bar {#bar}"},
raw_redirects={"foo": ["foo.html#foo"], "bar": ["foo.html#bar", "bar.html"]}
)
self.run_test(md)
self.assertEqual(md._redirects.get_client_redirects("foo.html"), {})
def test_basic_redirect_matching(self):
"""Test client-side redirects getter with a simple redirect mapping"""
md = self.setup_test(
sources={"foo.md": "# Foo {#foo}\n## Bar {#bar}"},
raw_redirects={
'foo': ['foo.html#foo', 'foo.html#some-section', 'foo.html#another-section'],
'bar': ['foo.html#bar'],
},
)
self.run_test(md)
client_redirects = md._redirects.get_client_redirects("foo.html")
expected_redirects = {'some-section': 'foo.html#foo', 'another-section': 'foo.html#foo'}
self.assertEqual(client_redirects, expected_redirects)
def test_advanced_redirect_matching(self):
"""Test client-side redirects getter with a complex redirect mapping"""
md = self.setup_test(
sources={"foo.md": "# Foo {#foo}", "bar.md": "# Bar {#bar}"},
raw_redirects={
'foo': ['foo.html#foo', 'foo.html#some-section', 'bar.html#foo'],
'bar': ['bar.html#bar', 'bar.html#another-section'],
},
)
self.run_test(md)
self.assertEqual(md._redirects.get_client_redirects("index.html"), {})
client_redirects = md._redirects.get_client_redirects("foo.html")
expected_redirects = {'some-section': 'foo.html#foo'}
self.assertEqual(client_redirects, expected_redirects)
client_redirects = md._redirects.get_client_redirects("bar.html")
expected_redirects = {'foo': 'foo.html#foo', 'another-section': 'bar.html#bar'}
self.assertEqual(client_redirects, expected_redirects)
def test_server_redirects(self):
"""Test server-side redirects getter"""
md = self.setup_test(
sources={"foo.md": "# Foo {#foo}", "bar.md": "# Bar {#bar}"},
raw_redirects={
'foo': ['foo.html#foo', 'foo-prime.html'],
'bar': ['bar.html#bar', 'bar-prime.html'],
},
)
self.run_test(md)
server_redirects = md._redirects.get_server_redirects()
expected_redirects = {'foo-prime.html': 'foo.html', 'bar-prime.html': 'bar.html'}
self.assertEqual(server_redirects, expected_redirects)
def test_client_redirects_to_ghost_paths(self):
"""Test implicit inference of client-side redirects to ghost paths"""
md = self.setup_test(
sources={"foo.md": "# Foo {#foo}", "bar.md": "# Bar {#bar}"},
raw_redirects={
'foo': ['foo.html#foo', 'foo-prime.html'],
'bar': ['bar.html#bar', 'foo-prime.html#old'],
},
)
self.run_test(md)
client_redirects = md._redirects.get_client_redirects("foo.html")
expected_redirects = {'old': 'bar.html#bar'}
self.assertEqual(client_redirects, expected_redirects)

View File

@@ -2,16 +2,16 @@
rustPlatform.buildRustPackage rec {
pname = "nixpacks";
version = "1.29.0";
version = "1.29.1";
src = fetchFromGitHub {
owner = "railwayapp";
repo = pname;
rev = "v${version}";
sha256 = "sha256-th5nNOU4GBw82Bq+Ybv/JtFY5d/aimgm0vkBgnMScdQ=";
sha256 = "sha256-n4qPr3YL2DnnnUX/HqZ/2h7I4N8Du/dZ5Q2/N31q4R4=";
};
cargoHash = "sha256-6x6NSy9f74Snlqsk0zPiTPXoML3zzcQUEyNLV8P+ggk=";
cargoHash = "sha256-Qo+yapjCrtov71dYRrKuWFsrUtlbOHsvsoMPzCBTIxI=";
# skip test due FHS dependency
doCheck = false;

View File

@@ -6,13 +6,13 @@
stdenvNoCC.mkDerivation rec {
pname = "nu_scripts";
version = "0-unstable-2024-10-03";
version = "0-unstable-2024-11-10";
src = fetchFromGitHub {
owner = "nushell";
repo = pname;
rev = "743ccc08ee9b46703b1afaf4d77b59bf723a6d41";
hash = "sha256-4vGUZtDkywHIc1sgu5jU+95rQfl9B2eoGWzfH7xSMac=";
rev = "1ed7ef9401f3793fb946ef3add82f05f091299ff";
hash = "sha256-ee06x4Txa58vHEheyYoLx/KOX3Y6Np3HDgK/BZI5Dfw=";
};
installPhase = ''

View File

@@ -11,13 +11,13 @@
}:
let
version = "0.17.0";
version = "0.17.1";
src = fetchFromGitHub {
owner = "SmilyOrg";
repo = "photofield";
rev = "refs/tags/v${version}";
hash = "sha256-GYU0BR5X3s3SGmZEFMyK7m+zUa2i2E9krAbtk8dwPdg=";
hash = "sha256-leCXj8vETlrU1fwTqLcjcCGvhWWC1ESjpNDWSytAq4s=";
};
webui = buildNpmPackage {

View File

@@ -86,6 +86,6 @@ stdenv.mkDerivation (finalAttrs: {
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ AndersonTorres kira-bruneau ];
platforms = lib.platforms.unix;
broken = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64;
hydraPlatforms = lib.platforms.linux; # build hangs on Darwin platforms, needs investigation
};
})

View File

@@ -7,20 +7,20 @@
buildNpmPackage rec {
pname = "protoc-gen-connect-es";
version = "1.5.0";
version = "1.6.1";
src = fetchFromGitHub {
owner = "connectrpc";
repo = "connect-es";
rev = "refs/tags/v${version}";
hash = "sha256-pur1OJuud2ZwPAfd6pSuTAx2vtW6kQM9rntDmtvVj3c=";
hash = "sha256-cB1OTolnwHOqeXrj8wL5FbFnjok6s03z1jC58ABTW3o=";
postFetch = ''
${lib.getExe npm-lockfile-fix} $out/package-lock.json
'';
};
npmDepsHash = "sha256-wObMmeFCP/zZ6P5cCVkFnn5X0h9/4ePsSj9uBd6C1/Y=";
npmDepsHash = "sha256-VkvWHKERJwG7MVZ5Pb7ufRCBBWkcoMCoabtMETcPvrU=";
npmWorkspace = "packages/protoc-gen-connect-es";

View File

@@ -8,13 +8,13 @@ let
x86_64-darwin = "x64";
}."${stdenv.hostPlatform.system}" or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
hash = {
x64-linux_hash = "sha256-oEdO9V9QLPXkZh+QUyVjlMY21iFT1p8i2DoPWpR3Qlg=";
arm64-linux_hash = "sha256-SjLCyo2Oc8SMll1crTyH/TPf7jx5Lul6zmbVy7m3LcM=";
x64-osx_hash = "sha256-vMpLDGoBLDk11EafFhEg/k1/9xiv873WWuUv1UrNxIo=";
x64-linux_hash = "sha256-VI0mdNGPyT45GUrp3hpBQVe1xx/BBbMWz7iJQvvrg9E=";
arm64-linux_hash = "sha256-4ahiRo13qOEUSzrwXFVRj26U0l5GblXfw7sjY8sCLxQ=";
x64-osx_hash = "sha256-1HtarF+eAU2d3dQiw3n/DCIFCbgN4GEUFMlYxy8uglA=";
}."${arch}-${os}_hash";
in stdenv.mkDerivation rec {
pname = "readarr";
version = "0.4.1.2648";
version = "0.4.3.2665";
src = fetchurl {
url = "https://github.com/Readarr/Readarr/releases/download/v${version}/Readarr.develop.${version}.${os}-core-${arch}.tar.gz";

View File

@@ -4,11 +4,11 @@ let
in
stdenv.mkDerivation rec {
pname = "rocketchat-desktop";
version = "4.1.1";
version = "4.1.2";
src = fetchurl {
url = "https://github.com/RocketChat/Rocket.Chat.Electron/releases/download/${version}/rocketchat-${version}-linux-amd64.deb";
hash = "sha256-6NvQtc+IUWqixFwWUHvl+SkSl0pk3SK4VmQXoZYyqqg=";
hash = "sha256-lcMxBEcZkJARFd+ZQTAdLQLVy4/SIi4ps8N798PomyM=";
};
nativeBuildInputs = [

View File

@@ -9,14 +9,14 @@
python3.pkgs.buildPythonApplication rec {
pname = "s3ql";
version = "5.2.2";
version = "5.2.3";
pyproject = true;
src = fetchFromGitHub {
owner = "s3ql";
repo = "s3ql";
rev = "refs/tags/s3ql-${version}";
hash = "sha256-D+fUl9UpJ7vxoVzB6MlrgnyAqEYbUkc+0w6iepYuZnk=";
hash = "sha256-hNqKLpJd0vj96Jx4YnqYsPLq/iTbvmtvjyLrYozaxpk=";
};
build-system = with python3.pkgs; [ setuptools ];

View File

@@ -18,19 +18,31 @@
, libconfig
, libpulseaudio
, libjack2
, libsndfile
, libao
, libsoundio
, mosquitto
, pipewire
, soxr
, alac
, sndio
, enableAirplay2 ? false
, enableStdout ? true
, enableAlsa ? true
, enableSndio ? true
, enablePulse ? true
, enablePipe ? true
, enablePipewire ? true
, enableAo ? true
, enableJack ? true
, enableMetadata ? false
, enableSoundio ? true
, enableMetadata ? true
, enableMpris ? stdenv.hostPlatform.isLinux
, enableMqttClient ? true
, enableDbus ? stdenv.hostPlatform.isLinux
, enableSoxr ? true
, enableAlac ? true
, enableConvolution ? true
, enableLibdaemon ? false
}:
@@ -70,10 +82,16 @@ stdenv.mkDerivation rec {
]
++ optional enableLibdaemon libdaemon
++ optional enableAlsa alsa-lib
++ optional enableSndio sndio
++ optional enableMqttClient mosquitto
++ optional enablePulse libpulseaudio
++ optional enablePipewire pipewire
++ optional enableAo libao
++ optional enableJack libjack2
++ optional enableSoundio libsoundio
++ optional enableSoxr soxr
++ optional enableAlac alac
++ optional enableConvolution libsndfile
++ optionals enableAirplay2 [
libplist
libsodium
@@ -100,13 +118,19 @@ stdenv.mkDerivation rec {
++ optional enablePulse "--with-pa"
++ optional enablePipewire "--with-pw"
++ optional enableAlsa "--with-alsa"
++ optional enableSndio "--with-sndio"
++ optional enableAo "--with-ao"
++ optional enableJack "--with-jack"
++ optional enableSoundio "--with-soundio"
++ optional enableStdout "--with-stdout"
++ optional enablePipe "--with-pipe"
++ optional enableSoxr "--with-soxr"
++ optional enableAlac "--with-apple-alac"
++ optional enableConvolution "--with-convolution"
++ optional enableDbus "--with-dbus-interface"
++ optional enableMetadata "--with-metadata"
++ optional enableMpris "--with-mpris-interface"
++ optional enableMqttClient "--with-mqtt-client"
++ optional enableLibdaemon "--with-libdaemon"
++ optional enableAirplay2 "--with-airplay-2";

View File

@@ -22,13 +22,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "shaka-packager";
version = "3.3.0";
version = "3.4.0";
src = fetchFromGitHub {
owner = "shaka-project";
repo = "shaka-packager";
rev = "refs/tags/v${finalAttrs.version}";
hash = "sha256-5TDfIbguBipYciXusn0rDS0ZQl0+fDFfHYbrnYjxSdE=";
hash = "sha256-4ZxBE1jpFR93OigAd7xOpUHXSZ5o9keNBJXuS2pNjpo=";
};
patches = [

View File

@@ -2,13 +2,13 @@
stdenvNoCC.mkDerivation rec {
pname = "sn-pro";
version = "1.2.0";
version = "1.3.0";
src = fetchFromGitHub {
owner = "supernotes";
repo = "sn-pro";
rev = version;
hash = "sha256-7GrCEYgP6kfdlAWjNddmkwJrB/s1mFmugMGPPOM34JA=";
hash = "sha256-J2rIBerbkHsuAKi8lRO3D7strL+n2IZlayijz7s6l+k=";
};
installPhase = ''

View File

@@ -2,13 +2,13 @@
buildGoModule rec {
pname = "timescaledb-tune";
version = "0.17.0";
version = "0.18.0";
src = fetchFromGitHub {
owner = "timescale";
repo = pname;
rev = "v${version}";
sha256 = "sha256-HCl0v9hS9/UgzLniFQ7QFb5pdOAnnoomT3Zv3BLf/Ac=";
sha256 = "sha256-SW+JCH+oxAHAmgPO7XmSVFFug7NOvslblMViG+oooAo=";
};
vendorHash = "sha256-7u3eceVDnzjhGguijJXbm40qyCPO/Q101Zr5vEcGEqs=";

View File

@@ -19,8 +19,8 @@ buildGoModule rec {
ldflags = [
"-s"
"-w"
"-X git.numtide.com/numtide/treefmt/build.Name=treefmt"
"-X git.numtide.com/numtide/treefmt/build.Version=v${version}"
"-X github.com/numtide/treefmt/build.Name=treefmt"
"-X github.com/numtide/treefmt/build.Version=v${version}"
];
meta = {

View File

@@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "uncrustify";
version = "0.79.0";
version = "0.80.0";
src = fetchFromGitHub {
owner = "uncrustify";
repo = "uncrustify";
rev = "uncrustify-${version}";
sha256 = "sha256-M9LfLWpkMoCNrvnmMhFhfJhyOwbnitjpm7LKay1M0dI=";
sha256 = "sha256-1W4g9ISMVwmc0efa6loFtyqsHNm0kwR+NVKE8eB/jEA=";
};
nativeBuildInputs = [ cmake python3 ];

View File

@@ -44,5 +44,6 @@ stdenv.mkDerivation (finalAttrs: {
mainProgram = "vp";
maintainers = with lib.maintainers; [ AndersonTorres ];
inherit (SDL.meta) platforms;
hydraPlatforms = lib.platforms.linux; # build hangs on both Darwin platforms, needs investigation
};
})

View File

@@ -1,14 +1,14 @@
{
"darwin": {
"hash": "sha256-AtKLtEhibD5sHNcjmScxykLd2si5dwGDTFd0NldbHFQ=",
"version": "0.2024.10.29.08.02.stable_02"
"hash": "sha256-7lxfxKiZ8VxXLGY7ma+ctJzGhKZZgUvtidJDoSjCEVA=",
"version": "0.2024.11.12.08.02.stable_02"
},
"linux_x86_64": {
"hash": "sha256-jKk80+9XKLzM68a9YQFIddxzRLzVc8vmPmnS3ZJ+9s8=",
"version": "0.2024.10.29.08.02.stable_02"
"hash": "sha256-41icbHntPT52Tc8iW7Tgjr4Su2DkI0SI45d2mQF+9hg=",
"version": "0.2024.11.12.08.02.stable_02"
},
"linux_aarch64": {
"hash": "sha256-k1OkiK3reedJQINK8vZYP7G2Mm9KnWV+RuvHZZJYHqI=",
"version": "0.2024.10.29.08.02.stable_02"
"hash": "sha256-r4PYBhJXgB7tTxMP/W/ZuxdsrvVs1BOMpBQIJwZv8uI=",
"version": "0.2024.11.12.08.02.stable_02"
}
}

View File

@@ -4,7 +4,6 @@
fetchurl,
makeDesktopItem,
copyDesktopItems,
unzip,
autoPatchelfHook,
atk,
at-spi2-atk,
@@ -29,32 +28,34 @@
wrapGAppsHook3,
udev,
libGL,
fetchzip,
}:
let
pname = "waveterm";
version = "0.9.1";
version = "0.9.2";
src =
let
inherit (stdenv.hostPlatform) system;
selectSystem = attrs: attrs.${system} or (throw "Unsupported system: ${system}");
selectSystem = attrs: attrs.${system};
suffix = selectSystem {
x86_64-linux = "waveterm-linux-x64-${version}.zip";
aarch64-linux = "waveterm-linux-arm64-${version}.zip";
x86_64-darwin = "Wave-darwin-universal-${version}.zip ";
aarch64-darwin = "Wave-darwin-arm64-${version}.zip";
x86_64-linux = "waveterm-linux-x64";
aarch64-linux = "waveterm-linux-arm64";
x86_64-darwin = "Wave-darwin-x64";
aarch64-darwin = "Wave-darwin-arm64";
};
hash = selectSystem {
x86_64-linux = "sha256-DtpS9jRQljAhPA9Qcpd5acIeCyb5E/Nkyg3LXa4wrk0=";
aarch64-linux = "sha256-xM+34vsp+LFCYAFIrb0mKQRy/vPqn7FFvPlzV4JWPCg=";
x86_64-darwin = "sha256-fadf/qOec1liqpBOH+lTEGnTYJlvL8QJ3kHNcuI1wew=";
aarch64-darwin = "sha256-kKDDeIyO4CSxLWYpJyfz0Egl2S1ADRk4N/XXpsCBXVo=";
x86_64-linux = "sha256-s6s/SfLNVwRN50OgqWTohHT8/rFuu4P3hpxfhA7kPOU=";
aarch64-linux = "sha256-dxQbTPvge3QY40rWKAOV/uuTPzHsfNk9USxICoF1CQM=";
x86_64-darwin = "sha256-/nedzsQxqLclK5uwOKZ/WgRwjoHDCxLuI+/T1B3cyJM=";
aarch64-darwin = "sha256-lBJEJHgBozrR+JF5jlbmuG2c0P19qmjJUhwlJtHqkRE=";
};
in
fetchurl {
url = "https://github.com/wavetermdev/waveterm/releases/download/v${version}/${suffix}";
fetchzip {
url = "https://github.com/wavetermdev/waveterm/releases/download/v${version}/${suffix}-${version}.zip";
inherit hash;
stripRoot = false;
};
passthru.updateScript = ./update.sh;
@@ -84,12 +85,6 @@ let
})
];
unpackPhase = ''
runHook preUnpack
unzip ${src} -d ./
runHook postUnpack
'';
meta = {
description = "Open-source, cross-platform terminal for seamless workflows";
homepage = "https://www.waveterm.dev";
@@ -111,13 +106,11 @@ let
version
src
desktopItems
unpackPhase
meta
passthru
;
nativeBuildInputs = [
unzip
copyDesktopItems
autoPatchelfHook
wrapGAppsHook3
@@ -152,8 +145,10 @@ let
installPhase = ''
runHook preInstall
mkdir -p $out/waveterm $out/bin
cp -r ./* $out/waveterm/
runHook postInstall
'';
@@ -172,21 +167,18 @@ let
pname
version
src
unpackPhase
meta
passthru
;
nativeBuildInputs = [
unzip
];
sourceRoot = "Wave.app";
installPhase = ''
runHook preInstall
mkdir -p $out/Applications/Wave.app
cp -R . $out/Applications/Wave.app
runHook postInstall
'';
};

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p bash nixVersions.latest curl coreutils jq common-updater-scripts
latestTag=$(curl https://api.github.com/repos/wavetermdev/waveterm/releases/latest | jq -r ".tag_name")
latestTag=$(curl -s ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} https://api.github.com/repos/wavetermdev/waveterm/releases/latest | jq -r ".tag_name")
latestVersion="$(expr "$latestTag" : 'v\(.*\)')"
currentVersion=$(nix-instantiate --eval -E "with import ./. {}; waveterm.version" | tr -d '"')
@@ -15,10 +15,10 @@ fi
for i in \
"x86_64-linux waveterm-linux-x64" \
"aarch64-linux waveterm-linux-arm64" \
"x86_64-darwin Wave-darwin-universal" \
"x86_64-darwin Wave-darwin-x64" \
"aarch64-darwin Wave-darwin-arm64"; do
set -- $i
prefetch=$(nix-prefetch-url "https://github.com/wavetermdev/waveterm/releases/download/v$latestVersion/$2-$latestVersion.zip")
prefetch=$(nix-prefetch-url --unpack "https://github.com/wavetermdev/waveterm/releases/download/v$latestVersion/$2-$latestVersion.zip")
hash=$(nix hash convert --hash-algo sha256 --to sri $prefetch)
update-source-version waveterm $latestVersion $hash --system=$1 --ignore-same-version
done

View File

@@ -5,14 +5,14 @@
python3Packages.buildPythonApplication rec {
pname = "whatsapp-chat-exporter";
version = "0.10.0";
version = "0.10.5";
format = "setuptools";
src = fetchFromGitHub {
owner = "KnugiHK";
repo = "Whatsapp-Chat-Exporter";
rev = "refs/tags/${version}";
hash = "sha256-W66qEQa7jlgd8v6dsIVAz6gmWsYr3SMqyhF2KIwC6hI=";
hash = "sha256-TPXQaWnUy+blTS+Tz84K6cxJu4+dLbT2Dl9SKqlhDHY=";
};
propagatedBuildInputs = with python3Packages; [

View File

@@ -108,7 +108,6 @@ let
bhougland
DerGuteMoritz
jlesquembre
thiagokokada
];
};
};

View File

@@ -98,7 +98,7 @@ stdenv.mkDerivation (finalAttrs: {
offers a software transactional memory system and reactive Agent
system that ensure clean, correct, multithreaded designs.
'';
maintainers = with maintainers; [ jlesquembre thiagokokada ];
maintainers = with maintainers; [ jlesquembre ];
platforms = platforms.unix;
};
})

View File

@@ -63,5 +63,6 @@ stdenv.mkDerivation rec {
license = lib.licenses.gpl2Plus;
homepage = "http://www.antigrain.com/";
platforms = lib.platforms.unix;
hydraPlatforms = lib.platforms.linux; # build hangs on both Darwin platforms, needs investigation
};
}

View File

@@ -1,6 +1,6 @@
{ lib, fetchurl, buildDunePackage
, alcotest
, asn1-combinators, domain-name, fmt, gmap, pbkdf, mirage-crypto, mirage-crypto-ec, mirage-crypto-pk, ipaddr
, asn1-combinators, domain-name, fmt, gmap, kdf, mirage-crypto, mirage-crypto-ec, mirage-crypto-pk, ipaddr
, logs, base64, ohex
}:
@@ -8,15 +8,15 @@ buildDunePackage rec {
minimalOCamlVersion = "4.08";
pname = "x509";
version = "1.0.2";
version = "1.0.4";
src = fetchurl {
url = "https://github.com/mirleft/ocaml-x509/releases/download/v${version}/x509-${version}.tbz";
hash = "sha256-LrUYbLLJTNCWvEZtRXUv5LHdEya2oNTtAbrfm7EE2Bg=";
hash = "sha256-PgnTmD5TEZ1Aywv6mwfVldt9DFyd8G9fKsgqYlj15wI=";
};
checkInputs = [ alcotest ];
propagatedBuildInputs = [ asn1-combinators domain-name fmt gmap mirage-crypto mirage-crypto-pk mirage-crypto-ec pbkdf logs base64 ipaddr ohex ];
propagatedBuildInputs = [ asn1-combinators domain-name fmt gmap mirage-crypto mirage-crypto-pk mirage-crypto-ec kdf logs base64 ipaddr ohex ];
doCheck = true;

View File

@@ -18,7 +18,7 @@
buildPythonPackage rec {
pname = "bundlewrap";
version = "4.20.0";
version = "4.21.0";
pyproject = true;
disabled = pythonOlder "3.8";
@@ -27,7 +27,7 @@ buildPythonPackage rec {
owner = "bundlewrap";
repo = "bundlewrap";
rev = "refs/tags/${version}";
hash = "sha256-GoMOEPZb7efFoZn7D2y1XO4XtP9z+1EmakLvSxcCT8I=";
hash = "sha256-e9gpWLOiTUZYIybLIfcR5x/NzhJSBFsU0I8LzY9sI5k=";
};
build-system = [ setuptools ];

View File

@@ -66,7 +66,6 @@ buildPythonPackage rec {
maintainers = with maintainers; [
mazurel
nixy
thiagokokada
];
};
}

View File

@@ -35,6 +35,6 @@ buildPythonPackage rec {
homepage = "https://github.com/hylang/hyrule";
changelog = "https://github.com/hylang/hylure/releases/tag/${version}";
license = licenses.mit;
maintainers = with maintainers; [ thiagokokada ];
maintainers = with maintainers; [ ];
};
}

View File

@@ -9,12 +9,12 @@
buildPythonPackage rec {
pname = "ipyvue";
version = "1.11.1";
version = "1.11.2";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-AwgE/5GgRK0/oHrjTjlSo9IxmDdnhDSqqZrkiLp0mls=";
hash = "sha256-OxOBvRIBhPlwpdZt6sM7hZKmZsjhq3pa/TPs/zQuCpU=";
};
build-system = [ setuptools ];

View File

@@ -9,23 +9,36 @@
pyyaml,
six,
stevedore,
pytestCheckHook,
setuptools,
fetchpatch,
testtools,
pytest-mock,
}:
buildPythonPackage rec {
pname = "jenkins-job-builder";
version = "6.4.1";
format = "setuptools";
build-system = [ setuptools ];
src = fetchPypi {
inherit pname version;
hash = "sha256-Re7rNAcm0cpSx1tmSzTjfDlW7y236lzFKFjVw0uUTmw=";
};
patches = [
(fetchpatch {
url = "https://opendev.org/jjb/jenkins-job-builder/commit/7bf0dacd80d6da7b8562db05f9187140e42947c8.patch";
hash = "sha256-2z7axGgVV5Z7A11JiQhlrjjXDKYe+X6NrJEuXd986Do=";
})
];
postPatch = ''
export HOME=$(mktemp -d)
'';
propagatedBuildInputs = [
dependencies = [
pbr
python-jenkins
pyyaml
@@ -35,14 +48,17 @@ buildPythonPackage rec {
jinja2
];
# Need to fix test deps, relies on stestr and a few other packages that aren't available on nixpkgs
checkPhase = "$out/bin/jenkins-jobs --help";
nativeCheckInputs = [
pytestCheckHook
testtools
pytest-mock
];
meta = with lib; {
meta = {
description = "Jenkins Job Builder is a system for configuring Jenkins jobs using simple YAML files stored in Git";
mainProgram = "jenkins-jobs";
homepage = "https://jenkins-job-builder.readthedocs.io/en/latest/";
license = licenses.asl20;
maintainers = [ ];
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ bot-wxt1221 ];
};
}

View File

@@ -57,8 +57,8 @@ buildPythonPackage rec {
hash = "sha256-f5TudaLlHtIMAvS7s5mWgqpdi7/vWNF0EdlYNuG67hM=";
};
pythonRelaxDeps = [
"passlib"
"protobuf"
"urwid"
];

View File

@@ -39,7 +39,7 @@ in
buildPythonPackage rec {
pname = "scalene";
version = "1.5.46";
version = "1.5.47";
pyproject = true;
disabled = pythonOlder "3.9";
@@ -47,7 +47,7 @@ buildPythonPackage rec {
owner = "plasma-umass";
repo = "scalene";
rev = "v${version}";
hash = "sha256-G+fX0D70aGOmXr/SqaBKkOz3CEHpGqClFFdTeOzRpaw=";
hash = "sha256-NrXXwzp+NYdie7p5xsJa7lMGgKED3FCzeAjO7x+USHU=";
};
patches = [

View File

@@ -19,7 +19,7 @@
buildPythonPackage rec {
pname = "sumo";
version = "2.3.8";
version = "2.3.9";
format = "setuptools";
disabled = pythonOlder "3.8";
@@ -28,7 +28,7 @@ buildPythonPackage rec {
owner = "SMTG-UCL";
repo = "sumo";
rev = "refs/tags/v${version}";
hash = "sha256-nQ5US7maFcOJCqFYeokGiBFp3jhiOPSfCBeclLdHdkk=";
hash = "sha256-e+nkTRopI0QeGq52e3Eqx2RJg82A7mvIaIuZ+yN18+o=";
};
nativeBuildInputs = [ cython ];

View File

@@ -24,24 +24,29 @@ buildPythonPackage rec {
hash = "sha256-xGLvc154xnje45Akf7H1qqQRUc03gGVt8AhGlkcP3kY=";
};
nativeBuildInputs = [ poetry-core ];
build-system = [ poetry-core ];
propagatedBuildInputs = [
dependencies = [
dbus-python
flask
flask-cors
requests
];
pythonRelaxDeps = [
"flask-cors"
"flask"
];
# Tests want to use Dbus
doCheck = false;
pythonImportsCheck = [ "SwSpotify" ];
meta = with lib; {
meta = {
description = "Library to get the currently playing song and artist from Spotify";
homepage = "https://github.com/SwagLyrics/SwSpotify";
license = licenses.mit;
maintainers = with maintainers; [ siraben ];
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ siraben ];
};
}

View File

@@ -11,13 +11,13 @@
}:
rustPlatform.buildRustPackage rec {
pname = "sentry-cli";
version = "2.36.6";
version = "2.38.2";
src = fetchFromGitHub {
owner = "getsentry";
repo = "sentry-cli";
rev = version;
sha256 = "sha256-l2Qj38wtlz0fSLvUdML36BRCCIk+Qnuv/cxPi33f+Zc=";
sha256 = "sha256-MTMiGwB64qv4VT2Eu1orI4buW8j1LM/iFTgyzRcIQ9s=";
};
doCheck = false;
@@ -27,7 +27,7 @@ rustPlatform.buildRustPackage rec {
buildInputs = [ openssl ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ CoreServices Security SystemConfiguration ];
nativeBuildInputs = [ installShellFiles pkg-config ];
cargoHash = "sha256-gyNP6qYg/uKOmhq3elYw8jPknjfAzoGyhGegSq1wDoo=";
cargoHash = "sha256-A+ocllftxuw3gYmf/UtcZngqwAVxjX/IRtcbGJFTPns=";
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
installShellCompletion --cmd sentry-cli \

View File

@@ -2,13 +2,13 @@
stdenvNoCC.mkDerivation rec {
pname = "icingaweb2";
version = "2.12.1";
version = "2.12.2";
src = fetchFromGitHub {
owner = "Icinga";
repo = "icingaweb2";
rev = "v${version}";
hash = "sha256-j101HsFvJZrzpK395TF4seztYfCCQKnqrpEpGj5xrtQ=";
hash = "sha256-RwKVANFlFWKgMBwlLmX0P4PR+eTN3uz//kMdJ8dLZuU=";
};
nativeBuildInputs = [ makeWrapper ];

View File

@@ -2,13 +2,13 @@
buildGoModule rec {
pname = "gitlab-ci-pipelines-exporter";
version = "0.5.8";
version = "0.5.9";
src = fetchFromGitHub {
owner = "mvisonneau";
repo = pname;
rev = "v${version}";
sha256 = "sha256-plrQPPclDaJiFHc1HNCk+bYiLO0fJX/HC/vTTO5eoy8=";
sha256 = "sha256-KbEmRMqv2IjJ/7sQHDfXtr92xNXmUCaD7fnJdq1FEtk=";
};
subPackages = [ "cmd/${pname}" ];
@@ -17,7 +17,7 @@ buildGoModule rec {
"-X main.version=v${version}"
];
vendorHash = "sha256-6l8jNQu+vI2SLPvKxl1o0XkqYbFyehqkrT75hEjIH/c=";
vendorHash = "sha256-DaNLahrmRTkI0QxEDLJH0juDbHXs2Y/t5JNx9ulcK84=";
doCheck = true;
meta = with lib; {

View File

@@ -472,7 +472,7 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "benchmarks"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"anyhow",
"bytes",
@@ -653,7 +653,7 @@ dependencies = [
[[package]]
name = "build-info"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"anyhow",
"time",
@@ -1623,7 +1623,7 @@ dependencies = [
[[package]]
name = "dump"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"anyhow",
"big_s",
@@ -1835,7 +1835,7 @@ checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
[[package]]
name = "file-store"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"tempfile",
"thiserror",
@@ -1857,7 +1857,7 @@ dependencies = [
[[package]]
name = "filter-parser"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"insta",
"nom",
@@ -1877,7 +1877,7 @@ dependencies = [
[[package]]
name = "flatten-serde-json"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"criterion",
"serde_json",
@@ -2001,7 +2001,7 @@ dependencies = [
[[package]]
name = "fuzzers"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"arbitrary",
"clap",
@@ -2553,7 +2553,7 @@ checksum = "206ca75c9c03ba3d4ace2460e57b189f39f43de612c2f85836e65c929701bb2d"
[[package]]
name = "index-scheduler"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"anyhow",
"arroy",
@@ -2747,7 +2747,7 @@ dependencies = [
[[package]]
name = "json-depth-checker"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"criterion",
"serde_json",
@@ -3366,7 +3366,7 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
[[package]]
name = "meili-snap"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"insta",
"md5",
@@ -3375,7 +3375,7 @@ dependencies = [
[[package]]
name = "meilisearch"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"actix-cors",
"actix-http",
@@ -3465,7 +3465,7 @@ dependencies = [
[[package]]
name = "meilisearch-auth"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"base64 0.22.1",
"enum-iterator",
@@ -3484,7 +3484,7 @@ dependencies = [
[[package]]
name = "meilisearch-types"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"actix-web",
"anyhow",
@@ -3514,7 +3514,7 @@ dependencies = [
[[package]]
name = "meilitool"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"anyhow",
"clap",
@@ -3545,7 +3545,7 @@ dependencies = [
[[package]]
name = "milli"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"arroy",
"big_s",
@@ -3991,7 +3991,7 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "permissive-json-pointer"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"big_s",
"serde_json",
@@ -6380,7 +6380,7 @@ dependencies = [
[[package]]
name = "xtask"
version = "1.11.1"
version = "1.11.3"
dependencies = [
"anyhow",
"build-info",

View File

@@ -10,7 +10,7 @@
}:
let
version = "1.11.1";
version = "1.11.3";
in
rustPlatform.buildRustPackage {
pname = "meilisearch";
@@ -20,7 +20,7 @@ rustPlatform.buildRustPackage {
owner = "meilisearch";
repo = "meiliSearch";
rev = "refs/tags/v${version}";
hash = "sha256-SxmN6CDgS4QrCdJPF36RyljvKXXhCuYzaJnpqROSY5U=";
hash = "sha256-CVofke9tOGeDEhRHEt6EYwT52eeAYNqlEd9zPpmXQ2U=";
};
cargoBuildFlags = [ "--package=meilisearch" ];

View File

@@ -12,13 +12,13 @@
buildPythonApplication rec {
pname = "awsume";
version = "4.5.3";
version = "4.5.5";
src = fetchFromGitHub {
owner = "trek10inc";
repo = "awsume";
rev = version;
sha256 = "sha256-An7omHk2Yxjc6db6Y8QSrtgUvSF5rlVhgxMTpNOePHo=";
sha256 = "sha256-lm9YANYckyHDoNbB1wytBm55iyBmUuxFPmZupfpReqc=";
};
AWSUME_SKIP_ALIAS_SETUP = 1;
@@ -35,7 +35,7 @@ buildPythonApplication rec {
postPatch = ''
patchShebangs shell_scripts
substituteInPlace shell_scripts/{awsume,awsume.fish} --replace "awsumepy" "$out/bin/awsumepy"
substituteInPlace shell_scripts/{awsume,awsume.fish} --replace-fail "awsumepy" "$out/bin/awsumepy"
'';
postInstall = ''
@@ -54,6 +54,7 @@ buildPythonApplication rec {
description = "Utility for easily assuming AWS IAM roles from the command line";
homepage = "https://github.com/trek10inc/awsume";
license = [ licenses.mit ];
mainProgram = "awsume";
maintainers = [ maintainers.nilp0inter ];
};
}

View File

@@ -3,16 +3,16 @@
rustPlatform.buildRustPackage rec {
pname = "websocat";
version = "1.13.0";
version = "1.14.0";
src = fetchFromGitHub {
owner = "vi";
repo = pname;
rev = "v${version}";
sha256 = "sha256-tQvI3wlNDa+S3KK4z0NFGuB/QLXlSsyipvzO0xIrBIo=";
sha256 = "sha256-v5+9cbKe3c12/SrW7mgN6tvQIiAuweqvMIl46Ce9f2A=";
};
cargoHash = "sha256-hkfFhx0y2v122ozeWMm+tu+EHSxzu/bSbCpXKIm57rQ=";
cargoHash = "sha256-2THUFcaM4niB7YiQiRXJQuaQu02fpgZKPWrejfhmRQ0=";
nativeBuildInputs = [ pkg-config makeWrapper ];
buildInputs = [ openssl ]

View File

@@ -0,0 +1,48 @@
{
stdenv,
lib,
fetchurl,
cmake,
qtwebsockets,
qtwebengine,
qtkeychain,
wrapQtAppsHook,
openconnect,
}:
stdenv.mkDerivation rec {
pname = "globalprotect-openconnect";
version = "1.4.9";
src = fetchurl {
url = "https://github.com/yuezk/GlobalProtect-openconnect/releases/download/v${version}/globalprotect-openconnect-${version}.tar.gz";
hash = "sha256-vhvVKESLbqHx3XumxbIWOXIreDkW3yONDMXMHxhjsvk=";
};
nativeBuildInputs = [
cmake
wrapQtAppsHook
];
buildInputs = [
openconnect
qtwebsockets
qtwebengine
qtkeychain
];
patchPhase = ''
substituteInPlace GPService/gpservice.h \
--replace /usr/local/bin/openconnect ${openconnect}/bin/openconnect;
substituteInPlace GPService/CMakeLists.txt \
--replace /etc/gpservice $out/etc/gpservice;
'';
meta = with lib; {
description = "GlobalProtect VPN client (GUI) for Linux based on OpenConnect that supports SAML auth mode";
homepage = "https://github.com/yuezk/GlobalProtect-openconnect";
license = licenses.gpl3Only;
maintainers = [ maintainers.jerith666 ];
platforms = platforms.linux;
};
}

View File

@@ -156,6 +156,7 @@ mapAliases {
bpftool = throw "'bpftool' has been renamed to/replaced by 'bpftools'"; # Converted to throw 2024-10-17
brasero-original = lib.warn "Use 'brasero-unwrapped' instead of 'brasero-original'" brasero-unwrapped; # Added 2024-09-29
bs-platform = throw "'bs-platform' was removed as it was broken, development ended and 'melange' has superseded it"; # Added 2024-07-29
buf-language-server = throw "'buf-language-server' was removed as its development has moved to the 'buf' package"; # Added 2024-11-15
budgie = throw "The `budgie` scope has been removed and all packages moved to the top-level"; # Added 2024-07-14
budgiePlugins = throw "The `budgiePlugins` scope has been removed and all packages moved to the top-level"; # Added 2024-07-14
@@ -439,7 +440,6 @@ mapAliases {
glew-egl = lib.warn "'glew-egl' is now provided by 'glew' directly" glew; # Added 2024-08-11
glfw-wayland = glfw; # Added 2024-04-19
glfw-wayland-minecraft = glfw3-minecraft; # Added 2024-05-08
globalprotect-openconnect = throw "'globalprotect-openconnect' has been renamed to/replaced by 'gpauth' and 'gpclient'"; # Added 2024-09-21
glxinfo = mesa-demos; # Added 2024-07-04
gmailieer = throw "'gmailieer' has been renamed to/replaced by 'lieer'"; # Converted to throw 2024-10-17
gnatboot11 = gnat-bootstrap11;

View File

@@ -5649,6 +5649,8 @@ with pkgs;
inherit (openconnectPackages) openconnect openconnect_openssl;
globalprotect-openconnect = libsForQt5.callPackage ../tools/networking/globalprotect-openconnect { };
sssd = callPackage ../os-specific/linux/sssd {
inherit (perlPackages) Po4a;
# python312Packages.python-ldap is broken
@@ -12300,6 +12302,10 @@ with pkgs;
shairplay = callPackage ../servers/shairplay { avahi = avahi-compat; };
shairport-sync-airplay2 = shairport-sync.override {
enableAirplay2 = true;
};
showoff = callPackage ../servers/http/showoff { };
ruby-zoom = callPackage ../tools/text/ruby-zoom { };