merge flake files
This commit is contained in:
27
local/flake.lock
generated
Normal file
27
local/flake.lock
generated
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1754725699,
|
||||
"narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
151
local/flake.nix
151
local/flake.nix
@@ -28,54 +28,159 @@
|
||||
extraOptions = "--experimental";
|
||||
};
|
||||
|
||||
# Install abra + setup
|
||||
environment.systemPackages = with pkgs; [
|
||||
docker
|
||||
git
|
||||
curl
|
||||
(stdenv.mkDerivation {
|
||||
pname = "abra";
|
||||
version = "latest";
|
||||
src = fetchurl {
|
||||
url = "https://git.autonomic.zone/coop-cloud/abra/releases/latest/download/abra-x86_64-unknown-linux-gnu";
|
||||
sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; # Update with real hash
|
||||
};
|
||||
installPhase = "install -D $src $out/bin/abra";
|
||||
})
|
||||
docker git curl wget tar jq
|
||||
];
|
||||
|
||||
# Helper script for workshop commands
|
||||
environment.etc."workshop-helpers.sh" = {
|
||||
text = ''
|
||||
#!/bin/bash
|
||||
|
||||
connect() {
|
||||
case "$1" in
|
||||
hopper|curie|lovelace|noether|hamilton|franklin|johnson|clarke|goldberg|liskov|wing|rosen|shaw|karp|rich)
|
||||
echo "🔗 Connecting to $1.codecrispi.es..."
|
||||
ssh -o StrictHostKeyChecking=no workshop@$1.codecrispi.es
|
||||
;;
|
||||
*)
|
||||
echo "Available servers:"
|
||||
echo " hopper curie lovelace noether hamilton franklin johnson"
|
||||
echo " clarke goldberg liskov wing rosen shaw karp rich"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
recipes() {
|
||||
echo "🍪 Available Co-op Cloud Recipes:"
|
||||
echo ""
|
||||
echo "📝 Content Management:"
|
||||
echo " wordpress - Blog/CMS platform"
|
||||
echo " ghost - Publishing platform"
|
||||
echo " hedgedoc - Collaborative markdown editor"
|
||||
echo " dokuwiki - Simple textfile based wiki"
|
||||
echo " mediawiki - The wiki software that runs Wikipedia"
|
||||
echo ""
|
||||
echo "☁️ File & Collaboration:"
|
||||
echo " nextcloud - File sync & collaboration"
|
||||
echo " seafile - File hosting platform"
|
||||
echo " collabora - Online Office suite"
|
||||
echo " onlyoffice - Online office suite"
|
||||
echo ""
|
||||
echo "💬 Communication:"
|
||||
echo " jitsi-meet - Video conferencing"
|
||||
echo " matrix-synapse - Chat server"
|
||||
echo " rocketchat - Team communication"
|
||||
echo " mattermost - Team collaboration platform"
|
||||
echo ""
|
||||
echo "🛒 E-commerce & Business:"
|
||||
echo " prestashop - E-commerce platform"
|
||||
echo " invoiceninja - Invoice & billing"
|
||||
echo " kimai - Time tracking"
|
||||
echo " pretix - Event ticketing"
|
||||
echo ""
|
||||
echo "🔧 Development & Tools:"
|
||||
echo " gitea - Git repository hosting"
|
||||
echo " drone - CI/CD platform"
|
||||
echo " n8n - Workflow automation"
|
||||
echo " gitlab - DevOps platform"
|
||||
echo " jupyter-lab - Interactive computing"
|
||||
echo ""
|
||||
echo "📊 Analytics & Monitoring:"
|
||||
echo " plausible - Privacy-friendly analytics"
|
||||
echo " matomo - Web analytics"
|
||||
echo " uptime-kuma - Status monitoring"
|
||||
echo " grafana - Observability platform"
|
||||
echo ""
|
||||
echo "🎵 Media & Social:"
|
||||
echo " peertube - Video platform"
|
||||
echo " funkwhale - Music platform"
|
||||
echo " mastodon - Social networking"
|
||||
echo " pixelfed - Photo sharing"
|
||||
echo " jellyfin - Media system"
|
||||
echo ""
|
||||
echo "Usage: abra app new <recipe> -S --domain=myapp.${participant}.local"
|
||||
echo "Browse all 100+ recipes: https://recipes.coopcloud.tech"
|
||||
}
|
||||
|
||||
help() {
|
||||
echo "🍪 CODE CRISPIES Workshop Commands:"
|
||||
echo ""
|
||||
echo "connect <name> - SSH to cloud server"
|
||||
echo "recipes - Show available app recipes"
|
||||
echo "abra app new <recipe> -S --domain=<name>.${participant}.local"
|
||||
echo "abra app deploy <domain>"
|
||||
echo "abra app ls - List your apps"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " connect hopper"
|
||||
echo " abra app new wordpress -S --domain=blog.${participant}.local"
|
||||
echo " abra app deploy blog.${participant}.local"
|
||||
echo ""
|
||||
echo "Server: ${participant}.local"
|
||||
echo "Your apps will be available at: https://<name>.${participant}.local"
|
||||
}
|
||||
|
||||
export -f connect recipes help
|
||||
'';
|
||||
mode = "0755";
|
||||
};
|
||||
|
||||
systemd.services.workshop-setup = {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "docker.service" ];
|
||||
after = [ "docker.service" "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
script = ''
|
||||
# Docker swarm
|
||||
# Wait for network interface
|
||||
until ip addr show | grep -q "192.168.100.${toString (10 + i)}"; do
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# Install abra
|
||||
export HOME=/root
|
||||
${pkgs.curl}/bin/curl -fsSL https://install.abra.coopcloud.tech | ${pkgs.bash}/bin/bash
|
||||
|
||||
# Docker swarm setup
|
||||
${pkgs.docker}/bin/docker swarm init --advertise-addr 192.168.100.${toString (10 + i)} || true
|
||||
${pkgs.docker}/bin/docker network create -d overlay proxy || true
|
||||
|
||||
# Abra server setup
|
||||
mkdir -p /root/.abra/servers
|
||||
echo "${participant}.local" > /root/.abra/servers/${participant}.local/server.conf
|
||||
/root/.local/bin/abra server add ${participant}.local
|
||||
|
||||
# Setup helper commands in bash profile
|
||||
echo "source /etc/workshop-helpers.sh" >> /root/.bashrc
|
||||
'';
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
};
|
||||
|
||||
services.openssh.enable = true;
|
||||
networking = {
|
||||
firewall.allowedTCPPorts = [ 22 80 443 ];
|
||||
hostName = "${participant}-local";
|
||||
hostName = "${participant}.local";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
) (nixpkgs.lib.range 1 15));
|
||||
|
||||
# DNS for *.local domains
|
||||
# Wildcard DNS for all participant subdomains
|
||||
services.dnsmasq = {
|
||||
enable = true;
|
||||
settings.address = builtins.concatMap (i: [
|
||||
"/participant${toString i}.local/192.168.100.${toString (10 + i)}"
|
||||
"/wp.participant${toString i}.local/192.168.100.${toString (10 + i)}"
|
||||
"/nextcloud.participant${toString i}.local/192.168.100.${toString (10 + i)}"
|
||||
]) (nixpkgs.lib.range 1 15);
|
||||
settings.address = builtins.concatMap (i:
|
||||
let participant = builtins.elemAt [
|
||||
"hopper" "curie" "lovelace" "noether" "hamilton"
|
||||
"franklin" "johnson" "clarke" "goldberg" "liskov"
|
||||
"wing" "rosen" "shaw" "karp" "rich"
|
||||
] (i - 1);
|
||||
in [
|
||||
"/${participant}.local/192.168.100.${toString (10 + i)}"
|
||||
"/.${participant}.local/192.168.100.${toString (10 + i)}"
|
||||
]
|
||||
) (nixpkgs.lib.range 1 15);
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user