Remove stuff that's no longer needed
This commit is contained in:
parent
72cf88bdec
commit
946f3597ef
269
defaults.nix
269
defaults.nix
|
@ -1,269 +0,0 @@
|
|||
# Ref: https://learnxinyminutes.com/docs/nix/
|
||||
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let state-version = "20.03";
|
||||
|
||||
in {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
./packages/local.nix
|
||||
./config
|
||||
./bash.nix
|
||||
<home-manager/nixos>
|
||||
];
|
||||
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
security.acme.acceptTerms = true;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
asdf
|
||||
atop
|
||||
autoconf
|
||||
automake
|
||||
bash
|
||||
boot
|
||||
bind
|
||||
binutils
|
||||
# bpytop
|
||||
btrfs-progs
|
||||
bundix
|
||||
byobu
|
||||
cdrtools
|
||||
cargo
|
||||
certbot
|
||||
clang
|
||||
curl
|
||||
doomEmacsInit
|
||||
dpkg
|
||||
enca
|
||||
fail2ban
|
||||
file
|
||||
fortune
|
||||
gcc
|
||||
git
|
||||
gnumake
|
||||
gnupg
|
||||
google-cloud-sdk
|
||||
guile
|
||||
heimdalFull
|
||||
home-manager
|
||||
imagemagick
|
||||
ipfs
|
||||
iptables
|
||||
jq
|
||||
kerberos
|
||||
leiningen
|
||||
libisofs
|
||||
lispPackages.alexandria
|
||||
lispPackages.cl-ppcre
|
||||
lispPackages.clx
|
||||
lispPackages.quicklisp
|
||||
lsof
|
||||
lshw
|
||||
mkpasswd
|
||||
ncurses5
|
||||
nixfmt
|
||||
nix-index
|
||||
nix-prefetch-git
|
||||
nmap
|
||||
oidentd
|
||||
openldap
|
||||
openssh
|
||||
openssl_1_1
|
||||
openssh_gssapi
|
||||
pciutils
|
||||
pv
|
||||
pwgen
|
||||
ruby
|
||||
rustc
|
||||
sbcl
|
||||
screen
|
||||
service-wrapper
|
||||
stdenv
|
||||
telnet
|
||||
texlive.combined.scheme-basic
|
||||
tmux
|
||||
unzip
|
||||
vim
|
||||
wget
|
||||
xclip
|
||||
yubikey-manager
|
||||
yubikey-personalization
|
||||
];
|
||||
|
||||
system.stateVersion = state-version;
|
||||
|
||||
system.autoUpgrade.enable = true;
|
||||
|
||||
environment.etc.current-nixos-config.source = ./.;
|
||||
|
||||
krb5.enable = true;
|
||||
krb5.kerberos = pkgs.heimdalFull;
|
||||
|
||||
services.xserver = {
|
||||
layout = "us";
|
||||
xkbVariant = "dvp";
|
||||
xkbOptions = "ctrl:nocaps";
|
||||
};
|
||||
|
||||
console = { useXkbConfig = true; };
|
||||
|
||||
i18n = { defaultLocale = "en_US.UTF-8"; };
|
||||
|
||||
programs = {
|
||||
mosh.enable = true;
|
||||
|
||||
ssh = {
|
||||
startAgent = false;
|
||||
|
||||
extraConfig = ''
|
||||
GSSAPIAuthentication yes
|
||||
GSSAPIDelegateCredentials yes
|
||||
'';
|
||||
};
|
||||
|
||||
bash.enableCompletion = true;
|
||||
mtr.enable = true;
|
||||
|
||||
gnupg.agent = {
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
};
|
||||
|
||||
fish = { enable = true; };
|
||||
};
|
||||
|
||||
services = {
|
||||
emacs = {
|
||||
defaultEditor = true;
|
||||
enable = true;
|
||||
};
|
||||
|
||||
cron = { enable = true; };
|
||||
openssh = {
|
||||
enable = true;
|
||||
startWhenNeeded = true;
|
||||
permitRootLogin = "prohibit-password";
|
||||
extraConfig = ''
|
||||
GSSAPIAuthentication yes
|
||||
GSSAPICleanupCredentials yes
|
||||
'';
|
||||
};
|
||||
|
||||
pcscd = { enable = true; };
|
||||
|
||||
udev.packages = with pkgs; [ yubikey-personalization ];
|
||||
};
|
||||
|
||||
environment.shellInit = ''
|
||||
${pkgs.gnupg}/bin/gpg-connect-agent /bye
|
||||
export SSH_AUTH_SOCK=$(${pkgs.gnupg}/bin/gpgconf --list-dirs agent-ssh-socket)
|
||||
'';
|
||||
|
||||
security.pam = {
|
||||
# TODO: add yubico?
|
||||
services = {
|
||||
sshd = {
|
||||
# This should only ask for a code if ~/.google_authenticator exists, but it asks anyway.
|
||||
# googleAuthenticator.enable = true;
|
||||
makeHomeDir = true;
|
||||
sshAgentAuth = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
users.extraUsers = {
|
||||
node = {
|
||||
isSystemUser = true;
|
||||
group = "nogroup";
|
||||
};
|
||||
};
|
||||
|
||||
users.groups = { fudosys = { gid = 888; }; };
|
||||
|
||||
users.extraUsers = {
|
||||
niten = {
|
||||
isNormalUser = true;
|
||||
uid = 10000;
|
||||
createHome = true;
|
||||
description = "Niten";
|
||||
extraGroups = [
|
||||
"wheel"
|
||||
"audio"
|
||||
"video"
|
||||
"disk"
|
||||
"floppy"
|
||||
"lp"
|
||||
"cdrom"
|
||||
"tape"
|
||||
"dialout"
|
||||
"adm"
|
||||
"input"
|
||||
"systemd-journal"
|
||||
"fudosys"
|
||||
"libvirtd"
|
||||
];
|
||||
group = "users";
|
||||
home = "/home/niten";
|
||||
hashedPassword =
|
||||
"$6$a1q2Duoe35hd5$IaZGXPfqyGv9uq5DQm7DZq0vIHsUs39sLktBiBBqMiwl/f/Z4jSvNZLJp9DZJYe5u2qGBYh1ca.jsXvQA8FPZ/";
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDoWkjyeIfgwm0b78weToVYOQSD0RQ0qbNzpsN5NokbIFv2/980kLtnYrQEgIJ/JwMLlT3uJYacbCT5/a6Fb8oLxNpj0AF1EKaWZ3Rrlg72Sq+9SEwJwWWmZizX83sovMwUBMaUp6jWLhAhPpzBW5pfc5YWoc89wxGbELSwzgt5EgHbSJgvDnaHSp3fVaY01wfDXbL/oO160iNe7wv2HLMZu/FkWBkIjz6HmoGJJzYM89bUpHbyYG28lmCHB/8UPog5/BsjOn3/qupgf4zh6mMdMsXLvbR2jVwVjxcEMj9N5nCvc+Y3oi7Mij6VNrWbhkaAJMEzeMhWYrF3/pFQxUqG37aK3d0gw9kp5tMDLIlAPX4y1lfA87pIzoa0+Alql0CJQA1IJvp9SFG7lBmSthWQLmZvwwfoGg/ZjF6rOgsVoZ8TizpQnydWJDr6NboU9LL9Oa64OM5Rs0AU3cR2UbOF4QIcWFJ/7oDe3dOnfZ8QYqx9eXJyxoAUpDanaaTHYBiAKkeOBwQU+MVLKCcONKw9FZclf/1TpDB5b3/JeUFANjHQTv0UXA4YYU7iCx6H7XB4qwwtU9O19CGQYYfCfULX12/fRpYJw6VJaQWyyU4Bn5dk/dcB2nGI36jwbLMfhbUTIApujioAnd/GQIMakHEZ1+syPhMx9BxMkZb99B0A1Q== openpgp:0x4EC95B64"
|
||||
];
|
||||
};
|
||||
reaper = {
|
||||
isNormalUser = true;
|
||||
uid = 10049;
|
||||
createHome = true;
|
||||
description = "Reaper";
|
||||
extraGroups = [
|
||||
"wheel"
|
||||
"audio"
|
||||
"video"
|
||||
"disk"
|
||||
"floppy"
|
||||
"lp"
|
||||
"cdrom"
|
||||
"tape"
|
||||
"dialout"
|
||||
"adm"
|
||||
"input"
|
||||
"systemd-journal"
|
||||
"fudosys"
|
||||
"libvirtd"
|
||||
];
|
||||
group = "users";
|
||||
home = "/home/reaper";
|
||||
hashedPassword =
|
||||
"$6$YVCI6kiGcG5EVMT$t9lYEXjAhbnh7YkvJJPAbrzL8XE/AASsKFlWWeS.fDjBi/8S7zwXTHF0j41nDUfC//3viysn0tIOQKyZTHhzG.";
|
||||
};
|
||||
fudo = {
|
||||
isSystemUser = true;
|
||||
uid = 888;
|
||||
description = "Fudo System User";
|
||||
group = "fudosys";
|
||||
};
|
||||
};
|
||||
|
||||
home-manager.users = {
|
||||
niten = import ./users/niten.nix { inherit config pkgs lib; };
|
||||
root = import ./users/root.nix { inherit config pkgs lib; };
|
||||
};
|
||||
|
||||
systemd.services.fudo-environment-init = {
|
||||
enable = true;
|
||||
description = "Fudo common settings.";
|
||||
wantedBy = [ "default.target" ];
|
||||
|
||||
# Careful, this WILL run many times
|
||||
script = ''
|
||||
# Create a directory for system user homedirs if it doesn't already exist
|
||||
if [ ! -d /var/home ]; then
|
||||
mkdir -p /var/home
|
||||
chmod +x /var/home
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
# A map of email aliases to a list of users (useful for system and bulk aliases)
|
||||
|
||||
let
|
||||
admin-users = ["reaper@fudo.org" "niten@fudo.org"];
|
||||
in {
|
||||
root = admin-users;
|
||||
postmaster = admin-users;
|
||||
|
||||
www-data = admin-users;
|
||||
hostmaster = admin-users;
|
||||
webmaster = admin-users;
|
||||
ftp = admin-users;
|
||||
irc = admin-users;
|
||||
admin = admin-users;
|
||||
system = admin-users;
|
||||
|
||||
asdf = ["mswaffer@gmail.com" "bouncetest@fudo.org"];
|
||||
|
||||
network-info = ["niten@fudo.org"];
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
# Fudo email settings
|
||||
{ config }:
|
||||
|
||||
{
|
||||
domain = "fudo.org";
|
||||
|
||||
local-domains = [
|
||||
"${config.networking.hostName}"
|
||||
"selby.ca"
|
||||
"mail.selby.ca"
|
||||
"fudo.im"
|
||||
"mail.fudo.im"
|
||||
"fudo.ca"
|
||||
"mail.fudo.ca"
|
||||
"fudo.link"
|
||||
"mail.fudo.link"
|
||||
"selbyhomecentre.com"
|
||||
"stewartsoundservices.ca"
|
||||
"rogerwongphoto.com"
|
||||
"chat.fudo.org"
|
||||
];
|
||||
|
||||
alias-users = import ./alias-users.nix;
|
||||
user-aliases = import ./user-aliases.nix;
|
||||
sender-blacklist = import ./sender-blacklist.nix;
|
||||
recipient-blacklist = import ./recipient-blacklist.nix;
|
||||
|
||||
trusted-networks = [
|
||||
"208.81.1.128/28"
|
||||
"208.81.3.112/28"
|
||||
"192.168.11.0/24"
|
||||
"127.0.0.0/8"
|
||||
];
|
||||
}
|
|
@ -1,268 +0,0 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
dnssec = true;
|
||||
|
||||
mx = ["mail.fudo.org"];
|
||||
|
||||
hosts = {
|
||||
cisco = {
|
||||
ip-addresses = [ "198.163.150.211" ];
|
||||
description = "\"allbran\" \"converge\"";
|
||||
};
|
||||
cisco-int = {
|
||||
ip-addresses = [ "10.73.77.10" ];
|
||||
description = "\"fruitloops\" \"aironet\"";
|
||||
};
|
||||
cupid = {
|
||||
ip-addresses = [ "208.38.36.100" ];
|
||||
};
|
||||
docker = {
|
||||
ip-addresses = [ "208.81.3.126" ];
|
||||
};
|
||||
france = {
|
||||
ip-addresses = [ "208.81.3.117" ];
|
||||
ssh-fingerprints = [
|
||||
"4 1 c95a198f504a589fc62893a95424b12f0b24732d"
|
||||
"4 2 3e7dad879d6cab7f7fb6769e156d7988d0c01281618d03b793834eea2f09bc96"
|
||||
"1 1 1b6d62dafae9ebc59169dfb4ef828582a5450d94"
|
||||
"1 2 079e7a57873542541095bf3d2f97b7350bb457d027b423a6fb56f7f6aa84ac80"
|
||||
];
|
||||
};
|
||||
frankfurt = {
|
||||
ip-addresses = [ "208.81.3.120" ];
|
||||
ipv6-addresses = [ "2605:e200:d200:1:5054:ff:fe8c:9738" ];
|
||||
ssh-fingerprints = [
|
||||
"2 1 4b9e4ed16a6b3fe6d41ed0f5cdeed853cc101e12"
|
||||
"2 2 286ce32326874fe8aa15e3fd60b176b906ebd87306109f7c250d077db4ba85c5"
|
||||
"3 1 3531dfd2f240ce0cd548b748462f78451df3f081"
|
||||
"3 2 338809345ed38eb6808fd468067a74b2a8000fd8cc3bc016b9f977050bf1bba8"
|
||||
"1 1 fb9ba707daa78243f8a8801f024fe790516b99a7"
|
||||
"1 2 407f9692fedbd83449f0daf1cf795258b561a7e9c7e8072577cc84ffc0c84130"
|
||||
];
|
||||
};
|
||||
germany = {
|
||||
ip-addresses = [ "208.81.3.116" ];
|
||||
ipv6-addresses = [ "2605:e200:d200:1:78d9:d8ff:fe0f:dd88" ];
|
||||
ssh-fingerprints = [
|
||||
"2 1 5609a728a91d7e52a6060ea7f3a7790005ba5e81"
|
||||
"2 2 520a8eb3b9013837ac3ab4b28254f96b7718f9613e751a20dc488bf7d967b485"
|
||||
"3 1 ee5b49888a36a34e7d4ee0d18626c82a16c2fcdf"
|
||||
"3 2 d5e44cf2d85032638d49c030a9ccbff6638198c354efcb11bf173017d1257f49"
|
||||
"1 1 9915d2515d7acdb38924d8829925113d5ce80b88"
|
||||
"1 2 a7c866306e9661b8b568b2de282367c84065301d6228e58e57e6c4d3d33e3051"
|
||||
];
|
||||
};
|
||||
hanover = {
|
||||
ip-addresses = [ "208.81.1.130" ];
|
||||
ipv6-addresses = [ "2605:e200:d100:1:5054:ff:fe61:ac8b" ];
|
||||
};
|
||||
localhost = {
|
||||
ip-addresses = [ "127.0.0.1" ];
|
||||
};
|
||||
lsbb-gba = {
|
||||
ip-addresses = [ "199.101.56.34" ];
|
||||
};
|
||||
lsbb-abg = {
|
||||
ip-addresses = [ "199.101.56.38" ];
|
||||
};
|
||||
lsbb-hwd = {
|
||||
ip-addresses = [ "199.101.56.106" ];
|
||||
};
|
||||
lsbb-hcl = {
|
||||
ip-addresses = [ "199.101.56.110" ];
|
||||
};
|
||||
procul = {
|
||||
ip-addresses = [ "172.86.179.18" ];
|
||||
};
|
||||
prunel = {
|
||||
ip-addresses = [ "208.81.3.123" ];
|
||||
};
|
||||
mbix = {
|
||||
ip-addresses = [ "208.81.7.146" ];
|
||||
};
|
||||
ns3-fudo = {
|
||||
ip-addresses = [ "208.75.74.205" ];
|
||||
};
|
||||
ns3-dair = {
|
||||
ip-addresses = [ "208.75.74.205" ];
|
||||
};
|
||||
ns4-fudo = {
|
||||
ip-addresses = [ "208.75.75.157" ];
|
||||
};
|
||||
ns4-dair = {
|
||||
ip-addresses = [ "208.75.75.157" ];
|
||||
};
|
||||
paris = {
|
||||
ip-addresses = [ "208.81.3.125" ];
|
||||
ipv6-addresses = [ "2605:e200:d200:1:5054:ff:fe67:d0c1" ];
|
||||
ssh-fingerprints = [
|
||||
"2 1 9fe9e689a36316831ffafffc22c85913748670a6"
|
||||
"2 2 f2ce57bf470c907604b79b6ef031c928a64a81031e78892fd475bbcf65ae728b"
|
||||
"3 1 5c56e93a20868886ffe76e1fab012989ce8e995f"
|
||||
"3 2 af4f383cb349fc3b2496a0bf0911da3a09f98a6d4d2a3c81bb0fb23a45bde950"
|
||||
"4 1 71a1d35c32b4445b98ce339696f155e1d4c39bd5"
|
||||
"4 2 a9e4810a24bd52082c9bb2b1019a9de7d7983246fecb454dd8d918ac5a11af81"
|
||||
"1 1 18e8dd7cac48f1ac6103ec21c279e339d8690be1"
|
||||
"1 2 72e4aa05c733441da57c464e6540486f5306b6768d784dd97c666e16629d77a0"
|
||||
];
|
||||
};
|
||||
probe = {
|
||||
ip-addresses = [ "208.81.3.119" ];
|
||||
};
|
||||
tours = {
|
||||
ip-addresses = [ "208.81.3.121" ];
|
||||
ipv6-addresses = [ "2605:e200:d200:1:5054:ff:fe95:34e5" ];
|
||||
ssh-fingerprints = [
|
||||
"2 2 41cddf1457880c7e86fa3838eabdbbe7cf803f98998ed406319ba3e43036964c"
|
||||
"3 1 89b72a740ef6ef7ad9aaf5fe2178d356cdc7ee5b"
|
||||
"3 2 c39346def56817aaf4c64db5667ccc6aeb400ff1166125fe630b63b5eab0ef29"
|
||||
"4 1 049b1e6ef1d338d35e97baf312d8a371a266b7d1"
|
||||
"4 2 1a889e43148ea1ded9f8bc60799ccf1bc32cb084946c8815abed6cc31f212594"
|
||||
"1 1 bae37560759ec8dba35755473fbb346f9dc4e333"
|
||||
"1 2 3d0d5efe2da329ea19b191f227c3aaad45271c651717ec3315cda131e992bbcf"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
default-host = "208.81.3.117";
|
||||
|
||||
srv-records = {
|
||||
tcp = {
|
||||
domain = [
|
||||
{
|
||||
host = "ns1.fudo.org";
|
||||
port = 53;
|
||||
}
|
||||
{
|
||||
host = "ns2.fudo.org";
|
||||
port = 53;
|
||||
}
|
||||
{
|
||||
host = "ns3.fudo.org";
|
||||
port = 53;
|
||||
}
|
||||
{
|
||||
host = "ns4.fudo.org";
|
||||
port = 53;
|
||||
}
|
||||
];
|
||||
ssh = [{
|
||||
host = "france.fudo.org";
|
||||
port = 22;
|
||||
}];
|
||||
smtp = [{
|
||||
host = "mail.fudo.org";
|
||||
port = 25;
|
||||
}];
|
||||
submission = [{
|
||||
host = "mail.fudo.org";
|
||||
port = 587;
|
||||
}];
|
||||
kerberos = [{
|
||||
host = "france.fudo.org";
|
||||
port = 88;
|
||||
}];
|
||||
imaps = [{
|
||||
host = "mail.fudo.org";
|
||||
port = 993;
|
||||
}];
|
||||
ldap = [{
|
||||
host = "france.fudo.org";
|
||||
port = 389;
|
||||
}];
|
||||
ldaps = [{
|
||||
host = "france.fudo.org";
|
||||
port = 636;
|
||||
}];
|
||||
pop3s = [{
|
||||
host = "mail.fudo.org";
|
||||
port = 995;
|
||||
}];
|
||||
http = [{
|
||||
host = "wiki.fudo.org";
|
||||
port = 80;
|
||||
}];
|
||||
https = [{
|
||||
host = "wiki.fudo.org";
|
||||
port = 80;
|
||||
}];
|
||||
xmpp-server = [{
|
||||
host = "fudo.im";
|
||||
port = 5269;
|
||||
}];
|
||||
xmpp-client = [{
|
||||
host = "fudo.im";
|
||||
port = 5222;
|
||||
}];
|
||||
};
|
||||
udp = {
|
||||
domain = [
|
||||
{
|
||||
host = "ns1.fudo.org";
|
||||
port = 53;
|
||||
}
|
||||
{
|
||||
host = "ns2.fudo.org";
|
||||
port = 53;
|
||||
}
|
||||
{
|
||||
host = "ns3.fudo.org";
|
||||
port = 53;
|
||||
}
|
||||
{
|
||||
host = "ns4.fudo.org";
|
||||
port = 53;
|
||||
}
|
||||
];
|
||||
kerberos = [{
|
||||
host = "france.fudo.org";
|
||||
port = 88;
|
||||
}];
|
||||
kerberos-master = [{
|
||||
host = "france.fudo.org";
|
||||
port = 88;
|
||||
}];
|
||||
kpasswd = [{
|
||||
host = "france.fudo.org";
|
||||
port = 464;
|
||||
}];
|
||||
xmpp-server = [{
|
||||
host = "fudo.im";
|
||||
port = 5269;
|
||||
}];
|
||||
};
|
||||
};
|
||||
|
||||
aliases = {
|
||||
pop = "mail.fudo.org.";
|
||||
smtp = "mail.fudo.org.";
|
||||
imap = "mail.fudo.org.";
|
||||
webmail = "france.fudo.org.";
|
||||
|
||||
archiva = "france.fudo.org.";
|
||||
auth = "france.fudo.org.";
|
||||
backplane = "france.fudo.org.";
|
||||
chat = "france.fudo.org.";
|
||||
de = "germany.fudo.org.";
|
||||
fr = "france.fudo.org.";
|
||||
git = "france.fudo.org.";
|
||||
metrics = "france.fudo.org.";
|
||||
minecraft = "france.fudo.org.";
|
||||
monitor = "france.fudo.org.";
|
||||
user = "paris.fudo.org.";
|
||||
u = "user.fudo.org.";
|
||||
w = "www.fudo.org.";
|
||||
ww = "www.fudo.org.";
|
||||
www = "hanover.fudo.org.";
|
||||
wiki = "hanover.fudo.org.";
|
||||
};
|
||||
|
||||
extra-dns-records = [
|
||||
''_kerberos IN TXT "FUDO.ORG"''
|
||||
''@ IN TXT "v=spf1 mx ip4:208.81.3.112/28 ip6:2605:e200:d200::1/48 -all"''
|
||||
''@ IN SPF "v=spf1 mx ip4:208.81.3.112/28 ip6:2605:e200:d200::1/48 -all"''
|
||||
];
|
||||
|
||||
dmarc-report-address = "dmarc-report@fudo.org";
|
||||
}
|
120
fudo/groups.nix
120
fudo/groups.nix
|
@ -1,120 +0,0 @@
|
|||
{
|
||||
admin = {
|
||||
gid = 1000;
|
||||
description = "Admin User Group";
|
||||
members = [
|
||||
"niten"
|
||||
"reaper"
|
||||
"swaff"
|
||||
];
|
||||
};
|
||||
|
||||
fudo = {
|
||||
gid = 1001;
|
||||
description = "Fudo User Group";
|
||||
members = [
|
||||
"andrew"
|
||||
"animus"
|
||||
"anorthe"
|
||||
"ark"
|
||||
"ben"
|
||||
"brian"
|
||||
"chad"
|
||||
"ckoo"
|
||||
"dabar"
|
||||
"dana"
|
||||
"darryl"
|
||||
"debo"
|
||||
"flowchart"
|
||||
"gaijin"
|
||||
"gubbs"
|
||||
"helen"
|
||||
"jess"
|
||||
"jill"
|
||||
"jinny"
|
||||
"joker4ever"
|
||||
"jun"
|
||||
"kevin"
|
||||
"kevinyinjunjie"
|
||||
"kris"
|
||||
"laura"
|
||||
"leefolio"
|
||||
"niten"
|
||||
"r3d3"
|
||||
"reaper"
|
||||
"rob"
|
||||
"saphira"
|
||||
"slickoil"
|
||||
"splat1"
|
||||
"stewartd"
|
||||
"swaff"
|
||||
"theblacksun"
|
||||
"xiaoxuan"
|
||||
"zimm"
|
||||
];
|
||||
};
|
||||
|
||||
selby = {
|
||||
gid = 1002;
|
||||
description = "Selby User Group";
|
||||
members = [
|
||||
"andrew"
|
||||
"brian"
|
||||
"darryl"
|
||||
"helen"
|
||||
"jess"
|
||||
"ken"
|
||||
"kevin"
|
||||
"laura"
|
||||
"niten"
|
||||
"rob"
|
||||
"vee"
|
||||
"xiaoxuan"
|
||||
];
|
||||
};
|
||||
|
||||
www-fudo = {
|
||||
gid = 1005;
|
||||
description = "Fudo Web Group";
|
||||
members = [
|
||||
"niten"
|
||||
"reaper"
|
||||
"www-data"
|
||||
];
|
||||
};
|
||||
|
||||
fudo_admin = {
|
||||
gid = 1031;
|
||||
description = "Fudo Administrators";
|
||||
members = [
|
||||
"niten"
|
||||
"reaper"
|
||||
];
|
||||
};
|
||||
|
||||
sea_media = {
|
||||
gid = 1077;
|
||||
description = "Media group for Niten's home in Seattle";
|
||||
members = [
|
||||
"ken"
|
||||
"niten"
|
||||
"reaper"
|
||||
"xiaoxuan"
|
||||
];
|
||||
};
|
||||
|
||||
fudo_shell = {
|
||||
gid = 1078;
|
||||
description = "Users with shell access to fudo hosts";
|
||||
members = [
|
||||
"ansyg"
|
||||
"joker4ever"
|
||||
"kevinyinjunjie"
|
||||
"niten"
|
||||
"omefire"
|
||||
"reaper"
|
||||
"swaff"
|
||||
];
|
||||
};
|
||||
|
||||
}
|
|
@ -1,190 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
profile = config.fudo.common.profile;
|
||||
|
||||
common-packages = with pkgs; [
|
||||
ffmpeg-full
|
||||
libfixposix
|
||||
mono
|
||||
nomacs
|
||||
oraclejdk
|
||||
python37Packages.youtube-dl
|
||||
sqlite
|
||||
system-config-printer
|
||||
];
|
||||
|
||||
gui-packages = with pkgs; [
|
||||
cool-retro-term
|
||||
corefonts
|
||||
chrome-gnome-shell
|
||||
chromium
|
||||
emacs
|
||||
evince
|
||||
firefox
|
||||
gimp
|
||||
glxinfo
|
||||
gnome3.gnome-shell
|
||||
gnome3.gnome-session
|
||||
google-chrome
|
||||
gtk2
|
||||
gtk2-x11
|
||||
gtk3
|
||||
gtkimageview
|
||||
i3lock
|
||||
mplayer
|
||||
mpv
|
||||
pdftk
|
||||
racket
|
||||
redshift
|
||||
rhythmbox
|
||||
shotwell
|
||||
spotify
|
||||
(steam.override {
|
||||
nativeOnly = true;
|
||||
extraPkgs = pkgs: [
|
||||
mono
|
||||
fmodex
|
||||
gtk3
|
||||
gtk3-x11
|
||||
libgdiplus
|
||||
zlib
|
||||
];
|
||||
withJava = true;
|
||||
}).run
|
||||
virtmanager
|
||||
xorg.xev
|
||||
xzgv
|
||||
virtmanager-qt
|
||||
];
|
||||
|
||||
cfg = config.fudo.common;
|
||||
|
||||
in mkIf ((profile == "desktop") || (profile == "laptop")) {
|
||||
environment.systemPackages =
|
||||
common-packages ++ (if cfg.enable-gui then gui-packages else []);
|
||||
|
||||
nixpkgs.config.allowBroken = true;
|
||||
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
browseDomains = [config.fudo.common.domain];
|
||||
domainName = config.fudo.common.domain;
|
||||
};
|
||||
|
||||
# splash screen
|
||||
boot.plymouth.enable = false;
|
||||
|
||||
boot.tmpOnTmpfs = true;
|
||||
|
||||
services.xserver = if cfg.enable-gui then {
|
||||
enable = true;
|
||||
|
||||
layout = "us";
|
||||
xkbVariant = "dvp";
|
||||
xkbOptions = "ctrl:nocaps";
|
||||
|
||||
desktopManager.gnome3.enable = true;
|
||||
|
||||
displayManager.gdm.enable = true;
|
||||
|
||||
# displayManager.defaultSession = "gnome";
|
||||
|
||||
windowManager.stumpwm.enable = true;
|
||||
|
||||
# windowManager.session = pkgs.lib.singleton {
|
||||
# name = "stumpwm";
|
||||
# start = ''
|
||||
# ${pkgs.lispPackages.stumpwm}/bin/stumpwm &
|
||||
# waidPID=$!
|
||||
# '';
|
||||
# };
|
||||
} else {
|
||||
layout = "us";
|
||||
xkbVariant = "dvp";
|
||||
xkbOptions = "ctrl:nocaps";
|
||||
};
|
||||
|
||||
services.gnome3 = mkIf cfg.enable-gui {
|
||||
evolution-data-server.enable = pkgs.lib.mkForce false;
|
||||
gnome-user-share.enable = pkgs.lib.mkForce false;
|
||||
};
|
||||
|
||||
programs.gnupg.agent = {
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
pinentryFlavor = if cfg.enable-gui then "gnome3" else "curses";
|
||||
};
|
||||
|
||||
services.dbus.socketActivated = true;
|
||||
|
||||
sound.enable = true;
|
||||
|
||||
hardware.pulseaudio.enable = true;
|
||||
|
||||
fonts = mkIf cfg.enable-gui {
|
||||
enableFontDir = true;
|
||||
#fontconfig.antialias = true;
|
||||
fontconfig.enable = true;
|
||||
#fontconfig.penultimate.enable = true;
|
||||
#fontconfig.subpixel.lcdfilter = "default";
|
||||
|
||||
fonts = with pkgs; [
|
||||
cantarell_fonts
|
||||
dejavu_fonts
|
||||
dina-font
|
||||
dosemu_fonts
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
freefont_ttf
|
||||
liberation_ttf
|
||||
mplus-outline-fonts
|
||||
#nerdfonts
|
||||
noto-fonts
|
||||
noto-fonts-cjk
|
||||
noto-fonts-emoji
|
||||
proggyfonts
|
||||
terminus_font
|
||||
ubuntu_font_family
|
||||
ucsFonts
|
||||
ultimate-oldschool-pc-font-pack
|
||||
unifont
|
||||
vistafonts
|
||||
xlibs.fontadobe100dpi
|
||||
xlibs.fontadobe75dpi
|
||||
xlibs.fontadobeutopia100dpi
|
||||
xlibs.fontadobeutopia75dpi
|
||||
xlibs.fontadobeutopiatype1
|
||||
xlibs.fontarabicmisc
|
||||
xlibs.fontbh100dpi
|
||||
xlibs.fontbh75dpi
|
||||
xlibs.fontbhlucidatypewriter100dpi
|
||||
xlibs.fontbhlucidatypewriter75dpi
|
||||
xlibs.fontbhttf
|
||||
xlibs.fontbhtype1
|
||||
xlibs.fontbitstream100dpi
|
||||
xlibs.fontbitstream75dpi
|
||||
xlibs.fontbitstreamtype1
|
||||
xlibs.fontcronyxcyrillic
|
||||
xlibs.fontcursormisc
|
||||
xlibs.fontdaewoomisc
|
||||
xlibs.fontdecmisc
|
||||
xlibs.fontibmtype1
|
||||
xlibs.fontisasmisc
|
||||
xlibs.fontjismisc
|
||||
xlibs.fontmicromisc
|
||||
xlibs.fontmisccyrillic
|
||||
xlibs.fontmiscethiopic
|
||||
xlibs.fontmiscmeltho
|
||||
xlibs.fontmiscmisc
|
||||
xlibs.fontmuttmisc
|
||||
xlibs.fontschumachermisc
|
||||
xlibs.fontscreencyrillic
|
||||
xlibs.fontsonymisc
|
||||
xlibs.fontsunmisc
|
||||
xlibs.fontwinitzkicyrillic
|
||||
xlibs.fontxfree86type1
|
||||
];
|
||||
};
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./common-ui.nix
|
||||
./desktop.nix
|
||||
./laptop.nix
|
||||
./server.nix
|
||||
];
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
mkIf (config.fudo.common.profile == "desktop") {
|
||||
networking = {
|
||||
networkmanager.enable = mkForce false;
|
||||
};
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
options.fudo.laptop = {
|
||||
use-network-manager = mkOption {
|
||||
type = types.bool;
|
||||
description = "Use NetworkManager instead of wpa_supplicant.";
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
config = mkIf (config.fudo.common.profile == "laptop") {
|
||||
environment.systemPackages = with pkgs; [ acpi upower wpa_supplicant ];
|
||||
|
||||
networking = if (config.fudo.laptop.use-network-manager) then {
|
||||
networkmanager.enable = true;
|
||||
} else {
|
||||
networkmanager.enable = false;
|
||||
wireless = {
|
||||
enable = true;
|
||||
userControlled = {
|
||||
enable = true;
|
||||
group = "wheel";
|
||||
};
|
||||
networks = {
|
||||
"sea.fudo.org" = { psk = "DahHaocheiD5"; };
|
||||
"Pixel_9041" = { psk = "ea72027e4e6"; };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
reboot-if-necessary = pkgs.writeShellScriptBin "reboot-if-necessary" ''
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "FAILED: no sync file provided."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WALL=${pkgs.utillinux}/bin/wall
|
||||
|
||||
if [ -f $1 ]; then
|
||||
$WALL "$1 exists, rebooting system"
|
||||
${pkgs.systemd}/bin/reboot
|
||||
else
|
||||
$WALL "$1 does not exist, aborting reboot."
|
||||
fi
|
||||
|
||||
exit 0
|
||||
'';
|
||||
|
||||
test-config = pkgs.writeShellScriptBin "fudo-test-config" ''
|
||||
if [ $# -gt 1 ]; then
|
||||
echo "usage: $0 [timeout]"
|
||||
exit 1
|
||||
elif [ $# -eq 1 ]; then
|
||||
TIMEOUT=$1
|
||||
else
|
||||
TIMEOUT=15m
|
||||
fi
|
||||
|
||||
SYNCFILE=$TMP/sync-$(date +"%Y%m%d-%H%M%N")
|
||||
touch $SYNCFILE
|
||||
${pkgs.utillinux}/bin/wall "Launching config. System will restart in $TIMEOUT if $SYNCFILE still exists."
|
||||
systemd-run --on-active=$TIMEOUT ${reboot-if-necessary} $SYNCFILE
|
||||
nixos-rebuild test
|
||||
|
||||
exit 0
|
||||
'';
|
||||
|
||||
in {
|
||||
config = mkIf (config.fudo.common.profile == "server") {
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
emacs-nox
|
||||
ldns
|
||||
ldns.examples
|
||||
jdk12_headless
|
||||
racket-minimal
|
||||
reboot-if-necessary
|
||||
test-config
|
||||
];
|
||||
|
||||
noXlibs = true;
|
||||
};
|
||||
|
||||
security = {
|
||||
hideProcessInformation = true;
|
||||
};
|
||||
|
||||
networking = {
|
||||
networkmanager.enable = mkForce false;
|
||||
};
|
||||
|
||||
boot.tmpOnTmpfs = true;
|
||||
|
||||
services.xserver.enable = false;
|
||||
|
||||
programs = {
|
||||
gnupg.agent = {
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
# Emails for which we won't accept any email.
|
||||
|
||||
[]
|
|
@ -1,81 +0,0 @@
|
|||
{ host_ipv4, config }:
|
||||
|
||||
{
|
||||
dnssec = true;
|
||||
|
||||
mx = ["mail.fudo.org"];
|
||||
|
||||
hosts = {
|
||||
forum = {
|
||||
ip-addresses = [ "208.81.3.117" ];
|
||||
};
|
||||
};
|
||||
|
||||
default-host = "208.81.3.117";
|
||||
|
||||
srv-records = {
|
||||
tcp = {
|
||||
domain = [{
|
||||
host = "ns1.fudo.org";
|
||||
port = "53";
|
||||
}];
|
||||
ssh = [{
|
||||
host = "france.fudo.org";
|
||||
port = 22;
|
||||
}];
|
||||
submission = [{
|
||||
host = "mail.fudo.org";
|
||||
port = 587;
|
||||
}];
|
||||
kerberos = [{
|
||||
host = "auth.fudo.org";
|
||||
port = 88;
|
||||
}];
|
||||
imaps = [{
|
||||
host = "mail.fudo.org";
|
||||
port = 993;
|
||||
}];
|
||||
pop3s = [{
|
||||
host = "mail.fudo.org";
|
||||
port = 995;
|
||||
}];
|
||||
http = [{
|
||||
host = "forum.selby.ca";
|
||||
port = 80;
|
||||
}];
|
||||
https = [{
|
||||
host = "forum.selby.ca";
|
||||
port = 80;
|
||||
}];
|
||||
};
|
||||
udp = {
|
||||
domain = [{
|
||||
host = "auth.fudo.org";
|
||||
port = 53;
|
||||
}];
|
||||
kerberos = [{
|
||||
host = "auth.fudo.org";
|
||||
port = 88;
|
||||
}];
|
||||
};
|
||||
};
|
||||
|
||||
aliases = {
|
||||
pop = "mail.fudo.org.";
|
||||
smtp = "mail.fudo.org.";
|
||||
imap = "mail.fudo.org.";
|
||||
mail = "mail.fudo.org.";
|
||||
ns1 = "ns1.fudo.org.";
|
||||
ns2 = "ns2.fudo.org.";
|
||||
webmail = "france.fudo.org.";
|
||||
forum = "frankfurt.fudo.org.";
|
||||
};
|
||||
|
||||
extra-dns-records = [
|
||||
''_kerberos IN TXT "FUDO.ORG"''
|
||||
''@ IN TXT "v=spf1 mx ip4:${host_ipv4}/29 -all"''
|
||||
''@ IN SPF "v=spf1 mx ip4:${host_ipv4}/29 -all"''
|
||||
];
|
||||
|
||||
dmarc-report-address = "dmarc-report@selby.ca";
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
# We won't forward email from these addresses, because they were used for
|
||||
# spamming. Learn2passward!
|
||||
|
||||
[
|
||||
"animus@fudo.org"
|
||||
"ark@fudo.org"
|
||||
"theblacksun@fudo.org"
|
||||
]
|
|
@ -1,10 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./joes.nix
|
||||
./portage.nix
|
||||
./russell.nix
|
||||
./seattle.nix
|
||||
];
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
hostname = config.networking.hostName;
|
||||
|
||||
gateway = "172.86.179.17";
|
||||
|
||||
local-domain = "informis.land";
|
||||
|
||||
admin = "admin@${local-domain}";
|
||||
|
||||
in {
|
||||
config = mkIf (config.fudo.common.site == "joes") {
|
||||
time.timeZone = "America/Winnipeg";
|
||||
|
||||
services.cron = {
|
||||
mailto = admin;
|
||||
};
|
||||
|
||||
networking = {
|
||||
domain = local-domain;
|
||||
search = [ local-domain "fudo.org" ];
|
||||
firewall.enable = false;
|
||||
|
||||
defaultGateway = gateway;
|
||||
# defaultGateway6 = gateway6;
|
||||
|
||||
hosts = {
|
||||
"127.0.0.1" = [
|
||||
"${config.networking.hostName}.${local-domain}"
|
||||
config.networking.hostName
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
krb5.libdefaults.default_realm = "INFORMIS.LAND";
|
||||
|
||||
fudo.node-exporter = {
|
||||
enable = false;
|
||||
hostname = hostname;
|
||||
};
|
||||
|
||||
security.acme.certs."${hostname}.${local-domain}" = {
|
||||
email = "admin@${local-domain}";
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedTlsSettings = true;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
admin = "admin@fudo.org";
|
||||
|
||||
nameservers = [
|
||||
"1.1.1.1"
|
||||
"208.81.7.14"
|
||||
"2606:4700:4700::1111"
|
||||
];
|
||||
|
||||
hostname = config.networking.hostName;
|
||||
|
||||
gateway = "208.81.3.113";
|
||||
gateway6 = "2605:e200:d200:1::1";
|
||||
|
||||
in {
|
||||
config = mkIf (config.fudo.common.site == "portage") {
|
||||
time.timeZone = "America/Winnipeg";
|
||||
|
||||
services.cron = {
|
||||
mailto = admin;
|
||||
};
|
||||
|
||||
networking = {
|
||||
domain = "fudo.org";
|
||||
search = ["fudo.org"];
|
||||
firewall.enable = false;
|
||||
nameservers = nameservers;
|
||||
|
||||
defaultGateway = gateway;
|
||||
# defaultGateway6 = gateway6;
|
||||
};
|
||||
|
||||
fudo.node-exporter = {
|
||||
enable = true;
|
||||
hostname = hostname;
|
||||
};
|
||||
|
||||
security.acme.certs.${hostname} = {
|
||||
email = "admin@fudo.org";
|
||||
# plugins = [
|
||||
# "fullchain.pem"
|
||||
# "full.pem"
|
||||
# "key.pem"
|
||||
# "chain.pem"
|
||||
# "cert.pem"
|
||||
# ];
|
||||
};
|
||||
|
||||
# TODO: We...could run nginx in a container
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedTlsSettings = true;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,167 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
admin = "admin@fudo.org";
|
||||
|
||||
local-domain = "rus.selby.ca";
|
||||
|
||||
gateway = "10.0.0.1";
|
||||
|
||||
nameservers = [ "10.0.0.1" ];
|
||||
|
||||
hostname = config.networking.hostName;
|
||||
|
||||
in {
|
||||
config = mkIf (config.fudo.common.site == "russell") {
|
||||
time.timeZone = "America/Winnipeg";
|
||||
|
||||
services.cron = { mailto = admin; };
|
||||
|
||||
networking = {
|
||||
domain = "rus.selby.ca";
|
||||
search = [ local-domain "fudo.org" "selby.ca" ];
|
||||
nameservers = nameservers;
|
||||
|
||||
# Don't set the gateway if we ARE the gateway.
|
||||
# This is the most generic way I can think of to do that. local-network is really
|
||||
# about running all the local servers (DNS, DHCP, and providing gateway).
|
||||
defaultGateway =
|
||||
optionalString (config.fudo.local-network.enable != true) gateway;
|
||||
|
||||
enableIPv6 = true;
|
||||
|
||||
# Necessary to make sure than Kerberos and Avahi both work (the former
|
||||
# needs the full reverse-lookup name of the server, the latter wants
|
||||
# `hostname` to return just the host itself.
|
||||
hosts = {
|
||||
"127.0.0.1" = [
|
||||
"${config.networking.hostName}.${local-domain}"
|
||||
config.networking.hostName
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
krb5.libdefaults.default_realm = "FUDO.ORG";
|
||||
|
||||
users.extraUsers = {
|
||||
guest = {
|
||||
isNormalUser = true;
|
||||
uid = 1000;
|
||||
description = "Guest User";
|
||||
extraGroups =
|
||||
[ "audio" "video" "disk" "floppy" "lp" "cdrom" "tape" "input" ];
|
||||
};
|
||||
ken = {
|
||||
isNormalUser = true;
|
||||
uid = 10035;
|
||||
createHome = true;
|
||||
description = "Ken Selby";
|
||||
extraGroups =
|
||||
[ "audio" "video" "disk" "floppy" "lp" "cdrom" "tape" "input" ];
|
||||
group = "users";
|
||||
home = "/home/selby/ken";
|
||||
hashedPassword =
|
||||
"$6$EwK9fpbH8$gYVzYY1IYw2/G0wCeUxXrZZqvjWCkCZbBqCOhxowbMuYtC5G0vp.AoYhVKWOJcHJM2c7TdPmAdnhLIe2KYStf.";
|
||||
};
|
||||
xiaoxuan = {
|
||||
isNormalUser = true;
|
||||
uid = 10065;
|
||||
createHome = true;
|
||||
description = "Xiaoxuan Jin";
|
||||
extraGroups =
|
||||
[ "audio" "video" "disk" "floppy" "lp" "cdrom" "tape" "input" ];
|
||||
group = "users";
|
||||
home = "/home/xiaoxuan";
|
||||
hashedPassword =
|
||||
"$6$C8lYHrK7KvdKm/RE$cHZ2hg5gEOEjTV8Zoayik8sz5h.Vh0.ClCgOlQn8l/2Qx/qdxqZ7xCsAZ1GZ.IEyESfhJeJbjLpykXDwPpfVF0";
|
||||
};
|
||||
};
|
||||
|
||||
fudo.common.domain = "sea.fudo.org";
|
||||
|
||||
fudo.local-network = {
|
||||
domain = "${local-domain}";
|
||||
|
||||
network = "10.0.0.0/16";
|
||||
|
||||
dhcp-dynamic-network = "10.0.1.0/24";
|
||||
|
||||
enable-reverse-mappings = true;
|
||||
|
||||
srv-records = {
|
||||
tcp = {
|
||||
domain = [{
|
||||
port = 53;
|
||||
host = "clunk.${local-domain}";
|
||||
}];
|
||||
kerberos = [{
|
||||
port = 88;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
kerberos-adm = [{
|
||||
port = 88;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
ssh = [{
|
||||
port = 22;
|
||||
host = "clunk.${local-domain}";
|
||||
}];
|
||||
};
|
||||
|
||||
udp = {
|
||||
domain = [{
|
||||
port = 53;
|
||||
host = "clunk.${local-domain}";
|
||||
}];
|
||||
kerberos = [{
|
||||
port = 88;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
kerboros-master = [{
|
||||
port = 88;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
kpasswd = [{
|
||||
port = 464;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
};
|
||||
};
|
||||
|
||||
aliases = { dns-hole = "clunk"; };
|
||||
|
||||
hosts = {
|
||||
clunk = {
|
||||
ip-address = "10.0.0.1";
|
||||
mac-address = "02:44:d1:eb:c3:6b";
|
||||
};
|
||||
|
||||
dns-proxy = {
|
||||
ip-address = "10.0.0.2";
|
||||
# This is just an alias for clunk's primary interface
|
||||
};
|
||||
|
||||
google-wifi = {
|
||||
ip-address = "10.0.0.11";
|
||||
mac-address = "70:3a:cb:c0:3b:09";
|
||||
};
|
||||
|
||||
pselby-work = {
|
||||
ip-address = "10.0.0.151";
|
||||
mac-address = "00:50:b6:aa:bd:b3";
|
||||
};
|
||||
|
||||
downstairs-desktop = {
|
||||
ip-address = "10.0.0.100";
|
||||
mac-address = "90:b1:1c:8e:29:cf";
|
||||
};
|
||||
|
||||
upstairs-desktop = {
|
||||
ip-address = "10.0.0.101";
|
||||
mac-address = "80:e8:2c:22:65:c2";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,343 +0,0 @@
|
|||
{ lib, config, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
admin = "niten@fudo.org";
|
||||
|
||||
local-domain = "sea.fudo.org";
|
||||
|
||||
gateway = "10.0.0.1";
|
||||
|
||||
nameservers = [ "10.0.0.1" ];
|
||||
|
||||
in {
|
||||
|
||||
config = mkIf (config.fudo.common.site == "seattle") {
|
||||
|
||||
time.timeZone = "America/Los_Angeles";
|
||||
|
||||
services.printing = { enable = true; };
|
||||
|
||||
services.cron = { mailto = admin; };
|
||||
|
||||
krb5.libdefaults.default_realm = "FUDO.ORG";
|
||||
|
||||
networking = {
|
||||
domain = local-domain;
|
||||
search = [ local-domain "fudo.org" ];
|
||||
firewall.enable = false;
|
||||
nameservers = nameservers;
|
||||
|
||||
# Don't set the gateway if we ARE the gateway.
|
||||
# This is the most generic way I can think of to do that. local-network is really
|
||||
# about running all the local servers (DNS, DHCP, and providing gateway).
|
||||
defaultGateway =
|
||||
optionalString (config.fudo.local-network.enable != true) gateway;
|
||||
|
||||
enableIPv6 = true;
|
||||
|
||||
# Necessary to make sure than Kerberos and Avahi both work (the former
|
||||
# needs the full reverse-lookup name of the server, the latter wants
|
||||
# `hostname` to return just the host itself.
|
||||
hosts = {
|
||||
"127.0.0.1" = [
|
||||
"${config.networking.hostName}.${local-domain}"
|
||||
config.networking.hostName
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
users.extraUsers = {
|
||||
guest = {
|
||||
isNormalUser = true;
|
||||
uid = 1000;
|
||||
description = "Guest User";
|
||||
extraGroups =
|
||||
[ "audio" "video" "disk" "floppy" "lp" "cdrom" "tape" "input" ];
|
||||
};
|
||||
ken = {
|
||||
isNormalUser = true;
|
||||
uid = 10035;
|
||||
createHome = true;
|
||||
description = "Ken Selby";
|
||||
extraGroups =
|
||||
[ "audio" "video" "disk" "floppy" "lp" "cdrom" "tape" "input" ];
|
||||
group = "users";
|
||||
home = "/home/selby/ken";
|
||||
hashedPassword =
|
||||
"$6$EwK9fpbH8$gYVzYY1IYw2/G0wCeUxXrZZqvjWCkCZbBqCOhxowbMuYtC5G0vp.AoYhVKWOJcHJM2c7TdPmAdnhLIe2KYStf.";
|
||||
};
|
||||
xiaoxuan = {
|
||||
isNormalUser = true;
|
||||
uid = 10065;
|
||||
createHome = true;
|
||||
description = "Xiaoxuan Jin";
|
||||
extraGroups =
|
||||
[ "audio" "video" "disk" "floppy" "lp" "cdrom" "tape" "input" ];
|
||||
group = "users";
|
||||
home = "/home/xiaoxuan";
|
||||
hashedPassword =
|
||||
"$6$C8lYHrK7KvdKm/RE$cHZ2hg5gEOEjTV8Zoayik8sz5h.Vh0.ClCgOlQn8l/2Qx/qdxqZ7xCsAZ1GZ.IEyESfhJeJbjLpykXDwPpfVF0";
|
||||
};
|
||||
kevin = {
|
||||
isNormalUser = true;
|
||||
createHome = true;
|
||||
home = "/home/kevin";
|
||||
hashedPassword = "";
|
||||
};
|
||||
};
|
||||
|
||||
fileSystems."/mnt/documents" = {
|
||||
device = "whitedwarf.${local-domain}:/volume1/Documents";
|
||||
fsType = "nfs4";
|
||||
};
|
||||
fileSystems."/mnt/downloads" = {
|
||||
device = "whitedwarf.${local-domain}:/volume1/Downloads";
|
||||
fsType = "nfs4";
|
||||
};
|
||||
fileSystems."/mnt/music" = {
|
||||
device = "doraemon.${local-domain}:/volume1/Music";
|
||||
fsType = "nfs4";
|
||||
};
|
||||
fileSystems."/mnt/video" = {
|
||||
device = "doraemon.${local-domain}:/volume1/Video";
|
||||
fsType = "nfs4";
|
||||
};
|
||||
# fileSystems."/mnt/security" = {
|
||||
# device = "panopticon.${local-domain}:/srv/kerberos/data";
|
||||
# fsType = "nfs4";
|
||||
# };
|
||||
fileSystems."/mnt/cargo_video" = {
|
||||
device = "cargo.${local-domain}:/volume1/video";
|
||||
fsType = "nfs4";
|
||||
};
|
||||
fileSystems."/mnt/photo" = {
|
||||
device = "cargo.${local-domain}:/volume1/pictures";
|
||||
fsType = "nfs4";
|
||||
};
|
||||
|
||||
fudo.common.domain = "sea.fudo.org";
|
||||
|
||||
fudo.local-network = {
|
||||
|
||||
domain = "${local-domain}";
|
||||
|
||||
aliases = {
|
||||
kadmin = "nostromo";
|
||||
kdc = "nostromo";
|
||||
photo = "doraemon";
|
||||
music = "doraemon";
|
||||
panopticon = "lambda";
|
||||
panopticon-od = "lambda";
|
||||
ipfs = "nostromo";
|
||||
hole = "nostromo";
|
||||
pihole = "nostromo";
|
||||
dns-hole = "nostromo";
|
||||
mon-1 = "srv-1";
|
||||
};
|
||||
|
||||
network = "10.0.0.0/16";
|
||||
|
||||
dhcp-dynamic-network = "10.0.1.0/24";
|
||||
|
||||
enable-reverse-mappings = true;
|
||||
|
||||
srv-records = {
|
||||
tcp = {
|
||||
domain = [{
|
||||
port = 53;
|
||||
host = "nostromo.sea.fudo.org";
|
||||
}];
|
||||
kerberos = [{
|
||||
port = 88;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
kerberos-adm = [{
|
||||
port = 88;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
ssh = [{
|
||||
port = 22;
|
||||
host = "nostromo.sea.fudo.org";
|
||||
}];
|
||||
ldap = [{
|
||||
port = 389;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
};
|
||||
|
||||
udp = {
|
||||
domain = [{
|
||||
port = 53;
|
||||
host = "nostromo.sea.fudo.org";
|
||||
}];
|
||||
kerberos = [{
|
||||
port = 88;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
kerboros-master = [{
|
||||
port = 88;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
kpasswd = [{
|
||||
port = 464;
|
||||
host = "france.fudo.org";
|
||||
}];
|
||||
};
|
||||
};
|
||||
|
||||
hosts = {
|
||||
nostromo = {
|
||||
ip-address = "10.0.0.1";
|
||||
mac-address = "46:54:76:06:f1:10";
|
||||
};
|
||||
lm = {
|
||||
ip-address = "10.0.0.2";
|
||||
mac-address = "00:23:7d:e6:d9:ea";
|
||||
};
|
||||
lambda = {
|
||||
ip-address = "10.0.0.3";
|
||||
mac-address = "02:50:f6:52:9f:9d";
|
||||
};
|
||||
switch-master = {
|
||||
ip-address = "10.0.0.5";
|
||||
mac-address = "00:14:1C:B6:BB:40";
|
||||
};
|
||||
google-wifi = {
|
||||
ip-address = "10.0.0.7";
|
||||
mac-address = "7C:D9:5C:9F:6F:E9";
|
||||
};
|
||||
# lm = {
|
||||
# ip-address = "10.0.0.21";
|
||||
# mac-address = "52:54:00:D8:34:92";
|
||||
# };
|
||||
cam-entrance = {
|
||||
ip-address = "10.0.0.31";
|
||||
mac-address = "9c:8e:cd:0e:99:7b";
|
||||
};
|
||||
cam-driveway = {
|
||||
ip-address = "10.0.0.32";
|
||||
mac-address = "9c:8e:cd:0d:3b:09";
|
||||
};
|
||||
cam-deck = {
|
||||
ip-address = "10.0.0.33";
|
||||
mac-address = "9c:8e:cd:0e:98:c8";
|
||||
};
|
||||
cargo = {
|
||||
ip-address = "10.0.0.50";
|
||||
mac-address = "00:11:32:75:d8:b7";
|
||||
};
|
||||
whitedwarf = {
|
||||
ip-address = "10.0.0.51";
|
||||
mac-address = "00:11:32:12:14:1d";
|
||||
};
|
||||
doraemon = {
|
||||
ip-address = "10.0.0.52";
|
||||
mac-address = "00:11:32:0a:06:c5";
|
||||
};
|
||||
android = {
|
||||
ip-address = "10.0.0.81";
|
||||
mac-address = "00:16:3e:43:39:fc";
|
||||
};
|
||||
retro-wired = {
|
||||
ip-address = "10.0.0.82";
|
||||
mac-address = "dc:a6:32:6b:57:43";
|
||||
};
|
||||
retro = {
|
||||
ip-address = "10.0.0.83";
|
||||
mac-address = "dc:a6:32:6b:57:45";
|
||||
};
|
||||
monolith = {
|
||||
ip-address = "10.0.0.100";
|
||||
mac-address = "6c:62:6d:c8:b0:d8";
|
||||
};
|
||||
taipan = {
|
||||
ip-address = "10.0.0.107";
|
||||
mac-address = "52:54:00:34:c4:78";
|
||||
};
|
||||
spark = {
|
||||
ip-address = "10.0.0.108";
|
||||
mac-address = "78:24:af:04:f7:dd";
|
||||
};
|
||||
hyperion = {
|
||||
ip-address = "10.0.0.109";
|
||||
mac-address = "52:54:00:33:46:de";
|
||||
};
|
||||
zbox = {
|
||||
ip-address = "10.0.0.110";
|
||||
mac-address = "02:dd:80:52:83:9b";
|
||||
};
|
||||
ubiquiti-wifi = {
|
||||
ip-address = "10.0.0.126";
|
||||
mac-address = "04:18:d6:20:48:fb";
|
||||
};
|
||||
generator-wireless = {
|
||||
ip-address = "10.0.0.130";
|
||||
mac-address = "B8:27:EB:A6:32:26";
|
||||
};
|
||||
brother-wireless = {
|
||||
ip-address = "10.0.0.160";
|
||||
mac-address = "c0:38:96:64:49:65";
|
||||
};
|
||||
nest = {
|
||||
ip-address = "10.0.0.176";
|
||||
mac-address = "18:b4:30:16:7c:5a";
|
||||
};
|
||||
xixi-phone = {
|
||||
ip-address = "10.0.0.193";
|
||||
mac-address = "48:43:7c:75:89:42";
|
||||
};
|
||||
ipad = {
|
||||
ip-address = "10.0.0.202";
|
||||
mac-address = "9c:35:eb:48:6e:71";
|
||||
};
|
||||
cam-front = {
|
||||
ip-address = "10.0.0.203";
|
||||
mac-address = "c4:d6:55:3e:b4:c3";
|
||||
};
|
||||
family-tv = {
|
||||
ip-address = "10.0.0.205";
|
||||
mac-address = "84:a4:66:3a:b1:f8";
|
||||
};
|
||||
babycam = {
|
||||
ip-address = "10.0.0.206";
|
||||
mac-address = "08:ea:40:59:5f:9e";
|
||||
};
|
||||
workphone = {
|
||||
ip-address = "10.0.0.211";
|
||||
mac-address = "a8:8e:24:5c:12:67";
|
||||
};
|
||||
chromecast-2 = {
|
||||
ip-address = "10.0.0.215";
|
||||
mac-address = "a4:77:33:59:a2:ba";
|
||||
};
|
||||
front-light = {
|
||||
ip-address = "10.0.0.221";
|
||||
mac-address = "94:10:3e:48:94:ed";
|
||||
};
|
||||
|
||||
# Ceph network
|
||||
srv-1 = {
|
||||
ip-address = "10.0.10.1";
|
||||
mac-address = "02:65:d7:00:7d:1b";
|
||||
};
|
||||
node-1 = {
|
||||
ip-address = "10.0.10.101";
|
||||
mac-address = "00:1e:06:36:81:cf";
|
||||
};
|
||||
node-2 = {
|
||||
ip-address = "10.0.10.102";
|
||||
mac-address = "00:1e:06:36:ec:3e";
|
||||
};
|
||||
node-3 = {
|
||||
ip-address = "10.0.10.103";
|
||||
mac-address = "00:1e:06:36:ec:4b";
|
||||
};
|
||||
node-4 = {
|
||||
ip-address = "10.0.10.104";
|
||||
mac-address = "00:1e:06:36:dd:8c";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
replicator = {
|
||||
description = "Database Replicator";
|
||||
hashed-password = "{SHA}HpiRMyxLR+0ZFHz/COvG9lcNYyQ=";
|
||||
};
|
||||
|
||||
auth_reader = {
|
||||
description = "System Authenticator";
|
||||
hashed-password = "{MD5}N36/kQ64mev1HARddvVk7Q==";
|
||||
};
|
||||
|
||||
user_db_reader = {
|
||||
description = "User Database Reader";
|
||||
hashed-password = "{SSHA}IVKhrB+wMOCI/CCzbJW8sNDbH67ZTMBv";
|
||||
};
|
||||
|
||||
jabber = {
|
||||
description = "Jabber Server";
|
||||
hashed-password = "{SSHA}KlQpe0n+NP0WcJUniHTD+JzUugzLo8Ib";
|
||||
};
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
# A map of user to a list of email aliases (better for users with multiple nicknames)
|
||||
|
||||
{
|
||||
"niten@fudo.link" = [
|
||||
"ertian@fudo.org"
|
||||
"peter@fudo.org"
|
||||
"peter@fudo.link"
|
||||
"pselby@fudo.org"
|
||||
"yiliu@fudo.org"
|
||||
"forum@selby.ca"
|
||||
|
||||
"peter@selby.ca"
|
||||
];
|
||||
|
||||
"xiaoxuan@fudo.org" = [
|
||||
"xixi@fudo.org"
|
||||
"claire@fudo.org"
|
||||
|
||||
"xixi@selby.ca"
|
||||
"claire@selby.ca"
|
||||
];
|
||||
|
||||
"reaper@fudo.org" = [
|
||||
"cricket@fudo.org"
|
||||
"jstewart@fudo.org"
|
||||
"jonathan@fudo.org"
|
||||
"reaper@fudo.link"
|
||||
];
|
||||
|
||||
"swaff@fudo.org" = [ "mark@fudo.org" ];
|
||||
|
||||
"ken@selby.ca" = [ "kselby@selby.ca" ];
|
||||
}
|
442
fudo/users.nix
442
fudo/users.nix
|
@ -1,442 +0,0 @@
|
|||
# Generate a hashed password using slappasswd.
|
||||
|
||||
{
|
||||
niten = {
|
||||
uid = 10000;
|
||||
group = "admin";
|
||||
common-name = "Peter Selby";
|
||||
hashed-password = "{SSHA}dF/5NGkafL8M1kpa3LYZKdh0Pc7a02gA";
|
||||
};
|
||||
|
||||
andrew = {
|
||||
uid = 10001;
|
||||
group = "selby";
|
||||
common-name = "Andrew Selby";
|
||||
hashed-password = "";
|
||||
};
|
||||
|
||||
animus = {
|
||||
uid = 10002;
|
||||
group = "fudo";
|
||||
common-name = "James Frazer";
|
||||
hashed-password = "";
|
||||
};
|
||||
|
||||
ark = {
|
||||
uid = 10005;
|
||||
group = "fudo";
|
||||
common-name = "Roger Wong";
|
||||
hashed-password = "";
|
||||
};
|
||||
|
||||
ben = {
|
||||
uid = 10007;
|
||||
group = "fudo";
|
||||
common-name = "Ben";
|
||||
hashed-password = "{MD5}v0jY5bADu30cAR1Uu/eWYQ==";
|
||||
};
|
||||
|
||||
chad = {
|
||||
uid = 10011;
|
||||
group = "fudo";
|
||||
common-name = "Chad Isbister";
|
||||
hashed-password = "{MD5}fQ309GUF2DvHlJ3R+5wNuA==";
|
||||
};
|
||||
|
||||
ckoo = {
|
||||
uid = 10014;
|
||||
group = "fudo";
|
||||
common-name = "Jason Bush";
|
||||
hashed-password = "{MD5}KMFeaBc7e/gVzL/QUT0mYw==";
|
||||
};
|
||||
|
||||
dana = {
|
||||
uid = 10015;
|
||||
group = "fudo";
|
||||
common-name = "Dana Eftodie";
|
||||
hashed-password = "{MD5}+ijTylKau4uot2kGMqKSTA==";
|
||||
};
|
||||
|
||||
jill = {
|
||||
uid = 10030;
|
||||
group = "fudo";
|
||||
common-name = "Jill Isbister";
|
||||
hashed-password = "{MD5}fQ309GUF2DvHlJ3R+5wNuA==";
|
||||
};
|
||||
|
||||
joker4ever = {
|
||||
uid = 10033;
|
||||
group = "fudo";
|
||||
common-name = "Jack Clarke";
|
||||
hashed-password = "{SSHA}w78XwSax9WywIDujMxEoO7o87d2LDJRo";
|
||||
};
|
||||
|
||||
ken = {
|
||||
uid = 10035;
|
||||
group = "selby";
|
||||
common-name = "Ken Selby";
|
||||
hashed-password = "{SSHA}YvtkEpqsReXcMdrzlui/ZmhIUKN42YO1";
|
||||
# hashed-password = "{SSHA}flr48Sao0/fUp8yl9zFpm8ERnI7qYTds";
|
||||
# hashed-password = "{SSHA}X8DxUcwH2Fzel5UKbGVNhC5B2vg0Prsc";
|
||||
};
|
||||
|
||||
reaper = {
|
||||
uid = 10049;
|
||||
group = "admin";
|
||||
common-name = "Jonathan Stewart";
|
||||
hashed-password = "{MD5}EBvifhJ6z9dIDx0KWkAPoQ==";
|
||||
};
|
||||
|
||||
slickoil = {
|
||||
uid = 10052;
|
||||
group = "fudo";
|
||||
common-name = "Connor Cooley";
|
||||
hashed-password = "{MD5}8Qrpagi8TYnZQdFoYe02rA==";
|
||||
};
|
||||
|
||||
splat1 = {
|
||||
uid = 10053;
|
||||
group = "fudo";
|
||||
common-name = "Matt Evans";
|
||||
hashed-password = "{MD5}JeHNutGTBMHOqFgVlYjfpw==";
|
||||
};
|
||||
|
||||
swaff = {
|
||||
uid = 10055;
|
||||
group = "fudo";
|
||||
common-name = "Mark Swaffer";
|
||||
hashed-password = "{MD5}C5gIsLsaKSvIPydu4uzhNg==";
|
||||
};
|
||||
|
||||
brian = {
|
||||
uid = 10056;
|
||||
group = "selby";
|
||||
common-name = "Brian Selby";
|
||||
hashed-password = "{crypt}$1$npZLTPEO$p2bTx8TTlCg7XNiivTJsC1";
|
||||
};
|
||||
|
||||
rob = {
|
||||
uid = 10057;
|
||||
group = "selby";
|
||||
common-name = "Robert Selby";
|
||||
hashed-password = "{crypt}HD1ESf1hAGdks";
|
||||
};
|
||||
|
||||
tarbash = {
|
||||
uid = 10059;
|
||||
group = "fudo";
|
||||
common-name = "Neville";
|
||||
hashed-password = "{crypt}$1$cE6lVNbC$PLjlE9vK77SKNKwJBKiT//";
|
||||
};
|
||||
|
||||
darryl = {
|
||||
uid = 10060;
|
||||
group = "selby";
|
||||
common-name = "Darryl Kissick";
|
||||
hashed-password = "{crypt}$1$oUNTMyKU$oUs6JqBRTPKE9A/sEzlSY0";
|
||||
};
|
||||
|
||||
ayumi = {
|
||||
uid = 10061;
|
||||
group = "fudo";
|
||||
common-name = "Ayumi Kira";
|
||||
hashed-password = "{MD5}5OkpooOLxw94nF1lOfn/ZQ==";
|
||||
};
|
||||
|
||||
saphira = {
|
||||
uid = 10063;
|
||||
group = "fudo";
|
||||
common-name = "Elizabeth Stewart";
|
||||
hashed-password = "{crypt}$1$cQ/Zq25x$fUQfUtpMB.f3rBWzttPns.";
|
||||
};
|
||||
|
||||
banen = {
|
||||
uid = 10064;
|
||||
group = "fudo";
|
||||
common-name = "Travis Neis";
|
||||
hashed-password = "{crypt}$1$cyfM/Vni$vIuirRln.MnWActOR6t8S.";
|
||||
};
|
||||
|
||||
xiaoxuan = {
|
||||
uid = 10065;
|
||||
group = "fudo";
|
||||
common-name = "Xiaoxuan Jin";
|
||||
hashed-password = "{MD5}iecbyMpyVkmOaMBzSFy58Q==";
|
||||
};
|
||||
|
||||
thibor = {
|
||||
uid = 10066;
|
||||
group = "fudo";
|
||||
common-name = "";
|
||||
hashed-password = "{crypt}$1$HzQOn3zV$ogkeS5ByWrFstYo0FhXB/.";
|
||||
};
|
||||
|
||||
flowchart = {
|
||||
uid = 10067;
|
||||
group = "fudo";
|
||||
common-name = "BH Bieterse";
|
||||
hashed-password = "{crypt}$1$lQMZ42RZ$aAOsLHP0i.yfvD1a1EVsA/";
|
||||
};
|
||||
|
||||
gubbs = {
|
||||
uid = 10068;
|
||||
group = "fudo";
|
||||
common-name = "Lorcan Gavin";
|
||||
hashed-password = "{MD5}AIf4bJZyHCnvJVL3YHRnIg==";
|
||||
};
|
||||
|
||||
debo = {
|
||||
uid = 10069;
|
||||
group = "fudo";
|
||||
common-name = "Deborah Osti";
|
||||
hashed-password = "{crypt}$1$5wEBGh/8$Ggp2JAI/rQiBXxJ89G0iq1";
|
||||
};
|
||||
|
||||
leefolio = {
|
||||
uid = 10070;
|
||||
group = "fudo";
|
||||
common-name = "Ze Artiste";
|
||||
hashed-password = "{crypt}$1$LRlAYBst$sS1bPu8yEPrdYkQhoZhAq1";
|
||||
};
|
||||
|
||||
zimm = {
|
||||
uid = 10071;
|
||||
group = "fudo";
|
||||
common-name = "Ross Drinkwater";
|
||||
hashed-password = "{SSHA}er1cgYDNPJsfLwtqYLopKMGMxiZZRGdY";
|
||||
};
|
||||
|
||||
gaijin = {
|
||||
uid = 10072;
|
||||
group = "fudo";
|
||||
common-name = "Tetsuo Torigai";
|
||||
hashed-password = "{crypt}$1$bw8hyDXm$pMLLUtlDlVLwBTZiC0Lzf0";
|
||||
};
|
||||
|
||||
anorthe = {
|
||||
uid = 10073;
|
||||
group = "fudo";
|
||||
common-name = "Bonnie Wong";
|
||||
hashed-password = "{crypt}$1$DORfHzbp$nJkk0OXd7WzYDxx8LbdMK.";
|
||||
};
|
||||
|
||||
stewartd = {
|
||||
uid = 10076;
|
||||
group = "fudo";
|
||||
common-name = "Dwight Stewart";
|
||||
hashed-password = "{MD5}e2GSmH+l4ZZ808snWsFNYw==";
|
||||
};
|
||||
|
||||
jess = {
|
||||
uid = 10078;
|
||||
group = "selby";
|
||||
common-name = "Jessica Selby";
|
||||
hashed-password = "{MD5}2tbtZre16apUTNtRIK98nQ==";
|
||||
};
|
||||
|
||||
kevin = {
|
||||
uid = 10079;
|
||||
group = "selby";
|
||||
common-name = "Kevin Selby";
|
||||
hashed-password = "{crypt}$1$UYKrkMEe$SAABgc1pCBYgPFIMepNrM.";
|
||||
};
|
||||
|
||||
theblacksun = {
|
||||
uid = 10080;
|
||||
group = "fudo";
|
||||
common-name = "Brendan Goodfellow";
|
||||
hashed-password = "{MD5}Hmw6pFYYT87nmpLp0QxcQw==";
|
||||
};
|
||||
|
||||
kris = {
|
||||
uid = 10082;
|
||||
group = "selby";
|
||||
common-name = "Kris Huberdeau";
|
||||
hashed-password = "{SSHA}RUYeAEUyblnCWa9uBzY9nwsmoksy8P3Y";
|
||||
};
|
||||
|
||||
jun = {
|
||||
uid = 10083;
|
||||
group = "fudo";
|
||||
common-name = "Junichi Suzuki";
|
||||
hashed-password = "{crypt}$1$ExfgQXb8$b1ihvMRbG2dWbnlmzzI/h.";
|
||||
};
|
||||
|
||||
jinny = {
|
||||
uid = 10084;
|
||||
group = "fudo";
|
||||
common-name = "Hye-jin Kim";
|
||||
hashed-password = "{crypt}$1$6cld82N8$5a9ovCPXSacDmK3TWDaF30";
|
||||
};
|
||||
|
||||
helen = {
|
||||
uid = 10086;
|
||||
group = "selby";
|
||||
common-name = "Helen Selby";
|
||||
hashed-password = "{SSHA}uckUXX09MjYq9++sF3f9b2IY8a9UBIxm";
|
||||
};
|
||||
|
||||
vee = {
|
||||
uid = 10087;
|
||||
group = "selby";
|
||||
common-name = "Vee Selby";
|
||||
hashed-password = "snoinuer";
|
||||
};
|
||||
|
||||
dabar = {
|
||||
uid = 10088;
|
||||
group = "fudo";
|
||||
common-name = "Dan Bernardic";
|
||||
hashed-password = "{MD5}ULrk46YUeUZQrl0+wAQiWA==";
|
||||
};
|
||||
|
||||
r3d3 = {
|
||||
uid = 10089;
|
||||
group = "fudo";
|
||||
common-name = "Derek Veroni";
|
||||
hashed-password = "{SHA}2XyijGDovUhA1/Z/XR+9h9Ia4fY=";
|
||||
};
|
||||
|
||||
laura = {
|
||||
uid = 10090;
|
||||
group = "selby";
|
||||
common-name = "Laura Selby";
|
||||
hashed-password = "{MD5}MI65czN0duIudMhYH+BU9Q==";
|
||||
};
|
||||
|
||||
tuk = {
|
||||
uid = 10091;
|
||||
group = "fudo";
|
||||
common-name = "Taku Koba";
|
||||
hashed-password = "{MD5}DQuoQluy50128r8MxAmFkQ==";
|
||||
};
|
||||
|
||||
aki = {
|
||||
uid = 10092;
|
||||
group = "fudo";
|
||||
common-name = "Akihito Mori";
|
||||
hashed-password = "{MD5}oGAt2kJGKMqX+CmfV1w/GA==";
|
||||
};
|
||||
|
||||
ansyg = {
|
||||
uid = 10095;
|
||||
group = "fudo";
|
||||
common-name = "Anseok Joo";
|
||||
hashed-password = "{MD5}AHhHl02D3uDmWhPJZ6QPOw==";
|
||||
};
|
||||
|
||||
jackie = {
|
||||
uid = 10097;
|
||||
group = "selby";
|
||||
common-name = "Jackie Selby";
|
||||
hashed-password = "{MD5}fa6JfWySlH63sITsxrTt0Q==";
|
||||
};
|
||||
|
||||
mtopf = {
|
||||
uid = 10100;
|
||||
group = "fudo";
|
||||
common-name = "Michael Topf";
|
||||
hashed-password = "{MD5}/pleD8SiLhmnRr1RVspNcA==";
|
||||
};
|
||||
|
||||
tat = {
|
||||
uid = 10101;
|
||||
group = "fudo";
|
||||
common-name = "Tatsuro Akano";
|
||||
hashed-password = "{MD5}fAV5GX8UdjsXIFjU0Ex4SA==";
|
||||
};
|
||||
|
||||
blatzkrieg = {
|
||||
uid = 10102;
|
||||
group = "fudo";
|
||||
common-name = "Brendan Blatz";
|
||||
hashed-password = "{MD5}1nE/ndFwGbfH/wLagxvt8w==";
|
||||
};
|
||||
|
||||
ellie = {
|
||||
uid = 10103;
|
||||
group = "fudo";
|
||||
common-name = "Ellie Lee";
|
||||
hashed-password = "{MD5}gzjwt+kw2nmvJ1FKFTpSZA==";
|
||||
};
|
||||
|
||||
alan = {
|
||||
uid = 10104;
|
||||
group = "fudo";
|
||||
common-name = "Alan Wong";
|
||||
hashed-password = "{MD5}WhohVE4xfo9RIOw1kG3s1Q==";
|
||||
};
|
||||
|
||||
omefire = {
|
||||
uid = 10105;
|
||||
group = "fudo";
|
||||
common-name = "Omar Mefire";
|
||||
hashed-password = "{SSHA}W6KWo26wl/nawpV++wMqsKdwrIwrait5";
|
||||
};
|
||||
|
||||
gordon = {
|
||||
uid = 10106;
|
||||
group = "fudo";
|
||||
common-name = "Gordon Stewart";
|
||||
hashed-password = "{SSHA}jaCOc1ZjCI9klVR+v676lIBOidEg7/u0";
|
||||
};
|
||||
|
||||
jeramy = {
|
||||
uid = 10107;
|
||||
group = "selby";
|
||||
common-name = "Jeramy Ewbank";
|
||||
hashed-password = "{MD5}8j8vTniyRzylmeTNUoRwWA==";
|
||||
};
|
||||
|
||||
lauren = {
|
||||
uid = 10108;
|
||||
group = "selby";
|
||||
common-name = "Lauren Hotel";
|
||||
hashed-password = "{SSHA}1q/MC5LKROlIT1nDrKrMvcFAXFtcQXIR";
|
||||
# hashed-password = "{SSHA}DKnhrycmXSu4HKWFPeBXA9xvZ0ytgXIpZA10tg==";
|
||||
};
|
||||
|
||||
# Used to send alerts from grafana
|
||||
metrics = {
|
||||
uid = 10109;
|
||||
group = "fudo";
|
||||
common-name = "Fudo Metrics";
|
||||
hashed-password = "{SSHA}FveEVy6kljQZey0xp0nF62SMlO5nATJ1";
|
||||
};
|
||||
|
||||
testuser = {
|
||||
uid = 10110;
|
||||
group = "fudo";
|
||||
common-name = "Test User";
|
||||
hashed-password = "{SSHA}LSz1WjWfjRwAM3xm+QZ71vFj997dnZC6";
|
||||
};
|
||||
|
||||
# Used to send messages from the chat server
|
||||
chat = {
|
||||
uid = 10111;
|
||||
group = "fudo";
|
||||
common-name = "Fudo Chat";
|
||||
hashed-password = "{SSHA}XDYAM2JE4PXssywRzO4tVSbn5lUZOgg7";
|
||||
};
|
||||
|
||||
kevinyinjunjie = {
|
||||
uid = 10112;
|
||||
group = "fudo";
|
||||
common-name = "Kevin";
|
||||
hashed-password = "{SSHA}1onx6HPMKCJvmLnRf1tiWFJ1D92DEtnl";
|
||||
};
|
||||
|
||||
netinfo = {
|
||||
uid = 10113;
|
||||
group = "fudo";
|
||||
common-name = "Network Info Mailer";
|
||||
hashed-password = "{SSHA}UQHfW0IzjIbRU6VV+DraxvZFWt0to3oc";
|
||||
};
|
||||
|
||||
selby-forum = {
|
||||
uid = 10114;
|
||||
group = "selby";
|
||||
common-name = "Selby Forum";
|
||||
hashed-password = "{SSHA}f7eDNuwFXRhvants5cJJ/FGtkCKheY2Q";
|
||||
};
|
||||
}
|
14
hardware.nix
14
hardware.nix
|
@ -1,14 +0,0 @@
|
|||
{ config, ... }:
|
||||
|
||||
let
|
||||
current-hostname = config.instance.hostname;
|
||||
|
||||
hardware-config = config.fudo.hosts.${current-hostname}.hardware-config;
|
||||
|
||||
import-hardware-config = hostname: {
|
||||
imports = [ hardware-config ];
|
||||
};
|
||||
in {
|
||||
imports =
|
||||
[ (import-hardware-config current-hostname) ];
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
let
|
||||
hostname = "atom";
|
||||
|
||||
in {
|
||||
|
||||
imports = [
|
||||
../defaults.nix
|
||||
../hardware-configuration.nix
|
||||
];
|
||||
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.version = 2;
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
|
||||
networking.hostName = hostname;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
glxinfo
|
||||
hll2380dw-cups
|
||||
usbutils
|
||||
];
|
||||
|
||||
fudo.common = {
|
||||
profile = "laptop";
|
||||
site = "seattle";
|
||||
};
|
||||
|
||||
hardware.cpu.amd.updateMicrocode = true;
|
||||
|
||||
programs = {
|
||||
bash.enableCompletion = true;
|
||||
};
|
||||
|
||||
fudo.laptop.use-network-manager = false;
|
||||
fudo.common.enable-gui = true;
|
||||
|
||||
hardware.opengl.driSupport32Bit = true;
|
||||
hardware.opengl.extraPackages32 = with pkgs.pkgsi686Linux; [ libva ];
|
||||
hardware.opengl.driSupport = true;
|
||||
|
||||
hardware.pulseaudio.support32Bit = true;
|
||||
|
||||
hardware.bluetooth.enable = true;
|
||||
}
|
165
hosts/clunk.nix
165
hosts/clunk.nix
|
@ -1,165 +0,0 @@
|
|||
{ lib, config, pkgs, ... }:
|
||||
|
||||
let
|
||||
hostname = "clunk";
|
||||
host-internal-ip = "10.0.0.1";
|
||||
dns-proxy-ip = "10.0.0.2";
|
||||
inherit (lib.strings) concatStringsSep;
|
||||
|
||||
in {
|
||||
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
boot = { runSize = "50%"; };
|
||||
|
||||
hardware.bluetooth.enable = false;
|
||||
|
||||
imports = [ ../defaults.nix ../hardware-configuration.nix ];
|
||||
|
||||
fudo.common = {
|
||||
profile = "server";
|
||||
site = "russell";
|
||||
};
|
||||
|
||||
fudo.local-network = {
|
||||
enable = true;
|
||||
dns-servers = [ host-internal-ip ];
|
||||
gateway = host-internal-ip;
|
||||
dhcp-interfaces = [ "intif0" ];
|
||||
dns-serve-ips = [ host-internal-ip "127.0.0.1" "127.0.1.1" "::1" ];
|
||||
# Using a pihole running in docker, see below
|
||||
recursive-resolver = "${host-internal-ip} port 5353";
|
||||
server-ip = host-internal-ip;
|
||||
};
|
||||
|
||||
networking = {
|
||||
hostName = hostname;
|
||||
|
||||
nameservers = [ host-internal-ip ];
|
||||
|
||||
# Create a bridge for VMs to use
|
||||
macvlans = {
|
||||
intif0 = {
|
||||
interface = "enp2s0";
|
||||
mode = "bridge";
|
||||
};
|
||||
};
|
||||
|
||||
firewall = {
|
||||
enable = true;
|
||||
trustedInterfaces = [ "intif0" "docker0" ];
|
||||
};
|
||||
|
||||
interfaces = {
|
||||
enp2s0.useDHCP = false;
|
||||
enp3s0.useDHCP = false;
|
||||
enp4s0.useDHCP = false;
|
||||
|
||||
enp1s0.useDHCP = true;
|
||||
|
||||
intif0 = {
|
||||
useDHCP = false;
|
||||
# Result of:
|
||||
# echo clunk-intif0|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/'
|
||||
macAddress = "02:44:d1:eb:c3:6b";
|
||||
ipv4.addresses = [
|
||||
{
|
||||
address = host-internal-ip;
|
||||
prefixLength = 22;
|
||||
}
|
||||
|
||||
{
|
||||
address = dns-proxy-ip;
|
||||
prefixLength = 32;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
nat = {
|
||||
enable = true;
|
||||
externalInterface = "enp1s0";
|
||||
internalInterfaces = [ "intif0" ];
|
||||
};
|
||||
};
|
||||
|
||||
fudo = {
|
||||
garbage-collector = {
|
||||
enable = true;
|
||||
timing = "hourly";
|
||||
};
|
||||
|
||||
secure-dns-proxy = {
|
||||
enable = true;
|
||||
port = 53;
|
||||
upstream-dns = [
|
||||
"https://1.1.1.1/dns-query"
|
||||
"https://1.0.0.1/dns-query"
|
||||
#"https://9.9.9.9/dns-query"
|
||||
];
|
||||
bootstrap-dns = "1.1.1.1";
|
||||
listen-ips = [ dns-proxy-ip ];
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [ dnsproxy ];
|
||||
|
||||
virtualisation = {
|
||||
docker = {
|
||||
enable = true;
|
||||
autoPrune.enable = true;
|
||||
enableOnBoot = true;
|
||||
};
|
||||
};
|
||||
|
||||
docker-containers = {
|
||||
pihole = {
|
||||
image = "pihole/pihole:v5.1.2";
|
||||
ports = [ "5353:53/tcp" "5353:53/udp" "3080:80/tcp" ];
|
||||
environment = {
|
||||
ServerIP = host-internal-ip;
|
||||
VIRTUAL_HOST = "dns-hole.rus.selby.ca";
|
||||
# Not working?
|
||||
DNS1 = dns-proxy-ip;
|
||||
#DNS1 = "1.1.1.1";
|
||||
};
|
||||
volumes = [
|
||||
"/srv/pihole/etc-pihole/:/etc/pihole/"
|
||||
"/srv/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
|
||||
recommendedOptimisation = true;
|
||||
recommendedGzipSettings = true;
|
||||
|
||||
virtualHosts = {
|
||||
"dns-hole.rus.selby.ca" = {
|
||||
serverAliases = [
|
||||
"pihole.rus.selby.ca"
|
||||
"hole.rus.selby.ca"
|
||||
"pihole"
|
||||
"dns-hole"
|
||||
"hole"
|
||||
];
|
||||
|
||||
locations."/" = {
|
||||
proxyPass = "http://127.0.0.1:3080";
|
||||
|
||||
extraConfig = ''
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-By $server_addr:$server_port;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
598
hosts/france.nix
598
hosts/france.nix
|
@ -1,598 +0,0 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
domain = "fudo.org";
|
||||
hostname = "france.${domain}";
|
||||
mail-hostname = "mail.${domain}";
|
||||
host_ipv4 = "208.81.3.117";
|
||||
# Use a special IP for git.fudo.org, since it needs to be SSH-able
|
||||
link_ipv4 = "208.81.3.126";
|
||||
all-hostnames = [ ];
|
||||
|
||||
acme-private-key = hostname: "/var/lib/acme/${hostname}/key.pem";
|
||||
acme-certificate = hostname: "/var/lib/acme/${hostname}/fullchain.pem";
|
||||
acme-ca = "/etc/nixos/static/letsencryptauthorityx3.pem";
|
||||
|
||||
fudo-ca = "/etc/nixos/static/fudo_ca.pem";
|
||||
|
||||
minecraft-data-dir = "/srv/minecraft/data";
|
||||
|
||||
system-mail-directory = "/srv/mail";
|
||||
|
||||
in {
|
||||
|
||||
boot.loader.grub = {
|
||||
enable = true;
|
||||
version = 2;
|
||||
device = "/dev/sda";
|
||||
};
|
||||
|
||||
imports = [
|
||||
../hardware-configuration.nix
|
||||
../defaults.nix
|
||||
./france/jabber.nix
|
||||
./france/backplane.nix
|
||||
./france/selby-forum.nix
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
docker
|
||||
lxd
|
||||
multipath-tools
|
||||
nix-prefetch-docker
|
||||
powerdns
|
||||
tshark
|
||||
vanilla-forum
|
||||
];
|
||||
|
||||
fudo.common = {
|
||||
# Sets some server-common settings. See /etc/nixos/fudo/profiles/...
|
||||
profile = "server";
|
||||
|
||||
# Sets some common site-specific settings: gateway, monitoring, etc. See /etc/nixos/fudo/sites/...
|
||||
site = "portage";
|
||||
|
||||
domain = domain;
|
||||
|
||||
www-root = /srv/www;
|
||||
|
||||
local-networks =
|
||||
[ "208.81.1.128/28" "208.81.3.112/28" "172.17.0.0/16" "127.0.0.0/8" ];
|
||||
};
|
||||
|
||||
fudo.prometheus = {
|
||||
enable = true;
|
||||
hostname = "metrics.fudo.org";
|
||||
service-discovery-dns = {
|
||||
node = [ "node._metrics._tcp.fudo.org" ];
|
||||
postfix = [ "postfix._metrics._tcp.fudo.org" ];
|
||||
dovecot = [ "dovecot._metrics._tcp.fudo.org" ];
|
||||
rspamd = [ "rspamd._metrics._tcp.fudo.org" ];
|
||||
};
|
||||
};
|
||||
|
||||
fudo.grafana = {
|
||||
enable = true;
|
||||
hostname = "monitor.fudo.org";
|
||||
smtp-username = "metrics";
|
||||
smtp-password-file = "/srv/grafana/secure/smtp.passwd";
|
||||
admin-password-file = "/srv/grafana/secure/admin.passwd";
|
||||
secret-key-file = "/srv/grafana/secure/secret.key";
|
||||
prometheus-host = "metrics.fudo.org";
|
||||
database = {
|
||||
name = "grafana";
|
||||
hostname = "localhost";
|
||||
user = "grafana";
|
||||
password-file = /srv/grafana/secure/db.passwd;
|
||||
};
|
||||
};
|
||||
|
||||
# So that grafana waits for postgresql
|
||||
systemd.services.grafana.after = [ "postgresql.service" ];
|
||||
|
||||
fudo.postgresql = {
|
||||
enable = true;
|
||||
ssl-private-key = (acme-private-key hostname);
|
||||
ssl-certificate = (acme-certificate hostname);
|
||||
keytab = "/srv/postgres/secure/postgres.keytab";
|
||||
|
||||
# We allow connections from local networks. Auth is still required. Outside
|
||||
# of these networks, no access is allowed.
|
||||
#
|
||||
# TODO: that's probably too strict, allow kerberos connections from anywhere?
|
||||
local-networks = [
|
||||
"208.81.1.128/28"
|
||||
"208.81.3.112/28"
|
||||
"192.168.11.1/24"
|
||||
"127.0.0.1/8"
|
||||
"172.17.0.0/16"
|
||||
];
|
||||
|
||||
users = {
|
||||
fudo_git = {
|
||||
password-file = "/srv/git/secure/db.passwd";
|
||||
databases = {
|
||||
fudo_git = {
|
||||
access = "CONNECT";
|
||||
entity-access = {
|
||||
"ALL TABLES IN SCHEMA public" = "SELECT,INSERT,UPDATE,DELETE";
|
||||
"ALL SEQUENCES IN SCHEMA public" = "SELECT,UPDATE";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
grafana = {
|
||||
password-file = "/srv/grafana/secure/db.passwd";
|
||||
databases = {
|
||||
grafana = {
|
||||
access = "CONNECT";
|
||||
entity-access = {
|
||||
"ALL TABLES IN SCHEMA public" = "SELECT,INSERT,UPDATE,DELETE";
|
||||
"ALL SEQUENCES IN SCHEMA public" = "SELECT,UPDATE";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
mattermost = {
|
||||
password-file = "/srv/mattermost/secure/db.passwd";
|
||||
databases = {
|
||||
mattermost = {
|
||||
access = "CONNECT";
|
||||
entity-access = {
|
||||
"ALL TABLES IN SCHEMA public" = "SELECT,INSERT,UPDATE,DELETE";
|
||||
"ALL SEQUENCES IN SCHEMA public" = "SELECT,UPDATE";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
webmail = {
|
||||
password-file = "/srv/webmail/secure/db.passwd";
|
||||
databases = {
|
||||
webmail = {
|
||||
access = "CONNECT";
|
||||
entity-access = {
|
||||
"ALL TABLES IN SCHEMA public" = "SELECT,INSERT,UPDATE,DELETE";
|
||||
"ALL SEQUENCES IN SCHEMA public" = "SELECT,UPDATE";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
niten = { };
|
||||
};
|
||||
|
||||
local-users = [ "niten" "fudo_git" ];
|
||||
|
||||
databases = {
|
||||
fudo_git = { users = [ "niten" ]; };
|
||||
grafana = { users = [ "niten" ]; };
|
||||
mattermost = { users = [ "niten" ]; };
|
||||
webmail = { users = [ "niten" ]; };
|
||||
};
|
||||
};
|
||||
|
||||
fudo.dns = {
|
||||
enable = true;
|
||||
|
||||
identity = "france.fudo.org";
|
||||
|
||||
nameservers = {
|
||||
ns1 = {
|
||||
ip-addresses = [ "208.81.3.117" ];
|
||||
ipv6-addresses = [ "2605:e200:d200:1:5054:ff:fe8c:9738" ];
|
||||
description = "Nameserver 1, france, in Winnipeg, MB, CA";
|
||||
rp = "reaper reaper.rp";
|
||||
};
|
||||
ns2 = {
|
||||
ip-addresses = [ "209.117.102.102" ];
|
||||
ipv6-addresses = [ "2001:470:1f16:40::2" ];
|
||||
description = "Nameserver 2, musashi, in Winnipeg, MB, CA";
|
||||
rp = "reaper reaper.rp";
|
||||
};
|
||||
ns3 = {
|
||||
ip-addresses = [ "104.131.53.95" ];
|
||||
ipv6-addresses = [ "2604:a880:800:10::8:7001" ];
|
||||
description =
|
||||
"Nameserver 3, ns2.henchmman21.net, in New York City, NY, US";
|
||||
rp = "reaper reaper.rp";
|
||||
};
|
||||
ns4 = {
|
||||
ip-addresses = [ "204.42.254.5" ];
|
||||
ipv6-addresses = [ "2001:418:3f4::5" ];
|
||||
description = "Nameserver 4, puck.nether.net, in Chicago, IL, US";
|
||||
rp = "reaper reaper.rp";
|
||||
};
|
||||
};
|
||||
|
||||
listen-ips = [ host_ipv4 ];
|
||||
|
||||
domains = { "fudo.org" = import ../fudo/fudo.org.nix { inherit config; }; };
|
||||
};
|
||||
|
||||
# Not all users need access to france; don't allow LDAP-user access.
|
||||
fudo.authentication.enable = false;
|
||||
|
||||
# But we DO run an LDAP auth server. Should be better-named.
|
||||
fudo.auth = {
|
||||
server = {
|
||||
enable = true;
|
||||
base = "dc=fudo,dc=org";
|
||||
organization = "Fudo";
|
||||
rootpw-file = "/srv/ldap/secure/root.pw";
|
||||
kerberos-host = "france.fudo.org";
|
||||
kerberos-keytab = "/srv/ldap/secure/ldap.keytab";
|
||||
|
||||
sslCert = "/srv/ldap/france.fudo.org.pem";
|
||||
sslKey = "/srv/ldap/secure/france.fudo.org-key.pem";
|
||||
sslCACert = fudo-ca;
|
||||
|
||||
# We're using fudo-generated certs for now, but we should move to ACME
|
||||
# once I can figure out how to correctly produce the ca.pem file. Until
|
||||
# then, the server will fail to start using these certs. See:
|
||||
# https://serverfault.com/a/834565
|
||||
|
||||
# sslCert = (acme-bare-cert hostname);
|
||||
# sslKey = (acme-private-key hostname);
|
||||
# sslCACert = acme-ca;
|
||||
|
||||
listen-uris = [ "ldap:///" "ldaps:///" "ldapi:///" ];
|
||||
|
||||
users = import ../fudo/users.nix;
|
||||
|
||||
groups = import ../fudo/groups.nix;
|
||||
|
||||
system-users = import ../fudo/system-users.nix;
|
||||
};
|
||||
|
||||
# Heimdal Kerberos server
|
||||
kdc = {
|
||||
enable = true;
|
||||
database-path = "/var/heimdal/heimdal";
|
||||
realm = "FUDO.ORG";
|
||||
mkey-file = "/var/heimdal/m-key";
|
||||
acl-file = "/etc/heimdal/kdc.acl";
|
||||
bind-addresses = [ host_ipv4 "127.0.0.1" "127.0.1.1" ];
|
||||
};
|
||||
};
|
||||
|
||||
# TODO: not used yet
|
||||
fudo.acme.hostnames = all-hostnames;
|
||||
|
||||
fudo.client.dns = {
|
||||
enable = true;
|
||||
ipv4 = true;
|
||||
ipv6 = true;
|
||||
user = "fudo-client";
|
||||
external-interface = "extif0";
|
||||
password-file = "/srv/client/secure/client.passwd";
|
||||
};
|
||||
|
||||
fudo.mail-server = import ../fudo/email.nix { inherit config; } // {
|
||||
enableContainer = true;
|
||||
debug = true;
|
||||
monitoring = true;
|
||||
|
||||
hostname = mail-hostname;
|
||||
|
||||
postfix.ssl-certificate = (acme-certificate mail-hostname);
|
||||
postfix.ssl-private-key = (acme-private-key mail-hostname);
|
||||
dovecot.ssl-certificate = (acme-certificate mail-hostname);
|
||||
dovecot.ssl-private-key = (acme-private-key mail-hostname);
|
||||
|
||||
state-directory = "${system-mail-directory}/var";
|
||||
mail-directory = "${system-mail-directory}/mailboxes";
|
||||
|
||||
dovecot.ldap = {
|
||||
reader-dn = "cn=user_db_reader,dc=fudo,dc=org";
|
||||
reader-passwd = fileContents /srv/ldap/secure/user_db.passwd;
|
||||
|
||||
# FIXME: use SSL once I can figure out Acme SSL cert CA for LDAP.
|
||||
server-urls = [ "ldap://france.fudo.org" ];
|
||||
};
|
||||
|
||||
clamav.enable = true;
|
||||
|
||||
dkim.signing = true;
|
||||
};
|
||||
|
||||
fudo.webmail = {
|
||||
enable = true;
|
||||
|
||||
sites = {
|
||||
"webmail.fudo.link" = {
|
||||
title = "Fudo Link Webmail";
|
||||
favicon = "/etc/nixos/static/fudo.link/favicon.ico";
|
||||
mail-server = mail-hostname;
|
||||
domain = "fudo.link";
|
||||
edit-mode = "Plain";
|
||||
layout-mode = "bottom";
|
||||
database = {
|
||||
name = "webmail";
|
||||
hostname = "localhost";
|
||||
user = "webmail";
|
||||
password-file = "/srv/webmail/secure/db.passwd";
|
||||
};
|
||||
};
|
||||
|
||||
"webmail.test.fudo.org" = {
|
||||
title = "Fudo Webmail";
|
||||
favicon = "/etc/nixos/static/fudo.org/favicon.ico";
|
||||
mail-server = mail-hostname;
|
||||
domain = "fudo.org";
|
||||
edit-mode = "Plain";
|
||||
database = {
|
||||
name = "webmail";
|
||||
hostname = "localhost";
|
||||
user = "webmail";
|
||||
password-file = "/srv/webmail/secure/db.passwd";
|
||||
};
|
||||
};
|
||||
|
||||
"webmail.fudo.org" = {
|
||||
title = "Fudo Webmail";
|
||||
favicon = "/etc/nixos/static/fudo.org/favicon.ico";
|
||||
mail-server = mail-hostname;
|
||||
domain = "fudo.org";
|
||||
edit-mode = "Plain";
|
||||
database = {
|
||||
name = "webmail";
|
||||
hostname = "localhost";
|
||||
user = "webmail";
|
||||
password-file = "/srv/webmail/secure/db.passwd";
|
||||
};
|
||||
};
|
||||
|
||||
"webmail.test.selby.ca" = {
|
||||
title = "Selby Webmail";
|
||||
favicon = "/etc/nixos/static/selby.ca/favicon.ico";
|
||||
mail-server = mail-hostname;
|
||||
domain = "selby.ca";
|
||||
database = {
|
||||
name = "webmail";
|
||||
hostname = "localhost";
|
||||
user = "webmail";
|
||||
password-file = "/srv/webmail/secure/db.passwd";
|
||||
};
|
||||
};
|
||||
|
||||
"webmail.selby.ca" = {
|
||||
title = "Selby Webmail";
|
||||
favicon = "/etc/nixos/static/selby.ca/favicon.ico";
|
||||
mail-server = mail-hostname;
|
||||
domain = "selby.ca";
|
||||
database = {
|
||||
name = "webmail";
|
||||
hostname = "localhost";
|
||||
user = "webmail";
|
||||
password-file = "/srv/webmail/secure/db.passwd";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
fudo.chat = {
|
||||
enable = true;
|
||||
|
||||
hostname = "chat.fudo.org";
|
||||
site-name = "Fudo Chat";
|
||||
smtp-server = "mail.fudo.org";
|
||||
smtp-user = "chat";
|
||||
smtp-password-file = "/srv/mattermost/secure/smtp.passwd";
|
||||
database = {
|
||||
name = "mattermost";
|
||||
hostname = "localhost";
|
||||
user = "mattermost";
|
||||
password-file = "/srv/mattermost/secure/db.passwd";
|
||||
};
|
||||
};
|
||||
|
||||
fudo.git = {
|
||||
enable = true;
|
||||
hostname = "git.fudo.org";
|
||||
site-name = "Fudo Git";
|
||||
user = "fudo_git";
|
||||
database = {
|
||||
user = "fudo_git";
|
||||
password-file = /srv/git/secure/db.passwd;
|
||||
hostname = "127.0.0.1";
|
||||
name = "fudo_git";
|
||||
};
|
||||
repository-dir = /srv/git/repo;
|
||||
state-dir = /srv/git/state;
|
||||
ssh = {
|
||||
listen-ip = link_ipv4;
|
||||
listen-port = 2222;
|
||||
};
|
||||
};
|
||||
|
||||
networking = {
|
||||
hostName = hostname;
|
||||
|
||||
dhcpcd.enable = false;
|
||||
useDHCP = false;
|
||||
|
||||
# TODO: fix IPv6
|
||||
enableIPv6 = true;
|
||||
|
||||
# Create a bridge for VMs to use
|
||||
macvlans = {
|
||||
extif0 = {
|
||||
interface = "enp4s0f0";
|
||||
mode = "bridge";
|
||||
};
|
||||
extif1 = {
|
||||
interface = "enp4s0f0";
|
||||
mode = "bridge";
|
||||
};
|
||||
intif0 = {
|
||||
interface = "enp4s0f1";
|
||||
mode = "bridge";
|
||||
};
|
||||
};
|
||||
|
||||
interfaces = {
|
||||
extif0 = {
|
||||
# result of:
|
||||
# echo $FQDN-extif|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/'
|
||||
macAddress = "02:d4:e8:3b:10:2f";
|
||||
ipv4.addresses = [{
|
||||
address = host_ipv4;
|
||||
prefixLength = 28;
|
||||
}];
|
||||
};
|
||||
extif1 = {
|
||||
macAddress = "02:6d:e2:e1:ad:ca";
|
||||
ipv4.addresses = [{
|
||||
address = link_ipv4;
|
||||
prefixLength = 28;
|
||||
}];
|
||||
};
|
||||
intif0 = {
|
||||
# result of:
|
||||
# echo $FQDN-intif|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/'
|
||||
macAddress = "02:ba:ba:e9:08:21";
|
||||
ipv4.addresses = [{
|
||||
address = "192.168.11.1";
|
||||
prefixLength = 24;
|
||||
}];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
hardware.bluetooth.enable = false;
|
||||
|
||||
virtualisation = {
|
||||
docker = {
|
||||
enable = true;
|
||||
enableOnBoot = true;
|
||||
|
||||
autoPrune = { enable = true; };
|
||||
};
|
||||
|
||||
lxd = { enable = true; };
|
||||
};
|
||||
|
||||
fileSystems = {
|
||||
"/srv/archiva" = {
|
||||
fsType = "btrfs";
|
||||
options = [ "subvol=archiva" ];
|
||||
label = "pool0";
|
||||
};
|
||||
"/srv/grafana" = {
|
||||
fsType = "btrfs";
|
||||
options = [ "subvol=grafana" ];
|
||||
label = "pool0";
|
||||
};
|
||||
"${system-mail-directory}" = {
|
||||
fsType = "btrfs";
|
||||
options = [ "subvol=mail" ];
|
||||
label = "pool0";
|
||||
};
|
||||
"/srv/gitlab" = {
|
||||
fsType = "btrfs";
|
||||
options = [ "subvol=gitlab" ];
|
||||
label = "pool0";
|
||||
};
|
||||
"/var/lib/lxd/storage-pools/pool0" = {
|
||||
fsType = "btrfs";
|
||||
label = "pool0";
|
||||
device = "/dev/disk/by-label/pool0";
|
||||
};
|
||||
"/var/lib/lxd/storage-pools/pool1" = {
|
||||
fsType = "btrfs";
|
||||
label = "pool1";
|
||||
device = "/dev/france-user/fudo-user";
|
||||
};
|
||||
};
|
||||
|
||||
users = {
|
||||
extraUsers = {
|
||||
archiva = {
|
||||
isNormalUser = false;
|
||||
group = "nogroup";
|
||||
uid = 8001;
|
||||
};
|
||||
|
||||
fudo_git = {
|
||||
isNormalUser = false;
|
||||
uid = 8006;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
security.acme.certs = {
|
||||
"archiva.fudo.org".email = config.fudo.common.admin-email;
|
||||
"git.fudo.org".email = config.fudo.common.admin-email;
|
||||
"mail.fudo.org".email = config.fudo.common.admin-email;
|
||||
};
|
||||
|
||||
services = {
|
||||
|
||||
nginx = {
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedTlsSettings = true;
|
||||
|
||||
virtualHosts = {
|
||||
"archiva.fudo.org" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
|
||||
locations."/" = {
|
||||
proxyPass = "http://127.0.0.1:8001";
|
||||
extraConfig = ''
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-By $server_addr:$server_port;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
# Needed to grab a cert for the mail server.
|
||||
"mail.fudo.org" = {
|
||||
enableACME = true;
|
||||
# Stopped relocating all because we need /metrics/... paths to remain unforwarded
|
||||
locations."/" = {
|
||||
return = "301 https://webmail.fudo.org$request_uri";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
docker-containers = {
|
||||
archiva = {
|
||||
image = "xetusoss/archiva";
|
||||
ports = [ "127.0.0.1:8001:8080" ];
|
||||
# Ugly: name-to-uid lookup fails.
|
||||
user = toString config.users.users.archiva.uid;
|
||||
volumes = [ "/srv/archiva:/archiva-data" ];
|
||||
environment = {
|
||||
# Not directly connected to the world anyway
|
||||
SSL_ENABLED = "false";
|
||||
PROXY_BASE_URL = "https://archiva.fudo.org/";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
fudo.ipfs = {
|
||||
enable = true;
|
||||
users = [ "niten" "reaper" ];
|
||||
api-address = "/ip4/${host_ipv4}/tcp/5001";
|
||||
};
|
||||
|
||||
###
|
||||
# Minecraft
|
||||
###
|
||||
|
||||
fudo.minecraft-server = {
|
||||
enable = true;
|
||||
package = pkgs.minecraft-server_1_16_4;
|
||||
data-dir = minecraft-data-dir;
|
||||
world-name = "selbyland";
|
||||
motd = "Welcome to the Selby Minecraft server.";
|
||||
};
|
||||
}
|
|
@ -1,121 +0,0 @@
|
|||
{ pkgs, lib, config, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
|
||||
in {
|
||||
config = {
|
||||
users = {
|
||||
users = {
|
||||
backplane-powerdns = {
|
||||
isSystemUser = true;
|
||||
};
|
||||
backplane-dns = {
|
||||
isSystemUser = true;
|
||||
};
|
||||
};
|
||||
|
||||
groups = {
|
||||
backplane-powerdns = {
|
||||
members = [ "backplane-powerdns" ];
|
||||
};
|
||||
backplane-dns = {
|
||||
members = [ "backplane-dns" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
fudo = {
|
||||
password.file-generator = {
|
||||
dns_backplane_powerdns = {
|
||||
file = "/srv/backplane/dns/secure/db_powerdns.passwd";
|
||||
user = config.services.postgresql.superUser;
|
||||
group = "backplane-powerdns";
|
||||
restart-services = [
|
||||
"backplane-dns-config-generator.service"
|
||||
"postgresql-password-setter.service"
|
||||
"backplane-powerdns.service"
|
||||
];
|
||||
};
|
||||
dns_backplane_database = {
|
||||
file = "/srv/backplane/dns/secure/db_backplane.passwd";
|
||||
user = config.services.postgresql.superUser;
|
||||
group = "backplane-dns";
|
||||
restart-services = [
|
||||
"backplane-dns.service"
|
||||
"postgresql-password-setter.service"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
postgresql = {
|
||||
enable = true;
|
||||
required-services = [ "fudo-passwords.target" ];
|
||||
|
||||
users = {
|
||||
backplane_powerdns = {
|
||||
password-file = "/srv/backplane/dns/secure/db_powerdns.passwd";
|
||||
databases = {
|
||||
backplane_dns = {
|
||||
access = "CONNECT";
|
||||
# entity-access = {
|
||||
# "ALL TABLES IN SCHEMA public" = "SELECT";
|
||||
# };
|
||||
entity-access = {
|
||||
"ALL TABLES IN SCHEMA public" = "SELECT,INSERT,UPDATE,DELETE";
|
||||
"ALL SEQUENCES IN SCHEMA public" = "SELECT,UPDATE";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
backplane_dns = {
|
||||
password-file = "/srv/backplane/dns/secure/db_backplane.passwd";
|
||||
databases = {
|
||||
backplane_dns = {
|
||||
access = "CONNECT";
|
||||
entity-access = {
|
||||
"ALL TABLES IN SCHEMA public" = "SELECT,INSERT,UPDATE,DELETE";
|
||||
"ALL SEQUENCES IN SCHEMA public" = "SELECT,UPDATE";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
databases = {
|
||||
backplane_dns = {
|
||||
users = ["niten"];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
backplane.dns = {
|
||||
enable = true;
|
||||
listen-v4-addresses = [ "208.81.3.126" ];
|
||||
listen-v6-addresses = [ "[2605:e200:d200:1:6d:e2ff:fee1:adca]" ];
|
||||
required-services = [ "fudo-passwords.target" ];
|
||||
user = "backplane-dns";
|
||||
group = "backplane-dns";
|
||||
database = {
|
||||
username = "backplane_powerdns";
|
||||
database = "backplane_dns";
|
||||
# Uses an IP to avoid cyclical dependency...not really relevant, but
|
||||
# whatever
|
||||
host = "127.0.0.1";
|
||||
password-file = "/srv/backplane/dns/secure/db_powerdns.passwd";
|
||||
};
|
||||
backplane = {
|
||||
host = "backplane.fudo.org";
|
||||
role = "service-dns";
|
||||
password-file = "/srv/backplane/dns/secure/backplane.passwd";
|
||||
database = {
|
||||
username = "backplane_dns";
|
||||
database = "backplane_dns";
|
||||
host = "127.0.0.1";
|
||||
password-file = "/srv/backplane/dns/secure/db_backplane.passwd";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,180 +0,0 @@
|
|||
<?php if (!defined('APPLICATION')) exit();
|
||||
// DO NOT EDIT THIS FILE. If you want to override the settings in this file then edit config.php.
|
||||
// This is the global application configuration file that sets up default values for configuration settings.
|
||||
$Configuration = [];
|
||||
|
||||
// Auto-enable some addons.
|
||||
$Configuration['EnabledPlugins']['stubcontent'] = true;
|
||||
$Configuration['EnabledPlugins']['swagger-ui'] = true;
|
||||
$Configuration['EnabledApplications']['Dashboard'] = 'dashboard';
|
||||
$Configuration['EnabledPlugins']['rich-editor'] = true;
|
||||
|
||||
// ImageUpload
|
||||
$Configuration['ImageUpload']['Limits']['Enabled'] = false;
|
||||
$Configuration['ImageUpload']['Limits']['Width'] = '1000';
|
||||
$Configuration['ImageUpload']['Limits']['Height'] = '1400';
|
||||
|
||||
// Database defaults.
|
||||
$Configuration['Database']['Engine'] = 'MySQL';
|
||||
$Configuration['Database']['Host'] = 'dbhost';
|
||||
$Configuration['Database']['Name'] = 'dbname';
|
||||
$Configuration['Database']['User'] = 'dbuser';
|
||||
$Configuration['Database']['Password'] = '';
|
||||
$Configuration['Database']['CharacterEncoding'] = 'utf8mb4';
|
||||
$Configuration['Database']['DatabasePrefix'] = 'GDN_';
|
||||
$Configuration['Database']['ExtendedProperties']['Collate'] = 'utf8mb4_unicode_ci';
|
||||
$Configuration['Database']['ConnectionOptions'] = [
|
||||
12 => false, // PDO::ATTR_PERSISTENT
|
||||
1000 => true, // PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (missing in some PHP installations)
|
||||
];
|
||||
|
||||
// Use a dirty cache by default. Try Vanilla with memcached!
|
||||
$Configuration['Cache']['Enabled'] = true;
|
||||
$Configuration['Cache']['Method'] = 'dirtycache';
|
||||
$Configuration['Cache']['Filecache']['Store'] = PATH_CACHE.'/Filecache';
|
||||
|
||||
// Technical content stuff.
|
||||
$Configuration['Garden']['ContentType'] = 'text/html';
|
||||
$Configuration['Garden']['Locale'] = 'en';
|
||||
$Configuration['Garden']['LocaleCodeset'] = 'UTF8';
|
||||
|
||||
$Configuration['HotReload']['IP'] = '127.0.0.1';
|
||||
|
||||
$Configuration['ContentSecurityPolicy']['ScriptSrc']['AllowedDomains'] = [];
|
||||
|
||||
// Site specifics.
|
||||
$Configuration['Garden']['Installed'] = false; // Has Garden been installed yet? This blocks setup when true.
|
||||
$Configuration['Garden']['Title'] = 'Vanilla';
|
||||
$Configuration['Garden']['Domain'] = '';
|
||||
$Configuration['Garden']['WebRoot'] = false; // You can set this value if you are using htaccess to direct into the application, but the correct webroot isn't being recognized.
|
||||
$Configuration['Garden']['StripWebRoot'] = false;
|
||||
$Configuration['Garden']['AllowSSL'] = true;
|
||||
$Configuration['Garden']['PrivateCommunity'] = false;
|
||||
$Configuration['Garden']['Forms']['HoneypotName'] = 'hpt';
|
||||
|
||||
// Developer stuff.
|
||||
$Configuration['Garden']['Debug'] = false;
|
||||
$Configuration['Garden']['Errors']['LogFile'] = '';
|
||||
$Configuration['Garden']['FolderBlacklist'] = ['.', '..', '_svn', '.git']; // Folders we should never search for classes.
|
||||
|
||||
// User registration & authentication.
|
||||
$Configuration['Garden']['Session']['Length'] = '15 minutes';
|
||||
$Configuration['Garden']['Cookie']['Salt'] = ''; // We do this during setup, chill.
|
||||
$Configuration['Garden']['Cookie']['Name'] = 'Vanilla';
|
||||
$Configuration['Garden']['Cookie']['Path'] = '/';
|
||||
$Configuration['Garden']['Cookie']['Domain'] = '';
|
||||
$Configuration['Garden']['Cookie']['HashMethod'] = 'md5'; // md5 or sha1
|
||||
$Configuration['Garden']['Authenticator']['DefaultScheme'] = 'password'; // Types include 'Password', 'Handshake', 'Openid'
|
||||
$Configuration['Garden']['Authenticator']['RegisterUrl'] = '/entry/register?Target=%2$s';
|
||||
$Configuration['Garden']['Authenticator']['SignInUrl'] = '/entry/signin?Target=%2$s';
|
||||
$Configuration['Garden']['Authenticator']['SignOutUrl'] = '/entry/signout/{Session_TransientKey}?Target=%2$s';
|
||||
$Configuration['Garden']['Authenticator']['EnabledSchemes'] = ['password'];
|
||||
$Configuration['Garden']['Authenticator']['SyncScreen'] = "smart";
|
||||
$Configuration['Garden']['Authenticators']['password']['Name'] = "Password";
|
||||
$Configuration['Garden']['UserAccount']['AllowEdit'] = true; // Allow users to edit their account information? (SSO requires accounts be edited in external system).
|
||||
$Configuration['Garden']['Registration']['Method'] = 'Captcha'; // Options are: Basic, Captcha, Approval, Invitation
|
||||
$Configuration['Garden']['Registration']['InviteExpiration'] = '1 week'; // When invitations expire. This will be plugged into strtotime().
|
||||
$Configuration['Garden']['Registration']['InviteRoles'] = 'FALSE';
|
||||
$Configuration['Garden']['Registration']['ConfirmEmail'] = false;
|
||||
$Configuration['Garden']['Registration']['MinPasswordLength'] = 6;
|
||||
$Configuration['Garden']['Registration']['NameUnique'] = true;
|
||||
$Configuration['Garden']['TermsOfService'] = '/home/termsofservice'; // The url to the terms of service.
|
||||
$Configuration['Garden']['Password']['MinLength'] = 6;
|
||||
$Configuration['Garden']['Roles']['Manage'] = true; // @deprecated
|
||||
|
||||
// Garden security features
|
||||
$Configuration['Garden']['Security']['Hsts']['IncludeSubDomains'] = false;
|
||||
$Configuration['Garden']['Security']['Hsts']['Preload'] = false;
|
||||
$Configuration['Garden']['Security']['Hsts']['MaxAge'] = 604800;
|
||||
|
||||
// Outgoing email.
|
||||
$Configuration['Garden']['Email']['UseSmtp'] = false;
|
||||
$Configuration['Garden']['Email']['SmtpHost'] = '';
|
||||
$Configuration['Garden']['Email']['SmtpUser'] = '';
|
||||
$Configuration['Garden']['Email']['SmtpPassword'] = '';
|
||||
$Configuration['Garden']['Email']['SmtpPort'] = '25';
|
||||
$Configuration['Garden']['Email']['SmtpSecurity'] = ''; // ssl/tls
|
||||
$Configuration['Garden']['Email']['MimeType'] = 'text/plain';
|
||||
$Configuration['Garden']['Email']['SupportName'] = 'Support';
|
||||
$Configuration['Garden']['Email']['SupportAddress'] = '';
|
||||
|
||||
// Contact with the mothership.
|
||||
$Configuration['Garden']['UpdateCheckUrl'] = 'https://open.vanillaforums.com/addons/update';
|
||||
$Configuration['Garden']['AddonUrl'] = 'https://open.vanillaforums.com/addons';
|
||||
$Configuration['Garden']['VanillaUrl'] = 'https://open.vanillaforums.com';
|
||||
|
||||
// File handling.
|
||||
$Configuration['Garden']['CanProcessImages'] = false;
|
||||
$Configuration['Garden']['Upload']['MaxFileSize'] = '50M';
|
||||
$Configuration['Garden']['Upload']['AllowedFileExtensions'] = [
|
||||
'txt', 'jpg', 'jpeg', 'gif', 'png', 'bmp', 'tiff', 'ico', 'zip', 'gz', 'tar.gz', 'tgz', 'psd', 'ai', 'pdf', 'doc', 'xls', 'ppt', 'docx', 'xlsx', 'pptx', 'log', 'rar', '7z'
|
||||
];
|
||||
$Configuration['Garden']['Profile']['MaxHeight'] = 560;
|
||||
$Configuration['Garden']['Profile']['MaxWidth'] = 560;
|
||||
$Configuration['Garden']['Thumbnail']['Size'] = 200;
|
||||
|
||||
// Appearance.
|
||||
$Configuration['Garden']['Theme'] = 'keystone';
|
||||
$Configuration['Garden']['MobileTheme'] = 'mobile';
|
||||
$Configuration['Garden']['Menu']['Sort'] = ['Dashboard', 'Discussions', 'Questions', 'Activity', 'Applicants', 'Conversations', 'User'];
|
||||
$Configuration['Garden']['ThemeOptions']['Styles']['Key'] = 'Default';
|
||||
$Configuration['Garden']['ThemeOptions']['Styles']['Value'] = '%s_default';
|
||||
|
||||
// Profiles.
|
||||
$Configuration['Garden']['Profile']['Public']= true;
|
||||
$Configuration['Garden']['Profile']['ShowAbout'] = true;
|
||||
$Configuration['Garden']['Profile']['EditPhotos'] = true; // false to disable user photo editing
|
||||
$Configuration['Garden']['Profile']['EditUsernames'] = false;
|
||||
$Configuration['Garden']['BannedPhoto'] = 'https://images.v-cdn.net/banned_large.png';
|
||||
|
||||
// Embedding forum & comments.
|
||||
$Configuration['Garden']['Embed']['CommentsPerPage'] = 50;
|
||||
$Configuration['Garden']['Embed']['SortComments'] = 'desc';
|
||||
$Configuration['Garden']['Embed']['PageToForum'] = true;
|
||||
$Configuration['Garden']['SignIn']['Popup'] = true; // Should the sign-in link pop up or go to it's own page? (SSO requires going to it's own external page)
|
||||
|
||||
// User experience & formatting.
|
||||
$Configuration['Garden']['InputFormatter'] = 'Rich'; // Html, BBCode, Markdown, Text, Rich
|
||||
$Configuration['Garden']['MobileInputFormatter'] = 'Rich';
|
||||
$Configuration['Garden']['Html']['AllowedElements'] = "a, abbr, acronym, address, area, audio, b, bdi, bdo, big, blockquote, br, caption, center, cite, code, col, colgroup, dd, del, details, dfn, div, dl, dt, em, figure, figcaption, font, h1, h2, h3, h4, h5, h6, hgroup, hr, i, img, ins, kbd, li, map, mark, menu, meter, ol, p, pre, q, s, samp, small, span, strike, strong, sub, sup, summary, table, tbody, td, tfoot, th, thead, time, tr, tt, u, ul, var, video, wbr";
|
||||
$Configuration['Garden']['Search']['Mode'] = 'boolean'; // matchboolean, match, boolean, like
|
||||
$Configuration['Garden']['EditContentTimeout'] = 3600; // -1 means no timeout. 0 means immediate timeout. > 0 is in seconds. 60 * 60 = 3600 (aka 1hr)
|
||||
$Configuration['Garden']['Format']['Mentions'] = true;
|
||||
$Configuration['Garden']['Format']['Hashtags'] = false;
|
||||
$Configuration['Garden']['Format']['YouTube'] = true;
|
||||
$Configuration['Garden']['Format']['Vimeo'] = true;
|
||||
$Configuration['Garden']['Format']['EmbedSize'] = 'normal'; // tiny/small/normal/big/huge or WIDTHxHEIGHT
|
||||
|
||||
// Default preferences. Setting these to 'false' disables them globally.
|
||||
$Configuration['Preferences']['Email']['ConversationMessage'] = '1';
|
||||
$Configuration['Preferences']['Email']['BookmarkComment'] = '1';
|
||||
$Configuration['Preferences']['Email']['ParticipateComment'] = '0';
|
||||
$Configuration['Preferences']['Email']['WallComment'] = '0';
|
||||
$Configuration['Preferences']['Email']['ActivityComment'] = '0';
|
||||
$Configuration['Preferences']['Email']['DiscussionComment'] = '0';
|
||||
$Configuration['Preferences']['Email']['Mention'] = '0';
|
||||
$Configuration['Preferences']['Popup']['ConversationMessage'] = '1';
|
||||
$Configuration['Preferences']['Popup']['BookmarkComment'] = '1';
|
||||
$Configuration['Preferences']['Popup']['ParticipateComment'] = '0';
|
||||
$Configuration['Preferences']['Popup']['WallComment'] = '1';
|
||||
$Configuration['Preferences']['Popup']['ActivityComment'] = '1';
|
||||
$Configuration['Preferences']['Popup']['DiscussionComment'] = '1';
|
||||
$Configuration['Preferences']['Popup']['Mention'] = '1';
|
||||
|
||||
// Module visibility and sorting.
|
||||
$Configuration['Garden']['Modules']['ShowGuestModule'] = true;
|
||||
$Configuration['Garden']['Modules']['ShowSignedInModule'] = false;
|
||||
$Configuration['Garden']['Modules']['ShowRecentUserModule'] = false;
|
||||
$Configuration['Modules']['Dashboard']['Panel'] = ['MeModule', 'UserBoxModule', 'ActivityFilterModule', 'UserPhotoModule', 'ProfileFilterModule', 'SideMenuModule', 'UserInfoModule', 'GuestModule', 'Ads'];
|
||||
$Configuration['Modules']['Dashboard']['Content'] = ['MessageModule', 'MeModule', 'UserBoxModule', 'ProfileOptionsModule', 'Notices', 'ActivityFilterModule', 'ProfileFilterModule', 'Content', 'Ads'];
|
||||
$Configuration['Modules']['Vanilla']['Panel'] = ['MeModule', 'UserBoxModule', 'GuestModule', 'NewDiscussionModule', 'DiscussionFilterModule', 'SignedInModule', 'Ads'];
|
||||
$Configuration['Modules']['Vanilla']['Content'] = ['MessageModule', 'MeModule', 'UserBoxModule', 'NewDiscussionModule', 'ProfileOptionsModule', 'Notices', 'NewConversationModule', 'NewDiscussionModule', 'DiscussionFilterModule', 'CategoryModeratorsModule', 'Content', 'Ads'];
|
||||
$Configuration['Modules']['Conversations']['Panel'] = ['MeModule', 'UserBoxModule', 'NewConversationModule', 'SignedInModule', 'GuestModule', 'Ads'];
|
||||
$Configuration['Modules']['Conversations']['Content'] = ['MessageModule', 'MeModule', 'UserBoxModule', 'NewConversationModule', 'Notices', 'Content', 'Ads'];
|
||||
|
||||
// Routes.
|
||||
$Configuration['Routes']['DefaultController'] = 'discussions';
|
||||
$Configuration['Routes']['DefaultForumRoot'] = 'discussions';
|
||||
$Configuration['Routes']['Default404'] = ['dashboard/home/filenotfound', 'NotFound'];
|
||||
$Configuration['Routes']['DefaultPermission'] = ['dashboard/home/unauthorized', 'NotAuthorized'];
|
||||
$Configuration['Routes']['UpdateMode'] = 'dashboard/home/updatemode';
|
|
@ -1,104 +0,0 @@
|
|||
{ config }:
|
||||
|
||||
''
|
||||
<?php if (!defined("APPLICATION")) exit();
|
||||
|
||||
// Database defaults.
|
||||
$Configuration["Database"]["Engine"] = "MySQL";
|
||||
$Configuration["Database"]["Host"] = "${config.database-host}";
|
||||
$Configuration["Database"]["Name"] = "${config.database-name}";
|
||||
$Configuration["Database"]["User"] = "${config.database-user}";
|
||||
$Configuration["Database"]["Password"] = readfile("${config.database-password-file}");
|
||||
|
||||
// Site specifics.
|
||||
$Configuration["Garden"]["Installed"] = false; // Has Garden been installed yet? This blocks setup when true.
|
||||
$Configuration["Garden"]["Title"] = "${config.site-name}";
|
||||
$Configuration["Garden"]["Domain"] = "${config.site-domain}";
|
||||
$Configuration["Garden"]["PrivateCommunity"] = true;
|
||||
|
||||
// User registration & authentication.
|
||||
$Configuration["Garden"]["Session"]["Length"] = "60 minutes";
|
||||
$Configuration["Garden"]["Cookie"]["Name"] = "Selby Forum";
|
||||
$Configuration["Garden"]["Registration"]["Method"] = "Approval"; // Options are: Basic, Captcha, Approval, Invitatino
|
||||
$Configuration["Garden"]["Registration"]["ConfirmEmail"] = true;
|
||||
$Configuration["Garden"]["Registration"]["MinPasswordLength"] = 8;
|
||||
$Configuration["Garden"]["Registration"]["NameUnique"] = true;
|
||||
$Configuration["Garden"]["Password"]["MinLength"] = 6;
|
||||
|
||||
// Outgoing email.
|
||||
$Configuration["Garden"]["Email"]["UseSmtp"] = true;
|
||||
$Configuration["Garden"]["Email"]["SmtpHost"] = "${config.smtp-host}";
|
||||
$Configuration["Garden"]["Email"]["SmtpUser"] = "${config.smtp-user}";
|
||||
$Configuration["Garden"]["Email"]["SmtpPassword"] = readfile("${config.smtp-password-file}");
|
||||
$Configuration["Garden"]["Email"]["SmtpPort"] = "25";
|
||||
$Configuration["Garden"]["Email"]["SmtpSecurity"] = "tls"; // ssl/tls
|
||||
$Configuration["Garden"]["Email"]["MimeType"] = "text/plain";
|
||||
$Configuration["Garden"]["Email"]["SupportName"] = "Selby Forum";
|
||||
$Configuration["Garden"]["Email"]["SupportAddress"] = "forum@selby.ca";
|
||||
|
||||
// File handling.
|
||||
$Configuration["Garden"]["CanProcessImages"] = true;
|
||||
$Configuration["Garden"]["Upload"]["MaxFileSize"] = "50M";
|
||||
$Configuration["Garden"]["Upload"]["AllowedFileExtensions"] = [
|
||||
"txt", "jpg", "jpeg", "gif", "png", "bmp", "tiff", "ico", "zip", "gz", "tar.gz", "tgz", "psd", "ai", "pdf", "doc", "xls", "ppt", "docx", "xlsx", "pptx", "log", "rar", "7z"
|
||||
];
|
||||
$Configuration["Garden"]["Profile"]["MaxHeight"] = 560;
|
||||
$Configuration["Garden"]["Profile"]["MaxWidth"] = 560;
|
||||
$Configuration["Garden"]["Thumbnail"]["Size"] = 200;
|
||||
|
||||
// Appearance.
|
||||
$Configuration["Garden"]["Theme"] = "keystone";
|
||||
$Configuration["Garden"]["MobileTheme"] = "mobile";
|
||||
$Configuration["Garden"]["Menu"]["Sort"] = ["Dashboard", "Discussions", "Questions", "Activity", "Applicants", "Conversations", "User"];
|
||||
$Configuration["Garden"]["ThemeOptions"]["Styles"]["Key"] = "Default";
|
||||
$Configuration["Garden"]["ThemeOptions"]["Styles"]["Value"] = "%s_default";
|
||||
|
||||
// Profiles.
|
||||
$Configuration["Garden"]["Profile"]["Public"]= true;
|
||||
$Configuration["Garden"]["Profile"]["ShowAbout"] = true;
|
||||
$Configuration["Garden"]["Profile"]["EditPhotos"] = true; // false to disable user photo editing
|
||||
$Configuration["Garden"]["Profile"]["EditUsernames"] = false;
|
||||
$Configuration["Garden"]["BannedPhoto"] = "https://images.v-cdn.net/banned_large.png";
|
||||
|
||||
// Embedding forum & comments.
|
||||
$Configuration["Garden"]["Embed"]["CommentsPerPage"] = 50;
|
||||
$Configuration["Garden"]["Embed"]["SortComments"] = "desc";
|
||||
$Configuration["Garden"]["Embed"]["PageToForum"] = true;
|
||||
$Configuration["Garden"]["SignIn"]["Popup"] = true; // Should the sign-in link pop up or go to it"s own page? (SSO requires going to it"s own external page)
|
||||
|
||||
// User experience & formatting.
|
||||
$Configuration["Garden"]["InputFormatter"] = "Rich"; // Html, BBCode, Markdown, Text, Rich
|
||||
$Configuration["Garden"]["MobileInputFormatter"] = "Rich";
|
||||
$Configuration["Garden"]["Html"]["AllowedElements"] = "a, abbr, acronym, address, area, audio, b, bdi, bdo, big, blockquote, br, caption, center, cite, code, col, colgroup, dd, del, details, dfn, div, dl, dt, em, figure, figcaption, font, h1, h2, h3, h4, h5, h6, hgroup, hr, i, img, ins, kbd, li, map, mark, menu, meter, ol, p, pre, q, s, samp, small, span, strike, strong, sub, sup, summary, table, tbody, td, tfoot, th, thead, time, tr, tt, u, ul, var, video, wbr";
|
||||
$Configuration["Garden"]["Search"]["Mode"] = "boolean"; // matchboolean, match, boolean, like
|
||||
$Configuration["Garden"]["EditContentTimeout"] = 3600; // -1 means no timeout. 0 means immediate timeout. > 0 is in seconds. 60 * 60 = 3600 (aka 1hr)
|
||||
$Configuration["Garden"]["Format"]["Mentions"] = true;
|
||||
$Configuration["Garden"]["Format"]["Hashtags"] = false;
|
||||
$Configuration["Garden"]["Format"]["YouTube"] = true;
|
||||
$Configuration["Garden"]["Format"]["Vimeo"] = true;
|
||||
$Configuration["Garden"]["Format"]["EmbedSize"] = "normal"; // tiny/small/normal/big/huge or WIDTHxHEIGHT
|
||||
|
||||
// Module visibility and sorting.
|
||||
$Configuration["Garden"]["Modules"]["ShowGuestModule"] = true;
|
||||
$Configuration["Garden"]["Modules"]["ShowSignedInModule"] = false;
|
||||
$Configuration["Garden"]["Modules"]["ShowRecentUserModule"] = false;
|
||||
$Configuration["Modules"]["Dashboard"]["Panel"] = ["MeModule", "UserBoxModule", "ActivityFilterModule", "UserPhotoModule", "ProfileFilterModule", "SideMenuModule", "UserInfoModule", "GuestModule", "Ads"];
|
||||
$Configuration["Modules"]["Dashboard"]["Content"] = ["MessageModule", "MeModule", "UserBoxModule", "ProfileOptionsModule", "Notices", "ActivityFilterModule", "ProfileFilterModule", "Content", "Ads"];
|
||||
$Configuration["Modules"]["Vanilla"]["Panel"] = ["MeModule", "UserBoxModule", "GuestModule", "NewDiscussionModule", "DiscussionFilterModule", "SignedInModule", "Ads"];
|
||||
$Configuration["Modules"]["Vanilla"]["Content"] = ["MessageModule", "MeModule", "UserBoxModule", "NewDiscussionModule", "ProfileOptionsModule", "Notices", "NewConversationModule", "NewDiscussionModule", "DiscussionFilterModule", "CategoryModeratorsModule", "Content", "Ads"];
|
||||
$Configuration["Modules"]["Conversations"]["Panel"] = ["MeModule", "UserBoxModule", "NewConversationModule", "SignedInModule", "GuestModule", "Ads"];
|
||||
$Configuration["Modules"]["Conversations"]["Content"] = ["MessageModule", "MeModule", "UserBoxModule", "NewConversationModule", "Notices", "Content", "Ads"];
|
||||
|
||||
// Routes.
|
||||
$Configuration["Routes"]["DefaultController"] = "discussions";
|
||||
$Configuration["Routes"]["DefaultForumRoot"] = "discussions";
|
||||
$Configuration["Routes"]["Default404"] = ["dashboard/home/filenotfound", "NotFound"];
|
||||
$Configuration["Routes"]["DefaultPermission"] = ["dashboard/home/unauthorized", "NotAuthorized"];
|
||||
$Configuration["Routes"]["UpdateMode"] = "dashboard/home/updatemode";
|
||||
|
||||
// Cache.
|
||||
$Configuration['Cache']['Enabled'] = true;
|
||||
$Configuration['Cache']['Method'] = 'memcached';
|
||||
$Configuration['Cache']['Filecache']['Store'] = PATH_CACHE.'/Filecache';
|
||||
$Configuration['memcached']['Store'] = '${config.memcached-server}';
|
||||
''
|
|
@ -1,89 +0,0 @@
|
|||
<?php if (!defined('APPLICATION')) exit();
|
||||
/**
|
||||
* Framework constants.
|
||||
*
|
||||
* @copyright 2009-2019 Vanilla Forums Inc.
|
||||
* @license GPL-2.0-only
|
||||
* @package Core
|
||||
* @since 2.0
|
||||
*/
|
||||
|
||||
// If you want to change where these paths are located on your server, edit these constants.
|
||||
if (!defined('PATH_CACHE')) {
|
||||
define('PATH_CACHE', STATE_ROOT.DS.'cache');
|
||||
}
|
||||
if (!defined('PATH_UPLOADS')) {
|
||||
define('PATH_UPLOADS', STATE_ROOT.DS.'uploads');
|
||||
}
|
||||
|
||||
// You should not change these paths.
|
||||
define('PATH_APPLICATIONS', PATH_ROOT.'/applications');
|
||||
define('PATH_PLUGINS', PATH_ROOT.'/plugins');
|
||||
define('PATH_THEMES', PATH_ROOT.'/themes');
|
||||
define('PATH_LIBRARY', PATH_ROOT.'/library');
|
||||
define('PATH_LIBRARY_CORE', PATH_LIBRARY.'/core');
|
||||
|
||||
// Delivery type enumerators:
|
||||
define('DELIVERY_TYPE_ALL', 'ALL'); // Deliver an entire page
|
||||
define('DELIVERY_TYPE_ASSET', 'ASSET'); // Deliver all content for the requested asset
|
||||
define('DELIVERY_TYPE_VIEW', 'VIEW'); // Deliver only the view
|
||||
define('DELIVERY_TYPE_BOOL', 'BOOL'); // Deliver only the success status (or error) of the request
|
||||
define('DELIVERY_TYPE_NONE', 'NONE'); // Deliver nothing
|
||||
define('DELIVERY_TYPE_MESSAGE', 'MESSAGE'); // Just deliver messages.
|
||||
define('DELIVERY_TYPE_DATA', 'DATA'); // Just deliver the data.
|
||||
|
||||
// Delivery method enumerators
|
||||
define('DELIVERY_METHOD_XHTML', 'XHTML');
|
||||
define('DELIVERY_METHOD_JSON', 'JSON');
|
||||
define('DELIVERY_METHOD_XML', 'XML');
|
||||
/**
|
||||
* @since 2.1
|
||||
*/
|
||||
define('DELIVERY_METHOD_TEXT', 'TXT');
|
||||
define('DELIVERY_METHOD_PLAIN', 'PLAIN');
|
||||
define('DELIVERY_METHOD_RSS', 'RSS');
|
||||
define('DELIVERY_METHOD_ATOM', 'ATOM');
|
||||
|
||||
// Handler enumerators:
|
||||
define('HANDLER_TYPE_NORMAL', 'NORMAL'); // Standard call to a method on the object.
|
||||
define('HANDLER_TYPE_EVENT', 'EVENT'); // Call to an event handler.
|
||||
define('HANDLER_TYPE_OVERRIDE', 'OVERRIDE'); // Call to a method override.
|
||||
define('HANDLER_TYPE_NEW', 'NEW'); // Call to a new object method.
|
||||
|
||||
// Dataset type enumerators:
|
||||
define('DATASET_TYPE_ARRAY', 'array');
|
||||
define('DATASET_TYPE_OBJECT', 'object');
|
||||
|
||||
// Syndication enumerators:
|
||||
define('SYNDICATION_NONE', 'NONE');
|
||||
define('SYNDICATION_RSS', 'RSS');
|
||||
define('SYNDICATION_ATOM', 'ATOM');
|
||||
|
||||
// Debug error types.
|
||||
define('TRACE_INFO', 'Info');
|
||||
define('TRACE_ERROR', 'Error');
|
||||
define('TRACE_WARNING', 'Warning');
|
||||
define('TRACE_NOTICE', 'Notice');
|
||||
|
||||
// Environment
|
||||
define('ENVIRONMENT_PHP_VERSION', '7.1');
|
||||
|
||||
if (!defined('E_USER_DEPRECATED')) {
|
||||
define('E_USER_DEPRECATED', E_USER_WARNING);
|
||||
}
|
||||
|
||||
define('SPAM', 'SPAM');
|
||||
define('UNAPPROVED', 'UNAPPROVED');
|
||||
|
||||
// Numeric keys for Vanilla's addon types.
|
||||
define('ADDON_TYPE_PLUGIN', 1);
|
||||
define('ADDON_TYPE_THEME', 2);
|
||||
define('ADDON_TYPE_LOCALE', 4);
|
||||
define('ADDON_TYPE_APPLICATION', 5);
|
||||
define('ADDON_TYPE_CORE', 10);
|
||||
|
||||
// Use this constant if you are sick of looking up how to format dates to go into the database.
|
||||
const MYSQL_DATE_FORMAT = 'Y-m-d H:i:s';
|
||||
|
||||
// Signal we did all this ^.
|
||||
define('VANILLA_CONSTANTS', true);
|
|
@ -1,81 +0,0 @@
|
|||
{ state-root, static-root, config-root, ... }:
|
||||
|
||||
''
|
||||
<?php
|
||||
/**
|
||||
* Bare minimum setup of the environment to use Vanilla"s classes.
|
||||
*
|
||||
* @author Alexandre (DaazKu) Chouinard <alexandre.c@vanillaforums.com>
|
||||
* @copyright 2009-2019 Vanilla Forums Inc.
|
||||
* @license GPL-2.0-only
|
||||
*/
|
||||
|
||||
if (PHP_VERSION_ID < 70100) {
|
||||
die("Vanilla requires PHP 7.1 or greater.");
|
||||
}
|
||||
|
||||
// Define the constants we need to get going.
|
||||
if (!defined("APPLICATION")) {
|
||||
define("APPLICATION", "Vanilla");
|
||||
}
|
||||
if (!defined("APPLICATION_VERSION")) {
|
||||
// Rules for the versioning
|
||||
// {OSS version}-{Cloud release version}-{? SNAPSHOT if it"s a dev build}
|
||||
define("APPLICATION_VERSION", "3.3");
|
||||
}
|
||||
if (!defined("DS")) {
|
||||
define("DS", DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined("STATE_ROOT")) {
|
||||
define("STATE_ROOT", "${state-root}");
|
||||
}
|
||||
if (!defined("PATH_ROOT")) {
|
||||
define("PATH_ROOT", "${static-root}");
|
||||
}
|
||||
|
||||
// Disable Phar stream
|
||||
stream_wrapper_unregister("phar");
|
||||
|
||||
/**
|
||||
* Bootstrap Before
|
||||
*
|
||||
* This file gives developers the opportunity to hook into Garden before any
|
||||
* real work has been done. Nothing has been included yet, aside from this file.
|
||||
* No Garden features are available yet.
|
||||
*/
|
||||
$isWeb = PHP_SAPI !== "cli" && isset($_SERVER["REQUEST_METHOD"]);
|
||||
if ($isWeb && file_exists(STATE_ROOT."/conf/bootstrap.before.php")) {
|
||||
require_once STATE_ROOT."/conf/bootstrap.before.php";
|
||||
}
|
||||
|
||||
/**
|
||||
* Define Core Constants
|
||||
*
|
||||
* Garden depends on the presence of a certain base set of defines that allow it
|
||||
* to be aware of its own place within the system. These are conditionally
|
||||
* defined here, in case they"ve already been set by a zealous bootstrap.before.
|
||||
*/
|
||||
|
||||
// Path to the primary configuration file.
|
||||
if (!defined("PATH_CONF")) {
|
||||
define("PATH_CONF", "${config-root}");
|
||||
}
|
||||
|
||||
// Include default constants.
|
||||
require_once PATH_CONF."/constants.php";
|
||||
|
||||
// Make sure a default time zone is set.
|
||||
// Do NOT edit this. See config `Garden.GuestTimeZone`.
|
||||
date_default_timezone_set("UTC");
|
||||
|
||||
// Make sure the mb_* functions are utf8.
|
||||
if (function_exists("mb_internal_encoding")) {
|
||||
mb_internal_encoding("UTF-8");
|
||||
}
|
||||
|
||||
// Include the core autoloader.
|
||||
if (!include_once PATH_ROOT."/vendor/autoload.php") {
|
||||
die("Could not find the autoloader. Did you forget to run 'composer install' in ".PATH_ROOT."?\n");
|
||||
}
|
||||
spl_autoload_register([Vanilla\AliasLoader::class, "autoload"]);
|
||||
''
|
|
@ -1,29 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Application Gateway.
|
||||
*
|
||||
* @copyright 2009-2019 Vanilla Forums Inc.
|
||||
* @license GPL-2.0-only
|
||||
* @package Core
|
||||
* @since 2.0
|
||||
*/
|
||||
|
||||
// Report and track all errors.
|
||||
error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR);
|
||||
ini_set('display_errors', 0);
|
||||
ini_set('track_errors', 1);
|
||||
|
||||
ob_start();
|
||||
|
||||
// Minimal environment needed to use most of Vanilla's framework.
|
||||
require_once(getenv("SELBY_FORUM_ROOT") . '/environment.php' );
|
||||
|
||||
// Require the bootstrap to configure the application.
|
||||
require_once(SELBY_FORUM_ROOT . '/bootstrap.php');
|
||||
|
||||
// Create and configure the dispatcher.
|
||||
$dispatcher = Gdn::dispatcher();
|
||||
|
||||
// Process the request.
|
||||
$dispatcher->start();
|
||||
$dispatcher->dispatch();
|
|
@ -1,33 +0,0 @@
|
|||
{ environment-file, bootstrap-file, ... }:
|
||||
|
||||
''
|
||||
<?php
|
||||
/**
|
||||
* Application Gateway.
|
||||
*
|
||||
* @copyright 2009-2019 Vanilla Forums Inc.
|
||||
* @license GPL-2.0-only
|
||||
* @package Core
|
||||
* @since 2.0
|
||||
*/
|
||||
|
||||
// Report and track all errors.
|
||||
error_reporting(E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR);
|
||||
ini_set('display_errors', 0);
|
||||
ini_set('track_errors', 1);
|
||||
|
||||
ob_start();
|
||||
|
||||
// Minimal environment needed to use most of Vanilla's framework.
|
||||
require_once("${environment-file}");
|
||||
|
||||
// Require the bootstrap to configure the application.
|
||||
require_once("${bootstrap-file}");
|
||||
|
||||
// Create and configure the dispatcher.
|
||||
$dispatcher = Gdn::dispatcher();
|
||||
|
||||
// Process the request.
|
||||
$dispatcher->start();
|
||||
$dispatcher->dispatch();
|
||||
''
|
|
@ -1,262 +0,0 @@
|
|||
{ pkgs, lib, config, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
backplane-auth = "/etc/nixos/static/backplane-auth.scm";
|
||||
|
||||
host-passwd-file = "/srv/jabber/secret/hosts-passwd.scm";
|
||||
service-passwd-file = "/srv/jabber/secret/services-passwd.scm";
|
||||
|
||||
cert-basedir = "/var/lib/ejabberd/certs";
|
||||
|
||||
target-certs = ["key" "cert" "chain" "fullchain"];
|
||||
|
||||
cert-origin = hostname: filename: "/var/lib/acme/${hostname}/${filename}.pem";
|
||||
cert-target = hostname: filename: "${cert-basedir}/${hostname}-${filename}.pem";
|
||||
|
||||
move-server-certs = hostnames:
|
||||
let
|
||||
move-server-cert = hostname:
|
||||
map (filename: ''
|
||||
ensure_exists ${cert-origin hostname filename}
|
||||
cp -L ${cert-origin hostname filename} ${cert-target hostname filename}
|
||||
'')
|
||||
target-certs;
|
||||
in pkgs.writeShellScript "move-server-certs" ''
|
||||
function ensure_exists() {
|
||||
FILENAME=$1
|
||||
if [ ! -e $FILENAME ]; then
|
||||
echo "file does not exist: $FILENAME"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
if [ -d ${cert-basedir} ]; then
|
||||
mkdir ${cert-basedir}
|
||||
fi
|
||||
|
||||
${concatStringsSep "\n" (concatMap move-server-cert hostnames)}
|
||||
|
||||
chown -R ${config.services.ejabberd.user}:${config.services.ejabberd.group} ${cert-basedir}
|
||||
|
||||
exit 0
|
||||
'';
|
||||
|
||||
remove-server-certs = pkgs.writeShellScript "ejabberd-rm-combined-certs" ''
|
||||
rm ${cert-basedir}/*.pem
|
||||
'';
|
||||
|
||||
|
||||
in {
|
||||
config = {
|
||||
|
||||
security.acme.certs."fudo.im".email = "admin@fudo.org";
|
||||
security.acme.certs."backplane.fudo.org".email = "admin@fudo.org";
|
||||
|
||||
systemd = {
|
||||
services = {
|
||||
ejabberd-generate-certs = {
|
||||
enable = true;
|
||||
description = "Generate required SSL certs for ejabberd.";
|
||||
wantedBy = [ "ejabberd.service" ];
|
||||
after = [
|
||||
"acme-backplane.fudo.org.service"
|
||||
"acme-fudo.im.service"
|
||||
];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${move-server-certs ["fudo.im" "backplane.fudo.org"]}";
|
||||
RemainAfterExit = true;
|
||||
ExecStop = remove-server-certs;
|
||||
StandardOutput = "journal";
|
||||
};
|
||||
};
|
||||
|
||||
ejabberd = {
|
||||
requires = [ "ejabberd-generate-certs.service" ];
|
||||
environment = {
|
||||
FUDO_HOST_PASSWD_FILE = host-passwd-file;
|
||||
FUDO_SERVICE_PASSWD_FILE = service-passwd-file;
|
||||
};
|
||||
};
|
||||
|
||||
ejabberd-hostfile-watcher = {
|
||||
description = "Watch the ejabberd host file and restart if changes occur.";
|
||||
serviceConfig.Type = "oneshot";
|
||||
after = [ "ejabberd.service" ];
|
||||
script = ''
|
||||
SYSCTL=${pkgs.systemd}/bin/systemctl
|
||||
if $SYSCTL is-active --quiet ejabberd.service; then
|
||||
echo "restarting ejabberd.service because hostfile has changed."
|
||||
$SYSCTL restart ejabberd.service
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
ejabberd-servicefile-watcher = {
|
||||
description = "Watch the ejabberd service file and restart if changes occur.";
|
||||
serviceConfig.Type = "oneshot";
|
||||
after = [ "ejabberd.service" ];
|
||||
script = ''
|
||||
SYSCTL=${pkgs.systemd}/bin/systemctl
|
||||
if $SYSCTL is-active --quiet ejabberd.service; then
|
||||
echo "restarting ejabberd.service because servicefile has changed."
|
||||
$SYSCTL restart ejabberd.service
|
||||
fi
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
paths = {
|
||||
ejabberd-hostfile-watcher = {
|
||||
pathConfig.PathChanged = host-passwd-file;
|
||||
};
|
||||
|
||||
ejabberd-servicefile-watcher = {
|
||||
pathConfig.PathChanged = service-passwd-file;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
nginx = {
|
||||
virtualHosts = {
|
||||
"backplane.fudo.org" = {
|
||||
enableACME = true;
|
||||
};
|
||||
|
||||
"fudo.im" = {
|
||||
enableACME = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
ejabberd = {
|
||||
enable = true;
|
||||
|
||||
configFile = pkgs.writeText "ejabberd-config.yml" (builtins.toJSON {
|
||||
loglevel = 4;
|
||||
|
||||
access_rules = {
|
||||
c2s = { allow = "all"; };
|
||||
announce = { allow = "admin"; };
|
||||
configure = { allow = "admin"; };
|
||||
pubsub_createnode = { allow = "local"; };
|
||||
};
|
||||
|
||||
acl = {
|
||||
admin = {
|
||||
user = [
|
||||
"niten@fudo.org"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
hosts = [
|
||||
"fudo.im"
|
||||
"backplane.fudo.org"
|
||||
];
|
||||
|
||||
listen = [
|
||||
{
|
||||
port = 5222;
|
||||
module = "ejabberd_c2s";
|
||||
ip = "0.0.0.0";
|
||||
starttls = true;
|
||||
starttls_required = true;
|
||||
}
|
||||
];
|
||||
|
||||
certfiles =
|
||||
concatMap (hostname: map (filename: cert-target hostname filename) target-certs)
|
||||
["fudo.im" "backplane.fudo.org"];
|
||||
|
||||
host_config = {
|
||||
"fudo.im" = {
|
||||
auth_method = "ldap";
|
||||
ldap_servers = ["auth.fudo.org"];
|
||||
ldap_port = 389;
|
||||
ldap_rootdn = "cn=jabber,dc=fudo,dc=org";
|
||||
ldap_password = fileContents /srv/jabber/secret/ldap.passwd;
|
||||
ldap_base = "ou=members,dc=fudo,dc=org";
|
||||
ldap_filter = "(objectClass=posixAccount)";
|
||||
ldap_uids = { uid = "%u"; };
|
||||
|
||||
modules = {
|
||||
mod_adhoc = {};
|
||||
mod_announce = {};
|
||||
mod_avatar = {};
|
||||
mod_blocking = {};
|
||||
mod_caps = {};
|
||||
mod_carboncopy = {};
|
||||
mod_client_state = {};
|
||||
mod_configure = {};
|
||||
mod_disco = {};
|
||||
mod_fail2ban = {};
|
||||
mod_last = {};
|
||||
mod_offline = {
|
||||
access_max_user_messages = 5000;
|
||||
};
|
||||
mod_ping = {};
|
||||
mod_privacy = {};
|
||||
mod_private = {};
|
||||
mod_pubsub = {
|
||||
access_createnode = "pubsub_createnode";
|
||||
ignore_pep_from_offline = true;
|
||||
last_item_cache = false;
|
||||
plugins = [
|
||||
"flat"
|
||||
"pep"
|
||||
];
|
||||
};
|
||||
mod_roster = {};
|
||||
mod_stream_mgmt = {};
|
||||
mod_time = {};
|
||||
mod_vcard = {
|
||||
search = false;
|
||||
};
|
||||
mod_vcard_xupdate = {};
|
||||
mod_version = {};
|
||||
};
|
||||
};
|
||||
|
||||
"backplane.fudo.org" = {
|
||||
auth_method = "external";
|
||||
extauth_program = "${pkgs.guile}/bin/guile -s ${backplane-auth}";
|
||||
extauth_pool_size = 3;
|
||||
auth_use_cache = true;
|
||||
|
||||
modules = {
|
||||
mod_adhoc = {};
|
||||
mod_caps = {};
|
||||
mod_carboncopy = {};
|
||||
mod_client_state = {};
|
||||
mod_configure = {};
|
||||
mod_disco = {};
|
||||
mod_fail2ban = {};
|
||||
mod_last = {};
|
||||
mod_offline = {
|
||||
access_max_user_messages = 5000;
|
||||
};
|
||||
mod_ping = {};
|
||||
mod_pubsub = {
|
||||
access_createnode = "pubsub_createnode";
|
||||
ignore_pep_from_offline = true;
|
||||
last_item_cache = false;
|
||||
plugins = [
|
||||
"flat"
|
||||
"pep"
|
||||
];
|
||||
};
|
||||
mod_roster = {};
|
||||
mod_stream_mgmt = {};
|
||||
mod_time = {};
|
||||
mod_version = {};
|
||||
};
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,119 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
hostname = "forum.test.selby.ca";
|
||||
local-port = "3157";
|
||||
|
||||
postgres-host = "france.fudo.org";
|
||||
config-path = "/srv/selby-forum/conf";
|
||||
redis-data-path = "/srv/selby-forum/redis-data";
|
||||
sidekiq-data-path = "/srv/selby-forum/sidekiq-data";
|
||||
discourse-data-path = "/srv/selby-forum/discourse-data";
|
||||
postgres-data-path = "/srv/selby-forum/postgres-data";
|
||||
|
||||
env-file = "/srv/selby-forum/private/env";
|
||||
|
||||
ensure-dir-and-ownership = ownership: dir: ''
|
||||
if [ ! -d ${dir} ]; then
|
||||
mkdir -p ${dir}
|
||||
fi
|
||||
|
||||
chown -R ${ownership} ${dir}
|
||||
chmod 700 ${dir}
|
||||
'';
|
||||
|
||||
in {
|
||||
config = {
|
||||
users.users = {
|
||||
selby-discourse = {
|
||||
isSystemUser = true;
|
||||
# This is stupid: needs to be 1001, see bitnami docs
|
||||
uid = 1001;
|
||||
};
|
||||
};
|
||||
|
||||
security.acme.certs.${hostname}.email = "niten@fudo.org";
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
|
||||
virtualHosts = {
|
||||
"${hostname}" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
|
||||
locations."/" = {
|
||||
proxyPass = "http://127.0.0.1:${local-port}";
|
||||
|
||||
extraConfig = ''
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-By $server_addr:$server_port;
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
docker-containers = let
|
||||
docker-flags = [ "--network=selby-discourse" "--env-file=${env-file}" ];
|
||||
discourse-env = {
|
||||
DISCOURSE_USERNAME = "admin";
|
||||
DISCOURSE_SITENAME = "Selby Forum";
|
||||
DISCOURSE_EMAIL = "forum@selby.ca";
|
||||
DISCOURSE_HOSTNAME = hostname;
|
||||
|
||||
POSTGRESQL_HOST = "selby-discourse-postgres";
|
||||
DISCOURSE_POSTGRESQL_USERNAME = "discourse_selby_forum";
|
||||
DISCOURSE_POSTGRESQL_NAME = "discourse_selby_forum";
|
||||
# note: passwords are stored in env-file
|
||||
|
||||
REDIS_HOST = "selby-discourse-redis";
|
||||
# note: password is store in env-file
|
||||
};
|
||||
|
||||
in {
|
||||
selby-discourse = {
|
||||
image = "bitnami/discourse:2.6.0";
|
||||
ports = [ "127.0.0.1:${local-port}:3000" ];
|
||||
# user = toString config.users.users.selby-discourse.uid;
|
||||
volumes = [
|
||||
"${config-path}:/opt/bitnami/discourse/mounted-conf"
|
||||
"${discourse-data-path}:/bitnami"
|
||||
];
|
||||
extraDockerOptions = docker-flags;
|
||||
environment = discourse-env;
|
||||
};
|
||||
|
||||
selby-discourse-redis = {
|
||||
image = "bitnami/redis:6.0";
|
||||
user = toString config.users.users.selby-discourse.uid;
|
||||
volumes = [ "${redis-data-path}:/bitnami/redis/data" ];
|
||||
extraDockerOptions = docker-flags;
|
||||
environment = { };
|
||||
};
|
||||
|
||||
selby-discourse-sidekiq = {
|
||||
image = "bitnami/discourse:2.6.0";
|
||||
# user = toString config.users.users.selby-discourse.uid;
|
||||
volumes = [ "${sidekiq-data-path}:/bitnami" ];
|
||||
cmd = [ "nami" "start" "--foreground" "discourse-sidekiq" ];
|
||||
extraDockerOptions = docker-flags;
|
||||
environment = discourse-env;
|
||||
};
|
||||
|
||||
selby-discourse-postgres = {
|
||||
image = "bitnami/postgresql:13";
|
||||
# user = toString config.users.users.selby-discourse.uid;
|
||||
volumes = [ "${postgres-data-path}:/bitnami/postgresql" ];
|
||||
extraDockerOptions = docker-flags;
|
||||
environment = {
|
||||
POSTGRESQL_DATABASE = "discourse_selby_forum";
|
||||
POSTGRESQL_USERNAME = "discourse_selby_forum";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,197 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
hostname = "forum.test.selby.ca";
|
||||
|
||||
mariadb-tag = "10";
|
||||
mariadb-port = "13306";
|
||||
mariadb-data-path = "/srv/selby-forum/mariadb-data";
|
||||
mariadb-root-env-file = "/srv/selby-forum/private/mariadb-env";
|
||||
mariadb-env-file = "/srv/selby-forum/private/mariadb-root-env";
|
||||
mariadb-username = "forum_selby_ca";
|
||||
mariadb-database = "forum_selby_ca";
|
||||
|
||||
mariadb-password-file = "/srv/selby-forum/private/mariadb-user-passwd";
|
||||
|
||||
smtp-password-file = "srv/selby-forum/private/smtp-passwd";
|
||||
|
||||
fastcgi-params = "include ${pkgs.nginx}/conf/fastcgi_params";
|
||||
|
||||
memcached-tag = "1.6-alpine";
|
||||
memcached-port = "11219";
|
||||
|
||||
environment = pkgs.writeTextDir "/environment.php"
|
||||
(import ./forum-config/environment.php.nix {
|
||||
static-root = "${pkgs.vanilla-forum}";
|
||||
state-root = "/srv/selby-forum/state";
|
||||
config-root = "/etc/selby-forum";
|
||||
});
|
||||
|
||||
index = pkgs.writeTextDir "/index.php" (import ./forum-config/index.php.nix {
|
||||
environment-file = "${environment}/environment.php";
|
||||
bootstrap-file = "${pkgs.vanilla-forum}/bootstrap.php";
|
||||
});
|
||||
|
||||
selby-forum-pkg = pkgs.symlinkJoin {
|
||||
name = "selby-forum";
|
||||
paths = [ pkgs.vanilla-forum index ];
|
||||
};
|
||||
|
||||
in {
|
||||
config = {
|
||||
environment.etc = {
|
||||
"selby-forum/config-defaults.php" = {
|
||||
uid = config.users.users.nginx.uid;
|
||||
mode = "0600";
|
||||
source = ./forum-config/config-defaults.php;
|
||||
};
|
||||
"selby-forum/constants.php" = {
|
||||
uid = config.users.users.nginx.uid;
|
||||
mode = "0600";
|
||||
source = ./forum-config/constants.php;
|
||||
};
|
||||
"selby-forum/config.php" = {
|
||||
uid = config.users.users.nginx.uid;
|
||||
mode = "0600";
|
||||
text = import ./forum-config/config.php.nix {
|
||||
config = {
|
||||
database-host = "127.0.0.1:${mariadb-port}";
|
||||
database-name = mariadb-database;
|
||||
database-user = mariadb-username;
|
||||
database-password-file = mariadb-password-file;
|
||||
site-name = "Selby Forum";
|
||||
site-domain = "forum.selby.ca";
|
||||
smtp-host = "mail.fudo.org";
|
||||
smtp-user = "selby-forum";
|
||||
smtp-password-file = smtp-password-file;
|
||||
memcached-server = "127.0.0.1:${memcached-port}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
docker-containers = {
|
||||
selby-forum-mariadb = {
|
||||
image = "mariadb:${mariadb-tag}";
|
||||
ports = [ "127.0.0.1:${mariadb-port}:3306" ];
|
||||
volumes = [ "${mariadb-data-path}:/var/lib/mysql" ];
|
||||
environment = {
|
||||
MYSQL_USER = mariadb-username;
|
||||
MYSQL_DATABASE = mariadb-database;
|
||||
};
|
||||
extraDockerOptions = [
|
||||
"--env-file=${mariadb-root-env-file}"
|
||||
"--env-file=${mariadb-env-file}"
|
||||
];
|
||||
};
|
||||
selby-forum-memcached = {
|
||||
image = "memcached:${memcached-tag}";
|
||||
ports = [ "127.0.0.1:${memcached-port}:11211" ];
|
||||
};
|
||||
};
|
||||
|
||||
security.acme.certs."${hostname}".email = "niten@fudo.org";
|
||||
|
||||
services = {
|
||||
phpfpm = {
|
||||
pools.selby-forum = {
|
||||
user = "nginx";
|
||||
group = "nginx";
|
||||
|
||||
settings = {
|
||||
"pm" = "dynamic";
|
||||
"pm.max_children" = 50;
|
||||
"pm.start_servers" = 5;
|
||||
"pm.min_spare_servers" = 1;
|
||||
"pm.max_spare_servers" = 8;
|
||||
};
|
||||
|
||||
phpOptions = ''
|
||||
memory_limit = 500M
|
||||
file_uploads = On
|
||||
allow_url_fopen = On
|
||||
short_open_tag = On
|
||||
upload_max_filesize = 100M
|
||||
max_execution_time = 360
|
||||
date.timezone = America/Winnipeg
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
nginx = {
|
||||
enable = true;
|
||||
|
||||
virtualHosts = {
|
||||
"${hostname}" = let
|
||||
forbidden-rxs = [
|
||||
"^.htaccess$"
|
||||
"^/conf/"
|
||||
"^/cache/"
|
||||
"^/cgi-bin/"
|
||||
"^/uploads/imports/"
|
||||
"^/vendor/"
|
||||
];
|
||||
|
||||
forbidden-rx-entry = entry:
|
||||
lib.nameValuePair "~* ${entry}" {
|
||||
return = "403";
|
||||
extraConfig = "deny all;";
|
||||
};
|
||||
|
||||
forbidden-rx-entries =
|
||||
builtins.listToAttrs (map forbidden-rx-entry forbidden-rxs);
|
||||
|
||||
in {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
|
||||
root = "${selby-forum-pkg}/";
|
||||
|
||||
locations = forbidden-rx-entries // {
|
||||
"/" = {
|
||||
index = "index.php";
|
||||
tryFiles = "$uri @vanilla";
|
||||
};
|
||||
|
||||
"@vanilla" = {
|
||||
extraConfig = ''
|
||||
rewrite ^ /index.php$request_uri last;
|
||||
'';
|
||||
};
|
||||
|
||||
"~* ^/index.php($|/)" = {
|
||||
extraConfig = ''
|
||||
expires -1;
|
||||
|
||||
${fastcgi-params};
|
||||
|
||||
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||
fastcgi_param SCRIPT_NAME /index.php;
|
||||
fastcgi_param SCRIPT_FILENAME $realpath_root/index.php;
|
||||
fastcgi_param X_REWRITE 1;
|
||||
fastcgi_pass unix:${config.services.phpfpm.pools.selby-forum.socket};
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services = {
|
||||
phpfpm-selby-forum-socket-perm = {
|
||||
wantedBy = [ "multi-user.target" "nginx.service" ];
|
||||
before = [ "nginx.service" ];
|
||||
description =
|
||||
"Change ownership of the phpfpm socket for selby forum once it's started.";
|
||||
requires = [ "phpfpm-selby-forum.service" ];
|
||||
after = [ "phpfpm.target" "phpfpm-selby-forum.service" ];
|
||||
serviceConfig = {
|
||||
ExecStart = ''
|
||||
${pkgs.coreutils}/bin/chown nginx:nginx ${config.services.phpfpm.pools.selby-forum.socket}
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,81 +0,0 @@
|
|||
{ lib, config, pkgs, ... }:
|
||||
|
||||
let
|
||||
hostname = "lambda";
|
||||
host-internal-ip = "10.0.0.3";
|
||||
host-storage-ip = "10.0.10.1";
|
||||
inherit (lib.strings) concatStringsSep;
|
||||
|
||||
in {
|
||||
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.version = 2;
|
||||
boot.loader.grub.device = "/dev/disk/by-label/nixos-root";
|
||||
|
||||
hardware.bluetooth.enable = false;
|
||||
|
||||
imports = [ ../defaults.nix ../hardware-configuration.nix ];
|
||||
|
||||
fudo.common = {
|
||||
profile = "server";
|
||||
site = "seattle";
|
||||
};
|
||||
|
||||
fudo.slynk = { enable = true; };
|
||||
|
||||
networking = {
|
||||
hostName = hostname;
|
||||
|
||||
nameservers = [ host-internal-ip ];
|
||||
|
||||
# Create a bridge for VMs to use
|
||||
macvlans = {
|
||||
extif0 = {
|
||||
interface = "enp3s0f1";
|
||||
mode = "bridge";
|
||||
};
|
||||
storageif0 = {
|
||||
interface = "enp4s0f1";
|
||||
mode = "bridge";
|
||||
};
|
||||
};
|
||||
|
||||
interfaces = {
|
||||
enp3s0f0.useDHCP = false;
|
||||
enp3s0f1.useDHCP = false;
|
||||
enp4s0f0.useDHCP = false;
|
||||
enp4s0f1.useDHCP = false;
|
||||
|
||||
extif0 = {
|
||||
useDHCP = false;
|
||||
macAddress = "02:50:f6:52:9f:9d";
|
||||
ipv4.addresses = [{
|
||||
address = host-internal-ip;
|
||||
prefixLength = 22;
|
||||
}
|
||||
# {
|
||||
# address = "10.0.10.2";
|
||||
# prefixLength = 24;
|
||||
# }
|
||||
];
|
||||
};
|
||||
|
||||
storageif0 = {
|
||||
useDHCP = false;
|
||||
macAddress = "02:65:d7:00:7d:1b";
|
||||
ipv4.addresses = [{
|
||||
address = host-storage-ip;
|
||||
prefixLength = 24;
|
||||
}];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
fudo.ipfs = {
|
||||
enable = true;
|
||||
users = [ "niten" ];
|
||||
api-address = "/ip4/${host-internal-ip}/tcp/5001";
|
||||
};
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
let
|
||||
hostname = "monolith";
|
||||
|
||||
in {
|
||||
imports = [
|
||||
../defaults.nix
|
||||
../networks/sea.fudo.org.nix
|
||||
../profiles/desktop.nix
|
||||
../hardware-configuration.nix
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
glxinfo
|
||||
];
|
||||
|
||||
networking.hostName = hostname;
|
||||
|
||||
services.xserver.videoDrivers = ["nvidia"];
|
||||
|
||||
hardware.bluetooth.enable = false;
|
||||
|
||||
hardware.opengl.driSupport32Bit = true;
|
||||
hardware.opengl.driSupport = true;
|
||||
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.version = 2;
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
|
||||
}
|
|
@ -1,239 +0,0 @@
|
|||
{ lib, config, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
hostname = "nostromo";
|
||||
host-internal-ip = "10.0.0.1";
|
||||
|
||||
in {
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
dnsproxy
|
||||
google-photos-uploader
|
||||
libguestfs-with-appliance
|
||||
libvirt
|
||||
powerdns
|
||||
virtmanager
|
||||
];
|
||||
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.version = 2;
|
||||
boot.loader.grub.device = "/dev/sda";
|
||||
|
||||
hardware.bluetooth.enable = false;
|
||||
|
||||
imports = [ ../defaults.nix ../hardware-configuration.nix ];
|
||||
|
||||
fudo.common = {
|
||||
profile = "server";
|
||||
site = "seattle";
|
||||
};
|
||||
|
||||
fudo.local-network = {
|
||||
enable = true;
|
||||
# See fudo/sites/seattle.nix for general settings
|
||||
dns-servers = [ host-internal-ip ];
|
||||
gateway = host-internal-ip;
|
||||
dhcp-interfaces = [ "intif0" ];
|
||||
dns-serve-ips = [ host-internal-ip "127.0.0.1" "127.0.1.1" ];
|
||||
# Using a pihole running in docker, see below
|
||||
recursive-resolver = "${host-internal-ip} port 5353";
|
||||
server-ip = host-internal-ip;
|
||||
};
|
||||
|
||||
fudo.slynk = {
|
||||
# NOTE: for now, had to do: XDG_RUNTIME_DIR=/run/user/$UID systemctl start --user slynk
|
||||
enable = true;
|
||||
};
|
||||
|
||||
# systemd.network.networks.eno2 = {
|
||||
# dhcpV6Config = {
|
||||
# IPv6PrefixDelegation = "dhcpv6";
|
||||
# PrefixDelegationHint = 60;
|
||||
# };
|
||||
# };
|
||||
|
||||
systemd.network.networks.eno2 = {
|
||||
extraConfig = {
|
||||
IPv6AcceptRA = true;
|
||||
IPv6PrefixDelegation = "dhcpv6";
|
||||
};
|
||||
};
|
||||
|
||||
networking = {
|
||||
hostName = hostname;
|
||||
|
||||
nameservers = [ host-internal-ip ];
|
||||
|
||||
dhcpcd.extraConfig = ''
|
||||
interface eno2
|
||||
ia_na 1
|
||||
ia_pd 2 eno2/0
|
||||
'';
|
||||
|
||||
# Create a bridge for VMs to use
|
||||
macvlans = {
|
||||
intif0 = {
|
||||
interface = "eno1";
|
||||
mode = "bridge";
|
||||
};
|
||||
};
|
||||
|
||||
interfaces = {
|
||||
eno1.useDHCP = false;
|
||||
eno3.useDHCP = false;
|
||||
eno4.useDHCP = false;
|
||||
enp33s0f0.useDHCP = false;
|
||||
enp33s0f1.useDHCP = false;
|
||||
enp9s0f0.useDHCP = false;
|
||||
enp9s0f1.useDHCP = false;
|
||||
|
||||
eno2 = { useDHCP = true; };
|
||||
|
||||
intif0 = {
|
||||
useDHCP = false;
|
||||
macAddress = "46:54:76:06:f1:10";
|
||||
ipv4.addresses = [
|
||||
{
|
||||
address = host-internal-ip;
|
||||
prefixLength = 22;
|
||||
}
|
||||
{
|
||||
address = "10.0.10.2";
|
||||
prefixLength = 24;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
nat = {
|
||||
enable = true;
|
||||
externalInterface = "eno2";
|
||||
internalInterfaces = [ "intif0" ];
|
||||
};
|
||||
};
|
||||
|
||||
users = {
|
||||
users = { fudo-client = { isSystemUser = true; }; };
|
||||
|
||||
groups = {
|
||||
backplane-powerdns = { members = [ "backplane-powerdns" ]; };
|
||||
backplane-dns = { members = [ "backplane-dns" ]; };
|
||||
};
|
||||
};
|
||||
|
||||
fudo = {
|
||||
client.dns = {
|
||||
enable = true;
|
||||
ipv4 = true;
|
||||
ipv6 = true;
|
||||
user = "fudo-client";
|
||||
external-interface = "eno2";
|
||||
password-file = "/srv/client/secure/client.passwd";
|
||||
};
|
||||
|
||||
secure-dns-proxy = {
|
||||
enable = true;
|
||||
port = 3535;
|
||||
upstream-dns = [
|
||||
"https://cloudflare-dns.com/dns-query"
|
||||
# "https://dns.adguard.com/dns-query"
|
||||
];
|
||||
bootstrap-dns = "1.1.1.1";
|
||||
};
|
||||
|
||||
netinfo-email = {
|
||||
enable = true;
|
||||
env-file = "/srv/netinfo/secure/env";
|
||||
};
|
||||
};
|
||||
|
||||
virtualisation = {
|
||||
docker = {
|
||||
enable = true;
|
||||
autoPrune.enable = true;
|
||||
enableOnBoot = true;
|
||||
};
|
||||
|
||||
libvirtd = {
|
||||
enable = true;
|
||||
qemuPackage = pkgs.qemu_kvm;
|
||||
onShutdown = "shutdown";
|
||||
};
|
||||
};
|
||||
|
||||
docker-containers = {
|
||||
pihole = {
|
||||
image = "pihole/pihole:4.3.2-1";
|
||||
ports = [ "5353:53/tcp" "5353:53/udp" "3080:80/tcp" ];
|
||||
environment = {
|
||||
ServerIP = host-internal-ip;
|
||||
VIRTUAL_HOST = "dns-hole.sea.fudo.org";
|
||||
DNS1 = "1.1.1.1";
|
||||
DNS2 = "8.8.8.8";
|
||||
};
|
||||
volumes = [
|
||||
"/srv/pihole/etc-pihole/:/etc/pihole/"
|
||||
"/srv/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/"
|
||||
];
|
||||
# TODO: DNS-over-HTTPS via cloudflared
|
||||
# extraDockerOptions = [
|
||||
# "--dns=1.1.1.1"
|
||||
# ];
|
||||
};
|
||||
};
|
||||
|
||||
fudo.ipfs = {
|
||||
enable = true;
|
||||
users = [ "niten" ];
|
||||
api-address = "/ip4/${host-internal-ip}/tcp/5001";
|
||||
};
|
||||
|
||||
security.acme.certs."sea-camera.fudo.link".email = "niten@fudo.org";
|
||||
security.acme.certs."sea-camera-od.fudo.link".email = "niten@fudo.org";
|
||||
|
||||
services = {
|
||||
nginx = {
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedTlsSettings = true;
|
||||
recommendedProxySettings = true;
|
||||
|
||||
virtualHosts = {
|
||||
"sea-camera.fudo.link" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://panopticon.sea.fudo.org/";
|
||||
extraConfig = ''
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
"sea-camera-od.fudo.link" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://panopticon-od.sea.fudo.org/";
|
||||
extraConfig = ''
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
"pihole.sea.fudo.org" = {
|
||||
serverAliases = [ "dns-hole.sea.fudo.org" "hole.sea.fudo.org" ];
|
||||
locations."/" = { proxyPass = "http://127.0.0.1:3000"; };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
320
hosts/procul.nix
320
hosts/procul.nix
|
@ -1,320 +0,0 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
hostname = "procul";
|
||||
domain = "informis.land";
|
||||
mail-hostname = hostname;
|
||||
host_ipv4 = "172.86.179.18";
|
||||
host-fqdn = "${hostname}.${domain}";
|
||||
all-hostnames = [];
|
||||
|
||||
acme-private-key = hostname: "/var/lib/acme/${hostname}/key.pem";
|
||||
acme-certificate = hostname: "/var/lib/acme/${hostname}/fullchain.pem";
|
||||
acme-ca = "/etc/nixos/static/letsencryptauthorityx3.pem";
|
||||
|
||||
fudo-ca = "/etc/nixos/static/fudo_ca.pem";
|
||||
|
||||
in {
|
||||
|
||||
boot.loader.grub = {
|
||||
enable = true;
|
||||
version = 2;
|
||||
device = "/dev/sdb";
|
||||
};
|
||||
|
||||
imports = [
|
||||
../hardware-configuration.nix
|
||||
|
||||
../defaults.nix
|
||||
|
||||
../informis/users.nix
|
||||
];
|
||||
|
||||
networking = {
|
||||
hostName = hostname;
|
||||
|
||||
# provided by secure-dns-proxy
|
||||
nameservers = [ "127.0.0.1" ];
|
||||
|
||||
dhcpcd.enable = false;
|
||||
useDHCP = false;
|
||||
|
||||
# TODO: fix IPv6
|
||||
enableIPv6 = true;
|
||||
|
||||
# Create a bridge for VMs to use
|
||||
macvlans = {
|
||||
extif0 = {
|
||||
interface = "enp0s25";
|
||||
mode = "bridge";
|
||||
};
|
||||
};
|
||||
|
||||
# For WireGuard
|
||||
nat = {
|
||||
enable = true;
|
||||
externalInterface = "extif0";
|
||||
internalInterfaces = [ "wgtun0" ];
|
||||
};
|
||||
|
||||
interfaces = {
|
||||
extif0 = {
|
||||
# result of:
|
||||
# echo $FQDN-extif|md5sum|sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/'
|
||||
macAddress = "02:e2:b7:db:e8:af";
|
||||
ipv4.addresses = [
|
||||
{
|
||||
address = host_ipv4;
|
||||
prefixLength = 29;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
hardware.bluetooth.enable = false;
|
||||
|
||||
users = {
|
||||
users = {
|
||||
gituser = {
|
||||
isSystemUser = true;
|
||||
group = "nogroup";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
fudo = {
|
||||
|
||||
common = {
|
||||
# Sets some server-common settings. See /etc/nixos/fudo/profiles/...
|
||||
profile = "server";
|
||||
|
||||
# Sets some common site-specific settings: gateway, monitoring, etc. See /etc/nixos/fudo/sites/...
|
||||
site = "joes";
|
||||
|
||||
domain = domain;
|
||||
|
||||
admin-email = "admin@${domain}";
|
||||
|
||||
local-networks = [
|
||||
"172.86.179.16/29"
|
||||
"208.81.1.128/28"
|
||||
"208.81.3.112/28"
|
||||
"172.17.0.0/16"
|
||||
"127.0.0.0/8"
|
||||
];
|
||||
};
|
||||
|
||||
client.dns = {
|
||||
enable = true;
|
||||
ipv4 = true;
|
||||
ipv6 = true;
|
||||
user = "fudo-client";
|
||||
external-interface = "extif0";
|
||||
password-file = "/srv/client/secure/client.passwd";
|
||||
};
|
||||
|
||||
# Not all users need access to procul; don't allow LDAP-user access.
|
||||
authentication.enable = false;
|
||||
|
||||
auth.kdc = {
|
||||
enable = true;
|
||||
database-path = "/var/heimdal/heimdal";
|
||||
realm = "INFORMIS.LAND";
|
||||
mkey-file = "/srv/heimdal/secure/m-key";
|
||||
acl-file = "/etc/heimdal/kdc.acl";
|
||||
bind-addresses = [
|
||||
host_ipv4
|
||||
"127.0.0.1"
|
||||
"127.0.1.1"
|
||||
];
|
||||
};
|
||||
|
||||
system.tmpOnTmpfs = false;
|
||||
|
||||
secure-dns-proxy = {
|
||||
enable = true;
|
||||
upstream-dns = [ "https://cloudflare-dns.com/dns-query" ];
|
||||
bootstrap-dns = "1.1.1.1";
|
||||
listen-ips = [ "127.0.0.1" ];
|
||||
port = 53;
|
||||
};
|
||||
|
||||
dns = {
|
||||
enable = true;
|
||||
|
||||
dns-hosts = {
|
||||
"ns1.informis.land" = "172.86.179.18";
|
||||
"ns2.informis.land" = "172.86.179.18";
|
||||
};
|
||||
|
||||
listen-ips = [host_ipv4];
|
||||
|
||||
domains = {
|
||||
"informis.land" = import ../informis/informis.land.nix {
|
||||
inherit host_ipv4 config;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mail-server = {
|
||||
enable = true;
|
||||
debug = true;
|
||||
|
||||
domain = domain;
|
||||
hostname = "${host-fqdn}";
|
||||
monitoring = false;
|
||||
mail-user = "mailuser";
|
||||
mail-user-id = 525;
|
||||
mail-group = "mailgroup";
|
||||
clamav.enable = true;
|
||||
dkim.signing = true;
|
||||
|
||||
dovecot = {
|
||||
ssl-certificate = acme-certificate "imap.${domain}";
|
||||
ssl-private-key = acme-private-key "imap.${domain}";
|
||||
};
|
||||
|
||||
postfix = {
|
||||
ssl-certificate = acme-certificate "smtp.${domain}";
|
||||
ssl-private-key = acme-private-key "smtp.${domain}";
|
||||
};
|
||||
|
||||
# This should NOT include the primary domain
|
||||
local-domains = [
|
||||
host-fqdn
|
||||
"smtp.${domain}"
|
||||
];
|
||||
|
||||
mail-directory = "/srv/mailserver/mail";
|
||||
state-directory = "/srv/mailserver/state";
|
||||
|
||||
trusted-networks = [
|
||||
"172.86.179.16/29"
|
||||
"127.0.0.0/16"
|
||||
];
|
||||
|
||||
alias-users = {
|
||||
root = ["niten"];
|
||||
postmaster = ["niten"];
|
||||
hostmaster = ["niten"];
|
||||
webmaster = ["niten"];
|
||||
system = ["niten"];
|
||||
admin = ["niten"];
|
||||
dmarc-report = ["niten"];
|
||||
};
|
||||
};
|
||||
|
||||
postgresql = {
|
||||
enable = true;
|
||||
ssl-certificate = (acme-certificate host-fqdn);
|
||||
ssl-private-key = (acme-private-key host-fqdn);
|
||||
keytab = "/srv/postgres/secure/postgres.keytab";
|
||||
|
||||
local-networks = [
|
||||
"172.86.179.16/29"
|
||||
"127.0.0.0/16"
|
||||
];
|
||||
|
||||
users = {
|
||||
gituser = {
|
||||
password-file = "/srv/git/secure/db.passwd";
|
||||
databases = {
|
||||
git = {
|
||||
access = "CONNECT";
|
||||
entity-access = {
|
||||
"ALL TABLES IN SCHEMA public" = "SELECT,INSERT,UPDATE,DELETE";
|
||||
"ALL SEQUENCES IN SCHEMA public" = "SELECT, UPDATE";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
databases = {
|
||||
git = {
|
||||
users = ["niten"];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
git = {
|
||||
enable = true;
|
||||
hostname = "git.informis.land";
|
||||
site-name = "informis git";
|
||||
user = "gituser";
|
||||
repository-dir = /srv/git/repo;
|
||||
state-dir = /srv/git/state;
|
||||
database = {
|
||||
user = "gituser";
|
||||
password-file = /srv/git/secure/db.passwd;
|
||||
hostname = "127.0.0.1";
|
||||
name = "git";
|
||||
};
|
||||
};
|
||||
|
||||
acme = {
|
||||
enable = true;
|
||||
|
||||
admin-address = "admin@${domain}";
|
||||
|
||||
hostnames = [
|
||||
"informis.land"
|
||||
"imap.informis.land"
|
||||
"smtp.informis.land"
|
||||
"gemini.informis.land"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
security.acme.certs.${host-fqdn}.email = "admin@${domain}";
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedTlsSettings = true;
|
||||
|
||||
virtualHosts = {
|
||||
"${host-fqdn}" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
fudo.vpn = {
|
||||
# fer some fuckin reason this sets the default gw to the vpn interface
|
||||
enable = false;
|
||||
network = "10.100.0.0/16";
|
||||
server-ip = host_ipv4;
|
||||
private-key-file = "/srv/wireguard/secure/secret.key";
|
||||
peers = {
|
||||
peter = "/srv/wireguard/clients/peter.key";
|
||||
ken = "/srv/wireguard/clients/ken.key";
|
||||
helen = "/srv/wireguard/clients/helen.key";
|
||||
};
|
||||
};
|
||||
|
||||
informis.cl-gemini = {
|
||||
enable = true;
|
||||
|
||||
server-ip = host_ipv4;
|
||||
document-root = "/srv/gemini/root";
|
||||
ssl-private-key = "/srv/gemini/private/key.pem";
|
||||
ssl-certificate = "/srv/gemini/private/cert.pem";
|
||||
slynk-port = 4005;
|
||||
|
||||
textfiles-archive = "/srv/gemini/textfiles";
|
||||
|
||||
feeds = {
|
||||
viator = {
|
||||
title = "viator's phlog";
|
||||
path = "/home/viator/gemini-public/feed/";
|
||||
url = "gemini://informis.land/user/viator/feed/";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,63 +0,0 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
let
|
||||
hostname = "spark";
|
||||
|
||||
in {
|
||||
imports = [
|
||||
../defaults.nix
|
||||
../hardware-configuration.nix
|
||||
];
|
||||
|
||||
nixpkgs.config.permittedInsecurePackages = [
|
||||
"google-chrome-81.0.4044.138"
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
# androidStudioPackages.canary
|
||||
androidenv.androidPkgs_9_0.platform-tools
|
||||
cmake
|
||||
glxinfo
|
||||
opencv4
|
||||
qemu_kvm
|
||||
signal-cli
|
||||
signal-desktop
|
||||
teamviewer
|
||||
thunderbird
|
||||
wireshark
|
||||
];
|
||||
|
||||
fudo.common = {
|
||||
profile = "desktop";
|
||||
site = "seattle";
|
||||
enable-gui = true;
|
||||
};
|
||||
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi = {
|
||||
canTouchEfiVariables = true;
|
||||
};
|
||||
|
||||
programs = {
|
||||
adb.enable = true;
|
||||
bash.enableCompletion = true;
|
||||
};
|
||||
|
||||
networking.hostName = hostname;
|
||||
|
||||
hardware.bluetooth.enable = false;
|
||||
|
||||
hardware.opengl.driSupport32Bit = true;
|
||||
hardware.opengl.driSupport = true;
|
||||
|
||||
services = {
|
||||
trezord.enable = true;
|
||||
};
|
||||
|
||||
virtualisation.libvirtd = {
|
||||
enable = true;
|
||||
qemuPackage = pkgs.qemu_kvm;
|
||||
onShutdown = "shutdown";
|
||||
};
|
||||
}
|
|
@ -1,90 +0,0 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
let
|
||||
hostname = "zbox";
|
||||
|
||||
in {
|
||||
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
imports = [
|
||||
../defaults.nix
|
||||
../hardware-configuration.nix
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
androidenv.androidPkgs_9_0.platform-tools
|
||||
android-studio
|
||||
dnsproxy
|
||||
glxinfo
|
||||
hll2380dw-cups
|
||||
nodejs
|
||||
signal-desktop
|
||||
thunderbird
|
||||
usbutils
|
||||
];
|
||||
|
||||
fudo.common = {
|
||||
profile = "desktop";
|
||||
site = "seattle";
|
||||
enable-gui = true;
|
||||
};
|
||||
|
||||
fudo.slynk = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
hardware.cpu.intel.updateMicrocode = true;
|
||||
|
||||
programs = {
|
||||
adb.enable = true;
|
||||
bash.enableCompletion = true;
|
||||
};
|
||||
|
||||
services.xserver = {
|
||||
videoDrivers = ["nvidia"];
|
||||
# displayManager.gdm.wayland = false;
|
||||
};
|
||||
|
||||
hardware.opengl.driSupport32Bit = true;
|
||||
hardware.opengl.extraPackages32 = with pkgs.pkgsi686Linux; [ libva ];
|
||||
hardware.opengl.driSupport = true;
|
||||
|
||||
hardware.pulseaudio.support32Bit = true;
|
||||
|
||||
networking = {
|
||||
hostName = hostname;
|
||||
|
||||
macvlans = {
|
||||
intif0 = {
|
||||
interface = "eno1";
|
||||
mode = "bridge";
|
||||
};
|
||||
};
|
||||
|
||||
interfaces = {
|
||||
eno1.useDHCP = false;
|
||||
intif0 = {
|
||||
macAddress = "02:dd:80:52:83:9b";
|
||||
useDHCP = false;
|
||||
ipv4.addresses = [
|
||||
{
|
||||
address = "10.0.0.110";
|
||||
prefixLength = 24;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
hardware.bluetooth.enable = true;
|
||||
|
||||
users.users.niten = {
|
||||
extraGroups = ["adbusers"];
|
||||
};
|
||||
|
||||
virtualisation.lxd.enable = true;
|
||||
|
||||
}
|
|
@ -1,98 +0,0 @@
|
|||
{ host_ipv4, config }:
|
||||
|
||||
{
|
||||
dnssec = true;
|
||||
|
||||
mx = ["smtp.informis.land"];
|
||||
|
||||
hosts = {
|
||||
procul = {
|
||||
ip-addresses = [ "172.86.179.18" ];
|
||||
ssh-fingerprints = [
|
||||
"4 1 2a8e086d3589ce50b58c55bc35638af8da23988e"
|
||||
"4 2 55a9f7c0addf08bb24c62ced954574db6e95eff38ee56d6a2cff312d20eb910e"
|
||||
"1 1 d089902f60751b3d35b5329bf7b906df254d5fa7"
|
||||
"1 2 8deebf42bbc40881a327f561bffd5d7bd328a4fc94d4e4ce8c502a9c6cbdfb92"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
default-host = "172.86.179.18";
|
||||
|
||||
srv-records = {
|
||||
tcp = {
|
||||
domain = [{
|
||||
host = "ns1.informis.land";
|
||||
port = 53;
|
||||
}];
|
||||
ssh = [{
|
||||
host = "procul.informis.land";
|
||||
port = 22;
|
||||
}];
|
||||
submission = [{
|
||||
host = "procul.informis.land";
|
||||
port = 587;
|
||||
}];
|
||||
kerberos = [{
|
||||
host = "procul.informis.land";
|
||||
port = 88;
|
||||
}];
|
||||
kerberos-adm = [{
|
||||
host = "procul.informis.land";
|
||||
port = 749;
|
||||
}];
|
||||
imaps = [{
|
||||
host = "procul.informis.land";
|
||||
port = 993;
|
||||
priority = 0;
|
||||
}];
|
||||
pop3s = [{
|
||||
host = "procul.informis.land";
|
||||
port = 995;
|
||||
priority = 10;
|
||||
}];
|
||||
http = [{
|
||||
host = "procul.informis.land";
|
||||
port = 80;
|
||||
}];
|
||||
https = [{
|
||||
host = "procul.informis.land";
|
||||
port = 443;
|
||||
}];
|
||||
};
|
||||
|
||||
udp = {
|
||||
domain = [{
|
||||
host = "ns1.informis.land";
|
||||
port = 53;
|
||||
}];
|
||||
kerberos = [{
|
||||
host = "procul.informis.land";
|
||||
port = 88;
|
||||
}];
|
||||
kerberos-master = [{
|
||||
host = "procul.informis.land";
|
||||
port = 88;
|
||||
}];
|
||||
kpasswd = [{
|
||||
host = "procul.informis.land";
|
||||
port = 464;
|
||||
}];
|
||||
};
|
||||
};
|
||||
|
||||
aliases = {
|
||||
smtp = "procul.informis.land.";
|
||||
imap = "procul.informis.land.";
|
||||
gemini = "procul.informis.land.";
|
||||
git = "procul.informis.land.";
|
||||
};
|
||||
|
||||
extra-dns-records = [
|
||||
''_kerberos IN TXT "INFORMIS.LAND"''
|
||||
''@ IN TXT "v=spf1 mx ip4:${host_ipv4}/29 -all"''
|
||||
''@ IN SPF "v=spf1 mx ip4:${host_ipv4}/29 -all"''
|
||||
];
|
||||
|
||||
dmarc-report-address = "dmarc-report@informis.land";
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
config = {
|
||||
users.users = {
|
||||
viator = {
|
||||
isNormalUser = true;
|
||||
description = "Viator";
|
||||
createHome = true;
|
||||
hashedPassword = "$6$a1q2Duoe35hd5$IaZGXPfqyGv9uq5DQm7DZq0vIHsUs39sLktBiBBqMiwl/f/Z4jSvNZLJp9DZJYe5u2qGBYh1ca.jsXvQA8FPZ/";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,64 +0,0 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
name = "Niten";
|
||||
email = "niten@fudo.org";
|
||||
|
||||
in {
|
||||
programs = {
|
||||
bash = { enable = true; };
|
||||
|
||||
git = {
|
||||
enable = true;
|
||||
userName = name;
|
||||
userEmail = email;
|
||||
};
|
||||
};
|
||||
|
||||
xresources.properties = {
|
||||
"Xft.antialias" = 1;
|
||||
"Xft.autohint" = 0;
|
||||
"Xft.dpi" = 192;
|
||||
"Xft.hinting" = 1;
|
||||
"Xft.hintstyle" = "hintfull";
|
||||
"Xft.lcdfilter" = "lcddefault";
|
||||
};
|
||||
|
||||
services.gpg-agent.enable = true;
|
||||
|
||||
# services.redshift = {
|
||||
# enable = true;
|
||||
# latitude = "51.0";
|
||||
# longitude = "47.0";
|
||||
# brightness.day = "1";
|
||||
# brightness.night = "0.5";
|
||||
# tray = true;
|
||||
# };
|
||||
|
||||
home = {
|
||||
file = {
|
||||
".doom.d" = {
|
||||
source = pkgs.doom-emacs-config;
|
||||
recursive = true;
|
||||
onChange = "${pkgs.doomEmacsInit}/bin/doom-emacs-init.sh";
|
||||
};
|
||||
|
||||
".k5login" = {
|
||||
source = pkgs.writeText "niten-k5login" ''
|
||||
niten@FUDO.ORG
|
||||
niten/root@FUDO.ORG
|
||||
niten@INFORMIS.LAND
|
||||
niten/root@INFORMIS.LAND
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
sessionVariables = {
|
||||
EDITOR = "emacsclient -t";
|
||||
ALTERNATE_EDITOR = "";
|
||||
|
||||
# Don't put duplicates or whitespace in bash history
|
||||
HISTCONTROL = "ignoredups:ignorespace";
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
name = "Root";
|
||||
email = "root@fudo.org";
|
||||
|
||||
in {
|
||||
programs = {
|
||||
git = {
|
||||
enable = true;
|
||||
userName = name;
|
||||
userEmail = email;
|
||||
};
|
||||
};
|
||||
|
||||
services.gpg-agent.enable = true;
|
||||
|
||||
home = {
|
||||
file = {
|
||||
".doom.d" = {
|
||||
source = pkgs.doom-emacs-config;
|
||||
recursive = true;
|
||||
onChange = "${pkgs.doomEmacsInit}/bin/doom-emacs-init.sh";
|
||||
};
|
||||
|
||||
".k5login" = {
|
||||
source = pkgs.writeText "niten-k5login" ''
|
||||
niten@FUDO.ORG
|
||||
niten/root@FUDO.ORG
|
||||
niten@INFORMIS.LAND
|
||||
niten/root@INFORMIS.LAND
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
sessionVariables = {
|
||||
EDITOR = "emacsclient -t";
|
||||
ALTERNATE_EDITOR = "";
|
||||
|
||||
HISTCONTROL = "ignoredups:ignorespace";
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue