1
Fork 0

rework symlinking and locations of several files

This commit is contained in:
Alan Faubert 2021-11-13 17:06:05 -05:00
parent c563e44fee
commit fd531a4842
15 changed files with 44 additions and 58 deletions

2
bash/.gitignore vendored
View file

@ -1,2 +0,0 @@
/config/.bashrc.*
/config/.profile.*

View file

@ -1,15 +1,10 @@
# Bash
## `.gitignore`'d
- `config/.bashrc.*` - additional commands to run when sourcing `~/.bashrc`
- `config/.profile.*` - additional commands to run when sourcing `~/.profile`
# Config
[`config/.bashrc`](config/.bashrc) contains code that's symlinked to from `~/.bashrc`. [`config/.profile`](config/.profile) contains code that's symlinked to from `~/.profile`.
[`config/*`](config) contains code that's symlinked to from `~`.
If you create additional `config/.bashrc.*` or `config/.profile.*` files, they will also be run when sourcing `~/.bashrc` or `~/.profile`, respectively. This can be used for additional commands that shouldn't be checked into this repo.
If you create additional `~/.bashrc.d/*` or `~/.profile.d/*` files, they will also be run when sourcing `~/.bashrc` or `~/.profile`, respectively. This can be used for additional commands that shouldn't be checked into this repo.
## Scripts

View file

