Merge remote-tracking branch 'origin/master' into staging-next

This commit is contained in:
K900 2024-07-02 20:59:57 +03:00
commit c7268baf73
21 changed files with 310 additions and 94 deletions

View File

@ -12351,12 +12351,6 @@
githubId = 33522919;
name = "Marshall Arruda";
};
martfont = {
name = "Martino Fontana";
email = "tinozzo123@tutanota.com";
github = "SuperSamus";
githubId = 40663462;
};
martijnvermaat = {
email = "martijn@vermaat.name";
github = "martijnvermaat";

View File

@ -33,6 +33,8 @@
- `androidenv.androidPkgs_9_0` has been removed, and replaced with `androidenv.androidPkgs` for a more complete Android SDK including support for Android 9 and later.
- `grafana` has been updated to version 11.1. This version doesn't support setting `http_addr` to a hostname anymore, an IP address is expected.
- `wstunnel` has had a major version upgrade that entailed rewriting the program in Rust.
The module was updated to accommodate for breaking changes.
Breaking changes to the module API were minimised as much as possible,

View File

@ -105,7 +105,7 @@ let
};
url = mkOption {
type = types.str;
default = "localhost";
default = "";
description = "Url of the datasource.";
};
editable = mkOption {

View File

@ -5,6 +5,15 @@ let
cfg = config.services.freshrss;
poolName = "freshrss";
extension-env = pkgs.buildEnv {
name = "freshrss-extensions";
paths = cfg.extensions;
};
env-vars = {
DATA_PATH = cfg.dataDir;
THIRDPARTY_EXTENSIONS_PATH = "${extension-env}/share/freshrss/";
};
in
{
meta.maintainers = with maintainers; [ etu stunkymonkey mattchrist ];
@ -14,6 +23,31 @@ in
package = mkPackageOption pkgs "freshrss" { };
extensions = mkOption {
type = types.listOf types.package;
default = [ ];
defaultText = literalExpression "[]";
example = literalExpression ''
with freshrss-extensions; [
youtube
] ++ [
(freshrss-extensions.buildFreshRssExtension {
FreshRssExtUniqueId = "ReadingTime";
pname = "reading-time";
version = "1.5";
src = pkgs.fetchFromGitLab {
domain = "framagit.org";
owner = "Lapineige";
repo = "FreshRSS_Extension-ReadingTime";
rev = "fb6e9e944ef6c5299fa56ffddbe04c41e5a34ebf";
hash = "sha256-C5cRfaphx4Qz2xg2z+v5qRji8WVSIpvzMbethTdSqsk=";
};
})
]
'';
description = "Additional extensions to be used.";
};
defaultUser = mkOption {
type = types.str;
default = "admin";
@ -214,9 +248,7 @@ in
"pm.max_spare_servers" = 5;
"catch_workers_output" = true;
};
phpEnv = {
DATA_PATH = "${cfg.dataDir}";
};
phpEnv = env-vars;
};
};
@ -259,9 +291,7 @@ in
RemainAfterExit = true;
};
restartIfChanged = true;
environment = {
DATA_PATH = cfg.dataDir;
};
environment = env-vars;
script =
let
@ -293,9 +323,7 @@ in
description = "FreshRSS feed updater";
after = [ "freshrss-config.service" ];
startAt = "*:0/5";
environment = {
DATA_PATH = cfg.dataDir;
};
environment = env-vars;
serviceConfig = defaultServiceConfig // {
ExecStart = "${cfg.package}/app/actualize_script.php";
};

View File

