Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/skills/documentation/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Ao criar ou editar QUALQUER arquivo `.md`, você DEVE seguir estas regras para e
```markdown
# Título do Guia

> Descrição curta — v0.41.6
> Descrição curta — v0.41.7
```
2. **Hierarquia de Títulos:** Use `#` para H1, `##` para H2, etc. Nunca pule níveis (ex: não pule de H1 para H3).
3. **Tabelas:** Alinhamento obrigatório com pipes `|` e linha separadora `|---|---|`.
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/make-changelog/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Distribua as mudanças nas seções padronizadas do "Keep a Changelog":
## 3. Formatação e Estilo

- **Cabeçalho da Versão:** Use H2 com colchetes, versão e data (AAAA-MM-DD).
* *Exemplo:* `## [v0.41.6] - 2026-04-05`
* *Exemplo:* `## [v0.41.7] - 2026-04-05`
- **Mensagens:**
* Use o tempo verbal no passado (ex: "Added", "Improved", "Fixed").
* Seja conciso mas específico (ex: em vez de "Update PATH", use "Improved PATH handling for Ruby and Composer").
Expand Down
2 changes: 1 addition & 1 deletion .gemini/skills/documentation/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Este guia define o padrão ouro para manter a documentação do SetupVibe sincro

Ao criar ou editar QUALQUER arquivo `.md`, você DEVE invocar a skill **`markdown-format`** para garantir a conformidade com as regras do projeto:

1. **Cabeçalho Padrão:** Começar com H1 seguido de blockquote com a versão. Ex: `> Descrição curta — v0.41.6`.
1. **Cabeçalho Padrão:** Começar com H1 seguido de blockquote com a versão. Ex: `> Descrição curta — v0.41.7`.
2. **Linting Delegado:** Todas as regras de títulos, tabelas, code blocks, links, listas e espaçamentos são gerenciadas pela skill `markdown-format`. **Não ignore seus avisos**.
3. **Linting Final:** Após criar ou editar o arquivo, processe-o com a skill `markdown-format` para validar conformidade.

Expand Down
2 changes: 1 addition & 1 deletion .gemini/skills/make-changelog/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Distribua as mudanças nas seções padronizadas do "Keep a Changelog":

Para garantir a perfeição visual e técnica do `CHANGELOG.md`:

- **Cabeçalho da Versão:** Use H2 com colchetes, versão e data (AAAA-MM-DD). Ex: `## [v0.41.6] - 2026-04-05`.
- **Cabeçalho da Versão:** Use H2 com colchetes, versão e data (AAAA-MM-DD). Ex: `## [v0.41.7] - 2026-04-05`.
- **Mensagens:** Use bullet points `-` e tempo verbal no passado (Added, Improved, Fixed).
- **Linting:** Após gerar o conteúdo, **você deve invocar a skill `markdown-format`** para aplicar o alinhamento de tabelas, espaçamento de blocos e o rodapé obrigatório.

Expand Down
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Shell scripts must use LF so bash on Linux/macOS never sees stray CR (avoids $'\r': command not found).
*.sh text eol=lf
6 changes: 5 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This file provides instructions and context for AI coding agents (OpenAI Codex,

## What This Project Is

**SetupVibe** is a cross-platform automated development environment setup script (v0.41.6). It installs and configures a complete developer toolkit in one command, supporting macOS 12+ and Linux (Ubuntu 24.04+, Debian 12+, Zorin OS 18+).
**SetupVibe** is a cross-platform automated development environment setup script (v0.41.7). It installs and configures a complete developer toolkit in one command, supporting macOS 12+ and Linux (Ubuntu 24.04+, Debian 12+, Zorin OS 18+).

There are two editions:

Expand All @@ -22,6 +22,10 @@ bash server.sh

# Or via curl (canonical usage)
curl -sSL desktop.setupvibe.dev | bash

# Optional .NET SDK (default .NET 10; also --install-dotnet=8|9|10)
curl -sSL desktop.setupvibe.dev | bash -s -- --install-dotnet
curl -sSL server.setupvibe.dev | bash -s -- --manager --install-dotnet
```

To test changes to a script, run it directly on a target machine or VM.
Expand Down
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,19 @@ All notable changes to **SetupVibe** are documented in this file.

---

## [v0.41.7] - 2026-04-18

### Added

- Optional **.NET SDK** installation via `--install-dotnet` (defaults to **.NET 10** LTS channel) and `--install-dotnet=8|9|10` on both **Desktop** and **Server** editions. Linux uses the Microsoft APT repository when available, with fallback to the official `dotnet-install.sh` script; macOS (Desktop) uses `dotnet-install.sh` under `~/.dotnet`.
- Shell PATH support for user-local .NET (`DOTNET_ROOT`, `~/.dotnet`, `~/.dotnet/tools`) in `conf/zshrc-*.zsh` when `~/.dotnet` exists.

### Changed

- Roadmap and installation summary show **.NET** in the relevant step title when `--install-dotnet` is used, or when an existing **.NET SDK** is detected (Desktop step 5; Server **AI CLI Tools** step). Detection checks `~/.dotnet/dotnet`, `/usr/bin/dotnet`, `/usr/share/dotnet/dotnet`, and uses `bash -c` with `PATH` including `snap/bin` where needed.

---

## [v0.41.6] - 2026-04-05

### Added
Expand Down
6 changes: 5 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

## What This Project Is

**SetupVibe** is a cross-platform automated development environment setup script (v0.41.6). It installs and configures a complete developer toolkit in one command, supporting macOS 12+ and Linux (Ubuntu 24.04+, Debian 12+, Zorin OS 18+).
**SetupVibe** is a cross-platform automated development environment setup script (v0.41.7). It installs and configures a complete developer toolkit in one command, supporting macOS 12+ and Linux (Ubuntu 24.04+, Debian 12+, Zorin OS 18+).

There are two editions:

Expand All @@ -22,6 +22,10 @@ bash server.sh

# Or via curl (canonical usage)
curl -sSL desktop.setupvibe.dev | bash

# Optional .NET SDK (default .NET 10; also --install-dotnet=8|9|10)
curl -sSL desktop.setupvibe.dev | bash -s -- --install-dotnet
curl -sSL server.setupvibe.dev | bash -s -- --manager --install-dotnet
```

To test changes to a script, run it directly on a target machine or VM.
Expand Down
6 changes: 5 additions & 1 deletion GEMINI.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This file provides instructions and context for Gemini CLI when working with the

## Project Overview

**SetupVibe** is a cross-platform automated development environment setup tool (v0.41.6). It streamlines the installation and configuration of a complete developer toolkit for macOS (12+) and major Linux distributions (Ubuntu 24.04+, Debian 12+, Zorin OS 18+).
**SetupVibe** is a cross-platform automated development environment setup tool (v0.41.7). It streamlines the installation and configuration of a complete developer toolkit for macOS (12+) and major Linux distributions (Ubuntu 24.04+, Debian 12+, Zorin OS 18+).

The project consists of two primary editions:

Expand Down Expand Up @@ -42,6 +42,10 @@ bash server.sh

# Canonical usage (from README)
curl -sSL desktop.setupvibe.dev | bash

# Optional .NET SDK (default .NET 10; also --install-dotnet=8|9|10)
curl -sSL desktop.setupvibe.dev | bash -s -- --install-dotnet
curl -sSL server.setupvibe.dev | bash -s -- --manager --install-dotnet
```

### Testing Changes
Expand Down
2 changes: 1 addition & 1 deletion MARKDOWN.md
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ Documentation files in `docs/` should begin with an H1 and a blockquote describi
```markdown
# Guide Title

> Short description — v0.41.6
> Short description — v0.41.7
```

---
Expand Down
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SetupVibe

> The ultimate cross-platform development environment setup script — v0.41.6
> The ultimate cross-platform development environment setup script — v0.41.7

Installs and configures a complete development stack in one command, supporting macOS and major Linux distributions.

Expand Down Expand Up @@ -42,6 +42,14 @@ To initialize Docker Swarm automatically after setup:
curl -sSL server.setupvibe.dev | bash -s -- --manager
```

Optional **.NET SDK** (default **.NET 10**; use `--install-dotnet=8` or `=9` for other supported majors):

```bash
curl -sSL desktop.setupvibe.dev | bash -s -- --install-dotnet
curl -sSL server.setupvibe.dev | bash -s -- --install-dotnet
curl -sSL server.setupvibe.dev | bash -s -- --manager --install-dotnet
```

## Contributing

We welcome contributions of all sizes! Please read our [Contribution Guide](CONTRIBUTING.md) to get started.
Expand Down
4 changes: 4 additions & 0 deletions conf/zshrc-linux.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ elif [ -f "$HOME/.linuxbrew/bin/brew" ]; then
fi

# Define PATHs before loading plugins so they can find the tools
if [[ -d "$HOME/.dotnet" ]]; then
export DOTNET_ROOT="$HOME/.dotnet"
export PATH="$HOME/.dotnet:$HOME/.dotnet/tools:$PATH"
fi
export PATH="$HOME/.local/bin:$PATH"
export PATH="$HOME/.npm-global/bin:$PATH"
export PATH="$HOME/.cargo/bin:$PATH"
Expand Down
4 changes: 4 additions & 0 deletions conf/zshrc-macos.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ elif [[ -f "/usr/local/bin/brew" ]]; then
fi

# Define PATHs before loading plugins so they can find the tools
if [[ -d "$HOME/.dotnet" ]]; then
export DOTNET_ROOT="$HOME/.dotnet"
export PATH="$HOME/.dotnet:$HOME/.dotnet/tools:$PATH"
fi
export PATH="$HOME/.local/bin:$PATH"
export PATH="$HOME/.cargo/bin:$PATH"
export PATH="$HOME/.config/composer/vendor/bin:$PATH"
Expand Down
4 changes: 4 additions & 0 deletions conf/zshrc-server.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ elif [ -f "$HOME/.linuxbrew/bin/brew" ]; then
eval "$($HOME/.linuxbrew/bin/brew shellenv)"
fi

if [[ -d "$HOME/.dotnet" ]]; then
export DOTNET_ROOT="$HOME/.dotnet"
export PATH="$HOME/.dotnet:$HOME/.dotnet/tools:$PATH"
fi
export PATH="$HOME/.local/bin:$HOME/.npm-global/bin:$PATH"
export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"
Expand Down
144 changes: 142 additions & 2 deletions desktop.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,38 @@ NC='\033[0m' # No Color


# --- VERSION ---
VERSION="0.41.6"
VERSION="0.41.7"
INSTALL_URL="https://desktop.setupvibe.dev"

# --- ARGUMENT PARSING ---
INSTALL_DOTNET=false
DOTNET_MAJOR=""
for arg in "$@"; do
case "$arg" in
--install-dotnet)
INSTALL_DOTNET=true
DOTNET_MAJOR="10"
;;
--install-dotnet=*)
INSTALL_DOTNET=true
DOTNET_MAJOR="${arg#*=}"
;;
esac
done
if $INSTALL_DOTNET; then
case "$DOTNET_MAJOR" in
8|9|10) ;;
*)
echo -e "${RED}Error: --install-dotnet requires major version 8, 9, or 10 (e.g. --install-dotnet=9).${NC}"
exit 1
;;
esac
fi

