Skip to content

Latest commit

 

History

History
537 lines (373 loc) · 18.9 KB

README.pt-br.md

File metadata and controls

537 lines (373 loc) · 18.9 KB

Dockerized Dev Environment

Este projeto visa construir um ambiente de desenvolvimento em um contêiner Docker. As ferramentas utilizadas no ambiente também são utilizadas no dia a dia do autor do projeto.

Index

Dockerized.Dev.Environment.demonstration.mp4
Neovim Lazygit Exa
Neovim screenshot Lazygit screenshot Exa screenshot
Bat Dust Atuin
Bat screenshot Dust screenshot Atuin screenshot
Zellij Autocomplete Code actions
Zellij screenshot Autocomplete in Neovim screenshot Code actions in Neovim screenshot
LSP
LSP in Neovim screenshot

O ambiente utiliza o fish como o shell padrão.

  • NodeJS
  • NPM
Git
asdf
  • Elixir
  • Erlang
CLI
Neovim
  • Docker
  • Docker Compose
  • Alguma Nerd Font
  1. Clone o repositório em sua máquina.

  2. Adicione a função abaixo no arquivo de configuração de seu shell.

    Fish
    function devE
    # Repository path
    
    set repo_path "$HOME/< The path where the repository was cloned, without '/' at the end. Example: Documents/GitHub >"
    
    # Generating env file
    
    rm $HOME/.dev-environment.env >> /dev/null
    
    touch $HOME/.dev-environment.env
    
    ## Adding the current working directory
    
    echo "PWD = $(pwd)" >> $HOME/.dev-environment.env
    
    ## Adding host's home path
    
    echo "HOST_HOME_DIR = $HOME" >> $HOME/.dev-environment.env
    
    # Generating .gitconfig file
    
    set git_username (git config user.name)
    set git_email (git config user.email)
    
    set content "
    	[user]
    		name = $git_username
    		email = $git_email
    
    	[safe]
    		directory = *
    
    	[core]
    		editor = nvim
    "
    
    rm $repo_path/dockerized-dev-environment/.gitconfig >> /dev/null
    
    touch $repo_path/dockerized-dev-environment/.gitconfig
    
    echo $content >> $repo_path/dockerized-dev-environment/.gitconfig
    
    # Commands
    
    switch $argv[1]
    	case "run"
    		set_color yellow
    		printf "Starting Docker daemon...\n"
    		set_color normal
    
    		sudo systemctl start docker
    
    		set_color yellow
    		printf "Running the container...\n"
    		set_color normal
    
    		sudo docker-compose -f $repo_path/dockerized-dev-environment/docker-compose.yml --env-file $HOME/.dev-environment.env up -d --force-recreate
    
    		sudo docker exec -it -w /home/ dockerized-dev-environment fish
    	case "build"
    		set_color yellow
    		printf "Starting Docker daemon...\n"
    		set_color normal
    
    		sudo systemctl start docker
    
    		set_color yellow
    		printf "Building the container...\n"
    		set_color normal
    
    		sudo docker-compose -f $repo_path/dockerized-dev-environment/docker-compose.yml --env-file $HOME/.dev-environment.env up -d --build --force-recreate
    
    		set_color yellow
    		printf "Running the container...\n"
    		set_color normal
    
    		sudo docker exec -it -w /home/ dockerized-dev-environment fish
    	case "stop"
    		set_color yellow
    		printf "Stopping the container...\n"
    		set_color normal
    
    		sudo docker-compose -f $repo_path/dockerized-dev-environment/docker-compose.yml stop
    
    		set_color yellow
    		printf "Stopping Docker daemon...\n"
    		set_color normal
    
    		sudo systemctl stop docker
    	case "remove"
    		set_color yellow
    		printf "Removing the container and the image...\n"
    		set_color normal
    
    		sudo docker-compose -f $repo_path/dockerized-dev-environment/docker-compose.yml down --rmi all
    
    		set_color yellow
    		printf "Stopping Docker daemon...\n"
    		set_color normal
    
    		sudo systemctl stop docker
    	case "*"
    		printf "Usage:\tdevE COMMAND\n\n"
    
    		printf "A development environment inside a Docker container\n\n"
    
    		printf "Commands:\n"
    
    		printf "  run\t\tRun the environment and bind the current working directory with container's home directory\n"
    
    		printf "  build\t\tForce the build of the container\n"
    
    		printf "  stop\t\tStop the container and the Docker's daemon\n"
    
    		printf "  remove\tRemove the container, the image and stops the Docker's daemon\n"
        end
    end
    Bash
    devE(){
    # Colors
    
    bright_yellow="\u001b[33;1m"
    normal="\u001b[0m"
    
    # Repository path
    
    repo_path="$HOME/< The path where the repository was cloned, without '/' at the end. Example: Documents/GitHub >"
    
    # Generating env file
    
    rm $HOME/.dev-environment.env >> /dev/null
    
    touch $HOME/.dev-environment.env
    
    ## Adding the current working directory
    
    echo "PWD = $(pwd)" >> $HOME/.dev-environment.env
    
    ## Adding host's home path
    
    echo "HOST_HOME_DIR = $HOME" >> $HOME/.dev-environment.env
    
    # Generating .gitconfig file
    
    git_username=$(git config user.name)
    git_email=$(git config user.name)
    
    content="
    	[user]
    		name = ${git_username}
    		email = ${git_email}
    
    	[safe]
    		directory = *
    
    	[core]
    		editor = nvim
    "
    
    rm $repo_path/dockerized-dev-environment/.gitconfig >> /dev/null
    
    touch $repo_path/dockerized-dev-environment/.gitconfig
    
    echo $content >> $repo_path/dockerized-dev-environment/.gitconfig
    
    # Commands
    
    case "$1" in
      "run")
        printf "${bright_yellow}Starting Docker daemon...\n${normal}"
    
        sudo systemctl start docker
    
        printf "${bright_yellow}Running the container...\n${normal}"
    
        sudo docker-compose -f $repo_path/dockerized-dev-environment/docker-compose.yml --env-file $HOME/.dev-environment.env up -d --force-recreate
    
        sudo docker exec -it -w /home/ dockerized-dev-environment fish
      ;;
    
      "build")
        printf "${bright_yellow}Starting Docker daemon...\n${normal}"
    
        sudo systemctl start docker
    
        printf "${bright_yellow}Building the container...\n${normal}"
    
        sudo docker-compose -f $repo_path/dockerized-dev-environment/docker-compose.yml --env-file $HOME/.dev-environment.env up -d --build --force-recreate
    
        printf "${bright_yellow}Running the container...\n${normal}"
    
        sudo docker exec -it -w /home/ dockerized-dev-environment fish
      ;;
    
      "stop")
        printf "${bright_yellow}Stopping the container...\n${normal}"
    
        sudo docker-compose -f $repo_path/dockerized-dev-environment/docker-compose.yml stop
    
        printf "${bright_yellow}Stopping Docker daemon...\n${normal}"
    
        sudo systemctl stop docker
      ;;
    
      "remove")
        printf "${bright_yellow}Removing the container and the image...\n${normal}"
    
        sudo docker-compose -f $repo_path/dockerized-dev-environment/docker-compose.yml down --rmi all
    
        printf "${bright_yellow}Stopping Docker daemon...\n${normal}"
    
        sudo systemctl stop docker
      ;;
    
      *)
        printf "Usage:\tdevE COMMAND\n\n"
    
        printf "A development environment inside a Docker container\n\n"
    
        printf "Commands:\n"
    
        printf "  run\t\tRun the environment and bind the current working directory with container's home directory\n"
    
        printf "  build\t\tForce the build of the container\n"
    
        printf "  stop\t\tStop the container and the Docker's daemon\n"
    
        printf "  remove\tRemove the container, the image and stops the Docker's daemon\n"
      ;;
    esac
    }

    OBS: Se não houver username e email configurados globalmente no git, você deve preencher esses campos no arquivo .gitconfig.

    OBS: Feche o terminal para aplicar as modificações feitas no arquivo de configuração do shell.

  3. Substitua < Caminho onde o repositório foi clonado, sem '/' no final. Exemplo: Documents/GitHub > pelo caminho do repositório.

  4. Execute devE build dentro do diretório desejado para construir o ambiente. Este comando irá vincular o diretório do host com o diretório /home/ dentro do contêiner.

    OBS: devE build precisa ser executado apenas uma vez, ou quando for necessário forçar a construção do contêiner. Caso contrário, utilize devE run.

  5. Dentro do ambiente, execute setup para configurá-lo.

    OBS: setup precisa ser executado apenas uma vez, ou quando for necessário reconfigurar o ambiente.

