Merge master into staging-next
This commit is contained in:
@@ -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).
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 = [];
|
||||
});
|
||||
})];
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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 frontend’s 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 copy‐edited 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 re‐using 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
|
||||
```
|
||||
|
||||
### Re‐using data {#modules-services-akkoma-migration-pleroma-reuse}
|
||||
|
||||
To re‐use 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
@@ -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 = {
|
||||
":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";
|
||||
};
|
||||
};
|
||||
};
|
||||
</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 <nickname> <email> --admin --moderator --password <password>
|
||||
</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 = "16m";
|
||||
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.":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;
|
||||
'';
|
||||
};
|
||||
};
|
||||
</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.":pleroma".":mrf".policies =
|
||||
map (pkgs.formats.elixirConf { }).lib.mkRaw [
|
||||
"Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy"
|
||||
];
|
||||
</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.":pleroma".":media_preview_proxy" = {
|
||||
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 frontend’s default
|
||||
configuration using a custom derivation.
|
||||
</para>
|
||||
<programlisting language="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
|
||||
'';
|
||||
</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.":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";
|
||||
};
|
||||
};
|
||||
};
|
||||
</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.":pleroma"."Pleroma.Upload".filters =
|
||||
map (pkgs.formats.elixirConf { }).lib.mkRaw [
|
||||
"Pleroma.Upload.Filter.Exiftool"
|
||||
"Pleroma.Upload.Filter.Dedupe"
|
||||
"Pleroma.Upload.Filter.AnonymizeFilename"
|
||||
];
|
||||
</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 copy‐edited 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 re‐using 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>Re‐using data</title>
|
||||
<para>
|
||||
To re‐use 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.":pleroma"."Pleroma.Repo".database = "pleroma";
|
||||
services.akkoma.config.":pleroma".":instance".upload_dir = "/var/lib/pleroma/uploads";
|
||||
</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
@@ -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:
|
||||
|
||||
|
||||
@@ -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')
|
||||
'';
|
||||
})
|
||||
|
||||
@@ -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 {};
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
@@ -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
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
@@ -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 ];
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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 { };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user