updated domain script

This commit is contained in:
2026-03-27 18:11:24 -05:00
parent c8272eae79
commit 18e9ccf85e

View File

@@ -19,7 +19,39 @@ let
DDNS_LINE=$(echo "$DDNS_LINE" | sed 's/&a=&a=/\&a=/g') DDNS_LINE=$(echo "$DDNS_LINE" | sed 's/&a=&a=/\&a=/g')
''; '';
confirmDomain = name: ''
while true; do
echo ""
echo -e " ''${YELLOW}You entered:''${NC}"
echo -e " Domain: ''${CYAN}$DOMAIN''${NC}"
if [ -n "''${DDNS_DISPLAY:-}" ]; then
echo -e " DDNS URL: ''${CYAN}$DDNS_DISPLAY''${NC}"
fi
echo ""
read -p " Is this correct? (y/n): " CONFIRM
case "$CONFIRM" in
[yY])
echo "$DOMAIN" > "/var/lib/domains/${name}"
echo -e " ''${GREEN}Saved.''${NC}"
break
;;
[nN])
echo " Let's try again."
REDO=true
break
;;
*)
echo " Please enter y or n."
;;
esac
done
'';
domainPrompts = lib.concatMapStringsSep "\n" (d: '' domainPrompts = lib.concatMapStringsSep "\n" (d: ''
REDO=true
while [ "$REDO" = true ]; do
REDO=false
DDNS_DISPLAY=""
echo "" echo ""
echo -e "''${GREEN} ${d.label} ''${NC}" echo -e "''${GREEN} ${d.label} ''${NC}"
EXISTING="" EXISTING=""
@@ -31,38 +63,56 @@ let
DOMAIN="''${DOMAIN_INPUT:-$EXISTING}" DOMAIN="''${DOMAIN_INPUT:-$EXISTING}"
if [ -n "$DOMAIN" ]; then if [ -n "$DOMAIN" ]; then
echo "$DOMAIN" > "/var/lib/domains/${d.name}"
echo " Saved: $DOMAIN"
${lib.optionalString d.needsDDNS '' ${lib.optionalString d.needsDDNS ''
${ddnsPrompt} ${ddnsPrompt}
NJALLA_ENTRIES="$NJALLA_ENTRIES DDNS_DISPLAY="$DDNS_LINE"
curl \"$DDNS_LINE\"" PENDING_NJALLA="curl \"$DDNS_LINE\""
fi fi
''} ''}
${confirmDomain d.name}
if [ "$REDO" = false ] && [ -n "''${PENDING_NJALLA:-}" ]; then
NJALLA_ENTRIES="$NJALLA_ENTRIES
$PENDING_NJALLA"
PENDING_NJALLA=""
fi
else else
echo " Skipped." echo " Skipped."
fi fi
done
'') domains; '') domains;
missingDomainPrompts = lib.concatMapStringsSep "\n" (d: '' missingDomainPrompts = lib.concatMapStringsSep "\n" (d: ''
if [ ! -f "/var/lib/domains/${d.name}" ]; then if [ ! -f "/var/lib/domains/${d.name}" ]; then
MISSING=true MISSING=true
REDO=true
while [ "$REDO" = true ]; do
REDO=false
DDNS_DISPLAY=""
echo "" echo ""
echo -e "''${GREEN} ${d.label} (NEW) ''${NC}" echo -e "''${GREEN} ${d.label} (NEW) ''${NC}"
read -p " Subdomain (e.g. ${d.example}): " DOMAIN read -p " Subdomain (e.g. ${d.example}): " DOMAIN
if [ -n "$DOMAIN" ]; then if [ -n "$DOMAIN" ]; then
echo "$DOMAIN" > "/var/lib/domains/${d.name}"
echo " Saved: $DOMAIN"
${lib.optionalString d.needsDDNS '' ${lib.optionalString d.needsDDNS ''
${ddnsPrompt} ${ddnsPrompt}
NEW_NJALLA_ENTRIES="$NEW_NJALLA_ENTRIES DDNS_DISPLAY="$DDNS_LINE"
curl \"$DDNS_LINE\"" PENDING_NJALLA="curl \"$DDNS_LINE\""
fi fi
''} ''}
${confirmDomain d.name}
if [ "$REDO" = false ] && [ -n "''${PENDING_NJALLA:-}" ]; then
NEW_NJALLA_ENTRIES="$NEW_NJALLA_ENTRIES
$PENDING_NJALLA"
PENDING_NJALLA=""
fi
else else
echo " Skipped." echo " Skipped."
fi fi
done
fi fi
'') domains; '') domains;
@@ -104,8 +154,12 @@ curl \"$DDNS_LINE\""
mkdir -p /var/lib/njalla mkdir -p /var/lib/njalla
NJALLA_ENTRIES="" NJALLA_ENTRIES=""
PENDING_NJALLA=""
# SSL Email # SSL Email
REDO=true
while [ "$REDO" = true ]; do
REDO=false
echo "" echo ""
echo -e "''${GREEN} SSL Certificate Email ''${NC}" echo -e "''${GREEN} SSL Certificate Email ''${NC}"
echo "Let's Encrypt needs an email for certificate notifications." echo "Let's Encrypt needs an email for certificate notifications."
@@ -117,13 +171,58 @@ curl \"$DDNS_LINE\""
read -p " Email address (or Enter to keep current): " EMAIL_INPUT read -p " Email address (or Enter to keep current): " EMAIL_INPUT
SSL_EMAIL="''${EMAIL_INPUT:-$EXISTING_EMAIL}" SSL_EMAIL="''${EMAIL_INPUT:-$EXISTING_EMAIL}"
if [ -n "$SSL_EMAIL" ]; then if [ -n "$SSL_EMAIL" ]; then
while true; do
echo ""
echo -e " ''${YELLOW}You entered:''${NC}"
echo -e " Email: ''${CYAN}$SSL_EMAIL''${NC}"
echo ""
read -p " Is this correct? (y/n): " CONFIRM
case "$CONFIRM" in
[yY])
echo "$SSL_EMAIL" > /var/lib/domains/sslemail echo "$SSL_EMAIL" > /var/lib/domains/sslemail
echo " Saved." echo -e " ''${GREEN}Saved.''${NC}"
break
;;
[nN])
echo " Let's try again."
REDO=true
break
;;
*)
echo " Please enter y or n."
;;
esac
done
fi fi
done
# All module domains # All module domains
${domainPrompts} ${domainPrompts}
# Final review
echo ""
echo -e "''${CYAN}''${NC}"
echo -e "''${CYAN} Review All Entries''${NC}"
echo -e "''${CYAN}''${NC}"
echo ""
echo " Configured domains:"
${domainSummary}
echo ""
echo " DDNS entries:"
if [ -n "$NJALLA_ENTRIES" ]; then
echo "$NJALLA_ENTRIES"
else
echo " (none)"
fi
echo ""
read -p " Does everything look correct? (y/n): " FINAL_CONFIRM
if [ "$FINAL_CONFIRM" != "y" ] && [ "$FINAL_CONFIRM" != "Y" ]; then
echo ""
echo -e " ''${YELLOW}Setup cancelled. Run 'sudo sovran-setup-domains' to start over.''${NC}"
echo ""
exit 1
fi
# Write njalla.sh # Write njalla.sh
echo "" echo ""
echo -e "''${GREEN} Generating DDNS script ''${NC}" echo -e "''${GREEN} Generating DDNS script ''${NC}"
@@ -154,9 +253,6 @@ SCRIPT
echo -e "''${CYAN} Setup Complete!''${NC}" echo -e "''${CYAN} Setup Complete!''${NC}"
echo -e "''${CYAN}''${NC}" echo -e "''${CYAN}''${NC}"
echo "" echo ""
echo " Configured domains:"
${domainSummary}
echo ""
echo " Domain files: /var/lib/domains/" echo " Domain files: /var/lib/domains/"
echo " DDNS script: /var/lib/njalla/njalla.sh" echo " DDNS script: /var/lib/njalla/njalla.sh"
echo " DDNS cron: Every 15 minutes (already configured)" echo " DDNS cron: Every 15 minutes (already configured)"
@@ -177,6 +273,7 @@ SCRIPT
MISSING=false MISSING=false
NEW_NJALLA_ENTRIES="" NEW_NJALLA_ENTRIES=""
PENDING_NJALLA=""
echo "" echo ""
echo -e "''${CYAN}''${NC}" echo -e "''${CYAN}''${NC}"
@@ -197,6 +294,30 @@ SCRIPT
exit 0 exit 0
fi fi
# Final review
echo ""
echo -e "''${CYAN}''${NC}"
echo -e "''${CYAN} Review New Entries''${NC}"
echo -e "''${CYAN}''${NC}"
echo ""
echo " All configured domains:"
${domainSummary}
echo ""
echo " New DDNS entries:"
if [ -n "$NEW_NJALLA_ENTRIES" ]; then
echo "$NEW_NJALLA_ENTRIES"
else
echo " (none)"
fi
echo ""
read -p " Does everything look correct? (y/n): " FINAL_CONFIRM
if [ "$FINAL_CONFIRM" != "y" ] && [ "$FINAL_CONFIRM" != "Y" ]; then
echo ""
echo -e " ''${YELLOW}Setup cancelled. Run 'sudo sovran-add-domains' to start over.''${NC}"
echo ""
exit 1
fi
# Append new entries to njalla.sh # Append new entries to njalla.sh
if [ -n "$NEW_NJALLA_ENTRIES" ]; then if [ -n "$NEW_NJALLA_ENTRIES" ]; then
echo "" echo ""
@@ -225,7 +346,7 @@ SCRIPT
# Summary # Summary
echo "" echo ""
echo -e "''${CYAN}''${NC}" echo -e "''${CYAN}<EFBFBD><EFBFBD>''${NC}"
echo -e "''${CYAN} New Domains Added!''${NC}" echo -e "''${CYAN} New Domains Added!''${NC}"
echo -e "''${CYAN}''${NC}" echo -e "''${CYAN}''${NC}"
echo "" echo ""
@@ -234,7 +355,7 @@ SCRIPT
echo "" echo ""
echo -e "''${YELLOW} Rebuilding to activate services with new domains...''${NC}" echo -e "''${YELLOW} Rebuilding to activate services with new domains...''${NC}"
echo "" echo ""
nixos-rebuild switch --impure --flake /etc/nixos#nixos nixos-rebuild switch --flake /etc/nixos#nixos
''; '';
needsSetup = pkgs.writeShellScriptBin "sovran-domains-need-setup" '' needsSetup = pkgs.writeShellScriptBin "sovran-domains-need-setup" ''