Working refactored (on a test server)

This commit is contained in:
Root 2021-02-25 20:45:50 +00:00
parent 372cf5fc6a
commit 42e01b0840
31 changed files with 400 additions and 194 deletions

8
config/common.nix Normal file
View File

@ -0,0 +1,8 @@
{ config, lib, pkgs, ... }:
# Config common to all hosts, which don't belong anywhere else
{
config = {
home-manager.users.root = import ../home-manager/root.nix { inherit config lib pkgs; };
};
}

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
{ {
config = { imports = [
imports = [ ./bash.nix
./bash.nix ./common.nix
./domains.nix ./domains.nix
./groups.nix ./groups.nix
./hosts.nix ./hosts.nix
./sites.nix ./sites.nix
./users.nix ./users.nix
./wireless-networks.nix ./wireless-networks.nix
]; ];
};
} }

View File

@ -2,27 +2,27 @@
{ {
config.fudo.domains = { config.fudo.domains = {
fudo.org = { "fudo.org" = {
local-networks = [ "208.81.1.128/28" "208.81.3.112/28" ]; local-networks = [ "208.81.1.128/28" "208.81.3.112/28" ];
local-users = [ "niten" "reaper" ]; local-users = [ "niten" "reaper" ];
local-groups = [ "fudo" "selby" "admin" ];
admin-users = [ "niten" "reaper" ]; admin-users = [ "niten" "reaper" ];
admin-email = "admin@fudo.org"; admin-email = "admin@fudo.org";
gssapi-realm = "FUDO.ORG"; gssapi-realm = "FUDO.ORG";
}; };
sea.fudo.org = { "sea.fudo.org" = {
local-networks = [ "10.0.0.0/24" ]; local-networks = [ "10.0.0.0/24" ];
local-users = [ "niten" "reaper" "xiaoxuan" "ken" ]; local-users = [ "niten" "reaper" "xiaoxuan" "ken" ];
local-groups = [ "fudo" "selby" "admin" ];
admin-users = [ "niten" ]; admin-users = [ "niten" ];
admin-email = "niten@fudo.org"; admin-email = "niten@fudo.org";
gssapi-realm = "FUDO.ORG"; gssapi-realm = "FUDO.ORG";
local-dns = import ./networks/sea.fudo.org.nix { };
}; };
rus.selby.ca = { "rus.selby.ca" = {
local-networks = [ "10.0.0.0/24" ]; local-networks = [ "10.0.0.0/24" ];
local-users = [ local-users = [
@ -37,17 +37,17 @@
"jess" "jess"
"andrew" "andrew"
]; ];
local-groups = [ "fudo" "selby" "admin" ];
local-admins = [ "niten" ]; local-admins = [ "niten" ];
admin-email = "niten@fudo.org"; admin-email = "niten@fudo.org";
gssapi-realm = "FUDO.ORG"; gssapi-realm = "FUDO.ORG";
local-dns = import ./networks/rus.selby.ca.nix { };
}; };
informis.land = { "informis.land" = {
local-networks = [ ]; local-networks = [ ];
local-users = [ "niten" "viator" ]; local-users = [ "niten" "viator" ];
local-groups = [ "admin" ];
admin-users = [ "niten" ]; admin-users = [ "niten" ];
admin-email = "viator@informis.land"; admin-email = "viator@informis.land";
gssapi-realm = "INFORMIS.LAND"; gssapi-realm = "INFORMIS.LAND";

View File

@ -0,0 +1,4 @@
{ config, lib, pkgs, ... }:
{
}

View File

@ -0,0 +1,4 @@
{ config, lib, pkgs, ... }:
{
}

View File

@ -0,0 +1,5 @@
{ config, lib, pkgs, ... }:
{
}

View File

@ -0,0 +1,5 @@
{ config, lib, pkgs, ... }:
{
}

79
config/groups.nix Normal file
View File

@ -0,0 +1,79 @@
{ config, lib, pkgs, ... }:
{
config.fudo.groups = {
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"
];
};
};
}

View File

@ -1,5 +1,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
{ {
imports = [ <nixpkgs/nixos/modules/installer/scan/not-detected.nix> ]; imports = [ <nixpkgs/nixos/modules/installer/scan/not-detected.nix> ];
@ -53,7 +54,7 @@
}; };
}; };
services.autoScrub.enable = true; services.zfs.autoScrub.enable = true;
swapDevices = [{ device = "/dev/disk/by-label/plato-swap"; }]; swapDevices = [{ device = "/dev/disk/by-label/plato-swap"; }];
@ -61,7 +62,9 @@
hardware.bluetooth.enable = false; hardware.bluetooth.enable = false;
network = { networking = {
hostId = substring 0 8 (fileContents /etc/machine-id);
macvlans = { macvlans = {
intif0 = { intif0 = {
interface = "enp1s0"; interface = "enp1s0";

View File

@ -4,87 +4,44 @@
config.fudo.hosts = { config.fudo.hosts = {
atom = { atom = {
description = "Niten's toy laptop."; description = "Niten's toy laptop.";
domain = "sea.fudo.org";
site = "seattle";
profile = "laptop";
enable-gui = false; enable-gui = false;
hardware-config = ./hardware/atom.nix;
}; };
clunk = let clunk = {
primary-ip = "10.0.0.1";
internal-interfaces = [ "intif0" ];
external-interface = "extif0";
dns-over-https-port = 5353;
in {
description = "rus.selby.ca gateway box."; description = "rus.selby.ca gateway box.";
domain = "rus.selby.ca";
site = "russell";
profile = "gateway-server";
docker-server = true; docker-server = true;
hardware-config = ./hardware/clunk.nix;
extra-config = import ./hosts/clunk.nix { };
}; };
france = { france = {
description = "Primary fudo.org server."; description = "Primary fudo.org server.";
domain = "fudo.org";
site = "portage";
profile = "server";
docker-server = true; docker-server = true;
hardware-config = ./hardware/france.nix;
}; };
lambda = { lambda = {
description = "Niten's experiment server."; description = "sea.fudo.org experiment server.";
domain = "sea.fudo.org";
site = "seattle";
profile = "server";
docker-server = true; docker-server = true;
hardware-config = ./hardware/lambda.nix;
}; };
nostromo = { nostromo = {
description = "sea.fudo.org gateway box and primary server."; description = "sea.fudo.org gateway box and primary server.";
domain = "sea.fudo.org";
site = "seattle";
profile = "gateway-server";
docker-server = true; docker-server = true;
hardware-config = ./hardware/nostromo.nix;
}; };
plato = { plato = {
description = "Niten's toy server."; description = "Niten's toy server.";
domain = "rus.selby.ca";
site = "russell";
profile = "server";
hardware-config = ./hardware/plato.nix;
}; };
procul = { procul = {
description = "informis.land server."; description = "informis.land server.";
domain = "informis.land";
site = "joes-datacenter-0";
profile = "server";
docker-server = true; docker-server = true;
hardware-config = ./hardware/procul.nix;
}; };
spark = { spark = {
description = "Niten's backup desktop."; description = "Niten's backup desktop.";
domain = "sea.fudo.org";
site = "seattle";
profile = "desktop";
hardware-config = ./hardware/spark.nix;
}; };
zbox = { zbox = {
description = "Niten's primary desktop."; description = "Niten's primary desktop.";
domain = "sea.fudo.org";
site = "seattle";
profile = "desktop";
hardware-config = ./hardware/zbox.nix;
}; };
}; };
} }

View File

@ -15,6 +15,11 @@ with lib; {
${pkgs.zfs}/bin/zfs rollback -r zroot/transient/root@blank ${pkgs.zfs}/bin/zfs rollback -r zroot/transient/root@blank
''; '';
security.sudo.extraConfig = ''
# rollback results in sudo lectures after each reboot
Defaults lecture = never
'';
services = { services = {
openssh = { openssh = {
hostKeys = [ hostKeys = [

View File

@ -21,6 +21,13 @@ in {
windowManager.stumpwm.enable = true; windowManager.stumpwm.enable = true;
emacs = {
enable = true;
install = true;
package = pkgs.emacs;
defaultEditor = true;
};
# windowManager.session = pkgs.lib.singleton { # windowManager.session = pkgs.lib.singleton {
# name = "stumpwm"; # name = "stumpwm";
# start = '' # start = ''

View File

@ -3,7 +3,7 @@
with lib; with lib;
let let
# Available to all users on the system. Keep it minimal. # Available to all users on the system. Keep it minimal.
global-packages = with pkgs; [ emacs openssh_gssapi vim wget ]; global-packages = with pkgs; [ openssh_gssapi vim wget ];
in { in {
environment = { environment = {
@ -11,7 +11,7 @@ in {
systemPackages = global-packages; systemPackages = global-packages;
environment.shellInit = '' shellInit = ''
${pkgs.gnupg}/bin/gpg-connect-agent /bye ${pkgs.gnupg}/bin/gpg-connect-agent /bye
export SSH_AUTH_SOCK=$(${pkgs.gnupg}/bin/gpgconf --list-dirs agent-ssh-socket) export SSH_AUTH_SOCK=$(${pkgs.gnupg}/bin/gpgconf --list-dirs agent-ssh-socket)
''; '';
@ -23,11 +23,6 @@ in {
system.autoUpgrade.enable = true; system.autoUpgrade.enable = true;
services = { services = {
emacs = {
enable = true;
defaultEditor = true;
};
openssh = { openssh = {
enable = true; enable = true;
startWhenNeeded = true; startWhenNeeded = true;

View File

@ -48,13 +48,13 @@ in {
emacs-nox emacs-nox
ldns ldns
ldns.examples ldns.examples
jdk12_headless jdk14_headless
racket-minimal racket-minimal
reboot-if-necessary reboot-if-necessary
test-config test-config
]; ];
noXlibs = true; # noXlibs = lib.mkForce true;
}; };
security = { hideProcessInformation = true; }; security = { hideProcessInformation = true; };
@ -63,7 +63,16 @@ in {
boot.tmpOnTmpfs = true; boot.tmpOnTmpfs = true;
services.xserver.enable = false; services = {
xserver.enable = false;
emacs = {
enable = true;
install = true;
package = pkgs.emacs;
defaultEditor = true;
};
};
sound.enable = false; sound.enable = false;
hardware.pulseaudio.enable = false; hardware.pulseaudio.enable = false;

View File

@ -0,0 +1,5 @@
{ config, lib, pkgs, ... }:
{
}

5
config/sites/portage.nix Normal file
View File

@ -0,0 +1,5 @@
{ config, lib, pkgs, ... }:
{
}

5
config/sites/russell.nix Normal file
View File

@ -0,0 +1,5 @@
{ config, lib, pkgs, ... }:
{
}

5
config/sites/seattle.nix Normal file
View File

@ -0,0 +1,5 @@
{ config, lib, pkgs, ... }:
{
}

View File

@ -6,84 +6,85 @@
uid = 10000; uid = 10000;
primary-group = "admin"; primary-group = "admin";
common-name = "Peter Selby"; common-name = "Peter Selby";
ldap-hashed-password = "{SSHA}dF/5NGkafL8M1kpa3LYZKdh0Pc7a02gA"; ldap-hashed-passwd = "{SSHA}dF/5NGkafL8M1kpa3LYZKdh0Pc7a02gA";
login-hashed-password = login-hashed-passwd =
"$6$a1q2Duoe35hd5$IaZGXPfqyGv9uq5DQm7DZq0vIHsUs39sLktBiBBqMiwl/f/Z4jSvNZLJp9DZJYe5u2qGBYh1ca.jsXvQA8FPZ/"; "$6$a1q2Duoe35hd5$IaZGXPfqyGv9uq5DQm7DZq0vIHsUs39sLktBiBBqMiwl/f/Z4jSvNZLJp9DZJYe5u2qGBYh1ca.jsXvQA8FPZ/";
ssh-authorized-keys = [ ssh-authorized-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" "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"
]; ];
home = "/home/niten"; home-directory = "/home/niten";
home-manager-config = import ../home-manager/niten.nix { inherit config lib pkgs; };
}; };
andrew = { andrew = {
uid = 10001; uid = 10001;
primary-group = "selby"; primary-group = "selby";
common-name = "Andrew Selby"; common-name = "Andrew Selby";
ldap-hashed-password = ""; ldap-hashed-passwd = "";
}; };
animus = { animus = {
uid = 10002; uid = 10002;
primary-group = "fudo"; primary-group = "fudo";
common-name = "James Frazer"; common-name = "James Frazer";
ldap-hashed-password = ""; ldap-hashed-passwd = "";
}; };
ark = { ark = {
uid = 10005; uid = 10005;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Roger Wong"; common-name = "Roger Wong";
ldap-hashed-password = ""; ldap-hashed-passwd = "";
}; };
ben = { ben = {
uid = 10007; uid = 10007;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Ben"; common-name = "Ben";
ldap-hashed-password = "{MD5}v0jY5bADu30cAR1Uu/eWYQ=="; ldap-hashed-passwd = "{MD5}v0jY5bADu30cAR1Uu/eWYQ==";
}; };
chad = { chad = {
uid = 10011; uid = 10011;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Chad Isbister"; common-name = "Chad Isbister";
ldap-hashed-password = "{MD5}fQ309GUF2DvHlJ3R+5wNuA=="; ldap-hashed-passwd = "{MD5}fQ309GUF2DvHlJ3R+5wNuA==";
}; };
ckoo = { ckoo = {
uid = 10014; uid = 10014;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Jason Bush"; common-name = "Jason Bush";
ldap-hashed-password = "{MD5}KMFeaBc7e/gVzL/QUT0mYw=="; ldap-hashed-passwd = "{MD5}KMFeaBc7e/gVzL/QUT0mYw==";
}; };
dana = { dana = {
uid = 10015; uid = 10015;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Dana Eftodie"; common-name = "Dana Eftodie";
ldap-hashed-password = "{MD5}+ijTylKau4uot2kGMqKSTA=="; ldap-hashed-passwd = "{MD5}+ijTylKau4uot2kGMqKSTA==";
}; };
jill = { jill = {
uid = 10030; uid = 10030;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Jill Isbister"; common-name = "Jill Isbister";
ldap-hashed-password = "{MD5}fQ309GUF2DvHlJ3R+5wNuA=="; ldap-hashed-passwd = "{MD5}fQ309GUF2DvHlJ3R+5wNuA==";
}; };
joker4ever = { joker4ever = {
uid = 10033; uid = 10033;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Jack Clarke"; common-name = "Jack Clarke";
ldap-hashed-password = "{SSHA}w78XwSax9WywIDujMxEoO7o87d2LDJRo"; ldap-hashed-passwd = "{SSHA}w78XwSax9WywIDujMxEoO7o87d2LDJRo";
}; };
ken = { ken = {
uid = 10035; uid = 10035;
primary-group = "selby"; primary-group = "selby";
common-name = "Ken Selby"; common-name = "Ken Selby";
ldap-hashed-password = "{SSHA}YvtkEpqsReXcMdrzlui/ZmhIUKN42YO1"; ldap-hashed-passwd = "{SSHA}YvtkEpqsReXcMdrzlui/ZmhIUKN42YO1";
login-hashed-password = login-hashed-passwd =
"$6$EwK9fpbH8$gYVzYY1IYw2/G0wCeUxXrZZqvjWCkCZbBqCOhxowbMuYtC5G0vp.AoYhVKWOJcHJM2c7TdPmAdnhLIe2KYStf."; "$6$EwK9fpbH8$gYVzYY1IYw2/G0wCeUxXrZZqvjWCkCZbBqCOhxowbMuYtC5G0vp.AoYhVKWOJcHJM2c7TdPmAdnhLIe2KYStf.";
}; };
@ -91,88 +92,88 @@
uid = 10049; uid = 10049;
primary-group = "admin"; primary-group = "admin";
common-name = "Jonathan Stewart"; common-name = "Jonathan Stewart";
ldap-hashed-password = "{MD5}EBvifhJ6z9dIDx0KWkAPoQ=="; ldap-hashed-passwd = "{MD5}EBvifhJ6z9dIDx0KWkAPoQ==";
login-hashed-password = login-hashed-passwd =
"$6$a1q2Duoe35hd5$IaZGXPfqyGv9uq5DQm7DZq0vIHsUs39sLktBiBBqMiwl/f/Z4jSvNZLJp9DZJYe5u2qGBYh1ca.jsXvQA8FPZ/"; "$6$a1q2Duoe35hd5$IaZGXPfqyGv9uq5DQm7DZq0vIHsUs39sLktBiBBqMiwl/f/Z4jSvNZLJp9DZJYe5u2qGBYh1ca.jsXvQA8FPZ/";
home = "/home/reaper"; home-directory = "/home/reaper";
}; };
slickoil = { slickoil = {
uid = 10052; uid = 10052;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Connor Cooley"; common-name = "Connor Cooley";
ldap-hashed-password = "{MD5}8Qrpagi8TYnZQdFoYe02rA=="; ldap-hashed-passwd = "{MD5}8Qrpagi8TYnZQdFoYe02rA==";
}; };
splat1 = { splat1 = {
uid = 10053; uid = 10053;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Matt Evans"; common-name = "Matt Evans";
ldap-hashed-password = "{MD5}JeHNutGTBMHOqFgVlYjfpw=="; ldap-hashed-passwd = "{MD5}JeHNutGTBMHOqFgVlYjfpw==";
}; };
swaff = { swaff = {
uid = 10055; uid = 10055;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Mark Swaffer"; common-name = "Mark Swaffer";
ldap-hashed-password = "{MD5}C5gIsLsaKSvIPydu4uzhNg=="; ldap-hashed-passwd = "{MD5}C5gIsLsaKSvIPydu4uzhNg==";
}; };
brian = { brian = {
uid = 10056; uid = 10056;
primary-group = "selby"; primary-group = "selby";
common-name = "Brian Selby"; common-name = "Brian Selby";
ldap-hashed-password = "{crypt}$1$npZLTPEO$p2bTx8TTlCg7XNiivTJsC1"; ldap-hashed-passwd = "{crypt}$1$npZLTPEO$p2bTx8TTlCg7XNiivTJsC1";
}; };
rob = { rob = {
uid = 10057; uid = 10057;
primary-group = "selby"; primary-group = "selby";
common-name = "Robert Selby"; common-name = "Robert Selby";
ldap-hashed-password = "{crypt}HD1ESf1hAGdks"; ldap-hashed-passwd = "{crypt}HD1ESf1hAGdks";
}; };
tarbash = { tarbash = {
uid = 10059; uid = 10059;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Neville"; common-name = "Neville";
ldap-hashed-password = "{crypt}$1$cE6lVNbC$PLjlE9vK77SKNKwJBKiT//"; ldap-hashed-passwd = "{crypt}$1$cE6lVNbC$PLjlE9vK77SKNKwJBKiT//";
}; };
darryl = { darryl = {
uid = 10060; uid = 10060;
primary-group = "selby"; primary-group = "selby";
common-name = "Darryl Kissick"; common-name = "Darryl Kissick";
ldap-hashed-password = "{crypt}$1$oUNTMyKU$oUs6JqBRTPKE9A/sEzlSY0"; ldap-hashed-passwd = "{crypt}$1$oUNTMyKU$oUs6JqBRTPKE9A/sEzlSY0";
}; };
ayumi = { ayumi = {
uid = 10061; uid = 10061;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Ayumi Kira"; common-name = "Ayumi Kira";
ldap-hashed-password = "{MD5}5OkpooOLxw94nF1lOfn/ZQ=="; ldap-hashed-passwd = "{MD5}5OkpooOLxw94nF1lOfn/ZQ==";
}; };
saphira = { saphira = {
uid = 10063; uid = 10063;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Elizabeth Stewart"; common-name = "Elizabeth Stewart";
ldap-hashed-password = "{crypt}$1$cQ/Zq25x$fUQfUtpMB.f3rBWzttPns."; ldap-hashed-passwd = "{crypt}$1$cQ/Zq25x$fUQfUtpMB.f3rBWzttPns.";
}; };
banen = { banen = {
uid = 10064; uid = 10064;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Travis Neis"; common-name = "Travis Neis";
ldap-hashed-password = "{crypt}$1$cyfM/Vni$vIuirRln.MnWActOR6t8S."; ldap-hashed-passwd = "{crypt}$1$cyfM/Vni$vIuirRln.MnWActOR6t8S.";
}; };
xiaoxuan = { xiaoxuan = {
uid = 10065; uid = 10065;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Xiaoxuan Jin"; common-name = "Xiaoxuan Jin";
ldap-hashed-password = "{MD5}iecbyMpyVkmOaMBzSFy58Q=="; ldap-hashed-passwd = "{MD5}iecbyMpyVkmOaMBzSFy58Q==";
login-hashed-password = login-hashed-passwd =
"$6$C8lYHrK7KvdKm/RE$cHZ2hg5gEOEjTV8Zoayik8sz5h.Vh0.ClCgOlQn8l/2Qx/qdxqZ7xCsAZ1GZ.IEyESfhJeJbjLpykXDwPpfVF0"; "$6$C8lYHrK7KvdKm/RE$cHZ2hg5gEOEjTV8Zoayik8sz5h.Vh0.ClCgOlQn8l/2Qx/qdxqZ7xCsAZ1GZ.IEyESfhJeJbjLpykXDwPpfVF0";
}; };
@ -180,232 +181,232 @@
uid = 10066; uid = 10066;
primary-group = "fudo"; primary-group = "fudo";
common-name = ""; common-name = "";
ldap-hashed-password = "{crypt}$1$HzQOn3zV$ogkeS5ByWrFstYo0FhXB/."; ldap-hashed-passwd = "{crypt}$1$HzQOn3zV$ogkeS5ByWrFstYo0FhXB/.";
}; };
flowchart = { flowchart = {
uid = 10067; uid = 10067;
primary-group = "fudo"; primary-group = "fudo";
common-name = "BH Bieterse"; common-name = "BH Bieterse";
ldap-hashed-password = "{crypt}$1$lQMZ42RZ$aAOsLHP0i.yfvD1a1EVsA/"; ldap-hashed-passwd = "{crypt}$1$lQMZ42RZ$aAOsLHP0i.yfvD1a1EVsA/";
}; };
gubbs = { gubbs = {
uid = 10068; uid = 10068;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Lorcan Gavin"; common-name = "Lorcan Gavin";
ldap-hashed-password = "{MD5}AIf4bJZyHCnvJVL3YHRnIg=="; ldap-hashed-passwd = "{MD5}AIf4bJZyHCnvJVL3YHRnIg==";
}; };
debo = { debo = {
uid = 10069; uid = 10069;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Deborah Osti"; common-name = "Deborah Osti";
ldap-hashed-password = "{crypt}$1$5wEBGh/8$Ggp2JAI/rQiBXxJ89G0iq1"; ldap-hashed-passwd = "{crypt}$1$5wEBGh/8$Ggp2JAI/rQiBXxJ89G0iq1";
}; };
leefolio = { leefolio = {
uid = 10070; uid = 10070;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Ze Artiste"; common-name = "Ze Artiste";
ldap-hashed-password = "{crypt}$1$LRlAYBst$sS1bPu8yEPrdYkQhoZhAq1"; ldap-hashed-passwd = "{crypt}$1$LRlAYBst$sS1bPu8yEPrdYkQhoZhAq1";
}; };
zimm = { zimm = {
uid = 10071; uid = 10071;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Ross Drinkwater"; common-name = "Ross Drinkwater";
ldap-hashed-password = "{SSHA}er1cgYDNPJsfLwtqYLopKMGMxiZZRGdY"; ldap-hashed-passwd = "{SSHA}er1cgYDNPJsfLwtqYLopKMGMxiZZRGdY";
}; };
gaijin = { gaijin = {
uid = 10072; uid = 10072;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Tetsuo Torigai"; common-name = "Tetsuo Torigai";
ldap-hashed-password = "{crypt}$1$bw8hyDXm$pMLLUtlDlVLwBTZiC0Lzf0"; ldap-hashed-passwd = "{crypt}$1$bw8hyDXm$pMLLUtlDlVLwBTZiC0Lzf0";
}; };
anorthe = { anorthe = {
uid = 10073; uid = 10073;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Bonnie Wong"; common-name = "Bonnie Wong";
ldap-hashed-password = "{crypt}$1$DORfHzbp$nJkk0OXd7WzYDxx8LbdMK."; ldap-hashed-passwd = "{crypt}$1$DORfHzbp$nJkk0OXd7WzYDxx8LbdMK.";
}; };
stewartd = { stewartd = {
uid = 10076; uid = 10076;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Dwight Stewart"; common-name = "Dwight Stewart";
ldap-hashed-password = "{MD5}e2GSmH+l4ZZ808snWsFNYw=="; ldap-hashed-passwd = "{MD5}e2GSmH+l4ZZ808snWsFNYw==";
}; };
jess = { jess = {
uid = 10078; uid = 10078;
primary-group = "selby"; primary-group = "selby";
common-name = "Jessica Selby"; common-name = "Jessica Selby";
ldap-hashed-password = "{MD5}2tbtZre16apUTNtRIK98nQ=="; ldap-hashed-passwd = "{MD5}2tbtZre16apUTNtRIK98nQ==";
}; };
kevin = { kevin = {
uid = 10079; uid = 10079;
primary-group = "selby"; primary-group = "selby";
common-name = "Kevin Selby"; common-name = "Kevin Selby";
ldap-hashed-password = "{crypt}$1$UYKrkMEe$SAABgc1pCBYgPFIMepNrM."; ldap-hashed-passwd = "{crypt}$1$UYKrkMEe$SAABgc1pCBYgPFIMepNrM.";
}; };
theblacksun = { theblacksun = {
uid = 10080; uid = 10080;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Brendan Goodfellow"; common-name = "Brendan Goodfellow";
ldap-hashed-password = "{MD5}Hmw6pFYYT87nmpLp0QxcQw=="; ldap-hashed-passwd = "{MD5}Hmw6pFYYT87nmpLp0QxcQw==";
}; };
kris = { kris = {
uid = 10082; uid = 10082;
primary-group = "selby"; primary-group = "selby";
common-name = "Kris Huberdeau"; common-name = "Kris Huberdeau";
ldap-hashed-password = "{SSHA}RUYeAEUyblnCWa9uBzY9nwsmoksy8P3Y"; ldap-hashed-passwd = "{SSHA}RUYeAEUyblnCWa9uBzY9nwsmoksy8P3Y";
}; };
jun = { jun = {
uid = 10083; uid = 10083;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Junichi Suzuki"; common-name = "Junichi Suzuki";
ldap-hashed-password = "{crypt}$1$ExfgQXb8$b1ihvMRbG2dWbnlmzzI/h."; ldap-hashed-passwd = "{crypt}$1$ExfgQXb8$b1ihvMRbG2dWbnlmzzI/h.";
}; };
jinny = { jinny = {
uid = 10084; uid = 10084;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Hye-jin Kim"; common-name = "Hye-jin Kim";
ldap-hashed-password = "{crypt}$1$6cld82N8$5a9ovCPXSacDmK3TWDaF30"; ldap-hashed-passwd = "{crypt}$1$6cld82N8$5a9ovCPXSacDmK3TWDaF30";
}; };
helen = { helen = {
uid = 10086; uid = 10086;
primary-group = "selby"; primary-group = "selby";
common-name = "Helen Selby"; common-name = "Helen Selby";
ldap-hashed-password = "{SSHA}uckUXX09MjYq9++sF3f9b2IY8a9UBIxm"; ldap-hashed-passwd = "{SSHA}uckUXX09MjYq9++sF3f9b2IY8a9UBIxm";
}; };
vee = { vee = {
uid = 10087; uid = 10087;
primary-group = "selby"; primary-group = "selby";
common-name = "Vee Selby"; common-name = "Vee Selby";
ldap-hashed-password = "snoinuer"; ldap-hashed-passwd = "snoinuer";
}; };
dabar = { dabar = {
uid = 10088; uid = 10088;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Dan Bernardic"; common-name = "Dan Bernardic";
ldap-hashed-password = "{MD5}ULrk46YUeUZQrl0+wAQiWA=="; ldap-hashed-passwd = "{MD5}ULrk46YUeUZQrl0+wAQiWA==";
}; };
r3d3 = { r3d3 = {
uid = 10089; uid = 10089;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Derek Veroni"; common-name = "Derek Veroni";
ldap-hashed-password = "{SHA}2XyijGDovUhA1/Z/XR+9h9Ia4fY="; ldap-hashed-passwd = "{SHA}2XyijGDovUhA1/Z/XR+9h9Ia4fY=";
}; };
laura = { laura = {
uid = 10090; uid = 10090;
primary-group = "selby"; primary-group = "selby";
common-name = "Laura Selby"; common-name = "Laura Selby";
ldap-hashed-password = "{MD5}MI65czN0duIudMhYH+BU9Q=="; ldap-hashed-passwd = "{MD5}MI65czN0duIudMhYH+BU9Q==";
}; };
tuk = { tuk = {
uid = 10091; uid = 10091;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Taku Koba"; common-name = "Taku Koba";
ldap-hashed-password = "{MD5}DQuoQluy50128r8MxAmFkQ=="; ldap-hashed-passwd = "{MD5}DQuoQluy50128r8MxAmFkQ==";
}; };
aki = { aki = {
uid = 10092; uid = 10092;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Akihito Mori"; common-name = "Akihito Mori";
ldap-hashed-password = "{MD5}oGAt2kJGKMqX+CmfV1w/GA=="; ldap-hashed-passwd = "{MD5}oGAt2kJGKMqX+CmfV1w/GA==";
}; };
ansyg = { ansyg = {
uid = 10095; uid = 10095;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Anseok Joo"; common-name = "Anseok Joo";
ldap-hashed-password = "{MD5}AHhHl02D3uDmWhPJZ6QPOw=="; ldap-hashed-passwd = "{MD5}AHhHl02D3uDmWhPJZ6QPOw==";
}; };
jackie = { jackie = {
uid = 10097; uid = 10097;
primary-group = "selby"; primary-group = "selby";
common-name = "Jackie Selby"; common-name = "Jackie Selby";
ldap-hashed-password = "{MD5}fa6JfWySlH63sITsxrTt0Q=="; ldap-hashed-passwd = "{MD5}fa6JfWySlH63sITsxrTt0Q==";
}; };
mtopf = { mtopf = {
uid = 10100; uid = 10100;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Michael Topf"; common-name = "Michael Topf";
ldap-hashed-password = "{MD5}/pleD8SiLhmnRr1RVspNcA=="; ldap-hashed-passwd = "{MD5}/pleD8SiLhmnRr1RVspNcA==";
}; };
tat = { tat = {
uid = 10101; uid = 10101;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Tatsuro Akano"; common-name = "Tatsuro Akano";
ldap-hashed-password = "{MD5}fAV5GX8UdjsXIFjU0Ex4SA=="; ldap-hashed-passwd = "{MD5}fAV5GX8UdjsXIFjU0Ex4SA==";
}; };
blatzkrieg = { blatzkrieg = {
uid = 10102; uid = 10102;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Brendan Blatz"; common-name = "Brendan Blatz";
ldap-hashed-password = "{MD5}1nE/ndFwGbfH/wLagxvt8w=="; ldap-hashed-passwd = "{MD5}1nE/ndFwGbfH/wLagxvt8w==";
}; };
ellie = { ellie = {
uid = 10103; uid = 10103;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Ellie Lee"; common-name = "Ellie Lee";
ldap-hashed-password = "{MD5}gzjwt+kw2nmvJ1FKFTpSZA=="; ldap-hashed-passwd = "{MD5}gzjwt+kw2nmvJ1FKFTpSZA==";
}; };
alan = { alan = {
uid = 10104; uid = 10104;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Alan Wong"; common-name = "Alan Wong";
ldap-hashed-password = "{MD5}WhohVE4xfo9RIOw1kG3s1Q=="; ldap-hashed-passwd = "{MD5}WhohVE4xfo9RIOw1kG3s1Q==";
}; };
omefire = { omefire = {
uid = 10105; uid = 10105;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Omar Mefire"; common-name = "Omar Mefire";
ldap-hashed-password = "{SSHA}W6KWo26wl/nawpV++wMqsKdwrIwrait5"; ldap-hashed-passwd = "{SSHA}W6KWo26wl/nawpV++wMqsKdwrIwrait5";
}; };
gordon = { gordon = {
uid = 10106; uid = 10106;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Gordon Stewart"; common-name = "Gordon Stewart";
ldap-hashed-password = "{SSHA}jaCOc1ZjCI9klVR+v676lIBOidEg7/u0"; ldap-hashed-passwd = "{SSHA}jaCOc1ZjCI9klVR+v676lIBOidEg7/u0";
}; };
jeramy = { jeramy = {
uid = 10107; uid = 10107;
primary-group = "selby"; primary-group = "selby";
common-name = "Jeramy Ewbank"; common-name = "Jeramy Ewbank";
ldap-hashed-password = "{MD5}8j8vTniyRzylmeTNUoRwWA=="; ldap-hashed-passwd = "{MD5}8j8vTniyRzylmeTNUoRwWA==";
}; };
lauren = { lauren = {
uid = 10108; uid = 10108;
primary-group = "selby"; primary-group = "selby";
common-name = "Lauren Hotel"; common-name = "Lauren Hotel";
ldap-hashed-password = "{SSHA}1q/MC5LKROlIT1nDrKrMvcFAXFtcQXIR"; ldap-hashed-passwd = "{SSHA}1q/MC5LKROlIT1nDrKrMvcFAXFtcQXIR";
# ldap-hashed-password = "{SSHA}DKnhrycmXSu4HKWFPeBXA9xvZ0ytgXIpZA10tg=="; # ldap-hashed-passwd = "{SSHA}DKnhrycmXSu4HKWFPeBXA9xvZ0ytgXIpZA10tg==";
}; };
# Used to send alerts from grafana # Used to send alerts from grafana
@ -413,14 +414,14 @@
uid = 10109; uid = 10109;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Fudo Metrics"; common-name = "Fudo Metrics";
ldap-hashed-password = "{SSHA}FveEVy6kljQZey0xp0nF62SMlO5nATJ1"; ldap-hashed-passwd = "{SSHA}FveEVy6kljQZey0xp0nF62SMlO5nATJ1";
}; };
testuser = { testuser = {
uid = 10110; uid = 10110;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Test User"; common-name = "Test User";
ldap-hashed-password = "{SSHA}LSz1WjWfjRwAM3xm+QZ71vFj997dnZC6"; ldap-hashed-passwd = "{SSHA}LSz1WjWfjRwAM3xm+QZ71vFj997dnZC6";
}; };
# Used to send messages from the chat server # Used to send messages from the chat server
@ -428,28 +429,28 @@
uid = 10111; uid = 10111;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Fudo Chat"; common-name = "Fudo Chat";
ldap-hashed-password = "{SSHA}XDYAM2JE4PXssywRzO4tVSbn5lUZOgg7"; ldap-hashed-passwd = "{SSHA}XDYAM2JE4PXssywRzO4tVSbn5lUZOgg7";
}; };
kevinyinjunjie = { kevinyinjunjie = {
uid = 10112; uid = 10112;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Kevin"; common-name = "Kevin";
ldap-hashed-password = "{SSHA}1onx6HPMKCJvmLnRf1tiWFJ1D92DEtnl"; ldap-hashed-passwd = "{SSHA}1onx6HPMKCJvmLnRf1tiWFJ1D92DEtnl";
}; };
netinfo = { netinfo = {
uid = 10113; uid = 10113;
primary-group = "fudo"; primary-group = "fudo";
common-name = "Network Info Mailer"; common-name = "Network Info Mailer";
ldap-hashed-password = "{SSHA}UQHfW0IzjIbRU6VV+DraxvZFWt0to3oc"; ldap-hashed-passwd = "{SSHA}UQHfW0IzjIbRU6VV+DraxvZFWt0to3oc";
}; };
selby-forum = { selby-forum = {
uid = 10114; uid = 10114;
primary-group = "selby"; primary-group = "selby";
common-name = "Selby Forum"; common-name = "Selby Forum";
ldap-hashed-password = "{SSHA}f7eDNuwFXRhvants5cJJ/FGtkCKheY2Q"; ldap-hashed-passwd = "{SSHA}f7eDNuwFXRhvants5cJJ/FGtkCKheY2Q";
}; };
}; };
} }

View File

@ -1,10 +0,0 @@
{ config, lib, pkgs, local-hostname ? builtins.readFile ./instance-hostname.txt
, ... }:
let local-hostname = builtins.readFile ./instance-hostname.txt;
in {
lib = lib // { fudo = import ./lib/fudolib.nix { }; };
instance.hostname = local-hostname;
imports = [ ./lib ./config ./hardware.nix ];
}

View File

@ -1,6 +1,14 @@
{ config, ... }: { 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 = imports =
[ config.fudo.hosts."${config.fudo.instance.hostname}".hardware-config ]; [ (import-hardware-config current-hostname) ];
} }

30
initialize.nix Normal file
View File

@ -0,0 +1,30 @@
{ hostname, profile, domain, site, home-manager-package, ... }:
{
imports = [
./lib
./config
./packages
(import "${home-manager-package}/nixos")
(./. + "/config/hardware/${hostname}.nix")
(./. + "/config/hosts/${hostname}.nix")
(./. + "/config/profiles/${profile}.nix")
(./. + "/config/domains/${domain}.nix")
(./. + "/config/sites/${site}.nix")
];
config = {
instance = {
hostname = hostname;
};
fudo.hosts."${hostname}" = {
domain = domain;
hostname = hostname;
site = site;
profile = profile;
};
};
}

View File

@ -1,6 +1,8 @@
{ lib, config, pkgs, ... }: { lib, config, pkgs, ... }:
with lib; { with lib; {
lib = lib // { fudo = import ./lib/fudolib.nix { }; };
imports = [ imports = [
./instance.nix ./instance.nix
@ -10,9 +12,11 @@ with lib; {
./fudo/chat.nix ./fudo/chat.nix
./fudo/client/dns.nix ./fudo/client/dns.nix
./fudo/dns.nix ./fudo/dns.nix
./fudo/domains.nix
./fudo/garbage-collector.nix ./fudo/garbage-collector.nix
./fudo/git.nix ./fudo/git.nix
./fudo/grafana.nix ./fudo/grafana.nix
./fudo/hosts.nix
./fudo/ipfs.nix ./fudo/ipfs.nix
./fudo/kdc.nix ./fudo/kdc.nix
./fudo/ldap.nix ./fudo/ldap.nix
@ -26,10 +30,13 @@ with lib; {
./fudo/postgres.nix ./fudo/postgres.nix
./fudo/prometheus.nix ./fudo/prometheus.nix
./fudo/secure-dns-proxy.nix ./fudo/secure-dns-proxy.nix
./fudo/sites.nix
./fudo/slynk.nix ./fudo/slynk.nix
./fudo/system.nix ./fudo/system.nix
./fudo/users.nix
./fudo/vpn.nix ./fudo/vpn.nix
./fudo/webmail.nix ./fudo/webmail.nix
./fudo/wireless-networks.nix
./informis/cl-gemini.nix ./informis/cl-gemini.nix
]; ];

View File

@ -1,5 +1,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
let let
domainOpts = { domain, ... }: { domainOpts = { domain, ... }: {
options = { options = {
@ -30,6 +31,12 @@ let
default = [ ]; default = [ ];
}; };
local-groups = mkOption {
type = with types; listOf str;
description = "List of groups which should exist within this domain.";
default = [ ];
};
admin-email = mkOption { admin-email = mkOption {
type = types.str; type = types.str;
description = "Email for the administrator of this domain."; description = "Email for the administrator of this domain.";

View File

@ -17,6 +17,11 @@ let
default = "fudo.org"; default = "fudo.org";
}; };
site = mkOption {
type = types.str;
description = "Site at which the host is located.";
};
local-networks = mkOption { local-networks = mkOption {
type = with types; listof str; type = with types; listof str;
description = description =
@ -51,6 +56,12 @@ let
default = [ ]; default = [ ];
}; };
description = mkOption {
type = types.str;
description = "Description of this host.";
default = "Another Fudo Host.";
};
local-admins = mkOption { local-admins = mkOption {
type = with types; listOf str; type = with types; listOf str;
description = description =
@ -58,6 +69,17 @@ let
default = [ ]; default = [ ];
}; };
local-groups = mkOption {
type = with types; listOf str;
description = "List of groups which should exist on this host.";
default = [ ];
};
hardware-config = mkOption {
type = types.str;
description = "Path to the hardware configuration for this host.";
};
enable-gui = mkEnableOption "Install desktop GUI software."; enable-gui = mkEnableOption "Install desktop GUI software.";
docker-server = mkEnableOption "Enable Docker on the current host."; docker-server = mkEnableOption "Enable Docker on the current host.";
@ -75,7 +97,7 @@ in {
hostname = config.instance.hostname; hostname = config.instance.hostname;
host-cfg = config.fudo.hosts.${hostname}; host-cfg = config.fudo.hosts.${hostname};
site-name = host-cfg.site; site-name = host-cfg.site;
site = config.fudo.site.${site-name}; site = config.fudo.sites.${site-name};
domain-name = host-cfg.domain; domain-name = host-cfg.domain;
domain = config.fudo.domain.${domain-name}; domain = config.fudo.domain.${domain-name};
@ -96,12 +118,12 @@ in {
services.cron.mailto = domain.admin-email; services.cron.mailto = domain.admin-email;
environment.systemPackages = with pkgs; environment.systemPackages = with pkgs;
mkIf (cfg.docker-server) [ docker nix-prefetch-docker ]; mkIf (host-cfg.docker-server) [ docker nix-prefetch-docker ];
virtualisation.docker = mkIf (cfg.docker-server) { virtualisation.docker = mkIf (host-cfg.docker-server) {
enable = true; enable = true;
enableOnBoot = true; enableOnBoot = true;
autoprune.enable = true; autoPrune.enable = true;
}; };
}; };
} }

View File

@ -3,7 +3,7 @@
with lib; with lib;
let let
cfg = config.fudo.auth.server; cfg = config.fudo.auth.ldap-server;
ldapSystemUserOpts = { name, ... }: { ldapSystemUserOpts = { name, ... }: {
options = { options = {
@ -172,7 +172,7 @@ in {
options = { options = {
fudo = { fudo = {
auth = { auth = {
server = { ldap-server = {
enable = mkEnableOption "Fudo Authentication"; enable = mkEnableOption "Fudo Authentication";
kerberos-host = mkOption { kerberos-host = mkOption {
@ -297,6 +297,7 @@ in {
mode = "0400"; mode = "0400";
user = "openldap"; user = "openldap";
group = "openldap"; group = "openldap";
# FIXME: take arguments!
text = '' text = ''
mech_list: gssapi external mech_list: gssapi external
keytab: /etc/ldap/ldap.keytab keytab: /etc/ldap/ldap.keytab

View File

@ -1,5 +1,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
let let
siteOpts = { site, ... }: { siteOpts = { site, ... }: {
options = { options = {
@ -27,6 +28,24 @@ let
default = null; default = null;
}; };
local-groups = mkOption {
type = with types; listOf str;
description = "List of groups which should exist at this site.";
default = [ ];
};
local-users = mkOption {
type = with types; listOf str;
description = "List of users which should exist on all hosts at this site.";
default = [ ];
};
local-admins = mkOption {
type = with types; listOf str;
description = "List of admin users which should exist on all hosts at this site.";
default = [ ];
};
enable-monitoring = enable-monitoring =
mkEnableOption "Enable site-wide monitoring with prometheus."; mkEnableOption "Enable site-wide monitoring with prometheus.";
@ -35,12 +54,18 @@ let
description = "List of nameservers to be used by hosts at this site."; description = "List of nameservers to be used by hosts at this site.";
default = [ ]; default = [ ];
}; };
timezone = mkOption {
type = types.str;
description = "Timezone of the site.";
example = "America/Winnipeg";
};
}; };
}; };
in { in {
options.fudo.sites = mkOption { options.fudo.sites = mkOption {
type = with types; attrsOf (submodule domainOpts); type = with types; attrsOf (submodule siteOpts);
description = "Site configurations for all sites known to the system."; description = "Site configurations for all sites known to the system.";
default = { }; default = { };
}; };

View File

@ -2,8 +2,6 @@
with lib; with lib;
let let
cfg = config.fudo.users;
systemUserOpts = { username, ... }: { systemUserOpts = { username, ... }: {
options = { options = {
username = mkOption { username = mkOption {
@ -33,7 +31,7 @@ let
default = username; default = username;
}; };
uidNumber = mkOption { uid = mkOption {
type = types.int; type = types.int;
description = "Unique UID number for the user."; description = "Unique UID number for the user.";
}; };
@ -86,8 +84,9 @@ let
}; };
home-directory = mkOption { home-directory = mkOption {
type = types.str; type = with types; nullOr str;
description = "Default home directory for the given user."; description = "Default home directory for the given user.";
default = null;
}; };
}; };
}; };
@ -111,13 +110,19 @@ let
description = "A list of users who are members of the current group."; description = "A list of users who are members of the current group.";
}; };
gidNumber = mkOption { gid = mkOption {
type = types.int; type = types.int;
description = "GID number of the group."; description = "GID number of the group.";
}; };
}; };
}; };
list-includes = list: el: isNull (findFirst (this: this == el) null list);
filterExistingUsers = users: group-members:
let user-list = attrNames users;
in filter (username: list-includes user-list username) group-members;
in { in {
options.fudo = { options.fudo = {
users = mkOption { users = mkOption {
@ -140,27 +145,28 @@ in {
}; };
config = let config = let
local-host = config.fudo.common.hostname; local-host = config.instance.hostname;
local-domain = config.fudo.common.domain; local-domain = config.fudo.hosts.${local-host}.domain;
local-site = config.fudo.hosts.${local-host}.site;
local-user-list = config.fudo.hosts."${local-host}".local-users; host-user-list = config.fudo.hosts."${local-host}".local-users;
domain-user-list = config.fudo.domains."${local-domain}".local-users; domain-user-list = config.fudo.domains."${local-domain}".local-users;
local-users = getAttrs (local-user-list ++ domain-user-list) cfg.users; local-users = getAttrs (host-user-list ++ domain-user-list) config.fudo.users;
local-group-list = config.fudo.hosts."${local-host}".local-groups; host-admin-list = config.fudo.hosts."${local-host}".local-admins;
domain-admin-list = config.fudo.domains."${local-domain}".local-admins;
site-admin-list = config.fudo.sites."${local-site}".local-admins;
local-admins = host-admin-list ++ domain-admin-list ++ site-admin-list;
host-group-list = config.fudo.hosts."${local-host}".local-groups;
domain-group-list = config.fudo.domains."${local-domain}".local-groups; domain-group-list = config.fudo.domains."${local-domain}".local-groups;
local-groups = getAttrs (local-group-list ++ domain-group-list) cfg.groups; site-group-list = config.fudo.sites."${local-site}".local-groups;
local-groups = getAttrs (host-group-list ++ domain-group-list ++ site-group-list) config.fudo.groups;
in { in {
fudo.auth.ldap = let fudo.auth.ldap-server = let
ldapUsers = (filterAttrs ldapUsers = (filterAttrs
(username: userOpts: userOpts.ldap-hashed-password != null)) cfg.users; (username: userOpts: userOpts.ldap-hashed-password != null)) config.fudo.users;
list-includes = list: el: isNull (findFirst (this: this == el) list null);
filterExistingUsers = users: group-members:
let user-list = attrNames users;
in filter (username: list-includes user-list username) users;
in { in {
users = mapAttrs (username: userOpts: { users = mapAttrs (username: userOpts: {
@ -174,31 +180,35 @@ in {
gid = groupOpts.gid-number; gid = groupOpts.gid-number;
description = groupOpts.description; description = groupOpts.description;
members = filterExistingUsers ldapUsers groupOpts.members; members = filterExistingUsers ldapUsers groupOpts.members;
}) cfg.groups; }) config.fudo.groups;
system-users = mapAttrs (username: userOpts: { system-users = mapAttrs (username: userOpts: {
description = userOpts.description; description = userOpts.description;
hashed-password = userOpts.ldap-hashed-passwd; hashed-password = userOpts.ldap-hashed-passwd;
}) cfg.system-users; }) config.fudo.system-users;
}; };
users = { users = {
users = mapAttrs (username: userOpts: { users = mapAttrs (username: userOpts: {
isNormalUser = true; isNormalUser = true;
uid = userOpts.uidNumber; uid = userOpts.uid;
createHome = true; createHome = true;
description = userOpts.common-name; description = userOpts.common-name;
group = userOpts.primary-group; group = userOpts.primary-group;
home = userOpts.home; home = if (userOpts.home-directory != null) then userOpts.home-directory else "/home/${userOpts.primary-group}/${username}";
hashedPassword = userOpts.login-hashed-passwd; hashedPassword = userOpts.login-hashed-passwd;
openssh.authorizedKeys.keys = userOpts.ssh-authorized-keys; openssh.authorizedKeys.keys = userOpts.ssh-authorized-keys;
}) local-users; }) local-users;
groups = mapAttrs (groupname: groupOpts: { groups = (mapAttrs (groupname: groupOpts: {
gid = groupOpts.gidNumber; gid = groupOpts.gid;
description = groupOpts.description; members = filterExistingUsers local-users groupOpts.members;
members = filterExistingUsers localUsers groupOpts.members; }) local-groups) //
}) local-groups; {
wheel = {
members = local-admins;
};
};
}; };
home-manager.users = let home-manager.users = let

View File

@ -18,14 +18,14 @@ let
}; };
in { in {
option.fudo.wireless-networks = mkOption { options.fudo.wireless-networks = mkOption {
type = with types; listOf (submodule networkOpts); type = with types; listOf (submodule networkOpts);
description = "A map of wireless networks to attributes (including key)."; description = "A map of wireless networks to attributes (including key).";
default = { }; default = { };
}; };
config = { config = {
wireless.networks = networking.wireless.networks =
mapAttrs (network: networkOpts: { psk = networkOpts.key; }) mapAttrs (network: networkOpts: { psk = networkOpts.key; })
config.fudo.wireless-networks; config.fudo.wireless-networks;
}; };

View File

@ -1,5 +1,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
{ {
options.instance = { options.instance = {
hostname = mkOption { hostname = mkOption {

View File

@ -66,6 +66,10 @@ in {
buildInputs = oldAttrs.buildInputs ++ [ pkgs.krb5 ]; buildInputs = oldAttrs.buildInputs ++ [ pkgs.krb5 ];
}); });
gtk3-x11 = pkgs.gtk3.overrideAttrs (oldAttrs: rec {
buildInputs = oldAttrs.buildInputs ++ [ pkgs.cmake ];
});
hll2380dw-cups = import ./hll2380dw-cups.nix { hll2380dw-cups = import ./hll2380dw-cups.nix {
inherit (pkgs) inherit (pkgs)
stdenv fetchurl makeWrapper cups dpkg a2ps ghostscript gnugrep gnused stdenv fetchurl makeWrapper cups dpkg a2ps ghostscript gnugrep gnused