@ -337,6 +337,7 @@ in {
freenet = handleTest ./freenet.nix {};
freeswitch = handleTest ./freeswitch.nix {};
freetube = discoverTests (import ./freetube.nix);
freshrss-extensions = handleTest ./freshrss-extensions.nix {};
freshrss-sqlite = handleTest ./freshrss-sqlite.nix {};
freshrss-pgsql = handleTest ./freshrss-pgsql.nix {};
freshrss-http-auth = handleTest ./freshrss-http-auth.nix {};

View File

@ -0,0 +1,19 @@
import ./make-test-python.nix ({ lib, pkgs, ... }: {
name = "freshrss";
nodes.machine = { pkgs, ... }: {
services.freshrss = {
enable = true;
baseUrl = "http://localhost";
authType = "none";
extensions = [ pkgs.freshrss-extensions.youtube ];
};
};
testScript = ''
machine.wait_for_unit("multi-user.target")
machine.wait_for_open_port(80)
response = machine.succeed("curl -vvv -s http://127.0.0.1:80/i/?c=extension")
assert '<span class="ext_name disabled">YouTube Video Feed</span>' in response, "Extension not present in extensions page."
'';
})

View File

@ -10,7 +10,7 @@ let
analytics.reporting_enabled = false;
server = {
http_addr = "localhost";
http_addr = "::1";
domain = "localhost";
};
@ -47,7 +47,7 @@ let
postgresql = {
services.grafana.settings.database = {
host = "127.0.0.1:5432";
host = "[::1]:5432";
user = "grafana";
};
services.postgresql = {
@ -91,9 +91,9 @@ in {
with subtest("Declarative plugins installed"):
declarativePlugins.wait_for_unit("grafana.service")
declarativePlugins.wait_for_open_port(3000)
declarativePlugins.wait_for_open_port(3000, addr="::1")
declarativePlugins.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/plugins | grep grafana-clock-panel"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/plugins | grep grafana-clock-panel"
)
declarativePlugins.shutdown()
@ -101,10 +101,10 @@ in {
sqlite.wait_for_unit("grafana.service")
sqlite.wait_for_open_port(3000)
print(sqlite.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users -i"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/org/users -i"
))
sqlite.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/org/users | grep admin\@localhost"
)
sqlite.shutdown()
@ -112,10 +112,10 @@ in {
socket.wait_for_unit("grafana.service")
socket.wait_for_open_port(80)
print(socket.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1/api/org/users -i"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]/api/org/users -i"
))
socket.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1/api/org/users | grep admin\@localhost"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]/api/org/users | grep admin\@localhost"
)
socket.shutdown()
@ -125,7 +125,7 @@ in {
postgresql.wait_for_open_port(3000)
postgresql.wait_for_open_port(5432)
postgresql.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/org/users | grep admin\@localhost"
)
postgresql.shutdown()
@ -135,7 +135,7 @@ in {
mysql.wait_for_open_port(3000)
mysql.wait_for_open_port(3306)
mysql.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/org/users | grep admin\@localhost"
)
mysql.shutdown()
'';

View File

@ -11,7 +11,7 @@ let
analytics.reporting_enabled = false;
server = {
http_addr = "localhost";
http_addr = "::1";
domain = "localhost";
};
@ -177,41 +177,41 @@ in {
for description, machine in [nodeNix, nodeYaml, nodeYamlDir]:
with subtest(f"Should start provision node: {description}"):
machine.wait_for_unit("grafana.service")
machine.wait_for_open_port(3000)
machine.wait_for_open_port(3000, addr="::1")
with subtest(f"Successful datasource provision with {description}"):
machine.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/datasources/uid/test_datasource | grep Test\ Datasource"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/datasources/uid/test_datasource | grep Test\ Datasource"
)
with subtest(f"Successful dashboard provision with {description}"):
machine.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard"
)
with subtest(f"Successful rule provision with {description}"):
machine.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/alert-rules/test_rule | grep Test\ Rule"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/v1/provisioning/alert-rules/test_rule | grep Test\ Rule"
)
with subtest(f"Successful contact point provision with {description}"):
machine.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point"
)
with subtest(f"Successful policy provision with {description}"):
machine.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/policies | grep Test\ Contact\ Point"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/v1/provisioning/policies | grep Test\ Contact\ Point"
)
with subtest(f"Successful template provision with {description}"):
machine.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/templates | grep Test\ Template"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/v1/provisioning/templates | grep Test\ Template"
)
with subtest("Successful mute timings provision with {description}"):
machine.succeed(
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/mute-timings | grep Test\ Mute\ Timing"
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/v1/provisioning/mute-timings | grep Test\ Mute\ Timing"
)
'';
})

View File

