summaryrefslogtreecommitdiff
path: root/microvms/stream
diff options
context:
space:
mode:
authorGrisha Shipunov2026-07-26 08:45:30 +0000
committerGrisha Shipunov2026-07-26 08:45:30 +0000
commita38e90adf7d746cc9cb1c1e02a615e32556597fa (patch)
tree4752a20ffb4a2dab18e26952eaf4a84c9e0417e0 /microvms/stream
parent7be7bf0700dd2ae6e9e9b9726ec94d211f4615d7 (diff)
move microvms to separate folder
Diffstat (limited to 'microvms/stream')
-rw-r--r--microvms/stream/default.nix77
-rw-r--r--microvms/stream/navidrome.nix16
-rw-r--r--microvms/stream/secrets.yaml37
3 files changed, 130 insertions, 0 deletions
diff --git a/microvms/stream/default.nix b/microvms/stream/default.nix
new file mode 100644
index 0000000..2cad795
--- /dev/null
+++ b/microvms/stream/default.nix
@@ -0,0 +1,77 @@
+{ config, lib, ... }:
+let
+ mac = "02:00:00:00:00:07";
+in
+{
+ imports = [
+ ./navidrome.nix
+ ];
+
+ sops.defaultSopsFile = ./secrets.yaml;
+ sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
+
+ sops.secrets = {
+ "wg/0xa-proxy" = {
+ owner = config.users.users.systemd-network.name;
+ };
+ };
+
+ microvm = {
+ hypervisor = "cloud-hypervisor";
+ vsock.cid = 3 + 7;
+ mem = 3 * 1024;
+ vcpu = 2;
+ interfaces = [
+ {
+ type = "tap";
+ id = "uvm-stream";
+ mac = mac;
+ }
+ ];
+ shares = [
+ {
+ source = "/nix/store";
+ mountPoint = "/nix/.ro-store";
+ tag = "store";
+ proto = "virtiofs";
+ }
+ ]
+ ++
+ map
+ (dir: {
+ source = dir;
+ mountPoint = "/${dir}";
+ tag = dir;
+ proto = "virtiofs";
+ })
+ [
+ "etc"
+ "var"
+ "home"
+ ];
+ };
+
+ networking.useNetworkd = true;
+ networking.firewall.enable = lib.mkForce false; # firewalling done by the host
+
+ systemd.network = {
+ enable = true;
+ networks."11-host" = {
+ matchConfig.MACAddress = mac;
+ networkConfig = {
+ Address = "10.99.99.17/24";
+ DHCP = "no";
+ };
+ routes = [
+ {
+ Gateway = "10.99.99.1";
+ Destination = "0.0.0.0/0";
+ Metric = 1024;
+ }
+ ];
+ };
+ };
+
+ networking.hostName = "stream";
+ system.stateVersion = "25.05";
+}
diff --git a/microvms/stream/navidrome.nix b/microvms/stream/navidrome.nix
new file mode 100644
index 0000000..0b1cd07
--- /dev/null
+++ b/microvms/stream/navidrome.nix
@@ -0,0 +1,16 @@
+{ ... }:
+{
+ services.navidrome = {
+ enable = true;
+ settings = {
+ Address = "10.89.88.17";
+ BaseUrl = "/";
+ EnableExternalServices = false;
+ MusicFolder = "/var/lib/navidrome/music";
+ Port = 4533;
+ ScanSchedule = "@every 11m";
+ TranscodingCacheSize = "11GiB";
+ ReverseProxyWhitelist = "10.89.88.1/24";
+ };
+ };
+}
diff --git a/microvms/stream/secrets.yaml b/microvms/stream/secrets.yaml
new file mode 100644
index 0000000..d26d805
--- /dev/null
+++ b/microvms/stream/secrets.yaml
@@ -0,0 +1,37 @@
+wg:
+ 0xa-proxy: ENC[AES256_GCM,data:uZfFc4elxCAVZvdIHJ7lgoPs9qKkD9ZvLhcYbexDcqn0alaMzIr++CY52FI=,iv:CREMt6GrLHs4Jwj/55awDFHh9hQlJPEi4ZQ7ZLMPvRA=,tag:iJAGdqzQbyezmDj+tzjdNQ==,type:str]
+sops:
+ age:
+ - recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJl9iYG5oHBq/poBn7Jf1/FGWWbAnbx+NKjs7qtT3uAK
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHowb2lXdyB5Zytw
+ K1ZKTHBFYy83WU94N3Izczh1RnE4Ry9iRkEvMUxLUUNaTW52MW1ZCjIxWFI3NTJ6
+ eXlXYXVVbHQ5Qjkxc0YwSU1MUjRVRi9abFl2dm1QSkx4N00KLS0tIEtaeXgyUzAv
+ UWhnSjR0TlJyMkpEVlJkaEdNZURXNUhQdXpkcWRYMmxFNDAKFIoZevnllkATCBog
+ 5R7ntMPrAlub8WnOjZVT5QdMgU3dRmxUnnfXY4PY7QpLNKyjEUxQ/5zvEeogYOSZ
+ IUVfhA==
+ -----END AGE ENCRYPTED FILE-----
+ - recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAXrwZsBChUhVuF5gFEfj8GwQlnrqEttAytS5jVCfuE4 0xa@frituurpan
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFlJOElMUSBuVVJO
+ ZS9Ed3NrVEl4ZGRpZURZZVRaZ3pwcTZVRmJmQ3lrdHlQaWYzSjFvCkJQTXNDR2xm
+ WkhxdnA3RlhPRkpnMWIvS0RzcTRJdEFISlpUb0NaYXVoMlUKLS0tIGZDSGw5QjRG
+ bW9vUzRSRWk5ZG5rc0tjYjFzSzFuVWpJTExEVDhmdXloZzQKzJrWm1z3KRLSLkxt
+ ZsmunVoD55HjrFsvPNnVear40c9JB+U3+m1pjdL5eax27lrX/rlvXx7rhzOhtTkN
+ 9IDAjg==
+ -----END AGE ENCRYPTED FILE-----
+ - recipient: age148r2q3cy9sjem37rvgtcc4qjx8usxkdg77pqexa56gmcexn58aaslh3cnj
+ enc: |
+ -----BEGIN AGE ENCRYPTED FILE-----
+ YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLNG9vM1FqTVVBSTFYaGt2
+ Rkpvci9ibXJyL3ZVbHNYbmF4Umk5ZHJ1bURFCmVjalI0S084R1dsdzdHQ0lZbmcr
+ SjBXSDRUUGtUQ21wN2kzUmxwZmdKWUkKLS0tIHNjM1pkemxJbWZDNGZ4T01GZVli
+ b05oNElQQjUrUklpYkR1TCsrTU5uUHMKWB5XybfmmjTfk/c+mRT2PNgsI4q8tbac
+ nV6pFb97477fcnHH/vpbBD24bixFt/X8A90G3ilbjqL+1rd4G+K7jA==
+ -----END AGE ENCRYPTED FILE-----
+ lastmodified: "2025-06-12T22:54:11Z"
+ mac: ENC[AES256_GCM,data:15EU9VupWfvR8CrfKrX3nhpD60hYB2LY3vuAPvdqzKLliqSqolNj956fOFicfSHvmW/s+7x+M+5FROnOzSbToTZotFtvALQihHH999veGZMx8Q8oIyljT1PBw/SU9djXPI1KjG/zzYOAwu7y/Ffm0QKhMRziH7CQLn30KR0o2w0=,iv:ghdyTvcpgnBi2L9s4UrzwWwt9TeU0WkGquZ64+w9IN8=,tag:4m4hYFgejlEaQROB/OEi6g==,type:str]
+ unencrypted_suffix: _unencrypted
+ version: 3.10.2