From b7c121ee33441a50f9faf1e0400f10647a6f5e59 Mon Sep 17 00:00:00 2001 From: MarkoSagadin Date: Thu, 18 Apr 2024 10:58:43 +0200 Subject: [PATCH] feat: add VSCode config files and docs --- .pre-commit-config.yaml | 1 + CHANGELOG.md | 4 + README.md | 89 ++++++++++++++++----- dotfiles/.config/Code/User/settings.json | 65 +++++++++++++++ dotfiles/.config/Code/User/snippets/c.json | 72 +++++++++++++++++ dotfiles/place_dotfiles.sh | 33 ++++++++ images/vscode-banner.webp | Bin 0 -> 23450 bytes installation_scripts/install_extensions.sh | 71 ++++++++++++++++ installation_scripts/install_vscode.sh | 10 +++ 9 files changed, 327 insertions(+), 18 deletions(-) create mode 100644 dotfiles/.config/Code/User/settings.json create mode 100644 dotfiles/.config/Code/User/snippets/c.json create mode 100755 dotfiles/place_dotfiles.sh create mode 100644 images/vscode-banner.webp create mode 100755 installation_scripts/install_extensions.sh create mode 100755 installation_scripts/install_vscode.sh diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b36d34f..86ea09d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -59,6 +59,7 @@ repos: rev: v0.10.0.1 hooks: - id: shellcheck + args: [--exclude=SC2086] stages: [pre-commit] - repo: https://github.com/lovesegfault/beautysh rev: v6.2.1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 6258a8f..d256c93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,3 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ## [Unreleased] + +### Added + +- Initial project structure and VSCode configs. diff --git a/README.md b/README.md index 009d83c..a0116a5 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,71 @@ -# Irnas's Projects template - -IRNAS template for a GitHub repository. It comes with a -[basic group](https://github.com/IRNAS/irnas-workflows-software/tree/main/workflow-templates/basic) -of CI workflows for release automation. - -## Checklist - -- [ ] Provide a concise and accurate description of your project in the GitHub - "description" field. -- [ ] Provide a concise and accurate description of your project in this - `README.md` file, replace the title. -- [ ] Ensure that your project follows - [repository naming scheme](https://github.com/IRNAS/irnas-guidelines-docs/blob/main/docs/github_projects_guidelines.md#repository-naming-scheme-). -- [ ] Turn on `gitlint` tool by running `gitlint install-hook`. If you do not - have it yet, follow instructions - [here](https://github.com/IRNAS/irnas-guidelines-docs/tree/main/tools/gitlint). -- [ ] As the final step delete this checklist and commit changes. +# VSCode setup by IRNAS + +![vscode-banner](images/vscode-banner.webp) + +## Introduction + +This repository contains installation scripts and configuration files for setting up the VSCode +editor from scratch. The configuration files inside the `dotfiles/.config/Code` are pretty +opinionated. They are suitable for embedded Zephyr/NCS development, writing Python scripts and +JavaScript/React Native applications. + +The configuration is especially coupled to our `.pre-commit-config.yaml` file in the +[irnas-zephyr-template] repo, as it sets up formatters, linters and other tools that are used by the +`pre-commit` tool. + +[irnas-zephyr-template]: https://github.com/IRNAS/irnas-zephyr-template/tree/main + +## Setup + +1. To install VsCode run: + + ```shell + ./installation_scripts/install_vscode.sh + ``` + +2. To install all extensions run: + + ```shell + ./installation_scripts/install_extensions.sh + ``` + +3. To symlink VSCode settings to its correct location: + + ```shell + cd dotfiles + ./place_dotfiles.sh + ``` + +4. Open VSCode. All extensions are now installed, all that is left to do is to configure some + specific paths, follow instructions in the pop-up notifications. + +## Backing up existing settings + +If you care about your current VSCode configuration you may want to backup below folders: + +On Windows: + +- `%APPDATA%\Code` +- `%USERPROFILE%\.vscode` + +On Linux and macOS: + +- `$HOME/.config/Code/` +- `$HOME/.vscode` + +### Maintaining your configuration and expected workflow + +`place_dotfiles.sh` creates a symlink for the `.config/Code` alongside it to its correct location in +the `~/` home directory. + +This means that whatever changes are made in the `~/.config/Code`, they are reflected in this repo +and thus visible in the `git` version control system. + +Developers can thus: + +- fork this repo to their personal GitHub account, +- start with a good working VSCode configuration, +- expand it further by their preferences, commit changes and +- sync with the upstream repo, when they want to fetch new commits. + +Developers can also manually copy the things that they want and manually update when they want to. diff --git a/dotfiles/.config/Code/User/settings.json b/dotfiles/.config/Code/User/settings.json new file mode 100644 index 0000000..1a77034 --- /dev/null +++ b/dotfiles/.config/Code/User/settings.json @@ -0,0 +1,65 @@ +{ + // General settings + "editor.formatOnSave": true, + "files.associations": { + "CMakeLists.txt": "cmake", + "*.h": "c" + }, + "files.trimTrailingWhitespace": true, + "files.trimFinalNewlines": true, + "files.insertFinalNewline": true, + "[c][cpp]": { + "editor.detectIndentation": false, + "editor.tabSize": 8, + "editor.insertSpaces": false + }, + // Don't change focus, when debugging. + "debug.focusWindowOnBreak": false, + "debug.focusEditorOnBreak": false, + "[c]": { + "editor.defaultFormatter": "xaver.clang-format" + }, + "editor.cursorBlinking": "smooth", + "[markdown]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "editor.autoClosingComments": "always", + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "git.openRepositoryInParentFolders": "never", + "security.workspace.trust.enabled": false, + // Extensions + "clang-format.executable": "/usr/bin/clang-format-17", + "errorLens.enabledDiagnosticLevels": [ + "error", + "warning", + "info", + "hint" + ], + "auto-comment-blocks.singleLineBlockOnEnter": true, + "errorLens.messageEnabled": false, + "errorLens.gutterIconsEnabled": true, + "doxdocgen.generic.paramTemplate": "@param[in] {param} ", + "doxdocgen.generic.returnTemplate": "@return ", + "clangd.arguments": [ + "--enable-config", + "--query-driver=/usr/bin/**/clang-*,/bin/clang,/bin/clang++,/usr/bin/gcc,/usr/bin/g++,${env:HOME}/gnuarmemb/bin/arm-none-eabi-gcc", + "--all-scopes-completion", + "--background-index", + "-j=8", + "--clang-tidy", + "--completion-style=detailed", + "--function-arg-placeholders", + "--header-insertion-decorators", + "--header-insertion=never", + "--pch-storage=memory" + ], + "cortex-debug.enableTelemetry": false, + "cortex-debug.liveWatchRefreshRate": 250, + "C_Cpp.intelliSenseEngine": "disabled", + "workbench.colorTheme": "Default Dark Modern", +} diff --git a/dotfiles/.config/Code/User/snippets/c.json b/dotfiles/.config/Code/User/snippets/c.json new file mode 100644 index 0000000..b1c3e8e --- /dev/null +++ b/dotfiles/.config/Code/User/snippets/c.json @@ -0,0 +1,72 @@ +{ + "hfile": { + "prefix": [ + "hfile" + ], + "body": [ + "/** @file $TM_FILENAME_BASE.h", + " *", + " * @brief ${2:A description of the module's purpose.}", + " *", + " * @par", + " * COPYRIGHT NOTICE: (c) $CURRENT_YEAR Irnas. All rights reserved.", + " */", + "", + "#ifndef ${TM_FILENAME_BASE/(.*)/${1:/upcase}/}_H", + "#define ${TM_FILENAME_BASE/(.*)/${1:/upcase}/}_H", + "", + "#ifdef __cplusplus", + "extern \"C\" {", + "#endif", + "", + "${0}", + "", + "#ifdef __cplusplus", + "}", + "#endif", + "", + "#endif /* ${TM_FILENAME_BASE/(.*)/${1:/upcase}/}_H */", + "", + ], + "description": "IRNAS .h file template" + }, + "cfile": { + "prefix": [ + "cfile" + ], + "body": [ + "/** @file $TM_FILENAME_BASE.c", + " * ", + " * @par ", + " * COPYRIGHT NOTICE: (c) $CURRENT_YEAR Irnas. All rights reserved.", + " */", + "", + "", + "#include \"$TM_FILENAME_BASE.h\"", + "", + "${0}", + "", + ], + "description": "IRNAS .c file template" + }, + "slc": { + "prefix": [ + "slc" + ], + "body": [ + "/* ${0} */" + ], + "description": "C89-style single line comment" + }, + "mlc": { + "prefix": [ + "mlc" + ], + "body": [ + "/*", + " * ${0}", + " */" + ], + "description": "C89-style multi line comment" + } +} diff --git a/dotfiles/place_dotfiles.sh b/dotfiles/place_dotfiles.sh new file mode 100755 index 0000000..6ad90ae --- /dev/null +++ b/dotfiles/place_dotfiles.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +dotfilesDir=$(pwd) + +function linkDotfile { + dest="${1}/${2}" + dateStr=$(date +%Y-%m-%d-%H%M) + + if [ -h ~/${2} ]; then + # Existing symlink + echo "Removing existing symlink: ${dest}" + sudo rm ${dest} + + elif [ -f "${dest}" ]; then + # Existing file + echo "Backing up existing file: ${dest}" + sudo mv ${dest}{,.${dateStr}} + + elif [ -d "${dest}" ]; then + # Existing dir + echo "Backing up existing dir: ${dest}" + sudo mv ${dest}{,.${dateStr}} + fi + + echo "Creating new symlink: ${dest}" + sudo ln -s ${dotfilesDir}/${2} ${dest} +} + +# Create config folder if it does not exists, below symlinks fail otherwise +mkdir -p ~/.config + +# Create symlink for a file/folder on a right in the folder on the left +linkDotfile /home/"$USER" .config/Code diff --git a/images/vscode-banner.webp b/images/vscode-banner.webp new file mode 100644 index 0000000000000000000000000000000000000000..69fe1ceb848f11d7b1bc55d79be7cb9356abed64 GIT binary patch literal 23450 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∈5pBZB+3icQQ=1xW)a^#_QSib-H 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 literal 0 HcmV?d00001 diff --git a/installation_scripts/install_extensions.sh b/installation_scripts/install_extensions.sh new file mode 100755 index 0000000..25ece4b --- /dev/null +++ b/installation_scripts/install_extensions.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +function install { + code --install-extension "$1" +} + +# General development core +install eamodio.gitlens +install usernamehw.errorlens + +# C/C++ extensions +install xaver.clang-format +install cheshirekow.cmake-format +install twxs.cmake +install llvm-vs-code-extensions.vscode-clangd +install cschlosser.doxdocgen +install IRNAS.auto-comment-blocks-single-star +install harry-ross-software.c-snippets +install jeff-hykin.better-c-syntax +install jeff-hykin.better-cpp-syntax + +# JS/TS extensions +install esbenp.prettier-vscode # Also used for formatting markdown files. +install dbaeumer.vscode-eslint +install xabikos.JavaScriptSnippets + +# Python extensions +install ms-python.python +install magicstack.MagicPython +install charliermarsh.ruff +install njpwerner.autodocstring +install frhtylcn.pythonsnippets + +# Cmake +install twxs.cmake +install cheshirekow.cmake-format + +# Docker +install ms-azuretools.vscode-docker +install exiasr.hadolint + +# Jupyter +install ms-toolsai.jupyter + +# Embedded development +install marus25.cortex-debug +install ms-vscode.vscode-embedded-tools +install keroc.hex-fmt + +# Extras +install ms-vscode-remote.vscode-remote-extensionpack +install tekumara.typos-vscode +install DavidAnson.vscode-markdownlint +install yzhang.markdown-all-in-one +install github.copilot +install github.copilot-chat +install Graphite.gti-vscode +install wayou.vscode-todo-highlight +install mattlott.copy-github-url +install redhat.vscode-yaml +install tamasfe.even-better-toml +install coolchyni.beyond-debug +install vsciot-vscode.vscode-arduino + +# Themes +install github.github-vscode-theme +install liviuschera.noctis +install anoff.theme-monokai-light + +# Extra tools needed by some extensions, but not directly provided by them. +pip install cmake-format diff --git a/installation_scripts/install_vscode.sh b/installation_scripts/install_vscode.sh new file mode 100755 index 0000000..d0f067d --- /dev/null +++ b/installation_scripts/install_vscode.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Add microsoft's repository to apt +sudo apt update +sudo apt install software-properties-common apt-transport-https wget +wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - +sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" + +# install +sudo apt install code