Merge staging-next into staging

This commit is contained in:
nixpkgs-ci[bot] 2025-06-16 12:07:59 +00:00 committed by GitHub
commit d07fa982d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
76 changed files with 1819 additions and 392 deletions

View File

@ -56,11 +56,7 @@ Make sure that your local files aren't added to Git history by adding the follow
#### `devmode`
The shell in the manual source directory makes available a command, `devmode`.
It is a daemon, that:
1. watches the manual's source for changes and when they occur — rebuilds
2. HTTP serves the manual, injecting a script that triggers reload on changes
3. opens the manual in the default browser
Use [`devmode`](../pkgs/by-name/de/devmode/README.md) for a live preview when editing the manual.
### Testing redirects

View File

@ -37,7 +37,9 @@ Make sure that your local files aren't added to Git history by adding the follow
/**/.direnv
```
You might want to also use [`devmode`](https://github.com/NixOS/nixpkgs/blob/master/doc/README.md#devmode) while editing the manual.
### `devmode` {#sec-contributing-devmode}
Use [`devmode`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/de/devmode/README.md) for a live preview when editing the manual.
## Testing redirects {#sec-contributing-redirects}

View File

@ -95,6 +95,9 @@
"sec-contributing-development-env": [
"index.html#sec-contributing-development-env"
],
"sec-contributing-devmode": [
"index.html#sec-contributing-devmode"
],
"sec-mattermost": [
"index.html#sec-mattermost"
],
@ -551,6 +554,18 @@
"module-services-youtrack-upgrade-2022_3-2023_1": [
"index.html#module-services-youtrack-upgrade-2022_3-2023_1"
],
"module-services-szurubooru": [
"index.html#module-services-szurubooru"
],
"module-services-szurubooru-basic-usage": [
"index.html#module-services-szurubooru-basic-usage"
],
"module-services-szurubooru-reverse-proxy-configuration": [
"index.html#module-services-szurubooru-reverse-proxy-configuration"
],
"module-services-szurubooru-extra-config": [
"index.html#module-services-szurubooru-extra-config"
],
"module-services-suwayomi-server": [
"index.html#module-services-suwayomi-server"
],

View File

@ -32,6 +32,10 @@
- [postfix-tlspol](https://github.com/Zuplu/postfix-tlspol), MTA-STS and DANE resolver and TLS policy server for Postfix. Available as [services.postfix-tlspol](#opt-services.postfix-tlspol.enable).
- [Szurubooru](https://github.com/rr-/szurubooru), an image board engine inspired by services such as Danbooru, dedicated for small and medium communities. Available as [services.szurubooru](#opt-services.szurubooru.enable).
- [nix-store-veritysetup](https://github.com/nikstur/nix-store-veritysetup-generator), a systemd generator to unlock the Nix Store as a dm-verity protected block device. Available as [boot.initrd.nix-store-veritysetup](options.html#opt-boot.initrd.nix-store-veritysetup.enable).
- [SuiteNumérique Docs](https://github.com/suitenumerique/docs), a collaborative note taking, wiki and documentation web platform and alternative to Notion or Outline. Available as [services.lasuite-docs](#opt-services.lasuite-docs.enable).
[dwl](https://codeberg.org/dwl/dwl), a compact, hackable compositor for Wayland based on wlroots. Available as [programs.dwl](#opt-programs.dwl.enable).

View File

@ -1663,6 +1663,7 @@
./services/web-apps/stirling-pdf.nix
./services/web-apps/strfry.nix
./services/web-apps/suwayomi-server.nix
./services/web-apps/szurubooru.nix
./services/web-apps/trilium.nix
./services/web-apps/tt-rss.nix
./services/web-apps/vikunja.nix
@ -1785,6 +1786,7 @@
./system/boot/luksroot.nix
./system/boot/modprobe.nix
./system/boot/networkd.nix
./system/boot/nix-store-veritysetup.nix
./system/boot/plymouth.nix
./system/boot/resolved.nix
./system/boot/shutdown.nix

View File

@ -0,0 +1,80 @@
# Szurubooru {#module-services-szurubooru}
An image board engine dedicated for small and medium communities.
## Configuration {#module-services-szurubooru-basic-usage}
By default the module will execute Szurubooru server only, the web client only contains static files that can be reached via a reverse proxy.
Here is a basic configuration:
```nix
{
services.szurubooru = {
enable = true;
server = {
port = 8080;
settings = {
domain = "https://szurubooru.domain.tld";
secretFile = /path/to/secret/file;
};
};
database = {
passwordFile = /path/to/secret/file;
};
};
}
```
## Reverse proxy configuration {#module-services-szurubooru-reverse-proxy-configuration}
The prefered method to run this service is behind a reverse proxy not to expose an open port. For example, here is a minimal Nginx configuration:
```nix
{
services.szurubooru = {
enable = true;
server = {
port = 8080;
...
};
...
};
services.nginx.virtualHosts."szurubooru.domain.tld" = {
locations = {
"/api/".proxyPass = "http://localhost:8080/";
"/data/".root = config.services.szurubooru.dataDir;
"/" = {
root = config.services.szurubooru.client.package;
tryFiles = "$uri /index.htm";
};
};
};
}
```
## Extra configuration {#module-services-szurubooru-extra-config}
Not all configuration options of the server are available directly in this module, but you can add them in `services.szurubooru.server.settings`:
```nix
{
services.szurubooru = {
enable = true;
server.settings = {
domain = "https://szurubooru.domain.tld";
delete_source_files = "yes";
contact_email = "example@domain.tld";
};
};
}
```
You can find all of the options in the default config file available [here](https://github.com/rr-/szurubooru/blob/master/server/config.yaml.dist).

View File

@ -0,0 +1,331 @@
{
config,
pkgs,
lib,
...
}:
let
cfg = config.services.szurubooru;
inherit (lib)
mkOption
mkEnableOption
mkIf
mkPackageOption
types
;
format = pkgs.formats.yaml { };
python = pkgs.python312;
in
{
options = {
services.szurubooru = {
enable = mkEnableOption "Szurubooru, an image board engine dedicated for small and medium communities";
user = mkOption {
type = types.str;
default = "szurubooru";
description = ''
User account under which Szurubooru runs.
'';
};
group = mkOption {
type = types.str;
default = "szurubooru";
description = ''
Group under which Szurubooru runs.
'';
};
dataDir = mkOption {
type = types.path;
default = "/var/lib/szurubooru";
example = "/var/lib/szuru";
description = ''
The path to the data directory in which Szurubooru will store its data.
'';
};
openFirewall = mkOption {
type = types.bool;
default = false;
example = true;
description = ''
Whether to open the firewall for the port in {option}`services.szurubooru.server.port`.
'';
};
server = {
package = mkPackageOption pkgs [
"szurubooru"
"server"
] { };
port = mkOption {
type = types.port;
default = 8080;
example = 9000;
description = ''
Port to expose HTTP service.
'';
};
threads = mkOption {
type = types.int;
default = 4;
example = 6;
description = ''Number of waitress threads to start.'';
};
settings = mkOption {
type = types.submodule {
freeformType = format.type;
options = {
name = mkOption {
type = types.str;
default = "szurubooru";
example = "Szuru";
description = ''Name shown in the website title and on the front page.'';
};
domain = mkOption {
type = types.str;
example = "http://example.com";
description = ''Full URL to the homepage of this szurubooru site (with no trailing slash).'';
};
# NOTE: this is not a real upstream option
secretFile = mkOption {
type = types.path;
example = "/run/secrets/szurubooru-server-secret";
description = ''
File containing a secret used to salt the users' password hashes and generate filenames for static content.
'';
};
delete_source_files = mkOption {
type = types.enum [
"yes"
"no"
];
default = "no";
example = "yes";
description = ''Whether to delete thumbnails and source files on post delete.'';
};
smtp = {
host = mkOption {
type = types.nullOr types.str;
default = null;
example = "localhost";
description = ''Host of the SMTP server used to send reset password.'';
};
port = mkOption {
type = types.nullOr types.port;
default = null;
example = 25;
description = ''Port of the SMTP server.'';
};
user = mkOption {
type = types.nullOr types.str;
default = null;
example = "bot";
description = ''User to connect to the SMTP server.'';
};
# NOTE: this is not a real upstream option
passFile = mkOption {
type = types.nullOr types.path;
default = null;
example = "/run/secrets/szurubooru-smtp-pass";
description = ''File containing the password associated to the given user for the SMTP server.'';
};
};
data_url = mkOption {
type = types.str;
default = "${cfg.server.settings.domain}/data/";
defaultText = lib.literalExpression ''"''${services.szurubooru.server.settings.domain}/data/"'';
example = "http://example.com/content/";
description = ''Full URL to the data endpoint.'';
};
data_dir = mkOption {
type = types.path;
default = "${cfg.dataDir}/data";
defaultText = lib.literalExpression ''"''${services.szurubooru.dataDir}/data"'';
example = "/srv/szurubooru/data";
description = ''Path to the static files.'';
};
debug = mkOption {
type = types.int;
default = 0;
example = 1;
description = ''Whether to generate server logs.'';
};
show_sql = mkOption {
type = types.int;
default = 0;
example = 1;
description = ''Whether to show SQL in server logs.'';
};
};
};
description = ''
Configuration to write to {file}`config.yaml`.
See <https://github.com/rr-/szurubooru/blob/master/server/config.yaml.dist> for more information.
'';
};
};
client = {
package = mkPackageOption pkgs [
"szurubooru"
"client"
] { };
};
database = {
host = mkOption {
type = types.str;
default = "localhost";
example = "192.168.1.2";
description = ''Host on which the PostgreSQL database runs.'';
};
port = mkOption {
type = types.port;
default = 5432;
description = ''The port under which PostgreSQL listens to.'';
};
name = mkOption {
type = types.str;
default = cfg.database.user;
defaultText = lib.literalExpression "szurubooru.database.name";
example = "szuru";
description = ''Name of the PostgreSQL database.'';
};
user = mkOption {
type = types.str;
default = "szurubooru";
example = "szuru";
description = ''PostgreSQL user.'';
};
passwordFile = mkOption {
type = types.path;
example = "/run/secrets/szurubooru-db-password";
description = ''A file containing the password for the PostgreSQL user.'';
};
};
};
};
config = mkIf cfg.enable {
networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall [ cfg.server.port ];
users.groups = mkIf (cfg.group == "szurubooru") {
szurubooru = { };
};
users.users = mkIf (cfg.user == "szurubooru") {
szurubooru = {
group = cfg.group;
description = "Szurubooru Daemon user";
isSystemUser = true;
};
};
systemd.services.szurubooru =
let
configFile = format.generate "config.yaml" (
lib.pipe cfg.server.settings [
(
settings:
lib.recursiveUpdate settings {
secretFile = null;
secret = "$SZURUBOORU_SECRET";
smtp.pass = if settings.smtp.passFile != null then "$SZURUBOORU_SMTP_PASS" else null;
smtp.passFile = null;
smtp.enable = null;
database = "postgresql://${cfg.database.user}:$SZURUBOORU_DATABASE_PASSWORD@${cfg.database.host}:${toString cfg.database.port}/${cfg.database.name}";
}
)
(lib.filterAttrsRecursive (_: x: x != null))
]
);
pyenv = python.buildEnv.override {
extraLibs = [ (python.pkgs.toPythonModule cfg.server.package) ];
};
in
{
description = "Server of Szurubooru, an image board engine dedicated for small and medium communities";
wantedBy = [
"multi-user.target"
"szurubooru-client.service"
];
before = [ "szurubooru-client.service" ];
after = [
"network.target"
"network-online.target"
];
wants = [ "network-online.target" ];
environment = {
PYTHONPATH = "${pyenv}/${pyenv.sitePackages}/";
};
path =
with pkgs;
[
envsubst
ffmpeg_4-full
]
++ (with python.pkgs; [
alembic
waitress
]);
script = ''
export SZURUBOORU_SECRET="$(<${cfg.server.settings.secretFile})"
export SZURUBOORU_DATABASE_PASSWORD="$(<${cfg.database.passwordFile})"
${lib.optionalString (cfg.server.settings.smtp.passFile != null) ''
export SZURUBOORU_SMTP_PASS=$(<${cfg.server.settings.smtp.passFile})
''}
install -m0640 ${cfg.server.package.src}/config.yaml.dist ${cfg.dataDir}/config.yaml.dist
envsubst -i ${configFile} -o ${cfg.dataDir}/config.yaml
sed 's|script_location = |script_location = ${cfg.server.package.src}/|' ${cfg.server.package.src}/alembic.ini > ${cfg.dataDir}/alembic.ini
alembic upgrade head
waitress-serve --port ${toString cfg.server.port} --threads ${toString cfg.server.threads} szurubooru.facade:app
'';
serviceConfig = {
User = cfg.user;
Group = cfg.group;
Type = "simple";
Restart = "on-failure";
StateDirectory = mkIf (cfg.dataDir == "/var/lib/szurubooru") "szurubooru";
WorkingDirectory = cfg.dataDir;
};
};
};
meta = {
maintainers = with lib.maintainers; [ ratcornu ];
doc = ./szurubooru.md;
};
}

View File

@ -0,0 +1,38 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.boot.initrd.nix-store-veritysetup;
in
{
meta.maintainers = with lib.maintainers; [ nikstur ];
options.boot.initrd.nix-store-veritysetup = {
enable = lib.mkEnableOption "nix-store-veritysetup";
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = config.boot.initrd.systemd.dmVerity.enable;
message = "nix-store-veritysetup requires dm-verity in the systemd initrd.";
}
];
boot.initrd.systemd = {
contents = {
"/etc/systemd/system-generators/nix-store-veritysetup-generator".source =
"${lib.getExe pkgs.nix-store-veritysetup-generator}";
};
storePaths = [
"${config.boot.initrd.systemd.package}/bin/systemd-escape"
];
};
};
}

View File

@ -306,7 +306,7 @@ in
cinnamon-wayland = runTest ./cinnamon-wayland.nix;
cjdns = runTest ./cjdns.nix;
clatd = runTest ./clatd.nix;
clickhouse = runTest ./clickhouse.nix;
clickhouse = import ./clickhouse { inherit runTest; };
cloud-init = handleTest ./cloud-init.nix { };
cloud-init-hostname = handleTest ./cloud-init-hostname.nix { };
cloudlog = runTest ./cloudlog.nix;
@ -938,6 +938,7 @@ in
nix-required-mounts = runTest ./nix-required-mounts;
nix-serve = runTest ./nix-serve.nix;
nix-serve-ssh = runTest ./nix-serve-ssh.nix;
nix-store-veritysetup = runTest ./nix-store-veritysetup.nix;
nixops = handleTest ./nixops/default.nix { };
nixos-generate-config = runTest ./nixos-generate-config.nix;
nixos-rebuild-install-bootloader = handleTestOn [
@ -1372,6 +1373,7 @@ in
systemd-homed = runTest ./systemd-homed.nix;
systemtap = handleTest ./systemtap.nix { };
startx = import ./startx.nix { inherit pkgs runTest; };
szurubooru = handleTest ./szurubooru.nix { };
taler = handleTest ./taler { };
tandoor-recipes = runTest ./tandoor-recipes.nix;
tandoor-recipes-script-name = runTest ./tandoor-recipes-script-name.nix;

View File

@ -1,7 +1,7 @@
{ pkgs, ... }:
{
name = "clickhouse";
meta.maintainers = with pkgs.lib.maintainers; [ ];
meta.maintainers = with pkgs.lib.maintainers; [ jpds ];
nodes.machine = {
services.clickhouse.enable = true;

View File

@ -0,0 +1,8 @@
{ runTest }:
{
base = runTest ./base.nix;
kafka = runTest ./kafka.nix;
keeper = runTest ./keeper.nix;
s3 = runTest ./s3.nix;
}

View File

@ -0,0 +1,172 @@
{ pkgs, ... }:
let
kafkaNamedCollectionConfig = ''
<clickhouse>
<named_collections>
<cluster_1>
<!-- ClickHouse Kafka engine parameters -->
<kafka_broker_list>kafka:9092</kafka_broker_list>
<kafka_topic_list>test_topic</kafka_topic_list>
<kafka_group_name>clickhouse</kafka_group_name>
<kafka_format>JSONEachRow</kafka_format>
<kafka_commit_every_batch>0</kafka_commit_every_batch>
<kafka_num_consumers>1</kafka_num_consumers>
<kafka_thread_per_consumer>1</kafka_thread_per_consumer>
<!-- Kafka extended configuration -->
<kafka>
<debug>all</debug>
<auto_offset_reset>earliest</auto_offset_reset>
</kafka>
</cluster_1>
</named_collections>
</clickhouse>
'';
kafkaNamedCollection = pkgs.writeText "kafka.xml" kafkaNamedCollectionConfig;
in
{
name = "clickhouse-kafka";
meta.maintainers = with pkgs.lib.maintainers; [ jpds ];
nodes = {
clickhouse = {
environment.etc = {
"clickhouse-server/config.d/kafka.xml" = {
source = "${kafkaNamedCollection}";
};
};
services.clickhouse.enable = true;
virtualisation.memorySize = 4096;
};
kafka = {
networking.firewall.allowedTCPPorts = [
9092
9093
];
environment.systemPackages = [
pkgs.apacheKafka
pkgs.jq
];
services.apache-kafka = {
enable = true;
# Randomly generated uuid. You can get one by running:
# kafka-storage.sh random-uuid
clusterId = "b81s-MuGSwyt_B9_h37wtQ";
formatLogDirs = true;
settings = {
listeners = [
"PLAINTEXT://:9092"
"CONTROLLER://:9093"
];
"listener.security.protocol.map" = [
"PLAINTEXT:PLAINTEXT"
"CONTROLLER:PLAINTEXT"
];
"controller.quorum.voters" = [
"1@kafka:9093"
];
"controller.listener.names" = [ "CONTROLLER" ];
"node.id" = 1;
"broker.rack" = 1;
"process.roles" = [
"broker"
"controller"
];
"log.dirs" = [ "/var/lib/apache-kafka" ];
"num.partitions" = 1;
"offsets.topic.replication.factor" = 1;
"transaction.state.log.replication.factor" = 1;
"transaction.state.log.min.isr" = 1;
};
};
systemd.services.apache-kafka.serviceConfig.StateDirectory = "apache-kafka";
};
};
testScript =
let
jsonTestMessage = pkgs.writeText "kafka-test-data.json" ''
{ "id": 1, "first_name": "Fred", "age": 32 }
{ "id": 2, "first_name": "Barbara", "age": 30 }
{ "id": 3, "first_name": "Nicola", "age": 12 }
'';
# work around quote/substitution complexity by Nix, Perl, bash and SQL.
tableKafkaDDL = pkgs.writeText "ddl-kafka.sql" ''
CREATE TABLE `test_kafka_topic` (
`id` UInt32,
`first_name` String,
`age` UInt32
) ENGINE = Kafka(cluster_1);
'';
tableDDL = pkgs.writeText "ddl.sql" ''
CREATE TABLE `test_topic` (
`id` UInt32,
`first_name` String,
`age` UInt32
) ENGINE = MergeTree ORDER BY id;
'';
viewDDL = pkgs.writeText "view.sql" ''
CREATE MATERIALIZED VIEW kafka_view TO test_topic AS
SELECT
id,
first_name,
age,
FROM test_kafka_topic;
'';
selectQuery = pkgs.writeText "select.sql" "SELECT sum(age) from `test_topic`";
in
''
kafka.start()
kafka.wait_for_unit("apache-kafka")
kafka.wait_for_open_port(9092)
clickhouse.start()
clickhouse.wait_for_unit("clickhouse")
clickhouse.wait_for_open_port(9000)
clickhouse.wait_until_succeeds(
"""
journalctl -o cat -u clickhouse.service | grep "Merging configuration file '/etc/clickhouse-server/config.d/kafka.xml'"
"""
)
clickhouse.succeed(
"cat ${tableKafkaDDL} | clickhouse-client"
)
clickhouse.succeed(
"cat ${tableDDL} | clickhouse-client"
)
clickhouse.succeed(
"cat ${viewDDL} | clickhouse-client"
)
kafka.succeed(
"jq -rc . ${jsonTestMessage} | kafka-console-producer.sh --topic test_topic --bootstrap-server kafka:9092"
)
kafka.wait_until_succeeds(
"journalctl -o cat -u apache-kafka.service | grep 'Created a new member id ClickHouse-clickhouse-default-test_kafka_topic'"
)
clickhouse.wait_until_succeeds(
"cat ${selectQuery} | clickhouse-client | grep 74"
)
'';
}

View File

@ -0,0 +1,183 @@
{ lib, pkgs, ... }:
rec {
name = "clickhouse-keeper";
meta.maintainers = with pkgs.lib.maintainers; [ jpds ];
nodes =
let
node = i: {
environment.etc = {
"clickhouse-server/config.d/cluster.xml".text = ''
<clickhouse>
<remote_servers>
<perftest_2shards_1replicas>
${lib.concatStrings (
lib.imap0 (j: name: ''
<shard>
<replica>
<host>${name}</host>
<port>9000</port>
</replica>
</shard>
'') (builtins.attrNames nodes)
)}
</perftest_2shards_1replicas>
</remote_servers>
</clickhouse>
'';
"clickhouse-server/config.d/keeper.xml".text = ''
<clickhouse>
<keeper_server>
<server_id>${toString i}</server_id>
<tcp_port>9181</tcp_port>
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
<session_timeout_ms>30000</session_timeout_ms>
<raft_logs_level>trace</raft_logs_level>
<rotate_log_storage_interval>10000</rotate_log_storage_interval>
</coordination_settings>
<raft_configuration>
${lib.concatStrings (
lib.imap1 (j: name: ''
<server>
<id>${toString j}</id>
<hostname>${name}</hostname>
<port>9444</port>
</server>
'') (builtins.attrNames nodes)
)}
</raft_configuration>
</keeper_server>
<zookeeper>
${lib.concatStrings (
lib.imap0 (j: name: ''
<node>
<host>${name}</host>
<port>9181</port>
</node>
'') (builtins.attrNames nodes)
)}
</zookeeper>
<distributed_ddl>
<path>/clickhouse/testcluster/task_queue/ddl</path>
</distributed_ddl>
</clickhouse>
'';
"clickhouse-server/config.d/listen.xml".text = ''
<clickhouse>
<listen_host>::</listen_host>
</clickhouse>
'';
"clickhouse-server/config.d/macros.xml".text = ''
<clickhouse>
<macros>
<replica>${toString i}</replica>
<cluster>perftest_2shards_1replicas</cluster>
</macros>
</clickhouse>
'';
};
networking.firewall.allowedTCPPorts = [
9009
9181
9444
];
services.clickhouse.enable = true;
systemd.services.clickhouse = {
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
};
virtualisation.memorySize = 1024 * 4;
virtualisation.diskSize = 1024 * 10;
};
in
{
clickhouse1 = node 1;
clickhouse2 = node 2;
};
testScript =
let
# work around quote/substitution complexity by Nix, Perl, bash and SQL.
clustersQuery = pkgs.writeText "clusters.sql" "SHOW clusters";
keeperQuery = pkgs.writeText "keeper.sql" "SELECT * FROM system.zookeeper WHERE path IN ('/', '/clickhouse') FORMAT VERTICAL";
systemClustersQuery = pkgs.writeText "system-clusters.sql" "SELECT host_name, host_address, replica_num FROM system.clusters WHERE cluster = 'perftest_2shards_1replicas'";
tableDDL = pkgs.writeText "table.sql" ''
CREATE TABLE test ON cluster 'perftest_2shards_1replicas' ( A Int64, S String)
Engine = ReplicatedMergeTree('/clickhouse/{cluster}/tables/{database}/{table}', '{replica}')
ORDER BY A;
'';
insertDDL = pkgs.writeText "insert.sql" "
INSERT INTO test SELECT number, '' FROM numbers(100000000);
";
selectCountQuery = pkgs.writeText "select-count.sql" "
select count() from test;
";
in
''
clickhouse1.start()
clickhouse2.start()
for machine in clickhouse1, clickhouse2:
machine.wait_for_unit("clickhouse.service")
machine.wait_for_open_port(9000)
machine.wait_for_open_port(9009)
machine.wait_for_open_port(9181)
machine.wait_for_open_port(9444)
machine.wait_until_succeeds(
"""
journalctl -o cat -u clickhouse.service | grep "Merging configuration file '/etc/clickhouse-server/config.d/keeper.xml'"
"""
)
machine.log(machine.succeed(
"cat ${clustersQuery} | clickhouse-client | grep perftest_2shards_1replicas"
))
machine.log(machine.succeed(
"cat ${keeperQuery} | clickhouse-client"
))
machine.succeed(
"cat ${systemClustersQuery} | clickhouse-client | grep clickhouse1"
)
machine.succeed(
"cat ${systemClustersQuery} | clickhouse-client | grep clickhouse2"
)
machine.succeed(
"ls /var/lib/clickhouse/coordination/log | grep changelog"
)
clickhouse2.succeed(
"cat ${tableDDL} | clickhouse-client"
)
clickhouse2.succeed(
"cat ${insertDDL} | clickhouse-client"
)
for machine in clickhouse1, clickhouse2:
machine.wait_until_succeeds(
"cat ${selectCountQuery} | clickhouse-client | grep 100000000"
)
'';
}

View File

@ -0,0 +1,121 @@
{ pkgs, ... }:
let
s3 = {
bucket = "clickhouse-bucket";
accessKey = "BKIKJAA5BMMU2RHO6IBB";
secretKey = "V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12";
};
clickhouseS3StorageConfig = ''
<clickhouse>
<storage_configuration>
<disks>
<s3_disk>
<type>s3</type>
<endpoint>http://minio:9000/${s3.bucket}/</endpoint>
<access_key_id>${s3.accessKey}</access_key_id>
<secret_access_key>${s3.secretKey}</secret_access_key>
<metadata_path>/var/lib/clickhouse/disks/s3_disk/</metadata_path>
</s3_disk>
<s3_cache>
<type>cache</type>
<disk>s3_disk</disk>
<path>/var/lib/clickhouse/disks/s3_cache/</path>
<max_size>10Gi</max_size>
</s3_cache>
</disks>
<policies>
<s3_main>
<volumes>
<main>
<disk>s3_disk</disk>
</main>
</volumes>
</s3_main>
</policies>
</storage_configuration>
</clickhouse>
'';
in
{
name = "clickhouse-s3";
meta.maintainers = with pkgs.lib.maintainers; [ jpds ];
nodes = {
clickhouse = {
environment.etc = {
"clickhouse-server/config.d/s3.xml" = {
text = "${clickhouseS3StorageConfig}";
};
};
services.clickhouse.enable = true;
virtualisation.diskSize = 15 * 1024;
virtualisation.memorySize = 4 * 1024;
};
minio =
{ pkgs, ... }:
{
virtualisation.diskSize = 2 * 1024;
networking.firewall.allowedTCPPorts = [ 9000 ];
services.minio = {
enable = true;
inherit (s3) accessKey secretKey;
};
environment.systemPackages = [ pkgs.minio-client ];
};
};
testScript =
let
# work around quote/substitution complexity by Nix, Perl, bash and SQL.
tableDDL = pkgs.writeText "ddl.sql" ''
CREATE TABLE `demo` (
`value` String
)
ENGINE = MergeTree
ORDER BY value
SETTINGS storage_policy = 's3_main';
'';
insertQuery = pkgs.writeText "insert.sql" "INSERT INTO `demo` (`value`) VALUES ('foo');";
selectQuery = pkgs.writeText "select.sql" "SELECT * from `demo`";
in
''
minio.wait_for_unit("minio")
minio.wait_for_open_port(9000)
minio.succeed(
"mc alias set minio "
+ "http://localhost:9000 "
+ "${s3.accessKey} ${s3.secretKey} --api s3v4",
"mc mb minio/${s3.bucket}",
)
clickhouse.start()
clickhouse.wait_for_unit("clickhouse.service")
clickhouse.wait_for_open_port(9000)
clickhouse.wait_until_succeeds(
"""
journalctl -o cat -u clickhouse.service | grep "Merging configuration file '/etc/clickhouse-server/config.d/s3.xml'"
"""
)
clickhouse.succeed(
"cat ${tableDDL} | clickhouse-client"
)
clickhouse.succeed(
"cat ${insertQuery} | clickhouse-client"
)
clickhouse.succeed(
"cat ${selectQuery} | clickhouse-client | grep foo"
)
minio.log(minio.succeed(
"mc ls minio/${s3.bucket}",
))
'';
}

View File

@ -0,0 +1,108 @@
{ lib, ... }:
{
name = "nix-store-veritysetup";
meta.maintainers = with lib.maintainers; [ nikstur ];
nodes.machine =
{ config, modulesPath, ... }:
{
imports = [
"${modulesPath}/image/repart.nix"
];
image.repart = {
name = "nix-store";
partitions = {
"nix-store" = {
storePaths = [ config.system.build.toplevel ];
stripNixStorePrefix = true;
repartConfig = {
Type = "linux-generic";
Label = "nix-store";
Format = "erofs";
Minimize = "best";
Verity = "data";
VerityMatchKey = "nix-store";
};
};
"nix-store-verity" = {
repartConfig = {
Type = "linux-generic";
Label = "nix-store-verity";
Verity = "hash";
VerityMatchKey = "nix-store";
Minimize = "best";
};
};
};
};
boot.initrd = {
systemd = {
enable = true;
dmVerity.enable = true;
};
nix-store-veritysetup.enable = true;
};
virtualisation = {
mountHostNixStore = false;
qemu.drives = [
{
name = "nix-store";
file = ''"$NIX_STORE"'';
}
];
fileSystems = {
"/nix/store" = {
fsType = "erofs";
device = "/dev/mapper/nix-store";
};
};
};
};
testScript =
{ nodes, ... }:
''
import os
import json
import subprocess
import tempfile
with open("${nodes.machine.system.build.image}/repart-output.json") as f:
data = json.load(f)
storehash = data[0]["roothash"]
os.environ["QEMU_KERNEL_PARAMS"] = f"storehash={storehash}"
tmp_disk_image = tempfile.NamedTemporaryFile()
subprocess.run([
"${nodes.machine.virtualisation.qemu.package}/bin/qemu-img",
"create",
"-f",
"qcow2",
"-b",
"${nodes.machine.system.build.image}/${nodes.machine.image.repart.imageFile}",
"-F",
"raw",
tmp_disk_image.name,
])
os.environ["NIX_STORE"] = tmp_disk_image.name
machine.start()
print(machine.succeed("findmnt"))
print(machine.succeed("dmsetup info nix-store"))
machine.wait_for_unit("multi-user.target")
'';
}

View File

@ -0,0 +1,52 @@
import ./make-test-python.nix (
{ lib, pkgs, ... }:
{
name = "szurubooru";
meta.maintainers = with lib.maintainers; [ ratcornu ];
nodes.machine =
let
dbpass = "changeme";
in
{ config, ... }:
{
services.postgresql = {
enable = true;
initialScript = pkgs.writeText "init.sql" ''
CREATE USER ${config.services.szurubooru.database.user} WITH PASSWORD '${dbpass}';
CREATE DATABASE ${config.services.szurubooru.database.name} WITH OWNER ${config.services.szurubooru.database.user};
'';
};
services.szurubooru = {
enable = true;
dataDir = "/var/lib/szurubooru";
server = {
port = 6666;
settings = {
domain = "http://127.0.0.1";
secretFile = pkgs.writeText "secret" "secret";
debug = 1;
};
};
database = {
host = "localhost";
port = 5432;
name = "szurubooru";
user = "szurubooru";
passwordFile = pkgs.writeText "pass" "${dbpass}";
};
};
};
testScript = ''
machine.wait_for_unit("szurubooru.service")
machine.wait_for_open_port(6666)
machine.succeed('curl -H "Content-Type: application/json" -H "Accept: application/json" --fail http://127.0.0.1:6666/info')
'';
}
)

View File

@ -13199,6 +13199,19 @@ final: prev: {
meta.hydraPlatforms = [ ];
};
search-and-replace-nvim = buildVimPlugin {
pname = "search-and-replace.nvim";
version = "2025-06-16";
src = fetchFromGitHub {
owner = "mahyarmirrashed";
repo = "search-and-replace.nvim";
rev = "12dce26afc7f3c66d6ffbf2eae91ce19d4cdcc74";
sha256 = "0i197fs58qk6mgqsxi7cacba8sya7kh9cdnnz6sa79ry42cdff6a";
};
meta.homepage = "https://github.com/mahyarmirrashed/search-and-replace.nvim/";
meta.hydraPlatforms = [ ];
};
searchbox-nvim = buildVimPlugin {
pname = "searchbox.nvim";
version = "2025-01-09";

View File

@ -124,6 +124,9 @@
uv,
# nvim-vstsl dependencies
vtsls,
# search-and-replace.nvim dependencies
fd,
sad,
}:
self: super:
let
@ -3022,6 +3025,13 @@ in
dependencies = [ self.nui-nvim ];
};
search-and-replace-nvim = super.search-and-replace-nvim.overrideAttrs {
runtimeDeps = [
fd
sad
];
};
skim = buildVimPlugin {
pname = "skim";
inherit (skim) version;

View File

@ -1,56 +1,58 @@
#!/usr/bin/env nix-shell
#!nix-shell update-shell.nix -i python
#!nix-shell ./update-shell.nix -i python
import json
import logging
import os
import subprocess
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
import requests
log = logging.getLogger("vim-updater")
NURR_JSON_URL = "https://raw.githubusercontent.com/nvim-neorocks/nurr/main/tree-sitter-parsers.json"
NURR_JSON_URL = (
"https://raw.githubusercontent.com/nvim-neorocks/nurr/main/tree-sitter-parsers.json"
)
def generate_grammar(lang, parser_info):
"""Generate grammar for a language based on the parser info"""
try:
if "install_info" not in parser_info:
log.warning(f"Parser {lang} does not have install_info, skipping")
return ""
if "install_info" not in parser_info:
log.warning(f"Parser {lang} does not have install_info, skipping")
return ""
install_info = parser_info["install_info"]
install_info = parser_info["install_info"]
url = install_info["url"]
rev = install_info["revision"]
url = install_info["url"]
rev = install_info["revision"]
generated = f""" {lang} = buildGrammar {{
generated = f""" {lang} = buildGrammar {{
language = "{lang}";
version = "0.0.0+rev={rev[:7]}";
src = """
generated += subprocess.check_output(["nurl", url, rev, "--indent=4"], text=True)
generated += ";"
generated += subprocess.check_output(
["nurl", url, rev, "--indent=4"], text=True
)
generated += ";"
location = install_info.get("location", "")
if location:
generated += f"""
location = install_info.get("location", "")
if location:
generated += f"""
location = "{location}";"""
if install_info.get("generate", False):
generated += """
if install_info.get("generate", False):
generated += """
generate = true;"""
generated += f"""
generated += f"""
meta.homepage = "{url}";
}};
"""
return generated
except Exception as e:
log.error(f"Error generating grammar for {lang}: {e}")
return ""
return generated
def fetch_nurr_parsers():
@ -81,12 +83,7 @@ def fetch_nurr_parsers():
def process_parser_info(parser_info):
"""Process a single parser info entry and generate grammar for it"""
try:
lang = parser_info["lang"]
return generate_grammar(lang, parser_info)
except Exception as e:
log.error(f"Error processing parser: {e}")
return ""
return generate_grammar(parser_info["lang"], parser_info)
def update_grammars():
@ -119,13 +116,10 @@ def update_grammars():
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
generated = update_grammars()
output_path = os.path.join(
os.path.dirname(__file__),
"../../nvim-treesitter/generated.nix"
)
output_path = Path(__file__).parent.parent / "nvim-treesitter/generated.nix"
log.info("Writing output to %s", output_path)
with open(output_path, "w") as f:
f.write(generated)

View File

@ -1013,6 +1013,7 @@ https://github.com/tiagovla/scope.nvim/,HEAD,
https://github.com/0xJohnnyboy/scretch.nvim/,HEAD,
https://github.com/Xuyuanp/scrollbar.nvim/,,
https://github.com/cakebaker/scss-syntax.vim/,,
https://github.com/mahyarmirrashed/search-and-replace.nvim/,HEAD,
https://github.com/VonHeikemen/searchbox.nvim/,,
https://github.com/RobertAudi/securemodelines/,,
https://github.com/megaannum/self/,,

View File

@ -2129,8 +2129,8 @@ let
mktplcRef = {
name = "gitlab-workflow";
publisher = "gitlab";
version = "6.21.0";
hash = "sha256-vaOAk4ovQjUcnBtxqMlRstYLvR6uzmqGk3Sx6zV6wvY=";
version = "6.25.0";
hash = "sha256-Y4NeeT2CddHj++hE0JxionmEPQHaIeibsrwztCjHYHs=";
};
meta = {
description = "GitLab extension for Visual Studio Code";

View File

@ -21,15 +21,22 @@ assert
stdenv.mkDerivation (finalAttrs: {
pname = "box64";
version = "0.3.4";
version = "0.3.6";
src = fetchFromGitHub {
owner = "ptitSeb";
repo = "box64";
rev = "v${finalAttrs.version}";
hash = "sha256-CY5Emg5TsMVs++2EukhVzqn9440kF/BO8HZGQgCpGu4=";
hash = "sha256-Z8r7aonVj7VSifgLKx/L7VRdGNnQtTvS4mjI+2+uPxY=";
};
# Setting cpu doesn't seem to work (or maybe isn't enough / gets overwritten by the wrapper's arch flag?), errors about unsupported instructions for target
# (this is for code that gets executed conditionally if the cpu at runtime supports their features, so setting this should be fine)
postPatch = ''
substituteInPlace CMakeLists.txt \
--replace-fail 'ASMFLAGS -pipe -mcpu=cortex-a76' 'ASMFLAGS -pipe -march=armv8.2-a+fp16+dotprod'
'';
nativeBuildInputs = [
cmake
python3

View File

@ -1,77 +0,0 @@
{
lib,
gccStdenv,
fetchFromGitLab,
zlib,
}:
let
stdenv = gccStdenv;
meta = with lib; {
description = "Fast and exact comparison and clustering of sequences";
homepage = "https://metabarcoding.org/sumatra";
maintainers = [ maintainers.bzizou ];
platforms = platforms.unix;
};
in
rec {
# Suma library
sumalibs = stdenv.mkDerivation rec {
version = "1.0.34";
pname = "sumalibs";
src = fetchFromGitLab {
domain = "git.metabarcoding.org";
owner = "obitools";
repo = pname;
rev = "sumalib_v${version}";
sha256 = "0hwkrxzfz7m5wdjvmrhkjg8kis378iaqr5n4nhdhkwwhn8x1jn5a";
};
makeFlags = [ "PREFIX=$(out)" ];
inherit meta;
};
# Sumatra
sumatra = stdenv.mkDerivation rec {
version = "1.0.34";
pname = "sumatra";
src = fetchFromGitLab {
domain = "git.metabarcoding.org";
owner = "obitools";
repo = pname;
rev = "${pname}_v${version}";
sha256 = "1bbpbdkshdc3xffqnr1qfy8qk64ldsmdc3s8mrcrlx132rgbi5f6";
};
buildInputs = [
sumalibs
zlib
];
makeFlags = [
"LIBSUMA=${sumalibs}/lib/libsuma.a"
"LIBSUMAPATH=-L${sumalibs}"
"PREFIX=$(out)"
];
inherit meta;
};
# Sumaclust
sumaclust = stdenv.mkDerivation rec {
version = "1.0.34";
pname = "sumaclust";
src = fetchFromGitLab {
domain = "git.metabarcoding.org";
owner = "obitools";
repo = pname;
rev = "${pname}_v${version}";
sha256 = "0x8yi3k3jxhmv2krp4rcjlj2f9zg0qrk7gx4kpclf9c3yxgsgrds";
};
buildInputs = [ sumalibs ];
makeFlags = [
"LIBSUMA=${sumalibs}/lib/libsuma.a"
"LIBSUMAPATH=-L${sumalibs}"
"PREFIX=$(out)"
];
inherit meta;
};
}

View File

@ -360,45 +360,17 @@ rec {
# Get revisions from
# https://github.com/moby/moby/tree/${version}/hack/dockerfile/install/*
docker_25 = callPackage dockerGen rec {
version = "25.0.8";
version = "25.0.10";
# Upstream forgot to tag release
# https://github.com/docker/cli/issues/5789
cliRev = "43987fca488a535d810c429f75743d8c7b63bf4f";
cliHash = "sha256-OwufdfuUPbPtgqfPeiKrQVkOOacU2g4ommHb770gV40=";
mobyRev = "v${version}";
mobyHash = "sha256-n7GdjQEceqyC7E2sPXQWyxpRThtH35eM/J20yLa5NSs=";
runcRev = "v1.2.4";
runcHash = "sha256-LdYCMxdqDP7rKo6Ek/B1DE6QvUFrltbSJVggkVkXQZo=";
containerdRev = "v1.7.25";
containerdHash = "sha256-T0F5bwxSCqa4Czs/W01NaAlJJFvgrzkBC1y/r+muivA=";
tiniRev = "v0.19.0";
tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
};
docker_26 = callPackage dockerGen rec {
version = "26.1.5";
cliRev = "v${version}";
cliHash = "sha256-UlN+Uc0YHhLyu14h5oDBXP4K9y2tYKPOIPTGZCe4PVY=";
mobyRev = "v${version}";
mobyHash = "sha256-6Hx7GnA7P6HqDlnGoc+HpPHSl69XezwAEGbvWYUVQlE=";
runcRev = "v1.1.12";
runcHash = "sha256-N77CU5XiGYIdwQNPFyluXjseTeaYuNJ//OsEUS0g/v0=";
containerdRev = "v1.7.18";
containerdHash = "sha256-IlK5IwniaBhqMgxQzV8btQcbdJkNEQeUMoh6aOsBOHQ=";
tiniRev = "v0.19.0";
tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
};
docker_27 = callPackage dockerGen rec {
version = "27.5.1";
cliRev = "v${version}";
cliHash = "sha256-7laxRfssh2aGfJeZI0PsJ/MCiy2npigSmCa1SUlWY4s=";
mobyRev = "v${version}";
mobyHash = "sha256-q+VCJZ93jvPJQE0xn89prH/6spsarVY3VUEmgwyMxU4=";
runcRev = "v1.2.4";
runcHash = "sha256-LdYCMxdqDP7rKo6Ek/B1DE6QvUFrltbSJVggkVkXQZo=";
containerdRev = "v1.7.25";
containerdHash = "sha256-T0F5bwxSCqa4Czs/W01NaAlJJFvgrzkBC1y/r+muivA=";
mobyHash = "sha256-57iXL+QYtbEz099yOTR4k/2Z7CT08OAkQ3kVJSmsa/U=";
runcRev = "v1.2.5";
runcHash = "sha256-J/QmOZxYnMPpzm87HhPTkYdt+fN+yeSUu2sv6aUeTY4=";
containerdRev = "v1.7.27";
containerdHash = "sha256-H94EHnfW2Z59KcHcbfJn+BipyZiNUvHe50G5EXbrIps=";
tiniRev = "v0.19.0";
tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
};

View File

@ -1,10 +1,10 @@
{
lib,
stdenv,
stdenvNoCC,
fetchFromGitHub,
}:
stdenv.mkDerivation {
stdenvNoCC.mkDerivation {
pname = "antonio";
version = "0-unstable-2013-11-21";

View File

@ -0,0 +1,21 @@
The clean command line compiler clm uses timestamps of dcl, icl, abc and o files
to decide what must be rebuild. However as for chroot builds, all of the
library files will have equal timestamps, this leads to clm trying to rebuild
the library modules distributed with the Clean installation every time a user
compiles any file, which fails ue to the absence of write permission on the Nix
store.
This patch changes the freshness check to use less than instead of less than or
equal to in order to avoid this.
--- b/src/clm/clm.c
+++ a/src/clm/clm.c
@@ -250,7 +250,7 @@
|| (t1.dwHighDateTime==t2.dwHighDateTime && (unsigned)(t1.dwLowDateTime)<=(unsigned)(t2.dwLowDateTime)))
#else
typedef unsigned long FileTime;
-# define FILE_TIME_LE(t1,t2) (t1<=t2)
+# define FILE_TIME_LE(t1,t2) (t1<t2)
#endif
typedef struct project_node {

View File

@ -0,0 +1,22 @@
--- a/src/RuntimeSystem/scon.c
+++ b/src/RuntimeSystem/scon.c
@@ -858,6 +858,8 @@
int execution_aborted;
int return_code;
+extern void abc_main (void);
+
int main (int argc,char **argv)
{
int arg_n;
--- a/src/clm/cachingcompiler.h
+++ b/src/clm/cachingcompiler.h
@@ -1,6 +1,7 @@
Clean (:: *Thread :== Int)
int start_caching_compiler (CleanCharArray compiler_path);
Clean (start_caching_compiler :: {#Char} Thread -> (Int, Thread))
+int start_caching_compiler_with_args (CleanCharArray coc_path, char** cocl_argv, int cocl_argv_size);
int call_caching_compiler (CleanCharArray args);
Clean (call_caching_compiler :: {#Char} Thread -> (Int, Thread))
int stop_caching_compiler (void);

View File

@ -0,0 +1,80 @@
{
binutils,
fetchurl,
gcc,
lib,
runCommand,
stdenv,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "clean";
version = "3.1";
src =
if stdenv.hostPlatform.system == "i686-linux" then
(fetchurl {
url = "https://ftp.cs.ru.nl/Clean/Clean31/linux/clean3.1_32_boot.tar.gz";
sha256 = "Ls0IKf+o7yhRLhtSV61jzmnYukfh5x5fogHaP5ke/Ck=";
})
else if stdenv.hostPlatform.system == "x86_64-linux" then
(fetchurl {
url = "https://ftp.cs.ru.nl/Clean/Clean31/linux/clean3.1_64_boot.tar.gz";
sha256 = "Gg5CVZjrwDBtV7Vuw21Xj6Rn+qN1Mf6B3ls6r/16oBc=";
})
else
throw "Architecture not supported";
hardeningDisable = [ "pic" ];
patches = [
./chroot-build-support-do-not-rebuild-equal-timestamps.patch
./declare-functions-explicitly-for-gcc14.patch
];
postPatch = ''
substituteInPlace Makefile \
--replace-fail 'INSTALL_DIR = $(CURRENTDIR)' "INSTALL_DIR = $out"
substituteInPlace src/clm/clm.c \
--replace-fail /usr/bin/as ${binutils}/bin/as \
--replace-fail /usr/bin/gcc ${gcc}/bin/gcc
'';
buildFlags = [ "-C src/" ];
# do not strip libraries and executables since all symbols since they are
# required as is for compilation. Especially the labels of unused section need
# to be kept.
dontStrip = true;
passthru.tests.compile-hello-world = runCommand "compile-hello-world" { } ''
cat >HelloWorld.icl <<EOF
module HelloWorld
Start = "Hello, world!"
EOF
${finalAttrs.finalPackage}/bin/clm HelloWorld -o hello-world
touch $out
'';
meta = {
description = "General purpose, state-of-the-art, pure and lazy functional programming language";
longDescription = ''
Clean is a general purpose, state-of-the-art, pure and lazy functional
programming language designed for making real-world applications. Some
of its most notable language features are uniqueness typing, dynamic typing,
and generic functions.
'';
homepage = "http://wiki.clean.cs.ru.nl/Clean";
license = lib.licenses.bsd2;
maintainers = with lib.maintainers; [
bmrips
erin
];
platforms = [
"i686-linux"
"x86_64-linux"
];
mainProgram = "clean";
};
})

View File

@ -45,11 +45,11 @@ let
in
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "copilot-language-server";
version = "1.330.0";
version = "1.335.0";
src = fetchzip {
url = "https://github.com/github/copilot-language-server-release/releases/download/${finalAttrs.version}/copilot-language-server-native-${finalAttrs.version}.zip";
hash = "sha256-/Em00UVEg46gEI52fG7aQo2rqKwqrF3V1tAVx2hpyMc=";
hash = "sha256-ZMnbfVLe1ZtYYCaMhSNqeWfHEtKJf8BImiipypa57w0=";
stripRoot = false;
};

View File

@ -14,12 +14,14 @@ stdenvNoCC.mkDerivation (finalAttrs: {
hash = "sha256-XYL76L266MKqClxfbPn/C6+x/vcs7AD56DtiDmQam2A=";
};
sourceRoot = "${finalAttrs.src.name}/DepartureMono-${finalAttrs.version}";
installPhase = ''
runHook preInstall
install -D -m 444 DepartureMono-1.500/*.otf -t $out/share/fonts/otf
install -D -m 444 DepartureMono-1.500/*.woff -t $out/share/fonts/woff
install -D -m 444 DepartureMono-1.500/*.woff2 -t $out/share/fonts/woff2
install -D -m 444 *.otf -t $out/share/fonts/otf
install -D -m 444 *.woff -t $out/share/fonts/woff
install -D -m 444 *.woff2 -t $out/share/fonts/woff2
runHook postInstall
'';

View File

@ -1,43 +0,0 @@
{
lib,
appimageTools,
fetchurl,
}:
let
version = "0.7.2";
pname = "devdocs-desktop";
src = fetchurl {
url = "https://github.com/egoist/devdocs-desktop/releases/download/v${version}/DevDocs-${version}.AppImage";
sha256 = "sha256-4ugpzh0Dweae6tKb6uqRhEW9HT+iVIo8MQRbVKTdRFw=";
};
appimageContents = appimageTools.extractType2 {
inherit pname version src;
};
in
appimageTools.wrapType2 rec {
inherit pname version src;
extraInstallCommands = ''
install -m 444 -D ${appimageContents}/devdocs.desktop $out/share/applications/devdocs.desktop
install -m 444 -D ${appimageContents}/devdocs.png $out/share/icons/hicolor/0x0/apps/devdocs.png
substituteInPlace $out/share/applications/devdocs.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
'';
meta = with lib; {
description = "Full-featured desktop app for DevDocs.io";
longDescription = ''
DevDocs.io combines multiple API documentations in a fast, organized, and searchable interface. This is an unofficial desktop app for it.
'';
homepage = "https://github.com/egoist/devdocs-desktop";
downloadPage = "https://github.com/egoist/devdocs-desktop/releases";
license = licenses.mit;
maintainers = with maintainers; [ ymarkus ];
platforms = [ "x86_64-linux" ];
mainProgram = "devdocs-desktop";
};
}

View File

@ -0,0 +1,6 @@
# `devmode`
`devmode` is a daemon, that:
1. watches the manual's source for changes and when they occur — rebuilds
2. HTTP serves the manual, injecting a script that triggers reload on changes
3. opens the manual in the default browser

View File

@ -8,14 +8,14 @@
python3Packages.buildPythonPackage {
pname = "edl";
version = "3.52.1-unstable-2025-05-05";
version = "3.52.1-unstable-2025-06-08";
src = fetchFromGitHub {
owner = "bkerler";
repo = "edl";
rev = "407f1a98572cd41bfb9fbda3c15db854d42a54f6";
rev = "bc1534496c83571b199b30b64774abc495744418";
fetchSubmodules = true;
hash = "sha256-KISUWlQxblNMaBoL+cckgEBAIJUgBXBNr1w1Z2kVIIc=";
hash = "sha256-aWNYTWbCHFhPBVH2tEfEdW3n35OKoQ2DPxnUDcSghWM=";
};
propagatedBuildInputs = with python3Packages; [

View File

@ -0,0 +1,3 @@
{ python3Packages }:
python3Packages.toPythonApplication python3Packages.eyed3

View File

@ -7,6 +7,7 @@
dbus,
xorg,
pkg-config,
protobuf,
writableTmpDirAsHomeHook,
nix-update-script,
llvmPackages,
@ -26,19 +27,22 @@ let
in
rustPlatform.buildRustPackage (finalAttrs: {
pname = "goose-cli";
version = "1.0.24";
version = "1.0.27";
src = fetchFromGitHub {
owner = "block";
repo = "goose";
tag = "v${finalAttrs.version}";
hash = "sha256-pkqZZwA25IszAnaW0G5adUI2NIEqqQnTQRqlqHWgJRg=";
hash = "sha256-+HNAOw/BJVNHiDHeEBKoAAs66IXCdYhm1VzVFIzk4m8=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-Wct5XnBueG58+A4zZpcKy0vA2Kjwmtk505JZKNPFTDQ=";
cargoHash = "sha256-v+UQFbFpkwX+7oNFvKf2v2u3OSkPdgOWntXLW6XJibE=";
nativeBuildInputs = [ pkg-config ];
nativeBuildInputs = [
pkg-config
protobuf
];
buildInputs = [ dbus ] ++ lib.optionals stdenv.hostPlatform.isLinux [ xorg.libxcb ];
@ -70,6 +74,10 @@ rustPlatform.buildRustPackage (finalAttrs: {
"--skip=logging::tests::test_log_file_name::with_session_name_without_error_capture"
"--skip=logging::tests::test_log_file_name::without_session_name"
"--skip=developer::tests::test_text_editor_str_replace"
# need API keys
"--skip=providers::factory::tests::test_create_lead_worker_provider"
"--skip=providers::factory::tests::test_create_regular_provider_without_lead_config"
"--skip=providers::factory::tests::test_lead_model_env_vars_with_defaults"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
"--skip=providers::gcpauth::tests::test_load_from_metadata_server"

View File

@ -3,17 +3,16 @@
buildGoModule,
fetchFromGitHub,
testers,
goreman,
}:
buildGoModule rec {
buildGoModule (finalAttrs: {
pname = "goreman";
version = "0.3.16";
src = fetchFromGitHub {
owner = "mattn";
repo = "goreman";
rev = "v${version}";
tag = "v${finalAttrs.version}";
hash = "sha256-hOFnLxHsrauOrsbJYKNrwFFT5yYX/rdZUVjscBIGDLo=";
};
@ -25,15 +24,15 @@ buildGoModule rec {
];
passthru.tests.version = testers.testVersion {
package = goreman;
package = finalAttrs.finalPackage;
command = "goreman version";
};
meta = with lib; {
meta = {
description = "foreman clone written in go language";
mainProgram = "goreman";
homepage = "https://github.com/mattn/goreman";
license = licenses.mit;
maintainers = with maintainers; [ zimbatm ];
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ zimbatm ];
};
}
})

View File

@ -8,10 +8,10 @@
}:
stdenv.mkDerivation rec {
pname = "halo";
version = "2.20.21";
version = "2.21.0";
src = fetchurl {
url = "https://github.com/halo-dev/halo/releases/download/v${version}/halo-${version}.jar";
hash = "sha256-hUR5zG6jr8u8pFaGcZJs8MFv+WBMm1oDo6zGaS4Y7BI=";
hash = "sha256-taEaHhPy/jR2ThY9Qk+cded3+LyZSNnrytWh8G5zqVE=";
};
nativeBuildInputs = [

View File

@ -1,44 +0,0 @@
{
lib,
stdenv,
fetchurl,
pkg-config,
libjack2,
ladspaH,
gtk2,
alsa-lib,
libxml2,
lrdf,
}:
stdenv.mkDerivation rec {
pname = "jack-rack";
version = "1.4.7";
src = fetchurl {
url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2";
sha256 = "1lmibx9gicagcpcisacj6qhq6i08lkl5x8szysjqvbgpxl9qg045";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [
libjack2
ladspaH
gtk2
alsa-lib
libxml2
lrdf
];
NIX_LDFLAGS = "-lm -lpthread";
meta = {
description = ''An effects "rack" for the JACK low latency audio API'';
longDescription = ''
JACK Rack is an effects "rack" for the JACK low latency audio
API. The rack can be filled with LADSPA effects plugins and can
be controlled using the ALSA sequencer. It's phat; it turns your
computer into an effects box.
'';
homepage = "https://jack-rack.sourceforge.net/";
license = lib.licenses.gpl2Plus;
maintainers = [ lib.maintainers.astsmtl ];
platforms = lib.platforms.linux;
};
}

View File

@ -11,13 +11,13 @@
}:
python3.pkgs.buildPythonApplication rec {
pname = "kcc";
version = "7.3.3";
version = "7.4.1";
src = fetchFromGitHub {
owner = "ciromattia";
repo = "kcc";
tag = "v${version}";
hash = "sha256-6zHUV4s1bOdARsTwNRxFM+s0p+6FLJhqJ9qG5BaBgas=";
hash = "sha256-9XYc749dSFNYK61BfuNxH/CJrT/P7YsXNroBsHcsZNA=";
};
nativeBuildInputs = [ qt6.wrapQtAppsHook ];

View File

@ -8,16 +8,16 @@
buildNpmPackage rec {
pname = "lint-staged";
version = "16.1.0";
version = "16.1.1";
src = fetchFromGitHub {
owner = "okonet";
repo = "lint-staged";
rev = "v${version}";
hash = "sha256-dR0z/60CHDqCl9pEc9KQww1S5aSZ4XGsfNqxBSZe0Ig=";
hash = "sha256-DBLS0hMu2mG4+sGhhGjIlfj2y2A33RccEP3plweaKio=";
};
npmDepsHash = "sha256-MznWvv61Z+8t+Nicj6yWlQqUHVx7AAtkDXu2L2E5dw8=";
npmDepsHash = "sha256-LJipxwO5B01KlfjOVhlhw5veH2+wpzWm0EwcRdVFleQ=";
dontNpmBuild = true;

View File

@ -47,6 +47,7 @@ stdenv.mkDerivation rec {
++ lib.optionals withPython [
swig
python3.pkgs.setuptools
python3.pkgs.pythonImportsCheckHook
];
buildInputs = [
@ -82,6 +83,13 @@ stdenv.mkDerivation rec {
(lib.cmakeBool "CMAKE_SKIP_BUILD_RPATH" true)
];
postInstall = lib.optionalString withPython ''
mkdir -p $out/${python3.sitePackages}
cp -r src/mapscript/python/mapscript $out/${python3.sitePackages}
'';
pythonImportsCheck = [ "mapscript" ];
meta = {
description = "Platform for publishing spatial data and interactive mapping applications to the web";
homepage = "https://mapserver.org/";

View File

@ -1,21 +1,21 @@
{
"version": "3.143.0",
"version": "3.144.0",
"assets": {
"x86_64-linux": {
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.143.0/mirrord_linux_x86_64",
"hash": "sha256-0wu90iNAP7OQYENHIPsTSPk8Ko2jK0uBdZWe2d1URS8="
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.144.0/mirrord_linux_x86_64",
"hash": "sha256-XbveB71EIChiuPVfqOshEhPZHnTGd7xJt48/zuyq5TA="
},
"aarch64-linux": {
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.143.0/mirrord_linux_aarch64",
"hash": "sha256-MWQ5k9Tk6q7f5QQ3Og9O5dyEDd+wNi3FFYqbFpa7uxM="
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.144.0/mirrord_linux_aarch64",
"hash": "sha256-4Tw68aWpNsjfi6d7qgBhbVvAMsHwUsttfVSpx3Kv2Nk="
},
"aarch64-darwin": {
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.143.0/mirrord_mac_universal",
"hash": "sha256-GdwZWtNTuiUf+DcuZkVUm0YVH0EKfT6V6clcv1E7BxY="
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.144.0/mirrord_mac_universal",
"hash": "sha256-FhRgopH7QRH+30Bofoiwdx3Vlne6D/ftaqhGuUnyH0g="
},
"x86_64-darwin": {
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.143.0/mirrord_mac_universal",
"hash": "sha256-GdwZWtNTuiUf+DcuZkVUm0YVH0EKfT6V6clcv1E7BxY="
"url": "https://github.com/metalbear-co/mirrord/releases/download/3.144.0/mirrord_mac_universal",
"hash": "sha256-FhRgopH7QRH+30Bofoiwdx3Vlne6D/ftaqhGuUnyH0g="
}
}
}

View File

@ -7,13 +7,13 @@
buildGoModule (finalAttrs: {
pname = "mkbrr";
version = "1.12.1";
version = "1.13.0";
src = fetchFromGitHub {
owner = "autobrr";
repo = "mkbrr";
tag = "v${finalAttrs.version}";
hash = "sha256-gUIX271eaG15329pLnZ8QnZD7BrdCk+cWs43uUzKxOE=";
hash = "sha256-E5UiV7JoMzmnj8/LzVDqOuPNSockgmExmc0B9+KjGII=";
};
vendorHash = "sha256-G8WM5x99UZfAZUkE5W37Ogx/OKk8JypPzGBrIuBOFNo=";

View File

@ -40,5 +40,6 @@ rustPlatform.buildRustPackage rec {
homepage = "https://github.com/nikstur/nix-store-veritysetup-generator";
license = licenses.mit;
maintainers = with lib.maintainers; [ nikstur ];
mainProgram = "nix-store-veritysetup-generator";
};
}

View File

@ -11,17 +11,17 @@
rustPlatform.buildRustPackage rec {
pname = "novops";
version = "0.19.0";
version = "0.20.0";
src = fetchFromGitHub {
owner = "PierreBeucher";
repo = "novops";
rev = "v${version}";
hash = "sha256-bpv8Ybrsb2CAV8Qxj69F2E/mekYsOuAiZWuDNHDtxw0=";
hash = "sha256-TvlbA9RXuAPm1rN3VaIrVKMfyePT9oLSh87Bqclwcj8=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-w5jBCVoLm0zzLMa7COHsQbHq+TlJZCnabNZyO8nlTKk=";
cargoHash = "sha256-oXOK8LQZ2+u566HIi0DYuocEsZMfj1ogkHciH8hFVR8=";
buildInputs =
[

View File

@ -8,13 +8,13 @@
stdenvNoCC.mkDerivation rec {
pname = "pfetch";
version = "1.9.0";
version = "1.9.1";
src = fetchFromGitHub {
owner = "Un1q32";
repo = "pfetch";
tag = version;
hash = "sha256-DWntcAowiia4gEiYcZCJ6+uDGQ5h2eh/XwSSW+ThPKY=";
hash = "sha256-a2ay+Ag9vYwGGENRPCcFLCmtyOCyHhF6/P7NAn/CzSI=";
};
dontBuild = true;

View File

@ -109,9 +109,12 @@ stdenv.mkDerivation (finalAttrs: {
done
# Rewrite library references for all executables.
find "$out" -executable -type f | while read executable; do
install_name_tool "''${change_args[@]}" "$executable"
done
find "$out" -type f -executable -path "*/bin/*" -o -type f -executable -path "*/share/*/samples/*" \
| while read executable; do
if isMachO "$executable"; then
install_name_tool "''${change_args[@]}" "$executable"
fi
done
'';
# We need the libgcc_s.so.1 loadable (for pthread_cancel to work)

View File

@ -3,19 +3,15 @@
fetchgit,
fetchFromGitHub,
rustPlatform,
pkg-config,
pkgconf,
openssl,
fuse3,
libuuid,
acl,
libxcrypt,
git,
installShellFiles,
sphinx,
systemd,
stdenv,
fetchpatch,
versionCheckHook,
}:
@ -113,12 +109,19 @@ rustPlatform.buildRustPackage {
cp ${./Cargo.lock} Cargo.lock
rm .cargo/config.toml
# avoid some unnecessary dependendcies, stemming from greedy linkage by rustc
# see also upstream Makefile for similar workaround
mkdir -p .dep-stubs
echo '!<arch>' >.dep-stubs/libsystemd.a
echo '!<arch>' >.dep-stubs/libuuid.a
echo '!<arch>' >.dep-stubs/libcrypt.a
'';
postBuild = ''
make -C docs \
DEB_VERSION=${version} DEB_VERSION_UPSTREAM=${version} \
RUSTC_TARGET=${stdenv.hostPlatform.config} \
RUSTC_TARGET=${stdenv.targetPlatform.rust.rustcTarget} \
BUILD_MODE=release \
proxmox-backup-client.1 pxar.1
'';
@ -147,25 +150,28 @@ rustPlatform.buildRustPackage {
"--bin=pxar"
];
RUSTFLAGS = [ "-L.dep-stubs" ];
doCheck = false;
# pbs-buildcfg requires this set, would be the git commit id
REPOID = "";
nativeBuildInputs = [
git
pkg-config
pkgconf
rustPlatform.bindgenHook
installShellFiles
sphinx
];
buildInputs = [
openssl
fuse3
libuuid
acl
libxcrypt
systemd.dev
];
strictDeps = true;
doInstallCheck = true;
nativeInstallCheckInputs = [ versionCheckHook ];
versionCheckProgramArg = "version";

View File

@ -7,13 +7,13 @@
stdenv.mkDerivation rec {
pname = "quill-log";
version = "9.0.3";
version = "10.0.0";
src = fetchFromGitHub {
owner = "odygrd";
repo = "quill";
rev = "v${version}";
hash = "sha256-G7DUxN32g32744kfGVth4G7GJz8xguIfvX/ojkgh/Ao=";
hash = "sha256-za0ech+rkhhtFumrkMMJXccd14PKXoiBQPXSYcK8Y7A=";
};
nativeBuildInputs = [ cmake ];

View File

@ -10,13 +10,13 @@
buildGoModule (finalAttrs: {
pname = "s-search";
version = "0.7.2";
version = "0.7.3";
src = fetchFromGitHub {
owner = "zquestz";
repo = "s";
tag = "v${finalAttrs.version}";
hash = "sha256-5hkorROs11nrDK5/BBEPIugVYeVUWtAnpCBBuKTj15g=";
hash = "sha256-g+Gz16U5rP3v+RbutDUh5+1YdTDe+ROFEnNAlNZX1fw=";
};
vendorHash = "sha256-0E/9fONanSxb2Tv5wKIpf1J/A6Hdge23xy3r6pFyV9E=";

View File

@ -19,14 +19,14 @@
stdenv.mkDerivation (finalAttrs: {
pname = "s7";
version = "11.5-unstable-2025-06-14";
version = "11.5-unstable-2025-06-15";
src = fetchFromGitLab {
domain = "cm-gitlab.stanford.edu";
owner = "bil";
repo = "s7";
rev = "02ac5499a1273553c344b1cba3363cef9fd18f41";
hash = "sha256-VqkQT5N/ggIRVL98puikMJEBwenhMGx+Fwfx99prYc4=";
rev = "9ab3baa97bd90b1fb3d8d7cef1e0adc31f89c6e2";
hash = "sha256-ZhhaRdk6hf+tu2THGFnnpTB/0VE8h87RxLDT46MuiLc=";
};
buildInputs = [

View File

@ -0,0 +1,22 @@
From a4ca664abfac0b7efa7dbc48c6438bc1a5333962 Mon Sep 17 00:00:00 2001
From: Fazzi <faaris.ansari@proton.me>
Date: Sat, 24 May 2025 20:55:50 +0100
Subject: [PATCH] desktopFile: hide entry from app launchers
---
linux-release/com.steamgriddb.SGDBoop.desktop | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/linux-release/com.steamgriddb.SGDBoop.desktop b/linux-release/com.steamgriddb.SGDBoop.desktop
index 9c84cdb..9899682 100644
--- a/linux-release/com.steamgriddb.SGDBoop.desktop
+++ b/linux-release/com.steamgriddb.SGDBoop.desktop
@@ -4,7 +4,7 @@ Comment=Apply Steam assets from SteamGridDB
Exec=SGDBoop %U
Terminal=false
Type=Application
-NoDisplay=false
+NoDisplay=true
Icon=com.steamgriddb.SGDBoop
MimeType=x-scheme-handler/sgdb
Categories=Utility

View File

@ -0,0 +1,60 @@
{
lib,
stdenv,
fetchFromGitHub,
curl,
pkg-config,
wrapGAppsHook3,
}:
stdenv.mkDerivation rec {
pname = "sgdboop";
version = "1.3.1";
src = fetchFromGitHub {
owner = "SteamGridDB";
repo = "SGDBoop";
tag = "v${version}";
hash = "sha256-FpVQQo2N/qV+cFhYZ1FVm+xlPHSVMH4L+irnQEMlUQs=";
};
patches = [
# Hide the app from app launchers, as it is not meant to be run directly
# Remove when https://github.com/SteamGridDB/SGDBoop/pull/112 is merged
./hide_desktop_entry.patch
];
makeFlags = [
# The flatpak install just copies things to /app - otherwise wants to do things with XDG
"FLATPAK_ID=fake"
];
postPatch = ''
substituteInPlace Makefile \
--replace-fail "/app/" "$out/"
'';
postInstall = ''
rm -r "$out/share/metainfo"
'';
nativeBuildInputs = [
pkg-config
wrapGAppsHook3
];
buildInputs = [
curl
];
meta = {
description = "Applying custom artwork to Steam, using SteamGridDB";
homepage = "https://github.com/SteamGridDB/SGDBoop/";
license = lib.licenses.zlib;
maintainers = with lib.maintainers; [
saturn745
fazzi
];
mainProgram = "SGDBoop";
platforms = lib.platforms.linux;
};
}

View File

@ -12,13 +12,13 @@
buildGoModule rec {
pname = "shellhub-agent";
version = "0.19.0";
version = "0.19.1";
src = fetchFromGitHub {
owner = "shellhub-io";
repo = "shellhub";
rev = "v${version}";
hash = "sha256-xoGOiaUIjlR2l+l+oM1s3J7YBW9af2dfd+hXwq8zZU8=";
hash = "sha256-xFCUq1x9C+W1xxo6UIpW7ej7ltquvEqNUUvvF86rA9o=";
};
modRoot = "./agent";

View File

@ -0,0 +1,30 @@
{
lib,
rustPlatform,
fetchFromGitHub,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "smfh";
version = "1.1";
src = fetchFromGitHub {
owner = "feel-co";
repo = "smfh";
tag = finalAttrs.version;
hash = "sha256-/9Ww10kYopxfCNNnNDwENTubs7Wzqlw+O6PJAHNOYQw=";
};
cargoHash = "sha256-MpqbmhjNsE1krs7g3zWSXGxzb4G/A+cz/zxD2Jk2HC8=";
meta = {
description = "Sleek Manifest File Handler";
homepage = "https://github.com/feel-co/smfh";
license = lib.licenses.agpl3Only;
maintainers = with lib.maintainers; [
arthsmn
gerg-l
];
mainProgram = "smfh";
};
})

View File

@ -1,50 +0,0 @@
{
lib,
appimageTools,
fetchurl,
makeWrapper,
nix-update-script,
}:
let
version = "3.3.0";
pname = "station";
src = fetchurl {
url = "https://github.com/getstation/desktop-app/releases/download/v${version}/Station-x86_64.AppImage";
hash = "sha256-OiUVRKpU2W1dJ6z9Dqvxd+W4/oNpG+Zolj43ZHpKaO0=";
};
appimageContents = appimageTools.extractType2 {
inherit pname version src;
};
in
appimageTools.wrapType2 {
inherit pname version src;
extraInstallCommands = ''
source "${makeWrapper}/nix-support/setup-hook"
wrapProgram $out/bin/${pname} \
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
install -m 444 -D ${appimageContents}/station-desktop-app.desktop \
$out/share/applications/station-desktop-app.desktop
install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/512x512/apps/station-desktop-app.png \
$out/share/icons/hicolor/512x512/apps/station-desktop-app.png
substituteInPlace $out/share/applications/station-desktop-app.desktop \
--replace-fail 'Exec=AppRun' 'Exec=station'
'';
passthru = {
updateScript = nix-update-script {
extraArgs = [ "--url=https://github.com/getstation/desktop-app" ];
};
};
meta = {
changelog = "https://github.com/getstation/desktop-app/releases/tag/v${version}";
description = "A single place for all of your web applications";
downloadPage = "https://github.com/getstation/desktop-app/releases";
homepage = "https://getstation.com/";
license = lib.licenses.asl20;
mainProgram = "station";
maintainers = with lib.maintainers; [ flexiondotorg ];
platforms = [ "x86_64-linux" ];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
}

View File

@ -13,17 +13,17 @@
rustPlatform.buildRustPackage rec {
pname = "termscp";
version = "0.17.0";
version = "0.18.0";
src = fetchFromGitHub {
owner = "veeso";
repo = "termscp";
tag = "v${version}";
hash = "sha256-ClCPXux1sM3hRbtJ3YngrAmc4btTgQmg/Bg/7uFHCOw=";
hash = "sha256-QBvxXl1+f2617dwoZzSJq9vQY6hOXeHZjEh4xqMyayA=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-k/6+EWHAXd8BN551xDlQkYsBZsP/jgT+NO5GbVXJkVI=";
cargoHash = "sha256-ghJdAou3IsDVmOnDYiYO1yR3BtkrfUek10Bh9GuVH1E=";
nativeBuildInputs = [
pkg-config

View File

@ -6,15 +6,15 @@
rustPlatform.buildRustPackage rec {
pname = "twiggy";
version = "0.7.0";
version = "0.8.0";
src = fetchCrate {
inherit pname version;
hash = "sha256-NbtS7A5Zl8634Q3xyjVzNraNszjt1uIXqmctArfnqkk=";
hash = "sha256-FguDuah3MlC0wgz8VnXV5xepIVhTwYmQzijgX0sbdNY=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-thGehtb8cF4b/G76nbkuBqQyNodaCbAiDBsrUKQ3zbQ=";
cargoHash = "sha256-FaoEqCdMb3h93zGvc+EZ8LfYgMPY3dT/fScpRgGVeAo=";
meta = with lib; {
homepage = "https://rustwasm.github.io/twiggy/";

View File

@ -6,17 +6,17 @@
rustPlatform.buildRustPackage rec {
pname = "twitch-hls-client";
version = "1.4.1";
version = "1.4.3";
src = fetchFromGitHub {
owner = "2bc4";
repo = "twitch-hls-client";
rev = version;
hash = "sha256-m6ci7jKmWGsvJZt9CxfU0OCk5GA7I87c5HHdPP+4O94=";
hash = "sha256-UOXz1Gbo1alBnnwOWKlP5ZtaaTYr+Bqxe/+Y5A5B4Eg=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-4/a94VFlOvw3TR+LYkq3qghhUudt0S9HF85fy4mYbQM=";
cargoHash = "sha256-0bcnObIBsjgzmIrKaypb/iXnloHCRXpJtVXXl2Agk94=";
meta = with lib; {
description = "Minimal CLI client for watching/recording Twitch streams";

View File

@ -2,6 +2,7 @@
stdenv,
lib,
fetchurl,
fetchpatch,
pkg-config,
libcdio,
libxml2,
@ -18,6 +19,14 @@ stdenv.mkDerivation rec {
sha256 = "0ypnb1vp49nmzp5571ynlz6n1gh90f23w3z4x95hb7c2p7pmylb7";
};
patches = [
# Fix build with libxml 2.14
(fetchpatch {
url = "https://gitlab.archlinux.org/archlinux/packaging/packages/vcdimager/-/raw/88dc511b7f3dea8fb45e0c2bfa1345a75a088848/libxml214.diff";
hash = "sha256-gGD6gKsbR76zkQsT6RWo7zJpOQSbR8f0ZTyzwZ2oDJY=";
})
];
nativeBuildInputs = [ pkg-config ];
buildInputs = [

View File

@ -48,14 +48,14 @@ effectiveStdenv.mkDerivation rec {
# in \
# rWrapper.override{ packages = [ xgb ]; }"
pname = lib.optionalString rLibrary "r-" + pnameBase;
version = "3.0.1";
version = "3.0.2";
src = fetchFromGitHub {
owner = "dmlc";
repo = pnameBase;
rev = "v${version}";
fetchSubmodules = true;
hash = "sha256-sa8Ea/3ypHqnjn0Rl5dgqGejh6921T6JVHXo8y5gp90=";
hash = "sha256-8mj8uw7bbwhRaL0JZf9L9//a+Re2AwbL0e7Oiw/BqIA=";
};
nativeBuildInputs =

View File

@ -0,0 +1,34 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
cffi,
piexif,
pillow,
}:
buildPythonPackage rec {
pname = "heif-image-plugin";
version = "0.6.2";
format = "setuptools";
src = fetchFromGitHub {
owner = "uploadcare";
repo = "heif-image-plugin";
rev = "v${version}";
hash = "sha256-SlnnlBscNelNH0XkOenq3nolyqzRMK10SzVii61Moi4=";
};
propagatedBuildInputs = [
cffi
piexif
pillow
];
meta = {
description = "Simple HEIF/HEIC images plugin for Pillow base on pyhief library";
homepage = "https://github.com/uploadcare/heif-image-plugin";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ratcornu ];
};
}

View File

@ -12,7 +12,7 @@
}:
buildPythonPackage rec {
pname = "mozjpeg_lossless_optimization";
version = "1.1.3";
version = "1.3.0";
pyproject = true;
src = fetchFromGitHub {
@ -20,7 +20,7 @@ buildPythonPackage rec {
repo = "mozjpeg-lossless-optimization";
# https://github.com/NixOS/nixpkgs/issues/26302
rev = "refs/tags/v${version}";
hash = "sha256-OKNt9XtfZ6hhRJN1Asn1T2dVjyXKQAsnFvXKYnrRZ98=";
hash = "sha256-g2+QpV3F7wtu37qRJlA4a5r1J9yuJZcC99fDDy03JqU=";
fetchSubmodules = true;
};

View File

@ -0,0 +1,30 @@
{
lib,
buildPythonPackage,
fetchPypi,
setuptools,
libavif,
pillow,
}:
buildPythonPackage rec {
pname = "pillow-avif-plugin";
version = "1.4.6";
pyproject = true;
src = fetchPypi {
inherit pname version;
sha256 = "sha256-hVz1DQP2/Bbh/V42SzzqC3n0v5DTn/ISOWlzXYUeCLo=";
};
nativeBuildInputs = [ setuptools ];
buildInputs = [ libavif ];
propagatedBuildInputs = [ pillow ];
meta = {
description = "Pillow plugin that adds support for AVIF files";
homepage = "https://github.com/fdintino/pillow-avif-plugin";
license = lib.licenses.bsd2;
maintainers = with lib.maintainers; [ ratcornu ];
};
}

View File

@ -42,6 +42,7 @@ stdenv.mkDerivation {
doc = "share/doc/cpupower";
conf = "etc";
bash_completion_ = "share/bash-completion/completions";
unit = "lib/systemd/system";
};
enableParallelBuilding = true;

View File

@ -1,7 +1,7 @@
{
"testing": {
"version": "6.16-rc1",
"hash": "sha256:0wi66d2wma4lfs3pbwqg7k1pavxc3wyr54yxii3mmaab81pfdx27"
"version": "6.16-rc2",
"hash": "sha256:1hzkpp5161ss40d8j9nzvzyw6vljslx0pk5fin0klj884l5i8igh"
},
"6.1": {
"version": "6.1.141",

View File

@ -0,0 +1,36 @@
{
src,
version,
lib,
buildNpmPackage,
}:
buildNpmPackage {
pname = "szurubooru-client";
inherit version;
src = "${src}/client";
npmDepsHash = "sha256-HtcitZl2idgVleB6c0KCTSNLxh7hP8/G/RGdMaQG3iI=";
makeCacheWritable = true;
npmBuildFlags = [
"--gzip"
];
installPhase = ''
runHook preInstall
mkdir $out
mv ./public/* $out
runHook postInstall
'';
meta = with lib; {
description = "Client of szurubooru, an image board engine for small and medium communities";
homepage = "https://github.com/rr-/szurubooru";
license = licenses.gpl3;
maintainers = with maintainers; [ ratcornu ];
};
}

View File

@ -0,0 +1,20 @@
{
callPackage,
fetchFromGitHub,
recurseIntoAttrs,
}:
let
version = "2.5-unstable-2025-02-11";
src = fetchFromGitHub {
owner = "rr-";
repo = "szurubooru";
rev = "376f687c386f65522b2f65e98b998b21af26ee29";
hash = "sha256-4w1iOYp+CVg60dYxRilj08D4Hle6R9Y0v+Nd3fws1Zc=";
};
in
recurseIntoAttrs {
client = callPackage ./client.nix { inherit src version; };
server = callPackage ./server.nix { inherit src version; };
}

View File

@ -0,0 +1,85 @@
{
src,
version,
lib,
nixosTests,
fetchPypi,
python3,
}:
let
overrides = [
(self: super: {
alembic = super.alembic.overridePythonAttrs (oldAttrs: rec {
version = "1.14.1";
src = fetchPypi {
pname = "alembic";
inherit version;
sha256 = "sha256-SW6IgkWlOt8UmPyrMXE6Rpxlg2+N524BOZqhw+kN0hM=";
};
doCheck = false;
});
pyheif = super.pyheif.overridePythonAttrs (oldAttrs: {
doCheck = false;
});
sqlalchemy = super.sqlalchemy.overridePythonAttrs (oldAttrs: rec {
version = "1.3.23";
src = fetchPypi {
pname = "SQLAlchemy";
inherit version;
sha256 = "sha256-b8ozZyV4Zm9lfBMVUsTviXnBYG5JT3jNUZl0LfsmkYs=";
};
doCheck = false;
});
})
];
python = python3.override {
self = python;
packageOverrides = lib.composeManyExtensions overrides;
};
in
python.pkgs.buildPythonApplication {
pname = "szurubooru-server";
inherit version;
pyproject = true;
src = "${src}/server";
nativeBuildInputs = with python.pkgs; [ setuptools ];
propagatedBuildInputs = with python.pkgs; [
alembic
certifi
coloredlogs
heif-image-plugin
numpy
pillow-avif-plugin
pillow
psycopg2-binary
pyheif
pynacl
pyrfc3339
pytz
pyyaml
sqlalchemy
yt-dlp
];
postInstall = ''
mkdir $out/bin
install -m0755 $src/szuru-admin $out/bin/szuru-admin
'';
passthru.tests.szurubooru = nixosTests.szurubooru;
meta = with lib; {
description = "Server of szurubooru, an image board engine for small and medium communities";
homepage = "https://github.com/rr-/szurubooru";
license = licenses.gpl3;
maintainers = with maintainers; [ ratcornu ];
};
}

View File

@ -43,7 +43,12 @@ stdenv.mkDerivation rec {
rimeDataDrv = symlinkJoin {
name = "fcitx5-rime-data";
paths = rimeDataPkgs;
postBuild = "mkdir -p $out/share/rime-data";
postBuild = ''
mkdir -p $out/share/rime-data
# Ensure default.yaml exists
[ -e "$out/share/rime-data/default.yaml" ] || touch "$out/share/rime-data/default.yaml"
'';
};
postInstall = ''

View File

@ -1,15 +1,19 @@
GEM
remote: https://rubygems.org/
specs:
abbrev (0.1.2)
chronic (0.10.2)
csv (3.3.5)
highline (2.1.0)
matrix (0.4.2)
rchardet (1.8.0)
reckon (0.9.2)
reckon (0.11.1)
abbrev (> 0.1)
chronic (>= 0.3.0)
highline (>= 1.5.2)
csv (> 0.1)
highline (~> 2.0)
matrix (>= 0.4.2)
rchardet (>= 1.8.0)
rchardet (= 1.8.0)
PLATFORMS
ruby
@ -18,4 +22,4 @@ DEPENDENCIES
reckon
BUNDLED WITH
2.4.13
2.6.6

View File

@ -5,6 +5,8 @@
bundlerUpdateScript,
makeWrapper,
file,
testers,
reckon,
}:
stdenv.mkDerivation rec {
@ -31,7 +33,13 @@ stdenv.mkDerivation rec {
runHook postInstall
'';
passthru.updateScript = bundlerUpdateScript "reckon";
passthru = {
tests.version = testers.testVersion {
package = reckon;
version = "${version}";
};
updateScript = bundlerUpdateScript "reckon";
};
meta = with lib; {
description = "Flexibly import bank account CSV files into Ledger for command line accounting";

View File

@ -1,4 +1,14 @@
{
abbrev = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0hj2qyx7rzpc7awhvqlm597x7qdxwi4kkml4aqnp5jylmsm4w6xd";
type = "gem";
};
version = "0.1.2";
};
chronic = {
groups = [ "default" ];
platforms = [ ];
@ -9,6 +19,16 @@
};
version = "0.10.2";
};
csv = {
groups = [ "default" ];
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0gz7r2kazwwwyrwi95hbnhy54kwkfac5swh2gy5p5vw36fn38lbf";
type = "gem";
};
version = "3.3.5";
};
highline = {
groups = [ "default" ];
platforms = [ ];
@ -41,7 +61,9 @@
};
reckon = {
dependencies = [
"abbrev"
"chronic"
"csv"
"highline"
"matrix"
"rchardet"
@ -50,9 +72,9 @@
platforms = [ ];
source = {
remotes = [ "https://rubygems.org" ];
sha256 = "0188k41lvz5vnn03qw1hbi6c2i88n5p3183rb0xz9rfjcngh2ly3";
sha256 = "1y4iqjmgzj9nrp22pmayia54mpb4d6ga85q9xzqir7mhcd2bdca1";
type = "gem";
};
version = "0.9.2";
version = "0.11.1";
};
}

View File

@ -439,7 +439,6 @@ mapAliases {
citra = throw "citra has been removed from nixpkgs, as it has been taken down upstream"; # added 2024-03-04
citra-nightly = throw "citra-nightly has been removed from nixpkgs, as it has been taken down upstream"; # added 2024-03-04
citra-canary = throw "citra-canary has been removed from nixpkgs, as it has been taken down upstream"; # added 2024-03-04
clean = throw "'clean' has been removed from nixpkgs, as it is unmaintained and broken"; # Added 2025-05-18
cloog = throw "cloog has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-09-13
cloog_0_18_0 = throw "cloog_0_18_0 has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-09-13
cloogppl = throw "cloogppl has been removed from Nixpkgs, as it is unmaintained and obsolete"; # Added 2024-09-13
@ -538,6 +537,7 @@ mapAliases {
demjson = with python3Packages; toPythonApplication demjson; # Added 2022-01-18
devdash = throw "'devdash' has been removed as the upstream project was archived"; # Added 2025-03-27
devdocs-desktop = throw "'devdocs-desktop' has been removed as it is unmaintained upstream and vendors insecure dependencies"; # Added 2025-06-11
dfilemanager = throw "'dfilemanager' has been dropped as it was unmaintained"; # Added 2025-06-03
dgsh = throw "'dgsh' has been removed, as it was broken and unmaintained"; # added 2024-05-09
dibbler = throw "dibbler was removed because it is not maintained anymore"; # Added 2024-05-14
@ -553,6 +553,8 @@ mapAliases {
dnscrypt-wrapper = throw "dnscrypt-wrapper was removed because it has been effectively unmaintained since 2018. Use DNSCcrypt support in dnsdist instead"; # Added 2024-09-14
docear = throw "Docear was removed because it was unmaintained upstream. JabRef, Zotero, or Mendeley are potential replacements."; # Added 2024-11-02
docker_24 = throw "'docker_24' has been removed because it has been unmaintained since June 2024. Use docker_25 or newer instead."; # Added 2024-12-21
docker_26 = throw "'docker_26' has been removed because it has been unmaintained since February 2025. Use docker_28 or newer instead."; # Added 2025-06-21
docker_27 = throw "'docker_27' has been removed because it has been unmaintained since May 2025. Use docker_28 or newer instead."; # Added 2025-06-15
docker-compose_1 = throw "'docker-compose_1' has been removed because it has been unmaintained since May 2021. Use docker-compose instead."; # Added 2024-07-29
docker-distribution = distribution; # Added 2023-12-26
dolphin-emu-beta = dolphin-emu; # Added 2023-02-11
@ -940,6 +942,7 @@ mapAliases {
### J ###
jack2Full = throw "'jack2Full' has been renamed to/replaced by 'jack2'"; # Converted to throw 2024-10-17
jack_rack = throw "'jack_rack' has been removed due to lack of maintenance upstream."; # Added 2025-06-10
jami-client-qt = jami-client; # Added 2022-11-06
jami-client = jami; # Added 2023-02-10
jami-daemon = jami.daemon; # Added 2023-02-10
@ -1834,6 +1837,7 @@ mapAliases {
ssm-agent = amazon-ssm-agent; # Added 2023-10-17
starpls-bin = starpls;
starspace = throw "starspace has been removed from nixpkgs, as it was broken"; # Added 2024-07-15
station = throw "station has been removed from nixpkgs, as there were no committers among its maintainers to unblock security issues"; # added 2025-06-16
steamPackages = {
steamArch = throw "`steamPackages.steamArch` has been removed as it's no longer applicable";
steam = lib.warnOnInstantiate "`steamPackages.steam` has been moved to top level as `steam-unwrapped`" steam-unwrapped;
@ -1855,6 +1859,9 @@ mapAliases {
suidChroot = throw "'suidChroot' has been dropped as it was unmaintained, failed to build and had questionable security considerations"; # Added 2025-05-17
suitesparse_4_2 = throw "'suitesparse_4_2' has been removed as it was unmaintained upstream"; # Added 2025-05-17
suitesparse_4_4 = throw "'suitesparse_4_4' has been removed as it was unmaintained upstream"; # Added 2025-05-17
sumaclust = throw "'sumaclust' has been removed as it was archived upstream and broken with GCC 14"; # Added 2025-06-14
sumalibs = throw "'sumalibs' has been removed as it was archived upstream and broken with GCC 14"; # Added 2025-06-14
sumatra = throw "'sumatra' has been removed as it was archived upstream and broken with GCC 14"; # Added 2025-06-14
sumneko-lua-language-server = lua-language-server; # Added 2023-02-07
sumokoin = throw "sumokoin has been removed as it was abandoned upstream"; # Added 2024-11-23
supertag = throw "supertag has been removed as it was abandoned upstream and fails to build"; # Added 2025-04-20

View File

@ -9673,6 +9673,8 @@ with pkgs;
svxlink = libsForQt5.callPackage ../applications/radio/svxlink { };
szurubooru = callPackage ../servers/web-apps/szurubooru { };
tclap = tclap_1_2;
tclap_1_2 = callPackage ../development/libraries/tclap/1.2.nix { };
@ -12126,8 +12128,6 @@ with pkgs;
inherit (callPackage ../applications/virtualization/docker { })
docker_25
docker_26
docker_27
docker_28
;
@ -15495,12 +15495,6 @@ with pkgs;
samtools = callPackage ../applications/science/biology/samtools { };
inherit (callPackages ../applications/science/biology/sumatools { })
sumalibs
sumaclust
sumatra
;
trimmomatic = callPackage ../applications/science/biology/trimmomatic {
jdk = pkgs.jdk21_headless;
# Reduce closure size

View File

@ -6386,6 +6386,8 @@ self: super: with self; {
hebg = callPackage ../development/python-modules/hebg { };
heif-image-plugin = callPackage ../development/python-modules/heif-image-plugin { };
help2man = callPackage ../development/python-modules/help2man { };
helpdev = callPackage ../development/python-modules/helpdev { };
@ -11378,6 +11380,8 @@ self: super: with self; {
inherit (pkgs.xorg) libxcb;
};
pillow-avif-plugin = callPackage ../development/python-modules/pillow-avif-plugin { };
pillow-heif = callPackage ../development/python-modules/pillow-heif { };
pillow-jpls = callPackage ../development/python-modules/pillow-jpls { };