From 5b4139e3c807ac3ac2f56b2bbd5590f4e1a04c79 Mon Sep 17 00:00:00 2001
From: 2Shirt <2xShirt@gmail.com>
Date: Fri, 26 Mar 2021 01:18:08 -0600
Subject: [PATCH] Add missing live-macos branch
This was not being pushed from a testing MacBook so I'm adding it all
at once. This is unfinished, still needs scripts to prep the working
macOS env from which the live env is built.
El Capitan code is likely to be dropped completely. Installing or
compiling dependencies in brew is problematic at this point.
---
setup/macos/El Capitan/Utilities.plist | 69 ++++++++++++
.../El Capitan/com.googlecode.iterm2.plist | Bin 0 -> 14002 bytes
setup/macos/Utilities.plist | 69 ++++++++++++
setup/macos/aliases | 16 +++
setup/macos/bashrc | 14 +++
setup/macos/com.googlecode.iterm2.plist | Bin 0 -> 15242 bytes
setup/macos/live-macos-startup | 25 +++++
setup/macos/update-base-image | 100 ++++++++++++++++++
setup/macos/vimrc | 81 ++++++++++++++
setup/macos/zshrc | 25 +++++
10 files changed, 399 insertions(+)
create mode 100644 setup/macos/El Capitan/Utilities.plist
create mode 100644 setup/macos/El Capitan/com.googlecode.iterm2.plist
create mode 100644 setup/macos/Utilities.plist
create mode 100644 setup/macos/aliases
create mode 100644 setup/macos/bashrc
create mode 100644 setup/macos/com.googlecode.iterm2.plist
create mode 100755 setup/macos/live-macos-startup
create mode 100755 setup/macos/update-base-image
create mode 100644 setup/macos/vimrc
create mode 100644 setup/macos/zshrc
diff --git a/setup/macos/El Capitan/Utilities.plist b/setup/macos/El Capitan/Utilities.plist
new file mode 100644
index 00000000..89304181
--- /dev/null
+++ b/setup/macos/El Capitan/Utilities.plist
@@ -0,0 +1,69 @@
+
+
+
+
+ Buttons
+
+
+ BundlePath
+ /Applications/iTerm.app
+ DescriptionKey
+ Hardware Diagnostics
+ Path
+ /Applications/iTerm.app/Contents/MacOS/iTerm2
+ TitleKey
+ WizardKit: Hardware Diagnostics
+
+
+ BundlePath
+ /Applications/Utilities/Disk Utility.app
+ DescriptionKey
+ Repair or erase a volume.
+ Path
+ /Applications/Utilities/Disk Utility.app/Contents/MacOS/Disk Utility
+ TitleKey
+ Disk Utility
+
+
+ Menu
+
+
+ BundlePath
+ /Applications/Utilities/Firmware Password Utility.app
+ Path
+ /Applications/Utilities/Firmware Password Utility.app/Contents/MacOS/Firmware Password Utility
+ TitleKey
+ Firmware Password Utility
+
+
+ BundlePath
+ /System/Library/CoreServices/Applications/Network Utility.app
+ Path
+ /System/Library/CoreServices/Applications/Network Utility.app/Contents/MacOS/Network Utility
+ TitleKey
+ Network Utility
+
+
+ BundlePath
+ /System/Library/CoreServices/Applications/RAID Utility.app
+ Path
+ /System/Library/CoreServices/Applications/RAID Utility.app/Contents/MacOS/RAID Utility
+ Show If
+
+ Selector
+ shouldShowRAIDUtility
+
+ TitleKey
+ RAID Utility
+
+
+ BundlePath
+ /Applications/Utilities/Terminal.app
+ Path
+ /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal
+ TitleKey
+ Terminal
+
+
+
+
diff --git a/setup/macos/El Capitan/com.googlecode.iterm2.plist b/setup/macos/El Capitan/com.googlecode.iterm2.plist
new file mode 100644
index 0000000000000000000000000000000000000000..71eb86a86c5ec452b76081d9fbe68c22b5fdaaeb
GIT binary patch
literal 14002
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
EJ2k)oG5`Po
literal 0
HcmV?d00001
diff --git a/setup/macos/Utilities.plist b/setup/macos/Utilities.plist
new file mode 100644
index 00000000..6d492017
--- /dev/null
+++ b/setup/macos/Utilities.plist
@@ -0,0 +1,69 @@
+
+
+
+
+ Buttons
+
+
+ BundlePath
+ /Applications/iTerm-2.app
+ DescriptionKey
+ Hardware Diagnostics
+ Path
+ /Applications/iTerm-2.app/Contents/MacOS/iTerm2
+ TitleKey
+ WizardKit: Hardware Diagnostics
+
+
+ BundlePath
+ /Applications/Utilities/Disk Utility.app
+ DescriptionKey
+ Repair or erase a volume.
+ Path
+ /Applications/Utilities/Disk Utility.app/Contents/MacOS/Disk Utility
+ TitleKey
+ Disk Utility
+
+
+ Menu
+
+
+ BundlePath
+ /Applications/Utilities/Firmware Password Utility.app
+ Path
+ /Applications/Utilities/Firmware Password Utility.app/Contents/MacOS/Firmware Password Utility
+ TitleKey
+ Firmware Password Utility
+
+
+ BundlePath
+ /System/Library/CoreServices/Applications/Network Utility.app
+ Path
+ /System/Library/CoreServices/Applications/Network Utility.app/Contents/MacOS/Network Utility
+ TitleKey
+ Network Utility
+
+
+ BundlePath
+ /System/Library/CoreServices/Applications/RAID Utility.app
+ Path
+ /System/Library/CoreServices/Applications/RAID Utility.app/Contents/MacOS/RAID Utility
+ Show If
+
+ Selector
+ shouldShowRAIDUtility
+
+ TitleKey
+ RAID Utility
+
+
+ BundlePath
+ /Applications/Utilities/Terminal.app
+ Path
+ /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal
+ TitleKey
+ Terminal
+
+
+
+
diff --git a/setup/macos/aliases b/setup/macos/aliases
new file mode 100644
index 00000000..4c91d8e6
--- /dev/null
+++ b/setup/macos/aliases
@@ -0,0 +1,16 @@
+alias cdtmp='cd "$(mktemp -d)"'
+alias du='du -sch'
+alias fix-perms='find -type d -exec chmod 755 "{}" \; && find -type f -exec chmod 644 "{}" \;'
+alias less='less -S'
+alias mkdir='mkdir -p'
+alias mv='mv -nv'
+alias q1=' ls -1'
+alias q1a=' ls -1A'
+alias q=' ls -lh'
+alias qa=' ls -lAh'
+alias qs=' ls'
+alias qsa=' ls -A'
+alias rm='rm -v'
+alias rmdirs='find -depth -mindepth 1 -type d -exec rmdir "{}" --ignore-fail-on-non-empty \;'
+alias tmux='tmux -f /etc/tmux.conf -S /Volumes/RAM_Disk/.tmux.socket'
+alias vim='vim -u /.vimrc'
diff --git a/setup/macos/bashrc b/setup/macos/bashrc
new file mode 100644
index 00000000..421cd315
--- /dev/null
+++ b/setup/macos/bashrc
@@ -0,0 +1,14 @@
+export HOME=/Volumes/RAM_Disk
+
+# Set Locale
+LC_ALL=en_US.UTF-8; export LC_ALL
+LANG=en_US.UTF-8; export LANG
+
+# Set PATH
+for p in /usr{/local/opt/{e2fsprogs,ruby,util-linux},/local,}/{bin,sbin}; do
+ PATH="${p}:${PATH}"
+done
+export PATH
+
+# Aliases
+source /.aliases
diff --git a/setup/macos/com.googlecode.iterm2.plist b/setup/macos/com.googlecode.iterm2.plist
new file mode 100644
index 0000000000000000000000000000000000000000..f851e10d725cb22065357c63aa8e11781a751991
GIT binary patch
literal 15242
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
literal 0
HcmV?d00001
diff --git a/setup/macos/live-macos-startup b/setup/macos/live-macos-startup
new file mode 100755
index 00000000..f6c7a043
--- /dev/null
+++ b/setup/macos/live-macos-startup
@@ -0,0 +1,25 @@
+#!/bin/bash
+#
+## Init macOS env
+
+# Set Locale
+LC_ALL=en_US.UTF-8; export LC_ALL
+LANG=en_US.UTF-8; export LANG
+
+# Set PATH
+for p in /usr{/local/opt/{e2fsprogs,ruby,util-linux},/local,}/{bin,sbin}; do
+ PATH="${p}:${PATH}"
+done
+export PATH
+
+# Create and mount RAMDisk
+if ! [ -d /Volumes/RAM_Disk ]; then
+ diskutil erasevolume HFS+ RAM_Disk $(hdiutil attach -nomount ram://524288)
+fi
+cd /Volumes/RAM_Disk
+
+# Stay awake
+caffeinate -id &
+
+# Run cmd
+"$1"
diff --git a/setup/macos/update-base-image b/setup/macos/update-base-image
new file mode 100755
index 00000000..59015015
--- /dev/null
+++ b/setup/macos/update-base-image
@@ -0,0 +1,100 @@
+#!/bin/bash
+#
+## Update BaseImage for use as WK
+
+set -o errexit
+set -o errtrace
+set -o nounset
+set -o pipefail
+
+# Prep
+echo "Initializing..."
+BASE_IMAGE="$1"
+IMAGE_DEV="$(hdiutil attach "${BASE_IMAGE}" | grep -Eo '(/dev/disk[0-9]+)\b')"
+OS_VERSION="$(ls /Volumes/*Base\ System | grep -E 'OS X|macOS' | sed -E 's/Install (OS X|macOS) (.*)\.app/\2/')"
+OUT_NAME="${HOME}/Desktop/WK ${OS_VERSION} ($(date +"%Y-%m-%d"))"
+WK_PATH="/Volumes/WK_UFD"
+
+# Convert to a 4 GB R/W image
+echo "Creating read-write copy of the ${OS_VERSION} Base System image..."
+hdiutil create -srcdevice "${IMAGE_DEV}s1" -format UDSB "${OUT_NAME}.sparsebundle"
+hdiutil detach "${IMAGE_DEV}"
+hdiutil resize -size 4g "${OUT_NAME}.sparsebundle"
+hdiutil attach "${OUT_NAME}.sparsebundle"
+diskutil rename "OS X Base System" "WK_UFD"
+
+# Remove Install app
+echo "Removing Install app..."
+rm -R "${WK_PATH}"/Install*.app
+
+# Update Utilities menu
+echo "Updating Utilities menu..."
+if [[ "${OS_VERSION}" == "El Capitan" ]]; then
+ cp -a "El Capitan/Utilities.plist" "${WK_PATH}/System/Installation/CDIS/OS X Utilities.app/Contents/Resources/Utilities.plist"
+else
+ cp -a Utilities.plist "${WK_PATH}/System/Installation/CDIS/macOS Utilities.app/Contents/Resources/Utilities.plist"
+fi
+
+# Homebrew
+echo "Installing Hombrew..."
+mkdir -p "${WK_PATH}/usr/local/bin"
+ln -s python3 "${WK_PATH}/usr/local/bin/python"
+rsync -aS /opt/ "${WK_PATH}/opt"/
+rsync -aS --exclude='.git*' /usr/local/{Cellar,Frameworks,Homebrew,bin,etc,include,lib,libexec,opt,sbin,share,var} "${WK_PATH}/usr/local"/
+
+# Fonts
+echo "Installing Fonts..."
+cp -a /Library/Fonts/Inconsolata*ttf "${WK_PATH}/System/Library/Fonts"/
+
+# iTerm2
+echo "Installing iTerm2..."
+if [[ "${OS_VERSION}" == "El Capitan" ]]; then
+ rsync -aS /Applications/iTerm.app "${WK_PATH}/Applications"/
+ rsync -aS "El Capitan/com.googlecode.iterm2.plist" "${WK_PATH}/var/root/Library/Preferences"/
+else
+ rsync -aS /Applications/iTerm-2.app "${WK_PATH}/Applications"/
+ rsync -aS com.googlecode.iterm2.plist "${WK_PATH}/var/root/Library/Preferences"/
+ rsync -aS /usr/lib/lib{apr,expat,ffi}* /Volumes/WK_UFD/usr/lib/
+ rsync -aS /System/Library/Frameworks/{MetalKit,Quartz*}.framework "${WK_PATH}/System/Library/Frameworks"/
+fi
+cp -a ../linux/include/airootfs/etc/skel/.tmux.conf "${WK_PATH}/etc/tmux.conf"
+rsync -aS /System/Library/Colors/System.clr "${WK_PATH}/System/Library/Colors"/
+rsync -aS /System/Library/Frameworks/{Scripting,ScriptingBridge,LocalAuthentication}.framework "${WK_PATH}/System/Library/Frameworks"/
+rsync -aS /usr/bin/locale "${WK_PATH}/usr/bin"/
+rsync -aLS /usr/share/locale/en_US.UTF-8 "${WK_PATH}/usr/share/locale"/
+
+# pipes-sh
+echo "Installing pipes.sh..."
+cp -a /usr/bin/tput "${WK_PATH}/usr/bin"/
+
+# Timezones
+if [[ ! -d "/var/db/timezone" ]]; then
+ echo "Installing timezones..."
+ rsync -aS /var/db/timezone "${WK_PATH}/var/db"/
+fi
+
+# zsh
+echo "Installing zsh..."
+cp -a /bin/zsh "${WK_PATH}/bin"/
+rsync -aS /usr/lib/zsh "${WK_PATH}/usr/lib"/
+rsync -aS /usr/share/zsh "${WK_PATH}/usr/share"/
+rsync -aS /usr/local/share/zsh "${WK_PATH}/usr/local/share"/
+
+# Misc
+cp -a aliases "${WK_PATH}/.aliases"
+cp -a bashrc "${WK_PATH}/etc/profile"
+cp -a vimrc "${WK_PATH}/.vimrc"
+cp -a zshrc "${WK_PATH}/etc/zshenv"
+
+# WizardKit
+echo "Installing WizardKit env..."
+touch "${WK_PATH}/.wk-live-macos"
+ln -s /Volumes/RAM_Disk/Logs "${WK_PATH}/var/root/Logs"
+cp -a ../../images/macOS.png "${WK_PATH}/usr/local/wallpaper.png"
+rsync -aS /usr/bin/{env,killall} "${WK_PATH}/usr/bin"/
+rsync -aS live-macos-startup ../../scripts/ "${WK_PATH}/usr/local/bin"/
+
+# Convert to compressed read-only image
+#echo "Converting to read-only image..."
+#hdiutil convert -format UDZO -o "${OUT_NAME}.sparsebundle" "${OUT_NAME}.dmg"
+# TODO
diff --git a/setup/macos/vimrc b/setup/macos/vimrc
new file mode 100644
index 00000000..6a4dc237
--- /dev/null
+++ b/setup/macos/vimrc
@@ -0,0 +1,81 @@
+" All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just
+" /usr/share/vim/vimcurrent/debian.vim) and sourced by the call to :runtime
+" you can find below. If you wish to change any of those settings, you should
+" do it in this file (/etc/vim/vimrc), since debian.vim will be overwritten
+" everytime an upgrade of the vim packages is performed. It is recommended to
+" make changes after sourcing debian.vim since it alters the value of the
+" 'compatible' option.
+
+" This line should not be removed as it ensures that various options are
+" properly set to work with the Vim-related packages available in Debian.
+runtime! debian.vim
+
+" Uncomment the next line to make Vim more Vi-compatible
+" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
+" options, so any other options should be set AFTER setting 'compatible'.
+"set compatible
+
+" Vim5 and later versions support syntax highlighting. Uncommenting the next
+" line enables syntax highlighting by default.
+syntax on
+
+" If using a dark background within the editing area and syntax highlighting
+" turn on this option as well
+set background=dark
+
+" Uncomment the following to have Vim jump to the last position when
+" reopening a file
+"if has("autocmd")
+" au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
+"endif
+
+" Uncomment the following to have Vim load indentation rules and plugins
+" according to the detected filetype.
+"if has("autocmd")
+" filetype plugin indent on
+"endif
+
+" The following are commented out as they cause vim to behave a lot
+" differently from regular Vi. They are highly recommended though.
+"set showcmd " Show (partial) command in status line.
+set showmatch " Show matching brackets.
+"set ignorecase " Do case insensitive matching
+"set smartcase " Do smart case matching
+"set incsearch " Incremental search
+"set autowrite " Automatically save before commands like :next and :make
+"set hidden " Hide buffers when they are abandoned
+"set mouse=a " Enable mouse usage (all modes)
+
+" Source a global configuration file if available
+if filereadable("/etc/vim/vimrc.local")
+ source /etc/vim/vimrc.local
+endif
+
+" 2Shirt Stuff
+set autoindent " align the new line indent with the previous line
+set expandtab " insert spaces when hitting TABs
+set nowrap " I'd rather manually wrap than manually unwrap
+set shiftround " round indent to multiple of 'shiftwidth'
+set shiftwidth=2 " operation >> indents 2 columns; << unindents 2 columns
+set softtabstop=2 " insert/delete 2 spaces when hitting a TAB/BACKSPACE
+set tabstop=2 " an hard TAB displays as 2 columns
+
+" Python Stuff.
+au FileType python set textwidth=79 " lines longer than 79 columns will be broken
+au FileType python call matchadd('ColorColumn', '\%80v')
+
+" Do wrap stuff
+au FileType mail set wrap
+au FileType text set wrap
+
+" Enable code folding
+set foldmethod=indent
+" Keep all folds open when a file is opened
+augroup OpenAllFoldsOnFileOpen
+ autocmd!
+ autocmd BufRead * normal zR
+augroup END
+
+" macOS stuff
+set backspace=indent,eol,start
+set ruler
diff --git a/setup/macos/zshrc b/setup/macos/zshrc
new file mode 100644
index 00000000..5e3d7fab
--- /dev/null
+++ b/setup/macos/zshrc
@@ -0,0 +1,25 @@
+export HOME=/Volumes/RAM_Disk
+export LC_ALL=en_US.UTF-8
+export LANG=en_US.UTF-8
+export EDITOR='vim'
+export VISUAL='vim'
+export PAGER='less'
+
+export XDG_CACHE_HOME="$HOME/.cache"
+export XDG_CONFIG_DIRS="/etc/xdg"
+export XDG_CONFIG_HOME="/"
+export XDG_DATA_DIRS="/usr/local/share:/usr/share"
+export XDG_DATA_HOME="$HOME/.local/share"
+
+# Ensure path arrays do not contain duplicates.
+typeset -gU cdpath fpath mailpath path
+
+path=(
+ /usr/local/opt/{e2fsprogs,ruby,util-linux}/{bin,sbin}
+ /usr/local/{bin,sbin}
+ $path
+)
+
+## Load aliases
+. "/.aliases"
+