{% endif %}
37 |
38 |
39 |
50 |
51 | {% if page.share %}{% include social-share.html %}{% endif %}
52 |
53 | {% if page.sidebar and page.sidebar.nav %}
54 | {% include nav_pagination.html nav=page.sidebar.nav %}
55 | {% endif %}
56 |
57 |
58 | {% if site.comments.provider and page.comments %}
59 | {% include comments.html %}
60 | {% endif %}
61 |
62 |
63 | {% comment %}{% endcomment %}
64 | {% if page.id and page.related and site.related_posts.size > 0 %}
65 |
66 | {% if site.data.ui-text[site.locale].related_label %}
67 |
{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}
68 | {% endif %}
69 |
70 | {% for post in site.related_posts limit:4 %}
71 | {% include archive-single.html type="grid" %}
72 | {% endfor %}
73 |
74 |
75 | {% endif %}
76 |
77 |
--------------------------------------------------------------------------------
/provisioning/roles/zsh/templates/zimrc.zsh.j2:
--------------------------------------------------------------------------------
1 | {{ ansible_managed | comment }}
2 |
3 | zmodule ohmyzsh/ohmyzsh --root lib \
4 | -s 'clipboard.zsh' \
5 | -s 'compfix.zsh' \
6 | -s 'completion.zsh' \
7 | -s 'correction.zsh' \
8 | -s 'directories.zsh' \
9 | -s 'functions.zsh' \
10 | -s 'grep.zsh' \
11 | -s 'key-bindings.zsh' \
12 | -s 'misc.zsh' \
13 | -s 'spectrum.zsh' \
14 | -s 'termsupport.zsh'
15 |
16 | zmodule ohmyzsh/ohmyzsh --root plugins \
17 | -f 'autopep8' \
18 | -f 'fd' \
19 | -f 'git-escape-magic' \
20 | -f 'gradle' \
21 | -f 'httpie' \
22 | -f 'ng' \
23 | -f 'pep8' \
24 | -f 'pip' \
25 | -f 'ripgrep'
26 |
27 | if (( $+commands[docker] )); then
28 | zmodule ohmyzsh/ohmyzsh --root plugins -f 'docker'
29 | fi
30 | if (( $+commands[ctop] )); then
31 | zmodule gantsign/zsh-plugins -f 'ctop'
32 | fi
33 | zmodule gantsign/zsh-plugins -f 'dive'
34 | if (( $+commands[docker-compose] )); then
35 | zmodule ohmyzsh/ohmyzsh --root plugins -f 'docker-compose'
36 | fi
37 | if (( $+commands[yarn] )); then
38 | zmodule ohmyzsh/ohmyzsh --root plugins -f 'yarn'
39 | fi
40 |
41 | zmodule "$HOME/.config/zsh" -s 'completion.zsh'
42 |
43 | zmodule ohmyzsh/ohmyzsh --root plugins \
44 | -s 'command-not-found/command-not-found.plugin.zsh' \
45 | -s 'copybuffer/copybuffer.plugin.zsh' \
46 | -s 'copyfile/copyfile.plugin.zsh' \
47 | -s 'copypath/copypath.plugin.zsh' \
48 | -s 'dirhistory/dirhistory.plugin.zsh' \
49 | -s 'git-escape-magic/git-escape-magic.plugin.zsh' \
50 | -s 'git/git.plugin.zsh' \
51 | -s 'gradle/gradle.plugin.zsh' \
52 | -s 'grc/grc.plugin.zsh' \
53 | -s 'mvn/mvn.plugin.zsh' \
54 | -s 'sudo/sudo.plugin.zsh'
55 |
56 | zmodule gantsign/zsh-plugins -s 'dive/dive.plugin.zsh'
57 |
58 | if (( $+commands[docker] )); then
59 | zmodule ohmyzsh/ohmyzsh --root plugins -s 'docker/docker.plugin.zsh'
60 | fi
61 | if (( $+commands[docker-compose] )); then
62 | zmodule ohmyzsh/ohmyzsh --root plugins -s 'docker-compose/docker-compose.plugin.zsh'
63 | fi
64 | if (( $+commands[fzf] )); then
65 | zmodule ohmyzsh/ohmyzsh --root plugins -s 'fzf/fzf.plugin.zsh'
66 | fi
67 | if (( $+commands[kubectl] )); then
68 | zmodule ohmyzsh/ohmyzsh --root plugins -s 'kubectl/kubectl.plugin.zsh'
69 | fi
70 | if (( $+commands[kubeadm] )); then
71 | zmodule gantsign/zsh-plugins -s 'kubeadm/kubeadm.plugin.zsh'
72 | fi
73 | if (( $+commands[minikube] )); then
74 | zmodule gantsign/zsh-plugins -s 'minikube-none/minikube.plugin.zsh'
75 | fi
76 | if (( $+commands[helm] )); then
77 | zmodule ohmyzsh/ohmyzsh --root plugins -s 'helm/helm.plugin.zsh'
78 | fi
79 | if (( $+commands[kompose] )); then
80 | zmodule gantsign/zsh-plugins -s 'kompose/kompose.plugin.zsh'
81 | fi
82 | if (( $+commands[npm] )); then
83 | zmodule ohmyzsh/ohmyzsh --root plugins -s 'npm/npm.plugin.zsh'
84 | fi
85 | if (( $+commands[yarn] )); then
86 | zmodule ohmyzsh/ohmyzsh --root plugins -s 'yarn/yarn.plugin.zsh'
87 | fi
88 | if (( $+commands[pipenv] )); then
89 | zmodule ohmyzsh/ohmyzsh --root plugins -s 'pipenv/pipenv.plugin.zsh'
90 | fi
91 | if (( $+commands[pyenv] )); then
92 | zmodule ohmyzsh/ohmyzsh --root plugins -s 'pyenv/pyenv.plugin.zsh'
93 | fi
94 | if (( $+commands[zoxide] )); then
95 | zmodule ohmyzsh/ohmyzsh --root plugins -s 'zoxide/zoxide.plugin.zsh'
96 | fi
97 | zmodule gantsign/molecule-wrapper -s 'zsh/moleculew.plugin.zsh'
98 |
99 | if [ -f ~/.sdkman/bin/sdkman-init.sh ]; then
100 | zmodule ~/.sdkman/bin -s 'sdkman-init.sh'
101 | fi
102 | {% if "zsh-you-should-use" not in ansible_skip_tags -%}
103 | zmodule MichaelAquilina/zsh-you-should-use -s 'you-should-use.plugin.zsh'
104 | {% endif %}
105 | {% if "zsh-fzf-tab" not in ansible_skip_tags -%}
106 | if (( $+commands[fzf] )); then
107 | zmodule Aloxaf/fzf-tab
108 | fi
109 | {% endif %}
110 |
111 | if [ ! $commands[starship] ]; then
112 | # Use asciiship prompt if starship not found
113 | zmodule duration-info
114 | zmodule git-info
115 | zmodule prompt-pwd
116 | zmodule asciiship
117 | fi
118 |
119 | zmodule ~/.config/zsh -s 'custom.zsh'
120 |
121 | # Must be last
122 | {% if "zsh-autosuggestions" not in ansible_skip_tags -%}
123 | zmodule zsh-users/zsh-autosuggestions
124 | {% endif %}
125 | {% if "zsh-syntax-highlighting" not in ansible_skip_tags -%}
126 | zmodule zsh-users/zsh-syntax-highlighting
127 | {% endif %}
128 |
--------------------------------------------------------------------------------
/provisioning/roles/zsh/files/custom.zsh:
--------------------------------------------------------------------------------
1 | # Enable support for multibyte characters
2 | setopt COMBINING_CHARS
3 |
4 | if (( $+commands[bat] )) || (( $+commands[batcat] )); then
5 | if (( ! $+commands[bat] )); then
6 | # Ubuntu OS package uses batcat
7 | alias bat='batcat'
8 | fi
9 |
10 | # So we get syntax highlighting by default
11 | cat_or_bat() {
12 | if [[ $# -ne 1 ]] || [[ "${1:-}" == '-'* ]] || [[ ! -f "${1:-}" ]]; then
13 | cat "$@"
14 | else
15 | if (( $+commands[bat] )); then
16 | bat --style=plain --pager=never "$@"
17 | else
18 | batcat --style=plain --pager=never "$@"
19 | fi
20 | fi
21 | }
22 | compdef cat_or_bat=cat
23 | alias cat=cat_or_bat
24 |
25 | # So we get syntax highlighting by default
26 | less_or_bat() {
27 | if [[ $# -ne 1 ]] || [[ "${1:-}" == '-'* ]] || [[ ! -f "${1:-}" ]]; then
28 | less "$@"
29 | else
30 | if (( $+commands[bat] )); then
31 | bat --paging=always "$@"
32 | else
33 | batcat --paging=always "$@"
34 | fi
35 | fi
36 | }
37 | compdef less_or_bat=less
38 | alias less=less_or_bat
39 |
40 | if (( $+commands[shfmt] )); then
41 | shfmt_with_bat() {
42 | if [[ $# -ne 1 ]] || [[ "${1:-}" == '-'* ]] || [[ ! -e "${1:-}" ]]; then
43 | shfmt "$@"
44 | else
45 | if (( $+commands[bat] )); then
46 | shfmt "$@" | bat --plain --language bash
47 | else
48 | shfmt "$@" | batcat --plain --language bash
49 | fi
50 | fi
51 | }
52 | # shfmt doesn't currently have Zsh tab-completion
53 | # compdef shfmt_with_bat=shfmt
54 | alias shfmt=shfmt_with_bat
55 | fi
56 |
57 | if (( $+commands[bat] )); then
58 | # batcat doesn't support --language=help (old version)
59 | alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
60 | fi
61 | fi
62 |
63 | if (( $+commands[lsd] )); then
64 | alias ls='lsd'
65 | alias tree='lsd --tree'
66 | fi
67 |
68 | if (( $+commands[xdg-open] )); then
69 | alias open='xdg-open'
70 | fi
71 |
72 | alias la='ls -lAFh'
73 |
74 | alias grep='grep --color'
75 | alias sgrep='grep -R -n -H -C 5 --exclude-dir={.git,.svn,CVS}'
76 |
77 | # Ubuntu OS package uses fdfind
78 | if (( $+commands[fdfind] )); then
79 | alias fd='fdfind'
80 | fi
81 |
82 | alias rm='rm -i'
83 | alias cp='cp -i'
84 | alias mv='mv -i'
85 |
86 | alias ..='cd ..'
87 | alias ...='cd ../..'
88 | alias ....='cd ../../..'
89 | alias .....='cd ../../../..'
90 | alias cd..='cd ..'
91 | alias cd-='cd -'
92 |
93 | # List archive contents as default action
94 | alias -s zip='unzip -l'
95 | alias -s rar='unrar l'
96 | alias -s tar='tar tf'
97 | alias -s tar.gz='tar tzf'
98 | alias -s tar.bz2='tar tjf'
99 | alias -s tar.xz='tar tJf'
100 | alias -s tar.zsd='tar -I zstd -tf'
101 | alias -s ace='unace l'
102 | alias -s 7z='7z l'
103 |
104 | # Git clone and cd
105 | git-clone-cd() {
106 | local arg
107 | local dir=''
108 | for arg in "$@"; do
109 | if [[ "$arg" == *'.git' ]]; then
110 | dir="$(basename "$arg" '.git')"
111 | elif [[ ! -z "$dir" ]]; then
112 | dir="$arg"
113 | fi
114 | done
115 | git clone "$@" || return $?
116 | if [[ ! -z "$dir" ]] && [[ -d "$dir" ]]; then
117 | cd "$dir"
118 | fi
119 | }
120 | compdef _git git-clone-cd=git-clone
121 | alias c=git-clone-cd
122 |
123 | # Default dirhistory bindings Alt-{Up,Down,Left,Right} conflict in Terminator and VS Code
124 | # Add Shift-Alt-{Up,Down,Left,Right} bindings to use instead
125 | bindkey "\e[1;4D" dirhistory_zle_dirhistory_back
126 | bindkey "\e[1;4C" dirhistory_zle_dirhistory_future
127 | bindkey "\e[1;4A" dirhistory_zle_dirhistory_up
128 | bindkey "\e[1;4B" dirhistory_zle_dirhistory_down
129 |
130 | # Disable zimfw update prompts
131 | zstyle ':zim' disable-version-check yes
132 |
133 | # fzf-tab config
134 | # disable sort when completing `git checkout`
135 | zstyle ':completion:*:git-checkout:*' sort false
136 | # set descriptions format to enable group support
137 | zstyle ':completion:*:descriptions' format '[%d]'
138 | # set list-colors to enable filename colorizing
139 | zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
140 | # switch group using `,` and `.`
141 | zstyle ':fzf-tab:*' switch-group ',' '.'
142 | # remove bullet from results
143 | zstyle ':fzf-tab:*' prefix ''
144 | # always show group
145 | zstyle ':fzf-tab:*' single-group color header
146 | # preview apt package info
147 | zstyle ':fzf-tab:complete:apt:*' fzf-preview '[[ $group == "[package]" ]] && apt-cache show $word'
148 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.gitignore.io/api/windows,linux,osx,vim,emacs,visualstudiocode,intellij,eclipse,vagrant,ansible
2 |
3 | ### Windows ###
4 | # Windows image file caches
5 | Thumbs.db
6 | ehthumbs.db
7 |
8 | # Folder config file
9 | Desktop.ini
10 |
11 | # Recycle Bin used on file shares
12 | $RECYCLE.BIN/
13 |
14 | # Windows Installer files
15 | *.cab
16 | *.msi
17 | *.msm
18 | *.msp
19 |
20 | # Windows shortcuts
21 | *.lnk
22 |
23 |
24 | ### Linux ###
25 | *~
26 |
27 | # temporary files which can be created if a process still has a handle open of a deleted file
28 | .fuse_hidden*
29 |
30 | # KDE directory preferences
31 | .directory
32 |
33 | # Linux trash folder which might appear on any partition or disk
34 | .Trash-*
35 |
36 |
37 | ### OSX ###
38 | *.DS_Store
39 | .AppleDouble
40 | .LSOverride
41 |
42 | # Icon must end with two \r
43 | Icon
44 |
45 |
46 | # Thumbnails
47 | ._*
48 |
49 | # Files that might appear in the root of a volume
50 | .DocumentRevisions-V100
51 | .fseventsd
52 | .Spotlight-V100
53 | .TemporaryItems
54 | .Trashes
55 | .VolumeIcon.icns
56 | .com.apple.timemachine.donotpresent
57 |
58 | # Directories potentially created on remote AFP share
59 | .AppleDB
60 | .AppleDesktop
61 | Network Trash Folder
62 | Temporary Items
63 | .apdisk
64 |
65 |
66 | ### Vim ###
67 | # swap
68 | [._]*.s[a-w][a-z]
69 | [._]s[a-w][a-z]
70 | # session
71 | Session.vim
72 | # temporary
73 | .netrwhist
74 | *~
75 | # auto-generated tag files
76 | tags
77 |
78 |
79 | ### Emacs ###
80 | # -*- mode: gitignore; -*-
81 | *~
82 | \#*\#
83 | /.emacs.desktop
84 | /.emacs.desktop.lock
85 | *.elc
86 | auto-save-list
87 | tramp
88 | .\#*
89 |
90 | # Org-mode
91 | .org-id-locations
92 | *_archive
93 |
94 | # flymake-mode
95 | *_flymake.*
96 |
97 | # eshell files
98 | /eshell/history
99 | /eshell/lastdir
100 |
101 | # elpa packages
102 | /elpa/
103 |
104 | # reftex files
105 | *.rel
106 |
107 | # AUCTeX auto folder
108 | /auto/
109 |
110 | # cask packages
111 | .cask/
112 | dist/
113 |
114 | # Flycheck
115 | flycheck_*.el
116 |
117 | # server auth directory
118 | /server/
119 |
120 | # projectiles files
121 | .projectile
122 |
123 | ### VisualStudioCode ###
124 | .vscode
125 |
126 |
127 |
128 | ### Intellij ###
129 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
130 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
131 |
132 | # User-specific stuff:
133 | .idea/workspace.xml
134 | .idea/tasks.xml
135 | .idea/dictionaries
136 | .idea/vcs.xml
137 | .idea/jsLibraryMappings.xml
138 |
139 | # Sensitive or high-churn files:
140 | .idea/dataSources.ids
141 | .idea/dataSources.xml
142 | .idea/dataSources.local.xml
143 | .idea/sqlDataSources.xml
144 | .idea/dynamic.xml
145 | .idea/uiDesigner.xml
146 |
147 | # Gradle:
148 | .idea/gradle.xml
149 | .idea/libraries
150 |
151 | # Mongo Explorer plugin:
152 | .idea/mongoSettings.xml
153 |
154 | ## File-based project format:
155 | *.iws
156 |
157 | ## Plugin-specific files:
158 |
159 | # IntelliJ
160 | /out/
161 |
162 | # mpeltonen/sbt-idea plugin
163 | .idea_modules/
164 |
165 | # JIRA plugin
166 | atlassian-ide-plugin.xml
167 |
168 | # Crashlytics plugin (for Android Studio and IntelliJ)
169 | com_crashlytics_export_strings.xml
170 | crashlytics.properties
171 | crashlytics-build.properties
172 | fabric.properties
173 |
174 | ### Intellij Patch ###
175 | *.iml
176 |
177 |
178 | ### Eclipse ###
179 |
180 | .metadata
181 | bin/
182 | tmp/
183 | *.tmp
184 | *.bak
185 | *.swp
186 | *~.nib
187 | local.properties
188 | .settings/
189 | .loadpath
190 | .recommenders
191 |
192 | # Eclipse Core
193 | .project
194 |
195 | # External tool builders
196 | .externalToolBuilders/
197 |
198 | # Locally stored "Eclipse launch configurations"
199 | *.launch
200 |
201 | # PyDev specific (Python IDE for Eclipse)
202 | *.pydevproject
203 |
204 | # CDT-specific (C/C++ Development Tooling)
205 | .cproject
206 |
207 | # JDT-specific (Eclipse Java Development Tools)
208 | .classpath
209 |
210 | # Java annotation processor (APT)
211 | .factorypath
212 |
213 | # PDT-specific (PHP Development Tools)
214 | .buildpath
215 |
216 | # sbteclipse plugin
217 | .target
218 |
219 | # Tern plugin
220 | .tern-project
221 |
222 | # TeXlipse plugin
223 | .texlipse
224 |
225 | # STS (Spring Tool Suite)
226 | .springBeans
227 |
228 | # Code Recommenders
229 | .recommenders/
230 |
231 |
232 | ### Vagrant ###
233 | .vagrant/
234 |
235 |
236 | ### Ansible ###
237 | *.retry
238 |
239 | # Ignore Vagrant customization file
240 | Customfile
241 |
242 | # Ignore files persisted between VM rebuilds
243 | /home
244 |
245 | # Ignore Nugrant config
246 | /.vagrantuser
247 |
248 | ### Project specific ###
249 |
250 | # Ignore IntelliJ IDEA license key
251 | /idea.key
252 |
--------------------------------------------------------------------------------
/docs/_config.yml:
--------------------------------------------------------------------------------
1 | # Welcome to Jekyll!
2 | #
3 | # This config file is meant for settings that affect your entire site, values
4 | # which you are expected to set up once and rarely need to edit after that.
5 | # For technical reasons, this file is *NOT* reloaded automatically when you use
6 | # `jekyll serve`. If you change this file, please restart the server process.
7 |
8 | # Release information
9 | release:
10 | git_url: https://github.com/gantsign/development-environment.git
11 | list_url: https://github.com/gantsign/development-environment/releases
12 | version: '2.30.0'
13 |
14 | # Site Settings
15 | locale: en-GB
16 | title: GantSign EnV
17 | title_separator: '-'
18 | name: &name 'GantSign Ltd. Company No. 06109112 (registered in England)'
19 | description: &description 'A development environment for Java and Ansible built using Vagrant.'
20 |
21 | # The base hostname & protocol for your site e.g. "https://example.github.io"
22 | url: https://gantsign.github.io
23 |
24 | # The subpath of your site, e.g. "/blog"
25 | baseurl: /development-environment
26 | repository: gantsign/development-environment
27 |
28 | # Render all pages regardless of date
29 | future: true
30 |
31 | teaser: # filename of teaser fallback teaser image placed in /images/, .e.g. "500x300.png"
32 |
33 | # breadcrumbs: no # true, false (default)
34 |
35 | words_per_minute: 200
36 | atom_feed:
37 | path: # blank (default) uses feed.xml
38 |
39 | # Social Sharing
40 | twitter:
41 | username: &twitter 'gantsign'
42 | # For specifying social profiles
43 | # - https://developers.google.com/structured-data/customize/social-profiles
44 | social:
45 | type: Organization # Person or Organization (defaults to Person)
46 | name: GantSign Ltd. # If the user or organization name differs from the site's name
47 | links: # An array of links to social media profiles
48 | - 'https://twitter.com/gantsign'
49 |
50 | # Analytics
51 | analytics:
52 | provider : "google-universal" # false (default), "google", "google-universal", "custom"
53 | google:
54 | tracking_id : "UA-83612642-1"
55 |
56 |
57 | # Site Author
58 | author:
59 | name: GantSign Ltd.
60 | avatar: images/logo.png
61 | bio: Software Consultancy
62 | location: 'London, UK'
63 | links:
64 | - label: "Twitter"
65 | icon: "fab fa-fw fa-twitter-square"
66 | url: "https://twitter.com/gantsign"
67 | - label: "GitHub"
68 | icon: "fab fa-fw fa-github"
69 | url: "https://github.com/gantsign"
70 |
71 | # Site Footer
72 | footer:
73 | links:
74 | - label: "Twitter"
75 | icon: "fab fa-fw fa-twitter-square"
76 | url: "https://twitter.com/gantsign"
77 | - label: "GitHub"
78 | icon: "fab fa-fw fa-github"
79 | url: "https://github.com/gantsign"
80 |
81 | # Reading Files
82 | include:
83 | - .htaccess
84 | - _pages
85 | exclude:
86 | - '*.sublime-project'
87 | - '*.sublime-workspace'
88 | - vendor
89 | - .asset-cache
90 | - .bundle
91 | - .jekyll-assets-cache
92 | - .sass-cache
93 | - assets/js/plugins
94 | - assets/js/_main.js
95 | - assets/js/vendor
96 | - Capfile
97 | - CHANGELOG
98 | - config
99 | - Gemfile
100 | - Gruntfile.js
101 | - gulpfile.js
102 | - LICENSE
103 | - log
104 | - node_modules
105 | - package.json
106 | - Rakefile
107 | - README
108 | - tmp
109 | - '*.sh'
110 | keep_files:
111 | - .git
112 | - .svn
113 | encoding: utf-8
114 | markdown_ext: 'markdown,mkdown,mkdn,mkd,md'
115 |
116 |
117 | # Conversion
118 | markdown: kramdown
119 | highlighter: rouge
120 | lsi: no
121 | excerpt_separator: "\n\n"
122 | incremental: no
123 |
124 |
125 | # Markdown Processing
126 | kramdown:
127 | input: GFM
128 | hard_wrap: no
129 | auto_ids: yes
130 | footnote_nr: 1
131 | entity_output: as_char
132 | toc_levels: 1..6
133 | smart_quotes: 'lsquo,rsquo,ldquo,rdquo'
134 | enable_coderay: no
135 |
136 |
137 | # Collections
138 | collections:
139 | docs:
140 | output: yes
141 | permalink: /:collection/:path/
142 | recipes:
143 | output: yes
144 | permalink: /:collection/:path/
145 | pets:
146 | output: yes
147 | permalink: /:collection/:path/
148 | portfolio:
149 | output: yes
150 | permalink: /:collection/:path/
151 |
152 |
153 | # Defaults
154 | defaults:
155 | # _posts
156 | - scope:
157 | path: ''
158 | type: posts
159 | values:
160 | layout: single
161 | author_profile: yes
162 | read_time: yes
163 | comments: yes
164 | share: no
165 | related: no
166 | # _pages
167 | - scope:
168 | path: ''
169 | type: pages
170 | values:
171 | layout: single
172 | author_profile: yes
173 | # _docs
174 | - scope:
175 | path: ''
176 | type: docs
177 | values:
178 | layout: docs
179 | read_time: no
180 | author_profile: no
181 | share: no
182 | comments: no
183 | sidebar:
184 | nav: docs
185 |
186 |
187 | # Sass/SCSS
188 | sass:
189 | sass_dir: _sass
190 | style: compressed # http://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_style
191 |
192 |
193 | # Outputting
194 | permalink: /:categories/:title/
195 | # paginate: 5 # amount of posts to show
196 | # paginate_path: /page:num/
197 | timezone: Europe/London # http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
198 |
199 |
200 | # Plugins
201 | plugins:
202 | - jekyll-paginate
203 | - jekyll-sitemap
204 | - jekyll-gist
205 | - jekyll-feed
206 | - jemoji
207 |
208 | # mimic GitHub Pages with --safe
209 | whitelist:
210 | - jekyll-paginate
211 | - jekyll-sitemap
212 | - jekyll-gist
213 | - jekyll-feed
214 | - jemoji
215 |
216 | # HTML Compression
217 | # - http://jch.penibelst.de/
218 | compress_html:
219 | clippings: all
220 | ignore:
221 | envs: development
222 |
223 | # Include minimal-mistakes from Gemfile
224 | theme: minimal-mistakes-jekyll
225 |
--------------------------------------------------------------------------------
/docs/_docs/getting-started.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Getting started
3 | permalink: /docs/getting-started/
4 | description: >
5 | How to setup the development environment.
6 | numbered_headings: yes
7 | date: 2016-08-31T09:05:34+01:00
8 | modified: 2023-09-17T08:06:24+01:00
9 | ---
10 |
11 | The following instructions will guide you through the process of provisioning
12 | your local development environment using GantSign EnV.
13 |
14 | {% include inline_toc.html %}
15 |
16 | ## Install dependencies
17 |
18 | * Install Git [https://git-scm.com](https://git-scm.com)
19 | * Install Vagrant [https://www.vagrantup.com](https://www.vagrantup.com)
20 | * Install VirtualBox [https://www.virtualbox.org](https://www.virtualbox.org)
21 |
22 | ## Clone the project
23 |
24 | Clone the development environment repository.
25 |
26 | ```bash
27 | git clone {{ site.release.git_url }}
28 | ```
29 |
30 | ## Configuration
31 |
32 | User specific configuration is done through the
33 | [Nugrant](https://github.com/maoueh/nugrant) plugin for Vagrant.
34 |
35 | The Nugrant configuration file is located in the following two locations:
36 |
37 | * Your home folder (configuration shared between projects)
38 |
39 | `~/.vagrantuser`
40 |
41 | * The project folder (configuration specific to this clone of the project)
42 |
43 | `.vagrantuser` (you'll find a `.vagrantuser.example` file in the project
44 | directory)
45 |
46 | ### Proxy configuration
47 |
48 | If you're behind a firewall and need to access the web through a HTTP proxy
49 | there's a little extra config you need to do; if you have direct internet access
50 | you can skip this section.
51 |
52 | #### Host proxy config
53 |
54 | On the host machine, Vagrant needs to be able to access the internet to install
55 | plugins and download the base image for the virtual machine. To do this you need
56 | to set the following environment variable before running the `vagrant` command
57 | (replace the proxy host and port with the values for your network):
58 |
59 | ```bash
60 | SET https_proxy=proxy.example.com:3128
61 | ```
62 |
63 | Note: on Linux / Mac OS use `export` rather than `SET`.
64 |
65 | You'll need to reset the environment variable each time you open a new console
66 | window before you run `vagrant`; while there are ways of setting the environment
67 | variable permanently care should be taken as doing so may affect other
68 | applications.
69 |
70 | #### Client VM proxy config
71 |
72 | Add the following to the `.vagrantuser` file, either in the project root
73 | directory or your user home directory (replace the proxy host and port with the
74 | values for your network):
75 |
76 | ```yaml
77 | proxy:
78 | enabled: true
79 | http: 'http://proxy.example.com:3128/'
80 | https: 'http://proxy.example.com:3128/'
81 | ftp: 'http://proxy.example.com:3128/'
82 | no_proxy: 'localhost,127.0.0.1'
83 | ```
84 |
85 | For more proxy configuration options, including proxy auto-config support,
86 | see the [configuration]({{ '/docs/configuration' | relative_url }})
87 | documentation.
88 |
89 | ### Advanced configuration
90 |
91 | For more configuration options, including configuring regional preferences, view
92 | the [configuration]({{ '/docs/configuration' | relative_url }}) documentation.
93 |
94 | ## Run Vagrant
95 |
96 | All that's left is to run Vagrant to provision the virtual machine.
97 |
98 | Run the following command from the project root directory:
99 |
100 | ```bash
101 | vagrant up
102 | ```
103 |
104 | Once provisioning is complete continue to
105 | [Change your password](#change-your-password).
106 |
107 | ### Troubleshooting
108 |
109 | #### HTTP errors
110 |
111 | It's relatively common for provisioning to fail due to transient HTTP failures
112 | (e.g. connection failures, timeouts, connection reset by peer); this is
113 | particularly true the first time provisioning is run as everything has to be
114 | downloaded.
115 |
116 | This project will cache most of the downloads on your local machine so you'll
117 | find provisioning is much faster and more reliable from the second time it is
118 | run.
119 |
120 | If provisioning fails partway through, you can restart provisioning by running
121 | the following command from the project root directory:
122 |
123 | ```bash
124 | vagrant provision
125 | ```
126 |
127 | If provisioning fails leaving the virtual machine in an unrecoverable state, you
128 | can run the following commands from the project root directory, to rebuild the
129 | virtual machine from scratch:
130 |
131 | ```bash
132 | vagrant destroy
133 | vagrant up
134 | ```
135 |
136 | #### Issues with VirtualBox GuestAdditions versions
137 |
138 | If you get the following error message:
139 |
140 | ```
141 | Got different reports about installed GuestAdditions version:
142 | Virtualbox on your host claims: 5.2.8
143 | VBoxService inside the vm claims: 6.0.12
144 | Going on, assuming VBoxService is correct...
145 | [default] GuestAdditions seems to be installed (6.0.12) correctly, but not running.
146 | Got different reports about installed GuestAdditions version:
147 | Virtualbox on your host claims: 5.2.8
148 | VBoxService inside the vm claims: 6.0.12
149 | Going on, assuming VBoxService is correct...
150 | Got different reports about installed GuestAdditions version:
151 | Virtualbox on your host claims: 5.2.8
152 | VBoxService inside the vm claims: 6.0.12
153 | Going on, assuming VBoxService is correct...
154 | ```
155 |
156 | Manually reinstall the guest additions by running the following in the
157 | project root:
158 |
159 | ```bash
160 | vagrant vbguest --do install
161 | ```
162 |
163 | ## Change your password
164 |
165 | Once provisioning is complete you need to set your password. Login using the
166 | username `dev`. You'll then be prompted to set your password.
167 |
168 | Pick a strong password and don't reuse another password (e.g. don't use your
169 | Windows password). This password will be used to secure access to saved
170 | passwords in your browser, SSH key passwords and Git credentials etc.
171 |
172 | The password needs to be at least 16 characters long and you cannot repeat the
173 | same character more than 3 times in a row. Prefer long easy to remember phrases
174 | over difficult to remember random passwords.
175 |
176 | ## Stopping the virtual machine
177 |
178 | It's essential you use Vagrant to stop the VM rather than shutting down via the
179 | OS or the VirtualBox controls; failure to shutdown using Vagrant may result in
180 | file loss.
181 |
182 | To shut down the VM using Vagrant the following command from the project root
183 | directory:
184 |
185 | ```bash
186 | vagrant halt
187 | ```
188 |
--------------------------------------------------------------------------------
/docs/_docs/upgrade.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Upgrade
3 | permalink: /docs/upgrade/
4 | description: >
5 | How to upgrade your development environment to the latest release.
6 | numbered_headings: yes
7 | date: 2018-10-12T13:07:23+01:00
8 | modified: 2023-09-17T08:09:35+01:00
9 | ---
10 |
11 | The following instructions will guide you through the process of upgrading your
12 | local GantSign EnV development environment to the latest release.
13 |
14 | {% include inline_toc.html %}
15 |
16 | ## Backup any essential files
17 |
18 | The development environment is designed to backup and restore projects in your
19 | workspace and selected configuration files. But there are exclusions (e.g. built
20 | artifacts) and there is always the risk that the backup/restore process will
21 | fail.
22 |
23 | We recommend you push all your changes, and manually backup any essential files,
24 | before re-provisioning your development-environment. We accept no responsibility
25 | for lost files.
26 |
27 | ## Halt the development environment
28 |
29 | If the development environment is running, shut it down by running the following
30 | on the host (from the project root directory):
31 |
32 | ```
33 | vagrant halt
34 | ```
35 |
36 | ## Pull the changes for the latest release
37 |
38 | Pull the latest changes by running the following on the host (from the project
39 | root directory):
40 |
41 | ```bash
42 | git pull --rebase origin {{ site.release.version }}
43 | ```
44 |
45 | ## Re-provision the development environment
46 |
47 | Re-provision the development environment by running the following commands on
48 | the host (from the project root directory):
49 |
50 | ```bash
51 | vagrant destroy && vagrant up
52 | ```
53 |
54 | Once provisioning is complete continue to
55 | [Change your password](#change-your-password).
56 |
57 | ### Troubleshooting
58 |
59 | #### HTTP errors
60 |
61 | It's relatively common for provisioning to fail due to transient HTTP failures
62 | (e.g. connection failures, timeouts, connection reset by peer); this is
63 | particularly true the first time provisioning is run as everything has to be
64 | downloaded.
65 |
66 | This project will cache most of the downloads on your local machine so you'll
67 | find provisioning is much faster and more reliable from the second time it is
68 | run.
69 |
70 | If provisioning fails partway through, you can restart provisioning by running
71 | the following command from the project root directory:
72 |
73 | ```bash
74 | vagrant provision
75 | ```
76 |
77 | If provisioning fails leaving the virtual machine in an unrecoverable state, you
78 | can run the following commands from the project root directory, to rebuild the
79 | virtual machine from scratch:
80 |
81 | ```bash
82 | vagrant destroy
83 | vagrant up
84 | ```
85 |
86 | #### Out of disk space
87 |
88 | We cache most of the downloads (so they can be reused for re-provisioning the
89 | VM). Provisioning multiple times over months will mean the cache will fill with
90 | multiple versions of the software being installed. Eventually, this leads to out
91 | of disk space errors during re-provisioning. To resolve these errors you need to
92 | purge the download cache. To purge the download cache you need to login to the
93 | VirtualBox VM (username: `vagrant`, password: `vagrant`) and run the following
94 | commands:
95 |
96 | ```bash
97 | rm -rf /var/persistent/usr/local/src/ansible/data/*
98 | # Workaround for /bin/rm: cannot execute [Argument list too long]
99 | for f in /var/persistent/var/cache/apt/archives/*.deb; do sudo rm -f "$f"; done
100 | ```
101 |
102 | Now go back to the console where you run Vagrant and run the following to retry
103 | provisioning:
104 |
105 | ```bash
106 | vagrant provision
107 | ```
108 |
109 | Be aware purging the download cache will mean all the software will need to be
110 | downloaded again. So the first time you provision the VM after purging the
111 | caches will take longer and be more susceptible to HTTP errors.
112 |
113 | #### Issues with VirtualBox GuestAdditions versions
114 |
115 | If you get the following error message:
116 |
117 | ```
118 | Got different reports about installed GuestAdditions version:
119 | Virtualbox on your host claims: 5.2.8
120 | VBoxService inside the vm claims: 6.0.12
121 | Going on, assuming VBoxService is correct...
122 | [default] GuestAdditions seems to be installed (6.0.12) correctly, but not running.
123 | Got different reports about installed GuestAdditions version:
124 | Virtualbox on your host claims: 5.2.8
125 | VBoxService inside the vm claims: 6.0.12
126 | Going on, assuming VBoxService is correct...
127 | Got different reports about installed GuestAdditions version:
128 | Virtualbox on your host claims: 5.2.8
129 | VBoxService inside the vm claims: 6.0.12
130 | Going on, assuming VBoxService is correct...
131 | ```
132 |
133 | Manually reinstall the guest additions by running the following in the
134 | project root:
135 |
136 | ```bash
137 | vagrant vbguest --do install
138 | ```
139 |
140 | #### Unable to save credentials
141 |
142 | Your Unix password may get out of sync with the password for your GNOME Keyring
143 | when you rebuild your development-environment
144 | or if you reset the password without specifying the current password
145 | (e.g. using `sudo passwd dev`).
146 |
147 | Once your GNOME Keyring password is out of sync the keyring won't unlock when
148 | you login. You'll be unable use save credentials or save new credentials (e.g.
149 | in Google Chrome or for your SSH keys).
150 |
151 | If you remember the password used by the GNOME Keyring (e.g. the last password
152 | before you re-provisioned the development environment), you can change the Unix
153 | password to match, then logout and log back in and your passwords should work
154 | again.
155 |
156 | If you don't remember the password for the GNOME Keyring (or the password
157 | doesn't work) you'll need to delete your keyring and create a new one (any saved
158 | passwords will be lost).
159 |
160 | To delete your keyring run the following from the development environment
161 | terminal:
162 |
163 | ```bash
164 | cp ~/.local/share/keyrings/login.keyring ~/.local/share/keyrings/login.keyring.bak
165 | cp ~/.local/share/keyrings/user.keystore ~/.local/share/keyrings/user.keystore.bak
166 |
167 | rm ~/.local/share/keyrings/login.keyring
168 | rm ~/.local/share/keyrings/user.keystore
169 | ```
170 |
171 | #### SSH key not loading
172 |
173 | If your SSH key isn't loading it may be down to the file permissions. If your
174 | key is readable by other you will get the following error when trying to load
175 | key:
176 |
177 | ```
178 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
179 | @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
180 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
181 | Permissions 0644 for '/home/dev/.ssh/id_rsa' are too open.
182 | It is required that your private key files are NOT accessible by others.
183 | This private key will be ignored.
184 | ```
185 |
186 | To fix the file permissions run the following command from the terminal in the
187 | client VM:
188 |
189 | ```bash
190 | chmod 'go-rwx' ~/.ssh/*
191 | ```
192 |
193 | After this is complete logout and log back in so your key is loaded.
194 |
195 | ## Change your password
196 |
197 | Once provisioning is complete you need to set your password. Login using the
198 | username `dev`. You'll then be prompted to set
199 | your password. **Important:** set the password to the password you were
200 | using before you re-provisioned the development environment. This is necessary
201 | to restore access to all your saved credentials. Once you've set your
202 | password you need to logout and log back in (with the new password) for your
203 | keyring to be unlocked.
204 |
--------------------------------------------------------------------------------
/docs/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | Ascii85 (1.1.0)
5 | activesupport (7.1.3)
6 | base64
7 | bigdecimal
8 | concurrent-ruby (~> 1.0, >= 1.0.2)
9 | connection_pool (>= 2.2.5)
10 | drb
11 | i18n (>= 1.6, < 2)
12 | minitest (>= 5.1)
13 | mutex_m
14 | tzinfo (~> 2.0)
15 | addressable (2.8.6)
16 | public_suffix (>= 2.0.2, < 6.0)
17 | afm (0.2.2)
18 | async (2.6.4)
19 | console (~> 1.10)
20 | fiber-annotation
21 | io-event (~> 1.1)
22 | timers (~> 4.1)
23 | base64 (0.2.0)
24 | bigdecimal (3.1.6)
25 | coffee-script (2.4.1)
26 | coffee-script-source
27 | execjs
28 | coffee-script-source (1.12.2)
29 | colorator (1.1.0)
30 | commonmarker (0.23.10)
31 | concurrent-ruby (1.2.3)
32 | connection_pool (2.4.1)
33 | console (1.23.2)
34 | fiber-annotation
35 | fiber-local
36 | dnsruby (1.70.0)
37 | simpleidn (~> 0.2.1)
38 | drb (2.2.0)
39 | ruby2_keywords
40 | em-websocket (0.5.3)
41 | eventmachine (>= 0.12.9)
42 | http_parser.rb (~> 0)
43 | ethon (0.16.0)
44 | ffi (>= 1.15.0)
45 | eventmachine (1.2.7)
46 | execjs (2.9.1)
47 | faraday (2.9.0)
48 | faraday-net_http (>= 2.0, < 3.2)
49 | faraday-net_http (3.1.0)
50 | net-http
51 | ffi (1.16.3)
52 | fiber-annotation (0.2.0)
53 | fiber-local (1.0.0)
54 | forwardable-extended (2.6.0)
55 | gemoji (4.1.0)
56 | github-pages (231)
57 | github-pages-health-check (= 1.18.2)
58 | jekyll (= 3.9.5)
59 | jekyll-avatar (= 0.8.0)
60 | jekyll-coffeescript (= 1.2.2)
61 | jekyll-commonmark-ghpages (= 0.4.0)
62 | jekyll-default-layout (= 0.1.5)
63 | jekyll-feed (= 0.17.0)
64 | jekyll-gist (= 1.5.0)
65 | jekyll-github-metadata (= 2.16.1)
66 | jekyll-include-cache (= 0.2.1)
67 | jekyll-mentions (= 1.6.0)
68 | jekyll-optional-front-matter (= 0.3.2)
69 | jekyll-paginate (= 1.1.0)
70 | jekyll-readme-index (= 0.3.0)
71 | jekyll-redirect-from (= 0.16.0)
72 | jekyll-relative-links (= 0.6.1)
73 | jekyll-remote-theme (= 0.4.3)
74 | jekyll-sass-converter (= 1.5.2)
75 | jekyll-seo-tag (= 2.8.0)
76 | jekyll-sitemap (= 1.4.0)
77 | jekyll-swiss (= 1.0.0)
78 | jekyll-theme-architect (= 0.2.0)
79 | jekyll-theme-cayman (= 0.2.0)
80 | jekyll-theme-dinky (= 0.2.0)
81 | jekyll-theme-hacker (= 0.2.0)
82 | jekyll-theme-leap-day (= 0.2.0)
83 | jekyll-theme-merlot (= 0.2.0)
84 | jekyll-theme-midnight (= 0.2.0)
85 | jekyll-theme-minimal (= 0.2.0)
86 | jekyll-theme-modernist (= 0.2.0)
87 | jekyll-theme-primer (= 0.6.0)
88 | jekyll-theme-slate (= 0.2.0)
89 | jekyll-theme-tactile (= 0.2.0)
90 | jekyll-theme-time-machine (= 0.2.0)
91 | jekyll-titles-from-headings (= 0.5.3)
92 | jemoji (= 0.13.0)
93 | kramdown (= 2.4.0)
94 | kramdown-parser-gfm (= 1.1.0)
95 | liquid (= 4.0.4)
96 | mercenary (~> 0.3)
97 | minima (= 2.5.1)
98 | nokogiri (>= 1.13.6, < 2.0)
99 | rouge (= 3.30.0)
100 | terminal-table (~> 1.4)
101 | github-pages-health-check (1.18.2)
102 | addressable (~> 2.3)
103 | dnsruby (~> 1.60)
104 | octokit (>= 4, < 8)
105 | public_suffix (>= 3.0, < 6.0)
106 | typhoeus (~> 1.3)
107 | hashery (2.1.2)
108 | html-pipeline (2.14.3)
109 | activesupport (>= 2)
110 | nokogiri (>= 1.4)
111 | html-proofer (5.0.8)
112 | addressable (~> 2.3)
113 | async (~> 2.1)
114 | nokogiri (~> 1.13)
115 | pdf-reader (~> 2.11)
116 | rainbow (~> 3.0)
117 | typhoeus (~> 1.3)
118 | yell (~> 2.0)
119 | zeitwerk (~> 2.5)
120 | http_parser.rb (0.8.0)
121 | i18n (1.14.1)
122 | concurrent-ruby (~> 1.0)
123 | io-event (1.3.2)
124 | jekyll (3.9.5)
125 | addressable (~> 2.4)
126 | colorator (~> 1.0)
127 | em-websocket (~> 0.5)
128 | i18n (>= 0.7, < 2)
129 | jekyll-sass-converter (~> 1.0)
130 | jekyll-watch (~> 2.0)
131 | kramdown (>= 1.17, < 3)
132 | liquid (~> 4.0)
133 | mercenary (~> 0.3.3)
134 | pathutil (~> 0.9)
135 | rouge (>= 1.7, < 4)
136 | safe_yaml (~> 1.0)
137 | jekyll-avatar (0.8.0)
138 | jekyll (>= 3.0, < 5.0)
139 | jekyll-coffeescript (1.2.2)
140 | coffee-script (~> 2.2)
141 | coffee-script-source (~> 1.12)
142 | jekyll-commonmark (1.4.0)
143 | commonmarker (~> 0.22)
144 | jekyll-commonmark-ghpages (0.4.0)
145 | commonmarker (~> 0.23.7)
146 | jekyll (~> 3.9.0)
147 | jekyll-commonmark (~> 1.4.0)
148 | rouge (>= 2.0, < 5.0)
149 | jekyll-default-layout (0.1.5)
150 | jekyll (>= 3.0, < 5.0)
151 | jekyll-feed (0.17.0)
152 | jekyll (>= 3.7, < 5.0)
153 | jekyll-gist (1.5.0)
154 | octokit (~> 4.2)
155 | jekyll-github-metadata (2.16.1)
156 | jekyll (>= 3.4, < 5.0)
157 | octokit (>= 4, < 7, != 4.4.0)
158 | jekyll-include-cache (0.2.1)
159 | jekyll (>= 3.7, < 5.0)
160 | jekyll-mentions (1.6.0)
161 | html-pipeline (~> 2.3)
162 | jekyll (>= 3.7, < 5.0)
163 | jekyll-optional-front-matter (0.3.2)
164 | jekyll (>= 3.0, < 5.0)
165 | jekyll-paginate (1.1.0)
166 | jekyll-readme-index (0.3.0)
167 | jekyll (>= 3.0, < 5.0)
168 | jekyll-redirect-from (0.16.0)
169 | jekyll (>= 3.3, < 5.0)
170 | jekyll-relative-links (0.6.1)
171 | jekyll (>= 3.3, < 5.0)
172 | jekyll-remote-theme (0.4.3)
173 | addressable (~> 2.0)
174 | jekyll (>= 3.5, < 5.0)
175 | jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
176 | rubyzip (>= 1.3.0, < 3.0)
177 | jekyll-sass-converter (1.5.2)
178 | sass (~> 3.4)
179 | jekyll-seo-tag (2.8.0)
180 | jekyll (>= 3.8, < 5.0)
181 | jekyll-sitemap (1.4.0)
182 | jekyll (>= 3.7, < 5.0)
183 | jekyll-swiss (1.0.0)
184 | jekyll-theme-architect (0.2.0)
185 | jekyll (> 3.5, < 5.0)
186 | jekyll-seo-tag (~> 2.0)
187 | jekyll-theme-cayman (0.2.0)
188 | jekyll (> 3.5, < 5.0)
189 | jekyll-seo-tag (~> 2.0)
190 | jekyll-theme-dinky (0.2.0)
191 | jekyll (> 3.5, < 5.0)
192 | jekyll-seo-tag (~> 2.0)
193 | jekyll-theme-hacker (0.2.0)
194 | jekyll (> 3.5, < 5.0)
195 | jekyll-seo-tag (~> 2.0)
196 | jekyll-theme-leap-day (0.2.0)
197 | jekyll (> 3.5, < 5.0)
198 | jekyll-seo-tag (~> 2.0)
199 | jekyll-theme-merlot (0.2.0)
200 | jekyll (> 3.5, < 5.0)
201 | jekyll-seo-tag (~> 2.0)
202 | jekyll-theme-midnight (0.2.0)
203 | jekyll (> 3.5, < 5.0)
204 | jekyll-seo-tag (~> 2.0)
205 | jekyll-theme-minimal (0.2.0)
206 | jekyll (> 3.5, < 5.0)
207 | jekyll-seo-tag (~> 2.0)
208 | jekyll-theme-modernist (0.2.0)
209 | jekyll (> 3.5, < 5.0)
210 | jekyll-seo-tag (~> 2.0)
211 | jekyll-theme-primer (0.6.0)
212 | jekyll (> 3.5, < 5.0)
213 | jekyll-github-metadata (~> 2.9)
214 | jekyll-seo-tag (~> 2.0)
215 | jekyll-theme-slate (0.2.0)
216 | jekyll (> 3.5, < 5.0)
217 | jekyll-seo-tag (~> 2.0)
218 | jekyll-theme-tactile (0.2.0)
219 | jekyll (> 3.5, < 5.0)
220 | jekyll-seo-tag (~> 2.0)
221 | jekyll-theme-time-machine (0.2.0)
222 | jekyll (> 3.5, < 5.0)
223 | jekyll-seo-tag (~> 2.0)
224 | jekyll-titles-from-headings (0.5.3)
225 | jekyll (>= 3.3, < 5.0)
226 | jekyll-watch (2.2.1)
227 | listen (~> 3.0)
228 | jemoji (0.13.0)
229 | gemoji (>= 3, < 5)
230 | html-pipeline (~> 2.2)
231 | jekyll (>= 3.0, < 5.0)
232 | kramdown (2.4.0)
233 | rexml
234 | kramdown-parser-gfm (1.1.0)
235 | kramdown (~> 2.0)
236 | liquid (4.0.4)
237 | listen (3.8.0)
238 | rb-fsevent (~> 0.10, >= 0.10.3)
239 | rb-inotify (~> 0.9, >= 0.9.10)
240 | mercenary (0.3.6)
241 | minima (2.5.1)
242 | jekyll (>= 3.5, < 5.0)
243 | jekyll-feed (~> 0.9)
244 | jekyll-seo-tag (~> 2.1)
245 | minimal-mistakes-jekyll (4.24.0)
246 | jekyll (>= 3.7, < 5.0)
247 | jekyll-feed (~> 0.1)
248 | jekyll-gist (~> 1.5)
249 | jekyll-include-cache (~> 0.1)
250 | jekyll-paginate (~> 1.1)
251 | jekyll-sitemap (~> 1.3)
252 | minitest (5.22.2)
253 | mutex_m (0.2.0)
254 | net-http (0.4.1)
255 | uri
256 | nokogiri (1.16.2-x86_64-linux)
257 | racc (~> 1.4)
258 | octokit (4.25.1)
259 | faraday (>= 1, < 3)
260 | sawyer (~> 0.9)
261 | pathutil (0.16.2)
262 | forwardable-extended (~> 2.6)
263 | pdf-reader (2.11.0)
264 | Ascii85 (~> 1.0)
265 | afm (~> 0.2.1)
266 | hashery (~> 2.0)
267 | ruby-rc4
268 | ttfunk
269 | public_suffix (5.0.4)
270 | racc (1.7.3)
271 | rainbow (3.1.1)
272 | rb-fsevent (0.11.2)
273 | rb-inotify (0.10.1)
274 | ffi (~> 1.0)
275 | rexml (3.2.6)
276 | rouge (3.30.0)
277 | ruby-rc4 (0.1.5)
278 | ruby2_keywords (0.0.5)
279 | rubyzip (2.3.2)
280 | safe_yaml (1.0.5)
281 | sass (3.7.4)
282 | sass-listen (~> 4.0.0)
283 | sass-listen (4.0.0)
284 | rb-fsevent (~> 0.9, >= 0.9.4)
285 | rb-inotify (~> 0.9, >= 0.9.7)
286 | sawyer (0.9.2)
287 | addressable (>= 2.3.5)
288 | faraday (>= 0.17.3, < 3)
289 | simpleidn (0.2.1)
290 | unf (~> 0.1.4)
291 | terminal-table (1.8.0)
292 | unicode-display_width (~> 1.1, >= 1.1.1)
293 | timers (4.3.5)
294 | ttfunk (1.7.0)
295 | typhoeus (1.4.1)
296 | ethon (>= 0.9.0)
297 | tzinfo (2.0.6)
298 | concurrent-ruby (~> 1.0)
299 | unf (0.1.4)
300 | unf_ext
301 | unf_ext (0.0.9.1)
302 | unicode-display_width (1.8.0)
303 | uri (0.13.0)
304 | webrick (1.8.1)
305 | yell (2.2.2)
306 | zeitwerk (2.6.11)
307 |
308 | PLATFORMS
309 | x86_64-linux
310 | x86_64-linux-musl
311 |
312 | DEPENDENCIES
313 | github-pages (= 231)
314 | html-proofer (= 5.0.8)
315 | minimal-mistakes-jekyll (= 4.24.0)
316 | webrick (= 1.8.1)
317 |
318 | BUNDLED WITH
319 | 2.3.22
320 |
--------------------------------------------------------------------------------
/docs/_posts/2018-10-15-2.0.0-release.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Version 2.0.0 released
3 | categories:
4 | - news
5 | tags:
6 | - release
7 | description: >
8 | Version 2.0.0 of this project has been released.
9 | excerpt: >
10 | Major release with many changes, read for details...
11 | read_time: no
12 | date: 2018-10-15T19:18:26+01:00
13 | modified: 2022-01-03T19:53:24+00:00
14 | ---
15 |
16 | ## Release highlights
17 |
18 | ### Upgraded to Ubuntu Bionic Beaver
19 |
20 | Ubuntu [Bionic Beaver](https://wiki.ubuntu.com/BionicBeaver/ReleaseNotes) is the
21 | latest LTS release of Ubuntu.
22 |
23 | The first thing you'll likely notice is the Gnome desktop has replaced Unity
24 | as the standard Ubuntu desktop. We've also dropped the option of using the Xfce
25 | desktop for your development environment. While you no longer have a choice of
26 | desktops you can now
27 | [configure the placement]({{ '/docs/features/#choice-of-dock-position' | relative_url }})
28 | of the dock.
29 |
30 | Apart from that you'll notice newer versions of popular packages, see the
31 | Ubuntu Bionic Beaver
32 | [release notes](https://wiki.ubuntu.com/BionicBeaver/ReleaseNotes) for details.
33 |
34 | ### Improved Java support
35 |
36 | * Added [SDKMAN!]({{ '/docs/features/#sdkman' | relative_url }}) Software
37 | Development Kit Manager
38 | * Java 11 is now the default JDK (Java 8 is still available)
39 | * Use SDKMAN! to switch Java versions e.g.
40 | * `sdk use java 8`
41 | * `sdk use java 11`
42 | * Added new GantSign
43 | [code style]({{ '/docs/features/#intellij-code-style' | relative_url }})
44 | for IntelliJ IDE
45 |
46 | Note: while the new GantSign code style is the default, we recommend you
47 | add the code style configuration `.idea/codeStyles/*` to version control
48 | for each of your projects. It's wise to copy the code style from the IDE to
49 | the project so it doesn't change unintentionally and all developers have the
50 | same configuration.
51 |
52 | * Added GantSign
53 | [inspection profile]({{ '/docs/features/#intellij-inspection-profile' | relative_url }})
54 | for IntelliJ IDEA
55 |
56 | Note: while the new GantSign inspection profile is the default, we recommend
57 | you add the inspection profile configuration `.idea/inspectionProfiles/*` to
58 | version control for each of your projects. It's wise to copy the inspection
59 | profile from the IDE to the project so it doesn't change unintentionally and
60 | all developers have the same configuration. The GantSign inspection profile
61 | is optimized for greenfield projects, for existing projects you may want to
62 | use the default IntelliJ inspection profile instead.
63 |
64 | * Added
65 | [LogSupport2 plugin](https://plugins.jetbrains.com/plugin/9417-log-support-2)
66 | for IntelliJ IDEA
67 |
68 | ### Improved Python support
69 |
70 | * Added [Pyenv]({{ '/docs/features/#pyenv-version-manager' | relative_url }})
71 | Python version manager
72 | * Added [Pipenv]({{ '/docs/features/#pipenv-package-manager' | relative_url }})
73 | Python package manager with Virtualenv support
74 | * Added
75 | [Python plugin]({{ '/docs/features/#python-plugin-for-intellij-idea' | relative_url }})
76 | for IntelliJ IDEA
77 |
78 | ### Improved Kubernetes support
79 |
80 | * Added [Minikube]({{ '/docs/features/#minikube' | relative_url }}) for creating
81 | a local Kubernetes cluster
82 | * Added Kops for creating
83 | production grade Kubernates clusters
84 | * Added [Helm]({{ '/docs/features/#helm' | relative_url }}) the Kubernetes
85 | package manager
86 | * Added [Kompose]({{ '/docs/features/#kompose' | relative_url }}) for using
87 | Docker Compose files with Kubernetes
88 |
89 | ### Improved Zsh support
90 |
91 | * Added [zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions)
92 | makes suggestions based on previously executed commands
93 | * Added
94 | [syntax-highlighting](https://github.com/zsh-users/zsh-syntax-highlighting)
95 | syntax highlighting for shell commands
96 | * Added [Antigen]({{ '/docs/features/#zim' | relative_url }}) package
97 | manager for Zsh
98 |
99 | ### Improved tab-completion support
100 |
101 | * Ubuntu Bionic Beaver comes with newer package versions, some with improved Zsh
102 | support
103 | * Added tab-completion for more commands
104 | * bat
105 | * ctop
106 | * fd
107 | * gradle
108 | * helm
109 | * httpie
110 | * hub
111 | * kompose
112 | * kops
113 | * kubeadm
114 | * kubectl
115 | * moleculew
116 | * npm
117 | * pip
118 | * pipenv
119 | * pyenv
120 | * sdkman
121 | * yarn
122 |
123 | ### Improved Git support
124 |
125 | * Added [hub]({{ '/docs/features/#github-cli' | relative_url }}) wrapper for Git with
126 | additional features for GitHub
127 | * Added
128 | [Git Credential Manager for Mac and Linux]({{ '/docs/features/#git-credential-manager' | relative_url }})
129 | * Added new Git aliases
130 |
131 | * Checkout an existing branch
132 |
133 | `git co` ≡ `git checkout`
134 |
135 | * Create a new branch
136 |
137 | `git cb` ≡ `git checkout -b`
138 |
139 | * Amend the last commit and change the commit message
140 |
141 | `git ca` ≡ `git commit --amend`
142 |
143 | * Amend the last commit without changing the commit message
144 |
145 | `git cane` ≡ `git commit --amend --no-edit`
146 |
147 | * Rebase the current branch onto `origin/develop`
148 |
149 | `git rod` ≡ `git rebase origin/develop`
150 |
151 | * Push the current branch to `origin HEAD`
152 |
153 | `git po` ≡ `git push origin HEAD`
154 |
155 | * Force push the current branch to `origin HEAD`
156 |
157 | `git pof` ≡ `git push origin HEAD --force`
158 |
159 | * Switch to the `master` branch pull changes and prune remote branches
160 |
161 | `git cmp` ≡ `git checkout master && git pull -p`
162 |
163 | * Switch to the `develop` branch pull changes and prune remote branches
164 |
165 | `git cdp` ≡ `git checkout develop && git pull -p`
166 |
167 | * Pop the most recent stash
168 |
169 | `git pop` ≡ `git stash pop`
170 |
171 | * Reformat the recent changes as Markdown release notes
172 |
173 | `git release-notes` ≡ `git log --color --pretty=format:'%s%Cred%d%Creset' --decorate | sed -E 's/(.*) \\((\\#[0-9]+)\\)/* \\2: \\1/' | tac -`
174 |
175 | * [View all Git aliases]({{ '/docs/features/#git-aliases' | relative_url }})
176 |
177 | * Added configuration for
178 | [setting the Git user name and email address]({{ '/docs/configuration/#git-user-name-and-email-address' | relative_url }})
179 | during provisioning
180 |
181 | ### More command line tools
182 |
183 | * [bat]({{ '/docs/features/#bat' | relative_url }}) more advanced alternative to
184 | `cat`
185 | * [ctop]({{ '/docs/features/#ctop' | relative_url }}) `top` like tool for Docker
186 | containers
187 | * [fd]({{ '/docs/features/#fd' | relative_url }}) intuitive alternative to
188 | `find`
189 |
190 | ### Improved credential handling
191 |
192 | Version 1 of this development environment was configured to auto-login. The
193 | problem with this approach was it prevented the Gnome Keyring from persisting
194 | credentials. This meant you had to put in you Git credentials every time you
195 | reloaded the VM. It also causes problems for apps such as Google Chrome that
196 | expect to be able to store credentials.
197 |
198 | Version 2 of this development environment removes the auto-login feature. You
199 | now have to enter a password to login the development environment, but most
200 | other credentials can be persisted between sessions. For security, you're forced
201 | to change the password on first use.
202 |
203 | ### Improved backup & restore
204 |
205 | The original backup mechanism (using Unison file synchronization) was prone to
206 | failure. For version 2 we're using a
207 | [new backup mechanism]({{ '/docs/features/#file-backup--restore-between-rebuilds' | relative_url }})
208 | using rsync.
209 |
210 | ### Removed software
211 |
212 | * [Atom](https://atom.io)
213 |
214 | These days Visual Studio Code is as good or better for practically
215 | everything.
216 |
217 | * [Molecule](https://molecule.readthedocs.io)
218 |
219 | We recommend using
220 | [Molecule Wrapper](https://github.com/gantsign/molecule-wrapper) instead of
221 | installing Molecule as a system package.
222 |
223 | ### Changed minimum requirements
224 |
225 | You need to upgrade to at least [Vagrant](https://www.vagrantup.com) `2.1.0`
226 | before you can provision a development-environment (follow the upgrade procedure
227 | below).
228 |
229 | ## Upgrade procedure
230 |
231 | ### Preparing your existing VM for upgrade
232 |
233 | #### Purge the download cache
234 |
235 | While not strictly required, it's best to clean out all the old Ubuntu Xenial
236 | packages before upgrading to free up disk space.
237 |
238 | Bring up the development environment by running the following on the host:
239 |
240 | ```bash
241 | vagrant up
242 | ```
243 |
244 | From the development environment terminal run:
245 |
246 | ```bash
247 | sudo rm -rf /var/persistent/usr/local/src/ansible/data/*
248 | # Workaround for /bin/rm: cannot execute [Argument list too long]
249 | for f in /var/persistent/var/cache/apt/archives/*.deb; do sudo rm -f "$f"; done
250 | ```
251 |
252 | ### Upgrade to the latest version of Vagrant
253 |
254 | Download the latest version of Vagrant from
255 | [https://www.vagrantup.com](https://www.vagrantup.com). Uninstall your current
256 | version of Vagrant then install then reboot. Remove any lingering parts of the
257 | old installation under `C:\Program Files\HashiCorp\Vagrant`. Then
258 | reinstall Vagrant. While it should be possible to upgrade Vagrant without
259 | uninstalling, it fails when you have the Vagrant Triggers plugin installed (it
260 | conflicts with the native triggers feature in recent versions of Vagrant).
261 |
262 | ### Update the provisioning scripts
263 |
264 | From the host run:
265 |
266 | ```bash
267 | git fetch && git rebase origin/2.0.0
268 | ```
269 |
270 | ### Re-provision the development environment
271 |
272 | From the host run:
273 |
274 | ```bash
275 | vagrant destroy && vagrant up
276 | ```
277 |
278 | If there are any problems follow the
279 | [troubleshooting advice]({{ '/docs/upgrade/#troubleshooting' | relative_url }}).
280 |
281 | ## Change your password
282 |
283 | Once provisioning is complete you need to change your password. Login using the
284 | username `vagrant` and password `vagrant`. You'll then be prompted to change
285 | your password.
286 |
287 | Pick a strong password and don't reuse another password (e.g. don't use your
288 | Windows password). This password will be used to secure access to saved
289 | passwords in your browser, SSH key passwords and Git credentials etc.
290 |
291 | The password needs to be at least 16 characters long and you cannot repeat the
292 | same character more than 3 times in a row. Prefer long easy to remember phrases
293 | over difficult to remember random passwords.
294 |
295 | **Important:** you need to complete this procedure before you stop/reload the
296 | VM.
297 |
298 | ## Fix SSH key permissions
299 |
300 | The version of SSH that comes with Ubuntu Bionic will not load an SSH key if
301 | it's readable by other users. Run the following command from the terminal in the
302 | client VM to fix the file permissions:
303 |
304 | ```bash
305 | chmod 'go-rwx' ~/.ssh/*
306 | ```
307 |
308 | After this is complete logout and log back in so your key is loaded.
309 |
310 | ## Full change list
311 |
312 | For a full list of changes view the
313 | [release notes](https://github.com/gantsign/development-environment/releases/tag/2.0.0).
314 |
--------------------------------------------------------------------------------
/docs/_docs/configuration.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Configuration
3 | permalink: /docs/configuration/
4 | description: >
5 | Instructions for how to configure your development environment.
6 | numbered_headings: yes
7 | date: 2016-09-02T14:47:02+01:00
8 | modified: 2023-09-03T12:50:13+00:00
9 | ---
10 |
11 | The goal of this project is to make it easy to build your development
12 | environment in a reliable and reproducible way.
13 |
14 | To achieve this any essential configuration has to be version controlled.
15 |
16 | This still leaves room for a certain amount of user specific configuration on
17 | a users local machine.
18 |
19 | {% include inline_toc.html %}
20 |
21 | ## User specific configuration
22 |
23 | User specific configuration is done through the
24 | [Nugrant](https://github.com/maoueh/nugrant) plugin for Vagrant.
25 |
26 | The Nugrant configuration file is located in the following two locations:
27 |
28 | * Your home folder (configuration shared between projects)
29 |
30 | `~/.vagrantuser`
31 |
32 | * The project folder (configuration specific to this clone of the project)
33 |
34 | `.vagrantuser` (you'll find a `.vagrantuser.example` file in the project
35 | directory)
36 |
37 | Note: changes only take effect when the development environment is next
38 | rebuilt/provisioned.
39 |
40 | ### Proxy configuration
41 |
42 | If you're behind a firewall and need to access the web through a HTTP proxy
43 | there's a little extra config you need to do; if you have direct internet access
44 | you can skip this section.
45 |
46 | #### Common proxy config
47 |
48 | This configuration will apply to most command line tools and GUI applications.
49 | This can be set by adding the following to the `.vagrantuser` file (replace the
50 | proxy host and port with the values for your network):
51 |
52 | ```yaml
53 | proxy:
54 | enabled: true
55 | http: 'http://proxy.example.com:3128/'
56 | https: 'http://proxy.example.com:3128/'
57 | ftp: 'http://proxy.example.com:3128/'
58 | no_proxy: 'localhost,127.0.0.1'
59 | ```
60 |
61 | #### APT proxy override
62 |
63 | If you need to use a different proxy for the APT package manager, this can be
64 | set by adding the following to the `.vagrantuser` file (replace the proxy host
65 | and port with the values for your network):
66 |
67 | ```yaml
68 | apt_proxy:
69 | http: 'http://proxy.example.com:3128/'
70 | https: 'http://proxy.example.com:3128/'
71 | ftp: 'http://proxy.example.com:3128/'
72 | ```
73 |
74 | #### Git proxy override
75 |
76 | If you need to use a different proxy for the Git version control system, this
77 | can be set by adding the following to the `.vagrantuser` file (replace the proxy
78 | host and port with the values for your network):
79 |
80 | ```yaml
81 | git_proxy:
82 | http: 'http://proxy.example.com:3128/'
83 | ```
84 |
85 | #### GNOME proxy override
86 |
87 | If you need to use a different proxy for GNOME applications, or just want to
88 | take advantage of more advanced proxy options for GNOME applications, you can
89 | follow the documentation below.
90 |
91 | Note: the GNOME proxy settings are also used by some other non-GNOME
92 | applications such as the Google Chrome web browser.
93 |
94 | ##### Proxy auto-config
95 |
96 | To use [proxy auto config](https://en.wikipedia.org/wiki/Proxy_auto-config) add
97 | the following to the `.vagrantuser` file (replace the `autoconfig_url` with the
98 | value for your network):
99 |
100 | ```yaml
101 | gnome_proxy:
102 | mode: 'auto'
103 | autoconfig_url: 'http://wpad.example.com/wpad.dat'
104 | ```
105 |
106 | Note: in theory GNOME should be able to auto-discover the value for the
107 | `autoconfig_url` using the
108 | [Web Proxy Auto-Discovery Protocol](https://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol);
109 | in practice auto-discovery is unlikely to work when you're running Linux in a
110 | VM using NAT rather than directly on your corporate network, so you'll likely
111 | have to specify the location manually.
112 |
113 | ##### Minimal manual configuration
114 |
115 | To manually specify a different proxy for GNOME applications add the following
116 | to the `.vagrantuser` file (replace the hosts and ports with the values for your
117 | network):
118 |
119 | ```yaml
120 | gnome_proxy:
121 | mode: 'manual'
122 | ignore_hosts:
123 | - 'localhost'
124 | - '127.0.0.0/8'
125 | - '::1'
126 | use_same_proxy: true
127 | http:
128 | host: 'proxy.example.com'
129 | port: 3128
130 | enabled: true
131 | ```
132 |
133 | ##### Full manual configuration
134 |
135 | For full manual control add the following to the `.vagrantuser` file (replace
136 | the hosts, ports and credentials with the values for your network):
137 |
138 | ```yaml
139 | gnome_proxy:
140 | mode: 'manual'
141 | ignore_hosts:
142 | - 'localhost'
143 | - '127.0.0.0/8'
144 | - '::1'
145 | use_same_proxy: false
146 | http:
147 | host: 'proxy.example.com'
148 | port: 3128
149 | use_authentication: true
150 | authentication_user: 'example_username'
151 | authentication_password: 'example_password'
152 | enabled: true
153 | https:
154 | host: 'proxy.example.com'
155 | port: 3128
156 | ftp:
157 | host: 'proxy.example.com'
158 | port: 3128
159 | socks:
160 | host: 'proxy.example.com'
161 | port: 9000
162 | ```
163 |
164 | ### Regional preferences
165 |
166 | Within a team you may have developers in multiple regions, these settings allow
167 | them to build the development environment according to their regional
168 | preferences:
169 |
170 | **Note:** since this project is developed in the United Kingdom all the regional
171 | defaults are for Great Britain.
172 |
173 | #### Timezone
174 |
175 | You can find the list of available timezones at
176 | [https://en.wikipedia.org/wiki/List_of_tz_database_time_zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
177 |
178 | ```yaml
179 | timezone: Europe/London
180 | ```
181 |
182 | #### Locale
183 |
184 | You can find more information on locales at:
185 | [https://help.ubuntu.com/community/Locale](https://help.ubuntu.com/community/Locale).
186 |
187 | ```yaml
188 | locales:
189 | default: en_GB.UTF-8
190 | # Please ensure the default locate is in the list of present locales.
191 | present:
192 | - en_GB.UTF-8
193 | - en_US.UTF-8
194 | ```
195 |
196 | #### Keyboard
197 |
198 | You can find more information on keyboard configuration at:
199 | [https://wiki.debian.org/Keyboard](https://wiki.debian.org/Keyboard).
200 |
201 | ```yaml
202 | keyboard:
203 | model: pc105
204 | layout: gb
205 | variant: ''
206 | ```
207 |
208 | ### Git user name and email address
209 |
210 | You can set your Git user name and email address manually (after provisioning)
211 | using `git config --global ...` and it will be retained between rebuilds.
212 | However if you want to set it once, and have it be the default for all new VMs,
213 | you can add the following to your `~/.vagrantuser` file (before provisioning).
214 |
215 |
216 | ```yaml
217 | git_user:
218 | name: Example Name
219 | email: address@example.com
220 | ```
221 |
222 | ### Dock position
223 |
224 | Each user can choose whether they want the dock bar on the left, right or bottom
225 | of the screen.
226 |
227 | {% capture fig_img %}
228 | 
229 | {% endcapture %}
230 |
231 |
232 | {{ fig_img | markdownify | remove: "
" | remove: "
" }}
233 | Examples of left and bottom dock positions
234 |
235 |
236 | The default position for the dockbar is `LEFT` but you can change the position
237 | by specifying `BOTTOM` or `RIGHT` in your `.vagrantuser` file before
238 | provisioning your development environment e.g.:
239 |
240 | ```yaml
241 | dock_position: BOTTOM
242 | ```
243 |
244 | ### VirtualBox configuration
245 |
246 | #### VM name
247 |
248 | This is important if you want to maintain separate copies of the environment
249 | (e.g. for working on different branches).
250 |
251 | ```yaml
252 | virtualbox: # All VirtualBox configuration has to be under the same `virtualbox` tag.
253 | name: development-environment
254 | ```
255 |
256 | For example you may keep an environment for performing patches to production:
257 |
258 | ```yaml
259 | virtualbox: # All VirtualBox configuration has to be under the same `virtualbox` tag.
260 | name: patches-environment
261 | ```
262 |
263 | **Important:** each separately named environment must be cloned into a separate
264 | directory.
265 |
266 | #### RAM and CPU
267 |
268 | If your workstation has more resources than your laptop you may want to allocate
269 | more CPU cores to the VM or more RAM.
270 |
271 | ```yaml
272 | virtualbox: # All VirtualBox configuration has to be under the same `virtualbox` tag.
273 | memory: '4096' # in MB
274 | cpus: 2
275 | ```
276 |
277 | #### Audio
278 |
279 | If you're not running on Microsoft Windows or macOS you'll need to change the
280 | audio settings to enable audio support.
281 |
282 | You can find more information about VirtualBox audio options at:
283 | [https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvm](https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvm).
284 |
285 | ```yaml
286 | virtualbox: # All VirtualBox configuration has to be under the same `virtualbox` tag.
287 | audio: alsa
288 | audiocontroller: ac97
289 | ```
290 |
291 | **Note:** this project is only tested with Microsoft Windows as the host OS.
292 |
293 | ### Persistent storage location
294 |
295 | In addition to the virtual disk for the OS, a second virtual disk is mounted to
296 | the VM to store files that are retained when the OS is re-provisioned. It's
297 | possible to change the location of this virtual disk e.g. to save space on your
298 | primary disk drive.
299 |
300 | ```yaml
301 | persistent_storage_location: 'D:/vagrant/persistent-disk.vdi'
302 | ```
303 |
304 | ### Ansible configuration
305 |
306 | Ansible tags can be used to skip certain features when installing the
307 | development environment.
308 |
309 | This can speed up rebuilds and save on disk space.
310 |
311 | ```yaml
312 | ansible:
313 | skip_tags:
314 | # Choose from any of the below
315 | - backup
316 | - chrome
317 | - docker
318 | - git-credential-manager
319 | - gradle
320 | - gui
321 | - homebrew
322 | - intellij
323 | - java
324 | - kubernetes
325 | - maven
326 | - nodejs
327 | - oh-my-zsh
328 | - postman
329 | - python
330 | - sdkman
331 | - swapspace
332 | - vscode
333 | - zsh-autosuggestions
334 | - zsh-fzf-tab
335 | - zsh-syntax-highlighting
336 | - zsh-you-should-use
337 | - zswap
338 | ```
339 |
340 | **Note:** there are dependencies between some of the features e.g. skipping
341 | `java` will also skip `intellij`.
342 |
343 | ### IntelliJ IDEA edition
344 |
345 | If your employer provides IntelliJ IDEA Ultimate licenses for your whole team,
346 | then you'll want to make that the default (see
347 | [Project specific configuration](#project-specific-configuration) below); for
348 | everyone else this development environment supports individual developers using
349 | their personal licenses.
350 |
351 | To install IntelliJ IDEA Ultimate instead of IntelliJ IDEA Community add the
352 | following line to your `.vagrantuser` file.
353 |
354 | ```yaml
355 | intellij_edition: ultimate
356 | ```
357 |
358 | ## Project specific configuration
359 |
360 | All project specific configuration should be version controlled.
361 |
362 | The easiest way to version control your configuration this is to fork this
363 | project from GitHub
364 | [https://github.com/gantsign/development-environment](https://github.com/gantsign/development-environment).
365 | This project is under the MIT license so you're free to fork into a private
366 | repository either on GitHub or elsewhere.
367 |
368 | ### Default values for user specific configuration
369 |
370 | The default values for the user specific configuration can be found in the
371 | `config.user.defaults` block in the Vagrant file.
372 |
373 | **Important:** the values in the `Vagrantfile` override similar values in the
374 | `playbook.yml` changing the values in the `playbook.yml` will have no effect.
375 |
376 | ### Ansible provisioning
377 |
378 | What you need to install for your development environment and how it needs to be
379 | configured set in the Ansible `playbook.yml`.
380 |
381 | You can find out more about Ansible at:
382 | [https://www.ansible.com](https://www.ansible.com).
383 |
384 | What you may want to configure in the `playbook.yml`:
385 |
386 | * Software Development Kits and versions
387 | * Build tools and versions
388 | * Required IDE plugins
389 | * Environment variables
390 |
--------------------------------------------------------------------------------