- Auth w/ iCloud
- Accessiblity
- Display: Reduce Transparency
- Control Center
- Show Always: Wifi, Bluetooth, Sound
- Show Active: Focus, Mirroring, Display, Playing
- Battery: Menu w/ Percentage
- Clock: Date w/ Day, 24hr Digital, Seconds
- Dock: ~15% size w/ magnification, automatically show/hide, no recents
- Display: More Space
- Spotlight -> Spotlight Privacy: Exclude ~/GitHub
- Keyboard: Keyboard navigation
- Wallpaper: Choose photo, fill, show on all spaces
- Lock screen
- Start screen saver: Never
- Turn off on battery: Never
- Turn off on power: Never
- Require password: Immediately
- Message when locked:
Please return to Matt Cowley if found.\n(<phone> | me@mattcowley.co.uk)
(alt+return for newline)
https://disable-gatekeeper.github.io/#disabling-gatekeeper-permanently
Run sudo spctl --master-disable
, then select Anywhere
for Allow Applications from
in Privacy & Security
in settings.
- Settings
- Sync desktop & downloads
- Show all extensions
- Applications
- View Options: Show Library
- Toggle hidden files w/
Shift + Cmd + .
https://fonts.google.com/specimen/B612+Mono
Duplicate Pro as Pro Tweaks
- Background: #000, 100% opacity
- Font: B612 Mono Regular 12
- Antialias text
- Use bright colors for bold text
- Blink cursor
- Window size: 128x32
sudo xcode-select --install
https://github.com/ohmyzsh/ohmyzsh#basic-installation
https://github.com/romkatv/powerlevel10k#oh-my-zsh
Wizard options: powerline, unicode, lean, 1 line, compact, concise, instant_prompt=quiet
https://github.com/cli/cli#installation
https://github.com/Schniz/fnm#installation
Use --skip-shell
, then fnm use 22
(current LTS version) + fnm alias 22 default
.
.zshrc
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# If you come from bash you might have to change your $PATH.
export PATH="$HOME/bin:/usr/local/bin:/usr/local/sbin:$PATH"
# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"
# Set name of the theme to load. Optionally, if you set this to "random"
# it'll load a random theme each time that oh-my-zsh is loaded.
# See https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
ZSH_THEME="powerlevel10k/powerlevel10k"
# Set list of themes to load
# Setting this variable when ZSH_THEME=random
# cause zsh load theme from this variable instead of
# looking in ~/.oh-my-zsh/themes/
# An empty array have no effect
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )
# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"
# Uncomment the following line to use hyphen-insensitive completion. Case
# sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"
# Uncomment the following line to disable bi-weekly auto-update checks.
# DISABLE_AUTO_UPDATE="true"
# Uncomment the following line to change how often to auto-update (in days).
# export UPDATE_ZSH_DAYS=13
# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"
# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"
# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"
# Uncomment the following line to display red dots whilst waiting for completion.
COMPLETION_WAITING_DOTS="true"
# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"
# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# HIST_STAMPS="mm/dd/yyyy"
# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder
# Don't prompt for auto-updates, just do them
DISABLE_UPDATE_PROMPT="true"
# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
git
ssh-agent
)
# Enable ssh-agent using keychain
zstyle :omz:plugins:ssh-agent quiet yes
zstyle :omz:plugins:ssh-agent lazy yes
zstyle :omz:plugins:ssh-agent ssh-add-args --apple-load-keychain
source $ZSH/oh-my-zsh.sh
# User configuration
# export MANPATH="/usr/local/man:$MANPATH"
# You may need to manually set your language environment
# export LANG=en_US.UTF-8
# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
# export EDITOR='vim'
# else
# export EDITOR='mvim'
# fi
# Compilation flags
# export ARCHFLAGS="-arch x86_64"
# ssh
# export SSH_KEY_PATH="~/.ssh/rsa_id"
# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
# Add Brew
[[ -x "/opt/homebrew/bin/brew" ]] && \
eval "$(/opt/homebrew/bin/brew shellenv)"
# Load rbenv automatically
[[ -x "$(command -v rbenv)" ]] && \
eval "$(rbenv init -)"
# Load fnm (Node.js) automatically
[[ -x "$(command -v fnm)" ]] && \
eval "$(fnm env --use-on-cd --version-file-strategy=recursive)"
# Add npm auto-completion
[[ -x "$(command -v npm)" ]] && \
source <(npm completion)
# Expose elastic beanstalk CLI
[[ -d "$HOME/.ebcli-virtual-env/executables" ]] && \
export PATH="$PATH:$HOME/.ebcli-virtual-env/executables"
# Expose Go binaries
[[ -x "$(command -v go)" ]] && [[ -d "$(go env GOPATH)/bin" ]] && \
export PATH="$PATH:$(go env GOPATH)/bin"
# Expose Python binaries
[[ -x "$(command -v python3)" ]] && [[ -d "$(python3 -m site --user-base)/bin" ]] && \
export PATH="$PATH:$(python3 -m site --user-base)/bin"
# Add Visual Studio Code (code)
[[ -d "/Applications/Visual Studio Code.app/Contents/Resources/app/bin" ]] && \
export PATH="$PATH:/Applications/Visual Studio Code.app/Contents/Resources/app/bin"
# Expose gcloud CLI w/ auto-completion
[[ -d "$HOME/.google-cloud-sdk" ]] && \
. "$HOME/.google-cloud-sdk/path.zsh.inc" && \
. "$HOME/.google-cloud-sdk/completion.zsh.inc"
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
.huskyrc
# Load fnm (Node.js) automatically
[[ -x "$(command -v fnm)" ]] && \
eval "$(fnm env --version-file-strategy=recursive)"
# Ensure we're using the right Node.js version
fnm use --install-if-missing --silent-if-unchanged
mkdir -p ~/.config/husky && ln -s ~/.huskyrc ~/.config/husky/init.sh
.vimrc
syntax on
set number
set mouse=a
set colorcolumn=101
ssh-keygen -t ed25519 -C "me@mattcowley.co.uk"
w/ passphrase
.ssh/config
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
.gitconfig
[user]
name = MattIPv4
email = me@mattcowley.co.uk
[push]
autoSetupRemote = true
[http]
postBuffer = 524288000
[merge]
conflictStyle = zdiff3
[commit]
verbose = true
[rerere]
enabled = true
[url "git@github.com:"]
insteadOf = https://github.com/
Use git config --local user.email <email>
for projects that need different email
https://www.mozilla.org/en-GB/firefox/developer/
- Set as default browser in system settings
- Auth Firefox account
- Auth 1Password
- In
about:config
, enablesecurity.enterprise_roots.enabled
+browser.compactmode.show
+dom.security.https_only_mode
, disablemedia.hardwaremediakeys.enabled
+browser.warnOnQuitShortcut
, setnetwork.trr.mode
to3
andnetwork.trr.uri
tohttps://mozilla.cloudflare-dns.com/dns-query
, setbrowser.uidensity
to1
andbrowser.toolbars.bookmarks.visibility
tonever
- In Extensions, pin:
- uBlock
- Privacy Badger
- Dark Reader
- 1Password
- Referer Control
- Disable Javascript
- In Menu -> More Tools -> Customize toolbar:
- Enable compact mode density
- Before Search: Forward/Back, Reload, Home (no spacer)
- After Search: uBlock, Privacy Badger, Dark Reader, 1Password, Referer Control, Disable Javascript, Extensions, Overflow, Menu (no spacer)
https://www.google.com/chrome/dr/download
https://www.docker.com/products/docker-desktop/
https://code.visualstudio.com/download
https://www.postman.com/downloads/
https://www.figma.com/downloads/
- Appearance
- Compact w/ avatars
- 15px chat, 8px spacing, 90% zoom
- Accessibility
- Disable send button
- Disable TTS
https://slack.com/intl/en-gb/downloads/mac
https://github.com/Chatterino/chatterino2/releases/tag/nightly-build
Regular .dmg, not 10.15 version.
~/Library/Application\ Support/chatterino/Settings/settings.json
{
"appearance": {
"currentFontSize": 14,
"currentFontFamily": "B612 Mono",
"messages": {
"alternateMessageBackground": true,
"separateMessages": false,
"showTimestamps": true,
"timestampFormat": "h:mm",
"showLastMessageIndicator": true,
"showMessageLength": true
},
"splitheader": {
"showTitle": true,
"showGame": true,
"showViewerCount": true,
"showUptime": true
},
"showReplyButton": true,
"smoothScrollingNewMessages": true,
"uiScale2": 1,
"tabDirection": 0,
"theme": {
"name": "Dark"
}
},
"links": {
"linkInfoTooltip": true
},
"highlighting": {
"highlights": [
{
"pattern": "\\bmatt(ipv4)?\\b(?! damon)",
"showInMentions": true,
"alert": true,
"sound": true,
"regex": true,
"case": false,
"soundUrl": "",
"color": "#7f7f3f49"
}
],
"highlightSoundPath": ""
},
"emotes": {
"showUnlistedSevenTVEmotes": true,
"ffz": {
"global": true
}
},
"behaviour": {
"autoCloseThreadPopup": true,
"usernameRightClickBehavior": 0,
"usernameRightClickBehaviorWithModifier": 1
},
"hotkeys": {
"reconnect": {
"action": "reconnect",
"keySequence": "F6",
"arguments": []
},
"reload emotes": {
"action": "reloadEmotes",
"keySequence": "F5",
"arguments": []
}
}
}
~/Library/Application\ Support/chatterino/Settings/window-layout.json
{
"windows": [
{
"tabs": [
{
"highlightsEnabled": true,
"selected": true,
"splits2": {
"flexh": 1,
"flexv": 1,
"items": [
{
"data": {
"name": "alveussanctuary",
"type": "twitch"
},
"flexh": 1,
"flexv": 1.5,
"moderationMode": false,
"type": "split"
},
{
"data": {
"name": "alveusgg",
"type": "twitch"
},
"flexh": 1,
"flexv": 0.5,
"moderationMode": false,
"type": "split"
}
],
"type": "vertical"
},
"title": "Alveus"
},
{
"highlightsEnabled": true,
"splits2": {
"data": {
"name": "maya",
"type": "twitch"
},
"flexh": 1,
"flexv": 1,
"moderationMode": false,
"type": "split"
},
"title": "Maya"
},
{
"highlightsEnabled": true,
"splits2": {
"data": {
"name": "windowtowildlife",
"type": "twitch"
},
"flexh": 1,
"flexv": 1,
"moderationMode": false,
"type": "split"
},
"title": "WindowToWildlife"
},
{
"highlightsEnabled": true,
"splits2": {
"data": {
"name": "theconnorobrien",
"type": "twitch"
},
"flexh": 1,
"flexv": 1,
"moderationMode": false,
"type": "split"
},
"title": "Connor"
},
{
"highlightsEnabled": true,
"splits2": {
"flexh": 1,
"flexv": 1,
"items": [
{
"data": {
"type": "mentions"
},
"flexh": 1,
"flexv": 1,
"moderationMode": false,
"type": "split"
},
{
"data": {
"type": "whispers"
},
"flexh": 1,
"flexv": 1,
"moderationMode": false,
"type": "split"
}
],
"type": "vertical"
},
"title": "Mentions + Whispers"
},
{
"highlightsEnabled": true,
"splits2": {
"data": {
"name": "mattipv4",
"type": "twitch"
},
"flexh": 1,
"flexv": 1,
"moderationMode": true,
"type": "split"
},
"title": "MattIPv4"
}
],
"type": "main"
}
]
}
https://apps.apple.com/app/spark-email-app-by-readdle/id1176895641
- Set as default email app in mail
https://www.spotify.com/us/download/mac/
https://pilotmoon.com/scrollreverser/
- Launch at login
- Reverse mouse vertical only
- Enable accessbility access
https://crystalidea.com/macs-fan-control
- Launch at login
- Show fan + CPU average in menu bar
https://apps.apple.com/us/app/amphetamine/id937984704
- Launch at login
- Start session when launched
- Hide in dock
- Indefinite default duration
- End session when forced to sleep
https://github.com/Hammerspoon/hammerspoon#how-do-i-install-it
- Launch at login
- Enable accessibility access
.hammerspoon/init.lua
local log = hs.logger.new("", "info")
local function ok2str(ok)
if ok then return "ok" else return "fail" end
end
-- Reload config when file edited
hs.pathwatcher.new(os.getenv("HOME") .. "/.hammerspoon/", function(files)
for _,file in pairs(files) do
if file:sub(-4) == ".lua" then
hs.reload()
log.f("reloaded config: %s changed", file)
return
end
end
end):start()
-- Trigger Amphetamine on unlock
hs.caffeinate.watcher.new(function(event)
local eventName = hs.caffeinate.watcher[event]
if event == hs.caffeinate.watcher.screensDidUnlock then
local ok, result = hs.applescript('tell application "Amphetamine" to start new session')
log.f("started new Amphetamine session: %s, %s (%s)", ok2str(ok), result, eventName)
end
end):start()
-- Toggle WiFi when connected to dock
hs.usb.watcher.new(function(event)
if event["productName"] == "Dell Universal Dock D6000" then
if event["eventType"] == "added" then
log.f("disabling wifi: %s (%s) connected", event["productName"], event["vendorName"]);
hs.wifi.setPower(false)
end
if event["eventType"] == "removed" then
log.f("enabling wifi: %s (%s) disconnected", event["productName"], event["vendorName"]);
hs.wifi.setPower(true)
end
end
end):start()
https://github.com/johnste/finicky#installation
.finicky.js
module.exports = {
defaultBrowser: "Firefox Developer Edition",
handlers: [
{
match: finicky.matchDomains("meet.google.com"),
browser: "Google Chrome",
},
],
};
https://www.synaptics.com/products/displaylink-graphics/downloads/macos
- Launch at login
- Install login extension
- Finder
- Launchpad
- Firefox
- Discord
- Chatterino
- Spark
- Slack
- Spotify
- VSCode
- Figma
- Terminal
- (divider)
- Applications (right click in Finder, add to dock)
- Downloads
- Bin