Merge staging-next into staging
This commit is contained in:
@@ -249,6 +249,8 @@
|
||||
|
||||
- All Xfce packages have been moved to top level (e.g. if you previously added `pkgs.xfce.xfce4-whiskermenu-plugin` to `environment.systemPackages`, you will need to change it to `pkgs.xfce4-whiskermenu-plugin`). The `xfce` scope will be removed in NixOS 26.11.
|
||||
|
||||
- The Dovecot IMAP server has been updated to version 2.4, with the `dovecot` attribute now referring to this backwards-incompatible version. The attribute `dovecot_2_3` refers to the previous version. The Pigeonhole plugin has been similarly updated to 2.4, with the version compatible with Dovecot 2.3 being at `dovecot_pigeonhole_0_5`. See <https://doc.dovecot.org/latest/installation/upgrade/2.3-to-2.4.html> for more information on how to upgrade.
|
||||
|
||||
- `spacefm` was removed because it appeared to be unmaintained upstream.
|
||||
|
||||
- `vimPlugins.nvim-treesitter` has been updated to `main` branch, which is a full and incompatible rewrite. If you can't or don't want to update, you should use `vimPlugins.nvim-treesitter-legacy`.
|
||||
|
||||
@@ -5692,6 +5692,11 @@
|
||||
name = "Serg Nesterov";
|
||||
keys = [ { fingerprint = "6E7D BA30 DB5D BA60 693C 3BE3 1512 F6EB 84AE CC8C"; } ];
|
||||
};
|
||||
cvengler = {
|
||||
name = "Clara Engler";
|
||||
github = "cvengler";
|
||||
githubId = 12272949;
|
||||
};
|
||||
cwoac = {
|
||||
email = "oliver@codersoffortune.net";
|
||||
github = "cwoac";
|
||||
@@ -10905,12 +10910,6 @@
|
||||
githubId = 44043764;
|
||||
name = "Liam Hupfer";
|
||||
};
|
||||
hqurve = {
|
||||
email = "hqurve@outlook.com";
|
||||
github = "hqurve";
|
||||
githubId = 53281855;
|
||||
name = "hqurve";
|
||||
};
|
||||
hraban = {
|
||||
email = "hraban@0brg.net";
|
||||
github = "hraban";
|
||||
|
||||
@@ -1,24 +1,14 @@
|
||||
# Ad-Hoc Configuration {#ad-hoc-network-config}
|
||||
|
||||
You can use [](#opt-networking.localCommands) to specify shell commands to be
|
||||
run after the network interfaces have been created, but not necessarily fully
|
||||
configured.
|
||||
This is useful for doing network configuration not covered by the existing
|
||||
NixOS modules. For example, you can create a network namespace and a pair
|
||||
of virtual ethernet devices like this:
|
||||
You can use [](#opt-networking.localCommands) to
|
||||
specify shell commands to be run at the end of `network-setup.service`. This
|
||||
is useful for doing network configuration not covered by the existing NixOS
|
||||
modules. For instance, to statically configure an IPv6 address:
|
||||
|
||||
```nix
|
||||
{
|
||||
networking.localCommands = ''
|
||||
ip netns add mynet
|
||||
ip link add name veth-in type veth peer name veth-out
|
||||
ip link set dev veth-out netns mynet
|
||||
ip -6 addr add 2001:610:685:1::1/64 dev eth0
|
||||
'';
|
||||
}
|
||||
```
|
||||
|
||||
::: {.note}
|
||||
The commands should ideally be idempotent, so it's recommended to perform
|
||||
cleanups of the state you create (e.g. virtual interfaces), or at least make
|
||||
sure possible failures are handled.
|
||||
:::
|
||||
|
||||
@@ -26,16 +26,9 @@ servers:
|
||||
```
|
||||
|
||||
::: {.note}
|
||||
Addresses and routes for statically configured interfaces and the default
|
||||
gateway are set up by systemd services named
|
||||
`network-addresses-<interface>.service`. The name servers configuration,
|
||||
instead, is performed by `network-local-commands.service` using resolvconf.
|
||||
:::
|
||||
|
||||
::: {.note}
|
||||
If needed, for example if addresses/routes were added/removed,
|
||||
you can reset the network configuration by running
|
||||
`systemctl restart networking-scripted.target`
|
||||
Statically configured interfaces are set up by the systemd service
|
||||
`interface-name-cfg.service`. The default gateway and name server
|
||||
configuration is performed by `network-setup.service`.
|
||||
:::
|
||||
|
||||
The host name is set using [](#opt-networking.hostName):
|
||||
|
||||
@@ -272,13 +272,6 @@ See <https://github.com/NixOS/nixpkgs/issues/481673>.
|
||||
|
||||
Note for NetworkManager users: before these changes NetworkManager used to spawn its own wpa_supplicant daemon, but now it relies on `networking.wireless`. So, if you had `networking.wireless.enable = false` in your configuration, you should remove that line.
|
||||
|
||||
- Some implementation details of the NixOS network-interfaces module have been changed:
|
||||
|
||||
- In the "scripted" backend, `network-setup.service` has been removed and the network configuration services are now part of `network.target`, which is now directly pulled into `multi-user.target`.
|
||||
- Interface addresses, routes and default gateways are now configured asynchronously as soon as the underlying network devices become available (fixes issue [#154737](https://github.com/NixOS/nixpkgs/issues/154737)).
|
||||
- In both "networkd" and "scripted" backends, the configuration of name servers is now part of `network-local-commands.service` (fixes issue [#445496](https://github.com/NixOS/nixpkgs/issues/445496)).
|
||||
- The issue that resulted in a completely unconfigured network if both `resolvconf` was disabled and no default gateway configured, has also been fixed.
|
||||
|
||||
- `kratos` has been updated from 1.3.1 to [25.4.0](https://github.com/ory/kratos/releases/tag/v25.4.0). Upstream switched to a new versioning scheme (year.major.minor). Notable breaking changes:
|
||||
|
||||
- The `migrate sql` CLI command is now `migrate sql up`
|
||||
@@ -336,6 +329,10 @@ See <https://github.com/NixOS/nixpkgs/issues/481673>.
|
||||
- For shortlived certificates with a total validty below 10 days renewal
|
||||
will happen after half of the total lifetime has passed
|
||||
|
||||
- The module for the Dovecot IMAP server, *services.dovecot*, now uses RFC-42-style settings, exposing a structured interface to write the configuration file.
|
||||
|
||||
Also see the list of available settings for [Dovecot 2.3](https://doc.dovecot.org/2.3/settings/core/) or [2.4](https://doc.dovecot.org/2.4.2/core/summaries/settings.html).
|
||||
|
||||
- Cinnamon has been updated to 6.6, please check the [upstream announcement](https://www.linuxmint.com/rel_zena_whatsnew.php) for more details.
|
||||
|
||||
- Budgie has been updated to 10.10, please check the [upstream announcement](https://buddiesofbudgie.org/blog/budgie-10-10-released) for more details.
|
||||
|
||||
@@ -32,7 +32,7 @@ in
|
||||
description = ''
|
||||
Whether to enable U2F support in the i3lock program.
|
||||
U2F enables authentication using a hardware device, such as a security key.
|
||||
When U2F support is enabled, the i3lock program will set the setuid bit on the i3lock binary and enable the pam u2fAuth service,
|
||||
When U2F support is enabled, the i3lock program will set the setuid bit on the i3lock binary and enable the pam u2f service,
|
||||
'';
|
||||
};
|
||||
};
|
||||
@@ -51,7 +51,7 @@ in
|
||||
source = "${cfg.package.out}/bin/i3lock";
|
||||
};
|
||||
|
||||
security.pam.services.i3lock.u2fAuth = cfg.u2fSupport;
|
||||
security.pam.services.i3lock.u2f.enable = cfg.u2fSupport;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -135,6 +135,7 @@ let
|
||||
|
||||
imports = [
|
||||
(lib.mkRenamedOptionModule [ "enableKwallet" ] [ "kwallet" "enable" ])
|
||||
(lib.mkRenamedOptionModule [ "u2fAuth" ] [ "u2f" "enable" ])
|
||||
];
|
||||
|
||||
options = {
|
||||
@@ -202,17 +203,39 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
u2fAuth = lib.mkOption {
|
||||
default = config.security.pam.u2f.enable;
|
||||
defaultText = lib.literalExpression "config.security.pam.u2f.enable";
|
||||
type = lib.types.bool;
|
||||
description = ''
|
||||
If set, users listed in
|
||||
{file}`$XDG_CONFIG_HOME/Yubico/u2f_keys` (or
|
||||
{file}`$HOME/.config/Yubico/u2f_keys` if XDG variable is
|
||||
not set) are able to log in with the associated U2F key. Path can be
|
||||
changed using {option}`security.pam.u2f.authFile` option.
|
||||
'';
|
||||
u2f = {
|
||||
enable = lib.mkOption {
|
||||
default = config.security.pam.u2f.enable;
|
||||
defaultText = lib.literalExpression "config.security.pam.u2f.enable";
|
||||
type = lib.types.bool;
|
||||
description = ''
|
||||
If set, users listed in
|
||||
{file}`$XDG_CONFIG_HOME/Yubico/u2f_keys` (or
|
||||
{file}`$HOME/.config/Yubico/u2f_keys` if XDG variable is
|
||||
not set) are able to log in with the associated U2F key. Path can be
|
||||
changed using {option}`security.pam.u2f.authFile` option.
|
||||
'';
|
||||
};
|
||||
|
||||
control = lib.mkOption {
|
||||
default = config.security.pam.u2f.control;
|
||||
defaultText = lib.literalExpression "config.security.pam.u2f.control";
|
||||
type = lib.types.enum [
|
||||
"required"
|
||||
"requisite"
|
||||
"sufficient"
|
||||
"optional"
|
||||
];
|
||||
description = ''
|
||||
This option sets pam "control".
|
||||
If you want to have multi factor authentication, use "required".
|
||||
If you want to use U2F device instead of regular password, use "sufficient".
|
||||
|
||||
Read
|
||||
{manpage}`pam.conf(5)`
|
||||
for better understanding of this option.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
usshAuth = lib.mkOption {
|
||||
@@ -1045,8 +1068,8 @@ let
|
||||
in
|
||||
{
|
||||
name = "u2f";
|
||||
enable = cfg.u2fAuth;
|
||||
control = u2f.control;
|
||||
enable = cfg.u2f.enable;
|
||||
control = cfg.u2f.control;
|
||||
modulePath = "${pkgs.pam_u2f}/lib/security/pam_u2f.so";
|
||||
inherit (u2f) settings;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -297,94 +297,105 @@ in
|
||||
|
||||
###### implementation
|
||||
|
||||
config = lib.mkIf (cfg.enable && nixPackage.pname != "lix") {
|
||||
environment.systemPackages = [
|
||||
nixPackage
|
||||
pkgs.nix-info
|
||||
]
|
||||
++ lib.optional (config.programs.bash.completion.enable) pkgs.nix-bash-completions;
|
||||
|
||||
systemd.packages = [ nixPackage ];
|
||||
|
||||
# The upstream Nix tmpfiles.d file assumes the daemon runs as root
|
||||
systemd.tmpfiles.packages = lib.mkIf (cfg.daemonUser == "root") [ nixPackage ];
|
||||
|
||||
systemd.sockets.nix-daemon.wantedBy = [ "sockets.target" ];
|
||||
|
||||
systemd.services.nix-daemon = {
|
||||
path = [
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf cfg.enable {
|
||||
systemd.tmpfiles.rules = [
|
||||
"d /nix/var 0755 root root - -"
|
||||
"L+ /nix/var/nix/gcroots/booted-system 0755 root root - /run/booted-system"
|
||||
# Boot-time cleanup
|
||||
"R! /nix/var/nix/gcroots/tmp - - - - -"
|
||||
"R! /nix/var/nix/temproots - - - - -"
|
||||
];
|
||||
})
|
||||
(lib.mkIf (cfg.enable && nixPackage.pname != "lix") {
|
||||
environment.systemPackages = [
|
||||
nixPackage
|
||||
config.programs.ssh.package
|
||||
pkgs.nix-info
|
||||
]
|
||||
# For running "newuidmap"
|
||||
++ lib.optional (cfg.daemonUser != "root") "/run/wrappers";
|
||||
++ lib.optional (config.programs.bash.completion.enable) pkgs.nix-bash-completions;
|
||||
|
||||
environment =
|
||||
cfg.envVars
|
||||
// {
|
||||
CURL_CA_BUNDLE = config.security.pki.caBundle;
|
||||
}
|
||||
// config.networking.proxy.envVars;
|
||||
systemd.packages = [ nixPackage ];
|
||||
|
||||
# The upstream Nix tmpfiles.d file assumes the daemon runs as root
|
||||
systemd.tmpfiles.packages = lib.mkIf (cfg.daemonUser == "root") [ nixPackage ];
|
||||
|
||||
systemd.sockets.nix-daemon.wantedBy = [ "sockets.target" ];
|
||||
|
||||
systemd.services.nix-daemon = {
|
||||
path = [
|
||||
nixPackage
|
||||
config.programs.ssh.package
|
||||
]
|
||||
# For running "newuidmap"
|
||||
++ lib.optional (cfg.daemonUser != "root") "/run/wrappers";
|
||||
|
||||
environment =
|
||||
cfg.envVars
|
||||
// {
|
||||
CURL_CA_BUNDLE = config.security.pki.caBundle;
|
||||
}
|
||||
// config.networking.proxy.envVars;
|
||||
|
||||
serviceConfig = {
|
||||
CPUSchedulingPolicy = cfg.daemonCPUSchedPolicy;
|
||||
IOSchedulingClass = cfg.daemonIOSchedClass;
|
||||
IOSchedulingPriority = cfg.daemonIOSchedPriority;
|
||||
};
|
||||
|
||||
restartTriggers = [ config.environment.etc."nix/nix.conf".source ];
|
||||
|
||||
# `stopIfChanged = false` changes to switch behavior
|
||||
# from stop -> update units -> start
|
||||
# to update units -> restart
|
||||
#
|
||||
# The `stopIfChanged` setting therefore controls a trade-off between a
|
||||
# more predictable lifecycle, which runs the correct "version" of
|
||||
# the `ExecStop` line, and on the other hand the availability of
|
||||
# sockets during the switch, as the effectiveness of the stop operation
|
||||
# depends on the socket being stopped as well.
|
||||
#
|
||||
# As `nix-daemon.service` does not make use of `ExecStop`, we prefer
|
||||
# to keep the socket up and available. This is important for machines
|
||||
# that run Nix-based services, such as automated build, test, and deploy
|
||||
# services, that expect the daemon socket to be available at all times.
|
||||
#
|
||||
# Notably, the Nix client does not retry on failure to connect to the
|
||||
# daemon socket, and the in-process RemoteStore instance will disable
|
||||
# itself. This makes retries infeasible even for services that are
|
||||
# aware of the issue. Failure to connect can affect not only new client
|
||||
# processes, but also new RemoteStore instances in existing processes,
|
||||
# as well as existing RemoteStore instances that have not saturated
|
||||
# their connection pool.
|
||||
#
|
||||
# Also note that `stopIfChanged = true` does not kill existing
|
||||
# connection handling daemons, as one might wish to happen before a
|
||||
# breaking Nix upgrade (which is rare). The daemon forks that handle
|
||||
# the individual connections split off into their own sessions, causing
|
||||
# them not to be stopped by systemd.
|
||||
# If a Nix upgrade does require all existing daemon processes to stop,
|
||||
# nix-daemon must do so on its own accord, and only when the new version
|
||||
# starts and detects that Nix's persistent state needs an upgrade.
|
||||
stopIfChanged = false;
|
||||
|
||||
serviceConfig = {
|
||||
CPUSchedulingPolicy = cfg.daemonCPUSchedPolicy;
|
||||
IOSchedulingClass = cfg.daemonIOSchedClass;
|
||||
IOSchedulingPriority = cfg.daemonIOSchedPriority;
|
||||
};
|
||||
|
||||
restartTriggers = [ config.environment.etc."nix/nix.conf".source ];
|
||||
# Set up the environment variables for running Nix.
|
||||
environment.sessionVariables = cfg.envVars;
|
||||
|
||||
# `stopIfChanged = false` changes to switch behavior
|
||||
# from stop -> update units -> start
|
||||
# to update units -> restart
|
||||
#
|
||||
# The `stopIfChanged` setting therefore controls a trade-off between a
|
||||
# more predictable lifecycle, which runs the correct "version" of
|
||||
# the `ExecStop` line, and on the other hand the availability of
|
||||
# sockets during the switch, as the effectiveness of the stop operation
|
||||
# depends on the socket being stopped as well.
|
||||
#
|
||||
# As `nix-daemon.service` does not make use of `ExecStop`, we prefer
|
||||
# to keep the socket up and available. This is important for machines
|
||||
# that run Nix-based services, such as automated build, test, and deploy
|
||||
# services, that expect the daemon socket to be available at all times.
|
||||
#
|
||||
# Notably, the Nix client does not retry on failure to connect to the
|
||||
# daemon socket, and the in-process RemoteStore instance will disable
|
||||
# itself. This makes retries infeasible even for services that are
|
||||
# aware of the issue. Failure to connect can affect not only new client
|
||||
# processes, but also new RemoteStore instances in existing processes,
|
||||
# as well as existing RemoteStore instances that have not saturated
|
||||
# their connection pool.
|
||||
#
|
||||
# Also note that `stopIfChanged = true` does not kill existing
|
||||
# connection handling daemons, as one might wish to happen before a
|
||||
# breaking Nix upgrade (which is rare). The daemon forks that handle
|
||||
# the individual connections split off into their own sessions, causing
|
||||
# them not to be stopped by systemd.
|
||||
# If a Nix upgrade does require all existing daemon processes to stop,
|
||||
# nix-daemon must do so on its own accord, and only when the new version
|
||||
# starts and detects that Nix's persistent state needs an upgrade.
|
||||
stopIfChanged = false;
|
||||
nix.nrBuildUsers = lib.mkDefault (
|
||||
if cfg.settings.auto-allocate-uids or false then
|
||||
0
|
||||
else
|
||||
lib.max 32 (if cfg.settings.max-jobs == "auto" then 0 else cfg.settings.max-jobs)
|
||||
);
|
||||
|
||||
};
|
||||
users.users = nixbldUsers;
|
||||
|
||||
# Set up the environment variables for running Nix.
|
||||
environment.sessionVariables = cfg.envVars;
|
||||
services.displayManager.hiddenUsers = lib.attrNames nixbldUsers;
|
||||
|
||||
nix.nrBuildUsers = lib.mkDefault (
|
||||
if cfg.settings.auto-allocate-uids or false then
|
||||
0
|
||||
else
|
||||
lib.max 32 (if cfg.settings.max-jobs == "auto" then 0 else cfg.settings.max-jobs)
|
||||
);
|
||||
|
||||
users.users = nixbldUsers;
|
||||
|
||||
services.displayManager.hiddenUsers = lib.attrNames nixbldUsers;
|
||||
|
||||
# Legacy configuration conversion.
|
||||
nix.settings.sandbox-fallback = false;
|
||||
};
|
||||
# Legacy configuration conversion.
|
||||
nix.settings.sandbox-fallback = false;
|
||||
})
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
@@ -66,8 +66,8 @@ let
|
||||
|
||||
postInstall = ''
|
||||
ln -s ${cfg.stateDir}/sites $out/share/php/${cfg.package.pname}${cfg.webRoot}
|
||||
ln -s ${cfg.modulesDir} $out/share/php/${cfg.package.pname}/modules
|
||||
ln -s ${cfg.themesDir} $out/share/php/${cfg.package.pname}/themes
|
||||
ln -s ${cfg.modulesDir} $out/share/php/${cfg.package.pname}${cfg.webRoot}/modules/nixos-modules
|
||||
ln -s ${cfg.themesDir} $out/share/php/${cfg.package.pname}${cfg.webRoot}/themes/nixos-themes
|
||||
'';
|
||||
});
|
||||
|
||||
|
||||
@@ -880,6 +880,21 @@ in
|
||||
serviceConfig.ExecSearchPath = "${config.services.openssh.package}/bin";
|
||||
overrideStrategy = "asDropin";
|
||||
};
|
||||
|
||||
# Fix paths in sshd-vsock.socket
|
||||
# https://github.com/systemd/systemd/blob/v259.3/src/ssh-generator/ssh-generator.c#L239
|
||||
# this socket is used, for example, when NixOS is started via systemd-vmspawn
|
||||
systemd.sockets.sshd-vsock = mkIf config.services.openssh.enable {
|
||||
overrideStrategy = "asDropin";
|
||||
socketConfig.ExecStartPost = [
|
||||
""
|
||||
"${config.systemd.package}/lib/systemd/systemd-ssh-issue --make-vsock"
|
||||
];
|
||||
socketConfig.ExecStopPre = [
|
||||
""
|
||||
"${config.systemd.package}/lib/systemd/systemd-ssh-issue --rm-vsock"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# FIXME: Remove these eventually.
|
||||
|
||||
@@ -350,19 +350,11 @@ in
|
||||
"d /var/db 0755 root root - -"
|
||||
"L /var/lock - - - - ../run/lock"
|
||||
]
|
||||
++ lib.optionals config.nix.enable [
|
||||
"d /nix/var 0755 root root - -"
|
||||
"L+ /nix/var/nix/gcroots/booted-system 0755 root root - /run/booted-system"
|
||||
]
|
||||
# Boot-time cleanup
|
||||
++ [
|
||||
"R! /etc/group.lock - - - - -"
|
||||
"R! /etc/passwd.lock - - - - -"
|
||||
"R! /etc/shadow.lock - - - - -"
|
||||
]
|
||||
++ lib.optionals config.nix.enable [
|
||||
"R! /nix/var/nix/gcroots/tmp - - - - -"
|
||||
"R! /nix/var/nix/temproots - - - - -"
|
||||
];
|
||||
|
||||
boot.initrd.systemd = {
|
||||
|
||||
@@ -51,71 +51,6 @@ let
|
||||
(lib.concatStringsSep " ")
|
||||
];
|
||||
|
||||
# Converts an IPv4 address literal to a list of bits
|
||||
parseAddr.ipv4 =
|
||||
addr:
|
||||
let
|
||||
pad = b: lib.replicate (8 - builtins.length b) 0 ++ b;
|
||||
toBin = n: pad (lib.toBaseDigits 2 (lib.toInt n));
|
||||
in
|
||||
lib.concatMap toBin (builtins.splitVersion addr);
|
||||
|
||||
# Converts an IPv6 address literal to a list of bits
|
||||
parseAddr.ipv6 =
|
||||
addr:
|
||||
let
|
||||
pad = b: lib.replicate (16 - builtins.length b) 0 ++ b;
|
||||
fromHex = n: (builtins.fromTOML "n = 0x${n}").n;
|
||||
toBin = n: pad (lib.toBaseDigits 2 (fromHex n));
|
||||
normal = (lib.network.ipv6.fromString addr).address;
|
||||
in
|
||||
lib.concatMap toBin (lib.splitString ":" normal);
|
||||
|
||||
# Checks if `addr` is part of the `net` subnet
|
||||
inSubnet =
|
||||
v: net: addr:
|
||||
let
|
||||
prefix = lib.take net.prefixLength (parseAddr.${v} net.address);
|
||||
match = lib.zipListsWith (a: b: a == b) prefix (parseAddr.${v} addr);
|
||||
in
|
||||
lib.all lib.id match;
|
||||
|
||||
# Checks if the netmask of all addresses on interface `iface` includes
|
||||
# the IP address of `gateway`
|
||||
#
|
||||
# Note: this is used to check whether networking.defaultGateway relies on
|
||||
# the given interface, either explicitly, via the `interface` (optional),
|
||||
# or explicitly, by using an address in a subnet of this interface.
|
||||
#
|
||||
# Configuration of the default gateway is then performed as part of that
|
||||
# interface setup in `configureAddrs`, below.
|
||||
isGateway =
|
||||
v: gateway: iface:
|
||||
lib.any lib.id (
|
||||
[ (iface.name == gateway.interface) ]
|
||||
++ map (net: inSubnet v net gateway.address) iface.${v}.addresses
|
||||
);
|
||||
|
||||
# Checks if `gateway` uses an address from `iface` as default source
|
||||
#
|
||||
# Note: this is needed to delay the configuration of the gateway and default
|
||||
# source until the right interfaces and address have been set up, otherwise
|
||||
# the commands will fail.
|
||||
hasSource =
|
||||
v: gateway: iface:
|
||||
builtins.elem gateway.source (map (i: i.address) iface.${v}.addresses);
|
||||
|
||||
# Interfaces corresponding to the default gateways
|
||||
gateway4Iface = builtins.filter (isGateway "ipv4" cfg.defaultGateway) interfaces;
|
||||
gateway6Iface = builtins.filter (isGateway "ipv6" cfg.defaultGateway6) interfaces;
|
||||
|
||||
# Interfaces corresponding to the default source addresses
|
||||
#
|
||||
# Note: the use of `head` here is safe because these expressions
|
||||
# are evaluated only when `needsSourceIface`, see `configureAddrs` below.
|
||||
source4Iface = builtins.head (builtins.filter (hasSource "ipv4" cfg.defaultGateway) interfaces);
|
||||
source6Iface = builtins.head (builtins.filter (hasSource "ipv6" cfg.defaultGateway6) interfaces);
|
||||
|
||||
# warn that these attributes are deprecated (2017-2-2)
|
||||
# Should be removed in the release after next
|
||||
bondDeprecation = rec {
|
||||
@@ -183,71 +118,121 @@ let
|
||||
else
|
||||
optional (!config.boot.isContainer) (subsystemDevice dev);
|
||||
|
||||
# For each interface <foo>, creates a network-addresses-<foo>.service
|
||||
# job that performs static address configuration.
|
||||
#
|
||||
# It has a Wants dependency on <foo>-netdev.service, which creates
|
||||
# create the interface, or on a device unit (for hardware interfaces).
|
||||
# It also has a BindsTo dependency on the device unit: so, it only gets
|
||||
# started after the interface has appeared and it's stopped when the
|
||||
# interface disappears.
|
||||
#
|
||||
# Unless in a container, the job is not made part of network.target, so
|
||||
# if an interface is not found (e.g. a USB interface not plugged in) it
|
||||
# will not hang the boot sequence.
|
||||
#
|
||||
# If the interface is the default gateway, the job will also set the
|
||||
# default gateway and delay network-online.target.
|
||||
hasDefaultGatewaySet =
|
||||
(cfg.defaultGateway != null && cfg.defaultGateway.address != "")
|
||||
|| (cfg.enableIPv6 && cfg.defaultGateway6 != null && cfg.defaultGateway6.address != "");
|
||||
|
||||
needNetworkSetup =
|
||||
cfg.resolvconf.enable || cfg.defaultGateway != null || cfg.defaultGateway6 != null;
|
||||
|
||||
networkLocalCommands = lib.mkIf needNetworkSetup {
|
||||
after = [ "network-setup.service" ];
|
||||
bindsTo = [ "network-setup.service" ];
|
||||
};
|
||||
|
||||
networkSetup = lib.mkIf needNetworkSetup {
|
||||
description = "Networking Setup";
|
||||
|
||||
after = [ "network-pre.target" ];
|
||||
before = [
|
||||
"network.target"
|
||||
"shutdown.target"
|
||||
];
|
||||
wants = [ "network.target" ];
|
||||
# exclude bridges from the partOf relationship to fix container networking bug #47210
|
||||
partOf = map (i: "network-addresses-${i.name}.service") (
|
||||
filter (i: !(hasAttr i.name cfg.bridges)) interfaces
|
||||
);
|
||||
conflicts = [ "shutdown.target" ];
|
||||
wantedBy = [ "multi-user.target" ] ++ optional hasDefaultGatewaySet "network-online.target";
|
||||
|
||||
unitConfig.ConditionCapability = "CAP_NET_ADMIN";
|
||||
|
||||
path = [ pkgs.iproute2 ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
|
||||
unitConfig.DefaultDependencies = false;
|
||||
|
||||
script = ''
|
||||
${optionalString config.networking.resolvconf.enable ''
|
||||
# Set the static DNS configuration, if given.
|
||||
${pkgs.openresolv}/sbin/resolvconf -m 1 -a static <<EOF
|
||||
${optionalString (cfg.nameservers != [ ] && cfg.domain != null) ''
|
||||
domain ${cfg.domain}
|
||||
''}
|
||||
${optionalString (cfg.search != [ ]) ("search " + concatStringsSep " " cfg.search)}
|
||||
${flip concatMapStrings cfg.nameservers (ns: ''
|
||||
nameserver ${ns}
|
||||
'')}
|
||||
EOF
|
||||
''}
|
||||
|
||||
# Set the default gateway
|
||||
${flip concatMapStrings
|
||||
[
|
||||
{
|
||||
version = "-4";
|
||||
gateway = cfg.defaultGateway;
|
||||
}
|
||||
{
|
||||
version = "-6";
|
||||
gateway = cfg.defaultGateway6;
|
||||
}
|
||||
]
|
||||
(
|
||||
{ version, gateway }:
|
||||
optionalString (gateway != null && gateway.address != "") ''
|
||||
${optionalString (gateway.interface != null) ''
|
||||
ip ${version} route replace ${gateway.address} proto static ${
|
||||
formatIpArgs {
|
||||
metric = gateway.metric;
|
||||
dev = gateway.interface;
|
||||
}
|
||||
}
|
||||
''}
|
||||
ip ${version} route replace default proto static ${
|
||||
formatIpArgs {
|
||||
metric = gateway.metric;
|
||||
via = gateway.address;
|
||||
window = cfg.defaultGatewayWindowSize;
|
||||
dev = gateway.interface;
|
||||
src = gateway.source;
|
||||
}
|
||||
}
|
||||
''
|
||||
)
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
# For each interface <foo>, create a job ‘network-addresses-<foo>.service"
|
||||
# that performs static address configuration. It has a "wants"
|
||||
# dependency on ‘<foo>.service’, which is supposed to create
|
||||
# the interface and need not exist (i.e. for hardware
|
||||
# interfaces). It has a binds-to dependency on the actual
|
||||
# network device, so it only gets started after the interface
|
||||
# has appeared, and it's stopped when the interface
|
||||
# disappears.
|
||||
configureAddrs =
|
||||
i:
|
||||
let
|
||||
ips = interfaceIps i;
|
||||
isDefaultGateway4 = cfg.defaultGateway != null && builtins.elem i gateway4Iface;
|
||||
isDefaultGateway6 = cfg.defaultGateway6 != null && builtins.elem i gateway6Iface;
|
||||
needsSourceIface4 =
|
||||
isDefaultGateway4 && cfg.defaultGateway.source != null && i.name != source4Iface.name;
|
||||
needsSourceIface6 =
|
||||
isDefaultGateway6 && cfg.defaultGateway6.source != null && i.name != source6Iface.name;
|
||||
|
||||
configureGateway =
|
||||
version: gateway:
|
||||
optionalString (gateway.address != "") ''
|
||||
echo -n "setting ${i.name} as default IPv${version} gateway... "
|
||||
${optionalString (gateway.interface != null) ''
|
||||
ip -${version} route replace ${gateway.address} proto static ${
|
||||
formatIpArgs {
|
||||
metric = gateway.metric;
|
||||
dev = gateway.interface;
|
||||
}
|
||||
}
|
||||
''}
|
||||
ip -${version} route replace default proto static ${
|
||||
formatIpArgs {
|
||||
metric = gateway.metric;
|
||||
via = gateway.address;
|
||||
window = cfg.defaultGatewayWindowSize;
|
||||
dev = gateway.interface;
|
||||
src = gateway.source;
|
||||
}
|
||||
}
|
||||
echo "done"
|
||||
'';
|
||||
in
|
||||
nameValuePair "network-addresses-${i.name}" {
|
||||
description = "Address configuration of ${i.name}";
|
||||
|
||||
wantedBy =
|
||||
deviceDependency i.name
|
||||
++ optional config.boot.isContainer "network.target"
|
||||
++ optional (isDefaultGateway4 || isDefaultGateway6) "network-online.target";
|
||||
wantedBy = [
|
||||
"network-setup.service"
|
||||
"network.target"
|
||||
];
|
||||
# order before network-setup because the routes that are configured
|
||||
# there may need ip addresses configured
|
||||
before = [ "network-setup.service" ];
|
||||
bindsTo = deviceDependency i.name;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [
|
||||
"network-pre.target"
|
||||
]
|
||||
++ optional needsSourceIface4 "network-addresses-${source4Iface.name}.service"
|
||||
++ optional needsSourceIface6 "network-addresses-${source6Iface.name}.service"
|
||||
++ deviceDependency i.name;
|
||||
after = [ "network-pre.target" ] ++ (deviceDependency i.name);
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
# Restart rather than stop+start this unit to prevent the
|
||||
@@ -299,10 +284,6 @@ let
|
||||
fi
|
||||
''
|
||||
)}
|
||||
|
||||
# Set the default gateway
|
||||
${optionalString isDefaultGateway4 (configureGateway "4" cfg.defaultGateway)}
|
||||
${optionalString isDefaultGateway6 (configureGateway "6" cfg.defaultGateway6)}
|
||||
'';
|
||||
preStop = ''
|
||||
state="/run/nixos/network/routes/${i.name}"
|
||||
@@ -330,13 +311,13 @@ let
|
||||
nameValuePair "${i.name}-netdev" {
|
||||
description = "Virtual Network Interface ${i.name}";
|
||||
bindsTo = optional (!config.boot.isContainer) "dev-net-tun.device";
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = optional (!config.boot.isContainer) "dev-net-tun.device" ++ [ "network-pre.target" ];
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice i.name)
|
||||
];
|
||||
before = [ "network.target" ];
|
||||
before = [ "network-setup.service" ];
|
||||
path = [ pkgs.iproute2 ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
@@ -362,21 +343,18 @@ let
|
||||
description = "Bridge Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps ++ optional v.rstp "mstpd.service";
|
||||
partOf = [
|
||||
"network.target"
|
||||
"networking-scripted.target"
|
||||
]
|
||||
++ optional v.rstp "mstpd.service";
|
||||
partOf = [ "network-setup.service" ] ++ optional v.rstp "mstpd.service";
|
||||
after = [
|
||||
"network-pre.target"
|
||||
]
|
||||
++ deps
|
||||
++ optional v.rstp "mstpd.service"
|
||||
++ map (i: "network-addresses-${i}.service") v.interfaces;
|
||||
before = [ "network.target" ];
|
||||
before = [ "network-setup.service" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
@@ -470,14 +448,15 @@ let
|
||||
description = "Open vSwitch Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
]
|
||||
++ internalConfigs;
|
||||
before = [ "network.target" ] ++ internalConfigs;
|
||||
partOf = [
|
||||
"network.target"
|
||||
"networking-scripted.target"
|
||||
]; # shutdown the bridge when network is shutdown
|
||||
# before = [ "network-setup.service" ];
|
||||
# should work without internalConfigs dependencies because address/link configuration depends
|
||||
# on the device, which is created by ovs-vswitchd with type=internal, but it does not...
|
||||
before = [ "network-setup.service" ] ++ internalConfigs;
|
||||
partOf = [ "network-setup.service" ]; # shutdown the bridge when network is shutdown
|
||||
bindsTo = [ "ovs-vswitchd.service" ]; # requires ovs-vswitchd to be alive at all times
|
||||
after = [
|
||||
"network-pre.target"
|
||||
@@ -542,12 +521,12 @@ let
|
||||
description = "Bond Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps ++ map (i: "network-addresses-${i}.service") v.interfaces;
|
||||
before = [ "network.target" ];
|
||||
before = [ "network-setup.service" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [
|
||||
@@ -591,12 +570,12 @@ let
|
||||
description = "MACVLAN Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network.target" ];
|
||||
before = [ "network-setup.service" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
@@ -623,12 +602,12 @@ let
|
||||
description = "IPVLAN Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network.target" ];
|
||||
before = [ "network-setup.service" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
@@ -668,12 +647,12 @@ let
|
||||
description = "FOU endpoint ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network.target" ];
|
||||
before = [ "network-setup.service" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
@@ -698,11 +677,12 @@ let
|
||||
description = "IPv6 in IPv4 Tunnel Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network.target" ];
|
||||
before = [ "network-setup.service" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
@@ -740,12 +720,12 @@ let
|
||||
description = "IP in IP Tunnel Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network.target" ];
|
||||
before = [ "network-setup.service" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
@@ -788,12 +768,12 @@ let
|
||||
description = "GRE Tunnel Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [ "networking-scripted.target" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network.target" ];
|
||||
before = [ "network-setup.service" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
@@ -823,15 +803,13 @@ let
|
||||
description = "VLAN Interface ${n}";
|
||||
wantedBy = [
|
||||
"network.target"
|
||||
"network-setup.service"
|
||||
(subsystemDevice n)
|
||||
];
|
||||
bindsTo = deps;
|
||||
partOf = [
|
||||
"network.target"
|
||||
"networking-scripted.target"
|
||||
];
|
||||
partOf = [ "network-setup.service" ];
|
||||
after = [ "network-pre.target" ] ++ deps;
|
||||
before = [ "network.target" ];
|
||||
before = [ "network-setup.service" ];
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.RemainAfterExit = true;
|
||||
path = [ pkgs.iproute2 ];
|
||||
@@ -867,27 +845,10 @@ let
|
||||
// mapAttrs' createGreDevice cfg.greTunnels
|
||||
// mapAttrs' createVlanDevice cfg.vlans
|
||||
// {
|
||||
network-local-commands = {
|
||||
after = [ "network-pre.target" ];
|
||||
wantedBy = [ "network.target" ];
|
||||
};
|
||||
network-setup = networkSetup;
|
||||
network-local-commands = networkLocalCommands;
|
||||
};
|
||||
|
||||
# Note: the scripted networking backend consistent of many
|
||||
# independent services that are linked to the network.target.
|
||||
# Since there is no daemon (e.g systemd-networkd) that is
|
||||
# started as part of the system and pulls in network.target.
|
||||
# Thus, to start these services we link network.target directly
|
||||
# to multi-user.target, this has the same result.
|
||||
systemd.targets.network.wantedBy = [ "multi-user.target" ];
|
||||
|
||||
# This target serves no purpose during the boot, but can be
|
||||
# used to quickly reset the network configuration by running
|
||||
# systemctl restart networking-scripted.target
|
||||
systemd.targets.networking-scripted = {
|
||||
description = "NixOS scripted networking setup";
|
||||
};
|
||||
|
||||
services.udev.extraRules = ''
|
||||
KERNEL=="tun", TAG+="systemd"
|
||||
'';
|
||||
|
||||
@@ -747,9 +747,10 @@ in
|
||||
default = "";
|
||||
example = "text=anything; echo You can put $text here.";
|
||||
description = ''
|
||||
Shell commands to be executed after all the network
|
||||
interfaces have been created, but not necessarily
|
||||
fully configured.
|
||||
Shell commands to be executed at the end of the
|
||||
`network-setup` systemd service. Note that if
|
||||
you are using DHCP to obtain the network configuration,
|
||||
interfaces may not be fully configured yet.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -1850,20 +1851,6 @@ in
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
networking.localCommands = lib.mkIf config.networking.resolvconf.enable ''
|
||||
# Set the static DNS configuration, if given.
|
||||
${pkgs.openresolv}/sbin/resolvconf -m 1 -a static <<EOF
|
||||
${optionalString (cfg.nameservers != [ ] && cfg.domain != null) ''
|
||||
domain ${cfg.domain}
|
||||
''}
|
||||
${optionalString (cfg.search != [ ]) ("search " + concatStringsSep " " cfg.search)}
|
||||
${flip concatMapStrings cfg.nameservers (ns: ''
|
||||
nameserver ${ns}
|
||||
'')}
|
||||
EOF
|
||||
'';
|
||||
|
||||
services.mstpd = mkIf needsMstpd { enable = true; };
|
||||
|
||||
virtualisation.vswitch = mkIf (cfg.vswitches != { }) { enable = true; };
|
||||
|
||||
+19
-9
@@ -2,18 +2,28 @@
|
||||
name = "dovecot";
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
dovecot = config.services.dovecot2.package;
|
||||
in
|
||||
{
|
||||
imports = [ common/user-account.nix ];
|
||||
services.postfix.enable = true;
|
||||
services.dovecot2 = {
|
||||
enable = true;
|
||||
protocols = [
|
||||
"imap"
|
||||
"pop3"
|
||||
];
|
||||
mailUser = "vmail";
|
||||
mailGroup = "vmail";
|
||||
enablePAM = true;
|
||||
settings = {
|
||||
dovecot_config_version = dovecot.version;
|
||||
dovecot_storage_version = dovecot.version;
|
||||
mail_driver = "maildir";
|
||||
mail_path = "${config.services.postfix.settings.main.mail_spool_directory}/%{user}";
|
||||
protocols = [
|
||||
"imap"
|
||||
"pop3"
|
||||
];
|
||||
mail_uid = "vmail";
|
||||
mail_gid = "vmail";
|
||||
};
|
||||
};
|
||||
environment.systemPackages =
|
||||
let
|
||||
@@ -31,7 +41,7 @@
|
||||
sendTestMailViaDeliveryAgent = pkgs.writeScriptBin "send-lda" ''
|
||||
#!${pkgs.runtimeShell}
|
||||
|
||||
exec ${pkgs.dovecot}/libexec/dovecot/deliver -d bob <<MAIL
|
||||
exec ${dovecot}/libexec/dovecot/deliver -d bob <<MAIL
|
||||
From: root@localhost
|
||||
To: bob@localhost
|
||||
Subject: Something else...
|
||||
@@ -74,7 +84,7 @@
|
||||
|
||||
in
|
||||
[
|
||||
pkgs.dovecot_pigeonhole
|
||||
dovecot.passthru.dovecot_pigeonhole
|
||||
sendTestMail
|
||||
sendTestMailViaDeliveryAgent
|
||||
testImap
|
||||
|
||||
@@ -44,13 +44,17 @@ let
|
||||
defaultGateway6 = {
|
||||
address = "fd00:1234:5678:1::1";
|
||||
interface = "enp1s0";
|
||||
source = "fd00:1234:5678:1::3"; # implicit dependency on enp2s0
|
||||
source = "fd00:1234:5678:1::3";
|
||||
};
|
||||
interfaces.enp1s0.ipv6.addresses = [
|
||||
{
|
||||
address = "fd00:1234:5678:1::2";
|
||||
prefixLength = 64;
|
||||
}
|
||||
{
|
||||
address = "fd00:1234:5678:1::3";
|
||||
prefixLength = 128;
|
||||
}
|
||||
];
|
||||
interfaces.enp1s0.ipv4.addresses = [
|
||||
{
|
||||
@@ -72,12 +76,6 @@ let
|
||||
prefixLength = 24;
|
||||
}
|
||||
];
|
||||
interfaces.enp2s0.ipv6.addresses = [
|
||||
{
|
||||
address = "fd00:1234:5678:1::3";
|
||||
prefixLength = 128;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
@@ -110,41 +108,6 @@ let
|
||||
client.succeed("ip -6 route show default | grep -q 'src fd00:1234:5678:1::3'")
|
||||
'';
|
||||
};
|
||||
dynamicInterface = {
|
||||
name = "dynamicInterface";
|
||||
nodes.machine = clientConfig {
|
||||
networking.interfaces.usb0 = {
|
||||
ipv6.addresses = lib.singleton {
|
||||
address = "fd::1";
|
||||
prefixLength = 127;
|
||||
};
|
||||
};
|
||||
networking.defaultGateway6 = {
|
||||
address = "fd::";
|
||||
interface = "usb0";
|
||||
source = "fd::1";
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
with subtest("Network comes up without usb0"):
|
||||
machine.wait_for_unit("network.target")
|
||||
|
||||
with subtest("multi-user.target does not hang"):
|
||||
machine.require_unit_state("multi-user.target", "active")
|
||||
|
||||
with subtest("usb0 is configured when plugged in"):
|
||||
machine.succeed("ip link add usb0 type sit local 1.2.3.4")
|
||||
machine.wait_until_succeeds("ip addr show dev usb0 | grep -q fd::1")
|
||||
|
||||
with subtest("Network is now online"):
|
||||
machine.systemctl("start network-online.target")
|
||||
machine.require_unit_state("network-online.target", "active")
|
||||
|
||||
with subtest("Default gateway is now set"):
|
||||
machine.succeed("ip -6 route show default | grep -q 'via fd::'")
|
||||
machine.succeed("ip -6 route show default | grep -q 'src fd::1'")
|
||||
'';
|
||||
};
|
||||
routeType = {
|
||||
name = "RouteType";
|
||||
nodes.client = clientConfig {
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
(require 'package)
|
||||
(package-initialize)
|
||||
|
||||
;; TODO remove this patch when Emacs bug#77143 is fixed
|
||||
;; see that bug for more info
|
||||
;; TODO remove this patch when Emacs bug#77143 and bug#80744 are fixed
|
||||
(defun package--description-file (dir)
|
||||
"Return package description file name for package DIR."
|
||||
(concat (let ((subdir (file-name-nondirectory
|
||||
(directory-file-name dir))))
|
||||
(if (string-match "\\([^.].*?\\)-\\([0-9]+\\(?:[.][0-9]+\\|\\(?:pre\\|beta\\|alpha\\|snapshot\\)[0-9]+\\)*\\)\\'" subdir)
|
||||
(if (string-match "\\([^.].*?\\)-\\([0-9]+\\(?:[.][0-9]+\\|\\(?:pre\\|beta\\|alpha\\|snapshot\\)[0-9]*\\)*\\)\\'" subdir)
|
||||
(match-string 1 subdir) subdir))
|
||||
"-pkg.el"))
|
||||
|
||||
|
||||
@@ -20,21 +20,5 @@ in
|
||||
yasnippet
|
||||
]
|
||||
);
|
||||
|
||||
p4-16-mode = super.p4-16-mode.overrideAttrs {
|
||||
# workaround https://github.com/NixOS/nixpkgs/issues/301795
|
||||
prePatch = ''
|
||||
mkdir tmp-untar-dir
|
||||
pushd tmp-untar-dir
|
||||
|
||||
tar --extract --verbose --file=$src
|
||||
content_directory=$(echo p4-16-mode-*)
|
||||
cp --verbose $content_directory/p4-16-mode-pkg.el $content_directory/p4-pkg.el
|
||||
src=$PWD/$content_directory.tar
|
||||
tar --create --verbose --file=$src $content_directory
|
||||
|
||||
popd
|
||||
'';
|
||||
};
|
||||
# keep-sorted end
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ let
|
||||
plugin = null;
|
||||
config = null;
|
||||
optional = false;
|
||||
type = "viml";
|
||||
};
|
||||
in
|
||||
map (x: defaultPlugin // (if x ? plugin then x else { plugin = x; })) plugins;
|
||||
@@ -26,6 +27,15 @@ let
|
||||
example = "set title";
|
||||
};
|
||||
|
||||
type = lib.mkOption {
|
||||
type = lib.types.either (lib.types.enum [
|
||||
"lua"
|
||||
"viml"
|
||||
]) lib.types.str;
|
||||
description = "Language used in config. Configurations are aggregated per-language.";
|
||||
default = "viml";
|
||||
};
|
||||
|
||||
optional = mkEnableOption "optional" // {
|
||||
description = "Don't load automatically on startup (load with :packadd)";
|
||||
};
|
||||
@@ -78,12 +88,20 @@ in
|
||||
|
||||
userPluginViml = lib.mkOption {
|
||||
readOnly = true;
|
||||
type = lib.types.listOf lib.types.lines;
|
||||
type = lib.types.nullOr lib.types.lines;
|
||||
description = ''
|
||||
The viml config set by the user.
|
||||
'';
|
||||
};
|
||||
|
||||
userPluginConfigs = lib.mkOption {
|
||||
readOnly = true;
|
||||
type = lib.types.attrsOf lib.types.lines;
|
||||
description = ''
|
||||
The user configurations (viml, lua, ...) set by the user.
|
||||
'';
|
||||
};
|
||||
|
||||
pluginPython3Packages = lib.mkOption {
|
||||
readOnly = true;
|
||||
type = lib.types.listOf (lib.types.functionTo (lib.types.listOf lib.types.package));
|
||||
@@ -106,6 +124,13 @@ in
|
||||
config =
|
||||
let
|
||||
pluginsNormalized = config.plugins;
|
||||
|
||||
userPluginConfigs =
|
||||
let
|
||||
grouped = lib.groupBy (x: x.type) pluginsNormalized;
|
||||
configsOnly = lib.foldl (acc: p: if p.config != null then acc ++ [ p.config ] else acc) [ ];
|
||||
in
|
||||
lib.mapAttrs (_name: vals: lib.concatStringsSep "\n" (configsOnly vals)) grouped;
|
||||
in
|
||||
{
|
||||
pluginAdvisedLua =
|
||||
@@ -125,9 +150,9 @@ in
|
||||
in
|
||||
lib.foldl' op [ ] pluginsNormalized;
|
||||
|
||||
userPluginViml = lib.foldl (
|
||||
acc: p: if p.config != null then acc ++ [ p.config ] else acc
|
||||
) [ ] pluginsNormalized;
|
||||
userPluginViml = userPluginConfigs.viml or null;
|
||||
|
||||
inherit userPluginConfigs;
|
||||
|
||||
pluginPython3Packages = map (plugin: plugin.python3Dependencies or (_: [ ])) pluginsNormalized;
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
writeText,
|
||||
neovim,
|
||||
vimPlugins,
|
||||
neovimUtils,
|
||||
wrapNeovimUnstable,
|
||||
neovim-unwrapped,
|
||||
fetchFromGitLab,
|
||||
@@ -21,8 +20,6 @@
|
||||
pkgs,
|
||||
}:
|
||||
let
|
||||
inherit (neovimUtils) makeNeovimConfig;
|
||||
|
||||
plugins = with vimPlugins; [
|
||||
{
|
||||
plugin = vim-obsession;
|
||||
@@ -30,6 +27,14 @@ let
|
||||
map <Leader>$ <Cmd>Obsession<CR>
|
||||
'';
|
||||
}
|
||||
{
|
||||
plugin = vim-obsession;
|
||||
type = "lua";
|
||||
config = ''
|
||||
-- this is a comment
|
||||
vim.g.nixpkgs_test_value = 42
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
packagesWithSingleLineConfigs = with vimPlugins; [
|
||||
@@ -43,20 +48,6 @@ let
|
||||
}
|
||||
];
|
||||
|
||||
nvimConfSingleLines = {
|
||||
plugins = packagesWithSingleLineConfigs;
|
||||
neovimRcContent = ''
|
||||
" just a comment
|
||||
'';
|
||||
};
|
||||
|
||||
nvimConfNix = {
|
||||
inherit plugins;
|
||||
neovimRcContent = ''
|
||||
" just a comment
|
||||
'';
|
||||
};
|
||||
|
||||
nvim-with-luasnip = wrapNeovim2 "-with-luasnip" {
|
||||
plugins = [
|
||||
{
|
||||
@@ -105,6 +96,7 @@ let
|
||||
}
|
||||
(
|
||||
''
|
||||
export PATH="${neovim-drv}/bin:$PATH"
|
||||
source ${nmt}/bash-lib/assertions.sh
|
||||
vimrc="${writeText "test-${neovim-drv.name}-init.vim" neovim-drv.initRc}"
|
||||
luarc="${writeText "test-${neovim-drv.name}-init.lua" neovim-drv.luaRcContent}"
|
||||
@@ -139,8 +131,19 @@ pkgs.lib.recurseIntoAttrs rec {
|
||||
|
||||
### neovim tests
|
||||
##################
|
||||
nvim_with_plugins = wrapNeovim2 "-with-plugins" nvimConfNix;
|
||||
nvim_singlelines = wrapNeovim2 "-single-lines" nvimConfSingleLines;
|
||||
nvim_with_plugins = wrapNeovim2 "-with-plugins" {
|
||||
inherit plugins;
|
||||
neovimRcContent = ''
|
||||
" just a comment
|
||||
'';
|
||||
};
|
||||
|
||||
nvim_singlelines = wrapNeovim2 "-single-lines" {
|
||||
plugins = packagesWithSingleLineConfigs;
|
||||
neovimRcContent = ''
|
||||
" just a comment
|
||||
'';
|
||||
};
|
||||
|
||||
# test that passthru.initRc hasn't changed
|
||||
passthruInitRc = runTest nvim_singlelines ''
|
||||
@@ -413,12 +416,19 @@ pkgs.lib.recurseIntoAttrs rec {
|
||||
# check that bringing in one plugin with lua deps makes those deps visible from wrapper
|
||||
# for instance luasnip has a dependency on jsregexp
|
||||
can_require_transitive_deps = runTest nvim-with-luasnip ''
|
||||
${nvim-with-luasnip}/bin/nvim -i NONE -c "lua require'jsregexp'" -e +quitall!
|
||||
nvim --headless -i NONE -c "lua require'jsregexp'" -e +quitall!
|
||||
'';
|
||||
|
||||
inherit nvim_with_rocks_nvim;
|
||||
rocks_install_plenary = runTest nvim_with_rocks_nvim ''
|
||||
${nvim_with_rocks_nvim}/bin/nvim -V3log.txt -i NONE +'Rocks install plenary.nvim' +quit! -e
|
||||
nvim -V3rocks-log.txt -i NONE +'Rocks install plenary.nvim' +quit! -e
|
||||
'';
|
||||
|
||||
can_load_lua_config = runTest nvim_with_plugins ''
|
||||
if ! nvim --headless -V3lua-config-log.txt -i NONE -c 'lua if vim.g.nixpkgs_test_value ~= 42 then os.exit(42) end' +quit! -e; then
|
||||
echo "Failed to find plugin config"
|
||||
exit 1
|
||||
fi
|
||||
'';
|
||||
|
||||
inherit (vimPlugins) corePlugins;
|
||||
|
||||
@@ -6,12 +6,8 @@
|
||||
config,
|
||||
vimUtils,
|
||||
vimPlugins,
|
||||
nodejs,
|
||||
neovim-unwrapped,
|
||||
bundlerEnv,
|
||||
ruby,
|
||||
lua,
|
||||
python3Packages,
|
||||
wrapNeovimUnstable,
|
||||
}:
|
||||
let
|
||||
@@ -109,11 +105,12 @@ let
|
||||
|
||||
# viml config set by the user along with the plugin
|
||||
inherit (checked_cfg)
|
||||
userPluginViml
|
||||
userPluginViml # redefine via userPluginConfigs
|
||||
runtimeDeps
|
||||
pluginAdvisedLua
|
||||
pluginPython3Packages
|
||||
luaDependencies
|
||||
userPluginConfigs
|
||||
;
|
||||
|
||||
# A Vim "package", see ':h packages'
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
neovimUtils,
|
||||
perl,
|
||||
lndir,
|
||||
vimUtils,
|
||||
runCommand,
|
||||
}:
|
||||
|
||||
@@ -100,7 +99,10 @@ let
|
||||
|
||||
# we call vimrcContent without 'packages' to avoid the init.vim generation
|
||||
neovimRcContent' = lib.concatStringsSep "\n" (
|
||||
vimPackageInfo.userPluginViml ++ lib.optional (neovimRcContent != null) neovimRcContent
|
||||
lib.optional (vimPackageInfo.userPluginConfigs.viml or "" != "") (
|
||||
vimPackageInfo.userPluginConfigs.viml
|
||||
)
|
||||
++ (lib.optional (neovimRcContent != null) neovimRcContent)
|
||||
);
|
||||
|
||||
packpathDirs.myNeovimPackages = vimPackageInfo.vimPackage;
|
||||
@@ -126,6 +128,9 @@ let
|
||||
lib.optional (luaDeps != [ ]) luaPathLuaRc
|
||||
++ [ providerLuaRc ]
|
||||
++ lib.optional (luaRcContent != "") luaRcContent
|
||||
++ lib.optional (
|
||||
vimPackageInfo.userPluginConfigs.lua or "" != ""
|
||||
) vimPackageInfo.userPluginConfigs.lua
|
||||
++ lib.optional (neovimRcContent' != "") ''
|
||||
vim.cmd.source "${writeText "init.vim" neovimRcContent'}"
|
||||
''
|
||||
|
||||
@@ -5980,6 +5980,19 @@ final: prev: {
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
git-dev-nvim = buildVimPlugin {
|
||||
pname = "git-dev.nvim";
|
||||
version = "0.11.0-unstable-2026-04-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "moyiz";
|
||||
repo = "git-dev.nvim";
|
||||
rev = "916c7309c34bd8f53da1e30f31cec697e9ac5e52";
|
||||
hash = "sha256-5KSjh/Gh8sXrQ7YU66XaaM1M1a3LZswamoBtnA6qiKg=";
|
||||
};
|
||||
meta.homepage = "https://github.com/moyiz/git-dev.nvim/";
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
git-messenger-vim = buildVimPlugin {
|
||||
pname = "git-messenger.vim";
|
||||
version = "0-unstable-2025-05-30";
|
||||
@@ -23777,6 +23790,19 @@ final: prev: {
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
zen-nvim = buildVimPlugin {
|
||||
pname = "zen.nvim";
|
||||
version = "0-unstable-2026-04-12";
|
||||
src = fetchFromGitHub {
|
||||
owner = "sand4rt";
|
||||
repo = "zen.nvim";
|
||||
rev = "31d0d45a56eae2a750818b7afa9f504044d7e382";
|
||||
hash = "sha256-vmQ3dJpMACv4oP4MKuIHe3PVs1ZMy0916lNRmtbzZ88=";
|
||||
};
|
||||
meta.homepage = "https://github.com/sand4rt/zen.nvim/";
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
zenbones-nvim = buildVimPlugin {
|
||||
pname = "zenbones.nvim";
|
||||
version = "4.11.0-unstable-2026-02-11";
|
||||
|
||||
@@ -458,6 +458,7 @@ https://github.com/eagletmt/ghcmod-vim/,,
|
||||
https://github.com/f-person/git-blame.nvim/,,
|
||||
https://github.com/akinsho/git-conflict.nvim/,HEAD,
|
||||
https://github.com/juansalvatore/git-dashboard-nvim/,HEAD,
|
||||
https://github.com/moyiz/git-dev.nvim/,,
|
||||
https://github.com/rhysd/git-messenger.vim/,,
|
||||
https://github.com/mikesmithgh/git-prompt-string-lualine.nvim/,HEAD,
|
||||
https://github.com/polarmutex/git-worktree.nvim/,HEAD,
|
||||
@@ -1827,6 +1828,7 @@ https://github.com/KabbAmine/zeavim.vim/,,
|
||||
https://github.com/swaits/zellij-nav.nvim/,HEAD,
|
||||
https://github.com/Lilja/zellij.nvim/,HEAD,
|
||||
https://github.com/folke/zen-mode.nvim/,,
|
||||
https://github.com/sand4rt/zen.nvim/,HEAD,
|
||||
https://github.com/zenbones-theme/zenbones.nvim/,HEAD,
|
||||
https://github.com/jnurmine/zenburn/,,
|
||||
https://github.com/nvimdev/zephyr-nvim/,,
|
||||
|
||||
@@ -73,10 +73,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
mainProgram = "openbangla-gui";
|
||||
homepage = "https://openbangla.github.io/";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [
|
||||
hqurve
|
||||
johnrtitor
|
||||
];
|
||||
maintainers = with lib.maintainers; [ johnrtitor ];
|
||||
platforms = lib.platforms.linux;
|
||||
# never built on aarch64-linux since first introduction in nixpkgs
|
||||
broken = stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64;
|
||||
|
||||
@@ -1,28 +1,35 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonApplication,
|
||||
fetchPypi,
|
||||
fetchFromGitHub,
|
||||
libevdev,
|
||||
paramiko,
|
||||
pynput,
|
||||
setuptools,
|
||||
screeninfo,
|
||||
tkinter,
|
||||
}:
|
||||
|
||||
buildPythonApplication rec {
|
||||
buildPythonApplication {
|
||||
pname = "remarkable-mouse";
|
||||
version = "7.1.1";
|
||||
format = "setuptools";
|
||||
version = "unstable-2024-02-23";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-82P9tE3jiUlKBGZCiWDoL+9VJ06Bc+If+aMfcEEU90U=";
|
||||
src = fetchFromGitHub {
|
||||
owner = "Evidlo";
|
||||
repo = "remarkable_mouse";
|
||||
rev = "05142ef37a8b3f9e350156a14c2dec6844ed0ea8";
|
||||
hash = "sha256-0X/7SIfSnlEL98fxJBAYrHAkRmdtymqA7xBmVoa5VIw=";
|
||||
};
|
||||
|
||||
pyproject = true;
|
||||
build-system = [ setuptools ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
screeninfo
|
||||
paramiko
|
||||
pynput
|
||||
libevdev
|
||||
tkinter
|
||||
];
|
||||
|
||||
# no tests
|
||||
|
||||
@@ -110,13 +110,13 @@
|
||||
"vendorHash": null
|
||||
},
|
||||
"bpg_proxmox": {
|
||||
"hash": "sha256-1bNiIhF5AyvpQZYIOu9YHa+ACx/mE+1MRUdK8AcHuv0=",
|
||||
"hash": "sha256-D8pHNC3iof/zSVsCLAu2S6BJlUnUGySQc0tP4RfZ9V0=",
|
||||
"homepage": "https://registry.terraform.io/providers/bpg/proxmox",
|
||||
"owner": "bpg",
|
||||
"repo": "terraform-provider-proxmox",
|
||||
"rev": "v0.100.0",
|
||||
"rev": "v0.101.1",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-l0acl8PpDN/o2OHVRirswy297L/VM8MC85OrsPbyo0s="
|
||||
"vendorHash": "sha256-oEl7thSbcviz3pDOYE6ovCBBA4Zdmoss8H/On33zL2o="
|
||||
},
|
||||
"brightbox_brightbox": {
|
||||
"hash": "sha256-pwFbCP+qDL/4IUfbPRCkddkbsEEeAu7Wp12/mDL0ABA=",
|
||||
@@ -824,13 +824,13 @@
|
||||
"vendorHash": "sha256-7mJ+BX7laBKsr4DX1keMXnGi79CZp8M1jD0COQ1lcmU="
|
||||
},
|
||||
"kreuzwerker_docker": {
|
||||
"hash": "sha256-fektxIObUvQSHeu1MJL3lirF+oUq8+CheaxcPDoQB+k=",
|
||||
"hash": "sha256-PwImvuX6NkdYFjS4I7BbTZWEIVsJ01rsfiLcLfGales=",
|
||||
"homepage": "https://registry.terraform.io/providers/kreuzwerker/docker",
|
||||
"owner": "kreuzwerker",
|
||||
"repo": "terraform-provider-docker",
|
||||
"rev": "v4.0.0",
|
||||
"rev": "v4.1.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-wqHArSldDyAxFX0Hmcl6FRDzfRuZGssl1h4GjN/0mgQ="
|
||||
"vendorHash": "sha256-3NlY3EysHcRu7aV4NoJxF2IhQ17F9JtxldC5+x3PbL0="
|
||||
},
|
||||
"launchdarkly_launchdarkly": {
|
||||
"hash": "sha256-lcemT7kpBlZX35Sb+ujHzSdakBQkUSmYAxTVsJkRW6A=",
|
||||
|
||||
@@ -121,7 +121,7 @@ stdenv.mkDerivation rec {
|
||||
lgpl3Plus
|
||||
mit
|
||||
];
|
||||
maintainers = with lib.maintainers; [ hqurve ];
|
||||
maintainers = [ ];
|
||||
mainProgram = "labplot2";
|
||||
platforms = lib.platforms.unix;
|
||||
};
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
symlinkJoin,
|
||||
makeWrapper,
|
||||
runCommand,
|
||||
writeText,
|
||||
doInstallCheck ? true,
|
||||
# packages that use bats (for update testing)
|
||||
bash-preexec,
|
||||
@@ -151,59 +152,58 @@ resholve.mkDerivation rec {
|
||||
wrapProgram "$out/bin/bats" \
|
||||
--suffix BATS_LIB_PATH : "$out/share/bats"
|
||||
'';
|
||||
|
||||
inherit meta;
|
||||
};
|
||||
|
||||
passthru.tests = {
|
||||
libraries =
|
||||
runCommand "${bats.name}-with-libraries-test"
|
||||
{
|
||||
testScript = ''
|
||||
setup() {
|
||||
bats_load_library bats-support
|
||||
bats_load_library bats-assert
|
||||
bats_load_library bats-file
|
||||
bats_load_library bats-detik/detik.bash
|
||||
let
|
||||
testScript = writeText "bats-libraries-test-script" ''
|
||||
setup() {
|
||||
bats_load_library bats-support
|
||||
bats_load_library bats-assert
|
||||
bats_load_library bats-file
|
||||
bats_load_library bats-detik/detik.bash
|
||||
|
||||
bats_require_minimum_version 1.5.0
|
||||
bats_require_minimum_version 1.5.0
|
||||
|
||||
TEST_TEMP_DIR="$(temp_make --prefix 'nixpkgs-bats-test')"
|
||||
}
|
||||
TEST_TEMP_DIR="$(temp_make --prefix 'nixpkgs-bats-test')"
|
||||
}
|
||||
|
||||
teardown() {
|
||||
temp_del "$TEST_TEMP_DIR"
|
||||
}
|
||||
teardown() {
|
||||
temp_del "$TEST_TEMP_DIR"
|
||||
}
|
||||
|
||||
@test echo_hi {
|
||||
run -0 echo hi
|
||||
assert_output "hi"
|
||||
}
|
||||
@test echo_hi {
|
||||
run -0 echo hi
|
||||
assert_output "hi"
|
||||
}
|
||||
|
||||
@test cp_failure {
|
||||
run ! cp
|
||||
assert_line --index 0 "cp: missing file operand"
|
||||
assert_line --index 1 "Try 'cp --help' for more information."
|
||||
}
|
||||
@test cp_failure {
|
||||
run ! cp
|
||||
assert_line --index 0 "cp: missing file operand"
|
||||
assert_line --index 1 "Try 'cp --help' for more information."
|
||||
}
|
||||
|
||||
@test file_exists {
|
||||
echo "hi" > "$TEST_TEMP_DIR/hello.txt"
|
||||
assert_file_exist "$TEST_TEMP_DIR/hello.txt"
|
||||
run cat "$TEST_TEMP_DIR/hello.txt"
|
||||
assert_output "hi"
|
||||
}
|
||||
'';
|
||||
passAsFile = [ "testScript" ];
|
||||
}
|
||||
''
|
||||
${
|
||||
bats.withLibraries (p: [
|
||||
p.bats-support
|
||||
p.bats-assert
|
||||
p.bats-file
|
||||
p.bats-detik
|
||||
])
|
||||
}/bin/bats "$testScriptPath"
|
||||
touch "$out"
|
||||
@test file_exists {
|
||||
echo "hi" > "$TEST_TEMP_DIR/hello.txt"
|
||||
assert_file_exist "$TEST_TEMP_DIR/hello.txt"
|
||||
run cat "$TEST_TEMP_DIR/hello.txt"
|
||||
assert_output "hi"
|
||||
}
|
||||
'';
|
||||
batsWithLibraries = bats.withLibraries (p: [
|
||||
p.bats-support
|
||||
p.bats-assert
|
||||
p.bats-file
|
||||
p.bats-detik
|
||||
]);
|
||||
in
|
||||
runCommand "${bats.name}-with-libraries-test" { } ''
|
||||
${lib.getExe batsWithLibraries} "${testScript}"
|
||||
touch "$out"
|
||||
'';
|
||||
|
||||
upstream = bats.unresholved.overrideAttrs (old: {
|
||||
name = "${bats.name}-tests";
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "cdncheck";
|
||||
version = "1.2.30";
|
||||
version = "1.2.31";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "projectdiscovery";
|
||||
repo = "cdncheck";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-CzTwax3XuUt5ZJsYXIbXHz3czev6natd1WsTQIrokEE=";
|
||||
hash = "sha256-IHImxkPuid5dALQ6YUf0eYHs4AlV5vF+w7xQXw+z05o=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-z/wOCtd39ENUe8WQUst4uhl8R6RwCDdcUC4OZcRJWSs=";
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "cloudfox";
|
||||
version = "2.0.1";
|
||||
version = "2.0.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "BishopFox";
|
||||
repo = "cloudfox";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-l342y30DFDmq2LDVr5L2ayLNUdC97zBwwL2w8C9MAek=";
|
||||
hash = "sha256-vP19+COji92pm0a08PCE6KNaXgOWajavSuwhlaaPhl0=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-RnAScQlq8GCTYwhugSZC0I8Crf7CYriidICq1PEII+g=";
|
||||
vendorHash = "sha256-cQxmDyr+K0Gvv4QdWs9A/Ju7X53+zHQ+OXKI+SySUik=";
|
||||
|
||||
ldflags = [
|
||||
"-w"
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
{ python3Packages }:
|
||||
|
||||
(python3Packages.toPythonApplication python3Packages.connect-box3).overrideAttrs {
|
||||
__structuredAttrs = true;
|
||||
}
|
||||
@@ -71,6 +71,6 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
'';
|
||||
platforms = lib.platforms.all;
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ hqurve ];
|
||||
maintainers = [ ];
|
||||
};
|
||||
})
|
||||
|
||||
@@ -75,10 +75,16 @@ let
|
||||
|
||||
# Desktop items, icons and metainfo are not installed automatically
|
||||
postInstall = ''
|
||||
# Czkawka
|
||||
install -Dm444 -t $out/share/applications data/com.github.qarmin.czkawka.desktop
|
||||
install -Dm444 -t $out/share/icons/hicolor/scalable/apps data/icons/com.github.qarmin.czkawka.svg
|
||||
install -Dm444 -t $out/share/icons/hicolor/scalable/apps data/icons/com.github.qarmin.czkawka-symbolic.svg
|
||||
install -Dm444 -t $out/share/metainfo data/com.github.qarmin.czkawka.metainfo.xml
|
||||
|
||||
# Krokiet
|
||||
install -Dm444 -t $out/share/applications data/io.github.qarmin.krokiet.desktop
|
||||
install -Dm444 -t $out/share/icons/hicolor/scalable/apps data/icons/io.github.qarmin.krokiet.svg
|
||||
install -Dm444 -t $out/share/metainfo data/io.github.qarmin.krokiet.metainfo.xml
|
||||
'';
|
||||
dontWrapGApps = true;
|
||||
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import ./generic.nix {
|
||||
version = "2.3.21.1";
|
||||
hash = "sha256-1THBB401r6AnZbnHGhIq+o+nR8v94O0mIX68Pv0miiE=";
|
||||
patches = fetchpatch: [
|
||||
# Fix loading extended modules.
|
||||
./load-extended-modules.patch
|
||||
# fix openssl 3.0 compatibility
|
||||
(fetchpatch {
|
||||
url = "https://salsa.debian.org/debian/dovecot/-/raw/debian/1%252.3.19.1+dfsg1-2/debian/patches/Support-openssl-3.0.patch";
|
||||
hash = "sha256-PbBB1jIY3jIC8Js1NY93zkV0gISGUq7Nc67Ul5tN7sw=";
|
||||
})
|
||||
(fetchpatch {
|
||||
name = "dovecot-test-data-stack-drop-bogus-assertion.patch";
|
||||
url = "https://github.com/dovecot/core/commit/9f642dd868db6e7401f24e4fb4031b5bdca8aae7.patch";
|
||||
hash = "sha256-dAX80dRqOba9Fkzl11ChYJ6vqcgfkaw/o+TOQKCnnns=";
|
||||
})
|
||||
];
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
import ./generic.nix {
|
||||
version = "2.4.3";
|
||||
hash = "sha256-NTtQMHK/IzAYHKb1lxClUUJkyJpeLo7mKRCAR1GaUTo=";
|
||||
patches = _: [
|
||||
# Fix loading extended modules.
|
||||
./load-extended-modules.patch
|
||||
];
|
||||
}
|
||||
@@ -33,8 +33,7 @@
|
||||
fetchpatch,
|
||||
rpcsvc-proto,
|
||||
libtirpc,
|
||||
dovecot_pigeonhole_0_5,
|
||||
dovecot_pigeonhole ? dovecot_pigeonhole_0_5,
|
||||
dovecot_pigeonhole,
|
||||
withApparmor ? false,
|
||||
libapparmor,
|
||||
withLDAP ? true,
|
||||
|
||||
@@ -1,18 +1,8 @@
|
||||
import ./generic.nix {
|
||||
version = "2.3.21.1";
|
||||
hash = "sha256-1THBB401r6AnZbnHGhIq+o+nR8v94O0mIX68Pv0miiE=";
|
||||
patches = fetchpatch: [
|
||||
version = "2.4.3";
|
||||
hash = "sha256-NTtQMHK/IzAYHKb1lxClUUJkyJpeLo7mKRCAR1GaUTo=";
|
||||
patches = _: [
|
||||
# Fix loading extended modules.
|
||||
./load-extended-modules.patch
|
||||
# fix openssl 3.0 compatibility
|
||||
(fetchpatch {
|
||||
url = "https://salsa.debian.org/debian/dovecot/-/raw/debian/1%252.3.19.1+dfsg1-2/debian/patches/Support-openssl-3.0.patch";
|
||||
hash = "sha256-PbBB1jIY3jIC8Js1NY93zkV0gISGUq7Nc67Ul5tN7sw=";
|
||||
})
|
||||
(fetchpatch {
|
||||
name = "dovecot-test-data-stack-drop-bogus-assertion.patch";
|
||||
url = "https://github.com/dovecot/core/commit/9f642dd868db6e7401f24e4fb4031b5bdca8aae7.patch";
|
||||
hash = "sha256-dAX80dRqOba9Fkzl11ChYJ6vqcgfkaw/o+TOQKCnnns=";
|
||||
})
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
import ./generic.nix {
|
||||
version = "0.5.21.1";
|
||||
url =
|
||||
{
|
||||
version,
|
||||
dovecotMajorMinor,
|
||||
}:
|
||||
"https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-${dovecotMajorMinor}-pigeonhole-${version}.tar.gz";
|
||||
hash = "sha256-andOWZmgWYIPATEk0V+mHmReL+quG81azwPkBMoo9OE=";
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
import ./generic.nix {
|
||||
version = "2.4.3";
|
||||
url =
|
||||
{
|
||||
version,
|
||||
dovecotMajorMinor,
|
||||
}:
|
||||
"https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-pigeonhole-${version}.tar.gz";
|
||||
hash = "sha256-LQNhqYnBVICabluj8F07UOZR5frt6bd9JSyuHJDS6hc=";
|
||||
patches = fetchpatch: [
|
||||
# https://github.com/NixOS/nixpkgs/pull/388463#issuecomment-3066016707
|
||||
(fetchpatch {
|
||||
url = "https://github.com/dovecot/pigeonhole/commit/517d74aa1d98b853b72608ce722bc58009c0f4a9.patch";
|
||||
hash = "sha256-BLBz9ZhOGEIIitnXG0uM6bZBRNnQBy4K2IJlh1+Un50=";
|
||||
})
|
||||
];
|
||||
}
|
||||
@@ -9,8 +9,7 @@
|
||||
stdenv,
|
||||
fetchpatch,
|
||||
fetchzip,
|
||||
dovecot_2_3,
|
||||
dovecot ? dovecot_2_3,
|
||||
dovecot,
|
||||
openssl,
|
||||
libstemmer,
|
||||
perl,
|
||||
|
||||
@@ -1,10 +1,17 @@
|
||||
import ./generic.nix {
|
||||
version = "0.5.21.1";
|
||||
version = "2.4.3";
|
||||
url =
|
||||
{
|
||||
version,
|
||||
dovecotMajorMinor,
|
||||
}:
|
||||
"https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-${dovecotMajorMinor}-pigeonhole-${version}.tar.gz";
|
||||
hash = "sha256-andOWZmgWYIPATEk0V+mHmReL+quG81azwPkBMoo9OE=";
|
||||
"https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-pigeonhole-${version}.tar.gz";
|
||||
hash = "sha256-LQNhqYnBVICabluj8F07UOZR5frt6bd9JSyuHJDS6hc=";
|
||||
patches = fetchpatch: [
|
||||
# https://github.com/NixOS/nixpkgs/pull/388463#issuecomment-3066016707
|
||||
(fetchpatch {
|
||||
url = "https://github.com/dovecot/pigeonhole/commit/517d74aa1d98b853b72608ce722bc58009c0f4a9.patch";
|
||||
hash = "sha256-BLBz9ZhOGEIIitnXG0uM6bZBRNnQBy4K2IJlh1+Un50=";
|
||||
})
|
||||
];
|
||||
}
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "exploitdb";
|
||||
version = "2026-04-07";
|
||||
version = "2026-04-11";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "exploit-database";
|
||||
repo = "exploitdb";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-tq0E5Kzp4T+eYfA4Q4kR5kbpWrtnyKoNEpJNJCDcEKc=";
|
||||
hash = "sha256-Gxi+gb9PbjF2QYDYClSBqru8pebf8ay0AvJnCEYbaSc=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
}:
|
||||
|
||||
let
|
||||
version = "2.62.2";
|
||||
version = "2.63.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "filebrowser";
|
||||
repo = "filebrowser";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-yjy3RMgC38oktxMpvw78w5VVCUE/1+Lv37G/RJaQte0=";
|
||||
hash = "sha256-pAD7mEiDQyfmKmClO9oMLgPua0jOrcImiQrSGLvhCEA=";
|
||||
};
|
||||
|
||||
frontend = buildNpmPackage rec {
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
}:
|
||||
buildNpmPackage rec {
|
||||
pname = "flood";
|
||||
version = "4.13.0";
|
||||
version = "4.13.9";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jesec";
|
||||
repo = "flood";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-3q9a3WwTHzKbZTptSBTevReu2q4XIkSmFzX0MJQAbc4=";
|
||||
hash = "sha256-0jez1JwgE7J4EOm5wC/hFpvaP4+Zl/XvupLYAR/tGJQ=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pnpm_9 ];
|
||||
@@ -31,7 +31,7 @@ buildNpmPackage rec {
|
||||
;
|
||||
pnpm = pnpm_9;
|
||||
fetcherVersion = 1;
|
||||
hash = "sha256-ukhZ1SCejwi0n3PubBo5qIRE/8snjHSZaGVIbHKvwdI=";
|
||||
hash = "sha256-CT0e/IaAhFqRG+FdlA6ZIXOcmy1IzDdd677XV81SgHY=";
|
||||
};
|
||||
|
||||
passthru = {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "flyctl";
|
||||
version = "0.4.29";
|
||||
version = "0.4.33";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "superfly";
|
||||
@@ -22,11 +22,11 @@ buildGoModule rec {
|
||||
cd "$out"
|
||||
git rev-parse HEAD > COMMIT
|
||||
'';
|
||||
hash = "sha256-mpyxl8Bjk6d0nCmnl+yzp0GtKiugjLykCFlfnf53+K4=";
|
||||
hash = "sha256-d6GcWiEf/Ir8Uut+xEQagOCcEjOoIxGPvvYC2fqzQPo=";
|
||||
};
|
||||
|
||||
proxyVendor = true;
|
||||
vendorHash = "sha256-BqlLRnyr0m57lshGsjElK39JKYoJrIr281SevOUVhzI=";
|
||||
vendorHash = "sha256-YO1/E1ys2rt/7nswYsuwynlACH3XsKtsrVRqzoJlny0=";
|
||||
|
||||
subPackages = [ "." ];
|
||||
|
||||
|
||||
@@ -16,16 +16,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "gleam";
|
||||
version = "1.15.2";
|
||||
version = "1.15.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "gleam-lang";
|
||||
repo = "gleam";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-A5rss4+hTLiE0mylzTT1sw18MmDdYBIyu6xLTvMJ1YY=";
|
||||
hash = "sha256-BTbBcmGOoII7GP68RNl/U2PCNQdG2vdwq1/3/brMuIc=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-VyVcBAqwrgwiyUXkKPbfP4qTKtFOMCUD0Tho79xJxC8=";
|
||||
cargoHash = "sha256-+5sGYrqF8CKG5/G1QEQEnMZDFnE8D40TBGygdHBBthA=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
|
||||
@@ -27,6 +27,8 @@ buildGoModule (finalAttrs: {
|
||||
"-X github.com/0xjuanma/golazo/cmd.Version=v${finalAttrs.version}"
|
||||
];
|
||||
|
||||
__structuredAttrs = true;
|
||||
|
||||
passthru.updateScript = gitUpdater {
|
||||
rev-prefix = "v";
|
||||
};
|
||||
|
||||
@@ -168,7 +168,7 @@ let
|
||||
fi
|
||||
|
||||
# Write the snapshot file to the `.install` folder
|
||||
cp $snapshotPath $out/google-cloud-sdk/.install/${pname}.snapshot.json
|
||||
printf "%s" "$snapshot" > $out/google-cloud-sdk/.install/${pname}.snapshot.json
|
||||
'';
|
||||
nativeBuildInputs = [
|
||||
python3
|
||||
@@ -185,7 +185,7 @@ let
|
||||
passthru = {
|
||||
dependencies = filterForSystem dependencies;
|
||||
};
|
||||
passAsFile = [ "snapshot" ];
|
||||
__structuredAttrs = true;
|
||||
meta = {
|
||||
inherit description platforms;
|
||||
};
|
||||
|
||||
@@ -22,21 +22,16 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "gource";
|
||||
version = "0.55";
|
||||
version = "0.56";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/acaudwell/Gource/releases/download/gource-${finalAttrs.version}/gource-${finalAttrs.version}.tar.gz";
|
||||
hash = "sha256-yCOSEtKLB1CNnkd2GZdoAmgWKPwl6z4E9mcRdwE8AUI=";
|
||||
hash = "sha256-My2Jual5sXQX+84O3XKxmRTxQJ/RJqE9EXh9DhXcDXk=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
# remove bundled library
|
||||
rm -r src/tinyxml
|
||||
|
||||
# Fix build with boost 1.89
|
||||
rm m4/ax_boost_system.m4
|
||||
substituteInPlace configure.ac \
|
||||
--replace-fail "AX_BOOST_SYSTEM" ""
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -71,6 +71,6 @@ maven.buildMavenPackage {
|
||||
mainProgram = "java-language-server";
|
||||
homepage = "https://github.com/georgewfraser/java-language-server";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ hqurve ];
|
||||
maintainers = [ ];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -73,7 +73,6 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
description = "Choose the application to open files and links";
|
||||
homepage = "https://apps.gnome.org/Junction/";
|
||||
license = lib.licenses.gpl3Only;
|
||||
maintainers = with lib.maintainers; [ hqurve ];
|
||||
teams = [ lib.teams.gnome-circle ];
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
|
||||
buildNpmPackage (finalAttrs: {
|
||||
pname = "liteparse";
|
||||
version = "1.4.4";
|
||||
version = "1.4.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "run-llama";
|
||||
repo = "liteparse";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-UHZaKWjzaoYbD2NHwNgvlpPfviD66zPQ6d0UWW/lrmk=";
|
||||
hash = "sha256-GUtqJsmAOrbxLc/aAIre95QD6aaFsj5ClqZfo7jdwB4=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-Wz46n7BbubC3Cq1CHOHM2q/dVOvOVNQTloHZfkAwzpg=";
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "log4cxx";
|
||||
version = "1.6.1";
|
||||
version = "1.7.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://apache/logging/log4cxx/${finalAttrs.version}/apache-log4cxx-${finalAttrs.version}.tar.gz";
|
||||
hash = "sha256-GHyFg29bLyf7Ho13x/Hyk5cl8fZJi3QrDdVpujCWX9I=";
|
||||
hash = "sha256-uUP/FwOT5M44GrTEkUOWEnv01E+4vR8OXvhFPzxNNkw=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -135,7 +135,7 @@ stdenv.mkDerivation rec {
|
||||
'';
|
||||
license = lib.licenses.mit;
|
||||
platforms = lib.platforms.unix;
|
||||
maintainers = with lib.maintainers; [ hqurve ];
|
||||
maintainers = [ ];
|
||||
mainProgram = "lorien";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -78,6 +78,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
HOME = "/tmp"; # for the font cache
|
||||
LANG = "C.UTF-8";
|
||||
QT_QPA_PLATFORM = "offscreen"; # the tests require a UI
|
||||
QT_QPA_PLATFORM_PLUGIN_PATH = "${qt'.qtbase}/${qt'.qtbase.qtPluginPrefix}/platforms";
|
||||
};
|
||||
|
||||
doCheck = true;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
procps ? null,
|
||||
versionCheckHook,
|
||||
nix-update-script,
|
||||
writableTmpDirAsHomeHook,
|
||||
|
||||
# now defaults to false because some tests can be flaky (clipboard etc), see
|
||||
# also: https://github.com/neovim/neovim/issues/16233
|
||||
@@ -161,22 +162,18 @@ stdenv.mkDerivation (
|
||||
unibilium
|
||||
utf8proc
|
||||
]
|
||||
++ lib.optionals finalAttrs.finalPackage.doCheck [
|
||||
glibcLocales
|
||||
procps
|
||||
]
|
||||
++ lib.optionals (stdenv.hostPlatform.libc != "glibc") [
|
||||
# Provide libintl for non-glibc platforms
|
||||
gettext
|
||||
];
|
||||
|
||||
doCheck = false;
|
||||
doCheck = true;
|
||||
|
||||
# to be exhaustive, one could run
|
||||
# make oldtests too
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
make functionaltest
|
||||
make functionaltest__treesitter
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
@@ -219,6 +216,7 @@ stdenv.mkDerivation (
|
||||
# third-party/CMakeLists.txt is not read at all.
|
||||
(lib.cmakeBool "USE_BUNDLED" false)
|
||||
(lib.cmakeBool "ENABLE_TRANSLATIONS" true)
|
||||
(lib.cmakeBool "USE_BUNDLED_BUSTED" false)
|
||||
]
|
||||
++ (
|
||||
if lua.pkgs.isLuaJIT then
|
||||
@@ -252,6 +250,12 @@ stdenv.mkDerivation (
|
||||
|
||||
nativeInstallCheckInputs = [
|
||||
versionCheckHook
|
||||
lua.pkgs.busted
|
||||
writableTmpDirAsHomeHook
|
||||
glibcLocales
|
||||
|
||||
# needs git for vim.pack tests as well
|
||||
procps
|
||||
];
|
||||
versionCheckProgram = "${placeholder "out"}/bin/nvim";
|
||||
doInstallCheck = true;
|
||||
|
||||
@@ -323,7 +323,7 @@ def build_and_activate_system(
|
||||
if args.diff:
|
||||
if current_config.exists():
|
||||
nix.diff_closures(
|
||||
current_config=current_config.readlink(),
|
||||
current_config=current_config,
|
||||
new_config=path_to_config,
|
||||
target_host=target_host,
|
||||
)
|
||||
|
||||
@@ -33,13 +33,13 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
strictDeps = true;
|
||||
|
||||
pname = "onnx";
|
||||
version = "1.20.1";
|
||||
version = "1.21.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "onnx";
|
||||
repo = "onnx";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-XZJXD6sBvVJ6cLPyDkKOW8oSkjqcw9whUqDWd7dxY3c=";
|
||||
hash = "sha256-eF6BdTwTuHh6ckuLGN1d6z2GLU47lPqtzu4zIv8+cTs=";
|
||||
};
|
||||
|
||||
outputs = [
|
||||
|
||||
@@ -9,5 +9,5 @@ buildNpmPackage (finalAttrs: {
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/webui";
|
||||
|
||||
npmDepsHash = "sha256-IpqineYa15GBqoPDJ7RpaDsq+MQIIDcdq7yhwmH4Lzo=";
|
||||
npmDepsHash = "sha256-Epz+pCbgejkj7vcdwbPC2RfAkp2HRqGV0urXiiBrjZQ=";
|
||||
})
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "open5gs";
|
||||
version = "2.7.6";
|
||||
version = "2.7.7";
|
||||
|
||||
diameter = fetchFromGitHub {
|
||||
owner = "open5gs";
|
||||
@@ -38,8 +38,8 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
libtins = fetchFromGitHub {
|
||||
owner = "open5gs";
|
||||
repo = "libtins";
|
||||
rev = "fb152ba63bd8d7d024d5f86e5fbd24a4cb3dd93d"; # r4.3
|
||||
hash = "sha256-q++F1bvf739P82VpUf4TUygHjhYwOsaQzStJv8PN2Hc=";
|
||||
rev = "bf22438172d269e6db70e27246dffd8e1f0b96e3"; # r4.5
|
||||
hash = "sha256-BxSBNKI+jwI33lN+vmYCYSDAxsVDXS190byAzq6lB/A=";
|
||||
};
|
||||
|
||||
mesonFlags = [
|
||||
@@ -58,7 +58,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
owner = "open5gs";
|
||||
repo = "open5gs";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-2k+S+OXfdskJPtDUFSxb/+2UZcUiOZzRSSGgsEJWolc=";
|
||||
hash = "sha256-ZK4q6m/9v+us+6dWpi0k188KfFu1b6G9pGE4VGAe4+4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -60,7 +60,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Free implementation of the Border Gateway Protocol, Version 4. It allows ordinary machines to be used as routers exchanging routes with other systems speaking the BGP protocol";
|
||||
license = lib.licenses.isc;
|
||||
homepage = "http://www.openbgpd.org/";
|
||||
maintainers = with lib.maintainers; [ kloenk ];
|
||||
maintainers = with lib.maintainers; [ cvengler ];
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
}:
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "pay-respects";
|
||||
version = "0.7.13";
|
||||
version = "0.8.5";
|
||||
|
||||
src = fetchFromCodeberg {
|
||||
owner = "iff";
|
||||
repo = "pay-respects";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-jKK8wc+M5U8L7D4z8aQT/VJdZE1q2Z2BTRrtw+UWoeo=";
|
||||
hash = "sha256-rI4cikbZ+J6SSs5l2WroM6862yDe8IFDqpmAV4Od5ng=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-w9BJ0S6q13udi2JWHtbCCXDjgUYo59/FRjxQGuM5r8c=";
|
||||
cargoHash = "sha256-IQMB5bYvP/1u6FItZ34GYkMBe1fVao5CK2OPGaikIbk=";
|
||||
|
||||
env = {
|
||||
_DEF_PR_AI_API_KEY = "";
|
||||
|
||||
@@ -70,7 +70,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Graphical user interface for the PDF Toolkit (PDFtk)";
|
||||
homepage = "https://pdfchain.sourceforge.io";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ hqurve ];
|
||||
maintainers = [ ];
|
||||
platforms = lib.platforms.unix;
|
||||
mainProgram = "pdfchain";
|
||||
};
|
||||
|
||||
@@ -135,7 +135,10 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
license = lib.licenses.gpl3Only;
|
||||
homepage = "https://peazip.github.io";
|
||||
platforms = lib.platforms.linux;
|
||||
maintainers = with lib.maintainers; [ annaaurora ];
|
||||
maintainers = with lib.maintainers; [
|
||||
annaaurora
|
||||
ProxyVT
|
||||
];
|
||||
mainProgram = "peazip";
|
||||
};
|
||||
})
|
||||
|
||||
@@ -2,22 +2,29 @@
|
||||
lib,
|
||||
buildGoModule,
|
||||
fetchFromGitHub,
|
||||
installShellFiles,
|
||||
}:
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "peco";
|
||||
version = "0.5.11";
|
||||
version = "0.6.0";
|
||||
|
||||
subPackages = [ "cmd/peco" ];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "peco";
|
||||
repo = "peco";
|
||||
rev = "v${finalAttrs.version}";
|
||||
sha256 = "sha256-OVUfeNpnmuJsgD//JTn6n9n4oOBxep69LhIpHX+ru2w=";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-jvjqk1t2mTxkcGFWpynf3/J5VR3G1lhOBpIFqh6OoS0=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-+HQz7UUgATdgSWlI1dg2DdQRUSke9MyAtXgLikFhF90=";
|
||||
vendorHash = "sha256-EvLi1v3c1Myx9GVvenXiZb2V5foloQzPc35VVjVLuiU=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
postInstall = ''
|
||||
installManPage contrib/man/peco.1
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Simplistic interactive filtering tool";
|
||||
|
||||
@@ -17,11 +17,18 @@ let
|
||||
xdg-user-dirs
|
||||
ncurses
|
||||
udev
|
||||
# Required for esp-idf and other frameworks that manage their own
|
||||
# Python virtual environments during the build process.
|
||||
# See: https://github.com/NixOS/nixpkgs/issues/133185
|
||||
cmake
|
||||
ninja
|
||||
])
|
||||
++ (with python.pkgs; [
|
||||
python
|
||||
setuptools
|
||||
pip
|
||||
wheel
|
||||
virtualenv
|
||||
bottle
|
||||
]);
|
||||
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "slidev-cli";
|
||||
version = "52.14.1";
|
||||
version = "52.14.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "slidevjs";
|
||||
repo = "slidev";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-GIg4KU2TJMSZXjnB+A8MPZUUp1/M1YX5ctO13dfmOz0=";
|
||||
hash = "sha256-dyvEY4jrptPt3FzOpjwkAv8akXXArzyobpzV2Y3fCr0=";
|
||||
};
|
||||
|
||||
pnpmWorkspaces = [ "@slidev/cli..." ];
|
||||
|
||||
@@ -76,10 +76,7 @@ stdenv.mkDerivation rec {
|
||||
unfree
|
||||
mit
|
||||
];
|
||||
maintainers = with lib.maintainers; [
|
||||
hqurve
|
||||
nadiaholmquist
|
||||
];
|
||||
maintainers = with lib.maintainers; [ nadiaholmquist ];
|
||||
platforms = lib.platforms.all;
|
||||
mainProgram = "SpaceCadetPinball";
|
||||
};
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
fetchFromGitHub,
|
||||
alsa-utils,
|
||||
copyDesktopItems,
|
||||
electron_39,
|
||||
electron_41,
|
||||
makeDesktopItem,
|
||||
makeWrapper,
|
||||
nix-update-script,
|
||||
@@ -16,16 +16,16 @@
|
||||
|
||||
buildNpmPackage rec {
|
||||
pname = "teams-for-linux";
|
||||
version = "2.7.13";
|
||||
version = "2.8.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "IsmaelMartinez";
|
||||
repo = "teams-for-linux";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-5JgmV4VeeM3mMlI3AI4BuF9wFzjsrLnmOCESnKbqY9c=";
|
||||
hash = "sha256-ybxJCCdam5g43Ycf+Ro3ptOr+4+49Fw+y0rqG4fEzBc=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-ChtRC+NtjZdl5mFirSSz6Jo4CvebH1UqtJ4ywfjWEOI=";
|
||||
npmDepsHash = "sha256-+VwOlzR+80m+qQS4L0IPmFTn4xuPM7aX7EtSd50D9KM=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
@@ -46,7 +46,7 @@ buildNpmPackage rec {
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
cp -r ${electron_39.dist} electron-dist
|
||||
cp -r ${electron_41.dist} electron-dist
|
||||
chmod -R u+w electron-dist
|
||||
''
|
||||
# Electron builder complains about symlink in electron-dist
|
||||
@@ -61,7 +61,7 @@ buildNpmPackage rec {
|
||||
-c.npmRebuild=true \
|
||||
-c.asarUnpack="**/*.node" \
|
||||
-c.electronDist=electron-dist \
|
||||
-c.electronVersion=${electron_39.version} \
|
||||
-c.electronVersion=${electron_41.version} \
|
||||
-c.mac.identity=null
|
||||
|
||||
runHook postBuild
|
||||
@@ -83,7 +83,7 @@ buildNpmPackage rec {
|
||||
popd
|
||||
|
||||
# Linux needs 'aplay' for notification sounds
|
||||
makeWrapper '${lib.getExe electron_39}' "$out/bin/teams-for-linux" \
|
||||
makeWrapper '${lib.getExe electron_41}' "$out/bin/teams-for-linux" \
|
||||
--prefix PATH : ${
|
||||
lib.makeBinPath [
|
||||
alsa-utils
|
||||
|
||||
@@ -5,14 +5,14 @@
|
||||
}:
|
||||
python3Packages.buildPythonApplication (finalAttrs: {
|
||||
pname = "tuxbox";
|
||||
version = "3.1.0";
|
||||
version = "3.1.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "AndyCappDev";
|
||||
repo = "tuxbox";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-jPPjGumArcnsRKQm3HKhoTGh913WEB5MUs7Y7eCHXNY=";
|
||||
hash = "sha256-+fVN6z6mxgSDcmG8F3baAMfFbb5eUkt+B0tu6+ZSqKw=";
|
||||
};
|
||||
|
||||
build-system = [ python3Packages.setuptools ];
|
||||
|
||||
@@ -39,7 +39,7 @@ let
|
||||
|
||||
hash =
|
||||
{
|
||||
x86_64-linux = "sha256-gyNZ+DyULv3TPD5YvHo8RvB/pjRtLHOsDNcD8bt/RbY=";
|
||||
x86_64-linux = "sha256-dKYGepfjgqcYflVABXGp2heI8XY1rIyMJi04aTld4ss=";
|
||||
}
|
||||
.${system} or throwSystem;
|
||||
|
||||
@@ -48,7 +48,7 @@ let
|
||||
in
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "xpipe";
|
||||
version = "22.5";
|
||||
version = "22.9";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/xpipe-io/xpipe/releases/download/${version}/xpipe-portable-linux-${arch}.tar.gz";
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "zluda";
|
||||
version = "6-preview.55";
|
||||
version = "6-preview.63";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "vosen";
|
||||
repo = "ZLUDA";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-yhWEzoDjNk1GefSqOVwowNky36ahmH/gTMdq1YTOhfE=";
|
||||
hash = "sha256-AZGSO6aV1T3elsVDJxFylhzYjkhkIy1QFtTdH4u4Lrw=";
|
||||
fetchSubmodules = true;
|
||||
fetchLFS = true;
|
||||
};
|
||||
@@ -51,7 +51,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
clang
|
||||
];
|
||||
|
||||
cargoHash = "sha256-YNBeweZ/vfXGfM0lrZbAh71z6Rb0+B7nOuO8VL2BmCo=";
|
||||
cargoHash = "sha256-2YAlc8HW+aqfRzLSXw/I++DM4/JneE7UNmV6BVZb4VM=";
|
||||
|
||||
# Tests require a GPU and segfault in the sandbox
|
||||
doCheck = false;
|
||||
|
||||
@@ -38,14 +38,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "anthropic";
|
||||
version = "0.86.0";
|
||||
version = "0.94.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "anthropics";
|
||||
repo = "anthropic-sdk-python";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-24z9LrZ6xktwITQHHvslrT4J2RZ/CKbZD3uwbZBV+rE=";
|
||||
hash = "sha256-Gh7My8ftI2o0CxrwuVsbr8tdZ2MtKdRw0mfQxb7REJk=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -90,7 +90,8 @@ buildPythonPackage (finalAttrs: {
|
||||
pytest-xdist
|
||||
pytestCheckHook
|
||||
respx
|
||||
];
|
||||
]
|
||||
++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies);
|
||||
|
||||
pythonImportsCheck = [ "anthropic" ];
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
cyclopts,
|
||||
fetchFromGitHub,
|
||||
hatchling,
|
||||
httpx,
|
||||
mashumaro,
|
||||
pytest-asyncio,
|
||||
pytest-httpx,
|
||||
pytestCheckHook,
|
||||
rich,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "connect-box3";
|
||||
version = "0.2.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "home-assistant-ecosystem";
|
||||
repo = "python-connect-box3";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-eLrCMziV/+maLIded1n0248Xb14uVBps/gzTUz8NMMc=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
dependencies = [
|
||||
cyclopts
|
||||
httpx
|
||||
mashumaro
|
||||
rich
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
pytest-asyncio
|
||||
pytest-httpx
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "connect_box3" ];
|
||||
|
||||
meta = {
|
||||
description = "Interact with a Connect Box 3 modem/router";
|
||||
homepage = "https://github.com/home-assistant-ecosystem/python-connect-box3";
|
||||
changelog = "https://github.com/home-assistant-ecosystem/python-connect-box3/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
mainProgram = "connect-box";
|
||||
};
|
||||
})
|
||||
@@ -8,14 +8,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "fastcore";
|
||||
version = "1.12.34";
|
||||
version = "1.12.38";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "fastai";
|
||||
repo = "fastcore";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-kWF3xEou6yq1si0pfJEljzFKY1xV2IMGQceTOEOe3qI=";
|
||||
hash = "sha256-xqME3sz7AqGsIuTb8Ge4ByDi4sfwKo/TXEAw6/cTTmU=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "fluss-api";
|
||||
version = "0.2.0";
|
||||
version = "0.2.4";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "fluss";
|
||||
repo = "Fluss_Python_Library";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-LD+boeDNWOm3KXZFIkLPvzIyngmFd6lOtIFsrn478wA=";
|
||||
hash = "sha256-zAhxx2X1DnfXlf+OzyACx6e3bQkoagffBPPnEe05xbM=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
google-generativeai,
|
||||
hass-client,
|
||||
jinja2,
|
||||
mashumaro,
|
||||
openai,
|
||||
pyrate-limiter,
|
||||
pytestCheckHook,
|
||||
python-slugify,
|
||||
pyyaml,
|
||||
setuptools-scm,
|
||||
setuptools,
|
||||
synthetic-home,
|
||||
syrupy,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "home-assistant-datasets";
|
||||
version = "0.3.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "allenporter";
|
||||
repo = "home-assistant-datasets";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-csvjbPtsl7/olJAFmiLES9GH7wAZHxOADTpqbcQbM3s=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
setuptools-scm
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
google-generativeai
|
||||
hass-client
|
||||
mashumaro
|
||||
openai
|
||||
pyrate-limiter
|
||||
pyyaml
|
||||
synthetic-home
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
jinja2
|
||||
pytestCheckHook
|
||||
python-slugify
|
||||
syrupy
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "home_assistant_datasets" ];
|
||||
|
||||
# Tests want to import Home Assistant as a module
|
||||
doCheck = false;
|
||||
|
||||
meta = {
|
||||
description = "Collection of datasets for evaluating AI Models in the context of Home Assistant";
|
||||
homepage = "https://github.com/allenporter/home-assistant-datasets";
|
||||
changelog = "https://github.com/allenporter/home-assistant-datasets/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
})
|
||||
@@ -16,14 +16,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "kagglesdk";
|
||||
version = "0.1.16";
|
||||
version = "0.1.18";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Kaggle";
|
||||
repo = "kagglesdk";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-MmgX9gQ8fQU8yE/2qpw1Kz/VslVix3qUhaGkRahSxns=";
|
||||
hash = "sha256-2WmYx4Q8Qx1ZdDzqeYwGsOPf0q1Cxtw9zM0iWK4z2xM=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -23,19 +23,19 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "llguidance";
|
||||
version = "1.7.0";
|
||||
version = "1.7.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "guidance-ai";
|
||||
repo = "llguidance";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-f9qSnNpLl4KUdv1ZzN68MUytCOjP/+a3ZjocX7DiAlw=";
|
||||
hash = "sha256-Eu+hhYCVoZWMdwrjiHyvbGwjYKnbkBETZNMQ+SOb8AU=";
|
||||
};
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
||||
inherit (finalAttrs) src pname version;
|
||||
hash = "sha256-scHxmG5XAbWMR88yyFru0ar2v7Uj/OQP0gpL5wo7Du8=";
|
||||
hash = "sha256-oeFm9dPqlJWPnrA7//D31E1W2St+zIRd8pzR6gUhiTg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "lupa";
|
||||
version = "2.6";
|
||||
version = "2.7";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-mncKbolXa+NEdmjXztMSzW/UHTwTwkYsncLCq1cORdk=";
|
||||
inherit (finalAttrs) pname version;
|
||||
hash = "sha256-c6ZM5dyM2Vt1ozDBUT5G4JjUD87tP+pRbAn2WV6t6Ik=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
@@ -26,8 +26,8 @@ buildPythonPackage rec {
|
||||
meta = {
|
||||
description = "Lua in Python";
|
||||
homepage = "https://github.com/scoder/lupa";
|
||||
changelog = "https://github.com/scoder/lupa/blob/lupa-${version}/CHANGES.rst";
|
||||
changelog = "https://github.com/scoder/lupa/blob/lupa-${finalAttrs.version}/CHANGES.rst";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
hatchling,
|
||||
standard-imghdr,
|
||||
pytestCheckHook,
|
||||
pythonOlder,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
@@ -29,6 +30,8 @@ buildPythonPackage rec {
|
||||
standard-imghdr
|
||||
];
|
||||
|
||||
pythonRemoveDeps = lib.optionals (pythonOlder "3.13") [ "standard-imghdr" ];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
@@ -14,16 +14,17 @@
|
||||
|
||||
# tests
|
||||
pytestCheckHook,
|
||||
pythonAtLeast,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "mwxml";
|
||||
version = "0.3.6";
|
||||
version = "0.3.8";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-WlMYHTAhUq0D7FE/8Yaongx+H8xQx4MwRSoIcsqmOTU=";
|
||||
inherit (finalAttrs) pname version;
|
||||
hash = "sha256-yiIyqX6pMem7JPhbVKSRBYwjwHRXY3LnESRq+scGFuA=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
@@ -38,10 +39,15 @@ buildPythonPackage rec {
|
||||
|
||||
nativeCheckInputs = [ pytestCheckHook ];
|
||||
|
||||
disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
# AttributeError: Can't get local object 'map.<locals>.process_path'
|
||||
"test_complex_error_handler"
|
||||
];
|
||||
disabledTests =
|
||||
lib.optionals (pythonAtLeast "3.14") [
|
||||
# _pickle.PicklingError: Can't pickle local object <function map.<locals>.process_path at 0x7ffff580f480>
|
||||
"test_complex_error_handler"
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
# AttributeError: Can't get local object 'map.<locals>.process_path'
|
||||
"test_complex_error_handler"
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "Set of utilities for processing MediaWiki XML dump data";
|
||||
@@ -50,4 +56,4 @@ buildPythonPackage rec {
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ GaetanLepage ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -74,6 +74,10 @@ buildPythonPackage (finalAttrs: {
|
||||
disabledTestPaths = [
|
||||
# Circular dependency with onnxscript
|
||||
"src/onnx_ir/passes/common/common_subexpression_elimination_test.py"
|
||||
|
||||
# ImportError: cannot import name 'hub' from 'onnx'
|
||||
# onnx.hub was removed in 1.21.0
|
||||
"tools/model_zoo_test/model_zoo_test.py"
|
||||
];
|
||||
|
||||
# Importing onnxruntime in the sandbox crashes on aarch64-linux:
|
||||
|
||||
@@ -3,28 +3,36 @@
|
||||
stdenv,
|
||||
buildPythonPackage,
|
||||
fetchPypi,
|
||||
pytestCheckHook,
|
||||
|
||||
# build-system
|
||||
setuptools,
|
||||
|
||||
# tests
|
||||
pytestCheckHook,
|
||||
pythonOlder,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "para";
|
||||
version = "0.0.8";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
inherit (finalAttrs) pname version;
|
||||
hash = "sha256-RsMjKunY6p2IbP0IzdESiSICvthkX0C2JVWXukz+8hc=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
nativeCheckInputs = [ pytestCheckHook ];
|
||||
|
||||
pythonImportsCheck = [ "para" ];
|
||||
|
||||
# AttributeError: Can't get local object 'test_output_queue_size.<locals>.get_the_a'
|
||||
doCheck = !stdenv.hostPlatform.isDarwin;
|
||||
nativeCheckInputs = [ pytestCheckHook ];
|
||||
|
||||
doCheck =
|
||||
# AttributeError: Can't get local object 'test_output_queue_size.<locals>.get_the_a'
|
||||
(!stdenv.hostPlatform.isDarwin)
|
||||
# _pickle.PicklingError: Can't pickle local object <function test_map.<locals>.get_the_a at 0x7ffff5689fe0>
|
||||
&& (pythonOlder "3.14");
|
||||
|
||||
meta = {
|
||||
description = "Set utilities that ake advantage of python's 'multiprocessing' module to distribute CPU-intensive tasks";
|
||||
@@ -32,4 +40,4 @@ buildPythonPackage rec {
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ GaetanLepage ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pyais";
|
||||
version = "2.20.1";
|
||||
version = "3.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "M0r13n";
|
||||
repo = "pyais";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-ZyVXZZd9JXTkfucJ5tAcP813FLWapoiTUrzj27SrLlk=";
|
||||
hash = "sha256-aAmvtCl+rObPkpuKb+FzQfKPfVhXHdbsdCWUytRE6mk=";
|
||||
};
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pyworxcloud";
|
||||
version = "6.3.0";
|
||||
version = "6.3.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "MTrab";
|
||||
repo = "pyworxcloud";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-+97WpQlAxDe9VTCpG7ByhL+qG6u2zZwPNxRFBZDlh48=";
|
||||
hash = "sha256-T5mSM/vGi+fcMPtCcpAgQ8rlr6+8bnEU7nn6aO/g0H0=";
|
||||
};
|
||||
|
||||
pythonRelaxDeps = [ "awsiotsdk" ];
|
||||
|
||||
@@ -1,31 +1,38 @@
|
||||
{
|
||||
stdenv,
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
|
||||
# build-system
|
||||
setuptools,
|
||||
|
||||
# buildInputs
|
||||
armips,
|
||||
|
||||
# dependencies
|
||||
appdirs,
|
||||
dungeon-eos,
|
||||
explorerscript,
|
||||
ndspy,
|
||||
pillow,
|
||||
setuptools,
|
||||
skytemple-rust,
|
||||
pyyaml,
|
||||
pmdsky-debug-py,
|
||||
pyyaml,
|
||||
range-typed-integers,
|
||||
# optional dependencies for SpriteCollab
|
||||
skytemple-rust,
|
||||
|
||||
# optional-dependencies
|
||||
aiohttp,
|
||||
lru-dict,
|
||||
graphql-core,
|
||||
gql,
|
||||
armips,
|
||||
graphql-core,
|
||||
lru-dict,
|
||||
|
||||
# tests
|
||||
pytestCheckHook,
|
||||
parameterized,
|
||||
pytestCheckHook,
|
||||
xmldiff,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "skytemple-files";
|
||||
version = "1.8.5";
|
||||
pyproject = true;
|
||||
@@ -33,31 +40,38 @@ buildPythonPackage rec {
|
||||
src = fetchFromGitHub {
|
||||
owner = "SkyTemple";
|
||||
repo = "skytemple-files";
|
||||
rev = version;
|
||||
hash = "sha256-s7r6wS7H19+is3CFr+dLaTiq0N/gaO/8IFknmr+OAJk=";
|
||||
tag = finalAttrs.version;
|
||||
# Most patches are in submodules
|
||||
fetchSubmodules = true;
|
||||
hash = "sha256-s7r6wS7H19+is3CFr+dLaTiq0N/gaO/8IFknmr+OAJk=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace skytemple_files/patch/arm_patcher.py skytemple_files/data/data_cd/armips_importer.py \
|
||||
--replace-fail "exec_name = os.getenv(\"SKYTEMPLE_ARMIPS_EXEC\", f\"{prefix}armips\")" "exec_name = \"${armips}/bin/armips\""
|
||||
substituteInPlace \
|
||||
skytemple_files/patch/arm_patcher.py \
|
||||
skytemple_files/data/data_cd/armips_importer.py \
|
||||
--replace-fail \
|
||||
"exec_name = os.getenv(\"SKYTEMPLE_ARMIPS_EXEC\", f\"{prefix}armips\")" \
|
||||
"exec_name = \"${armips}/bin/armips\""
|
||||
'';
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
buildInputs = [ armips ];
|
||||
|
||||
pythonRelaxDeps = [
|
||||
"pmdsky-debug-py"
|
||||
];
|
||||
dependencies = [
|
||||
appdirs
|
||||
dungeon-eos
|
||||
explorerscript
|
||||
ndspy
|
||||
pillow
|
||||
skytemple-rust
|
||||
pyyaml
|
||||
pmdsky-debug-py
|
||||
pyyaml
|
||||
range-typed-integers
|
||||
skytemple-rust
|
||||
];
|
||||
|
||||
optional-dependencies = {
|
||||
@@ -71,11 +85,11 @@ buildPythonPackage rec {
|
||||
};
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
parameterized
|
||||
pytestCheckHook
|
||||
xmldiff
|
||||
]
|
||||
++ optional-dependencies.spritecollab;
|
||||
++ finalAttrs.passthru.optional-dependencies.spritecollab;
|
||||
|
||||
preCheck = "pushd test";
|
||||
postCheck = "popd";
|
||||
@@ -88,11 +102,14 @@ buildPythonPackage rec {
|
||||
pythonImportsCheck = [ "skytemple_files" ];
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/SkyTemple/skytemple-files";
|
||||
description = "Python library to edit the ROM of Pokémon Mystery Dungeon Explorers of Sky";
|
||||
homepage = "https://github.com/SkyTemple/skytemple-files";
|
||||
mainProgram = "skytemple_export_maps";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ marius851000 ];
|
||||
broken = stdenv.hostPlatform.isDarwin; # pyobjc is missing
|
||||
badPlatforms = [
|
||||
# pyobjc is missing
|
||||
lib.systems.inspect.patterns.isDarwin
|
||||
];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -39,16 +39,16 @@
|
||||
writableTmpDirAsHomeHook,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "slack-bolt";
|
||||
version = "1.27.0";
|
||||
version = "1.28.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "slackapi";
|
||||
repo = "bolt-python";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-3aYsISTNc2uexzpIiBNnw40XegczL5BdKqi6j9K/A80=";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-1AJO7+7YG/NFh6Rmqwkm6yua2LWdYQ9Rv1oadfHAlhE=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
@@ -89,7 +89,7 @@ buildPythonPackage rec {
|
||||
pytestCheckHook
|
||||
writableTmpDirAsHomeHook
|
||||
]
|
||||
++ lib.concatAttrValues optional-dependencies;
|
||||
++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies);
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
@@ -108,8 +108,8 @@ buildPythonPackage rec {
|
||||
meta = {
|
||||
description = "Framework to build Slack apps using Python";
|
||||
homepage = "https://github.com/slackapi/bolt-python";
|
||||
changelog = "https://github.com/slackapi/bolt-python/releases/tag/${src.tag}";
|
||||
changelog = "https://github.com/slackapi/bolt-python/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ samuela ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
mashumaro,
|
||||
pytest-asyncio,
|
||||
pytestCheckHook,
|
||||
python-slugify,
|
||||
pyyaml,
|
||||
setuptools,
|
||||
syrupy,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "synthetic-home";
|
||||
version = "5.0.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "allenporter";
|
||||
repo = "synthetic-home";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-u5suLTK7Cdp6IKVxnmiw8p+xQiXV5nfc6QUvpqCyxTk=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
aiohttp
|
||||
mashumaro
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytest-asyncio
|
||||
pytestCheckHook
|
||||
python-slugify
|
||||
pyyaml
|
||||
syrupy
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "synthetic_home" ];
|
||||
|
||||
preCheck = ''
|
||||
export PATH="$PATH:$out/bin";
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Library for managing synthetic home device registry";
|
||||
homepage = "https://github.com/allenporter/synthetic-home";
|
||||
changelog = "https://github.com/allenporter/synthetic-home/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
})
|
||||
@@ -6,24 +6,23 @@
|
||||
installShellFiles,
|
||||
}:
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
python3.pkgs.buildPythonApplication (finalAttrs: {
|
||||
pname = "homeassistant-cli";
|
||||
version = "0.9.6";
|
||||
format = "setuptools";
|
||||
version = "1.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "home-assistant-ecosystem";
|
||||
repo = "home-assistant-cli";
|
||||
rev = version;
|
||||
hash = "sha256-4OeHJ7icDZUOC5K4L0F0Nd9lbJPgdW4LCU0wniLvJ1Q=";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-LF6JXELAP3Mvta3RuDUs4UiQ7ptNFh0vZmPh3ICJFRY=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
# Ignore pinned versions
|
||||
sed -i "s/'\(.*\)\(==\|>=\).*'/'\1'/g" setup.py
|
||||
'';
|
||||
pythonRelaxDeps = true;
|
||||
|
||||
propagatedBuildInputs = with python3.pkgs; [
|
||||
build-system = with python3.pkgs; [ poetry-core ];
|
||||
|
||||
dependencies = with python3.pkgs; [
|
||||
aiohttp
|
||||
click
|
||||
click-log
|
||||
@@ -57,8 +56,8 @@ python3.pkgs.buildPythonApplication rec {
|
||||
description = "Command-line tool for Home Assistant";
|
||||
mainProgram = "hass-cli";
|
||||
homepage = "https://github.com/home-assistant-ecosystem/home-assistant-cli";
|
||||
changelog = "https://github.com/home-assistant-ecosystem/home-assistant-cli/releases/tag/${version}";
|
||||
changelog = "https://github.com/home-assistant-ecosystem/home-assistant-cli/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.asl20;
|
||||
teams = [ lib.teams.home-assistant ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -23,21 +23,26 @@ REPOS = [
|
||||
( "fcitx", "fcitx5-table-extra" ),
|
||||
( "fcitx", "fcitx5-table-other" ),
|
||||
( "fcitx", "fcitx5-unikey" ),
|
||||
( "fcitx", "fcitx5-unikey" )
|
||||
( "fcitx", "fcitx5-unikey" ),
|
||||
|
||||
( "ray2501", "fcitx5-array" )
|
||||
]
|
||||
|
||||
OWNER = "fcitx"
|
||||
QT_REPOS = [
|
||||
"fcitx5-chinese-addons",
|
||||
"fcitx5-configtool",
|
||||
"fcitx5-qt",
|
||||
"fcitx5-unikey",
|
||||
]
|
||||
|
||||
def get_latest_tag(repo, owner=OWNER):
|
||||
def get_latest_tag(repo, owner):
|
||||
r = requests.get('https://api.github.com/repos/{}/{}/tags'.format(owner,repo))
|
||||
return r.json()[0].get("name")
|
||||
|
||||
def main():
|
||||
for (owner, repo) in REPOS:
|
||||
rev = get_latest_tag(repo, owner)
|
||||
if repo == "fcitx5-qt":
|
||||
if repo in QT_REPOS:
|
||||
subprocess.run(["nix-update", "--commit", "--version", rev, "qt6Packages.{}".format(repo)])
|
||||
else:
|
||||
subprocess.run(["nix-update", "--commit", "--version", rev, repo])
|
||||
|
||||
@@ -8034,15 +8034,15 @@ with pkgs;
|
||||
|
||||
dodgy = with python3Packages; toPythonApplication dodgy;
|
||||
|
||||
dovecot_2_3 = dovecot;
|
||||
dovecot_2_4 = callPackage ../by-name/do/dovecot/2.4.nix {
|
||||
dovecot_pigeonhole = dovecot_pigeonhole_2_4;
|
||||
dovecot_2_3 = callPackage ../by-name/do/dovecot/2.3.nix {
|
||||
dovecot_pigeonhole = dovecot_pigeonhole_0_5;
|
||||
};
|
||||
dovecot_2_4 = dovecot;
|
||||
|
||||
dovecot_pigeonhole_0_5 = dovecot_pigeonhole;
|
||||
dovecot_pigeonhole_2_4 = callPackage ../by-name/do/dovecot_pigeonhole/2.4.nix {
|
||||
dovecot = dovecot_2_4;
|
||||
dovecot_pigeonhole_0_5 = callPackage ../by-name/do/dovecot_pigeonhole/0.5.nix {
|
||||
dovecot = dovecot_2_3;
|
||||
};
|
||||
dovecot_pigeonhole_2_4 = dovecot_pigeonhole;
|
||||
|
||||
inherit (callPackages ../servers/firebird { })
|
||||
firebird_4
|
||||
|
||||
@@ -3160,6 +3160,8 @@ self: super: with self; {
|
||||
|
||||
connect-box = callPackage ../development/python-modules/connect-box { };
|
||||
|
||||
connect-box3 = callPackage ../development/python-modules/connect-box3 { };
|
||||
|
||||
connected-components-3d = callPackage ../development/python-modules/connected-components-3d { };
|
||||
|
||||
connection-pool = callPackage ../development/python-modules/connection-pool { };
|
||||
@@ -7106,6 +7108,8 @@ self: super: with self; {
|
||||
callPackage ../development/python-modules/home-assistant-chip-wheels { }
|
||||
);
|
||||
|
||||
home-assistant-datasets = callPackage ../development/python-modules/home-assistant-datasets { };
|
||||
|
||||
home-connect-async = callPackage ../development/python-modules/home-connect-async { };
|
||||
|
||||
homeassistant-stubs = callPackage ../servers/home-assistant/stubs.nix { };
|
||||
@@ -18908,6 +18912,8 @@ self: super: with self; {
|
||||
|
||||
synology-srm = callPackage ../development/python-modules/synology-srm { };
|
||||
|
||||
synthetic-home = callPackage ../development/python-modules/synthetic-home { };
|
||||
|
||||
syrupy = callPackage ../development/python-modules/syrupy { };
|
||||
|
||||
syslog-rfc5424-formatter = callPackage ../development/python-modules/syslog-rfc5424-formatter { };
|
||||
|
||||
@@ -84,6 +84,7 @@ let
|
||||
mesa = nativePlatforms;
|
||||
rustc = nativePlatforms;
|
||||
cargo = nativePlatforms;
|
||||
fd = nativePlatforms;
|
||||
};
|
||||
|
||||
gnuCommon = recursiveUpdate common {
|
||||
|
||||
Reference in New Issue
Block a user