Cliente de nuvem para Omarchy com serviço e CLI em Rust, integração com rclone, montagem FUSE e o painel QML/Quickshell do Clouds Guacamole. Não precisa de Python para executar, instalar ou usar o widget.
Na barra, todos os indicadores acompanham dinamicamente a cor do tema da barra: nuvem simples quando ocioso, check quando saudável, rotação durante sincronização, seta de envio para uploads do streaming, pausa (Ⅱ), alterações pendentes (…), offline (×), erro (!) e desligado (⏻). A sincronização bidirecional usa um indicador comum de atividade; o serviço não informa a direção de cada transferência. A nuvem mantém a cor e a opacidade do tema em todos os estados, inclusive em pausa. Não abre tooltip ao passar o mouse; os detalhes ficam no painel, aberto por clique.
Esta é uma migração em desenvolvimento. Os fluxos locais de montagem e sincronização foram exercitados com rclone real. Login OAuth e operações em contas reais de cada provedor ainda precisam de validação antes de uma versão estável. A reescrita não constitui garantia de ausência de bugs.
- Múltiplas contas e os provedores suportados pelo rclone: Google Drive, OneDrive, Dropbox, Box, pCloud, Nextcloud/ownCloud, WebDAV, S3/MinIO/R2, Proton Drive e remotos já configurados.
- Drives como pastas em
~/Cloud/Stream, arquivos sob demanda, cache configurável, upload após salvar, acompanhamento de transferências e desmontagem protegida. - Pastas reais em
~/Cloud/Syncpara trabalho offline, sincronizadas nos dois sentidos porrclone bisync. Alterações locais usam inotify e debounce; alterações remotas chegam periodicamente, ao retomar ou por solicitação. - Paralelismo configurável (padrão: três pastas simultâneas), pausa por pasta, apelidos e caminhos personalizados.
- Cópias de conflito, limite de 50% de exclusões, backups locais, ressincronização sem propagar exclusões e reparo automático limitado com estado persistido.
- Filtros globais ou próprios por pasta, editor no painel e ressincronização segura após mudanças de regras.
- Guias de cliente OAuth próprio, reconexão, navegação remota, cotas, recentes, notificações, visualizador de logs, CLI e serviço systemd de usuário opcional.
- Notificações genéricas, sem nomes de arquivos ou erros privados nos argumentos de processos. Os detalhes ficam no painel e no estado privado.
- Sockets privados e autenticados por UID; credenciais fora dos argumentos dos processos; escritas atômicas e escape de controles no terminal e nos logs.
Filtros próprios substituem os globais. Pausar permite que uma sincronização já iniciada termine. Os backups protegem arquivos locais substituídos ou apagados; não são um histórico completo da nuvem.
Clique na nuvem e depois na engrenagem. O seletor de seção organiza os controles:
- Geral: chave geral, notificações e serviço opcional no login.
- Contas e pastas: adicionar uma sincronização informando conta, caminho na nuvem e pasta local; navegar na nuvem; controlar streaming de cada conta; pausar, sincronizar, renomear, filtrar ou remover pastas existentes.
- Sincronização e desempenho: intervalo remoto, transferências simultâneas por pasta (1–32), verificações por pasta (1–64) e pastas simultâneas (1–8). Padrões preservados: 4 transferências, 8 verificações e 3 pastas. Alterações de paralelismo valem para os próximos trabalhos, sem interromper os atuais.
- Cache do streaming: tamanho máximo, reserva mínima de espaço e idade
máxima (
24h,7d,720h). Mudanças valem para a próxima montagem. - Caminhos e proteção local: raiz das montagens, pasta local padrão de novas sincronizações e retenção das versões locais anteriores.
- Ferramentas, filtros e logs: motor, logs, exclusões globais e backups locais.
Os campos explicam o efeito de cada opção. Mudar a pasta local padrão não move sincronizações existentes nem escolhe o destino na nuvem. A criação de pastas no painel continua usando sincronização bidirecional, incluindo exclusões.
A chave ao lado de Cloud Drives liga ou desliga o funcionamento completo. Ao desligar, o daemon encerra sincronizações com um prazo de conclusão de 35 s; se necessário, cancela o restante preservando o estado para recuperação. Depois desmonta os drives, encerra os processos rclone e remove os observadores. Uploads pendentes no cache do streaming impedem o desligamento até terminarem. Contas, preferências de montagem, pastas e pausas individuais são preservadas.
O estado desligado persiste após reiniciar a sessão. O widget permanece na barra para religar; o processo compartilhado do Omarchy continua atendendo o desktop. Enquanto desligado, CloudKit não mantém daemon, bridge, rclone ou timer de reconexão. A chave de cada conta continua controlando somente o streaming daquela conta.
omarchy-cloudkit power off
omarchy-cloudkit power status # consulta sem iniciar o daemon
omarchy-cloudkit power onO comando stop continua sendo uma parada temporária para manutenção;
use power off para impedir a reinicialização automática pelo widget.
Clone o projeto e execute o instalador:
git clone https://github.com/sabb4th/omarchy-cloudkit.git
cd omarchy-cloudkit
./install.shO instalador verifica e instala os pacotes ausentes: rclone, fuse3,
quickshell, wl-clipboard, libnotify, glib2 e xdg-utils; para compilar,
também rust e gcc.
Requer rclone 1.75.2 ou superior, incluindo as APIs RC/bisync usadas pelo plugin.
O instalador recusa versões antigas antes de substituir uma instalação.
A instalação de pacotes usa pacman com elevação; a compilação e a instalação do
plugin usam o usuário normal. Não execute o script inteiro como root.
./install.sh --link # desenvolvimento, plugin aponta para o checkout
./install.sh --no-install-deps # falha se faltar alguma dependência
./install.sh --no-enable # instala sem habilitar o widget
./install.sh --no-restart # mantém o serviço atual durante uma atualização
./install.sh --no-build # usa bin/cloudkit-native já compilado
./install.sh --uninstall # preserva contas, configurações e arquivosO plugin usa o identificador sabb4th.cloudkit; seu nome público e comando são
omarchy-cloudkit. O atalho fica em ~/.local/bin/omarchy-cloudkit. O comando
bin/guac permanece como alias de compatibilidade e também executa Rust.
Atualizações preparam uma cópia temporária antes de substituir a instalação. Falhas ao verificar atividade não são interpretadas como serviço ocioso. A desinstalação recusa agir enquanto há transferências ou atividade desconhecida.
O gerenciador só clona o código: não executa o instalador nem compila Rust. Antes de habilitar o widget, faça a configuração no próprio checkout:
omarchy plugin add https://github.com/sabb4th/omarchy-cloudkit.git
cd "$HOME/.config/omarchy/plugins/sabb4th.cloudkit"
./install.sh --in-place--in-place mantém o checkout Git e prepara o executável e o atalho da CLI.
Após atualizar pelo gerenciador, execute o mesmo instalador para recompilar.
Não há download automático de binários nem fallback para o daemon Python.
Para remover uma instalação feita pelo gerenciador:
cd "$HOME/.config/omarchy/plugins/sabb4th.cloudkit"
./install.sh --uninstall
omarchy plugin remove sabb4th.cloudkitPara migrar a primeira versão com ID local.cloudkit, desligue o widget antigo
e pare o daemon antes de instalar/habilitar sabb4th.cloudkit. Os dados ficam nos
mesmos diretórios XDG; não habilite os dois widgets simultaneamente.
A preparação da listagem está em docs/MARKETPLACE.md.
Quando ~/.config/guacamole/config.json existe e não existe uma configuração
nova em ~/.config/omarchy-cloudkit, o programa reutiliza os diretórios
guacamole de configuração, estado e runtime. Isso mantém backups, filtros,
IDs, listagens do bisync e o mesmo lock do daemon anterior. Nada é movido ou
apagado automaticamente.
Instalações novas usam os diretórios XDG omarchy-cloudkit. As contas e os
segredos continuam no arquivo de configuração do rclone, incluindo suporte à
variável RCLONE_CONFIG.
Antes de trocar uma instalação antiga em execução, aguarde uploads e syncs,
desabilite o widget antigo e pare o serviço antigo. Se havia inicialização no
login, desabilite também a unidade guacamole.service. O instalador novo não
remove a instalação antiga nem seus dados. Não habilite as duas versões para
administrar as mesmas pastas simultaneamente.
omarchy-cloudkit power status
omarchy-cloudkit status --json
omarchy-cloudkit stream Drive on
omarchy-cloudkit stream Drive off --force
omarchy-cloudkit keep Drive:Documents/Notes ~/Notes
omarchy-cloudkit sync
omarchy-cloudkit pause Drive:Documents/Notes
omarchy-cloudkit resume Drive:Documents/Notes
omarchy-cloudkit alias Drive:Documents/Notes "Notas"
omarchy-cloudkit exclude --add '*.log'
omarchy-cloudkit resolve Drive:Documents/Notes resync
omarchy-cloudkit browse Drive:Documents
omarchy-cloudkit add-oauth Work drive --own-client
omarchy-cloudkit add-credentials Home nextcloud < credentials.json
omarchy-cloudkit service install
omarchy-cloudkit --helpFOLDER pode ser ID, apelido, REMOTE:PATH ou caminho local. Remover uma pasta
ou uma conta preserva os arquivos locais; unkeep --delete-local solicita o uso
da lixeira pelo gio.
keep é sincronização bidirecional, incluindo exclusões. O modo de backup
somente de envio (rclone copy) ainda não é oferecido pelo plugin.
cargo build --release --locked
install -m 755 target/release/omarchy-cloudkit bin/cloudkit-native
cargo test --locked
cargo clippy --locked --all-targets -- -D warnings
bash -n install.sh bin/omarchy-cloudkit bin/guac bin/guac-bridge
python3 tests/test_install.py
python3 tests/test_ipc.py
CLOUDKIT_BIN="$PWD/target/release/omarchy-cloudkit" python3 tests/test_daemon.pyPython é usado apenas em testes, ferramentas de desenvolvimento e na referência
anterior mantida em lib/guac. Essa referência não é copiada na instalação.
Os testes de ponta a ponta usam diretórios, configuração rclone e montagens
FUSE descartáveis. Não apontam para suas contas reais.
A arquitetura, as evidências e as limitações estão em docs/RUST-MIGRATION.md. A documentação original foi preservada em docs/UPSTREAM-README.md como referência, com instruções referentes à implementação anterior.
MIT. Fork de Clouds Guacamole, de Alessandro Pizzigolotto (chickymonkeys), com partes do widget derivadas de ODrive, de TiniTinyTerminator. Os avisos originais foram preservados em LICENSE.