Script pós instalação

Ajustando o debian minimalista 

 vim debian_postinstall.sh 

 Cole o script abaixo e salve o arquivo 

 #!/bin/bash

# ==============================================================================

# Script de Pós-Instalação para Servidores Debian-based

#

# Autor: Krisofferson Marini

# Versão: 3.3

# ==============================================================================

set -eu

set -o pipefail

# --- Verificação de Privilégios ---

if [[ "$EUID" -ne 0 ]]; then

 echo "ERRO: Este script precisa de privilégios de root para ser executado." >&2

 exit 1

fi

if [[ -z "$SUDO_USER" ]]; then

 echo "AVISO: Executando como root diretamente. As configurações para o usuário comum serão ignoradas."

 readonly CURRENT_USER="root"

 readonly CONFIGURE_SUDO_USER=false

else

 readonly CURRENT_USER=$SUDO_USER

 readonly CONFIGURE_SUDO_USER=true

fi

# --- Variáveis Globais ---

readonly HOME_USER=$(getent passwd "$CURRENT_USER" | cut -d: -f6)

readonly PACKAGES_TO_INSTALL=(

 firmware-linux firmware-linux-free firmware-linux-nonfree

 vim fzf man-db atop gnupg2 sysstat lsof hwinfo chrony ncdu

 btop htop iotop wget nmap tcpdump whois bind9-dnsutils dnstop

 iftop locate traceroute bmon netdiscover fastfetch tmux grc

 bat entr eza exuberant-ctags silversearcher-ag fd-find ripgrep

 fonts-cascadia-code fonts-firacode

)

# --- Funções Utilitárias ---

log_step() { echo -e "\n--- $1 ---"; }

append_if_not_exists() {

 local marker="$1"

 local content="$2"

 local file="$3"

 local owner="${4:-root:root}"

 echo -n "Configurando $file... "

 mkdir -p "$(dirname "$file")"

 if grep -qF "$marker" "$file"; then

 echo "ℹ Já configurado. Ignorando."

 return

 fi

 echo -e "\n$marker\n$content" >> "$file"

 chown "$owner" "$file"

 echo "✔ OK"

}

# --- Funções de Configuração ---

# (As funções configure_apt_sources, install_packages, etc. permanecem as mesmas)

configure_apt_sources() { log_step "Ajustando /etc/apt/sources.list"; if grep -qE "^\s*deb .* main contrib non-free" /etc/apt/sources.list; then echo "ℹ Repositórios já configurados."; return; fi; sed -i -E 's/^(deb .* main)( non-free-firmware)?$/\1 contrib non-free\2/' /etc/apt/sources.list; echo "✔ Repositórios 'contrib' e 'non-free' adicionados."; echo "Atualizando lista de pacotes..."; apt update; }

install_packages() { log_step "Instalando pacotes essenciais"; DEBIAN_FRONTEND=noninteractive apt install -y -q "${PACKAGES_TO_INSTALL[@]}"; if command -v batcat &> /dev/null && ! command -v bat &> /dev/null; then ln -sf /usr/bin/batcat /usr/local/bin/bat; echo "✔ Link simbólico criado para batcat."; fi; echo "✔ Instalação de pacotes concluída."; }

add_user_to_journal_group() { log_step "Adicionando '$CURRENT_USER' ao grupo 'systemd-journal'"; if groups "$CURRENT_USER" | grep -q '\bsystemd-journal\b'; then echo "ℹ Usuário já pertence ao grupo."; else usermod -aG adm,systemd-journal "$CURRENT_USER"; echo "✔ Usuário adicionado aos grupos 'adm' e 'systemd-journal'."; fi; }

configure_system_vim() { log_step "Configurando Vim globalmente"; sed -i -e 's/"syntax on/syntax on/' -e 's/"set background=dark/set background=dark/' /etc/vim/vimrc; echo "✔ Configurações globais do Vim aplicadas."; }

# --- Conteúdo de Configuração (Heredocs) ---

get_vimrc_content() { cat <<'EOF'

syntax on

set encoding=utf8 showmatch ts=4 sts=4 sw=4 autoindent smartindent smarttab expandtab

set number relativenumber cursorline history=5000 foldmethod=syntax foldlevel=99

nnoremap <space> za

EOF

}

## MUDANÇA APLICADA: A lógica de configuração do EZA e os aliases foram combinados

## para garantir que a flag --icons seja aplicada diretamente.

