MAC Initial install

Ich habe mir die Tage einen M1 MAC zugelegt, da dies mein erstes mal in der Apple Welt war und ich ein paar Sachen von Anfang an vermisste, habe ich im Zuge meines Einrichtungs und Kennenlernprozesses einfach ein paar Stichpunkte aufgeschrieben.

Als erstes wollte ich ein paar linux tools haben. Relativ schnell stieß ich auf Homebrew, einen Paketmanager außerhalb des App Stores, für so ziemlich alle Opensource tools.
Wofür man aber erstmal Xcode benötigt, welches man wie folgt installiert:

sudo xcode-select --install

(Lustig war, ich habe hier seit Jahren mal wieder eine Zeiteinschätzung der Installation von mehr als ein Jahr gesehen.)

Schließlich kann man Homebrew selber installieren:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

Jetzt hat man Homebrew zwar, aber leider funktioniert der noch nicht, da MAC OS mit seiner zsh leider nicht von Haus aus die PATH Variable setzt.

Da wir es jetzt eh anfassen müssen und wir glücklicherweise bereits default die zsh haben, habe ich selbstverständlich sofort oh my zsh installiert:

sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

und an unsere bedürfnisse angepasst:

vim .zshrc

folgende Sachen sind zu ändern:

export PATH=/opt/homebrew/bin:$HOME/bin:/usr/local/bin:$PATH
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:$HOME/.scripts
export PYTHONPATH=/usr/lib/python3.9/site-packages

ZSH_THEME="ys"
zstyle ':omz:update' mode auto
plugins=(git macos macports brew colored-man-pages colorize zsh-interactive-cd)

alias vi="nvim"
alias ducks="du -cksh * | sort -rn | head"

# function to detect ddos attacks
 function detect-ddos {
   sudo netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
 }

fdir() {
  local dir
  dir=$(find ${1:-.} -path '*/\.*' -prune \
                  -o -type d -print 2> /dev/null | fzf +m) &&
  cd "$dir"
}

#fuzzyfind zsh history and execute this command
fhist() {
  print -z $( ([ -n "$ZSH_NAME" ] && fc -l 1 || history) | fzf +s --tac | sed -E 's/ *[0-9]*\*? *//' | sed -E 's/\\/\\\\/g')
}
# fuzzykill process but only show those who are killable by you
fkill() {
    local pid
    if [ "$UID" != "0" ]; then
        pid=$(ps -f -u $UID | sed 1d | fzf -m | awk '{print $2}')
    else
        pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')
    fi

    if [ "x$pid" != "x" ]
    then
        echo $pid | xargs kill -${1:-9}
    fi
}

# tmux functions
# zsh; needs setopt re_match_pcre.
tmuxkillf () {
    local sessions
    sessions="$(tmux ls|fzf --exit-0 --multi)"  || return $?
    local i
    for i in "${(f@)sessions}"
    do
        [[ $i =~ '([^:]*):.*' ]] && {
            echo "Killing $match[1]"
            tmux kill-session -t "$match[1]"
        }
    done
}
# tm - create new tmux session, or switch to existing one. Works from within tmux too. (@bag-man)
# `tm` will allow you to select your tmux session via fzf.
# `tm irc` will attach to the irc session (if it exists), else it will create it.

tm() {
  [[ -n "$TMUX" ]] && change="switch-client" || change="attach-session"
  if [ $1 ]; then
    tmux $change -t "$1" 2>/dev/null || (tmux new-session -d -s $1 && tmux $change -t "$1"); return
  fi
  session=$(tmux list-sessions -F "#{session_name}" 2>/dev/null | fzf --exit-0) &&  tmux $change -t "$session" || echo "No sessions found."
}

# docker
# Select a docker container to start and attach to
function da() {
  local cid
  cid=$(docker ps -a | sed 1d | fzf -1 -q "$1" | awk '{print $1}')

  [ -n "$cid" ] && docker start "$cid" && docker attach "$cid"
}