echo -e "${CYAN}SetupVibe Desktop v${VERSION}${NC}"
if $INSTALL_DOTNET; then
echo -e "${YELLOW} → .NET SDK ${DOTNET_MAJOR}.x install requested${NC}"
fi
echo ""

# --- ENVIRONMENT ---
Expand Down Expand Up @@ -113,7 +141,7 @@ if [[ "$(uname -s)" == "Linux" ]]; then

# If we have errors in APT, we try to fix them by removing potentially broken lists managed by this script
# This prevents the error you saw: signature verification failed because keys were deleted
sys_do grep -rl 'docker\|nodesource\|charm\.sh\|cli\.github\|sury\|ondrej\|ansible\|codeiumdata\|windsurf\|antigravity\|pkg\.dev' \
sys_do grep -rl 'docker\|nodesource\|charm\.sh\|cli\.github\|sury\|ondrej\|ansible\|codeiumdata\|windsurf\|antigravity\|pkg\.dev\|packages\.microsoft' \
/etc/apt/sources.list.d/ 2>/dev/null | xargs -I {} sys_do rm -f "{}" 2>/dev/null || true

sys_do apt-get update -y -qq
Expand Down Expand Up @@ -468,6 +496,81 @@ safe_download() {
}


# Install Microsoft .NET SDK (optional; see --install-dotnet / --install-dotnet=MAJOR)
_install_dotnet_via_install_script() {
local inst_dir="$REAL_HOME/.dotnet"
echo -e "${YELLOW}Installing .NET SDK via dotnet-install.sh (channel ${DOTNET_MAJOR}.0) → $inst_dir${NC}"
user_do mkdir -p "$inst_dir"
local script
script=$(mktemp /tmp/dotnet-install.XXXXXX.sh)
if ! curl -fsSL "https://dot.net/v1/dotnet-install.sh" -o "$script"; then
echo -e "${RED}✘ Failed to download dotnet-install.sh${NC}"
rm -f "$script"
return 1
fi
chmod +x "$script"
if user_do bash "$script" --channel "${DOTNET_MAJOR}.0" --install-dir "$inst_dir"; then
rm -f "$script"
if user_do test -x "$inst_dir/dotnet"; then
echo -e "${GREEN}✔ .NET SDK installed to $inst_dir${NC}"
return 0
fi
fi
rm -f "$script"
echo -e "${RED}✘ .NET SDK installation failed.${NC}"
return 1
}

