6 Commits

Author SHA1 Message Date
669b355d99 WIP
All checks were successful
Check flake syntax / flake-check (push) Successful in 12m34s
2026-01-12 14:02:14 +01:00
03846d5e7f [zineshop] re-enable
All checks were successful
Check flake syntax / flake-check (push) Successful in 6m9s
2025-12-05 14:46:18 +01:00
add299c242 Fix nix check; Also i disabled the zineshop temporairly
All checks were successful
Check flake syntax / flake-check (push) Successful in 13m44s
2025-12-03 16:38:31 +01:00
e8f929a35a [nixpkgs] 25.05 -> 25.11
Some checks failed
Check flake syntax / flake-check (push) Failing after 4m31s
2025-12-01 19:14:06 +01:00
42f2c91b8e Merge branch 'master' into staging 2025-12-01 19:08:53 +01:00
7bee418e79 [nixpkgs] update
All checks were successful
Check flake syntax / flake-check (push) Successful in 7m9s
2025-08-14 14:08:54 +02:00
21 changed files with 258 additions and 356 deletions

39
flake.lock generated
View File

@@ -21,27 +21,6 @@
"type": "github" "type": "github"
} }
}, },
"dns": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1768143854,
"narHash": "sha256-E5/kyPz4zAZn/lZdvqlF83jMgCWNxmqYjjWuadngCbk=",
"owner": "kirelagin",
"repo": "dns.nix",
"rev": "a97cf4156e9f044fe4bed5be531061000dfabb07",
"type": "github"
},
"original": {
"owner": "kirelagin",
"repo": "dns.nix",
"type": "github"
}
},
"ep3-bs": { "ep3-bs": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -64,21 +43,6 @@
} }
}, },
"flake-utils": { "flake-utils": {
"locked": {
"lastModified": 1614513358,
"narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5466c5bbece17adaab2d82fae80b46e807611bf3",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems_3"
}, },
@@ -138,7 +102,7 @@
}, },
"microvm": { "microvm": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ],
@@ -261,7 +225,6 @@
"root": { "root": {
"inputs": { "inputs": {
"disko": "disko", "disko": "disko",
"dns": "dns",
"ep3-bs": "ep3-bs", "ep3-bs": "ep3-bs",
"home-manager": "home-manager", "home-manager": "home-manager",
"mfsync": "mfsync", "mfsync": "mfsync",

View File

@@ -13,11 +13,6 @@
disko.url = "github:nix-community/disko/latest"; disko.url = "github:nix-community/disko/latest";
disko.inputs.nixpkgs.follows = "nixpkgs"; disko.inputs.nixpkgs.follows = "nixpkgs";
dns = {
url = "github:kirelagin/dns.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
utils = { utils = {
url = "github:numtide/flake-utils"; url = "github:numtide/flake-utils";
}; };

View File

@@ -29,6 +29,7 @@ with lib;
enable = true; enable = true;
enablePromtail = true; enablePromtail = true;
logNginx = true; logNginx = true;
lokiHost = "10.0.0.14";
}; };
services.malobeo-tasklist.enable = true; services.malobeo-tasklist.enable = true;

View File

@@ -43,6 +43,16 @@ in
}; };
}; };
services.nginx.virtualHosts."cloud.malobeo.org" = {
forceSSL = true;
enableACME= true;
locations."/" = {
proxyPass = "http://10.0.0.10";
extraConfig = ''
'';
};
};
services.nginx.virtualHosts."grafana.malobeo.org" = { services.nginx.virtualHosts."grafana.malobeo.org" = {
forceSSL = true; forceSSL = true;
enableACME= true; enableACME= true;
@@ -64,6 +74,23 @@ in
}; };
services.nginx.virtualHosts."zines.malobeo.org" = {
forceSSL = true;
enableACME= true;
locations."/" = {
proxyPass = "http://10.0.0.10";
extraConfig = ''
client_body_in_file_only clean;
client_body_buffer_size 32K;
client_max_body_size 50M;
sendfile on;
send_timeout 300s;
'';
};
};
services.nginx.virtualHosts."status.malobeo.org" = { services.nginx.virtualHosts."status.malobeo.org" = {
forceSSL = true; forceSSL = true;
enableACME= true; enableACME= true;

View File

@@ -2,13 +2,11 @@
let let
sshKeys = import ../ssh_keys.nix; sshKeys = import ../ssh_keys.nix;
peers = import ../modules/malobeo/peers.nix; peers = import ../modules/malobeo/peers.nix;
hosts = import ../hosts.nix {};
in in
{ {
sops.defaultSopsFile = ./secrets.yaml; sops.defaultSopsFile = ./secrets.yaml;
sops.secrets.wg_private = {}; sops.secrets.wg_private = {};
sops.secrets.shop_auth = {}; sops.secrets.shop_auth = {};
sops.secrets.njala_api_key = {};
imports = imports =
[ # Include the results of the hardware scan. [ # Include the results of the hardware scan.
@@ -36,7 +34,7 @@ in
enable = true; enable = true;
enablePromtail = true; enablePromtail = true;
logNginx = true; logNginx = true;
lokiHost = hosts.malobeo.hosts.overwatch.network.address; lokiHost = "10.0.0.14";
}; };
malobeo.autoUpdate = { malobeo.autoUpdate = {
@@ -130,12 +128,7 @@ in
privateKeyFile = config.sops.secrets.wg_private.path; privateKeyFile = config.sops.secrets.wg_private.path;
}; };
services.malobeo.microvm = { services.malobeo.microvm.enableHostBridge = true;
enableHostBridge = true;
interface = "enp1s0";
gateway = "192.168.1.1";
address = "192.168.1.2/24";
};
services.malobeo.microvm.deployHosts = [ services.malobeo.microvm.deployHosts = [
"overwatch" "overwatch"
"infradocs" "infradocs"
@@ -156,61 +149,30 @@ in
}; };
}; };
security.acme = {
acceptTerms = true;
defaults.email = "malobeo@systemli.org";
defaults = {
dnsProvider = "njalla";
credentialsFile = config.sops.secrets.njala_api_key.path;
dnsPropagationCheck = false;
};
};
services.nginx = { services.nginx = {
enable = true; enable = true;
virtualHosts."docs.malobeo.org" = { virtualHosts."docs.malobeo.org" = {
locations."/" = { locations."/" = {
proxyPass = "http://${hosts.malobeo.hosts.infradocs.network.address}:9000"; proxyPass = "http://10.0.0.11:9000";
extraConfig = '' extraConfig = ''
proxy_set_header Host $host; proxy_set_header Host $host;
''; '';
}; };
}; };
virtualHosts."cloud.hq.malobeo.org" = {
forceSSL = true;
enableACME = true;
acmeRoot = null;
locations."/" = {
proxyPass = "http://${hosts.malobeo.hosts.nextcloud.network.address}";
extraConfig = ''
proxy_set_header Host $host;
client_max_body_size ${inputs.self.nixosConfigurations.nextcloud.config.services.nextcloud.maxUploadSize};
client_body_timeout 3600s;
send_timeout 3600s;
fastcgi_buffers 64 4K;
'';
};
};
virtualHosts."cloud.malobeo.org" = { virtualHosts."cloud.malobeo.org" = {
forceSSL = true;
enableACME = true;
locations."/" = { locations."/" = {
proxyPass = "http://${hosts.malobeo.hosts.nextcloud.network.address}"; proxyPass = "http://10.0.0.13";
extraConfig = '' extraConfig = ''
proxy_set_header Host $host; proxy_set_header Host $host;
client_max_body_size ${inputs.self.nixosConfigurations.nextcloud.config.services.nextcloud.maxUploadSize}; client_max_body_size 10G;
client_body_timeout 3600s;
send_timeout 3600s;
fastcgi_buffers 64 4K;
''; '';
}; };
}; };
virtualHosts."grafana.malobeo.org" = { virtualHosts."grafana.malobeo.org" = {
locations."/" = { locations."/" = {
proxyPass = "http://${hosts.malobeo.hosts.overwatch.network.address}"; proxyPass = "http://10.0.0.14";
extraConfig = '' extraConfig = ''
proxy_set_header Host $host; proxy_set_header Host $host;
''; '';
@@ -219,38 +181,19 @@ in
virtualHosts."tasklist.malobeo.org" = { virtualHosts."tasklist.malobeo.org" = {
locations."/" = { locations."/" = {
proxyPass = "http://${hosts.malobeo.hosts.durruti.network.address}:8080"; proxyPass = "http://10.0.0.5:8080";
extraConfig = '' extraConfig = ''
proxy_set_header Host $host; proxy_set_header Host $host;
''; '';
}; };
}; };
virtualHosts."zines.hq.malobeo.org" = {
forceSSL = true;
enableACME = true;
acmeRoot = null;
locations."/" = {
proxyPass = "http://${hosts.malobeo.hosts.zineshop.network.address}:8080";
extraConfig = ''
proxy_set_header Host $host;
client_body_in_file_only clean;
client_body_buffer_size 32K;
client_max_body_size 50M;
sendfile on;
send_timeout 300s;
'';
};
};
virtualHosts."zines.malobeo.org" = { virtualHosts."zines.malobeo.org" = {
forceSSL = true; # created with: nix-shell --packages apacheHttpd --run 'htpasswd -B -c foo.txt malobeo'
enableACME = true; # then content of foo.txt put into sops
# basicAuthFile = config.sops.secrets.shop_auth.path;
locations."/" = { locations."/" = {
proxyPass = "http://${hosts.malobeo.hosts.zineshop.network.address}:8080"; proxyPass = "http://10.0.0.15:8080";
extraConfig = '' extraConfig = ''
proxy_set_header Host $host; proxy_set_header Host $host;

View File

@@ -1,6 +1,9 @@
wg_private: ENC[AES256_GCM,data:YEmIfgtyHE9msYijva0Ye2w7shVmYBPZ3mcKRF7Cy20xa6yHEUQ0kC2OWnM=,iv:ouK6fHcrxrEtsmiPmtCz9Ca8Ec1algOifrgZSBNHi74=,tag:524e/SQt++hwVyeWruCsLg==,type:str] wg_private: ENC[AES256_GCM,data:YEmIfgtyHE9msYijva0Ye2w7shVmYBPZ3mcKRF7Cy20xa6yHEUQ0kC2OWnM=,iv:ouK6fHcrxrEtsmiPmtCz9Ca8Ec1algOifrgZSBNHi74=,tag:524e/SQt++hwVyeWruCsLg==,type:str]
njala_api_key: ENC[AES256_GCM,data:uEzx7KeI7ZZP63Igu5vHmuvASVxJai8bezM40UZVobQMr7r6opjnVTc0BPyIGfnG2mx/6Bo=,iv:lch04oGn6bkqtBGVzYlz6B97FGXlGOoxkiT1IplSxm4=,tag:bzXx2jSqFBv1hgJO1r5i+w==,type:str]
sops: sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: age:
- recipient: age18jn5mrfs4gqrnv0e2sxsgh3kq4sgxx39hwr8z7mz9kt7wlgaasjqlr88ng - recipient: age18jn5mrfs4gqrnv0e2sxsgh3kq4sgxx39hwr8z7mz9kt7wlgaasjqlr88ng
enc: | enc: |
@@ -20,8 +23,8 @@ sops:
NjJ5cFdTVS9NZmVWMjcrcHo2WDZEZDgKiDwkuUn90cDmidwYGZBb5qp+4R1HafV0 NjJ5cFdTVS9NZmVWMjcrcHo2WDZEZDgKiDwkuUn90cDmidwYGZBb5qp+4R1HafV0
vMQfjT9GrwB5K/O1GumOmvbzLNhvO2vRZJhfVHzyHLzQK64abQgF5Q== vMQfjT9GrwB5K/O1GumOmvbzLNhvO2vRZJhfVHzyHLzQK64abQgF5Q==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2026-02-20T18:33:50Z" lastmodified: "2025-01-19T22:46:09Z"
mac: ENC[AES256_GCM,data:YlsQVjfgtlcSObjLiZif/sOJNx2PqH9q0kguPgBSwAoNiX2/eJhNH2WwtQ8uXQfdPiX7kwfFrl2E0xevqwLv+4AICr+9v6oCfcUHJYPRdkLfCs0jXyvnZr52LzfyV3GOPah/j8Uye9d9sspUMqqaXewoeWtrXHgo277pQVdrKxM=,iv:Xb5ckc/cvpGqkZoViTrw8rUniO2OWy0/rNfhF+Qb/iM=,tag:ZhI4jS2Iyig9juVGAeii+w==,type:str] mac: ENC[AES256_GCM,data:eU3SIqAGrgbO2tz4zH1tgYcif7oe5j+/wmdYl2xXXI+D6IhiKrTJGvzE3rd3ElEpb+Bg0UQId952U2Ut0yPTfxGLtdlbJA66CmhLAksByoJ8lOXUcp/qDyA4yMRSuwYG2v7uF2crvue9fyRfZ7hl7abE/Q7Z2UjOKqhSZC5cO3U=,iv:NmCVvtBWZRzhpr5nMLy+98VuQZWoUms7xFSxq8PMvBA=,tag:UWjA7oqoNWh4wb0myNg7FA==,type:str]
pgp: pgp:
- created_at: "2025-01-19T22:45:26Z" - created_at: "2025-01-19T22:45:26Z"
enc: |- enc: |-
@@ -62,4 +65,4 @@ sops:
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4 fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.11.0 version: 3.9.2

View File

@@ -1,8 +1,11 @@
wg_private: ENC[AES256_GCM,data:kFuLzZz9lmtUccQUIYiXvJRf7WBg5iCq1xxCiI76J3TaIBELqgbEmUtPR4g=,iv:0S0uzX4OVxQCKDOl1zB6nDo8152oE7ymBWdVkPkKlro=,tag:gg1n1BsnjNPikMBNB60F5Q==,type:str] wg_private: ENC[AES256_GCM,data:kFuLzZz9lmtUccQUIYiXvJRf7WBg5iCq1xxCiI76J3TaIBELqgbEmUtPR4g=,iv:0S0uzX4OVxQCKDOl1zB6nDo8152oE7ymBWdVkPkKlro=,tag:gg1n1BsnjNPikMBNB60F5Q==,type:str]
shop_cleartext: ENC[AES256_GCM,data:sifpX/R6JCcNKgwN2M4Dbflgnfs5CqB8ez5fULPohuFS6k36BLemWzEk,iv:1lRYausj7V/53sfSO9UnJ2OC/Si94JXgIo81Ld74BE8=,tag:5osQU/67bvFeUGA90BSiIA==,type:str] shop_cleartext: ENC[AES256_GCM,data:sifpX/R6JCcNKgwN2M4Dbflgnfs5CqB8ez5fULPohuFS6k36BLemWzEk,iv:1lRYausj7V/53sfSO9UnJ2OC/Si94JXgIo81Ld74BE8=,tag:5osQU/67bvFeUGA90BSiIA==,type:str]
shop_auth: ENC[AES256_GCM,data:0NDIRjmGwlSFls12sCb5OlgyGTCHpPQIjycEJGhYlZsWKhEYXV2u3g1RHMkF8Ny913jarjf0BgwSq5pBD9rgPL9t8X8=,iv:3jgCv/Gg93Mhdm4eYzwF9QrK14QL2bcC4wwSajCA88o=,tag:h8dhMK46hABv9gYW4johkA==,type:str] shop_auth: ENC[AES256_GCM,data:0NDIRjmGwlSFls12sCb5OlgyGTCHpPQIjycEJGhYlZsWKhEYXV2u3g1RHMkF8Ny913jarjf0BgwSq5pBD9rgPL9t8X8=,iv:3jgCv/Gg93Mhdm4eYzwF9QrK14QL2bcC4wwSajCA88o=,tag:h8dhMK46hABv9gYW4johkA==,type:str]
njala_api_key: ENC[AES256_GCM,data:T9cZas/3ju54h22SaDnx/dx4lhJiMi6foRilxSDxQ+e0bw2A8szkFPdxqK6XSuRckCUg3YI=,iv:HonCrH0H2rfUC7VMk8jRV/12NJBXh8uICos0OAHfETI=,tag:aGoiGzljuoX2RoPDlOKgOA==,type:str]
sops: sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: age:
- recipient: age136sz3lzhxf74ryruvq34d4tmmxnezkqkgu6zqa3dm582c22fgejqagrqxk - recipient: age136sz3lzhxf74ryruvq34d4tmmxnezkqkgu6zqa3dm582c22fgejqagrqxk
enc: | enc: |
@@ -22,8 +25,8 @@ sops:
QVZyNWVOMTh3ejBha21Qb2xCRkFERGMKH9nMQUoS5bGcLUx2T1dOmKd9jshttTrP QVZyNWVOMTh3ejBha21Qb2xCRkFERGMKH9nMQUoS5bGcLUx2T1dOmKd9jshttTrP
SKFx7MXcjFRLKS2Ij12V8ftjL3Uod6be5zoMibkxK19KmXY/514Jww== SKFx7MXcjFRLKS2Ij12V8ftjL3Uod6be5zoMibkxK19KmXY/514Jww==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2026-02-20T18:33:24Z" lastmodified: "2025-04-14T10:34:55Z"
mac: ENC[AES256_GCM,data:JpZRz3fUMkGbIVVtP1TerhQ+BY3nOsgJsTxb7Uqw9RL7JxvurbWeYK9GTAUzJeGi5O7XQia6/M2MI+K1xxGF4AM7NeSLiZEfGeGC4zmV7inIFgNJy/1lUdnsnZkw8NeOKx16t1b+GqY4xGhDcpVU12RaU4D7/Z0BBM+soc9O6hg=,iv:Um49dRgm5i0I0BrWqsEwn4zjm8eOdnl6SQgG9gScCXU=,tag:0JaSpb8V4WoismawGEYTlg==,type:str] mac: ENC[AES256_GCM,data:vcDXtTi0bpqhHnL6XanJo+6a8f5LAE628HazDVaNO34Ll3eRyhi95eYGXQDDkVk2WUn9NJ5oCMPltnU82bpLtskzTfQDuXHaPZJq5gtOuMH/bAKrY0dfShrdyx71LkA4AFlcI1P5hchpbyY1FK3iqe4D0miBv+Q8lCMgQMVrfxI=,iv:1lMzH899K0CnEtm16nyq8FL/aCkSYJVoj7HSKCyUnPg=,tag:mEbkmFNg5VZtSKqq80NrCw==,type:str]
pgp: pgp:
- created_at: "2025-02-11T18:32:49Z" - created_at: "2025-02-11T18:32:49Z"
enc: |- enc: |-
@@ -64,4 +67,4 @@ sops:
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4 fp: aef8d6c7e4761fc297cda833df13aebb1011b5d4
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.11.0 version: 3.9.4

View File

@@ -1,102 +1,82 @@
{ ... }: { ... }:
let
createMaloNet = hostId: mac: {
local = true;
hostId = hostId;
address = "192.168.1.${hostId}";
gateway = "192.168.1.1";
nameservers = [ "192.168.1.17" "1.1.1.1" ]; #setting ns1 as nameserver
mac = mac;
};
createOffsiteNet = hostId: mac: {
local = false;
hostId = hostId;
address = "10.0.0.${hostId}";
gateway = "10.0.0.1";
nameservers = [ "1.1.1.1" ];
mac = mac;
};
in
{ {
#TODO: fix local 192.168.1.0/24 addresses they are just palceholders!
malobeo = { malobeo = {
hosts = { hosts = {
louise = { louise = {
type = "host"; type = "host";
network = {
local = true;
hostId = "11";
address = "192.168.1.101";
};
}; };
bakunin = { bakunin = {
type = "host"; type = "host";
network = {
local = true;
hostId = "12";
address = "192.168.1.12";
};
}; };
fanny = { fanny = {
type = "host"; type = "host";
network = {
local = true;
hostId = "13";
address = "192.168.1.13";
};
}; };
lucia = { lucia = {
type = "rpi"; type = "rpi";
network = {
local = true;
hostId = "15";
address = "192.168.1.15";
};
}; };
durruti = { durruti = {
type = "microvm"; type = "microvm";
network = createMaloNet "5" "52:DA:0D:F9:EF:F9"; network = {
address = "10.0.0.5";
mac = "52:DA:0D:F9:EF:F9";
};
}; };
vpn = { vpn = {
type = "microvm"; type = "microvm";
network = createOffsiteNet "10" "52:DA:0D:F9:EF:E6"; network = {
address = "10.0.0.10";
mac = "D0:E5:CA:F0:D7:E6";
};
}; };
infradocs = { infradocs = {
type = "microvm"; type = "microvm";
network = createMaloNet "11" "52:DA:0D:F9:EF:E7"; network = {
address = "10.0.0.11";
mac = "D0:E5:CA:F0:D7:E7";
};
}; };
uptimekuma = { uptimekuma = {
type = "microvm"; type = "microvm";
network = createOffsiteNet "12" "52:DA:0D:F9:EF:E8"; network = {
address = "10.0.0.12";
mac = "D0:E5:CA:F0:D7:E8";
};
}; };
nextcloud = { nextcloud = {
type = "microvm"; type = "microvm";
network = createMaloNet "13" "52:DA:0D:F9:EF:E9"; network = {
address = "10.0.0.13";
mac = "D0:E5:CA:F0:D7:E9";
};
}; };
overwatch = { overwatch = {
type = "microvm"; type = "microvm";
network = createMaloNet "14" "52:DA:0D:F9:EF:E0"; network = {
address = "10.0.0.14";
mac = "D0:E5:CA:F0:D7:E0";
};
}; };
zineshop = { zineshop = {
type = "microvm"; type = "microvm";
network = createMaloNet "15" "52:DA:0D:F9:EF:F1"; network = {
address = "10.0.0.15";
mac = "D0:E5:CA:F0:D7:F1";
};
}; };
ns1 = { testvm = {
type = "microvm"; type = "host";
network = createMaloNet "17" "52:DA:0D:F9:EF:F3";
}; };
}; };
}; };

View File

@@ -19,6 +19,7 @@ with lib;
enable = true; enable = true;
enablePromtail = true; enablePromtail = true;
logNginx = true; logNginx = true;
lokiHost = "10.0.0.14";
}; };
system.stateVersion = "22.11"; # Did you read the comment? system.stateVersion = "22.11"; # Did you read the comment?

View File

@@ -43,7 +43,7 @@ rec {
]; ];
defaultModules = baseModules; defaultModules = baseModules;
makeMicroVM = hostName: network: modules: [ makeMicroVM = hostName: ipv4Addr: macAddr: modules: [
{ {
microvm = { microvm = {
hypervisor = "cloud-hypervisor"; hypervisor = "cloud-hypervisor";
@@ -83,7 +83,7 @@ rec {
{ {
type = "tap"; type = "tap";
id = "vm-${hostName}"; id = "vm-${hostName}";
mac = "${network.mac}"; mac = "${macAddr}";
} }
]; ];
}; };
@@ -93,9 +93,9 @@ rec {
systemd.network.networks."20-lan" = { systemd.network.networks."20-lan" = {
matchConfig.Type = "ether"; matchConfig.Type = "ether";
networkConfig = { networkConfig = {
Address = [ "${network.address}/24" ]; Address = [ "${ipv4Addr}/24" ];
Gateway = "${network.gateway}"; Gateway = "10.0.0.1";
DNS = network.nameservers; DNS = ["1.1.1.1"];
DHCP = "no"; DHCP = "no";
}; };
}; };
@@ -165,16 +165,6 @@ rec {
}); });
}; };
systemd.network.networks."20-lan" = pkgs.lib.mkForce {
matchConfig.Type = "ether";
networkConfig = {
Address = [ "10.0.0.${hosts.malobeo.hosts.${hostname}.network.hostId}/24" ];
Gateway = "10.0.0.1";
DNS = [ "1.1.1.1" ];
DHCP = "no";
};
};
boot.isContainer = pkgs.lib.mkForce false; boot.isContainer = pkgs.lib.mkForce false;
services.timesyncd.enable = false; services.timesyncd.enable = false;
users.users.root.password = ""; users.users.root.password = "";
@@ -220,7 +210,8 @@ rec {
specialArgs.self = self; specialArgs.self = self;
config = { config = {
imports = (makeMicroVM "${name}" imports = (makeMicroVM "${name}"
hosts.malobeo.hosts.${name}.network [ "${hosts.malobeo.hosts.${name}.network.address}"
"${hosts.malobeo.hosts.${name}.network.mac}" [
../${name}/configuration.nix ../${name}/configuration.nix
(vmMicroVMOverwrites name { (vmMicroVMOverwrites name {
withNetworking = true; withNetworking = true;
@@ -259,7 +250,7 @@ rec {
modules = (if (settings.type != "microvm") then modules = (if (settings.type != "microvm") then
defaultModules ++ [ ../${host}/configuration.nix ] defaultModules ++ [ ../${host}/configuration.nix ]
else else
makeMicroVM "${host}" settings.network [ makeMicroVM "${host}" "${settings.network.address}" "${settings.network.mac}" [
inputs.microvm.nixosModules.microvm inputs.microvm.nixosModules.microvm
../${host}/configuration.nix ../${host}/configuration.nix
]); ]);

View File

@@ -1,7 +1,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let let
cfg = config.malobeo.metrics; cfg = config.malobeo.metrics;
hosts = import ../../hosts.nix {};
in in
{ {
options.malobeo.metrics = { options.malobeo.metrics = {
@@ -22,7 +21,7 @@ in
}; };
lokiHost = lib.mkOption { lokiHost = lib.mkOption {
type = lib.types.str; type = lib.types.str;
default = hosts.malobeo.hosts.overwatch.network.address; default = "10.0.0.14";
description = "Address of loki host"; description = "Address of loki host";
}; };
}; };

View File

@@ -14,26 +14,6 @@ in
description = lib.mdDoc "Setup bridge device for microvms."; description = lib.mdDoc "Setup bridge device for microvms.";
}; };
interface = mkOption {
default = "eno1";
type = types.str;
};
gateway = mkOption {
default = "10.0.0.1";
type = types.str;
};
address = mkOption {
default = "10.0.0.1/24";
type = types.str;
};
dns = mkOption {
default = [ "1.1.1.1" ];
type = types.listOf types.str;
};
enableHostBridgeUnstable = mkOption { enableHostBridgeUnstable = mkOption {
default = false; default = false;
type = types.bool; type = types.bool;
@@ -67,29 +47,29 @@ in
systemd.network = mkIf (cfg.enableHostBridge || cfg.enableHostBridgeUnstable) { systemd.network = mkIf (cfg.enableHostBridge || cfg.enableHostBridgeUnstable) {
enable = true; enable = true;
networks."10-lan" = { # create a bride device that all the microvms will be connected to
matchConfig.Name = [ "${cfg.interface}" "vm-*"]; netdevs."10-microvm".netdevConfig = {
networkConfig = { Kind = "bridge";
Bridge = "malobeo0"; Name = "microvm";
};
}; };
netdevs."malobeo0" = { networks."10-microvm" = {
netdevConfig = { matchConfig.Name = "microvm";
Name = "malobeo0";
Kind = "bridge";
};
};
networks."10-lan-bridge" = {
matchConfig.Name = "malobeo0";
networkConfig = { networkConfig = {
Address = [ "${cfg.address}" ]; DHCPServer = true;
Gateway = "${cfg.gateway}"; IPv6SendRA = true;
DNS = cfg.dns;
IPv6AcceptRA = true;
}; };
linkConfig.RequiredForOnline = "routable"; addresses = if cfg.enableHostBridgeUnstable then [
{ Address = "10.0.0.1/24"; }
] else [
{ Address = "10.0.0.1/24"; }
];
};
# connect the vms to the bridge
networks."11-microvm" = {
matchConfig.Name = "vm-*";
networkConfig.Bridge = "microvm";
}; };
}; };

View File

@@ -1,41 +0,0 @@
{ inputs }:
let
vpnNS = "vpn";
localNS = "hq";
peers = import ./peers.nix;
hosts = ((import ../../hosts.nix ) {}).malobeo.hosts;
in
{
SOA = {
nameServer = "ns1";
adminEmail = "admin@malobeo.org";
serial = 2019030801;
};
useOrigin = false;
NS = [
"ns1.malobeo.org."
];
subdomains = {
ns1 = {
A = [ hosts.ns1.network.address ];
};
${localNS} = {
A = [ hosts.fanny.network.address ];
subdomains = builtins.mapAttrs (name: value: if value.network.local == true then {
A = [ value.network.address ];
} else {}) hosts;
};
${vpnNS} = {
A = [ peers.vpn.address ];
subdomains = builtins.mapAttrs (name: value: if value.role != "server" then {
A = [ value.address ];
} else {}) peers;
};
};
}

View File

@@ -2,9 +2,6 @@
with lib; with lib;
let
hosts = import ../hosts.nix {};
in
{ {
sops.defaultSopsFile = ./secrets.yaml; sops.defaultSopsFile = ./secrets.yaml;
sops.secrets = { sops.secrets = {
@@ -31,10 +28,7 @@ in
enable = true; enable = true;
enablePromtail = true; enablePromtail = true;
logNginx = true; logNginx = true;
}; lokiHost = "10.0.0.14";
services.postgresqlBackup = {
enable = true;
}; };
services.nextcloud = { services.nextcloud = {
@@ -54,15 +48,43 @@ in
extraAppsEnable = true; extraAppsEnable = true;
extraApps = { extraApps = {
inherit (config.services.nextcloud.package.packages.apps) contacts calendar polls registration collectives forms; inherit (config.services.nextcloud.package.packages.apps) contacts calendar polls registration collectives forms;
deck = pkgs.fetchNextcloudApp {
sha256 = "sha256-epjwIANb6vTNx9KqaG6jZc14YPoFMBTCj+/c9JHcWkA="; deckWithDrag = pkgs.php.buildComposerProject (finalAttrs: {
url = "https://link.storjshare.io/raw/jvrl62dakd6htpyxohjkiiqiw5ma/mal/deck32.tar.gz"; pname = "deck";
license = "agpl3Plus"; version = "1.0.0";
}; src = pkgs.fetchzip {
url = "https://github.com/nextcloud/deck/archive/refs/heads/stable32.zip";
hash = "sha256-eMHjfki+axEtlhV6518mlAzPhZxAZqEX7HiRsJf1vxo=";
};
composerNoDev = true;
vendorHash = pkgs.lib.fakeHash;
postInstall = ''
cp -r $out/share/php/deck/* $out/
rm -r $out/share
'';
});
#deckWithDrag = pkgs.fetchNextcloudApp {
# appName = "deck";
# appVersion = "1.16.2";
# license = "agpl3Plus";
# teams = [ pkgs.lib.teams.nextcloud ];
# url = "https://github.com/nextcloud-releases/deck/releases/download/v1.16.2/deck-v1.16.2.tar.gz";
# hash = "sha256-rFymTIr7pOuMES3DMIOS7cvq+CEIekLZYLqz58TOP04=";
# description = "";
# homepage = "https://github.com/nextcloud/deck";
# unpack = true;
# patches = [
# (pkgs.fetchpatch {
# url = "https://git.dynamicdiscord.de/ahtlon/deck/commit/77cbcf42ca80dd32e450839f02faca2e5fed3761.patch";
# sha256 = "sha256-agwFMwXO8WLL0+pdeKF/pA59V9ah9t590sCl1msQonA=";
# })
# ];
#};
}; };
settings = { settings = {
trusted_domains = [ "cloud.malobeo.org" ]; trusted_domains = ["10.0.0.13"];
trusted_proxies = [ hosts.malobeo.hosts.fanny.network.address ]; trusted_proxies = [ "10.0.0.1" ];
"maintenance_window_start" = "1"; "maintenance_window_start" = "1";
"default_phone_region" = "DE"; "default_phone_region" = "DE";
}; };

View File

@@ -1,52 +0,0 @@
{ config, self, lib, inputs, pkgs, ... }:
with lib;
with inputs;
let
dns = inputs.dns;
in
{
networking = {
hostName = mkDefault "ns1";
useDHCP = false;
};
imports = [
../modules/malobeo_user.nix
../modules/sshd.nix
../modules/minimal_tools.nix
../modules/autoupdate.nix
];
networking.firewall = {
enable = true;
allowedTCPPorts = [ 53 ];
allowedUDPPorts = [ 53 ];
};
services.bind = {
enable = true;
forwarders = [
"1.1.1.1"
"1.0.0.1"
];
cacheNetworks = [
"127.0.0.0/24"
"10.0.0.0/24"
"192.168.1.0/24"
"10.100.0.0/24"
];
zones = {
"malobeo.org" = {
master = true;
file = pkgs.writeText "zone-malobeo.org" (dns.lib.toString "malobeo.org" (import ../modules/malobeo/zones.nix { inherit inputs; }));
};
};
};
system.stateVersion = "22.11"; # Did you read the comment?
}

View File

@@ -2,9 +2,6 @@
with lib; with lib;
let
hosts = import ../hosts.nix {};
in
{ {
networking = { networking = {
hostName = mkDefault "overwatch"; hostName = mkDefault "overwatch";
@@ -24,6 +21,7 @@ in
enable = true; enable = true;
enablePromtail = true; enablePromtail = true;
logNginx = false; logNginx = false;
lokiHost = "10.0.0.14";
}; };
services.grafana = { services.grafana = {
@@ -103,31 +101,31 @@ in
{ {
job_name = "durruti"; job_name = "durruti";
static_configs = [{ static_configs = [{
targets = [ "${hosts.malobeo.hosts.durruti.network.address}:9002" ]; targets = [ "10.0.0.5:9002" ];
}]; }];
} }
{ {
job_name = "infradocs"; job_name = "infradocs";
static_configs = [{ static_configs = [{
targets = [ "${hosts.malobeo.hosts.infradocs.network.address}:9002" ]; targets = [ "10.0.0.11:9002" ];
}]; }];
} }
{ {
job_name = "nextcloud"; job_name = "nextcloud";
static_configs = [{ static_configs = [{
targets = [ "${hosts.malobeo.hosts.nextcloud.network.address}:9002" ]; targets = [ "10.0.0.13:9002" ];
}]; }];
} }
{ {
job_name = "zineshop"; job_name = "zineshop";
static_configs = [{ static_configs = [{
targets = [ "${hosts.malobeo.hosts.zineshop.network.address}:9002" ]; targets = [ "10.0.0.15:9002" ];
}]; }];
} }
{ {
job_name = "fanny"; job_name = "fanny";
static_configs = [{ static_configs = [{
targets = [ "${hosts.malobeo.hosts.fanny.network.address}:9002" ]; targets = [ "10.0.0.1:9002" ];
}]; }];
} }
# add vpn - check how to reach it first. most probably 10.100.0.1 # add vpn - check how to reach it first. most probably 10.100.0.1

View File

@@ -23750,8 +23750,8 @@
}, },
{ {
"current": { "current": {
"text": "192.168.1.13:9002", "text": "10.0.0.13:9002",
"value": "192.168.1.13:9002" "value": "10.0.0.13:9002"
}, },
"datasource": { "datasource": {
"type": "prometheus", "type": "prometheus",

View File

@@ -6,7 +6,7 @@ positions:
filename: /tmp/positions.yaml filename: /tmp/positions.yaml
clients: clients:
- url: http://192.168.1.13:3100/loki/api/v1/push - url: http://10.0.0.13:3100/loki/api/v1/push
scrape_configs: scrape_configs:

View File

@@ -40,6 +40,15 @@ with lib;
}; };
}; };
virtualHosts."cloud.malobeo.org" = {
locations."/" = {
proxyPass = "http://10.100.0.101";
extraConfig = ''
proxy_set_header Host $host;
'';
};
};
virtualHosts."grafana.malobeo.org" = { virtualHosts."grafana.malobeo.org" = {
locations."/" = { locations."/" = {
proxyPass = "http://10.100.0.101"; proxyPass = "http://10.100.0.101";
@@ -57,6 +66,28 @@ with lib;
''; '';
}; };
}; };
virtualHosts."zines.malobeo.org" = {
locations."/" = {
proxyPass = "http://10.100.0.101";
extraConfig = ''
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Authorization $http_authorization; # Pass the Authorization header
proxy_pass_header Authorization;
client_body_in_file_only clean;
client_body_buffer_size 32K;
client_max_body_size 50M;
sendfile on;
send_timeout 300s;
'';
};
};
}; };
system.stateVersion = "22.11"; # Did you read the comment? system.stateVersion = "22.11"; # Did you read the comment?

View File

@@ -20,6 +20,7 @@ with lib;
enable = true; enable = true;
enablePromtail = true; enablePromtail = true;
logNginx = true; logNginx = true;
lokiHost = "10.0.0.14";
}; };
services.printing.enable = true; services.printing.enable = true;

View File

@@ -74,6 +74,63 @@ in (utils.lib.eachSystem (builtins.filter filter_system utils.lib.defaultSystems
''; '';
}; };
#deckWithDrag = pkgs.buildNpmPackage {
# name = "deckWithDrag";
# version = "1.16.2";
# src = pkgs.fetchFromGitHub {
# owner = "nextcloud";
# repo = "deck";
# rev = "v1.16.2";
# hash = "sha256-NBkCdMjIY2r+AgCLBt4YnD4sUW7GTKxT5vHAmpk4wno=";
# leaveDotGit = true;
# };
# makeCacheWritable = true;
# npmDepsHash = "sha256-VaKfpYFtrTUvGbKORPvex1FvLz4vR7zfHAf+fdf/6OE=";
# buildInputs = with pkgs; [
# gnumake krankerl php84Packages.composer php nodejs_24
# ];
# patches = [
# (pkgs.fetchpatch {
# url = "https://git.dynamicdiscord.de/ahtlon/deck/commit/77cbcf42ca80dd32e450839f02faca2e5fed3761.patch";
# sha256 = "sha256-agwFMwXO8WLL0+pdeKF/pA59V9ah9t590sCl1msQonA=";
# })
# ];
# buildPhase = ''
# ${pkgs.krankerl}/bin/krankerl package
# '';
#};
deckWithDrag = pkgs.stdenv.mkDerivation {
name = "deckWithDrag";
src = pkgs.fetchFromGitHub {
owner = "nextcloud";
repo = "deck";
rev = "v1.16.2";
hash = "sha256-NBkCdMjIY2r+AgCLBt4YnD4sUW7GTKxT5vHAmpk4wno=";
leaveDotGit = true;
};
buildInputs = with pkgs; [
gnumake krankerl php84Packages.composer php nodejs_24
];
patches = [
(pkgs.fetchpatch {
url = "https://git.dynamicdiscord.de/ahtlon/deck/commit/77cbcf42ca80dd32e450839f02faca2e5fed3761.patch";
sha256 = "sha256-agwFMwXO8WLL0+pdeKF/pA59V9ah9t590sCl1msQonA=";
})
];
buildPhase = ''
make release
#${pkgs.krankerl}/bin/krankerl package
'';
};
run-vm = pkgs.writeShellScriptBin "run-vm" (builtins.readFile ./scripts/run-vm.sh); run-vm = pkgs.writeShellScriptBin "run-vm" (builtins.readFile ./scripts/run-vm.sh);
}; };