@ -1,16 +0,0 @@
diff --git a/plugins/gpgme-vala/vapi/gpgme_public.vapi b/plugins/gpgme-vala/vapi/gpgme_public.vapi
index bcf12569..b32efd03 100644
--- a/plugins/gpgme-vala/vapi/gpgme_public.vapi
+++ b/plugins/gpgme-vala/vapi/gpgme_public.vapi
@@ -22,9 +22,9 @@ public class Key {
public string issuer_name;
public string chain_id;
public Validity owner_trust;
- [CCode(array_null_terminated = true)]
+ [CCode(array_length = false, array_null_terminated = true)]
public SubKey[] subkeys;
- [CCode(array_null_terminated = true)]
+ [CCode(array_length = false, array_null_terminated = true)]
public UserID[] uids;
public KeylistMode keylist_mode;
// public string fpr; // requires gpgme >= 1.7.0

View File

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "docker-buildx";
version = "0.14.1";
version = "0.15.1";
src = fetchFromGitHub {
owner = "docker";
repo = "buildx";
rev = "v${version}";
hash = "sha256-IseiGF+tQWv7Z2jlCINuWH2Gzcdow2qazvYVFBGyQPU=";
hash = "sha256-JaUCj9HY0MhHLkPTRd72NaGlBdPCPc+y2XjhVQ/3+NA=";
};
doCheck = false;

View File

@ -92,7 +92,7 @@ stdenv.mkDerivation rec {
'';
homepage = "https://thelettervsixtim.es";
license = licenses.unfree;
maintainers = with maintainers; [ martfont ];
maintainers = with maintainers; [ ];
platforms = platforms.unix;
};
}

View File

@ -1,8 +1,8 @@
{
"22": {
"version": "22-ga",
"version": "22.0.1-ga",
"repo": "jdk22u",
"hash": "sha256-itjvIedPwJl/l3a2gIVpNMs1zkbrjioVqbCj1Z1nCJE="
"hash": "sha256-wCHgharBnvRSB3dWW8C3e80AZtxyFgP0SS5X1d4LzMc="
},
"21": {
"version": "21.0.3-ga",

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "openxr-loader";
version = "1.1.37";
version = "1.1.38";
src = fetchFromGitHub {
owner = "KhronosGroup";
repo = "OpenXR-SDK-Source";
rev = "release-${version}";
sha256 = "sha256-J9IfhTFFSY+rK0DqFdXtINo7nlGUcy2Lljq81T417qc=";
sha256 = "sha256-nM/c6fvjprQ5GQO4F13cOigi4xATgRTq+ebEwyv58gg=";
};
nativeBuildInputs = [ cmake python3 pkg-config ];

View File

@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
description = "Library to parse and emit YAML, and do it fast";
homepage = "https://github.com/biojppm/rapidyaml";
license = licenses.mit;
maintainers = with maintainers; [ martfont ];
maintainers = with maintainers; [ ];
platforms = platforms.all;
};
}

View File