get_eza_and_aliases_config() {

cat << 'EOF'

# =============================================================================

# Configuração Robusta para EZA e Aliases

# =============================================================================

# --- Configuração do EZA ---

# Define opções base que serão usadas pela maioria dos aliases.

export EZA_BASE_OPTS="--group-directories-first --header --time-style=relative"

# Define dinamicamente a flag de ícones para evitar problemas de TTY.

if [ -n "$TMUX" ]; then

 ICON_STYLE="--icons=always"

else

 ICON_STYLE="--icons=always" # Simplificado para 'always'. O eza lida bem com pipes.

fi

# --- Aliases para Eza (ls moderno) ---

# A flag de ícone ($ICON_STYLE) e as opções base ($EZA_BASE_OPTS) são adicionadas diretamente.

alias ls="eza $ICON_STYLE $EZA_BASE_OPTS"

alias ll="eza -lh --git $ICON_STYLE $EZA_BASE_OPTS"

alias la="eza -a $ICON_STYLE $EZA_BASE_OPTS"

alias lla="eza -lha --git $ICON_STYLE $EZA_BASE_OPTS"

alias lt="eza -l --sort=modified --reverse $ICON_STYLE $EZA_BASE_OPTS"

alias lS="eza -lS --reverse $ICON_STYLE $EZA_BASE_OPTS"

alias ltree="eza -T $ICON_STYLE $EZA_BASE_OPTS"

alias ltree3="eza -T --level=3 $ICON_STYLE $EZA_BASE_OPTS"

alias lsd="eza -lD $ICON_STYLE $EZA_BASE_OPTS"

alias lsr="eza -R $ICON_STYLE $EZA_BASE_OPTS"

# Aliases com filtros não precisam de todas as opções base (ex: --header).

readonly EZA_IGNORE_PATTERN="node_modules|dist|build|target|__pycache__|*.log|*.lock"

alias lsi="eza $ICON_STYLE -I '$EZA_IGNORE_PATTERN'"

alias lli="eza -lh --git $ICON_STYLE -I '$EZA_IGNORE_PATTERN'"

alias lsg='eza -lh --git-status=modified $ICON_STYLE'

# --- Outros aliases ---

alias grep='grep --color=auto'

alias diff='diff --color=auto'

alias ip='ip -c'

alias cat='batcat'

alias bat='batcat'

alias fd='fdfind'

# --- Aliases com GRC (Generic Colouriser) ---

alias journalctl='grc journalctl'

alias tail='grc tail'

alias ping='grc ping'

alias ps='grc ps'

alias dig='grc dig'

alias nmap='grc nmap'

alias ss='grc ss'

EOF

}

# --- Função Principal ---

main() {

 echo "Iniciando configuração do sistema Debian..."

 configure_apt_sources

 install_packages

 configure_system_vim

 log_step "Configurando ambiente do usuário root"

 echo "$(get_vimrc_content)" > /root/.vimrc

 echo "✔ /root/.vimrc criado/atualizado."

 local root_ps1

 root_ps1=$(cat <<'EOF'

readonly RED='\[\e[1;31m\]'; readonly NC='\[\e[0m\]'

PS1="${RED}┌─[${RED}\u${RED}@${RED}\h${RED}]─[${NC}\w${RED}]\n${RED}└───> # ${NC}"

EOF

)

 # Combina aliases, config do fzf e o prompt

 local root_bash_content

 root_bash_content="$(get_eza_and_aliases_config)\nsource /usr/share/doc/fzf/examples/key-bindings.bash\n$root_ps1"

 append_if_not_exists "# CONFIGURAÇÕES DO SCRIPT DE SETUP" "$root_bash_content" "/root/.bashrc"

 if [ "$CONFIGURE_SUDO_USER" = true ]; then

 log_step "Configurando ambiente do usuário '$CURRENT_USER'"

 add_user_to_journal_group

 echo "$(get_vimrc_content)" > "$HOME_USER/.vimrc"

 chown "$CURRENT_USER:$CURRENT_USER" "$HOME_USER/.vimrc"

 echo "✔ $HOME_USER/.vimrc criado/atualizado."

 local user_bashrc_content

 user_bashrc_content="$(get_eza_and_aliases_config)\nsource /usr/share/doc/fzf/examples/key-bindings.bash"

 append_if_not_exists "# CONFIGURAÇÕES DO SCRIPT DE SETUP" "$user_bashrc_content" "$HOME_USER/.bashrc" "$CURRENT_USER:$CURRENT_USER"

 local user_profile_content

 user_profile_content=$(cat <<'EOF'

if [ -n "$BASH_VERSION" ] && [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc"; fi

if command -v fastfetch &>/dev/null; then fastfetch; fi

EOF

)

 append_if_not_exists "# CONFIGURAÇÕES DE PERFIL" "$user_profile_content" "$HOME_USER/.bash_profile" "$CURRENT_USER:$CURRENT_USER"

 fi

 echo -e "\n--------------------------------------------------------"

 echo "✔ Script finalizado com sucesso!"

 echo "Para que as alterações entrem em vigor:"

 echo "1. Remova manualmente os arquivos ~/.bashrc e ~/.bash_profile antigos (se existirem) e faça logout/login."

 echo "2. Para o usuário root, remova /root/.bashrc e faça login novamente."

 echo "--------------------------------------------------------"

}

main 

 Agora dê permissão de execução e rode o script 

 chmod +x debian_postinstall.sh

./debian_postinstall.sh 

 fonte:  https://github.com/ksmarini/debian 

  