init
This commit is contained in:
commit
d4bea4c7c5
12 changed files with 328 additions and 0 deletions
19
configuration.nix
Normal file
19
configuration.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{ pkgs,... }: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
./networking.nix # generated at runtime by nixos-infect
|
||||
./services
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [ vim btop git alejandra ];
|
||||
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
|
||||
boot.tmp.cleanOnBoot = true;
|
||||
zramSwap.enable = true;
|
||||
networking.hostName = "distrust";
|
||||
services.openssh.enable = true;
|
||||
services.openssh.settings.PermitRootLogin = "yes";
|
||||
users.users.root.openssh.authorizedKeys.keys = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHxah5pnxmk=P7HtwRsryDoAHZsDs5RcGP9IPCNg1KFe cardno;16-179-196"];
|
||||
system.stateVersion = "25.05";
|
||||
}
|
||||
9
hardware-configuration.nix
Normal file
9
hardware-configuration.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{ modulesPath, ... }:
|
||||
{
|
||||
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi" ];
|
||||
boot.initrd.kernelModules = [ "nvme" ];
|
||||
fileSystems."/" = { device = "/dev/sda1"; fsType = "ext4"; };
|
||||
|
||||
}
|
||||
35
networking.nix
Normal file
35
networking.nix
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
{ lib, ... }: {
|
||||
# This file was populated at runtime with the networking
|
||||
# details gathered from the active system.
|
||||
networking = {
|
||||
nameservers = [ "213.136.95.10"
|
||||
"213.136.95.11"
|
||||
"2a02:c207::1" "8.8.8.8"
|
||||
];
|
||||
defaultGateway = "157.173.112.1";
|
||||
defaultGateway6 = {
|
||||
address = "fe80::1";
|
||||
interface = "eth0";
|
||||
};
|
||||
dhcpcd.enable = false;
|
||||
usePredictableInterfaceNames = lib.mkForce false;
|
||||
interfaces = {
|
||||
eth0 = {
|
||||
ipv4.addresses = [
|
||||
{ address="157.173.124.100"; prefixLength=20; }
|
||||
];
|
||||
ipv6.addresses = [
|
||||
{ address="2a02:c207:2288:2816::1"; prefixLength=64; }
|
||||
{ address="fe80::250:56ff:fe5d:f07e"; prefixLength=64; }
|
||||
];
|
||||
ipv4.routes = [ { address = "157.173.112.1"; prefixLength = 32; } ];
|
||||
ipv6.routes = [ { address = "fe80::1"; prefixLength = 128; } ];
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
services.udev.extraRules = ''
|
||||
ATTR{address}=="00:50:56:5d:f0:7e", NAME="eth0"
|
||||
|
||||
'';
|
||||
}
|
||||
52
services/akkoma.nix
Normal file
52
services/akkoma.nix
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
fediPort = 8083;
|
||||
inherit ((pkgs.formats.elixirConf {}).lib) mkAtom;
|
||||
in {
|
||||
services.akkoma = {
|
||||
enable = true;
|
||||
config = {
|
||||
":pleroma" = {
|
||||
":instance" = {
|
||||
name = "social.distrust.network";
|
||||
description = "Akkoma instance for distrust.network users";
|
||||
email = "root@distrust.network";
|
||||
registration_open = false;
|
||||
};
|
||||
":ldap" = {
|
||||
enabled = true;
|
||||
host = "localhost";
|
||||
port = 3890;
|
||||
ssl = false;
|
||||
tls = false;
|
||||
base = "ou=people,dc=distrust,dc=network";
|
||||
uid = "uid";
|
||||
};
|
||||
"Pleroma.Upload".base_url = "https://social.distrust.network/media/";
|
||||
"Pleroma.Web.Endpoint" = {
|
||||
url.host = "social.distrust.network";
|
||||
http = {
|
||||
ip = "0.0.0.0";
|
||||
port = fediPort;
|
||||
};
|
||||
};
|
||||
"Pleroma.Web.Auth.Authenticator" = mkAtom "Pleroma.Web.Auth.LDAPAuthenticator";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.caddy.virtualHosts."social.distrust.network".extraConfig = ''
|
||||
reverse_proxy localhost:${toString fediPort}
|
||||
'';
|
||||
|
||||
services.tor.relay.onionServices."akkoma".map = [
|
||||
{
|
||||
port = 80;
|
||||
target = {port = fediPort;};
|
||||
}
|
||||
];
|
||||
}
|
||||
8
services/caddy.nix
Normal file
8
services/caddy.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
services = {
|
||||
caddy.enable = true;
|
||||
tor.enable = true;
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = [80 443];
|
||||
}
|
||||
13
services/default.nix
Normal file
13
services/default.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{...}: {
|
||||
imports = [
|
||||
./caddy.nix
|
||||
./tor.nix
|
||||
./site.nix
|
||||
./nextcloud.nix
|
||||
./forgejo.nix
|
||||
./akkoma.nix
|
||||
#./matrix.nix
|
||||
./prosody.nix
|
||||
./lldap.nix
|
||||
];
|
||||
}
|
||||
24
services/forgejo.nix
Normal file
24
services/forgejo.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
let
|
||||
forgejoPort = 8082;
|
||||
in {
|
||||
services.forgejo = {
|
||||
enable = true;
|
||||
lfs.enable = false;
|
||||
settings.server = {
|
||||
DOMAIN = "git.distrust.network";
|
||||
HTTP_PORT = forgejoPort;
|
||||
ROOT_URL = "https://git.distrust.network/";
|
||||
};
|
||||
};
|
||||
|
||||
services.caddy.virtualHosts."git.distrust.network".extraConfig = ''
|
||||
reverse_proxy localhost:${toString forgejoPort}
|
||||
'';
|
||||
|
||||
services.tor.relay.onionServices."forgejo".map = [
|
||||
{
|
||||
port = 80;
|
||||
target = {port = forgejoPort;};
|
||||
}
|
||||
];
|
||||
}
|
||||
16
services/lldap.nix
Normal file
16
services/lldap.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
services.lldap = {
|
||||
enable = true;
|
||||
settings = {
|
||||
http_url = "https://login.distrust.network";
|
||||
ldap_user_email = "root@distrust.network";
|
||||
ldap_user_dn = "root";
|
||||
ldap_base_dn = "dc=distrust,dc=network";
|
||||
ldap_user_pass = "VERY_SECURE";
|
||||
};
|
||||
};
|
||||
|
||||
services.caddy.virtualHosts."login.distrust.network".extraConfig = ''
|
||||
reverse_proxy localhost:17170
|
||||
'';
|
||||
}
|
||||
34
services/nextcloud.nix
Normal file
34
services/nextcloud.nix
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
nextcloudPort = 8081;
|
||||
in {
|
||||
environment.etc."nextcloud-admin-pass".text = "PWD";
|
||||
services.nextcloud = {
|
||||
enable = true;
|
||||
hostName = "cloud.distrust.network";
|
||||
settings.trusted_domains = ["znfdxs4e3rqvzxtkksiidomupgm2x44wtrzyxtpomczto3xg5qxpcbqd.onion"];
|
||||
config = {
|
||||
adminpassFile = "/etc/nextcloud-admin-pass";
|
||||
dbtype = "pgsql";
|
||||
};
|
||||
package = pkgs.nextcloud32;
|
||||
https = true;
|
||||
configureRedis = true;
|
||||
caching.redis = true;
|
||||
database.createLocally = true;
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."${config.services.nextcloud.hostName}".listen = [
|
||||
{
|
||||
addr = "127.0.0.1";
|
||||
port = nextcloudPort;
|
||||
}
|
||||
];
|
||||
|
||||
services.caddy.virtualHosts."https://cloud.distrust.network".extraConfig = ''
|
||||
reverse_proxy localhost:${toString nextcloudPort}
|
||||
'';
|
||||
}
|
||||
77
services/prosody.nix
Normal file
77
services/prosody.nix
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
services.prosody = {
|
||||
package = pkgs.prosody.override {
|
||||
withExtraLuaPackages = pkgs: with pkgs.luaPackages; [lualdap];
|
||||
};
|
||||
enable = true;
|
||||
admins = ["root@distrust.network"];
|
||||
ssl.cert = "/var/lib/acme/distrust.network/fullchain.pem";
|
||||
ssl.key = "/var/lib/acme/distrust.network/key.pem";
|
||||
virtualHosts."distrust.network" = {
|
||||
enabled = true;
|
||||
domain = "distrust.network";
|
||||
ssl.cert = "/var/lib/acme/distrust.network/fullchain.pem";
|
||||
ssl.key = "/var/lib/acme/distrust.network/key.pem";
|
||||
};
|
||||
muc = [{domain = "conference.distrust.network";}];
|
||||
httpFileShare = {
|
||||
domain = "upload.distrust.network";
|
||||
path = "/var/lib/prosody";
|
||||
};
|
||||
extraConfig = ''
|
||||
authentication = "ldap"
|
||||
ldap_base = "ou=people,dc=distrust,dc=network"
|
||||
ldap_server = "localhost:3890"
|
||||
ldap_rootdn = "uid=bind,ou=people,dc=distrust,dc=network"
|
||||
ldap_password = "bindpassword"
|
||||
'';
|
||||
};
|
||||
|
||||
security.acme = {
|
||||
defaults = {
|
||||
email = "root@distrust.network";
|
||||
webroot = "/var/lib/acme";
|
||||
};
|
||||
acceptTerms = true;
|
||||
certs = {
|
||||
"distrust.network" = {
|
||||
extraDomainNames = [
|
||||
"upload.distrust.network"
|
||||
"conference.distrust.network"
|
||||
];
|
||||
postRun = ''
|
||||
chmod -R 770 /var/lib/acme/distrust.network
|
||||
chown -R acme:prosody /var/lib/acme/distrust.network
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
networking.resolvconf.dnsExtensionMechanism = false;
|
||||
networking.firewall.allowedTCPPorts = [5222 5269 5281 5000];
|
||||
|
||||
systemd.services.caddy.serviceConfig.SupplementaryGroups = ["acme"];
|
||||
systemd.services.prosody = {
|
||||
# requires = [ "acme-order-renew-chat.distrust.network.service" ];
|
||||
# after = [ "acme-order-renew-chat.distrust.network.service" ];
|
||||
serviceConfig.SupplementaryGroups = ["acme"];
|
||||
};
|
||||
|
||||
services.caddy.virtualHosts."distrust.network".extraConfig = ''
|
||||
handle /.well-known/* {
|
||||
root * /var/lib/acme/
|
||||
file_server
|
||||
}
|
||||
'';
|
||||
|
||||
services.caddy.virtualHosts."conference.distrust.network upload.distrust.network".extraConfig = ''
|
||||
handle /.well-known/* {
|
||||
root * /var/lib/acme/
|
||||
file_server
|
||||
}
|
||||
'';
|
||||
}
|
||||
32
services/site.nix
Normal file
32
services/site.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
sitePort = 8080;
|
||||
in {
|
||||
systemd.services.python-http-server = {
|
||||
description = "Simple Python HTTP Server";
|
||||
after = ["network.target"];
|
||||
wantedBy = ["multi-user.target"];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.python3}/bin/python3 -m http.server ${toString sitePort} --directory /var/www/distrust.network";
|
||||
Restart = "on-failure";
|
||||
User = "nobody";
|
||||
WorkingDirectory = "/var/www/distrust.network";
|
||||
};
|
||||
};
|
||||
|
||||
services.caddy.virtualHosts."distrust.network" = {
|
||||
extraConfig = ''
|
||||
reverse_proxy localhost:${toString sitePort}
|
||||
'';
|
||||
};
|
||||
|
||||
services.tor.relay.onionServices."site".map = [
|
||||
{
|
||||
port = 80;
|
||||
target = {port = sitePort;};
|
||||
}
|
||||
];
|
||||
}
|
||||
9
services/tor.nix
Normal file
9
services/tor.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{lib, ...}: {
|
||||
services.tor = {
|
||||
settings.HiddenServiceNonAnonymousMode = false;
|
||||
client = {
|
||||
enable = true;
|
||||
dns.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue