Code Monkey home page Code Monkey logo

devcontainers-dotnet's Introduction

devcontainers for .NET

This is the template repository that contains the devcontainer settings for .NET app development.

Getting Started

If you want to use this devcontainer settings, you can create a new repository with this template repository, by clicking the "Use this template" button.

Use this template

Options – devcontainer.json

Base Image

By default, this devcontainer settings uses the base image of Ubuntu 22.04 LTS (jammy).

"build": {
  "dockerfile": "./Dockerfile",
  "context": ".",
  "args": {
    "VARIANT": "6.0-jammy"
  }
}

However, there is currently a bug on the C# extension v1.25.0 for Razor support on Ubuntu 22.04 LTS (jammy). Therefore, if you need Razor support, build your devcontainer with Ubuntu 20.04 LTS (focal).

"build": {
  "dockerfile": "./Dockerfile",
  "context": ".",
  "args": {
    // Use this only if you need Razor support, until OmniSharp supports .NET 6 properly
    "VARIANT": "6.0-focal"
  }
}

Features

  1. If you want to install Azure CLI, uncomment the section under the features attribute.

    "features": {
      ...
      // Uncomment the below to install Azure CLI
      "ghcr.io/devcontainers/features/azure-cli:1": {
        "version": "latest"
      }
      ...
    },
  2. If you want to install GitHub CLI, uncomment the section under the features attribute.

    "features": {
      ...
      // Uncomment the below to install GitHub CLI
      "ghcr.io/devcontainers/features/github-cli:1": {
        "version": "latest"
      }
      ...
    },
  3. If you want to install node.js, uncomment the section under the features attribute.

    "features": {
      ...
      // Uncomment the below to install node.js
      "ghcr.io/devcontainers/features/node:1": {
        "version": "lts",
        "nodeGypDependencies": true,
        "nvmInstallPath": "/usr/local/share/nvm"
      }
      ...
    },
  4. If you want to add more features, find this repository: devcontainer features.

Extensions

  1. There are optional extensions that you can selectively install, under the customizations.vscode.extensions attribute. You can simply uncomment each line to enable or comment out one to disable.

    "customizations": {
      "vscode": {
        "extensions": [
          // Recommended extensions - GitHub
          "cschleiden.vscode-github-actions",
          "GitHub.vscode-pull-request-github",
    
          // Recommended extensions - Azure
          "ms-azuretools.vscode-bicep",
    
          // Recommended extensions - Collaboration
          "eamodio.gitlens",
          "EditorConfig.EditorConfig",
          "MS-vsliveshare.vsliveshare-pack",
          "streetsidesoftware.code-spell-checker",
    
          // Recommended extensions - .NET
          "Fudge.auto-using",
          "jongrant.csharpsortusings",
          "kreativ-software.csharpextensions",
    
          // Recommended extensions - Power Platform
          "microsoft-IsvExpTools.powerplatform-vscode",
    
          // Recommended extensions - Markdown
          "bierner.github-markdown-preview",
          "DavidAnson.vscode-markdownlint",
          "docsmsft.docs-linting",
          "johnpapa.read-time",
          "yzhang.markdown-all-in-one",
    
          ...
        ],
        ...
      }
    }
  2. Alternatively, you can add as many extra extensions as you like, from Visual Studio Code Marketplace.

Settings

  1. There are customisation options for your Codespaces settings, under the customizations.vscode.settings attribute. You can simply uncomment each item to enable or comment out one to disable.

    "customizations": {
      "vscode": {
        "settings": {
          // Uncomment if you want to use zsh as the default shell
          "terminal.integrated.defaultProfile.linux": "zsh",
          "terminal.integrated.profiles.linux": {
            "zsh": {
              "path": "/usr/bin/zsh"
            }
          },
    
          // Uncomment if you want to use CaskaydiaCove Nerd Font as the default terminal font
          "terminal.integrated.fontFamily": "CaskaydiaCove Nerd Font",
    
          // Uncomment if you want to disable the minimap view
          "editor.minimap.enabled": false,
    
          // Recommended settings for the explorer pane
          "explorer.sortOrder": "type",
          "explorer.fileNesting.enabled": true,
          "explorer.fileNesting.patterns": {
            "*.bicep": "${capture}.json",
            "*.razor": "${capture}.razor.css",
            "*.js": "${capture}.js.map"
          }
        }
      }
    }
  2. If you want to do more granular configurations, refer to this page, User and Workspace Settings.

Lifecycle

  1. If you want to use bash as your main shell and want to run the shell script after the container is created:

    // Uncomment if you want to use bash in 'postCreateCommand' after the container is created
    "postCreateCommand": "/bin/bash ./.devcontainer/post-create.sh > ~/post-create.log",
  2. If you want to use zsh as your main shell and want to run the shell script after the container is created:

    // Uncomment if you want to use zsh in 'postCreateCommand' after the container is created
    "postCreateCommand": "/usr/bin/zsh ./.devcontainer/post-create.sh > ~/post-create.log",

