mirror of
https://github.com/Gaelan/minifedi
synced 2024-11-10 06:14:17 +00:00
Improve configurability.
This commit is contained in:
parent
d40fa59204
commit
1dec24b614
24 changed files with 284 additions and 226 deletions
53
LICENSE
Normal file
53
LICENSE
Normal file
|
@ -0,0 +1,53 @@
|
|||
Copyright (c) 2023 Gaelan Steele
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
Minifedi's build scripts for Mastodon, Akkoma, and GoToSocial are derived from
|
||||
Nixpkgs, released under the following license:
|
||||
|
||||
Copyright (c) 2003-2023 Eelco Dolstra and the Nixpkgs/NixOS contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
Minifedi contains nginx configuration file templates derived from configuration
|
||||
files provided by the Mastodon, Akkoma, and GoToSocial projects, all of which
|
||||
are licensed under AGPLv3. My position is that these configuration files are
|
||||
insufficiently creative to be copyrightable, but this is not legal advice.
|
68
README.md
68
README.md
|
@ -1,28 +1,70 @@
|
|||
# MINIFEDI IS NOT DONE. It's like 80% of the way there, but the docs below remain slightly aspirational for the moment.
|
||||
|
||||
# Minifedi
|
||||
|
||||
Minifedi is a tool to quickly spin up a bunch of ActivityPub servers for local testing.
|
||||
|
||||
Minifedi should run on any macOS or Linux system with [Nix](https://nixos.org) installed. (Nix itself works fine on any Linux distribution; you don't need to be using NixOS.) Windows isn't natively supported, but WSL should work. Minifedi is entirely self-contained and needs no changes to your system configuration besides installing Nix; you can install it with a git clone, delete it with `rm -rf`, and your system will be exactly the way it was before.
|
||||
Minifedi is entirely self-contained and needs no changes to your system configuration besides installing Nix; you can install it with a git clone, delete it with `rm -rf`, and your system will be exactly the way it was before.
|
||||
|
||||
Minifedi's goal is to "just work" on every machine. If the instructions below fail for you, please file an issue; I'll fix it if at all possible.
|
||||
## System Requirements
|
||||
|
||||
- macOS or Linux (any distribution). Tested on x86_64, aarch64 should work. Other architectues probably won't due to poor Nix support, unfortunately.
|
||||
- Windows isn't natively supported, but might work under WSL.
|
||||
- A recent version of [Nix](https://nixos.org).
|
||||
- This doesn't mean you need to be on NixOS; Nix can be installed on more or less any distribution, and is happy to do its own thing without interfering with your system.
|
||||
- ~4GB free on disk.
|
||||
- ~4GB free in /tmp.
|
||||
- On many Linux distributions, this means you'll need ~8GB of RAM.
|
||||
- You might be able to get away with less if you disable GoToSocial.
|
||||
- Ports 80 and 443 free.
|
||||
- This is required because some (all) fedi software is only willing to federate with servers on the standard ports.
|
||||
- macOS lets any user listen on these ports. On Linux, Minifedi will use sudo to gain the capability required to listen on these ports, then immediately switch back to your user and relinquish all other capabilties.
|
||||
|
||||
## Warnings
|
||||
|
||||
Minifedi is very new software. I'm fairly sure it won't break your system (it's designed very specifically to not do anything that possibly could) but it might not work either.
|
||||
|
||||
Minifedi is designed for testing only. The assumption is you'll happily throw out everything stored in it when you're done. Don't store anything you care about in an instance run by Minifedi.
|
||||
|
||||
## Getting Started
|
||||
|
||||
```
|
||||
git clone https://github.com/Gaelan/minifedi.git
|
||||
cd minifedi
|
||||
vi nix/services.nix # if you'd like, edit the list of instances - by default, we run one of each
|
||||
nix run
|
||||
```
|
||||
Minifedi's goal is to "just work" on every machine. If the instructions below fail for you, please file an issue; I'll fix it if at all possible.
|
||||
|
||||
Give it some time, and you should see
|
||||
1. Install [Nix](https://nixos.org), if you haven't.
|
||||
- If you install Nix through your OS package manager, you may need to add yourself to the `nix-users` group and/or ensure the `nix-daemon` service is enabled.
|
||||
2. ```
|
||||
git clone https://github.com/Gaelan/minifedi.git
|
||||
cd minifedi
|
||||
```
|
||||
3. If you'd like, edit `config.nix` to customize which instances you get. By default, you get one each of Mastodon, Glitch, Akkoma, and GoToSocial, but you're welcome to disable some or run multiple copies of the same type.
|
||||
4. `./minifedi start`
|
||||
5. Wait for stuff to build then start up; this should take 20-30 minutes.
|
||||
6. Your instances should be running and accessible at INSTANCENAME.lvh.me (e.g. https://mastodon.lvh.me).
|
||||
|
||||
Each instance is created by default with five users:
|
||||
|
||||
- username `a`, email `a@example.com`, password `MiniFediA1!`, admin
|
||||
- username `b`, email `b@example.com`, password `MiniFediB1!`
|
||||
- username `c`, email `c@example.com`, password `MiniFediC1!`
|
||||
- username `d`, email `d@example.com`, password `MiniFediD1!`
|
||||
- username `e`, email `e@example.com`, password `MiniFediE1!`
|
||||
|
||||
Enjoy your testing!
|
||||
|
||||
## Supported Software
|
||||
|
||||
Minifedi currently supports:
|
||||
Minifedi currently supports the following:
|
||||
|
||||
- Mastodon (and forks)
|
||||
- Mastodon
|
||||
- Akkoma
|
||||
- GoToSocial
|
||||
|
||||
Forks of the above should work fine as well, as long as they haven't changed anything about the build, installation, or configuration process.
|
||||
|
||||
## How do I…
|
||||
|
||||
### Reset Minifedi, restoring every instance to its default state?
|
||||
|
||||
```sh
|
||||
rm -r data/
|
||||
```
|
||||
|
||||
### Use a different version (including a fork) of
|
||||
|
|
7
TODO
7
TODO
|
@ -1,5 +1,4 @@
|
|||
- fix flake.nix to handle arbitrary arches
|
||||
- figure out how to support local clones, and document this
|
||||
- data generation?
|
||||
- figure out how to support local source, and document this
|
||||
- separate out config into separate file, and document this
|
||||
- license
|
||||
- support custom source for akkoma and gts
|
||||
- data generation?
|
||||
|
|
24
config.nix
Normal file
24
config.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{ types }:
|
||||
|
||||
{
|
||||
instances = [
|
||||
{
|
||||
name = "mastodon";
|
||||
type = types.mastodon;
|
||||
version = ./versions/mastodon/mastodon-4.1.4;
|
||||
}
|
||||
{
|
||||
name = "glitch";
|
||||
type = types.mastodon;
|
||||
version = ./versions/mastodon/glitch-a004718;
|
||||
}
|
||||
{
|
||||
name = "akkoma";
|
||||
type = types.akkoma;
|
||||
}
|
||||
{
|
||||
name = "gotosocial";
|
||||
type = types.gotosocial;
|
||||
}
|
||||
];
|
||||
}
|
17
flake.nix
17
flake.nix
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
inputs.flake-utils.url = "github:numtide/flake-utils";
|
||||
|
||||
outputs = { self, flake-utils, nixpkgs }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let pkgs = nixpkgs.legacyPackages.${system};
|
||||
|
@ -8,7 +9,10 @@
|
|||
s6 = (import ./nix/s6.nix {
|
||||
inherit pkgs;
|
||||
services = pkgs.lib.attrsets.mapAttrs (_: v: v.service)
|
||||
(import ./nix/services.nix { inherit pkgs; });
|
||||
(import ./nix/services.nix {
|
||||
inherit pkgs;
|
||||
configFn = import ./config.nix;
|
||||
});
|
||||
path = "service";
|
||||
});
|
||||
in {
|
||||
|
@ -26,12 +30,15 @@
|
|||
mkdir -p cert
|
||||
rm -rf data/run
|
||||
mkdir data/run
|
||||
${if pkgs.stdenv.isLinux then "export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive" else ""}
|
||||
${if pkgs.stdenv.isLinux then
|
||||
"export LOCALE_ARCHIVE=${pkgs.glibcLocales}/lib/locale/locale-archive"
|
||||
else
|
||||
""}
|
||||
export MINIFEDI_CERT=$(pwd)/cert
|
||||
export MINIFEDI_DATA=$(pwd)/data
|
||||
export MINIFEDI_RUN=$(pwd)/data/run
|
||||
${if pkgs.stdenv.isLinux then ''
|
||||
echo "=> You'll probably get prompted for a sudo password now. This is just so we can bind to port 80/443; we literally acquire cap_net_bind_service then switch back to being $USER."
|
||||
echo "=> You'll probably get prompted for a sudo password now. This is just so we can bind to port 80/443; we will acquire cap_net_bind_service then switch back to being $USER."
|
||||
exec $(PATH=$oldpath which sudo) -E ${pkgs.libcap}/bin/capsh --keep=1 --user="$USER" --inh='cap_net_bind_service' --addamb='cap_net_bind_service' -- -c ${s6.start}
|
||||
'' else ''
|
||||
exec ${s6.start}
|
||||
|
@ -55,11 +62,11 @@
|
|||
'';
|
||||
in "${script}";
|
||||
};
|
||||
apps.x86_64-darwin.mastodon-mk-version = {
|
||||
apps.mk-mastodon = {
|
||||
type = "app";
|
||||
program = "${
|
||||
import ./nix/fedi/mastodon/mk-version { inherit pkgs; }
|
||||
}/bin/mastodon-mk-version";
|
||||
}/bin/mk-mastodon";
|
||||
};
|
||||
});
|
||||
}
|
||||
|
|
9
minifedi
9
minifedi
|
@ -5,9 +5,12 @@ if ! type "nix" > /dev/null; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
if [ "x$1" = x ]; then
|
||||
echo "subcommand required: start, install-cert, mastodon-mk-version"
|
||||
subcommand=$1
|
||||
shift
|
||||
|
||||
if [ -z "$subcommand" ]; then
|
||||
echo "subcommand required: start, install-cert, mk-mastodon"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
nix --extra-experimental-features "flakes nix-command" run .#$1
|
||||
nix --extra-experimental-features "flakes nix-command" run .#$subcommand -- $@
|
||||
|
|
|
@ -34,7 +34,6 @@ let
|
|||
config :pleroma, :media_proxy,
|
||||
enabled: false,
|
||||
redirect_on_failure: true
|
||||
#base_url: "https://cache.pleroma.social"
|
||||
|
||||
config :pleroma, Pleroma.Repo,
|
||||
adapter: Ecto.Adapters.Postgres,
|
||||
|
@ -65,12 +64,21 @@ let
|
|||
"ref" => "stable"
|
||||
}
|
||||
|
||||
config :pleroma, :http, adapter: [pools: %{default: [conn_opts: [transport_opts: [cacertfile: "$MINIFEDI_CERT/rootCA.pem"]]]}]
|
||||
config :pleroma, :http,
|
||||
adapter: [
|
||||
pools: %{
|
||||
default: [
|
||||
conn_opts: [
|
||||
transport_opts: [
|
||||
verify: :verify_none
|
||||
# cacertfile: "$MINIFEDI_CERT/rootCA.pem"
|
||||
# ^ won't work if Erlang finds the system cert store
|
||||
]
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
'';
|
||||
# admin: %{
|
||||
# "name" => "admin",
|
||||
# "ref" => "stable"
|
||||
# }
|
||||
|
||||
path = pkgs.lib.strings.concatStrings (builtins.map (x: "${x}/bin:") [
|
||||
pkgs.akkoma
|
||||
|
|
|
@ -38,9 +38,8 @@ let
|
|||
in if portFromHash <= 1024 then portFromHash + 1024 else portFromHash;
|
||||
|
||||
config = pkgs.writeText "config.yaml" (pkgs.lib.generators.toYAML { } {
|
||||
host = "${name}.lvh.me";
|
||||
bind-address = "127.0.0.1";
|
||||
inherit port;
|
||||
inherit host port;
|
||||
db-type = "postgres";
|
||||
db-user = name;
|
||||
db-database = name;
|
||||
|
|
|
@ -2,20 +2,17 @@
|
|||
, nixosTests, yarn, callPackage, imagemagick, ffmpeg, file, ruby_3_0
|
||||
, writeShellScript, fetchYarnDeps, fixup_yarn_lock, brotli
|
||||
|
||||
, pname ? "mastodon", versionDef }:
|
||||
, versionDef }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
inherit pname;
|
||||
|
||||
version = import "${versionDef}/version.nix";
|
||||
name = import "${versionDef}/name.nix";
|
||||
|
||||
# Using overrideAttrs on src does not build the gems and modules with the overridden src.
|
||||
# Putting the callPackage up in the arguments list also does not work.
|
||||
src = callPackage "${versionDef}/source.nix" { };
|
||||
|
||||
mastodonGems = bundlerEnv {
|
||||
name = "${pname}-gems-${version}";
|
||||
inherit version;
|
||||
name = "gems-${name}";
|
||||
ruby = ruby_3_0;
|
||||
gemdir = src;
|
||||
# hack: bundix doesn't properly handle deps in non-default groups, so we get
|
||||
|
@ -39,8 +36,8 @@ stdenv.mkDerivation rec {
|
|||
};
|
||||
|
||||
mastodonModules = stdenv.mkDerivation {
|
||||
pname = "${pname}-modules";
|
||||
inherit src version;
|
||||
name = "modules-${name}";
|
||||
inherit src;
|
||||
|
||||
yarnOfflineCache = fetchYarnDeps {
|
||||
yarnLock = "${src}/yarn.lock";
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{ pkgs, name, host, users, versionDef, ... }:
|
||||
{ pkgs, name, host, users, version, ... }:
|
||||
let
|
||||
mastodon = pkgs.callPackage ./build.nix { inherit versionDef; };
|
||||
mastodon = pkgs.callPackage ./build.nix { versionDef = version; };
|
||||
env = {
|
||||
LOCAL_DOMAIN = host;
|
||||
WEB_DOMAIN = host;
|
||||
|
|
|
@ -10,11 +10,11 @@ let
|
|||
jq
|
||||
prefetch-yarn-deps
|
||||
]);
|
||||
in pkgs.runCommand "mastodon-mk-version" {
|
||||
in pkgs.runCommand "mk-mastodon" {
|
||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||
} ''
|
||||
mkdir -p $out/bin
|
||||
cp ${./mk-version.sh} $out/bin/mastodon-mk-version
|
||||
patchShebangs $out/bin/mastodon-mk-version
|
||||
wrapProgram $out/bin/mastodon-mk-version --prefix PATH : ${binPath}
|
||||
cp ${./mk-version.sh} $out/bin/mk-mastodon
|
||||
patchShebangs $out/bin/mk-mastodon
|
||||
wrapProgram $out/bin/mk-mastodon --prefix PATH : ${binPath}
|
||||
''
|
||||
|
|
|
@ -1,66 +1,27 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Derived from the update script for nixpkgs#mastodon. BSD-licensed.
|
||||
# Derived from the update script for nixpkgs#mastodon. MIT-licensed.
|
||||
|
||||
set -e
|
||||
|
||||
OWNER=mastodon
|
||||
REPO=mastodon
|
||||
NAME=$1
|
||||
REPO=$2
|
||||
REV=$3
|
||||
|
||||
POSITIONAL=()
|
||||
while [[ $# -gt 0 ]]; do
|
||||
key="$1"
|
||||
|
||||
case $key in
|
||||
--owner)
|
||||
OWNER="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
--repo)
|
||||
REPO="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
--ver)
|
||||
VERSION="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
--rev)
|
||||
REVISION="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
--patches)
|
||||
PATCHES="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
*) # unknown option
|
||||
POSITIONAL+=("$1")
|
||||
shift # past argument
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "$VERSION" || -n "$POSITIONAL" ]]; then
|
||||
echo "Usage: update.sh [--owner OWNER] [--repo REPO] --ver VERSION [--rev REVISION] [--patches PATCHES]"
|
||||
echo "OWNER and repo must be paths on github."
|
||||
echo "If VERSION is not a revision acceptable to 'git checkout', you must provide one in REVISION."
|
||||
echo "If OWNER and REPO are not provided, it defaults they default to mastodon and mastodon."
|
||||
echo "PATCHES, if provided, should be one or more Nix expressions separated by spaces."
|
||||
if [[ -z "$REV" ]]; then
|
||||
echo "Usage: minifedi mk-mastodon NAME REPO REV"
|
||||
echo "NAME can be anything, but generally it's something like mastodon-4.1.4 or glitch-12abcdef"
|
||||
echo "REPO is a git clone URL"
|
||||
echo "REV is a git commit or tag (not a branch)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$REVISION" ]]; then
|
||||
REVISION="$VERSION"
|
||||
fi
|
||||
rm -rf versions/mastodon/$NAME
|
||||
mkdir -p versions/mastodon/$NAME
|
||||
cd versions/mastodon/$NAME
|
||||
|
||||
rm -f gemset.nix version.nix source.nix
|
||||
TARGET_DIR="$PWD"
|
||||
|
||||
|
||||
WORK_DIR=$(mktemp -d)
|
||||
|
||||
# Check that working directory was created.
|
||||
|
@ -71,31 +32,23 @@ fi
|
|||
|
||||
# Delete the working directory on exit.
|
||||
function cleanup {
|
||||
# Report errors, if any, from nix-prefetch-git
|
||||
cat $WORK_DIR/nix-prefetch-git.out >/dev/stderr || true
|
||||
rm -rf "$WORK_DIR"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
echo "Fetching source code $REVISION"
|
||||
JSON=$(nix-prefetch-github "$OWNER" "$REPO" --rev "$REVISION" 2> $WORK_DIR/nix-prefetch-git.out)
|
||||
echo "Fetching source code"
|
||||
JSON=$(nix-prefetch-git $REPO $REV)
|
||||
SHA=$(echo "$JSON" | jq -r .sha256)
|
||||
|
||||
echo "Creating version.nix"
|
||||
echo "\"$VERSION\"" | sed 's/^"v/"/' > version.nix
|
||||
echo "\"$NAME\"" > name.nix
|
||||
|
||||
cat > source.nix << EOF
|
||||
# This file was generated by pkgs.mastodon.updateScript.
|
||||
{ fetchFromGitHub, applyPatches }: let
|
||||
src = fetchFromGitHub {
|
||||
owner = "mastodon";
|
||||
repo = "mastodon";
|
||||
rev = "$REVISION";
|
||||
# This file was generated by minifedi mk-mastodon.
|
||||
{ fetchgit, applyPatches }: fetchgit {
|
||||
url = "$REPO";
|
||||
rev = "$REV";
|
||||
sha256 = "$SHA";
|
||||
};
|
||||
in applyPatches {
|
||||
inherit src;
|
||||
patches = [$PATCHES];
|
||||
}
|
||||
EOF
|
||||
SOURCE_DIR="$(nix-build --no-out-link -E '(import <nixpkgs> {}).callPackage ./source.nix {}')"
|
||||
|
@ -106,3 +59,5 @@ echo "" >> "$TARGET_DIR/gemset.nix" # Create trailing newline to please EditorC
|
|||
|
||||
echo "Creating yarn-hash.nix"
|
||||
echo '"'$(prefetch-yarn-deps "$SOURCE_DIR/yarn.lock")'"' > "$TARGET_DIR/yarn-hash.nix"
|
||||
|
||||
git add .
|
|
@ -1,27 +1,14 @@
|
|||
{ pkgs }:
|
||||
{ pkgs, configFn }:
|
||||
let
|
||||
instances = [
|
||||
{
|
||||
name = "mastodon";
|
||||
type = ./fedi/mastodon;
|
||||
versionDef = ../versions/mastodon/mastodon-4.1.4;
|
||||
}
|
||||
{
|
||||
name = "glitch";
|
||||
type = ./fedi/mastodon;
|
||||
versionDef = ../versions/mastodon/glitch-a40529f;
|
||||
}
|
||||
{
|
||||
name = "akkoma";
|
||||
type = ./fedi/akkoma;
|
||||
}
|
||||
{
|
||||
name = "gotosocial";
|
||||
type = ./fedi/gotosocial;
|
||||
}
|
||||
];
|
||||
instances = (configFn {
|
||||
types = {
|
||||
mastodon = import ./fedi/mastodon;
|
||||
akkoma = import ./fedi/akkoma;
|
||||
gotosocial = import ./fedi/gotosocial;
|
||||
};
|
||||
}).instances;
|
||||
evaldInstances = builtins.listToAttrs (builtins.map (inst:
|
||||
pkgs.lib.attrsets.nameValuePair inst.name (import inst.type ({
|
||||
pkgs.lib.attrsets.nameValuePair inst.name (inst.type ({
|
||||
inherit pkgs;
|
||||
host = "${inst.name}.lvh.me";
|
||||
users = [
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
hostForName = name: "${name}.lvh.me"
|
||||
}
|
|
@ -5,32 +5,32 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "10y18l67i6ry7v9w0qwh26477g4gm0qrjjpa87pa5a42hzkglnc7";
|
||||
sha256 = "1d72cqx1h9c0yl1vc8xakvji00krg118ih6lwqlg5nbw50gbx25c";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
actionmailbox = {
|
||||
dependencies = ["actionpack" "activejob" "activerecord" "activestorage" "activesupport" "mail"];
|
||||
dependencies = ["actionpack" "activejob" "activerecord" "activestorage" "activesupport" "mail" "net-imap" "net-pop" "net-smtp"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1ihayijdgasf0rp10x6h335k3y1hgqr6c9s8lxqmhm4gpczajaac";
|
||||
sha256 = "12xkyfdpr7ljnd31yhc2kzl0rqrlwxzpg4qcn4yb2h364hwc6fh8";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
actionmailer = {
|
||||
dependencies = ["actionpack" "actionview" "activejob" "activesupport" "mail" "rails-dom-testing"];
|
||||
dependencies = ["actionpack" "actionview" "activejob" "activesupport" "mail" "net-imap" "net-pop" "net-smtp" "rails-dom-testing"];
|
||||
groups = ["default" "development"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "03557cskby5alpncnhgm1j1kq43xqq75sdd6r2x22q3j2jv68pj5";
|
||||
sha256 = "01x11ijfg56585vj7a7az0235idnxcnyjp1nb1jvkm08jjll5d1k";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
actionpack = {
|
||||
dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
|
||||
|
@ -38,21 +38,21 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1x7ffyan8sbv4ywjghiyiv077vfxyf6i6y0h4k0mfpdmf76l0i86";
|
||||
sha256 = "0d66w1d9rhvafd0dilqyr1ymsvr060l8hi0xvwij7cyvzzxrlrbc";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
actiontext = {
|
||||
dependencies = ["actionpack" "activerecord" "activestorage" "activesupport" "nokogiri"];
|
||||
dependencies = ["actionpack" "activerecord" "activestorage" "activesupport" "globalid" "nokogiri"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0g5gw9ywirw7814wn8cdnnv1df58x5gplgpb15gaw5gzkw9cgvd8";
|
||||
sha256 = "0bpyfh8g0mzgkb8bxvf245mwnx1awbr1y6dxcdckyhsjjgrfynfl";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
actionview = {
|
||||
dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"];
|
||||
|
@ -60,10 +60,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0cmzc2c00lsdr5hpmsgs8axs5pbhv5xyqiyi69wf81pqypd2cy3l";
|
||||
sha256 = "1icfh9pgjpd29apzn07cnqa9nlpvjv7i4vrygack5gp7hp54l8m7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
active_model_serializers = {
|
||||
dependencies = ["actionpack" "activemodel" "case_transform" "jsonapi-renderer"];
|
||||
|
@ -82,10 +82,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "153z9lmkip3v243xxa5rcc8am82ma73ar46q4vxbmzi850a5yjj2";
|
||||
sha256 = "1gawwb6550ra1xgbrki03aq4q5wafa3xfrpdr3cva4ghy3qqn53q";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
activemodel = {
|
||||
dependencies = ["activesupport"];
|
||||
|
@ -93,10 +93,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1bpr0zspih2rf2ppzjxaw8sq6gfqg9vss5h0fs4r85p03579swin";
|
||||
sha256 = "072iv0d3vpbp0xijg4jj99sjil1rykmqfj9addxj76bm5mbzwcaj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
activerecord = {
|
||||
dependencies = ["activemodel" "activesupport"];
|
||||
|
@ -104,10 +104,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "06403rkjnyr80yj4g05lb5hn04yfzipa7bm0gplbqrrykr3hvh5r";
|
||||
sha256 = "1l0rn43bhyzlfa4wwcfz016vb4lkzvl0jf5zibkjy4sppxxixzrq";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
activestorage = {
|
||||
dependencies = ["actionpack" "activejob" "activerecord" "activesupport" "marcel" "mini_mime"];
|
||||
|
@ -115,21 +115,21 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "094kvh8bp792xccql54kky8prmvqvfzwwv9xas2pnh8s4v3avbzl";
|
||||
sha256 = "036mv935r5mmh7fljz10lyr43c5y5bn8b6h7gdkv8spfgwzihw4j";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
activesupport = {
|
||||
dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
|
||||
dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
|
||||
groups = ["default" "development" "pam_authentication" "production" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0s465919p6fcgcsqin8w8hay2m598dvnzks490hbsb0p68sdz69m";
|
||||
sha256 = "1cjsf26656996hv48wgv2mkwxf0fy1qc68ikgzq7mzfq2mmvmayk";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
addressable = {
|
||||
dependencies = ["public_suffix"];
|
||||
|
@ -368,10 +368,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0wzvxpabnjwwjgr9s13965dbdgl3qfvwjbmhimh83p81bm5lsrnw";
|
||||
sha256 = "1l2584f7cm7lmwihm1l449rk6vl4wlx3s7x317cm2inapzjhiybg";
|
||||
type = "gem";
|
||||
};
|
||||
version = "5.4.1";
|
||||
version = "6.0.0";
|
||||
};
|
||||
browser = {
|
||||
groups = ["default"];
|
||||
|
@ -443,10 +443,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1iyhs77bff09g18dlz0li5f44khjwpqc09gk5hzcnf5v9yvijpg9";
|
||||
sha256 = "05lk7y4qyzadzzshjyhgfgx00ggqliq7n561wkx8m331wljv7kx7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.6.2";
|
||||
version = "1.6.3";
|
||||
};
|
||||
capistrano-rbenv = {
|
||||
dependencies = ["capistrano" "sshkit"];
|
||||
|
@ -518,10 +518,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1wxq6396814ngwnvwcjkkqm8ji8d7q385gw53kr1dbfihiivlizq";
|
||||
sha256 = "087ybm1384f5sscvqwk3pcswxycy4y5q11m6587fidqvdc0ipkma";
|
||||
type = "gem";
|
||||
};
|
||||
version = "7.3.2";
|
||||
version = "7.3.3";
|
||||
};
|
||||
chunky_png = {
|
||||
groups = ["default"];
|
||||
|
@ -1125,10 +1125,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1yz5g7ffyv99vd9x3yj64ba4zv2bd71gmgrf60a3kc8m1cvc1z5p";
|
||||
sha256 = "1fwa7gpxc7crzf5nqc40n2ciqpdk57y213asl6kkbzxnjfl0v319";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.45.0";
|
||||
version = "0.48.0";
|
||||
};
|
||||
hashdiff = {
|
||||
groups = ["default" "test"];
|
||||
|
@ -1454,6 +1454,16 @@
|
|||
};
|
||||
version = "7.2.0";
|
||||
};
|
||||
language_server-protocol = {
|
||||
groups = ["default" "development"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0gvb1j8xsqxms9mww01rmdl78zkd72zgxaap56bhv8j45z05hp1x";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.17.0.3";
|
||||
};
|
||||
launchy = {
|
||||
dependencies = ["addressable"];
|
||||
groups = ["default" "development"];
|
||||
|
@ -1541,17 +1551,6 @@
|
|||
};
|
||||
version = "2.8.1";
|
||||
};
|
||||
makara = {
|
||||
dependencies = ["activerecord"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0a6x6w1ij484s1z0wp667d6v0zb8bylhhr3av10yz60a2nz4r1l7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.5.1";
|
||||
};
|
||||
marcel = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
|
@ -2131,15 +2130,15 @@
|
|||
version = "2.1.0";
|
||||
};
|
||||
rails = {
|
||||
dependencies = ["actioncable" "actionmailbox" "actionmailer" "actionpack" "actiontext" "actionview" "activejob" "activemodel" "activerecord" "activestorage" "activesupport" "railties" "sprockets-rails"];
|
||||
dependencies = ["actioncable" "actionmailbox" "actionmailer" "actionpack" "actiontext" "actionview" "activejob" "activemodel" "activerecord" "activestorage" "activesupport" "railties"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "17ympjpkhz06xqsay18hskpbs64nh05hzrsckx8va6ikrxhs2ksq";
|
||||
sha256 = "08glp6jhq5yh8i5jjxzqa3aqx819l6ci6m68bx1asmimla0x9ysx";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
rails-controller-testing = {
|
||||
dependencies = ["actionpack" "actionview" "activesupport"];
|
||||
|
@ -2180,10 +2179,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "05mcgv748vppnm3fnml37wjy3dw61wj8vfw14ldaj1yx1bmkhb07";
|
||||
sha256 = "1bbh5gsw46djmrgddwaq3wsjmj9rsh5dk13wkclwxf1rg9jpkn3g";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.0.0";
|
||||
version = "7.0.7";
|
||||
};
|
||||
rails-settings-cached = {
|
||||
dependencies = ["rails"];
|
||||
|
@ -2199,15 +2198,15 @@
|
|||
version = "0.6.6";
|
||||
};
|
||||
railties = {
|
||||
dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor"];
|
||||
dependencies = ["actionpack" "activesupport" "method_source" "rake" "thor" "zeitwerk"];
|
||||
groups = ["default" "development" "pam_authentication" "production" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0g92if3cxxysl9h6x6ibs7y9dsbcniiwgcldvg00kib02b3pxkbb";
|
||||
sha256 = "0dcabk5bl5flmspnb9d2qcvclcaw0nd5yr9w6m5pzsmylg3y63pv";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.4";
|
||||
version = "7.0.6";
|
||||
};
|
||||
rainbow = {
|
||||
groups = ["default" "development"];
|
||||
|
@ -2462,15 +2461,15 @@
|
|||
version = "0.6";
|
||||
};
|
||||
rubocop = {
|
||||
dependencies = ["json" "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
|
||||
dependencies = ["json" "language_server-protocol" "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
|
||||
groups = ["development"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0bxc1p7bwh8dlmcvh6ns239sp9v8j46vw4h450ag8wa7bh1ii1wh";
|
||||
sha256 = "1vklabd0510isqhikx4bfx5qn9g8pyj8h9jxryayp2wj8mx4kg74";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.52.1";
|
||||
version = "1.54.1";
|
||||
};
|
||||
rubocop-ast = {
|
||||
dependencies = ["parser"];
|
||||
|
@ -2522,10 +2521,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0j6dn8pz70bngx6van8yzsimpdd93gm7c8lr93wz1j4ahm6q4hn9";
|
||||
sha256 = "05r46ds0dm44fb4p67hbz721zck8mdwblzssz2y25yh075hvs36j";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.19.1";
|
||||
version = "2.20.2";
|
||||
};
|
||||
rubocop-rspec = {
|
||||
dependencies = ["rubocop" "rubocop-capybara" "rubocop-factory_bot"];
|
||||
|
@ -2768,10 +2767,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1y6w2qkwg0ygn85x0afscnj0dv8iwkvm153zjclvwafkm6g0pknk";
|
||||
sha256 = "14a717mr2cmpgld5fcdd124cvlc5b634f96rhwlnmmc4m8bbkcp9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.21.4";
|
||||
version = "1.21.5";
|
||||
};
|
||||
stackprof = {
|
||||
groups = ["development"];
|
||||
|
@ -2883,10 +2882,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1pfddf51n5fnj4f9ggwj3wbf23ynj0nbxlxqpz12y1gvl9g7d6r6";
|
||||
sha256 = "1d9cvm0f4zdpwa795v3zv4973y5zk59j7s1x3yn90jjrhcz1yvfd";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.3.2";
|
||||
version = "0.4.0";
|
||||
};
|
||||
tpm-key_attestation = {
|
||||
dependencies = ["bindata" "openssl" "openssl-signature_algorithm"];
|
1
versions/mastodon/glitch-a004718/name.nix
Normal file
1
versions/mastodon/glitch-a004718/name.nix
Normal file
|
@ -0,0 +1 @@
|
|||
"glitch-a004718"
|
6
versions/mastodon/glitch-a004718/source.nix
Normal file
6
versions/mastodon/glitch-a004718/source.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
# This file was generated by minifedi mk-mastodon.
|
||||
{ fetchgit, applyPatches }: fetchgit {
|
||||
url = "https://github.com/glitch-soc/Mastodon.git";
|
||||
rev = "a004718";
|
||||
sha256 = "09i3y408dv5bp1axqnn1v25yg5l9hqj85x524bai5a186wh0pcqh";
|
||||
}
|
1
versions/mastodon/glitch-a004718/yarn-hash.nix
Normal file
1
versions/mastodon/glitch-a004718/yarn-hash.nix
Normal file
|
@ -0,0 +1 @@
|
|||
"095dcrfc01ywk1g4mq7irm7jm0zzawapacfmbm5b7cv929pvbkkd"
|
|
@ -1,12 +0,0 @@
|
|||
# This file was generated by pkgs.mastodon.updateScript.
|
||||
{ fetchFromGitHub, applyPatches }: let
|
||||
src = fetchFromGitHub {
|
||||
owner = "mastodon";
|
||||
repo = "mastodon";
|
||||
rev = "a40529fa79c6882eb1929014e5f9324d8e81ae49";
|
||||
sha256 = "/b7Z5WbErerqRb5nHh57mbjOyP7tDpi4KUglXdd693Y=";
|
||||
};
|
||||
in applyPatches {
|
||||
inherit src;
|
||||
patches = [];
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
"a40529f"
|
|
@ -1 +0,0 @@
|
|||
"05phsp5wj2p63vjd8hr9h39wxqwz3j8zqh4avj8mwrsh23ahkxgi"
|
1
versions/mastodon/mastodon-4.1.4/name.nix
Normal file
1
versions/mastodon/mastodon-4.1.4/name.nix
Normal file
|
@ -0,0 +1 @@
|
|||
"mastodon-4.1.4"
|
|
@ -1,12 +1,6 @@
|
|||
# This file was generated by pkgs.mastodon.updateScript.
|
||||
{ fetchFromGitHub, applyPatches }: let
|
||||
src = fetchFromGitHub {
|
||||
owner = "mastodon";
|
||||
repo = "mastodon";
|
||||
# This file was generated by minifedi mk-mastodon.
|
||||
{ fetchgit, applyPatches }: fetchgit {
|
||||
url = "https://github.com/Mastodon/Mastodon.git";
|
||||
rev = "v4.1.4";
|
||||
sha256 = "8ULBO8IdwBzC5dgX3netTHbbRrODX4CropWZWtqWHZw=";
|
||||
};
|
||||
in applyPatches {
|
||||
inherit src;
|
||||
patches = [];
|
||||
sha256 = "170xjvd5m6cmlamq0pw3nd3dnxjcmmvxw5yqwp11rh0xq8xw2hpi";
|
||||
}
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
"4.1.4"
|
Loading…
Reference in a new issue