My Wobserver is Last Bank and resides in Wobscale Technologies 's premier datacenter sea1.wobscale.website.
NEXT What's a Wobserver?
A wobserver is a homeserver managed in an Arroyo System .
Wobserver in the context of Arroyo Systems
The ultimate goal of the Arroyo System is to provide a model for a community homeserver and shared knowledge/thinking system. I think a Wobserver could host a small community of 15-20 people with an ongoing effort of 10 hours a month on an average month. It's reasonable to expect that a larger community could develop a shared consensus environment as a tilde-like server.
The Arroyo System extends on to the local workstation. The local expert can provide a set of reasonable defaults for a computer which can accomplish every day tasks using a Arroyo NixOS Generator and every member of the community can then share other modules from a collection like The Complete Computing Environment and share them amongst themselves using Syncthing and The Arcology Project .
The Wobserver in this equation is the "social hub" of an Arroyo System. NixOS provides packages for Nextcloud, Discourse, Matrix, Mastodon, Mailservers. Let's use them. Let's contribute to them. Let's expand roam:The Commons .
Generating the Wobserver Configuration with Arroyo Nixos
This is a NixOS configuration which is dynamically extended with Arroyo Systems Management modules. It behaves like My NixOS configuration and is pushed to machines using Morph . It can also be built in QEMU below.
nix source: :tangle ~/arroyo-nix/roles/server/default.nix :noweb yes :mkdirp yes{ config, pkgs, lib, ... }: rec { imports = [ <<arroyo_nixos_imports()>> ]; home-manager.users.rrix.imports = [ <<arroyo_home-manager_imports()>> ]; system.stateVersion = lib.mkDefault "22.11"; home-manager.users.rrix = { home.stateVersion = config.system.stateVersion; # don't ship pinentry-qt services.gpg-agent.pinentryPackage = lib.mkForce pkgs.pinentry-curses; }; services.openssh.enable = true; environment.systemPackages = with pkgs; [ pkgs.htop ]; boot = { kernelParams = [ "console=ttyS0" "boot.shell_on_fail" ]; loader.timeout = 5; zfs.devNodes = lib.mkForce "/dev/disk/by-id"; }; }
Packages in the Wobserver
arroyo_nixos_importsemacs-lisp source: :exports both(arcology-api-generator "nixos" "server" nil t)
../../nixos/akkoma.nix ../../nixos/arcology2.nix ../../nixos/blocky.nix ../../nixos/cachix.nix ../../nixos/emacs.nix ../../nixos/feedbot.nix ../../nixos/feediverse.nix ../../nixos/gitea.nix ../../nixos/gnupg-pam.nix ../../nixos/home-manager.nix ../../nixos/jellyfin.nix ../../nixos/langlemangle-microvm.nix ../../nixos/libvirtd-user-access.nix ../../nixos/linkwarden.nix ../../nixos/location.nix ../../nixos/meshtastic-metrics-exporter.nix ../../nixos/meshtastic-mosquitto.nix ../../nixos/morph-wrapper.nix ../../nixos/nextcloud.nix ../../nixos/nginx-base-config.nix ../../nixos/nginx-staticsites.nix ../../nixos/nix-path.nix ../../nixos/nixos-builder.nix ../../nixos/nixpkgs.nix ../../nixos/paperless.nix ../../nixos/poetry2nix.nix ../../nixos/pollen-count.nix ../../nixos/postgresql.nix ../../nixos/restic.nix ../../nixos/rixpkgs.nix ../../nixos/rrix.nix ../../nixos/ssh_client.nix ../../nixos/syncthing.nix ../../nixos/tailscale.nix ../../nixos/ttrss.nix ../../nixos/vaultwarden.nix ../../nixos/wallabag.nix ../../nixos/wobservability.nix ../../nixos/wobserver-acme.nix ../../nixos/wobserver-certs.nix ../../nixos/wobserver-docker.nix ../../nixos/zfs.nix
arroyo_home-manager_importsemacs-lisp source: :exports both(->> (arroyo-home-manager-imports "server") (s-split "\n") (-map (lambda (r) (format "../../%s" r))) (butlast) (s-join "\n"))
NixOS modules:
Things I need to package:
INPROGRESS Matrix Synapse
INPROGRESS Heisenbridge
INPROGRESS Wobserver Observability
NEXT hydra
NEXT Redis
NEXT Calibre-Web
NEXT Calibre-Server
NEXT Docker Registry
NEXT Mail Sync
mbsync
dovecot
NEXT Universal aggregator
NEXT fail2ban
NEXT gitea
NEXT grocy?
CANCELLED wireguard
DONE tailscale
Why Tailscale?
Arroyo Systems are "self-hosted" -- the org-mode source runs in an Emacs which can be provided through an Arroyo document system, but it also goes to great effort to not rely on third party services, and goes to greater length to avoid proprietary webservices. and yet i'll probably use Tailscale for it, anyways. why?
music
NEXT mpd
NEXT mpdscribble
NEXT icecast
CANCELLED Building a QEMU image of the Wobserver
Right now I develop in qemu.
keeping this around for future generations to crib from ...
[[shell:nix-build '<nixpkgs/nixos>' -A vm --arg configuration nixlib/roles/server/default.nix &][build the VM]] then run the VM
,#+ARROYONIXOS_MODULE: nixos/qemu-vm.nix ,#+ARROYOSYSTEM_ROLE: server
nix source: :tangle ~/arroyo-nix/nixos/qemu-vm.nix{ ... }: { imports = [ <nixpkgs/nixos/modules/profiles/qemu-guest.nix> <nixpkgs/nixos/modules/virtualisation/qemu-vm.nix> ]; # simple VM configuration virtualisation = { diskSize = 1000; # MB memorySize = 2048; # MB cores = 2; writableStoreUseTmpfs = false; diskImage = "/home/rrix/wobserver-test.qcow2"; graphics = false; forwardPorts = [ { from = "host"; host = { address = "127.0.0.1"; port = 2222; }; guest = { address = "10.0.2.15"; port = 22; }; } { from = "host"; host = { address = "127.0.0.1"; port = 8080; }; guest = { address = "10.0.2.15"; port = 80; }; } ]; }; networking.firewall.enable = false; # each of these corresponds to an eventual ZFS volume virtualisation.sharedDirectories = { media = { source = "/media"; target = "/media"; }; home = { source = "/home/rrix/wobserver-test-env/home"; target = "/home"; }; # services = { source = "/home/rrix/wobserver-test-env/svc"; target = "/svc"; }; backups = { source ="/home/rrix/wobserver-test-env/backup"; target = "/backup"; }; }; services.qemuGuest.enable = true; boot.growPartition = true; boot.zfs.extraPools = [ "tank" ]; fileSystems."/" = { device = "terra-firma/root"; fsType = "zfs"; }; fileSystems."/nix" = { device = "terra-firma/nix"; fsType = "zfs"; }; filesystems."/tank/media" = { device = "tank/media"; fsType = "zfs"; }; filesystems."/home" = { device = "tank/home"; fsType = "zfs"; }; }
Cleanup commands:
shell:rm ~/wobserver.qcow2 shell:mkdir -p ~/wobserver-test-env/{home,svc,backup}