I have been consistently using a series of commands for some time to reproduce a development environment across various machines. For the most part, these commands were kept as gists. Recently, I managed to compile them all into a primary shell script (along with optional secondary scripts) and a runcom (rc) file. I hope this proves helpful to others!
“On a UNIX system, everything is a file; if something is not a file, it is a process.” ― Machtelt Garrels, Introduction To Linux: A Hands-On Guide
- Table of Contents
- Setup Instructions
- Git
- Packages
- IntelliJ Tasks - GitHub Issue Integration
- TODO
- Reference
Warning
- The script is tested on Apple M2/M3/M4 Pro (should also work on M1) and zsh shell.
- Type
bashand hit enter. If you see the error "Bash is required to interpret this script", change tobashshell as Homebrew install script uses bash.- If you haven't already installed Xcode Command Line Tools, you'll see a message that The Xcode Command Line Tools will be installed.
Check the output below to see if the Command Line Tools are installed:
==> Searching online for the Command Line Tools
==> /usr/bin/sudo /usr/bin/touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
==> Installing Command Line Tools for Xcode-15.3
==> /usr/bin/sudo /usr/sbin/softwareupdate -i Command\ Line\ Tools\ for\ Xcode-15.3
Software Update Tool
Finding available software
Downloading Command Line Tools for Xcode
Downloaded Command Line Tools for Xcode
Installing Command Line Tools for Xcode
Done with Command Line Tools for Xcode- If your Mac is managed (work or school) then try to get an admin account and switch user. For e.g. if the admin
account is
Koadminthensu Koadminand enter the password for that account with higher privileges - Install Homebrew (Pre-requisite)
- Clone this repo:
git clone https://github.com/yaravind/dev-tools.gitor download as zip (Pre-requisite) - cd dev-tools
- Make
setup_env.shexecutable: chmod +x setup_env.sh jenv_setup.sh git_setup.sh gen_dock_apps.sh dock_setup.sh - Run: ./setup_env.sh
- Copy
.zshrc(or.bashrcbased on your shell) to home directory: cp .zshrc ~/ and run source ~ /.zshrc - Run ./jenv_setup.sh to add JDK
- Run ./git_setup.sh to setup Git Credentials
- Run ./dock_setup.sh to setup macOS Dock
Warning (on macOS)
Your terminal does not have App Management permissions, so Homebrew will delete and reinstall the app. This may result in some configurations (like notification settings or location in the Dock/Launchpad) being lost. To fix this, go to System Settings > Privacy & Security > App Management and add or enable your terminal.
set_env.sh is the primary script and starting point that automates the installation and configuration of various
developer tools for Apple M1/M2 Pro. At a high level it will
- Disables the terminal login banner.
- Install developer command-line and other productivity tools (JDK compatible with M1/M2, Maven, Mamba, Conda, Python etc.).
- Install modern developer fonts.
- Install IntelliJ IDEA CE/Ultimate, PyCharm CE/Ultimate and VS Code.
- Set required environment variables.
- Verify and highlight the successful installation and configuration of the tools.
- Some notable tools include
Installed productivity shell utils
| Utility | Usage |
|---|---|
| htop | Improved top (interactive process viewer) |
| tree | Display directories as trees (with optional color/HTML output) |
| jq | Lightweight and flexible command-line JSON processor |
| gh | GitHub command-line tool |
| azure-cli | |
| tldr | Simplified and community-driven man pages |
| graphviz | Convert dot files to images |
| eza | A modern alternative to ls |
| trash | Moves files to the trash, which is safer because it is reversible |
| jenv | Manage multiple versions of Java |
| bat | Clone of cat(1) with syntax highlighting and Git integration |
| thefuck | Programmatically correct last mistyped console command |
| pandoc | Swiss-army knife of markup format conversion |
| lnav | tool for viewing and analyzing log files |
| node | JavaScript runtime environment |
| llm | Access large language models from the command-line |
Highly recommend this course if you are beginning your career as a software engineer: Unix Tools: Data, Software and Production Engineering by Prof. Diomidis Spinellis.
mkdir ~/Developer: It has a fancy icon in Finder!
git_setup.sh automates the configuration of Git user credentials. It prompts the user to input their name and email
setp_jenv.sh automates the process of adding Java Virtual Machine (JVM) installations to the jenv version manager on
a macOS system. Here is an overview of what the script does:
- Uses
/usr/libexec/java_home --xmlto get XML output of the installed JVMs. - Parses the installation directories using
xmllint - Adds the JVMs to
jenvusingjenv addcommand. - Lists the JVMs managed
jenv versionscommand.
Use the following command to list the version, architecture, and folder location of all installed JVMs on your Mac:
$ /usr/libexec/java_home --verbose
Output:
Matching Java Virtual Machines (2):
11.0.25 (arm64) "Microsoft" - "OpenJDK 11.0.25" /Library/Java/JavaVirtualMachines/microsoft-11.jdk/Contents/Home
1.8.0_422 (arm64) "Amazon" - "Amazon Corretto 8" /Users/aravind/Library/Java/JavaVirtualMachines/corretto-1.8.0_422/Contents/Home
/Library/Java/JavaVirtualMachines/microsoft-11.jdk/Contents/Home
You can use the following commands to then enable specific JDK versions:
- Set Global version: jenv global xx
- Set Local version: jenv local xx. Local Java version for the current working directory. This will create a
.java-versionfile we can check into Git for your projects
dock_setup.sh automates the customization of the macOS Dock by adding commonly used applications and removing
default ones. The script uses the dockutil command-line utility to manage the Dock items. Here is an overview of what
the script does:
- Customizes the settings of the Dock such as icon size, magnification, and auto-hide behavior.
- Removes all existing applications from the Dock to start with a clean slate.
- Adds a predefined list of preferred applications to the Dock (chrome, finder, vscode etc.) in a specific order.
- Adds default folders to the right side of the Dock for easy access. The folders added are:
- Applications folder
- Documents folder
- Downloads folder
- Trash
- Restarts the Dock to apply the changes immediately.
The Application names to be added to the Dock are read from dock_apps.txt file. It can be generated using the
gen_dock_apps.sh script. You can also manually create and edit the file by following the guidelines:
- Create a new text file named
dock_apps.txtin the same directory as thedock_setup.shscript. - Open the
dock_apps.txtfile in a text editor. - List the names of the applications you want to add to the Dock, one per line.
- Ensure that the names match the application names as they appear in the
/Applicationsfolder. You can right-click on an application in the Applications folder and select "Get Info" to see the exact name. If there is a space in the name, ensure to escape it with\. For e.g./Applications/Microsoft\ Teams.app - Include the file extension
.appfor each application name. - If you want to add folders (like Documents or Downloads), you can include them as well, but make sure to specify
the full path (e.g.,
/Users/yourusername/Documents). - If you want to add system applications, you may need to provide the full path (e.g.,
/System/Applications/System Settings.app). - You can add a comment line starting with
--to describe sections or provide context, but these lines will be ignored by the script. - You use
SPACERas a placeholder to add a spacer in the Dock. - Example content of
dock_apps.txt:
- Ensure that the names match the application names as they appear in the
vscode_setup.sh automates the installation of Visual Studio Code extensions listed in a file named vscode.txt.
Add the following aliases to .bashrc
alias gcfg='git config -l'
alias gs='git status '
alias ga='git add '
alias gb='git branch '
alias gc='git commit -m'
alias gca='git commit --amend -m'
alias gac='git add -A . && git commit -m'
alias gp='git push origin master'
alias gd='git diff'
alias go='git checkout '
alias gl='git log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate'
alias gsl='git shortlog'
alias gslu='git log --format='%aN' | sort -u'
alias gslc='git shortlog -sn'
gsu() { git log --shortstat --author="$1" | grep -E "fil(e|es) changed" | awk '{files+=$1; inserted+=$4; deleted+=$6; delta+=$4-$6; ratio=deleted/inserted} END {printf "Commit stats:\n- Files changed (total).. %s\n- Lines added (total).... %s\n- Lines deleted (total).. %s\n- Total lines (delta).... %s\n- Add./Del. ratio (1:n).. 1 : %s\n", files, inserted, deleted, delta, ratio }' - ;}
gw() { git whatchanged --since "$1" --oneline --name-only --pretty=format: | sort | uniq; }rishik@rishik-computer:~/ws/linux-cheatsheet$ gl
5e737fc (HEAD -> master)\ add examples for git commands\ [Aravind R. Yarram]
accef64 (origin/master, origin/HEAD)\ add exaples for find & locate\ [Aravind R. Yarram]
d592777\ add history command examples\ [Aravind R. Yarram]
46b5609\ add references\ [Aravind R. Yarram]
caa8be3\ add references\ [Aravind R. Yarram]
6c3afc4\ add TOC\ [Aravind R. Yarram]
6d72532\ add TOC\ [Aravind R. Yarram]
75d2fe9\ add examples for which and alias commands\ [Aravind R. Yarram]
ff00092\ add examples for file command\ [Aravind R. Yarram]
f0b1593\ notes for file command\ [Aravind R. Yarram]
d4c2afb\ format content\ [Aravind R. Yarram]
3751b09\ add notes for Files\ [Aravind R. Yarram]
2617c7e\ Initial commit\ [GitHub]Output is sorted by name.
rishik@rishik-computer:~/ws/linux-cheatsheet$ gslu
Aravind R Yarram
Aravind R. YarramOutput is sorted by commit count.
rishik@rishik-computer:~/ws/linux-cheatsheet$ gslc
12 Aravind R. Yarram
1 Aravind R Yarramrishik@rishik-computer:~/ws/datasets$ gw 09/01/2018
computer/cpu-performance-data.csv
flight/2014_jan_carrier_performance.csv
.gitignore
machine-learning-a2z/Part 1 - Data Preprocessing/Data.csv
machine-learning-a2z/readme.txt
README.md
rishik@rishik-computer:~/ws/datasets$ gw "10/01/2018"
computer/cpu-performance-data.csv
flight/2014_jan_carrier_performance.csv
.gitignore
README.mdrishik@rishik-computer:~/ws/linux-cheatsheet$ gsu Aravind R. Yarram
Commit stats:
- Files changed (total).. 18
- Lines added (total).... 490
- Lines deleted (total).. 35
- Total lines (delta).... 455
- Add./Del. ratio (1:n).. 1 : 0.0714286Reference: https://help.ubuntu.com/community/Repositories
cat /etc/apt/sources.list - lists all the repositories
sudo apt update - updates the package index cache
sudo apt upgrade - upgrades all packages to latest versions
sudo apt upgrad <package-name> - upgrades specified package to latest version
apt-cache policy <package-name> - lists the currently installed version and available versions
apt-get install <package-name>=<version> - install specific version of a package. get version from apt-cache policy
command
apt-get install apache2=2.4.7-1ubuntu4.5
apt-mark hold - apt-mark allows you to pin the package to an installed ver. apt/apt-get upgrade doesn't upgrade to latest
aptitude versions - shows all the versions available
Configure IntelliJ to use GitHub Issues as a task manager. This allows you to create, view, and manage GitHub issues directly.
- https://www.warp.dev/pricing
- https://www.cursor.com/
- https://lawand.io/taskbar/
- https://displaybuddy.app/
- https://github.com/sharkdp/vivid
- https://icemenubar.app/
- https://github.com/dmarcotte/easy-move-resize
- https://www.alfredapp.com/
- https://obsidian.md/
- cmd
Disable .DS_Store files
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true
defaults write =com.apple.finder ShowPathbar -bool true - It show the path on the bottom of finder when navigating
nested folder