@ -12,7 +12,7 @@
buildPythonPackage rec {
pname = "testcontainers";
version = "4.7.0";
version = "4.7.1";
pyproject = true;
disabled = pythonOlder "3.9";
@ -21,7 +21,7 @@ buildPythonPackage rec {
owner = "testcontainers";
repo = "testcontainers-python";
rev = "refs/tags/testcontainers-v${version}";
hash = "sha256-DX2s3Z3QM8qzUr5nM+9erJG/XHkB96h8S4+KYDfcA8A=";
hash = "sha256-li9okYMPW6PM03cFQRfHKzr48eOguNXmmHnSCBgDqYo=";
};
postPatch = ''

View File

@ -3,26 +3,22 @@
, yarn, nodejs, python3, cacert
, jq, moreutils
, nix-update-script, nixosTests, xcbuild
, util-linux
, faketty
}:
let
# We need dev dependencies to run webpack, but patch away
# `cypress` (and @grafana/e2e which has a direct dependency on cypress).
# This attempts to download random blobs from the Internet in
# postInstall. Also, it's just a testing framework, so not worth the hassle.
patchAwayGrafanaE2E = ''
find . -name package.json | while IFS=$'\n' read -r pkg_json; do
<"$pkg_json" jq '. + {
"devDependencies": .devDependencies | del(."@grafana/e2e") | del(.cypress)
}' | sponge "$pkg_json"
done
rm -r packages/grafana-e2e
# Grafana seems to just set it to the latest version available
# nowadays.
patchGoVersion = ''
substituteInPlace go.{mod,work} pkg/build/wire/go.mod \
--replace-fail "go 1.22.4" "go 1.22.3"
substituteInPlace Makefile \
--replace-fail "GO_VERSION = 1.22.4" "GO_VERSION = 1.22.3"
'';
in
buildGoModule rec {
pname = "grafana";
version = "11.0.0";
version = "11.1.0";
subPackages = [ "pkg/cmd/grafana" "pkg/cmd/grafana-server" "pkg/cmd/grafana-cli" ];
@ -30,11 +26,13 @@ buildGoModule rec {
owner = "grafana";
repo = "grafana";
rev = "v${version}";
hash = "sha256-cC1dpgb8IiyPIqlVvn8Qi1l7j6lLtQF+BOOO+DQCp4E=";
hash = "sha256-iTTT10YN8jBT4/ukGXNK1QHcyzXnAqg2LiFtNiwnENw=";
};
# borrowed from: https://github.com/NixOS/nixpkgs/blob/d70d9425f49f9aba3c49e2c389fe6d42bac8c5b0/pkgs/development/tools/analysis/snyk/default.nix#L20-L22
env = lib.optionalAttrs (stdenv.isDarwin && stdenv.isx86_64) {
env = {
CYPRESS_INSTALL_BINARY = 0;
} // lib.optionalAttrs (stdenv.isDarwin && stdenv.isx86_64) {
# Fix error: no member named 'aligned_alloc' in the global namespace.
# Occurs while building @esfx/equatable@npm:1.0.2 on x86_64-darwin
NIX_CFLAGS_COMPILE = "-D_LIBCPP_HAS_NO_LIBRARY_ALIGNED_ALLOCATION=1";
@ -49,7 +47,7 @@ buildGoModule rec {
# @esfx/equatable@npm:1.0.2 fails to build on darwin as it requires `xcbuild`
] ++ lib.optionals stdenv.isDarwin [ xcbuild.xcbuild ];
postPatch = ''
${patchAwayGrafanaE2E}
${patchGoVersion}
'';
buildPhase = ''
runHook preBuild
@ -66,23 +64,24 @@ buildGoModule rec {
dontFixup = true;
outputHashMode = "recursive";
outputHash = rec {
x86_64-linux = "sha256-+Udq8oQSIAHku55VKnrfgHHevzBels0QiOZwnwuts8k=";
x86_64-linux = "sha256-2VnhZBWLdYQhqKCxM63fCAwQXN4Zrh2wCdPBLCCUuvg=";
aarch64-linux = x86_64-linux;
aarch64-darwin = "sha256-m3jtZNz0J2nZwFHXVp3ApgDfnGBOJvFeUpqOPQqv200=";
aarch64-darwin = "sha256-MZE3/PHynL6SHOxJgOG41pi2X8XeutruAOyUFY9Lmsc=";
x86_64-darwin = aarch64-darwin;
}.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
};
disallowedRequisites = [ offlineCache ];
vendorHash = "sha256-kcdW6RQghyAOZUDmIo9G6YBC+YaLHdafvj+fCd+dcDE=";
vendorHash = "sha256-Ny/SoelFVPvBBn50QpHcLTuVY3ynKbCegM1uQkJzB9Y=";
proxyVendor = true;
nativeBuildInputs = [ wire yarn jq moreutils removeReferencesTo python3 ] ++ lib.optionals stdenv.isDarwin [ xcbuild.xcbuild ];
nativeBuildInputs = [ wire yarn jq moreutils removeReferencesTo python3 faketty ]
++ lib.optionals stdenv.isDarwin [ xcbuild.xcbuild ];
postPatch = ''
${patchAwayGrafanaE2E}
${patchGoVersion}
'';
postConfigure = ''
@ -115,7 +114,7 @@ buildGoModule rec {
# After having built all the Go code, run the JS builders now.
# Workaround for https://github.com/nrwl/nx/issues/22445
${util-linux}/bin/script -c 'yarn run build' /dev/null
faketty yarn run build
yarn run plugins:build-bundled
'';
@ -156,8 +155,5 @@ buildGoModule rec {
maintainers = with maintainers; [ offline fpletz willibutz globin ma27 Frostman ];
platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
mainProgram = "grafana-server";
# requires util-linux to work around https://github.com/nrwl/nx/issues/22445
# `script` doesn't seem to be part of util-linux on Darwin though.
broken = stdenv.isDarwin;
};
}

View File

@ -3,6 +3,7 @@
, fetchFromGitHub
, nixosTests
, php
, writeText
}:
stdenvNoCC.mkDerivation rec {
@ -16,26 +17,33 @@ stdenvNoCC.mkDerivation rec {
hash = "sha256-AAOON1RdbG6JSnCc123jmIlIXHOE1PE49BV4hcASO/s=";
};
passthru.tests = {
inherit (nixosTests) freshrss-sqlite freshrss-pgsql freshrss-http-auth freshrss-none-auth;
};
postPatch = ''
patchShebangs cli/*.php app/actualize_script.php
'';
# the thirdparty_extension_path can only be set by config, but should be read by an env-var.
overrideConfig = writeText "constants.local.php" ''
<?php
define('THIRDPARTY_EXTENSIONS_PATH', getenv('THIRDPARTY_EXTENSIONS_PATH') . '/extensions');
'';
buildInputs = [ php ];
# There's nothing to build.
dontBuild = true;
postPatch = ''
patchShebangs cli/*.php app/actualize_script.php
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -vr * $out/
cp $overrideConfig $out/constants.local.php
runHook postInstall
'';
passthru.tests = {
inherit (nixosTests) freshrss-sqlite freshrss-pgsql freshrss-http-auth freshrss-none-auth freshrss-extensions;
};
meta = with lib; {
description = "FreshRSS is a free, self-hostable RSS aggregator";
homepage = "https://www.freshrss.org/";

View File

@ -0,0 +1,138 @@
{ config
, lib
, fetchFromGitHub
, fetchFromGitLab
, callPackage
}:
let
buildFreshRssExtension = (callPackage ./freshrss-utils.nix { }).buildFreshRssExtension;
official_extensions_version = "unstable-2024-04-27";
official_extensions_src = fetchFromGitHub {
owner = "FreshRSS";
repo = "Extensions";
rev = "71de129744ba37fd4cf363b78445f5345bc6d0b7";
hash = "sha256-A+hOjbGNfhwTOAMeo08MUdqfWxxetzLz865oQQDsQlg=";
};
baseExtensions =
_self:
lib.mapAttrs (_n: lib.recurseIntoAttrs) {
auto-ttl = buildFreshRssExtension rec {
FreshRssExtUniqueId = "AutoTTL";
pname = "auto-ttl";
version = "0.5.0";
src = fetchFromGitHub {
owner = "mgnsk";
repo = "FreshRSS-AutoTTL";
rev = "v${version}";
hash = "sha256-OiTiLZ2BjQD1W/BD8EkUt7WB2wOjL6GMGJ+APT4YpwE=";
};
meta = {
description = "FreshRSS extension for automatic feed refresh TTL based on the average frequency of entries.";
homepage = "https://github.com/mgnsk/FreshRSS-AutoTTL";
license = lib.licenses.agpl3Only;
maintainers = [ lib.maintainers.stunkymonkey ];
};
};
demo = buildFreshRssExtension {
FreshRssExtUniqueId = "Demo";
pname = "demo";
version = "unstable-2023-12-22";
src = fetchFromGitHub {
owner = "FreshRSS";
repo = "xExtension-Demo";
rev = "8d60f71a2f0411f5fbbb1f88a57791cee0848f35";
hash = "sha256-5fe8TjefSiGMaeZkurxSJjX8qEEa1ArhJxDztp7ZNZc=";
};
meta = {
description = "FreshRSS Extension for the demo version.";
homepage = "https://github.com/FreshRSS/xExtension-Demo";
license = lib.licenses.agpl3Only;
maintainers = [ lib.maintainers.stunkymonkey ];
};
};
reading-time = buildFreshRssExtension rec {
FreshRssExtUniqueId = "ReadingTime";
pname = "reading-time";
version = "1.5";
src = fetchFromGitLab {
domain = "framagit.org";
owner = "Lapineige";
repo = "FreshRSS_Extension-ReadingTime";
rev = "fb6e9e944ef6c5299fa56ffddbe04c41e5a34ebf";
hash = "sha256-C5cRfaphx4Qz2xg2z+v5qRji8WVSIpvzMbethTdSqsk=";
};
meta = {
description = "FreshRSS extension adding a reading time estimation next to each article.";
homepage = "https://framagit.org/Lapineige/FreshRSS_Extension-ReadingTime";
license = lib.licenses.agpl3Only;
maintainers = [ lib.maintainers.stunkymonkey ];
};
};
reddit-image = buildFreshRssExtension rec {
FreshRssExtUniqueId = "RedditImage";
pname = "reddit-image";
version = "1.2.0";
src = fetchFromGitHub {
owner = "aledeg";
repo = "xExtension-RedditImage";
rev = "v${version}";
hash = "sha256-H/uxt441ygLL0RoUdtTn9Q6Q/Ois8RHlhF8eLpTza4Q=";
};
meta = {
description = "FreshRSS extension to process Reddit feeds.";
homepage = "https://github.com/aledeg/xExtension-RedditImage";
license = lib.licenses.agpl3Only;
maintainers = [ lib.maintainers.stunkymonkey ];
};
};
title-wrap = buildFreshRssExtension {
FreshRssExtUniqueId = "TitleWrap";
pname = "title-wrap";
version = official_extensions_version;
src = official_extensions_src;
sourceRoot = "source/xExtension-TitleWrap";
meta = {
description = "FreshRSS extension instead of truncating the title is wrapped.";
homepage = "https://github.com/FreshRSS/Extensions/tree/master/xExtension-TitleWrap";
license = lib.licenses.agpl3Only;
maintainers = [ lib.maintainers.stunkymonkey ];
};
};
youtube = buildFreshRssExtension {
FreshRssExtUniqueId = "YouTube";
pname = "youtube";
version = official_extensions_version;
src = official_extensions_src;
sourceRoot = "source/xExtension-YouTube";
meta = {
description = "FreshRSS extension allows you to directly watch YouTube/PeerTube videos from within subscribed channel feeds.";
homepage = "https://github.com/FreshRSS/Extensions/tree/master/xExtension-YouTube";
license = lib.licenses.agpl3Only;
maintainers = [ lib.maintainers.stunkymonkey ];
};
};
};
# add possibility to define aliases
aliases = super: {
# example: RedditImage = super.reddit-image;
};
# overlays will be applied left to right, overrides should come after aliases.
overlays = lib.optionals config.allowAliases [
(_self: super: lib.recursiveUpdate super (aliases super))
];
toFix = lib.foldl' (lib.flip lib.extends) baseExtensions overlays;
in
(lib.fix toFix) // {
inherit buildFreshRssExtension;
}

View File

@ -0,0 +1,45 @@
{ stdenv, unzip }:
let
buildFreshRssExtension =
args@{ pname
, version
, src
, FreshRssExtUniqueId
, configurePhase ? ''
runHook preConfigure
runHook postConfigure
''
, buildPhase ? ''
runHook preBuild
runHook postBuild
''
, dontPatchELF ? true
, dontStrip ? true
, passthru ? { }
, sourceRoot ? "source"
, ...
}:
stdenv.mkDerivation ((removeAttrs args [ "FreshRssExtUniqueId" ]) // {
pname = "freshrss-extension-${pname}";
inherit version src configurePhase buildPhase dontPatchELF dontStrip sourceRoot;
installPrefix = "share/freshrss/extensions/xExtension-${FreshRssExtUniqueId}";
installPhase = ''
runHook preInstall
mkdir -p "$out/$installPrefix"
find . -mindepth 1 -maxdepth 1 | xargs -d'\n' mv -t "$out/$installPrefix/"
runHook postInstall
'';
passthru = passthru // {
inherit FreshRssExtUniqueId;
};
});
in
{
inherit buildFreshRssExtension;
}

View File

@ -26,7 +26,7 @@ python3Packages.buildPythonApplication rec {
description = "Command-line utility for vkBasalt";
homepage = "https://gitlab.com/TheEvilSkeleton/vkbasalt-cli";
license = with licenses; [ lgpl3Only gpl3Only ];
maintainers = with maintainers; [ martfont ];
maintainers = with maintainers; [ ];
mainProgram = "vkbasalt";
};
}

View File

@ -25505,6 +25505,7 @@ with pkgs;
freeradius = callPackage ../servers/freeradius { };
freshrss = callPackage ../servers/web-apps/freshrss { };
freshrss-extensions = recurseIntoAttrs (callPackage ../servers/web-apps/freshrss/extensions { });
freeswitch = callPackage ../servers/sip/freeswitch {
inherit (darwin.apple_sdk.frameworks) SystemConfiguration;