Merge staging-next into staging

This commit is contained in:
github-actions[bot] 2024-05-21 18:01:28 +00:00 committed by GitHub
commit 32de4bcbf0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
152 changed files with 1543 additions and 743 deletions

View File

@ -14496,6 +14496,12 @@
githubId = 399535;
name = "Niklas Hambüchen";
};
nhnn = {
matrix = "@nhnn:nhnn.dev";
github = "thenhnn";
githubId = 162156666;
name = "nhnn";
};
nhooyr = {
email = "anmol@aubble.com";
github = "nhooyr";

View File

@ -226,6 +226,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
- [keto](https://www.ory.sh/keto/), a permission & access control server, the first open source implementation of ["Zanzibar: Google's Consistent, Global Authorization System"](https://research.google/pubs/zanzibar-googles-consistent-global-authorization-system/).
- [SimpleSAMLphp](https://simplesamlphp.org/), an application written in native PHP that deals with authentication (SQL, .htpasswd, YubiKey, LDAP, PAPI, Radius). Available as [services.simplesamlphp](#opt-services.simplesamlphp).
## Backward Incompatibilities {#sec-release-24.05-incompatibilities}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->

View File

@ -24,6 +24,7 @@ python3Packages.buildPythonApplication {
coreutils
netpbm
python3Packages.colorama
python3Packages.junit-xml
python3Packages.ptpython
qemu_pkg
socat

View File

@ -31,6 +31,10 @@ ignore_missing_imports = true
module = "ptpython.*"
ignore_missing_imports = true
[[tool.mypy.overrides]]
module = "junit_xml.*"
ignore_missing_imports = true
[tool.black]
line-length = 88
target-version = ['py39']

View File

@ -6,7 +6,12 @@ from pathlib import Path
import ptpython.repl
from test_driver.driver import Driver
from test_driver.logger import rootlog
from test_driver.logger import (
CompositeLogger,
JunitXMLLogger,
TerminalLogger,
XMLLogger,
)
class EnvDefault(argparse.Action):
@ -92,6 +97,11 @@ def main() -> None:
default=Path.cwd(),
type=writeable_dir,
)
arg_parser.add_argument(
"--junit-xml",
help="Enable JunitXML report generation to the given path",
type=Path,
)
arg_parser.add_argument(
"testscript",
action=EnvDefault,
@ -102,14 +112,24 @@ def main() -> None:
args = arg_parser.parse_args()
output_directory = args.output_directory.resolve()
logger = CompositeLogger([TerminalLogger()])
if "LOGFILE" in os.environ.keys():
logger.add_logger(XMLLogger(os.environ["LOGFILE"]))
if args.junit_xml:
logger.add_logger(JunitXMLLogger(output_directory / args.junit_xml))
if not args.keep_vm_state:
rootlog.info("Machine state will be reset. To keep it, pass --keep-vm-state")
logger.info("Machine state will be reset. To keep it, pass --keep-vm-state")
with Driver(
args.start_scripts,
args.vlans,
args.testscript.read_text(),
args.output_directory.resolve(),
output_directory,
logger,
args.keep_vm_state,
args.global_timeout,
) as driver:
@ -125,7 +145,7 @@ def main() -> None:
tic = time.time()
driver.run_tests()
toc = time.time()
rootlog.info(f"test script finished in {(toc-tic):.2f}s")
logger.info(f"test script finished in {(toc-tic):.2f}s")
def generate_driver_symbols() -> None:
@ -134,7 +154,7 @@ def generate_driver_symbols() -> None:
in user's test scripts. That list is then used by pyflakes to lint those
scripts.
"""
d = Driver([], [], "", Path())
d = Driver([], [], "", Path(), CompositeLogger([]))
test_symbols = d.test_symbols()
with open("driver-symbols", "w") as fp:
fp.write(",".join(test_symbols.keys()))

View File

@ -9,7 +9,7 @@ from typing import Any, Callable, ContextManager, Dict, Iterator, List, Optional
from colorama import Fore, Style
from test_driver.logger import rootlog
from test_driver.logger import AbstractLogger
from test_driver.machine import Machine, NixStartScript, retry
from test_driver.polling_condition import PollingCondition
from test_driver.vlan import VLan
@ -49,6 +49,7 @@ class Driver:
polling_conditions: List[PollingCondition]
global_timeout: int
race_timer: threading.Timer
logger: AbstractLogger
def __init__(
self,
@ -56,6 +57,7 @@ class Driver:
vlans: List[int],
tests: str,
out_dir: Path,
logger: AbstractLogger,
keep_vm_state: bool = False,
global_timeout: int = 24 * 60 * 60 * 7,
):
@ -63,12 +65,13 @@ class Driver:
self.out_dir = out_dir
self.global_timeout = global_timeout
self.race_timer = threading.Timer(global_timeout, self.terminate_test)
self.logger = logger
tmp_dir = get_tmp_dir()
with rootlog.nested("start all VLans"):
with self.logger.nested("start all VLans"):
vlans = list(set(vlans))
self.vlans = [VLan(nr, tmp_dir) for nr in vlans]
self.vlans = [VLan(nr, tmp_dir, self.logger) for nr in vlans]
def cmd(scripts: List[str]) -> Iterator[NixStartScript]:
for s in scripts:
@ -84,6 +87,7 @@ class Driver:
tmp_dir=tmp_dir,
callbacks=[self.check_polling_conditions],
out_dir=self.out_dir,
logger=self.logger,
)
for cmd in cmd(start_scripts)
]
@ -92,19 +96,19 @@ class Driver:
return self
def __exit__(self, *_: Any) -> None:
with rootlog.nested("cleanup"):
with self.logger.nested("cleanup"):
self.race_timer.cancel()
for machine in self.machines:
machine.release()
def subtest(self, name: str) -> Iterator[None]:
"""Group logs under a given test name"""
with rootlog.nested("subtest: " + name):
with self.logger.subtest(name):
try:
yield
return True
except Exception as e:
rootlog.error(f'Test "{name}" failed with error: "{e}"')
self.logger.error(f'Test "{name}" failed with error: "{e}"')
raise e
def test_symbols(self) -> Dict[str, Any]:
@ -118,7 +122,7 @@ class Driver:
machines=self.machines,
vlans=self.vlans,
driver=self,
log=rootlog,
log=self.logger,
os=os,
create_machine=self.create_machine,
subtest=subtest,
@ -150,13 +154,13 @@ class Driver:
def test_script(self) -> None:
"""Run the test script"""
with rootlog.nested("run the VM test script"):
with self.logger.nested("run the VM test script"):
symbols = self.test_symbols() # call eagerly
exec(self.tests, symbols, None)
def run_tests(self) -> None:
"""Run the test script (for non-interactive test runs)"""
rootlog.info(
self.logger.info(
f"Test will time out and terminate in {self.global_timeout} seconds"
)
self.race_timer.start()
@ -168,13 +172,13 @@ class Driver:
def start_all(self) -> None:
"""Start all machines"""
with rootlog.nested("start all VMs"):
with self.logger.nested("start all VMs"):
for machine in self.machines:
machine.start()
def join_all(self) -> None:
"""Wait for all machines to shut down"""
with rootlog.nested("wait for all VMs to finish"):
with self.logger.nested("wait for all VMs to finish"):
for machine in self.machines:
machine.wait_for_shutdown()
self.race_timer.cancel()
@ -182,7 +186,7 @@ class Driver:
def terminate_test(self) -> None:
# This will be usually running in another thread than
# the thread actually executing the test script.
with rootlog.nested("timeout reached; test terminating..."):
with self.logger.nested("timeout reached; test terminating..."):
for machine in self.machines:
machine.release()
# As we cannot `sys.exit` from another thread
@ -227,7 +231,7 @@ class Driver:
f"Unsupported arguments passed to create_machine: {args}"
)
rootlog.warning(
self.logger.warning(
Fore.YELLOW
+ Style.BRIGHT
+ "WARNING: Using create_machine with a single dictionary argument is deprecated and will be removed in NixOS 24.11"
@ -246,13 +250,14 @@ class Driver:
start_command=cmd,
name=name,
keep_vm_state=keep_vm_state,
logger=self.logger,
)
def serial_stdout_on(self) -> None:
rootlog._print_serial_logs = True
self.logger.print_serial_logs(True)
def serial_stdout_off(self) -> None:
rootlog._print_serial_logs = False
self.logger.print_serial_logs(False)
def check_polling_conditions(self) -> None:
for condition in self.polling_conditions:
@ -271,6 +276,7 @@ class Driver:
def __init__(self, fun: Callable):
self.condition = PollingCondition(
fun,
driver.logger,
seconds_interval,
description,
)
@ -285,15 +291,17 @@ class Driver:
def wait(self, timeout: int = 900) -> None:
def condition(last: bool) -> bool:
if last:
rootlog.info(f"Last chance for {self.condition.description}")
driver.logger.info(
f"Last chance for {self.condition.description}"
)
ret = self.condition.check(force=True)
if not ret and not last:
rootlog.info(
driver.logger.info(
f"({self.condition.description} failure not fatal yet)"
)
return ret
with rootlog.nested(f"waiting for {self.condition.description}"):
with driver.logger.nested(f"waiting for {self.condition.description}"):
retry(condition, timeout=timeout)
if fun_ is None:

View File

@ -1,33 +1,239 @@
import atexit
import codecs
import os
import sys
import time
import unicodedata
from contextlib import contextmanager
from abc import ABC, abstractmethod
from contextlib import ExitStack, contextmanager
from pathlib import Path
from queue import Empty, Queue
from typing import Any, Dict, Iterator
from typing import Any, Dict, Iterator, List
from xml.sax.saxutils import XMLGenerator
from xml.sax.xmlreader import AttributesImpl
from colorama import Fore, Style
from junit_xml import TestCase, TestSuite
class Logger:
def __init__(self) -> None:
self.logfile = os.environ.get("LOGFILE", "/dev/null")
self.logfile_handle = codecs.open(self.logfile, "wb")
self.xml = XMLGenerator(self.logfile_handle, encoding="utf-8")
self.queue: "Queue[Dict[str, str]]" = Queue()
class AbstractLogger(ABC):
@abstractmethod
def log(self, message: str, attributes: Dict[str, str] = {}) -> None:
pass
self.xml.startDocument()
self.xml.startElement("logfile", attrs=AttributesImpl({}))
@abstractmethod
@contextmanager
def subtest(self, name: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
pass
@abstractmethod
@contextmanager
def nested(self, message: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
pass
@abstractmethod
def info(self, *args, **kwargs) -> None: # type: ignore
pass
@abstractmethod
def warning(self, *args, **kwargs) -> None: # type: ignore
pass
@abstractmethod
def error(self, *args, **kwargs) -> None: # type: ignore
pass
@abstractmethod
def log_serial(self, message: str, machine: str) -> None:
pass
@abstractmethod
def print_serial_logs(self, enable: bool) -> None:
pass
class JunitXMLLogger(AbstractLogger):
class TestCaseState:
def __init__(self) -> None:
self.stdout = ""
self.stderr = ""
self.failure = False
def __init__(self, outfile: Path) -> None:
self.tests: dict[str, JunitXMLLogger.TestCaseState] = {
"main": self.TestCaseState()
}
self.currentSubtest = "main"
self.outfile: Path = outfile
self._print_serial_logs = True
atexit.register(self.close)
def log(self, message: str, attributes: Dict[str, str] = {}) -> None:
self.tests[self.currentSubtest].stdout += message + os.linesep
@contextmanager
def subtest(self, name: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
old_test = self.currentSubtest
self.tests.setdefault(name, self.TestCaseState())
self.currentSubtest = name
yield
self.currentSubtest = old_test
@contextmanager
def nested(self, message: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
self.log(message)
yield
def info(self, *args, **kwargs) -> None: # type: ignore
self.tests[self.currentSubtest].stdout += args[0] + os.linesep
def warning(self, *args, **kwargs) -> None: # type: ignore
self.tests[self.currentSubtest].stdout += args[0] + os.linesep
def error(self, *args, **kwargs) -> None: # type: ignore
self.tests[self.currentSubtest].stderr += args[0] + os.linesep
self.tests[self.currentSubtest].failure = True
def log_serial(self, message: str, machine: str) -> None:
if not self._print_serial_logs:
return
self.log(f"{machine} # {message}")
def print_serial_logs(self, enable: bool) -> None:
self._print_serial_logs = enable
def close(self) -> None:
with open(self.outfile, "w") as f:
test_cases = []
for name, test_case_state in self.tests.items():
tc = TestCase(
name,
stdout=test_case_state.stdout,
stderr=test_case_state.stderr,
)
if test_case_state.failure:
tc.add_failure_info("test case failed")
test_cases.append(tc)
ts = TestSuite("NixOS integration test", test_cases)
f.write(TestSuite.to_xml_string([ts]))
class CompositeLogger(AbstractLogger):
def __init__(self, logger_list: List[AbstractLogger]) -> None:
self.logger_list = logger_list
def add_logger(self, logger: AbstractLogger) -> None:
self.logger_list.append(logger)
def log(self, message: str, attributes: Dict[str, str] = {}) -> None:
for logger in self.logger_list:
logger.log(message, attributes)
@contextmanager
def subtest(self, name: str, attributes: Dict[str, str] = {}) -> Iterator[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]:
with ExitStack() as stack:
for logger in self.logger_list:
stack.enter_context(logger.nested(message, attributes))
yield
def info(self, *args, **kwargs) -> None: # type: ignore
for logger in self.logger_list:
logger.info(*args, **kwargs)
def warning(self, *args, **kwargs) -> None: # type: ignore
for logger in self.logger_list:
logger.warning(*args, **kwargs)
def error(self, *args, **kwargs) -> None: # type: ignore
for logger in self.logger_list:
logger.error(*args, **kwargs)
sys.exit(1)
def print_serial_logs(self, enable: bool) -> None:
for logger in self.logger_list:
logger.print_serial_logs(enable)
def log_serial(self, message: str, machine: str) -> None:
for logger in self.logger_list:
logger.log_serial(message, machine)
class TerminalLogger(AbstractLogger):
def __init__(self) -> None:
self._print_serial_logs = True
def maybe_prefix(self, message: str, attributes: Dict[str, str]) -> str:
if "machine" in attributes:
return f"{attributes['machine']}: {message}"
return message
@staticmethod
def _eprint(*args: object, **kwargs: Any) -> None:
print(*args, file=sys.stderr, **kwargs)
def log(self, message: str, attributes: Dict[str, str] = {}) -> None:
self._eprint(self.maybe_prefix(message, attributes))
@contextmanager
def subtest(self, name: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
with self.nested("subtest: " + name, attributes):
yield
@contextmanager
def nested(self, message: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
self._eprint(
self.maybe_prefix(
Style.BRIGHT + Fore.GREEN + message + Style.RESET_ALL, attributes
)
)
tic = time.time()
yield
toc = time.time()
self.log(f"(finished: {message}, in {toc - tic:.2f} seconds)")
def info(self, *args, **kwargs) -> None: # type: ignore
self.log(*args, **kwargs)
def warning(self, *args, **kwargs) -> None: # type: ignore
self.log(*args, **kwargs)
def error(self, *args, **kwargs) -> None: # type: ignore
self.log(*args, **kwargs)
def print_serial_logs(self, enable: bool) -> None:
self._print_serial_logs = enable
def log_serial(self, message: str, machine: str) -> None:
if not self._print_serial_logs:
return
self._eprint(Style.DIM + f"{machine} # {message}" + Style.RESET_ALL)
class XMLLogger(AbstractLogger):
def __init__(self, outfile: str) -> None:
self.logfile_handle = codecs.open(outfile, "wb")
self.xml = XMLGenerator(self.logfile_handle, encoding="utf-8")
self.queue: "Queue[Dict[str, str]]" = Queue()
self._print_serial_logs = True
self.xml.startDocument()
self.xml.startElement("logfile", attrs=AttributesImpl({}))
def close(self) -> None:
self.xml.endElement("logfile")
self.xml.endDocument()
@ -54,17 +260,19 @@ class Logger:
def error(self, *args, **kwargs) -> None: # type: ignore
self.log(*args, **kwargs)
sys.exit(1)
def log(self, message: str, attributes: Dict[str, str] = {}) -> None:
self._eprint(self.maybe_prefix(message, attributes))
self.drain_log_queue()
self.log_line(message, attributes)
def print_serial_logs(self, enable: bool) -> None:
self._print_serial_logs = enable
def log_serial(self, message: str, machine: str) -> None:
if not self._print_serial_logs:
return
self.enqueue({"msg": message, "machine": machine, "type": "serial"})
if self._print_serial_logs:
self._eprint(Style.DIM + f"{machine} # {message}" + Style.RESET_ALL)
def enqueue(self, item: Dict[str, str]) -> None:
self.queue.put(item)
@ -80,13 +288,12 @@ class Logger:
pass
@contextmanager
def nested(self, message: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
self._eprint(
self.maybe_prefix(
Style.BRIGHT + Fore.GREEN + message + Style.RESET_ALL, attributes
)
)
def subtest(self, name: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
with self.nested("subtest: " + name, attributes):
yield
@contextmanager
def nested(self, message: str, attributes: Dict[str, str] = {}) -> Iterator[None]:
self.xml.startElement("nest", attrs=AttributesImpl({}))
self.xml.startElement("head", attrs=AttributesImpl(attributes))
self.xml.characters(message)
@ -100,6 +307,3 @@ class Logger:
self.log(f"(finished: {message}, in {toc - tic:.2f} seconds)")
self.xml.endElement("nest")
rootlog = Logger()

View File

@ -17,7 +17,7 @@ from pathlib import Path
from queue import Queue
from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple
from test_driver.logger import rootlog
from test_driver.logger import AbstractLogger
from .qmp import QMPSession
@ -270,6 +270,7 @@ class Machine:
out_dir: Path,
tmp_dir: Path,
start_command: StartCommand,
logger: AbstractLogger,
name: str = "machine",
keep_vm_state: bool = False,
callbacks: Optional[List[Callable]] = None,
@ -280,6 +281,7 @@ class Machine:
self.name = name
self.start_command = start_command
self.callbacks = callbacks if callbacks is not None else []
self.logger = logger
# set up directories
self.shared_dir = self.tmp_dir / "shared-xchg"
@ -307,15 +309,15 @@ class Machine:
return self.booted and self.connected
def log(self, msg: str) -> None:
rootlog.log(msg, {"machine": self.name})
self.logger.log(msg, {"machine": self.name})
def log_serial(self, msg: str) -> None:
rootlog.log_serial(msg, self.name)
self.logger.log_serial(msg, self.name)
def nested(self, msg: str, attrs: Dict[str, str] = {}) -> _GeneratorContextManager:
my_attrs = {"machine": self.name}
my_attrs.update(attrs)
return rootlog.nested(msg, my_attrs)
return self.logger.nested(msg, my_attrs)
def wait_for_monitor_prompt(self) -> str:
assert self.monitor is not None
@ -1113,8 +1115,8 @@ class Machine:
def cleanup_statedir(self) -> None:
shutil.rmtree(self.state_dir)
rootlog.log(f"deleting VM state directory {self.state_dir}")
rootlog.log("if you want to keep the VM state, pass --keep-vm-state")
self.logger.log(f"deleting VM state directory {self.state_dir}")
self.logger.log("if you want to keep the VM state, pass --keep-vm-state")
def shutdown(self) -> None:
"""
@ -1221,7 +1223,7 @@ class Machine:
def release(self) -> None:
if self.pid is None:
return
rootlog.info(f"kill machine (pid {self.pid})")
self.logger.info(f"kill machine (pid {self.pid})")
assert self.process
assert self.shell
assert self.monitor

View File

@ -2,7 +2,7 @@ import time
from math import isfinite
from typing import Callable, Optional
from .logger import rootlog
from test_driver.logger import AbstractLogger
class PollingConditionError(Exception):
@ -13,6 +13,7 @@ class PollingCondition:
condition: Callable[[], bool]
seconds_interval: float
description: Optional[str]
logger: AbstractLogger
last_called: float
entry_count: int
@ -20,11 +21,13 @@ class PollingCondition:
def __init__(
self,
condition: Callable[[], Optional[bool]],
logger: AbstractLogger,
seconds_interval: float = 2.0,
description: Optional[str] = None,
):
self.condition = condition # type: ignore
self.seconds_interval = seconds_interval
self.logger = logger
if description is None:
if condition.__doc__:
@ -41,7 +44,7 @@ class PollingCondition:
if (self.entered or not self.overdue) and not force:
return True
with self, rootlog.nested(self.nested_message):
with self, self.logger.nested(self.nested_message):
time_since_last = time.monotonic() - self.last_called
last_message = (
f"Time since last: {time_since_last:.2f}s"
@ -49,13 +52,13 @@ class PollingCondition:
else "(not called yet)"
)
rootlog.info(last_message)
self.logger.info(last_message)
try:
res = self.condition() # type: ignore
except Exception:
res = False
res = res is None or res
rootlog.info(self.status_message(res))
self.logger.info(self.status_message(res))
return res
def maybe_raise(self) -> None:

View File

@ -4,7 +4,7 @@ import pty
import subprocess
from pathlib import Path
from test_driver.logger import rootlog
from test_driver.logger import AbstractLogger
class VLan:
@ -19,17 +19,20 @@ class VLan:
pid: int
fd: io.TextIOBase
logger: AbstractLogger
def __repr__(self) -> str:
return f"<Vlan Nr. {self.nr}>"
def __init__(self, nr: int, tmp_dir: Path):
def __init__(self, nr: int, tmp_dir: Path, logger: AbstractLogger):
self.nr = nr
self.socket_dir = tmp_dir / f"vde{self.nr}.ctl"
self.logger = logger
# TODO: don't side-effect environment here
os.environ[f"QEMU_VDE_SOCKET_{self.nr}"] = str(self.socket_dir)
rootlog.info("start vlan")
self.logger.info("start vlan")
pty_master, pty_slave = pty.openpty()
# The --hub is required for the scenario determined by
@ -52,11 +55,11 @@ class VLan:
assert self.process.stdout is not None
self.process.stdout.readline()
if not (self.socket_dir / "ctl").exists():
rootlog.error("cannot start vde_switch")
self.logger.error("cannot start vde_switch")
rootlog.info(f"running vlan (pid {self.pid}; ctl {self.socket_dir})")
self.logger.info(f"running vlan (pid {self.pid}; ctl {self.socket_dir})")
def __del__(self) -> None:
rootlog.info(f"kill vlan (pid {self.pid})")
self.logger.info(f"kill vlan (pid {self.pid})")
self.fd.close()
self.process.terminate()

View File

@ -4,7 +4,7 @@
from test_driver.driver import Driver
from test_driver.vlan import VLan
from test_driver.machine import Machine
from test_driver.logger import Logger
from test_driver.logger import AbstractLogger
from typing import Callable, Iterator, ContextManager, Optional, List, Dict, Any, Union
from typing_extensions import Protocol
from pathlib import Path
@ -44,7 +44,7 @@ test_script: Callable[[], None]
machines: List[Machine]
vlans: List[VLan]
driver: Driver
log: Logger
log: AbstractLogger
create_machine: CreateMachineProtocol
run_tests: Callable[[], None]
join_all: Callable[[], None]

View File

@ -1426,6 +1426,7 @@
./services/web-apps/selfoss.nix
./services/web-apps/shiori.nix
./services/web-apps/silverbullet.nix
./services/web-apps/simplesamlphp.nix
./services/web-apps/slskd.nix
./services/web-apps/snipe-it.nix
./services/web-apps/sogo.nix

View File

@ -72,6 +72,7 @@ in {
packages = (with pkgs; [
ayatana-indicator-datetime
ayatana-indicator-messages
ayatana-indicator-power
ayatana-indicator-session
]) ++ (with pkgs.lomiri; [
telephony-service

View File

@ -0,0 +1,128 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.simplesamlphp;
format = pkgs.formats.php { finalVariable = "config"; };
generateConfig =
opts:
pkgs.runCommand "simplesamlphp-config" { } ''
mkdir $out
cp ${format.generate "config.php" opts.settings} $out/config.php
cp ${format.generate "authsources.php" opts.authSources} $out/authsources.php
'';
in
{
meta = {
maintainers = with lib.maintainers; [ nhnn ];
};
options.services.simplesamlphp =
with lib;
mkOption {
type = types.attrsOf (
types.submodule (
{ config, ... }:
{
options = {
package = mkPackageOption pkgs "simplesamlphp" { };
configureNginx = mkOption {
type = types.bool;
default = true;
description = "Configure nginx as a reverse proxy for SimpleSAMLphp.";
};
phpfpmPool = mkOption {
type = types.str;
description = "The PHP-FPM pool that serves SimpleSAMLphp instance.";
};
localDomain = mkOption {
type = types.str;
description = "The domain serving your SimpleSAMLphp instance. This option modifies only /saml route.";
};
settings = mkOption {
type = types.submodule {
freeformType = format.type;
options = {
baseurlpath = mkOption {
type = types.str;
example = "https://filesender.example.com/saml/";
description = "URL where SimpleSAMLphp can be reached.";
};
};
};
default = { };
description = ''
Configuration options used by SimpleSAMLphp.
See [](https://simplesamlphp.org/docs/stable/simplesamlphp-install)
for available options.
'';
};
authSources = mkOption {
type = format.type;
default = { };
description = ''
Auth sources options used by SimpleSAMLphp.
'';
};
libDir = mkOption {
type = types.str;
readOnly = true;
description = ''
Path to the SimpleSAMLphp library directory.
'';
};
configDir = mkOption {
type = types.str;
readOnly = true;
description = ''
Path to the SimpleSAMLphp config directory.
'';
};
};
config = {
libDir = "${config.package}/share/php/simplesamlphp/";
configDir = "${generateConfig config}";
};
}
)
);
default = { };
description = "Instances of SimpleSAMLphp. This module is designed to work with already existing PHP-FPM pool and NGINX virtualHost.";
};
config = {
services.phpfpm.pools = lib.mapAttrs' (
phpfpmName: opts:
lib.nameValuePair opts.phpfpmPool { phpEnv.SIMPLESAMLPHP_CONFIG_DIR = "${generateConfig opts}"; }
) cfg;
services.nginx.virtualHosts = lib.mapAttrs' (
phpfpmName: opts:
lib.nameValuePair opts.localDomain (
lib.mkIf opts.configureNginx {
locations."^~ /saml/" = {
alias = "${opts.package}/share/php/simplesamlphp/www/";
extraConfig = ''
location ~ ^(?<prefix>/saml)(?<phpfile>.+?\.php)(?<pathinfo>/.*)?$ {
include ${pkgs.nginx}/conf/fastcgi.conf;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:${config.services.phpfpm.pools.${phpfpmName}.socket};
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $document_root$phpfile;
fastcgi_param SCRIPT_NAME /saml$phpfile;
fastcgi_param PATH_INFO $pathinfo if_not_empty;
}
'';
};
}
)
) cfg;
};
}

View File

@ -29,6 +29,7 @@ in {
packages = with pkgs; [
ayatana-indicator-datetime
ayatana-indicator-messages
ayatana-indicator-power
ayatana-indicator-session
] ++ (with pkgs.lomiri; [
lomiri-indicator-network

View File

@ -290,13 +290,14 @@ in {
# There's a test app we could use that also displays their contents, but it's abit inconsistent.
with subtest("ayatana indicators work"):
mouse_click(735, 0) # the cog in the top-right, for the session indicator
machine.wait_for_text(r"(Notifications|Time|Date|System)")
machine.wait_for_text(r"(Notifications|Battery|Time|Date|System)")
machine.screenshot("indicators_open")
# Indicator order within the menus *should* be fixed based on per-indicator order setting
# Session is the one we clicked, but the last we should test (logout). Go as far left as we can test.
machine.send_key("left")
machine.send_key("left")
machine.send_key("left")
# Notifications are usually empty, nothing to check there
with subtest("lomiri indicator network works"):
@ -304,6 +305,11 @@ in {
machine.wait_for_text(r"(Flight|Wi-Fi)")
machine.screenshot("indicators_network")
with subtest("ayatana indicator power works"):
machine.send_key("right")
machine.wait_for_text(r"(Charge|Battery settings)")
machine.screenshot("indicators_power")
with subtest("ayatana indicator datetime works"):
machine.send_key("right")
machine.wait_for_text("Time and Date Settings")

View File

@ -18,7 +18,6 @@
, rustc
, feedbackd
, wrapGAppsHook3
, fetchpatch
, nixosTests
}:

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, cmake
, pkg-config
, fmt

View File

@ -1,7 +1,6 @@
{ lib
, mkDerivation
, fetchFromGitHub
, fetchpatch
, boost
, cmake
, chromaprint

View File

@ -1,4 +1,4 @@
{ lib, stdenv, autoreconfHook, fetchFromGitHub, fetchpatch, fdk_aac }:
{ lib, stdenv, autoreconfHook, fetchFromGitHub, fdk_aac }:
stdenv.mkDerivation rec {
pname = "fdkaac";

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, cmake
, pkg-config
, fltk

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetchurl, fetchpatch, pkg-config, makeWrapper
{ lib, stdenv, fetchurl, pkg-config, makeWrapper
, libsndfile, jack2
, libGLU, libGL, lv2, cairo
, ladspaH, php, libXrandr }:

View File

@ -2,7 +2,6 @@
, cmake
, curl
, fetchFromGitHub
, fetchpatch
, ffmpeg
, gnutls
, lame

View File

@ -1,7 +1,6 @@
{ stdenv
, lib
, fetchFromGitea
, fetchpatch
, cmake
, wxGTK32
, gtk3

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetchFromGitHub, fetchpatch
{ lib, stdenv, fetchFromGitHub
, cmake, pkg-config
, boost179, miniupnpc, openssl, unbound
, zeromq, pcsclite, readline, libsodium, hidapi

View File

@ -2,7 +2,6 @@
{ stdenv
, fetchFromGitHub
, fetchpatch
, lib
, rustPlatform
, pkg-config

View File

@ -2,7 +2,6 @@
, stdenv
, mkDerivation
, fetchurl
, fetchpatch
, fetchFromGitHub
, makeDesktopItem
, copyDesktopItems

View File

@ -1477,8 +1477,8 @@ let
mktplcRef = {
name = "elixir-ls";
publisher = "JakeBecker";
version = "0.21.1";
hash = "sha256-z/GhynjkoEcaRp59tYr1lnM5vfV0OaDCcCpC02OdVLE=";
version = "0.21.2";
hash = "sha256-UZthDY+O8rG+oz/jQyQKDPbdS+lVKiLyuicU+4SGivw=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/JakeBecker.elixir-ls/changelog";
@ -3700,8 +3700,8 @@ let
mktplcRef = {
publisher = "shd101wyy";
name = "markdown-preview-enhanced";
version = "0.8.12";
hash = "sha256-4Iq6idux029i7cBV3x79ZRAbSk3ymqx+Q2jv0zV9ZTI=";
version = "0.8.13";
hash = "sha256-DxM7oWAbIonsKTvJjxX4oTaBwvRcxNT2y10ljYAzVeI=";
};
meta = {
description = "Provides a live preview of markdown using either markdown-it or pandoc";

View File

@ -1,4 +1,4 @@
{ lib, rustPlatform, fetchFromGitHub, fetchpatch, pkg-config, openssl, stdenv, Security }:
{ lib, rustPlatform, fetchFromGitHub, pkg-config, openssl, stdenv, Security }:
rustPlatform.buildRustPackage rec {
pname = "zee";

View File

@ -3,7 +3,6 @@
, runCommandWith
, writeShellScript
, fetchFromGitHub
, fetchpatch
, nixosTests
, freetype

View File

@ -2,7 +2,6 @@
, cairo
, cmake
, fetchFromGitHub
, fetchpatch
, ffmpeg
, gettext
, wxGTK32

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, installShellFiles
, makeWrapper
, pkg-config

View File

@ -1,7 +1,6 @@
{ stdenv
, lib
, fetchurl
, fetchpatch2
, at-spi2-core
, babl
, dbus

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchurl
, fetchpatch
, wrapGAppsHook4
, cargo
, desktop-file-utils

View File

@ -1,5 +1,5 @@
{ lib, stdenv, fetchFromGitHub, autoreconfHook, autoconf-archive, pkg-config
, leptonica, libpng, libtiff, icu, pango, opencl-headers, fetchpatch }:
, leptonica, libpng, libtiff, icu, pango, opencl-headers }:
stdenv.mkDerivation rec {
pname = "tesseract";

View File

@ -1,5 +1,5 @@
{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
, curl, leptonica, libarchive, libpng, libtiff, icu, pango, opencl-headers, fetchpatch
, curl, leptonica, libarchive, libpng, libtiff, icu, pango, opencl-headers
, Accelerate, CoreGraphics, CoreVideo
}:

View File

@ -1,4 +1,4 @@
{ stdenv, mkDerivation, lib, fetchFromGitHub, fetchpatch
{ stdenv, mkDerivation, lib
, cmake, extra-cmake-modules, pkg-config
, libpthreadstubs, libxcb, libXdmcp
, qtsvg, qttools, qtwebengine, qtx11extras

View File

@ -43,7 +43,6 @@
webkitgtk,
wxGTK31,
xorg,
fetchpatch,
withSystemd ? stdenv.isLinux,
}:
let

View File

@ -1,4 +1,4 @@
{ stdenv, lib, fetchFromGitHub, fetchpatch, cairo, libxkbcommon
{ stdenv, lib, fetchFromGitHub, cairo, libxkbcommon
, pango, fribidi, harfbuzz, pcre, pkg-config, scdoc
, ncursesSupport ? true, ncurses
, waylandSupport ? true, wayland, wayland-protocols, wayland-scanner

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitLab
, fetchpatch2
, docbook-xsl-nons
, docutils
, gi-docgen

View File

@ -21,17 +21,17 @@ let
};
in buildNpmPackage rec {
pname = "kaufkauflist";
version = "3.3.0";
version = "4.0.0";
src = fetchFromGitea {
domain = "codeberg.org";
owner = "annaaurora";
repo = "kaufkauflist";
rev = "v${version}";
hash = "sha256-kqDNA+BALVMrPZleyPxxCyls4VKBzY2MttzO51+Ixo8=";
hash = "sha256-x30K2dYxawfebdq//9OmCCG48w0V04tDTXpvRW7lfJI=";
};
npmDepsHash = "sha256-O2fcmC7Hj9JLStMukyt12aMgntjXT7Lv3vYJp3GqO24=";
npmDepsHash = "sha256-E3AXFwiRvrE2Swt7BfSfAoU5mQplSaSJ4q56pVfoEkQ=";
ESBUILD_BINARY_PATH = lib.getExe esbuild';

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, cmake
, pkg-config
, makeWrapper

View File

@ -1,7 +1,6 @@
{ buildPythonApplication
, lib
, fetchFromGitHub
, fetchpatch
# build inputs
, atk

View File

@ -1,7 +1,6 @@
{ mkDerivation
, lib
, fetchFromGitHub
, fetchpatch
, anthy
, hunspell

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, cmake
, qttools

View File

@ -1,4 +1,4 @@
{ lib, mkDerivation, fetchFromGitHub, fetchpatch, qmake, pkg-config, udev
{ lib, mkDerivation, fetchFromGitHub, qmake, pkg-config, udev
, qtmultimedia, qtscript, qtserialport, alsa-lib, ola, libftdi1, libusb-compat-0_1
, libsndfile, libmad
}:

View File

@ -1,6 +1,5 @@
{ lib
, fetchFromGitHub
, fetchpatch
, rustPlatform
, xorg
}:

View File

@ -2,7 +2,6 @@
, nixosTests
, python3
, fetchFromGitHub
, fetchpatch
}:
let
python = python3.override {

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromSourcehut
, fetchpatch
, pkg-config
, meson
, ninja

View File

@ -1,7 +1,6 @@
{ IOKit
, buildGoModule
, fetchFromGitHub
, fetchpatch
, lib
, stdenv
}:

View File

@ -1,15 +1,15 @@
{
"packageVersion": "125.0.3-1",
"packageVersion": "126.0-1",
"source": {
"rev": "125.0.3-1",
"sha256": "0ny4bh1kn9j8wqfbdi78fl2sh0sv14klznhsg47hvckgwf8iii6d"
"rev": "126.0-1",
"sha256": "1q8fjki6rgzrir84y7j2anra2w213bm0g74nw205gja9qsxlassc"
},
"settings": {
"rev": "6b2b6a89fc15a705388955e4d1375f453d8cdc89",
"sha256": "0yginhc8pn00k1gh8h7bzvrl4vi2wimbmrrgnmvvblv28bxhwnh0"
"rev": "e439bde05b2980089b9c8a6f990562dcd9e9ca4a",
"sha256": "16fzdpjqz5ih2pjkj698hrqlw4wck4adys4cdfc2kflf6aydk39m"
},
"firefox": {
"version": "125.0.3",
"sha512": "18e705a3093290311ccb5f27f01e43fe243ece94c1769a9ccc4fa53d370e32a1ec6a107cdeb531e9468b9aca1a1fe668161adb7acc1ec65fd383837882c7d484"
"version": "126.0",
"sha512": "56025b051d544ca294911a1d6a66f09945f71012131881b64313dafb579730810a4b091950c90a21d4fd3f393ba23670d8409086e1677d80d0bbbe347c303527"
}
}

View File

@ -8,7 +8,6 @@
, sslSupport ? true
, openssl
, nukeReferences
, fetchpatch
}:
stdenv.mkDerivation rec {

View File

@ -1,6 +1,5 @@
{ lib
, fetchFromGitLab
, fetchpatch
, meson
, gobject-introspection
, pkg-config

View File

@ -1,6 +1,5 @@
{ lib, stdenv
, fetchurl
, fetchpatch
# native
, meson
, ninja

View File

@ -1,4 +1,4 @@
{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
{ lib, buildGoModule, fetchFromGitHub }:
buildGoModule rec {
pname = "hydroxide";

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "signalbackup-tools";
version = "20240509-1";
version = "20240514";
src = fetchFromGitHub {
owner = "bepaald";
repo = pname;
rev = version;
hash = "sha256-GUh/OTeJNBg3TDij/8jIEXfw9ox1wvq6tRq61JbMiZg=";
hash = "sha256-3coP4Bia/a2xbeHQBUq2rXPEPzWEX9hJX1kb1wh60FA=";
};
postPatch = ''

View File

@ -1,5 +1,5 @@
{ lib, stdenv, fetchFromGitLab, jdk17_headless, coreutils, findutils, gnused,
gradle, git, perl, makeWrapper, fetchpatch, substituteAll, jre_minimal
gradle, git, perl, makeWrapper, substituteAll, jre_minimal
}:
# NOTE: when updating the package, please check if some of the hacks in `deps.installPhase`

View File

@ -1,4 +1,4 @@
{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
{ lib, buildGoModule, fetchFromGitHub }:
buildGoModule rec {
pname = "ipfs-cluster";

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetchurl, fetchpatch, ncurses, autoreconfHook, flex }:
{ lib, stdenv, fetchurl, ncurses, autoreconfHook, flex }:
let rev = "b17ea39dc17e5514f33b3f5c34ede92bd16e208c";
in stdenv.mkDerivation rec {
pname = "mmh";

View File

@ -64,7 +64,7 @@ let
systemd
];
version = "2024.1";
version = "2024.3";
selectSystem = attrs: attrs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
@ -74,8 +74,8 @@ let
};
hash = selectSystem {
x86_64-linux = "sha256-io6ROUHoSBij1ah6yi1Gbni6yWVVoYZKUd7BR+GXKLg=";
aarch64-linux = "sha256-bzKTASfqjmjyKZecr8MGaChd6g48aQhfpuc+gUqwoPI=";
x86_64-linux = "sha256-LfuLBYGHlVEcVpHSdRSAEf9D7QChRd/fhx8EoCBZbSc=";
aarch64-linux = "sha256-7uUgewZ9KVLyMUax6u0R6ZN1YS3L4c43meVqJQD77lA=";
};
in

View File

@ -1,7 +1,6 @@
{ lib
, buildGoModule
, mullvad
, fetchpatch
}:
buildGoModule {
pname = "libwg";

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetchFromGitHub, pkg-config, makeDesktopItem, fetchpatch, unzip
{ lib, stdenv, fetchFromGitHub, pkg-config, makeDesktopItem, unzip
, fpc, lazarus, libX11, glib, gtk2, gdk-pixbuf, pango, atk, cairo, openssl
, unstableGitUpdater }:

View File

@ -3,7 +3,6 @@
, autoconf
, automake
, fetchFromGitHub
, fetchpatch
, libpcap
, ncurses
, openssl

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, lua, pkg-config, rsync,
{ lib, stdenv, fetchFromGitHub, cmake, lua, pkg-config, rsync,
asciidoc, libxml2, docbook_xml_dtd_45, docbook_xsl, libxslt, xnu }:
stdenv.mkDerivation rec {

View File

@ -1,5 +1,4 @@
{ lib
, fetchpatch
, fetchFromGitLab
, python3
, appstream-glib

View File

@ -1,7 +1,6 @@
{ lib
, python3
, fetchFromGitHub
, fetchpatch
}:
python3.pkgs.buildPythonApplication rec {

View File

@ -1,6 +1,5 @@
{ lib
, fetchFromGitHub
, fetchpatch
, meson
, python3Packages
, ninja

View File

@ -1,5 +1,4 @@
{ lib, stdenv, fetchFromGitHub
, fetchpatch
, avahi
, cups
, gnutls

View File

@ -1,6 +1,5 @@
{ lib
, fetchFromGitHub
, fetchpatch
, armadillo
, cmake
, gmp

View File

@ -1,6 +1,5 @@
{ lib, stdenv
, fetchFromGitHub
, fetchpatch
, cmake
# Remove gcc and python references
, removeReferencesTo

View File

@ -3,13 +3,13 @@
, withEphemeris ? true
, withMoonsEphemeris ? true
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation {
pname = "astrolog";
version = "7.30";
version = "7.70";
src = fetchzip {
url = "http://www.astrolog.org/ftp/ast73src.zip";
sha256 = "0nry4gxwy5aa99zzr8dlb6babpachsc3jjyk0vw82c7x3clbhl7l";
url = "https://www.astrolog.org/ftp/ast77src.zip";
hash = "sha256-rG7njEtnHwUDqWstj0bQxm2c9CbsOmWOCYs0FtiVoJE=";
stripRoot = false;
};

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetchurl, fetchpatch, zlib, htslib, perl, ncurses ? null }:
{ lib, stdenv, fetchurl, zlib, htslib, perl, ncurses ? null }:
stdenv.mkDerivation rec {
pname = "samtools";

View File

@ -1,6 +1,6 @@
{ stdenv, lib, fetchFromGitHub, pkg-config, cmake, wrapQtAppsHook
, libzip, boost, fftw, qtbase, qtwayland, qtsvg, libusb1
, python3, fetchpatch, desktopToDarwinBundle
, python3, desktopToDarwinBundle
}:
stdenv.mkDerivation rec {

View File

@ -2,7 +2,6 @@
lib,
python3,
fetchFromGitHub,
fetchpatch,
qt6,
}:
python3.pkgs.buildPythonApplication rec {

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, bison
, flex
, verilog

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchurl
, fetchpatch
, gmp
, libX11
, libpthreadstubs

View File

@ -1,5 +1,5 @@
{ lib, stdenv, fetchFromGitHub, zlib, libtiff, libxml2, openssl, libiconv
, libpng, cmake, fetchpatch }:
, libpng, cmake }:
with lib;
stdenv.mkDerivation rec {

View File

@ -1,4 +1,4 @@
{ stdenv, buildPythonApplication, fetchFromGitHub, fetchpatch, isPyPy, lib
{ stdenv, buildPythonApplication, fetchFromGitHub, isPyPy, lib
, defusedxml, future, ujson, packaging, psutil, setuptools
# Optional dependencies:
, bottle, pysnmp

View File

@ -2,7 +2,6 @@
, lib
, fetchFromGitea
, fetchurl
, fetchpatch
, runCommand
, fcft
, freetype

View File

@ -1,4 +1,4 @@
{ lib, fetchurl, fetchpatch, stdenv, zlib, ncurses, libiconv }:
{ lib, fetchurl, stdenv, zlib, ncurses, libiconv }:
stdenv.mkDerivation (finalAttrs: {
pname = "fnc";

View File

@ -1,4 +1,4 @@
{ stdenv, lib, fetchpatch, fetchFromGitLab, bundlerEnv
{ stdenv, lib, fetchFromGitLab, bundlerEnv
, ruby_3_1, tzdata, git, nettools, nixosTests, nodejs, openssl
, defaultGemConfig, buildRubyGem
, gitlabEnterprise ? false, callPackage, yarn

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, rustPlatform
, libgit2
, openssl

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetchurl, fetchpatch, python3Packages, makeWrapper, gettext, installShellFiles
{ lib, stdenv, fetchurl, python3Packages, makeWrapper, gettext, installShellFiles
, re2Support ? true
# depends on rust-cpython which won't support python312
# https://github.com/dgrunwald/rust-cpython/commit/e815555629e557be084813045ca1ddebc2f76ef9

View File

@ -1,4 +1,4 @@
{ mkDerivation, lib, fetchFromGitHub, fetchpatch, phonon, phonon-backend-vlc, qtbase, qmake
{ mkDerivation, lib, fetchFromGitHub, phonon, phonon-backend-vlc, qtbase, qmake
, qtdeclarative, qttools, qtx11extras, mpv
# "Free" key generated by pasqui23

View File

@ -2,7 +2,6 @@
, config
, stdenv
, fetchFromGitHub
, fetchpatch
, addOpenGLRunpath
, bash
, docutils

View File

@ -1,7 +1,6 @@
{
lib,
fetchFromGitHub,
fetchpatch,
gitUpdater,
makeFontsConf,
buildLua,

View File

@ -1,4 +1,4 @@
{ lib, mkDerivation, fetchFromGitHub, fetchpatch, which, qtbase, qtwebkit, qtscript
{ lib, mkDerivation, fetchFromGitHub, which, qtbase, qtwebkit, qtscript
, libpulseaudio, fftwSinglePrec , lame, zlib, libGLU, libGL, alsa-lib, freetype
, perl, pkg-config , libsamplerate, libbluray, lzo, libX11, libXv, libXrandr, libXvMC, libXinerama, libXxf86vm
, libXmu , yasm, libuuid, taglib, libtool, autoconf, automake, file, exiv2, linuxHeaders

View File

@ -23,13 +23,13 @@
stdenv.mkDerivation rec {
pname = "advanced-scene-switcher";
version = "1.26.1";
version = "1.26.2";
src = fetchFromGitHub {
owner = "WarmUpTill";
repo = "SceneSwitcher";
rev = version;
hash = "sha256-nig6MBPorKz/mZ7t4SbcW00ukEV9DWVDLAOgWX53xoo=";
hash = "sha256-x9wk4tqCXufHSb/ssUxjm0o6JrZzXnIk+adIn/YI9Qk=";
};
nativeBuildInputs = [

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, pkg-config
, cmake
, opencv

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchurl
, fetchpatch
, autoreconfHook
, curl
, libXext

View File

@ -3,7 +3,6 @@
, fetchFromGitHub
, nix
, virt-viewer
, fetchpatch
, makeWrapper }:
let

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch2
, pkg-config
, glib
, glibc

View File

@ -308,15 +308,15 @@ rec {
};
docker_26 = callPackage dockerGen rec {
version = "26.0.0";
version = "26.1.3";
cliRev = "v${version}";
cliHash = "sha256-jGg/AVnIzI8e+DdF0uKlSZApRxcwuOjCQpfnBaCY4fI=";
cliHash = "sha256-xE+g9Gtza4oAIlGUzDmjrqJa42bEkpbKbL2fsFlYzpY=";
mobyRev = "v${version}";
mobyHash = "sha256-cDlRVdQNzH/X2SJUYHK1QLUHlKQtSyRYCVbz3wPx1ZM=";
mobyHash = "sha256-s4hOvYV2+wDNKs4iFw6OflK+nemvqNhmfFURzhWaUzY=";
runcRev = "v1.1.12";
runcHash = "sha256-N77CU5XiGYIdwQNPFyluXjseTeaYuNJ//OsEUS0g/v0=";
containerdRev = "v1.7.13";
containerdHash = "sha256-y3CYDZbA2QjIn1vyq/p1F1pAVxQHi/0a6hGWZCRWzyk=";
containerdRev = "v1.7.15";
containerdHash = "sha256-qLrPLGxsUmgEscrhyl+1rJ0k7c9ibKnpMpsJPD4xDZU=";
tiniRev = "v0.19.0";
tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
};

View File

@ -1,7 +1,6 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, cairo
, cmake
, glib

View File

@ -11,13 +11,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "miriway";
version = "0-unstable-2024-04-30";
version = "0-unstable-2024-05-17";
src = fetchFromGitHub {
owner = "Miriway";
repo = "Miriway";
rev = "726ef446c89a75510311638a4892e97ad9e0fa4e";
hash = "sha256-7OoCoZ4IHXYI73W93P9MzVGYFv/+MDcbbhPdJY9lD2M=";
rev = "5be8f60326181b22e111f02918ae5778cf1a89b0";
hash = "sha256-dHY0bfVfRpiBY5rPnhmu3aHXx1l9jQhXBtcBbej2JFk=";
};
strictDeps = true;

View File

@ -20,17 +20,17 @@
buildGoModule rec {
pname = "aaaaxy";
version = "1.5.54";
version = "1.5.129";
src = fetchFromGitHub {
owner = "divVerent";
repo = pname;
rev = "v${version}";
hash = "sha256-FBla+KvUoUdCG0nM4falMJBq8NI75zqo/YSZy0bPFrE=";
hash = "sha256-kH2eFFxohvuuEP2p7bt8zOYbk3gF86X9y3sNdLYl/Qo=";
fetchSubmodules = true;
};
vendorHash = "sha256-rE1YXDpiGnAUdmAaOHehyM38SPBqNvSRHhtXIUwRYVs=";
vendorHash = "sha256-VEayNWztJYeQoJHVJfAlmHD65PEho1TCttTfT0cbgUQ=";
buildInputs = [
alsa-lib
@ -52,14 +52,14 @@ buildGoModule rec {
postPatch = ''
# Without patching, "go run" fails with the error message:
# package github.com/google/go-licenses: no Go files in /build/source/vendor/github.com/google/go-licenses
substituteInPlace scripts/build-licenses.sh --replace \
substituteInPlace scripts/build-licenses.sh --replace-fail \
'$GO run ''${GO_FLAGS} github.com/google/go-licenses' 'go-licenses'
patchShebangs scripts/
substituteInPlace scripts/regression-test-demo.sh \
--replace 'sh scripts/run-timedemo.sh' "$testing_infra/scripts/run-timedemo.sh"
--replace-fail 'sh scripts/run-timedemo.sh' "$testing_infra/scripts/run-timedemo.sh"
substituteInPlace Makefile --replace \
substituteInPlace Makefile --replace-fail \
'CPPFLAGS ?= -DNDEBUG' \
'CPPFLAGS ?= -DNDEBUG -D_GLFW_GLX_LIBRARY=\"${lib.getLib libGL}/lib/libGL.so\" -D_GLFW_EGL_LIBRARY=\"${lib.getLib libGL}/lib/libEGL.so\"'
'';
@ -70,11 +70,11 @@ buildGoModule rec {
# changes, the hash would change.
# To work around this, use environment variables.
postBuild = ''
substituteInPlace 'vendor/github.com/hajimehoshi/ebiten/v2/internal/graphicsdriver/opengl/gl/procaddr_others.go' \
--replace \
substituteInPlace 'vendor/github.com/hajimehoshi/ebiten/v2/internal/graphicsdriver/opengl/gl/procaddr_linbsd.go' \
--replace-fail \
'{"libGL.so", "libGL.so.2", "libGL.so.1", "libGL.so.0"}' \
'{os.Getenv("EBITENGINE_LIBGL")}' \
--replace \
--replace-fail \
'{"libGLESv2.so", "libGLESv2.so.2", "libGLESv2.so.1", "libGLESv2.so.0"}' \
'{os.Getenv("EBITENGINE_LIBGLESv2")}'
'';

View File

@ -6,6 +6,7 @@ alephone.makeWrapper rec {
version = "20240510";
icon = alephone.icons + "/marathon2.png";
# nixpkgs-update: no auto update
zip = fetchurl {
url =
"https://github.com/Aleph-One-Marathon/alephone/releases/download/release-${version}/Marathon2-${version}-Data.zip";

View File

@ -6,6 +6,7 @@ alephone.makeWrapper rec {
version = "20240510";
icon = alephone.icons + "/marathon-infinity.png";
# nixpkgs-update: no auto update
zip = fetchurl {
url =
"https://github.com/Aleph-One-Marathon/alephone/releases/download/release-${version}/MarathonInfinity-${version}-Data.zip";

View File

@ -6,6 +6,7 @@ alephone.makeWrapper rec {
version = "20240510";
icon = alephone.icons + "/marathon.png";
# nixpkgs-update: no auto update
zip = fetchurl {
url =
"https://github.com/Aleph-One-Marathon/alephone/releases/download/release-${version}/Marathon-${version}-Data.zip";

View File

@ -5,16 +5,20 @@
}:
buildGoModule rec {
pname = "astartectl";
version = "23.5.0";
version = "23.5.1";
# Workaround for go vendor failing
# https://github.com/astarte-platform/astartectl/pull/244
postPatch = "go mod edit -go=1.22";
src = fetchFromGitHub {
owner = "astarte-platform";
repo = "astartectl";
rev = "v${version}";
hash = "sha256-4NgDVuYEeJI5Arq+/+xdyUOBWdCLALM3EKVLSFimJlI=";
hash = "sha256-ntlLk7soiZq6Ql6k/RG9PdHawguRV6Wha8C+5FM+2og=";
};
vendorHash = "sha256-Syod7SUsjiM3cdHPZgjH/3qdsiowa0enyV9DN8k13Ws=";
vendorHash = "sha256-3k/G7fLll19XG2RU8YsepWv8BtkCmiLg4/c7lSvx+9k=";
nativeBuildInputs = [ installShellFiles ];

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