glacier-cli 0.1.1

CLI do glacier-ui: cria um projeto pronto (templates .gv, .gss e scripts Luau) e instala as extensões de VS Code.
glacier-cli-0.1.1 is not a library.

glacier-cli

A CLI do glacier-ui. Ela existe por um motivo só: um projeto glacier tem um Cargo.toml, um src/main.rs, um .gv com cabeçalho, um .gss, um .luaurc e uma árvore de scripts Luau — e descobrir essa disposição lendo o README, arquivo por arquivo, é a parte mais chata de começar.

cargo install glacier-cli
glacier new

O new faz um questionário, mostra um resumo e só então escreve alguma coisa: até a confirmação final, nada foi criado.

glacier new [nome]            cria um projeto — pergunta o resto
glacier install-extensions    só instala as extensões de VS Code
glacier presets               descreve os presets disponíveis
glacier --version

Presets

id O que é
completo Janela sem decoração com titlebar própria, tema + .gss, componentes com <props>, navegação, fetch, toasts, @media
minimo Uma tela, um .gss e um bloco de script Luau — o menor projeto que ainda mostra a ideia
janelas Multi-janela (open_window/broadcast/close_window), ícone de bandeja, instância única, geometria lembrada
rust O trait Component com estado tipado em Rust, em vez de comportamento em Luau

Todos herdam o .gitignore, o .luaurc e o views/scripts/glacier.d.luau (os tipos dos globais que o motor injeta, para o luau-lsp).

Opções de new

-p, --preset <id>       completo | minimo | janelas | rust
    --extensions        instala as extensões sem perguntar
    --no-extensions     não instala as extensões
    --git / --no-git    `git init` no projeto criado
    --build / --no-build  `cargo build` ao final
-y, --yes               não pergunta nada: aceita todos os defaults

Sem TTY (num pipe, em CI) o questionário é pulado e valem os defaults — e as extensões não são instaladas, porque mexer no editor de alguém não é o que new foi chamado para fazer.

As extensões de VS Code

glacier install-extensions instala a Glacier View (.gv) e a Glacier GSS (.gss): realce de sintaxe, mais links clicáveis e ir-para-definição dos src/href/ações para os arquivos (e funções) que eles nomeiam.

As duas vêm embutidas neste binário e são empacotadas em .vsix na hora, sem Node nem vsce — quem rodou cargo install não precisa ter nenhum dos dois. Editores procurados no PATH, nessa ordem: code, code-insiders, cursor, codium, windsurf.

Sem dependências

Este crate não tem nenhuma dependência — nem clap, nem iced, nem o próprio glacier-ui. É deliberado: a CLI existe para tirar alguém do zero, e um cargo install que leva minutos derrotaria o propósito. O questionário, o zip do .vsix e a escrita dos arquivos são std puro.

Instalar sem o crates.io (.deb)

Para exercitar a CLI como o usuário final a vê — no PATH, longe do target/:

make deb-cli        # constrói em target/debian/ e confere as dependências
make install-cli    # constrói e instala (usa sudo)
make uninstall-cli

O pacote é só o binário (~270 KB). O Depends sai como libc6 (>= 2.39): o binário exige libc.so.6 e libgcc_s.so.1, e o dpkg-shlibdeps omite o segundo porque libgcc-s1 já vem por dependência do libc6. Nada de GTK nem de Node — as extensões vão embutidas e o .vsix é montado em tempo de execução. make check-deb falha se o binário ganhar uma dependência nativa fora da glibc.

O piso >= 2.39 é o da glibc da máquina que compilou (Ubuntu 24.04+ / Debian 13+). Para distribuir mais amplamente, compile num ambiente de glibc mais antiga.

Desenvolvimento

Os presets vivem em templates/<id>/ e são embutidos pelo build.rs; editar um arquivo lá recompila a CLI. Dois arquivos ficam ali disfarçados, e a CLI desfaz o disfarce ao criar o projeto (ver scaffold::renomear):

No template No projeto criado Por quê
gitignore .gitignore com o ponto, ele valeria para o repositório do glacier e esconderia os próprios presets
Cargo.toml.template Cargo.toml cargo package pula todo subdiretório com um Cargo.toml — com o nome real, os presets ficariam de fora do .crate publicado

As extensões vêm de ../../editors/ num checkout — para publicar, make sync-extensions copia essa árvore para dentro do crate (o Cargo não empacota nada de fora dele):

make publish-cli       # sync-extensions + cargo publish -p glacier-cli

Os presets são cobertos por dois testes no crate do motor: tests/exemplos_gv.rs (todo .gv parseia) e tests/presets_cli.rs (cada preset carrega num GlacierUI de verdade — imports, stylesheets e Luau incluídos).