-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.txt
232 lines (196 loc) · 8.78 KB
/
setup.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
# TODO: Evolve this into a full script I can run on a fresh debian install.
# Make sure primary user can run as sudo first by running `adduser username sudo` as root, then logging out/in
# Set up Tailscale:
sudo apt install curl
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh
# Absolute first packages needed
sudo apt install git python-is-python3 zsh
# Set up ssh key (see https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh)
ssh-keygen -t ed25519 -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# Add contents of id_ed25519.pub as key on GitHub, then test:
ssh -T git@github.com
mkdir -p src/cloned # for git clones
mkdir bin
mkdir -p .local/share/fonts
mkdir -p .config/nvim/bundle
# Install oh-my-zsh (before ghar)
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# ghar
# TODO: ghar add?
# TODO: add way to check all ghar repos for unpushed changes periodically
git clone https://github.com/philips/ghar.git src/ghar
git clone git@github.com:mjohnsonengr/dotfiles.git src/ghar/devel
rm ~/.profile ~/.bashrc ~/.zshrc
src/ghar/bin/ghar install
#: zsh themes & plugins
# Don't download powerlevel10k on corp machine; it doesn't work yet
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/paulkaefer/cowsay-files.git src/cloned/cowsay-files
cd src/cloned/cowsay-files
make install
cd
fc-cache
zsh # if not already open
# apt-get packages to install (alphabetical)
# NOTE: packages intentionally not installed:
# haskell-platform: use ghcup instead
sudo apt update
sudo apt install \
apt-listchanges \ # TODO: ??
apt-transport-https \ # for unattended-upgrades
bat \ # batcat -- cat with syntax highlighting
build-essential \
ca-certificates \ # TODO: need?
clipit \ # TODO: only host machines?
command-not-found \
curl \
fd-find \ # fd: fast Rust version of find
fzf \ # fzf: fuzzy-finder (super useful)
git-crecord \ # Interactive git chunk/file selection
gnupg \
keychain \ # Manage ssh-agent, prevent entering SSH key pw too much
lf \ # file manager (sometimes lfm)
libicu-dev \ # needed for pip installing wheel?
lsb-release \ # TODO: ??
mercurial \
msmtp \ # for unattended-upgrades
msmtp-mta \ # creates sendmail alias to msmtp
neovim \
pkg-config \
postgresql \
python3-pip \
python3-neovim \
python3-setuptools \
ripgrep \ # rg: better version of grep
rlwrap \ # TODO: need?
# snapd \ # Avoid as much as possible
tmux \
tree \
unattended-upgrades \
virtualenv \ # Req for cht.sh
xclip \
xsel \
zip
# Install zoxide
curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash
# Install NVM, NPM and NodeJS
# check https://github.com/nvm-sh/nvm#installing-and-updating for newer version
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.zshrc
# nvm install --lts
nvm install node
# Install Cargo (https://rustup.rs)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
cargo install tealdeer # tldr.sh
cargo install broot # br
# cheat.sh
curl https://cht.sh/:cht.sh > ~/bin/cht.sh
cht.sh --standalone-install
# github CLI: https://github.com/cli/cli/blob/trunk/docs/install_linux.md
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh
# Setup neovim
# `apt install neovim python3-neovim` should have installed everything necessary
git clone https://github.com/VundleVim/Vundle.vim.git ~/.config/nvim/bundle/Vundle.vim
nvim -c 'PluginInstall'
# Not currently using this plugin
# cd ~/.config/nvim/bundle/LanguageClient-neovim
# ./install.sh
# IntelliJ, PyCharm
snap install intellij-idea-community --classic
snap install pycharm-community --classic
## Color-scheme: Obsidian
Windows Terminal: https://windowsterminalthemes.dev/
ChromeOS SSH: chrome-untrusted://terminal/html/nassh_preferences_editor.html
#######################
# Misc system settings
#######################
### For Windows dual-boot machines, (store local time instead of UTC)
timedatectl set-local-rtc 1
### For non-Google machine
# brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
### pyenv
curl https://pyenv.run | bash
sudo apt install zlib1g zlib1g-dev libssl-dev libbz2-dev libsqlite3-dev lzma \
liblzma-dev libreadline-dev libffi-dev tk-dev
pyenv install 2.7.18
pyenv install 3.11.4
pyenv install miniconda3-4.7.12
### Java -- https://adoptium.net/installation/linux/
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/adoptium.gpg > /dev/null
echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
sudo apt update
sudo apt install temurin-21-jdk
# Next LTS is 25 in Sept 2025
### sdkman
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install kotlin
sdk install gradle
### gng/gw (shortcut for ./gradlew) (https://gng.dsun.org/)
brew tap gdubw/gng
brew install gng
### Heroku
sudo snap install --classic heroku
# alternatively on Chromebook/Crostini
# curl https://cli-assets.heroku.com/install.sh | sh
# edit ~/.netrc w/ API key
# for postgresql, may need
# sudo -u postgres createuser -s $(whoami); createdb $(whoami)
# See https://stackoverflow.com/a/38444152/1405720
### Docker
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
docker run hello-world
### Minikube + kubectl
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
minikube start
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
### PostgreSQL
sudo apt install postgresql
### Redis
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt update
sudo aptinstall redis
### For Haskell/Plutus development:
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh # from https://www.haskell.org/ghcup/
curl -L https://nixos.org/nix/install | sh # from https://nixos.org/download.html
### For SSH'ing into WSL2:
# Make sure SSH server is hardened (disable password auth, disable root, only allow one user
# Check out wsl2-network.ps1 https://gist.github.com/daehahn/497fa04c0156b1a762c70ff3f9f7edae?WT.mc_id=-blog-scottha
### msmtp/sendmail and unattended-upgrade
# See https://wiki.debian.org/UnattendedUpgrades
sudo cp .templates/msmtprc /etc/msmtprc
# Make a Gmail app password for this machine and use below
echo "machine smtp.gmail.com login sys@mej.dev password PASSWORD" | sudo tee -a /etc/netrc
sudo vim /etc/apt/apt.conf.d/50unattended-upgrades
# uncomment `${distro_id}:${distro_codename}-updates`
# uncomment `Unattended-Upgrade::Mail "root";` and replace with email address
# uncomment `Unattended-Upgrade::MailReport "on-change";`
# Add to /etc/apt/apt.conf.d/20auto-upgrades:
echo 'APT::Periodic::Update-Package-Lists "1";' | sudo tee -a /etc/apt/apt.conf.d/20auto-upgrades
echo 'APT::Periodic::Unattended-Upgrade "1";' | sudo tee -a /etc/apt/apt.conf.d/20auto-upgrades
sudo dpkg-reconfigure -f noninteractive unattended-upgrades
# Add email updates
# edit /etc/apt/listchanges.conf
# set frontend=mail
# set email address
# set which=news