mirror of
https://github.com/nmasur/dotfiles
synced 2025-07-05 11:30:13 +00:00
change macos directory layout
This commit is contained in:
79
macos/scripts/bootstrap
Executable file
79
macos/scripts/bootstrap
Executable file
@ -0,0 +1,79 @@
|
||||
#!/bin/sh
|
||||
|
||||
DOTS=$(dirname "$0")/..
|
||||
cd "$DOTS" || (echo "Directory not found: $DOTS"; exit 1)
|
||||
DOTS="$PWD"
|
||||
|
||||
install_xcode() {
|
||||
if [ "$(uname)" = "Darwin" ]
|
||||
then
|
||||
if ! (xcode-select --version > /dev/null 2>&1)
|
||||
then
|
||||
xcode-select --install
|
||||
fi
|
||||
echo "xcode ✓"
|
||||
fi
|
||||
}
|
||||
|
||||
install_homebrew() {
|
||||
if ! (which /usr/local/bin/brew > /dev/null)
|
||||
then
|
||||
printf "homebrew ✕\n\n"
|
||||
printf "\ninstalling homebrew..."
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo "homebrew ✓"
|
||||
}
|
||||
|
||||
install_brews() {
|
||||
brewfile=$DOTS/homebrew/core.Brewfile
|
||||
if ! (/usr/local/bin/brew bundle check --file "$brewfile" > /dev/null)
|
||||
then
|
||||
/usr/local/bin/brew bundle --file "$brewfile"
|
||||
fi
|
||||
|
||||
echo "brews installed ✓"
|
||||
}
|
||||
|
||||
use_fish_shell() {
|
||||
if ! (which fish > /dev/null)
|
||||
then
|
||||
echo "Install fish before continuing"
|
||||
echo "You can do: brew install fish"
|
||||
echo "Or add fish to homebrew/Brewfile and rerun"
|
||||
exit 1
|
||||
fi
|
||||
FISH_SHELL=$(which fish)
|
||||
if ! (grep "$FISH_SHELL" /etc/shells > /dev/null)
|
||||
then
|
||||
echo "Modifying /etc/shells"
|
||||
echo "Requires sudo password"
|
||||
echo "$FISH_SHELL" | sudo tee -a /etc/shells
|
||||
fi
|
||||
if ! (echo "$SHELL" | grep fish > /dev/null)
|
||||
then
|
||||
echo "Changing default shell to fish"
|
||||
echo "Requires sudo password"
|
||||
sudo chsh -s "$FISH_SHELL"
|
||||
fi
|
||||
|
||||
echo "fish ✓"
|
||||
}
|
||||
|
||||
printf "\nbootstrapping...\n\n"
|
||||
install_xcode
|
||||
install_homebrew
|
||||
install_brews
|
||||
use_fish_shell
|
||||
("$DOTS/scripts/setup_symlinks")
|
||||
|
||||
echo ""
|
||||
echo "consider running other scripts:"
|
||||
echo " - brews"
|
||||
echo " - casks"
|
||||
echo " - configure_macos"
|
||||
echo " - rust"
|
||||
echo " - cargos"
|
||||
echo ""
|
15
macos/scripts/brews
Executable file
15
macos/scripts/brews
Executable file
@ -0,0 +1,15 @@
|
||||
#!/bin/sh
|
||||
|
||||
DOTS=$(dirname "$0")/..
|
||||
cd "$DOTS" || (echo "Directory not found: $DOTS"; exit 1)
|
||||
DOTS="$PWD"
|
||||
|
||||
all_brews() {
|
||||
find "$DOTS/homebrew" \
|
||||
-iname "*.Brewfile" \
|
||||
-exec \
|
||||
/usr/local/bin/brew bundle install --file "{}" \;
|
||||
echo "all brews installed ✓"
|
||||
}
|
||||
|
||||
all_brews
|
26
macos/scripts/cargos
Executable file
26
macos/scripts/cargos
Executable file
@ -0,0 +1,26 @@
|
||||
#!/bin/sh
|
||||
|
||||
DOTS=$(dirname "$0")/..
|
||||
cd "$DOTS" || (echo "Directory not found: $DOTS"; exit 1)
|
||||
DOTS="$PWD"
|
||||
|
||||
check_rust() {
|
||||
if ! (which ~/.cargo/bin/rustup > /dev/null)
|
||||
then
|
||||
echo "Install rust (cargo) before continuing"
|
||||
echo "Run the rust script before this one"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
all_cargos() {
|
||||
cargofile=$DOTS/cargo/Cargofile
|
||||
sed 's/#.*$//g;/^$/d' "$cargofile" | while read -r line
|
||||
do
|
||||
cargo install "$line"
|
||||
done \
|
||||
&& echo "all cargos installed ✓"
|
||||
}
|
||||
|
||||
check_rust
|
||||
all_cargos
|
11
macos/scripts/casks
Executable file
11
macos/scripts/casks
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
install_casks() {
|
||||
brewfile=$DOTS/homebrew/Caskfile
|
||||
if ! (/usr/local/bin/brew bundle check --file "$brewfile" > /dev/null)
|
||||
then
|
||||
/usr/local/bin/brew bundle --file "$brewfile"
|
||||
fi
|
||||
|
||||
echo "casks installed ✓"
|
||||
}
|
168
macos/scripts/configure_macos
Executable file
168
macos/scripts/configure_macos
Executable file
@ -0,0 +1,168 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "Enable full keyboard access for all controls (e.g. enable Tab in modal dialogs)"
|
||||
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
|
||||
|
||||
echo "Automatically show and hide the dock"
|
||||
defaults write com.apple.dock autohide -bool true
|
||||
|
||||
echo "Automatically show and hide the menu bar"
|
||||
defaults write NSGlobalDomain _HIHideMenuBar -bool true
|
||||
|
||||
echo "Make Dock icons of hidden applications translucent"
|
||||
defaults write com.apple.dock showhidden -bool true
|
||||
|
||||
echo "Use current directory as default search scope in Finder"
|
||||
defaults write com.apple.finder FXDefaultSearchScope -string "SCcf"
|
||||
|
||||
echo "Expand save panel by default"
|
||||
defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
|
||||
|
||||
echo "Expand print panel by default"
|
||||
defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true
|
||||
|
||||
echo "Disable the \"Are you sure you want to open this application?\" dialog"
|
||||
defaults write com.apple.LaunchServices LSQuarantine -bool false
|
||||
|
||||
echo "Enable highlight hover effect for the grid view of a stack (Dock)"
|
||||
defaults write com.apple.dock mouse-over-hilte-stack -bool true
|
||||
|
||||
echo "Enable spring loading for all Dock items"
|
||||
defaults write enable-spring-load-actions-on-all-items -bool true
|
||||
|
||||
echo "Disable press-and-hold for keys in favor of key repeat"
|
||||
defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false
|
||||
defaults write -g ApplePressAndHoldEnabled -bool false
|
||||
|
||||
echo "Set a blazingly fast keyboard repeat rate"
|
||||
defaults write NSGlobalDomain KeyRepeat -int 2
|
||||
|
||||
echo "Set a shorter Delay until key repeat"
|
||||
defaults write NSGlobalDomain InitialKeyRepeat -int 12
|
||||
|
||||
echo "Disable disk image verification"
|
||||
defaults write com.apple.frameworks.diskimages skip-verify -bool true
|
||||
defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true
|
||||
defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true
|
||||
|
||||
echo "Avoid creating .DS_Store files on network volumes"
|
||||
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
|
||||
|
||||
echo "Disable the warning when changing a file extension"
|
||||
defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false
|
||||
|
||||
# echo "Enable snap-to-grid for desktop icons"
|
||||
# /usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist
|
||||
|
||||
echo "Disable the warning before emptying the Trash"
|
||||
defaults write com.apple.finder WarnOnEmptyTrash -bool false
|
||||
|
||||
echo "Disable tap to click (Trackpad)"
|
||||
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool false
|
||||
|
||||
echo "Enable Safari’s debug menu"
|
||||
defaults write com.apple.Safari IncludeInternalDebugMenu -bool true
|
||||
|
||||
echo "Make Safari’s search banners default to Contains instead of Starts With"
|
||||
defaults write com.apple.Safari FindOnPageMatchesWordStartsOnly -bool false
|
||||
|
||||
echo "Add a context menu item for showing the Web Inspector in web views"
|
||||
defaults write NSGlobalDomain WebKitDeveloperExtras -bool true
|
||||
|
||||
echo "Save to disk (not to iCloud) by default"
|
||||
defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false
|
||||
|
||||
echo "Disable automatic capitalization as it’s annoying when typing code"
|
||||
defaults write NSGlobalDomain NSAutomaticCapitalizationEnabled -bool false
|
||||
|
||||
echo "Disable smart dashes as they’re annoying when typing code"
|
||||
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
|
||||
|
||||
echo "Disable automatic period substitution as it’s annoying when typing code"
|
||||
defaults write NSGlobalDomain NSAutomaticPeriodSubstitutionEnabled -bool false
|
||||
|
||||
echo "Disable smart quotes as they’re annoying when typing code"
|
||||
defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
|
||||
|
||||
echo "Disable auto-correct"
|
||||
defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false
|
||||
|
||||
echo "Use scroll gesture with the Ctrl (^) modifier key to zoom"
|
||||
defaults write com.apple.universalaccess closeViewScrollWheelToggle -bool true
|
||||
defaults write com.apple.universalaccess HIDScrollZoomModifierMask -int 262144
|
||||
echo "Follow the keyboard focus while zoomed in"
|
||||
defaults write com.apple.universalaccess closeViewZoomFollowsFocus -bool true
|
||||
|
||||
echo "Require password immediately after sleep or screen saver begins"
|
||||
defaults write com.apple.screensaver askForPassword -int 1
|
||||
defaults write com.apple.screensaver askForPasswordDelay -int 0
|
||||
|
||||
echo "Save screenshots to downloads"
|
||||
defaults write com.apple.screencapture location -string "${HOME}/Downloads"
|
||||
|
||||
echo "Finder: allow quitting via ⌘ + Q; doing so will also hide desktop icons"
|
||||
defaults write com.apple.finder QuitMenuItem -bool true
|
||||
|
||||
echo "Show the ~/Library folder"
|
||||
chflags nohidden ~/Library && xattr -d com.apple.FinderInfo ~/Library
|
||||
|
||||
# Noah Prefs
|
||||
echo "Enable dock magnification"
|
||||
defaults write com.apple.dock magnification -bool true
|
||||
|
||||
echo "Set dock size"
|
||||
defaults write com.apple.dock largesize -int 48
|
||||
defaults write com.apple.dock tilesize -int 44
|
||||
|
||||
echo "Choose and order dock icons"
|
||||
__dock_item() {
|
||||
printf '%s%s%s%s%s' \
|
||||
'<dict><key>tile-data</key><dict><key>file-data</key><dict>' \
|
||||
'<key>_CFURLString</key><string>' \
|
||||
"$1" \
|
||||
'</string><key>_CFURLStringType</key><integer>0</integer>' \
|
||||
'</dict></dict></dict>'
|
||||
}
|
||||
|
||||
defaults write com.apple.dock persistent-apps -array \
|
||||
"$(__dock_item /Applications/1Password\ 7.app)" \
|
||||
"$(__dock_item /Applications/Slack.app)" \
|
||||
"$(__dock_item /System/Applications/Calendar.app)" \
|
||||
"$(__dock_item /Applications/Firefox.app)" \
|
||||
"$(__dock_item /System/Applications/Messages.app)" \
|
||||
"$(__dock_item /System/Applications/Mail.app)" \
|
||||
"$(__dock_item /Applications/Mimestream.app)" \
|
||||
"$(__dock_item /Applications/zoom.us.app)" \
|
||||
"$(__dock_item /Applications/Obsidian.app)" \
|
||||
"$(__dock_item /Applications/Alacritty.app)" \
|
||||
"$(__dock_item /System/Applications/System\ Preferences.app)"
|
||||
|
||||
echo "No recent items in dock"
|
||||
defaults write com.apple.dock show-recents -bool FALSE
|
||||
|
||||
echo "Switch to dark mode"
|
||||
defaults write "Apple Global Domain" "AppleInterfaceStyle" "Dark"
|
||||
|
||||
echo "Turn on Scroll Reverser"
|
||||
open /Applications/Scroll\ Reverser.app
|
||||
osascript -e 'tell application "System Events" to make login item at end with properties {path:"/Applications/Scroll Reverser.app", hidden:false}'
|
||||
|
||||
echo "Allow apps from anywhere"
|
||||
SPCTL=$(spctl --status)
|
||||
if ! [ "$SPCTL" = "assessments disabled" ]
|
||||
then
|
||||
sudo spctl --master-disable
|
||||
fi
|
||||
|
||||
# ---
|
||||
|
||||
echo "Reset Launchpad"
|
||||
# [ -e ~/Library/Application\ Support/Dock/*.db ] && rm ~/Library/Application\ Support/Dock/*.db
|
||||
rm ~/Library/Application\ Support/Dock/*.db
|
||||
|
||||
echo "Show the ~/Library folder"
|
||||
chflags nohidden ~/Library
|
||||
|
||||
# Clean up
|
||||
echo "Kill affected applications"
|
||||
for app in Safari Finder Dock Mail SystemUIServer; do killall "$app" >/dev/null 2>&1; done
|
5
macos/scripts/npm
Executable file
5
macos/scripts/npm
Executable file
@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
npm update -g
|
||||
npm install -g pyright
|
||||
npm install -g diagnostic-languageserver
|
48
macos/scripts/rust
Executable file
48
macos/scripts/rust
Executable file
@ -0,0 +1,48 @@
|
||||
#!/bin/sh
|
||||
|
||||
install_rust() {
|
||||
if ! (which ~/.cargo/bin/rustup > /dev/null)
|
||||
then
|
||||
echo "installing rustup"
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
fi
|
||||
|
||||
echo "rustup ✓"
|
||||
}
|
||||
|
||||
update_rust() {
|
||||
~/.cargo/bin/rustup update > /dev/null 2>&1
|
||||
rust_version=$(~/.cargo/bin/rustc --version | awk '{print $2}')
|
||||
|
||||
echo "latest rust: $rust_version ✓"
|
||||
}
|
||||
|
||||
download_rust_analyzer() {
|
||||
if ! (which rust-analyzer > /dev/null)
|
||||
then
|
||||
echo "downloading rust analyzer"
|
||||
rust_analyzer_bin=/usr/local/bin/rust-analyzer
|
||||
curl -s -L https://github.com/rust-analyzer/rust-analyzer/releases/latest/download/rust-analyzer-mac -o $rust_analyzer_bin
|
||||
chmod +x $rust_analyzer_bin
|
||||
fi
|
||||
|
||||
echo "rust-analyzer ✓"
|
||||
}
|
||||
|
||||
# cargo-edit: quickly add and remove packages
|
||||
# whatfeatures: see optional features for a package
|
||||
install_cargos() {
|
||||
set -- \
|
||||
'cargo-edit' \
|
||||
'cargo-whatfeatures'
|
||||
for program do
|
||||
cargo install "$program"
|
||||
done
|
||||
|
||||
echo "cargos ✓"
|
||||
}
|
||||
|
||||
install_rust
|
||||
update_rust
|
||||
download_rust_analyzer
|
||||
install_cargos
|
6
macos/scripts/setup_cheatsheet
Executable file
6
macos/scripts/setup_cheatsheet
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "downloading cheatsheet"
|
||||
curl https://cht.sh/:cht.sh > ~/.local/bin/cheat
|
||||
chmod 755 ~/.local/bin/cheat
|
||||
echo "cheatsheet ✓"
|
46
macos/scripts/setup_fish
Executable file
46
macos/scripts/setup_fish
Executable file
@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env fish
|
||||
|
||||
set -U FISH_DIR (readlink ~/.config/fish) # Used for getting to this repo
|
||||
set -Ux DOTS (dirname $FISH_DIR) # Directory of this config repo
|
||||
set -U CDPATH . $HOME # Directories available for immediate cd
|
||||
set -Ux EDITOR nvim # Preferred text editor
|
||||
set -U PROJ $HOME/dev/work # Projects directory
|
||||
set -Ux NOTES_PATH "$HOME/dev/personal/notes" # Notes directory
|
||||
set -Ux MANPAGER "nvim +Man!" # Used for reading man pages
|
||||
set -Ux DIRENV_LOG_FORMAT "" # Disable direnv output
|
||||
set -Ux BROWSER "/Applications/Firefox.app/Contents/MacOS/firefox"
|
||||
|
||||
# Load abbreviations
|
||||
abbrs
|
||||
|
||||
# Turn off greeting
|
||||
set -U fish_greeting ""
|
||||
|
||||
# Set colors (Base16 Eighties)
|
||||
set -U fish_color_normal normal
|
||||
set -U fish_color_command 99cc99
|
||||
set -U fish_color_quote ffcc66
|
||||
set -U fish_color_redirection d3d0c8
|
||||
set -U fish_color_end cc99cc
|
||||
set -U fish_color_error f2777a
|
||||
set -U fish_color_selection white --bold --background=brblack
|
||||
set -U fish_color_search_match bryellow --background=brblack
|
||||
set -U fish_color_history_current --bold
|
||||
set -U fish_color_operator 6699cc
|
||||
set -U fish_color_escape 66cccc
|
||||
set -U fish_color_cwd green
|
||||
set -U fish_color_cwd_root red
|
||||
set -U fish_color_valid_path --underline
|
||||
set -U fish_color_autosuggestion 747369
|
||||
set -U fish_color_user brgreen
|
||||
set -U fish_color_host normal
|
||||
set -U fish_color_cancel -r
|
||||
set -U fish_pager_color_completion normal
|
||||
set -U fish_pager_color_description B3A06D yellow
|
||||
set -U fish_pager_color_prefix white --bold --underline
|
||||
set -U fish_pager_color_progress brwhite --background=cyan
|
||||
set -U fish_color_comment ffcc66
|
||||
set -U fish_color_param d3d0c8
|
||||
set -U fish_color_match 6699cc
|
||||
|
||||
echo "fish setup ✓"
|
29
macos/scripts/setup_symlinks
Executable file
29
macos/scripts/setup_symlinks
Executable file
@ -0,0 +1,29 @@
|
||||
#!/bin/sh
|
||||
|
||||
DOTS=$(dirname "$0")/..
|
||||
cd "$DOTS" || (echo "Directory not found: $DOTS"; exit 1)
|
||||
DOTS="$PWD"
|
||||
|
||||
setup_symlinks() {
|
||||
for source in $(find "$DOTS" -iname "*.symlink")
|
||||
do
|
||||
dest="$HOME/.`basename \"${source%.*}\"`"
|
||||
ln -sfn "$source" "$dest"
|
||||
done
|
||||
|
||||
echo "symlinks ✓"
|
||||
}
|
||||
|
||||
setup_configlinks() {
|
||||
for source in $(find "$DOTS" -iname "*.configlink")
|
||||
do
|
||||
dest="$HOME/.config/`basename \"${source%.*}\"`"
|
||||
ln -sfn "$source" "$dest"
|
||||
done
|
||||
|
||||
echo "configlinks ✓"
|
||||
}
|
||||
|
||||
setup_symlinks
|
||||
setup_configlinks
|
||||
|
7
macos/scripts/setup_ytfzf
Executable file
7
macos/scripts/setup_ytfzf
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo "downloading ytfzf"
|
||||
mkdir -p ~/.local/bin
|
||||
curl -sL "https://raw.githubusercontent.com/pystardust/ytfzf/master/ytfzf" >~/.local/bin/ytfzf
|
||||
chmod 755 ~/.local/bin/ytfzf
|
||||
echo "ytfzf ✓"
|
19
macos/scripts/update_rust_analyzer
Executable file
19
macos/scripts/update_rust_analyzer
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
|
||||
update_rust_analyzer() {
|
||||
if ! (which rust-analyzer > /dev/null)
|
||||
then
|
||||
echo "not installed"
|
||||
else
|
||||
echo "removing"
|
||||
rm /usr/local/bin/rust-analyzer
|
||||
fi
|
||||
echo "downloading rust analyzer"
|
||||
rust_analyzer_bin=/usr/local/bin/rust-analyzer
|
||||
curl -s -L https://github.com/rust-analyzer/rust-analyzer/releases/latest/download/rust-analyzer-mac -o $rust_analyzer_bin
|
||||
chmod +x $rust_analyzer_bin
|
||||
|
||||
echo "rust-analyzer ✓"
|
||||
}
|
||||
|
||||
update_rust_analyzer
|
Reference in New Issue
Block a user