mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-10-31 01:02:20 +00:00
Merge 3bf343717d into haskell-updates
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
Thanks for contributing to the documentation
|
||||
Thanks for contributing to the documentation.
|
||||
|
||||
Make sure you follow the [documentation style guide](https://github.com/NixOS/nixpkgs/blob/master/doc/styleguide.md), most notably:
|
||||
Follow the [documentation style guide](https://github.com/NixOS/nixpkgs/blob/master/doc/styleguide.md), especially:
|
||||
|
||||
- Show, don't tell: lead with a minimal working example; explanation follows the code.
|
||||
- No meta-commentary: don't write "This section explains how to…", just do it.
|
||||
- Imperative mood and active voice: "Run the command", not "The user should run the following command".
|
||||
- Present tense: "This creates a folder", not "This will create a folder".
|
||||
- Be confident: no hedging with "should", "might", "typically", "usually".
|
||||
- Cut filler words: "simply", "just", "easily", "basically"; "to", not "in order to".
|
||||
- Show, don’t tell. Start with a minimal working example. Explain after the code.
|
||||
- Avoid meta-commentary. Don’t write "This section explains how to…".
|
||||
- Use present tense, imperative mood, and active voice. For example: "Run the command," not "The user should run the following command."
|
||||
- Avoid vague references like "this" when the referent is unclear. Write "This command creates a folder," not "This will create a folder."
|
||||
- Be direct. Avoid "should", "might", "typically", and "usually".
|
||||
- Cut filler words like "simply", "just", "easily", and "basically". Use "to" instead of "in order to".
|
||||
|
||||
For larger changes, like adding or removing whole sections, ask the NixOS documentation team for a review.
|
||||
For larger changes, such as adding or removing whole sections, ask the NixOS documentation team for review.
|
||||
|
||||
@@ -225,15 +225,13 @@ writeShellScript "evaluate-my-file.sh" ''
|
||||
|
||||
### `makeDesktopItem` {#trivial-builder-makeDesktopItem}
|
||||
|
||||
Write an [XDG desktop file](https://specifications.freedesktop.org/desktop-entry-spec/1.4/) to the Nix store.
|
||||
Write an [XDG desktop file](https://specifications.freedesktop.org/desktop-entry-spec/latest) to the Nix store.
|
||||
|
||||
This function is usually used to add desktop items to a package through the `copyDesktopItems` hook.
|
||||
|
||||
`makeDesktopItem` adheres to version 1.4 of the specification.
|
||||
|
||||
#### Inputs {#trivial-builder-makeDesktopItem-inputs}
|
||||
|
||||
`makeDesktopItem` takes an attribute set that accepts most values from the [XDG specification](https://specifications.freedesktop.org/desktop-entry-spec/1.4/ar01s06.html).
|
||||
`makeDesktopItem` takes an attribute set that accepts most values from the [XDG specification](https://specifications.freedesktop.org/desktop-entry-spec/latest/ar01s06.html).
|
||||
|
||||
All recognised keys from the specification are supported with the exception of the "Hidden" field. The keys are converted into camelCase format, but correspond 1:1 to their equivalent in the specification: `genericName`, `noDisplay`, `comment`, `icon`, `onlyShowIn`, `notShowIn`, `dbusActivatable`, `tryExec`, `exec`, `path`, `terminal`, `mimeTypes`, `categories`, `implements`, `keywords`, `startupNotify`, `startupWMClass`, `url`, `prefersNonDefaultGPU`.
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# Perl {#setup-hook-perl}
|
||||
|
||||
Adds the `lib/site_perl` subdirectory of each build input to the `PERL5LIB` environment variable. For instance, if `buildInputs` contains Perl, then the `lib/site_perl` subdirectory of each input is added to the `PERL5LIB` environment variable.
|
||||
Adds the `lib/perl5/site_perl` subdirectory of each build input to the `PERL5LIB` environment variable.
|
||||
The hook applies when `perl` is in `buildInputs`.
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# `xfce4-dev-tools` {#xfce4-dev-tools}
|
||||
|
||||
This setup hook attempts to run `xdt-autogen` in `xdtAutogenPhase`, which is part of `preConfigurePhases`.
|
||||
This setup hook adds an `xdtAutogenPhase` that runs `xdt-autogen` before configure.
|
||||
|
||||
[]{#dontUseXdtAutogenPhase} This behavior can be disabled by setting `dontUseXdtAutogenPhase` to `true`.
|
||||
Use this hook for Xfce packages that need `xdt-autogen` before configure.
|
||||
Add `xfce4-dev-tools` to `nativeBuildInputs` to enable the phase.
|
||||
|
||||
```nix
|
||||
{
|
||||
nativeBuildInputs = [ xfce4-dev-tools ];
|
||||
}
|
||||
```
|
||||
|
||||
[]{#dontUseXdtAutogenPhase} Disable this behavior by setting `dontUseXdtAutogenPhase` to `true`.
|
||||
|
||||
@@ -86,8 +86,7 @@ weechat.override {
|
||||
{ availablePlugins, ... }:
|
||||
{
|
||||
scripts = with pkgs.weechatScripts; [
|
||||
weechat-xmpp
|
||||
weechat-matrix-bridge
|
||||
weechat-matrix
|
||||
wee-slack
|
||||
];
|
||||
init = ''
|
||||
|
||||
@@ -247,6 +247,11 @@
|
||||
[pnpm `fetcherVersion` section](#javascript-pnpm-fetcherVersion) of the manual
|
||||
for details.
|
||||
|
||||
- `services.opencloud.package` now requires explicit package selection. Possibilities are `opencloud` (the previous default) and `opencloud-production` to reflect [upstream release cycle](https://docs.opencloud.eu/docs/admin/resources/lifecycle/).
|
||||
- Users updating from `nixos-26.05` will prefer the new `opencloud-production` package.
|
||||
- Users updating from `nixos-unstable` will prefer to keep using the existing `opencloud` package.
|
||||
- Please note upstream does not support downgrading existing installations. Switching from `opencloud` to `opencloud-production` is considered a downgrade.
|
||||
|
||||
- `makeSetupHook` now uses structured attributes and only makes substitutions based on the values of the `substitutions` argument - other derivation attributes are no longer considered.
|
||||
|
||||
- `rebuilderd` has been updated to 0.27.0 introducing breaking changes. See upstream changelog for details: [0.26.0](https://github.com/kpcyrd/rebuilderd/releases/tag/v0.26.0), [0.27.0](https://github.com/kpcyrd/rebuilderd/releases/tag/v0.27.0)
|
||||
|
||||
@@ -401,6 +401,11 @@
|
||||
github = "a-camarillo";
|
||||
githubId = 58638902;
|
||||
};
|
||||
a-hassanin = {
|
||||
github = "a-hassanin";
|
||||
name = "Ahmed Hassanin";
|
||||
githubId = 112945643;
|
||||
};
|
||||
a-jay98 = {
|
||||
email = "ali@jamadi.me";
|
||||
github = "A-jay98";
|
||||
@@ -9425,6 +9430,11 @@
|
||||
githubId = 84565547;
|
||||
name = "fernvenue";
|
||||
};
|
||||
ferris-qq = {
|
||||
name = "heki";
|
||||
github = "ferris-qq";
|
||||
githubId = 186204649;
|
||||
};
|
||||
feyorsh = {
|
||||
email = "george@feyor.sh";
|
||||
github = "Feyorsh";
|
||||
@@ -10917,10 +10927,10 @@
|
||||
};
|
||||
grimmauld = {
|
||||
name = "Sören Bender";
|
||||
email = "soeren@benjos.de";
|
||||
github = "LordGrimmauld";
|
||||
email = "grimmauld@grimmauld.de";
|
||||
github = "GrimmTheShrimp";
|
||||
githubId = 49513131;
|
||||
matrix = "@grimmauld:grimmauld.de";
|
||||
matrix = "@grimmauld:m.grimmauld.de";
|
||||
};
|
||||
grindhold = {
|
||||
name = "grindhold";
|
||||
@@ -22091,6 +22101,11 @@
|
||||
githubId = 1538622;
|
||||
name = "Michael Reilly";
|
||||
};
|
||||
onaips = {
|
||||
github = "oNaiPs";
|
||||
githubId = 374130;
|
||||
name = "José Luis Pereira";
|
||||
};
|
||||
onatustun = {
|
||||
email = "contact@onatustun.com";
|
||||
name = "Onat Ustun";
|
||||
@@ -22385,6 +22400,13 @@
|
||||
githubId = 5948762;
|
||||
name = "Berk Özkütük";
|
||||
};
|
||||
ozozka = {
|
||||
email = "ozkaya.ogzhn@gmail.com";
|
||||
matrix = "@oguzhanozkaya:matrix.org";
|
||||
github = "ozozka";
|
||||
githubId = 53692091;
|
||||
name = "Oğuzhan Özkaya";
|
||||
};
|
||||
ozturkkl = {
|
||||
email = "97kemalozturk@gmail.com";
|
||||
github = "ozturkkl";
|
||||
|
||||
@@ -760,6 +760,7 @@ with lib.maintainers;
|
||||
];
|
||||
scope = "Maintain Swift compiler suite for NixOS.";
|
||||
shortName = "Swift";
|
||||
enableFeatureFreezePing = true;
|
||||
};
|
||||
|
||||
systemd = {
|
||||
|
||||
@@ -270,6 +270,8 @@
|
||||
`services.bazarr.listenPort` is now `services.bazarr.settings.general.port`; existing configurations continue working via `mkRenamedOptionModule`.
|
||||
[`services.bazarr.settings.analytics.enabled`](#opt-services.bazarr.settings.analytics.enabled) defaults to `false` on NixOS to opt users out of upstream's enabled-by-default telemetry.
|
||||
|
||||
- The [bazarr](#opt-services.bazarr.enable) systemd service has been security hardened. If you are storing/accessing data in `/home`, you will need to adjust the `ProtectHome` option.
|
||||
|
||||
- `security.polkit.enablePkexecWrapper` has been introduced, making the `pkexec` setuid wrapper opt-in.
|
||||
|
||||
- `services.pghero` has been removed because the `pghero` package was unmaintained and thus dropped from Nixpkgs.
|
||||
|
||||
@@ -9,7 +9,7 @@ import tempfile
|
||||
import threading
|
||||
import traceback
|
||||
import warnings
|
||||
from collections.abc import Callable, Generator, Iterator
|
||||
from collections.abc import Callable, Generator
|
||||
from contextlib import AbstractContextManager, contextmanager
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
@@ -314,7 +314,7 @@ class Driver:
|
||||
|
||||
def test_symbols(self) -> dict[str, Any]:
|
||||
@contextmanager
|
||||
def subtest(name: str) -> Iterator[None]:
|
||||
def subtest(name: str) -> Generator[None]:
|
||||
return self.subtest(name)
|
||||
|
||||
general_symbols = dict(
|
||||
|
||||
@@ -4,7 +4,7 @@ import sys
|
||||
import time
|
||||
import unicodedata
|
||||
from abc import ABC, abstractmethod
|
||||
from collections.abc import Iterator
|
||||
from collections.abc import Generator
|
||||
from contextlib import ExitStack, contextmanager
|
||||
from enum import IntEnum
|
||||
from pathlib import Path
|
||||
@@ -31,12 +31,12 @@ class AbstractLogger(ABC):
|
||||
|
||||
@abstractmethod
|
||||
@contextmanager
|
||||
def subtest(self, name: str, attributes: dict[str, str] = {}) -> Iterator[None]:
|
||||
def subtest(self, name: str, attributes: dict[str, str] = {}) -> Generator[None]:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
@contextmanager
|
||||
def nested(self, message: str, attributes: dict[str, str] = {}) -> Iterator[None]:
|
||||
def nested(self, message: str, attributes: dict[str, str] = {}) -> Generator[None]:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
@@ -94,7 +94,7 @@ class JunitXMLLogger(AbstractLogger):
|
||||
self.tests[self.currentSubtest].stdout += message + os.linesep
|
||||
|
||||
@contextmanager
|
||||
def subtest(self, name: str, attributes: dict[str, str] = {}) -> Iterator[None]:
|
||||
def subtest(self, name: str, attributes: dict[str, str] = {}) -> Generator[None]:
|
||||
old_test = self.currentSubtest
|
||||
self.tests.setdefault(name, self.TestCaseState())
|
||||
self.currentSubtest = name
|
||||
@@ -104,7 +104,7 @@ class JunitXMLLogger(AbstractLogger):
|
||||
self.currentSubtest = old_test
|
||||
|
||||
@contextmanager
|
||||
def nested(self, message: str, attributes: dict[str, str] = {}) -> Iterator[None]:
|
||||
def nested(self, message: str, attributes: dict[str, str] = {}) -> Generator[None]:
|
||||
self.log(message)
|
||||
yield
|
||||
|
||||
@@ -185,14 +185,14 @@ class CompositeLogger(AbstractLogger):
|
||||
logger.log(message, attributes)
|
||||
|
||||
@contextmanager
|
||||
def subtest(self, name: str, attributes: dict[str, str] = {}) -> Iterator[None]:
|
||||
def subtest(self, name: str, attributes: dict[str, str] = {}) -> Generator[None]:
|
||||
with ExitStack() as stack:
|
||||
for logger in self.logger_list:
|
||||
stack.enter_context(logger.subtest(name, attributes))
|
||||
yield
|
||||
|
||||
@contextmanager
|
||||
def nested(self, message: str, attributes: dict[str, str] = {}) -> Iterator[None]:
|
||||
def nested(self, message: str, attributes: dict[str, str] = {}) -> Generator[None]:
|
||||
with ExitStack() as stack:
|
||||
for logger in self.logger_list:
|
||||
stack.enter_context(logger.nested(message, attributes))
|
||||
@@ -250,12 +250,12 @@ class TerminalLogger(AbstractLogger):
|
||||
self._eprint(self.maybe_prefix(message, attributes))
|
||||
|
||||
@contextmanager
|
||||
def subtest(self, name: str, attributes: dict[str, str] = {}) -> Iterator[None]:
|
||||
def subtest(self, name: str, attributes: dict[str, str] = {}) -> Generator[None]:
|
||||
with self.nested("subtest: " + name, attributes):
|
||||
yield
|
||||
|
||||
@contextmanager
|
||||
def nested(self, message: str, attributes: dict[str, str] = {}) -> Iterator[None]:
|
||||
def nested(self, message: str, attributes: dict[str, str] = {}) -> Generator[None]:
|
||||
self._eprint(
|
||||
self.maybe_prefix(
|
||||
Style.BRIGHT + Fore.GREEN + message + Style.RESET_ALL, # ty: ignore[unsupported-operator]
|
||||
@@ -381,12 +381,12 @@ class XMLLogger(AbstractLogger):
|
||||
pass
|
||||
|
||||
@contextmanager
|
||||
def subtest(self, name: str, attributes: dict[str, str] = {}) -> Iterator[None]:
|
||||
def subtest(self, name: str, attributes: dict[str, str] = {}) -> Generator[None]:
|
||||
with self.nested("subtest: " + name, attributes):
|
||||
yield
|
||||
|
||||
@contextmanager
|
||||
def nested(self, message: str, attributes: dict[str, str] = {}) -> Iterator[None]:
|
||||
def nested(self, message: str, attributes: dict[str, str] = {}) -> Generator[None]:
|
||||
self.xml.startElement("nest", attrs=AttributesImpl({}))
|
||||
self.xml.startElement("head", attrs=AttributesImpl(attributes))
|
||||
self.xml.characters(message)
|
||||
|
||||
@@ -14,9 +14,10 @@ logger = logging.getLogger(__name__)
|
||||
class QMPAPIError(RuntimeError):
|
||||
def __init__(self, message: dict[str, Any]):
|
||||
assert "error" in message, "Not an error message!"
|
||||
error = message["error"]
|
||||
try:
|
||||
self.class_name = message["class"]
|
||||
self.description = message["desc"]
|
||||
self.class_name = error["class"]
|
||||
self.description = error["desc"]
|
||||
# NOTE: Some errors can occur before the Server is able to read the
|
||||
# id member; in these cases the id member will not be part of the
|
||||
# error response, even if provided by the client.
|
||||
|
||||
@@ -347,7 +347,6 @@ in
|
||||
trusted-users = mkOption {
|
||||
type = types.listOf types.str;
|
||||
example = [
|
||||
"root"
|
||||
"alice"
|
||||
"@wheel"
|
||||
];
|
||||
@@ -357,8 +356,9 @@ in
|
||||
additional binary caches, or to import unsigned NARs. You
|
||||
can also specify groups by prefixing them with
|
||||
`@`; for instance,
|
||||
`@wheel` means all users in the wheel
|
||||
group.
|
||||
`@wheel` means all users in the wheel group.
|
||||
`root` is included as a regular definition, so you do not have to repeat it.
|
||||
Furthermore, `root` normally bypasses the daemon.
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -777,7 +777,7 @@ in
|
||||
})
|
||||
];
|
||||
|
||||
services.acpid.enable = true;
|
||||
services.acpid.enable = lib.mkDefault true;
|
||||
|
||||
services.dbus.packages = lib.optional cfg.dynamicBoost.enable nvidia_x11.bin;
|
||||
|
||||
|
||||
@@ -361,16 +361,18 @@ in
|
||||
|
||||
###### wrappers consistency checks
|
||||
system.checks = lib.singleton (
|
||||
pkgs.runCommandLocal "ensure-all-wrappers-paths-exist"
|
||||
pkgs.runCommandLocal "ensure-wrapper-integrity"
|
||||
{
|
||||
nativeBuildInputs = [ pkgs.libcap-text-verifier ];
|
||||
nativeBuildInputs = [
|
||||
pkgs.libcap-text-verifier
|
||||
];
|
||||
preferLocalBuild = true;
|
||||
}
|
||||
''
|
||||
# make sure we produce output
|
||||
mkdir -p $out
|
||||
|
||||
echo -n "Checking that Nix store paths of all wrapped programs exist... "
|
||||
echo -n "Checking that Nix store paths of all wrapped programs exist and are ELF executables... "
|
||||
${lib.toShellVar "wrappers" (lib.mapAttrs (n: v: v.source) wrappers)}
|
||||
for name in "''${!wrappers[@]}"; do
|
||||
path="''${wrappers[$name]}"
|
||||
@@ -382,6 +384,15 @@ in
|
||||
test -t 1 && echo -ne '\033[0m'
|
||||
exit 1
|
||||
fi
|
||||
read -r -n 4 magic < "$path"
|
||||
if ! [[ "$magic" = $'\x7fELF' ]]; then
|
||||
test -t 1 && echo -ne '\033[1;31m'
|
||||
echo "FAIL"
|
||||
echo "The target executable $path is not an ELF! This is a security risk."
|
||||
echo "Script wrappers (e.g. bash or python) are commonly susceptible to dangerous env var injections."
|
||||
test -t 1 && echo -ne '\033[0m'
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "OK"
|
||||
|
||||
|
||||
@@ -599,6 +599,11 @@ in
|
||||
Whether builders upload to S3 themselves instead of the queue
|
||||
runner. Requires an S3 remote store as well as substitution on
|
||||
the builders, see {option}`forcedSubstituters`.
|
||||
|
||||
Presigned URLs stop working when the credentials that signed
|
||||
them expire. With temporary credentials, such as instance
|
||||
profiles or STS, uploads can fail before
|
||||
`presigned-url-expiry` is reached.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -1264,10 +1269,9 @@ in
|
||||
pkgs.jq
|
||||
hydra-package # hydra-eval-jobset
|
||||
];
|
||||
restartTriggers = [
|
||||
hydraConf
|
||||
config.environment.etc."hydra/evaluator.toml".source
|
||||
];
|
||||
# Not `hydra.conf`: only the Perl the evaluator runs reads it, and that
|
||||
# starts afresh for each evaluation.
|
||||
restartTriggers = [ config.environment.etc."hydra/evaluator.toml".source ];
|
||||
environment = env // {
|
||||
HYDRA_DATABASE_URL = dbUrlWithAppName "hydra-evaluator";
|
||||
};
|
||||
|
||||
@@ -324,12 +324,12 @@ in
|
||||
})
|
||||
|
||||
(mkIf serviceCfg.apps.enable {
|
||||
programs.evince.enable = mkDefault (notExcluded pkgs.evince);
|
||||
|
||||
environment.systemPackages = utils.removePackagesByName (
|
||||
[
|
||||
pkgs.epiphany
|
||||
pkgs.gnome-font-viewer
|
||||
pkgs.file-roller
|
||||
pkgs.papers
|
||||
]
|
||||
++ (
|
||||
with pkgs.pantheon;
|
||||
@@ -348,7 +348,6 @@ in
|
||||
elementary-tasks
|
||||
elementary-terminal
|
||||
elementary-videos
|
||||
epiphany
|
||||
]
|
||||
++ lib.optionals config.services.flatpak.enable [
|
||||
# Only install appcenter if flatpak is enabled before
|
||||
|
||||
@@ -193,6 +193,41 @@ in
|
||||
KillSignal = "SIGINT";
|
||||
SuccessExitStatus = "0 156";
|
||||
LoadCredential = credentials;
|
||||
|
||||
# Hardening
|
||||
CapabilityBoundingSet = "";
|
||||
LockPersonality = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateDevices = true;
|
||||
PrivateIPC = true;
|
||||
PrivateTmp = "disconnected";
|
||||
PrivateUsers = true;
|
||||
ProcSubset = "pid";
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = "strict";
|
||||
ProtectHome = true;
|
||||
ProtectHostname = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectProc = "invisible";
|
||||
ProtectSystem = "full";
|
||||
RemoveIPC = true;
|
||||
RestrictAddressFamilies = [
|
||||
"AF_INET"
|
||||
"AF_INET6"
|
||||
"AF_UNIX"
|
||||
];
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
SystemCallArchitectures = "native";
|
||||
SystemCallErrorNumber = "EPERM";
|
||||
SystemCallFilter = [
|
||||
"@system-service"
|
||||
"~@privileged"
|
||||
"~@resources"
|
||||
];
|
||||
};
|
||||
unitConfig.RequiresMountsFor = [ cfg.dataDir ];
|
||||
};
|
||||
|
||||
@@ -801,9 +801,11 @@ in
|
||||
// lib.listToAttrs (map (e: lib.nameValuePair e.env "%d/${e.env}") secrets);
|
||||
};
|
||||
|
||||
services.openssh.settings.AcceptEnv = mkIf (!cfg.settings.server.START_SSH_SERVER or false) [
|
||||
"GIT_PROTOCOL"
|
||||
];
|
||||
services.openssh.extraConfig = mkIf (!cfg.settings.server.START_SSH_SERVER or false) ''
|
||||
Match User ${cfg.user}
|
||||
AcceptEnv GIT_PROTOCOL
|
||||
Match All
|
||||
'';
|
||||
|
||||
users.users = mkIf (cfg.user == "forgejo") {
|
||||
forgejo = {
|
||||
|
||||
@@ -64,7 +64,7 @@ in
|
||||
# Hooks must be executable, but DynamicUser mounts /var/lib/private as noexec
|
||||
ExecPaths = "${stateDir}/repos";
|
||||
|
||||
StateDirectory = "soft-serve";
|
||||
StateDirectory = "soft-serve soft-serve/repos";
|
||||
WorkingDirectory = stateDir;
|
||||
ProcSubset = "pid";
|
||||
ProtectProc = "invisible";
|
||||
|
||||
@@ -76,7 +76,7 @@ in
|
||||
{
|
||||
options = {
|
||||
services.netdata = {
|
||||
enable = lib.mkEnableOption "netdata";
|
||||
enable = lib.mkEnableOption "Netdata";
|
||||
|
||||
package = lib.mkPackageOption pkgs "netdata" { };
|
||||
|
||||
@@ -180,7 +180,7 @@ in
|
||||
config = lib.mkOption {
|
||||
type = lib.types.attrsOf lib.types.attrs;
|
||||
default = { };
|
||||
description = "netdata.conf configuration as nix attributes. cannot be combined with configText.";
|
||||
description = "Configuration for `netdata.conf` as Nix attributes, cannot be combined with `configText`.";
|
||||
example = lib.literalExpression ''
|
||||
global = {
|
||||
"debug log" = "syslog";
|
||||
@@ -194,13 +194,15 @@ in
|
||||
type = lib.types.attrsOf lib.types.path;
|
||||
default = { };
|
||||
description = ''
|
||||
Complete netdata config directory except netdata.conf.
|
||||
Complete netdata config directory except `netdata.conf`.
|
||||
The default configuration is merged with changes
|
||||
defined in this option.
|
||||
|
||||
Each top-level attribute denotes a path in the configuration
|
||||
directory as in environment.etc.
|
||||
directory as in `environment.etc`.
|
||||
|
||||
Its value is the absolute path and must be readable by netdata.
|
||||
Cannot be combined with configText.
|
||||
Cannot be combined with `configText`.
|
||||
'';
|
||||
example = lib.literalExpression ''
|
||||
"health_alarm_notify.conf" = pkgs.writeText "health_alarm_notify.conf" '''
|
||||
|
||||
@@ -93,7 +93,7 @@ let
|
||||
upsdUsers = pkgs.writeText "upsd.users" (
|
||||
let
|
||||
# This looks like INI, but it's not quite because the
|
||||
# 'upsmon' option lacks a '='. See: man upsd.users
|
||||
# 'upsmon' option lacks a '='. See: man upsd.users(5)
|
||||
userConfig =
|
||||
name: user:
|
||||
lib.concatStringsSep "\n " (
|
||||
@@ -128,7 +128,7 @@ let
|
||||
port = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = ''
|
||||
The serial port to which your UPS is connected. /dev/ttyS0 is
|
||||
The serial port to which your UPS is connected. {file}`/dev/ttyS0` is
|
||||
usually the first port on Linux boxes, for example.
|
||||
'';
|
||||
};
|
||||
@@ -176,7 +176,7 @@ let
|
||||
default = "";
|
||||
type = lib.types.lines;
|
||||
description = ''
|
||||
Lines which would be added inside ups.conf for handling this UPS.
|
||||
Lines which would be added inside {file}`ups.conf` for handling this UPS.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -203,7 +203,7 @@ let
|
||||
type = lib.types.str;
|
||||
description = ''
|
||||
Address of the interface for `upsd` to listen on.
|
||||
See `man upsd.conf` for details.
|
||||
See {manpage}`upsd.conf(5)` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -212,7 +212,7 @@ let
|
||||
default = defaultPort;
|
||||
description = ''
|
||||
TCP port for `upsd` to listen on.
|
||||
See `man upsd.conf` for details.
|
||||
See {manpage}`upsd.conf(5)` for details.
|
||||
'';
|
||||
};
|
||||
};
|
||||
@@ -240,7 +240,7 @@ let
|
||||
];
|
||||
description = ''
|
||||
Address of the interface for `upsd` to listen on.
|
||||
See `man upsd` for details`.
|
||||
See {manpage}`upsd(8)` for details`.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -248,7 +248,7 @@ let
|
||||
type = lib.types.lines;
|
||||
default = "";
|
||||
description = ''
|
||||
Additional lines to add to `upsd.conf`.
|
||||
Additional lines to add to {file}`upsd.conf`.
|
||||
'';
|
||||
};
|
||||
};
|
||||
@@ -272,7 +272,7 @@ let
|
||||
default = name;
|
||||
description = ''
|
||||
Identifier of the UPS to monitor, in this form: `<upsname>[@<hostname>[:<port>]]`
|
||||
See `upsmon.conf` for details.
|
||||
See {manpage}`upsmon.conf(5)` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -281,7 +281,7 @@ let
|
||||
default = 1;
|
||||
description = ''
|
||||
Number of power supplies that the UPS feeds on this system.
|
||||
See `upsmon.conf` for details.
|
||||
See {file}`upsmon.conf` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -289,7 +289,7 @@ let
|
||||
type = lib.types.str;
|
||||
description = ''
|
||||
Username from `upsd.users` for accessing this UPS.
|
||||
See `upsmon.conf` for details.
|
||||
See {manpage}`upsmon.conf(5)` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -300,7 +300,7 @@ let
|
||||
The full path to a file containing the password from
|
||||
`upsd.users` for accessing this UPS. The password file
|
||||
is read on service start.
|
||||
See `upsmon.conf` for details.
|
||||
See {manpage}`upsmon.conf(5)` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -309,7 +309,7 @@ let
|
||||
default = "master";
|
||||
description = ''
|
||||
The relationship with `upsd`.
|
||||
See `upsmon.conf` for details.
|
||||
See {manpage}`upsmon.conf(5)` for details.
|
||||
'';
|
||||
};
|
||||
};
|
||||
@@ -331,7 +331,7 @@ let
|
||||
type = lib.types.str;
|
||||
default = "nutmon";
|
||||
description = ''
|
||||
User to run `upsmon` as. `upsmon.conf` will have its owner set to this
|
||||
User to run `upsmon` as. {file}`upsmon.conf` will have its owner set to this
|
||||
user. If not specified, a default user will be created.
|
||||
'';
|
||||
};
|
||||
@@ -348,7 +348,7 @@ let
|
||||
type = with lib.types; attrsOf (submodule monitorOptions);
|
||||
default = { };
|
||||
description = ''
|
||||
Set of UPS to monitor. See `man upsmon.conf` for details.
|
||||
Set of UPS to monitor. See {manpage}`upsmon.conf(5)` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -364,7 +364,7 @@ let
|
||||
SHUTDOWNCMD = "''${config.systemd.package}/bin/shutdown now";
|
||||
}
|
||||
'';
|
||||
description = "Additional settings to add to `upsmon.conf`.";
|
||||
description = "Additional settings to add to {file}`upsmon.conf`.";
|
||||
example = lib.literalMD ''
|
||||
{
|
||||
MINSUPPLIES = 2;
|
||||
@@ -418,7 +418,7 @@ let
|
||||
default = [ ];
|
||||
description = ''
|
||||
Allow the user to do certain things with upsd.
|
||||
See `man upsd.users` for details.
|
||||
See {manpage}`upsd.users(5)` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -427,7 +427,7 @@ let
|
||||
default = [ ];
|
||||
description = ''
|
||||
Let the user initiate specific instant commands. Use "ALL" to grant all commands automatically. For the full list of what your UPS supports, use "upscmd -l".
|
||||
See `man upsd.users` for details.
|
||||
See {manpage}`upsd.users(5)` for details.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -441,7 +441,7 @@ let
|
||||
default = null;
|
||||
description = ''
|
||||
Add the necessary actions for a upsmon process to work.
|
||||
See `man upsd.users` for details.
|
||||
See {manpage}`upsd.users(5)` for details.
|
||||
'';
|
||||
};
|
||||
};
|
||||
@@ -524,7 +524,7 @@ in
|
||||
upsmon = lib.mkOption {
|
||||
default = { };
|
||||
description = ''
|
||||
Options for the `upsmon.conf` configuration file.
|
||||
Options for the {file}`upsmon.conf` configuration file.
|
||||
'';
|
||||
type = lib.types.submodule upsmonOptions;
|
||||
};
|
||||
@@ -532,7 +532,7 @@ in
|
||||
upsd = lib.mkOption {
|
||||
default = { };
|
||||
description = ''
|
||||
Options for the `upsd.conf` configuration file.
|
||||
Options for the {file}`upsd.conf` configuration file.
|
||||
'';
|
||||
type = lib.types.submodule upsdOptions;
|
||||
};
|
||||
@@ -551,7 +551,7 @@ in
|
||||
users = lib.mkOption {
|
||||
default = { };
|
||||
description = ''
|
||||
Users that can access upsd. See `man upsd.users`.
|
||||
Users that can access upsd. See {manpage}`upsd.users(5)`.
|
||||
'';
|
||||
type = with lib.types; attrsOf (submodule userOptions);
|
||||
};
|
||||
|
||||
@@ -199,13 +199,15 @@ in
|
||||
type = path;
|
||||
default = "/etc/hosts.hfaxd";
|
||||
description = ''
|
||||
The {file}`hosts.hfaxd`
|
||||
file entry in the spooling area
|
||||
The {file}`hosts.hfaxd` file entry in the spooling area
|
||||
will be symlinked to the location given here.
|
||||
This file must exist and be
|
||||
readable only by the `uucp` user.
|
||||
This file must exist and be readable only by the `uucp` user.
|
||||
See {manpage}`hosts.hfaxd(5)` for details.
|
||||
This configuration permits access for all users:
|
||||
The example shown below permits access for all users.
|
||||
Note that host-based access can be controlled with
|
||||
{option}`config.systemd.sockets.hylafax-hfaxd.listenStreams`;
|
||||
by default, only `127.0.0.1` is permitted to connect.
|
||||
|
||||
```
|
||||
environment.etc."hosts.hfaxd" = {
|
||||
mode = "0600";
|
||||
@@ -213,9 +215,6 @@ in
|
||||
text = ".*";
|
||||
};
|
||||
```
|
||||
Note that host-based access can be controlled with
|
||||
{option}`config.systemd.sockets.hylafax-hfaxd.listenStreams`;
|
||||
by default, only 127.0.0.1 is permitted to connect.
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -306,7 +305,7 @@ in
|
||||
default = null;
|
||||
example = "daily";
|
||||
description = ''
|
||||
purging old files from the spooling area with
|
||||
Purges old files from the spooling area with
|
||||
{file}`faxcron` with the given frequency
|
||||
(see {manpage}`systemd.time(7)`)
|
||||
'';
|
||||
@@ -346,7 +345,7 @@ in
|
||||
default = null;
|
||||
example = "daily";
|
||||
description = ''
|
||||
Purge old files from the spooling area with
|
||||
Purges old files from the spooling area with
|
||||
{file}`faxcron` with the given frequency
|
||||
(see {manpage}`systemd.time(7)`).
|
||||
'';
|
||||
|
||||
@@ -19,9 +19,29 @@ in
|
||||
services.opencloud = {
|
||||
enable = lib.mkEnableOption "OpenCloud";
|
||||
|
||||
package = lib.mkPackageOption pkgs "opencloud" { };
|
||||
webPackage = lib.mkPackageOption pkgs [ "opencloud" "web" ] { };
|
||||
idpWebPackage = lib.mkPackageOption pkgs [ "opencloud" "idp-web" ] { };
|
||||
package = lib.mkPackageOption pkgs "opencloud" {
|
||||
default = null;
|
||||
extraDescription = ''
|
||||
OpenCloud has 2 release cycles, explained on https://docs.opencloud.eu/docs/admin/resources/lifecycle.
|
||||
|
||||
Use `pkgs.opencloud` package for the rolling release (every 3 weeks).
|
||||
Use `pkgs.opencloud-production` package for the production release (about every 6 months).
|
||||
|
||||
OpenCloud does not support downgrading existing installations. Switching from `pkgs.opencloud` to `pkgs.opencloud-production` is considered a downgrade.
|
||||
'';
|
||||
};
|
||||
webPackage = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = config.services.opencloud.package.web;
|
||||
defaultText = "config.services.opencloud.package.web";
|
||||
description = "The web package to use.";
|
||||
};
|
||||
idpWebPackage = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = config.services.opencloud.package.idp-web;
|
||||
defaultText = "config.services.opencloud.package.idp-web";
|
||||
description = "The idp-web package to use.";
|
||||
};
|
||||
|
||||
user = lib.mkOption {
|
||||
type = types.str;
|
||||
|
||||
@@ -193,6 +193,7 @@ in
|
||||
extra-python-packages = runTest ./nixos-test-driver/extra-python-packages.nix;
|
||||
lib-extend = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./nixos-test-driver/lib-extend.nix { };
|
||||
node-name = runTest ./nixos-test-driver/node-name.nix;
|
||||
qmp-api-error = runTest ./nixos-test-driver/qmp-api-error.nix;
|
||||
busybox = runTest ./nixos-test-driver/busybox.nix;
|
||||
ssh-backdoor = runTestOn [ "x86_64-linux" ] ./nixos-test-driver/ssh-backdoor.nix;
|
||||
console-log = runTest ./nixos-test-driver/console-log.nix;
|
||||
@@ -595,6 +596,7 @@ in
|
||||
ejabberd = runTest ./xmpp/ejabberd.nix;
|
||||
elk = handleTestOn [ "x86_64-linux" ] ./elk.nix { };
|
||||
elk-zone = runTest ./web-apps/elk.nix;
|
||||
emacs = runTest ./emacs;
|
||||
emacs-daemon = runTest ./emacs-daemon.nix;
|
||||
endlessh = runTest ./endlessh.nix;
|
||||
endlessh-go = runTest ./endlessh-go.nix;
|
||||
@@ -785,6 +787,7 @@ in
|
||||
gotify-server = runTest ./gotify-server.nix;
|
||||
gotosocial = runTest ./web-apps/gotosocial.nix;
|
||||
goupile = runTest ./web-apps/goupile;
|
||||
gpauth-tls = runTest ./gpauth-tls.nix;
|
||||
grafana = import ./grafana {
|
||||
inherit runTest;
|
||||
};
|
||||
@@ -1395,7 +1398,16 @@ in
|
||||
openarena = runTest ./openarena.nix;
|
||||
openbao = runTest ./openbao.nix;
|
||||
openbao-agent = runTest ./openbao-agent.nix;
|
||||
opencloud = runTest ./opencloud.nix;
|
||||
opencloud = runTest {
|
||||
imports = [ ./opencloud.nix ];
|
||||
_module.args.opencloudPackage = pkgs.opencloud;
|
||||
_module.args.name = "opencloud";
|
||||
};
|
||||
opencloud-production = runTest {
|
||||
imports = [ ./opencloud.nix ];
|
||||
_module.args.opencloudPackage = pkgs.opencloud-production;
|
||||
_module.args.name = "opencloud-production";
|
||||
};
|
||||
openldap = runTest ./openldap.nix;
|
||||
openresty-lua = runTest ./openresty-lua.nix;
|
||||
opensearch = discoverTests (import ./opensearch.nix);
|
||||
@@ -1865,6 +1877,7 @@ in
|
||||
systemd-no-tainted = runTest ./systemd-no-tainted.nix;
|
||||
systemd-nspawn = runTest ./systemd-nspawn.nix;
|
||||
systemd-nspawn-configfile = runTest ./systemd-nspawn-configfile.nix;
|
||||
systemd-nsresourced-mountfsd = runTest ./systemd-nsresourced-mountfsd.nix;
|
||||
systemd-oomd = runTest ./systemd-oomd.nix;
|
||||
systemd-portabled = runTest ./systemd-portabled.nix;
|
||||
systemd-pstore = runTest ./systemd-pstore.nix;
|
||||
|
||||
@@ -26,7 +26,8 @@
|
||||
machine.succeed("atuin --version")
|
||||
|
||||
# Check shell integration - verify the init scripts can be sourced without error
|
||||
machine.succeed("bash -c 'eval \"$(atuin init bash)\"'")
|
||||
# bash init only runs in interactive shells; skip bashrc, which already sources it
|
||||
machine.succeed("bash --norc -ic 'eval \"$(atuin init bash)\"'")
|
||||
machine.succeed("zsh -c 'eval \"$(atuin init zsh)\"'")
|
||||
machine.succeed("fish -c 'atuin init fish | source'")
|
||||
|
||||
@@ -34,6 +35,8 @@
|
||||
machine.succeed("grep -q 'auto_sync = false' /etc/atuin/config.toml")
|
||||
|
||||
# Verify daemon socket unit is enabled
|
||||
machine.succeed("systemctl --user --machine=root@ is-enabled atuin-daemon.socket")
|
||||
# needs a running user manager for root
|
||||
machine.succeed("loginctl enable-linger root")
|
||||
machine.wait_until_succeeds("systemctl --user --machine=root@ is-enabled atuin-daemon.socket")
|
||||
'';
|
||||
}
|
||||
|
||||
132
nixos/tests/emacs/default.nix
Normal file
132
nixos/tests/emacs/default.nix
Normal file
@@ -0,0 +1,132 @@
|
||||
{
|
||||
lib,
|
||||
nodes,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
name = "emacs";
|
||||
meta.maintainers = lib.teams.emacs.members;
|
||||
|
||||
defaults =
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
options.tests.emacs = {
|
||||
package = lib.mkPackageOption pkgs "Emacs" {
|
||||
default = [ "emacs" ];
|
||||
example = [ "emacs-nox" ];
|
||||
};
|
||||
wrappedPackage = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = config.tests.emacs.package.pkgs.withPackages (epkgs: [
|
||||
epkgs.project-nix-store
|
||||
]);
|
||||
defaultText = lib.literalExpression ''
|
||||
package.pkgs.withPackages (epkgs: [ epkgs.project-nix-store ])
|
||||
'';
|
||||
readOnly = true;
|
||||
description = "Emacs wrapped by withPackages.";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nodes.local =
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.tests.emacs;
|
||||
mkEpkg = import ../../../pkgs/applications/editors/emacs/build-support/tests/mk-epkg.nix {
|
||||
inherit lib;
|
||||
};
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [
|
||||
# Make sure closure of this machine contains both unwrapped and wrapped Emacs
|
||||
# so that we can run them in the test script.
|
||||
cfg.wrappedPackage
|
||||
|
||||
# Tests
|
||||
(cfg.package.pkgs.callPackage (mkEpkg {
|
||||
pname = "nixos";
|
||||
src = ./nixos.el;
|
||||
}) { })
|
||||
]
|
||||
++ [
|
||||
cfg.package.pkgs.orderless
|
||||
pkgs.cmatrix
|
||||
];
|
||||
users.users.root.packages = [
|
||||
cfg.package.pkgs.dash
|
||||
pkgs.hello
|
||||
];
|
||||
|
||||
environment.etc.ssh-private-key = {
|
||||
source = (import ../ssh-keys.nix pkgs).snakeOilEd25519PrivateKey;
|
||||
mode = "0600";
|
||||
};
|
||||
programs.ssh.extraConfig = ''
|
||||
StrictHostKeyChecking=no
|
||||
IdentityFile=/etc/${config.environment.etc.ssh-private-key.target}
|
||||
'';
|
||||
systemd.targets.network-online.wantedBy = [ "multi-user.target" ];
|
||||
systemd.services.wait-ssh-to-remote = {
|
||||
description = "Wait for SSH to Remote";
|
||||
documentation = [
|
||||
"https://systemd.io/NETWORK_ONLINE/#modifying-the-meaning-of-network-onlinetarget"
|
||||
"man:systemd.special(7)"
|
||||
];
|
||||
after = [ "nss-lookup.target" ];
|
||||
before = [ "network-online.target" ];
|
||||
wantedBy = [ "network-online.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
path = [ config.programs.ssh.package ];
|
||||
script = ''
|
||||
until ssh -o ConnectTimeout=1 ${nodes.remote.networking.hostName} true
|
||||
do
|
||||
sleep 1
|
||||
done
|
||||
'';
|
||||
};
|
||||
|
||||
environment.sessionVariables = {
|
||||
EMACS_TEST_VERBOSE = 1; # Make ERT output verbose
|
||||
};
|
||||
};
|
||||
|
||||
nodes.remote = { pkgs, ... }: {
|
||||
environment.systemPackages = [
|
||||
pkgs.sl
|
||||
];
|
||||
security.sudo.enable = true;
|
||||
|
||||
services.openssh.enable = true;
|
||||
users.users.root.openssh.authorizedKeys.keys = [
|
||||
(import ../ssh-keys.nix pkgs).snakeOilEd25519PublicKey
|
||||
];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
for machine in (local, remote):
|
||||
machine.wait_for_unit("default.target")
|
||||
|
||||
for emacs in (
|
||||
"${lib.getExe nodes.local.tests.emacs.package}",
|
||||
"${lib.getExe nodes.local.tests.emacs.wrappedPackage}",
|
||||
):
|
||||
local.succeed(f'{emacs} --batch --load=nixos --funcall=ert-run-tests-batch-and-exit')
|
||||
'';
|
||||
}
|
||||
90
nixos/tests/emacs/nixos.el
Normal file
90
nixos/tests/emacs/nixos.el
Normal file
@@ -0,0 +1,90 @@
|
||||
;;; nixos.el --- Emacs tests related to Nix or NixOS -*- lexical-binding: t; -*-
|
||||
|
||||
;; Version: 0.1.0
|
||||
;; Package-Requires: ((emacs "29.1"))
|
||||
;; URL: https://example.com
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Emacs tests related to Nix or NixOS.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'ert)
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
(require 'woman)
|
||||
(require 'info)
|
||||
|
||||
;;;; Utils
|
||||
|
||||
(defun nixos--locate-eln-file (library)
|
||||
"Locate the natively-compiled LIBRARY file."
|
||||
(declare-function comp-el-to-eln-rel-filename "comp.c")
|
||||
(locate-eln-file (comp-el-to-eln-rel-filename (find-library-name library))))
|
||||
|
||||
(defun nixos--ancestor-dir-of-file-p (dir file)
|
||||
"Return t if DIR is an ancestor of FILE."
|
||||
(locate-dominating-file file
|
||||
(lambda (current-dir)
|
||||
(string= current-dir (file-name-as-directory dir)))))
|
||||
|
||||
(defun nixos--in-nix-profiles-p (file)
|
||||
"Return t if FILE is in nix profiles."
|
||||
(declare-function nix--profile-paths "site-start")
|
||||
(cl-loop for profile-dir in (nix--profile-paths)
|
||||
thereis (nixos--ancestor-dir-of-file-p profile-dir file)))
|
||||
|
||||
;;;; Tests
|
||||
|
||||
(ert-deftest nixos-packages-in-nix-profiles-are-available ()
|
||||
(ert-info ("nix system profile")
|
||||
(should (package-installed-p 'orderless)))
|
||||
(ert-info ("nix user profile")
|
||||
(should (package-installed-p 'dash))))
|
||||
|
||||
(ert-deftest nixos-aot-native-comp-eln-files-of-packages-in-nix-profiles-are-available ()
|
||||
(skip-unless (native-comp-available-p))
|
||||
(ert-info ("nix system profile")
|
||||
(should (nixos--in-nix-profiles-p (nixos--locate-eln-file "orderless"))))
|
||||
(ert-info ("nix user profile")
|
||||
(should (nixos--in-nix-profiles-p (nixos--locate-eln-file "dash")))))
|
||||
|
||||
(ert-deftest nixos-woman-can-find-manuals-in-nix-profiles ()
|
||||
(ert-info ("nix system profile")
|
||||
(should (woman-file-name "cmatrix")))
|
||||
(ert-info ("nix user profile")
|
||||
(should (woman-file-name "hello"))))
|
||||
|
||||
(ert-deftest nixos-info-manuals-of-packages-in-nix-profiles-are-available ()
|
||||
"Test https://debbugs.gnu.org/cgi/bugreport.cgi?bug=81105."
|
||||
(unless package--activated
|
||||
(package-activate-all))
|
||||
(ert-info ("nix system profile")
|
||||
(should (Info-find-file "orderless" t)))
|
||||
(ert-info ("nix user profile")
|
||||
(should (Info-find-file "dash" t))))
|
||||
|
||||
(ert-deftest nixos-tramp-knows-nix-specific-path ()
|
||||
;; Security wrappers are added to two PATH dirs:
|
||||
;; /run/wrappers/bin/ and /run/current-system/sw/bin.
|
||||
;; So, in addition to testing if the security wrapper can be found,
|
||||
;; we also test if the found security wrapper is the right one.
|
||||
(cl-loop
|
||||
for (program program-dir) in '(("sl")
|
||||
("sudo" "/run/wrappers/bin"))
|
||||
do
|
||||
(ert-info ((format "program %s is found remotely" program))
|
||||
(let ((found-program (let ((default-directory "/ssh:remote:"))
|
||||
(executable-find program t))))
|
||||
(should found-program)
|
||||
(when program-dir
|
||||
(should (equal found-program
|
||||
(expand-file-name program program-dir))))))))
|
||||
|
||||
(provide 'nixos)
|
||||
|
||||
;;; nixos.el ends here
|
||||
|
||||
;; Local Variables:
|
||||
;; checkdoc-force-docstrings-flag: nil
|
||||
;; End:
|
||||
72
nixos/tests/gpauth-tls.nix
Normal file
72
nixos/tests/gpauth-tls.nix
Normal file
@@ -0,0 +1,72 @@
|
||||
{ config, ... }:
|
||||
|
||||
{
|
||||
name = "gpauth-tls";
|
||||
|
||||
meta.maintainers = config.node.pkgs.gpauth.meta.maintainers;
|
||||
|
||||
nodes.machine =
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
httpsServer = pkgs.writeText "gpauth-test-server.py" ''
|
||||
import ssl
|
||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||
|
||||
class Handler(BaseHTTPRequestHandler):
|
||||
def do_GET(self):
|
||||
body = b"<html><body>authenticated</body></html>"
|
||||
self.send_response(200)
|
||||
self.send_header("Content-Type", "text/html")
|
||||
self.send_header("Content-Length", str(len(body)))
|
||||
self.send_header("saml-auth-status", "1")
|
||||
self.send_header("saml-username", "fixture-user")
|
||||
self.send_header("prelogin-cookie", "fixture-cookie")
|
||||
self.end_headers()
|
||||
self.wfile.write(body)
|
||||
|
||||
def log_message(self, format, *args):
|
||||
pass
|
||||
|
||||
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
||||
context.load_cert_chain("cert.pem", "key.pem")
|
||||
|
||||
server = HTTPServer(("127.0.0.1", 4443), Handler)
|
||||
server.socket = context.wrap_socket(server.socket, server_side=True)
|
||||
server.serve_forever()
|
||||
'';
|
||||
in
|
||||
{
|
||||
imports = [ ./common/x11.nix ];
|
||||
|
||||
environment.systemPackages = [ pkgs.gpauth ];
|
||||
|
||||
systemd.services.gpauth-test-server = {
|
||||
description = "gpauth test SAML endpoint";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
preStart = ''
|
||||
${pkgs.openssl}/bin/openssl req -x509 -newkey rsa:2048 -noenc \
|
||||
-subj /CN=localhost -keyout key.pem -out cert.pem
|
||||
'';
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.python3}/bin/python ${httpsServer}";
|
||||
RuntimeDirectory = "gpauth-test-server";
|
||||
WorkingDirectory = "/run/gpauth-test-server";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_x()
|
||||
machine.wait_for_unit("gpauth-test-server.service")
|
||||
machine.wait_for_open_port(4443)
|
||||
|
||||
output = machine.succeed(
|
||||
"DISPLAY=:0 timeout 30s gpauth localhost "
|
||||
"--saml-request https://127.0.0.1:4443/ "
|
||||
# self-signed cert is used
|
||||
"--ignore-tls-errors"
|
||||
)
|
||||
assert "fixture-user" in output
|
||||
assert "fixture-cookie" in output
|
||||
'';
|
||||
}
|
||||
22
nixos/tests/nixos-test-driver/qmp-api-error.nix
Normal file
22
nixos/tests/nixos-test-driver/qmp-api-error.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
name = "qmp-api-error";
|
||||
|
||||
nodes.machine = { };
|
||||
|
||||
testScript = ''
|
||||
from test_driver.machine.qmp import QMPAPIError
|
||||
|
||||
machine.start()
|
||||
|
||||
assert machine.qmp_client is not None
|
||||
|
||||
try:
|
||||
machine.qmp_client.send("this-command-does-not-exist")
|
||||
except QMPAPIError as error:
|
||||
t.assertEqual(error.class_name, "CommandNotFound")
|
||||
t.assertTrue(error.description)
|
||||
t.assertIsNone(error.transaction_id)
|
||||
else:
|
||||
raise AssertionError("expected QMPAPIError")
|
||||
'';
|
||||
}
|
||||
@@ -1,4 +1,10 @@
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
name,
|
||||
opencloudPackage,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
certs = import ./common/acme/server/snakeoil-certs.nix;
|
||||
@@ -49,7 +55,7 @@ let
|
||||
in
|
||||
|
||||
{
|
||||
name = "opencloud";
|
||||
inherit name;
|
||||
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
christoph-heiss
|
||||
@@ -69,6 +75,7 @@ in
|
||||
|
||||
services.opencloud = {
|
||||
enable = true;
|
||||
package = opencloudPackage;
|
||||
url = "https://${domain}:9200";
|
||||
environment = {
|
||||
ADMIN_PASSWORD = adminPassword;
|
||||
|
||||
68
nixos/tests/systemd-nsresourced-mountfsd.nix
Normal file
68
nixos/tests/systemd-nsresourced-mountfsd.nix
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
name = "systemd-nsresourced-mountfsd";
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ raitobezarius ];
|
||||
|
||||
nodes.machine = { config, ... }: {
|
||||
# Currently, kernel BTF enabled systemd is not the default yet.
|
||||
systemd.package = config.boot.kernelPackages.systemd;
|
||||
systemd.additionalUpstreamSystemUnits = [
|
||||
"systemd-nsresourced.socket"
|
||||
"systemd-nsresourced.service"
|
||||
"systemd-mountfsd.socket"
|
||||
"systemd-mountfsd.service"
|
||||
];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
|
||||
with subtest("BPF LSM is active"):
|
||||
lsm = machine.succeed("cat /sys/kernel/security/lsm")
|
||||
assert "bpf" in lsm, f"BPF LSM is not active: {lsm}"
|
||||
|
||||
with subtest("nsresourced and mountfsd sockets are available"):
|
||||
machine.systemctl("start systemd-nsresourced.socket systemd-mountfsd.socket")
|
||||
machine.wait_for_unit("systemd-nsresourced.socket")
|
||||
machine.wait_for_unit("systemd-mountfsd.socket")
|
||||
|
||||
with subtest("nsresourced serves its varlink interface and delegates a user namespace"):
|
||||
machine.succeed("varlinkctl introspect /run/systemd/userdb/io.systemd.NamespaceResource")
|
||||
machine.succeed(
|
||||
"unshare --user varlinkctl --exec call "
|
||||
"--push-fd=/proc/self/ns/user "
|
||||
"/run/systemd/userdb/io.systemd.NamespaceResource "
|
||||
"io.systemd.NamespaceResource.AllocateUserRange "
|
||||
"'{\"name\":\"nixos-test\",\"size\":65536,\"userNamespaceFileDescriptor\":0}' "
|
||||
"-- cat /proc/self/uid_map"
|
||||
)
|
||||
|
||||
with subtest("mountfsd serves its varlink interface"):
|
||||
machine.succeed("varlinkctl introspect /run/systemd/io.systemd.MountFileSystem")
|
||||
|
||||
with subtest("mountfsd mounts a DDI on behalf of a client"):
|
||||
machine.succeed("mkdir -p /tmp/ddi-defs")
|
||||
machine.succeed("echo '[Partition]' > /tmp/ddi-defs/10-root.conf")
|
||||
machine.succeed("echo 'Type=root' >> /tmp/ddi-defs/10-root.conf")
|
||||
machine.succeed("echo 'Format=ext4' >> /tmp/ddi-defs/10-root.conf")
|
||||
machine.succeed(
|
||||
"PATH=${pkgs.e2fsprogs}/bin:$PATH "
|
||||
"systemd-repart --empty=create --size=64M "
|
||||
"--definitions=/tmp/ddi-defs --offline=yes /var/tmp/ddi.raw"
|
||||
)
|
||||
# SYSTEMD_USE_MOUNTFSD forces systemd-dissect to go through
|
||||
# systemd-mountfsd (and systemd-nsresourced) instead of mounting the
|
||||
# image locally.
|
||||
# NOTE: image-policy should be restricted but I failed to do so.
|
||||
machine.succeed(
|
||||
"SYSTEMD_USE_MOUNTFSD=1 systemd-dissect "
|
||||
"--image-policy='*' --mtree /var/tmp/ddi.raw"
|
||||
)
|
||||
'';
|
||||
}
|
||||
@@ -64,7 +64,7 @@
|
||||
setxkbmap,
|
||||
lib,
|
||||
stdenv,
|
||||
systemd,
|
||||
systemdLibs,
|
||||
unzip,
|
||||
usbutils,
|
||||
which,
|
||||
@@ -190,7 +190,7 @@ let
|
||||
libpng
|
||||
nspr
|
||||
nss_latest
|
||||
systemd
|
||||
systemdLibs
|
||||
|
||||
# For GTKLookAndFeel
|
||||
gtk3
|
||||
|
||||
@@ -317,7 +317,7 @@ rec {
|
||||
};
|
||||
|
||||
meta = {
|
||||
homepage = "http://eclipsecolorthemes.org/";
|
||||
homepage = "https://github.com/eclipse-color-theme/eclipse-color-theme";
|
||||
description = "Plugin to switch color themes conveniently and without side effects";
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
|
||||
license = lib.licenses.epl10;
|
||||
|
||||
@@ -38,12 +38,16 @@ lib.extendMkDerivation {
|
||||
args.unpackCmd or ''
|
||||
case "$curSrc" in
|
||||
*.el)
|
||||
# keep original source filename without the hash
|
||||
local filename=$(basename "$curSrc")
|
||||
filename="''${filename:33}"
|
||||
cp $curSrc $filename
|
||||
chmod +w $filename
|
||||
sourceRoot="."
|
||||
if [ -f "$curSrc" ]; then
|
||||
# keep original source filename without the hash
|
||||
local filename=$(basename "$curSrc")
|
||||
filename="''${filename:33}"
|
||||
cp $curSrc $filename
|
||||
chmod +w $filename
|
||||
sourceRoot="."
|
||||
else
|
||||
_defaultUnpack "$curSrc"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
_defaultUnpack "$curSrc"
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
lib,
|
||||
}:
|
||||
|
||||
{
|
||||
pname,
|
||||
version ? "0.1.0", # a dummy value
|
||||
src ? lib.path.append ./. "${pname}.el",
|
||||
doLint ? true,
|
||||
}:
|
||||
|
||||
{
|
||||
melpaBuild,
|
||||
package-lint,
|
||||
}:
|
||||
melpaBuild {
|
||||
inherit pname version src;
|
||||
turnCompilationWarningToError = true;
|
||||
|
||||
packageRequires = lib.optional doLint package-lint;
|
||||
|
||||
doInstallCheck = doLint;
|
||||
preInstallCheck = ''
|
||||
lintEachFile() {
|
||||
find $out/share/emacs \
|
||||
-type f -name '*.el' \
|
||||
-not -name "*-pkg.el" -not -name "*-autoloads.el" \
|
||||
-print0 \
|
||||
| xargs --verbose -0 -I {} -n 1 -P "$NIX_BUILD_CORES" "$@"
|
||||
}
|
||||
|
||||
lintEachFile \
|
||||
emacs --batch \
|
||||
--funcall=package-activate-all \
|
||||
--funcall=package-lint-batch-and-exit "{}"
|
||||
|
||||
lintEachFile \
|
||||
emacs --batch \
|
||||
"{}" \
|
||||
--eval='(setopt checkdoc-arguments-in-order-flag t)' \
|
||||
--funcall=checkdoc-batch
|
||||
|
||||
lintEachFile \
|
||||
emacs --batch \
|
||||
"{}" \
|
||||
--eval='
|
||||
(progn
|
||||
;; load indentation settings, if any, see (info "(emacs) Lisp Indent")
|
||||
(eval-buffer)
|
||||
(indent-region (point-min) (point-max))
|
||||
(with-current-buffer
|
||||
(diff-no-select buffer-file-name (current-buffer) nil t)
|
||||
(goto-char (point-min))
|
||||
(condition-case nil
|
||||
(let ((case-fold-search nil))
|
||||
(search-forward "Diff finished (no differences)"))
|
||||
(search-failed
|
||||
(princ (buffer-string))
|
||||
(error "%s" "File indentation is wrong")))))'
|
||||
'';
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
runCommand,
|
||||
emacs,
|
||||
writeShellApplication,
|
||||
}:
|
||||
|
||||
let
|
||||
run-test = writeShellApplication {
|
||||
name = "run-test";
|
||||
runtimeInputs = [
|
||||
emacs
|
||||
];
|
||||
runtimeEnv = {
|
||||
EMACS_TEST_VERBOSE = 1; # make ERT output verbose
|
||||
};
|
||||
text = ''
|
||||
emacs --batch \
|
||||
--load=${./with-packages.el} \
|
||||
--eval="(ert-run-tests-batch-and-exit '(tag :shared-with-unwrapped))"
|
||||
'';
|
||||
};
|
||||
in
|
||||
runCommand "test-emacs-unwrapped"
|
||||
{
|
||||
nativeBuildInputs = [
|
||||
run-test
|
||||
];
|
||||
}
|
||||
''
|
||||
run-test
|
||||
|
||||
touch $out
|
||||
''
|
||||
@@ -1,9 +1,17 @@
|
||||
;;; with-packages.el --- Utils and ERT tests for withPackages -*- lexical-binding: t; -*-
|
||||
|
||||
;; Version: 0.1.0
|
||||
;; Package-Requires: ((emacs "29.1"))
|
||||
;; URL: https://example.com
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Utils and ERT tests for emacs.pkgs.withPackages.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'ert)
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
(require 'cl-lib)
|
||||
(require 'server)
|
||||
(require 'info)
|
||||
|
||||
@@ -26,33 +34,46 @@ which is generated by nix when building this elisp package."
|
||||
(`(,store-dir) store-dir))
|
||||
(error "@storeDir@"))))
|
||||
|
||||
(defun with-packages--nix-store-file-p (file)
|
||||
"Return t if FILE is in nix store."
|
||||
(defun with-packages--in-nix-store-p (file-or-dir)
|
||||
"Return t if FILE-OR-DIR is in nix store."
|
||||
(cl-loop
|
||||
with store-dir = (with-packages--nix-store-dir)
|
||||
for parent = (file-name-parent-directory file) then (file-name-parent-directory parent)
|
||||
for parent = (file-name-parent-directory file-or-dir) then (file-name-parent-directory parent)
|
||||
while parent
|
||||
thereis (string= parent store-dir)))
|
||||
|
||||
(defun with-packages--locate-eln-file (library)
|
||||
"Locate the natively-compiled LIBRARY file."
|
||||
(declare-function comp-el-to-eln-rel-filename "comp.c")
|
||||
(locate-eln-file (comp-el-to-eln-rel-filename (find-library-name library))))
|
||||
|
||||
(defun with-packages-unwrapped-site-start-is-loaded ()
|
||||
(fboundp 'nix--profile-paths))
|
||||
|
||||
(defun with-packages-eval-in-sub-emacs (form)
|
||||
"Evaluate FORM in a subprocess Emacs and return its result."
|
||||
(cl-defun with-packages-eval-in-sub-emacs (form &optional (emacs-program "emacs"))
|
||||
"Evaluate FORM in a subprocess Emacs and return its result.
|
||||
EMACS-PROGRAM specifies the subprocess Emacs to start."
|
||||
(pcase-exhaustive
|
||||
(process-lines "emacs" "--batch"
|
||||
(process-lines emacs-program "--batch"
|
||||
"--eval" (format "(prin1 %S)" form))
|
||||
(`(,result) (read result))))
|
||||
|
||||
(defvar with-packages-unwrapped-emacs-program nil
|
||||
"Absoluate file of an unwrapped Emacs binary.
|
||||
Set this variable before running related tests.")
|
||||
|
||||
;;;; Tests that can be run in a batch Emacs
|
||||
|
||||
(ert-deftest with-packages-requested-packages-are-available ()
|
||||
(should (package-installed-p 'dash))
|
||||
(should (package-installed-p 'flx-ido)))
|
||||
(should (package-installed-p 'flx-ido))
|
||||
;; Test 23d4bfb6661ca57a9e331a2cf4184232d38ac38b.
|
||||
(ert-info ("unwrapped subprocess Emacs does not have requested packages installed")
|
||||
(should (file-name-absolute-p with-packages-unwrapped-emacs-program))
|
||||
(should-not (with-packages-eval-in-sub-emacs '(package-installed-p 'dash)
|
||||
with-packages-unwrapped-emacs-program))
|
||||
(should-not (with-packages-eval-in-sub-emacs '(package-installed-p 'flx-ido)
|
||||
with-packages-unwrapped-emacs-program))))
|
||||
|
||||
(ert-deftest with-packages-deps-of-requested-packages-are-available ()
|
||||
"Test https://github.com/NixOS/nixpkgs/issues/388829."
|
||||
@@ -71,18 +92,41 @@ which is generated by nix when building this elisp package."
|
||||
(ert-deftest with-packages-aot-native-comp-eln-files-are-available ()
|
||||
(skip-unless (native-comp-available-p))
|
||||
(ert-info ("search eln files of Emacs proper")
|
||||
(should (with-packages--nix-store-file-p (with-packages--locate-eln-file "files"))))
|
||||
(should (with-packages--in-nix-store-p (with-packages--locate-eln-file "files"))))
|
||||
(ert-info ("search eln files of requested packages")
|
||||
(should (with-packages--nix-store-file-p (with-packages--locate-eln-file "dash")))))
|
||||
(should (with-packages--in-nix-store-p (with-packages--locate-eln-file "dash"))))
|
||||
;; `load' does not try to find .eln files if it cannot find .elc or .el files.
|
||||
;; Assuming unwrapped subprocess Emacs cannot find .elc or .el files of requested packages,
|
||||
;; which is tested in `with-packages-requested-packages-are-available',
|
||||
;; probably, the tested code in our site-start.el and this test are unnecessary.
|
||||
;; In addition, what we really want to test is that unwrapped subprocess Emacs does not
|
||||
;; see eln files of requested packages, which is not easy to test.
|
||||
;; So we test an easier-to-test proxy, which unfortunately can be seen as
|
||||
;; implementation detail of the wrapper.
|
||||
(ert-info ("subprocess does not see wrapper-modified EMACSNATIVELOADPATH")
|
||||
(let ((eln-dirs-added-by-wrapper
|
||||
(cl-set-difference
|
||||
(parse-colon-path (getenv-internal "EMACSNATIVELOADPATH" initial-environment))
|
||||
(parse-colon-path (getenv "EMACSNATIVELOADPATH"))
|
||||
:test #'string=)))
|
||||
(should (equal (length eln-dirs-added-by-wrapper) 1))
|
||||
(let ((eln-dir-added-by-wrapper (car eln-dirs-added-by-wrapper)))
|
||||
(should (with-packages--in-nix-store-p eln-dir-added-by-wrapper))
|
||||
(cl-flet ((ancestor-dir-of-file-p (dir file)
|
||||
(locate-dominating-file file
|
||||
(lambda (current-dir)
|
||||
(string= current-dir dir)))))
|
||||
(should (ancestor-dir-of-file-p eln-dir-added-by-wrapper
|
||||
(with-packages--locate-eln-file "dash"))))))))
|
||||
|
||||
(ert-deftest with-packages-unwrapped-site-start-is-loaded ()
|
||||
(should (with-packages-unwrapped-site-start-is-loaded)))
|
||||
|
||||
(ert-deftest with-packages-binaries-of-requested-packages-are-available ()
|
||||
(ert-info ("find binary via PATH")
|
||||
(should (equal (call-process-shell-command "cowsay") 0)))
|
||||
(should (equal (call-process-shell-command "hello") 0)))
|
||||
(ert-info ("find binary via exec-path")
|
||||
(should (executable-find "cowsay")))
|
||||
(should (executable-find "hello")))
|
||||
(ert-info ("each item is unique")
|
||||
(cl-flet ((item-should-be-unique (items)
|
||||
(should (equal items
|
||||
@@ -101,16 +145,44 @@ which is generated by nix when building this elisp package."
|
||||
(skip-unless (treesit-available-p))
|
||||
(should (treesit-language-available-p 'nix)))
|
||||
|
||||
(ert-deftest with-packages-invocation-name-and-directory-are-wrapped ()
|
||||
"Test https://github.com/NixOS/nixpkgs/pull/361145."
|
||||
;; Generally, to a build filename, `expand-file-name' is better than `concat',
|
||||
;; because `expand-file-name' accepts a dir not ending with "/".
|
||||
;; We use `concat' because we want to support existing `concat' usages, such as esup.el:
|
||||
;; https://github.com/jschaf/esup/blob/4b49c8d599d4cc0fbf994e9e54a9c78e5ab62a5f/esup.el#L161
|
||||
(ert-info ("wrapped Emacs has correct invocation-name and -directory")
|
||||
(should (equal (file-truename (executable-find "emacs"))
|
||||
(concat invocation-directory invocation-name))))
|
||||
(ert-info ("unwrapped subprocess Emacs has correct invocation-name and -directory")
|
||||
(should (file-name-absolute-p with-packages-unwrapped-emacs-program))
|
||||
(should
|
||||
(equal with-packages-unwrapped-emacs-program
|
||||
(with-packages-eval-in-sub-emacs '(concat invocation-directory invocation-name)
|
||||
with-packages-unwrapped-emacs-program)))))
|
||||
|
||||
(ert-deftest with-packages-c-source-is-available ()
|
||||
:tags '(:shared-with-unwrapped)
|
||||
(let ((function-to-find 'eval))
|
||||
(ert-info ("this function is written in C")
|
||||
(should (subr-primitive-p (symbol-function function-to-find))))
|
||||
(ert-info ("C source code of this function can be found")
|
||||
(should find-function-C-source-directory)
|
||||
(should (cdr (find-function-noselect function-to-find))))))
|
||||
|
||||
;;;; Utils for non-batch tests
|
||||
|
||||
(defmacro define-with-packages-non-batch-test-via-bound-and-true-p (test-name)
|
||||
"Define a function named TEST-NAME which tests symbol TEST-NAME."
|
||||
(declare (indent 1) (debug (symbolp)))
|
||||
(cl-check-type test-name symbol)
|
||||
`(defun ,test-name ()
|
||||
(list (bound-and-true-p ,test-name))))
|
||||
|
||||
(defmacro define-with-packages-non-batch-tests-via-bound-and-true-p (&rest test-names)
|
||||
"See also `define-with-packages-non-batch-test-via-bound-and-true-p'."
|
||||
"TEST-NAMES is a list of symbols.
|
||||
Each of them is passed to
|
||||
`define-with-packages-non-batch-test-via-bound-and-true-p'."
|
||||
(declare (indent 0) (debug (&rest symbolp)))
|
||||
`(progn
|
||||
,@(cl-loop
|
||||
@@ -137,11 +209,20 @@ Return test result, a list of values. Each is non-nil if the test passes."
|
||||
;; Run the non-batch test and return test result.
|
||||
(eval-in-non-batch-emacs `(,test-name)))))
|
||||
|
||||
(defmacro define-with-packages-non-batch-ert-test (test-name)
|
||||
"See `with-packages--run-non-batch-test' for how the test is run."
|
||||
(declare (indent 1) (debug (symbolp)))
|
||||
(defmacro define-with-packages-non-batch-ert-test (test-name &rest ert-forms)
|
||||
"Define an ERT test named TEST-NAME.
|
||||
|
||||
That test first asks a non-batch Emacs to run function TEST-NAME.
|
||||
See `with-packages--run-non-batch-test' for how function TEST-NAME is run.
|
||||
The test then retrieves the result of function TEST-NAME.
|
||||
Depending on the result, the test passes or fails.
|
||||
|
||||
ERT-FORMS are placed at the start of the ERT test,
|
||||
which can be used to add skip condition and :expected-result."
|
||||
(declare (indent 1) (debug (symbolp &rest sexp)))
|
||||
(cl-check-type test-name symbol)
|
||||
`(ert-deftest ,test-name ()
|
||||
,@ert-forms
|
||||
(should (stringp with-packages-non-batch-emacs-socket))
|
||||
(should (file-readable-p with-packages-non-batch-emacs-socket))
|
||||
(let ((test-result (with-packages--run-non-batch-test (quote ,test-name))))
|
||||
@@ -152,7 +233,8 @@ Return test result, a list of values. Each is non-nil if the test passes."
|
||||
collect (or item t)))))))
|
||||
|
||||
(defmacro define-with-packages-non-batch-ert-tests (&rest test-names)
|
||||
"See also `define-with-packages-non-batch-ert-test'."
|
||||
"TEST-NAMES is a list of symbols.
|
||||
Each of them is passed to `define-with-packages-non-batch-ert-test'."
|
||||
(declare (indent 0) (debug (&rest symbolp)))
|
||||
`(progn
|
||||
,@(cl-loop for test-name in test-names
|
||||
@@ -168,7 +250,7 @@ Return test result, a list of values. Each is non-nil if the test passes."
|
||||
(defun with-packages-unwrapped-site-start-is-loaded-quietly ()
|
||||
(list (with-packages-unwrapped-site-start-is-loaded)
|
||||
(not (save-excursion
|
||||
(with-current-buffer "*Messages*"
|
||||
(with-current-buffer (messages-buffer)
|
||||
(goto-char (point-min))
|
||||
(save-match-data
|
||||
(re-search-forward (rx line-start
|
||||
@@ -181,28 +263,34 @@ Return test result, a list of values. Each is non-nil if the test passes."
|
||||
(defun with-packages-no-jit-native-comp ()
|
||||
"Test no JIT native-comp is triggered during non-batch tests.
|
||||
This is a regression test for URL `https://github.com/NixOS/nixpkgs/pull/538964'."
|
||||
(if (not (native-comp-available-p))
|
||||
(list t)
|
||||
;; Give Emacs some time to generate JIT native-comp results.
|
||||
;; It is possible that this test passes even if there is JIT native-comp
|
||||
;; because we use a hardcoded time span as the synchronization point.
|
||||
;; Ideally, we should use a more robust synchronization point.
|
||||
(sleep-for 2.5)
|
||||
(list (not (cl-loop for buffer being each buffer
|
||||
thereis (string= (buffer-name buffer)
|
||||
"*Async-native-compile-log*")))
|
||||
(let ((eln-dir (car native-comp-eln-load-path)))
|
||||
(or (directory-empty-p eln-dir)
|
||||
(and (not (file-exists-p eln-dir))
|
||||
(file-exists-p (file-name-parent-directory eln-dir))))))))
|
||||
;; Give Emacs some time to generate JIT native-comp results.
|
||||
;; It is possible that this test passes even if there is JIT native-comp
|
||||
;; because we use a hardcoded time span as the synchronization point.
|
||||
;; Ideally, we should use a more robust synchronization point.
|
||||
(sleep-for 2.5)
|
||||
(defvar native-comp-eln-load-path)
|
||||
(defvar comp-async-buffer-name)
|
||||
(list (not (cl-loop for buffer being each buffer
|
||||
thereis (string= (buffer-name buffer) comp-async-buffer-name)))
|
||||
(let ((eln-dir (car native-comp-eln-load-path)))
|
||||
(or (directory-empty-p eln-dir)
|
||||
(and (not (file-exists-p eln-dir))
|
||||
(file-exists-p (file-name-parent-directory eln-dir)))))))
|
||||
|
||||
(define-with-packages-non-batch-ert-tests
|
||||
with-packages-early-default-is-loaded
|
||||
with-packages-default-is-loaded
|
||||
with-packages-early-default-is-loaded-before-default
|
||||
with-packages-unwrapped-site-start-is-loaded-quietly
|
||||
with-packages-no-jit-native-comp)
|
||||
with-packages-unwrapped-site-start-is-loaded-quietly)
|
||||
|
||||
(define-with-packages-non-batch-ert-test
|
||||
with-packages-no-jit-native-comp
|
||||
(skip-unless (native-comp-available-p)))
|
||||
|
||||
(provide 'with-packages)
|
||||
|
||||
;;; with-packages.el ends here
|
||||
|
||||
;; Local Variables:
|
||||
;; checkdoc-force-docstrings-flag: nil
|
||||
;; End:
|
||||
@@ -0,0 +1,73 @@
|
||||
{
|
||||
runCommand,
|
||||
emacs,
|
||||
hello,
|
||||
replaceVarsWith,
|
||||
lib,
|
||||
writeShellApplication,
|
||||
}:
|
||||
|
||||
let
|
||||
mkEpkg = import ./mk-epkg.nix { inherit lib; };
|
||||
|
||||
run-test = writeShellApplication {
|
||||
name = "run-test";
|
||||
runtimeInputs = [
|
||||
(emacs.pkgs.withPackages (epkgs: [
|
||||
epkgs.dash
|
||||
epkgs.flx-ido
|
||||
(epkgs.callPackage (mkEpkg {
|
||||
pname = "with-packages";
|
||||
src = replaceVarsWith {
|
||||
src = ./with-packages.el;
|
||||
replacements = { inherit (builtins) storeDir; };
|
||||
|
||||
# generate a file in a store path dir
|
||||
# /nix/store/hash-with-packages.el/with-packages.el
|
||||
# instead of a store path file, which checkdoc doesn't like
|
||||
# /nix/store/hash-with-packages.el
|
||||
dir = "/";
|
||||
};
|
||||
}) { })
|
||||
(epkgs.callPackage (mkEpkg {
|
||||
pname = "early-default";
|
||||
doLint = false; # no need to lint this simple file
|
||||
}) { })
|
||||
(epkgs.callPackage (mkEpkg {
|
||||
pname = "default";
|
||||
doLint = false; # no need to lint this simple file
|
||||
}) { })
|
||||
hello
|
||||
(epkgs.treesit-grammars.with-grammars (ps: [ ps.tree-sitter-nix ]))
|
||||
]))
|
||||
];
|
||||
runtimeEnv = {
|
||||
# emulate a default NixOS env where INFOPATH is set like this (not ending with a ":")
|
||||
INFOPATH = "/fake-info-dir1:/fake-info-dir2";
|
||||
EMACS_TEST_VERBOSE = 1; # make ERT output verbose
|
||||
};
|
||||
text = ''
|
||||
# Give Emacs a HOME to emulate a real user environment.
|
||||
HOME="$PWD"
|
||||
|
||||
nonBatchEmacsSocket="$PWD/non-batch-emacs-socket"
|
||||
emacs --daemon="$nonBatchEmacsSocket"
|
||||
|
||||
emacs --batch --load=with-packages \
|
||||
--eval="(setq with-packages-non-batch-emacs-socket \"$nonBatchEmacsSocket\")" \
|
||||
--eval='(setq with-packages-unwrapped-emacs-program "${lib.getExe emacs}")' \
|
||||
--funcall=ert-run-tests-batch-and-exit
|
||||
'';
|
||||
};
|
||||
in
|
||||
runCommand "test-emacs-withPackages-wrapper"
|
||||
{
|
||||
nativeBuildInputs = [
|
||||
run-test
|
||||
];
|
||||
}
|
||||
''
|
||||
run-test
|
||||
|
||||
touch $out
|
||||
''
|
||||
@@ -1,51 +0,0 @@
|
||||
{
|
||||
runCommand,
|
||||
emacs,
|
||||
writeText,
|
||||
cowsay,
|
||||
replaceVars,
|
||||
}:
|
||||
|
||||
let
|
||||
mkEpkg =
|
||||
pname: src: melpaBuild:
|
||||
melpaBuild {
|
||||
inherit pname src;
|
||||
version = "0.1.0"; # a dummy value
|
||||
turnCompilationWarningToError = true;
|
||||
};
|
||||
in
|
||||
runCommand "test-emacs-withPackages-wrapper"
|
||||
{
|
||||
nativeBuildInputs = [
|
||||
(emacs.pkgs.withPackages (epkgs: [
|
||||
epkgs.dash
|
||||
epkgs.flx-ido
|
||||
(mkEpkg "with-packages" (replaceVars ./with-packages.el {
|
||||
inherit (builtins) storeDir;
|
||||
}) epkgs.melpaBuild)
|
||||
(mkEpkg "early-default" ./early-default.el epkgs.melpaBuild)
|
||||
(mkEpkg "default" ./default.el epkgs.melpaBuild)
|
||||
cowsay
|
||||
(epkgs.treesit-grammars.with-grammars (ps: [ ps.tree-sitter-nix ]))
|
||||
]))
|
||||
];
|
||||
env = {
|
||||
# emulate a default NixOS env where INFOPATH is set like this (not ending with a ":")
|
||||
INFOPATH = "/fake-info-dir1:/fake-info-dir2";
|
||||
EMACS_TEST_VERBOSE = 1; # make ERT output verbose
|
||||
};
|
||||
}
|
||||
''
|
||||
# Give Emacs a HOME to emulate a real user environment.
|
||||
HOME="$PWD"
|
||||
|
||||
nonBatchEmacsSocket="$PWD/non-batch-emacs-socket"
|
||||
emacs --daemon="$nonBatchEmacsSocket"
|
||||
|
||||
emacs --batch --load=with-packages \
|
||||
--eval="(setq with-packages-non-batch-emacs-socket \"$nonBatchEmacsSocket\")" \
|
||||
--funcall=ert-run-tests-batch-and-exit
|
||||
|
||||
touch $out
|
||||
''
|
||||
@@ -175,6 +175,37 @@ runCommand (lib.appendToName "with-packages" emacs).name
|
||||
${lib.optionalString withTreeSitter ''
|
||||
(add-to-list 'treesit-extra-load-path "$out/lib/")
|
||||
''}
|
||||
|
||||
;; Remove wrapper-added dir from EMACSLOADPATH so it's not propagated
|
||||
;; to any other Emacsen that might be started as subprocesses.
|
||||
;; Also do it for EMACSNATIVELOADPATH, which probably unnecessary.
|
||||
(let ((restore-load-path
|
||||
(lambda (load-path-env-var wrapper-dir-env-var)
|
||||
(when-let* ((wrapper-dir (getenv wrapper-dir-env-var)))
|
||||
(setenv wrapper-dir-env-var nil)
|
||||
(when-let* ((env-load-path (getenv load-path-env-var)))
|
||||
(let* ((env-load-path-list (split-string env-load-path
|
||||
path-separator))
|
||||
(restored-env-load-path-list (remove wrapper-dir
|
||||
env-load-path-list)))
|
||||
(setenv load-path-env-var
|
||||
(when restored-env-load-path-list
|
||||
(string-join restored-env-load-path-list
|
||||
path-separator)))))))))
|
||||
(funcall restore-load-path
|
||||
"EMACSLOADPATH" "emacsWithPackages_siteLisp")
|
||||
(funcall restore-load-path
|
||||
"EMACSNATIVELOADPATH" "emacsWithPackages_siteLispNative"))
|
||||
|
||||
(let ((set-from-env (lambda (symbol env-var &optional modify)
|
||||
(when-let* ((value (getenv env-var)))
|
||||
(set symbol (funcall (or modify #'identity) value))
|
||||
(setenv env-var nil)))))
|
||||
(funcall set-from-env
|
||||
'invocation-directory "emacsWithPackages_invocationDirectory"
|
||||
#'file-name-as-directory)
|
||||
(funcall set-from-env
|
||||
'invocation-name "emacsWithPackages_invocationName"))
|
||||
EOF
|
||||
|
||||
# Generate a subdirs.el that statically adds all subdirectories to load-path.
|
||||
|
||||
@@ -58,13 +58,13 @@ in
|
||||
melpaBuild (finalAttrs: {
|
||||
pname = "ghostel";
|
||||
|
||||
version = "0.56.0";
|
||||
version = "0.57.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "dakra";
|
||||
repo = "ghostel";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-NpfnlggAcThNw9uY7Uq4qFPEJ+md8aZ8i32CQSUKz+w=";
|
||||
hash = "sha256-vPegePT5n11cI+eq9VWl0u068b2o50A4Wo8qcdYwJ34=";
|
||||
};
|
||||
|
||||
# these can be put into mkModule, but we put them here to ease user overrideAttrs
|
||||
|
||||
@@ -485,7 +485,15 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
pkgs = lib.recurseIntoAttrs (emacsPackagesFor finalAttrs.finalPackage);
|
||||
tests = {
|
||||
inherit (nixosTests) emacs-daemon;
|
||||
withPackages = callPackage ./build-support/wrapper-test {
|
||||
nixos = nixosTests.emacs.extendNixOS {
|
||||
module = {
|
||||
tests.emacs.package = finalAttrs.finalPackage;
|
||||
};
|
||||
};
|
||||
withPackages = callPackage ./build-support/tests/with-packages.nix {
|
||||
emacs = finalAttrs.finalPackage;
|
||||
};
|
||||
unwrapped = callPackage ./build-support/tests/unwrapped.nix {
|
||||
emacs = finalAttrs.finalPackage;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -16,38 +16,10 @@ least specific (the system profile)"
|
||||
(when (file-exists-p default-directory)
|
||||
(setq load-path (cons default-directory load-path))
|
||||
(normal-top-level-add-subdirs-to-load-path))))
|
||||
|
||||
;;; Remove wrapper site-lisp from EMACSLOADPATH so it's not propagated
|
||||
;;; to any other Emacsen that might be started as subprocesses.
|
||||
(let ((wrapper-site-lisp (getenv "emacsWithPackages_siteLisp"))
|
||||
(env-load-path (getenv "EMACSLOADPATH")))
|
||||
(when wrapper-site-lisp
|
||||
(setenv "emacsWithPackages_siteLisp" nil))
|
||||
(when (and wrapper-site-lisp env-load-path)
|
||||
(let* ((env-list (split-string env-load-path ":"))
|
||||
(new-env-list (delete wrapper-site-lisp env-list)))
|
||||
(setenv "EMACSLOADPATH" (when new-env-list
|
||||
(mapconcat 'identity new-env-list ":"))))))
|
||||
|
||||
(let ((wrapper-site-lisp (getenv "emacsWithPackages_siteLispNative"))
|
||||
(env-load-path (getenv "EMACSNATIVELOADPATH")))
|
||||
(when wrapper-site-lisp
|
||||
(setenv "emacsWithPackages_siteLispNative" nil))
|
||||
(when (and wrapper-site-lisp env-load-path)
|
||||
(let* ((env-list (split-string env-load-path ":"))
|
||||
(new-env-list (delete wrapper-site-lisp env-list)))
|
||||
(setenv "EMACSNATIVELOADPATH" (when new-env-list
|
||||
(mapconcat 'identity new-env-list ":"))))))
|
||||
|
||||
(let ((wrapper-invocation-directory (getenv "emacsWithPackages_invocationDirectory")))
|
||||
(when wrapper-invocation-directory
|
||||
(setq invocation-directory (file-name-as-directory wrapper-invocation-directory))
|
||||
(setenv "emacsWithPackages_invocationDirectory" nil)))
|
||||
|
||||
(let ((wrapper-invocation-name (getenv "emacsWithPackages_invocationName")))
|
||||
(when wrapper-invocation-name
|
||||
(setq invocation-name wrapper-invocation-name)
|
||||
(setenv "emacsWithPackages_invocationName" nil)))
|
||||
;; The default/standard value of `package-directory-list' depends on `load-path'.
|
||||
;; So we re-compute `package-directory-list' after modifying `load-path'.
|
||||
;; See Emacs bug https://debbugs.gnu.org/cgi/bugreport.cgi?bug=81982.
|
||||
(custom-reevaluate-setting 'package-directory-list)
|
||||
|
||||
;;; Set up native-comp load path.
|
||||
(when (featurep 'native-compile)
|
||||
@@ -86,9 +58,7 @@ least specific (the system profile)"
|
||||
;; TODO: We should also add the other `NIX_PROFILES' to this path.
|
||||
;; However, these are user-specific, so we would need to discover
|
||||
;; them dynamically after connecting via `tramp'
|
||||
'(progn
|
||||
(add-to-list 'tramp-remote-path "/run/current-system/sw/bin")
|
||||
(add-to-list 'tramp-remote-path "/run/wrappers/bin")))
|
||||
'(add-to-list 'tramp-remote-path "/run/wrappers/bin"))
|
||||
|
||||
;;; C source directory
|
||||
;;;
|
||||
|
||||
@@ -122,20 +122,6 @@ final: prev: {
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
filemarks-nvim = buildVimPlugin {
|
||||
pname = "filemarks.nvim";
|
||||
version = "1.6.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "anoopkcn";
|
||||
repo = "filemarks.nvim";
|
||||
tag = "1.6.0";
|
||||
hash = "sha256-qSHHsBb7MAceNV3QnZiTFN4d1i2zH8CItlzQWsYNjno=";
|
||||
};
|
||||
meta.homepage = "https://github.com/anoopkcn/filemarks.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
FTerm-nvim = buildVimPlugin {
|
||||
pname = "FTerm.nvim";
|
||||
version = "0-unstable-2022-11-13";
|
||||
@@ -6063,6 +6049,20 @@ final: prev: {
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
filemarks-nvim = buildVimPlugin {
|
||||
pname = "filemarks.nvim";
|
||||
version = "1.6.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "anoopkcn";
|
||||
repo = "filemarks.nvim";
|
||||
tag = "1.6.0";
|
||||
hash = "sha256-qSHHsBb7MAceNV3QnZiTFN4d1i2zH8CItlzQWsYNjno=";
|
||||
};
|
||||
meta.homepage = "https://github.com/anoopkcn/filemarks.nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
filemention-nvim = buildVimPlugin {
|
||||
pname = "filemention.nvim";
|
||||
version = "0-unstable-2026-05-30";
|
||||
@@ -18446,12 +18446,12 @@ final: prev: {
|
||||
|
||||
toggable-term-nvim = buildVimPlugin {
|
||||
pname = "toggable-term-nvim";
|
||||
version = "0-unstable-2026-10-05";
|
||||
version = "0-unstable-2026-10-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "sergioia-dev";
|
||||
repo = "toggable-term-nvim";
|
||||
rev = "713633355ced060f5337e6ce5271db67367bbf16";
|
||||
hash = "sha256-Bs3elJzzzi1WiqwP0TnXEkUdwjizO2OckaNBTX6iGRM=";
|
||||
rev = "f16258898a1fe879ad69402edeb9915518cd691b";
|
||||
hash = "sha256-Maco2xfRvwxCXHAZQ3bMdCbqhhOBHd+92tegEvgdrg0=";
|
||||
};
|
||||
meta.homepage = "https://github.com/sergioia-dev/toggable-term-nvim/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
@@ -20603,6 +20603,20 @@ final: prev: {
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
vim-dadbod-manager-ui = buildVimPlugin {
|
||||
pname = "vim-dadbod-manager-ui";
|
||||
version = "0-unstable-2026-10-11";
|
||||
src = fetchFromGitHub {
|
||||
owner = "sergioia-dev";
|
||||
repo = "vim-dadbod-manager-ui";
|
||||
rev = "3aba12f946f72e3d0797a26786851c9759260657";
|
||||
hash = "sha256-pqLM7r4q7QYrc+OkOAH2gGPN3AJheabscYsbddqSe5g=";
|
||||
};
|
||||
meta.homepage = "https://github.com/sergioia-dev/vim-dadbod-manager-ui/";
|
||||
meta.license = getLicenseFromSpdxId "MIT";
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
vim-dadbod-ui = buildVimPlugin {
|
||||
pname = "vim-dadbod-ui";
|
||||
version = "0-unstable-2026-06-19";
|
||||
@@ -24831,20 +24845,6 @@ final: prev: {
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
vim-textobj-xmlattr = buildVimPlugin {
|
||||
pname = "vim-textobj-xmlattr";
|
||||
version = "0.1.1";
|
||||
src = fetchFromGitHub {
|
||||
owner = "whatyouhide";
|
||||
repo = "vim-textobj-xmlattr";
|
||||
tag = "0.1.1";
|
||||
hash = "sha256-EFn7Ql7SFWwcjR5WdQkl2/lJZY9qZN9ml6625lGtTzY=";
|
||||
};
|
||||
meta.homepage = "https://github.com/whatyouhide/vim-textobj-xmlattr/";
|
||||
meta.license = getLicenseFromSpdxId "WTFPL";
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
vim-textobj-variable-segment = buildVimPlugin {
|
||||
pname = "vim-textobj-variable-segment";
|
||||
version = "0-unstable-2024-09-06";
|
||||
@@ -24859,6 +24859,20 @@ final: prev: {
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
vim-textobj-xmlattr = buildVimPlugin {
|
||||
pname = "vim-textobj-xmlattr";
|
||||
version = "0.1.1";
|
||||
src = fetchFromGitHub {
|
||||
owner = "whatyouhide";
|
||||
repo = "vim-textobj-xmlattr";
|
||||
tag = "0.1.1";
|
||||
hash = "sha256-EFn7Ql7SFWwcjR5WdQkl2/lJZY9qZN9ml6625lGtTzY=";
|
||||
};
|
||||
meta.homepage = "https://github.com/whatyouhide/vim-textobj-xmlattr/";
|
||||
meta.license = getLicenseFromSpdxId "WTFPL";
|
||||
meta.hydraPlatforms = [ ];
|
||||
};
|
||||
|
||||
vim-themis = buildVimPlugin {
|
||||
pname = "vim-themis";
|
||||
version = "1.7.0-unstable-2025-08-29";
|
||||
|
||||
@@ -5118,6 +5118,16 @@ assertNoAdditions {
|
||||
};
|
||||
});
|
||||
|
||||
vim-dadbod-manager-ui = super.vim-dadbod-manager-ui.overrideAttrs {
|
||||
# Only vim-dadbod: the drawer this plugin extends is vendored, and upstream
|
||||
# states that a separate vim-dadbod-ui "must not be installed next to it",
|
||||
# so it is deliberately not listed here.
|
||||
dependencies = [ self.vim-dadbod ];
|
||||
|
||||
doInstallCheck = true;
|
||||
vimCommandCheck = "DBManager";
|
||||
};
|
||||
|
||||
vim-dadbod-ui = super.vim-dadbod-ui.overrideAttrs {
|
||||
dependencies = [ self.vim-dadbod ];
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@ https://github.com/vim-scripts/Colour-Sampler-Pack/,,
|
||||
https://github.com/CopilotC-Nvim/CopilotChat.nvim/,,
|
||||
https://github.com/whonore/Coqtail/,,
|
||||
https://github.com/vim-scripts/DoxygenToolkit.vim/,,
|
||||
https://github.com/anoopkcn/filemarks.nvim/,,
|
||||
https://github.com/numToStr/FTerm.nvim/,,
|
||||
https://github.com/antoinemadec/FixCursorHold.nvim/,,
|
||||
https://github.com/Aaronik/GPTModels.nvim/,,
|
||||
@@ -431,6 +430,7 @@ https://github.com/micampe/fennel.vim/,,
|
||||
https://github.com/wincent/ferret/,,
|
||||
https://github.com/bogado/file-line/,,
|
||||
https://github.com/lewis6991/fileline.nvim/,,
|
||||
https://github.com/anoopkcn/filemarks.nvim/,,
|
||||
https://github.com/not-manu/filemention.nvim/,,
|
||||
https://github.com/VonHeikemen/fine-cmdline.nvim/,,
|
||||
https://github.com/glacambre/firenvim/,,
|
||||
@@ -1469,6 +1469,7 @@ https://github.com/itchyny/vim-cursorword/,,
|
||||
https://github.com/ehamberg/vim-cute-python/,,
|
||||
https://github.com/tpope/vim-dadbod/,,
|
||||
https://github.com/kristijanhusak/vim-dadbod-completion/,,
|
||||
https://github.com/sergioia-dev/vim-dadbod-manager-ui/,,
|
||||
https://github.com/kristijanhusak/vim-dadbod-ui/,,
|
||||
https://github.com/sunaku/vim-dasht/,,
|
||||
https://github.com/ajmwagar/vim-deus/,,
|
||||
@@ -1771,8 +1772,8 @@ https://github.com/kana/vim-textobj-line/,,
|
||||
https://github.com/osyo-manga/vim-textobj-multiblock/,,
|
||||
https://github.com/preservim/vim-textobj-quote/,,
|
||||
https://github.com/kana/vim-textobj-user/,,
|
||||
https://github.com/whatyouhide/vim-textobj-xmlattr/,,
|
||||
https://github.com/Julian/vim-textobj-variable-segment/,,
|
||||
https://github.com/whatyouhide/vim-textobj-xmlattr/,,
|
||||
https://github.com/thinca/vim-themis/,,
|
||||
https://github.com/tmux-plugins/vim-tmux/,,
|
||||
https://github.com/roxma/vim-tmux-clipboard/,,
|
||||
|
||||
@@ -151,9 +151,9 @@ rec {
|
||||
|
||||
unstable = fetchurl rec {
|
||||
# NOTE: Don't forget to change the hash for staging as well.
|
||||
version = "11.18";
|
||||
version = "11.19";
|
||||
url = "https://dl.winehq.org/wine/source/11.x/wine-${version}.tar.xz";
|
||||
hash = "sha256-xigvbU2uzxHzq5+aK2xZj2e+fijDY7osroo8RLYR56Q=";
|
||||
hash = "sha256-SCAGbtpo5VPTMCOf/GKBZKNI0cYj5J0FjgEcWnzalfE=";
|
||||
|
||||
patches = [
|
||||
# Also look for root certificates at $NIX_SSL_CERT_FILE
|
||||
@@ -163,7 +163,7 @@ rec {
|
||||
# see https://gitlab.winehq.org/wine/wine-staging
|
||||
staging = fetchFromGitLab {
|
||||
inherit version;
|
||||
hash = "sha256-KZCkra0y3XFNrbD2lZ+YUCLyq1POC30Sd4sGCJZuwgQ=";
|
||||
hash = "sha256-Dnb/CjzxWDdMDXfJB/hiWHhQLjU49F6OyM6qqC0g/v0=";
|
||||
domain = "gitlab.winehq.org";
|
||||
owner = "wine";
|
||||
repo = "wine-staging";
|
||||
|
||||
@@ -82,6 +82,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
mainProgram = "winetricks";
|
||||
license = lib.licenses.lgpl21;
|
||||
homepage = "https://github.com/Winetricks/winetricks";
|
||||
maintainers = with lib.maintainers; [ ferris-qq ];
|
||||
platforms = with lib.platforms; linux ++ darwin;
|
||||
};
|
||||
})
|
||||
|
||||
@@ -208,7 +208,7 @@ lib.makeScope pkgs.newScope (
|
||||
meta = {
|
||||
broken = gimp.apiVersion != "2.0";
|
||||
description = "GIMP plug-in to do the fourier transform";
|
||||
homepage = "https://people.via.ecp.fr/~remi/soft/gimp/gimp_plugin_en.php3#fourier";
|
||||
homepage = "https://www.lprp.fr/gimp_plugin_en/";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
};
|
||||
};
|
||||
@@ -359,7 +359,7 @@ lib.makeScope pkgs.newScope (
|
||||
broken = gimp.apiVersion != "2.0";
|
||||
description = "GIMP plugin to correct lens distortion using the lensfun library and database";
|
||||
|
||||
homepage = "http://lensfun.sebastiankraft.net/";
|
||||
homepage = "https://seebk.github.io/GIMP-Lensfun/";
|
||||
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = [ ];
|
||||
|
||||
@@ -45,11 +45,11 @@
|
||||
"vendorHash": "sha256-HlX2EfTgDa7K7qkzmR/9Rsamyi/f4EXT3T7eaReGeK4="
|
||||
},
|
||||
"aliyun_alicloud": {
|
||||
"hash": "sha256-u4u8p3+Gxwa+gCDgcqZqi1RXYG9c+O27uZoOlc+RoKc=",
|
||||
"hash": "sha256-D2/3OuB+7MeMZhydRAYKS1trQjRyKkr1+ulDDfntWBo=",
|
||||
"homepage": "https://registry.terraform.io/providers/aliyun/alicloud",
|
||||
"owner": "aliyun",
|
||||
"repo": "terraform-provider-alicloud",
|
||||
"rev": "v1.293.0",
|
||||
"rev": "v1.294.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-GIKSIlWD+TTm0EsUu9ga3emENwGLXMDYqp//BmjNwDA="
|
||||
},
|
||||
@@ -454,13 +454,13 @@
|
||||
"vendorHash": "sha256-FcxAh8EOvnT8r1GHu0Oj2C5Jgbr2WPwD7/vY4/qIvTA="
|
||||
},
|
||||
"gitlabhq_gitlab": {
|
||||
"hash": "sha256-t37l0B8fHIQNPJKV2ryKOy/2y7SogMdl36XdR3Emcj0=",
|
||||
"hash": "sha256-ceM9uXqefS7kvGWmWWR3KjnuGoWEihliwkkfOTCZQWI=",
|
||||
"homepage": "https://registry.terraform.io/providers/gitlabhq/gitlab",
|
||||
"owner": "gitlabhq",
|
||||
"repo": "terraform-provider-gitlab",
|
||||
"rev": "v19.3.0",
|
||||
"rev": "v19.4.1",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-w72kbVx+4J0BmOT0k3ZY892Tp7dvSA0QKH9u0I1D/tE="
|
||||
"vendorHash": "sha256-14LfF5ryqFVLici3iOrbJfqRYMBnDM2D+jky+NUAL1w="
|
||||
},
|
||||
"go-gandi_gandi": {
|
||||
"hash": "sha256-fsCtmwyxkXfOtiZG27VEb010jglK35yr4EynnUWlFog=",
|
||||
@@ -914,11 +914,11 @@
|
||||
"vendorHash": "sha256-8Zj4nrEJ38Tz0LOYtghlMnJZJnD2zJjsqawVMTEX0Wk="
|
||||
},
|
||||
"metio_migadu": {
|
||||
"hash": "sha256-3RCE2KCWgS8j30Ggh0HfX0D9ZPpgiTtgIk7+YmzYSfc=",
|
||||
"hash": "sha256-hcHx/pFGBzXfa0EoIUW5L8ZLrT+pUpHfx4r7NxEk5uw=",
|
||||
"homepage": "https://registry.terraform.io/providers/metio/migadu",
|
||||
"owner": "metio",
|
||||
"repo": "terraform-provider-migadu",
|
||||
"rev": "2026.9.24",
|
||||
"rev": "2026.10.1",
|
||||
"spdx": "0BSD",
|
||||
"vendorHash": "sha256-b2YIkwpeYCGsENzXSAPD7nhvmZ1Phxfcm3S5xsiC2t0="
|
||||
},
|
||||
@@ -1148,11 +1148,11 @@
|
||||
"vendorHash": "sha256-6M6jTrukO0VhyZRdYbbICm22upbGyOkUSuHqMLTPcEM="
|
||||
},
|
||||
"rootlyhq_rootly": {
|
||||
"hash": "sha256-sWCG6mD7fYi2Yon5Wu/54+m+T8KcUYd38yDt8M3LS+E=",
|
||||
"hash": "sha256-lkMgGYayDMrhqmbwLysqoQ8L7mUvXoT4xDZ9ltxnSy8=",
|
||||
"homepage": "https://registry.terraform.io/providers/rootlyhq/rootly",
|
||||
"owner": "rootlyhq",
|
||||
"repo": "terraform-provider-rootly",
|
||||
"rev": "v5.23.0",
|
||||
"rev": "v5.23.3",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-Lusa+8VL8wQGIHYMiuiNTy4tqza4zO1A4ROpZ7X42KM="
|
||||
},
|
||||
@@ -1247,13 +1247,13 @@
|
||||
"vendorHash": "sha256-skswuFKhN4FFpIunbom9rM/FVRJVOFb1WwHeAIaEjn8="
|
||||
},
|
||||
"spacelift-io_spacelift": {
|
||||
"hash": "sha256-Kn43SQM/uxNd32g+nm40fmLStPXyHhuGUX48g16AvKw=",
|
||||
"hash": "sha256-MTxohgv1eMkzixc66sICFa6CC+uBRGjYQ64lBwlxiRE=",
|
||||
"homepage": "https://registry.terraform.io/providers/spacelift-io/spacelift",
|
||||
"owner": "spacelift-io",
|
||||
"repo": "terraform-provider-spacelift",
|
||||
"rev": "v1.55.0",
|
||||
"rev": "v1.57.0",
|
||||
"spdx": "MIT",
|
||||
"vendorHash": "sha256-XpXZqb6j6WdTFowdwNf3e8i9lg69tavzb2H65LyQJvE="
|
||||
"vendorHash": "sha256-raw9hcAvzBKy8bLbUNM36JZTYYE//r7b3HdZ3qFLtPY="
|
||||
},
|
||||
"splunk-terraform_signalfx": {
|
||||
"hash": "sha256-TjJQdzxB7X7RbiBJnaCvAGJTtDwfeOxc7lApl7jjrA8=",
|
||||
@@ -1355,11 +1355,11 @@
|
||||
"vendorHash": "sha256-SF11E60OQiRdf+Pf6XyJg60yGRnGOcSzhrYccrWaeYE="
|
||||
},
|
||||
"terraform-lxd_lxd": {
|
||||
"hash": "sha256-U/x3CkUynyMvB9FWzlYgXIfC6/RWeNRV++4ceGW3Rnc=",
|
||||
"hash": "sha256-9+3sVezHfhlbfytxt6h871ybdIaXDko16WLQNNzrNNQ=",
|
||||
"homepage": "https://registry.terraform.io/providers/terraform-lxd/lxd",
|
||||
"owner": "terraform-lxd",
|
||||
"repo": "terraform-provider-lxd",
|
||||
"rev": "v3.1.0",
|
||||
"rev": "v3.1.1",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-OHCnxqn09NyqsdTCRUJseNAL1DMpvl6Icu3YEzjLgPM="
|
||||
},
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
callPackage,
|
||||
lua52Packages,
|
||||
perlPackages,
|
||||
python3Packages,
|
||||
}:
|
||||
@@ -20,10 +19,6 @@
|
||||
|
||||
weechat-grep = callPackage ./weechat-grep { };
|
||||
|
||||
weechat-matrix-bridge = callPackage ./weechat-matrix-bridge {
|
||||
inherit (lua52Packages) cjson luaffi;
|
||||
};
|
||||
|
||||
weechat-matrix = python3Packages.callPackage ./weechat-matrix { };
|
||||
|
||||
weechat-notify-send = python3Packages.callPackage ./weechat-notify-send { };
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
curl,
|
||||
fetchFromGitHub,
|
||||
cjson,
|
||||
olm,
|
||||
luaffi,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "weechat-matrix-bridge";
|
||||
version = "unstable-2018-11-19";
|
||||
src = fetchFromGitHub {
|
||||
owner = "torhve";
|
||||
repo = "weechat-matrix-protocol-script";
|
||||
rev = "8d32e90d864a8f3f09ecc2857cd5dd6e39a8c3f7";
|
||||
sha256 = "0qqd6qmkrdc0r3rnl53c3yp93fbcz7d3mdw3vq5gmdqxyym4s9lj";
|
||||
};
|
||||
|
||||
patches = [
|
||||
./library-path.patch
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
curl
|
||||
cjson
|
||||
olm
|
||||
luaffi
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace matrix.lua \
|
||||
--replace "/usr/bin/curl" "${curl}/bin/curl" \
|
||||
--replace "__NIX_LIB_PATH__" "$out/lib/?.so" \
|
||||
--replace "__NIX_OLM_PATH__" "$out/share/?.lua"
|
||||
|
||||
substituteInPlace olm.lua \
|
||||
--replace "__NIX_LIB_PATH__" "$out/lib/?.so"
|
||||
'';
|
||||
|
||||
passthru.scripts = [ "matrix.lua" ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/{share,lib}
|
||||
|
||||
cp {matrix.lua,olm.lua} $out/share
|
||||
cp ${cjson}/lib/lua/${cjson.lua.luaversion}/cjson.so $out/lib/cjson.so
|
||||
cp ${olm}/lib/libolm.so $out/lib/libolm.so
|
||||
cp ${luaffi}/lib/lua/${luaffi.lua.luaversion}/ffi.so $out/lib/ffi.so
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "WeeChat script in Lua that implements the matrix.org chat protocol";
|
||||
homepage = "https://github.com/torhve/weechat-matrix-protocol-script";
|
||||
maintainers = [ ];
|
||||
license = lib.licenses.mit; # see https://github.com/torhve/weechat-matrix-protocol-script/blob/0052e7275ae149dc5241226391c9b1889ecc3c6b/matrix.lua#L53
|
||||
platforms = lib.platforms.unix;
|
||||
|
||||
# As of 2019-06-30, all of the dependencies are available on macOS but the
|
||||
# package itself does not build.
|
||||
broken = stdenv.hostPlatform.isDarwin;
|
||||
};
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
diff --git a/matrix.lua b/matrix.lua
|
||||
index b79f500..32b37a2 100644
|
||||
--- a/matrix.lua
|
||||
+++ b/matrix.lua
|
||||
@@ -43,6 +43,9 @@ This script maps this as follows:
|
||||
|
||||
]]
|
||||
|
||||
+package.cpath = package.cpath .. ";__NIX_LIB_PATH__"
|
||||
+package.path = package.path .. ";__NIX_OLM_PATH__"
|
||||
+
|
||||
local json = require 'cjson' -- apt-get install lua-cjson
|
||||
local olmstatus, olm = pcall(require, 'olm') -- LuaJIT olm FFI binding ln -s ~/olm/olm.lua /usr/local/share/lua/5.1
|
||||
local w = weechat
|
||||
diff --git a/olm.lua b/olm.lua
|
||||
index 114649c..4828371 100644
|
||||
--- a/olm.lua
|
||||
+++ b/olm.lua
|
||||
@@ -17,6 +17,9 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
--]]
|
||||
+
|
||||
+package.cpath = package.cpath .. ";__NIX_LIB_PATH__"
|
||||
+
|
||||
local ffi = require'ffi'
|
||||
|
||||
ffi.cdef[[
|
||||
@@ -100,7 +100,12 @@ let
|
||||
(lib.escapeShellArg ''
|
||||
if ! ( test -n "$DBUS_SESSION_BUS_ADDRESS" ); then
|
||||
dbus_tmp_dir="/run/user/$(id -u)/libreoffice-dbus"
|
||||
if ! test -d "$dbus_tmp_dir" && test -d "/run"; then
|
||||
# Sometimes /run exists but is not writeable, (like when running in
|
||||
# a linux builder on darwin) giving
|
||||
# `mkdir: cannot create directory '/run/user': Permission denied`
|
||||
# instead of going to the next fallback. Ensure we test with `-w`
|
||||
# and not `-d`.
|
||||
if ! test -d "$dbus_tmp_dir" && test -w "/run"; then
|
||||
mkdir -p "$dbus_tmp_dir"
|
||||
fi
|
||||
if ! test -d "$dbus_tmp_dir"; then
|
||||
|
||||
@@ -52,7 +52,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
passthru.updateScript = gitUpdater { rev-prefix = "v"; };
|
||||
|
||||
meta = {
|
||||
homepage = "https://fork1oom.sourcecraft.site/";
|
||||
homepage = "https://sourcecraft.dev/fork1oom/1oom";
|
||||
changelog = "https://sourcecraft.dev/fork1oom/1oom/releases/v${finalAttrs.version}";
|
||||
description = "Master of Orion (1993) game engine recreation; a more updated fork";
|
||||
license = lib.licenses.gpl2Only;
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "3proxy";
|
||||
version = "1.0.0";
|
||||
version = "1.0.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "3proxy";
|
||||
repo = "3proxy";
|
||||
tag = finalAttrs.version;
|
||||
sha256 = "sha256-JRoSCmoTIXHsUWZt9OyDVp1Veuy2w1ZPFe0rUGdJv0k=";
|
||||
sha256 = "sha256-hLxafFU6nJ3I3NT3R24LPD7PBmQ1IZEbrVqvfmMZHIM=";
|
||||
};
|
||||
|
||||
# They use 'install -s', that calls the native strip instead of the cross.
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "abracadabra";
|
||||
version = "4.2.1";
|
||||
version = "4.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "KejPi";
|
||||
repo = "AbracaDABra";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-35E2a3UXyxcDixN5OAsiqlV0X+wkhS2vI6myHlpA2GA=";
|
||||
hash = "sha256-wc2DuBUnD5AWjDUez2ZlgnJ4Kh2kizoJyW0evV3Iics=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
python3Packages.buildPythonApplication (finalAttrs: {
|
||||
pname = "adscan";
|
||||
version = "13.1.0";
|
||||
version = "13.2.0";
|
||||
pyproject = true;
|
||||
|
||||
__structuredAttrs = true;
|
||||
@@ -16,7 +16,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
|
||||
owner = "ADScanPro";
|
||||
repo = "adscan";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-BmzXsbgS4gE5osU5Vt2GZrSYKOgKRkiPPoK2gurAk0I=";
|
||||
hash = "sha256-5sMoN+aH+u9Fp+AWorhrm4TlKaIWTwjVhuvO33SnMGg=";
|
||||
};
|
||||
|
||||
pythonRelaxDeps = [ "credsweeper" ];
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
lib,
|
||||
libnotify,
|
||||
libappindicator,
|
||||
systemd,
|
||||
systemdLibs,
|
||||
pciutils,
|
||||
}:
|
||||
let
|
||||
@@ -86,7 +86,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
buildInputs = deps;
|
||||
runtimeDependencies = [
|
||||
(lib.getLib systemd)
|
||||
(lib.getLib systemdLibs)
|
||||
libnotify
|
||||
libappindicator
|
||||
pulseaudio
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
libxkbcommon,
|
||||
libgbm,
|
||||
openssl,
|
||||
systemd,
|
||||
systemdLibs,
|
||||
libxcb-cursor,
|
||||
libxcb-wm,
|
||||
libxcb-render-util,
|
||||
@@ -63,7 +63,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
libgbm
|
||||
openssl
|
||||
stdenv.cc.cc
|
||||
systemd
|
||||
systemdLibs
|
||||
libxcb-cursor
|
||||
libx11
|
||||
libxcb-wm
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
stdenvNoCC,
|
||||
fetchFromGitHub,
|
||||
gprbuild,
|
||||
gnat,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "alire";
|
||||
version = "2.1.1";
|
||||
|
||||
|
||||
@@ -12,16 +12,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "alistral";
|
||||
version = "0.6.9";
|
||||
version = "0.6.10";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "RustyNova016";
|
||||
repo = "Alistral";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-tujuv6+V7n8uthV+3yc2aqZydgMRJDlunWi1ITofl14=";
|
||||
hash = "sha256-G/DC2JtdnElm1iQf2TLWroej8eNsRAb9ZoeDYrEMdJg=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-kzrWhE2S6XXU6wLDfYp76kMRnk3juxXWX4EdL3NjgSo=";
|
||||
cargoHash = "sha256-77NF6t1WMHi7wtbJf1NjyYoj4amXh69/AJvFT/aEsQY=";
|
||||
|
||||
buildNoDefaultFeatures = true;
|
||||
# Would be cleaner with an "--all-features" option
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
|
||||
buildNpmPackage rec {
|
||||
pname = "all-the-package-names";
|
||||
version = "2.0.2578";
|
||||
version = "2.0.2590";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nice-registry";
|
||||
repo = "all-the-package-names";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-fFJuN1MPpnpYCotAiQoRU5qEsyC6HjOTrjxfnyWj/+o=";
|
||||
hash = "sha256-j8x2SSo7TaPy37ET1NWYz6GU/zMjjOL9jzFP0mRCwZ8=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-8xzyypPgtfxYxPcVIJYLNL0a6EE7L93eISanWqPFGM4=";
|
||||
npmDepsHash = "sha256-sA4kiDo4Q8WPqhxuIYIvU6R9cGYTTzxNMR224U864Gk=";
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
nss,
|
||||
pango,
|
||||
pipewire,
|
||||
systemd,
|
||||
systemdLibs,
|
||||
unzip,
|
||||
wrapGAppsHook3,
|
||||
}:
|
||||
@@ -113,7 +113,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
nspr
|
||||
nss
|
||||
pango
|
||||
systemd
|
||||
systemdLibs
|
||||
];
|
||||
|
||||
# Loaded with dlopen() by the main binary, so autoPatchelfHook cannot discover them.
|
||||
|
||||
@@ -52,7 +52,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
meta = {
|
||||
description = "PDF Evolution Library";
|
||||
homepage = "https://apfel.mi.infn.it/";
|
||||
homepage = "https://github.com/scarrazza/apfel";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = with lib.maintainers; [ veprbl ];
|
||||
platforms = lib.platforms.unix;
|
||||
|
||||
@@ -76,7 +76,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
Since the /nix/store is not writable, you can instead place the file
|
||||
at {file}`$HOME/acli.properties` to achieve the same effect.
|
||||
'';
|
||||
homepage = "https://apps.appf.re/acli";
|
||||
homepage = "https://support.appfire.com/space/ACLI/60555464/Appfire+Command+Line+Interface+(CLI)";
|
||||
license = lib.licenses.unfreeRedistributable;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
|
||||
maintainers = with lib.maintainers; [ twey ];
|
||||
|
||||
@@ -37,7 +37,7 @@ buildGoModule (finalAttrs: {
|
||||
mainProgram = "arduino-language-server";
|
||||
homepage = "https://github.com/arduino/arduino-language-server";
|
||||
changelog = "https://github.com/arduino/arduino-language-server/releases/tag/${finalAttrs.version}";
|
||||
license = lib.licenses.asl20;
|
||||
license = lib.licenses.agpl3Only;
|
||||
maintainers = with lib.maintainers; [ BattleCh1cken ];
|
||||
};
|
||||
})
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "asmc-linux";
|
||||
version = "2.39.07";
|
||||
version = "2.40";
|
||||
src = fetchFromGitHub {
|
||||
owner = "nidud";
|
||||
repo = "asmc_linux";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-JtJsyaw4UqMf9epMLGH+iQA0FYYlE9k2NG1aPOu6pec=";
|
||||
hash = "sha256-5fbfLYQEoeAJJqZJ4Rs8WcHm2hD05OZOirNVxY66SdM=";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "atmos";
|
||||
version = "1.230.0";
|
||||
version = "1.231.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cloudposse";
|
||||
repo = "atmos";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-2iyRkQQ+NKER60jBiGrcq+QKBO8+pt3nfHm9Tn3e+iU=";
|
||||
hash = "sha256-8jTwgmqoz4/W61JvCnoIq+l0eFTmU+Y5aaYqUivfDXo=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-J5TNPXzEz4gaNi2mEqkQ+t1JzmocbRRLwUwzLgAZU40=";
|
||||
vendorHash = "sha256-Mzi4xP9cDmdnOYaVWfKaWnZ/HM/rCbdgPb+gBBTrASE=";
|
||||
|
||||
env.CGO_ENABLED = 0; # Compiles a pure statically linked Go binary.
|
||||
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
{
|
||||
lib,
|
||||
bashInteractive,
|
||||
fetchFromGitHub,
|
||||
gitMinimal,
|
||||
installShellFiles,
|
||||
ncurses,
|
||||
nix-update-script,
|
||||
nixosTests,
|
||||
openssl,
|
||||
@@ -12,16 +15,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "atuin";
|
||||
version = "18.21.0";
|
||||
version = "18.23.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "atuinsh";
|
||||
repo = "atuin";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-kz8qdgxg79jX3hfPi7EY9c9SmFqUK6lWnMTLb3TKDQQ=";
|
||||
hash = "sha256-NBn7C9ssLSXYrHWv5qWM5dZ2E8URbRJZOOCvHaNgxW4=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-chuGpLq8XAZrCCtx2L/tVQSXNLrTgG2rnBGcCEvDjFg=";
|
||||
cargoHash = "sha256-rkDDs8gviBpoLR4mrrKRu2eTlmlpvjICVRFu22AeOaU=";
|
||||
|
||||
# atuin's default features include 'check-updates', which do not make sense
|
||||
# for distribution builds. List all other default features.
|
||||
@@ -45,6 +48,14 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
openssl
|
||||
];
|
||||
|
||||
# e2e_pty tests drive an interactive bash (needs readline), run `clear`,
|
||||
# and create git repositories for workspace filtering
|
||||
nativeCheckInputs = [
|
||||
bashInteractive
|
||||
gitMinimal
|
||||
ncurses
|
||||
];
|
||||
|
||||
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
|
||||
installShellCompletion --cmd atuin \
|
||||
--bash <($out/bin/atuin gen-completions -s bash) \
|
||||
|
||||
@@ -24,7 +24,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
meta = {
|
||||
description = "Aurulent Sans";
|
||||
longDescription = "Aurulent Sans is a humanist sans serif intended to be used as an interface font";
|
||||
homepage = "http://delubrum.org/";
|
||||
homepage = "https://github.com/deepfire/hartke-aurulent-sans";
|
||||
maintainers = with lib.maintainers; [ pancaek ];
|
||||
license = lib.licenses.ofl;
|
||||
platforms = lib.platforms.all;
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "aws-lc";
|
||||
version = "5.10.0";
|
||||
version = "5.11.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "aws";
|
||||
repo = "aws-lc";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-fQl7rh9edy+ZtFZ1aB8FezP9ORJkqlRkR16y3Ke1vQQ=";
|
||||
hash = "sha256-2gsjaMgP8NcJVSdW2g4hGFySVfTfKJuSkjSrG8KTKWI=";
|
||||
};
|
||||
|
||||
outputs = [
|
||||
|
||||
@@ -63,7 +63,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
meta = {
|
||||
description = "Full color painting software for illustration drawing";
|
||||
homepage = "http://azsky2.html.xdomain.jp/soft/azpainter.html";
|
||||
homepage = "https://azelpg.gitlab.io/azsky2/";
|
||||
license = lib.licenses.gpl3Plus;
|
||||
maintainers = [ ];
|
||||
platforms = with lib.platforms; linux ++ darwin;
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
nss,
|
||||
openssl,
|
||||
pango,
|
||||
systemd,
|
||||
systemdLibs,
|
||||
wrapGAppsHook3,
|
||||
libxrandr,
|
||||
libxfixes,
|
||||
@@ -183,7 +183,7 @@ stdenv.mkDerivation rec {
|
||||
libxkbfile
|
||||
pango
|
||||
stdenv.cc.cc
|
||||
systemd
|
||||
systemdLibs
|
||||
])
|
||||
targetPath
|
||||
sqltoolsserviceRpath
|
||||
|
||||
@@ -1,38 +1,68 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
rustPlatform,
|
||||
fetchFromGitHub,
|
||||
installShellFiles,
|
||||
versionCheckHook,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "base91";
|
||||
version = "0.1.0";
|
||||
version = "0.3.2";
|
||||
|
||||
__structuredAttrs = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "douzebis";
|
||||
repo = "base91";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-Lx569OtNU0z884763FSByH0yXIq6GzeXyp5NVvMejco="; # update as needed
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-1v/kvv+IUoYmrs6MrBmnA4UYIRjN4KICW/Q0zaiiGq0=";
|
||||
};
|
||||
|
||||
makeFlags = [
|
||||
"CC=cc"
|
||||
"-C"
|
||||
"src"
|
||||
"all"
|
||||
];
|
||||
installFlags = [
|
||||
"-C"
|
||||
"src"
|
||||
"install"
|
||||
"prefix=$(out)"
|
||||
];
|
||||
cargoRoot = "rust";
|
||||
buildAndTestSubdir = "rust/base91-cli";
|
||||
|
||||
cargoHash = "sha256-5ubqTQQz0OBZoe3Ql/e1H5S1cL1EhYVabcZ9FkfQzao=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
postInstall = ''
|
||||
ln -s base91 $out/bin/b91enc
|
||||
ln -s base91 $out/bin/b91dec
|
||||
''
|
||||
+ lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
|
||||
$out/bin/base91 --man > base91.1
|
||||
installManPage base91.1
|
||||
ln -s base91.1 $out/share/man/man1/b91enc.1
|
||||
ln -s base91.1 $out/share/man/man1/b91dec.1
|
||||
installShellCompletion --cmd base91 \
|
||||
--bash <($out/bin/base91 --completions bash) \
|
||||
--zsh <($out/bin/base91 --completions zsh) \
|
||||
--fish <($out/bin/base91 --completions fish)
|
||||
'';
|
||||
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
doInstallCheck = true;
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
description = "CLI tool for encoding binary data as ASCII characters";
|
||||
description = "Binary-to-text encoder and decoder for the basE91 format";
|
||||
longDescription = ''
|
||||
base91 encodes binary data as printable ASCII with about 23% overhead
|
||||
(base64: 33%). It reads and writes Joachim Henke's basE91 format, as
|
||||
the original C tool does. It also offers a fixed-width variant of the
|
||||
format (--simd), designed for SIMD instructions: with SSE4.1, AVX2 or
|
||||
NEON, it encodes and decodes at several GiB/s. b91enc and b91dec are
|
||||
the encoder and decoder under their traditional names.
|
||||
'';
|
||||
homepage = "https://github.com/douzebis/base91";
|
||||
changelog = "https://github.com/douzebis/base91/blob/${finalAttrs.src.tag}/CHANGELOG.md";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ douzebis ];
|
||||
mainProgram = "base91";
|
||||
platforms = lib.platforms.unix;
|
||||
};
|
||||
})
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
libxkbcommon,
|
||||
libgbm,
|
||||
vulkan-loader,
|
||||
systemd,
|
||||
systemdLibs,
|
||||
libGL,
|
||||
krb5,
|
||||
unixodbc,
|
||||
@@ -100,7 +100,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
unixodbc
|
||||
];
|
||||
|
||||
runtimeDependencies = lib.optionals stdenv.hostPlatform.isLinux (lib.getLib systemd);
|
||||
runtimeDependencies = lib.optionals stdenv.hostPlatform.isLinux (lib.getLib systemdLibs);
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
@@ -14,23 +14,23 @@
|
||||
}:
|
||||
let
|
||||
pname = "beeper";
|
||||
version = "4.3.73";
|
||||
version = "4.3.160";
|
||||
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
|
||||
sources = {
|
||||
x86_64-linux = fetchurl {
|
||||
url = "https://beeper-desktop.download.beeper.com/builds/Beeper-${version}-x86_64.AppImage";
|
||||
hash = "sha256-j6HTTqU7+z8AJ20hYgia6wOH0/n3gxrUocCpMPmgQvQ=";
|
||||
hash = "sha256-by07u75l8YjMnuL8VZWkAUjTkGmP/qwJoopIMtJX7Tc=";
|
||||
};
|
||||
aarch64-linux = fetchurl {
|
||||
url = "https://beeper-desktop.download.beeper.com/builds/Beeper-${version}-arm64.AppImage";
|
||||
hash = "sha256-kWlKMZdicJ+DhGgYXCTqvSCYinI9QD0pJD4nb4yYdpI=";
|
||||
hash = "sha256-4mUxNwPrHbJvYQmX4KdYZcEmfV2MuSOEXrQKgl7DIa0=";
|
||||
};
|
||||
aarch64-darwin = fetchurl {
|
||||
# Zip unpacks cleanly with unzip; the download API redirects to a .dmg.
|
||||
url = "https://beeper-desktop.download.beeper.com/builds/Beeper-${version}-arm64-mac.zip";
|
||||
hash = "sha256-79T3pPLEt+tQQ2xoC3XBAI/xpxMdnY11qSmVA2VFiVw=";
|
||||
hash = "sha256-XrFxN57uOXIbgL8va/tgWtAaFTDVp9IxDWGJU0Kskbs=";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -97,16 +97,19 @@ let
|
||||
linuxConfigFilename=$appRoot/build/main/linux-*.mjs
|
||||
echo "export function registerLinuxConfig() {}" > $linuxConfigFilename
|
||||
|
||||
# Disable scheduled update checks.
|
||||
autoUpdateConfigFilename=$(
|
||||
grep -lF 'c=d??{},p=c.hw_acceleration??!0' $appRoot/build/main/index-*.mjs
|
||||
)
|
||||
substituteInPlace "$autoUpdateConfigFilename" \
|
||||
--replace-fail 'c=d??{},p=c.hw_acceleration??!0' 'c={...(d??{}),auto_update_disabled:true},p=c.hw_acceleration??!0'
|
||||
# Disable (no-op) updater setup and checks without removing the methods
|
||||
updateEntryFilename=$appRoot/build/main/main-entry-*.mjs
|
||||
for method in 'async checkForUpdates' 'async runCheck' scheduleNextAutomaticCheck; do
|
||||
signature="$method\([^)]*\)\{"
|
||||
[ "$(grep -oE "$signature" $updateEntryFilename | wc -l)" -eq 1 ] \
|
||||
|| (echo "Expected one $method updater method" >&2; exit 1)
|
||||
sed -i -E "s/$signature/&return;/" $updateEntryFilename
|
||||
done
|
||||
|
||||
# Disable user-triggered update checks, which ignore auto_update_disabled.
|
||||
substituteInPlace $appRoot/build/main/main-entry-*.mjs \
|
||||
--replace-fail 'async checkForUpdates(r=!1){' 'async checkForUpdates(r=!1){return;'
|
||||
signature='(register\([^)]*\)\{)([^{}]*\.on\("error",this\.onError\))'
|
||||
[ "$(grep -oE "$signature" $updateEntryFilename | wc -l)" -eq 1 ] \
|
||||
|| (echo "Expected one updater register method" >&2; exit 1)
|
||||
sed -i -E "s/$signature/\1return;\2/" $updateEntryFilename
|
||||
'';
|
||||
};
|
||||
in
|
||||
|
||||
@@ -27,13 +27,13 @@ in
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "pds";
|
||||
version = "0.4.5034";
|
||||
version = "0.4.5037";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bluesky-social";
|
||||
repo = "pds";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-fsbnD9y0wxXq3NmVe5vMhI613G4HlZyqsv7+DNKzZzY=";
|
||||
hash = "sha256-4llWhrtPZ6ZsA2CIDquNdR7WAdl4aKeG6WP0Q1sTyjs=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/service";
|
||||
@@ -63,7 +63,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
;
|
||||
inherit pnpm;
|
||||
fetcherVersion = 4;
|
||||
hash = "sha256-nnhtJNw/D6Tir3n6rrURjL/cw1EWocs4/r4K7Yq4Fdk=";
|
||||
hash = "sha256-Tfhv/PWnkPK/CuPzQ/vxS3UIO/TBjWBsshFRatjbcX4=";
|
||||
};
|
||||
|
||||
buildPhase = ''
|
||||
|
||||
@@ -39,7 +39,10 @@ buildGoModule (finalAttrs: {
|
||||
homepage = "https://bosh.io";
|
||||
changelog = "https://github.com/cloudfoundry/bosh-cli/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ ris ];
|
||||
maintainers = with lib.maintainers; [
|
||||
ris
|
||||
a-hassanin
|
||||
];
|
||||
mainProgram = "bosh";
|
||||
};
|
||||
})
|
||||
|
||||
@@ -85,6 +85,19 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
(cmakeBool "BOX2D_BUILD_UNIT_TESTS" finalAttrs.finalPackage.doCheck)
|
||||
];
|
||||
|
||||
doCheck =
|
||||
stdenv.buildPlatform.canExecute stdenv.hostPlatform
|
||||
# b2Hash calls get struct reinterpreted as byte array for input, results not stable across endiannesses
|
||||
&& stdenv.hostPlatform.isLittleEndian;
|
||||
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
|
||||
./bin/test
|
||||
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
updateScript = nix-update-script { };
|
||||
};
|
||||
|
||||
@@ -102,7 +102,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
'';
|
||||
|
||||
meta = {
|
||||
homepage = "http://www.t2-project.org/packages/bsd-games.html";
|
||||
homepage = "https://t2linux.com/packages/bsd-games.html";
|
||||
description = "Ports of all the games from NetBSD-current that are free";
|
||||
license = lib.licenses.free;
|
||||
maintainers = with lib.maintainers; [ viric ];
|
||||
|
||||
@@ -59,7 +59,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
Bullet 3D Game Multiphysics Library provides state of the art collision
|
||||
detection, soft body and rigid body dynamics.
|
||||
'';
|
||||
homepage = "http://bulletphysics.org";
|
||||
homepage = "https://github.com/bulletphysics/bullet3";
|
||||
license = lib.licenses.zlib;
|
||||
maintainers = with lib.maintainers; [ aforemny ];
|
||||
platforms = lib.platforms.unix;
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
}:
|
||||
buildNpmPackage (finalAttrs: {
|
||||
pname = "bulwark";
|
||||
version = "1.12.0";
|
||||
version = "1.13.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bulwarkmail";
|
||||
repo = "webmail";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-Lt25tZBtxhqMiSM8lYP3M3MIQEItRC3L360WOEYTL84=";
|
||||
hash = "sha256-oEpJj5w4nb3bp5WDmukn0Xn/OCZL3Clz1K2F09kJYWY=";
|
||||
leaveDotGit = true;
|
||||
postFetch = ''
|
||||
cd "$out"
|
||||
@@ -24,7 +24,7 @@ buildNpmPackage (finalAttrs: {
|
||||
find "$out" -name .git -print0 | xargs -0 rm -rf
|
||||
'';
|
||||
};
|
||||
npmDepsHash = "sha256-9p9Dn20U//UpFrDV/dksjWkfTD8almHR07lHF5Vtm8g=";
|
||||
npmDepsHash = "sha256-ufEJsieashae6hAvRDowEOG6yD178lCr+228KhZ41lk=";
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
{
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
fetchpatch2,
|
||||
rustPlatform,
|
||||
cacert,
|
||||
writableTmpDirAsHomeHook,
|
||||
flac,
|
||||
lame,
|
||||
@@ -19,39 +17,25 @@ let
|
||||
in
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "caesura";
|
||||
version = "0.31.0";
|
||||
version = "0.32.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "RogueOneEcho";
|
||||
repo = "caesura";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-+REt+MKImO7fnYWJ32P6mKzulGJTnxc+9ednVF5aCJU=";
|
||||
hash = "sha256-7PRYjKwnLiHLQ0+egzwf3YAmyu6+/2ysHfMmyv/VUZY=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
(fetchpatch2 {
|
||||
name = "normalize-sox-dependent-full-spectrogram-widths.patch";
|
||||
url = "https://github.com/RogueOneEcho/caesura/commit/3af818ae35a3e18f444c889d9d3b88294f4f110f.patch?full_index=1";
|
||||
hash = "sha256-znAbk6hFVj198BUUwwDo76SWei0cKINeXzlYEFvTwHA=";
|
||||
})
|
||||
];
|
||||
|
||||
cargoHash = "sha256-0+vZma8AC44XqVHzmJT/roV7sy8w6DYhujRK9N91J5c=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeBinaryWrapper
|
||||
];
|
||||
nativeCheckInputs = [
|
||||
cacert
|
||||
writableTmpDirAsHomeHook
|
||||
]
|
||||
++ runtimeDeps;
|
||||
|
||||
env = {
|
||||
CAESURA_NIX = "1";
|
||||
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace Cargo.toml crates/*/Cargo.toml \
|
||||
--replace-fail 'version = "0.0.0"' 'version = "${finalAttrs.version}"'
|
||||
@@ -68,6 +52,11 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
--prefix PATH : ${lib.makeBinPath finalAttrs.passthru.runtimeDeps}
|
||||
'';
|
||||
|
||||
doInstallCheck = true;
|
||||
installCheckPhase = ''
|
||||
$out/bin/caesura version --offline
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
inherit runtimeDeps;
|
||||
};
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
pixman,
|
||||
pkg-config,
|
||||
scdoc,
|
||||
systemd,
|
||||
systemdLibs,
|
||||
wayland,
|
||||
wayland-protocols,
|
||||
wayland-scanner,
|
||||
@@ -56,7 +56,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
libxcb-wm
|
||||
pango
|
||||
pixman
|
||||
systemd
|
||||
systemdLibs
|
||||
wayland
|
||||
wayland-protocols
|
||||
wlroots_0_19
|
||||
|
||||
@@ -37,6 +37,9 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
env = {
|
||||
NIX_CFLAGS_COMPILE = toString [
|
||||
"-Wno-error=incompatible-pointer-types"
|
||||
# GCC 16 warns about set-but-unused variables/parameters in the vendored mbedtls
|
||||
"-Wno-error=unused-but-set-variable"
|
||||
"-Wno-error=unused-but-set-parameter"
|
||||
(lib.optionalString stdenv.cc.isClang "-Wno-error=documentation")
|
||||
];
|
||||
};
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
fetchpatch,
|
||||
cmake,
|
||||
gfortran,
|
||||
flex,
|
||||
@@ -87,6 +88,13 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
# leaving it empty, and remove hardcoded absolute cmake build paths from
|
||||
# Cflags (which would embed /nix/store paths from the build environment).
|
||||
./casacore-pkgconfig.patch
|
||||
|
||||
# Fix undefined Dysco encoder template symbols with GCC 16
|
||||
(fetchpatch {
|
||||
url = "https://github.com/casacore/casacore/commit/60923a924d6380de04ee32042290c7e7426e3509.patch";
|
||||
includes = [ "tables/Dysco/*" ];
|
||||
hash = "sha256-j/Ukc6hvfGpWTlw3YZDjgu/UihFxfOoHMatpPP9KcO8=";
|
||||
})
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
@@ -29,7 +29,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
doInstallCheck = true;
|
||||
installCheckPhase = ''
|
||||
readelf -d $out/bin/catatonit | grep 'There is no dynamic section in this file.'
|
||||
${stdenv.cc.targetPrefix}readelf -d $out/bin/catatonit | grep 'There is no dynamic section in this file.'
|
||||
'';
|
||||
|
||||
passthru.tests = { inherit (nixosTests) podman; };
|
||||
|
||||
42
pkgs/by-name/cb/cbirds/package.nix
Normal file
42
pkgs/by-name/cb/cbirds/package.nix
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
versionCheckHook,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "cbirds";
|
||||
version = "1.6.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "clainstone";
|
||||
repo = "cbirds";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-MMctTFtEUYt3xn7gFYWcMlRFLkFXW+wu6/hTtTkO6Og=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
installFlags = [ "PREFIX=${placeholder "out"}" ];
|
||||
|
||||
doCheck = true;
|
||||
checkTarget = "test";
|
||||
|
||||
nativeInstallCheckInputs = [ versionCheckHook ];
|
||||
doInstallCheck = true;
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
description = "Flock of birds (Craig Reynolds' boids) in your terminal";
|
||||
homepage = "https://github.com/clainstone/cbirds";
|
||||
changelog = "https://github.com/clainstone/cbirds/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ tbutter ];
|
||||
mainProgram = "cbirds";
|
||||
platforms = lib.platforms.unix;
|
||||
};
|
||||
})
|
||||
@@ -56,7 +56,7 @@ stdenv.mkDerivation {
|
||||
|
||||
meta = {
|
||||
description = "Viewer and mounter for video streams";
|
||||
homepage = "https://cctv-viewer.org";
|
||||
homepage = "https://github.com/iEvgeny/cctv-viewer";
|
||||
license = lib.licenses.gpl3Only;
|
||||
maintainers = with lib.maintainers; [ teohz ];
|
||||
platforms = lib.platforms.linux;
|
||||
|
||||
@@ -46,7 +46,7 @@ stdenv.mkDerivation rec {
|
||||
'';
|
||||
meta = {
|
||||
description = "Clustering and comparing protein or nucleotide sequences";
|
||||
homepage = "http://weizhongli-lab.org/cd-hit/";
|
||||
homepage = "https://github.com/weizhongli/cdhit";
|
||||
license = lib.licenses.gpl2;
|
||||
maintainers = [ lib.maintainers.bzizou ];
|
||||
platforms = lib.platforms.unix;
|
||||
|
||||
@@ -59,7 +59,7 @@ python3Packages.buildPythonApplication (finalAttrs: {
|
||||
|
||||
meta = {
|
||||
description = "Minimalistic configuration management system";
|
||||
homepage = "https://www.sdi.st";
|
||||
homepage = "https://www.cdi.st";
|
||||
changelog = "https://code.ungleich.ch/ungleich-public/cdist/src/tag/${finalAttrs.version}/docs/changelog";
|
||||
|
||||
# Mostly. There are still couple types that are gpl3-only.
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "cdncheck";
|
||||
version = "1.3.1";
|
||||
version = "1.3.2";
|
||||
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -16,7 +16,7 @@ buildGoModule (finalAttrs: {
|
||||
owner = "projectdiscovery";
|
||||
repo = "cdncheck";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-lM+sw5AhM5gkrvcLqOZXwcKEtS3UBQYMmM5pPSS4xxQ=";
|
||||
hash = "sha256-QBggYJ8DOTi1mLJZCv2sQ9BeZHPQ1clj9zTb9Abu/Fw=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-TYCYAKhytk249YJkRrgFrH8RWl0yrxr5z0dNONKBufU=";
|
||||
|
||||
@@ -99,7 +99,7 @@ buildFHSEnv {
|
||||
util-linux.lib
|
||||
libselinux
|
||||
nspr
|
||||
systemd
|
||||
systemdLibs
|
||||
gtk3
|
||||
pango
|
||||
harfbuzz
|
||||
|
||||
67
pkgs/by-name/ch/chatgpt/launcher.nix
Normal file
67
pkgs/by-name/ch/chatgpt/launcher.nix
Normal file
@@ -0,0 +1,67 @@
|
||||
# Electron rewrites bundled plugin manifests, so they need a writable copy.
|
||||
{
|
||||
coreutils,
|
||||
flock,
|
||||
writeShellApplication,
|
||||
}:
|
||||
|
||||
writeShellApplication {
|
||||
name = "chatgpt-launcher";
|
||||
|
||||
runtimeInputs = [
|
||||
coreutils
|
||||
flock
|
||||
];
|
||||
|
||||
text = ''
|
||||
: "''${CHATGPT_EXECUTABLE:?}"
|
||||
: "''${CHATGPT_RESOURCES_SOURCE:?}"
|
||||
: "''${CHATGPT_RESOURCES_CACHE_KEY:?}"
|
||||
|
||||
cacheHome="''${XDG_CACHE_HOME:-''${HOME:?XDG_CACHE_HOME and HOME are unset}/.cache}"
|
||||
cacheRoot="$cacheHome/chatgpt/bundled-plugins-v2"
|
||||
resourcesPath="$cacheRoot/$CHATGPT_RESOURCES_CACHE_KEY"
|
||||
|
||||
mkdir -p "$cacheRoot"
|
||||
exec {initLockFd}> "$cacheRoot.lock"
|
||||
flock --exclusive "$initLockFd"
|
||||
|
||||
# tmpfiles may remove the directory before its lock is acquired.
|
||||
while true; do
|
||||
mkdir -p "$resourcesPath"
|
||||
if exec {resourcesLockFd}< "$resourcesPath"; then
|
||||
flock --shared "$resourcesLockFd"
|
||||
[[ "$resourcesPath" -ef "/proc/self/fd/$resourcesLockFd" ]] && break
|
||||
exec {resourcesLockFd}>&-
|
||||
else
|
||||
[[ ! -d "$resourcesPath" ]] || exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ! -f "$resourcesPath/.complete" ]]; then
|
||||
ln -sfn -t "$resourcesPath" \
|
||||
"$CHATGPT_RESOURCES_SOURCE"/{codex,codex-code-mode-host,cua_node,native,rg,tectonic}
|
||||
mkdir -p "$resourcesPath/plugins"
|
||||
chmod -R u+w "$resourcesPath/plugins"
|
||||
cp -RT --preserve=mode "$CHATGPT_RESOURCES_SOURCE/plugins" "$resourcesPath/plugins"
|
||||
chmod -R u+w "$resourcesPath/plugins"
|
||||
sync --file-system "$resourcesPath"
|
||||
touch "$resourcesPath/.complete"
|
||||
sync --file-system "$resourcesPath"
|
||||
fi
|
||||
exec {initLockFd}>&-
|
||||
|
||||
export CODEX_ELECTRON_BUNDLED_PLUGINS_RESOURCES_PATH="$resourcesPath"
|
||||
|
||||
waylandFlags=()
|
||||
if [[ -n "''${NIXOS_OZONE_WL:-}" && -n "''${WAYLAND_DISPLAY:-}" ]]; then
|
||||
waylandFlags=(
|
||||
--ozone-platform=wayland
|
||||
--enable-features=WaylandWindowDecorations
|
||||
--enable-wayland-ime=true
|
||||
)
|
||||
fi
|
||||
|
||||
exec "$CHATGPT_EXECUTABLE" "''${waylandFlags[@]}" "$@"
|
||||
'';
|
||||
}
|
||||
@@ -1,49 +1,278 @@
|
||||
{
|
||||
lib,
|
||||
stdenvNoCC,
|
||||
stdenv,
|
||||
callPackage,
|
||||
fetchurl,
|
||||
|
||||
# hooks
|
||||
autoPatchelfHook,
|
||||
makeWrapper,
|
||||
versionCheckHook,
|
||||
wrapGAppsHook3,
|
||||
writableTmpDirAsHomeHook,
|
||||
|
||||
# native build inputs
|
||||
asar,
|
||||
dpkg,
|
||||
patchelf,
|
||||
unzip,
|
||||
|
||||
# build inputs
|
||||
alsa-lib,
|
||||
at-spi2-atk,
|
||||
at-spi2-core,
|
||||
atk,
|
||||
cairo,
|
||||
cups,
|
||||
dbus,
|
||||
dconf,
|
||||
expat,
|
||||
gdk-pixbuf,
|
||||
glib,
|
||||
gtk3,
|
||||
libgbm,
|
||||
libnotify,
|
||||
libusb1,
|
||||
libx11,
|
||||
libxcb,
|
||||
libxcomposite,
|
||||
libxdamage,
|
||||
libxext,
|
||||
libxfixes,
|
||||
libxkbcommon,
|
||||
libxrandr,
|
||||
nspr,
|
||||
nss,
|
||||
pango,
|
||||
qt6,
|
||||
systemdLibs,
|
||||
|
||||
# runtime deps
|
||||
bubblewrap,
|
||||
coreutils,
|
||||
gitMinimal,
|
||||
libGL,
|
||||
libpulseaudio,
|
||||
libsecret,
|
||||
lsb-release,
|
||||
nodejs-slim,
|
||||
pipewire,
|
||||
ripgrep,
|
||||
tectonic-unwrapped,
|
||||
vulkan-loader,
|
||||
xdg-utils,
|
||||
# override to null to use bundled codex
|
||||
codex,
|
||||
}:
|
||||
|
||||
let
|
||||
source = import ./source.nix;
|
||||
inherit (stdenv.hostPlatform) isLinux isDarwin system;
|
||||
inherit (stdenv.hostPlatform.node) arch platform;
|
||||
in
|
||||
stdenvNoCC.mkDerivation {
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "chatgpt";
|
||||
inherit (source) version;
|
||||
inherit (finalAttrs.passthru.source) version;
|
||||
|
||||
src = fetchurl source.src;
|
||||
src = fetchurl finalAttrs.passthru.source.src;
|
||||
|
||||
strictDeps = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
postPatch = lib.optionalString isLinux ''
|
||||
# autoPatchelf moves PT_INTERP beyond detect-libc's 2 KiB limit.
|
||||
# Its process.report fallback crashes Electron.
|
||||
asar extract usr/lib/chatgpt/resources/app.asar app
|
||||
substituteInPlace app/node_modules/@parcel/watcher/index.js \
|
||||
--replace-fail 'const family = familySync();' "const family = '${stdenv.hostPlatform.libc}';"
|
||||
# Don't pack packages that were originally unpacked
|
||||
unpackedDirs="$(
|
||||
# Only descend into @scope directories
|
||||
find usr/lib/chatgpt/resources/app.asar.unpacked/node_modules \
|
||||
-mindepth 1 -maxdepth 2 \
|
||||
! -name '@*' -printf '%P\n' -prune |
|
||||
paste -sd,
|
||||
)"
|
||||
asar pack app usr/lib/chatgpt/resources/app.asar \
|
||||
--unpack-dir "node_modules/{$unpackedDirs}"
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
]
|
||||
++ lib.optionals isDarwin [
|
||||
unzip
|
||||
patchelf
|
||||
]
|
||||
++ lib.optionals isLinux [
|
||||
asar
|
||||
autoPatchelfHook
|
||||
dpkg
|
||||
qt6.wrapQtAppsHook
|
||||
wrapGAppsHook3
|
||||
];
|
||||
|
||||
sourceRoot = ".";
|
||||
buildInputs = lib.optionals isLinux [
|
||||
alsa-lib
|
||||
at-spi2-atk
|
||||
at-spi2-core
|
||||
atk
|
||||
cairo
|
||||
cups
|
||||
dbus
|
||||
dconf
|
||||
expat
|
||||
gdk-pixbuf
|
||||
glib
|
||||
gtk3
|
||||
libgbm
|
||||
libnotify
|
||||
libusb1
|
||||
libx11
|
||||
libxcb
|
||||
libxcomposite
|
||||
libxdamage
|
||||
libxext
|
||||
libxfixes
|
||||
libxkbcommon
|
||||
libxrandr
|
||||
nspr
|
||||
nss
|
||||
pango
|
||||
qt6.qtbase
|
||||
stdenv.cc.cc.lib
|
||||
systemdLibs
|
||||
];
|
||||
|
||||
runtimeDependencies = lib.optionals isLinux [
|
||||
libGL
|
||||
libnotify
|
||||
libpulseaudio
|
||||
libsecret
|
||||
pipewire
|
||||
vulkan-loader
|
||||
];
|
||||
|
||||
dontWrapGApps = true;
|
||||
dontWrapQtApps = true;
|
||||
|
||||
sourceRoot = if isLinux then "root" else ".";
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
''
|
||||
+ (
|
||||
if isDarwin then
|
||||
''
|
||||
mkdir -p "$out/Applications" "$out/bin"
|
||||
cp -a ChatGPT.app "$out/Applications"
|
||||
makeWrapper "$out/Applications/ChatGPT.app/Contents/MacOS/ChatGPT" "$out/bin/ChatGPT"
|
||||
''
|
||||
else
|
||||
''
|
||||
mkdir -p "$out"
|
||||
cp -r usr/* "$out"
|
||||
|
||||
mkdir -p "$out/Applications"
|
||||
mkdir -p "$out/bin"
|
||||
cp -a ChatGPT.app "$out/Applications"
|
||||
ln -s "$out/Applications/ChatGPT.app/Contents/MacOS/ChatGPT" "$out/bin/ChatGPT"
|
||||
# Remove the unused Qt 5 fallback shim.
|
||||
rm -f "$out/lib/chatgpt/libqt5_shim.so"
|
||||
|
||||
# Keep only the native prebuild for this platform and architecture.
|
||||
resources="$out/lib/chatgpt/resources"
|
||||
find "$resources" -type d -name prebuilds -print0 | while IFS= read -r -d "" prebuildsPath; do
|
||||
find "$prebuildsPath" -mindepth 1 -maxdepth 1 \
|
||||
! -name "*${platform}-${arch}" \
|
||||
-exec rm -rf -- {} +
|
||||
done
|
||||
''
|
||||
+ lib.optionalString stdenv.hostPlatform.isGnu ''
|
||||
find "$resources" -type f -name '*.musl.node' -delete
|
||||
''
|
||||
+ ''
|
||||
|
||||
ln -sf ${lib.getExe tectonic-unwrapped} "$resources/tectonic/tectonic"
|
||||
ln -sf ${lib.getExe ripgrep} "$resources/rg"
|
||||
mkdir -p "$resources/cua_node/bin"
|
||||
ln -sf ${lib.getExe nodejs-slim} "$resources/cua_node/bin/node"
|
||||
|
||||
install -Dm755 ${lib.getExe finalAttrs.passthru.launcher} "$out/bin/chatgpt"
|
||||
install -Dm644 ${./tmpfiles.conf} "$out/share/user-tmpfiles.d/chatgpt.conf"
|
||||
''
|
||||
+ lib.optionalString (codex != null) ''
|
||||
ln -sf ${lib.getExe codex} "$resources/codex"
|
||||
ln -sf ${lib.getExe' codex "codex-code-mode-host"} "$resources/codex-code-mode-host"
|
||||
''
|
||||
+ ''
|
||||
# The launcher assumes this bundled-plugin resource layout.
|
||||
for resource in codex codex-code-mode-host cua_node native rg tectonic plugins; do
|
||||
if [[ ! -e "$resources/$resource" ]]; then
|
||||
echo "Missing ChatGPT bundled-plugin resource: $resources/$resource" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
''
|
||||
)
|
||||
+ ''
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru.updateScript = ./update.sh;
|
||||
postFixup = lib.optionalString isLinux ''
|
||||
wrapProgram "$out/bin/chatgpt" \
|
||||
"''${gappsWrapperArgs[@]}" \
|
||||
"''${qtWrapperArgs[@]}" \
|
||||
--set CHATGPT_EXECUTABLE "$out/lib/chatgpt/ChatGPT" \
|
||||
--set CHATGPT_RESOURCES_SOURCE "$out/lib/chatgpt/resources" \
|
||||
--set CHATGPT_RESOURCES_CACHE_KEY "''${out##*/}" \
|
||||
--prefix PATH : ${
|
||||
lib.makeBinPath [
|
||||
bubblewrap
|
||||
coreutils
|
||||
gitMinimal
|
||||
lsb-release
|
||||
nodejs-slim
|
||||
nodejs-slim.npm
|
||||
xdg-utils
|
||||
]
|
||||
} \
|
||||
--set-default CODEX_BROWSER_USE_NODE_PATH ${lib.getExe nodejs-slim} \
|
||||
--set-default NODE_REPL_NODE_PATH ${lib.getExe nodejs-slim} \
|
||||
${lib.escapeShellArgs (
|
||||
lib.optionals (codex != null) [
|
||||
"--set-default"
|
||||
"CODEX_CLI_PATH"
|
||||
(lib.getExe codex)
|
||||
]
|
||||
)}
|
||||
'';
|
||||
|
||||
dontStrip = isLinux;
|
||||
dontPatchELF = isDarwin;
|
||||
dontPatchShebangs = isDarwin;
|
||||
|
||||
doInstallCheck = true;
|
||||
nativeInstallCheckInputs = [
|
||||
versionCheckHook
|
||||
writableTmpDirAsHomeHook
|
||||
];
|
||||
versionCheckKeepEnvironment = [ "HOME" ];
|
||||
|
||||
passthru = {
|
||||
updateScript = ./update.sh;
|
||||
sources = lib.importJSON ./source.json;
|
||||
source = finalAttrs.passthru.sources.${system} or (throw "chatgpt is not supported on ${system}");
|
||||
launcher = callPackage ./launcher.nix { };
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Desktop application for ChatGPT";
|
||||
homepage = "https://openai.com/chatgpt/desktop/";
|
||||
changelog = "https://help.openai.com/en/articles/9703738-macos-app-release-notes";
|
||||
homepage = "https://developers.openai.com/codex/app";
|
||||
changelog = "https://learn.chatgpt.com/docs/changelog?type=codex-app";
|
||||
license = lib.licenses.unfree;
|
||||
maintainers = with lib.maintainers; [ wattmto ];
|
||||
platforms = lib.platforms.darwin;
|
||||
maintainers = with lib.maintainers; [
|
||||
wattmto
|
||||
moraxyc
|
||||
mdaniels5757
|
||||
];
|
||||
broken = stdenv.hostPlatform.isMusl;
|
||||
platforms = lib.attrNames finalAttrs.passthru.sources;
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
mainProgram = "ChatGPT";
|
||||
mainProgram = if isDarwin then "ChatGPT" else "chatgpt";
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
23
pkgs/by-name/ch/chatgpt/source.json
Normal file
23
pkgs/by-name/ch/chatgpt/source.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"aarch64-darwin": {
|
||||
"version": "26.1007.30912",
|
||||
"src": {
|
||||
"url": "https://persistent.oaistatic.com/codex-app-prod/ChatGPT-darwin-arm64-26.1007.30912.zip",
|
||||
"hash": "sha256-tpmowtWi8jysWdxnOI4lr0v1/C+2qzD/okOpaOT4FaM="
|
||||
}
|
||||
},
|
||||
"aarch64-linux": {
|
||||
"version": "26.1007.21434",
|
||||
"src": {
|
||||
"url": "https://persistent.oaistatic.com/codex-app-prod/linux/deb/pool/main/c/chatgpt/chatgpt_26.1007.21434_arm64.deb",
|
||||
"hash": "sha256-Vfrh4/sdYGmpBiDp5wc33Pi/IlVgTRV+KCzGdIobr0k="
|
||||
}
|
||||
},
|
||||
"x86_64-linux": {
|
||||
"version": "26.1007.21434",
|
||||
"src": {
|
||||
"url": "https://persistent.oaistatic.com/codex-app-prod/linux/deb/pool/main/c/chatgpt/chatgpt_26.1007.21434_amd64.deb",
|
||||
"hash": "sha256-J2tTQcPXSyYdOtUhBvf6ft3gaEHkdn/ipAy1QJmx8+0="
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user