Skip to content

Commit b699c39

Browse files
committed
feat:update bootstrap.sh
1 parent bacb468 commit b699c39

File tree

2 files changed

+85
-60
lines changed

2 files changed

+85
-60
lines changed

bootstrap.mjs

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
const path = require('path');
2+
const fs = require('fs');
3+
4+
function ensureDir(dir) {
5+
if (fs.existsSync(dir)) {
6+
return;
7+
}
8+
fs.mkdirSync(dir, {recursive: true});
9+
}
10+
11+
async function ensureAllLink(src, dst) {
12+
const files = await glob(`${src}/*`);
13+
for (const f of files) {
14+
ensureLink(f, `${dst}/${path.basename(f)}`)
15+
}
16+
}
17+
18+
function ensureLink(src, dst) {
19+
if (fs.existsSync(dst)) {
20+
const stats = fs.lstatSync(dst);
21+
if (stats.isSymbolicLink()) {
22+
return;
23+
}
24+
throw new Error(`${dst} exists and not symbol link`);
25+
}
26+
fs.symlinkSync(src, dst);
27+
}
28+
29+
const conf = `${process.env.HOME}/.config`;
30+
const localBin = `${process.env.HOME}/.local/bin`;
31+
const dotdir = (await $`pwd`).stdout.trimEnd();
32+
33+
// ideavim
34+
ensureLink(`${dotdir}/idea/.ideavimrc`, `${process.env.HOME}/.ideavimrc`);
35+
36+
// .zshrc .zsh_history
37+
ensureLink(`${dotdir}/shell/zsh`, `${conf}/zsh`);
38+
ensureLink(`${dotdir}/shell/.zshrc`, `${process.env.HOME}/.zshrc`);
39+
40+
// .tmux.conf
41+
ensureLink(`${dotdir}/tmux/.tmux.conf`, `${process.env.HOME}/.tmux.conf`);
42+
ensureLink(`${dotdir}/tmux/.tmux.conf.local`, `${process.env.HOME}/.tmux.conf.local`);
43+
44+
// vim
45+
ensureLink(`${dotdir}/vim/.vimlite.vim`, `${process.env.HOME}/.vimlite.vim`);
46+
ensureLink(`${dotdir}/vim/my.nvim`, `${process.env.HOME}/.config/nvim`);
47+
48+
// vifm
49+
ensureLink(`${dotdir}/vifm`, `${process.env.HOME}/.config/vifm`);
50+
51+
// navi
52+
53+
ensureLink(`${dotdir}/navi`, `${process.env.HOME}/.config/navi`);
54+
55+
ensureDir(`$LOCAL_BIN`);
56+
57+
// tiny scripts
58+
ensureAllLink(`${dotdir}/bin`, localBin);

bootstrap.sh

+27-60
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,32 @@
1+
# vim: set expandtab shiftwidth=4 foldmethod=marker foldlevel=0 :
12
#!/usr/bin/env bash
23

4+
# {{{ libs
35

4-
CONF="$HOME/.config"
5-
LOCAL_BIN="$HOME/.local/bin"
6-
7-
function ensure_dir() {
8-
local path="${1:?'path is required'}"
9-
if [[ -d "$path" ]]; then
10-
return;
11-
fi
12-
mkdir -p "$path"
13-
}
14-
15-
function link_once() {
16-
local src="${1:?'src path is required'}"
17-
local dst="${2:?'dst path is required'}"
18-
echo "$src => $dst"
19-
if [[ -e "$dst" ]]; then
20-
if [[ -L "$dst" ]]; then
21-
return 0;
22-
fi
23-
echo "$dst exists,link failed"
24-
return 1;
25-
fi
26-
ln -s "$src" "$dst"
6+
function setup_ubuntu(){
7+
local gui_mode="${1:-false}"
8+
sudo apt update -y
9+
sudo apt install -y \
10+
nodejs \
11+
zx
2712
}
2813

29-
function link_all() {
30-
local src="${1:?'link all src path is required'}"
31-
local dst="${2:?'link all dst path is required'}"
32-
for f in $(find "$src"/*) ; do
33-
link_once "$f" "$dst/$(basename $f)"
34-
done
35-
}
36-
37-
ensure_dir "$CONF"
38-
39-
DOTDIR="$(pwd)"
40-
# ideavim
41-
link_once "$DOTDIR/idea/.ideavimrc" "$HOME/.ideavimrc"
42-
43-
# .zshrc .zsh_history
44-
link_once "$DOTDIR/shell/zsh" "$CONF/zsh"
45-
link_once "$DOTDIR/shell/.zshrc" "$HOME/.zshrc"
46-
47-
# .tmux.conf
48-
link_once "$DOTDIR/tmux/.tmux.conf" "$HOME/.tmux.conf"
49-
link_once "$DOTDIR/tmux/.tmux.conf.local" "$HOME/.tmux.conf.local"
50-
51-
# vim
52-
link_once "$DOTDIR/vim/.vimlite.vim" "$HOME/.vimlite.vim"
53-
link_once "$DOTDIR/vim/my.nvim" "$HOME/.config/nvim"
54-
55-
# vifm
56-
link_once "$DOTDIR/vifm" "$HOME/.config/vifm"
57-
58-
# navi
59-
60-
link_once "$DOTDIR/navi" "$HOME/.config/navi"
61-
62-
ensure_dir "$LOCAL_BIN"
63-
64-
# tiny scripts
65-
link_all "$DOTDIR/bin" "$LOCAL_BIN"
14+
# }}}
15+
16+
if [ -f /etc/os-release ]; then
17+
. /etc/os-release
18+
DISTRIBUTION="$ID"
19+
DISTRIBUTION_VERSION="$VERSION_ID"
20+
else
21+
echo "unknown distribution"
22+
fi
23+
24+
case "$DISTRIBUTION" in
25+
"ubuntu")
26+
setup_ubuntu
27+
;;
28+
*)
29+
echo "unknonw func"
30+
esac
31+
32+
zx bootstrap.mjs "$@"

0 commit comments

Comments
 (0)