{"id":14155271,"url":"https://github.com/ifooth/devcontainer","last_synced_at":"2025-04-22T03:33:00.750Z","repository":{"id":146902688,"uuid":"447195796","full_name":"ifooth/devcontainer","owner":"ifooth","description":"Full stack remote development environment","archived":false,"fork":false,"pushed_at":"2024-11-08T16:16:57.000Z","size":353,"stargazers_count":16,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-08T17:25:27.330Z","etag":null,"topics":["docker","golang","python","remote-development","vim","vscode"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ifooth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-12T11:43:37.000Z","updated_at":"2024-11-08T16:17:01.000Z","dependencies_parsed_at":"2024-01-14T04:41:53.298Z","dependency_job_id":"a84020ee-a677-48eb-9800-a1de745ba6d5","html_url":"https://github.com/ifooth/devcontainer","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifooth%2Fdevcontainer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifooth%2Fdevcontainer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifooth%2Fdevcontainer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifooth%2Fdevcontainer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ifooth","download_url":"https://codeload.github.com/ifooth/devcontainer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223888487,"owners_count":17220079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","golang","python","remote-development","vim","vscode"],"created_at":"2024-08-17T08:02:37.377Z","updated_at":"2025-04-22T03:33:00.728Z","avatar_url":"https://github.com/ifooth.png","language":"Shell","readme":"# DevContainer\n\nFull stack remote development environment\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/ifooth/devcontainer?cache=v1)](https://goreportcard.com/report/github.com/ifooth/devcontainer)\n[![lint](https://github.com/ifooth/devcontainer/actions/workflows/lint.yml/badge.svg?branch=main)](http://github.com/ifooth/devcontainer/actions/workflows/lint.yml)\n[![build](https://github.com/ifooth/devcontainer/actions/workflows/build.yml/badge.svg?branch=main)](http://github.com/ifooth/devcontainer/actions/workflows/build.yml)\n[![Docker](https://github.com/ifooth/devcontainer/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/ifooth/devcontainer/actions/workflows/docker-publish.yml)\n[![Docker Pulls](https://img.shields.io/docker/pulls/ifooth/devcontainer.svg)](https://hub.docker.com/r/ifooth/devcontainer/)\n\nBase on [devcontainers/base](https://github.com/devcontainers/images/tree/main) image\n\n## Shell\n\n- [zsh](https://www.zsh.org/)\n- [oh-my-zsh](https://github.com/ohmyzsh/ohmyzsh)\n- [git](http://git-scm.com/) - A distributed version control system\n- [fzf](https://github.com/junegunn/fzf) - A command-line fuzzy finder\n- [zoxide](https://github.com/ajeetdsouza/zoxide) - A smarter cd command. Supports all major shells.\n- [zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions)\n- [direnv](https://github.com/direnv/direnv) - unclutter your .profile, set env by dir automate\n\n## Vim\n\nPlugin\n\n- [nerdtree](https://github.com/scrooloose/nerdtree.git)\n- [ctrlp.vim](https://github.com/kien/ctrlp.vim.git)\n- [vim-easymotion](https://github.com/easymotion/vim-easymotion.git)\n- [ag.vim](https://github.com/rking/ag.vim.git)\n- [vim-airline](https://github.com/vim-airline/vim-airline)\n- [vim-airline-themes](https://github.com/vim-airline/vim-airline-themes)\n- [vim-colors-solarized.git](https://github.com/altercation/vim-colors-solarized.git)\n- [nerdcommenter](https://github.com/scrooloose/nerdcommenter)\n\n## tools\n\n- [scc](https://github.com/boyter/scc) - scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go\n- [restic](https://github.com/restic/restic) - Fast, secure, efficient backup program\n- [rclone](https://github.com/rclone/rclone) - rsync for cloud storage\n- [protoc](https://github.com/protocolbuffers/protobuf) - Protocol Buffers - Google's data interchange format\n- [grpcurl](https://github.com/fullstorydev/grpcurl) - AboutLike cURL, but for gRPC: Command-line tool for interacting with gRPC servers\n\n## Dev.env\n\n- set pre / post script\n- set git config\n- set tz and so on\n\n```bash\n# 前后置脚本\nPRE_SCRIPT_FILE=\"\"\nPOST_SCRIPT_FILE=\"\"\n\n# git 配置\nGIT_USER_NAME=\"\"\nGIT_USER_EMAIL=\"\"\nGIT_USER_SIGNINGKEY=\"\"\n\n# 时区配置\nTZ=Asia/Shanghai\n```\n\n## Python toolchain\n\n- [uv](https://github.com/astral-sh/uv) - An extremely fast Python package and project manager, written in Rust.\n- [ruff](https://github.com/astral-sh/ruff) - An extremely fast Python linter and code formatter, written in Rust.\n- [jupyterlab](https://github.com/jupyterlab/jupyterlab) - JupyterLab computational environment.\n\nusage\n\n```shell\n# switch python version\nuv venv /root/.venv/hello-world -p /opt/python/py3/bin/python\nsource /root/.venv/hello-world/bin/activate\n```\n\n.envrc\n\n```bash\nexport VIRTUAL_ENV=\"/root/.venv/hello-world\"\nlayout python\n```\n\n.vscode/settings.json\n\n```json\n{\n    \"python.defaultInterpreterPath\": \"/root/.venv/hello-world/bin/python\"\n}\n```\n\n## Golang toolchain\n\n- [office manage-install](https://go.dev/doc/manage-install)\n\nusage\n\n```shell\n# install golang version\nexport HOME=/opt/go\ngo install golang.org/dl/go1.23.1@latest\ngo1.23.1 download\n```\n\nversion list in [golang/dl](https://github.com/golang/dl)\n\n.envrc\n\n```bash\n# switch golang version\nexport PATH=/opt/go/sdk/go1.23/bin:$PATH\n```\n\n.vscode/settings.json\n\n```json\n{\n    \"go.goroot\": \"/opt/go/sdk/go1.23\",\n    \"go.gopath\": \"/root/.go\"\n}\n```\n\ngolang private mod settings\n\n.vscode/settings.json\n\n```json\n{\n    \"go.goroot\": \"/opt/go/sdk/go1.23\",\n    \"go.gopath\": \"/root/.go\",\n    \"go.toolsEnvVars\": {\n        \"GOPROXY\": \"https://athens-proxy.townsy.io,direct\",\n        \"GOPRIVATE\": \"\",\n        \"GONOSUMDB\": \"townsy.private-github.com\"\n    },\n    \"terminal.integrated.env.linux\": {\n        \"GOPROXY\": \"https://athens-proxy.townsy.io,direct\",\n        \"GOPRIVATE\": \"\",\n        \"GONOSUMDB\": \"townsy.private-github.com\"\n    }\n}\n```\n\n## Develop golang\n\nYou can refer to the official guidelines \u003chttps://go.dev/doc/contribute\u003e\n\nhere is use vscode learn golang src\n\n```bash\n# clone go repo\ngit clone https://github.com/golang/go\ncd go\n\n# checkout the version you are interested in\ngit checkout release-branch.go1.23\n\n# build go bin \u0026 pkg tools\ncd src \u0026\u0026 ./make.bash \u0026\u0026 cd ..\n\n# add `go.work` for src workspace\ngo work init\n# change if you need\n# go work edit -go=1.21\ngo work use src\n\n# modify according to the following configuration\nmkdir .vscode \u0026\u0026 vim .vscode/settings.json\n```\n\nadd custom `go.goroot` settings\n\n```json\n{\n    \"go.goroot\": \"/data/repos/golang/go\"\n}\n```\n\nall Go language server work perfect\n\n## Build linux kernel\n\nbuild the linux kernel in the devcontainer, all tools has been installed\n\n```bash\nmkdir /data/kernel \u0026\u0026 cd /data/kernel\nwget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.16.17.tar.xz # change version as you need\ntar -xf linux-5.16.17.tar.xz\ncd linux-5.16.17\nmake menuconfig # change config\nmake -j 10\n```\n\n## Settings\n\nauto install-extension\n\nopen the user settings editor from the Command Palette (Ctrl+Shift+P) with Preferences: Open User Settings(JSON).\n\n```json\n{\n    \"remote.SSH.useLocalServer\": true,\n    \"remote.SSH.suppressWindowsSshWarning\": true,\n    \"remote.SSH.remotePlatform\": {\n        \"devcontainer\": \"linux\"\n    },\n    \"remote.extensionKind\": {\n        \"alefragnani.project-manager\": [\n            \"workspace\"\n        ]\n    },\n    \"remote.SSH.defaultExtensions\": [\n        \"golang.go\",\n        \"ms-python.python\",\n        \"charliermarsh.ruff\",\n        \"geddski.macros\",\n        \"alefragnani.project-manager\",\n        \"ms-azuretools.vscode-docker\",\n        \"ms-vscode.makefile-tools\",\n        \"quillaja.goasm\",\n        \"davidanson.vscode-markdownlint\",\n        \"redhat.vscode-yaml\",\n        \"redhat.vscode-xml\",\n        \"xaver.clang-format\",\n        \"zxh404.vscode-proto3\"\n    ]\n}\n```\n\nlist-extensions\n\n```bash\ncode --list-extensions --show-version\n```\n\nsnippets\n\nopen the user settings editor from the Command Palette (Ctrl+Shift+P) with Snippets: Open User Snippets.\n\ncopy snippet to config, example `go.json`\n\n```json\n{\n    \"import github.com/stretchr/testify/assert\": {\n        \"prefix\": \"iassert\",\n        \"body\": \"\\\"github.com/stretchr/testify/assert\\\"\",\n        \"description\": \"Code snippet for import testify assert\"\n    },\n    \"import github.com/pkg/errors\": {\n        \"prefix\": \"ipkgerr\",\n        \"body\": \"\\\"github.com/pkg/errors\\\"\",\n        \"description\": \"Code snippet for import pkg errors\"\n    }\n}\n```\n\nvscode remote ssh settings\n\n~/.vscode-server/data/Machine/settings.json\n\nuse the linked major version\n\n```json\n{\n    \"go.goroot\": \"/opt/go/sdk/go1.23\",\n    \"go.gopath\": \"/root/.go\",\n    \"go.toolsEnvVars\": {\n        \"GOBIN\": \"/opt/go/bin\"\n    },\n    \"go.lintTool\": \"golangci-lint\",\n    \"go.lintFlags\": [\n        \"-c\",\n        \"/etc/.golangci.yml\"\n    ],\n    \"clang-format.style\": \"{IndentWidth: 4, BasedOnStyle: google, AlignConsecutiveAssignments: true, ColumnLimit: 0}\",\n    \"python.linting.flake8Path\": \"/usr/local/bin/flake8\",\n    \"python.linting.flake8Args\": [\n        \"--max-line-length=119\"\n    ],\n    \"python.formatting.blackPath\": \"/usr/local/bin/black\",\n    \"python.formatting.blackArgs\": [\n        \"--line-length=119\"\n    ],\n    \"isort.path\": [\n        \"/usr/local/bin/isort\"\n    ],\n    \"isort.args\": [\n        \"--line-length=119\"\n    ],\n    \"python.terminal.activateEnvironment\": false,\n    \"git.ignoredRepositories\": [\n        \"/opt/pyenv\"\n    ],\n    \"projectManager.groupList\": true,\n    \"projectManager.git.maxDepthRecursion\": 4,\n    \"projectManager.git.ignoredFolders\": [\n        \"code-review\",\n        \"github\"\n    ],\n    \"projectManager.git.baseFolders\": [\n        \"/data/repos\"\n    ],\n    \"editor.bracketPairColorization.enabled\": false\n}\n```\n\n## Tips and Tricks\n\n### windows remote ssh cann't connection with zsh\n\nerror log:\n\n```bash\nzsh: bad math expression: operand expected at `*100000 + ...'\n```\n\nsolution: enable useLocalServer\n\n```json\n{\n    \"remote.SSH.useLocalServer\": true\n}\n```\n\nmaybe have [non-Windows SSH installed](https://github.com/microsoft/vscode-remote-release/issues/2525) issue, just ignore\n","funding_links":[],"categories":["vscode"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fifooth%2Fdevcontainer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fifooth%2Fdevcontainer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fifooth%2Fdevcontainer/lists"}