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

K900 79542ad7 43f93315

Changed files
+875 -344
.github
workflows
nixos
pkgs
applications
networking
browsers
firefox
feedreaders
rssguard
by-name
ar
archtika
az
azure-cli
azurehound
ca
cariddi
co
copilot-language-server
er
erlang-language-platform
go
gr
grafana-loki
jn
ka
kanata
mi
ni
nix-update
nixfmt-rfc-style
on
onlyoffice-documentserver
pa
paretosecurity
pl
plemoljp
plemoljp-hs
po
pocket-id
rd
rdkafka
ti
tippecanoe
yt
ytui-music
zw
zwave-js-ui
development
beam-modules
erlfmt
interpreters
erlang
python-modules
aider-chat
azure-mgmt-keyvault
microsoft-security-utilities-secret-masker
posthog
xiaomi-ble
os-specific
linux
kernel
servers
home-assistant
tools
security
trufflehog
virtualization
mkosi
top-level
+3
.github/workflows/eval.yml
···
with:
extra_nix_config: sandbox = true
+
- name: Ensure flake outputs on all systems still evaluate
+
run: nix --experimental-features 'nix-command flakes' flake check --all-systems --no-build ./nixpkgs
+
- name: Query nixpkgs with aliases enabled to check for basic syntax errors
run: |
time nix-env -I ./nixpkgs -f ./nixpkgs -qa '*' --option restrict-eval true --option allow-import-from-derivation false >/dev/null
+25 -6
flake.nix
···
checks = forAllSystems (
system:
-
{
-
tarball = jobs.${system}.tarball;
-
}
+
{ }
+
//
+
lib.optionalAttrs
+
(
+
# Exclude x86_64-freebsd because "Failed to evaluate rustc-wrapper-1.85.0: «broken»: is marked as broken"
+
system != "x86_64-freebsd"
+
)
+
{
+
tarball = jobs.${system}.tarball;
+
}
//
lib.optionalAttrs
(
self.legacyPackages.${system}.stdenv.hostPlatform.isLinux
# Exclude power64 due to "libressl is not available on the requested hostPlatform" with hostPlatform being power64
&& !self.legacyPackages.${system}.targetPlatform.isPower64
+
# Exclude armv6l-linux because "cannot bootstrap GHC on this platform ('armv6l-linux' with libc 'defaultLibc')"
+
&& system != "armv6l-linux"
+
# Exclude riscv64-linux because "cannot bootstrap GHC on this platform ('riscv64-linux' with libc 'defaultLibc')"
+
&& system != "riscv64-linux"
)
{
# Test that ensures that the nixosSystem function can accept a lib argument
···
system != "armv6l-linux"
# Exclude riscv64-linux because "Package ‘ghc-9.6.6’ in .../pkgs/development/compilers/ghc/common-hadrian.nix:579 is not available on the requested hostPlatform"
&& system != "riscv64-linux"
-
# Exclude FreeBSD because "Package ‘ghc-9.6.6’ in .../pkgs/development/compilers/ghc/common-hadrian.nix:579 is not available on the requested hostPlatform"
-
&& !self.legacyPackages.${system}.stdenv.hostPlatform.isFreeBSD
+
# Exclude x86_64-freebsd because "Package ‘ghc-9.6.6’ in .../pkgs/development/compilers/ghc/common-hadrian.nix:579 is not available on the requested hostPlatform"
+
&& system != "x86_64-freebsd"
)
{
/**
···
}
);
-
formatter = forAllSystems (system: (import ./ci { inherit system; }).fmt.pkg);
+
formatter = lib.filterAttrs (
+
system: _:
+
# Exclude armv6l-linux because "cannot bootstrap GHC on this platform ('armv6l-linux' with libc 'defaultLibc')"
+
system != "armv6l-linux"
+
# Exclude riscv64-linux because "cannot bootstrap GHC on this platform ('riscv64-linux' with libc 'defaultLibc')"
+
&& system != "riscv64-linux"
+
# Exclude x86_64-freebsd because "Package ‘go-1.22.12-freebsd-amd64-bootstrap’ in /nix/store/0yw40qnrar3lvc5hax5n49abl57apjbn-source/pkgs/development/compilers/go/binary.nix:50 is not available on the requested hostPlatform"
+
&& system != "x86_64-freebsd"
+
) (forAllSystems (system: (import ./ci { inherit system; }).fmt.pkg));
/**
A nested structure of [packages](https://nix.dev/manual/nix/latest/glossary#package-attribute-set) and other values.
+2
nixos/doc/manual/release-notes/rl-2505.section.md
···
- [mqtt-exporter](https://github.com/kpetremann/mqtt-exporter/), a Prometheus exporter for exposing messages from MQTT. Available as [services.prometheus.exporters.mqtt](#opt-services.prometheus.exporters.mqtt.enable).
+
- [pocket-id](https://pocket-id.org/), an OIDC provider with passkeys support. Available as [services.pocket-id](#opt-services.pocket-id.enable).
+
- [nvidia-gpu](https://github.com/utkuozdemir/nvidia_gpu_exporter), a Prometheus exporter that scrapes `nvidia-smi` for GPU metrics. Available as [services.prometheus.exporters.nvidia-gpu](#opt-services.prometheus.exporters.nvidia-gpu.enable).
- [OpenGamepadUI](https://github.com/ShadowBlip/OpenGamepadUI/), an open source gamepad-native game launcher and overlay for Linux. Available as [programs.opengamepadui](#opt-programs.opengamepadui.enable).
+1
nixos/modules/module-list.nix
···
./services/security/paretosecurity.nix
./services/security/pass-secret-service.nix
./services/security/physlock.nix
+
./services/security/pocket-id.nix
./services/security/shibboleth-sp.nix
./services/security/sks.nix
./services/security/sshguard.nix
+11 -9
nixos/modules/services/misc/paperless.nix
···
};
environment = env;
-
preStart =
-
''
+
preStart = ''
# remove old papaerless-manage symlink
# TODO: drop with NixOS 25.11
[[ -L '${cfg.dataDir}/paperless-manage' ]] && rm '${cfg.dataDir}/paperless-manage'
···
${cfg.package}/bin/paperless-ngx document_index reindex
fi
-
echo ${cfg.package.version} > "$versionFile"
+
echo ${cfg.package.version} > "$versionFile"
+
fi
+
+
if ${lib.boolToString (cfg.passwordFile != null)} || [[ -n $PAPERLESS_ADMIN_PASSWORD ]]; then
+
export PAPERLESS_ADMIN_USER="''${PAPERLESS_ADMIN_USER:-admin}"
+
if [[ -e $CREDENTIALS_DIRECTORY/PAPERLESS_ADMIN_PASSWORD ]]; then
+
PAPERLESS_ADMIN_PASSWORD=$(cat "$CREDENTIALS_DIRECTORY/PAPERLESS_ADMIN_PASSWORD")
+
export PAPERLESS_ADMIN_PASSWORD
fi
-
''
-
+ lib.optionalString (cfg.passwordFile != null) ''
-
export PAPERLESS_ADMIN_USER="''${PAPERLESS_ADMIN_USER:-admin}"
-
PAPERLESS_ADMIN_PASSWORD=$(cat "$CREDENTIALS_DIRECTORY/PAPERLESS_ADMIN_PASSWORD")
-
export PAPERLESS_ADMIN_PASSWORD
superuserState="$PAPERLESS_ADMIN_USER:$PAPERLESS_ADMIN_PASSWORD"
superuserStateFile="${cfg.dataDir}/superuser-state"
···
${cfg.package}/bin/paperless-ngx manage_superuser
echo "$superuserState" > "$superuserStateFile"
fi
-
'';
+
fi
+
'';
requires = lib.optional cfg.database.createLocally "postgresql.service";
after =
lib.optional enableRedis "redis-paperless.service"
+14
nixos/modules/services/security/paretosecurity.nix
···
# dependencies here. This creates the necessary symlinks in the proper locations.
systemd.sockets.paretosecurity.wantedBy = [ "sockets.target" ];
+
# In NixOS, systemd services are configured with minimal PATH. However,
+
# paretosecurity helper looks for installed software to do its job, so
+
# it needs the full system PATH. For example, it runs `iptables` to see if
+
# firewall is configured. And it looks for various password managers to see
+
# if one is installed.
+
# The `paretosecurity-user` timer service that is configured lower has
+
# the same need.
+
systemd.services.paretosecurity.serviceConfig.Environment = [
+
"PATH=${config.system.path}/bin:${config.system.path}/sbin"
+
];
+
# Enable the tray icon and timer services if the trayIcon option is enabled
systemd.user = lib.mkIf config.services.paretosecurity.trayIcon {
services.paretosecurity-trayicon = {
···
};
services.paretosecurity-user = {
wantedBy = [ "graphical-session.target" ];
+
serviceConfig.Environment = [
+
"PATH=${config.system.path}/bin:${config.system.path}/sbin"
+
];
};
timers.paretosecurity-user = {
wantedBy = [ "timers.target" ];
+278
nixos/modules/services/security/pocket-id.nix
···
+
{
+
lib,
+
pkgs,
+
config,
+
...
+
}:
+
+
let
+
inherit (lib)
+
mkEnableOption
+
mkIf
+
mkOption
+
optionalAttrs
+
optional
+
mkPackageOption
+
;
+
inherit (lib.types)
+
bool
+
path
+
str
+
submodule
+
;
+
+
cfg = config.services.pocket-id;
+
+
format = pkgs.formats.keyValue { };
+
settingsFile = format.generate "pocket-id-env-vars" cfg.settings;
+
in
+
{
+
meta.maintainers = with lib.maintainers; [
+
gepbird
+
ymstnt
+
];
+
+
options.services.pocket-id = {
+
enable = mkEnableOption "Pocket ID server";
+
+
package = mkPackageOption pkgs "pocket-id" { };
+
+
environmentFile = mkOption {
+
type = path;
+
description = ''
+
Path to an environment file loaded for the Pocket ID service.
+
+
This can be used to securely store tokens and secrets outside of the world-readable Nix store.
+
+
Example contents of the file:
+
MAXMIND_LICENSE_KEY=your-license-key
+
'';
+
default = "/dev/null";
+
example = "/var/lib/secrets/pocket-id";
+
};
+
+
settings = mkOption {
+
type = submodule {
+
freeformType = format.type;
+
+
options = {
+
PUBLIC_APP_URL = mkOption {
+
type = str;
+
description = ''
+
The URL where you will access the app.
+
'';
+
default = "http://localhost";
+
};
+
+
TRUST_PROXY = mkOption {
+
type = bool;
+
description = ''
+
Whether the app is behind a reverse proxy.
+
'';
+
default = false;
+
};
+
};
+
};
+
+
default = { };
+
+
description = ''
+
Environment variables that will be passed to Pocket ID, see
+
[configuration options](https://pocket-id.org/docs/configuration/environment-variables)
+
for supported values.
+
'';
+
};
+
+
dataDir = mkOption {
+
type = path;
+
default = "/var/lib/pocket-id";
+
description = ''
+
The directory where Pocket ID will store its data, such as the database.
+
'';
+
};
+
+
user = mkOption {
+
type = str;
+
default = "pocket-id";
+
description = "User account under which Pocket ID runs.";
+
};
+
+
group = mkOption {
+
type = str;
+
default = "pocket-id";
+
description = "Group account under which Pocket ID runs.";
+
};
+
};
+
+
config = mkIf cfg.enable {
+
warnings = (
+
optional (cfg.settings ? MAXMIND_LICENSE_KEY)
+
"config.services.pocket-id.settings.MAXMIND_LICENSE_KEY will be stored as plaintext in the Nix store. Use config.services.pocket-id.environmentFile instead."
+
);
+
+
systemd.tmpfiles.rules = [
+
"d ${cfg.dataDir} 0755 ${cfg.user} ${cfg.group}"
+
];
+
+
systemd.services = {
+
pocket-id-backend = {
+
description = "Pocket ID backend";
+
after = [ "network.target" ];
+
wantedBy = [ "multi-user.target" ];
+
restartTriggers = [
+
cfg.package
+
cfg.environmentFile
+
settingsFile
+
];
+
+
serviceConfig = {
+
Type = "simple";
+
User = cfg.user;
+
Group = cfg.group;
+
WorkingDirectory = cfg.dataDir;
+
ExecStart = "${cfg.package}/bin/pocket-id-backend";
+
Restart = "always";
+
EnvironmentFile = [
+
cfg.environmentFile
+
settingsFile
+
];
+
+
# Hardening
+
AmbientCapabilities = "";
+
CapabilityBoundingSet = "";
+
DeviceAllow = "";
+
DevicePolicy = "closed";
+
#IPAddressDeny = "any"; # communicates with the frontend
+
LockPersonality = true;
+
MemoryDenyWriteExecute = true;
+
NoNewPrivileges = true;
+
PrivateDevices = true;
+
PrivateNetwork = false; # communicates with the frontend
+
PrivateTmp = true;
+
PrivateUsers = true;
+
ProcSubset = "pid";
+
ProtectClock = true;
+
ProtectControlGroups = true;
+
ProtectHome = true;
+
ProtectHostname = true;
+
ProtectKernelLogs = true;
+
ProtectKernelModules = true;
+
ProtectKernelTunables = true;
+
ProtectProc = "invisible";
+
ProtectSystem = "full"; # needs to write in cfg.dataDir
+
RemoveIPC = true;
+
RestrictAddressFamilies = [
+
"AF_INET"
+
"AF_INET6"
+
];
+
RestrictNamespaces = true;
+
RestrictRealtime = true;
+
RestrictSUIDSGID = true;
+
SystemCallArchitectures = "native";
+
SystemCallFilter = lib.concatStringsSep " " [
+
"~"
+
"@clock"
+
"@cpu-emulation"
+
"@debug"
+
"@module"
+
"@mount"
+
"@obsolete"
+
"@privileged"
+
"@raw-io"
+
"@reboot"
+
#"@resources" # vm test segfaults
+
"@swap"
+
];
+
UMask = "0077";
+
};
+
};
+
+
pocket-id-frontend = {
+
description = "Pocket ID frontend";
+
after = [
+
"network.target"
+
"pocket-id-backend.service"
+
];
+
wantedBy = [ "multi-user.target" ];
+
restartTriggers = [
+
cfg.package
+
cfg.environmentFile
+
settingsFile
+
];
+
+
serviceConfig = {
+
Type = "simple";
+
User = cfg.user;
+
Group = cfg.group;
+
ExecStart = "${cfg.package}/bin/pocket-id-frontend";
+
Restart = "always";
+
EnvironmentFile = [
+
cfg.environmentFile
+
settingsFile
+
];
+
+
# Hardening
+
AmbientCapabilities = "";
+
CapabilityBoundingSet = "";
+
DeviceAllow = "";
+
DevicePolicy = "closed";
+
#IPAddressDeny = "any"; # communicates with the backend and client
+
LockPersonality = true;
+
MemoryDenyWriteExecute = false; # V8_Fatal segfault
+
NoNewPrivileges = true;
+
PrivateDevices = true;
+
PrivateNetwork = false; # communicates with the backend and client
+
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;
+
SystemCallArchitectures = "native";
+
SystemCallFilter = lib.concatStringsSep " " [
+
"~"
+
"@clock"
+
"@cpu-emulation"
+
"@debug"
+
"@module"
+
"@mount"
+
"@obsolete"
+
"@privileged"
+
"@raw-io"
+
"@reboot"
+
"@resources"
+
"@swap"
+
];
+
UMask = "0077";
+
};
+
};
+
};
+
+
users.users = optionalAttrs (cfg.user == "pocket-id") {
+
pocket-id = {
+
isSystemUser = true;
+
group = cfg.group;
+
description = "Pocket ID backend user";
+
home = cfg.dataDir;
+
};
+
};
+
+
users.groups = optionalAttrs (cfg.group == "pocket-id") {
+
pocket-id = { };
+
};
+
};
+
}
+11 -7
nixos/modules/services/security/vaultwarden/default.nix
···
vaultwarden = cfg.package.override { inherit (cfg) dbBackend; };
+
useSendmail = configEnv.USE_SENDMAIL or null == "true";
in
{
imports = [
···
DevicePolicy = "closed";
LockPersonality = true;
MemoryDenyWriteExecute = true;
-
NoNewPrivileges = true;
-
PrivateDevices = true;
+
NoNewPrivileges = !useSendmail;
+
PrivateDevices = !useSendmail;
PrivateTmp = true;
-
PrivateUsers = true;
+
PrivateUsers = !useSendmail;
ProcSubset = "pid";
ProtectClock = true;
ProtectControlGroups = true;
···
inherit StateDirectory;
StateDirectoryMode = "0700";
SystemCallArchitectures = "native";
-
SystemCallFilter = [
-
"@system-service"
-
"~@privileged"
-
];
+
SystemCallFilter =
+
[
+
"@system-service"
+
]
+
++ lib.optionals (!useSendmail) [
+
"~@privileged"
+
];
Restart = "always";
UMask = "0077";
};
+1 -1
nixos/modules/services/web-apps/archtika.nix
···
in
{
options.services.archtika = {
-
enable = mkEnableOption "Whether to enable the archtika service";
+
enable = mkEnableOption "the archtika CMS";
package = mkPackageOption pkgs "archtika" { };
+6 -10
nixos/modules/services/web-apps/onlyoffice.nix
···
proxy_pass http://onlyoffice-docservice/$2$3;
'';
# /etc/nginx/includes/ds-docservice.conf
-
#disable caching for api.js
+
# disable caching for api.js
"~ ^(\\/[\\d]+\\.[\\d]+\\.[\\d]+[\\.|-][\\w]+)?\\/(web-apps\\/apps\\/api\\/documents\\/api\\.js)$".extraConfig =
''
expires -1;
···
"~ ^(\\/[\\d]+\\.[\\d]+\\.[\\d]+[\\.|-][\\w]+)?\\/(document_editor_service_worker\\.js)$".extraConfig =
''
expires 365d;
-
# gzip_static on;
-
alias ${cfg.package}/var/www/onlyoffice/documentserver/sdkjs/common/serviceworker/$2;
+
alias ${cfg.package}/var/www/onlyoffice/documentserver/sdkjs/common/serviceworker/$2;
'';
-
#suppress logging the unsupported locale error in web-apps
+
# suppress logging the unsupported locale error in web-apps
"~ ^(\\/[\\d]+\\.[\\d]+\\.[\\d]+[\\.|-][\\w]+)?\\/(web-apps)(\\/.*\\.json)$".extraConfig = ''
expires 365d;
error_log /dev/null crit;
alias ${cfg.package}/var/www/onlyoffice/documentserver/$2$3;
'';
-
#suppress logging the unsupported locale error in plugins
+
# suppress logging the unsupported locale error in plugins
"~ ^(\\/[\\d]+\\.[\\d]+\\.[\\d]+[\\.|-][\\w]+)?\\/(sdkjs-plugins)(\\/.*\\.json)$".extraConfig = ''
expires 365d;
error_log /dev/null crit;
-
# gzip_static on;
alias ${cfg.package}/var/www/onlyoffice/documentserver/$2$3;
'';
"~ ^(\\/[\\d]+\\.[\\d]+\\.[\\d]+[\\.|-][\\w]+)?\\/(web-apps|sdkjs|sdkjs-plugins|fonts|dictionaries)(\\/.*)$".extraConfig =
''
expires 365d;
-
# gzip_static on;
alias ${cfg.package}/var/www/onlyoffice/documentserver/$2$3;
'';
"~* ^(\\/cache\\/files.*)(\\/.*)".extraConfig = ''
···
' /run/onlyoffice/config/default.json | sponge /run/onlyoffice/config/default.json
chmod u+w /run/onlyoffice/config/production-linux.json
-
jq '
-
.FileConverter.converter.x2tPath = "${cfg.x2t}/bin/x2t"
-
' /run/onlyoffice/config/production-linux.json | sponge /run/onlyoffice/config/production-linux.json
+
jq '.FileConverter.converter.x2tPath = "${cfg.x2t}/bin/x2t"' \
+
/run/onlyoffice/config/production-linux.json | sponge /run/onlyoffice/config/production-linux.json
if psql -d onlyoffice -c "SELECT 'task_result'::regclass;" >/dev/null; then
psql -f ${cfg.package}/var/www/onlyoffice/documentserver/server/schema/postgresql/removetbl.sql
+5 -4
nixos/tests/all-tests.nix
···
leaps = handleTest ./leaps.nix { };
lemmy = handleTest ./lemmy.nix { };
libinput = handleTest ./libinput.nix { };
-
librenms = handleTest ./librenms.nix { };
+
librenms = runTest ./librenms.nix;
libresprite = handleTest ./libresprite.nix { };
libreswan = runTest ./libreswan.nix;
libreswan-nat = runTest ./libreswan-nat.nix;
···
libvirtd = handleTest ./libvirtd.nix { };
lidarr = handleTest ./lidarr.nix { };
lightdm = handleTest ./lightdm.nix { };
-
lighttpd = handleTest ./lighttpd.nix { };
+
lighttpd = runTest ./lighttpd.nix;
limesurvey = handleTest ./limesurvey.nix { };
limine = import ./limine { inherit runTest; };
listmonk = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./listmonk.nix { };
···
pleroma = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./pleroma.nix { };
plikd = handleTest ./plikd.nix { };
plotinus = handleTest ./plotinus.nix { };
+
pocket-id = handleTest ./pocket-id.nix { };
podgrab = handleTest ./podgrab.nix { };
podman = handleTestOn [ "aarch64-linux" "x86_64-linux" ] ./podman/default.nix { };
podman-tls-ghostunnel = handleTestOn [
···
sssd-ldap = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./sssd-ldap.nix { };
stalwart-mail = handleTest ./stalwart-mail.nix { };
stargazer = runTest ./web-servers/stargazer.nix;
-
starship = handleTest ./starship.nix { };
+
starship = runTest ./starship.nix;
stash = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./stash.nix { };
static-web-server = handleTest ./web-servers/static-web-server.nix { };
step-ca = handleTestOn [ "x86_64-linux" ] ./step-ca.nix { };
···
tuptime = handleTest ./tuptime.nix { };
turbovnc-headless-server = handleTest ./turbovnc-headless-server.nix { };
turn-rs = handleTest ./turn-rs.nix { };
-
tuxguitar = handleTest ./tuxguitar.nix { };
+
tuxguitar = runTest ./tuxguitar.nix;
twingate = runTest ./twingate.nix;
typesense = handleTest ./typesense.nix { };
ucarp = handleTest ./ucarp.nix { };
+81 -83
nixos/tests/librenms.nix
···
-
import ./make-test-python.nix (
-
{ pkgs, lib, ... }:
+
{ pkgs, lib, ... }:
-
let
-
api_token = "f87f42114e44b63ad1b9e3c3d33d6fbe"; # random md5 hash
-
wrong_api_token = "e68ba041fcf1eab923a7a6de3af5f726"; # another random md5 hash
-
in
-
{
-
name = "librenms";
-
meta.maintainers = lib.teams.wdz.members;
+
let
+
api_token = "f87f42114e44b63ad1b9e3c3d33d6fbe"; # random md5 hash
+
wrong_api_token = "e68ba041fcf1eab923a7a6de3af5f726"; # another random md5 hash
+
in
+
{
+
name = "librenms";
+
meta.maintainers = lib.teams.wdz.members;
-
nodes.librenms = {
-
time.timeZone = "Europe/Berlin";
+
nodes.librenms = {
+
time.timeZone = "Europe/Berlin";
-
environment.systemPackages = with pkgs; [
-
curl
-
jq
-
];
+
environment.systemPackages = with pkgs; [
+
curl
+
jq
+
];
-
services.librenms = {
-
enable = true;
-
hostname = "librenms";
-
database = {
-
createLocally = true;
-
host = "localhost";
-
database = "librenms";
-
username = "librenms";
-
passwordFile = pkgs.writeText "librenms-db-pass" "librenmsdbpass";
-
};
-
nginx = {
-
default = true;
-
};
-
enableOneMinutePolling = true;
-
settings = {
-
enable_billing = true;
-
};
+
services.librenms = {
+
enable = true;
+
hostname = "librenms";
+
database = {
+
createLocally = true;
+
host = "localhost";
+
database = "librenms";
+
username = "librenms";
+
passwordFile = pkgs.writeText "librenms-db-pass" "librenmsdbpass";
+
};
+
nginx = {
+
default = true;
+
};
+
enableOneMinutePolling = true;
+
settings = {
+
enable_billing = true;
};
+
};
-
# systemd oneshot to create a dummy admin user and a API token for testing
-
systemd.services.lnms-api-init = {
-
description = "LibreNMS API init";
-
after = [ "librenms-setup.service" ];
-
wantedBy = [ "multi-user.target" ];
-
serviceConfig = {
-
Type = "oneshot";
-
RemainAfterExit = true;
-
User = "root";
-
Group = "root";
-
};
-
script = ''
-
API_USER_NAME=api
-
API_TOKEN=${api_token} # random md5 hash
+
# systemd oneshot to create a dummy admin user and a API token for testing
+
systemd.services.lnms-api-init = {
+
description = "LibreNMS API init";
+
after = [ "librenms-setup.service" ];
+
wantedBy = [ "multi-user.target" ];
+
serviceConfig = {
+
Type = "oneshot";
+
RemainAfterExit = true;
+
User = "root";
+
Group = "root";
+
};
+
script = ''
+
API_USER_NAME=api
+
API_TOKEN=${api_token} # random md5 hash
-
# seeding database to get the admin roles
-
${pkgs.librenms}/artisan db:seed --force --no-interaction
+
# seeding database to get the admin roles
+
${pkgs.librenms}/artisan db:seed --force --no-interaction
-
# we don't need to know the password, it just has to exist
-
API_USER_PASS=$(${pkgs.pwgen}/bin/pwgen -s 64 1)
-
${pkgs.librenms}/artisan user:add $API_USER_NAME -r admin -p $API_USER_PASS
-
API_USER_ID=$(${pkgs.mariadb}/bin/mysql -D librenms -N -B -e "SELECT user_id FROM users WHERE username = '$API_USER_NAME';")
+
# we don't need to know the password, it just has to exist
+
API_USER_PASS=$(${pkgs.pwgen}/bin/pwgen -s 64 1)
+
${pkgs.librenms}/artisan user:add $API_USER_NAME -r admin -p $API_USER_PASS
+
API_USER_ID=$(${pkgs.mariadb}/bin/mysql -D librenms -N -B -e "SELECT user_id FROM users WHERE username = '$API_USER_NAME';")
-
${pkgs.mariadb}/bin/mysql -D librenms -e "INSERT INTO api_tokens (user_id, token_hash, description) VALUES ($API_USER_ID, '$API_TOKEN', 'API User')"
-
'';
-
};
+
${pkgs.mariadb}/bin/mysql -D librenms -e "INSERT INTO api_tokens (user_id, token_hash, description) VALUES ($API_USER_ID, '$API_TOKEN', 'API User')"
+
'';
};
+
};
-
nodes.snmphost = {
+
nodes.snmphost = {
-
services.snmpd = {
-
enable = true;
-
openFirewall = true;
+
services.snmpd = {
+
enable = true;
+
openFirewall = true;
-
configText = ''
-
com2sec readonly default public
+
configText = ''
+
com2sec readonly default public
-
group MyROGroup v2c readonly
-
view all included .1 80
-
access MyROGroup "" any noauth exact all none none
+
group MyROGroup v2c readonly
+
view all included .1 80
+
access MyROGroup "" any noauth exact all none none
-
syslocation Testcity, Testcountry
-
syscontact Testi mc Test <test@example.com>
-
'';
+
syslocation Testcity, Testcountry
+
syscontact Testi mc Test <test@example.com>
+
'';
-
};
};
+
};
-
testScript = ''
-
start_all()
+
testScript = ''
+
start_all()
-
snmphost.wait_for_unit("snmpd.service")
+
snmphost.wait_for_unit("snmpd.service")
-
librenms.wait_for_unit("lnms-api-init.service")
-
librenms.wait_for_open_port(80)
+
librenms.wait_for_unit("lnms-api-init.service")
+
librenms.wait_for_open_port(80)
-
# Test that we can authenticate against the API
-
librenms.succeed("curl --fail -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0")
-
librenms.fail("curl --fail -H 'X-Auth-Token: ${wrong_api_token}' http://localhost/api/v0")
+
# Test that we can authenticate against the API
+
librenms.succeed("curl --fail -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0")
+
librenms.fail("curl --fail -H 'X-Auth-Token: ${wrong_api_token}' http://localhost/api/v0")
-
# add snmphost as a device
-
librenms.succeed("curl --fail -X POST -d '{\"hostname\":\"snmphost\",\"version\":\"v2c\",\"community\":\"public\"}' -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0/devices")
+
# add snmphost as a device
+
librenms.succeed("curl --fail -X POST -d '{\"hostname\":\"snmphost\",\"version\":\"v2c\",\"community\":\"public\"}' -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0/devices")
-
# wait until snmphost gets polled
-
librenms.wait_until_succeeds("test $(curl -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0/devices/snmphost | jq -Mr .devices[0].last_polled) != 'null'")
-
'';
-
}
-
)
+
# wait until snmphost gets polled
+
librenms.wait_until_succeeds("test $(curl -H 'X-Auth-Token: ${api_token}' http://localhost/api/v0/devices/snmphost | jq -Mr .devices[0].last_polled) != 'null'")
+
'';
+
}
+20 -22
nixos/tests/lighttpd.nix
···
-
import ./make-test-python.nix (
-
{ lib, pkgs, ... }:
-
{
-
name = "lighttpd";
-
meta.maintainers = with lib.maintainers; [ bjornfor ];
+
{ lib, pkgs, ... }:
+
{
+
name = "lighttpd";
+
meta.maintainers = with lib.maintainers; [ bjornfor ];
-
nodes = {
-
server = {
-
services.lighttpd.enable = true;
-
services.lighttpd.document-root = pkgs.runCommand "document-root" { } ''
-
mkdir -p "$out"
-
echo "hello nixos test" > "$out/file.txt"
-
'';
-
};
+
nodes = {
+
server = {
+
services.lighttpd.enable = true;
+
services.lighttpd.document-root = pkgs.runCommand "document-root" { } ''
+
mkdir -p "$out"
+
echo "hello nixos test" > "$out/file.txt"
+
'';
};
+
};
-
testScript = ''
-
start_all()
-
server.wait_for_unit("lighttpd.service")
-
res = server.succeed("curl --fail http://localhost/file.txt")
-
assert "hello nixos test" in res, f"bad server response: '{res}'"
-
server.succeed("systemctl reload lighttpd")
-
'';
-
}
-
)
+
testScript = ''
+
start_all()
+
server.wait_for_unit("lighttpd.service")
+
res = server.succeed("curl --fail http://localhost/file.txt")
+
assert "hello nixos test" in res, f"bad server response: '{res}'"
+
server.succeed("systemctl reload lighttpd")
+
'';
+
}
+9 -2
nixos/tests/paretosecurity.nix
···
package = patchedPareto;
};
+
networking.firewall.enable = true;
+
};
nodes.dashboard =
···
services.displayManager.autoLogin = {
enable = true;
user = "alice";
+
+
};
+
+
virtualisation.resolution = {
+
x = 640;
+
y = 480;
};
environment.systemPackages = [ pkgs.xdotool ];
···
+ " --skip 21830a4e-84f1-48fe-9c5b-beab436b2cdb" # Disk encryption
+ " --skip 44e4754a-0b42-4964-9cc2-b88b2023cb1e" # Pareto Security is up to date
+ " --skip f962c423-fdf5-428a-a57a-827abc9b253e" # Password manager installed
-
+ " --skip 2e46c89a-5461-4865-a92e-3b799c12034a" # Firewall is enabled
+ "'"
)
···
]:
status, out = xfce.systemctl("is-enabled " + unit, "alice")
assert status == 0, f"Unit {unit} is not enabled (status: {status}): {out}"
-
xfce.succeed("xdotool mousemove 850 10")
+
xfce.succeed("xdotool mousemove 460 10")
xfce.wait_for_text("Pareto Security")
xfce.succeed("xdotool click 1")
xfce.wait_for_text("Run Checks")
+47
nixos/tests/pocket-id.nix
···
+
import ./make-test-python.nix (
+
{ lib, ... }:
+
+
{
+
name = "pocket-id";
+
meta.maintainers = with lib.maintainers; [
+
gepbird
+
ymstnt
+
];
+
+
nodes = {
+
machine =
+
{ ... }:
+
{
+
services.pocket-id = {
+
enable = true;
+
settings = {
+
PORT = 10001;
+
INTERNAL_BACKEND_URL = "http://localhost:10002";
+
BACKEND_PORT = 10002;
+
};
+
};
+
};
+
};
+
+
testScript =
+
{ nodes, ... }:
+
let
+
inherit (nodes.machine.services.pocket-id) settings;
+
inherit (builtins) toString;
+
in
+
''
+
machine.wait_for_unit("pocket-id-backend.service")
+
machine.wait_for_open_port(${toString settings.BACKEND_PORT})
+
machine.wait_for_unit("pocket-id-frontend.service")
+
machine.wait_for_open_port(${toString settings.PORT})
+
+
backend_status = machine.succeed("curl -L -o /tmp/backend-output -w '%{http_code}' http://localhost:${toString settings.BACKEND_PORT}/api/users/me")
+
assert backend_status == "401"
+
machine.succeed("grep 'You are not signed in' /tmp/backend-output")
+
+
frontend_status = machine.succeed("curl -L -o /tmp/frontend-output -w '%{http_code}' http://localhost:${toString settings.PORT}")
+
assert frontend_status == "200"
+
machine.succeed("grep 'Sign in to Pocket ID' /tmp/frontend-output")
+
'';
+
}
+
)
+42 -44
nixos/tests/starship.nix
···
-
import ./make-test-python.nix (
-
{ pkgs, ... }:
-
{
-
name = "starship";
-
meta.maintainers = pkgs.starship.meta.maintainers;
+
{ pkgs, ... }:
+
{
+
name = "starship";
+
meta.maintainers = pkgs.starship.meta.maintainers;
-
nodes.machine = {
-
programs = {
-
fish.enable = true;
-
zsh.enable = true;
+
nodes.machine = {
+
programs = {
+
fish.enable = true;
+
zsh.enable = true;
-
starship = {
-
enable = true;
-
settings.format = "<starship>";
-
};
+
starship = {
+
enable = true;
+
settings.format = "<starship>";
};
+
};
-
environment.systemPackages =
-
map
-
(
-
shell:
-
pkgs.writeScriptBin "expect-${shell}" ''
-
#!${pkgs.expect}/bin/expect -f
+
environment.systemPackages =
+
map
+
(
+
shell:
+
pkgs.writeScriptBin "expect-${shell}" ''
+
#!${pkgs.expect}/bin/expect -f
-
spawn env TERM=xterm ${shell} -i
+
spawn env TERM=xterm ${shell} -i
-
expect "<starship>" {
-
send "exit\n"
-
} timeout {
-
send_user "\n${shell} failed to display Starship\n"
-
exit 1
-
}
+
expect "<starship>" {
+
send "exit\n"
+
} timeout {
+
send_user "\n${shell} failed to display Starship\n"
+
exit 1
+
}
-
expect eof
-
''
-
)
-
[
-
"bash"
-
"fish"
-
"zsh"
-
];
-
};
+
expect eof
+
''
+
)
+
[
+
"bash"
+
"fish"
+
"zsh"
+
];
+
};
-
testScript = ''
-
start_all()
-
machine.wait_for_unit("default.target")
+
testScript = ''
+
start_all()
+
machine.wait_for_unit("default.target")
-
machine.succeed("expect-bash")
-
machine.succeed("expect-fish")
-
machine.succeed("expect-zsh")
-
'';
-
}
-
)
+
machine.succeed("expect-bash")
+
machine.succeed("expect-fish")
+
machine.succeed("expect-zsh")
+
'';
+
}
+21 -25
nixos/tests/tuxguitar.nix
···
-
import ./make-test-python.nix (
-
{ pkgs, ... }:
-
{
-
name = "tuxguitar";
-
meta = with pkgs.lib.maintainers; {
-
maintainers = [ ];
-
};
+
{ ... }:
+
{
+
name = "tuxguitar";
+
meta.maintainers = [ ];
-
nodes.machine =
-
{ config, pkgs, ... }:
-
{
-
imports = [
-
./common/x11.nix
-
];
+
nodes.machine =
+
{ config, pkgs, ... }:
+
{
+
imports = [
+
./common/x11.nix
+
];
-
services.xserver.enable = true;
+
services.xserver.enable = true;
-
environment.systemPackages = [ pkgs.tuxguitar ];
-
};
+
environment.systemPackages = [ pkgs.tuxguitar ];
+
};
-
testScript = ''
-
machine.wait_for_x()
-
machine.succeed("tuxguitar >&2 &")
-
machine.wait_for_window("TuxGuitar - Untitled.tg")
-
machine.sleep(1)
-
machine.screenshot("tuxguitar")
-
'';
-
}
-
)
+
testScript = ''
+
machine.wait_for_x()
+
machine.succeed("tuxguitar >&2 &")
+
machine.wait_for_window("TuxGuitar - Untitled.tg")
+
machine.sleep(1)
+
machine.screenshot("tuxguitar")
+
'';
+
}
+4 -2
pkgs/applications/networking/browsers/firefox/wrapper.nix
···
+ lib.optionalString isDarwin ''
cd "${appPath}"
-
# These files have to be copied and not symlinked, otherwise tabs crash.
+
# The omni.ja files have to be copied and not symlinked, otherwise tabs crash.
# Maybe related to how omni.ja file is mmapped into memory. See:
# https://github.com/mozilla/gecko-dev/blob/b1662b447f306e6554647914090d4b73ac8e1664/modules/libjar/nsZipArchive.cpp#L204
-
for file in $(find . -type l -name "omni.ja"); do
+
#
+
# The *.dylib files are copied, otherwise some basic functionality, e.g. Crypto API, is broken.
+
for file in $(find . -name "omni.ja" -o -name "*.dylib"); do
rm "$file"
cp "${browser}/${appPath}/$file" "$file"
done
+2 -2
pkgs/applications/networking/feedreaders/rssguard/default.nix
···
stdenv.mkDerivation rec {
pname = "rssguard";
-
version = "4.8.1";
+
version = "4.8.2";
src = fetchFromGitHub {
owner = "martinrotter";
repo = pname;
tag = version;
-
sha256 = "sha256-qWxcjGl4EaLXZ0q6RVy+IKyBcqlx/yYojlGivSXy5Io=";
+
sha256 = "sha256-C5iA5qK8+FhCUeFtyskY/vd4evaYS3TY1SHAc83/36w=";
};
buildInputs = [
+7 -4
pkgs/by-name/ar/archtika/package.nix
···
}:
let
-
version = "1.2.0";
+
version = "1.2.1";
src = fetchFromGitHub {
owner = "archtika";
repo = "archtika";
tag = "v${version}";
-
hash = "sha256-ba9da7LqCE/e2lhRVHD7GOhwOj1fNTBbN/pARPMzIg4=";
+
hash = "sha256-GffYAtLs12v2Lt1WoKJOG5dZsmzDcySZKFBQwCT9nnY=";
};
web = buildNpmPackage {
name = "web-app";
src = "${src}/web-app";
-
npmDepsHash = "sha256-RTyo7K/Hr1hBGtcBKynrziUInl91JqZl84NkJg16ufA=";
+
npmDepsHash = "sha256-2udi8vLLvdoZxIyRKLOCfEpEMsooxsIrM1wiua1QPAI=";
npmFlags = [ "--legacy-peer-deps" ];
installPhase = ''
mkdir -p $out/web-app
···
api
];
-
passthru.updateScript = nix-update-script { };
+
passthru = {
+
inherit src web;
+
updateScript = nix-update-script { };
+
};
meta = {
description = "Modern, performant and lightweight CMS";
+2 -2
pkgs/by-name/az/azure-cli/package.nix
···
}:
let
-
version = "2.70.0";
+
version = "2.71.0";
src = fetchFromGitHub {
name = "azure-cli-${version}-src";
owner = "Azure";
repo = "azure-cli";
rev = "azure-cli-${version}";
-
hash = "sha256-vvX/LkG8qA53AxVlvq7FSTqbVblvE5xbDq4V0SINCAk=";
+
hash = "sha256-vtuDgj3UJCmKxYg0OgG59ezQh7HlscNywz61BHDzJF8=";
};
# put packages that needs to be overridden in the py package scope
+2 -2
pkgs/by-name/az/azurehound/package.nix
···
buildGoModule rec {
pname = "azurehound";
-
version = "2.3.0";
+
version = "2.3.1";
src = fetchFromGitHub {
owner = "SpecterOps";
repo = "AzureHound";
tag = "v${version}";
-
hash = "sha256-BbwQ3u1SD4AjNjHzT6QB0x7QJAZ59m1DtvhjZapLIx4=";
+
hash = "sha256-12ae0y3hjeNPwB33J+XP26h+JfFN5M8+bF8CSon1jp4=";
};
vendorHash = "sha256-FG3207OTzkMEoSvQsTH7Ky9T3ur7glG7k0ERfd12SO0=";
+3 -3
pkgs/by-name/ca/cariddi/package.nix
···
buildGoModule rec {
pname = "cariddi";
-
version = "1.3.5";
+
version = "1.3.6";
src = fetchFromGitHub {
owner = "edoardottt";
repo = "cariddi";
tag = "v${version}";
-
hash = "sha256-mRrUTRknax3b4hs3frQMzg0GyB3WjMDZJk0RQSAC88U=";
+
hash = "sha256-ixjHPO0FXKbWOfjMVz1YD+wWpL8wcn2CCO46KF1zb0U=";
};
-
vendorHash = "sha256-ML1aLbrYhs2IxnN2ywKFOpvAV6yuYb8GI+dtoxwJl4A=";
+
vendorHash = "sha256-7v92+iDAYG0snJjVCX35rLKV/ZEzaVX2au4HOwa/ILU=";
ldflags = [
"-w"
+24 -5
pkgs/by-name/co/copilot-language-server/package.nix
···
{
lib,
stdenvNoCC,
+
buildFHSEnv,
fetchzip,
nix-update-script,
}:
···
}
."${stdenvNoCC.hostPlatform.system}"
or (throw "Unsupported system: ${stdenvNoCC.hostPlatform.system}");
+
+
executableName = "copilot-language-server";
+
fhs =
+
{ package }:
+
buildFHSEnv {
+
name = package.meta.mainProgram;
+
version = package.version;
+
targetPkgs = pkgs: [ pkgs.stdenv.cc.cc.lib ];
+
runScript = lib.getExe package;
+
+
meta = package.meta // {
+
description =
+
package.meta.description
+
+ " (FHS-wrapped, expand package details for further information when to use it)";
+
longDescription = "Use this version if you encounter an error like `Could not start dynamically linked executable` or `SyntaxError: Invalid or unexpected token` (see nixpkgs issue [391730](https://github.com/NixOS/nixpkgs/issues/391730)).";
+
};
+
};
in
-
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "copilot-language-server";
version = "1.294.0";
···
stripRoot = false;
};
-
npmDepsHash = "sha256-PLX/mN7xu8gMh2BkkyTncP3+rJ3nBmX+pHxl0ONXbe4=";
installPhase = ''
runHook preInstall
-
install -Dt "$out"/bin "${os}-${arch}"/copilot-language-server
+
install "${os}-${arch}/${executableName}" -Dm755 -t "$out"/bin
runHook postInstall
'';
dontStrip = true;
-
passthru.updateScript = nix-update-script { };
+
passthru = {
+
updateScript = nix-update-script { };
+
fhs = fhs { package = finalAttrs.finalPackage; };
+
};
meta = {
description = "Use GitHub Copilot with any editor or IDE via the Language Server Protocol";
···
shortName = "GitHub Copilot License";
url = "https://github.com/customer-terms/github-copilot-product-specific-terms";
};
-
mainProgram = "copilot-language-server";
+
mainProgram = executableName;
platforms = [
"x86_64-linux"
"aarch64-linux"
+2 -2
pkgs/by-name/er/erlang-language-platform/package.nix
···
hashes = {
linux-aarch64-unknown-linux-gnu = "sha256-i6XsOK8csrJ/9TDzltA7mGjdutLZONFiYGV5tqSCy8o=";
-
linux-x86_64-unknown-linux-gnu = "sha256-gBIzG0LaP9qxivkr47JpBu1z9km7o/1Wppk/6k2WslE=";
+
linux-x86_64-unknown-linux-gnu = "sha256-XK3DPWIdPDoIL10EATa8p1bnlpZaOzOdU0LnuKbj++E=";
macos-aarch64-apple-darwin = "sha256-8e5duQYDVFyZejMjuZPuWhg1on3CBku9eBuilG5p1BY=";
macos-x86_64-apple-darwin = "sha256-dnouUBUUAkMr1h+IJWYamxmk8IC7JdeIUS9/YI0GzOU=";
};
in
stdenv.mkDerivation rec {
pname = "erlang-language-platform";
-
version = "2025-02-13";
+
version = "2025-04-02";
src = fetchurl {
url = "https://github.com/WhatsApp/erlang-language-platform/releases/download/${version}/elp-${release}-otp-26.2.tar.gz";
+7
pkgs/by-name/go/gojq/package.nix
···
fetchFromGitHub,
testers,
gojq,
+
installShellFiles,
}:
buildGoModule rec {
···
"-s"
"-w"
];
+
+
nativeBuildInputs = [ installShellFiles ];
+
+
postInstall = ''
+
installShellCompletion --cmd gojq --zsh _gojq
+
'';
passthru.tests.version = testers.testVersion {
package = gojq;
+3 -3
pkgs/by-name/go/gosec/package.nix
···
buildGoModule rec {
pname = "gosec";
-
version = "2.22.2";
+
version = "2.22.3";
src = fetchFromGitHub {
owner = "securego";
repo = pname;
rev = "v${version}";
-
hash = "sha256-j9MRMtINGPn4Hn9Z3+19/Q+Weu277WVONXKtJf9x5Cc=";
+
hash = "sha256-MQ/dDK2t9H7bSsr5MMtlKySLAJIDimRbpATHyOYxrBo=";
};
-
vendorHash = "sha256-lZFTmf4/J3NDdawfp2WpPoaVxepbyazIyC8ahOwPcZo=";
+
vendorHash = "sha256-R1w+dHx3Aond6DmwCHRVZXmUABWfpsbLgcDW67Ukz0E=";
subPackages = [
"cmd/gosec"
+2 -2
pkgs/by-name/gr/grafana-loki/package.nix
···
}:
buildGoModule rec {
-
version = "3.4.2";
+
version = "3.4.3";
pname = "grafana-loki";
src = fetchFromGitHub {
owner = "grafana";
repo = "loki";
rev = "v${version}";
-
hash = "sha256-GE92NlFCOk6qFtrgeBvLDI0OkmWaJ1j07Q14+jgi9+w=";
+
hash = "sha256-1tI9X2eIKuWEWJBbN4UAw8yeRrjgfqcenJyTNMk5rqU=";
};
vendorHash = null;
+14 -15
pkgs/by-name/jn/jnv/package.nix
···
lib,
rustPlatform,
fetchFromGitHub,
-
stdenv,
-
darwin,
+
versionCheckHook,
+
nix-update-script,
}:
-
rustPlatform.buildRustPackage rec {
+
+
rustPlatform.buildRustPackage (finalAttrs: {
pname = "jnv";
version = "0.6.0";
src = fetchFromGitHub {
owner = "ynqa";
repo = "jnv";
-
rev = "v${version}";
+
tag = "v${finalAttrs.version}";
hash = "sha256-HKZ+hF5Y7vTA4EODSAd9xYJHaipv5YukTl470ejPLtM=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-VLVoURqmUhhekNZ0a75bwjvSiLfaQ79IlltbmWVyBrI=";
-
buildInputs = lib.optional stdenv.hostPlatform.isDarwin (
-
with darwin.apple_sdk.frameworks;
-
[
-
CoreGraphics
-
AppKit
-
]
-
);
+
nativeInstallCheckInputs = [ versionCheckHook ];
+
versionCheckProgramArg = "--version";
+
doInstallCheck = true;
+
+
passthru.updateScript = nix-update-script { };
-
meta = with lib; {
+
meta = {
description = "Interactive JSON filter using jq";
mainProgram = "jnv";
homepage = "https://github.com/ynqa/jnv";
-
license = with licenses; [ mit ];
-
maintainers = with maintainers; [
+
license = with lib.licenses; [ mit ];
+
maintainers = with lib.maintainers; [
nealfennimore
nshalman
];
};
-
}
+
})
+3 -3
pkgs/by-name/ka/kanata/package.nix
···
}:
rustPlatform.buildRustPackage rec {
pname = "kanata";
-
version = "1.8.0";
+
version = "1.8.1";
src = fetchFromGitHub {
owner = "jtroo";
repo = "kanata";
rev = "v${version}";
-
sha256 = "sha256-RTFP063NGNfjlOlZ4wghpcUQEmmj73Xlu3KPIxeUI/I=";
+
sha256 = "sha256-w/PeSqj51gJOWmAV5UPMprntdzinX/IL49D2ZUMfeSM=";
};
useFetchCargoVendor = true;
-
cargoHash = "sha256-/r4u7pM7asCvG3LkbuP1Y63WVls1uZtV/L3cSOzUXr4=";
+
cargoHash = "sha256-T9fZxv3aujYparzVphfYBJ+5ti/T1VkeCeCqWPyllY8=";
buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
apple-sdk_13
+2 -2
pkgs/by-name/mi/mill/package.nix
···
stdenv.mkDerivation (finalAttrs: {
pname = "mill";
-
version = "0.12.9";
+
version = "0.12.10";
src = fetchurl {
url = "https://repo1.maven.org/maven2/com/lihaoyi/mill-dist/${finalAttrs.version}/mill-dist-${finalAttrs.version}-assembly.jar";
-
hash = "sha256-Ntqzivy8dfsRlBclPNsWOZ4h1Xk7D3UJV7GLVGIEcAU=";
+
hash = "sha256-TESwISFz4Xf/F4kgnaTQbi/uVrc75bearih8mydPqHM=";
};
nativeBuildInputs = [ makeWrapper ];
+41 -43
pkgs/by-name/ni/nix-update/package.nix
···
nix-prefetch-git,
nixpkgs-review,
python3Packages,
+
nix-update,
}:
-
let
-
self = python3Packages.buildPythonApplication {
-
pname = "nix-update";
-
version = "1.10.0";
-
pyproject = true;
+
python3Packages.buildPythonApplication rec {
+
pname = "nix-update";
+
version = "1.11.0";
+
pyproject = true;
-
src = fetchFromGitHub {
-
owner = "Mic92";
-
repo = "nix-update";
-
tag = self.version;
-
hash = "sha256-fGs/EdCEoDA9N5gPtHU6CaDZo9e/aqW6pm6atsjK7PI=";
-
};
+
src = fetchFromGitHub {
+
owner = "Mic92";
+
repo = "nix-update";
+
tag = version;
+
hash = "sha256-G5YehePEMhTgxCnLp8Dg+bDHvOe+QltlCkQHVwMtYx0=";
+
};
-
build-system = [ python3Packages.setuptools ];
+
build-system = [ python3Packages.setuptools ];
-
makeWrapperArgs = [
-
"--prefix"
-
"PATH"
-
":"
-
(lib.makeBinPath [
-
nix
-
nix-prefetch-git
-
nixpkgs-review
-
])
-
];
+
makeWrapperArgs = [
+
"--prefix"
+
"PATH"
+
":"
+
(lib.makeBinPath [
+
nix
+
nix-prefetch-git
+
nixpkgs-review
+
])
+
];
-
checkPhase = ''
-
runHook preCheck
+
checkPhase = ''
+
runHook preCheck
-
$out/bin/nix-update --help >/dev/null
+
$out/bin/nix-update --help >/dev/null
-
runHook postCheck
-
'';
+
runHook postCheck
+
'';
-
passthru = {
-
nix-update-script = callPackage ./nix-update-script.nix { nix-update = self; };
-
};
+
passthru = {
+
nix-update-script = callPackage ./nix-update-script.nix { inherit nix-update; };
+
};
-
meta = {
-
description = "Swiss-knife for updating nix packages";
-
homepage = "https://github.com/Mic92/nix-update/";
-
changelog = "https://github.com/Mic92/nix-update/releases/tag/${self.version}";
-
license = lib.licenses.mit;
-
maintainers = with lib.maintainers; [
-
figsoda
-
mic92
-
];
-
mainProgram = "nix-update";
-
};
+
meta = {
+
description = "Swiss-knife for updating nix packages";
+
homepage = "https://github.com/Mic92/nix-update/";
+
changelog = "https://github.com/Mic92/nix-update/releases/tag/${version}";
+
license = lib.licenses.mit;
+
maintainers = with lib.maintainers; [
+
figsoda
+
mic92
+
];
+
mainProgram = "nix-update";
};
-
in
-
self
+
}
+1 -1
pkgs/by-name/ni/nixfmt-rfc-style/date.txt
···
-
2025-03-03
+
2025-04-04
+2 -2
pkgs/by-name/ni/nixfmt-rfc-style/generated-package.nix
···
pname = "nixfmt";
version = "0.6.0";
src = fetchzip {
-
url = "https://github.com/nixos/nixfmt/archive/3261d1016ecc753c59ff92767a257f91b587e705.tar.gz";
-
sha256 = "0jk6mgp710iwxyc7wa5kzz0p0rpcwbbs21smnv14cyii0jniz42s";
+
url = "https://github.com/nixos/nixfmt/archive/65af4b69133d19f534d97746c97c2d5b464f43b4.tar.gz";
+
sha256 = "0l0w3janvss1n1j7qkcml97zndm2jm2gbrzzs9d8l0ixnrw0cd5r";
};
isLibrary = true;
isExecutable = true;
+3 -3
pkgs/by-name/on/onlyoffice-documentserver/package.nix
···
mkdir -p var/lib/onlyoffice/ var/www/onlyoffice/documentserver/fonts/
# see usr/bin/documentserver-flush-cache.sh
-
cp var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js.tpl var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js
-
HASH=$(basename $out | cut -d '-' -f 1)
-
sed -i "s/{{HASH_POSTFIX}}/$HASH/g" var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js
+
cp var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js{.tpl,}
+
substituteInPlace var/www/onlyoffice/documentserver/web-apps/apps/api/documents/api.js \
+
--replace-fail '{{HASH_POSTFIX}}' "$(basename $out | cut -d '-' -f 1)"
mv * $out/
'';
+3 -3
pkgs/by-name/pa/paretosecurity/package.nix
···
buildGoModule rec {
pname = "paretosecurity";
-
version = "0.0.96";
+
version = "0.1.3";
src = fetchFromGitHub {
owner = "ParetoSecurity";
repo = "agent";
rev = version;
-
hash = "sha256-SyeIGSDvrnOvyOJ0zC8CulpaMa+iZeRaMTJUSydz2tw=";
+
hash = "sha256-ovyfHqLCf5U3UR1HfoA+UQhqLZ6IaILcpqptPRQsb60=";
};
-
vendorHash = "sha256-O/OF3Y6HiiikMxf657k9eIM7UfkicIImAUxVVf/TgR8=";
+
vendorHash = "sha256-7mKAFkKGpBOjXc3J/sfF3k3pJF53tFybXZgbfJInuSY=";
proxyVendor = true;
ldflags = [
+2 -2
pkgs/by-name/pl/plemoljp-hs/package.nix
···
stdenvNoCC.mkDerivation rec {
pname = "plemoljp-hs";
-
version = "2.0.3";
+
version = "2.0.4";
src = fetchzip {
url = "https://github.com/yuru7/PlemolJP/releases/download/v${version}/PlemolJP_HS_v${version}.zip";
-
hash = "sha256-rKWZMIK6TP6IV6KjFGuZE2S6IiMtjtHZeWM44tULduk=";
+
hash = "sha256-+pRbMgRaIbsXo8e7rQre377F8LhbK9rBjG/vYrdeFQM=";
};
installPhase = ''
+2 -2
pkgs/by-name/pl/plemoljp/package.nix
···
stdenvNoCC.mkDerivation rec {
pname = "plemoljp";
-
version = "2.0.3";
+
version = "2.0.4";
src = fetchzip {
url = "https://github.com/yuru7/PlemolJP/releases/download/v${version}/PlemolJP_v${version}.zip";
-
hash = "sha256-cT2BpD2PoAd38uYCQlq5fv9NYgwInblrYdK/XDEmOWI=";
+
hash = "sha256-pajE86IK05mm3Z507bvoMGy8JJwuGWZnUiSrXndiBTk=";
};
installPhase = ''
+119
pkgs/by-name/po/pocket-id/package.nix
···
+
{
+
lib,
+
fetchFromGitHub,
+
buildGoModule,
+
buildNpmPackage,
+
fetchurl,
+
makeWrapper,
+
nodejs,
+
stdenvNoCC,
+
nixosTests,
+
nix-update-script,
+
}:
+
+
let
+
version = "0.45.0";
+
src = fetchFromGitHub {
+
owner = "pocket-id";
+
repo = "pocket-id";
+
tag = "v${version}";
+
hash = "sha256-x5Y3ArkIPxiE6avk9DNyFdfkc/pY6h3JH3PZCS8U/GM=";
+
};
+
+
backend = buildGoModule {
+
pname = "pocket-id-backend";
+
inherit version src;
+
+
sourceRoot = "${src.name}/backend";
+
+
vendorHash = "sha256-mqpBP+A2X5ome1Ppg/Kki0C+A77jFtWzUjI/RN+ZCzg=";
+
+
preFixup = ''
+
mv $out/bin/cmd $out/bin/pocket-id-backend
+
'';
+
};
+
+
frontend = buildNpmPackage (finalAttrs: {
+
pname = "pocket-id-frontend";
+
inherit version src;
+
+
sourceRoot = "${src.name}/frontend";
+
+
npmDepsHash = "sha256-cpmZzlz+wusfRLN4iIGdk+I4SWrX/gk2fbhg+Gg3paw=";
+
npmFlags = [ "--legacy-peer-deps" ];
+
+
nativeBuildInputs = [
+
makeWrapper
+
];
+
+
installPhase = ''
+
runHook preInstall
+
+
# even though vite build creates most of the minified js files,
+
# it still needs a few packages from node_modules, try to strip that
+
npm prune --omit=dev --omit=optional $npmFlags
+
# larger seemingly unused packages
+
rm -r node_modules/{lucide-svelte,bits-ui,jiti,@swc,.bin}
+
# unused file types
+
for pattern in '*.map' '*.map.js' '*.ts'; do
+
find . -type f -name "$pattern" -exec rm {} +
+
done
+
+
mkdir -p $out/{bin,lib/pocket-id-frontend}
+
cp -r build $out/lib/pocket-id-frontend/dist
+
cp -r node_modules $out/lib/pocket-id-frontend/node_modules
+
makeWrapper ${lib.getExe nodejs} $out/bin/pocket-id-frontend \
+
--add-flags $out/lib/pocket-id-frontend/dist/index.js
+
+
runHook postInstall
+
'';
+
});
+
+
in
+
stdenvNoCC.mkDerivation rec {
+
pname = "pocket-id";
+
inherit
+
version
+
src
+
backend
+
frontend
+
;
+
+
dontUnpack = true;
+
+
installPhase = ''
+
runHook preInstall
+
+
mkdir -p $out/bin
+
ln -s ${backend}/bin/pocket-id-backend $out/bin/pocket-id-backend
+
ln -s ${frontend}/bin/pocket-id-frontend $out/bin/pocket-id-frontend
+
+
runHook postInstall
+
'';
+
+
passthru = {
+
tests = {
+
inherit (nixosTests) pocket-id;
+
};
+
updateScript = nix-update-script {
+
extraArgs = [
+
"--subpackage"
+
"backend"
+
"--subpackage"
+
"frontend"
+
];
+
};
+
};
+
+
meta = {
+
description = "OIDC provider with passkeys support";
+
homepage = "https://pocket-id.org";
+
changelog = "https://github.com/pocket-id/pocket-id/releases/tag/v${version}";
+
license = lib.licenses.bsd2;
+
maintainers = with lib.maintainers; [
+
gepbird
+
ymstnt
+
];
+
platforms = lib.platforms.unix;
+
};
+
}
+3
pkgs/by-name/rd/rdkafka/package.nix
···
curl,
cmake,
ninja,
+
deterministic-host-uname,
}:
stdenv.mkDerivation (finalAttrs: {
···
nativeBuildInputs = [
cmake
ninja
+
# cross: build system uses uname to determine host system
+
deterministic-host-uname
];
buildInputs = [
+2 -2
pkgs/by-name/ti/tippecanoe/package.nix
···
stdenv.mkDerivation (finalAttrs: {
pname = "tippecanoe";
-
version = "2.75.1";
+
version = "2.77.0";
src = fetchFromGitHub {
owner = "felt";
repo = "tippecanoe";
tag = finalAttrs.version;
-
hash = "sha256-rBuk34lOrp9aW7yK0LOTRqFJg3J8IogR01kcFhgK12Y=";
+
hash = "sha256-7yRrUn1U0iERlix/8/oaMaizlpzqdiSIHj298ykaJjE=";
};
buildInputs = [
+2 -2
pkgs/by-name/yt/ytui-music/package.nix
···
stdenv,
darwin,
mpv,
-
youtube-dl,
+
yt-dlp,
makeBinaryWrapper,
}:
···
postInstall = ''
wrapProgram $out/bin/ytui_music \
-
--prefix PATH : ${lib.makeBinPath [ youtube-dl ]}
+
--prefix PATH : ${lib.makeBinPath [ yt-dlp ]}
'';
doInstallCheck = true;
+3 -3
pkgs/by-name/zw/zwave-js-ui/package.nix
···
buildNpmPackage rec {
pname = "zwave-js-ui";
-
version = "9.32.0";
+
version = "10.1.2";
src = fetchFromGitHub {
owner = "zwave-js";
repo = "zwave-js-ui";
tag = "v${version}";
-
hash = "sha256-DZm3IoLc28YMbwWL6+qHd5BSyRQswRatEvGmwuIzBZM=";
+
hash = "sha256-j56kDnMw/YX6ONkIjPjopsu6xE2Kt1cZV5u+tX2TqlM=";
};
-
npmDepsHash = "sha256-FZ/iStpC5DiNthV42/QAzek261ZUAL1DOEIixVlArZ0=";
+
npmDepsHash = "sha256-hkfDztDtLug9qdxi9NRWnzCN6Parv27stVknZ0cSYpo=";
passthru.tests.zwave-js-ui = nixosTests.zwave-js-ui;
+2 -2
pkgs/development/beam-modules/erlfmt/default.nix
···
rebar3Relx rec {
pname = "erlfmt";
-
version = "1.6.0";
+
version = "1.6.1";
releaseType = "escript";
src = fetchFromGitHub {
owner = "WhatsApp";
repo = "erlfmt";
-
sha256 = "sha256-p4cdnKDY02XqdFOkijhOo527eZenfMF8J2dbuvH/hcY=";
+
sha256 = "sha256-O7+7dMgmnNd9hHuRcJqMAI0gmONz5EO3qSlUC3tufh0=";
rev = "v${version}";
};
meta = with lib; {
+2 -2
pkgs/development/interpreters/erlang/27.nix
···
{ mkDerivation }:
mkDerivation {
-
version = "27.3.1";
-
sha256 = "sha256-VuVRwcS2TgDYT7buLMHOe8r0AWM+R9DxydcHErAy8xw=";
+
version = "27.3.2";
+
sha256 = "sha256-Pybkcm3pLt0wV+S9ia/BAmM1AKp/nVSAckEzNn4KjSg=";
}
+5 -2
pkgs/development/python-modules/aider-chat/default.nix
···
torch,
nltk,
boto3,
+
nix-update-script,
}:
let
···
];
};
-
version = "0.80.0";
+
version = "0.81.0";
aider-chat = buildPythonPackage {
pname = "aider-chat";
inherit version;
···
owner = "Aider-AI";
repo = "aider";
tag = "v${version}";
-
hash = "sha256-W3GO5+0rprQHmn1upL3pcXuv2e9Wir6TW0tUnvZj48E=";
+
hash = "sha256-xWOXsffLAVBZvJM8PuAJ12IrmNLfXuqHrbIMtPM1leE=";
};
pythonRelaxDeps = true;
···
makeWrapperArgs = makeWrapperArgs ++ playwrightArgs ++ helpArgs;
}
);
+
+
updateScript = nix-update-script { };
};
meta = {
+2 -1
pkgs/development/python-modules/azure-mgmt-keyvault/default.nix
···
disabled = pythonOlder "3.8";
src = fetchPypi {
-
inherit pname version;
+
pname = "azure_mgmt_keyvault";
+
inherit version;
hash = "sha256-/PsTZoUpJvKjEeG8bmp4brioof1G5gJdTBFO3iy0ZC4=";
};
+2 -2
pkgs/development/python-modules/microsoft-security-utilities-secret-masker/default.nix
···
buildPythonPackage rec {
pname = "microsoft-security-utilities-secret-masker";
-
version = "1.0.0b3";
+
version = "1.0.0b4";
pyproject = true;
src = fetchPypi {
pname = "microsoft_security_utilities_secret_masker";
inherit version;
-
hash = "sha256-0EVIIwxno70stGCyjnH+bKwWj0jwbXapadnKR732c0M=";
+
hash = "sha256-owvTYawYyLUvaEQHa8JkZTNZSeqcegBNlfUZbsb97z4=";
};
build-system = [
+2 -2
pkgs/development/python-modules/posthog/default.nix
···
buildPythonPackage rec {
pname = "posthog";
-
version = "3.18.1";
+
version = "3.23.0";
pyproject = true;
src = fetchFromGitHub {
owner = "PostHog";
repo = "posthog-python";
tag = "v${version}";
-
hash = "sha256-1jJACzDf8J4Vsrvtj0PgeK1Ck2Bzy5ThHm0Ohd+LyYs=";
+
hash = "sha256-+nmCmO1vPnNgZJdZSWwapeFfckNXEcdc/129yaLygf8=";
};
build-system = [ setuptools ];
+3 -3
pkgs/development/python-modules/xiaomi-ble/default.nix
···
buildPythonPackage rec {
pname = "xiaomi-ble";
-
version = "0.35.0";
+
version = "0.36.0";
pyproject = true;
disabled = pythonOlder "3.9";
···
owner = "Bluetooth-Devices";
repo = "xiaomi-ble";
tag = "v${version}";
-
hash = "sha256-+mXn5R9zRjTPKqzB0vFHSO2+Jx+61K7/Ksp+jmMUDo4=";
+
hash = "sha256-qk8eoPuyU8deEuQkRRtTt1AxIpjaXaS/byDxMfZnLgI=";
};
build-system = [ poetry-core ];
···
meta = with lib; {
description = "Library for Xiaomi BLE devices";
homepage = "https://github.com/Bluetooth-Devices/xiaomi-ble";
-
changelog = "https://github.com/Bluetooth-Devices/xiaomi-ble/releases/tag/v${version}";
+
changelog = "https://github.com/Bluetooth-Devices/xiaomi-ble/releases/tag/${src.tag}";
license = licenses.mit;
maintainers = with maintainers; [ fab ];
};
+1 -1
pkgs/os-specific/linux/kernel/htmldocs.nix
···
patchShebangs \
Documentation/sphinx/parse-headers.pl \
scripts/{get_abi.pl,get_feat.pl,kernel-doc,sphinx-pre-install} \
-
tools/net/ynl/ynl-gen-rst.py
+
tools/net/ynl/pyynl/ynl_gen_rst.py
'';
FONTCONFIG_FILE = makeFontsConf {
+12
pkgs/servers/home-assistant/default.nix
···
];
});
+
# Pinned due to home-assistant still needing 1.10.0 verison
+
# Remove this when home-assistant upates the jellyfin-apiclient-python version
+
jellyfin-apiclient-python = super.jellyfin-apiclient-python.overridePythonAttrs (oldAttrs: rec {
+
version = "1.10.0";
+
src = fetchFromGitHub {
+
owner = "jellyfin";
+
repo = "jellyfin-apiclient-python";
+
tag = "v${version}";
+
hash = "sha256-H1FqypNuVIZ17cFdNDEmmKICswxJkUGq2LhlingbCVk=";
+
};
+
});
+
# acme and thus hass-nabucasa doesn't support josepy v2
# https://github.com/certbot/certbot/issues/10185
josepy = super.josepy.overridePythonAttrs (old: rec {
+2 -2
pkgs/tools/security/trufflehog/default.nix
···
buildGoModule rec {
pname = "trufflehog";
-
version = "3.88.20";
+
version = "3.88.21";
src = fetchFromGitHub {
owner = "trufflesecurity";
repo = "trufflehog";
tag = "v${version}";
-
hash = "sha256-JLBHg1hCTOOBRTJbjXJitILD/HSmH1WDuzm0t3/OJaA=";
+
hash = "sha256-hUBUpsfVKifeQ9DpeNKwBGnoLH1OK2T4IOb7yFWxz+Q=";
};
vendorHash = "sha256-vJl2gIS14NA9nV9j+81xKv3NnsDce4V7XoeipOZV+wI=";
+3 -4
pkgs/tools/virtualization/mkosi/default.nix
···
lib,
fetchFromGitHub,
stdenv,
+
python,
systemd,
pandoc,
kmod,
···
replaceVars,
# Python packages
-
python,
setuptools,
setuptools-scm,
wheel,
buildPythonApplication,
pytestCheckHook,
-
pefile,
# Optional dependencies
withQemu ? false,
···
withKernelInstall = true;
};
-
python3pefile = python.withPackages (_: [ pefile ]);
+
pythonWithPefile = python.withPackages (ps: [ ps.pefile ]);
deps =
[
···
[
(replaceVars ./0001-Use-wrapped-binaries-instead-of-Python-interpreter.patch {
UKIFY = "${systemdForMkosi}/lib/systemd/ukify";
-
PYTHON_PEFILE = "${python3pefile}/bin/python3.12";
+
PYTHON_PEFILE = lib.getExe pythonWithPefile;
NIX_PATH = toString (lib.makeBinPath deps);
MKOSI_SANDBOX = null; # will be replaced in postPatch
})
+2
pkgs/top-level/all-packages.nix
···
coolercontrol = recurseIntoAttrs (callPackage ../applications/system/coolercontrol { });
+
copilot-language-server-fhs = copilot-language-server.fhs;
+
curv = callPackage ../by-name/cu/curv/package.nix {
openexr = openexr_3;
};