# Select a running docker container to stop
function ds() {
  local cid
  cid=$(docker ps | sed 1d | fzf -q "$1" | awk '{print $1}')

  [ -n "$cid" ] && docker stop "$cid"
}

# Select a docker container to remove
function drm() {
  local cid
  cid=$(docker ps -a | sed 1d | fzf -q "$1" | awk '{print $1}')

  [ -n "$cid" ] && docker rm "$cid"
}

# Same as above, but allows multi selection:
function drm() {
  docker ps -a | sed 1d | fzf -q "$1" --no-sort -m --tac | awk '{ print $1 }' | xargs -r docker rm
}

# Select a docker image or images to remove
function drmi() {
  docker images | sed 1d | fzf -q "$1" --no-sort -m --tac | awk '{ print $3 }' | xargs -r docker rmi
}

Das nächste was wir installieren, ist ein neues Terminal, da ich als Colorscheme gruvbox sehr mag, laden wir das Colorscheme direkt runter:

wget https://raw.githubusercontent.com/mbadolato/iTerm2-Color-Schemes/master/schemes/Gruvbox%20Dark.itermcolors -o ~/Documents/Gruvbox_Dark.itermcolors

nun folgt die Installation von iterm:

brew install --cask iterm2

Installiere nun das gruvbox color theme:
(als erstes importieren wir das zuvor heruntergeladene Colorscheme und wählen es anschließend ganz normal aus)

was mich bis hierhin sehr störte, ich kann mit shortcuts die Fenster nicht arrangieren, also habe ich hierfür eine Möglichkeit gesucht. Jedoch kennt MAC OS tatsächlich von Haus aus keine Möglichkeit die Fenster zu arrangieren.
Also muss auch hierfür eine Lösung her:

sudo brew install --cask rectangle

vor einiger Zeit habe ich von Wox gelesen, welches Alfred nachempfunden ist und einem die Spotlight Funktionalität nochmal aufgebohrt zur Verfügung stellt und die Produktivität unglaublich erhöht.
Mit:

brew install alfred

installiert ihr Alfred 4.

als nächstes wollen wir neovim und eine gui dafür:

brew install --cask vimr

sowie den fuzzy finder, um die Funktionen aus der zsh auch nutzen zu können:

brew install fzf

Dann installieren wir uns noch ein paar tools:

brew install tree
brew install bat
brew install delta

und tmux darf natürlich auch nicht fehlen:

brew install tmux

hier mag ich auch immer gern den Paketmanager für tmux mit installieren:

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
vi .tmux.conf

und passen die .conf dazu an:
(Wer mehr Anpassungen in tmux oder was auch immer haben will, kann sich gern meine dotconfs anschauen.)

set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'

set -g @plugin 'egel/tmux-gruvbox'
set -g @tmux-gruvbox 'dark' # or 'light'

run '~/.tmux/plugins/tpm/tpm'

Und initialisieren die Installation der tmux Pakete mit PREFIX+I #(Install)

Hier merkte ich, dass es ganz schön viel ist, was man noch machen muss und wollte meine Erfahrungen in ein Notizblock schreiben.
Leider ist die App sehr unnütz, also brauchte ich auch hierfür eine extra App.
Disclaimer; ab jetzt wird es GUI lastig. :) Meine Wahl viel auf Joplin:

brew install joplin

Außerdem brauche ich auch meine altbewährte Passwortverwaltung:

brew install keepassxc

Ich mag nach wie vor nicht meine Passwörter mit einer fremden Firma teilen.

Außerdem für remotesupport:

brew install anydesk

Meine Nextcloud:

brew install nextcloud

Und ein VPN Client für OpenVPN:

sudo softwareupdate --install-rosetta
brew install openvpn-connect

Das war es soweit erstmal von mir. Falls mir noch etwas einfällt, ergänze ich diesen Artikel, damit alles schön beisammen bleibt.