diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1a2adf2 --- /dev/null +++ b/LICENSE @@ -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. diff --git a/README.md b/README.md index d6779d2..8a48050 100644 --- a/README.md +++ b/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 diff --git a/TODO b/TODO index fca5f91..f237661 100644 --- a/TODO +++ b/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? diff --git a/config.nix b/config.nix new file mode 100644 index 0000000..e767698 --- /dev/null +++ b/config.nix @@ -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; + } + ]; +} diff --git a/flake.nix b/flake.nix index c937d3f..b566dcb 100644 --- a/flake.nix +++ b/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"; }; }); } diff --git a/minifedi b/minifedi index 80723d4..ae88607 100755 --- a/minifedi +++ b/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 -- $@ diff --git a/nix/fedi/akkoma/default.nix b/nix/fedi/akkoma/default.nix index 27e34ff..f6348ef 100644 --- a/nix/fedi/akkoma/default.nix +++ b/nix/fedi/akkoma/default.nix @@ -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 diff --git a/nix/fedi/gotosocial/default.nix b/nix/fedi/gotosocial/default.nix index b21b5e6..260254a 100644 --- a/nix/fedi/gotosocial/default.nix +++ b/nix/fedi/gotosocial/default.nix @@ -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; diff --git a/nix/fedi/mastodon/build.nix b/nix/fedi/mastodon/build.nix index 6597e33..71554e1 100644 --- a/nix/fedi/mastodon/build.nix +++ b/nix/fedi/mastodon/build.nix @@ -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"; diff --git a/nix/fedi/mastodon/default.nix b/nix/fedi/mastodon/default.nix index b8ade1b..c20f573 100644 --- a/nix/fedi/mastodon/default.nix +++ b/nix/fedi/mastodon/default.nix @@ -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; diff --git a/nix/fedi/mastodon/mk-version/default.nix b/nix/fedi/mastodon/mk-version/default.nix index a043854..0ad9bdd 100644 --- a/nix/fedi/mastodon/mk-version/default.nix +++ b/nix/fedi/mastodon/mk-version/default.nix @@ -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} '' diff --git a/nix/fedi/mastodon/mk-version/mk-version.sh b/nix/fedi/mastodon/mk-version/mk-version.sh index cc76454..615bcd3 100755 --- a/nix/fedi/mastodon/mk-version/mk-version.sh +++ b/nix/fedi/mastodon/mk-version/mk-version.sh @@ -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 {}).callPackage ./source.nix {}')" @@ -105,4 +58,6 @@ bundix --lockfile="$SOURCE_DIR/Gemfile.lock" --gemfile="$SOURCE_DIR/Gemfile" echo "" >> "$TARGET_DIR/gemset.nix" # Create trailing newline to please EditorConfig checks echo "Creating yarn-hash.nix" -echo '"'$(prefetch-yarn-deps "$SOURCE_DIR/yarn.lock")'"' > "$TARGET_DIR/yarn-hash.nix" \ No newline at end of file +echo '"'$(prefetch-yarn-deps "$SOURCE_DIR/yarn.lock")'"' > "$TARGET_DIR/yarn-hash.nix" + +git add . \ No newline at end of file diff --git a/nix/services.nix b/nix/services.nix index 6caeef2..de6da7d 100644 --- a/nix/services.nix +++ b/nix/services.nix @@ -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 = [ diff --git a/nix/util.nix b/nix/util.nix deleted file mode 100644 index ea7e9f5..0000000 --- a/nix/util.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - hostForName = name: "${name}.lvh.me" -} \ No newline at end of file diff --git a/versions/mastodon/glitch-a40529f/gemset.nix b/versions/mastodon/glitch-a004718/gemset.nix similarity index 96% rename from versions/mastodon/glitch-a40529f/gemset.nix rename to versions/mastodon/glitch-a004718/gemset.nix index dc7fe6f..046e20c 100644 --- a/versions/mastodon/glitch-a40529f/gemset.nix +++ b/versions/mastodon/glitch-a004718/gemset.nix @@ -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"]; diff --git a/versions/mastodon/glitch-a004718/name.nix b/versions/mastodon/glitch-a004718/name.nix new file mode 100644 index 0000000..bf8bde8 --- /dev/null +++ b/versions/mastodon/glitch-a004718/name.nix @@ -0,0 +1 @@ +"glitch-a004718" diff --git a/versions/mastodon/glitch-a004718/source.nix b/versions/mastodon/glitch-a004718/source.nix new file mode 100644 index 0000000..bb80832 --- /dev/null +++ b/versions/mastodon/glitch-a004718/source.nix @@ -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"; +} diff --git a/versions/mastodon/glitch-a004718/yarn-hash.nix b/versions/mastodon/glitch-a004718/yarn-hash.nix new file mode 100644 index 0000000..8b502ef --- /dev/null +++ b/versions/mastodon/glitch-a004718/yarn-hash.nix @@ -0,0 +1 @@ +"095dcrfc01ywk1g4mq7irm7jm0zzawapacfmbm5b7cv929pvbkkd" diff --git a/versions/mastodon/glitch-a40529f/source.nix b/versions/mastodon/glitch-a40529f/source.nix deleted file mode 100644 index b0ed1b9..0000000 --- a/versions/mastodon/glitch-a40529f/source.nix +++ /dev/null @@ -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 = []; -} diff --git a/versions/mastodon/glitch-a40529f/version.nix b/versions/mastodon/glitch-a40529f/version.nix deleted file mode 100644 index 3271f8d..0000000 --- a/versions/mastodon/glitch-a40529f/version.nix +++ /dev/null @@ -1 +0,0 @@ -"a40529f" diff --git a/versions/mastodon/glitch-a40529f/yarn-hash.nix b/versions/mastodon/glitch-a40529f/yarn-hash.nix deleted file mode 100644 index a2bcdf6..0000000 --- a/versions/mastodon/glitch-a40529f/yarn-hash.nix +++ /dev/null @@ -1 +0,0 @@ -"05phsp5wj2p63vjd8hr9h39wxqwz3j8zqh4avj8mwrsh23ahkxgi" diff --git a/versions/mastodon/mastodon-4.1.4/name.nix b/versions/mastodon/mastodon-4.1.4/name.nix new file mode 100644 index 0000000..e9c7965 --- /dev/null +++ b/versions/mastodon/mastodon-4.1.4/name.nix @@ -0,0 +1 @@ +"mastodon-4.1.4" diff --git a/versions/mastodon/mastodon-4.1.4/source.nix b/versions/mastodon/mastodon-4.1.4/source.nix index 5184af2..ac69fcc 100644 --- a/versions/mastodon/mastodon-4.1.4/source.nix +++ b/versions/mastodon/mastodon-4.1.4/source.nix @@ -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"; } diff --git a/versions/mastodon/mastodon-4.1.4/version.nix b/versions/mastodon/mastodon-4.1.4/version.nix deleted file mode 100644 index 6ee44f9..0000000 --- a/versions/mastodon/mastodon-4.1.4/version.nix +++ /dev/null @@ -1 +0,0 @@ -"4.1.4"