Options – post-create.sh

  1. If you want to install CaskaydiaCove Nerd Font, uncomment the section below.

    ## CaskaydiaCove Nerd Font
    # Uncomment the below to install the CaskaydiaCove Nerd Font
    mkdir $HOME/.local
    mkdir $HOME/.local/share
    mkdir $HOME/.local/share/fonts
    wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/CascadiaCode.zip
    unzip CascadiaCode.zip -d $HOME/.local/share/fonts
    rm CascadiaCode.zip

    Use this option if you want to use oh-my-posh for PowerShell.

  2. If you want to install Azure CLI extensions, uncomment the section below.

    ## AZURE CLI EXTENSIONS ##
    # Uncomment the below to install Azure CLI extensions
    extensions=$(az extension list-available --query "[].name" | jq -c -r '.[]')
    for extension in $extensions;
    do
        az extension add --name $extension
    done

    Use this option with care because it will install ALL extensions at once.

  3. If you want to install Azure Bicep CLI, uncomment the section below.

    ## AZURE BICEP CLI ##
    # Uncomment the below to install Azure Bicep CLI
    az bicep install
  4. If you want to install Azure Functions Core Tools, uncomment the section below.

    ## AZURE FUNCTIONS CORE TOOLS ##
    # Uncomment the below to install Azure Functions Core Tools
    npm i -g azure-functions-core-tools@4 --unsafe-perm true
  5. If you want to install Azure Static Web Apps CLI, uncomment the section below.

    ## AZURE STATIC WEB APPS CLI ##
    # Uncomment the below to install Azure Static Web Apps CLI
    npm install -g @azure/static-web-apps-cli
  6. If you want to install Azure Dev CLI, uncomment the section below.

    ## AZURE DEV CLI ##
    # Uncomment the below to install Azure Dev CLI
    curl -fsSL https://aka.ms/install-azd.sh | bash

    DEPENDENCIES: Make sure that you must get both Azure CLI and GitHub CLI installed beforehand.

  7. If you want to install plugins and themes for oh-my-zsh without using your dotfiles, uncomment the section below.

    ## OH-MY-ZSH PLUGINS & THEMES (POWERLEVEL10K) ##
    # Uncomment the below to install oh-my-zsh plugins and themes (powerlevel10k) without dotfiles integration
    git clone https://github.com/zsh-users/zsh-completions.git $HOME/.oh-my-zsh/custom/plugins/zsh-completions
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
    git clone https://github.com/zsh-users/zsh-autosuggestions.git $HOME/.oh-my-zsh/custom/plugins/zsh-autosuggestions
    
    git clone https://github.com/romkatv/powerlevel10k.git $HOME/.oh-my-zsh/custom/themes/powerlevel10k --depth=1
    ln -s $HOME/.oh-my-zsh/custom/themes/powerlevel10k/powerlevel10k.zsh-theme $HOME/.oh-my-zsh/custom/themes/powerlevel10k.zsh-theme

    DEPENDENCIES: Make sure that you have already installed oh-my-zsh through the settings on devcontainer.json.

  8. If you want to install oh-my-zsh configurations without using your dotfiles, uncomment the section below.

    ## OH-MY-ZSH - POWERLEVEL10K SETTINGS ##
    # Uncomment the below to update the oh-my-zsh settings without dotfiles integration
    curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-zsh/.p10k-with-clock.zsh > $HOME/.p10k-with-clock.zsh
    curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-zsh/.p10k-without-clock.zsh > $HOME/.p10k-without-clock.zsh
    curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-zsh/switch-p10k-clock.sh > $HOME/switch-p10k-clock.sh
    chmod +x ~/switch-p10k-clock.sh
    
    cp $HOME/.p10k-with-clock.zsh $HOME/.p10k.zsh
    cp $HOME/.zshrc $HOME/.zshrc.bak
    
    echo "$(cat $HOME/.zshrc)" | awk '{gsub(/ZSH_THEME=\"codespaces\"/, "ZSH_THEME=\"powerlevel10k\"")}1' > $HOME/.zshrc.replaced && mv $HOME/.zshrc.replaced $HOME/.zshrc
    echo "$(cat $HOME/.zshrc)" | awk '{gsub(/plugins=\(git\)/, "plugins=(git zsh-completions zsh-syntax-highlighting zsh-autosuggestions)")}1' > $HOME/.zshrc.replaced && mv $HOME/.zshrc.replaced $HOME/.zshrc
    echo "
    # To customize prompt, run 'p10k configure' or edit ~/.p10k.zsh.
    [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
    " >> $HOME/.zshrc

    DEPENDENCIES: Make sure that you uncommend the oh-my-zsh plugins and themes section before using this section.

    If you want to switch the powerlevel10k configuration with clock or without clock, run the following shell script:

    # Disable clock
    ~/switch-p10k-clock.sh
    
    # Enable clock
    ~/switch-p10k-clock.sh -c
  9. If you want to install oh-my-posh for PowerShell, uncomment the section below

    ## OH-MY-POSH ##
    # Uncomment the below to install oh-my-posh
    sudo wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/posh-linux-amd64 -O /usr/local/bin/oh-my-posh
    sudo chmod +x /usr/local/bin/oh-my-posh
  10. If you want to install oh-my-posh configurations without using your dotfiles, uncomment the section below.

    ## OH-MY-POSH - POWERLEVEL10K SETTINGS ##
    # Uncomment the below to update the oh-my-posh settings without dotfiles integration
    curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-posh/p10k-with-clock.omp.json > $HOME/p10k-with-clock.omp.json
    curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-posh/p10k-without-clock.omp.json > $HOME/p10k-without-clock.omp.json
    curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-posh/switch-p10k-clock.ps1 > $HOME/switch-p10k-clock.ps1
    
    mkdir $HOME/.config/powershell
    curl https://raw.githubusercontent.com/justinyoo/devcontainers-dotnet/main/oh-my-posh/Microsoft.PowerShell_profile.ps1 > $HOME/.config/powershell/Microsoft.PowerShell_profile.ps1
    
    cp $HOME/p10k-with-clock.omp.json $HOME/p10k.omp.json

    DEPENDENCIES: Make sure that you uncommend the oh-my-posh installation section before using this section.

    If you want to switch the powerlevel10k configuration with clock or without clock, run the following shell script:

    # Disable clock
    ~/switch-p10k-clock.ps1
    
    # Enable clock
    ~/switch-p10k-clock.ps1 -WithClock

devcontainers-dotnet's People

Contributors

justinyoo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.