Merge master into staging-next

This commit is contained in:
github-actions[bot]
2022-12-28 00:02:30 +00:00
committed by GitHub
43 changed files with 17001 additions and 62 deletions
+6
View File
@@ -4151,6 +4151,12 @@
githubId = 1365692;
name = "Will Fancher";
};
emattiza = {
email = "nix@mattiza.dev";
github = "emattiza";
githubId = 11719476;
name = "Evan Mattiza";
};
emmabastas = {
email = "emma.bastas@protonmail.com";
matrix = "@emmabastas:matrix.org";
@@ -23,6 +23,13 @@
<section xml:id="sec-release-23.05-new-services">
<title>New Services</title>
<itemizedlist>
<listitem>
<para>
<link xlink:href="https://akkoma.social">Akkoma</link>, an
ActivityPub microblogging server. Available as
<link xlink:href="options.html#opt-services.akkoma.enable">services.akkoma</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/akinomyoga/ble.sh">blesh</link>,
@@ -14,6 +14,8 @@ In addition to numerous new and upgraded packages, this release has the followin
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
- [Akkoma](https://akkoma.social), an ActivityPub microblogging server. Available as [services.akkoma](options.html#opt-services.akkoma.enable).
- [blesh](https://github.com/akinomyoga/ble.sh), a line editor written in pure bash. Available as [programs.bash.blesh](#opt-programs.bash.blesh.enable).
- [fzf](https://github.com/junegunn/fzf), a command line fuzzyfinder. Available as [programs.fzf](#opt-programs.fzf.fuzzyCompletion).
+2 -2
View File
@@ -42,8 +42,8 @@ in
strings. The latter is concatenated, interspersed with colon
characters.
'';
type = with types; attrsOf (either str (listOf str));
apply = mapAttrs (n: v: if isList v then concatStringsSep ":" v else v);
type = with types; attrsOf (oneOf [ str path (listOf str) ]);
apply = mapAttrs (n: v: if isList v then concatStringsSep ":" v else "${v}");
};
environment.profiles = mkOption {
+2 -3
View File
@@ -1,6 +1,6 @@
# This module defines a system-wide environment that will be
# initialised by pam_env (that is, not only in shells).
{ config, lib, pkgs, ... }:
{ config, lib, options, pkgs, ... }:
with lib;
@@ -32,8 +32,7 @@ in
therefore not possible to use PAM style variables such as
`@{HOME}`.
'';
type = with types; attrsOf (either str (listOf str));
apply = mapAttrs (n: v: if isList v then concatStringsSep ":" v else v);
inherit (options.environment.variables) type apply;
};
environment.profileRelativeSessionVariables = mkOption {
@@ -0,0 +1,15 @@
{ pkgs, ... }:
{
imports = [ ./installation-cd-minimal-new-kernel.nix ];
# Makes `availableOn` fail for zfs, see <nixos/modules/profiles/base.nix>.
# This is a workaround since we cannot remove the `"zfs"` string from `supportedFilesystems`.
# The proper fix would be to make `supportedFilesystems` an attrset with true/false which we
# could then `lib.mkForce false`
nixpkgs.overlays = [(final: super: {
zfs = super.zfs.overrideAttrs(_: {
meta.platforms = [];
});
})];
}
@@ -0,0 +1,15 @@
{ pkgs, ... }:
{
imports = [ ./sd-image-aarch64-new-kernel-installer.nix ];
# Makes `availableOn` fail for zfs, see <nixos/modules/profiles/base.nix>.
# This is a workaround since we cannot remove the `"zfs"` string from `supportedFilesystems`.
# The proper fix would be to make `supportedFilesystems` an attrset with true/false which we
# could then `lib.mkForce false`
nixpkgs.overlays = [(final: super: {
zfs = super.zfs.overrideAttrs(_: {
meta.platforms = [];
});
})];
}
+1
View File
@@ -1102,6 +1102,7 @@
./services/video/rtsp-simple-server.nix
./services/video/unifi-video.nix
./services/wayland/cage.nix
./services/web-apps/akkoma.nix
./services/web-apps/alps.nix
./services/web-apps/atlassian/confluence.nix
./services/web-apps/atlassian/crowd.nix
+332
View File
@@ -0,0 +1,332 @@
# Akkoma {#module-services-akkoma}
[Akkoma](https://akkoma.dev/) is a lightweight ActivityPub microblogging server forked from Pleroma.
## Service configuration {#modules-services-akkoma-service-configuration}
The Elixir configuration file required by Akkoma is generated automatically from
[{option}`services.akkoma.config`](options.html#opt-services.akkoma.config). Secrets must be
included from external files outside of the Nix store by setting the configuration option to
an attribute set containing the attribute {option}`_secret` a string pointing to the file
containing the actual value of the option.
For the mandatory configuration settings these secrets will be generated automatically if the
referenced file does not exist during startup, unless disabled through
[{option}`services.akkoma.initSecrets`](options.html#opt-services.akkoma.initSecrets).
The following configuration binds Akkoma to the Unix socket `/run/akkoma/socket`, expecting to
be run behind a HTTP proxy on `fediverse.example.com`.
```nix
services.akkoma.enable = true;
services.akkoma.config = {
":pleroma" = {
":instance" = {
name = "My Akkoma instance";
description = "More detailed description";
email = "admin@example.com";
registration_open = false;
};
"Pleroma.Web.Endpoint" = {
url.host = "fediverse.example.com";
};
};
};
```
Please refer to the [configuration cheat sheet](https://docs.akkoma.dev/stable/configuration/cheatsheet/)
for additional configuration options.
## User management {#modules-services-akkoma-user-management}
After the Akkoma service is running, the administration utility can be used to
[manage users](https://docs.akkoma.dev/stable/administration/CLI_tasks/user/). In particular an
administrative user can be created with
```ShellSession
$ pleroma_ctl user new <nickname> <email> --admin --moderator --password <password>
```
## Proxy configuration {#modules-services-akkoma-proxy-configuration}
Although it is possible to expose Akkoma directly, it is common practice to operate it behind an
HTTP reverse proxy such as nginx.
```nix
services.akkoma.nginx = {
enableACME = true;
forceSSL = true;
};
services.nginx = {
enable = true;
clientMaxBodySize = "16m";
recommendedTlsSettings = true;
recommendedOptimisation = true;
recommendedGzipSettings = true;
};
```
Please refer to [](#module-security-acme) for details on how to provision an SSL/TLS certificate.
### Media proxy {#modules-services-akkoma-media-proxy}
Without the media proxy function, Akkoma does not store any remote media like pictures or video
locally, and clients have to fetch them directly from the source server.
```nix
# Enable nginx slice module distributed with Tengine
services.nginx.package = pkgs.tengine;
# Enable media proxy
services.akkoma.config.":pleroma".":media_proxy" = {
enabled = true;
proxy_opts.redirect_on_failure = true;
};
# Adjust the persistent cache size as needed:
# Assuming an average object size of 128 KiB, around 1 MiB
# of memory is required for the key zone per GiB of cache.
# Ensure that the cache directory exists and is writable by nginx.
services.nginx.commonHttpConfig = ''
proxy_cache_path /var/cache/nginx/cache/akkoma-media-cache
levels= keys_zone=akkoma_media_cache:16m max_size=16g
inactive=1y use_temp_path=off;
'';
services.akkoma.nginx = {
locations."/proxy" = {
proxyPass = "http://unix:/run/akkoma/socket";
extraConfig = ''
proxy_cache akkoma_media_cache;
# Cache objects in slices of 1 MiB
slice 1m;
proxy_cache_key $host$uri$is_args$args$slice_range;
proxy_set_header Range $slice_range;
# Decouple proxy and upstream responses
proxy_buffering on;
proxy_cache_lock on;
proxy_ignore_client_abort on;
# Default cache times for various responses
proxy_cache_valid 200 1y;
proxy_cache_valid 206 301 304 1h;
# Allow serving of stale items
proxy_cache_use_stale error timeout invalid_header updating;
'';
};
};
```
#### Prefetch remote media {#modules-services-akkoma-prefetch-remote-media}
The following example enables the `MediaProxyWarmingPolicy` MRF policy which automatically
fetches all media associated with a post through the media proxy, as soon as the post is
received by the instance.
```nix
services.akkoma.config.":pleroma".":mrf".policies =
map (pkgs.formats.elixirConf { }).lib.mkRaw [
"Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy"
];
```
#### Media previews {#modules-services-akkoma-media-previews}
Akkoma can generate previews for media.
```nix
services.akkoma.config.":pleroma".":media_preview_proxy" = {
enabled = true;
thumbnail_max_width = 1920;
thumbnail_max_height = 1080;
};
```
## Frontend management {#modules-services-akkoma-frontend-management}
Akkoma will be deployed with the `pleroma-fe` and `admin-fe` frontends by default. These can be
modified by setting
[{option}`services.akkoma.frontends`](options.html#opt-services.akkoma.frontends).
The following example overrides the primary frontends default configuration using a custom
derivation.
```nix
services.akkoma.frontends.primary.package = pkgs.runCommand "pleroma-fe" {
config = builtins.toJSON {
expertLevel = 1;
collapseMessageWithSubject = false;
stopGifs = false;
replyVisibility = "following";
webPushHideIfCW = true;
hideScopeNotice = true;
renderMisskeyMarkdown = false;
hideSiteFavicon = true;
postContentType = "text/markdown";
showNavShortcuts = false;
};
nativeBuildInputs = with pkgs; [ jq xorg.lndir ];
passAsFile = [ "config" ];
} ''
mkdir $out
lndir ${pkgs.akkoma-frontends.pleroma-fe} $out
rm $out/static/config.json
jq -s add ${pkgs.akkoma-frontends.pleroma-fe}/static/config.json ${config} \
>$out/static/config.json
'';
```
## Federation policies {#modules-services-akkoma-federation-policies}
Akkoma comes with a number of modules to police federation with other ActivityPub instances.
The most valuable for typical users is the
[`:mrf_simple`](https://docs.akkoma.dev/stable/configuration/cheatsheet/#mrf_simple) module
which allows limiting federation based on instance hostnames.
This configuration snippet provides an example on how these can be used. Choosing an adequate
federation policy is not trivial and entails finding a balance between connectivity to the rest
of the fediverse and providing a pleasant experience to the users of an instance.
```nix
services.akkoma.config.":pleroma" = with (pkgs.formats.elixirConf { }).lib; {
":mrf".policies = map mkRaw [
"Pleroma.Web.ActivityPub.MRF.SimplePolicy"
];
":mrf_simple" = {
# Tag all media as sensitive
media_nsfw = mkMap {
"nsfw.weird.kinky" = "Untagged NSFW content";
};
# Reject all activities except deletes
reject = mkMap {
"kiwifarms.cc" = "Persistent harassment of users, no moderation";
};
# Force posts to be visible by followers only
followers_only = mkMap {
"beta.birdsite.live" = "Avoid polluting timelines with Twitter posts";
};
};
};
```
## Upload filters {#modules-services-akkoma-upload-filters}
This example strips GPS and location metadata from uploads, deduplicates them and anonymises the
the file name.
```nix
services.akkoma.config.":pleroma"."Pleroma.Upload".filters =
map (pkgs.formats.elixirConf { }).lib.mkRaw [
"Pleroma.Upload.Filter.Exiftool"
"Pleroma.Upload.Filter.Dedupe"
"Pleroma.Upload.Filter.AnonymizeFilename"
];
```
## Migration from Pleroma {#modules-services-akkoma-migration-pleroma}
Pleroma instances can be migrated to Akkoma either by copying the database and upload data or by
pointing Akkoma to the existing data. The necessary database migrations are run automatically
during startup of the service.
The configuration has to be copyedited manually.
Depending on the size of the database, the initial migration may take a long time and exceed the
startup timeout of the system manager. To work around this issue one may adjust the startup timeout
{option}`systemd.services.akkoma.serviceConfig.TimeoutStartSec` or simply run the migrations
manually:
```ShellSession
pleroma_ctl migrate
```
### Copying data {#modules-services-akkoma-migration-pleroma-copy}
Copying the Pleroma data instead of reusing it in place may permit easier reversion to Pleroma,
but allows the two data sets to diverge.
First disable Pleroma and then copy its database and upload data:
```ShellSession
# Create a copy of the database
nix-shell -p postgresql --run 'createdb -T pleroma akkoma'
# Copy upload data
mkdir /var/lib/akkoma
cp -R --reflink=auto /var/lib/pleroma/uploads /var/lib/akkoma/
```
After the data has been copied, enable the Akkoma service and verify that the migration has been
successful. If no longer required, the original data may then be deleted:
```ShellSession
# Delete original database
nix-shell -p postgresql --run 'dropdb pleroma'
# Delete original Pleroma state
rm -r /var/lib/pleroma
```
### Reusing data {#modules-services-akkoma-migration-pleroma-reuse}
To reuse the Pleroma data in place, disable Pleroma and enable Akkoma, pointing it to the
Pleroma database and upload directory.
```nix
# Adjust these settings according to the database name and upload directory path used by Pleroma
services.akkoma.config.":pleroma"."Pleroma.Repo".database = "pleroma";
services.akkoma.config.":pleroma".":instance".upload_dir = "/var/lib/pleroma/uploads";
```
Please keep in mind that after the Akkoma service has been started, any migrations applied by
Akkoma have to be rolled back before the database can be used again with Pleroma. This can be
achieved through `pleroma_ctl ecto.rollback`. Refer to the
[Ecto SQL documentation](https://hexdocs.pm/ecto_sql/Mix.Tasks.Ecto.Rollback.html) for
details.
## Advanced deployment options {#modules-services-akkoma-advanced-deployment}
### Confinement {#modules-services-akkoma-confinement}
The Akkoma systemd service may be confined to a chroot with
```nix
services.systemd.akkoma.confinement.enable = true;
```
Confinement of services is not generally supported in NixOS and therefore disabled by default.
Depending on the Akkoma configuration, the default confinement settings may be insufficient and
lead to subtle errors at run time, requiring adjustment:
Use
[{option}`services.systemd.akkoma.confinement.packages`](options.html#opt-systemd.services._name_.confinement.packages)
to make packages available in the chroot.
{option}`services.systemd.akkoma.serviceConfig.BindPaths` and
{option}`services.systemd.akkoma.serviceConfig.BindReadOnlyPaths` permit access to outside paths
through bind mounts. Refer to
[{manpage}`systemd.exec(5)`](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#BindPaths=)
for details.
### Distributed deployment {#modules-services-akkoma-distributed-deployment}
Being an Elixir application, Akkoma can be deployed in a distributed fashion.
This requires setting
[{option}`services.akkoma.dist.address`](options.html#opt-services.akkoma.dist.address) and
[{option}`services.akkoma.dist.cookie`](options.html#opt-services.akkoma.dist.cookie). The
specifics depend strongly on the deployment environment. For more information please check the
relevant [Erlang documentation](https://www.erlang.org/doc/reference_manual/distributed.html).
File diff suppressed because it is too large Load Diff
+396
View File
@@ -0,0 +1,396 @@
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="module-services-akkoma">
<title>Akkoma</title>
<para>
<link xlink:href="https://akkoma.dev/">Akkoma</link> is a
lightweight ActivityPub microblogging server forked from Pleroma.
</para>
<section xml:id="modules-services-akkoma-service-configuration">
<title>Service configuration</title>
<para>
The Elixir configuration file required by Akkoma is generated
automatically from
<link xlink:href="options.html#opt-services.akkoma.config"><option>services.akkoma.config</option></link>.
Secrets must be included from external files outside of the Nix
store by setting the configuration option to an attribute set
containing the attribute <option>_secret</option> a string
pointing to the file containing the actual value of the option.
</para>
<para>
For the mandatory configuration settings these secrets will be
generated automatically if the referenced file does not exist
during startup, unless disabled through
<link xlink:href="options.html#opt-services.akkoma.initSecrets"><option>services.akkoma.initSecrets</option></link>.
</para>
<para>
The following configuration binds Akkoma to the Unix socket
<literal>/run/akkoma/socket</literal>, expecting to be run behind
a HTTP proxy on <literal>fediverse.example.com</literal>.
</para>
<programlisting language="nix">
services.akkoma.enable = true;
services.akkoma.config = {
&quot;:pleroma&quot; = {
&quot;:instance&quot; = {
name = &quot;My Akkoma instance&quot;;
description = &quot;More detailed description&quot;;
email = &quot;admin@example.com&quot;;
registration_open = false;
};
&quot;Pleroma.Web.Endpoint&quot; = {
url.host = &quot;fediverse.example.com&quot;;
};
};
};
</programlisting>
<para>
Please refer to the
<link xlink:href="https://docs.akkoma.dev/stable/configuration/cheatsheet/">configuration
cheat sheet</link> for additional configuration options.
</para>
</section>
<section xml:id="modules-services-akkoma-user-management">
<title>User management</title>
<para>
After the Akkoma service is running, the administration utility
can be used to
<link xlink:href="https://docs.akkoma.dev/stable/administration/CLI_tasks/user/">manage
users</link>. In particular an administrative user can be created
with
</para>
<programlisting>
$ pleroma_ctl user new &lt;nickname&gt; &lt;email&gt; --admin --moderator --password &lt;password&gt;
</programlisting>
</section>
<section xml:id="modules-services-akkoma-proxy-configuration">
<title>Proxy configuration</title>
<para>
Although it is possible to expose Akkoma directly, it is common
practice to operate it behind an HTTP reverse proxy such as nginx.
</para>
<programlisting language="nix">
services.akkoma.nginx = {
enableACME = true;
forceSSL = true;
};
services.nginx = {
enable = true;
clientMaxBodySize = &quot;16m&quot;;
recommendedTlsSettings = true;
recommendedOptimisation = true;
recommendedGzipSettings = true;
};
</programlisting>
<para>
Please refer to <xref linkend="module-security-acme" /> for
details on how to provision an SSL/TLS certificate.
</para>
<section xml:id="modules-services-akkoma-media-proxy">
<title>Media proxy</title>
<para>
Without the media proxy function, Akkoma does not store any
remote media like pictures or video locally, and clients have to
fetch them directly from the source server.
</para>
<programlisting language="nix">
# Enable nginx slice module distributed with Tengine
services.nginx.package = pkgs.tengine;
# Enable media proxy
services.akkoma.config.&quot;:pleroma&quot;.&quot;:media_proxy&quot; = {
enabled = true;
proxy_opts.redirect_on_failure = true;
};
# Adjust the persistent cache size as needed:
# Assuming an average object size of 128 KiB, around 1 MiB
# of memory is required for the key zone per GiB of cache.
# Ensure that the cache directory exists and is writable by nginx.
services.nginx.commonHttpConfig = ''
proxy_cache_path /var/cache/nginx/cache/akkoma-media-cache
levels= keys_zone=akkoma_media_cache:16m max_size=16g
inactive=1y use_temp_path=off;
'';
services.akkoma.nginx = {
locations.&quot;/proxy&quot; = {
proxyPass = &quot;http://unix:/run/akkoma/socket&quot;;
extraConfig = ''
proxy_cache akkoma_media_cache;
# Cache objects in slices of 1 MiB
slice 1m;
proxy_cache_key $host$uri$is_args$args$slice_range;
proxy_set_header Range $slice_range;
# Decouple proxy and upstream responses
proxy_buffering on;
proxy_cache_lock on;
proxy_ignore_client_abort on;
# Default cache times for various responses
proxy_cache_valid 200 1y;
proxy_cache_valid 206 301 304 1h;
# Allow serving of stale items
proxy_cache_use_stale error timeout invalid_header updating;
'';
};
};
</programlisting>
<section xml:id="modules-services-akkoma-prefetch-remote-media">
<title>Prefetch remote media</title>
<para>
The following example enables the
<literal>MediaProxyWarmingPolicy</literal> MRF policy which
automatically fetches all media associated with a post through
the media proxy, as soon as the post is received by the
instance.
</para>
<programlisting language="nix">
services.akkoma.config.&quot;:pleroma&quot;.&quot;:mrf&quot;.policies =
map (pkgs.formats.elixirConf { }).lib.mkRaw [
&quot;Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy&quot;
];
</programlisting>
</section>
<section xml:id="modules-services-akkoma-media-previews">
<title>Media previews</title>
<para>
Akkoma can generate previews for media.
</para>
<programlisting language="nix">
services.akkoma.config.&quot;:pleroma&quot;.&quot;:media_preview_proxy&quot; = {
enabled = true;
thumbnail_max_width = 1920;
thumbnail_max_height = 1080;
};
</programlisting>
</section>
</section>
</section>
<section xml:id="modules-services-akkoma-frontend-management">
<title>Frontend management</title>
<para>
Akkoma will be deployed with the <literal>pleroma-fe</literal> and
<literal>admin-fe</literal> frontends by default. These can be
modified by setting
<link xlink:href="options.html#opt-services.akkoma.frontends"><option>services.akkoma.frontends</option></link>.
</para>
<para>
The following example overrides the primary frontends default
configuration using a custom derivation.
</para>
<programlisting language="nix">
services.akkoma.frontends.primary.package = pkgs.runCommand &quot;pleroma-fe&quot; {
config = builtins.toJSON {
expertLevel = 1;
collapseMessageWithSubject = false;
stopGifs = false;
replyVisibility = &quot;following&quot;;
webPushHideIfCW = true;
hideScopeNotice = true;
renderMisskeyMarkdown = false;
hideSiteFavicon = true;
postContentType = &quot;text/markdown&quot;;
showNavShortcuts = false;
};
nativeBuildInputs = with pkgs; [ jq xorg.lndir ];
passAsFile = [ &quot;config&quot; ];
} ''
mkdir $out
lndir ${pkgs.akkoma-frontends.pleroma-fe} $out
rm $out/static/config.json
jq -s add ${pkgs.akkoma-frontends.pleroma-fe}/static/config.json ${config} \
&gt;$out/static/config.json
'';
</programlisting>
</section>
<section xml:id="modules-services-akkoma-federation-policies">
<title>Federation policies</title>
<para>
Akkoma comes with a number of modules to police federation with
other ActivityPub instances. The most valuable for typical users
is the
<link xlink:href="https://docs.akkoma.dev/stable/configuration/cheatsheet/#mrf_simple"><literal>:mrf_simple</literal></link>
module which allows limiting federation based on instance
hostnames.
</para>
<para>
This configuration snippet provides an example on how these can be
used. Choosing an adequate federation policy is not trivial and
entails finding a balance between connectivity to the rest of the
fediverse and providing a pleasant experience to the users of an
instance.
</para>
<programlisting language="nix">
services.akkoma.config.&quot;:pleroma&quot; = with (pkgs.formats.elixirConf { }).lib; {
&quot;:mrf&quot;.policies = map mkRaw [
&quot;Pleroma.Web.ActivityPub.MRF.SimplePolicy&quot;
];
&quot;:mrf_simple&quot; = {
# Tag all media as sensitive
media_nsfw = mkMap {
&quot;nsfw.weird.kinky&quot; = &quot;Untagged NSFW content&quot;;
};
# Reject all activities except deletes
reject = mkMap {
&quot;kiwifarms.cc&quot; = &quot;Persistent harassment of users, no moderation&quot;;
};
# Force posts to be visible by followers only
followers_only = mkMap {
&quot;beta.birdsite.live&quot; = &quot;Avoid polluting timelines with Twitter posts&quot;;
};
};
};
</programlisting>
</section>
<section xml:id="modules-services-akkoma-upload-filters">
<title>Upload filters</title>
<para>
This example strips GPS and location metadata from uploads,
deduplicates them and anonymises the the file name.
</para>
<programlisting language="nix">
services.akkoma.config.&quot;:pleroma&quot;.&quot;Pleroma.Upload&quot;.filters =
map (pkgs.formats.elixirConf { }).lib.mkRaw [
&quot;Pleroma.Upload.Filter.Exiftool&quot;
&quot;Pleroma.Upload.Filter.Dedupe&quot;
&quot;Pleroma.Upload.Filter.AnonymizeFilename&quot;
];
</programlisting>
</section>
<section xml:id="modules-services-akkoma-migration-pleroma">
<title>Migration from Pleroma</title>
<para>
Pleroma instances can be migrated to Akkoma either by copying the
database and upload data or by pointing Akkoma to the existing
data. The necessary database migrations are run automatically
during startup of the service.
</para>
<para>
The configuration has to be copyedited manually.
</para>
<para>
Depending on the size of the database, the initial migration may
take a long time and exceed the startup timeout of the system
manager. To work around this issue one may adjust the startup
timeout
<option>systemd.services.akkoma.serviceConfig.TimeoutStartSec</option>
or simply run the migrations manually:
</para>
<programlisting>
pleroma_ctl migrate
</programlisting>
<section xml:id="modules-services-akkoma-migration-pleroma-copy">
<title>Copying data</title>
<para>
Copying the Pleroma data instead of reusing it in place may
permit easier reversion to Pleroma, but allows the two data sets
to diverge.
</para>
<para>
First disable Pleroma and then copy its database and upload
data:
</para>
<programlisting>
# Create a copy of the database
nix-shell -p postgresql --run 'createdb -T pleroma akkoma'
# Copy upload data
mkdir /var/lib/akkoma
cp -R --reflink=auto /var/lib/pleroma/uploads /var/lib/akkoma/
</programlisting>
<para>
After the data has been copied, enable the Akkoma service and
verify that the migration has been successful. If no longer
required, the original data may then be deleted:
</para>
<programlisting>
# Delete original database
nix-shell -p postgresql --run 'dropdb pleroma'
# Delete original Pleroma state
rm -r /var/lib/pleroma
</programlisting>
</section>
<section xml:id="modules-services-akkoma-migration-pleroma-reuse">
<title>Reusing data</title>
<para>
To reuse the Pleroma data in place, disable Pleroma and enable
Akkoma, pointing it to the Pleroma database and upload
directory.
</para>
<programlisting language="nix">
# Adjust these settings according to the database name and upload directory path used by Pleroma
services.akkoma.config.&quot;:pleroma&quot;.&quot;Pleroma.Repo&quot;.database = &quot;pleroma&quot;;
services.akkoma.config.&quot;:pleroma&quot;.&quot;:instance&quot;.upload_dir = &quot;/var/lib/pleroma/uploads&quot;;
</programlisting>
<para>
Please keep in mind that after the Akkoma service has been
started, any migrations applied by Akkoma have to be rolled back
before the database can be used again with Pleroma. This can be
achieved through <literal>pleroma_ctl ecto.rollback</literal>.
Refer to the
<link xlink:href="https://hexdocs.pm/ecto_sql/Mix.Tasks.Ecto.Rollback.html">Ecto
SQL documentation</link> for details.
</para>
</section>
</section>
<section xml:id="modules-services-akkoma-advanced-deployment">
<title>Advanced deployment options</title>
<section xml:id="modules-services-akkoma-confinement">
<title>Confinement</title>
<para>
The Akkoma systemd service may be confined to a chroot with
</para>
<programlisting language="nix">
services.systemd.akkoma.confinement.enable = true;
</programlisting>
<para>
Confinement of services is not generally supported in NixOS and
therefore disabled by default. Depending on the Akkoma
configuration, the default confinement settings may be
insufficient and lead to subtle errors at run time, requiring
adjustment:
</para>
<para>
Use
<link xlink:href="options.html#opt-systemd.services._name_.confinement.packages"><option>services.systemd.akkoma.confinement.packages</option></link>
to make packages available in the chroot.
</para>
<para>
<option>services.systemd.akkoma.serviceConfig.BindPaths</option>
and
<option>services.systemd.akkoma.serviceConfig.BindReadOnlyPaths</option>
permit access to outside paths through bind mounts. Refer to
<link xlink:href="https://www.freedesktop.org/software/systemd/man/systemd.exec.html#BindPaths="><link xlink:href="https://www.freedesktop.org/software/systemd/man/systemd.exec.html"><citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry></link></link>
for details.
</para>
</section>
<section xml:id="modules-services-akkoma-distributed-deployment">
<title>Distributed deployment</title>
<para>
Being an Elixir application, Akkoma can be deployed in a
distributed fashion.
</para>
<para>
This requires setting
<link xlink:href="options.html#opt-services.akkoma.dist.address"><option>services.akkoma.dist.address</option></link>
and
<link xlink:href="options.html#opt-services.akkoma.dist.cookie"><option>services.akkoma.dist.cookie</option></link>.
The specifics depend strongly on the deployment environment. For
more information please check the relevant
<link xlink:href="https://www.erlang.org/doc/reference_manual/distributed.html">Erlang
documentation</link>.
</para>
</section>
</section>
</chapter>
+18 -2
View File
@@ -181,14 +181,22 @@ in rec {
inherit system;
});
# A variant with a more recent (but possibly less stable) kernel
# that might support more hardware.
# A variant with a more recent (but possibly less stable) kernel that might support more hardware.
# This variant keeps zfs support enabled, hoping it will build and work.
iso_minimal_new_kernel = forMatchingSystems [ "x86_64-linux" "aarch64-linux" ] (system: makeIso {
module = ./modules/installer/cd-dvd/installation-cd-minimal-new-kernel.nix;
type = "minimal-new-kernel";
inherit system;
});
# A variant with a more recent (but possibly less stable) kernel that might support more hardware.
# ZFS support disabled since it is unlikely to support the latest kernel.
iso_minimal_new_kernel_no_zfs = forMatchingSystems [ "x86_64-linux" "aarch64-linux" ] (system: makeIso {
module = ./modules/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix;
type = "minimal-new-kernel-no-zfs";
inherit system;
});
sd_image = forMatchingSystems [ "armv6l-linux" "armv7l-linux" "aarch64-linux" ] (system: makeSdImage {
module = {
armv6l-linux = ./modules/installer/sd-card/sd-image-raspberrypi-installer.nix;
@@ -206,6 +214,14 @@ in rec {
inherit system;
});
sd_image_new_kernel_no_zfs = forMatchingSystems [ "aarch64-linux" ] (system: makeSdImage {
module = {
aarch64-linux = ./modules/installer/sd-card/sd-image-aarch64-new-kernel-no-zfs-installer.nix;
}.${system};
type = "minimal-new-kernel-no-zfs";
inherit system;
});
# A bootable VirtualBox virtual appliance as an OVA file (i.e. packaged OVF).
ova = forMatchingSystems [ "x86_64-linux" ] (system:
+121
View File
@@ -0,0 +1,121 @@
/*
End-to-end test for Akkoma.
Based in part on nixos/tests/pleroma.
TODO: Test federation.
*/
import ./make-test-python.nix ({ pkgs, package ? pkgs.akkoma, confined ? false, ... }:
let
userPassword = "4LKOrGo8SgbPm1a6NclVU5Wb";
provisionUser = pkgs.writers.writeBashBin "provisionUser" ''
set -eu -o errtrace -o pipefail
pleroma_ctl user new jamy jamy@nixos.test --password '${userPassword}' --moderator --admin -y
'';
tlsCert = pkgs.runCommand "selfSignedCerts" {
nativeBuildInputs = with pkgs; [ openssl ];
} ''
mkdir -p $out
openssl req -x509 \
-subj '/CN=akkoma.nixos.test/' -days 49710 \
-addext 'subjectAltName = DNS:akkoma.nixos.test' \
-keyout "$out/key.pem" -newkey ed25519 \
-out "$out/cert.pem" -noenc
'';
sendToot = pkgs.writers.writeBashBin "sendToot" ''
set -eu -o errtrace -o pipefail
export REQUESTS_CA_BUNDLE="/etc/ssl/certs/ca-certificates.crt"
echo '${userPassword}' | ${pkgs.toot}/bin/toot login_cli -i "akkoma.nixos.test" -e "jamy@nixos.test"
echo "y" | ${pkgs.toot}/bin/toot post "hello world Jamy here"
echo "y" | ${pkgs.toot}/bin/toot timeline | grep -F -q "hello world Jamy here"
# Test file upload
echo "y" | ${pkgs.toot}/bin/toot upload <(dd if=/dev/zero bs=1024 count=1024 status=none) \
| grep -F -q "https://akkoma.nixos.test/media"
'';
checkFe = pkgs.writers.writeBashBin "checkFe" ''
set -eu -o errtrace -o pipefail
paths=( / /static/{config,styles}.json /pleroma/admin/ )
for path in "''${paths[@]}"; do
diff \
<(${pkgs.curl}/bin/curl -f -S -s -o /dev/null -w '%{response_code}' "https://akkoma.nixos.test$path") \
<(echo -n 200)
done
'';
hosts = nodes: ''
${nodes.akkoma.networking.primaryIPAddress} akkoma.nixos.test
${nodes.client.networking.primaryIPAddress} client.nixos.test
'';
in
{
name = "akkoma";
nodes = {
client = { nodes, pkgs, config, ... }: {
security.pki.certificateFiles = [ "${tlsCert}/cert.pem" ];
networking.extraHosts = hosts nodes;
};
akkoma = { nodes, pkgs, config, ... }: {
networking.extraHosts = hosts nodes;
networking.firewall.allowedTCPPorts = [ 443 ];
environment.systemPackages = with pkgs; [ provisionUser ];
systemd.services.akkoma.confinement.enable = confined;
services.akkoma = {
enable = true;
package = package;
config = {
":pleroma" = {
":instance" = {
name = "NixOS test Akkoma server";
description = "NixOS test Akkoma server";
email = "akkoma@nixos.test";
notify_email = "akkoma@nixos.test";
registration_open = true;
};
":media_proxy" = {
enabled = false;
};
"Pleroma.Web.Endpoint" = {
url.host = "akkoma.nixos.test";
};
};
};
nginx = {
addSSL = true;
sslCertificate = "${tlsCert}/cert.pem";
sslCertificateKey = "${tlsCert}/key.pem";
};
};
services.nginx.enable = true;
services.postgresql.enable = true;
};
};
testScript = { nodes, ... }: ''
start_all()
akkoma.wait_for_unit('akkoma-initdb.service')
akkoma.systemctl('restart akkoma-initdb.service') # test repeated initialisation
akkoma.wait_for_unit('akkoma.service')
akkoma.wait_for_file('/run/akkoma/socket');
akkoma.succeed('${provisionUser}/bin/provisionUser')
akkoma.wait_for_unit('nginx.service')
client.succeed('${sendToot}/bin/sendToot')
client.succeed('${checkFe}/bin/checkFe')
'';
})
+2
View File
@@ -73,6 +73,8 @@ in {
agate = runTest ./web-servers/agate.nix;
agda = handleTest ./agda.nix {};
airsonic = handleTest ./airsonic.nix {};
akkoma = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./akkoma.nix {};
akkoma-confined = handleTestOn [ "x86_64-linux" "aarch64-linux" ] ./akkoma.nix { confined = true; };
allTerminfo = handleTest ./all-terminfo.nix {};
alps = handleTest ./alps.nix {};
amazon-init-shell = handleTest ./amazon-init-shell.nix {};
+5 -5
View File
@@ -4,11 +4,11 @@
stdenv.mkDerivation rec {
pname = "jquake";
version = "1.8.1";
version = "1.8.4";
src = fetchurl {
url = "https://fleneindre.github.io/downloads/JQuake_${version}_linux.zip";
sha256 = "sha256-fIxCcqpv0KAXUBbyinTXr/fkAcufVtpr9FUTJkXSgTs=";
url = "https://github.com/fleneindre/fleneindre.github.io/raw/master/downloads/JQuake_${version}_linux.zip";
sha256 = "sha256-oIYkYmI8uG4zjnm1Jq1mzIcSwRlKbWJqvACygQyp9sA=";
};
nativeBuildInputs = [ unzip copyDesktopItems ];
@@ -58,8 +58,8 @@ stdenv.mkDerivation rec {
meta = with lib; {
description = "Real-time earthquake map of Japan";
homepage = "https://jquake.net";
downloadPage = "https://jquake.net/?down";
changelog = "https://jquake.net/?docu";
downloadPage = "https://jquake.net/en/terms.html?os=linux&arch=any";
changelog = "https://jquake.net/en/changelog.html";
maintainers = with maintainers; [ nessdoor ];
sourceProvenance = with sourceTypes; [ binaryBytecode ];
license = licenses.unfree;
@@ -0,0 +1,81 @@
{ lib, buildGoModule, fetchFromGitHub }:
builtins.mapAttrs (pname: { doCheck ? true, mainProgram ? pname, subPackages }: buildGoModule rec {
inherit pname;
version = "3.24.5";
src = fetchFromGitHub {
owner = "projectcalico";
repo = "calico";
rev = "v${version}";
hash = "sha256-fB9FHiIqVieVkPfHmBvcaUmUqkT1ZbDT26+DUE9lbdc=";
};
vendorHash = "sha256-ogQ/REf5cngoGAFIBN++txew6UqOw1hqCVsixyuGtug=";
inherit doCheck subPackages;
ldflags = [ "-s" "-w" ];
meta = with lib; {
homepage = "https://projectcalico.docs.tigera.io";
changelog = "https://github.com/projectcalico/calico/releases/tag/v${version}";
description = "Cloud native networking and network security";
license = licenses.asl20;
maintainers = with maintainers; [ urandom ];
inherit mainProgram;
};
}) {
calico-apiserver = {
mainProgram = "apiserver";
subPackages = [
"apiserver/cmd/..."
];
};
calico-app-policy = {
# integration tests require network
doCheck = false;
mainProgram = "dikastes";
subPackages = [
"app-policy/cmd/..."
];
};
calico-cni-plugin = {
mainProgram = "calico";
subPackages = [
"cni-plugin/cmd/..."
];
};
calico-kube-controllers = {
# integration tests require network and docker
doCheck = false;
mainProgram = "kube-controllers";
subPackages = [
"kube-controllers/cmd/..."
];
};
calico-pod2daemon = {
mainProgram = "flexvol";
subPackages = [
"pod2daemon/csidriver"
"pod2daemon/flexvol"
"pod2daemon/nodeagent"
];
};
calico-typha = {
subPackages = [
"typha/cmd/..."
];
};
calicoctl = {
subPackages = [
"calicoctl/calicoctl"
];
};
confd-calico = {
mainProgram = "confd";
subPackages = [
"confd"
];
};
}
@@ -89,7 +89,7 @@ self = stdenv.mkDerivation {
passthru = {
inherit coq-version;
inherit ocamlPackages ocamlNativeNuildInputs;
inherit ocamlPackages ocamlNativeBuildInputs;
inherit ocamlPropagatedBuildInputs ocamlPropagatedNativeBuildInputs;
# For compatibility
inherit (ocamlPackages) ocaml camlp5 findlib num ;
@@ -0,0 +1,58 @@
{ bash
, binutils
, buildGoModule
, fetchFromGitHub
, kbd
, lib
, libfido2
, lvm2
, lz4
, makeWrapper
, mdadm
, unixtools
, xz
, zfs
}:
buildGoModule rec {
pname = "booster";
version = "0.9";
src = fetchFromGitHub {
owner = "anatol";
repo = pname;
rev = version;
hash = "sha256-kalVFVBb+ngoUpm+iiIHGS6vBVLEvTVyKuSMSMbp7Qc=";
};
vendorHash = "sha256-GD+nsT4/Y2mTF+ztOC3N560BY5+QSfsPrXZ+dJYtzAw=";
postPatch = ''
substituteInPlace init/main.go --replace "/usr/bin/fsck" "${unixtools.fsck}/bin/fsck"
'';
# integration tests are run against the current kernel
doCheck = false;
nativeBuildInputs = [
kbd
lz4
makeWrapper
xz
];
postInstall = let
runtimeInputs = [ bash binutils kbd libfido2 lvm2 mdadm zfs ];
in ''
wrapProgram $out/bin/generator --prefix PATH : ${lib.makeBinPath runtimeInputs}
wrapProgram $out/bin/init --prefix PATH : ${lib.makeBinPath runtimeInputs}
'';
meta = with lib; {
description = "Fast and secure initramfs generator ";
homepage = "https://github.com/anatol/booster";
license = licenses.mit;
maintainers = with maintainers; [ urandom ];
mainProgram = "init";
};
}
@@ -46,7 +46,5 @@ stdenv.mkDerivation rec {
license = licenses.isc;
platforms = platforms.linux ++ platforms.darwin;
maintainers = with maintainers; [ abbe afh ];
# never built on x86_64-darwin since first introduction in nixpkgs
broken = stdenv.isDarwin && stdenv.isx86_64;
};
}
@@ -0,0 +1,51 @@
{ lib, buildGoModule, fetchFromGitHub, glibc, go-md2man, installShellFiles }:
buildGoModule rec {
pname = "toolbox";
version = "0.0.99.3";
src = fetchFromGitHub {
owner = "containers";
repo = pname;
rev = version;
hash = "sha256-9HiWgEtaMypLOwXJ6Xg3grLSZOQ4NInZtcvLPV51YO8=";
};
patches = [ ./glibc.patch ];
vendorHash = "sha256-k79TcC9voQROpJnyZ0RsqxJnBT83W5Z+D+D3HnuQGsI=";
postPatch = ''
substituteInPlace src/cmd/create.go --subst-var-by glibc ${glibc}
'';
modRoot = "src";
nativeBuildInputs = [ go-md2man installShellFiles ];
ldflags = [
"-s"
"-w"
"-X github.com/containers/toolbox/pkg/version.currentVersion=${version}"
];
preCheck = "export PATH=$GOPATH/bin:$PATH";
postInstall = ''
cd ..
for d in doc/*.md; do
go-md2man -in $d -out ''${d%.md}
done
installManPage doc/*.[1-9]
installShellCompletion --bash completion/bash/toolbox
install profile.d/toolbox.sh -Dt $out/share/profile.d
'';
meta = with lib; {
homepage = "https://containertoolbx.org";
changelog = "https://github.com/containers/toolbox/releases/tag/${version}";
description = "Tool for containerized command line environments on Linux";
license = licenses.asl20;
maintainers = with maintainers; [ urandom ];
};
}
@@ -0,0 +1,12 @@
diff --git a/src/cmd/create.go b/src/cmd/create.go
index 74e90b1..113ef80 100644
--- a/src/cmd/create.go
+++ b/src/cmd/create.go
@@ -423,6 +425,7 @@ func createContainer(container, image, release string, showCommandToEnter bool)
"--volume", toolboxPathMountArg,
"--volume", usrMountArg,
"--volume", runtimeDirectoryMountArg,
+ "--volume", "@glibc@:@glibc@:ro",
}...)
createArgs = append(createArgs, avahiSocketMount...)
@@ -1,19 +1,40 @@
{ lib, stdenv, fetchurl, fetchpatch, python, root, makeWrapper, zlib, withRootSupport ? false }:
{ lib
, stdenv
, fetchurl
, fetchpatch
, python
, root
, makeWrapper
, zlib
, withRootSupport ? false
}:
stdenv.mkDerivation rec {
pname = "yoda";
version = "1.9.6";
version = "1.9.7";
src = fetchurl {
url = "https://www.hepforge.org/archive/yoda/YODA-${version}.tar.bz2";
hash = "sha256-IVI/ova2yPM0iVnzqUhzSpMMollR08kZC0Qk4Tc18qQ=";
hash = "sha256-jQe7BNy3k2SFhxihggNFLY2foAAp+pQjnq+oUpAyuP8=";
};
nativeBuildInputs = with python.pkgs; [ cython makeWrapper ];
buildInputs = [ python ]
++ (with python.pkgs; [ numpy matplotlib ])
++ lib.optional withRootSupport root;
propagatedBuildInputs = [ zlib ];
nativeBuildInputs = with python.pkgs; [
cython
makeWrapper
];
buildInputs = [
python
] ++ (with python.pkgs; [
numpy
matplotlib
]) ++ lib.optionals withRootSupport [
root
];
propagatedBuildInputs = [
zlib
];
enableParallelBuilding = true;
@@ -31,13 +52,15 @@ stdenv.mkDerivation rec {
hardeningDisable = [ "format" ];
doInstallCheck = true;
installCheckTarget = "check";
meta = {
meta = with lib; {
description = "Provides small set of data analysis (specifically histogramming) classes";
license = lib.licenses.gpl3Only;
license = licenses.gpl3Only;
homepage = "https://yoda.hepforge.org";
platforms = lib.platforms.unix;
maintainers = with lib.maintainers; [ veprbl ];
changelog = "https://gitlab.com/hepcedar/yoda/-/blob/yoda-${version}/ChangeLog";
platforms = platforms.unix;
maintainers = with maintainers; [ veprbl ];
};
}
@@ -1,5 +1,7 @@
{ lib, stdenv
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, cmake
}:
@@ -16,17 +18,27 @@ stdenv.mkDerivation rec {
sha256 = "0ymwd4n8p8s0ndh1vcbmjcsm0x2cc2b7v3baww5y6as12873bcrh";
};
patches = [
# TODO: remove on next release
(fetchpatch {
name = "add-an-option-to-disable-coverage.patch";
url = "https://github.com/ScottKolo/Mongoose/commit/39f4a0059ff7bad5bffa84369f31839214ac7877.patch";
sha256 = "sha256-V8lCq22ixCCzLmKtW6bUL8cvJFZzdgYoA4BFs4xYd3c=";
})
];
nativeBuildInputs = [
cmake
];
# ld: file not found: libclang_rt.profile_osx.a
cmakeFlags = lib.optional (stdenv.isDarwin && stdenv.isAarch64) "-DENABLE_COVERAGE=OFF";
meta = with lib; {
description = "Graph Coarsening and Partitioning Library";
homepage = "https://github.com/ScottKolo/Mongoose";
license = licenses.gpl3;
maintainers = with maintainers; [];
license = licenses.gpl3Only;
maintainers = with maintainers; [ wegank ];
platforms = with platforms; unix;
# never built on aarch64-darwin since first introduction in nixpkgs
broken = stdenv.isDarwin && stdenv.isAarch64;
};
}
@@ -1,6 +1,7 @@
{ lib, buildPythonPackage, fetchPypi
{ lib
, buildPythonPackage
, fetchPypi
, django
, azure-storage-blob
, boto3
, dropbox
@@ -11,14 +12,16 @@
buildPythonPackage rec {
pname = "django-storages";
version = "1.13.1";
version = "1.13.2";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-s9mOzAnxsWJ8Kyz0MJZDIs5OCGF9v5tCNsFqModaHgs=";
hash = "sha256-y63RXJCc63JH1P/FA/Eqm+w2mZ340L73wx5XF31RJog=";
};
propagatedBuildInputs = [ django ];
propagatedBuildInputs = [
django
];
preCheck = ''
export DJANGO_SETTINGS_MODULE=tests.settings
@@ -27,6 +30,7 @@ buildPythonPackage rec {
--replace 'test_accessed_time' 'dont_test_accessed_time' \
--replace 'test_modified_time' 'dont_test_modified_time'
'';
checkInputs = [
azure-storage-blob
boto3
@@ -36,11 +40,14 @@ buildPythonPackage rec {
paramiko
];
pythonImportsCheck = [ "storages" ];
pythonImportsCheck = [
"storages"
];
meta = with lib; {
description = "Collection of custom storage backends for Django";
homepage = "https://django-storages.readthedocs.io";
changelog = "https://github.com/jschneier/django-storages/blob/${version}/CHANGELOG.rst";
license = licenses.bsd3;
maintainers = with maintainers; [ mmai ];
};
@@ -6,40 +6,48 @@
, pyyaml
, requests
, setuptools-scm
, pythonOlder
}:
buildPythonPackage rec {
pname = "scikit-hep-testdata";
version = "0.4.24";
version = "0.4.25";
format = "pyproject";
# fetch from github as we want the data files
# https://github.com/scikit-hep/scikit-hep-testdata/issues/60
disabled = pythonOlder "3.6";
src = fetchFromGitHub {
owner = "scikit-hep";
repo = pname;
rev = "refs/tags/v${version}";
sha256 = "sha256-Q9yyzwFQpqN3Q1SmNKDBxdo51uMqKp8xJ9Ilo9eCTV0=";
hash = "sha256-JiQaGyvoECylcJHWR2xm8ob5fA+0FmIEQpTuxxysvlw=";
};
SETUPTOOLS_SCM_PRETEND_VERSION = version;
nativeBuildInputs = [
setuptools-scm
];
propagatedBuildInputs = [
pyyaml
requests
] ++ lib.optional (!pythonAtLeast "3.9") importlib-resources;
SETUPTOOLS_SCM_PRETEND_VERSION = version;
] ++ lib.optional (!pythonAtLeast "3.9") [
importlib-resources
];
SKHEP_DATA = 1; # install the actual root files
doCheck = false; # tests require networking
pythonImportsCheck = [ "skhep_testdata" ];
pythonImportsCheck = [
"skhep_testdata"
];
meta = with lib; {
homepage = "https://github.com/scikit-hep/scikit-hep-testdata";
description = "A common package to provide example files (e.g., ROOT) for testing and developing packages against";
changelog = "https://github.com/scikit-hep/scikit-hep-testdata/releases/tag/v${version}";
license = licenses.bsd3;
maintainers = with maintainers; [ veprbl ];
};
@@ -0,0 +1,30 @@
{ lib, buildGoModule, fetchFromGitHub, sqlite }:
buildGoModule rec {
pname = "vitess";
version = "15.0.1";
src = fetchFromGitHub {
owner = "vitessio";
repo = pname;
rev = "v${version}";
hash = "sha256-na7s39Mn6Kn9+edGu8ThCuYB7ZguDGC4MDsq14bOjME=";
};
vendorHash = "sha256-+yCznSxv0EWoKiQIgFEQ/iUxrlQ5A1HYNkoMiRDG3ik=";
buildInputs = [ sqlite ];
subPackages = [ "go/cmd/..." ];
# integration tests require access to syslog and root
doCheck = false;
meta = with lib; {
homepage = "https://vitess.io/";
changelog = "https://github.com/vitessio/vitess/releases/tag/v${version}";
description = "A database clustering system for horizontal scaling of MySQL";
license = licenses.asl20;
maintainers = with maintainers; [ urandom ];
};
}
+2 -2
View File
@@ -6,14 +6,14 @@
stdenv.mkDerivation rec {
pname = "sagetex";
version = "3.6";
version = "3.6.1";
passthru.tlType = "run";
src = fetchFromGitHub {
owner = "sagemath";
repo = "sagetex";
rev = "v${version}";
sha256 = "8iHcJbaY/dh0vmvYyd6zj1ZbuJRaJGb6bUBK1v4gXWU=";
sha256 = "sha256-OfhbXHbGI+DaDHqZCOGiSHJPHjGuT7ZqSEjKweloW38=";
};
buildInputs = [
+84
View File
@@ -0,0 +1,84 @@
{ lib
, stdenv
, fetchFromGitea, fetchYarnDeps
, fixup_yarn_lock, yarn, nodejs
, python3, pkg-config, libsass
}:
stdenv.mkDerivation rec {
pname = "admin-fe";
version = "unstable-2022-09-10";
src = fetchFromGitea {
domain = "akkoma.dev";
owner = "AkkomaGang";
repo = "admin-fe";
rev = "e094e12c3ecb540df839fdf20c5a03d10454fcad";
hash = "sha256-dqkW8p4x+5z1Hd8gp8V4+DsLm8EspVwPXDxtvlp1AIk=";
};
patches = [ ./deps.patch ];
offlineCache = fetchYarnDeps {
yarnLock = ./yarn.lock;
hash = "sha256-h+QUBT2VwPWu2l05Zkcp+0vHN/x40uXxw2KYjq7l/Xk=";
};
nativeBuildInputs = [
fixup_yarn_lock
yarn
nodejs
pkg-config
python3
libsass
];
postPatch = ''
cp ${./yarn.lock} yarn.lock
'';
configurePhase = ''
runHook preConfigure
export HOME="$(mktemp -d)"
yarn config --offline set yarn-offline-mirror ${lib.escapeShellArg offlineCache}
fixup_yarn_lock yarn.lock
yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
patchShebangs node_modules/cross-env
mkdir -p "$HOME/.node-gyp/${nodejs.version}"
echo 9 >"$HOME/.node-gyp/${nodejs.version}/installVersion"
ln -sfv "${nodejs}/include" "$HOME/.node-gyp/${nodejs.version}"
export npm_config_nodedir=${nodejs}
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
pushd node_modules/node-sass
LIBSASS_EXT=auto yarn run build --offline
popd
export NODE_OPTIONS="--openssl-legacy-provider"
yarn run build:prod --offline
runHook postBuild
'';
installPhase = ''
runHook preInstall
cp -R -v dist $out
runHook postInstall
'';
meta = with lib; {
description = "Admin interface for Akkoma";
homepage = "https://akkoma.dev/AkkomaGang/akkoma-fe/";
license = licenses.agpl3;
maintainers = with maintainers; [ mvs ];
};
}
+46
View File
@@ -0,0 +1,46 @@
diff --git a/package.json b/package.json
index f267be19..fb806527 100644
--- a/package.json
+++ b/package.json
@@ -31,14 +31,12 @@
"type": "git",
"url": "git+https://akkoma.dev/AkkomaGang/admin-fe.git"
},
- "resolutions": {
- "prosemirror-model": "1.9.1"
- },
"bugs": {
"url": "https://akkoma.dev/AkkomaGang/admin-fe/-/issues"
},
"dependencies": {
"@babel/runtime": "^7.3.4",
+ "@toast-ui/editor": "^3.2.0",
"axios": "0.18.0",
"clipboard": "1.7.1",
"codemirror": "5.39.2",
@@ -65,7 +63,6 @@
"sortablejs": "1.7.0",
"tiptap": "^1.29.6",
"tiptap-extensions": "^1.32.7",
- "tui-editor": "1.2.7",
"vue": "^2.6.8",
"vue-count-to": "1.0.13",
"vue-i18n": "^8.9.0",
diff --git a/src/components/element-ui/MarkdownEditor/index.vue b/src/components/element-ui/MarkdownEditor/index.vue
index 7ae9fd40..18114701 100644
--- a/src/components/element-ui/MarkdownEditor/index.vue
+++ b/src/components/element-ui/MarkdownEditor/index.vue
@@ -5,10 +5,10 @@
<script>
// deps for editor
import 'codemirror/lib/codemirror.css' // codemirror
-import 'tui-editor/dist/tui-editor.css' // editor ui
-import 'tui-editor/dist/tui-editor-contents.css' // editor content
+import '@toast-ui/editor/dist/tui-editor.css' // editor ui
+import '@toast-ui/editor/dist/tui-editor-contents.css' // editor content
-import Editor from 'tui-editor'
+import Editor from '@toast-ui/editor'
import defaultOptions from './defaultOptions'
export default {
File diff suppressed because it is too large Load Diff
+216
View File
@@ -0,0 +1,216 @@
{ lib
, beamPackages
, fetchFromGitea, fetchFromGitHub, fetchFromGitLab
, cmake, file, libxcrypt
, writeText
, nixosTests
, ...
}:
beamPackages.mixRelease rec {
pname = "pleroma";
version = "3.5.0";
src = fetchFromGitea {
domain = "akkoma.dev";
owner = "AkkomaGang";
repo = "akkoma";
rev = "v${version}";
hash = "sha256-Apt+6nI4zOCyRb5msPt5UF9vyaendyaOjrYBMl0DqRY=";
};
postPatch = ''
# Remove dependency on OS_Mon
sed -E -i 's/(^|\s):os_mon,//' \
mix.exs
'';
postBuild = ''
# Digest and compress static files
rm -f priv/static/READ_THIS_BEFORE_TOUCHING_FILES_HERE
mix phx.digest --no-deps-check
'';
# cf. https://github.com/whitfin/cachex/issues/205
stripDebug = false;
mixNixDeps = import ./mix.nix {
inherit beamPackages lib;
overrides = (final: prev: {
# mix2nix does not support git dependencies yet,
# so we need to add them manually
captcha = beamPackages.buildMix rec {
name = "captcha";
version = "0.1.0";
src = fetchFromGitLab {
domain = "git.pleroma.social";
group = "pleroma";
owner = "elixir-libraries";
repo = "elixir-captcha";
rev = "e0f16822d578866e186a0974d65ad58cddc1e2ab";
sha256 = "0qbf86l59kmpf1nd82v4141ba9ba75xwmnqzpgbm23fa1hh8pi9c";
};
};
crypt = beamPackages.buildRebar3 rec {
name = "crypt";
version = "0.4.3";
src = fetchFromGitHub {
owner = "msantos";
repo = "crypt";
rev = "f75cd55325e33cbea198fb41fe41871392f8fb76";
sha256 = "sha256-ZYhZTe7cTITkl8DZ4z2IOlxTX5gnbJImu/lVJ2ZjR1o=";
};
buildInputs = [ libxcrypt ];
postInstall = ''
mv $out/lib/erlang/lib/crypt-${version}/priv/{source,crypt}.so
'';
beamDeps = with final; [ elixir_make ];
};
elasticsearch = beamPackages.buildMix rec {
name = "elasticsearch";
version = "1.0.1";
src = fetchFromGitea {
domain = "akkoma.dev";
owner = "AkkomaGang";
repo = "elasticsearch-elixir";
rev = "6cd946f75f6ab9042521a009d1d32d29a90113ca";
hash = "sha256-CtmQHVl+VTpemne+nxbkYGcErrgCo+t3ZBPbkFSpyF0=";
};
};
gettext = beamPackages.buildMix {
name = "gettext";
version = "0.19.1";
src = fetchFromGitHub {
owner = "tusooa";
repo = "gettext";
rev = "72fb2496b6c5280ed911bdc3756890e7f38a4808";
hash = "sha256-V0qmE+LcAbVoWsJmWE4fwrduYFIZ5BzK/sGzgLY3eH0=";
};
};
linkify = beamPackages.buildMix rec {
name = "linkify";
version = "0.5.2";
src = fetchFromGitea {
domain = "akkoma.dev";
owner = "AkkomaGang";
repo = "linkify";
rev = "2567e2c1073fa371fd26fd66dfa5bc77b6919c16";
hash = "sha256-e3wzlbRuyw/UB5Tb7IozX/WR1T+sIBf9C/o5Thki9vg=";
};
};
mfm_parser = beamPackages.buildMix rec {
name = "mfm_parser";
version = "0.1.1";
src = fetchFromGitea {
domain = "akkoma.dev";
owner = "AkkomaGang";
repo = "mfm-parser";
rev = "912fba81152d4d572e457fd5427f9875b2bc3dbe";
hash = "sha256-n3WmERxKK8VM8jFIBAPS6GkbT7/zjqi3AjjWbjOdMzs=";
};
beamDeps = with final; [ phoenix_view temple ];
};
remote_ip = beamPackages.buildMix rec {
name = "remote_ip";
version = "0.1.5";
src = fetchFromGitLab {
domain = "git.pleroma.social";
group = "pleroma";
owner = "elixir-libraries";
repo = "remote_ip";
rev = "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8";
sha256 = "0c7vmakcxlcs3j040018i7bfd6z0yq6fjfig02g5fgakx398s0x6";
};
beamDeps = with final; [ combine plug inet_cidr ];
};
search_parser = beamPackages.buildMix rec {
name = "search_parser";
version = "0.1.0";
src = fetchFromGitHub {
owner = "FloatingGhost";
repo = "pleroma-contrib-search-parser";
rev = "08971a81e68686f9ac465cfb6661d51c5e4e1e7f";
hash = "sha256-sbo9Kcp2oT05o2GAF+IgziLPYmCkWgBfFMBCytmqg3Y=";
};
beamDeps = with final; [ nimble_parsec ];
};
temple = beamPackages.buildMix rec {
name = "temple";
version = "0.9.0-rc.0";
src = fetchFromGitea {
domain = "akkoma.dev";
owner = "AkkomaGang";
repo = "temple";
rev = "066a699ade472d8fa42a9d730b29a61af9bc8b59";
hash = "sha256-qA0z8WTMjO2OixcZBARn/LbuV3s3LGtwZ9nSjj/tWBc=";
};
mixEnv = "dev";
beamDeps = with final; [ earmark_parser ex_doc makeup makeup_elixir makeup_erlang nimble_parsec ];
};
# Some additional build inputs and build fixes
fast_html = prev.fast_html.override {
nativeBuildInputs = [ cmake ];
dontUseCmakeConfigure = true;
};
http_signatures = prev.http_signatures.override {
patchPhase = ''
substituteInPlace mix.exs --replace ":logger" ":logger, :public_key"
'';
};
majic = prev.majic.override {
buildInputs = [ file ];
};
syslog = prev.syslog.override {
buildPlugins = with beamPackages; [ pc ];
};
mime = prev.mime.override {
patchPhase = let
cfgFile = writeText "config.exs" ''
use Mix.Config
config :mime, :types, %{
"application/activity+json" => ["activity+json"],
"application/jrd+json" => ["jrd+json"],
"application/ld+json" => ["activity+json"],
"application/xml" => ["xml"],
"application/xrd+xml" => ["xrd+xml"]
}
'';
in ''
mkdir config
cp ${cfgFile} config/config.exs
'';
};
});
};
passthru = {
tests = with nixosTests; { inherit akkoma akkoma-confined; };
inherit mixNixDeps;
};
meta = with lib; {
description = "ActivityPub microblogging server";
homepage = "https://akkoma.social";
license = licenses.agpl3;
maintainers = with maintainers; [ mvs ];
platforms = platforms.unix;
};
}
+20
View File
@@ -0,0 +1,20 @@
{ lib, fetchzip }:
let
rev = "e764ba00b9c34524e3ff3ffd19a44fa2a5c296a5";
in fetchzip {
pname = "blobs.gg";
version = "unstable-2019-07-24";
url = "https://git.pleroma.social/pleroma/emoji-index/-/raw/${rev}/packs/blobs_gg.zip";
hash = "sha256-dnOwW93xTyJKRnYgvPgsqZHNWod4y80aNhBSVKNk6do=";
stripRoot = false;
meta = with lib; {
description = "Blob emoji from blobs.gg repacked as APNG";
homepage = "https://blobs.gg";
license = licenses.asl20;
maintainers = with maintainers; [ mvs ];
};
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,82 @@
{ lib
, stdenv
, fetchFromGitea, fetchYarnDeps
, fixup_yarn_lock, yarn, nodejs
, jpegoptim, oxipng, nodePackages
}:
stdenv.mkDerivation rec {
pname = "pleroma-fe";
version = "unstable-2022-12-10";
src = fetchFromGitea {
domain = "akkoma.dev";
owner = "AkkomaGang";
repo = "pleroma-fe";
rev = "9c9b4cc07c018a21c8261dd7680a97aa3a670756";
hash = "sha256-jYJcG2Q5kxOH29G5WV/6Cx7a+b7FuFROEn/8ruh7cDc=";
};
offlineCache = fetchYarnDeps {
yarnLock = src + "/yarn.lock";
hash = "sha256-pz6NHBYZRi+Rwx6H74895vFWGLSivI7Ul8XV6wMbgJg=";
};
nativeBuildInputs = [
fixup_yarn_lock
yarn
nodejs
jpegoptim
oxipng
nodePackages.svgo
];
postPatch = ''
# Build scripts assume to be used within a Git repository checkout
sed -E -i '/^let commitHash =/,/;$/clet commitHash = "${builtins.substring 0 7 src.rev}";' \
build/webpack.prod.conf.js
'';
configurePhase = ''
runHook preConfigure
export HOME="$(mktemp -d)"
yarn config --offline set yarn-offline-mirror ${lib.escapeShellArg offlineCache}
fixup_yarn_lock yarn.lock
yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
export NODE_ENV="production"
export NODE_OPTIONS="--openssl-legacy-provider"
yarn run build --offline
runHook postBuild
'';
installPhase = ''
runHook preInstall
# (Losslessly) optimise compression of image artifacts
find dist -type f -name '*.jpg' -execdir ${jpegoptim}/bin/jpegoptim -w$NIX_BUILD_CORES {} \;
find dist -type f -name '*.png' -execdir ${oxipng}/bin/oxipng -o max -t $NIX_BUILD_CORES {} \;
find dist -type f -name '*.svg' -execdir ${nodePackages.svgo}/bin/svgo {} \;
cp -R -v dist $out
runHook postInstall
'';
meta = with lib; {
description = "Frontend for Akkoma and Pleroma";
homepage = "https://akkoma.dev/AkkomaGang/pleroma-fe/";
license = licenses.agpl3;
maintainers = with maintainers; [ mvs ];
};
}
-2
View File
@@ -37,7 +37,5 @@ rustPlatform.buildRustPackage rec {
homepage = "https://github.com/qdrant/qdrant";
license = licenses.asl20;
maintainers = with maintainers; [ dit7ya ];
# never built on x86_64-darwin since first introduction in nixpkgs
broken = stdenv.isDarwin && stdenv.isx86_64;
};
}
@@ -0,0 +1,33 @@
{ buildGoModule
, fetchFromGitHub
, go-rice
, lib
}:
buildGoModule rec {
pname = "linx-server";
version = "unstable-2021-12-24";
src = fetchFromGitHub {
owner = "zizzydizzymc";
repo = pname;
rev = "3f503442f10fca68a3212975b23cf74d92c9988c";
hash = "sha256-tTHw/rIb2Gs5i5vZKsSgbUePIY7Np6HofBXu4TTjKbw=";
};
# upstream tests are broken, see zizzydizzymc/linx-server#34
patches = [ ./test.patch ];
vendorHash = "sha256-/N3AXrPyENp3li4X86LNXsfBYbjJulk+0EAyogPNIpc=";
nativeBuildInputs = [ go-rice ];
preBuild = "rice embed-go";
meta = with lib; {
description = "Self-hosted file/code/media sharing website.";
homepage = "https://put.icu";
license = licenses.gpl3Only;
maintainers = with maintainers; [ urandom ];
};
}
@@ -0,0 +1,74 @@
diff --git a/server_test.go b/server_test.go
index fc225ce..2df3608 100644
--- a/server_test.go
+++ b/server_test.go
@@ -446,63 +446,6 @@ func TestPostJSONUpload(t *testing.T) {
}
}
-func TestPostJSONUploadMaxExpiry(t *testing.T) {
- mux := setup()
- Config.maxExpiry = 300
-
- // include 0 to test edge case
- // https://github.com/andreimarcu/linx-server/issues/111
- testExpiries := []string{"86400", "-150", "0"}
- for _, expiry := range testExpiries {
- w := httptest.NewRecorder()
-
- filename := generateBarename() + ".txt"
-
- var b bytes.Buffer
- mw := multipart.NewWriter(&b)
- fw, err := mw.CreateFormFile("file", filename)
- if err != nil {
- t.Fatal(err)
- }
-
- fw.Write([]byte("File content"))
- mw.Close()
-
- req, err := http.NewRequest("POST", "/upload/", &b)
- req.Header.Set("Content-Type", mw.FormDataContentType())
- req.Header.Set("Accept", "application/json")
- req.Header.Set("Linx-Expiry", expiry)
- if err != nil {
- t.Fatal(err)
- }
-
- mux.ServeHTTP(w, req)
-
- if w.Code != 200 {
- t.Log(w.Body.String())
- t.Fatalf("Status code is not 200, but %d", w.Code)
- }
-
- var myjson RespOkJSON
- err = json.Unmarshal([]byte(w.Body.String()), &myjson)
- if err != nil {
- t.Fatal(err)
- }
-
- myExp, err := strconv.ParseInt(myjson.Expiry, 10, 64)
- if err != nil {
- t.Fatal(err)
- }
-
- expected := time.Now().Add(time.Duration(Config.maxExpiry) * time.Second).Unix()
- if myExp != expected {
- t.Fatalf("File expiry is not %d but %s", expected, myjson.Expiry)
- }
- }
-
- Config.maxExpiry = 0
-}
-
func TestPostExpiresJSONUpload(t *testing.T) {
mux := setup()
w := httptest.NewRecorder()
@@ -1301,5 +1244,4 @@ func TestPutAndGetCLI(t *testing.T) {
if !strings.HasPrefix(contentType, "text/plain") {
t.Fatalf("Didn't receive file directly but %s", contentType)
}
-
}
@@ -17,13 +17,13 @@
stdenv.mkDerivation rec {
pname = "steamtinkerlaunch";
version = "11.11";
version = "12.0";
src = fetchFromGitHub {
owner = "sonic2kk";
repo = pname;
rev = "v${version}";
hash = "sha256-rWENtgV6spokzkhnmrrzsAQ19dROJ50ofEulU5Jx5IE=";
hash = "sha256-cEGERh0INc/xetQhALqc+lp/HNDoy3JdTZr/nHlthYc=";
};
# hardcode PROGCMD because #150841
+5 -4
View File
@@ -1,4 +1,5 @@
{ elk7Version
{ config
, elk7Version
, enableUnfree ? true
, lib
, stdenv
@@ -78,10 +79,10 @@ let
maintainers = with maintainers; [ wjlroe offline basvandijk ];
};
passthru.tests =
optionalAttrs (!enableUnfree) (
assert this.drvPath == nixosTests.elk.ELK-7.elkPackages.logstash.drvPath;
optionalAttrs (config.allowUnfree && enableUnfree) (
assert this.drvPath == nixosTests.elk.unfree.ELK-7.elkPackages.logstash.drvPath;
{
elk = nixosTests.elk.ELK-7;
elk = nixosTests.elk.unfree.ELK-7;
}
);
};
+30
View File
@@ -0,0 +1,30 @@
{ lib, bash, buildGoModule, fetchFromGitHub, getent, stdenv }:
buildGoModule rec {
pname = "otel-cli";
version = "0.0.20";
src = fetchFromGitHub {
owner = "equinix-labs";
repo = pname;
rev = "v${version}";
hash = "sha256-bWdkuw0uEE75l9YCo2Dq1NpWXuMH61RQ6p7m65P1QCE=";
};
vendorHash = "sha256-IJ2Gq5z1oNvcpWPh+BMs46VZMN1lHyE+M7kUinTSRr8=";
preCheck = ''
ln -s $GOPATH/bin/otel-cli .
'' + lib.optionalString (!stdenv.isDarwin) ''
substituteInPlace main_test.go \
--replace 'const minimumPath = `/bin:/usr/bin`' 'const minimumPath = `${lib.makeBinPath [ getent ]}`'
'';
meta = with lib; {
homepage = "https://github.com/equinix-labs/otel-cli";
description = "A command-line tool for sending OpenTelemetry traces";
changelog = "https://github.com/equinix-labs/otel-cli/releases/tag/v${version}";
license = licenses.asl20;
maintainers = with lib.maintainers; [ emattiza urandom ];
};
}
@@ -0,0 +1,42 @@
{ lib
, buildGoModule
, fetchFromGitHub
, testers
, osv-scanner
}:
buildGoModule rec {
pname = "osv-scanner";
version = "1.0.2";
src = fetchFromGitHub {
owner = "google";
repo = pname;
rev = "v${version}";
hash = "sha256-RmR6ZJg+UkE+eSmz4hGuMlObl6UvnGKNoLtBGVKoQ8Q=";
};
vendorHash = "sha256-HUgzoQuWBRnt8+lCiu9QfO1XR5EMnqVIkrL+nIMf0IA=";
ldflags = [
"-s"
"-w"
"-X main.version=${version}"
"-X main.commit=n/a"
"-X main.date=1970-01-01T00:00:00Z"
];
# Tests require network connectivity to query https://api.osv.dev.
doCheck = false;
passthru.tests.version = testers.testVersion {
package = osv-scanner;
};
meta = with lib; {
description = "Vulnerability scanner written in Go which uses the data provided by https://osv.dev";
homepage = "https://github.com/google/osv-scanner";
changelog = "https://github.com/google/osv-scanner/releases/tag/v${version}";
license = licenses.asl20;
maintainers = with maintainers; [ stehessel urandom ];
};
}
+20 -4
View File
@@ -1,4 +1,4 @@
{ lib, stdenv, fetchurl, cmake, protobuf, libiconv }:
{ lib, stdenv, fetchurl, fetchpatch, cmake, protobuf, libiconv }:
stdenv.mkDerivation rec {
pname = "jumanpp";
@@ -9,7 +9,25 @@ stdenv.mkDerivation rec {
sha256 = "sha256-ASdr6qbkSe71M7QmuuwidCa4xQhDVoXBJ2XqvSY53pQ=";
};
patches = [ ./0001-Exclude-all-tests-from-the-build.patch ];
patches = [
./0001-Exclude-all-tests-from-the-build.patch
# https://github.com/ku-nlp/jumanpp/pull/132
(fetchpatch {
name = "fix-unused-warning.patch";
url = "https://github.com/ku-nlp/jumanpp/commit/cc0d555287c8b214e9d6f0279c449a4e035deee4.patch";
sha256 = "sha256-yRKwuUJ2UPXJcjxBGhSOmcQI/EOijiJDMmmmSRdNpX8=";
})
(fetchpatch {
name = "update-libs.patch";
url = "https://github.com/ku-nlp/jumanpp/commit/5e9068f56ae310ed7c1df185b14d49654ffe1ab6.patch";
sha256 = "sha256-X49/ZoLT0OGePLZYlgacNxA1dHM4WYdQ8I4LW3sW16E=";
})
(fetchpatch {
name = "fix-mmap-on-apple-m1.patch";
url = "https://github.com/ku-nlp/jumanpp/commit/0c22249f12928d0c962f03f229026661bf0c7921.patch";
sha256 = "sha256-g6CuruqyoMJxU/hlNoALx1QnFM8BlTsTd0pwlVrco3I=";
})
];
cmakeFlags = [ "-DJPP_ENABLE_TESTS=OFF" ];
nativeBuildInputs = [ cmake ];
@@ -27,7 +45,5 @@ stdenv.mkDerivation rec {
license = licenses.asl20;
maintainers = with maintainers; [ mt-caret ];
platforms = platforms.all;
# never built on aarch64-darwin since first introduction in nixpkgs
broken = stdenv.isDarwin && stdenv.isAarch64;
};
}
+34 -2
View File
@@ -1194,6 +1194,15 @@ with pkgs;
adminer = callPackage ../servers/adminer { };
akkoma = callPackage ../servers/akkoma { };
akkoma-frontends = recurseIntoAttrs {
pleroma-fe = callPackage ../servers/akkoma/pleroma-fe { };
admin-fe = callPackage ../servers/akkoma/admin-fe { };
};
akkoma-emoji = recurseIntoAttrs {
blobs_gg = callPackage ../servers/akkoma/emoji/blobs_gg.nix { };
};
advancecomp = callPackage ../tools/compression/advancecomp {};
aefs = callPackage ../tools/filesystems/aefs { };
@@ -1493,6 +1502,8 @@ with pkgs;
withNtfs = true;
};
vitess = callPackage ../development/tools/database/vitess {};
voms = callPackage ../tools/networking/voms { };
vopono = callPackage ../tools/networking/vopono { };
@@ -5180,6 +5191,8 @@ with pkgs;
osv-detector = callPackage ../tools/security/osv-detector {};
osv-scanner = callPackage ../tools/security/osv-scanner {};
pastel = callPackage ../applications/misc/pastel {
inherit (darwin.apple_sdk.frameworks) Security;
};
@@ -10337,6 +10350,8 @@ with pkgs;
ostree = callPackage ../tools/misc/ostree { };
otel-cli = callPackage ../tools/misc/otel-cli {};
otfcc = callPackage ../tools/misc/otfcc { };
otpclient = callPackage ../applications/misc/otpclient { };
@@ -10994,7 +11009,7 @@ with pkgs;
qarte = libsForQt5.callPackage ../applications/video/qarte { };
qdrant = callPackage ../servers/search/qdrant { };
qdrant = darwin.apple_sdk_11_0.callPackage ../servers/search/qdrant { };
qlcplus = libsForQt5.callPackage ../applications/misc/qlcplus { };
@@ -12344,6 +12359,8 @@ with pkgs;
todo = callPackage ../tools/misc/todo { };
toolbox = callPackage ../applications/virtualization/toolbox { };
tor = callPackage ../tools/security/tor { };
tor-browser-bundle-bin = callPackage ../applications/networking/browsers/tor-browser-bundle-bin { };
@@ -24097,6 +24114,8 @@ with pkgs;
listmonk = callPackage ../servers/mail/listmonk { };
linx-server = callPackage ../servers/web-apps/linx-server {};
livepeer = callPackage ../servers/livepeer { };
lwan = callPackage ../servers/http/lwan { };
@@ -27921,6 +27940,8 @@ with pkgs;
bonzomatic = callPackage ../applications/editors/bonzomatic { };
booster = callPackage ../applications/system/booster {};
bottles = callPackage ../applications/misc/bottles/fhsenv.nix { };
bottles-unwrapped = callPackage ../applications/misc/bottles { };
@@ -27979,6 +28000,17 @@ with pkgs;
calibre-web = callPackage ../servers/calibre-web { };
# calico-felix and calico-node have not been packaged due to libbpf, linking issues
inherit (callPackage ../applications/networking/cluster/calico {})
calico-apiserver
calico-app-policy
calico-cni-plugin
calico-kube-controllers
calico-pod2daemon
calico-typha
calicoctl
confd-calico;
calligra = libsForQt5.callPackage ../applications/office/calligra { };
perkeep = callPackage ../applications/misc/perkeep { };
@@ -29201,7 +29233,7 @@ with pkgs;
goffice = callPackage ../development/libraries/goffice { };
got = callPackage ../applications/version-management/got { };
got = darwin.apple_sdk_11_0.callPackage ../applications/version-management/got { };
gtkterm = callPackage ../tools/misc/gtkterm { };