A sintaxe básica é:

devE COMMAND

E os comandos disponíveis são:

run - Executa o ambiente e vincula o diretório de trabalho atual com o diretório home do contêiner.

build - Força o processo de build do contêiner.

stop - Para o contêiner e o daemon do Docker.

remove - Remove o contêiner, a imagem e para o daemon do Docker.

Para sair do ambiente, execute exit na linha de comando.

Nesta seção, você poderá encontrar todos os atalhos customizados utilizados no Neovim. A tecla leader é a barra de espaço.


Buscar arquivos utilizando o telescope - leader + f + f

Buscar arquivos abertos recentemente usando o telescope - leader + f + r

Buscar uma palavra dentro de um arquivo usando o telescope - leader + f + w

Fixar a aba atual - leader + t + f

Fechar a aba atual - leader + t + x

Mover para a aba anterior - leader + t + p

Mover para a próxima aba - leader + t + n

Mostrar/Esconder a neo-tree - leader + n + t

Focar na neo-tree - leader + n + f

Resetar hunk sob o cursor - leader + h + r

Visualizar hunk sob o cursor - leader + h + p

Mostrar/Esconder o git blame - leader + h + b

Executar o Lazygit - leader + l + r

Mostrar/Esconder o trouble - leader + d + t

Mostrar diagnósticos para o buffer atual - leader + b + d

