├── sync.gist ├── scripts ├── parse-extension-list.sh ├── install-tools-python.sh ├── install-tools-dev.sh ├── install-tools-java.sh ├── install-vscode-extensions.sh ├── get-config-from-gist.sh ├── install-tools-cpp.sh ├── install-tools-nodejs.sh └── install-tools-golang.sh ├── .gitignore ├── .travis.yml ├── README.md ├── Dockerfile └── LICENSE.md /sync.gist: -------------------------------------------------------------------------------- 1 | LER0ever/4fd9bd5e26e49a26a124e92787b8914c 2 | -------------------------------------------------------------------------------- /scripts/parse-extension-list.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | jq -r ".[].metadata.publisherId" ../extensions.json > ../extensions.list 4 | 5 | -------------------------------------------------------------------------------- /scripts/install-tools-python.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | apt-get update && apt-get install -y python3 python3-pip 4 | pip3 install python-language-server -------------------------------------------------------------------------------- /scripts/install-tools-dev.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | apt-get update 4 | apt-get -y install git build-essential curl wget gnupg2 xz-utils openssl net-tools -------------------------------------------------------------------------------- /scripts/install-tools-java.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections 4 | apt-get update && apt-get -y install openjdk-8-jdk -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | *.pid.lock 10 | 11 | *.tgz 12 | 13 | # dotenv environment variables file 14 | .env 15 | 16 | *.json 17 | *.list 18 | 19 | .DS_Store -------------------------------------------------------------------------------- /scripts/install-vscode-extensions.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | while IFS='' read -r line || [[ -n "$line" ]]; do 4 | echo "Installing $line using VSCode"; 5 | code --user-data-dir /root/.config/Code --install-extension $line 6 | done < "$1" 7 | -------------------------------------------------------------------------------- /scripts/get-config-from-gist.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | gistid=`cat ../sync.gist` 4 | gisturl="https://gist.githubusercontent.com/${gistid}/raw" 5 | 6 | curl -o ../extensions.json "${gisturl}/extensions.json" 7 | curl -o ../settings.json "${gisturl}/settings.json" 8 | -------------------------------------------------------------------------------- /scripts/install-tools-cpp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - 4 | # public LLVM PPA, development version of LLVM 5 | echo "deb http://apt.llvm.org/eoan/ llvm-toolchain-eoan-10 main" > /etc/apt/sources.list.d/llvm.list 6 | apt-get update && apt-get install -y clang-tools-10 7 | ln -s /usr/bin/clangd-10 /usr/bin/clangd 8 | -------------------------------------------------------------------------------- /scripts/install-tools-nodejs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Install Node.js 4 | curl -sL https://deb.nodesource.com/setup_12.x | bash - 5 | 6 | # Install Yarn 7 | curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - 8 | echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list 9 | 10 | apt-get update && apt-get install -y yarn nodejs 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: generic 2 | sudo: required 3 | services: 4 | - docker 5 | before_install: 6 | - 'echo "{ \"experimental\": true, \"storage-driver\": \"overlay2\", \"max-concurrent-downloads\": 50, \"max-concurrent-uploads\": 50 }" | sudo tee /etc/docker/daemon.json' 7 | - sudo service docker restart 8 | install: 9 | - docker version 10 | script: 11 | - docker build --compress --pull --tag ler0ever/evdev . 12 | after_success: 13 | - '[ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$TRAVIS_BRANCH" == "master" ] && docker 14 | login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" && docker push "ler0ever/evdev"' -------------------------------------------------------------------------------- /scripts/install-tools-golang.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export GO_VERSION=1.14 4 | export GOPATH=/usr/local/go-packages 5 | export GO_ROOT=/usr/local/go 6 | export PATH=$PATH:/usr/local/go/bin 7 | export PATH=$PATH:${GOPATH}/bin 8 | 9 | curl -sS https://storage.googleapis.com/golang/go$GO_VERSION.linux-amd64.tar.gz | tar -C /usr/local -xzf - 10 | go get -u -v github.com/ramya-rao-a/go-outline 11 | go get -u -v github.com/acroca/go-symbols 12 | go get -u -v github.com/nsf/gocode 13 | go get -u -v github.com/rogpeppe/godef 14 | go get -u -v golang.org/x/tools/cmd/godoc 15 | go get -u -v github.com/zmb3/gogetdoc 16 | go get -u -v golang.org/x/lint/golint 17 | go get -u -v github.com/fatih/gomodifytags 18 | go get -u -v github.com/uudashr/gopkgs/cmd/gopkgs 19 | go get -u -v golang.org/x/tools/cmd/gorename 20 | go get -u -v sourcegraph.com/sqs/goreturns 21 | go get -u -v github.com/cweill/gotests/... 22 | go get -u -v golang.org/x/tools/cmd/guru 23 | go get -u -v github.com/josharian/impl 24 | go get -u -v github.com/haya14busa/goplay/cmd/goplay 25 | go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## EvDev 2 | 3 | My own configuration to run VSCode on the cloud for browser-based coding. 4 | 5 | For the original EvDev which features EverVim and SpaceMacs, please see the [terminal](https://github.com/LER0ever/EvDev/tree/terminal) branch 6 | 7 | 8 | ## Usage 9 | #### If you want to use my configuration: 10 | ```bash 11 | docker run -p 127.0.0.1:8443:8443 -v "${PWD}:/project" ler0ever/evdev code-server --allow-http --no-auth 12 | ``` 13 | 14 | #### If you have your own VSCode Settings Sync setup 15 | - Fork this project 16 | - Change `sync.gist` into your gist id "USERNAME/GISTID" 17 | - `docker build . -tag WHATEVER` 18 | - `docker run -p 127.0.0.1:8443:8443 -v "${PWD}:/project" WHATEVER code-server --allow-http --no-auth` 19 | 20 | ## Features 21 | #### Sync with VSCode Settings Sync 22 | - Directly download VSCode configurations and extension lists from SettingsSync gist. 23 | - VSCode settings is directly used for code-server 24 | - VSCode extensions are parsed and installed automatically from `extensions.json` 25 | 26 | #### Official VSCode Extension Market 27 | - Code-server uses their own extensions registry and it is pretty limited and outdated, at least for now. 28 | - Here, Microsoft VSCode binary is used to install all the extensions before copying to code-server for final use, so they are up-to-date and official. 29 | 30 | #### Dev Tools Included out of the box 31 | - Comes with 32 | - Golang 33 | - C++ 34 | - Nodejs 35 | - Python 36 | - Rust 37 | 38 | toolings pre-installed and ready to use. 39 | 40 | ## CI and Docker Hub 41 | This docker image is built and pushed to Docker Hub [EvDev](https://cloud.docker.com/repository/docker/ler0ever/evdev/tags) everyday with [Travis](https://travis-ci.org/LER0ever/EvDev) Cron. 42 | 43 | ## License 44 | Credit goes to the [code-server](https://github.com/codercom/code-server) project. 45 | Code for this configuration is licensed under Apache 2.0, detailed in [LICENSE.md](LICENSE.md) 46 | 47 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Just use the code-server docker binary 2 | FROM codercom/code-server as coder-binary 3 | 4 | FROM ubuntu:19.10 as vscode-env 5 | ARG DEBIAN_FRONTEND=noninteractive 6 | 7 | # Install the actual VSCode to download configs and extensions 8 | RUN apt-get update && \ 9 | apt-get install -y curl && \ 10 | curl -o vscode-amd64.deb -L https://vscode-update.azurewebsites.net/latest/linux-deb-x64/stable && \ 11 | dpkg -i vscode-amd64.deb || true && \ 12 | apt-get install -y -f && \ 13 | # VSCode missing deps 14 | apt-get install -y libx11-xcb1 libasound2 && \ 15 | rm -f vscode-amd64.deb && \ 16 | # CLI json parser 17 | apt-get install -y jq 18 | 19 | COPY scripts /root/scripts 20 | COPY sync.gist /root/sync.gist 21 | 22 | # This gets user config from gist, parse it and install exts with VSCode 23 | RUN code -v --user-data-dir /root/.config/Code && \ 24 | cd /root/scripts && \ 25 | sh get-config-from-gist.sh && \ 26 | sh parse-extension-list.sh && \ 27 | sh install-vscode-extensions.sh ../extensions.list 28 | 29 | # The production image for code-server 30 | FROM ubuntu:19.10 31 | MAINTAINER Yi Rong (https://rongyi.io) 32 | WORKDIR /project 33 | COPY --from=coder-binary /usr/local/bin/code-server /usr/local/bin/code-server 34 | RUN mkdir -p /root/.code-server/User 35 | COPY --from=vscode-env /root/settings.json /root/.code-server/User/settings.json 36 | COPY --from=vscode-env /root/.vscode/extensions /root/.code-server/extensions 37 | COPY scripts /root/scripts 38 | 39 | RUN apt-get update && \ 40 | apt-get install -y curl gnupg2 ca-certificates && \ 41 | apt-get install -y locales && \ 42 | locale-gen en_US.UTF-8 43 | # Locale Generation 44 | # We unfortunately cannot use update-locale because docker will not use the env variables 45 | # configured in /etc/default/locale so we need to set it manually. 46 | ENV LANG=en_US.UTF-8 47 | 48 | # Install langauge toolchains 49 | RUN sh /root/scripts/install-tools-nodejs.sh 50 | RUN sh /root/scripts/install-tools-dev.sh 51 | RUN sh /root/scripts/install-tools-golang.sh 52 | RUN sh /root/scripts/install-tools-cpp.sh 53 | RUN sh /root/scripts/install-tools-python.sh 54 | 55 | EXPOSE 8443 56 | CMD code-server $PWD 57 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Apache License 2 | ============== 3 | 4 | _Version 2.0, January 2004_ 5 | _<>_ 6 | 7 | ### Terms and Conditions for use, reproduction, and distribution 8 | 9 | #### 1. Definitions 10 | 11 | “License” shall mean the terms and conditions for use, reproduction, and 12 | distribution as defined by Sections 1 through 9 of this document. 13 | 14 | “Licensor” shall mean the copyright owner or entity authorized by the copyright 15 | owner that is granting the License. 16 | 17 | “Legal Entity” shall mean the union of the acting entity and all other entities 18 | that control, are controlled by, or are under common control with that entity. 19 | For the purposes of this definition, “control” means **(i)** the power, direct or 20 | indirect, to cause the direction or management of such entity, whether by 21 | contract or otherwise, or **(ii)** ownership of fifty percent (50%) or more of the 22 | outstanding shares, or **(iii)** beneficial ownership of such entity. 23 | 24 | “You” (or “Your”) shall mean an individual or Legal Entity exercising 25 | permissions granted by this License. 26 | 27 | “Source” form shall mean the preferred form for making modifications, including 28 | but not limited to software source code, documentation source, and configuration 29 | files. 30 | 31 | “Object” form shall mean any form resulting from mechanical transformation or 32 | translation of a Source form, including but not limited to compiled object code, 33 | generated documentation, and conversions to other media types. 34 | 35 | “Work” shall mean the work of authorship, whether in Source or Object form, made 36 | available under the License, as indicated by a copyright notice that is included 37 | in or attached to the work (an example is provided in the Appendix below). 38 | 39 | “Derivative Works” shall mean any work, whether in Source or Object form, that 40 | is based on (or derived from) the Work and for which the editorial revisions, 41 | annotations, elaborations, or other modifications represent, as a whole, an 42 | original work of authorship. For the purposes of this License, Derivative Works 43 | shall not include works that remain separable from, or merely link (or bind by 44 | name) to the interfaces of, the Work and Derivative Works thereof. 45 | 46 | “Contribution” shall mean any work of authorship, including the original version 47 | of the Work and any modifications or additions to that Work or Derivative Works 48 | thereof, that is intentionally submitted to Licensor for inclusion in the Work 49 | by the copyright owner or by an individual or Legal Entity authorized to submit 50 | on behalf of the copyright owner. For the purposes of this definition, 51 | “submitted” means any form of electronic, verbal, or written communication sent 52 | to the Licensor or its representatives, including but not limited to 53 | communication on electronic mailing lists, source code control systems, and 54 | issue tracking systems that are managed by, or on behalf of, the Licensor for 55 | the purpose of discussing and improving the Work, but excluding communication 56 | that is conspicuously marked or otherwise designated in writing by the copyright 57 | owner as “Not a Contribution.” 58 | 59 | “Contributor” shall mean Licensor and any individual or Legal Entity on behalf 60 | of whom a Contribution has been received by Licensor and subsequently 61 | incorporated within the Work. 62 | 63 | #### 2. Grant of Copyright License 64 | 65 | Subject to the terms and conditions of this License, each Contributor hereby 66 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 67 | irrevocable copyright license to reproduce, prepare Derivative Works of, 68 | publicly display, publicly perform, sublicense, and distribute the Work and such 69 | Derivative Works in Source or Object form. 70 | 71 | #### 3. Grant of Patent License 72 | 73 | Subject to the terms and conditions of this License, each Contributor hereby 74 | grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, 75 | irrevocable (except as stated in this section) patent license to make, have 76 | made, use, offer to sell, sell, import, and otherwise transfer the Work, where 77 | such license applies only to those patent claims licensable by such Contributor 78 | that are necessarily infringed by their Contribution(s) alone or by combination 79 | of their Contribution(s) with the Work to which such Contribution(s) was 80 | submitted. If You institute patent litigation against any entity (including a 81 | cross-claim or counterclaim in a lawsuit) alleging that the Work or a 82 | Contribution incorporated within the Work constitutes direct or contributory 83 | patent infringement, then any patent licenses granted to You under this License 84 | for that Work shall terminate as of the date such litigation is filed. 85 | 86 | #### 4. Redistribution 87 | 88 | You may reproduce and distribute copies of the Work or Derivative Works thereof 89 | in any medium, with or without modifications, and in Source or Object form, 90 | provided that You meet the following conditions: 91 | 92 | * **(a)** You must give any other recipients of the Work or Derivative Works a copy of 93 | this License; and 94 | * **(b)** You must cause any modified files to carry prominent notices stating that You 95 | changed the files; and 96 | * **(c)** You must retain, in the Source form of any Derivative Works that You distribute, 97 | all copyright, patent, trademark, and attribution notices from the Source form 98 | of the Work, excluding those notices that do not pertain to any part of the 99 | Derivative Works; and 100 | * **(d)** If the Work includes a “NOTICE” text file as part of its distribution, then any 101 | Derivative Works that You distribute must include a readable copy of the 102 | attribution notices contained within such NOTICE file, excluding those notices 103 | that do not pertain to any part of the Derivative Works, in at least one of the 104 | following places: within a NOTICE text file distributed as part of the 105 | Derivative Works; within the Source form or documentation, if provided along 106 | with the Derivative Works; or, within a display generated by the Derivative 107 | Works, if and wherever such third-party notices normally appear. The contents of 108 | the NOTICE file are for informational purposes only and do not modify the 109 | License. You may add Your own attribution notices within Derivative Works that 110 | You distribute, alongside or as an addendum to the NOTICE text from the Work, 111 | provided that such additional attribution notices cannot be construed as 112 | modifying the License. 113 | 114 | You may add Your own copyright statement to Your modifications and may provide 115 | additional or different license terms and conditions for use, reproduction, or 116 | distribution of Your modifications, or for any such Derivative Works as a whole, 117 | provided Your use, reproduction, and distribution of the Work otherwise complies 118 | with the conditions stated in this License. 119 | 120 | #### 5. Submission of Contributions 121 | 122 | Unless You explicitly state otherwise, any Contribution intentionally submitted 123 | for inclusion in the Work by You to the Licensor shall be under the terms and 124 | conditions of this License, without any additional terms or conditions. 125 | Notwithstanding the above, nothing herein shall supersede or modify the terms of 126 | any separate license agreement you may have executed with Licensor regarding 127 | such Contributions. 128 | 129 | #### 6. Trademarks 130 | 131 | This License does not grant permission to use the trade names, trademarks, 132 | service marks, or product names of the Licensor, except as required for 133 | reasonable and customary use in describing the origin of the Work and 134 | reproducing the content of the NOTICE file. 135 | 136 | #### 7. Disclaimer of Warranty 137 | 138 | Unless required by applicable law or agreed to in writing, Licensor provides the 139 | Work (and each Contributor provides its Contributions) on an “AS IS” BASIS, 140 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, 141 | including, without limitation, any warranties or conditions of TITLE, 142 | NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are 143 | solely responsible for determining the appropriateness of using or 144 | redistributing the Work and assume any risks associated with Your exercise of 145 | permissions under this License. 146 | 147 | #### 8. Limitation of Liability 148 | 149 | In no event and under no legal theory, whether in tort (including negligence), 150 | contract, or otherwise, unless required by applicable law (such as deliberate 151 | and grossly negligent acts) or agreed to in writing, shall any Contributor be 152 | liable to You for damages, including any direct, indirect, special, incidental, 153 | or consequential damages of any character arising as a result of this License or 154 | out of the use or inability to use the Work (including but not limited to 155 | damages for loss of goodwill, work stoppage, computer failure or malfunction, or 156 | any and all other commercial damages or losses), even if such Contributor has 157 | been advised of the possibility of such damages. 158 | 159 | #### 9. Accepting Warranty or Additional Liability 160 | 161 | While redistributing the Work or Derivative Works thereof, You may choose to 162 | offer, and charge a fee for, acceptance of support, warranty, indemnity, or 163 | other liability obligations and/or rights consistent with this License. However, 164 | in accepting such obligations, You may act only on Your own behalf and on Your 165 | sole responsibility, not on behalf of any other Contributor, and only if You 166 | agree to indemnify, defend, and hold each Contributor harmless for any liability 167 | incurred by, or claims asserted against, such Contributor by reason of your 168 | accepting any such warranty or additional liability. 169 | 170 | _END OF TERMS AND CONDITIONS_ 171 | 172 | ### APPENDIX: How to apply the Apache License to your work 173 | 174 | To apply the Apache License to your work, attach the following boilerplate 175 | notice, with the fields enclosed by brackets `[]` replaced with your own 176 | identifying information. (Don't include the brackets!) The text should be 177 | enclosed in the appropriate comment syntax for the file format. We also 178 | recommend that a file or class name and description of purpose be included on 179 | the same “printed page” as the copyright notice for easier identification within 180 | third-party archives. 181 | 182 | Copyright [yyyy] [name of copyright owner] 183 | 184 | Licensed under the Apache License, Version 2.0 (the "License"); 185 | you may not use this file except in compliance with the License. 186 | You may obtain a copy of the License at 187 | 188 | http://www.apache.org/licenses/LICENSE-2.0 189 | 190 | Unless required by applicable law or agreed to in writing, software 191 | distributed under the License is distributed on an "AS IS" BASIS, 192 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 193 | See the License for the specific language governing permissions and 194 | limitations under the License. 195 | 196 | --------------------------------------------------------------------------------