Merge ab36ef17c8 into haskell-updates
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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$\' '
|
||||
)
|
||||
'';
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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"):
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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";
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Generated
+293
-232
File diff suppressed because it is too large
Load Diff
@@ -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=";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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; };
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,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) \
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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; };
|
||||
|
||||
@@ -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 = ''
|
||||
|
||||
@@ -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 ];
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
@@ -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";
|
||||
};
|
||||
})
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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=";
|
||||
|
||||
@@ -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,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
@@ -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="
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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";
|
||||
};
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
@@ -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}" ];
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -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";
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user