Merge ab36ef17c8 into haskell-updates

This commit is contained in:
nixpkgs-ci[bot]
2025-02-05 00:18:05 +00:00
committed by GitHub
389 changed files with 14931 additions and 4192 deletions
+6
View File
@@ -476,6 +476,12 @@
- pkgs/development/tcl-modules/**/*
- pkgs/top-level/tcl-packages.nix
"6.topic: teams":
- any:
- changed-files:
- any-glob-to-any-file:
- maintainers/team-list.nix
"6.topic: TeX":
- any:
- changed-files:
+5 -5
View File
@@ -171,11 +171,11 @@ jobs:
run: |
# Get the latest eval.yml workflow run for the PR's target commit
if ! run=$(gh api --method GET /repos/"$REPOSITORY"/actions/workflows/eval.yml/runs \
-f head_sha="$BASE_SHA" -f event=push \
-f head_sha="$TARGET_SHA" -f event=push \
--jq '.workflow_runs | sort_by(.run_started_at) | .[-1]') \
|| [[ -z "$run" ]]; then
echo "Could not find an eval.yml workflow run for $BASE_SHA, cannot make comparison"
exit 0
echo "Could not find an eval.yml workflow run for $TARGET_SHA, cannot make comparison"
exit 1
fi
echo "Comparing against $(jq .html_url <<< "$run")"
runId=$(jq .id <<< "$run")
@@ -189,13 +189,13 @@ jobs:
if [[ "$conclusion" != "success" ]]; then
echo "Workflow was not successful (conclusion: $conclusion), cannot make comparison"
exit 0
exit 1
fi
echo "targetRunId=$runId" >> "$GITHUB_OUTPUT"
env:
REPOSITORY: ${{ github.repository }}
BASE_SHA: ${{ needs.attrs.outputs.targetSha }}
TARGET_SHA: ${{ needs.attrs.outputs.targetSha }}
GH_TOKEN: ${{ github.token }}
- uses: actions/download-artifact@v4
+1 -2
View File
@@ -1394,8 +1394,7 @@ hook, as they might introduce unexpected behavior in some specific cases.
This setup hook ensures that the directory specified by the `HOME` environment
variable is writable. If it is not, the hook assigns `HOME` to a writable
directory (in `.home` in `$NIX_BUILD_TOP`). This adjustment is necessary for
certain packages that require write access to a home directory. This hook can
be added to any phase.
certain packages that require write access to a home directory.
By setting `HOME` to a writable directory, this setup hook prevents failures in
packages that attempt to write to the home directory.
+42
View File
@@ -1295,6 +1295,12 @@
githubId = 153175;
name = "Andrew Marshall";
};
ambossmann = {
email = "timogottszky+git@gmail.com";
github = "Ambossmann";
githubId = 68373395;
name = "Timo Gottszky";
};
ambroisie = {
email = "bruno.nixpkgs@belanyi.fr";
github = "ambroisie";
@@ -5968,6 +5974,12 @@
githubId = 523628;
name = "Jonathan Strickland";
};
djds = {
email = "git@djds.dev";
github = "djds";
githubId = 4218822;
name = "djds";
};
Dje4321 = {
email = "dje4321@gmail.com";
github = "dje4321";
@@ -16146,6 +16158,11 @@
githubId = 4532582;
keys = [ { fingerprint = "BDEA AB07 909D B96F 4106 85F1 CC15 0758 46BC E91B"; } ];
};
nayeko = {
name = "nayeko";
github = "nayeko";
githubId = 196556004;
};
nazarewk = {
name = "Krzysztof Nazarewski";
email = "nixpkgs@kdn.im";
@@ -21279,6 +21296,12 @@
github = "ein-shved";
githubId = 3513222;
};
ShyAssassin = {
name = "[Assassin]";
githubId = 49711232;
github = "ShyAssassin";
email = "ShyAssassin@assassin.dev";
};
shyim = {
email = "s.sayakci@gmail.com";
github = "shyim";
@@ -22828,6 +22851,13 @@
githubId = 159372832;
keys = [ { fingerprint = "6F54 C08C 37C8 EC78 15FA 0D01 A721 8CBA 2D80 15C3"; } ];
};
Tert0 = {
name = "Tert0";
github = "Tert0";
githubId = 62036464;
email = "tert0byte@gmail.com";
keys = [ { fingerprint = "F899 D3B5 00BF 98AE 9097 F616 7069 D89F 9E5C 97ED"; } ];
};
tesq0 = {
email = "mikolaj.galkowski@gmail.com";
github = "tesq0";
@@ -23212,6 +23242,12 @@
githubId = 1391883;
name = "Tom Hall";
};
three = {
email = "eric@ericroberts.dev";
github = "three";
githubId = 1761259;
name = "Eric Roberts";
};
thtrf = {
email = "thtrf@proton.me";
github = "thtrf";
@@ -25046,6 +25082,12 @@
githubId = 6162814;
keys = [ { fingerprint = "21E1 6B8D 2EE8 7530 6A6C 9968 D830 77B9 9F8C 6643"; } ];
};
wrvsrx = {
name = "wrvsrx";
email = "wrvsrx@outlook.com";
github = "wrvsrx";
githubId = 42770726;
};
wscott = {
email = "wsc9tt@gmail.com";
github = "wscott";
@@ -150,6 +150,8 @@
- [git-worktree-switcher](https://github.com/mateusauler/git-worktree-switcher), switch between git worktrees with speed. Available as [programs.git-worktree-switcher](#opt-programs.git-worktree-switcher.enable)
- [GLPI-Agent](https://github.com/glpi-project/glpi-agent), GLPI Agent. Available as [services.glpiAgent](options.html#opt-services.glpiAgent.enable).
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
## Backward Incompatibilities {#sec-release-25.05-incompatibilities}
@@ -207,6 +209,8 @@
- Support for CUDA 10 has been dropped, as announced in the 24.11 release notes.
- `virtualisation/azure-common.nix`'s filesystem and grub configurations have been moved to `virtualisation/azure-image.nix`. This makes `azure-common.nix` more generic so it could be used for users who generate Azure image using other methods (e.g. nixos-generators and disko). For existing users depending on these configurations, please also import `azure-image.nix`.
- `zammad` has had its support for MySQL removed, since it was never working correctly and is now deprecated upstream. Check the [migration guide](https://docs.zammad.org/en/latest/appendix/migrate-to-postgresql.html) for how to convert your database to PostgreSQL.
- The `earlyoom` service is now using upstream systemd service, which enables
@@ -419,6 +423,8 @@
- `services.avahi.ipv6` now defaults to true.
- The Home Assistant module has new options {option}`services.home-assistant.blueprints.automation`, `services.home-assistant.blueprints.script`, and {option}`services.home-assistant.blueprints.template` that allow for the declarative installation of [blueprints](https://www.home-assistant.io/docs/blueprint/) into the appropriate configuration directories.
- For matrix homeserver Synapse we are now following the upstream recommendation to enable jemalloc as the memory allocator by default.
- `services.kmonad` now creates a determinate symlink (in `/dev/input/by-id/`) to each of KMonad virtual devices.
+2
View File
@@ -925,10 +925,12 @@
./services/monitoring/gatus.nix
./services/monitoring/gitwatch.nix
./services/monitoring/glances.nix
./services/monitoring/glpi-agent.nix
./services/monitoring/goss.nix
./services/monitoring/grafana-agent.nix
./services/monitoring/grafana-image-renderer.nix
./services/monitoring/grafana-reporter.nix
./services/monitoring/grafana-to-ntfy.nix
./services/monitoring/grafana.nix
./services/monitoring/graphite.nix
./services/monitoring/hdaps.nix
+97 -85
View File
@@ -12,114 +12,126 @@
pkgs,
...
}:
with lib;
let
inherit (lib)
mkDefault
mkOverride
mkEnableOption
mkIf
maintainers
;
in
{
meta = {
maintainers = [
maintainers.joachifm
maintainers.emily
];
options.profiles.hardened = mkEnableOption "hardened" // {
default = true;
example = false;
};
config = mkIf config.profiles.hardened {
meta = {
maintainers = [
maintainers.joachifm
maintainers.emily
];
};
boot.kernelPackages = mkDefault pkgs.linuxPackages_hardened;
boot.kernelPackages = mkDefault pkgs.linuxPackages_hardened;
nix.settings.allowed-users = mkDefault [ "@users" ];
nix.settings.allowed-users = mkDefault [ "@users" ];
environment.memoryAllocator.provider = mkDefault "scudo";
environment.variables.SCUDO_OPTIONS = mkDefault "ZeroContents=1";
environment.memoryAllocator.provider = mkDefault "scudo";
environment.variables.SCUDO_OPTIONS = mkDefault "ZeroContents=1";
security.lockKernelModules = mkDefault true;
security.lockKernelModules = mkDefault true;
security.protectKernelImage = mkDefault true;
security.protectKernelImage = mkDefault true;
security.allowSimultaneousMultithreading = mkDefault false;
security.allowSimultaneousMultithreading = mkDefault false;
security.forcePageTableIsolation = mkDefault true;
security.forcePageTableIsolation = mkDefault true;
# This is required by podman to run containers in rootless mode.
security.unprivilegedUsernsClone = mkDefault config.virtualisation.containers.enable;
# This is required by podman to run containers in rootless mode.
security.unprivilegedUsernsClone = mkDefault config.virtualisation.containers.enable;
security.virtualisation.flushL1DataCache = mkDefault "always";
security.virtualisation.flushL1DataCache = mkDefault "always";
security.apparmor.enable = mkDefault true;
security.apparmor.killUnconfinedConfinables = mkDefault true;
security.apparmor.enable = mkDefault true;
security.apparmor.killUnconfinedConfinables = mkDefault true;
boot.kernelParams = [
# Don't merge slabs
"slab_nomerge"
boot.kernelParams = [
# Don't merge slabs
"slab_nomerge"
# Overwrite free'd pages
"page_poison=1"
# Overwrite free'd pages
"page_poison=1"
# Enable page allocator randomization
"page_alloc.shuffle=1"
# Enable page allocator randomization
"page_alloc.shuffle=1"
# Disable debugfs
"debugfs=off"
];
# Disable debugfs
"debugfs=off"
];
boot.blacklistedKernelModules = [
# Obscure network protocols
"ax25"
"netrom"
"rose"
boot.blacklistedKernelModules = [
# Obscure network protocols
"ax25"
"netrom"
"rose"
# Old or rare or insufficiently audited filesystems
"adfs"
"affs"
"bfs"
"befs"
"cramfs"
"efs"
"erofs"
"exofs"
"freevxfs"
"f2fs"
"hfs"
"hpfs"
"jfs"
"minix"
"nilfs2"
"ntfs"
"omfs"
"qnx4"
"qnx6"
"sysv"
"ufs"
];
# Old or rare or insufficiently audited filesystems
"adfs"
"affs"
"bfs"
"befs"
"cramfs"
"efs"
"erofs"
"exofs"
"freevxfs"
"f2fs"
"hfs"
"hpfs"
"jfs"
"minix"
"nilfs2"
"ntfs"
"omfs"
"qnx4"
"qnx6"
"sysv"
"ufs"
];
# Hide kptrs even for processes with CAP_SYSLOG
boot.kernel.sysctl."kernel.kptr_restrict" = mkOverride 500 2;
# Hide kptrs even for processes with CAP_SYSLOG
boot.kernel.sysctl."kernel.kptr_restrict" = mkOverride 500 2;
# Disable bpf() JIT (to eliminate spray attacks)
boot.kernel.sysctl."net.core.bpf_jit_enable" = mkDefault false;
# Disable bpf() JIT (to eliminate spray attacks)
boot.kernel.sysctl."net.core.bpf_jit_enable" = mkDefault false;
# Disable ftrace debugging
boot.kernel.sysctl."kernel.ftrace_enabled" = mkDefault false;
# Disable ftrace debugging
boot.kernel.sysctl."kernel.ftrace_enabled" = mkDefault false;
# Enable strict reverse path filtering (that is, do not attempt to route
# packets that "obviously" do not belong to the iface's network; dropped
# packets are logged as martians).
boot.kernel.sysctl."net.ipv4.conf.all.log_martians" = mkDefault true;
boot.kernel.sysctl."net.ipv4.conf.all.rp_filter" = mkDefault "1";
boot.kernel.sysctl."net.ipv4.conf.default.log_martians" = mkDefault true;
boot.kernel.sysctl."net.ipv4.conf.default.rp_filter" = mkDefault "1";
# Enable strict reverse path filtering (that is, do not attempt to route
# packets that "obviously" do not belong to the iface's network; dropped
# packets are logged as martians).
boot.kernel.sysctl."net.ipv4.conf.all.log_martians" = mkDefault true;
boot.kernel.sysctl."net.ipv4.conf.all.rp_filter" = mkDefault "1";
boot.kernel.sysctl."net.ipv4.conf.default.log_martians" = mkDefault true;
boot.kernel.sysctl."net.ipv4.conf.default.rp_filter" = mkDefault "1";
# Ignore broadcast ICMP (mitigate SMURF)
boot.kernel.sysctl."net.ipv4.icmp_echo_ignore_broadcasts" = mkDefault true;
# Ignore broadcast ICMP (mitigate SMURF)
boot.kernel.sysctl."net.ipv4.icmp_echo_ignore_broadcasts" = mkDefault true;
# Ignore incoming ICMP redirects (note: default is needed to ensure that the
# setting is applied to interfaces added after the sysctls are set)
boot.kernel.sysctl."net.ipv4.conf.all.accept_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv4.conf.all.secure_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv4.conf.default.accept_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv4.conf.default.secure_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv6.conf.all.accept_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv6.conf.default.accept_redirects" = mkDefault false;
# Ignore incoming ICMP redirects (note: default is needed to ensure that the
# setting is applied to interfaces added after the sysctls are set)
boot.kernel.sysctl."net.ipv4.conf.all.accept_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv4.conf.all.secure_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv4.conf.default.accept_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv4.conf.default.secure_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv6.conf.all.accept_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv6.conf.default.accept_redirects" = mkDefault false;
# Ignore outgoing ICMP redirects (this is ipv4 only)
boot.kernel.sysctl."net.ipv4.conf.all.send_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv4.conf.default.send_redirects" = mkDefault false;
# Ignore outgoing ICMP redirects (this is ipv4 only)
boot.kernel.sysctl."net.ipv4.conf.all.send_redirects" = mkDefault false;
boot.kernel.sysctl."net.ipv4.conf.default.send_redirects" = mkDefault false;
};
}
+415 -358
View File
@@ -1,4 +1,10 @@
{ config, lib, pkgs, utils, ... }:
{
config,
lib,
pkgs,
utils,
...
}:
let
# Type for a valid systemd unit option. Needed for correctly passing "timerConfig" to "systemd.timers"
inherit (utils.systemdUtils.unitOptions) unitOption;
@@ -8,269 +14,297 @@ in
description = ''
Periodic backups to create with Restic.
'';
type = lib.types.attrsOf (lib.types.submodule ({ name, ... }: {
options = {
passwordFile = lib.mkOption {
type = lib.types.str;
description = ''
Read the repository password from a file.
'';
example = "/etc/nixos/restic-password";
};
type = lib.types.attrsOf (
lib.types.submodule (
{ name, ... }:
{
options = {
passwordFile = lib.mkOption {
type = lib.types.str;
description = ''
Read the repository password from a file.
'';
example = "/etc/nixos/restic-password";
};
environmentFile = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
file containing the credentials to access the repository, in the
format of an EnvironmentFile as described by {manpage}`systemd.exec(5)`
'';
};
environmentFile = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
file containing the credentials to access the repository, in the
format of an EnvironmentFile as described by {manpage}`systemd.exec(5)`
'';
};
rcloneOptions = lib.mkOption {
type = with lib.types; nullOr (attrsOf (oneOf [ str bool ]));
default = null;
description = ''
Options to pass to rclone to control its behavior.
See <https://rclone.org/docs/#options> for
available options. When specifying option names, strip the
leading `--`. To set a flag such as
`--drive-use-trash`, which does not take a value,
set the value to the Boolean `true`.
'';
example = {
bwlimit = "10M";
drive-use-trash = "true";
rcloneOptions = lib.mkOption {
type =
with lib.types;
nullOr (
attrsOf (oneOf [
str
bool
])
);
default = null;
description = ''
Options to pass to rclone to control its behavior.
See <https://rclone.org/docs/#options> for
available options. When specifying option names, strip the
leading `--`. To set a flag such as
`--drive-use-trash`, which does not take a value,
set the value to the Boolean `true`.
'';
example = {
bwlimit = "10M";
drive-use-trash = "true";
};
};
rcloneConfig = lib.mkOption {
type =
with lib.types;
nullOr (
attrsOf (oneOf [
str
bool
])
);
default = null;
description = ''
Configuration for the rclone remote being used for backup.
See the remote's specific options under rclone's docs at
<https://rclone.org/docs/>. When specifying
option names, use the "config" name specified in the docs.
For example, to set `--b2-hard-delete` for a B2
remote, use `hard_delete = true` in the
attribute set.
Warning: Secrets set in here will be world-readable in the Nix
store! Consider using the `rcloneConfigFile`
option instead to specify secret values separately. Note that
options set here will override those set in the config file.
'';
example = {
type = "b2";
account = "xxx";
key = "xxx";
hard_delete = true;
};
};
rcloneConfigFile = lib.mkOption {
type = with lib.types; nullOr path;
default = null;
description = ''
Path to the file containing rclone configuration. This file
must contain configuration for the remote specified in this backup
set and also must be readable by root. Options set in
`rcloneConfig` will override those set in this
file.
'';
};
inhibitsSleep = lib.mkOption {
default = false;
type = lib.types.bool;
example = true;
description = ''
Prevents the system from sleeping while backing up.
'';
};
repository = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
repository to backup to.
'';
example = "sftp:backup@192.168.1.100:/backups/${name}";
};
repositoryFile = lib.mkOption {
type = with lib.types; nullOr path;
default = null;
description = ''
Path to the file containing the repository location to backup to.
'';
};
paths = lib.mkOption {
# This is nullable for legacy reasons only. We should consider making it a pure listOf
# after some time has passed since this comment was added.
type = lib.types.nullOr (lib.types.listOf lib.types.str);
default = [ ];
description = ''
Which paths to backup, in addition to ones specified via
`dynamicFilesFrom`. If null or an empty array and
`dynamicFilesFrom` is also null, no backup command will be run.
This can be used to create a prune-only job.
'';
example = [
"/var/lib/postgresql"
"/home/user/backup"
];
};
exclude = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
Patterns to exclude when backing up. See
https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files for
details on syntax.
'';
example = [
"/var/cache"
"/home/*/.cache"
".git"
];
};
timerConfig = lib.mkOption {
type = lib.types.nullOr (lib.types.attrsOf unitOption);
default = {
OnCalendar = "daily";
Persistent = true;
};
description = ''
When to run the backup. See {manpage}`systemd.timer(5)` for
details. If null no timer is created and the backup will only
run when explicitly started.
'';
example = {
OnCalendar = "00:05";
RandomizedDelaySec = "5h";
Persistent = true;
};
};
user = lib.mkOption {
type = lib.types.str;
default = "root";
description = ''
As which user the backup should run.
'';
example = "postgresql";
};
extraBackupArgs = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
Extra arguments passed to restic backup.
'';
example = [
"--exclude-file=/etc/nixos/restic-ignore"
];
};
extraOptions = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
Extra extended options to be passed to the restic --option flag.
'';
example = [
"sftp.command='ssh backup@192.168.1.100 -i /home/user/.ssh/id_rsa -s sftp'"
];
};
initialize = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Create the repository if it doesn't exist.
'';
};
pruneOpts = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
A list of options (--keep-\* et al.) for 'restic forget
--prune', to automatically prune old snapshots. The
'forget' command is run *after* the 'backup' command, so
keep that in mind when constructing the --keep-\* options.
'';
example = [
"--keep-daily 7"
"--keep-weekly 5"
"--keep-monthly 12"
"--keep-yearly 75"
];
};
runCheck = lib.mkOption {
type = lib.types.bool;
default = (builtins.length config.services.restic.backups.${name}.checkOpts > 0);
defaultText = lib.literalExpression ''builtins.length config.services.backups.${name}.checkOpts > 0'';
description = "Whether to run the `check` command with the provided `checkOpts` options.";
example = true;
};
checkOpts = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
A list of options for 'restic check'.
'';
example = [
"--with-cache"
];
};
dynamicFilesFrom = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
A script that produces a list of files to back up. The
results of this command are given to the '--files-from'
option. The result is merged with paths specified via `paths`.
'';
example = "find /home/matt/git -type d -name .git";
};
backupPrepareCommand = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
A script that must run before starting the backup process.
'';
};
backupCleanupCommand = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
A script that must run after finishing the backup process.
'';
};
package = lib.mkPackageOption pkgs "restic" { };
createWrapper = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to generate and add a script to the system path, that has the same environment variables set
as the systemd service. This can be used to e.g. mount snapshots or perform other opterations, without
having to manually specify most options.
'';
};
progressFps = lib.mkOption {
type = with lib.types; nullOr numbers.nonnegative;
default = null;
description = ''
Controls the frequency of progress reporting.
'';
example = 0.1;
};
};
};
rcloneConfig = lib.mkOption {
type = with lib.types; nullOr (attrsOf (oneOf [ str bool ]));
default = null;
description = ''
Configuration for the rclone remote being used for backup.
See the remote's specific options under rclone's docs at
<https://rclone.org/docs/>. When specifying
option names, use the "config" name specified in the docs.
For example, to set `--b2-hard-delete` for a B2
remote, use `hard_delete = true` in the
attribute set.
Warning: Secrets set in here will be world-readable in the Nix
store! Consider using the `rcloneConfigFile`
option instead to specify secret values separately. Note that
options set here will override those set in the config file.
'';
example = {
type = "b2";
account = "xxx";
key = "xxx";
hard_delete = true;
};
};
rcloneConfigFile = lib.mkOption {
type = with lib.types; nullOr path;
default = null;
description = ''
Path to the file containing rclone configuration. This file
must contain configuration for the remote specified in this backup
set and also must be readable by root. Options set in
`rcloneConfig` will override those set in this
file.
'';
};
inhibitsSleep = lib.mkOption {
default = false;
type = lib.types.bool;
example = true;
description = ''
Prevents the system from sleeping while backing up.
'';
};
repository = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
repository to backup to.
'';
example = "sftp:backup@192.168.1.100:/backups/${name}";
};
repositoryFile = lib.mkOption {
type = with lib.types; nullOr path;
default = null;
description = ''
Path to the file containing the repository location to backup to.
'';
};
paths = lib.mkOption {
# This is nullable for legacy reasons only. We should consider making it a pure listOf
# after some time has passed since this comment was added.
type = lib.types.nullOr (lib.types.listOf lib.types.str);
default = [ ];
description = ''
Which paths to backup, in addition to ones specified via
`dynamicFilesFrom`. If null or an empty array and
`dynamicFilesFrom` is also null, no backup command will be run.
This can be used to create a prune-only job.
'';
example = [
"/var/lib/postgresql"
"/home/user/backup"
];
};
exclude = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
Patterns to exclude when backing up. See
https://restic.readthedocs.io/en/latest/040_backup.html#excluding-files for
details on syntax.
'';
example = [
"/var/cache"
"/home/*/.cache"
".git"
];
};
timerConfig = lib.mkOption {
type = lib.types.nullOr (lib.types.attrsOf unitOption);
default = {
OnCalendar = "daily";
Persistent = true;
};
description = ''
When to run the backup. See {manpage}`systemd.timer(5)` for
details. If null no timer is created and the backup will only
run when explicitly started.
'';
example = {
OnCalendar = "00:05";
RandomizedDelaySec = "5h";
Persistent = true;
};
};
user = lib.mkOption {
type = lib.types.str;
default = "root";
description = ''
As which user the backup should run.
'';
example = "postgresql";
};
extraBackupArgs = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
Extra arguments passed to restic backup.
'';
example = [
"--exclude-file=/etc/nixos/restic-ignore"
];
};
extraOptions = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
Extra extended options to be passed to the restic --option flag.
'';
example = [
"sftp.command='ssh backup@192.168.1.100 -i /home/user/.ssh/id_rsa -s sftp'"
];
};
initialize = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Create the repository if it doesn't exist.
'';
};
pruneOpts = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
A list of options (--keep-\* et al.) for 'restic forget
--prune', to automatically prune old snapshots. The
'forget' command is run *after* the 'backup' command, so
keep that in mind when constructing the --keep-\* options.
'';
example = [
"--keep-daily 7"
"--keep-weekly 5"
"--keep-monthly 12"
"--keep-yearly 75"
];
};
runCheck = lib.mkOption {
type = lib.types.bool;
default = (builtins.length config.services.restic.backups.${name}.checkOpts > 0);
defaultText = lib.literalExpression ''builtins.length config.services.backups.${name}.checkOpts > 0'';
description = "Whether to run the `check` command with the provided `checkOpts` options.";
example = true;
};
checkOpts = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
A list of options for 'restic check'.
'';
example = [
"--with-cache"
];
};
dynamicFilesFrom = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
A script that produces a list of files to back up. The
results of this command are given to the '--files-from'
option. The result is merged with paths specified via `paths`.
'';
example = "find /home/matt/git -type d -name .git";
};
backupPrepareCommand = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
A script that must run before starting the backup process.
'';
};
backupCleanupCommand = lib.mkOption {
type = with lib.types; nullOr str;
default = null;
description = ''
A script that must run after finishing the backup process.
'';
};
package = lib.mkPackageOption pkgs "restic" { };
createWrapper = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Whether to generate and add a script to the system path, that has the same environment variables set
as the systemd service. This can be used to e.g. mount snapshots or perform other opterations, without
having to manually specify most options.
'';
};
};
}));
}
)
);
default = { };
example = {
localbackup = {
@@ -300,119 +334,142 @@ in
assertion = (v.repository == null) != (v.repositoryFile == null);
message = "services.restic.backups.${n}: exactly one of repository or repositoryFile should be set";
}) config.services.restic.backups;
systemd.services =
lib.mapAttrs'
(name: backup:
let
extraOptions = lib.concatMapStrings (arg: " -o ${arg}") backup.extraOptions;
inhibitCmd = lib.concatStringsSep " " [
"${pkgs.systemd}/bin/systemd-inhibit"
"--mode='block'"
"--who='restic'"
"--what='sleep'"
"--why=${lib.escapeShellArg "Scheduled backup ${name}"} "
];
resticCmd = "${lib.optionalString backup.inhibitsSleep inhibitCmd}${backup.package}/bin/restic${extraOptions}";
excludeFlags = lib.optional (backup.exclude != []) "--exclude-file=${pkgs.writeText "exclude-patterns" (lib.concatStringsSep "\n" backup.exclude)}";
filesFromTmpFile = "/run/restic-backups-${name}/includes";
doBackup = (backup.dynamicFilesFrom != null) || (backup.paths != null && backup.paths != []);
pruneCmd = lib.optionals (builtins.length backup.pruneOpts > 0) [
(resticCmd + " forget --prune " + (lib.concatStringsSep " " backup.pruneOpts))
];
checkCmd = lib.optionals backup.runCheck [
(resticCmd + " check " + (lib.concatStringsSep " " backup.checkOpts))
];
# Helper functions for rclone remotes
rcloneRemoteName = builtins.elemAt (lib.splitString ":" backup.repository) 1;
rcloneAttrToOpt = v: "RCLONE_" + lib.toUpper (builtins.replaceStrings [ "-" ] [ "_" ] v);
rcloneAttrToConf = v: "RCLONE_CONFIG_" + lib.toUpper (rcloneRemoteName + "_" + v);
toRcloneVal = v: if lib.isBool v then lib.boolToString v else v;
in
lib.nameValuePair "restic-backups-${name}" ({
environment = {
systemd.services = lib.mapAttrs' (
name: backup:
let
extraOptions = lib.concatMapStrings (arg: " -o ${arg}") backup.extraOptions;
inhibitCmd = lib.concatStringsSep " " [
"${pkgs.systemd}/bin/systemd-inhibit"
"--mode='block'"
"--who='restic'"
"--what='sleep'"
"--why=${lib.escapeShellArg "Scheduled backup ${name}"} "
];
resticCmd = "${lib.optionalString backup.inhibitsSleep inhibitCmd}${backup.package}/bin/restic${extraOptions}";
excludeFlags = lib.optional (
backup.exclude != [ ]
) "--exclude-file=${pkgs.writeText "exclude-patterns" (lib.concatStringsSep "\n" backup.exclude)}";
filesFromTmpFile = "/run/restic-backups-${name}/includes";
doBackup = (backup.dynamicFilesFrom != null) || (backup.paths != null && backup.paths != [ ]);
pruneCmd = lib.optionals (builtins.length backup.pruneOpts > 0) [
(resticCmd + " forget --prune " + (lib.concatStringsSep " " backup.pruneOpts))
];
checkCmd = lib.optionals backup.runCheck [
(resticCmd + " check " + (lib.concatStringsSep " " backup.checkOpts))
];
# Helper functions for rclone remotes
rcloneRemoteName = builtins.elemAt (lib.splitString ":" backup.repository) 1;
rcloneAttrToOpt = v: "RCLONE_" + lib.toUpper (builtins.replaceStrings [ "-" ] [ "_" ] v);
rcloneAttrToConf = v: "RCLONE_CONFIG_" + lib.toUpper (rcloneRemoteName + "_" + v);
toRcloneVal = v: if lib.isBool v then lib.boolToString v else v;
in
lib.nameValuePair "restic-backups-${name}" (
{
environment =
{
# not %C, because that wouldn't work in the wrapper script
RESTIC_CACHE_DIR = "/var/cache/restic-backups-${name}";
RESTIC_PASSWORD_FILE = backup.passwordFile;
RESTIC_REPOSITORY = backup.repository;
RESTIC_REPOSITORY_FILE = backup.repositoryFile;
} // lib.optionalAttrs (backup.rcloneOptions != null) (lib.mapAttrs'
(name: value:
lib.nameValuePair (rcloneAttrToOpt name) (toRcloneVal value)
)
backup.rcloneOptions) // lib.optionalAttrs (backup.rcloneConfigFile != null) {
}
// lib.optionalAttrs (backup.rcloneOptions != null) (
lib.mapAttrs' (
name: value: lib.nameValuePair (rcloneAttrToOpt name) (toRcloneVal value)
) backup.rcloneOptions
)
// lib.optionalAttrs (backup.rcloneConfigFile != null) {
RCLONE_CONFIG = backup.rcloneConfigFile;
} // lib.optionalAttrs (backup.rcloneConfig != null) (lib.mapAttrs'
(name: value:
lib.nameValuePair (rcloneAttrToConf name) (toRcloneVal value)
)
backup.rcloneConfig);
path = [ config.programs.ssh.package ];
restartIfChanged = false;
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
serviceConfig = {
}
// lib.optionalAttrs (backup.rcloneConfig != null) (
lib.mapAttrs' (
name: value: lib.nameValuePair (rcloneAttrToConf name) (toRcloneVal value)
) backup.rcloneConfig
)
// lib.optionalAttrs (backup.progressFps != null) {
RESTIC_PROGRESS_FPS = toString backup.progressFps;
};
path = [ config.programs.ssh.package ];
restartIfChanged = false;
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
serviceConfig =
{
Type = "oneshot";
ExecStart = (lib.optionals doBackup [ "${resticCmd} backup ${lib.concatStringsSep " " (backup.extraBackupArgs ++ excludeFlags)} --files-from=${filesFromTmpFile}" ])
++ pruneCmd ++ checkCmd;
ExecStart =
(lib.optionals doBackup [
"${resticCmd} backup ${
lib.concatStringsSep " " (backup.extraBackupArgs ++ excludeFlags)
} --files-from=${filesFromTmpFile}"
])
++ pruneCmd
++ checkCmd;
User = backup.user;
RuntimeDirectory = "restic-backups-${name}";
CacheDirectory = "restic-backups-${name}";
CacheDirectoryMode = "0700";
PrivateTmp = true;
} // lib.optionalAttrs (backup.environmentFile != null) {
}
// lib.optionalAttrs (backup.environmentFile != null) {
EnvironmentFile = backup.environmentFile;
};
} // lib.optionalAttrs (backup.initialize || doBackup || backup.backupPrepareCommand != null) {
preStart = ''
${lib.optionalString (backup.backupPrepareCommand != null) ''
${pkgs.writeScript "backupPrepareCommand" backup.backupPrepareCommand}
''}
${lib.optionalString (backup.initialize) ''
${resticCmd} cat config > /dev/null || ${resticCmd} init
''}
${lib.optionalString (backup.paths != null && backup.paths != []) ''
cat ${pkgs.writeText "staticPaths" (lib.concatLines backup.paths)} >> ${filesFromTmpFile}
''}
${lib.optionalString (backup.dynamicFilesFrom != null) ''
${pkgs.writeScript "dynamicFilesFromScript" backup.dynamicFilesFrom} >> ${filesFromTmpFile}
''}
'';
} // lib.optionalAttrs (doBackup || backup.backupCleanupCommand != null) {
postStop = ''
${lib.optionalString (backup.backupCleanupCommand != null) ''
${pkgs.writeScript "backupCleanupCommand" backup.backupCleanupCommand}
''}
${lib.optionalString doBackup ''
rm ${filesFromTmpFile}
''}
'';
})
)
config.services.restic.backups;
systemd.timers =
lib.mapAttrs'
(name: backup: lib.nameValuePair "restic-backups-${name}" {
wantedBy = [ "timers.target" ];
timerConfig = backup.timerConfig;
})
(lib.filterAttrs (_: backup: backup.timerConfig != null) config.services.restic.backups);
}
// lib.optionalAttrs (backup.initialize || doBackup || backup.backupPrepareCommand != null) {
preStart = ''
${lib.optionalString (backup.backupPrepareCommand != null) ''
${pkgs.writeScript "backupPrepareCommand" backup.backupPrepareCommand}
''}
${lib.optionalString (backup.initialize) ''
${resticCmd} cat config > /dev/null || ${resticCmd} init
''}
${lib.optionalString (backup.paths != null && backup.paths != [ ]) ''
cat ${pkgs.writeText "staticPaths" (lib.concatLines backup.paths)} >> ${filesFromTmpFile}
''}
${lib.optionalString (backup.dynamicFilesFrom != null) ''
${pkgs.writeScript "dynamicFilesFromScript" backup.dynamicFilesFrom} >> ${filesFromTmpFile}
''}
'';
}
// lib.optionalAttrs (doBackup || backup.backupCleanupCommand != null) {
postStop = ''
${lib.optionalString (backup.backupCleanupCommand != null) ''
${pkgs.writeScript "backupCleanupCommand" backup.backupCleanupCommand}
''}
${lib.optionalString doBackup ''
rm ${filesFromTmpFile}
''}
'';
}
)
) config.services.restic.backups;
systemd.timers = lib.mapAttrs' (
name: backup:
lib.nameValuePair "restic-backups-${name}" {
wantedBy = [ "timers.target" ];
timerConfig = backup.timerConfig;
}
) (lib.filterAttrs (_: backup: backup.timerConfig != null) config.services.restic.backups);
# generate wrapper scripts, as described in the createWrapper option
environment.systemPackages = lib.mapAttrsToList (name: backup: let
extraOptions = lib.concatMapStrings (arg: " -o ${arg}") backup.extraOptions;
resticCmd = "${backup.package}/bin/restic${extraOptions}";
in pkgs.writeShellScriptBin "restic-${name}" ''
set -a # automatically export variables
${lib.optionalString (backup.environmentFile != null) "source ${backup.environmentFile}"}
# set same environment variables as the systemd service
${lib.pipe config.systemd.services."restic-backups-${name}".environment [
(lib.filterAttrs (n: v: v != null && n != "PATH"))
(lib.mapAttrsToList (n: v: "${n}=${v}"))
(lib.concatStringsSep "\n")
]}
PATH=${config.systemd.services."restic-backups-${name}".environment.PATH}:$PATH
environment.systemPackages = lib.mapAttrsToList (
name: backup:
let
extraOptions = lib.concatMapStrings (arg: " -o ${arg}") backup.extraOptions;
resticCmd = "${backup.package}/bin/restic${extraOptions}";
in
pkgs.writeShellScriptBin "restic-${name}" ''
set -a # automatically export variables
${lib.optionalString (backup.environmentFile != null) "source ${backup.environmentFile}"}
# set same environment variables as the systemd service
${lib.pipe config.systemd.services."restic-backups-${name}".environment [
(lib.filterAttrs (n: v: v != null && n != "PATH"))
(lib.mapAttrsToList (n: v: "${n}=${v}"))
(lib.concatStringsSep "\n")
]}
PATH=${config.systemd.services."restic-backups-${name}".environment.PATH}:$PATH
exec ${resticCmd} "$@"
'') (lib.filterAttrs (_: v: v.createWrapper) config.services.restic.backups);
exec ${resticCmd} "$@"
''
) (lib.filterAttrs (_: v: v.createWrapper) config.services.restic.backups);
};
}
@@ -126,11 +126,8 @@ let
network = lib.mkOption {
type = lib.types.nullOr (
lib.types.enum [
"goerli"
"holesky"
"rinkeby"
"yolov2"
"ropsten"
"sepolia"
]
);
default = null;
+16 -5
View File
@@ -1,8 +1,16 @@
# flatpak service.
{ config, lib, pkgs, ... }:
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.flatpak;
in {
in
{
meta = {
doc = ./flatpak.md;
maintainers = pkgs.flatpak.meta.maintainers;
@@ -17,17 +25,20 @@ in {
};
};
###### implementation
config = lib.mkIf cfg.enable {
assertions = [
{ assertion = (config.xdg.portal.enable == true);
{
assertion = (config.xdg.portal.enable == true);
message = "To use Flatpak you must enable XDG Desktop Portals with xdg.portal.enable.";
}
];
environment.systemPackages = [ cfg.package ];
environment.systemPackages = [
cfg.package
pkgs.fuse3
];
security.polkit.enable = true;
@@ -6,17 +6,22 @@ let
attrByPath
attrValues
concatMap
concatStrings
converge
elem
escapeShellArg
escapeShellArgs
filter
filterAttrsRecursive
flatten
hasAttrByPath
isAttrs
isDerivation
isList
isStorePath
literalExpression
mapAttrsToList
mergeAttrsList
mkEnableOption
mkIf
mkMerge
@@ -28,6 +33,7 @@ let
recursiveUpdate
singleton
splitString
substring
types
unique
;
@@ -502,6 +508,41 @@ in {
type = types.bool;
description = "Whether to open the firewall for the specified port.";
};
blueprints = mergeAttrsList (
map
(domain: {
${domain} = mkOption {
default = [ ];
description = ''
List of ${domain}
[blueprints](https://www.home-assistant.io/docs/blueprint/) to
install into {file}`''${configDir}/blueprints/${domain}`.
'';
example =
if domain == "automation" then
literalExpression ''
[
(pkgs.fetchurl {
url = "https://github.com/home-assistant/core/raw/2025.1.4/homeassistant/components/automation/blueprints/motion_light.yaml";
hash = "sha256-4HrDX65ycBMfEY2nZ7A25/d3ZnIHdpHZ+80Cblp+P5w=";
})
]
''
else if domain == "template" then
literalExpression "[ \"\${pkgs.home-assistant.src}/homeassistant/components/template/blueprints/inverted_binary_sensor.yaml\" ]"
else
literalExpression "[ ./blueprint.yaml ]";
type = types.listOf (types.coercedTo types.path (x: "${x}") types.pathInStore);
};
})
# https://www.home-assistant.io/docs/blueprint/schema/#domain
[
"automation"
"script"
"template"
]
);
};
config = mkIf cfg.enable {
@@ -576,11 +617,36 @@ in {
ln -fns "''${paths[@]}" "${cfg.configDir}/custom_components/"
done
'';
removeBlueprints = ''
# remove blueprints symlinked in from below the /nix/store
readarray -d "" blueprints < <(find "${cfg.configDir}/blueprints" -maxdepth 2 -type l -print0)
for blueprint in "''${blueprints[@]}"; do
if [[ "$(readlink "$blueprint")" =~ ^${escapeShellArg builtins.storeDir} ]]; then
rm "$blueprint"
fi
done
'';
copyBlueprint =
domain: blueprint:
let
filename =
if isStorePath blueprint then substring 33 (-1) (baseNameOf blueprint) else baseNameOf blueprint;
path = "${cfg.configDir}/blueprints/${domain}";
in
''
mkdir -p ${escapeShellArg path}
ln -s ${escapeShellArg blueprint} ${escapeShellArg "${path}/${filename}"}
'';
copyBlueprints = concatStrings (
flatten (mapAttrsToList (domain: map (copyBlueprint domain)) cfg.blueprints)
);
in
(optionalString (cfg.config != null) copyConfig) +
(optionalString (cfg.lovelaceConfig != null) copyLovelaceConfig) +
copyCustomLovelaceModules +
copyCustomComponents
copyCustomComponents +
removeBlueprints +
copyBlueprints
;
environment.PYTHONPATH = package.pythonPath;
serviceConfig = let
+156
View File
@@ -0,0 +1,156 @@
{
config,
lib,
pkgs,
utils,
...
}:
let
cfg = config.services.recyclarr;
format = pkgs.formats.yaml { };
stateDir = "/var/lib/recyclarr";
configPath = "${stateDir}/config.json";
in
{
options.services.recyclarr = {
enable = lib.mkEnableOption "recyclarr service";
package = lib.mkPackageOption pkgs "recyclarr" { };
configuration = lib.mkOption {
type = format.type;
default = { };
example = {
sonarr = [
{
instance_name = "main";
base_url = "http://localhost:8989";
api_key = {
_secret = "/run/credentials/recyclarr.service/sonarr-api_key";
};
}
];
radarr = [
{
instance_name = "main";
base_url = "http://localhost:7878";
api_key = {
_secret = "/run/credentials/recyclarr.service/radarr-api_key";
};
}
];
};
description = lib.mdDoc ''
Recyclarr YAML configuration as a Nix attribute set.
For detailed configuration options and examples, see the
[official configuration reference](https://recyclarr.dev/wiki/yaml/config-reference/).
The configuration is processed using [utils.genJqSecretsReplacementSnippet](https://github.com/NixOS/nixpkgs/blob/master/nixos/lib/utils.nix#L232-L331) to handle secret substitution.
To avoid permission issues, secrets should be provided via systemd's credential mechanism:
```nix
systemd.services.recyclarr.serviceConfig.LoadCredential = [
"radarr-api_key:''${config.sops.secrets.radarr-api_key.path}"
];
'';
};
schedule = lib.mkOption {
type = lib.types.str;
default = "daily";
description = "When to run recyclarr in systemd calendar format.";
};
command = lib.mkOption {
type = lib.types.str;
default = "sync";
description = "The recyclarr command to run (e.g., sync).";
};
user = lib.mkOption {
type = lib.types.str;
default = "recyclarr";
description = "User account under which recyclarr runs.";
};
group = lib.mkOption {
type = lib.types.str;
default = "recyclarr";
description = "Group under which recyclarr runs.";
};
};
config = lib.mkIf cfg.enable {
users.users = lib.mkIf (cfg.user == "recyclarr") {
recyclarr = {
isSystemUser = true;
description = "recyclarr user";
home = stateDir;
group = cfg.group;
};
};
users.groups = lib.mkIf (cfg.group == "recyclarr") {
${cfg.group} = { };
};
systemd.services.recyclarr = {
description = "Recyclarr Service";
# YAML is a JSON super-set
preStart = utils.genJqSecretsReplacementSnippet cfg.configuration configPath;
serviceConfig = {
Type = "oneshot";
User = cfg.user;
Group = cfg.group;
StateDirectory = "recyclarr";
ExecStart = "${lib.getExe cfg.package} ${cfg.command} --app-data ${stateDir} --config ${configPath}";
ProtectSystem = "strict";
ProtectHome = true;
PrivateTmp = true;
PrivateDevices = true;
ProtectHostname = true;
ProtectClock = true;
ProtectKernelTunables = true;
ProtectKernelModules = true;
ProtectKernelLogs = true;
ProtectControlGroups = true;
PrivateNetwork = false;
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
];
NoNewPrivileges = true;
RestrictSUIDSGID = true;
RemoveIPC = true;
ReadWritePaths = [ stateDir ];
CapabilityBoundingSet = "";
LockPersonality = true;
RestrictRealtime = true;
};
};
systemd.timers.recyclarr = {
description = "Recyclarr Timer";
wantedBy = [ "timers.target" ];
partOf = [ "recyclarr.service" ];
timerConfig = {
OnCalendar = cfg.schedule;
Persistent = true;
RandomizedDelaySec = "5m";
};
};
};
}
@@ -0,0 +1,91 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.glpiAgent;
settingsType =
with lib.types;
attrsOf (oneOf [
bool
int
str
(listOf str)
]);
formatValue =
v:
if lib.isBool v then
if v then "1" else "0"
else if lib.isList v then
lib.concatStringsSep "," v
else
toString v;
configContent = lib.concatStringsSep "\n" (
lib.mapAttrsToList (k: v: "${k} = ${formatValue v}") cfg.settings
);
configFile = pkgs.writeText "agent.cfg" configContent;
in
{
options = {
services.glpiAgent = {
enable = lib.mkEnableOption "GLPI Agent";
package = lib.mkPackageOption pkgs "glpi-agent" { };
settings = lib.mkOption {
type = settingsType;
default = { };
description = ''
GLPI Agent configuration options.
See https://glpi-agent.readthedocs.io/en/latest/configuration.html for all available options.
The 'server' option is mandatory and must point to your GLPI server.
'';
example = lib.literalExpression ''
{
server = [ "https://glpi.example.com/inventory" ];
delaytime = 3600;
tag = "production";
logger = [ "stderr" "file" ];
debug = 1;
"no-category" = [ "printer" "software" ];
}
'';
};
stateDir = lib.mkOption {
type = lib.types.str;
default = "/var/lib/glpi-agent";
description = "Directory where GLPI Agent stores its state.";
};
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = cfg.settings ? server;
message = "GLPI Agent requires a server to be configured in services.glpiAgent.settings.server";
}
];
systemd.services.glpi-agent = {
description = "GLPI Agent";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
ExecStart = "${lib.getExe cfg.package} --conf-file ${configFile} --vardir ${cfg.stateDir} --daemon --no-fork";
Restart = "on-failure";
};
};
};
}
@@ -0,0 +1,123 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.grafana-to-ntfy;
in
{
options = {
services.grafana-to-ntfy = {
enable = lib.mkEnableOption "Grafana-to-ntfy (ntfy.sh) alerts channel";
package = lib.mkPackageOption pkgs "grafana-to-ntfy" { };
settings = {
ntfyUrl = lib.mkOption {
type = lib.types.str;
description = "The URL to the ntfy-sh topic.";
example = "https://push.example.com/grafana";
};
ntfyBAuthUser = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = ''
The ntfy-sh user to use for authenticating with the ntfy-sh instance.
Setting this option is required when using a ntfy-sh instance with access control enabled.
'';
default = null;
example = "grafana";
};
ntfyBAuthPass = lib.mkOption {
type = lib.types.path;
description = ''
The path to the password for the specified ntfy-sh user.
Setting this option is required when using a ntfy-sh instance with access control enabled.
'';
default = null;
};
bauthUser = lib.mkOption {
type = lib.types.str;
description = ''
The user that you will authenticate with in the Grafana webhook settings.
You can set this to whatever you like, as this is not the same as the ntfy-sh user.
'';
default = "admin";
};
bauthPass = lib.mkOption {
type = lib.types.path;
description = "The path to the password you will use in the Grafana webhook settings.";
};
};
};
};
config = lib.mkIf cfg.enable {
systemd.services.grafana-to-ntfy = {
wantedBy = [ "multi-user.target" ];
script = ''
export BAUTH_PASS=$(${lib.getExe' config.systemd.package "systemd-creds"} cat BAUTH_PASS_FILE)
${lib.optionalString (cfg.settings.ntfyBAuthPass != null) ''
export NTFY_BAUTH_PASS=$(${lib.getExe' config.systemd.package "systemd-creds"} cat NTFY_BAUTH_PASS_FILE)
''}
exec ${lib.getExe cfg.package}
'';
environment =
{
NTFY_URL = cfg.settings.ntfyUrl;
BAUTH_USER = cfg.settings.bauthUser;
}
// lib.optionalAttrs (cfg.settings.ntfyBAuthUser != null) {
NTFY_BAUTH_USER = cfg.settings.ntfyBAuthUser;
};
serviceConfig = {
LoadCredential =
[
"BAUTH_PASS_FILE:${cfg.settings.bauthPass}"
]
++ lib.optional (
cfg.settings.ntfyBAuthPass != null
) "NTFY_BAUTH_PASS_FILE:${cfg.settings.ntfyBAuthPass}";
DynamicUser = true;
CapabilityBoundingSet = [ "" ];
DeviceAllow = "";
LockPersonality = true;
PrivateDevices = true;
PrivateUsers = true;
ProcSubset = "pid";
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
"AF_UNIX"
];
RestrictNamespaces = true;
RestrictRealtime = true;
MemoryDenyWriteExecute = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@privileged"
];
UMask = "0077";
};
};
};
}
@@ -140,6 +140,7 @@ in
${concatStringsSep " \\\n " cfg.extraFlags}
'';
serviceConfig = {
CacheDirectory = "restic-exporter";
EnvironmentFile = mkIf (cfg.environmentFile != null) cfg.environmentFile;
LoadCredential = [
"RESTIC_PASSWORD_FILE:${cfg.passwordFile}"
@@ -156,6 +157,7 @@ in
LISTEN_ADDRESS = cfg.listenAddress;
LISTEN_PORT = toString cfg.port;
REFRESH_INTERVAL = toString cfg.refreshInterval;
RESTIC_CACHE_DIR = "$CACHE_DIRECTORY";
}
// (mapAttrs' (
name: value: nameValuePair (rcloneAttrToOpt name) (toRcloneVal value)
@@ -68,16 +68,10 @@ in
services = {
nginx = {
enable = true;
upstreams.tailscale-derper = {
servers."127.0.0.1:${toString cfg.port}" = { };
extraConfig = ''
keepalive 64;
'';
};
virtualHosts."${cfg.domain}" = {
addSSL = true; # this cannot be forceSSL as derper sends some information over port 80, too.
locations."/" = {
proxyPass = "http://tailscale-derper";
proxyPass = "http://127.0.0.1:${toString cfg.port}";
proxyWebsockets = true;
extraConfig = ''
keepalive_timeout 0;
+13 -1
View File
@@ -20,7 +20,8 @@ let
NoNewPrivileges = true;
PrivateUsers = true;
PrivateTmp = true;
PrivateDevices = true;
PrivateDevices = cfg.accelerationDevices == [ ];
DeviceAllow = mkIf (cfg.accelerationDevices != null) cfg.accelerationDevices;
PrivateMounts = true;
ProtectClock = true;
ProtectControlGroups = true;
@@ -161,6 +162,17 @@ in
};
};
accelerationDevices = mkOption {
type = types.nullOr (types.listOf types.str);
default = [ ];
example = [ "/dev/dri/renderD128" ];
description = ''
A list of device paths to hardware acceleration devices that immich should
have access to. This is useful when transcoding media files.
The special value `[ ]` will disallow all devices using `PrivateDevices`. `null` will give access to all devices.
'';
};
database = {
enable =
mkEnableOption "the postgresql database for use with immich. See {option}`services.postgresql`"
@@ -146,6 +146,12 @@ in
proxyPass = "http://unix:${cfg.socketPath}";
proxyWebsockets = true;
recommendedProxySettings = true;
extraConfig = # nginx
''
# disable in case it was configured on a higher level
keepalive_timeout 0;
proxy_buffering off;
'';
};
}
@@ -52,7 +52,7 @@ in
group = lib.mkOption {
type = lib.types.str;
default = if cfg.enableNginx then "nginx" else defaultGroup;
defaultText = "If `services.privatebin.enableNginx` is true then `nginx` else ${defaultGroup}";
defaultText = lib.literalExpression "if config.services.privatebin.enableNginx then \"nginx\" else \"${defaultGroup}\"";
description = ''
Group under which privatebin runs. It is best to set this to the group
of whatever webserver is being used as the frontend.
@@ -139,7 +139,6 @@ in
};
config = lib.mkIf cfg.enable {
services.privatebin.settings = {
main = lib.mkDefault { };
model.class = lib.mkDefault "Filesystem";
+54 -51
View File
@@ -1,48 +1,67 @@
{ config, lib, pkgs, ... }:
{
config,
lib,
pkgs,
...
}:
with lib;
let
cfg = config.virtualisation.azure;
mlxDrivers = [ "mlx4_en" "mlx4_core" "mlx5_core" ];
mlxDrivers = [
"mlx4_en"
"mlx4_core"
"mlx5_core"
];
in
{
options.virtualisation.azure = {
acceleratedNetworking = mkOption {
acceleratedNetworking = lib.mkOption {
default = false;
description = "Whether the machine's network interface has enabled accelerated networking.";
};
};
imports = [
../profiles/headless.nix
./azure-agent.nix
];
config = {
virtualisation.azure.agent.enable = true;
services.waagent.enable = true;
boot.kernelParams = [ "console=ttyS0" "earlyprintk=ttyS0" "rootdelay=300" "panic=1" "boot.panic_on_fail" ];
boot.initrd.kernelModules = [ "hv_vmbus" "hv_netvsc" "hv_utils" "hv_storvsc" ];
# Enable cloud-init by default for waagent.
# Otherwise waagent would try manage networking using ifupdown,
# which is currently not availeble in nixpkgs.
services.cloud-init.enable = true;
services.cloud-init.network.enable = true;
systemd.services.cloud-config.serviceConfig.Restart = "on-failure";
# cloud-init.network.enable also enables systemd-networkd
networking.useNetworkd = true;
# Ensure kernel outputs to ttyS0 (Azure Serial Console),
# and reboot machine upon fatal boot issues
boot.kernelParams = [
"console=ttyS0"
"earlyprintk=ttyS0"
"rootdelay=300"
"panic=1"
"boot.panic_on_fail"
];
# Load Hyper-V kernel modules
boot.initrd.kernelModules = [
"hv_vmbus"
"hv_netvsc"
"hv_utils"
"hv_storvsc"
];
# Accelerated networking, configured following:
# https://learn.microsoft.com/en-us/azure/virtual-network/accelerated-networking-overview
boot.initrd.availableKernelModules = lib.optionals cfg.acceleratedNetworking mlxDrivers;
# Accelerated networking
systemd.network.networks."99-azure-unmanaged-devices.network" = lib.mkIf cfg.acceleratedNetworking {
matchConfig.Driver = mlxDrivers;
linkConfig.Unmanaged = "yes";
};
networking.networkmanager.unmanaged = lib.mkIf cfg.acceleratedNetworking
(builtins.map (drv: "driver:${drv}") mlxDrivers);
# Generate a GRUB menu.
boot.loader.grub.device = "/dev/sda";
boot.growPartition = true;
fileSystems."/" = {
device = "/dev/disk/by-label/nixos";
fsType = "ext4";
autoResize = true;
};
networking.networkmanager.unmanaged = lib.mkIf cfg.acceleratedNetworking (
builtins.map (drv: "driver:${drv}") mlxDrivers
);
# Allow root logins only using the SSH key that the user specified
# at instance creation time, ping client connections to avoid timeouts
@@ -51,35 +70,19 @@ in
services.openssh.settings.ClientAliveInterval = 180;
# Force getting the hostname from Azure
networking.hostName = mkDefault "";
networking.hostName = lib.mkDefault "";
# Always include cryptsetup so that NixOps can use it.
# sg_scan is needed to finalize disk removal on older kernels
environment.systemPackages = [ pkgs.cryptsetup pkgs.sg3_utils ];
environment.systemPackages = [
pkgs.cryptsetup
pkgs.sg3_utils
];
networking.usePredictableInterfaceNames = false;
services.udev.extraRules = ''
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:0", ATTR{removable}=="0", SYMLINK+="disk/by-lun/0",
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:1", ATTR{removable}=="0", SYMLINK+="disk/by-lun/1",
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:2", ATTR{removable}=="0", SYMLINK+="disk/by-lun/2"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:3", ATTR{removable}=="0", SYMLINK+="disk/by-lun/3"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:4", ATTR{removable}=="0", SYMLINK+="disk/by-lun/4"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:5", ATTR{removable}=="0", SYMLINK+="disk/by-lun/5"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:6", ATTR{removable}=="0", SYMLINK+="disk/by-lun/6"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:7", ATTR{removable}=="0", SYMLINK+="disk/by-lun/7"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:8", ATTR{removable}=="0", SYMLINK+="disk/by-lun/8"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:9", ATTR{removable}=="0", SYMLINK+="disk/by-lun/9"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:10", ATTR{removable}=="0", SYMLINK+="disk/by-lun/10"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:11", ATTR{removable}=="0", SYMLINK+="disk/by-lun/11"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:12", ATTR{removable}=="0", SYMLINK+="disk/by-lun/12"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:13", ATTR{removable}=="0", SYMLINK+="disk/by-lun/13"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:14", ATTR{removable}=="0", SYMLINK+="disk/by-lun/14"
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:15", ATTR{removable}=="0", SYMLINK+="disk/by-lun/15"
'';
services.udev.extraRules = lib.concatMapStrings (i: ''
ENV{DEVTYPE}=="disk", KERNEL!="sda" SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="?:0:0:${toString i}", ATTR{removable}=="0", SYMLINK+="disk/by-lun/${toString i}"
'') (lib.range 1 15);
};
}
@@ -8,5 +8,11 @@
# This configures everything but bootstrap services,
# which only need to be run once and have already finished
# if you are able to see this comment.
imports = [ "${modulesPath}/virtualisation/azure-common.nix" ];
imports = [
"${modulesPath}/virtualisation/azure-common.nix"
"${modulesPath}/virtualisation/azure-image.nix"
];
# Please set the VM Generation to the actual value
# virtualisation.azureImage.vmGeneration = "v1";
}
+47 -3
View File
@@ -46,6 +46,14 @@ in
'';
};
label = mkOption {
type = types.str;
default = "nixos";
description = ''
NixOS partition label.
'';
};
vmGeneration = mkOption {
type =
with types;
@@ -68,19 +76,55 @@ in
system.build.azureImage = import ../../lib/make-disk-image.nix {
name = "azure-image";
inherit (config.image) baseName;
# Azure expects vhd format with fixed size,
# generating raw format and convert with subformat args afterwards
format = "raw";
postVM = ''
${pkgs.vmTools.qemu}/bin/qemu-img convert -f raw -o subformat=fixed,force_size -O vpc $diskImage $out/${config.image.fileName}
rm $diskImage
'';
configFile = ./azure-config-user.nix;
format = "raw";
bootSize = "${toString cfg.bootSize}M";
partitionTableType = if cfg.vmGeneration == "v2" then "efi" else "legacy";
partitionTableType = if (cfg.vmGeneration == "v2") then "efi" else "legacy";
inherit (cfg) contents;
inherit (cfg) contents label;
inherit (config.virtualisation) diskSize;
inherit config lib pkgs;
};
boot.growPartition = true;
boot.loader.grub = rec {
efiSupport = (cfg.vmGeneration == "v2");
device = if efiSupport then "nodev" else "/dev/sda";
efiInstallAsRemovable = efiSupport;
# Force grub to run in text mode and output to console
# by disabling font and splash image
font = null;
splashImage = null;
# For Gen 1 VM, configurate grub output to serial_com0.
# Not needed for Gen 2 VM wbere serial_com0 does not exist,
# and outputing to console is enough to make Azure Serial Console working
extraConfig = lib.mkIf (!efiSupport) ''
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal_input --append serial
terminal_output --append serial
'';
};
fileSystems = {
"/" = {
device = "/dev/disk/by-label/${cfg.label}";
inherit (cfg) label;
fsType = "ext4";
autoResize = true;
};
"/boot" = lib.mkIf (cfg.vmGeneration == "v2") {
device = "/dev/disk/by-label/ESP";
fsType = "vfat";
};
};
};
}
+7 -2
View File
@@ -9,6 +9,8 @@ let
cfg = config.virtualisation.incus;
preseedFormat = pkgs.formats.yaml { };
nvidiaEnabled = (lib.elem "nvidia" config.services.xserver.videoDrivers);
serverBinPath = ''/run/wrappers/bin:${pkgs.qemu_kvm}/libexec:${
lib.makeBinPath (
with pkgs;
@@ -26,6 +28,7 @@ let
e2fsprogs
findutils
getent
gawk
gnugrep
gnused
gnutar
@@ -35,7 +38,6 @@ let
iptables
iw
kmod
libnvidia-container
libxfs
lvm2
lxcfs
@@ -73,6 +75,9 @@ let
config.boot.zfs.package
"${config.boot.zfs.package}/lib/udev"
]
++ lib.optionals nvidiaEnabled [
libnvidia-container
]
)
}'';
@@ -309,7 +314,7 @@ in
"xt_CHECKSUM"
"xt_MASQUERADE"
"vhost_vsock"
] ++ lib.optionals (!config.networking.nftables.enable) [ "iptable_mangle" ];
] ++ lib.optionals nvidiaEnabled [ "nvidia_uvm" ];
environment.systemPackages = [
cfg.clientPackage
+45 -27
View File
@@ -31,7 +31,7 @@ let
attrsOf (
either atom (attrsOf atom)
// {
description = atom.description + "or an attribute set of them";
description = atom.description + " or an attribute set of them";
}
);
generate =
@@ -110,14 +110,18 @@ let
};
ResourceDisk = {
Format = mkEnableOption ''
If set to `true`, waagent formats and mounts the resource disk that the platform provides,
unless the file system type in `ResourceDisk.FileSystem` is set to `ntfs`.
The agent makes a single Linux partition (ID 83) available on the disk.
This partition isn't formatted if it can be successfully mounted.
Format = mkOption {
type = types.bool;
default = false;
description = ''
If set to `true`, waagent formats and mounts the resource disk that the platform provides,
unless the file system type in `ResourceDisk.FileSystem` is set to `ntfs`.
The agent makes a single Linux partition (ID 83) available on the disk.
This partition isn't formatted if it can be successfully mounted.
This configuration has no effect if resource disk is managed by cloud-init.
'';
This configuration has no effect if resource disk is managed by cloud-init.
'';
};
FileSystem = mkOption {
type = types.str;
@@ -155,12 +159,16 @@ let
'';
};
EnableSwap = mkEnableOption ''
If enabled, the agent creates a swap file (`/swapfile`) on the resource disk
and adds it to the system swap space.
EnableSwap = mkOption {
type = types.bool;
default = false;
description = ''
If enabled, the agent creates a swap file (`/swapfile`) on the resource disk
and adds it to the system swap space.
This configuration has no effect if resource disk is managed by cloud-init.
'';
This configuration has no effect if resource disk is managed by cloud-init.
'';
};
SwapSizeMB = mkOption {
type = types.int;
@@ -173,16 +181,24 @@ let
};
};
Logs.Verbose = lib.mkEnableOption ''
If you set this option, log verbosity is boosted.
Waagent logs to `/var/log/waagent.log` and uses the system logrotate functionality to rotate logs.
'';
Logs.Verbose = lib.mkOption {
type = types.bool;
default = false;
description = ''
If you set this option, log verbosity is boosted.
Waagent logs to `/var/log/waagent.log` and uses the system logrotate functionality to rotate logs.
'';
};
OS = {
EnableRDMA = lib.mkEnableOption ''
If enabled, the agent attempts to install and then load an RDMA kernel driver
that matches the version of the firmware on the underlying hardware.
'';
EnableRDMA = lib.mkOption {
type = types.bool;
default = false;
description = ''
If enabled, the agent attempts to install and then load an RDMA kernel driver
that matches the version of the firmware on the underlying hardware.
'';
};
RootDeviceScsiTimeout = lib.mkOption {
type = types.nullOr types.int;
@@ -212,17 +228,19 @@ let
};
};
AutoUpdate.Enable = lib.mkEnableOption ''
Enable or disable autoupdate for goal state processing.
'';
AutoUpdate.Enable = lib.mkOption {
type = types.bool;
default = false;
description = ''
Whether or not to enable autoupdate for goal state processing.
'';
};
};
};
in
{
options.services.waagent = {
enable = lib.mkEnableOption ''
Whether to enable the Windows Azure Linux Agent.
'';
enable = lib.mkEnableOption "Windows Azure Linux Agent";
package = lib.mkPackageOption pkgs "waagent" { };
+23 -2
View File
@@ -15,7 +15,8 @@ import ./make-test-python.nix (
enable = true;
};
};
services.geth."testnet" = {
services.geth."holesky" = {
enable = true;
port = 30304;
network = "holesky";
@@ -28,15 +29,31 @@ import ./make-test-python.nix (
port = 18551;
};
};
services.geth."sepolia" = {
enable = true;
port = 30305;
network = "sepolia";
http = {
enable = true;
port = 28545;
};
authrpc = {
enable = true;
port = 28551;
};
};
};
testScript = ''
start_all()
machine.wait_for_unit("geth-mainnet.service")
machine.wait_for_unit("geth-testnet.service")
machine.wait_for_unit("geth-holesky.service")
machine.wait_for_unit("geth-sepolia.service")
machine.wait_for_open_port(8545)
machine.wait_for_open_port(18545)
machine.wait_for_open_port(28545)
machine.succeed(
'geth attach --exec "eth.blockNumber" http://localhost:8545 | grep \'^0$\' '
@@ -45,6 +62,10 @@ import ./make-test-python.nix (
machine.succeed(
'geth attach --exec "eth.blockNumber" http://localhost:18545 | grep \'^0$\' '
)
machine.succeed(
'geth attach --exec "eth.blockNumber" http://localhost:28545 | grep \'^0$\' '
)
'';
}
)
+19 -1
View File
@@ -129,6 +129,16 @@ in
];
};
lovelaceConfigWritable = true;
blueprints.automation = [
(pkgs.fetchurl {
url = "https://github.com/home-assistant/core/raw/2025.1.4/homeassistant/components/automation/blueprints/motion_light.yaml";
hash = "sha256-4HrDX65ycBMfEY2nZ7A25/d3ZnIHdpHZ+80Cblp+P5w=";
})
];
blueprints.template = [
"${pkgs.home-assistant.src}/homeassistant/components/template/blueprints/inverted_binary_sensor.yaml"
];
};
# Cause a configuration change inside `configuration.yml` and verify that the process is being reloaded.
@@ -148,6 +158,8 @@ in
configuration.services.home-assistant = {
customComponents = lib.mkForce [ ];
customLovelaceModules = lib.mkForce [ ];
blueprints.automation = lib.mkForce [ ];
blueprints.template = lib.mkForce [ ];
};
};
};
@@ -226,6 +238,10 @@ in
with subtest("Check extra components are considered in systemd unit hardening"):
hass.succeed("systemctl show -p DeviceAllow home-assistant.service | grep -q char-ttyUSB")
with subtest("Check that blueprints are installed"):
hass.succeed("test -L '${configDir}/blueprints/automation/motion_light.yaml'")
hass.succeed("test -L '${configDir}/blueprints/template/inverted_binary_sensor.yaml'")
with subtest("Check service restart from SIGHUP"):
pid = hass.succeed("systemctl show --property=MainPID home-assistant.service")
cursor = get_journal_cursor()
@@ -247,12 +263,14 @@ in
for domain in ["prometheus"]:
assert f"Setup of domain {domain} took" in journal, f"{domain} setup missing"
with subtest("Check custom components and custom lovelace modules get removed"):
with subtest("Check custom components, custom lovelace modules, and blueprints get removed"):
cursor = get_journal_cursor()
hass.succeed("${system}/specialisation/removeCustomThings/bin/switch-to-configuration test")
hass.fail("grep -q 'mini-graph-card-bundle.js' '${configDir}/ui-lovelace.yaml'")
for integration in ("prometheus_sensor", "spook", "spook_inverse"):
hass.fail(f"test -f ${configDir}/custom_components/{integration}/manifest.json")
hass.fail("test -e '${configDir}/blueprints/automation/motion_light.yaml'")
hass.fail("test -e '${configDir}/blueprints/template/inverted_binary_sensor.yaml'")
wait_for_homeassistant(cursor)
with subtest("Check that no errors were logged"):
+3 -3
View File
@@ -20,7 +20,7 @@ in
meta.maintainers = with lib.maintainers; [ nikstur ];
nodes.machine =
{ config, ... }:
{ pkgs, ... }:
{
imports = [ common ];
@@ -36,8 +36,8 @@ in
specialisation.new-generation = {
inheritParentConfig = false;
configuration = {
nixpkgs = {
inherit (config.nixpkgs) hostPlatform;
nixpkgs.hostPlatform = {
inherit (pkgs.stdenv.hostPlatform) system;
};
imports = [ common ];
+3 -3
View File
@@ -16,7 +16,7 @@ in
meta.maintainers = with lib.maintainers; [ nikstur ];
nodes.machine =
{ config, ... }:
{ pkgs, ... }:
{
imports = [ common ];
@@ -32,8 +32,8 @@ in
specialisation.new-generation = {
inheritParentConfig = false;
configuration = {
nixpkgs = {
inherit (config.nixpkgs) hostPlatform;
nixpkgs.hostPlatform = {
inherit (pkgs.stdenv.hostPlatform) system;
};
imports = [ common ];
+3 -3
View File
@@ -20,7 +20,7 @@ in
meta.maintainers = with lib.maintainers; [ nikstur ];
nodes.machine =
{ config, ... }:
{ pkgs, ... }:
{
imports = [ common ];
@@ -36,8 +36,8 @@ in
specialisation.new-generation = {
inheritParentConfig = false;
configuration = {
nixpkgs = {
inherit (config.nixpkgs) hostPlatform;
nixpkgs.hostPlatform = {
inherit (pkgs.stdenv.hostPlatform) system;
};
imports = [ common ];
+3 -3
View File
@@ -16,7 +16,7 @@ in
meta.maintainers = with lib.maintainers; [ nikstur ];
nodes.machine =
{ config, ... }:
{ pkgs, ... }:
{
imports = [ common ];
@@ -33,8 +33,8 @@ in
specialisation.new-generation = {
inheritParentConfig = false;
configuration = {
nixpkgs = {
inherit (config.nixpkgs) hostPlatform;
nixpkgs.hostPlatform = {
inherit (pkgs.stdenv.hostPlatform) system;
};
imports = [ common ];
@@ -17,8 +17,8 @@ let
sha256Hash = "sha256-UxxofUCJGhQTLMwHGaSdNDqWnjkpRVwm2oqLLp3jR8E=";
};
latestVersion = {
version = "2024.3.2.1"; # "Android Studio Meerkat Feature Drop | 2024.3.2 Canary 1"
sha256Hash = "sha256-qJKkuB8v4wOqEQwnDyMegLbRLzxVwCq/hS1TQ3lhBKk=";
version = "2024.3.2.2"; # "Android Studio Meerkat Feature Drop | 2024.3.2 Canary 2"
sha256Hash = "sha256-P0yBlqcuTSmJ4gmSvSCW31ARqDBC3NC8PozQHIXPS8Y=";
};
in {
# Attributes are named by their corresponding release channels
File diff suppressed because it is too large Load Diff
@@ -5,15 +5,15 @@ let
in
{
sublime4 = common {
buildVersion = "4189";
x64sha256 = "0vEG2FfLK+93UtpYV9iWl187iN79Tozm38Vh6lbzW7A=";
aarch64sha256 = "ZyLnbvpyxvJfyfu663ED0Yn5M37As+jy6TREZMgSHgI=";
buildVersion = "4192";
x64sha256 = "3CMorzQj+JFPTXp6PPhX6Mlcz/kJb2FM2iwUsvrhy+s=";
aarch64sha256 = "gVhDBac3kyDU1qIiXoN7Xf5Jvbdnif2QGuFUy2C34Mo=";
} { };
sublime4-dev = common {
buildVersion = "4188";
buildVersion = "4191";
dev = true;
x64sha256 = "b7JyJ9cPxb/Yjy9fvcz/m6OLETxMd8rwkmrEyMGAjjc=";
aarch64sha256 = "oGL0UtQge21oH6p6BNsRkxqgvdi9PkT/uwZTYygu+ng=";
x64sha256 = "fJy0BNToM8beMv5jYdFiecyjudzTG+r0mEpi9erZs4A=";
aarch64sha256 = "KgqZ9+rEGM9wcgqk+CenFInmDc3jPMdnRBpTREHBpjE=";
} { };
}
@@ -1302,6 +1302,42 @@ final: prev:
meta.homepage = "https://github.com/giuxtaposition/blink-cmp-copilot/";
};
blink-cmp-dictionary = buildVimPlugin {
pname = "blink-cmp-dictionary";
version = "2025-01-12";
src = fetchFromGitHub {
owner = "Kaiser-Yang";
repo = "blink-cmp-dictionary";
rev = "07cc2e49bb52ebff4e8b83d1801ad6441edf90a2";
sha256 = "17c41flnjp25c5gry4lq8ik8mk3pbh1qwj86rby57jr4f4wvfykk";
};
meta.homepage = "https://github.com/Kaiser-Yang/blink-cmp-dictionary/";
};
blink-cmp-spell = buildVimPlugin {
pname = "blink-cmp-spell";
version = "2025-02-01";
src = fetchFromGitHub {
owner = "ribru17";
repo = "blink-cmp-spell";
rev = "38d6797dea6f72baa6e8b3bfca6da96d8fcac64d";
sha256 = "19pnasa446iiapgsr3z2fpk0nnrzh8g5wrzrq8n0y4q0z6spc9f6";
};
meta.homepage = "https://github.com/ribru17/blink-cmp-spell/";
};
blink-cmp-git = buildVimPlugin {
pname = "blink-cmp-git";
version = "2025-01-27";
src = fetchFromGitHub {
owner = "Kaiser-Yang";
repo = "blink-cmp-git";
rev = "7c6cfa3d427f50a6eae5c38628b31b8675bab05d";
sha256 = "08hfwnjgsl88bkphpdxkdswdnc10mlxpsrk084kgzk4j19w55gyq";
};
meta.homepage = "https://github.com/Kaiser-Yang/blink-cmp-git/";
};
blink-compat = buildVimPlugin {
pname = "blink.compat";
version = "2025-01-20";
@@ -3007,6 +3043,18 @@ final: prev:
meta.homepage = "https://github.com/hat0uma/csvview.nvim/";
};
ctags-lsp-nvim = buildVimPlugin {
pname = "ctags-lsp.nvim";
version = "2024-12-08";
src = fetchFromGitHub {
owner = "netmute";
repo = "ctags-lsp.nvim";
rev = "aaae7b5d8dc7aeb836c63301b8eb7311af49bb2a";
sha256 = "06h388vkp8nv15wbh96pza85994xf979s7kjqrli4s6y5ygw6m02";
};
meta.homepage = "https://github.com/netmute/ctags-lsp.nvim/";
};
ctrlp-cmatcher = buildVimPlugin {
pname = "ctrlp-cmatcher";
version = "2015-10-15";
@@ -7388,6 +7436,18 @@ final: prev:
meta.homepage = "https://github.com/wfxr/minimap.vim/";
};
minuet-ai-nvim = buildVimPlugin {
pname = "minuet-ai.nvim";
version = "2025-02-03";
src = fetchFromGitHub {
owner = "milanglacier";
repo = "minuet-ai.nvim";
rev = "9a264284573b837dc0202049166a0564a70deaed";
sha256 = "06d7s9949aylda4vq36h4s9hnnp3lycwm2nrjid5vxb98gy3d3xn";
};
meta.homepage = "https://github.com/milanglacier/minuet-ai.nvim/";
};
mkdir-nvim = buildVimPlugin {
pname = "mkdir.nvim";
version = "2022-07-23";
@@ -292,10 +292,18 @@ in
dependencies = [ self.copilot-lua ];
};
blink-cmp-dictionary = super.blink-cmp-dictionary.overrideAttrs {
dependencies = [ self.plenary-nvim ];
};
blink-emoji-nvim = super.blink-emoji-nvim.overrideAttrs {
dependencies = [ self.blink-cmp ];
};
blink-cmp-git = super.blink-cmp-git.overrideAttrs {
dependencies = [ self.plenary-nvim ];
};
bluloco-nvim = super.bluloco-nvim.overrideAttrs {
dependencies = [ self.lush-nvim ];
};
@@ -1805,6 +1813,24 @@ in
meta.homepage = "https://github.com/jose-elias-alvarez/minsnip.nvim/";
};
minuet-ai-nvim = super.minuet-ai-nvim.overrideAttrs {
checkInputs = [
# optional cmp integration
self.nvim-cmp
];
dependencies = with self; [ plenary-nvim ];
nvimSkipModule = [
# Backends require configuration
"minuet.backends.claude"
"minuet.backends.codestral"
"minuet.backends.gemini"
"minuet.backends.huggingface"
"minuet.backends.openai"
"minuet.backends.openai_compatible"
"minuet.backends.openai_fim_compatible"
];
};
mkdnflow-nvim = super.mkdnflow-nvim.overrideAttrs {
dependencies = [ self.plenary-nvim ];
# Requires setup call and has optional nvim-cmp dependency
@@ -106,6 +106,9 @@ https://github.com/max397574/better-escape.nvim/,,
https://github.com/LunarVim/bigfile.nvim/,,
https://github.com/APZelos/blamer.nvim/,HEAD,
https://github.com/giuxtaposition/blink-cmp-copilot/,HEAD,
https://github.com/Kaiser-Yang/blink-cmp-dictionary/,HEAD,
https://github.com/Kaiser-Yang/blink-cmp-git/,HEAD,
https://github.com/ribru17/blink-cmp-spell/,HEAD,
https://github.com/fang2hou/blink-copilot/,HEAD,
https://github.com/moyiz/blink-emoji.nvim/,HEAD,
https://github.com/mikavilpas/blink-ripgrep.nvim/,HEAD,
@@ -248,6 +251,7 @@ https://github.com/Decodetalkers/csharpls-extended-lsp.nvim/,HEAD,
https://github.com/davidmh/cspell.nvim/,HEAD,
https://github.com/chrisbra/csv.vim/,,
https://github.com/hat0uma/csvview.nvim/,HEAD,
https://github.com/netmute/ctags-lsp.nvim/,HEAD,
https://github.com/JazzCore/ctrlp-cmatcher/,,
https://github.com/FelikZ/ctrlp-py-matcher/,,
https://github.com/amiorin/ctrlp-z/,,
@@ -612,6 +616,7 @@ https://github.com/echasnovski/mini.test/,HEAD,
https://github.com/echasnovski/mini.trailspace/,HEAD,
https://github.com/echasnovski/mini.visits/,HEAD,
https://github.com/wfxr/minimap.vim/,,
https://github.com/milanglacier/minuet-ai.nvim/,HEAD,
https://github.com/jghauser/mkdir.nvim/,main,
https://github.com/jakewvincent/mkdnflow.nvim/,HEAD,
https://github.com/SidOfc/mkdx/,,
@@ -0,0 +1,28 @@
{
lib,
vscode-utils,
httpyac,
}:
let
version = "6.16.6";
in
vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "vscode-httpyac";
publisher = "anweber";
inherit version;
hash = "sha256-GR1DX6td/a75STpfIU0UtOxpNBWCkyzecEZdDMZTy1M=";
};
buildInputs = [ httpyac ];
meta = {
changelog = "https://github.com/AnWeber/vscode-httpyac/releases/tag/${version}";
description = "Quickly and easily send REST, Soap, GraphQL, GRPC, MQTT, RabbitMQ and WebSocket requests directly within Visual Studio Code";
downloadPage = "https://marketplace.visualstudio.com/items?itemName=anweber.vscode-httpyac";
homepage = "https://github.com/AnWeber/vscode-httpyac/";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ drupol ];
};
}
@@ -309,6 +309,8 @@ let
};
};
anweber.vscode-httpyac = callPackage ./anweber.vscode-httpyac { };
apollographql.vscode-apollo = buildVscodeMarketplaceExtension {
mktplcRef = {
name = "vscode-apollo";
@@ -6,13 +6,13 @@
}:
mkLibretroCore {
core = "vice-${type}";
version = "0-unstable-2025-01-11";
version = "0-unstable-2025-01-28";
src = fetchFromGitHub {
owner = "libretro";
repo = "vice-libretro";
rev = "5afa33f347306f168ff0b4c54a7825895dd07b50";
hash = "sha256-D0DSKgqZV8EluRry2qSm7qnWnvwwDWz91G66W4nF2Kk=";
rev = "cdef1f9f8d5cbe4ba3e9b9106e117bdd35f599b9";
hash = "sha256-02ZH5ax49uWnvYe+hpL7a94Bf8knja1YADxyI2irYms=";
};
makefile = "Makefile";
+2 -2
View File
@@ -27,14 +27,14 @@
stdenv.mkDerivation rec {
pname = "rofi-unwrapped";
version = "1.7.7";
version = "1.7.8";
src = fetchFromGitHub {
owner = "davatorium";
repo = "rofi";
rev = version;
fetchSubmodules = true;
hash = "sha256-2rPEn+XotijqLYo2EcoiJbgdbRk4SCQ+D4jZ1gwpCQw=";
hash = "sha256-TEn3LoTUc5mxYcVkckIFTfkqQ9cUJxkXyg/5TFv5TZ0=";
};
preConfigure = ''
@@ -6,16 +6,16 @@
buildGoModule rec {
pname = "helm-s3";
version = "0.16.2";
version = "0.16.3";
src = fetchFromGitHub {
owner = "hypnoglow";
repo = pname;
rev = "v${version}";
hash = "sha256-hQuZd0VI+JspIjR7Dax/LXUZ9Rqflc6RQG9X80BkfeY=";
hash = "sha256-WiK2kZWik81HYZVVmzdqdqIE+jnAcYyu536NbdYWYxk=";
};
vendorHash = "sha256-CXlZazpsHasjHPNHzXIsrbtWgQs/lVRqGsoqRvl2MHw=";
vendorHash = "sha256-AXr+2+iv3oNTHEckK7DXEA5PMgFgT5iAGRttvGoCpQQ=";
# NOTE: Remove the install and upgrade hooks.
postPatch = ''
@@ -1,18 +1,18 @@
{
"airgap-images-amd64": {
"url": "https://github.com/k3s-io/k3s/releases/download/v1.32.0%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
"sha256": "0dz8zpb1la98y63x7qs00s28bzn10ycipwsf6a5lvyhzzgpl253a"
"url": "https://github.com/k3s-io/k3s/releases/download/v1.32.1%2Bk3s1/k3s-airgap-images-amd64.tar.zst",
"sha256": "0sn4m1djj8npdx90mny7cwc843ri9q4s0w906rgabjw2v1h56qz0"
},
"airgap-images-arm": {
"url": "https://github.com/k3s-io/k3s/releases/download/v1.32.0%2Bk3s1/k3s-airgap-images-arm.tar.zst",
"sha256": "04qsn75xzfl29fksnb0rzcj7cfdi84smmhn9v47l423zbgr30pfv"
"url": "https://github.com/k3s-io/k3s/releases/download/v1.32.1%2Bk3s1/k3s-airgap-images-arm.tar.zst",
"sha256": "1mk8xjc4zj3a6jm53drwicqsipy58faxmq990s14lqvrhh3qjnh4"
},
"airgap-images-arm64": {
"url": "https://github.com/k3s-io/k3s/releases/download/v1.32.0%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
"sha256": "1bk8skws87561n06mkwh92c93v5rinf8nmwydn06p8crz9ggp5q6"
"url": "https://github.com/k3s-io/k3s/releases/download/v1.32.1%2Bk3s1/k3s-airgap-images-arm64.tar.zst",
"sha256": "0s1h6lksn83r71ia61h9cjwiqigz9nw9n9jm92749782c8zi918x"
},
"images-list": {
"url": "https://github.com/k3s-io/k3s/releases/download/v1.32.0%2Bk3s1/k3s-images.txt",
"sha256": "1gqiaszfw49hsbn7xkkadykaf028vys13ykqvpkqar0f7hwwbja6"
"url": "https://github.com/k3s-io/k3s/releases/download/v1.32.1%2Bk3s1/k3s-images.txt",
"sha256": "08qxykq9aylfgm24g8ybki62r2sdzvnmv72pan4i2nn0js93nnk9"
}
}
@@ -1,8 +1,8 @@
{
k3sVersion = "1.32.0+k3s1";
k3sCommit = "cca8facaa33a3ec7897349a8740fd96029590c31";
k3sRepoSha256 = "0l8mciwv2wr266zxv9zc5wpgf92gqvzg4d08z4g63wbvsi7zflzh";
k3sVendorHash = "sha256-3hY67A6GbzB2ki5GB7GmmmGG5A4cup17zhkUNiN1chk=";
k3sVersion = "1.32.1+k3s1";
k3sCommit = "6a322f122729e0e668ca67fd9f0e993541bdce49";
k3sRepoSha256 = "00ljl6mzbyvyy25cz0k511wmm1zhllvz0l2ns72ic4xjg9sxq6zi";
k3sVendorHash = "sha256-/VQslKifAKFo57Zut9F8jWWNuMRFlMgpGo/FoqutT7Q=";
chartVersions = import ./chart-versions.nix;
imagesVersions = builtins.fromJSON (builtins.readFile ./images-versions.json);
k3sRootVersion = "0.14.1";
@@ -74,10 +74,6 @@ let
}
// attrs'
);
throwUnsupportaed =
version:
"${version} is no longer supported upstream. You can switch to using a newer version of the nomad package, or revert to older nixpkgs if you cannot upgrade";
in
rec {
# Nomad never updates major go versions within a release series and is unsupported
@@ -88,12 +84,6 @@ rec {
nomad = nomad_1_8;
nomad_1_4 = throwUnsupportaed "nomad_1_4";
nomad_1_5 = throwUnsupportaed "nomad_1_5";
nomad_1_6 = throwUnsupportaed "nomad_1_6";
nomad_1_7 = generic {
buildGoModule = buildGo122Module;
version = "1.7.7";
@@ -90,13 +90,13 @@
"vendorHash": "sha256-V2CublY/9xSosrgxMYwHpnHtTucjiSuyzm+W4AY3pz0="
},
"auth0": {
"hash": "sha256-4ZHTy4mBQ+ZgiUOZQEku8n+AfMmA9azioyAPeWUUae0=",
"hash": "sha256-hfmJWtfHwDKtc9nsKZUbibf6VIQb02a/fXWkhqDgiFQ=",
"homepage": "https://registry.terraform.io/providers/auth0/auth0",
"owner": "auth0",
"repo": "terraform-provider-auth0",
"rev": "v1.10.0",
"rev": "v1.11.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-mvudiybfS6eLemCTXUJSIV4mD+GzR7Ed2H+lfA0de8E="
"vendorHash": "sha256-NynPovzkVRNU0EGxbIcvO4AOxnmG10mWfk8520arU5c="
},
"avi": {
"hash": "sha256-ErZE6MA8Pn8KDDZLX2/yoeqck78vDAcFYdMhYMbcYuI=",
@@ -225,13 +225,13 @@
"vendorHash": "sha256-OqbnkuEy9w6F1DxmlYhRNYhBaYhWV0FtMK4wdwSybh8="
},
"checkly": {
"hash": "sha256-4J7pwtlAa920RXF6ZoSoi03qA15NBzUlXQCZRErI2Co=",
"hash": "sha256-1V6EybAmIWEcd0gMc9vNLJVIZOHHW6AtYNmPshhkqN4=",
"homepage": "https://registry.terraform.io/providers/checkly/checkly",
"owner": "checkly",
"repo": "terraform-provider-checkly",
"rev": "v1.8.2",
"rev": "v1.9.1",
"spdx": null,
"vendorHash": "sha256-DcRe3nBzKn8fC0Q8Dx/p0PXuUccX+4kmOMdZa3HuXNI="
"vendorHash": "sha256-JN+vZQGrpdVExHVMxCiBNavKxbIo1qjBU59AJbphlv4="
},
"ciscoasa": {
"hash": "sha256-xzc44FEy2MPo51Faq/VFwg411JK9e0kQucpt0vdN8yg=",
@@ -444,11 +444,11 @@
"vendorHash": "sha256-xlcOCdgRTQbJCsL39hs3dUVjssGpyNij0ickjSn8EX0="
},
"fastly": {
"hash": "sha256-PtmJISWgOXM2og0LaxLqBq9gB0AVegNaIFGbdckDcKc=",
"hash": "sha256-C5kdhSfOUCinfFd6SwWQwsbnwAhNWBF50fj2fGIohZc=",
"homepage": "https://registry.terraform.io/providers/fastly/fastly",
"owner": "fastly",
"repo": "terraform-provider-fastly",
"rev": "v5.15.0",
"rev": "v5.16.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -543,20 +543,20 @@
"vendorHash": "sha256-s2Ee9wB0smWx4mDPf/mUkCrmWfBrRzYlriWKB/I9Ax8="
},
"gridscale": {
"hash": "sha256-kgpEPbQLqiu8X0lOs6dCUqWpYTDxQX8fMgWoP0wWtBw=",
"hash": "sha256-uI05BO/c00RNr52rbvY7SZwcn64NRfBpR44/xXWmjqw=",
"homepage": "https://registry.terraform.io/providers/gridscale/gridscale",
"owner": "gridscale",
"repo": "terraform-provider-gridscale",
"rev": "v2.0.2",
"rev": "v2.0.3",
"spdx": "MPL-2.0",
"vendorHash": null
},
"harbor": {
"hash": "sha256-NDOFrW7VeunxAJPkcJ4DFrjrt0fL5B5+gT9H19L1Cos=",
"hash": "sha256-FSuJ8upRnDny9Rjf+hS+Kd6e3YcuqYRMfwMwseHNlfo=",
"homepage": "https://registry.terraform.io/providers/goharbor/harbor",
"owner": "goharbor",
"repo": "terraform-provider-harbor",
"rev": "v3.10.17",
"rev": "v3.10.18",
"spdx": "MIT",
"vendorHash": "sha256-YkTXwx3RjIbzJnagfcYgb5IRnF0sHEDBDzdHf+GS8xI="
},
@@ -669,11 +669,11 @@
"vendorHash": "sha256-xr54yCVGOJbj0612wiljUkx1wEOSuXB1qrGbF/vCwN8="
},
"infoblox": {
"hash": "sha256-r++9Fagi5hULK0IDEUjHzYS2cNpyB5gvaUwmoPOnExQ=",
"hash": "sha256-iz/Khne3wggjkZFWZOK9DVZsB8HW6nsNBCfEbsBdhzk=",
"homepage": "https://registry.terraform.io/providers/infobloxopen/infoblox",
"owner": "infobloxopen",
"repo": "terraform-provider-infoblox",
"rev": "v2.8.0",
"rev": "v2.9.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -696,20 +696,20 @@
"vendorHash": "sha256-DnE9tA8VYgtzJWN8j3IOsQs1SiA3NX1mDQzp/Fpqh/U="
},
"kafka-connect": {
"hash": "sha256-3EUTte3txaDRz3jh0h23+Bf1tdLeCvPN9x8mYWY5VjI=",
"hash": "sha256-XMGpK22Ww8swvfrnbClxjErVmkBKX3dxdlkjgNJHlCE=",
"homepage": "https://registry.terraform.io/providers/Mongey/kafka-connect",
"owner": "Mongey",
"repo": "terraform-provider-kafka-connect",
"rev": "v0.4.1",
"rev": "v0.4.3",
"spdx": "MIT",
"vendorHash": "sha256-rGujp6FsQnkznRfjrSSB+4lLC3wAv6yvL/jAoWOiST0="
"vendorHash": "sha256-5cqj1O57snU+NoVqmWc/KIGnowQNMww+rJxYfIPvHWU="
},
"keycloak": {
"hash": "sha256-hdTZ+UEpmv4T8Kxk8cf1QACUKyOoRbD1X3OxwhmrRiI=",
"hash": "sha256-mlPq3sOaGN/fFAxMmK9ahcupwWd/4gYdNTLGRqDjPLc=",
"homepage": "https://registry.terraform.io/providers/keycloak/keycloak",
"owner": "keycloak",
"repo": "terraform-provider-keycloak",
"rev": "v5.0.0",
"rev": "v5.1.1",
"spdx": "Apache-2.0",
"vendorHash": "sha256-51sFU6P4Ynyu9NpQxlbSV7EoB/Lk1da4O0bOuoeMujI="
},
@@ -732,13 +732,13 @@
"vendorHash": "sha256-PfvIzUugDsnMKW7mSM2GyJZpXi3wJsEhYLKzlKq1U6A="
},
"launchdarkly": {
"hash": "sha256-ONASsswVYyugvSpACCmWIcuhnbueW++/s8F7c91PkeQ=",
"hash": "sha256-nneVn/q6p1FbFSZDjL5aEmp1U1xtjGox/mf48e140Qs=",
"homepage": "https://registry.terraform.io/providers/launchdarkly/launchdarkly",
"owner": "launchdarkly",
"repo": "terraform-provider-launchdarkly",
"rev": "v2.21.2",
"rev": "v2.21.5",
"spdx": "MPL-2.0",
"vendorHash": "sha256-v9N7lj7bEgR5HZm1SO0+DSCmQFVnsRvHPMycYMfpYwo="
"vendorHash": "sha256-mdVTcbfJ06o8LTfFMnpmoYSbLVSjZxxhpFFsL54tbUA="
},
"libvirt": {
"hash": "sha256-B99pSnnI+GoMX4uleDqBoAKPe15l/+C5mIUGp6KsE54=",
@@ -750,13 +750,13 @@
"vendorHash": "sha256-Q9LdhokZol1jhSfQVIRvPe1XrE8nVvc22aWHt7wkcHY="
},
"linode": {
"hash": "sha256-qyHRGkhwq9YS/mYLFMXEkEdNtH3yfCrXIP4q/QdOzcY=",
"hash": "sha256-dJkyhLAYwmohDqLwfmp9ScgfXGpix21md6Aqf+mQeFI=",
"homepage": "https://registry.terraform.io/providers/linode/linode",
"owner": "linode",
"repo": "terraform-provider-linode",
"rev": "v2.32.0",
"rev": "v2.33.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-1wwePyqy6ZLc3ZN0M2zZ6sxhVGZl7gWATv1xvcHBqB4="
"vendorHash": "sha256-J2qbC4I8hd99VVyH8tGDBz53MDPNMM1IMA2Gc1oUwvQ="
},
"linuxbox": {
"hash": "sha256-svQRz1/PdVLpHoxOam1sfRTwHqgqs4ohJQs3IPMMAM4=",
@@ -813,20 +813,20 @@
"vendorHash": "sha256-QxbZv6YMa5/I4bTeQBNdmG3EKtLEmstnH7HMiZzFJrI="
},
"migadu": {
"hash": "sha256-ZKlxt/qTccHlNSTwTFKroK/JmKLTcQ8MIeCKx+iRJm0=",
"hash": "sha256-27NVXEPBaSGMP8zbnXG/0KEbvXMybvJq4XmudRbvrjg=",
"homepage": "https://registry.terraform.io/providers/metio/migadu",
"owner": "metio",
"repo": "terraform-provider-migadu",
"rev": "2025.1.16",
"rev": "2025.1.23",
"spdx": "0BSD",
"vendorHash": "sha256-03pGB+biwTfJdGADhBSJn1BNhuowTrO8nwQm2eCCpaI="
"vendorHash": "sha256-6jl3KEJsoyGH7lhMBJpkxkE1ZkkAdF3puSoo39PKR2s="
},
"minio": {
"hash": "sha256-GJU70N/8EocLNxTG/psIsRYVHkg5fALhA9/ewErNML0=",
"hash": "sha256-Y34cCOQqJslDU4LcCou1QxIFfyUP2PRt3ExoCUNl8so=",
"homepage": "https://registry.terraform.io/providers/aminueza/minio",
"owner": "aminueza",
"repo": "terraform-provider-minio",
"rev": "v3.2.2",
"rev": "v3.2.3",
"spdx": "AGPL-3.0",
"vendorHash": "sha256-a9v1nVG3NiuyHwJGhIKKKXFDp4/Cb533EJxrfqK9h/A="
},
@@ -858,13 +858,13 @@
"vendorHash": null
},
"newrelic": {
"hash": "sha256-kyfNlLVzrNMLKGCahpbzeyqvFYPug6RyPPxCnxwP/W4=",
"hash": "sha256-P3T+9Ma5OzNdEXs3EbkyiJBkaEYeBUpIyduQTOt9TXY=",
"homepage": "https://registry.terraform.io/providers/newrelic/newrelic",
"owner": "newrelic",
"repo": "terraform-provider-newrelic",
"rev": "v3.54.0",
"rev": "v3.54.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-hxDLJrv7a8JZ6etYS7u+kiIcudJJeB47PKQTE3NzCvI="
"vendorHash": "sha256-RI0ukPxV+At0dNGPuKc5jkI2k/JL6LnxHH07dl3LMVE="
},
"nomad": {
"hash": "sha256-k61iQ9FQG3nscBp5CE/fFCbHpeLawbUAtGPM+IZtfVc=",
@@ -976,20 +976,20 @@
"vendorHash": null
},
"ovh": {
"hash": "sha256-qF2Wfgse2hcQ6TCbwfk+taUNwEKnNWZh2929VlgCrb4=",
"hash": "sha256-aGg3zvGWBVU8dv852nG1u3gRKD6I9ra77D2foDmjUEE=",
"homepage": "https://registry.terraform.io/providers/ovh/ovh",
"owner": "ovh",
"repo": "terraform-provider-ovh",
"rev": "v1.4.0",
"rev": "v1.5.0",
"spdx": "MPL-2.0",
"vendorHash": null
},
"pagerduty": {
"hash": "sha256-r0F+WSEY7j2AesQ0sDixOe9uKD0hOIdSzDYEhC8yEDA=",
"hash": "sha256-6n+FPTuoK5eoaNxa+E8NAWglMBMH/1eJAu6BmiaKhAs=",
"homepage": "https://registry.terraform.io/providers/PagerDuty/pagerduty",
"owner": "PagerDuty",
"repo": "terraform-provider-pagerduty",
"rev": "v3.19.2",
"rev": "v3.19.4",
"spdx": "MPL-2.0",
"vendorHash": null
},
@@ -1111,11 +1111,11 @@
"vendorHash": null
},
"selectel": {
"hash": "sha256-bXPH/1fEuGehOOSTXsR/yi0BiR8zneIc2KUqOEoG5Qw=",
"hash": "sha256-CVGMFepwfNKlqlAoFY2Uc8w3ZC6RbD9hOhsYnTFNmJM=",
"homepage": "https://registry.terraform.io/providers/selectel/selectel",
"owner": "selectel",
"repo": "terraform-provider-selectel",
"rev": "v6.1.0",
"rev": "v6.1.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-LRs2zI5L5qdWiM8VexQPkP8SjrO/sVEj/MOX+n4NKSc="
},
@@ -1138,13 +1138,13 @@
"vendorHash": "sha256-MIO0VHofPtKPtynbvjvEukMNr5NXHgk7BqwIhbc9+u0="
},
"signalfx": {
"hash": "sha256-C8LyILuqT15NqqzBrj09N+Nx9KMhE/oBPfXtc8gPfns=",
"hash": "sha256-m+dclQs0oGwXci/SDfaNSwuzTCV3hDskyiD0VbTmryQ=",
"homepage": "https://registry.terraform.io/providers/splunk-terraform/signalfx",
"owner": "splunk-terraform",
"repo": "terraform-provider-signalfx",
"rev": "v9.6.1",
"rev": "v9.7.1",
"spdx": "MPL-2.0",
"vendorHash": "sha256-ijq03YXHiSKOgjG9gbyNHPUsYlYHi9nY4pmhMxM5CrI="
"vendorHash": "sha256-Eh/8EDdnxKBbq0E3KXFtO4liJ6ruytfyCyM5DVwk9jo="
},
"skytap": {
"hash": "sha256-JII4czazo6Di2sad1uFHMKDO2gWgZlQE8l/+IRYHQHU=",
@@ -1264,13 +1264,13 @@
"vendorHash": "sha256-iEi3zkr4kIZ1FTAft/Fy//v7xtlX/8uSrnbuxgFTDyA="
},
"temporalcloud": {
"hash": "sha256-nAOHdok/nK33zyEYmyB2nA+y2/mpkigZk4WTyl2F7XA=",
"hash": "sha256-cHhrNEHzOWp1wrbWZkoAjFyyhmHfvFZtM8g/u9RI+F0=",
"homepage": "https://registry.terraform.io/providers/temporalio/temporalcloud",
"owner": "temporalio",
"repo": "terraform-provider-temporalcloud",
"rev": "v0.5.0",
"rev": "v0.6.0",
"spdx": "MPL-2.0",
"vendorHash": "sha256-VMEL2dQ1+kMRWjJP6Obc3N1OytpAkRVW/9596WhwkE4="
"vendorHash": "sha256-Cqo7aq0uBISrnpQPrmJBNACSt2mAt12I4xpf8yDd0AU="
},
"tencentcloud": {
"hash": "sha256-g4UQs7GdU5GFkrC9eeFLMYGLR2Wt2UbSSX5yP1CExT0=",
@@ -9,16 +9,16 @@ let
versions =
if stdenv.hostPlatform.isLinux then
{
stable = "0.0.81";
ptb = "0.0.127";
canary = "0.0.574";
development = "0.0.67";
stable = "0.0.83";
ptb = "0.0.128";
canary = "0.0.581";
development = "0.0.68";
}
else
{
stable = "0.0.333";
stable = "0.0.334";
ptb = "0.0.157";
canary = "0.0.686";
canary = "0.0.692";
development = "0.0.78";
};
version = versions.${branch};
@@ -26,25 +26,25 @@ let
x86_64-linux = {
stable = fetchurl {
url = "https://stable.dl2.discordapp.net/apps/linux/${version}/discord-${version}.tar.gz";
hash = "sha256-V3xaBbCZX1TUaXxLbMOhJ8VFKMZBfCR/w5ajrAvu2kQ=";
hash = "sha256-thBnSYjYa2QEHyxIhEiA73hMs/S8n808oq8IAKtA7VI=";
};
ptb = fetchurl {
url = "https://ptb.dl2.discordapp.net/apps/linux/${version}/discord-ptb-${version}.tar.gz";
hash = "sha256-mgR2MDQ3ZtgBltQPOxT6773aNUx5hH2P6LvFJFEuUts=";
hash = "sha256-ccmlOyzPu6aMqmC2+mRXMQh6OYIFLrlTNwKmBGE61ic=";
};
canary = fetchurl {
url = "https://canary.dl2.discordapp.net/apps/linux/${version}/discord-canary-${version}.tar.gz";
hash = "sha256-pZdHl7U3aNmxe6PtaK7JbQ7XdAPtlTAUuGcBRFkQI3s=";
hash = "sha256-PUTu1eoq8lB+4rX0qACh3M8tOjR83Tgs3vaN5t70Mo8=";
};
development = fetchurl {
url = "https://development.dl2.discordapp.net/apps/linux/${version}/discord-development-${version}.tar.gz";
hash = "sha256-YwOhdNM6l+E/X6JX5ttyJsJmf3Pa+BN7N0mG7923xI4=";
hash = "sha256-Vfsuz7/o2iVssOi4I9MmQc5T8ct8WTaCavvT9/OycPs=";
};
};
x86_64-darwin = {
stable = fetchurl {
url = "https://stable.dl2.discordapp.net/apps/osx/${version}/Discord.dmg";
hash = "sha256-ebPbTIiaZ2hMoJdVCax0hT2bLUFLj5fuIf2e74qLHns=";
hash = "sha256-8zAwOh1waRAQwW/RnjUJsOQJmYcCK5dZ10Ib08F7U08=";
};
ptb = fetchurl {
url = "https://ptb.dl2.discordapp.net/apps/osx/${version}/DiscordPTB.dmg";
@@ -52,7 +52,7 @@ let
};
canary = fetchurl {
url = "https://canary.dl2.discordapp.net/apps/osx/${version}/DiscordCanary.dmg";
hash = "sha256-F3vLcLjNhYRGnOyuNziwtbBNxiUKgw6wZaa1LbVF5PU=";
hash = "sha256-xA9TU6ODC6c8m+dLHxc5ZxD+SmTfXIjXl1wbA5JVay4=";
};
development = fetchurl {
url = "https://development.dl2.discordapp.net/apps/osx/${version}/DiscordDevelopment.dmg";
@@ -24,13 +24,13 @@ let
in
stdenv.mkDerivation rec {
pname = "avogadro2";
version = "1.99.0";
version = "1.100.0";
src = fetchFromGitHub {
owner = "OpenChemistry";
repo = "avogadroapp";
rev = version;
hash = "sha256-m8kX4WzOmPE/BZQRePOoUAdMPdWb6pmcqtPvDdEIIao=";
hash = "sha256-NSozi6oElNTIFTdRW32ZcNm8Ae311xk6kN1wtrEqjaU=";
};
postUnpack = ''
@@ -1,107 +0,0 @@
{
lib,
fetchFromBitbucket,
buildPythonApplication,
pyqt5,
matplotlib,
numpy,
cycler,
python-dateutil,
kiwisolver,
six,
setuptools,
dill,
rtree,
pyopengl,
vispy,
ortools,
svg-path,
simplejson,
shapely,
freetype-py,
fonttools,
rasterio,
lxml,
ezdxf,
qrcode,
reportlab,
svglib,
gdal,
pyserial,
python3,
}:
buildPythonApplication rec {
pname = "flatcam";
version = "unstable-2022-02-02";
src = fetchFromBitbucket {
owner = "jpcgt";
repo = pname;
rev = "ebf5cb9e3094362c4b0774a54cf119559c02211d"; # beta branch as of 2022-02-02
hash = "sha256-QKkBPEM+HVYmSZ83b4JRmOmCMp7C3EUqbJKPqUXMiKE=";
};
format = "other";
dontBuild = true;
propagatedBuildInputs = [
pyqt5
matplotlib
numpy
cycler
python-dateutil
kiwisolver
six
setuptools
dill
rtree
pyopengl
vispy
ortools
svg-path
simplejson
shapely
freetype-py
fonttools
rasterio
lxml
ezdxf
qrcode
reportlab
svglib
gdal
pyserial
];
preInstall = ''
patchShebangs .
sed -i "s|/usr/local/bin|$out/bin|" Makefile
mkdir -p $out/share/{flatcam,applications}
mkdir -p $out/bin
'';
installFlags = [
"USER_ID=0"
"LOCAL_PATH=/build/source/."
"INSTALL_PATH=${placeholder "out"}/share/flatcam"
"APPS_PATH=${placeholder "out"}/share/applications"
];
postInstall = ''
sed -i "s|python3|${
python3.withPackages (_: propagatedBuildInputs)
}/bin/python3|" $out/bin/flatcam-beta
mv $out/bin/flatcam{-beta,}
'';
meta = with lib; {
description = "2-D post processing for PCB fabrication on CNC routers";
homepage = "https://bitbucket.org/jpcgt/flatcam";
license = licenses.mit;
maintainers = with maintainers; [ trepetti ];
};
}
@@ -75,7 +75,7 @@ stdenv.mkDerivation rec {
propagatedBuildInputs = with ocamlPackages; [
camlzip
menhirLib
num
(if lib.versionAtLeast version "1.8.0" then zarith else num)
re
sexplib
];
@@ -1,15 +1,15 @@
{
"version": "17.8.0",
"repo_hash": "0a6a05hip2f505yvfi4v7849cmpb1kzghsf6ivy6lrhc06ksxs19",
"version": "17.8.1",
"repo_hash": "17m0aw8gd58gs1vxzk6pbqnhrhkvc172kn47pj5p6sgq3li3mcgf",
"yarn_hash": "0d1nzgji3y90gcx92pl0bnqlj5h9ra3r7k1z673fvsj6lzppnx8v",
"owner": "gitlab-org",
"repo": "gitlab",
"rev": "v17.8.0-ee",
"rev": "v17.8.1-ee",
"passthru": {
"GITALY_SERVER_VERSION": "17.8.0",
"GITLAB_PAGES_VERSION": "17.8.0",
"GITALY_SERVER_VERSION": "17.8.1",
"GITLAB_PAGES_VERSION": "17.8.1",
"GITLAB_SHELL_VERSION": "14.39.0",
"GITLAB_ELASTICSEARCH_INDEXER_VERSION": "5.4.0",
"GITLAB_WORKHORSE_VERSION": "17.8.0"
"GITLAB_WORKHORSE_VERSION": "17.8.1"
}
}
@@ -5,7 +5,7 @@ in
buildGoModule rec {
pname = "gitlab-workhorse";
version = "17.8.0";
version = "17.8.1";
# nixpkgs-update: no auto update
src = fetchFromGitLab {
+2 -2
View File
@@ -26,13 +26,13 @@
stdenv.mkDerivation rec {
pname = "haruna";
version = "1.3.0";
version = "1.3.2";
src = fetchFromGitLab {
owner = "multimedia";
repo = "haruna";
rev = "v${version}";
hash = "sha256-9KvqZzB9n4x11xhdEkdn0lxv92dbcWWbyL7GjqvfJhA=";
hash = "sha256-B4L3RG1Lq//7TGeZ1ho4LLiHRa9ourm9wL9VWljbXQo=";
domain = "invent.kde.org";
};
@@ -9,5 +9,4 @@ addBinToPath () {
export PATH
}
# shellcheck disable=SC2154
addEnvHooks "$targetOffset" addBinToPath
postHooks+=(addBinToPath)
@@ -11,5 +11,4 @@ writableTmpDirAsHome () {
fi
}
# shellcheck disable=SC2154
addEnvHooks "$targetOffset" writableTmpDirAsHome
postHooks+=(writableTmpDirAsHome)
+26 -20
View File
@@ -1,45 +1,51 @@
{ lib
, stdenv
, darwin
, rustPlatform
, fetchFromGitHub
, pkg-config
, installShellFiles
{
lib,
rustPlatform,
fetchFromGitHub,
pkg-config,
installShellFiles,
versionCheckHook,
nix-update-script,
}:
rustPlatform.buildRustPackage rec {
pname = "aichat";
version = "0.26.0";
version = "0.27.0";
src = fetchFromGitHub {
owner = "sigoden";
repo = "aichat";
rev = "v${version}";
hash = "sha256-Hqrwko/HZTHlKzXuqm835fpygOO9wsQx1XkJddH/EUc=";
tag = "v${version}";
hash = "sha256-rKvnbauJpyZnJuLtGSjJKwe9wy/y/KLPyorH5u9t0H8=";
};
cargoHash = "sha256-4CcwzaPIO+upISizpXHGYfKh9YD4foJAqx7TGgLCHZI=";
useFetchCargoVendor = true;
cargoHash = "sha256-WtEV+JkSaegshF8VB/OfuvnnKX5hDshCC/v5B2McA6M=";
nativeBuildInputs = [
pkg-config
installShellFiles
];
buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
darwin.apple_sdk.frameworks.AppKit
darwin.apple_sdk.frameworks.CoreFoundation
darwin.apple_sdk.frameworks.Security
];
postInstall = ''
installShellCompletion ./scripts/completions/aichat.{bash,fish,zsh}
'';
meta = with lib; {
nativeInstallCheckInputs = [
versionCheckHook
];
versionCheckProgramArg = [ "--version" ];
doInstallCheck = true;
passthru = {
updateScript = nix-update-script { };
};
meta = {
description = "Use GPT-4(V), Gemini, LocalAI, Ollama and other LLMs in the terminal";
homepage = "https://github.com/sigoden/aichat";
license = licenses.mit;
maintainers = with maintainers; [ mwdomino ];
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ mwdomino ];
mainProgram = "aichat";
};
}
+2 -2
View File
@@ -8,11 +8,11 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "aldente";
version = "1.29";
version = "1.30";
src = fetchurl {
url = "https://github.com/davidwernhart/aldente-charge-limiter/releases/download/${finalAttrs.version}/AlDente.dmg";
hash = "sha256-F19DZnjnlZ7ydgNhPNUa7FqPp5/MzDcQRtksIkXgIis=";
hash = "sha256-O3t8Vm1y/OcPzz9MgKA5TcaK43HhPrURvPeWeXvjsjo=";
};
dontBuild = true;
+2 -2
View File
@@ -8,11 +8,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "allure";
version = "2.32.0";
version = "2.32.1";
src = fetchurl {
url = "https://github.com/allure-framework/allure2/releases/download/${finalAttrs.version}/allure-${finalAttrs.version}.tgz";
hash = "sha256-zfqXiz6rnPn1JInqkoTkMdiw0thZvNVqeRwyDoA85lw=";
hash = "sha256-EpTcdF1v6Os7FL/stqRR6OtZoPGuWp8qoC6U7NtBtaY=";
};
dontConfigure = true;
+293 -232
View File
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -16,19 +16,19 @@
rustPlatform.buildRustPackage rec {
pname = "amdgpu_top";
version = "0.10.1";
version = "0.10.2";
src = fetchFromGitHub {
owner = "Umio-Yasuno";
repo = pname;
rev = "v${version}";
hash = "sha256-1OPaQcjrUaYTvMrOPcTemGs8DPn3NuuIbaIObxLiCt0=";
hash = "sha256-sXVUtqPnVYSJ+/RF4/FuXEZOA3DgHMv5Yd8ew/tJJeY=";
};
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"libdrm_amdgpu_sys-0.7.7" = "sha256-gPK3BrW2oTCQDRvHJGY28EFmkKrVexY2bGXG2QwHZL0=";
"libdrm_amdgpu_sys-0.8.3" = "sha256-unjsJqQ6e9Xo522ETTpy6bxXYW/NzNOnVV+w1ord87U=";
};
};
+2 -2
View File
@@ -13,7 +13,7 @@
perl,
cryptopp,
libupnp,
boost, # Not using boost leads to crashes with gtk3
boost186, # Not using boost leads to crashes with gtk3
gettext,
libpng,
pkg-config,
@@ -60,7 +60,7 @@ stdenv.mkDerivation rec {
perl
cryptopp.dev
libupnp
boost
boost186
]
++ lib.optional httpServer libpng
++ lib.optional client libX11;
+3 -3
View File
@@ -5,15 +5,15 @@
}:
let
pname = "ankama-launcher";
version = "3.12.31";
version = "3.12.30";
# The original URL for the launcher is:
# https://launcher.cdn.ankama.com/installers/production/Ankama%20Launcher-Setup-x86_64.AppImage
# As it does not encode the version, we use the wayback machine (web.archive.org) to get a fixed URL.
# To update the client, head to web.archive.org and create a new snapshot of the download page.
src = fetchurl {
url = "https://web.archive.org/web/20250131072647/https://launcher.cdn.ankama.com/installers/production/Ankama%20Launcher-Setup-x86_64.AppImage";
hash = "sha256-ntKuvkY3G00vzWyYnJfz9TifowH2pS9FMeEDDJZMPR8=";
url = "https://web.archive.org/web/20250203095353/https://launcher.cdn.ankama.com/installers/production/Ankama%20Launcher-Setup-x86_64.AppImage";
hash = "sha256-qgWhC/xWUQpIoCNZcRxBPGpbNTFGysIF2N9a1MsxCFk=";
};
appimageContents = appimageTools.extract { inherit pname version src; };
+3 -3
View File
@@ -9,16 +9,16 @@
}:
rustPlatform.buildRustPackage rec {
pname = "argon";
version = "2.0.21";
version = "2.0.22";
src = fetchFromGitHub {
owner = "argon-rbx";
repo = "argon";
tag = version;
hash = "sha256-msKrPLB+38PU7LEw92xEqFy6JxwMjttBaobIOhU7eWw=";
hash = "sha256-Nno6uZIlD4tA3opzhzO4ylPPGq3RDDrhAIQnt/rTXdA=";
};
cargoHash = "sha256-yXhEgZYtYhrSpwPbL+yi9gaLVVV8sBlF8m3ADUC4kLk=";
cargoHash = "sha256-BUE2T2AKC4lOAViTXZP2RbzdCt9CLMSRvXXcI1rwRFU=";
nativeBuildInputs = [ pkg-config ];
+4 -28
View File
@@ -3,7 +3,6 @@
lib,
fetchurl,
fetchFromGitHub,
fetchpatch,
fixDarwinDylibNames,
autoconf,
aws-sdk-cpp,
@@ -57,11 +56,6 @@
enableGcs ? !stdenv.hostPlatform.isDarwin,
}:
assert lib.asserts.assertMsg (
(enableS3 && stdenv.hostPlatform.isDarwin)
-> (lib.versionOlder boost.version "1.69" || lib.versionAtLeast boost.version "1.70")
) "S3 on Darwin requires Boost != 1.69";
let
arrow-testing = fetchFromGitHub {
name = "arrow-testing";
@@ -75,11 +69,11 @@ let
name = "parquet-testing";
owner = "apache";
repo = "parquet-testing";
rev = "a7f1d288e693dbb08e3199851c4eb2140ff8dff2";
hash = "sha256-zLWJOWcW7OYL32OwBm9VFtHbmG+ibhteRfHlKr9G3CQ=";
rev = "c7cf1374cf284c0c73024cd1437becea75558bf8";
hash = "sha256-DThjyZ34LajHwXZy1IhYKUGUG/ejQ9WvBNuI8eUKmSs=";
};
version = "18.1.0";
version = "19.0.0";
in
stdenv.mkDerivation (finalAttrs: {
pname = "arrow-cpp";
@@ -89,29 +83,11 @@ stdenv.mkDerivation (finalAttrs: {
owner = "apache";
repo = "arrow";
rev = "apache-arrow-${version}";
hash = "sha256-Jo3be5bVuDaDcSbW3pS8y9Wc2sz1W2tS6QTwf0XpODA";
hash = "sha256-rjU/D362QfmejzjIsYaEwTMcLADbNf/pQohb323ifZI=";
};
sourceRoot = "${finalAttrs.src.name}/cpp";
patches = [
# fixes build with libcxx-19 (llvm-19) remove on update
(fetchpatch {
name = "libcxx-19-fixes.patch";
url = "https://github.com/apache/arrow/commit/29e8ea011045ba4318a552567a26b2bb0a7d3f05.patch";
relative = "cpp";
includes = [ "src/arrow/buffer_test.cc" ];
hash = "sha256-ZHkznOilypi1J22d56PhLlw/hbz8RqwsOGDMqI1NsMs=";
})
# https://github.com/apache/arrow/pull/45057 remove on update
(fetchpatch {
name = "boost-187.patch";
url = "https://github.com/apache/arrow/commit/5ec8b64668896ff06a86b6a41e700145324e1e34.patch";
relative = "cpp";
hash = "sha256-GkB7u4YnnaCApOMQPYFJuLdY7R2LtLzKccMEpKCO9ic=";
})
];
# versions are all taken from
# https://github.com/apache/arrow/blob/apache-arrow-${version}/cpp/thirdparty/versions.txt
+2 -2
View File
@@ -13,13 +13,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "astroterm";
version = "1.0.4";
version = "1.0.6";
src = fetchFromGitHub {
owner = "da-luce";
repo = "astroterm";
tag = "v${finalAttrs.version}";
hash = "sha256-CYKW/RAQ3a5238cojbpGfTenMQApfaZOHnQMrZ6LWzA=";
hash = "sha256-BjqurPp0WI/wI5n2TibnyOqZ3NjRcLYB2MxqqNvTQtw=";
};
bsc5File = fetchurl {
+3 -3
View File
@@ -13,13 +13,13 @@
}:
rustPlatform.buildRustPackage {
pname = "attic";
version = "0-unstable-2024-11-10";
version = "0-unstable-2025-02-02";
src = fetchFromGitHub {
owner = "zhaofengli";
repo = "attic";
rev = "47752427561f1c34debb16728a210d378f0ece36";
hash = "sha256-6KMC/NH/VWP5Eb+hA56hz0urel3jP6Y6cF2PX6xaTkk=";
rev = "ff8a897d1f4408ebbf4d45fa9049c06b3e1e3f4e";
hash = "sha256-hPYEJ4juK3ph7kbjbvv7PlU1D9pAkkhl+pwx8fZY53U=";
};
nativeBuildInputs = [
+2 -1
View File
@@ -2,6 +2,7 @@
lib,
python3Packages,
fetchFromGitHub,
addBinToPathHook,
installShellFiles,
nix-update-script,
}:
@@ -24,6 +25,7 @@ python3Packages.buildPythonApplication rec {
setuptools
]
++ [
addBinToPathHook
installShellFiles
];
@@ -46,7 +48,6 @@ python3Packages.buildPythonApplication rec {
];
postInstall = ''
export PATH=$out/bin:$PATH
installShellCompletion --cmd audible \
--bash <(source utils/code_completion/audible-complete-bash.sh) \
--fish <(source utils/code_completion/audible-complete-zsh-fish.sh) \
+5 -5
View File
@@ -1,9 +1,9 @@
{
"owner": "advplyr",
"repo": "audiobookshelf",
"rev": "66b90e0841f2b08a4a401fad202605c8fbaf3c48",
"hash": "sha256-SAce3URkZxPa5URyaO7G9xty4JCG0/tJym5fXLnwv74=",
"version": "2.18.1",
"depsHash": "sha256-1d3V8MzIaJdYpY5BdoAX96HTGfjBBNz/JLkG7jl0TRY=",
"clientDepsHash": "sha256-hClfu993JpHWOqPMgmKdMIneAFDYAi6pCPlf8GmXzow="
"rev": "82ab95ab028711626b01838a2c562c796b36c2b0",
"hash": "sha256-qxYch3NLxB072eKafkeZwEE1WqEmAc+kEMxR1fQxtCI=",
"version": "2.19.0",
"depsHash": "sha256-ha1ar06WCyUb1DvX5fswMKcebBzc7o+px1/l7TTrkmI=",
"clientDepsHash": "sha256-OdlnH7PAlhFSaHXEry3XY5xkTdqEk+Us8ugGHkXRDds="
}
@@ -126,9 +126,9 @@
storage-preview = mkAzExtension rec {
pname = "storage-preview";
version = "1.0.0b2";
version = "1.0.0b5";
url = "https://azcliprod.blob.core.windows.net/cli-extensions/storage_preview-${version}-py2.py3-none-any.whl";
hash = "sha256-Lej6QhYikoowi7cASMP99AQAutOzSv1gHQs6/Ni4J2Q=";
hash = "sha256-gs4uQrnpXm03iPyP+i5DnFWvQ43+ZHN4wSZiNRVZU7g=";
description = "Provides a preview for upcoming storage features";
propagatedBuildInputs = with python3Packages; [ azure-core ];
meta.maintainers = with lib.maintainers; [ katexochen ];
+1 -1
View File
@@ -112,7 +112,7 @@ stdenv.mkDerivation (finalAttrs: {
description = "Portable version of NetBSD 'make'";
license = lib.licenses.bsd3;
mainProgram = "bmake";
maintainers = with lib.maintainers; [ thoughtpolice AndersonTorres ];
maintainers = with lib.maintainers; [ thoughtpolice ];
platforms = lib.platforms.unix;
# requires strip
badPlatforms = [ lib.systems.inspect.platformPatterns.isStatic ];
+3 -3
View File
@@ -10,14 +10,14 @@
rustPlatform.buildRustPackage rec {
pname = "cargo-show-asm";
version = "0.2.46";
version = "0.2.47";
src = fetchCrate {
inherit pname version;
hash = "sha256-MiODtrEE/arK5SiSs/YuFWBkSQkSUrPqUZcjFd+HNbg=";
hash = "sha256-ZXqcBAB6gxtukQ51JPVl7qUM7eAhiBgmeZZD2pF5q2g=";
};
cargoHash = "sha256-VUqANn4ykAYB4+7h3lHY2UvqduHJPd3P29wsxLpPXFg=";
cargoHash = "sha256-Gd9Zdeww5iBh6N49jBlDVYZFYqhmMlKkuadw83fSYcY=";
nativeBuildInputs = [
installShellFiles
+3 -3
View File
@@ -9,16 +9,16 @@
rustPlatform.buildRustPackage rec {
pname = "cedar";
version = "4.3.0";
version = "4.3.1";
src = fetchFromGitHub {
owner = "cedar-policy";
repo = "cedar";
tag = "v${version}";
hash = "sha256-E3x+FfjLNUpfu00D+UALc73STodNW2Kvfo/4x6hORiY=";
hash = "sha256-1EJvLQDQQTiNwPe0Ynt6VI3RD/3jGbt/0H7pzGcl1wA=";
};
cargoHash = "sha256-z40HtNSkNpMquhwE+B1AhmtY6j8OKcFRIm09neLGUWg=";
cargoHash = "sha256-y8sjFpDa16nmYboLB/x1+i/Z4rd4MUhPOx0pBGkd3z0=";
passthru = {
tests.version = testers.testVersion { package = cedar; };
+2 -2
View File
@@ -7,13 +7,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "cgreen";
version = "1.6.3";
version = "1.6.4";
src = fetchFromGitHub {
owner = "cgreen-devs";
repo = "cgreen";
rev = finalAttrs.version;
sha256 = "sha256-qcOj+NlgbHCYuNsM6ngNI2fNhkCwLL6mIVkNSv9hRE8=";
sha256 = "sha256-W4MdB3acZcxavjRupJa4eXAv9g4QgYXFAQWOLoHrQZ8=";
};
postPatch = ''
+2 -2
View File
@@ -9,13 +9,13 @@
buildGoModule rec {
pname = "cilium-cli";
version = "0.16.23";
version = "0.16.24";
src = fetchFromGitHub {
owner = "cilium";
repo = "cilium-cli";
tag = "v${version}";
hash = "sha256-8GD3VjYInPaxOFoPeJGWIDfOIUQ7+g3GgfVq/IS18Bw=";
hash = "sha256-sUPyMAyLrQn4lLtoE9aVtOYvpjOg3I/QXD+x4Rs/2/s=";
};
nativeBuildInputs = [ installShellFiles ];
+3 -12
View File
@@ -2,7 +2,6 @@
lib,
stdenv,
fetchFromGitHub,
fetchpatch,
rustPlatform,
pkg-config,
dtc,
@@ -11,25 +10,17 @@
rustPlatform.buildRustPackage rec {
pname = "cloud-hypervisor";
version = "43.0";
version = "44.0";
src = fetchFromGitHub {
owner = "cloud-hypervisor";
repo = pname;
rev = "v${version}";
hash = "sha256-drxJtlvBpkK3I7Ob3+pH4KLUq53GWXe1pmv7CI3bbP4=";
hash = "sha256-2nA8bhezmGa6Gu420nxDrgW0SonTQv1WoGYmBwm7/bI=";
};
cargoPatches = [
(fetchpatch {
name = "kvm-ioctls-0.19.1.patch";
url = "https://github.com/cloud-hypervisor/cloud-hypervisor/commit/eaa21946993276434403d41419a34e564935c8e9.patch";
hash = "sha256-G7B0uGl/RAkwub8x1jNNgBrC0dwq/Gv46XpbtTZWD5M=";
})
];
useFetchCargoVendor = true;
cargoHash = "sha256-F6ukvSwMHRHXoZKgXEFnTAN1B80GsQDW8iqZAvsREr4=";
cargoHash = "sha256-e2VbzBPfoy5+YrqZ5mkbxMLpQIOG0x5tIhNG6Tv+u0M=";
separateDebugInfo = true;
+107 -54
View File
@@ -5,93 +5,143 @@
appimageTools,
makeWrapper,
writeScript,
undmg,
}:
let
pname = "cursor";
version = "0.44.11";
version = "0.45.8";
inherit (stdenvNoCC) hostPlatform;
sources = {
x86_64-linux = fetchurl {
url = "https://download.todesktop.com/230313mzl4w4u92/cursor-0.44.11-build-250103fqxdt5u9z-x86_64.AppImage";
hash = "sha256-eOZuofnpED9F6wic0S9m933Tb7Gq7cb/v0kRDltvFVg=";
url = "https://download.todesktop.com/230313mzl4w4u92/cursor-0.45.8-build-250201b44xw1x2k-x86_64.AppImage";
hash = "sha256-H+9cisa1LWJleqzwaB0WIzJpioYZyfLghelcZthCOvg=";
};
aarch64-linux = fetchurl {
url = "https://download.todesktop.com/230313mzl4w4u92/cursor-0.44.11-build-250103fqxdt5u9z-arm64.AppImage";
hash = "sha256-mxq7tQJfDccE0QsZDZbaFUKO0Xc141N00ntX3oEYRcc=";
url = "https://download.todesktop.com/230313mzl4w4u92/cursor-0.45.8-build-250201b44xw1x2k-arm64.AppImage";
hash = "sha256-GgPt9SvuCA9Hxm7nxm7mz0AvPKaLWCkYXO225taXnLA=";
};
x86_64-darwin = fetchurl {
url = "https://download.todesktop.com/230313mzl4w4u92/Cursor%200.45.8%20-%20Build%20250201b44xw1x2k-x64.dmg";
hash = "sha256-UqwzgxBSZR0itCknKzBClEX3w9aFKFhGIiVUQNYDVEM=";
};
aarch64-darwin = fetchurl {
url = "https://download.todesktop.com/230313mzl4w4u92/Cursor%200.45.8%20-%20Build%20250201b44xw1x2k-arm64.dmg";
hash = "sha256-AUW19xJFsrDGSUNE/bwkC2aN2QyaS+JKCjuxx//kbiI=";
};
};
supportedPlatforms = [
"x86_64-linux"
"aarch64-linux"
];
src = sources.${stdenvNoCC.hostPlatform.system};
source = sources.${hostPlatform.system};
# Linux -- build from AppImage
appimageContents = appimageTools.extractType2 {
inherit version pname src;
inherit version pname;
src = source;
};
wrappedAppImage = appimageTools.wrapType2 { inherit version pname src; };
appimageInstall = ''
runHook preInstall
mkdir -p $out/
cp -r bin $out/bin
mkdir -p $out/share/cursor
cp -a ${appimageContents}/locales $out/share/cursor
cp -a ${appimageContents}/resources $out/share/cursor
cp -a ${appimageContents}/usr/share/icons $out/share/
install -Dm 644 ${appimageContents}/cursor.desktop -t $out/share/applications/
substituteInPlace $out/share/applications/cursor.desktop --replace-fail "AppRun" "cursor"
wrapProgram $out/bin/cursor \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}} --no-update"
runHook postInstall
'';
wrappedAppimage = appimageTools.wrapType2 {
inherit version pname;
src = source;
};
in
stdenvNoCC.mkDerivation {
inherit pname version;
src = wrappedAppImage;
src = if hostPlatform.isLinux then wrappedAppimage else source;
nativeBuildInputs = [ makeWrapper ];
nativeBuildInputs =
lib.optionals hostPlatform.isLinux [ makeWrapper ]
++ lib.optionals hostPlatform.isDarwin [ undmg ];
installPhase = appimageInstall;
sourceRoot = lib.optionalString hostPlatform.isDarwin ".";
# Don't break code signing
dontUpdateAutotoolsGnuConfigScripts = hostPlatform.isDarwin;
dontConfigure = hostPlatform.isDarwin;
dontFixup = hostPlatform.isDarwin;
installPhase = ''
runHook preInstall
mkdir -p $out/
${lib.optionalString hostPlatform.isLinux ''
cp -r bin $out/bin
mkdir -p $out/share/cursor
cp -a ${appimageContents}/locales $out/share/cursor
cp -a ${appimageContents}/resources $out/share/cursor
cp -a ${appimageContents}/usr/share/icons $out/share/
install -Dm 644 ${appimageContents}/cursor.desktop -t $out/share/applications/
substituteInPlace $out/share/applications/cursor.desktop --replace-fail "AppRun" "cursor"
wrapProgram $out/bin/cursor \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}} --no-update"
''}
${lib.optionalString hostPlatform.isDarwin ''
APP_DIR="$out/Applications"
CURSOR_APP="$APP_DIR/Cursor.app"
mkdir -p "$APP_DIR"
cp -Rp Cursor.app "$APP_DIR"
mkdir -p "$out/bin"
cat << EOF > "$out/bin/cursor"
#!${stdenvNoCC.shell}
open -na "$CURSOR_APP" --args "\$@"
EOF
chmod +x "$out/bin/cursor"
''}
runHook postInstall
'';
passthru = {
inherit sources;
updateScript = writeScript "update.sh" ''
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl yq coreutils gnused common-updater-scripts
#!nix-shell -i bash -p curl yq coreutils gnused trurl common-updater-scripts
set -eu -o pipefail
baseUrl="https://download.todesktop.com/230313mzl4w4u92"
latestLinux="$(curl -s $baseUrl/latest-linux.yml)"
version="$(echo "$latestLinux" | yq -r .version)"
filename="$(echo "$latestLinux" | yq -r '.files[] | .url | select(. | endswith(".AppImage"))')"
linuxStem="$(echo "$filename" | sed -E s/^\(cursor-.+-build-.*\)-.+$/\\1/)"
latestDarwin="$(curl -s $baseUrl/latest-mac.yml)"
linuxVersion="$(echo "$latestLinux" | yq -r .version)"
currentVersion=$(nix-instantiate --eval -E "with import ./. {}; code-cursor.version or (lib.getVersion code-cursor)" | tr -d '"')
if [[ "$version" != "$currentVersion" ]]; then
for platform in ${lib.escapeShellArgs supportedPlatforms}; do
if [ $platform = "x86_64-linux" ]; then
url="$baseUrl/$linuxStem-x86_64.AppImage"
elif [ $platform = "aarch64-linux" ]; then
url="$baseUrl/$linuxStem-arm64.AppImage"
else
echo "Unsupported platform: $platform"
exit 1
if [[ "$linuxVersion" != "$currentVersion" ]]; then
darwinVersion="$(echo "$latestDarwin" | yq -r .version)"
if [ "$linuxVersion" != "$darwinVersion" ]; then
echo "Linux version ($linuxVersion) and Darwin version ($darwinVersion) do not match"
exit 1
fi
version="$linuxVersion"
hash=$(nix-hash --to-sri --type sha256 "$(nix-prefetch-url "$url")")
update-source-version code-cursor $version $hash $url --system=$platform --ignore-same-version --source-key="sources.$platform"
done
linuxFilename="$(echo "$latestLinux" | yq -r '.files[] | .url | select(. | endswith(".AppImage"))' | head -n 1)"
linuxStem="$(echo "$linuxFilename" | sed -E s/^\(.+build.+\)-[^-]+AppImage$/\\1/)"
darwinFilename="$(echo "$latestDarwin" | yq -r '.files[] | .url | select(. | endswith(".dmg"))' | head -n 1)"
darwinStem="$(echo "$darwinFilename" | sed -E s/^\(.+Build[^-]+\)-.+dmg$/\\1/)"
for platform in "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin"; do
if [ $platform = "x86_64-linux" ]; then
url="$baseUrl/$linuxStem-x86_64.AppImage"
elif [ $platform = "aarch64-linux" ]; then
url="$baseUrl/$linuxStem-arm64.AppImage"
elif [ $platform = "x86_64-darwin" ]; then
url="$baseUrl/$darwinStem-x64.dmg"
elif [ $platform = "aarch64-darwin" ]; then
url="$baseUrl/$darwinStem-arm64.dmg"
else
echo "Unsupported platform: $platform"
exit 1
fi
url=$(trurl --accept-space "$url")
hash=$(nix-hash --to-sri --type sha256 "$(nix-prefetch-url "$url" --name "cursor-$version")")
update-source-version code-cursor $version $hash $url --system=$platform --ignore-same-version --source-key="sources.$platform"
done
fi
'';
};
@@ -102,8 +152,11 @@ stdenvNoCC.mkDerivation {
changelog = "https://cursor.com/changelog";
license = lib.licenses.unfree;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
maintainers = with lib.maintainers; [ sarahec ];
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [
sarahec
aspauldingcode
];
platforms = lib.platforms.linux ++ lib.platforms.darwin;
mainProgram = "cursor";
};
}
@@ -0,0 +1,109 @@
{
pkgsi686Linux,
lib,
stdenv,
fetchurl,
dpkg,
makeWrapper,
ghostscript,
file,
gnused,
gnugrep,
coreutils,
which,
perl,
}:
let
version = "1.0.2-0";
model = "dcpl3550cdw";
interpreter = "${pkgsi686Linux.stdenv.cc.libc}/lib/ld-linux.so.2";
in
stdenv.mkDerivation {
pname = "cups-brother-${model}";
inherit version;
src = fetchurl {
url = "https://download.brother.com/welcome/dlf103919/dcpl3550cdwpdrv-${version}.i386.deb";
hash = "sha256-FbtqISK3f1q1+JXJ+RP5O/8G0ZW9gcCS7OI0YRljwyY=";
};
nativeBuildInputs = [
dpkg
makeWrapper
];
unpackPhase = ''
runHook preUnpack
dpkg-deb -x $src $out
runHook postUnpack
'';
installPhase = ''
runHook preInstall
substituteInPlace $out/opt/brother/Printers/${model}/lpd/filter_${model} \
--replace-fail /usr/bin/perl ${lib.getExe perl} \
--replace-fail "PRINTER =~" "PRINTER = \"${model}\"; #" \
--replace-fail "BR_PRT_PATH =~" "BR_PRT_PATH = \"$out/opt/brother/Printers/${model}/\"; #"
substituteInPlace $out/opt/brother/Printers/${model}/cupswrapper/brother_lpdwrapper_${model} \
--replace-fail /usr/bin/perl ${lib.getExe perl} \
--replace-fail "basedir =~ " "basedir = \"$out/opt/brother/Printers/${model}/\"; #" \
--replace-fail "PRINTER =~ " "PRINTER = \"${model}\"; #" \
--replace-fail "LPDCONFIGEXE=" "LPDCONFIGEXE=\"$out/usr/bin/brprintconf_\"; #"
patchelf --set-interpreter ${interpreter} $out/opt/brother/Printers/${model}/lpd/br${model}filter
patchelf --set-interpreter ${interpreter} $out/usr/bin/brprintconf_${model}
mkdir -p $out/lib/cups/filter $out/share/cups/model
ln -s $out/opt/brother/Printers/${model}/lpd/filter_${model} $out/lib/cups/filter/brlpdwrapper${model}
ln -s $out/opt/brother/Printers/${model}/cupswrapper/brother_lpdwrapper_${model} $out/lib/cups/filter/brother_lpdwrapper_${model}
ln -s $out/opt/brother/Printers/${model}/cupswrapper/brother_${model}_printer_en.ppd $out/share/cups/model/brother_${model}_printer_en.ppd
runHook postInstall
'';
postFixup = ''
wrapProgram $out/opt/brother/Printers/${model}/lpd/filter_${model} \
--prefix PATH ":" ${
lib.makeBinPath [
ghostscript
file
gnused
gnugrep
coreutils
which
]
}
wrapProgram $out/opt/brother/Printers/${model}/cupswrapper/brother_lpdwrapper_${model} \
--prefix PATH ":" ${
lib.makeBinPath [
gnugrep
coreutils
]
}
wrapProgram $out/usr/bin/brprintconf_${model} \
--set LD_PRELOAD "${pkgsi686Linux.libredirect}/lib/libredirect.so" \
--set NIX_REDIRECTS /opt=$out/opt
wrapProgram $out/opt/brother/Printers/${model}/lpd/br${model}filter \
--set LD_PRELOAD "${pkgsi686Linux.libredirect}/lib/libredirect.so" \
--set NIX_REDIRECTS /opt=$out/opt
'';
meta = {
homepage = "https://www.brother.com/";
downloadPage = "https://support.brother.com/g/b/downloadlist.aspx?c=eu_ot&lang=en&prod=${model}_eu&os=128";
description = "Brother DCP-L3550CDW printer driver";
license = with lib.licenses; [
unfreeRedistributable
gpl2Only
];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
platforms = [
"x86_64-linux"
"i686-linux"
];
maintainers = with lib.maintainers; [ Tert0 ];
};
}
+31 -7
View File
@@ -3,34 +3,58 @@
stdenvNoCC,
fetchurl,
unzip,
makeBinaryWrapper,
versionCheckHook,
writeShellScript,
coreutils,
xcbuild,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "cyberduck";
version = "9.0.0.41777";
version = "9.1.2.42722";
src = fetchurl {
url = "https://update.cyberduck.io/Cyberduck-${finalAttrs.version}.zip";
hash = "sha256-oDTFkoX4uu+X5vLDHn+tGoNB/Pd9ncdFE8dGS6PT5wg=";
hash = "sha256-oGerVv6CteMl+MJ9AfGYmo6Iv6i7BFUCF+E3My6UH6I=";
};
sourceRoot = ".";
nativeBuildInputs = [ unzip ];
nativeBuildInputs = [
unzip
makeBinaryWrapper
];
installPhase = ''
runHook preInstall
mkdir -p $out/Applications
cp -r Cyberduck.app $out/Applications
makeWrapper $out/Applications/Cyberduck.app/Contents/MacOS/Cyberduck $out/bin/cyberduck
runHook postInstall
'';
meta = with lib; {
nativeInstallCheckInputs = [ versionCheckHook ];
versionCheckProgram = writeShellScript "version-check" ''
marketing_version=$(${xcbuild}/bin/PlistBuddy -c "Print :CFBundleShortVersionString" "$1" | ${coreutils}/bin/tr -d '"')
build_version=$(${xcbuild}/bin/PlistBuddy -c "Print :CFBundleVersion" "$1")
echo $marketing_version.$build_version
'';
versionCheckProgramArg = [ "${placeholder "out"}/Applications/Cyberduck.app/Contents/Info.plist" ];
doInstallCheck = true;
meta = {
description = "Libre file transfer client for Mac and Windows";
homepage = "https://cyberduck.io";
license = licenses.gpl3Plus;
changelog = "https://cyberduck.io/changelog/";
license = lib.licenses.gpl3Plus;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
maintainers = with maintainers; [ emilytrau ];
platforms = platforms.darwin;
maintainers = with lib.maintainers; [
emilytrau
DimitarNestorov
];
platforms = lib.platforms.darwin;
mainProgram = "cyberduck";
};
})
+2
View File
@@ -35,6 +35,8 @@ stdenv.mkDerivation rec {
"--with-dnet-libraries=${libdnet}/lib"
];
NIX_CFLAGS_COMPILE = "-Wno-incompatible-pointer-types";
meta = {
description = "Data AcQuisition library (DAQ), for packet I/O";
mainProgram = "daq-modules-config";
-39
View File
@@ -1,39 +0,0 @@
{
lib,
buildGoModule,
fetchFromGitHub,
}:
buildGoModule rec {
pname = "dave";
version = "0.5.0";
src = fetchFromGitHub {
owner = "micromata";
repo = "dave";
rev = "v${version}";
hash = "sha256-JgRclcSrdgTXBuU8attSbDhRj4WUGXSpKTrUZ8mP5ns=";
};
vendorHash = "sha256-yo6DEvKnCQak+MrpIIDU4DkRhRP+HeJXLV87NRf6g/c=";
subPackages = [
"cmd/dave"
"cmd/davecli"
];
ldflags = [
"-s"
"-w"
"-X main.version=${version}"
"-X main.builtBy=nixpkgs"
];
meta = {
homepage = "https://github.com/micromata/dave";
description = "Totally simple and very easy to configure stand alone webdav server";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ lunik1 ];
mainProgram = "dave";
};
}
+2 -2
View File
@@ -5,11 +5,11 @@
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "dbip-asn-lite";
version = "2025-01";
version = "2025-02";
src = fetchurl {
url = "https://download.db-ip.com/free/dbip-asn-lite-${finalAttrs.version}.mmdb.gz";
hash = "sha256-cRlhlP5ml+swBZGiLpVH5s7nvPiHUi7qxM2GajoeK+Y=";
hash = "sha256-lQmBPlaUib2NDLNmrB7x2HiSRXcIi3uC8wxEEBtbecI=";
};
dontUnpack = true;
+2 -2
View File
@@ -5,11 +5,11 @@
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "dbip-city-lite";
version = "2025-01";
version = "2025-02";
src = fetchurl {
url = "https://download.db-ip.com/free/dbip-city-lite-${finalAttrs.version}.mmdb.gz";
hash = "sha256-fBS2JASkZaLNCjNAadNkrctixTkDvpkTUYP0yUHBXnw=";
hash = "sha256-p0cLbcLeoqemY4zhK7tNP//9H27BV6YOLBTgDqdcI7Q=";
};
dontUnpack = true;
@@ -5,11 +5,11 @@
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "dbip-country-lite";
version = "2025-01";
version = "2025-02";
src = fetchurl {
url = "https://download.db-ip.com/free/dbip-country-lite-${finalAttrs.version}.mmdb.gz";
hash = "sha256-PVpqo1t6V0kdVqA1aEgU0UqwhzmLLMHYB6gyoMusVv8=";
hash = "sha256-/VsGdiiDkY13fyfLoa3N1nVJEVUrqRPNFg3Bs6MVkLY=";
};
dontUnpack = true;
+3 -3
View File
@@ -8,16 +8,16 @@
buildNpmPackage rec {
pname = "dotenvx";
version = "1.33.0";
version = "1.34.0";
src = fetchFromGitHub {
owner = "dotenvx";
repo = "dotenvx";
tag = "v${version}";
hash = "sha256-/0bxY4D3jq6shXEHf13CkGdEGRS8cVQOSaLiIaehq5g=";
hash = "sha256-zRdE79UzbiyFKCu+5yAI+JHlt+sxF0C0XaaZRNqciCM=";
};
npmDepsHash = "sha256-JtoOXDS44fG4ctzN1ZSi+WOXye2p5mjKczSXbvGPIEw=";
npmDepsHash = "sha256-Rtb9/hwUVQAmDleSg7iIEgVznREqx5VNqufSxiWa1Zw=";
dontNpmBuild = true;
@@ -9,13 +9,13 @@
buildGoModule rec {
pname = "editorconfig-checker";
version = "3.1.2";
version = "3.2.0";
src = fetchFromGitHub {
owner = "editorconfig-checker";
repo = "editorconfig-checker";
rev = "v${version}";
hash = "sha256-EWLk4VHeA32VErULJwPHKLRMb5qaET7fnpBxLx5f7YE=";
hash = "sha256-JEpmCpFLj7LO/Vojw7MoAu8E5bZKT1cU4Zk4Nw6IEmM=";
};
vendorHash = "sha256-GNUkU/cmu8j6naFAHIEZ56opJnj8p2Sb8M7TduTbJcU=";
+3 -3
View File
@@ -7,16 +7,16 @@
buildGoModule rec {
pname = "eksctl";
version = "0.201.0";
version = "0.203.0";
src = fetchFromGitHub {
owner = "weaveworks";
repo = pname;
rev = version;
hash = "sha256-mvIidkr3fUs8TbD8voqE8NAA14XPPuXC9u/2pc2ShK4=";
hash = "sha256-hBHWj1Brn4qbtOLZjxlr6tBuipItCFwbL9bm2wlfL80=";
};
vendorHash = "sha256-qOV6mAKwLrF5+/q/PS2qVJcQx84CjNinv/e8KG+lxfI=";
vendorHash = "sha256-IFi9FhsiWWg9joPAGnEnZfq4PzBjR6bJ5MWvFIPyfJo=";
doCheck = false;
+2 -5
View File
@@ -2,6 +2,7 @@
lib,
python3Packages,
fetchPypi,
addBinToPathHook,
}:
python3Packages.buildPythonApplication rec {
@@ -32,15 +33,11 @@ python3Packages.buildPythonApplication rec {
];
nativeCheckInputs = with python3Packages; [
addBinToPathHook
pytestCheckHook
testtools
];
# Tests run eliot-tree in out/bin.
preCheck = ''
export PATH=$out/bin:$PATH
'';
pythonImportsCheck = [ "eliottree" ];
meta = {
+46
View File
@@ -0,0 +1,46 @@
#!/usr/bin/env nix-shell
#!nix-shell -i python3 -p nix-prefetch-git
from dataclasses import dataclass
import json
import subprocess
@dataclass
class GitDependency:
name: str
url: str
revision: str
def get_git_deps(lock_data):
for name, data in lock_data["packages"].items():
if data["source"] == "git":
desc = data["description"]
yield GitDependency(
name=name,
url=desc["url"],
revision=desc["resolved-ref"],
)
def nix_prefetch_git(url: str, rev: str):
result = subprocess.run(
["nix-prefetch-git", url, rev],
check=True,
text=True,
stdout=subprocess.PIPE,
)
return json.loads(result.stdout)
if __name__ == "__main__":
with open("pubspec.lock.json") as lock_file:
lock_data = json.load(lock_file)
git_hashes = {}
for dep in get_git_deps(lock_data):
data = nix_prefetch_git(dep.url, dep.revision)
git_hashes[dep.name] = data["hash"]
with open("git-hashes.json", "w") as output_file:
json.dump(git_hashes, output_file, indent=2)
output_file.write("\n")
@@ -0,0 +1,6 @@
{
"ente_crypto_dart": "sha256-xBBK9BdXh4+OTj+Jkf3zh5sMZjXtvhyuE1R5LFE8iTY=",
"flutter_local_authentication": "sha256-r50jr+81ho+7q2PWHLf4VnvNJmhiARZ3s4HUpThCgc0=",
"flutter_secure_storage_linux": "sha256-Rp+b6ZRH7F5AnM5UvYzfVjprXkpeeA7V6Ep/oYqDeiM=",
"sqflite": "sha256-+XTVtkFJ94VifwnutvUuAqqiyWwrcEiZ3Uz0H4D9zWA="
}
+3 -10
View File
@@ -17,19 +17,20 @@ let
in
flutter324.buildFlutterApplication rec {
pname = "ente-auth";
version = "4.2.8";
version = "4.3.2";
src = fetchFromGitHub {
owner = "ente-io";
repo = "ente";
sparseCheckout = [ "auth" ];
tag = "auth-v${version}";
hash = "sha256-1vIM2MrQF0DO+5SEzIAUeZxOks6PKs3kkTdc09aCk2A=";
hash = "sha256-/WWodQcMibwXVexI+XbTZYRkIMtfNHk3bJVBPJHcoqI=";
};
sourceRoot = "${src.name}/auth";
pubspecLock = lib.importJSON ./pubspec.lock.json;
gitHashes = lib.importJSON ./git-hashes.json;
patches = [
# Disable update notifications and auto-update functionality
@@ -41,14 +42,6 @@ flutter324.buildFlutterApplication rec {
ln -s ${simple-icons} assets/simple-icons
'';
gitHashes = {
desktop_webview_window = "sha256-jdNMpzFBgw53asWlGzWUS+hoPdzcL6kcJt2KzjxXf2E=";
ente_crypto_dart = "sha256-XBzQ268E0cYljJH6gDS5O0Pmie/GwuhMDlQPfopSqJM=";
flutter_local_authentication = "sha256-r50jr+81ho+7q2PWHLf4VnvNJmhiARZ3s4HUpThCgc0=";
flutter_secure_storage_linux = "sha256-x45jrJ7pvVyhZlpqRSy3CbwT4Lna6yi/b2IyAilWckg=";
sqflite = "sha256-+XTVtkFJ94VifwnutvUuAqqiyWwrcEiZ3Uz0H4D9zWA=";
};
nativeBuildInputs = [
copyDesktopItems
makeWrapper
+1 -11
View File
@@ -481,7 +481,7 @@
"description": {
"path": ".",
"ref": "HEAD",
"resolved-ref": "e2e66ffd03f23bef5e0bb138b5f01b32d8e9b7bb",
"resolved-ref": "f91e1545f8263df127762240c4da54a0c42835b2",
"url": "https://github.com/ente-io/ente_crypto_dart.git"
},
"source": "git",
@@ -1623,16 +1623,6 @@
"source": "hosted",
"version": "4.1.0"
},
"scan": {
"dependency": "direct main",
"description": {
"name": "scan",
"sha256": "b343ec36f863a88d41eb4c174b810c055c6bd1f1822b2188ab31aab684fb7cdb",
"url": "https://pub.dev"
},
"source": "hosted",
"version": "1.6.0"
},
"screen_retriever": {
"dependency": "transitive",
"description": {
+9 -2
View File
@@ -19,16 +19,23 @@ echo "Updating to $short_version"
# Subtree needed for lockfile and icons
auth_tree="$(gh-curl "https://api.github.com/repos/ente-io/ente/git/trees/$version" | gojq '.tree[] | select(.path == "auth") | .url' --raw-output)"
pushd "$pkg_dir"
# Get lockfile, filter out incompatible sqlite dependency and convert to JSON
echo "Updating lockfile"
pubspec_lock="$(gh-curl "$auth_tree" | gojq '.tree[] | select(.path == "pubspec.lock") | .url' --raw-output)"
gh-curl "$pubspec_lock" | gojq '.content | @base64d' --raw-output | gojq --yaml-input 'del(.packages.sqlite3_flutter_libs)' > "$pkg_dir/pubspec.lock.json"
gh-curl "$pubspec_lock" | gojq '.content | @base64d' --raw-output | gojq --yaml-input 'del(.packages.sqlite3_flutter_libs)' > pubspec.lock.json
echo "Updating git hashes"
./fetch-git-hashes.py
# Get rev and hash of simple-icons submodule
echo "Updating icons"
assets_tree="$(gh-curl "$auth_tree" | gojq '.tree[] | select(.path == "assets") | .url' --raw-output)"
simple_icons_rev="$(gh-curl "$assets_tree" | gojq '.tree[] | select(.path == "simple-icons") | .sha' --raw-output)"
nix-prefetch-github --rev "$simple_icons_rev" simple-icons simple-icons > "$pkg_dir/simple-icons.json"
nix-prefetch-github --rev "$simple_icons_rev" simple-icons simple-icons > simple-icons.json
popd
# Update package version and hash
echo "Updating package source"
+45
View File
@@ -0,0 +1,45 @@
{
lib,
python3,
fetchFromGitHub,
}:
python3.pkgs.buildPythonApplication rec {
pname = "exposor";
version = "1.0.0";
pyproject = true;
src = fetchFromGitHub {
owner = "abuyv";
repo = "exposor";
tag = "v${version}";
hash = "sha256-D/AMoLMUUjiKbrDS90GkVLHncMHSmtfjLINf97LEU1w=";
};
postPatch = ''
# File contains unknown property
rm pyproject.toml
'';
build-system = with python3.pkgs; [ setuptools ];
dependencies = with python3.pkgs; [
python-dotenv
pyyaml
requests
];
# Project has no tests
doCheck = false;
pythonImportsCheck = [ "exposor" ];
meta = {
description = "Tool using internet search engines to detect exposed technologies with a unified syntax";
homepage = "https://github.com/abuyv/exposor";
changelog = "https://github.com/abuyv/exposor/releases/tag/v${version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ fab ];
mainProgram = "exposor";
};
}
+3 -3
View File
@@ -8,16 +8,16 @@
buildGoModule rec {
pname = "files-cli";
version = "2.13.231";
version = "2.13.239";
src = fetchFromGitHub {
repo = "files-cli";
owner = "files-com";
rev = "v${version}";
hash = "sha256-sjYEkRT5CnInu+Fl/elyuDyjG1PYccyJFWjipQNzwf8=";
hash = "sha256-rfjfx09Pp+EZiivM1viclNof9u9ojDbyE1NLdKe/rt8=";
};
vendorHash = "sha256-ooaEQJyfOIR2DyJH6U+GLBmDh/6g7RQpxdnzlK2rw8Y=";
vendorHash = "sha256-B8iuuTtM4d67TmoxAIAruFv2xzjrUGbdRe9XLNaJqe8=";
ldflags = [
"-s"
+3 -3
View File
@@ -2,16 +2,16 @@
buildGoModule rec {
pname = "fission";
version = "1.20.5";
version = "1.21.0";
src = fetchFromGitHub {
owner = "fission";
repo = "fission";
rev = "v${version}";
hash = "sha256-JYe5CWHcqQwbldimX2/pkF+gUvCplIuNg/kTvyT2I0c=";
hash = "sha256-Tl7aKibVbNAKOa1tycKtEzdJ8rJHBMa8PTUm0i7DKA4=";
};
vendorHash = "sha256-3Wuvi7st9y+Pyv12HyxcSoaUjYA3xooYH+zHZ+xbngo=";
vendorHash = "sha256-PhB6zR/dXnOCHJiJ/EjVOD26SubaAITRm61XOvULerU=";
ldflags = [ "-s" "-w" "-X info.Version=${version}" ];
+7 -6
View File
@@ -1,22 +1,23 @@
diff --git a/session-helper/flatpak-session-helper.c b/session-helper/flatpak-session-helper.c
index 5dd7629e..ddc71a4c 100644
index 31e94384..2c297551 100644
--- a/session-helper/flatpak-session-helper.c
+++ b/session-helper/flatpak-session-helper.c
@@ -693,7 +693,7 @@ start_p11_kit_server (const char *flatpak_dir)
@@ -698,7 +698,7 @@ start_p11_kit_server (const char *flatpak_dir)
g_auto(GStrv) stdout_lines = NULL;
int i;
char *p11_argv[] = {
const char * const p11_argv[] = {
- "p11-kit", "server",
+ "@p11kit@", "server",
/* We explicitly request --sh here, because we then fail on earlier versions that doesn't support
* this flag. This is good, because those earlier versions did not properly daemonize and caused
* the spawn_sync to hang forever, waiting for the pipe to close.
@@ -836,7 +836,7 @@ main (int argc,
@@ -852,8 +852,7 @@ main (int argc,
exit (1);
}
- if (g_find_program_in_path ("p11-kit"))
- pk11_program = g_find_program_in_path ("p11-kit");
- if (pk11_program)
+ if (TRUE)
start_p11_kit_server (flatpak_dir);
else
g_debug ("p11-kit not found");
g_info ("p11-kit not found");
+123 -141
View File
@@ -1,33 +1,28 @@
{
lib,
stdenv,
fetchurl,
fetchpatch,
runCommand,
appstream,
autoreconfHook,
bison,
bubblewrap,
buildPackages,
bzip2,
coreutils,
curl,
dbus,
dconf,
desktop-file-utils,
docbook_xml_dtd_45,
docbook-xsl-nons,
docbook_xml_dtd_45,
fetchurl,
fuse3,
gdk-pixbuf,
gettext,
glib,
glib-networking,
gobject-introspection,
gpgme,
gsettings-desktop-schemas,
gtk3,
gtk-doc,
gtk3,
hicolor-icon-theme,
intltool,
json-glib,
libarchive,
libcap,
@@ -35,50 +30,60 @@
libseccomp,
libxml2,
libxslt,
malcontent,
meson,
ninja,
nix-update-script,
nixosTests,
nixos-icons,
ostree,
p11-kit,
pkg-config,
polkit,
pkgsCross,
python3,
runCommand,
shared-mime-info,
socat,
substituteAll,
systemd,
testers,
valgrind,
which,
validatePkgConfig,
wayland,
wayland-protocols,
wayland-scanner,
wrapGAppsNoGuiHook,
xdg-dbus-proxy,
xmlto,
xorg,
xz,
zstd,
withAutoSideloading ? false,
withDocbookDocs ? true,
withGtkDoc ? stdenv.buildPlatform.canExecute stdenv.hostPlatform,
withMan ? true,
withSELinuxModule ? false,
withSystemd ? true,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "flatpak";
version = "1.14.10";
version = "1.16.0";
# TODO: split out lib once we figure out what to do with triggerdir
outputs = [
"out"
"dev"
"man"
"doc"
"devdoc"
"installedTests"
];
separateDebugInfo = true;
outputs =
[
"out"
"dev"
]
++ lib.optionals (withDocbookDocs || withGtkDoc) [
"devdoc"
"doc"
]
++ lib.optional finalAttrs.doCheck "installedTests"
++ lib.optional withMan "man";
src = fetchurl {
url = "https://github.com/flatpak/flatpak/releases/download/${finalAttrs.version}/flatpak-${finalAttrs.version}.tar.xz";
hash = "sha256-a73HkIEnNQrYWkpH1wKSyi9MRul3sysf0jHCpxnYIc0=";
hash = "sha256-ywrFZa3LYhJ8bRHtUO5wRNaoNvppw1Sy9LZAoiv6Syo=";
};
patches = [
@@ -89,98 +94,98 @@ stdenv.mkDerivation (finalAttrs: {
inherit
coreutils
gettext
socat
gtk3
socat
;
smi = shared-mime-info;
dfu = desktop-file-utils;
hicolorIconTheme = hicolor-icon-theme;
smi = shared-mime-info;
})
# Hardcode paths used by Flatpak itself.
(substituteAll {
src = ./fix-paths.patch;
p11kit = "${p11-kit.bin}/bin/p11-kit";
p11kit = lib.getExe p11-kit;
})
# Allow gtk-doc to find schemas using XML_CATALOG_FILES environment variable.
# Patch taken from gtk-doc expression.
./respect-xml-catalog-files-var.patch
# Nix environment hacks should not leak into the apps.
# https://github.com/NixOS/nixpkgs/issues/53441
./unset-env-vars.patch
# Use flatpak from PATH to avoid references to `/nix/store` in `/desktop` files.
# Applications containing `DBusActivatable` entries should be able to find the flatpak binary.
# https://github.com/NixOS/nixpkgs/issues/138956
./binary-path.patch
# The icon validator needs to access the gdk-pixbuf loaders in the Nix store
# and cannot bind FHS paths since those are not available on NixOS.
finalAttrs.passthru.icon-validator-patch
# Try mounting fonts and icons from NixOS locations if FHS locations don't exist.
# https://github.com/NixOS/nixpkgs/issues/119433
./fix-fonts-icons.patch
# TODO: Remove when updating to 1.16
# Ensure flatpak uses the system's zoneinfo from $TZDIR
# https://github.com/NixOS/nixpkgs/issues/238386
(fetchpatch {
url = "https://github.com/flatpak/flatpak/pull/5850/commits/a8a35bf4d9fc3d76e1a5049a6a591faec04a42fd.patch";
hash = "sha256-JqkPbnzgZNZq/mplZqohhHFdjRrvYFjE4C02pI3feBo=";
})
(fetchpatch {
url = "https://github.com/flatpak/flatpak/pull/5850/commits/5ea13b09612215559081c27b60df4fb720cb08d5.patch";
hash = "sha256-BWbyQ2en3RtN4Ec5n62CULAhvywlQLhcl3Fmd4fsR1s=";
})
(fetchpatch {
url = "https://github.com/flatpak/flatpak/pull/5850/commits/7c8a81f08908019bbf69358de199748a9bcb29e3.patch";
hash = "sha256-RiG2jPmG+Igskxv8oQquOUYsG4srgdMXWe34ojMXslo=";
})
# Nix environment hacks should not leak into the apps.
# https://github.com/NixOS/nixpkgs/issues/53441
./unset-env-vars.patch
# The icon validator needs to access the gdk-pixbuf loaders in the Nix store
# and cannot bind FHS paths since those are not available on NixOS.
finalAttrs.passthru.icon-validator-patch
];
nativeBuildInputs = [
autoreconfHook
libxml2
docbook_xml_dtd_45
docbook-xsl-nons
which
gobject-introspection
gtk-doc
intltool
libxslt
pkg-config
xmlto
bison
wrapGAppsNoGuiHook
];
# Fixup shebangs in some scripts
#
# Don't prefix the already absolute `man` directory with the install prefix
postPatch = ''
patchShebangs buildutil/ tests/
patchShebangs --build subprojects/variant-schema-compiler/variant-schema-compiler
buildInputs = [
appstream
bubblewrap
bzip2
curl
dbus
dconf
gpgme
json-glib
libarchive
libcap
libseccomp
libxml2
xz
zstd
polkit
python3
systemd
xorg.libXau
fuse3
gsettings-desktop-schemas
glib-networking
librsvg # for flatpak-validate-icon
] ++ lib.optionals withGtkDoc [ gtk-doc ];
substituteInPlace doc/meson.build \
--replace-fail '$MESON_INSTALL_DESTDIR_PREFIX/@1@/@2@' '@1@/@2@'
'';
strictDeps = true;
nativeBuildInputs =
[
(python3.pythonOnBuildForHost.withPackages (p: [ p.pyparsing ]))
bison
gobject-introspection
meson
ninja
pkg-config
validatePkgConfig
wrapGAppsNoGuiHook
]
++ lib.optional withGtkDoc gtk-doc
++ lib.optional withMan libxslt
++ lib.optional withSELinuxModule bzip2
++ lib.optionals withDocbookDocs [
docbook-xsl-nons
docbook_xml_dtd_45
xmlto
];
buildInputs =
[
appstream
curl
dconf
fuse3
gdk-pixbuf
glib-networking
gpgme
gsettings-desktop-schemas
json-glib
libarchive
libcap
librsvg # for flatpak-validate-icon
libseccomp
libxml2
malcontent
polkit
python3
wayland
wayland-protocols
wayland-scanner
xorg.libXau
zstd
]
++ lib.optional withGtkDoc gtk-doc
++ lib.optional withSystemd systemd;
# Required by flatpak.pc
propagatedBuildInputs = [
@@ -188,51 +193,29 @@ stdenv.mkDerivation (finalAttrs: {
ostree
];
nativeCheckInputs = [ valgrind ];
mesonFlags = [
(lib.mesonBool "auto_sideloading" withAutoSideloading)
(lib.mesonBool "installed_tests" finalAttrs.finalPackage.doCheck)
(lib.mesonBool "tests" finalAttrs.finalPackage.doCheck)
(lib.mesonEnable "selinux_module" withSELinuxModule)
(lib.mesonOption "dbus_config_dir" (placeholder "out" + "/share/dbus-1/system.d"))
(lib.mesonOption "profile_dir" (placeholder "out" + "/etc/profile.d"))
(lib.mesonOption "system_bubblewrap" (lib.getExe bubblewrap))
(lib.mesonOption "system_dbus_proxy" (lib.getExe xdg-dbus-proxy))
(lib.mesonOption "system_fusermount" "/run/wrappers/bin/fusermount3")
(lib.mesonOption "system_install_dir" "/var/lib/flatpak")
];
# TODO: some issues with temporary files
nativeCheckInputs = [
polkit
socat
valgrind
];
# TODO: Many issues with temporary files, FHS environments, timeouts, and our current patches
doCheck = false;
strictDeps = true;
NIX_LDFLAGS = "-lpthread";
enableParallelBuilding = true;
configureFlags = [
"--with-curl"
"--with-system-bubblewrap=${lib.getExe bubblewrap}"
"--with-system-dbus-proxy=${lib.getExe xdg-dbus-proxy}"
"--with-dbus-config-dir=${placeholder "out"}/share/dbus-1/system.d"
"--with-profile-dir=${placeholder "out"}/etc/profile.d"
"--localstatedir=/var"
"--sysconfdir=/etc"
"--enable-gtk-doc=${if withGtkDoc then "yes" else "no"}"
"--enable-installed-tests"
"--enable-selinux-module=no"
];
makeFlags = [
"installed_testdir=${placeholder "installedTests"}/libexec/installed-tests/flatpak"
"installed_test_metadir=${placeholder "installedTests"}/share/installed-tests/flatpak"
];
postPatch =
let
vsc-py = python3.pythonOnBuildForHost.withPackages (pp: [ pp.pyparsing ]);
in
''
patchShebangs buildutil
patchShebangs tests
PATH=${lib.makeBinPath [ vsc-py ]}:$PATH patchShebangs --build subprojects/variant-schema-compiler/variant-schema-compiler
substituteInPlace configure.ac \
--replace-fail '$BWRAP --' ${
lib.escapeShellArg (stdenv.hostPlatform.emulator buildPackages + " $BWRAP --")
} \
--replace-fail '$DBUS_PROXY --' ${
lib.escapeShellArg (stdenv.hostPlatform.emulator buildPackages + " $DBUS_PROXY --")
}
'';
separateDebugInfo = true;
passthru = {
icon-validator-patch = substituteAll {
@@ -240,12 +223,8 @@ stdenv.mkDerivation (finalAttrs: {
inherit (builtins) storeDir;
};
updateScript = nix-update-script { };
tests = {
cross = pkgsCross.aarch64-multiplatform.flatpak;
installedTests = nixosTests.installed-tests.flatpak;
pkg-config = testers.hasPkgConfigModules { package = finalAttrs.finalPackage; };
validate-icon = runCommand "test-icon-validation" { } ''
${finalAttrs.finalPackage}/libexec/flatpak-validate-icon \
@@ -257,6 +236,8 @@ stdenv.mkDerivation (finalAttrs: {
version = testers.testVersion { package = finalAttrs.finalPackage; };
};
updateScript = nix-update-script { };
};
meta = {
@@ -267,5 +248,6 @@ stdenv.mkDerivation (finalAttrs: {
maintainers = with lib.maintainers; [ getchoo ];
mainProgram = "flatpak";
platforms = lib.platforms.linux;
pkgConfigModules = [ "flatpak" ];
};
})
@@ -1,15 +0,0 @@
diff --git a/acinclude.m4 b/acinclude.m4
index 92ec3985..b3fccf1d 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -40,8 +40,8 @@ AC_DEFUN([JH_CHECK_XML_CATALOG],
[
AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
- if $jh_found_xmlcatalog && \
- AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
+ # empty argument forces libxml to use XML_CATALOG_FILES variable
+ if AC_RUN_LOG([$XMLCATALOG --noout "" "$1" >&2]); then
AC_MSG_RESULT([found])
ifelse([$3],,,[$3
])dnl
+5 -5
View File
@@ -8,6 +8,7 @@
libdeflate,
bash,
coreutils,
addBinToPathHook,
}:
python3Packages.buildPythonApplication rec {
@@ -54,11 +55,10 @@ python3Packages.buildPythonApplication rec {
pythonImportsCheck = [ "flye" ];
nativeCheckInputs = [ python3Packages.pytestCheckHook ];
preCheck = ''
export PATH=$out/bin:$PATH
'';
nativeCheckInputs = [
addBinToPathHook
python3Packages.pytestCheckHook
];
meta = with lib; {
description = "De novo assembler for single molecule sequencing reads using repeat graphs";
+2 -2
View File
@@ -117,7 +117,7 @@ let
in
stdenv.mkDerivation (finalAttrs: {
pname = "fwupd";
version = "2.0.4";
version = "2.0.5";
# libfwupd goes to lib
# daemon, plug-ins and libfwupdplugin go to out
@@ -135,7 +135,7 @@ stdenv.mkDerivation (finalAttrs: {
owner = "fwupd";
repo = "fwupd";
tag = finalAttrs.version;
hash = "sha256-0+2B8/ZuniZCeP1LMzLcJsvE3RzlHuw0jd6rlkoW6zY=";
hash = "sha256-V07alPn2+bOkKx+oh8qoX4Ie6/5ujO6h/TDzvL3UhvQ=";
};
patches = [
+3 -3
View File
@@ -11,16 +11,16 @@
buildGoModule rec {
pname = "fzf";
version = "0.58.0";
version = "0.59.0";
src = fetchFromGitHub {
owner = "junegunn";
repo = "fzf";
rev = "v${version}";
hash = "sha256-0HlmUwQFitd1He+F16JiwDcP0t9Bfo0sAm8owlb/Ygs=";
hash = "sha256-2W4JZy7oZWLbbL9B4OheFXM7FvlWoSx7Mlnth/cOWeg=";
};
vendorHash = "sha256-rUG926YdBTZyJfpTG0kXr2zo+yw1eNEUlolS6Q7C+ng=";
vendorHash = "sha256-kPgfDV3HUe2j8bvsnL4cCl8Abuk+wvDmKbJ33XDQPOE=";
env.CGO_ENABLED = 0;

Some files were not shown because too many files have changed in this diff Show More