Merge master into staging-next
This commit is contained in:
@@ -23,6 +23,8 @@
|
||||
|
||||
- [Fediwall](https://fediwall.social), a web application for live displaying toots from mastodon, inspired by mastowall. Available as [services.fediwall](#opt-services.fediwall.enable).
|
||||
|
||||
- [umami](https://github.com/umami-software/umami), a simple, fast, privacy-focused alternative to Google Analytics. Available with [services.umami](#opt-services.umami.enable).
|
||||
|
||||
- [FileBrowser](https://filebrowser.org/), a web application for managing and sharing files. Available as [services.filebrowser](#opt-services.filebrowser.enable).
|
||||
|
||||
- Options under [networking.getaddrinfo](#opt-networking.getaddrinfo.enable) are now allowed to declaratively configure address selection and sorting behavior of `getaddrinfo` in dual-stack networks.
|
||||
@@ -40,6 +42,8 @@
|
||||
|
||||
- [Chhoto URL](https://github.com/SinTan1729/chhoto-url), a simple, blazingly fast, selfhosted URL shortener with no unnecessary features, written in Rust. Available as [services.chhoto-url](#opt-services.chhoto-url.enable).
|
||||
|
||||
- [go-httpbin](https://github.com/mccutchen/go-httpbin), a reasonably complete and well-tested golang port of httpbin, with zero dependencies outside the go stdlib. Available as [services.go-httpbin](#opt-services.go-httpbin.enable).
|
||||
|
||||
- [tuwunel](https://matrix-construct.github.io/tuwunel/), a federated chat server implementing the Matrix protocol, forked from Conduwuit. Available as [services.matrix-tuwunel](#opt-services.matrix-tuwunel.enable).
|
||||
|
||||
- [Broadcast Box](https://github.com/Glimesh/broadcast-box), a WebRTC broadcast server. Available as [services.broadcast-box](options.html#opt-services.broadcast-box.enable).
|
||||
|
||||
@@ -1575,6 +1575,7 @@
|
||||
./services/web-apps/gerrit.nix
|
||||
./services/web-apps/glance.nix
|
||||
./services/web-apps/glitchtip.nix
|
||||
./services/web-apps/go-httpbin.nix
|
||||
./services/web-apps/goatcounter.nix
|
||||
./services/web-apps/gotify-server.nix
|
||||
./services/web-apps/gotosocial.nix
|
||||
@@ -1689,6 +1690,7 @@
|
||||
./services/web-apps/szurubooru.nix
|
||||
./services/web-apps/trilium.nix
|
||||
./services/web-apps/tt-rss.nix
|
||||
./services/web-apps/umami.nix
|
||||
./services/web-apps/vikunja.nix
|
||||
./services/web-apps/wakapi.nix
|
||||
./services/web-apps/weblate.nix
|
||||
|
||||
@@ -18,12 +18,16 @@ let
|
||||
${lib.optionalString (cfg.use != "") "use=${cfg.use}"}
|
||||
${lib.optionalString (cfg.use == "" && cfg.usev4 != "") "usev4=${cfg.usev4}"}
|
||||
${lib.optionalString (cfg.use == "" && cfg.usev6 != "") "usev6=${cfg.usev6}"}
|
||||
login=${cfg.username}
|
||||
password=${
|
||||
${lib.optionalString (cfg.username != "") "login=${cfg.username}"}
|
||||
${
|
||||
if cfg.protocol == "nsupdate" then
|
||||
"/run/${RuntimeDirectory}/ddclient.key"
|
||||
else if (cfg.passwordFile != null) then
|
||||
"password=@password_placeholder@"
|
||||
else if (cfg.secretsFile != null) then
|
||||
"@secrets_placeholder@"
|
||||
else
|
||||
"@password_placeholder@"
|
||||
""
|
||||
}
|
||||
protocol=${cfg.protocol}
|
||||
${lib.optionalString (cfg.script != "") "script=${cfg.script}"}
|
||||
@@ -49,6 +53,10 @@ let
|
||||
''
|
||||
"${pkgs.replace-secret}/bin/replace-secret" "@password_placeholder@" "${cfg.passwordFile}" "/run/${RuntimeDirectory}/ddclient.conf"
|
||||
''
|
||||
else if (cfg.secretsFile != null) then
|
||||
''
|
||||
"${pkgs.replace-secret}/bin/replace-secret" "@secrets_placeholder@" "${cfg.secretsFile}" "/run/${RuntimeDirectory}/ddclient.conf"
|
||||
''
|
||||
else
|
||||
''
|
||||
sed -i '/^password=@password_placeholder@$/d' /run/${RuntimeDirectory}/ddclient.conf
|
||||
@@ -126,6 +134,16 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
secretsFile = lib.mkOption {
|
||||
default = null;
|
||||
type = nullOr str;
|
||||
description = ''
|
||||
A file containing the secrets for the dynamic DNS provider.
|
||||
This file should contain lines of valid secrets in the format specified by the ddclient documentation.
|
||||
If this option is set, it overrides the `passwordFile` option.
|
||||
'';
|
||||
};
|
||||
|
||||
interval = lib.mkOption {
|
||||
default = "10min";
|
||||
type = str;
|
||||
@@ -244,6 +262,17 @@ in
|
||||
lib.optional (cfg.use != "")
|
||||
"Setting `use` is deprecated, ddclient now supports `usev4` and `usev6` for separate IPv4/IPv6 configuration.";
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = !((cfg.passwordFile != null) && (cfg.secretsFile != null));
|
||||
message = "You cannot use both services.ddclient.passwordFile and services.ddclient.secretsFile at the same time.";
|
||||
}
|
||||
{
|
||||
assertion = !(cfg.protocol == "nsupdate") || (cfg.passwordFile == null && cfg.secretsFile == null);
|
||||
message = "You cannot use services.ddclient.passwordFile and or services.ddclient.secretsFile when services.ddclient.protocol is \"nsupdate\".";
|
||||
}
|
||||
];
|
||||
|
||||
systemd.services.ddclient = {
|
||||
description = "Dynamic DNS Client";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
cfg = config.services.go-httpbin;
|
||||
|
||||
environment = lib.mapAttrs (
|
||||
_: value: if lib.isBool value then lib.boolToString value else toString value
|
||||
) cfg.settings;
|
||||
in
|
||||
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ defelo ];
|
||||
|
||||
options.services.go-httpbin = {
|
||||
enable = lib.mkEnableOption "go-httpbin";
|
||||
|
||||
package = lib.mkPackageOption pkgs "go-httpbin" { };
|
||||
|
||||
settings = lib.mkOption {
|
||||
description = ''
|
||||
Configuration of go-httpbin.
|
||||
See <https://github.com/mccutchen/go-httpbin#configuration> for a list of options.
|
||||
'';
|
||||
example = {
|
||||
HOST = "0.0.0.0";
|
||||
PORT = 8080;
|
||||
};
|
||||
|
||||
type = lib.types.submodule {
|
||||
freeformType =
|
||||
with lib.types;
|
||||
attrsOf (oneOf [
|
||||
str
|
||||
int
|
||||
bool
|
||||
]);
|
||||
|
||||
options = {
|
||||
HOST = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = "The host to listen on.";
|
||||
default = "127.0.0.1";
|
||||
example = "0.0.0.0";
|
||||
};
|
||||
|
||||
PORT = lib.mkOption {
|
||||
type = lib.types.port;
|
||||
description = "The port to listen on.";
|
||||
example = 8080;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
systemd.services.go-httpbin = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
inherit environment;
|
||||
|
||||
serviceConfig = {
|
||||
User = "go-httpbin";
|
||||
Group = "go-httpbin";
|
||||
DynamicUser = true;
|
||||
|
||||
ExecStart = lib.getExe cfg.package;
|
||||
|
||||
# hardening
|
||||
AmbientCapabilities = "";
|
||||
CapabilityBoundingSet = [ "" ];
|
||||
DevicePolicy = "closed";
|
||||
LockPersonality = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateDevices = true;
|
||||
PrivateTmp = true;
|
||||
PrivateUsers = true;
|
||||
ProcSubset = "pid";
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectHome = true;
|
||||
ProtectHostname = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectProc = "invisible";
|
||||
ProtectSystem = "strict";
|
||||
RemoveIPC = true;
|
||||
RestrictAddressFamilies = [ "AF_INET AF_INET6" ];
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
SocketBindAllow = "tcp:${toString cfg.settings.PORT}";
|
||||
SocketBindDeny = "any";
|
||||
SystemCallArchitectures = "native";
|
||||
SystemCallFilter = [
|
||||
"@system-service"
|
||||
"~@privileged"
|
||||
"~@resources"
|
||||
];
|
||||
UMask = "0077";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -230,7 +230,7 @@ in
|
||||
type = types.str;
|
||||
default = if cfg.enableNginx then "localhost,127.0.0.1,${cfg.domain}" else "";
|
||||
defaultText = lib.literalExpression ''
|
||||
if cfg.enableNginx then "localhost,127.0.0.1,$${cfg.domain}" else ""
|
||||
if cfg.enableNginx then "localhost,127.0.0.1,''${cfg.domain}" else ""
|
||||
'';
|
||||
description = "Comma-separated list of hosts that are able to connect to the server";
|
||||
};
|
||||
@@ -328,16 +328,10 @@ in
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
preStart = ''
|
||||
ln -sfT ${cfg.backendPackage}/share/static /var/lib/lasuite-meet/static
|
||||
|
||||
if [ ! -f .version ]; then
|
||||
touch .version
|
||||
fi
|
||||
|
||||
if [ "${cfg.backendPackage.version}" != "$(cat .version)" ]; then
|
||||
${getExe cfg.backendPackage} migrate
|
||||
echo -n "${cfg.backendPackage.version}" > .version
|
||||
fi
|
||||
${optionalString (cfg.secretKeyPath == null) ''
|
||||
if [[ ! -f /var/lib/lasuite-meet/django_secret_key ]]; then
|
||||
(
|
||||
@@ -346,11 +340,17 @@ in
|
||||
)
|
||||
fi
|
||||
''}
|
||||
if [ "${cfg.backendPackage.version}" != "$(cat .version)" ]; then
|
||||
${getExe cfg.backendPackage} migrate
|
||||
echo -n "${cfg.backendPackage.version}" > .version
|
||||
fi
|
||||
'';
|
||||
|
||||
environment = pythonEnvironment;
|
||||
|
||||
serviceConfig = {
|
||||
BindReadOnlyPaths = "${cfg.backendPackage}/share/static:/var/lib/lasuite-meet/static";
|
||||
|
||||
ExecStart = utils.escapeSystemdExecArgs (
|
||||
[
|
||||
(lib.getExe' cfg.backendPackage "gunicorn")
|
||||
|
||||
@@ -0,0 +1,316 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (lib)
|
||||
concatStringsSep
|
||||
filterAttrs
|
||||
getExe
|
||||
hasPrefix
|
||||
hasSuffix
|
||||
isString
|
||||
literalExpression
|
||||
maintainers
|
||||
mapAttrs
|
||||
mkEnableOption
|
||||
mkIf
|
||||
mkOption
|
||||
mkPackageOption
|
||||
optional
|
||||
optionalString
|
||||
types
|
||||
;
|
||||
|
||||
cfg = config.services.umami;
|
||||
|
||||
nonFileSettings = filterAttrs (k: _: !hasSuffix "_FILE" k) cfg.settings;
|
||||
in
|
||||
{
|
||||
options.services.umami = {
|
||||
enable = mkEnableOption "umami";
|
||||
|
||||
package = mkPackageOption pkgs "umami" { } // {
|
||||
apply =
|
||||
pkg:
|
||||
pkg.override {
|
||||
databaseType = cfg.settings.DATABASE_TYPE;
|
||||
collectApiEndpoint = optionalString (
|
||||
cfg.settings.COLLECT_API_ENDPOINT != null
|
||||
) cfg.settings.COLLECT_API_ENDPOINT;
|
||||
trackerScriptNames = cfg.settings.TRACKER_SCRIPT_NAME;
|
||||
basePath = cfg.settings.BASE_PATH;
|
||||
};
|
||||
};
|
||||
|
||||
createPostgresqlDatabase = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
example = false;
|
||||
description = ''
|
||||
Whether to automatically create the database for Umami using PostgreSQL.
|
||||
Both the database name and username will be `umami`, and the connection is
|
||||
made through unix sockets using peer authentication.
|
||||
'';
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
description = ''
|
||||
Additional configuration (environment variables) for Umami, see
|
||||
<https://umami.is/docs/environment-variables> for supported values.
|
||||
'';
|
||||
|
||||
type = types.submodule {
|
||||
freeformType =
|
||||
with types;
|
||||
attrsOf (oneOf [
|
||||
bool
|
||||
int
|
||||
str
|
||||
]);
|
||||
|
||||
options = {
|
||||
APP_SECRET_FILE = mkOption {
|
||||
type = types.nullOr (
|
||||
types.str
|
||||
// {
|
||||
# We don't want users to be able to pass a path literal here but
|
||||
# it should look like a path.
|
||||
check = it: isString it && types.path.check it;
|
||||
}
|
||||
);
|
||||
default = null;
|
||||
example = "/run/secrets/umamiAppSecret";
|
||||
description = ''
|
||||
A file containing a secure random string. This is used for signing user sessions.
|
||||
The contents of the file are read through systemd credentials, therefore the
|
||||
user running umami does not need permissions to read the file.
|
||||
If you wish to set this to a string instead (not recommended since it will be
|
||||
placed world-readable in the Nix store), you can use the APP_SECRET option.
|
||||
'';
|
||||
};
|
||||
DATABASE_URL = mkOption {
|
||||
type = types.nullOr (
|
||||
types.str
|
||||
// {
|
||||
check =
|
||||
it:
|
||||
isString it
|
||||
&& ((hasPrefix "postgresql://" it) || (hasPrefix "postgres://" it) || (hasPrefix "mysql://" it));
|
||||
}
|
||||
);
|
||||
# For some reason, Prisma requires the username in the connection string
|
||||
# and can't derive it from the current user.
|
||||
default =
|
||||
if cfg.createPostgresqlDatabase then
|
||||
"postgresql://umami@localhost/umami?host=/run/postgresql"
|
||||
else
|
||||
null;
|
||||
defaultText = literalExpression ''if config.services.umami.createPostgresqlDatabase then "postgresql://umami@localhost/umami?host=/run/postgresql" else null'';
|
||||
example = "postgresql://root:root@localhost/umami";
|
||||
description = ''
|
||||
Connection string for the database. Must start with `postgresql://`, `postgres://`
|
||||
or `mysql://`.
|
||||
'';
|
||||
};
|
||||
DATABASE_URL_FILE = mkOption {
|
||||
type = types.nullOr (
|
||||
types.str
|
||||
// {
|
||||
# We don't want users to be able to pass a path literal here but
|
||||
# it should look like a path.
|
||||
check = it: isString it && types.path.check it;
|
||||
}
|
||||
);
|
||||
default = null;
|
||||
example = "/run/secrets/umamiDatabaseUrl";
|
||||
description = ''
|
||||
A file containing a connection string for the database. The connection string
|
||||
must start with `postgresql://`, `postgres://` or `mysql://`.
|
||||
If using this, then DATABASE_TYPE must be set to the appropriate value.
|
||||
The contents of the file are read through systemd credentials, therefore the
|
||||
user running umami does not need permissions to read the file.
|
||||
'';
|
||||
};
|
||||
DATABASE_TYPE = mkOption {
|
||||
type = types.nullOr (
|
||||
types.enum [
|
||||
"postgresql"
|
||||
"mysql"
|
||||
]
|
||||
);
|
||||
default =
|
||||
if cfg.settings.DATABASE_URL != null && hasPrefix "mysql://" cfg.settings.DATABASE_URL then
|
||||
"mysql"
|
||||
else
|
||||
"postgresql";
|
||||
defaultText = literalExpression ''if config.services.umami.settings.DATABASE_URL != null && hasPrefix "mysql://" config.services.umami.settings.DATABASE_URL then "mysql" else "postgresql"'';
|
||||
example = "mysql";
|
||||
description = ''
|
||||
The type of database to use. This is automatically inferred from DATABASE_URL, but
|
||||
must be set manually if you are using DATABASE_URL_FILE.
|
||||
'';
|
||||
};
|
||||
COLLECT_API_ENDPOINT = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
example = "/api/alternate-send";
|
||||
description = ''
|
||||
Allows you to send metrics to a location different than the default `/api/send`.
|
||||
'';
|
||||
};
|
||||
TRACKER_SCRIPT_NAME = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [ ];
|
||||
example = [ "tracker.js" ];
|
||||
description = ''
|
||||
Allows you to assign a custom name to the tracker script different from the default `script.js`.
|
||||
'';
|
||||
};
|
||||
BASE_PATH = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
example = "/analytics";
|
||||
description = ''
|
||||
Allows you to host Umami under a subdirectory.
|
||||
You may need to update your reverse proxy settings to correctly handle the BASE_PATH prefix.
|
||||
'';
|
||||
};
|
||||
DISABLE_UPDATES = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
example = false;
|
||||
description = ''
|
||||
Disables the check for new versions of Umami.
|
||||
'';
|
||||
};
|
||||
DISABLE_TELEMETRY = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
example = true;
|
||||
description = ''
|
||||
Umami collects completely anonymous telemetry data in order help improve the application.
|
||||
You can choose to disable this if you don't want to participate.
|
||||
'';
|
||||
};
|
||||
HOSTNAME = mkOption {
|
||||
type = types.str;
|
||||
default = "127.0.0.1";
|
||||
example = "0.0.0.0";
|
||||
description = ''
|
||||
The address to listen on.
|
||||
'';
|
||||
};
|
||||
PORT = mkOption {
|
||||
type = types.port;
|
||||
default = 3000;
|
||||
example = 3010;
|
||||
description = ''
|
||||
The port to listen on.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
default = { };
|
||||
|
||||
example = {
|
||||
APP_SECRET_FILE = "/run/secrets/umamiAppSecret";
|
||||
DISABLE_TELEMETRY = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = (cfg.settings.APP_SECRET_FILE != null) != (cfg.settings ? APP_SECRET);
|
||||
message = "One (and only one) of services.umami.settings.APP_SECRET_FILE and services.umami.settings.APP_SECRET must be set.";
|
||||
}
|
||||
{
|
||||
assertion = (cfg.settings.DATABASE_URL_FILE != null) != (cfg.settings.DATABASE_URL != null);
|
||||
message = "One (and only one) of services.umami.settings.DATABASE_URL_FILE and services.umami.settings.DATABASE_URL must be set.";
|
||||
}
|
||||
{
|
||||
assertion =
|
||||
cfg.createPostgresqlDatabase
|
||||
-> cfg.settings.DATABASE_URL == "postgresql://umami@localhost/umami?host=/run/postgresql";
|
||||
message = "The option config.services.umami.createPostgresqlDatabase is enabled, but config.services.umami.settings.DATABASE_URL has been modified.";
|
||||
}
|
||||
];
|
||||
|
||||
services.postgresql = mkIf cfg.createPostgresqlDatabase {
|
||||
enable = true;
|
||||
ensureDatabases = [ "umami" ];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = "umami";
|
||||
ensureDBOwnership = true;
|
||||
ensureClauses.login = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
systemd.services.umami = {
|
||||
environment = mapAttrs (_: toString) nonFileSettings;
|
||||
|
||||
description = "Umami: a simple, fast, privacy-focused alternative to Google Analytics";
|
||||
after = [ "network.target" ] ++ (optional (cfg.createPostgresqlDatabase) "postgresql.service");
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
script =
|
||||
let
|
||||
loadCredentials =
|
||||
(optional (
|
||||
cfg.settings.APP_SECRET_FILE != null
|
||||
) ''export APP_SECRET="$(systemd-creds cat appSecret)"'')
|
||||
++ (optional (
|
||||
cfg.settings.DATABASE_URL_FILE != null
|
||||
) ''export DATABASE_URL="$(systemd-creds cat databaseUrl)"'');
|
||||
in
|
||||
''
|
||||
${concatStringsSep "\n" loadCredentials}
|
||||
${getExe cfg.package}
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
Restart = "on-failure";
|
||||
RestartSec = 3;
|
||||
DynamicUser = true;
|
||||
|
||||
LoadCredential =
|
||||
(optional (cfg.settings.APP_SECRET_FILE != null) "appSecret:${cfg.settings.APP_SECRET_FILE}")
|
||||
++ (optional (
|
||||
cfg.settings.DATABASE_URL_FILE != null
|
||||
) "databaseUrl:${cfg.settings.DATABASE_URL_FILE}");
|
||||
|
||||
# Hardening
|
||||
CapabilityBoundingSet = "";
|
||||
NoNewPrivileges = true;
|
||||
PrivateUsers = true;
|
||||
PrivateTmp = true;
|
||||
PrivateDevices = true;
|
||||
PrivateMounts = true;
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectHome = true;
|
||||
ProtectHostname = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
RestrictAddressFamilies = (optional cfg.createPostgresqlDatabase "AF_UNIX") ++ [
|
||||
"AF_INET"
|
||||
"AF_INET6"
|
||||
];
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
meta.maintainers = with maintainers; [ diogotcorreia ];
|
||||
}
|
||||
@@ -618,6 +618,7 @@ in
|
||||
gnupg = runTest ./gnupg.nix;
|
||||
goatcounter = runTest ./goatcounter.nix;
|
||||
go-camo = runTest ./go-camo.nix;
|
||||
go-httpbin = runTest ./go-httpbin.nix;
|
||||
go-neb = runTest ./go-neb.nix;
|
||||
gobgpd = runTest ./gobgpd.nix;
|
||||
gocd-agent = runTest ./gocd-agent.nix;
|
||||
@@ -1508,6 +1509,7 @@ in
|
||||
ucarp = runTest ./ucarp.nix;
|
||||
udisks2 = runTest ./udisks2.nix;
|
||||
ulogd = runTest ./ulogd/ulogd.nix;
|
||||
umami = runTest ./web-apps/umami.nix;
|
||||
umurmur = runTest ./umurmur.nix;
|
||||
unbound = runTest ./unbound.nix;
|
||||
unifi = runTest ./unifi.nix;
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
{ lib, ... }:
|
||||
|
||||
{
|
||||
name = "go-httpbin";
|
||||
meta.maintainers = with lib.maintainers; [ defelo ];
|
||||
|
||||
nodes.machine = {
|
||||
services.go-httpbin = {
|
||||
enable = true;
|
||||
settings.PORT = 8000;
|
||||
};
|
||||
};
|
||||
|
||||
interactive.nodes.machine = {
|
||||
services.go-httpbin.settings.HOST = "0.0.0.0";
|
||||
networking.firewall.allowedTCPPorts = [ 8000 ];
|
||||
virtualisation.forwardPorts = [
|
||||
{
|
||||
from = "host";
|
||||
host.port = 8000;
|
||||
guest.port = 8000;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import json
|
||||
|
||||
machine.wait_for_unit("go-httpbin.service")
|
||||
machine.wait_for_open_port(8000)
|
||||
|
||||
resp = json.loads(machine.succeed("curl localhost:8000/get?foo=bar"))
|
||||
assert resp["args"]["foo"] == ["bar"]
|
||||
assert resp["method"] == "GET"
|
||||
assert resp["origin"] == "127.0.0.1"
|
||||
assert resp["url"] == "http://localhost:8000/get?foo=bar"
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{ lib, ... }:
|
||||
{
|
||||
name = "umami-nixos";
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ diogotcorreia ];
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
services.umami = {
|
||||
enable = true;
|
||||
settings = {
|
||||
APP_SECRET = "very_secret";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
import json
|
||||
|
||||
machine.wait_for_unit("umami.service")
|
||||
|
||||
machine.wait_for_open_port(3000)
|
||||
machine.succeed("curl --fail http://localhost:3000/")
|
||||
machine.succeed("curl --fail http://localhost:3000/script.js")
|
||||
|
||||
res = machine.succeed("""
|
||||
curl -f --json '{ "username": "admin", "password": "umami" }' http://localhost:3000/api/auth/login
|
||||
""")
|
||||
token = json.loads(res)['token']
|
||||
|
||||
res = machine.succeed("""
|
||||
curl -f -H 'Authorization: Bearer %s' --json '{ "domain": "localhost", "name": "Test" }' http://localhost:3000/api/websites
|
||||
""" % token)
|
||||
print(res)
|
||||
websiteId = json.loads(res)['id']
|
||||
|
||||
res = machine.succeed("""
|
||||
curl -f -H 'Authorization: Bearer %s' http://localhost:3000/api/websites/%s
|
||||
""" % (token, websiteId))
|
||||
website = json.loads(res)
|
||||
assert website["name"] == "Test"
|
||||
assert website["domain"] == "localhost"
|
||||
'';
|
||||
}
|
||||
@@ -1,31 +1,16 @@
|
||||
{
|
||||
jq,
|
||||
lib,
|
||||
moreutils,
|
||||
vscode-utils,
|
||||
eslint,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-eslint";
|
||||
publisher = "dbaeumer";
|
||||
version = "3.0.13";
|
||||
hash = "sha256-l5VvhQPxPaQsPhXUbFW2yGJjaqnNvijn4QkXPjf1WXo=";
|
||||
version = "3.0.15";
|
||||
hash = "sha256-oeudNCBrHO3yvw3FrFA4EZk1yODcRRfF/y3U5tdEz4I=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
jq
|
||||
moreutils
|
||||
];
|
||||
|
||||
buildInputs = [ eslint ];
|
||||
|
||||
postInstall = ''
|
||||
cd "$out/$installPrefix"
|
||||
jq '.contributes.configuration.properties."eslint.nodePath".default = "${eslint}/lib/node_modules"' package.json | sponge package.json
|
||||
'';
|
||||
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/dbaeumer.vscode-eslint/changelog";
|
||||
description = "Integrates ESLint JavaScript into VS Code";
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
{
|
||||
jq,
|
||||
lib,
|
||||
moreutils,
|
||||
prettier,
|
||||
vscode-utils,
|
||||
}:
|
||||
|
||||
@@ -14,18 +11,6 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
hash = "sha256-pNjkJhof19cuK0PsXJ/Q/Zb2H7eoIkfXJMLZJ4lDn7k=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
jq
|
||||
moreutils
|
||||
];
|
||||
|
||||
buildInputs = [ prettier ];
|
||||
|
||||
postInstall = ''
|
||||
cd "$out/$installPrefix"
|
||||
jq '.contributes.configuration.properties."prettier.prettierPath".default = "${prettier}"' package.json | sponge package.json
|
||||
'';
|
||||
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/esbenp.prettier-vscode/changelog";
|
||||
description = "Code formatter using prettier";
|
||||
|
||||
@@ -5,13 +5,13 @@
|
||||
}:
|
||||
mkLibretroCore {
|
||||
core = "dosbox-pure";
|
||||
version = "0-unstable-2025-07-10";
|
||||
version = "0-unstable-2025-07-28";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "schellingb";
|
||||
repo = "dosbox-pure";
|
||||
rev = "92894e7bdb6304d23278dc77f8a9fa7212450f6e";
|
||||
hash = "sha256-uA/pm3DyT0VCyq85DzZGXjSGrKQ9uoEIfrs839ta97s=";
|
||||
rev = "4b5f6c964aa56357e19632bf73d1875c2496fdd1";
|
||||
hash = "sha256-J1NSt2Q4+lWUVqROv5yAM/rXI5COl0FRux3xqFLw20g=";
|
||||
};
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
|
||||
@@ -23,11 +23,11 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "znc";
|
||||
version = "1.10.0";
|
||||
version = "1.10.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://znc.in/releases/archive/znc-${finalAttrs.version}.tar.gz";
|
||||
hash = "sha256-vmWtm2LvVFp+lIby90E07cU7pROtQ6adnYtHZgUzaxk=";
|
||||
hash = "sha256-Tm52hR2/JgYYWXK1PsXeytaP5TtjpW5N+LizwKbEaAA=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "aiken";
|
||||
version = "1.1.17";
|
||||
version = "1.1.19";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "aiken-lang";
|
||||
repo = "aiken";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-bEsBLihMqYHJa5913Q434xKVufxTrcaxwcANPV9u37U=";
|
||||
hash = "sha256-S3KIOlOz21ItWI+RoeHPYROIlMbKAoNi7hXwHHjHaJs=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-Ob4UuBLD6HFbghv4E2XMj+xVeUSFtc9qPUNuUDgZeQA=";
|
||||
cargoHash = "sha256-RrcP23p3KVIGKiW1crDDn5eoowjX3nTPUWBYtT9qdz0=";
|
||||
|
||||
buildInputs = [ openssl ];
|
||||
|
||||
|
||||
@@ -65,13 +65,13 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "amnezia-vpn";
|
||||
version = "4.8.8.3";
|
||||
version = "4.8.9.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "amnezia-vpn";
|
||||
repo = "amnezia-client";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-hDbrp6eT+avFepJL55Vl2alOD+IMnyy8MPXZQTEmLJo=";
|
||||
hash = "sha256-docQqOVzmgqWPhKzOmKeXhssjyhtfYy1fNn0ZGXjsZ0=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
|
||||
rustPlatform.buildRustPackage {
|
||||
pname = "artichoke";
|
||||
version = "0-unstable-2025-06-18";
|
||||
version = "0-unstable-2025-07-28";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "artichoke";
|
||||
repo = "artichoke";
|
||||
rev = "94921a493f680381c83465e5c50e5d494a7048f6";
|
||||
hash = "sha256-JdCGCvs7GK/I3yyIl4n9OGtN9VwzmwdDdglwbTHfx0Y=";
|
||||
rev = "148d3bf4bc361fa3214c02219e50e22e4cf2a3cf";
|
||||
hash = "sha256-CKCRFSg8ROMhKwiIDU9iAYY/HfGtYlW1zrtn7thxIzY=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-a43awTdhOlu+KO3B6XQ7Vdv4NbZ3iffq4rpmBBgUcZ8=";
|
||||
|
||||
@@ -2,10 +2,11 @@
|
||||
lib,
|
||||
fetchzip,
|
||||
autoPatchelfHook,
|
||||
libsForQt5,
|
||||
stdenv,
|
||||
qt5,
|
||||
}:
|
||||
|
||||
libsForQt5.mkDerivation rec {
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "beebeep";
|
||||
version = "5.8.6";
|
||||
|
||||
@@ -15,11 +16,11 @@ libsForQt5.mkDerivation rec {
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
libsForQt5.wrapQtAppsHook
|
||||
qt5.wrapQtAppsHook
|
||||
autoPatchelfHook
|
||||
];
|
||||
|
||||
buildInputs = with libsForQt5; [
|
||||
buildInputs = with qt5; [
|
||||
qtbase
|
||||
qtmultimedia
|
||||
qtx11extras
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "blanket";
|
||||
version = "0.7.0";
|
||||
version = "0.8.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rafaelmardojai";
|
||||
repo = "blanket";
|
||||
rev = version;
|
||||
hash = "sha256-mY7c5i0me7mMbD8c6eGJeaZpR8XI5QVL4n3M+j15Z1c=";
|
||||
tag = version;
|
||||
hash = "sha256-LnHL/1DJXiKx9U+JkT4Wjx1vtTmKLpzZ8q6uLT5a2MY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@@ -49,13 +49,7 @@ python3Packages.buildPythonApplication rec {
|
||||
|
||||
propagatedBuildInputs = with python3Packages; [ pygobject3 ];
|
||||
|
||||
format = "other";
|
||||
|
||||
postPatch = ''
|
||||
patchShebangs build-aux/meson/postinstall.py
|
||||
substituteInPlace build-aux/meson/postinstall.py \
|
||||
--replace-fail gtk-update-icon-cache gtk4-update-icon-cache
|
||||
'';
|
||||
pyproject = false;
|
||||
|
||||
dontWrapGApps = true;
|
||||
|
||||
@@ -69,6 +63,7 @@ python3Packages.buildPythonApplication rec {
|
||||
|
||||
meta = {
|
||||
description = "Listen to different sounds";
|
||||
changelog = "https://github.com/rafaelmardojai/blanket/releases/tag/${version}";
|
||||
homepage = "https://github.com/rafaelmardojai/blanket";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
mainProgram = "blanket";
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "cargo-bolero";
|
||||
version = "0.13.3";
|
||||
version = "0.13.4";
|
||||
|
||||
src = fetchCrate {
|
||||
inherit pname version;
|
||||
hash = "sha256-xU7a5xEFSrFsQ1K5DIYgACuf+34QeCvGmWvlSSwI03I=";
|
||||
hash = "sha256-lfBpHaY2UCBMg45S4IW8fcpkGkKJoT4qqR2yq5KiXuE=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-FMpM42D3h42NfDzH+EVs6NB2RVehFNFAYTMvzRQVt/s=";
|
||||
cargoHash = "sha256-2URFqLg2aQF7MOpwG6fEPBXyBsLENWpdiXgxW/DJxQE=";
|
||||
|
||||
buildInputs = [
|
||||
libbfd
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
}:
|
||||
ocamlPackages.buildDunePackage {
|
||||
pname = "cerberus";
|
||||
version = "0-unstable-2025-06-29";
|
||||
version = "0-unstable-2025-07-25";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rems-project";
|
||||
repo = "cerberus";
|
||||
rev = "61700b301f0f1fbc1940db51c50240c397759057";
|
||||
hash = "sha256-QpgHOQqiJMlMf2RH5/TI3AirdqYPS7HwE9YIlxgorqg=";
|
||||
rev = "9f8f2d375366e8c6c3c60dcf2da757344d877b14";
|
||||
hash = "sha256-wwc2XXQ3AdXBhBX7FPhpm56w3g9rrC8tESelcXSwjPE=";
|
||||
};
|
||||
|
||||
minimalOCamlVersion = "4.12";
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
buildNpmPackage rec {
|
||||
pname = "clever-tools";
|
||||
|
||||
version = "3.13.1";
|
||||
version = "3.14.0";
|
||||
|
||||
nodejs = nodejs_20;
|
||||
|
||||
@@ -19,10 +19,10 @@ buildNpmPackage rec {
|
||||
owner = "CleverCloud";
|
||||
repo = "clever-tools";
|
||||
rev = version;
|
||||
hash = "sha256-6QzwZmDCts/ci0J2ok1Met9bNiqDHmdYj/PbvWyd4Wk=";
|
||||
hash = "sha256-gBmYbnKsnqZ4KqjJhNmLB7lzIh3MztmcFVAPtz0dB2A=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-H53g1hbVpArFNy47M5QS2/diWbEyyoLOf86OxVffvwQ=";
|
||||
npmDepsHash = "sha256-e3H3nLZZHZ+FX0JTPZXX+YknudnzcAKV6o2bqecZTBA=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
installShellFiles
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
comma,
|
||||
fetchFromGitHub,
|
||||
installShellFiles,
|
||||
fzy,
|
||||
lib,
|
||||
nix-index-unwrapped,
|
||||
@@ -11,16 +12,18 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "comma";
|
||||
version = "2.3.0";
|
||||
version = "2.3.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nix-community";
|
||||
repo = "comma";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-JogC9NIS71GyimpqmX2/dhBX1IucK395iWZVVabZxiE=";
|
||||
hash = "sha256-dNek1a8Yt3icWc8ZpVe1NGuG+eSoTDOmAAJbkYmMocU=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-Cd4WaOG+OkCM4Q1K9qVzMYOjSi9U8W82JypqUN20x9w=";
|
||||
cargoHash = "sha256-SJBfWjOVrv2WMIh/cQbaFK8jn3oSbmJpdJM7pkJppDs=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace ./src/main.rs \
|
||||
@@ -33,20 +36,21 @@ rustPlatform.buildRustPackage rec {
|
||||
postInstall = ''
|
||||
ln -s $out/bin/comma $out/bin/,
|
||||
|
||||
mkdir -p $out/etc/profile.d
|
||||
mkdir -p $out/etc/nushell
|
||||
mkdir -p $out/etc/fish/functions
|
||||
mkdir -p $out/share/comma
|
||||
|
||||
cp $src/etc/comma-command-not-found.sh $out/etc/profile.d
|
||||
cp $src/etc/comma-command-not-found.nu $out/etc/nushell
|
||||
cp $src/etc/comma-command-not-found.fish $out/etc/fish/functions
|
||||
cp $src/etc/command-not-found.sh $out/share/comma
|
||||
cp $src/etc/command-not-found.nu $out/share/comma
|
||||
cp $src/etc/command-not-found.fish $out/share/comma
|
||||
|
||||
patchShebangs $out/etc/profile.d/comma-command-not-found.sh
|
||||
patchShebangs $out/share/comma/command-not-found.sh
|
||||
substituteInPlace \
|
||||
"$out/etc/profile.d/comma-command-not-found.sh" \
|
||||
"$out/etc/nushell/comma-command-not-found.nu" \
|
||||
"$out/etc/fish/functions/comma-command-not-found.fish" \
|
||||
"$out/share/comma/command-not-found.sh" \
|
||||
"$out/share/comma/command-not-found.nu" \
|
||||
"$out/share/comma/command-not-found.fish" \
|
||||
--replace-fail "comma --ask" "$out/bin/comma --ask"
|
||||
|
||||
"$out/bin/comma" --mangen > comma.1
|
||||
installManPage comma.1
|
||||
'';
|
||||
|
||||
passthru.tests = {
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "corsix-th";
|
||||
version = "0.68.0";
|
||||
version = "0.69.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "CorsixTH";
|
||||
repo = "CorsixTH";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-D8ks+fiFJxwClqW1aNtGGa5UxAFvuH2f2guwPxOEQwI=";
|
||||
hash = "sha256-U8rl24EBjSRJrK2VmCI3YKeEM7U8ynaufEghgVfqrp0=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
}:
|
||||
llvmPackages.stdenv.mkDerivation rec {
|
||||
pname = "enzyme";
|
||||
version = "0.0.186";
|
||||
version = "0.0.187";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "EnzymeAD";
|
||||
repo = "Enzyme";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-s9YGKHPk4/xy3Re3NdWe1Srjg+inPft0vrQMWaRcGpA=";
|
||||
hash = "sha256-vdLt7LtVkgcgoUzzl5jb7ERIyQMpY+iSwJpdQpWxoJw=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "git-quick-stats";
|
||||
version = "2.6.2";
|
||||
version = "2.7.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
repo = "git-quick-stats";
|
||||
owner = "arzzen";
|
||||
rev = version;
|
||||
sha256 = "sha256-OSEX9S6Q4R7fT2ic72GkUI5mW8wC5Hy2GQVeENlTm5E=";
|
||||
sha256 = "sha256-utY3oD0IqnqyyDJv7i4hLkLCXukNcYSdZcaj8NUwRu0=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
lib,
|
||||
buildGoModule,
|
||||
fetchFromGitHub,
|
||||
nixosTests,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "go-httpbin";
|
||||
version = "2.18.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mccutchen";
|
||||
repo = "go-httpbin";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-ixEbmppQ+4Udc5ytV4YPOpOT/iEbhjQIYGoOGL0dIw8=";
|
||||
};
|
||||
|
||||
vendorHash = null;
|
||||
|
||||
env.CGO_ENABLED = 0;
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
"-w"
|
||||
];
|
||||
|
||||
# tests are flaky
|
||||
doCheck = false;
|
||||
|
||||
doInstallCheck = true;
|
||||
installCheckPhase = ''
|
||||
runHook preInstallCheck
|
||||
$out/bin/go-httpbin --help &> /dev/null
|
||||
runHook postInstallCheck
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
tests = { inherit (nixosTests) go-httpbin; };
|
||||
updateScript = nix-update-script { };
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Reasonably complete and well-tested golang port of httpbin, with zero dependencies outside the go stdlib";
|
||||
homepage = "https://github.com/mccutchen/go-httpbin";
|
||||
changelog = "https://github.com/mccutchen/go-httpbin/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ defelo ];
|
||||
mainProgram = "go-httpbin";
|
||||
};
|
||||
})
|
||||
@@ -11,17 +11,17 @@
|
||||
|
||||
buildGoLatestModule (finalAttrs: {
|
||||
pname = "gopls";
|
||||
version = "0.19.1";
|
||||
version = "0.20.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "golang";
|
||||
repo = "tools";
|
||||
tag = "gopls/v${finalAttrs.version}";
|
||||
hash = "sha256-QJnLJNgFtc/MmJ5WWooKcavnPPTYuM4XhUHcbwlvMLY=";
|
||||
hash = "sha256-DYYitsrdH4nujDFJgdkObEpgElhXI7Yk2IpA/EVVLVo=";
|
||||
};
|
||||
|
||||
modRoot = "gopls";
|
||||
vendorHash = "sha256-P5wUGXmVvaRUpzmv/SPX8OpCXOCOg6nBI544puNOWCE=";
|
||||
vendorHash = "sha256-J6QcefSs4XtnktlzG+/+aY6fqkHGd9MMZqi24jAwcd0=";
|
||||
|
||||
# https://github.com/golang/tools/blob/9ed98faa/gopls/main.go#L27-L30
|
||||
ldflags = [ "-X main.version=v${finalAttrs.version}" ];
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
autoreconfHook,
|
||||
gettext,
|
||||
guile,
|
||||
pkg-config,
|
||||
texinfo,
|
||||
@@ -34,6 +35,11 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
curl
|
||||
];
|
||||
|
||||
# error: possibly undefined macro: AC_LIB_LINKFLAGS_FROM_LIBS
|
||||
preAutoreconf = ''
|
||||
cp ${gettext}/share/gettext/m4/lib-{ld,link,prefix}.m4 m4
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Bindings to cURL for GNU Guile";
|
||||
homepage = "https://github.com/spk121/guile-curl";
|
||||
|
||||
@@ -17,19 +17,19 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "jellyseerr";
|
||||
version = "2.7.0";
|
||||
version = "2.7.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Fallenbagel";
|
||||
repo = "jellyseerr";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-JzJYRwrwDk8LQZAfWwym+SFTn8YhALghpZb2Dd+3nP4=";
|
||||
hash = "sha256-MaLmdG98WewnNJt7z6OP9xv6zlNwwu/+YnPM0Iebxj4=";
|
||||
};
|
||||
|
||||
pnpmDeps = pnpm.fetchDeps {
|
||||
inherit (finalAttrs) pname version src;
|
||||
fetcherVersion = 1;
|
||||
hash = "sha256-Ym16jPHMHKmojMQOuMamDsW/u+oP1UhbCP5dooTUzFQ=";
|
||||
hash = "sha256-3df72m/ARgfelBLE6Bhi8+ThHytowVOBL2Ndk7auDgg=";
|
||||
};
|
||||
|
||||
buildInputs = [ sqlite ];
|
||||
|
||||
@@ -33,11 +33,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "knot-dns";
|
||||
version = "3.4.7";
|
||||
version = "3.4.8";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://secure.nic.cz/files/knot-dns/knot-${version}.tar.xz";
|
||||
sha256 = "sha256-3TRspvOvq83F6boJ3WZ7AQWQu2akL0VBAh+51vBz2sw=";
|
||||
sha256 = "sha256-ZzCnPb/BLXnYAA/+ItNtBot0Z+dL7h6xIqxJNezqSfk=";
|
||||
};
|
||||
|
||||
outputs = [
|
||||
|
||||
@@ -21,13 +21,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "lesspipe";
|
||||
version = "2.18";
|
||||
version = "2.19";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "wofr06";
|
||||
repo = "lesspipe";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-GCtcIXGrMH6LOKxjnB2SkUSChQnMj5d939i2atvqK+Q=";
|
||||
hash = "sha256-V+fB5KkbBRhVSDgB/e7oVEyMKQ7HbR82XQYlqxcLZyQ=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -15,12 +15,12 @@
|
||||
}:
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
name = "lug-helper";
|
||||
version = "4.1";
|
||||
version = "4.2";
|
||||
src = fetchFromGitHub {
|
||||
owner = "starcitizen-lug";
|
||||
repo = "lug-helper";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-Pj0jReezB/0yCl5EC+EQ7CVtmgGQrJwVR6pvaP/gtWg=";
|
||||
hash = "sha256-W8GwDXYHfGdruAMdBei53V5UPYE6yks0+FW48pARknY=";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
lib,
|
||||
rustPlatform,
|
||||
fetchFromGitHub,
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "mandelbrot-cli";
|
||||
version = "0-unstable-2025-07-16";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "IronstoneInnovation";
|
||||
repo = "mandelbrot_cli";
|
||||
rev = "36a43d4feace4ac346c6da78262278d4deb6bb94";
|
||||
hash = "sha256-RGv/B2Zi2hqHWPbo67vTlJIIci3a0tyIgD5+Tnf0yiY=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-nOhg3nDWGA+0g499EnsX5TNwnZM2NcpqHiyQujOM3OI=";
|
||||
|
||||
meta = {
|
||||
description = "A CLI for generating images of the Mandelbrot Set";
|
||||
homepage = "https://github.com/IronstoneInnovation/mandelbrot_cli";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ yiyu ];
|
||||
mainProgram = "mandelbrot-cli";
|
||||
};
|
||||
})
|
||||
@@ -17,12 +17,12 @@ let
|
||||
in
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "models-dev";
|
||||
version = "0-unstable-2025-07-23";
|
||||
version = "0-unstable-2025-07-29";
|
||||
src = fetchFromGitHub {
|
||||
owner = "sst";
|
||||
repo = "models.dev";
|
||||
rev = "affbfa8012d0dbc0eba81ea51ec32069c71af417";
|
||||
hash = "sha256-JPcurldPuaFPfwqiWQR83x1uDcL0Dy79kx2TAOiNnyQ=";
|
||||
rev = "69e91b1cee1dbd737dc60f5f99ce123a81763cda";
|
||||
hash = "sha256-fr4cgQsW03ukgCxNBtlokAXmqjGh1fFJucWx1dJ7xV0=";
|
||||
};
|
||||
|
||||
node_modules = stdenvNoCC.mkDerivation {
|
||||
|
||||
@@ -7,43 +7,21 @@
|
||||
openssl,
|
||||
versionCheckHook,
|
||||
writeShellApplication,
|
||||
common-updater-scripts,
|
||||
gitMinimal,
|
||||
jq,
|
||||
nix-update,
|
||||
gitMinimal,
|
||||
pup,
|
||||
nixosTests,
|
||||
}:
|
||||
|
||||
let
|
||||
version = "8.0.11";
|
||||
|
||||
srcs = version: {
|
||||
"x86_64-linux" = {
|
||||
url = "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-${version}.tgz";
|
||||
hash = "sha256-XErxsovZyMR1UmwClxn5Bm08hoYHArCtn8TSv/8eDYo=";
|
||||
};
|
||||
"aarch64-linux" = {
|
||||
url = "https://fastdl.mongodb.org/linux/mongodb-linux-aarch64-ubuntu2204-${version}.tgz";
|
||||
hash = "sha256-p1eBobdnJ/uPZHScWFs3AOB7/BJn/MZQ8+VpOHonY2A=";
|
||||
};
|
||||
"x86_64-darwin" = {
|
||||
url = "https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-${version}.tgz";
|
||||
hash = "sha256-RLq+aFJixSt3EginpgIHWnR4CGk0KX5cmC3QrbW3jJ8=";
|
||||
};
|
||||
"aarch64-darwin" = {
|
||||
url = "https://fastdl.mongodb.org/osx/mongodb-macos-arm64-${version}.tgz";
|
||||
hash = "sha256-kNzByPEXi5T3+vr6t/EJuKIDEfGybrsbBqJ8vaEV5tY=";
|
||||
};
|
||||
};
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "mongodb-ce";
|
||||
inherit version;
|
||||
version = "8.0.12";
|
||||
|
||||
src = fetchurl (
|
||||
(srcs version).${stdenv.hostPlatform.system}
|
||||
or (throw "unsupported system: ${stdenv.hostPlatform.system}")
|
||||
);
|
||||
src =
|
||||
finalAttrs.passthru.sources.${stdenv.hostPlatform.system}
|
||||
or (throw "Unsupported platform for mongodb-ce: ${stdenv.hostPlatform.system}");
|
||||
|
||||
nativeBuildInputs = lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ];
|
||||
dontStrip = true;
|
||||
@@ -59,29 +37,49 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
install -Dm 755 bin/mongod -t $out/bin
|
||||
install -Dm 755 bin/mongos -t $out/bin
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
versionCheckProgram = "${placeholder "out"}/bin/mongod";
|
||||
versionCheckProgramArg = "--version";
|
||||
# Only enable the version install check on darwin.
|
||||
# On Linux, this would fail as mongod relies on tcmalloc, which
|
||||
# requires access to `/sys/devices/system/cpu/possible`.
|
||||
# See https://github.com/NixOS/nixpkgs/issues/377016
|
||||
doInstallCheck = stdenv.hostPlatform.isDarwin;
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
versionCheckProgram = "${placeholder "out"}/bin/mongod";
|
||||
versionCheckProgramArg = "--version";
|
||||
|
||||
passthru = {
|
||||
sources = {
|
||||
"x86_64-linux" = fetchurl {
|
||||
url = "https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2404-${finalAttrs.version}.tgz";
|
||||
hash = "sha256-dmXt+OxvDaJRXEn3hNoiYZ9ob//tmQp2lsU2XunTNLM=";
|
||||
};
|
||||
"aarch64-linux" = fetchurl {
|
||||
url = "https://fastdl.mongodb.org/linux/mongodb-linux-aarch64-ubuntu2404-${finalAttrs.version}.tgz";
|
||||
hash = "sha256-9FdODnUqzquSKk86BN5OL+fEO07hGYg1VAtytp7ehFM=";
|
||||
};
|
||||
"x86_64-darwin" = fetchurl {
|
||||
url = "https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-${finalAttrs.version}.tgz";
|
||||
hash = "sha256-LUUhqfgP1tIupe517TdLL97jUvBZsCvzMey3JtMVTmg=";
|
||||
};
|
||||
"aarch64-darwin" = fetchurl {
|
||||
url = "https://fastdl.mongodb.org/osx/mongodb-macos-arm64-${finalAttrs.version}.tgz";
|
||||
hash = "sha256-9SFfRbIWVXPupxvqmQlkacmcthycu840VIupCNBf7Ew=";
|
||||
};
|
||||
};
|
||||
updateScript =
|
||||
let
|
||||
script = writeShellApplication {
|
||||
name = "${finalAttrs.pname}-updateScript";
|
||||
|
||||
runtimeInputs = [
|
||||
common-updater-scripts
|
||||
curl
|
||||
gitMinimal
|
||||
jq
|
||||
nix-update
|
||||
gitMinimal
|
||||
pup
|
||||
];
|
||||
|
||||
@@ -92,16 +90,15 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
# Check if the new version is available for download, if not, exit
|
||||
curl -s https://www.mongodb.com/try/download/community-edition/releases | pup 'h3:not([id]) text{}' | grep "$NEW_VERSION"
|
||||
|
||||
if [[ "${version}" = "$NEW_VERSION" ]]; then
|
||||
if [[ "${finalAttrs.version}" = "$NEW_VERSION" ]]; then
|
||||
echo "The new version same as the old version."
|
||||
exit 0
|
||||
fi
|
||||
''
|
||||
+ lib.concatStrings (
|
||||
map (system: ''
|
||||
nix-update --system ${system} --version "$NEW_VERSION" ${finalAttrs.pname}
|
||||
'') finalAttrs.meta.platforms
|
||||
);
|
||||
|
||||
for platform in ${lib.escapeShellArgs finalAttrs.meta.platforms}; do
|
||||
update-source-version "mongodb-ce" "$NEW_VERSION" --ignore-same-version --source-key="sources.$platform"
|
||||
done
|
||||
'';
|
||||
};
|
||||
in
|
||||
{
|
||||
@@ -125,7 +122,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
(mongos).
|
||||
'';
|
||||
maintainers = with lib.maintainers; [ drupol ];
|
||||
platforms = lib.attrNames (srcs version);
|
||||
platforms = lib.attrNames finalAttrs.passthru.sources;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
};
|
||||
})
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "ocenaudio";
|
||||
version = "3.15";
|
||||
version = "3.15.2";
|
||||
|
||||
src = fetchurl {
|
||||
name = "ocenaudio.deb";
|
||||
url = "https://www.ocenaudio.com/downloads/index.php/ocenaudio_debian12.deb?version=v${finalAttrs.version}";
|
||||
hash = "sha256-MZjgdCBE+3dG6Ov+wwDKa/0Y8XIihwM50Gc/cgEf2FQ=";
|
||||
hash = "sha256-sAsa/stC+OF7g7fNQGRT5x0GO0YKzH/lOPzWIZA0YsY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -81,13 +81,13 @@ buildGoModule (
|
||||
|
||||
{
|
||||
pname = "olivetin";
|
||||
version = "2025.7.19";
|
||||
version = "2025.7.28";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "OliveTin";
|
||||
repo = "OliveTin";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-F1AJ4kbFx+L/t1TSsjbDM761LtA2M9exfjWd9VwRZuE=";
|
||||
hash = "sha256-gh0Nc7h2Z+Nz7TixmHihFAHI0X0Y2ZeA4OMv3jOYlh4=";
|
||||
};
|
||||
|
||||
modRoot = "service";
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "piper";
|
||||
pname = "piper-tts";
|
||||
version = "2023.11.14-2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
@@ -65,12 +65,12 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
inherit piper-train;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
changelog = "https://github.com/rhasspy/piper/releases/tag/v${finalAttrs.version}";
|
||||
description = "Fast, local neural text to speech system";
|
||||
homepage = "https://github.com/rhasspy/piper";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ hexa ];
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ hexa ];
|
||||
mainProgram = "piper";
|
||||
};
|
||||
})
|
||||
@@ -7,16 +7,16 @@
|
||||
}:
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "railway";
|
||||
version = "4.5.5";
|
||||
version = "4.5.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "railwayapp";
|
||||
repo = "cli";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-l+HbtJyP6mygIh+H6MzfRoyz4RTgtF9B4hbQBHVRwhg=";
|
||||
hash = "sha256-xoBGYdcef1xBlPlUOPudhX0t59OBbNavcg5CeRJiQIY=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-jzql0ndlQlDHYhfXO5pAKlnQr79QG/MCK+som2qwTfY=";
|
||||
cargoHash = "sha256-o/wbBp2gIl+Dyxnee7mChVzv5qmrVAcG95i9YMxd5AI=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
rainfrog,
|
||||
}:
|
||||
let
|
||||
version = "0.3.3";
|
||||
version = "0.3.4";
|
||||
in
|
||||
rustPlatform.buildRustPackage {
|
||||
inherit version;
|
||||
@@ -17,10 +17,10 @@ rustPlatform.buildRustPackage {
|
||||
owner = "achristmascarl";
|
||||
repo = "rainfrog";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-nGUk+997TBx/2U3QMF4OpRqzwNzC0ILRraz3kOzzoBw=";
|
||||
hash = "sha256-uERAYdDM2yKowl8WH6FB1XEbjSO/S79Fdib2QQE95N4=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-8RvZmQI1WXfM2Sh5bMAkeJVNvOUp8fmM0MznZzCpxgY=";
|
||||
cargoHash = "sha256-drL2rLuJExJI799Rvh0X/c6kTqJ+3wnqaDSRiz63Nuo=";
|
||||
|
||||
passthru = {
|
||||
tests.version = testers.testVersion {
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
installShellFiles,
|
||||
pkg-config,
|
||||
python3,
|
||||
writableTmpDirAsHomeHook,
|
||||
|
||||
# buildInputs
|
||||
libgpg-error,
|
||||
@@ -19,14 +20,14 @@
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
version = "0.7.0";
|
||||
pname = "ripasso-cursive";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cortex";
|
||||
repo = "ripasso";
|
||||
tag = "release-${version}";
|
||||
tag = "release-${finalAttrs.version}";
|
||||
hash = "sha256-j98X/+UTea4lCtFfMpClnfcKlvxm4DpOujLc0xc3VUY=";
|
||||
};
|
||||
|
||||
@@ -44,6 +45,7 @@ rustPlatform.buildRustPackage rec {
|
||||
pkg-config
|
||||
python3
|
||||
rustPlatform.bindgenHook
|
||||
writableTmpDirAsHomeHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
@@ -54,10 +56,6 @@ rustPlatform.buildRustPackage rec {
|
||||
xorg.libxcb
|
||||
];
|
||||
|
||||
preCheck = ''
|
||||
export HOME=$(mktemp -d)
|
||||
'';
|
||||
|
||||
checkFlags = lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
# Fails in the darwin sandbox with:
|
||||
# Attempted to create a NULL object.
|
||||
@@ -81,4 +79,4 @@ rustPlatform.buildRustPackage rec {
|
||||
maintainers = with lib.maintainers; [ sgo ];
|
||||
platforms = lib.platforms.unix;
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "rqlite";
|
||||
version = "8.39.1";
|
||||
version = "8.41.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rqlite";
|
||||
repo = "rqlite";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-x/J8W+lAC7d6rE3Zzc7vXVvbonCXn33Of2pKljuWpq0=";
|
||||
hash = "sha256-3jzQ6Kby/v/cBxc1+ejm5PdmhZVVWvBrDEeuf7hqVKw=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-fj4YyxCIZG6ttmNVZm12xKk3+OcownrqXKc9LCAWk7U=";
|
||||
vendorHash = "sha256-8Oejfec9QAYRkFGyEB9R/msiwzV+pgDFS+UNfvvTie4=";
|
||||
|
||||
subPackages = [
|
||||
"cmd/rqlite"
|
||||
|
||||
+6
-6
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"name": "shopify",
|
||||
"version": "3.82.1",
|
||||
"version": "3.83.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "shopify",
|
||||
"version": "3.82.1",
|
||||
"version": "3.83.0",
|
||||
"dependencies": {
|
||||
"@shopify/cli": "3.82.1"
|
||||
"@shopify/cli": "3.83.0"
|
||||
},
|
||||
"bin": {
|
||||
"shopify": "node_modules/@shopify/cli/bin/run.js"
|
||||
@@ -579,9 +579,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@shopify/cli": {
|
||||
"version": "3.82.1",
|
||||
"resolved": "https://registry.npmjs.org/@shopify/cli/-/cli-3.82.1.tgz",
|
||||
"integrity": "sha512-iIABwasf+aMSBIjaPsKlVSaLp3vcOIPcfiitdoMUJKQhjIVbq8KdwaAa/MLUMe5B+l230zjq/xGB8U3JeJY0eg==",
|
||||
"version": "3.83.0",
|
||||
"resolved": "https://registry.npmjs.org/@shopify/cli/-/cli-3.83.0.tgz",
|
||||
"integrity": "sha512-xdSrGV8FZAqyvtyj1fXeNbBhb9qH76l11vVhoCXKgorSCjmnYlJu9Ugffv3KqkseTR5PZsDzVJ5P6jL3f3iAXQ==",
|
||||
"license": "MIT",
|
||||
"os": [
|
||||
"darwin",
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "shopify",
|
||||
"version": "3.82.1",
|
||||
"version": "3.83.0",
|
||||
"private": true,
|
||||
"bin": {
|
||||
"shopify": "node_modules/@shopify/cli/bin/run.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@shopify/cli": "3.82.1"
|
||||
"@shopify/cli": "3.83.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
shopify-cli,
|
||||
}:
|
||||
let
|
||||
version = "3.82.1";
|
||||
version = "3.83.0";
|
||||
in
|
||||
buildNpmPackage {
|
||||
pname = "shopify";
|
||||
@@ -13,7 +13,7 @@ buildNpmPackage {
|
||||
|
||||
src = ./manifests;
|
||||
|
||||
npmDepsHash = "sha256-s0wlJxA3DUXRGBlLvyesLr9H/nbDc9yHBBWBLjQd8vE=";
|
||||
npmDepsHash = "sha256-hnIpsPle7L8BrHZONH6vJjlFrTu2w1TsslDj0u8Ot3M=";
|
||||
dontNpmBuild = true;
|
||||
|
||||
passthru = {
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "signalbackup-tools";
|
||||
version = "20250726";
|
||||
version = "20250729";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bepaald";
|
||||
repo = "signalbackup-tools";
|
||||
rev = version;
|
||||
hash = "sha256-BDrz2AHscjJdlnHW52TWaMGaz8TKVMRLGXs1rn2TQVI=";
|
||||
tag = version;
|
||||
hash = "sha256-IHQrtS75c6fAJeRD4fDc9m1Za95h1kvAZ3B7XFwDxdA=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -26,13 +26,13 @@ assert
|
||||
(!withFirefox && !withChromium) -> throw "Either `withFirefox` or `withChromium` must be enabled.";
|
||||
buildNpmPackage rec {
|
||||
pname = "sitespeed-io";
|
||||
version = "37.8.0";
|
||||
version = "38.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "sitespeedio";
|
||||
repo = "sitespeed.io";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-0bXkVqCen0kUHP8YeFkpdxTd+4Hx6YMZVTjwgWWg6nQ=";
|
||||
hash = "sha256-PLzUpTvgyE9uxIxejU0qTChTM392+euhUtu3IND5kzw=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -50,7 +50,7 @@ buildNpmPackage rec {
|
||||
|
||||
dontNpmBuild = true;
|
||||
npmInstallFlags = [ "--omit=dev" ];
|
||||
npmDepsHash = "sha256-ZWjlueRZkH5lsalUY/xoOO/22P9Ta5CnmK0UKjapyU8=";
|
||||
npmDepsHash = "sha256-mjFTE6k0MaGsRagC0Zk7CKTpNn2ow8WXa6KGbLuSVzc=";
|
||||
|
||||
postInstall = ''
|
||||
mv $out/bin/sitespeed{.,-}io
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "sizelint";
|
||||
version = "0.1.2";
|
||||
version = "0.1.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "a-kenji";
|
||||
repo = "sizelint";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-RwiopJHVyQE+WwiB5Bd89kfQxLl7TROZSB3aanf3fB0=";
|
||||
hash = "sha256-06RJrE0w1Xhj364dUUuYadxleX12mkB8yO+h1QLZhH0=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-Kf6QreDGYM0ndmkOND4zhcDdx6SsXHuj7rcwy6tGyQk=";
|
||||
cargoHash = "sha256-1kg1xfgzqrbZvazRavM4aW7oyRei9jKW0a+a6z2HLnc=";
|
||||
|
||||
meta = {
|
||||
description = "Lint your file tree based on file sizes";
|
||||
|
||||
@@ -20,16 +20,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "stalwart-mail" + (lib.optionalString stalwartEnterprise "-enterprise");
|
||||
version = "0.13.1";
|
||||
version = "0.13.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "stalwartlabs";
|
||||
repo = "stalwart";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-6zoI+yvE1Ep5jh9XthDqphm2zBA4UzhfK7VCKRWIH8g=";
|
||||
hash = "sha256-VdeHb1HVGXA5RPenhhK4r/kkQiLG8/4qhdxoJ3xIqR4=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-t4BLko8vIVHZ44yeQoAhss3OxOlxJCErHm9h+FGG+28=";
|
||||
cargoHash = "sha256-Wu6skjs3Stux5nCX++yoQPeA33Qln67GoKcob++Ldng=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "webadmin";
|
||||
version = "0.1.31";
|
||||
version = "0.1.32";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "stalwartlabs";
|
||||
repo = "webadmin";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-4+R7QQT0cbKYe6WzgvzreOFULBnWdNcbPC27f4r+M0g=";
|
||||
hash = "sha256-HmQBMU7o0A20SY4tBw4SPVfHFfw8e0JsNQDNdZcex24=";
|
||||
};
|
||||
|
||||
npmDeps = fetchNpmDeps {
|
||||
@@ -31,7 +31,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
hash = "sha256-na1HEueX8w7kuDp8LEtJ0nD1Yv39cyk6sEMpS1zix2s=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-Q05+wH9+NfkfmEDJFLuWVQ7wuDeEu9h1XmOMN6SYdyU=";
|
||||
cargoHash = "sha256-a2+3uNNSLfb81QXjZfftbwpgjORPRSgC056U3FINP4o=";
|
||||
|
||||
postPatch = ''
|
||||
# Using local tailwindcss for compilation
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "stu";
|
||||
version = "0.7.2";
|
||||
version = "0.7.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lusingander";
|
||||
repo = "stu";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-taxXk6GJ7ulPVPL4nUZwY+ln7Te54kM2xcLsRd7kpK0=";
|
||||
hash = "sha256-2vnyRTdRr6Y8YlwBSXqcOir5xdu5msPSU3EbsB0Ya34=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-qc2FvlMjPp0X6EQyxNwJdpB8D1i+QzxFv9qYf/F+gXg=";
|
||||
cargoHash = "sha256-Us4rQYq+1Akq3i31sPBIC1Df0moicnHF0J5++M8tC2U=";
|
||||
|
||||
passthru.tests.version = testers.testVersion { package = stu; };
|
||||
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "submit50";
|
||||
version = "3.2.0";
|
||||
version = "3.2.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cs50";
|
||||
repo = "submit50";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-i1hO9P3FGamo4b733/U7d2fiWLdnTskrHM2BXxxDePc=";
|
||||
hash = "sha256-D71d8f2XfLrsDRBuEZK7B96UTUkJLkHsCWchDNO8epI=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
@@ -40,7 +40,7 @@ python3Packages.buildPythonApplication rec {
|
||||
description = "Tool for submitting student CS50 code";
|
||||
homepage = "https://cs50.readthedocs.io/submit50/";
|
||||
downloadPage = "https://github.com/cs50/submit50";
|
||||
changelog = "https://github.com/cs50/submit50/releases/tag/v${version}";
|
||||
changelog = "https://github.com/cs50/submit50/releases/tag/${src.tag}";
|
||||
license = lib.licenses.gpl3Only;
|
||||
platforms = lib.platforms.unix;
|
||||
maintainers = with lib.maintainers; [ ethancedwards8 ];
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "termius";
|
||||
version = "9.25.1";
|
||||
revision = "231";
|
||||
version = "9.26.0";
|
||||
revision = "232";
|
||||
|
||||
src = fetchurl {
|
||||
# find the latest version with
|
||||
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
|
||||
# and the sha512 with
|
||||
# curl -H 'X-Ubuntu-Series: 16' https://api.snapcraft.io/api/v1/snaps/details/termius-app | jq '.download_sha512' -r
|
||||
url = "https://api.snapcraft.io/api/v1/snaps/download/WkTBXwoX81rBe3s3OTt3EiiLKBx2QhuS_${revision}.snap";
|
||||
hash = "sha512-l9ShxjAzreVU3XinBDCNUQjCgXGdyDFdOMkcQgxrowhtu4KfmRioGORSnJeCCPWqIBureWSa5b572wMxCerTCQ==";
|
||||
hash = "sha512-PBwZS1CcvGFfodM3bqM/YWDJxoF/thZvTWIIPQI1ShjVWbvJUq29J/xeaNyncgQCfowgR8xWIOVpmAjCjjyQ0A==";
|
||||
};
|
||||
|
||||
desktopItem = makeDesktopItem {
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "tokei";
|
||||
version = "13.0.0-alpha.8";
|
||||
version = "13.0.0-alpha.9";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "XAMPPRocky";
|
||||
repo = "tokei";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-jCI9VM3y76RI65E5UGuAPuPkDRTMyi+ydx64JWHcGfE=";
|
||||
hash = "sha256-OSIJYSUwc8SvszEOMgt+d/ljCW2jtBkPw6buof4JpUc=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
@@ -29,7 +29,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
})
|
||||
];
|
||||
|
||||
cargoHash = "sha256-LzlyrKaRjUo6JnVLQnHidtI4OWa+GrhAc4D8RkL+nmQ=";
|
||||
cargoHash = "sha256-FIT+c2YzGxJEvLB5uqkdVLWkQ/wlrbCrAkSQEoS4kJw=";
|
||||
|
||||
buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ libiconv ];
|
||||
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
{
|
||||
lib,
|
||||
stdenvNoCC,
|
||||
fetchFromGitHub,
|
||||
fetchurl,
|
||||
makeWrapper,
|
||||
nixosTests,
|
||||
nodejs,
|
||||
pnpm_10,
|
||||
prisma-engines,
|
||||
openssl,
|
||||
rustPlatform,
|
||||
# build variables
|
||||
databaseType ? "postgresql",
|
||||
collectApiEndpoint ? "",
|
||||
trackerScriptNames ? [ ],
|
||||
basePath ? "",
|
||||
}:
|
||||
let
|
||||
sources = lib.importJSON ./sources.json;
|
||||
pnpm = pnpm_10;
|
||||
|
||||
geocities = stdenvNoCC.mkDerivation {
|
||||
pname = "umami-geocities";
|
||||
version = sources.geocities.date;
|
||||
src = fetchurl {
|
||||
url = "https://raw.githubusercontent.com/GitSquared/node-geolite2-redist/${sources.geocities.rev}/redist/GeoLite2-City.tar.gz";
|
||||
inherit (sources.geocities) hash;
|
||||
};
|
||||
|
||||
doBuild = false;
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out
|
||||
cp ./GeoLite2-City.mmdb $out/GeoLite2-City.mmdb
|
||||
'';
|
||||
|
||||
meta.license = lib.licenses.cc-by-40;
|
||||
};
|
||||
|
||||
# Pin the specific version of prisma to the one used by upstream
|
||||
# to guarantee compatibility.
|
||||
prisma-engines' = prisma-engines.overrideAttrs (old: rec {
|
||||
version = "6.7.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "prisma";
|
||||
repo = "prisma-engines";
|
||||
tag = version;
|
||||
hash = "sha256-Ty8BqWjZluU6a5xhSAVb2VoTVY91UUj6zoVXMKeLO4o=";
|
||||
};
|
||||
cargoHash = "sha256-HjDoWa/JE6izUd+hmWVI1Yy3cTBlMcvD9ANsvqAoHBI=";
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
||||
inherit (old) pname;
|
||||
inherit src version;
|
||||
hash = cargoHash;
|
||||
};
|
||||
});
|
||||
in
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "umami";
|
||||
version = "2.19.0";
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
nodejs
|
||||
pnpm.configHook
|
||||
];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "umami-software";
|
||||
repo = "umami";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-luiwGmCujbFGWANSCOiHIov56gsMQ6M+Bj0stcz9he8=";
|
||||
};
|
||||
|
||||
# install dev dependencies as well, for rollup
|
||||
pnpmInstallFlags = [ "--prod=false" ];
|
||||
|
||||
pnpmDeps = pnpm.fetchDeps {
|
||||
inherit (finalAttrs)
|
||||
pname
|
||||
pnpmInstallFlags
|
||||
version
|
||||
src
|
||||
;
|
||||
fetcherVersion = 2;
|
||||
hash = "sha256-2GiCeCt/mU5Dm5YHQgJF3127WPHq5QLX8JRcUv6B6lE=";
|
||||
};
|
||||
|
||||
env.CYPRESS_INSTALL_BINARY = "0";
|
||||
env.NODE_ENV = "production";
|
||||
env.NEXT_TELEMETRY_DISABLED = "1";
|
||||
|
||||
# copy-db-files uses this variable to decide which Prisma schema to use
|
||||
env.DATABASE_TYPE = databaseType;
|
||||
|
||||
env.COLLECT_API_ENDPOINT = collectApiEndpoint;
|
||||
env.TRACKER_SCRIPT_NAME = lib.concatStringsSep "," trackerScriptNames;
|
||||
env.BASE_PATH = basePath;
|
||||
|
||||
# Allow prisma-cli to find prisma-engines without having to download them
|
||||
env.PRISMA_QUERY_ENGINE_LIBRARY = "${prisma-engines'}/lib/libquery_engine.node";
|
||||
env.PRISMA_SCHEMA_ENGINE_BINARY = "${prisma-engines'}/bin/schema-engine";
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
pnpm copy-db-files
|
||||
pnpm build-db-client # prisma generate
|
||||
|
||||
pnpm build-tracker
|
||||
pnpm build-app
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
|
||||
pnpm test
|
||||
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
doCheck = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mv .next/standalone $out
|
||||
mv .next/static $out/.next/static
|
||||
|
||||
# Include prisma cli in next standalone build.
|
||||
# This is preferred to using the prisma in nixpkgs because it guarantees
|
||||
# the version matches.
|
||||
# See https://nextjs-forum.com/post/1280550687998083198
|
||||
# and https://nextjs.org/docs/pages/api-reference/config/next-config-js/output#caveats
|
||||
# Unfortunately, using outputFileTracingIncludes doesn't work because of pnpm's symlink structure,
|
||||
# so we just copy the files manually.
|
||||
mkdir -p $out/node_modules/.bin
|
||||
cp node_modules/.bin/prisma $out/node_modules/.bin
|
||||
cp -a node_modules/prisma $out/node_modules
|
||||
cp -a node_modules/.pnpm/@prisma* $out/node_modules/.pnpm
|
||||
cp -a node_modules/.pnpm/prisma* $out/node_modules/.pnpm
|
||||
# remove broken symlinks (some dependencies that are not relevant for running migrations)
|
||||
find "$out"/node_modules/.pnpm/@prisma* -xtype l -exec rm {} \;
|
||||
find "$out"/node_modules/.pnpm/prisma* -xtype l -exec rm {} \;
|
||||
|
||||
cp -R public $out/public
|
||||
cp -R prisma $out/prisma
|
||||
|
||||
ln -s ${geocities} $out/geo
|
||||
|
||||
mkdir -p $out/bin
|
||||
# Run database migrations before starting umami.
|
||||
# Add openssl to PATH since it is required for prisma to make SSL connections.
|
||||
# Force working directory to $out because umami assumes many paths are relative to it (e.g., prisma and geolite).
|
||||
makeWrapper ${nodejs}/bin/node $out/bin/umami-server \
|
||||
--set NODE_ENV production \
|
||||
--set NEXT_TELEMETRY_DISABLED 1 \
|
||||
--set PRISMA_QUERY_ENGINE_LIBRARY "${prisma-engines'}/lib/libquery_engine.node" \
|
||||
--set PRISMA_SCHEMA_ENGINE_BINARY "${prisma-engines'}/bin/schema-engine" \
|
||||
--prefix PATH : ${
|
||||
lib.makeBinPath [
|
||||
openssl
|
||||
nodejs
|
||||
]
|
||||
} \
|
||||
--chdir $out \
|
||||
--run "$out/node_modules/.bin/prisma migrate deploy" \
|
||||
--add-flags "$out/server.js"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
tests = {
|
||||
inherit (nixosTests) umami;
|
||||
};
|
||||
inherit
|
||||
sources
|
||||
geocities
|
||||
;
|
||||
prisma-engines = prisma-engines';
|
||||
updateScript = ./update.sh;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
changelog = "https://github.com/umami-software/umami/releases/tag/v${finalAttrs.version}";
|
||||
description = "Simple, easy to use, self-hosted web analytics solution";
|
||||
homepage = "https://umami.is/";
|
||||
license = with lib.licenses; [
|
||||
mit
|
||||
cc-by-40 # geocities
|
||||
];
|
||||
platforms = lib.platforms.linux;
|
||||
mainProgram = "umami-server";
|
||||
maintainers = with maintainers; [ diogotcorreia ];
|
||||
};
|
||||
})
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"geocities": {
|
||||
"rev": "0817bc800279e26e9ff045b7b129385e5b23012e",
|
||||
"date": "2025-07-29",
|
||||
"hash": "sha256-Rw9UEvUu7rtXFvHEqKza6kn9LwT6C17zJ/ljoN+t6Ek="
|
||||
}
|
||||
}
|
||||
Executable
+50
@@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p curl jq prefetch-yarn-deps nix-prefetch-github coreutils nix-update
|
||||
# shellcheck shell=bash
|
||||
|
||||
# This script exists to update geocities version and pin prisma-engines version
|
||||
|
||||
set -euo pipefail
|
||||
SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
old_version=$(nix-instantiate --eval -A 'umami.version' default.nix | tr -d '"' || echo "0.0.1")
|
||||
version=$(curl -s "https://api.github.com/repos/umami-software/umami/releases/latest" | jq -r ".tag_name")
|
||||
version="${version#v}"
|
||||
|
||||
echo "Updating to $version"
|
||||
|
||||
if [[ "$old_version" == "$version" ]]; then
|
||||
echo "Already up to date!"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
nix-update --version "$version" umami
|
||||
|
||||
echo "Fetching geolite"
|
||||
geocities_rev_date=$(curl https://api.github.com/repos/GitSquared/node-geolite2-redist/branches/master | jq -r ".commit.sha, .commit.commit.author.date")
|
||||
geocities_rev=$(echo "$geocities_rev_date" | head -1)
|
||||
geocities_date=$(echo "$geocities_rev_date" | tail -1 | sed 's/T.*//')
|
||||
|
||||
# upstream is kind enough to provide a file with the hash of the tar.gz archive
|
||||
geocities_hash=$(curl -s "https://raw.githubusercontent.com/GitSquared/node-geolite2-redist/$geocities_rev/redist/GeoLite2-City.tar.gz.sha256")
|
||||
geocities_hash_sri=$(nix-hash --to-sri --type sha256 "$geocities_hash")
|
||||
|
||||
cat <<EOF > "$SCRIPT_DIR/sources.json"
|
||||
{
|
||||
"geocities": {
|
||||
"rev": "$geocities_rev",
|
||||
"date": "$geocities_date",
|
||||
"hash": "$geocities_hash_sri"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "Pinning Prisma version"
|
||||
upstream_src="https://raw.githubusercontent.com/umami-software/umami/v$version"
|
||||
|
||||
lock=$(mktemp)
|
||||
curl -s -o "$lock" "$upstream_src/pnpm-lock.yaml"
|
||||
prisma_version=$(grep "@prisma/engines@" "$lock" | head -n1 | awk -F"[@']" '{print $4}')
|
||||
rm "$lock"
|
||||
|
||||
nix-update --version "$prisma_version" umami.prisma-engines
|
||||
@@ -10,16 +10,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "wofi-power-menu";
|
||||
version = "0.2.9";
|
||||
version = "0.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "szaffarano";
|
||||
repo = "wofi-power-menu";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-xio/Gt37PJ/0Di22na4USmfah2GV+xM2eV4NnGBeVfY=";
|
||||
hash = "sha256-/MoMgOrpM0KHIyxqOJmC5N5NddOVVfTs5fDt1/yiBtQ=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-diDLKP7JGzrXgdZMwSmg70dbFlMLLWp4Ad/ejjiOSlc=";
|
||||
cargoHash = "sha256-PWPMBYmB1lyCJFhodNSCicYJy29vEUx6k9ScQTPbZdg=";
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
|
||||
@@ -461,10 +461,5 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
# If rustc can't target a platform, we also can't build rustc for
|
||||
# that platform.
|
||||
badPlatforms = rustc.badTargetPlatforms;
|
||||
# Builds, but can't actually compile anything
|
||||
# https://github.com/NixOS/nixpkgs/issues/311930
|
||||
# https://github.com/rust-lang/rust/issues/55120
|
||||
# https://github.com/rust-lang/rust/issues/82521
|
||||
broken = stdenv.hostPlatform.useLLVM;
|
||||
};
|
||||
})
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "qtpbfimageplugin";
|
||||
version = "4.2";
|
||||
version = "4.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "tumic0";
|
||||
repo = "QtPBFImagePlugin";
|
||||
tag = version;
|
||||
hash = "sha256-yk/DsLjNLqtmhvPcHDZGsNiAI1zBv1vBtgERvtNjF4I=";
|
||||
hash = "sha256-WcqhYDfirMfNtUJBvhZ1559NnJun9OuhhVg6o8IcVGQ=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -20,14 +20,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "posthog";
|
||||
version = "6.1.0";
|
||||
version = "6.3.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "PostHog";
|
||||
repo = "posthog-python";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-u4qCQYCpMfM/JCyyKOfTTN7vwh3EvlGnxuslUy/d9Bs=";
|
||||
hash = "sha256-kUIgZJdX+IdMEkIK0DoKYOiv9GSaI+RhOeg9+zK4yvc=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pystac-client";
|
||||
version = "0.8.6";
|
||||
version = "0.9.0";
|
||||
pyproject = true;
|
||||
disabled = pythonOlder "3.9";
|
||||
|
||||
@@ -26,7 +26,7 @@ buildPythonPackage rec {
|
||||
owner = "stac-utils";
|
||||
repo = "pystac-client";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-rbRxqR6hZy284JfQu5+dukFTBHllqzjo0k9aWhrkRAU=";
|
||||
hash = "sha256-+DOWf1ZAwylicdSuOBNivi0Z7DxaymZF756X7fogAjc=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
@@ -55,6 +55,12 @@ buildPythonPackage rec {
|
||||
"vcr"
|
||||
];
|
||||
|
||||
# requires cql2
|
||||
disabledTests = [
|
||||
"test_filter_conversion_to_cql2_json"
|
||||
"test_filter_conversion_to_cql2_text"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "pystac_client" ];
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -27,14 +27,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "softlayer";
|
||||
version = "6.2.6";
|
||||
version = "6.2.7";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "softlayer";
|
||||
repo = "softlayer-python";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-qBhnHFFlP4pqlN/SETXEqYyre/ap60wHe9eCfyiB+kA=";
|
||||
hash = "sha256-mlC4o39Ol1ALguc9KGpxB0M0vhWz4LG2uwhW8CBrVgg=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
@@ -85,7 +85,7 @@ buildPythonPackage rec {
|
||||
meta = {
|
||||
description = "Python libraries that assist in calling the SoftLayer API";
|
||||
homepage = "https://github.com/softlayer/softlayer-python";
|
||||
changelog = "https://github.com/softlayer/softlayer-python/releases/tag/v${version}";
|
||||
changelog = "https://github.com/softlayer/softlayer-python/releases/tag/${src.tag}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ onny ];
|
||||
};
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
buildPythonApplication rec {
|
||||
pname = "gdbgui";
|
||||
|
||||
version = "0.15.2.0";
|
||||
version = "0.15.3.0";
|
||||
format = "setuptools";
|
||||
|
||||
buildInputs = [ gdb ];
|
||||
@@ -27,7 +27,7 @@ buildPythonApplication rec {
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-vmMlRmjFqhs3Vf+IU9IDtJzt4dZ0yIOmXIVOx5chZPA=";
|
||||
hash = "sha256-/HyFE0JnoN03CDyCQCo/Y9RyH4YOMoeB7khReIb8t7Y=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p bash nix-prefetch curl jq gawk gnused nixfmt-rfc-style
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
|
||||
FILE_PATH="$SCRIPT_DIR/xanmod-kernels.nix"
|
||||
|
||||
get_old_version() {
|
||||
local file_path="$1"
|
||||
local variant="$2"
|
||||
|
||||
grep -A 2 "$variant = {" "$file_path" | grep "version =" | cut -d '"' -f 2
|
||||
}
|
||||
|
||||
VARIANT="${1:-lts}"
|
||||
OLD_VERSION=${UPDATE_NIX_OLD_VERSION:-$(get_old_version "$FILE_PATH" "$VARIANT")}
|
||||
|
||||
RELEASES=$(curl --silent https://gitlab.com/api/v4/projects/xanmod%2Flinux/releases)
|
||||
|
||||
# list of URLs. latest first, oldest last
|
||||
RELEASE_URLS=$(echo "$RELEASES" | jq '.[].assets.links.[0].name')
|
||||
|
||||
while IFS= read -r url; do
|
||||
# Get variant, version and suffix from url fields:
|
||||
# 8 9 NF
|
||||
# | | |
|
||||
# https://.../<variant>/<version>-<suffix>
|
||||
release_variant=$(echo "$url" | awk -F'[/-]' '{print $8}')
|
||||
release_version=$(echo "$url" | awk -F'[/-]' '{print $9}')
|
||||
|
||||
# either xanmod1 or xanmod2
|
||||
suffix=$(echo "$url" | awk -F'[/-]' '{print $NF}')
|
||||
|
||||
if [[ "$release_variant" == "$VARIANT" ]]; then
|
||||
if [[ "$release_version" == "$OLD_VERSION" ]]; then
|
||||
echo "Xanmod $VARIANT is up-to-date: ${OLD_VERSION}"
|
||||
exit 0
|
||||
else
|
||||
NEW_VERSION="$release_version"
|
||||
SUFFIX="$suffix"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done < <(echo "$RELEASE_URLS" | jq -r)
|
||||
|
||||
echo "Updating Xanmod \"$VARIANT\" from $OLD_VERSION to $NEW_VERSION ($SUFFIX)"
|
||||
|
||||
URL="https://gitlab.com/api/v4/projects/xanmod%2Flinux/repository/archive.tar.gz?sha=$NEW_VERSION-$SUFFIX"
|
||||
HASH="$(nix-prefetch fetchzip --quiet --url "$URL")"
|
||||
|
||||
update_variant() {
|
||||
local file_path="$1"
|
||||
local variant="$2"
|
||||
local new_version="$3"
|
||||
local new_hash="$4"
|
||||
local suffix="$5"
|
||||
|
||||
# ${variant} = { <- range start
|
||||
# version = ...
|
||||
# hash = ...
|
||||
# suffix = ...
|
||||
# }; <- range end
|
||||
range_start="^\s*$variant = {"
|
||||
range_end="^\s*};"
|
||||
|
||||
# - Update the version and hash using sed range addresses
|
||||
# - Remove suffix line, if it exists
|
||||
sed -i -e "/$range_start/,/$range_end/ {
|
||||
s|^\s*version = \".*\";| version = \"$new_version\";|;
|
||||
s|^\s*hash = \".*\";| hash = \"$new_hash\";|;
|
||||
/^\s*suffix = /d
|
||||
}" "$file_path"
|
||||
|
||||
# Add suffix, if it's different than xanmod1 (the default)
|
||||
if [[ "$suffix" != "xanmod1" ]]; then
|
||||
sed -i -e "/$range_start/,/$range_end/ {
|
||||
s|$range_end| suffix = \"$suffix\";\n };|;
|
||||
}" "$file_path"
|
||||
fi
|
||||
|
||||
# Apply proper formatting
|
||||
nixfmt "$file_path"
|
||||
}
|
||||
|
||||
update_variant "$FILE_PATH" "$VARIANT" "$NEW_VERSION" "$HASH" "$SUFFIX"
|
||||
@@ -13,10 +13,12 @@ let
|
||||
# NOTE: When updating these, please also take a look at the changes done to
|
||||
# kernel config in the xanmod version commit
|
||||
variants = {
|
||||
# ./update-xanmod.sh lts
|
||||
lts = {
|
||||
version = "6.12.40";
|
||||
hash = "sha256-L8wL47kD+lrnJsrp0B1MZ2Lg8zs+m1vQ24gPGuvxIA0=";
|
||||
};
|
||||
# ./update-xanmod.sh main
|
||||
main = {
|
||||
version = "6.15.8";
|
||||
hash = "sha256-P4DpTS0RhvsgBrNDsZMiA1NvCQucuPmJ4GDyF9mZ7ZU=";
|
||||
@@ -70,6 +72,11 @@ let
|
||||
RCU_EXP_KTHREAD = yes;
|
||||
};
|
||||
|
||||
extraPassthru.updateScript = [
|
||||
./update-xanmod.sh
|
||||
variant
|
||||
];
|
||||
|
||||
extraMeta = {
|
||||
branch = lib.versions.majorMinor version;
|
||||
maintainers = with lib.maintainers; [
|
||||
|
||||
@@ -4079,9 +4079,6 @@ with pkgs;
|
||||
|
||||
pfstools = libsForQt5.callPackage ../tools/graphics/pfstools { };
|
||||
|
||||
piper-train = callPackage ../tools/audio/piper/train.nix { };
|
||||
piper-tts = callPackage ../tools/audio/piper { };
|
||||
|
||||
phosh = callPackage ../applications/window-managers/phosh { };
|
||||
|
||||
phosh-mobile-settings =
|
||||
@@ -12806,8 +12803,6 @@ with pkgs;
|
||||
|
||||
kubeval-schema = callPackage ../applications/networking/cluster/kubeval/schema.nix { };
|
||||
|
||||
kubernetes = callPackage ../applications/networking/cluster/kubernetes { };
|
||||
kubectl = callPackage ../applications/networking/cluster/kubernetes/kubectl.nix { };
|
||||
kubectl-convert = kubectl.convert;
|
||||
|
||||
kubectl-view-allocations =
|
||||
|
||||
Reference in New Issue
Block a user