<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.nixos.org/w/index.php?action=history&amp;feed=atom&amp;title=Lemmy</id>
	<title>Lemmy - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nixos.org/w/index.php?action=history&amp;feed=atom&amp;title=Lemmy"/>
	<link rel="alternate" type="text/html" href="https://wiki.nixos.org/w/index.php?title=Lemmy&amp;action=history"/>
	<updated>2026-04-04T22:32:45Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.0</generator>
	<entry>
		<id>https://wiki.nixos.org/w/index.php?title=Lemmy&amp;diff=12859&amp;oldid=prev</id>
		<title>Klinger: changed categories to Category:Web Applications Category:Server Category:NixOS Manual. Added link to manual.</title>
		<link rel="alternate" type="text/html" href="https://wiki.nixos.org/w/index.php?title=Lemmy&amp;diff=12859&amp;oldid=prev"/>
		<updated>2024-05-16T19:05:58Z</updated>

		<summary type="html">&lt;p&gt;changed categories to &lt;a href=&quot;/wiki/Category:Web_Applications&quot; title=&quot;Category:Web Applications&quot;&gt;Category:Web Applications&lt;/a&gt; &lt;a href=&quot;/wiki/Category:Server&quot; title=&quot;Category:Server&quot;&gt;Category:Server&lt;/a&gt; &lt;a href=&quot;/wiki/Category:NixOS_Manual&quot; title=&quot;Category:NixOS Manual&quot;&gt;Category:NixOS Manual&lt;/a&gt;. Added link to manual.&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:05, 16 May 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Lemmy is a selfhosted social link aggregation and discussion platform. It is completely free and open, and not controlled by any company. This means that there is no advertising, tracking, or secret algorithms. Content is organized into communities, so it is easy to subscribe to topics that you are interested in, and ignore others. Voting is used to bring the most interesting items to the top. (Lemmy is to Reddit what Mastodon is to Twitter)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Lemmy is a selfhosted social link aggregation and discussion platform. It is completely free and open, and not controlled by any company. This means that there is no advertising, tracking, or secret algorithms. Content is organized into communities, so it is easy to subscribe to topics that you are interested in, and ignore others. Voting is used to bring the most interesting items to the top. (Lemmy is to Reddit what Mastodon is to Twitter)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;This article is an extension to the documentation in the [https://nixos.org/manual/nixos/stable/#module-services-lemmy NixOS manual].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Basic Setup ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Basic Setup ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l258&quot;&gt;Line 258:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 260:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://join-lemmy.org/docs/en/index.html Official Documentation]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://join-lemmy.org/docs/en/index.html Official Documentation]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Applications]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Web &lt;/ins&gt;Applications]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Server]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Server]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:NixOS Manual]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-10751:rev-12859:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Klinger</name></author>
	</entry>
	<entry>
		<id>https://wiki.nixos.org/w/index.php?title=Lemmy&amp;diff=10751&amp;oldid=prev</id>
		<title>imported&gt;Techhazard: Added page for Lemmy (a link aggregator for the fediverse.)</title>
		<link rel="alternate" type="text/html" href="https://wiki.nixos.org/w/index.php?title=Lemmy&amp;diff=10751&amp;oldid=prev"/>
		<updated>2023-06-06T15:30:14Z</updated>

		<summary type="html">&lt;p&gt;Added page for Lemmy (a link aggregator for the fediverse.)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[https://join-lemmy.org/ {{PAGENAME}}] ([https://en.wikipedia.org/wiki/Lemmy_(software) wikipedia]) is a link aggregator for the fediverse.&lt;br /&gt;
&lt;br /&gt;
Lemmy is a selfhosted social link aggregation and discussion platform. It is completely free and open, and not controlled by any company. This means that there is no advertising, tracking, or secret algorithms. Content is organized into communities, so it is easy to subscribe to topics that you are interested in, and ignore others. Voting is used to bring the most interesting items to the top. (Lemmy is to Reddit what Mastodon is to Twitter)&lt;br /&gt;
&lt;br /&gt;
== Basic Setup ==&lt;br /&gt;
&lt;br /&gt;
This is the &amp;quot;bare minimum&amp;quot; to run a lemmy instance:  &lt;br /&gt;
&lt;br /&gt;
* lemmy, lemmy-ui and pictrs.&lt;br /&gt;
* nginx reverse proxy with ssl-offloading&lt;br /&gt;
* ACME ssl certificate&lt;br /&gt;
* postgres database setup&lt;br /&gt;
&lt;br /&gt;
There are a few things that need changing, those are marked with TODO.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxHighlight lang=nix&amp;gt;&lt;br /&gt;
{ config, pkgs, lib, ... } :&lt;br /&gt;
let&lt;br /&gt;
&lt;br /&gt;
  # add nginx reverse proxy and ACME web certificate&lt;br /&gt;
  add_nginx = true;&lt;br /&gt;
  nginx_ports = [ 80 443 ];&lt;br /&gt;
&lt;br /&gt;
  lemmy = {&lt;br /&gt;
    upstreamName = &amp;quot;lemmy&amp;quot;;&lt;br /&gt;
    dataDir = &amp;quot;/var/lib/lemmy&amp;quot;;&lt;br /&gt;
    ip = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    port = 1234;&lt;br /&gt;
    # TODO: Change this domain to your own&lt;br /&gt;
    domain = &amp;quot;lemmy.example.com&amp;quot;;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  lemmy-ui = {&lt;br /&gt;
    upstreamName = &amp;quot;lemmy-ui&amp;quot;;&lt;br /&gt;
    ip = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    port = 8536;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  pict-rs = {&lt;br /&gt;
    ip = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
    port = 8080;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  acmeDomain = lemmy.domain;&lt;br /&gt;
  nginxVhost = lemmy.domain;&lt;br /&gt;
&lt;br /&gt;
in {&lt;br /&gt;
&lt;br /&gt;
  security.acme = lib.mkIf add_nginx {&lt;br /&gt;
    # TODO: change this to true if you accept&lt;br /&gt;
    acceptTerms = false;&lt;br /&gt;
    defaults = {&lt;br /&gt;
      # TODO: you will receive a notification if automatic certificate renewal fails&lt;br /&gt;
      email = &amp;quot;postmaster@${lemmy.domain}&amp;quot;;&lt;br /&gt;
      # TODO: put your dns provider here: https://go-acme.github.io/lego/dns/&lt;br /&gt;
      dnsProvider = &amp;quot;&amp;quot;;&lt;br /&gt;
      # TODO: this file should contain environment variables expected by your dns provider&lt;br /&gt;
      credentialsFile = &amp;quot;&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
    certs.&amp;quot;${acmeDomain}&amp;quot; = {&lt;br /&gt;
      domain = &amp;quot;${acmeDomain}&amp;quot;;&lt;br /&gt;
    };&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  networking.firewall.allowedTCPPorts = lib.mkIf add_nginx nginx_ports;&lt;br /&gt;
&lt;br /&gt;
  # is needed because of certificate file permissions&lt;br /&gt;
  users.users.nginx.extraGroups = lib.mkIf add_nginx [&amp;quot;acme&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
  services.nginx = lib.mkIf add_nginx {&lt;br /&gt;
    upstreams.&amp;quot;${lemmy.upstreamName}&amp;quot;.servers.&amp;quot;${lemmy.ip}:${builtins.toString lemmy.port}&amp;quot; = {};&lt;br /&gt;
    upstreams.&amp;quot;${lemmy-ui.upstreamName}&amp;quot;.servers.&amp;quot;${lemmy-ui.ip}:${builtins.toString lemmy-ui.port}&amp;quot; = {};&lt;br /&gt;
&lt;br /&gt;
    virtualHosts.&amp;quot;${nginxVhost}&amp;quot; = {&lt;br /&gt;
      useACMEHost = &amp;quot;${acmeDomain}&amp;quot;;&lt;br /&gt;
        # inherit from config.security.acme.acmeRoot;&lt;br /&gt;
        acmeRoot = null;&lt;br /&gt;
        # add redirects from http to https&lt;br /&gt;
        forceSSL = true;&lt;br /&gt;
        # this whole block was lifted from https://github.com/LemmyNet/lemmy/blob/ef1aa18fd20cc03d492a81cb70cc75cf3281649f/docker/nginx.conf#L21 lines 21-32&lt;br /&gt;
        extraConfig = &amp;#039;&amp;#039;&lt;br /&gt;
          # disables emitting nginx version on error pages and in the “Server” response header field&lt;br /&gt;
          server_tokens off;&lt;br /&gt;
&lt;br /&gt;
          gzip on;&lt;br /&gt;
          gzip_types text/css application/javascript image/svg+xml;&lt;br /&gt;
          gzip_vary on;&lt;br /&gt;
&lt;br /&gt;
          # Upload limit, relevant for pictrs&lt;br /&gt;
          client_max_body_size 20M;&lt;br /&gt;
&lt;br /&gt;
          add_header X-Frame-Options SAMEORIGIN;&lt;br /&gt;
          add_header X-Content-Type-Options nosniff;&lt;br /&gt;
          add_header X-XSS-Protection &amp;quot;1; mode=block&amp;quot;;&lt;br /&gt;
        &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
        locations = {&lt;br /&gt;
          &amp;quot;/&amp;quot; = {&lt;br /&gt;
                # we do not use the nixos &amp;quot;locations.&amp;lt;name&amp;gt;.proxyPass&amp;quot; option because the nginx config needs to do something fancy.&lt;br /&gt;
                # again, lifted wholesale from https://github.com/LemmyNet/lemmy/blob/ef1aa18fd20cc03d492a81cb70cc75cf3281649f/docker/nginx.conf#L36 lines 36-55&lt;br /&gt;
                extraConfig = &amp;#039;&amp;#039;&lt;br /&gt;
                  # distinguish between ui requests and backend&lt;br /&gt;
                  # don&amp;#039;t change lemmy-ui or lemmy here, they refer to the upstream definitions on top&lt;br /&gt;
                  set $proxpass &amp;quot;http://${lemmy-ui.upstreamName}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                  if ($http_accept = &amp;quot;application/activity+json&amp;quot;) {&lt;br /&gt;
                    set $proxpass &amp;quot;http://${lemmy.upstreamName}&amp;quot;;&lt;br /&gt;
                  }&lt;br /&gt;
                  if ($http_accept = &amp;quot;application/ld+json; profile=\&amp;quot;https://www.w3.org/ns/activitystreams\&amp;quot;&amp;quot;) {&lt;br /&gt;
                    set $proxpass &amp;quot;http://${lemmy.upstreamName}&amp;quot;;&lt;br /&gt;
                  }&lt;br /&gt;
                  if ($request_method = POST) {&lt;br /&gt;
                    set $proxpass &amp;quot;http://${lemmy.upstreamName}&amp;quot;;&lt;br /&gt;
                  }&lt;br /&gt;
                  proxy_pass $proxpass;&lt;br /&gt;
&lt;br /&gt;
                  # Cuts off the trailing slash on URLs to make them valid&lt;br /&gt;
                  rewrite ^(.+)/+$ $1 permanent;&lt;br /&gt;
&lt;br /&gt;
                  # Send actual client IP upstream&lt;br /&gt;
                  proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                  proxy_set_header Host $host;&lt;br /&gt;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                &amp;#039;&amp;#039;;&lt;br /&gt;
              };&lt;br /&gt;
&lt;br /&gt;
              # again, lifted wholesale from https://github.com/LemmyNet/lemmy/blob/ef1aa18fd20cc03d492a81cb70cc75cf3281649f/docker/nginx.conf#L60 lines 60-69 (nice!)&lt;br /&gt;
              &amp;quot;~ ^/(api|pictrs|feeds|nodeinfo|.well-known)&amp;quot; = {&lt;br /&gt;
                proxyPass = &amp;quot;http://${lemmy.upstreamName}&amp;quot;;&lt;br /&gt;
                extraConfig = &amp;#039;&amp;#039;&lt;br /&gt;
                  # proxy common stuff&lt;br /&gt;
                  proxy_http_version 1.1;&lt;br /&gt;
                  proxy_set_header Upgrade $http_upgrade;&lt;br /&gt;
                  proxy_set_header Connection &amp;quot;upgrade&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
                  ## Send actual client IP upstream&lt;br /&gt;
                  #proxy_set_header X-Real-IP $remote_addr;&lt;br /&gt;
                  #proxy_set_header Host $host;&lt;br /&gt;
                  #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;br /&gt;
                &amp;#039;&amp;#039;;&lt;br /&gt;
              };&lt;br /&gt;
            };&lt;br /&gt;
          };&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
      systemd.services.lemmy-ui = {&lt;br /&gt;
        environment = {&lt;br /&gt;
          LEMMY_UI_HOST = lib.mkForce &amp;quot;${lemmy-ui.ip}:${toString lemmy-ui.port}&amp;quot;;&lt;br /&gt;
          LEMMY_UI_LEMMY_INTERNAL_HOST = lib.mkForce &amp;quot;${lemmy.ip}:${toString lemmy.port}&amp;quot;;&lt;br /&gt;
          LEMMY_UI_LEMMY_EXTERNAL_HOST = lib.mkForce lemmy.domain ;&lt;br /&gt;
          LEMMY_UI_HTTPS=&amp;quot;true&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      services.pict-rs = {&lt;br /&gt;
        enable = true;&lt;br /&gt;
        port = pict-rs.port;&lt;br /&gt;
        dataDir = &amp;quot;${dataDir}/pict-rs&amp;quot;;&lt;br /&gt;
        address = pict-rs.ip;&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      systemd.services.lemmy = {&lt;br /&gt;
        requires = [&amp;quot;postgresql.service&amp;quot;];&lt;br /&gt;
        after = [&amp;quot;postgresql.service&amp;quot;];&lt;br /&gt;
        environment = {&lt;br /&gt;
          LEMMY_DATABASE_URL = lib.mkForce &amp;quot;postgresql://lemmy@127.0.0.1:${toString config.services.postgresql.port}/lemmy&amp;quot;;&lt;br /&gt;
        };&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
      services.lemmy = {&lt;br /&gt;
        enable = true;&lt;br /&gt;
        ui.port = lemmy-ui.port;&lt;br /&gt;
        database.createLocally = true;&lt;br /&gt;
        settings = {&lt;br /&gt;
          # TODO: Enable this much later when you tested everything.&lt;br /&gt;
          # N.B. you can&amp;#039;t change your domain name after enabling this.&lt;br /&gt;
          federation.enabled = false;&lt;br /&gt;
          # settings related to the postgresql database&lt;br /&gt;
          database = {&lt;br /&gt;
            user = &amp;quot;lemmy&amp;quot;;&lt;br /&gt;
            password = &amp;quot;secretlemmypassword&amp;quot;;&lt;br /&gt;
            host = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
            port = ${config.services.postgresql.port};&lt;br /&gt;
            database = &amp;quot;lemmy&amp;quot;;&lt;br /&gt;
            pool_size = 5;&lt;br /&gt;
          };&lt;br /&gt;
          # Pictrs image server configuration.&lt;br /&gt;
          pictrs = {&lt;br /&gt;
            # Address where pictrs is available (for image hosting)&lt;br /&gt;
            url = &amp;quot;http://${pict-rs.ip}:${toString pict-rs.port}/&amp;quot;;&lt;br /&gt;
            # TODO: Set a custom pictrs API key. ( Required for deleting images )&lt;br /&gt;
            api_key = &amp;quot;&amp;quot;;&lt;br /&gt;
          };&lt;br /&gt;
          # TODO: Email sending configuration. All options except login/password are mandatory&lt;br /&gt;
          email = {&lt;br /&gt;
            # Hostname and port of the smtp server&lt;br /&gt;
            smtp_server = &amp;quot;&amp;quot;;&lt;br /&gt;
            # Login name for smtp server&lt;br /&gt;
            smtp_login = &amp;quot;&amp;quot;;&lt;br /&gt;
            # Password to login to the smtp server&lt;br /&gt;
            smtp_password = &amp;quot;&amp;quot;;&lt;br /&gt;
            # Address to send emails from, eg &amp;quot;noreply@your-instance.com&amp;quot;;&lt;br /&gt;
            smtp_from_address = &amp;quot;noreply@${lemmy.domain}&amp;quot;;&lt;br /&gt;
            # Whether or not smtp connections should use tls. Can be none, tls, or starttls&lt;br /&gt;
            tls_type = &amp;quot;none&amp;quot;;&lt;br /&gt;
          };&lt;br /&gt;
          # TODO: Parameters for automatic configuration of new instance (only used at first start)&lt;br /&gt;
          setup = {&lt;br /&gt;
            # Username for the admin user&lt;br /&gt;
            admin_username = &amp;quot;superawesomeadmin&amp;quot;;&lt;br /&gt;
            # Password for the admin user. It must be at least 10 characters.&lt;br /&gt;
            admin_password = &amp;quot;&amp;quot;;&lt;br /&gt;
            # Name of the site (can be changed later)&lt;br /&gt;
            site_name = &amp;quot;Lemmy at ${lemmy.domain}&amp;quot;;&lt;br /&gt;
            # Email for the admin user (optional, can be omitted and set later through the website)&lt;br /&gt;
            admin_email = &amp;quot;admin@${lemmy.domain}&amp;quot;;&lt;br /&gt;
          };&lt;br /&gt;
          # the domain name of your instance (mandatory)&lt;br /&gt;
          hostname = lemmy.domain;&lt;br /&gt;
          # Address where lemmy should listen for incoming requests&lt;br /&gt;
          bind = lemmy.ip;&lt;br /&gt;
          # Port where lemmy should listen for incoming requests&lt;br /&gt;
          port = lemmy.port;&lt;br /&gt;
          # Whether the site is available over TLS. Needs to be true for federation to work.&lt;br /&gt;
          tls_enabled = true;&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
      };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      # needed for now&lt;br /&gt;
      nixpkgs.config.permittedInsecurePackages = [&lt;br /&gt;
        &amp;quot;nodejs-14.21.3&amp;quot;&lt;br /&gt;
        &amp;quot;openssl-1.1.1t&amp;quot;&lt;br /&gt;
      ];&lt;br /&gt;
&lt;br /&gt;
      system.activationScripts.&amp;quot;make_sure_lemmy_user_owns_files&amp;quot; = &amp;#039;&amp;#039;&lt;br /&gt;
        uid=&amp;#039;${config.users.users.lemmy.uid}&amp;#039;;&lt;br /&gt;
        gid=&amp;#039;${config.users.groups.lemmy.gid}&amp;#039;;&lt;br /&gt;
        dir=&amp;#039;${lemmy.dataDir}&amp;#039;&lt;br /&gt;
&lt;br /&gt;
        mkdir -p &amp;quot;&amp;#039;&amp;#039;${dir}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        if [[ &amp;quot;$(${pkgs.toybox}/bin/stat &amp;quot;&amp;#039;&amp;#039;${dir}&amp;quot; -c &amp;#039;%u:%g&amp;#039; | tee /dev/stderr )&amp;quot; != &amp;quot;&amp;#039;&amp;#039;${uid}:&amp;#039;&amp;#039;${gid}&amp;quot; ]]; then&lt;br /&gt;
          chown -R &amp;quot;&amp;#039;&amp;#039;${uid}:&amp;#039;&amp;#039;${gid}&amp;quot; &amp;quot;&amp;#039;&amp;#039;${dir}&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
      &amp;#039;&amp;#039;;&lt;br /&gt;
    };&lt;br /&gt;
  };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxHighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
N.B. this exact setup is currently untested, I just took my own config and removed my personal items (e.g. credentials).&lt;br /&gt;
&lt;br /&gt;
== See more ==&lt;br /&gt;
&lt;br /&gt;
* [https://join-lemmy.org/docs/en/index.html Official Documentation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Server]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Techhazard</name></author>
	</entry>
</feed>