install_dotnet_sdk() {
echo ""
echo -e "${BLUE}========================================================${NC}"
echo -e "${BOLD}▶ .NET SDK (${DOTNET_MAJOR}.x)${NC}"
echo -e "${BLUE}========================================================${NC}"
local sdk_pkg="dotnet-sdk-${DOTNET_MAJOR}.0"

if $IS_MACOS; then
_install_dotnet_via_install_script
return $?
fi

if $IS_LINUX && ( $IS_UBUNTU || $IS_DEBIAN ); then
local msdeb=""
local ubver=""
local dver=""
if $IS_UBUNTU; then
ubver=$(lsb_release -rs 2>/dev/null)
[[ -n "$ubver" ]] && msdeb="https://packages.microsoft.com/config/ubuntu/${ubver}/packages-microsoft-prod.deb"
else
dver=$(grep -E '^VERSION_ID=' /etc/os-release 2>/dev/null | cut -d= -f2 | tr -d '"')
[[ -n "$dver" ]] && msdeb="https://packages.microsoft.com/config/debian/${dver}/packages-microsoft-prod.deb"
fi

if [[ -n "$msdeb" ]]; then
local tmpdeb
tmpdeb=$(mktemp /tmp/msprodXXXXXX.deb)
echo -e "${YELLOW}Adding Microsoft package repository...${NC}"
if curl -fsSL "$msdeb" -o "$tmpdeb" && sys_do dpkg -i "$tmpdeb"; then
rm -f "$tmpdeb"
sys_do apt-get install -f -y -qq 2>/dev/null || true
sys_do apt-get update -qq
if sys_do apt-get install -y "$sdk_pkg"; then
echo -e "${GREEN}✔ .NET SDK installed via APT (${sdk_pkg}).${NC}"
command -v dotnet >/dev/null 2>&1 && user_do dotnet --version
return 0
fi
else
rm -f "$tmpdeb"
fi
echo -e "${YELLOW}⚠ APT install failed or package unavailable — trying dotnet-install.sh...${NC}"
fi
else
echo -e "${YELLOW}⚠ Non-Debian/Ubuntu Linux — using dotnet-install.sh...${NC}"
fi

_install_dotnet_via_install_script
}


# --- INSTALLATION STEPS ---


Expand Down Expand Up @@ -735,6 +838,10 @@ step_5() {
brew_cmd install cronboard

cron_ensure

if $INSTALL_DOTNET; then
install_dotnet_sdk || echo -e "${YELLOW}⚠ .NET SDK step finished with warnings.${NC}"
fi
else
echo "Setup Python..."
sys_do apt-get install -y python3 python3-pip python3-venv python-is-python3
Expand Down Expand Up @@ -771,6 +878,10 @@ step_5() {
fi

cron_ensure

if $INSTALL_DOTNET; then
install_dotnet_sdk || echo -e "${YELLOW}⚠ .NET SDK step finished with warnings.${NC}"
fi
fi
}

Expand Down Expand Up @@ -1208,9 +1319,38 @@ step_14() {
}


# Adjust roadmap/summary labels when .NET install is requested or already present
update_steps_dotnet_labels() {
local base="Languages (Go, Rust, Python + uv)"
if $INSTALL_DOTNET; then
STEPS[4]="${base}; .NET SDK ${DOTNET_MAJOR}.x"
return
fi
local dver=""
local cand
# Try common paths (dotnet-install ~/.dotnet, Microsoft APT /usr/bin, shared root)
for cand in "$REAL_HOME/.dotnet/dotnet" "/usr/bin/dotnet" "/usr/share/dotnet/dotnet"; do
[[ -e "$cand" ]] || continue
dver=$(user_do env HOME="$REAL_HOME" PATH="$(dirname "$cand"):/usr/local/bin:/usr/bin:${PATH}" "$cand" --version 2>/dev/null | head -1 | tr -d '\r' || true)
[[ -n "$dver" ]] && break
done
# Non-login shell with PATH typical for dotnet-install, snap, and package installs
if [[ -z "$dver" ]]; then
dver=$(user_do bash -c 'export PATH="$HOME/.dotnet:/snap/bin:/usr/local/bin:/usr/bin:$PATH"; command -v dotnet >/dev/null 2>&1 && dotnet --version' 2>/dev/null | head -1 | tr -d '\r' || true)
fi
if [[ -z "$dver" ]] && command -v dotnet &>/dev/null; then
dver=$(dotnet --version 2>/dev/null | head -1 | tr -d '\r' || true)
fi
if [[ -n "$dver" ]]; then
STEPS[4]="${base} [.NET present: ${dver}]"
fi
}


# --- MAIN EXECUTION ---


update_steps_dotnet_labels
show_roadmap_and_wait
configure_git_interactive

Expand Down
Loading