Setup matinal e tear-down

TL;DR

Playbook: abrir o dia (setup matinal) e fechar o dia (tear-down) com sessões nomeadas Zellij. Setup: zellij a -c projeto com layout KDL → atuin import → lazygit em tab dedicada. Tear-down: zellij d (preserva estado) vs zellij k (descarte intencional). Hábito de ritual reduz fricção e perda de contexto entre dias.

O que é / Como funciona

Por que ritualizar

Ritualizar início e fim do dia de trabalho reduz decisões repetitivas (“por onde começo?”) e preserva contexto entre dias sem depender de memória. O setup matinal é o sinal psicológico de que o trabalho começa; o tear-down, de que terminou. Sem ritual, o estado mental permanece aberto — dificulta descanso e reentrada.

Benefícios concretos:

  • Menos decisões no começo do dia (layout, diretório, processos já definidos)
  • Sessão nomeada preserva tabs, panes e processos entre dias
  • Tear-down intencional evita acúmulo de sessões zombies consumindo RAM
  • Limite claro entre trabalho e não-trabalho (higiene cognitiva)

Setup matinal: passos

  1. Iniciar (ou reanexar) sessão nomeadazellij a -c <projeto> cria se não existe, anexa se já existe
  2. Restaurar layout — se layout KDL foi persistido, ele abre automaticamente; senão, abrir tabs manualmente
  3. Sync atuin entre máquinasatuin sync propaga history do outro dispositivo (laptop/desktop)
  4. Abrir lazygit em tab dedicada — tab git com lazygit já rodando dá visão imediata do estado do repo
  5. Foco em tab principal — navegar para tab code e abrir o arquivo em que parou ontem

Tear-down: passos

  1. Salvar tudo — commitar WIP, ou pelo menos salvar buffers abertos no editor
  2. Decidir intenção — continuar amanhã (detach) ou encerrar projeto/feature (kill)
  3. DetachCtrl-Q dentro do Zellij (ou zellij d de fora); preserva estado completo
  4. Killzellij k <nome> de fora; mata todos os processos da sessão
  5. Sync atuin finalatuin sync para o outro dispositivo ter o history atualizado

Detach vs kill

AçãoComandoProcessosSessão sobrevive logoutQuando usar
Detachzellij d (ou Ctrl-Q)Continuam rodandoSim90% do tempo — vai continuar amanhã
Killzellij k <nome>MorremNãoFeature merged, projeto pausado, limpeza semanal

Regra prática: default é detach. Kill exige intenção explícita.

Na prática

Layout KDL mínimo

Arquivo em ~/.config/zellij/layouts/projeto.kdl:

layout {
    default_tab_template {
        pane size=1 borderless=true {
            plugin location="zellij:tab-bar"
        }
        children
        pane size=2 borderless=true {
            plugin location="zellij:status-bar"
        }
    }
 
    tab name="code" focus=true {
        pane
    }
 
    tab name="git" {
        pane command="lazygit"
    }
 
    tab name="server" {
        pane
    }
}

Panes de server e code ficam vazios intencionalmente — comandos pesados são iniciados manualmente para evitar spike de CPU no boot da sessão.

Setup matinal — receita

# Função no ~/.zshrc
work() {
    local proj="$1"
    cd "$(zoxide query "$proj")" || return 1
    zellij a -c "$proj" options --default-layout projeto
}
 
# Uso
work myproj
# Sessão "myproj" abre com 3 tabs (code/git/server)
# lazygit já roda em tab "git"

A função work combina três ações em um comando idempotente: navega para o diretório, cria a sessão se não existe, e aplica o layout. Chamar work myproj quando a sessão já existe simplesmente reanexar.

Tear-down — receita

# Encerrar fluindo (preserva estado — default)
# Dentro do Zellij: Ctrl-Q
 
# Listar sessões antes de qualquer kill
zellij ls
 
# Kill intencional (descarta sessão e processos)
zellij k myproj

Hábito sexta-feira: rodar zellij ls e fazer kill nas sessões que não serão retomadas na semana seguinte.

Multi-máquina (laptop + desktop)

atuin sync propaga history de comandos entre máquinas automaticamente. Sessões Zellij não sincronizam — cada máquina tem suas próprias sessões.

Convenção de nomes para evitar confusão mental:

laptop-myproj
desktop-myproj
desktop-myproj-hotfix

Prefixo da máquina deixa claro onde a sessão vive ao ler zellij ls de qualquer dispositivo via SSH.

Armadilhas

  1. zellij k com trabalho não salvo

    • Causa: hábito de “limpar” sessões antigas sem verificar o estado atual.
    • Sintoma: edits abertos no nvim somem; pane com processo importante é destruído.
    • Como detectar: antes de qualquer kill, fazer zellij a <nome> e checar tabs visualmente.
    • Solução: detach como default; kill somente após attach + confirmação visual de que nada está aberto.
  2. Layout KDL com auto-start de comandos pesados

    • Causa: querer “tudo pronto em 1 comando” no layout.
    • Sintoma: npm run dev, docker compose up e servidor de banco iniciando simultaneamente trava o laptop no boot da sessão.
    • Como detectar: spike de CPU imediatamente ao rodar work myproj.
    • Solução: layout define apenas nomes de tabs e panes vazios; comandos pesados são iniciados manualmente na tab correta.
  3. Nomes de sessão genéricos que conflitam

    • Causa: sempre usar zellij -s work ou zellij -s dev sem considerar projetos paralelos.
    • Sintoma: zellij a work abre estado de outro projeto da semana passada.
    • Como detectar: zellij ls mostra work mas você não lembra o que estava nessa sessão.
    • Solução: usar o slug do repo como nome (myproj, alice-api) ou <projeto>-<feature> quando trabalhando em branches paralelas.
  4. Sessões esquecidas acumulando RAM

    • Causa: fechar o laptop direto sem detach explícito (ou com detach mas nunca fazendo kill depois).
    • Sintoma: após meses, zellij ls lista dezenas de sessões; top mostra zellij consumindo 1 GB+ de RAM.
    • Como detectar: zellij ls | wc -l acima de 10 é sinal de acúmulo.
    • Solução: ritual de sexta-feira — listar sessões, retomar e fazer kill nas que não voltam na próxima semana.

Em inglês

  • Setupsetup. “O setup matinal inicia a sessão nomeada e restaura o layout do dia anterior.”
  • Tear-downtear-down. “O tear-down encerra a sessão de forma intencional, com detach ou kill.”
  • Ritualritual. “Ritualizar o início e fim do dia reduz decisões repetitivas.”
  • Attachattach. “Fazer attach em uma sessão existente evita criar duplicatas com estado diferente.”
  • Detachdetach. “Detach preserva todos os processos e permite retomar amanhã exatamente onde parou.”
  • Killkill. “Kill descarta a sessão e mata todos os processos — use com intenção, não como default.”
  • Layoutlayout. “Um layout KDL declarativo garante que as tabs certas abram na ordem certa.”
  • Auto-startauto-start. “Evite auto-start de comandos pesados no layout para não travar o boot da sessão.”
  • Idempotentidempotent. “A função work é idempotente: chamar duas vezes não cria duas sessões.”
  • Multi-machinemulti-machine. “Em configuração multi-machine, use prefixo de máquina no nome da sessão para evitar confusão.”

Veja também

Referências