mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-09-28 02:40:50 +00:00
Merge staging-next into staging
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
4190
doc/redirects.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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.
|
||||
|
||||
@@ -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 \
|
||||
|
||||
2177
nixos/doc/manual/redirects.json
Normal file
2177
nixos/doc/manual/redirects.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
62
nixos/modules/services/networking/globalprotect-vpn.nix
Normal file
62
nixos/modules/services/networking/globalprotect-vpn.nix
Normal 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" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -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 \
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -2310,4 +2310,4 @@ DEPENDENCIES
|
||||
yajl-ruby (~> 1.4.3)
|
||||
|
||||
BUNDLED WITH
|
||||
2.5.16
|
||||
2.5.22
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
|
||||
45
pkgs/by-name/al/alac/package.nix
Normal file
45
pkgs/by-name/al/alac/package.nix
Normal 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 ];
|
||||
};
|
||||
})
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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" ];
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
};
|
||||
})
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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=";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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=";
|
||||
|
||||
@@ -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)";
|
||||
|
||||
@@ -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 = [ "./" ];
|
||||
|
||||
@@ -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
|
||||
};
|
||||
})
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
77
pkgs/by-name/ni/nixos-render-docs/README.md
Normal file
77
pkgs/by-name/ni/nixos-render-docs/README.md
Normal 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>"
|
||||
]
|
||||
}
|
||||
```
|
||||
@@ -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:
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
const anchor = document.location.hash.substring(1);
|
||||
const redirects = REDIRECTS_PLACEHOLDER;
|
||||
if (redirects[anchor]) document.location.href = redirects[anchor];
|
||||
@@ -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))
|
||||
@@ -13,3 +13,6 @@ nixos-render-docs = "nixos_render_docs:main"
|
||||
|
||||
[build-system]
|
||||
requires = ["setuptools"]
|
||||
|
||||
[tool.setuptools.package-data]
|
||||
nixos_render_docs = ["redirects.js"]
|
||||
|
||||
@@ -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
|
||||
|
||||
259
pkgs/by-name/ni/nixos-render-docs/src/tests/test_redirects.py
Normal file
259
pkgs/by-name/ni/nixos-render-docs/src/tests/test_redirects.py
Normal 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)
|
||||
@@ -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;
|
||||
|
||||
@@ -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 = ''
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
};
|
||||
})
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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 = ''
|
||||
|
||||
@@ -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=";
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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
|
||||
};
|
||||
})
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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; [
|
||||
|
||||
@@ -108,7 +108,6 @@ let
|
||||
bhougland
|
||||
DerGuteMoritz
|
||||
jlesquembre
|
||||
thiagokokada
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
})
|
||||
|
||||
@@ -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
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -66,7 +66,6 @@ buildPythonPackage rec {
|
||||
maintainers = with maintainers; [
|
||||
mazurel
|
||||
nixy
|
||||
thiagokokada
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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; [ ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -57,8 +57,8 @@ buildPythonPackage rec {
|
||||
hash = "sha256-f5TudaLlHtIMAvS7s5mWgqpdi7/vWNF0EdlYNuG67hM=";
|
||||
};
|
||||
|
||||
|
||||
pythonRelaxDeps = [
|
||||
"passlib"
|
||||
"protobuf"
|
||||
"urwid"
|
||||
];
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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; {
|
||||
|
||||
34
pkgs/servers/search/meilisearch/Cargo.lock
generated
34
pkgs/servers/search/meilisearch/Cargo.lock
generated
@@ -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",
|
||||
|
||||
@@ -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" ];
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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 ]
|
||||
|
||||
48
pkgs/tools/networking/globalprotect-openconnect/default.nix
Normal file
48
pkgs/tools/networking/globalprotect-openconnect/default.nix
Normal 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;
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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 { };
|
||||
|
||||
Reference in New Issue
Block a user