@ -17,7 +17,7 @@ if [ $? = 2 ]; then
fi
# Run additional code if present
for file in "$(readlink --canonicalize ~/.bashrc)".*; do
for file in ~/.bashrc.d/*; do
if [ -f "$file" ]; then
source "$file"
fi

View file

@ -9,7 +9,7 @@ for dir in ~/bin/* ~/.local/bin/*; do
done
# Run additional code if present
for file in "$(readlink --canonicalize ~/.profile)".*; do
for file in ~/.profile.d/*; do
if [ -f "$file" ]; then
. "$file"
fi

View file

@ -1,4 +1,13 @@
#!/bin/bash
link_to() {
d="$1" && mkdir --parents "$d" && shift || return 1
for f in "$@"; do
[ -e "$f" ] || continue
base="$(basename "$f")" || return 1
[[ "$base" = . || "$base" = .. ]] && continue
rm --force --recursive "$d/$base" && ln --relative --symbolic "$f" "$d/$base" && echo "$d/$base -> $f" || return 1
done
}
cd "$(dirname "$(readlink --canonicalize "$0")")"
root_win="$([[ "$(uname --kernel-release)" =~ microsoft ]] && wslpath -w .)"
while :; do
@ -7,7 +16,7 @@ while :; do
bash- 'Bash' bash ' Create ~/* symlinks to config' bash-scripts ' Set up util scripts' \
ssh- 'SSH' ssh ' Create config symlinks (Linux+Windows)' \
git- 'Git' git ' Create config symlinks (Linux+Windows)' git-delta ' Install Delta' git-filter-repo ' Install git-filter-repo' git-scripts ' Set up various scripts' \
vscode- 'VS Code' vscode-ext ' Install extensions (Linux/Windows)' vscode ' Create config symlinks (Linux/Windows)' vscode-server-env-setup ' Create ~/.vscode-server/server-env-setup symlink' \
vscode- 'VS Code' vscode-ext ' Install extensions (Linux/Windows)' vscode ' Create config symlinks (Linux+Windows)' vscode-server-env-setup ' Create ~/.vscode-server/server-env-setup symlink' \
nodejs- 'Node.js' nodejs-npmrc ' Create ~/.npmrc symlink' nodejs-config ' Create ~/dev/* symlinks to config' nodejs-scripts ' Set up various scripts' \
gcloud- 'Google Cloud SDK' gcloud ' Install' gcloud-config ' Create config symlinks' \
tmux- 'tmux' tmux ' Create config symlinks' \
@ -22,25 +31,22 @@ while :; do
ln --relative --symbolic "$(wslpath "$(wslvar USERPROFILE)")" ~/win
;;
wsl-wsltty)
{ cmd.exe /c rmdir /s /q "%APPDATA%\wsltty" 2\> nul; cmd.exe /c mklink /d "%APPDATA%\wsltty" "$root_win\wsl\wsltty"; }
link_to "$(wslpath "$(wslvar APPDATA)")" wsl/wsltty
;;
bash)
for file in bash/config/.?*; do
[[ "$(basename "$file")" =~ \..*\. ]] || ln --force --relative --symbolic "$file" ~/"$(basename "$file")"
done
link_to ~ bash/config/{.*,*}
;;
bash-scripts)
bash/scripts/2path.sh bash/scripts
;;
ssh)
rm --force --recursive ~/.ssh &&
ln --relative --symbolic ssh/config ~/.ssh &&
link_to ~ ssh/.ssh &&
chmod 600 ~/.ssh/* &&
[ -z "$root_win" ] || { cmd.exe /c rmdir /s /q "%USERPROFILE%\.ssh" 2\> nul; cmd.exe /c mklink /d "%USERPROFILE%\.ssh" "$root_win\ssh\config"; }
{ [ -z "$root_win" ] || link_to "$(wslpath "$(wslvar USERPROFILE)")" ssh/.ssh; }
;;
git)
ln --force --relative --symbolic git/.gitconfig ~/.gitconfig &&
[ -z "$root_win" ] || { cmd.exe /c del "%USERPROFILE%\.gitconfig" 2\> nul; cmd.exe /c mklink "%USERPROFILE%\.gitconfig" "$root_win\git\.gitconfig"; }
link_to ~ git/.gitconfig &&
{ [ -z "$root_win" ] || link_to "$(wslpath "$(wslvar USERPROFILE)")" git/.gitconfig; }
;;
git-delta)
mkdir --parents ~/.bin &&
@ -59,27 +65,17 @@ while :; do
if [ "$root_win" ]; then cmd.exe /c $ext; else $ext; fi
;;
vscode)
if [ "$root_win" ]; then
{ cmd.exe /c del "%APPDATA%\Code\User\keybindings.json" 2\> nul; cmd.exe /c mklink "%APPDATA%\Code\User\keybindings.json" "$root_win\vscode\keybindings.json"; } &&
{ cmd.exe /c del "%APPDATA%\Code\User\settings.json" 2\> nul; cmd.exe /c mklink "%APPDATA%\Code\User\settings.json" "$root_win\vscode\settings.json"; }
else
mkdir --parents ~/.config/Code/User &&
ln --force --relative --symbolic vscode/keybindings.json ~/.config/Code/User/keybindings.json &&
ln --force --relative --symbolic vscode/settings.json ~/.config/Code/User/settings.json
fi
link_to ~/.config/Code/User vscode/config/* &&
{ [ -z "$root_win" ] || link_to "$(wslpath "$(wslvar APPDATA)")"/Code/User vscode/config/*; }
;;
vscode-server-env-setup)
mkdir --parents ~/.vscode-server &&
ln --force --relative --symbolic vscode/server-env-setup ~/.vscode-server/server-env-setup
link_to ~/.vscode-server vscode/server-config/*
;;
nodejs-npmrc)
ln --force --relative --symbolic nodejs/.npmrc ~/.npmrc
link_to ~ nodejs/.npmrc
;;
nodejs-config)
mkdir --parents ~/dev &&
for file in nodejs/config/{.*,*}; do
[[ "$file" == */. ]] || [[ "$file" == */.. ]] || ln --force --relative --symbolic "$file" ~/dev/"$(basename "$file")"
done
link_to ~/dev nodejs/config/{.*,*}
;;
nodejs-scripts)
bash/scripts/2path.sh nodejs/scripts
@ -89,39 +85,36 @@ while :; do
bash/scripts/2path.sh ~/.bin/gcloud/bin/gcloud
;;
gcloud-config)
mkdir --parents ~/.config &&
rm --force --recursive ~/.config/gcloud &&
ln --relative --symbolic gcloud/config ~/.config/gcloud
link_to ~/.config gcloud/gcloud
;;
tmux)
ln --force --relative --symbolic tmux/.tmux.conf ~/.tmux.conf
link_to ~ tmux/.tmux.conf
;;
firefox-rebuild-win)
ls firefox/*+* | cut --characters=9- | while read config; do
truncate --size=0 firefox/"$config"
for dir in firefox/*; do
[ -d "$dir" ] || continue
config="$(basename "$dir")"
truncate --size=0 firefox/"$config"/user.js
IFS='+' read -a pieces <<< "$config"
for piece in "${pieces[@]}"; do
[ -f firefox/"$piece".js ] && cat firefox/"$piece".js >> firefox/"$config"
[ -f firefox/"$piece".pac ] && echo 'user_pref("network.proxy.autoconfig_url", "'file:///"${root_win//\\//}"/firefox/"$piece".pac$'");\nuser_pref("network.proxy.type", 2);' >> firefox/"$config"
[ -f firefox/"$piece".js ] && cat firefox/"$piece".js >> firefox/"$config"/user.js
[ -f firefox/"$piece".pac ] && echo 'user_pref("network.proxy.autoconfig_url", "'file:///"${root_win//\\//}"/firefox/"$piece".pac$'");\nuser_pref("network.proxy.type", 2);' >> firefox/"$config"/user.js
done
done
true
;;
firefox-link-win)
profile_dir="$(wslpath "$(wslvar APPDATA)")"/Mozilla/Firefox/Profiles
mapfile -t profiles < <(ls "$profile_dir")
profiles_args=()
for ((i=0; i < ${#profiles[@]}; i++)); do profiles_args[2*i]="${profiles[$i]}"; profiles_args[2*i+1]="${profiles[$i]}"; done
mapfile -t configs < <(ls firefox/*+* | cut --characters=9-)
for dir in "$profile_dir"/*; do [ -d "$dir" ] || continue; base="$(basename "$dir")"; profiles_args+=("$base"); profiles_args+=("$base"); done
configs_args=()
for ((i=0; i < ${#configs[@]}; i++)); do configs_args[2*i]="${configs[$i]}"; configs_args[2*i+1]="${configs[$i]}"; done
for dir in firefox/*; do [ -d "$dir" ] || continue; base="$(basename "$dir")"; configs_args+=("$base"); configs_args+=("$base"); done
while :; do
profile="$(whiptail --title 'Select profile' --menu '' 22 60 15 "${profiles_args[@]}" --notags --default-item "$profile" 3>&2 2>&1 1>&3-)"
[ "$profile" = '' ] && break
config="$(whiptail --title "Link $profile to config" --menu '' 22 60 15 "${configs_args[@]}" --notags --default-item "$config" 3>&2 2>&1 1>&3-)"
[ "$config" = '' ] && break
rm --force "$profile_dir"/"$profile"/user.js
cmd.exe /c mklink %APPDATA%\\Mozilla\\Firefox\\Profiles\\"$profile"\\user.js "$root_win"\\firefox\\"$config"
link_to "$profile_dir/$profile" firefox/"$config"/user.js
done
;;
'')

2
firefox/.gitignore vendored
View file

@ -1,2 +1,2 @@
/*+*
/*/
/*.pac

View file

@ -2,18 +2,18 @@
## `.gitignore`'d
- `*+*` - files whose names are `+`-separated filenames of base names of other files in this directory - these will be constructed by concatenation of the base files, and will be symlinked to from various Firefox profiles' `user.js` files
- `*/` - folders whose names are `+`-separated concatenations of base names of files in this directory - these will be given `user.js` files constructed by concatenation of the base files, and will be symlinked to from various Firefox profiles' `user.js` files
- `*.pac` - proxy auto-config files - these too can be referred to in the above `configs/*` files
## `user.js` handling (Windows-specific)
Create `*.pac` files containing proxy auto-config files.
Create empty `*+*` files whose names are assembled by concatenating the base names of templates in this directory (without the `.js` or `.pac` extension) separated by `+`s.
Create empty directories whose names are assembled by concatenating the base names of templates in this directory (without the `.js` or `.pac` extension) separated by `+`s.
There is a menu option in `config.sh` to generate (or regenerate) the `*+*` files from their constituent templates, including adding the appropriate configuration to point to a particular `*.pac` file.
There is a menu option in `config.sh` to generate (or regenerate) `user.js` files in these directories from their constituent templates, including adding the appropriate configuration to point to a particular `*.pac` file.
There is also a menu option in `config.sh` for creating symlinks from various Firefox profiles' `user.js` files to the assembled `*+*` files.
There is also a menu option in `config.sh` for creating symlinks from various Firefox profiles' `user.js` files to the assembled files.
## Additional manual setup

View file

@ -2,4 +2,4 @@
## `.gitignore`'d
- `config/*` - Google Cloud SDK configuration files
- `gcloud/*` - Google Cloud SDK configuration files

View file

@ -2,4 +2,4 @@
## `.gitignore`'d
- `config/*` - SSH keys, config, etc.
- `.ssh/*` - SSH keys, config, etc.

View file

@ -2,7 +2,7 @@
## Settings and keybindings
[`settings.json`](settings.json) and [`keybindings.json`](keybindings.json) are VS Code's configuration files.
[`config/*`](config) contains VS Code's configuration files. [`server-config/*`](server-config) contains `~/.vscode-server` configuration files.
### Font