Formatar o buffer atual - leader + b + f

Mostrar ações de código para a linha abaixo do cursor - leader + b + a

LSP e autocomplete

Os servidores LSP presentes e configurados são:

  • elixirls e nextls para a linguagem de programação Elixir.
  • tsserver para as linguagens de programação: JavaSccript e Typescript.
  • lua_ls para a linguagem de programação Lua.
  • css_variables e cssls para CSS.
  • dockerls para os arquivos Dockerfile.

Para adicionar um novo servidor LSP, abra o Neovim e utilize o plugin Mason.

Para configurar o servidor LSP, verifique os servidores disponíveis e suas configurações na página Configuração dos Servidores e cole a configuração dentro do arquivo .config/nvim/lua/plugins/LSP/nvim-lspconfig.lua.

Autocomplete está disponível apenas para as linguagens ou tipos de arquivo com um servidor LSP instalado e configurado.

Para adicionar autocomplete para uma linguagem de programação ou tipo de arquivo sem configurar um servidor LSP, veja a página de Servidores do plugin None-ls e cole a configuração no arquivo .config/nvim/lua/plugins/LSP/none-ls.lua.

Diagnósticos

As ferramentas de diagnóstico presentes e configuradas são:

  • commitlint para mensagens de commit.
  • hadolint para arquivos Dockerfile.
  • markdownlint para Markdown.

Para adicionar uma nova ferramenta de diagnóstico, veja as Ferramentas de Diagnóstico do plugin None-ls e cole a configuração no arquivo .config/nvim/lua/plugins/LSP/none-ls.lua.

Formatação

As ferramentas de formatação presentes e configuradas são:

  • mix e surface para arquivos Elixir.
  • prettier para arquivos Javascript, Typescript, Vue, CSS, SCSS, LESS, HTML, JSON, JSONC, YAML, Markdown, Markdown.mdx, Graphql, Handlebars, Svelte, e Astro.
  • stylua para arquivos Lua.

Para adicionar uma nova ferramenta de formatação, veja as Ferramentas de Formatação do plugin None-ls e cole a configuração no arquivo .config/nvim/lua/plugins/LSP/none-ls.lua.

Atuin

A funcionalidade do tab não funciona.

Quando pressionar enter, o comando será copiado para a linha de comando, então é necessário pressionar enter novamente para executá-lo.