scripts/setup is the initial install, nothing else
Two of the eight did not belong. cleanup-desktop.sh is the teardown — the inverse of an install, not part of one. provision-user-dirs.ts runs per account at invite time, on a machine that is already set up. Both are back at the top level, with their `../` derivations and usage strings put back. What is left is what a fresh machine runs once: the two installers (setup.sh, setup_mac_light.sh), the two things setup.sh calls (setup-dockers.sh, setup-desktop.sh), and the two files they deploy — starship.toml, copied to ~/.config, and officer-set-display.sh, which setup-desktop.sh installs to ~/.local/bin as a login-time mode setter. The last one is not a setup script and does not read like one; it is here because it is install payload, same as the toml, and setup-desktop.sh loads it by `$(dirname $0)`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -52,7 +52,7 @@ the owner's OS user and can never be granted. Indirection there really is accide
|
|||||||
`'Unverified'` and `signin.ts` refuses anything else with a bare UNAUTHORIZED, which is the trap
|
`'Unverified'` and `signin.ts` refuses anything else with a bare UNAUTHORIZED, which is the trap
|
||||||
the hand-INSERT route fell into. The owner sets the password and reads it out; `passwordChangedAt`
|
the hand-INSERT route fell into. The owner sets the password and reads it out; `passwordChangedAt`
|
||||||
stays null. Directories come from the shared `provisionUserDirs`/`USER_DIRS` in `data-path.ts`,
|
stays null. Directories come from the shared `provisionUserDirs`/`USER_DIRS` in `data-path.ts`,
|
||||||
which `scripts/setup/provision-user-dirs.ts` now imports rather than restating.
|
which `scripts/provision-user-dirs.ts` now imports rather than restating.
|
||||||
|
|
||||||
- [ ] **Still no invite flow, and no password reset for a member.** The owner types the password and
|
- [ ] **Still no invite flow, and no password reset for a member.** The owner types the password and
|
||||||
tells the person, which means the owner knows it and the member cannot change it back if they
|
tells the person, which means the owner knows it and the member cannot change it back if they
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ set -euo pipefail
|
|||||||
# their profile in it. Opt in rather than surprise someone.
|
# their profile in it. Opt in rather than surprise someone.
|
||||||
#
|
#
|
||||||
# Usage:
|
# Usage:
|
||||||
# bash scripts/setup/cleanup-desktop.sh [--purge-brave]
|
# bash scripts/cleanup-desktop.sh [--purge-brave]
|
||||||
#
|
#
|
||||||
# Reboot afterwards: the GDM and GRUB changes are both boot-time.
|
# Reboot afterwards: the GDM and GRUB changes are both boot-time.
|
||||||
|
|
||||||
@@ -131,9 +131,9 @@ fi
|
|||||||
|
|
||||||
# --- Step 7: .env ---
|
# --- Step 7: .env ---
|
||||||
echo "[7/7] Cleaning .env..."
|
echo "[7/7] Cleaning .env..."
|
||||||
# ../.. — this lives in scripts/setup/. A wrong level here is quiet in the other direction: the sed
|
# A wrong level here is quiet: the sed below simply finds no file, reports "No .env" and leaves the real
|
||||||
# below simply finds no file, reports "No .env" and leaves the real VNC_PASSWORD in place.
|
# VNC_PASSWORD in place. Keep this in step with wherever this script lives.
|
||||||
ENV_FILE="$(cd "$(dirname "$0")/../.." && pwd)/.env"
|
ENV_FILE="$(cd "$(dirname "$0")/.." && pwd)/.env"
|
||||||
if [ -f "$ENV_FILE" ]; then
|
if [ -f "$ENV_FILE" ]; then
|
||||||
sed -i '/^VNC_PASSWORD=/d; /^VNC_PORT=/d' "$ENV_FILE"
|
sed -i '/^VNC_PASSWORD=/d; /^VNC_PORT=/d' "$ENV_FILE"
|
||||||
echo " Removed VNC entries."
|
echo " Removed VNC entries."
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
// Create the per-user root under DATA_PATH for the given accounts.
|
// Create the per-user root under DATA_PATH for the given accounts.
|
||||||
//
|
//
|
||||||
// bun scripts/setup/provision-user-dirs.ts a@b.com c@d.com
|
// bun scripts/provision-user-dirs.ts a@b.com c@d.com
|
||||||
// DRY_RUN=1 bun scripts/setup/provision-user-dirs.ts a@b.com
|
// DRY_RUN=1 bun scripts/provision-user-dirs.ts a@b.com
|
||||||
//
|
//
|
||||||
// Takes emails as arguments rather than reading the user table: the directory layout does not depend
|
// Takes emails as arguments rather than reading the user table: the directory layout does not depend
|
||||||
// on the database, and keeping the DB out means this runs with nothing else up. At invite time the
|
// on the database, and keeping the DB out means this runs with nothing else up. At invite time the
|
||||||
@@ -19,13 +19,13 @@ import { join } from 'node:path';
|
|||||||
// The list and DATA_PATH itself come from the platform rather than being restated here. The owner's
|
// The list and DATA_PATH itself come from the platform rather than being restated here. The owner's
|
||||||
// create-account handler provisions the same skeleton, and a script that drifted from it would produce
|
// create-account handler provisions the same skeleton, and a script that drifted from it would produce
|
||||||
// accounts that differ by how they were made. Importing data-path.ts pulls in no database and no server.
|
// accounts that differ by how they were made. Importing data-path.ts pulls in no database and no server.
|
||||||
import { DATA_PATH, USER_DIRS } from '../../src/servers/data-path';
|
import { DATA_PATH, USER_DIRS } from '../src/servers/data-path';
|
||||||
|
|
||||||
const DRY_RUN = process.env.DRY_RUN === '1';
|
const DRY_RUN = process.env.DRY_RUN === '1';
|
||||||
const emails = process.argv.slice(2).filter(Boolean);
|
const emails = process.argv.slice(2).filter(Boolean);
|
||||||
|
|
||||||
if (!emails.length) {
|
if (!emails.length) {
|
||||||
console.error('Usage: bun scripts/setup/provision-user-dirs.ts <email> [email...]');
|
console.error('Usage: bun scripts/provision-user-dirs.ts <email> [email...]');
|
||||||
process.exit(2);
|
process.exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ export const getOwnerHomeDir = (email: string): string => process.env.HOME_DIR ?
|
|||||||
// non-owner's sessions would run.
|
// non-owner's sessions would run.
|
||||||
//
|
//
|
||||||
// Single-sourced here rather than in the script that used to own the list, because there are now two
|
// Single-sourced here rather than in the script that used to own the list, because there are now two
|
||||||
// callers — `scripts/setup/provision-user-dirs.ts` and the owner's create-account handler — and a skeleton
|
// callers — `scripts/provision-user-dirs.ts` and the owner's create-account handler — and a skeleton
|
||||||
// that differs depending on how the account was made is a bug nobody would think to look for.
|
// that differs depending on how the account was made is a bug nobody would think to look for.
|
||||||
export const USER_DIRS = ['home', 'attachments', 'cache', 'dashboards', 'email_accounts', 'logs', 'sidecar'] as const;
|
export const USER_DIRS = ['home', 'attachments', 'cache', 'dashboards', 'email_accounts', 'logs', 'sidecar'] as const;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user