diff --git a/bin/omakub-font b/bin/omakub-font index 9174ddb..2b2a9d6 100644 --- a/bin/omakub-font +++ b/bin/omakub-font @@ -1,18 +1,44 @@ -# Pick a preconfigured theme -FONT=$(gum choose "Cascadia Mono" "Fira Mono" "JetBrains Mono" "Meslo" --header "Choose your programming font:" --height 6 | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g') +set_font() { + local font_name=$1 + local url=$2 + local file_type=$3 + local file_name="${font_name/ Nerd Font/}" -[ ! -n "$FONT" ] && exit 0 + if ! $(fc-list | grep -i "$font_name" > /dev/null); then + cd /tmp + wget -O "$file_name.zip" "$url" + unzip "$file_name.zip" -d "$file_name" + cp "$file_name"/*."$file_type" ~/.local/share/fonts + rm -rf "$file_name.zip" "$file_name" + fc-cache + cd - + fi -if [ "$FONT" == "cascadia-mono" ]; then - NERD_FONT="CaskaydiaMono Nerd Font" -elif [ "$FONT" == "fira-mono" ]; then - NERD_FONT="FiraMono Nerd Font" -elif [ "$FONT" == "jetbrains-mono" ]; then - NERD_FONT="JetBrainsMono NFM" -elif [ "$FONT" == "meslo" ]; then - NERD_FONT="MesloLGLDZ Nerd Font" + gsettings set org.gnome.desktop.interface monospace-font-name "$font_name 10" + cp "$OMAKUB_PATH/fonts/alacritty/$file_name.toml" ~/.config/alacritty/font.toml + sed -i "s/\"editor.fontFamily\": \".*\"/\"editor.fontFamily\": \"$font_name\"/g" ~/.config/Code/User/settings.json +} + +if [ "$#" -gt 0 ]; then + choice=${!#} +else + choice=$(gum choose "Cascadia Mono" "Fira Mono" "JetBrains Mono" "Meslo" --height 6) fi -gsettings set org.gnome.desktop.interface monospace-font-name "$NERD_FONT 10" -cp $OMAKUB_PATH/fonts/alacritty/$FONT.toml ~/.config/alacritty/font.toml -sed -i "s/\"editor.fontFamily\": \".*\"/\"editor.fontFamily\": \"$NERD_FONT\"/g" ~/.config/Code/User/settings.json +case $choice in + "Cascadia Mono") + set_font "CaskaydiaMono Nerd Font" "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/CascadiaMono.zip" "ttf" + ;; + "Fira Mono") + set_font "FiraMono Nerd Font" "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/FiraMono.zip" "otf" + ;; + "JetBrains Mono") + set_font "JetBrainsMono Nerd Font" "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip" "ttf" + ;; + "Meslo") + set_font "MesloLGS Nerd Font" "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.zip" "Meslo" "ttf" + ;; + * ) + exit 0 + ;; +esac diff --git a/configs/zellij.kdl b/configs/zellij.kdl index 5554b70..8c761c0 100644 --- a/configs/zellij.kdl +++ b/configs/zellij.kdl @@ -1,2 +1,3 @@ theme "tokyo-night" default_layout "compact" +on_force_close "quit" diff --git a/fonts/alacritty/cascadia-mono.toml b/fonts/alacritty/CaskaydiaMono.toml similarity index 100% rename from fonts/alacritty/cascadia-mono.toml rename to fonts/alacritty/CaskaydiaMono.toml diff --git a/fonts/alacritty/fira-mono.toml b/fonts/alacritty/FiraMono.toml similarity index 100% rename from fonts/alacritty/fira-mono.toml rename to fonts/alacritty/FiraMono.toml diff --git a/fonts/alacritty/jetbrains-mono.toml b/fonts/alacritty/JetBrainsMono.toml similarity index 100% rename from fonts/alacritty/jetbrains-mono.toml rename to fonts/alacritty/JetBrainsMono.toml diff --git a/fonts/alacritty/meslo.toml b/fonts/alacritty/MesloLGS.toml similarity index 100% rename from fonts/alacritty/meslo.toml rename to fonts/alacritty/MesloLGS.toml diff --git a/install.sh b/install.sh index 0a712ed..8ef492f 100644 --- a/install.sh +++ b/install.sh @@ -1,6 +1,3 @@ -# Be fancy -source ~/.local/share/omakub/ascii.sh - # Exit immediately if a command exits with a non-zero status set -e diff --git a/install/app-chrome.sh b/install/app-chrome.sh index d2ef64e..8775da9 100644 --- a/install/app-chrome.sh +++ b/install/app-chrome.sh @@ -1,4 +1,4 @@ -cd ~/Downloads +cd /tmp wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo apt install -y ./google-chrome-stable_current_amd64.deb rm google-chrome-stable_current_amd64.deb diff --git a/install/app-fastfetch.sh b/install/app-fastfetch.sh new file mode 100644 index 0000000..2bf9d6a --- /dev/null +++ b/install/app-fastfetch.sh @@ -0,0 +1,3 @@ +sudo add-apt-repository ppa:zhangsongcui3371/fastfetch +sudo apt update +sudo apt install -y fastfetch diff --git a/install/app-gum.sh b/install/app-gum.sh index 589f11b..7163259 100644 --- a/install/app-gum.sh +++ b/install/app-gum.sh @@ -1,5 +1,5 @@ # Gum is used for the Omakub commands for tailoring Omakub after the initial install -cd ~/Downloads +cd /tmp GUM_VERSION="0.14.1" # Use known good version wget -O gum.deb "https://github.com/charmbracelet/gum/releases/latest/download/gum_${GUM_VERSION}_amd64.deb" sudo apt install -y ./gum.deb diff --git a/install/app-lazydocker.sh b/install/app-lazydocker.sh index afe2191..6f62afb 100644 --- a/install/app-lazydocker.sh +++ b/install/app-lazydocker.sh @@ -1,4 +1,4 @@ -cd ~/Downloads +cd /tmp LAZYDOCKER_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazydocker/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') curl -sLo lazydocker.tar.gz "https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_${LAZYDOCKER_VERSION}_Linux_x86_64.tar.gz" tar -xf lazydocker.tar.gz lazydocker diff --git a/install/app-lazygit.sh b/install/app-lazygit.sh index b038cc2..70f90fe 100644 --- a/install/app-lazygit.sh +++ b/install/app-lazygit.sh @@ -1,4 +1,4 @@ -cd ~/Downloads +cd /tmp LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') curl -sLo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz" tar -xf lazygit.tar.gz lazygit diff --git a/install/app-localsend.sh b/install/app-localsend.sh index 14cdefa..56b571e 100644 --- a/install/app-localsend.sh +++ b/install/app-localsend.sh @@ -1,4 +1,4 @@ -cd ~/Downloads +cd /tmp LOCALSEND_VERSION=$(curl -s "https://api.github.com/repos/localsend/localsend/releases/latest" | grep -Po '"tag_name": "v\K[^"]*') wget -O localsend.deb "https://github.com/localsend/localsend/releases/latest/download/LocalSend-${LOCALSEND_VERSION}-linux-x86-64.deb" sudo apt install -y ./localsend.deb diff --git a/install/app-neovim.sh b/install/app-neovim.sh index d209dda..1548e63 100644 --- a/install/app-neovim.sh +++ b/install/app-neovim.sh @@ -1,5 +1,3 @@ -sudo add-apt-repository -y ppa:neovim-ppa/stable -sudo apt update sudo apt install -y neovim if [ ! -d "$HOME/.config/nvim" ]; then diff --git a/install/app-vscode.sh b/install/app-vscode.sh index 531d437..b1a39d7 100644 --- a/install/app-vscode.sh +++ b/install/app-vscode.sh @@ -1,4 +1,4 @@ -cd ~/Downloads +cd /tmp wget -O code.deb 'https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64' sudo apt install -y ./code.deb rm code.deb diff --git a/install/app-zellij.sh b/install/app-zellij.sh index 50585af..fbae982 100644 --- a/install/app-zellij.sh +++ b/install/app-zellij.sh @@ -1,4 +1,4 @@ -cd ~/Downloads +cd /tmp wget -O zellij.tar.gz "https://github.com/zellij-org/zellij/releases/latest/download/zellij-x86_64-unknown-linux-musl.tar.gz" tar -xf zellij.tar.gz zellij sudo install zellij /usr/local/bin diff --git a/install/docker.sh b/install/docker.sh index 7ebc546..eedb70a 100644 --- a/install/docker.sh +++ b/install/docker.sh @@ -1,4 +1,14 @@ -sudo apt install -y docker.io docker-buildx +# Add the official Docker repo +sudo install -m 0755 -d /etc/apt/keyrings +sudo wget -qO /etc/apt/keyrings/docker.asc https://download.docker.com/linux/ubuntu/gpg +sudo chmod a+r /etc/apt/keyrings/docker.asc +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt update + +# Install Docker engine and standard plugins +sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras + +# Give this user privileged Docker access sudo usermod -aG docker ${USER} # Use local logging driver - it's more efficient and uses compression by default. @@ -8,8 +18,4 @@ DOCKER_COMPOSE_VERSION="2.27.0" DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} mkdir -p $DOCKER_CONFIG/cli-plugins curl -sSL https://github.com/docker/compose/releases/download/v$DOCKER_COMPOSE_VERSION/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose -chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose - -sudo docker create --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 -sudo docker create --restart unless-stopped -p "127.0.0.1:6379:6379" --name=redis redis:7 -sudo docker create --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres16 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:16 +chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose \ No newline at end of file diff --git a/install/fonts.sh b/install/fonts.sh index d536bf5..213e5a6 100644 --- a/install/fonts.sh +++ b/install/fonts.sh @@ -1,30 +1,15 @@ mkdir -p ~/.local/share/fonts -cd ~/Downloads +cd /tmp wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/CascadiaMono.zip unzip CascadiaMono.zip -d CascadiaFont cp CascadiaFont/*.ttf ~/.local/share/fonts rm -rf CascadiaMono.zip CascadiaFont -wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/FiraMono.zip -unzip FiraMono.zip -d FiraMono -cp FiraMono/*.otf ~/.local/share/fonts -rm -rf FiraMono.zip FiraMono - -wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.zip -unzip JetBrainsMono.zip -d JetBrainsMono -cp JetBrainsMono/*.ttf ~/.local/share/fonts -rm -rf JetBrainsMono.zip JetBrainsMono - -wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.zip -unzip Meslo.zip -d Meslo -cp Meslo/*.ttf ~/.local/share/fonts -rm -rf Meslo.zip Meslo - -wget https://github.com/iaolo/iA-Fonts/archive/refs/heads/master.zip -unzip master.zip -d iaFonts +wget -O iafonts.zip https://github.com/iaolo/iA-Fonts/archive/refs/heads/master.zip +unzip iafonts.zip -d iaFonts cp iaFonts/iA-Fonts-master/iA\ Writer\ Mono/Static/iAWriterMonoS-*.ttf ~/.local/share/fonts -rm -rf master.zip iaFonts +rm -rf iafonts.zip iaFonts fc-cache cd - diff --git a/install/mise.sh b/install/mise.sh index 18fb822..9a7e3eb 100644 --- a/install/mise.sh +++ b/install/mise.sh @@ -5,8 +5,3 @@ wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/ echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list sudo apt update sudo apt install -y mise - -# Install default languages -mise use --global ruby@3.3 -mise use --global node@lts -mise use --global go@latest diff --git a/install/app-1password.sh b/install/optional/app-1password.sh similarity index 91% rename from install/app-1password.sh rename to install/optional/app-1password.sh index 3e02ff3..2a8fbf3 100644 --- a/install/app-1password.sh +++ b/install/optional/app-1password.sh @@ -1,4 +1,4 @@ -cd ~/Downloads +cd /tmp wget https://downloads.1password.com/linux/debian/amd64/stable/1password-latest.deb sudo apt install -y ./1password-latest.deb rm 1password-latest.deb diff --git a/install/app-spotify.sh b/install/optional/app-spotify.sh similarity index 100% rename from install/app-spotify.sh rename to install/optional/app-spotify.sh diff --git a/install/app-zoom.sh b/install/optional/app-zoom.sh similarity index 88% rename from install/app-zoom.sh rename to install/optional/app-zoom.sh index 57eec37..73bbe2a 100644 --- a/install/app-zoom.sh +++ b/install/optional/app-zoom.sh @@ -1,4 +1,4 @@ -cd ~/Downloads +cd /tmp wget https://zoom.us/client/latest/zoom_amd64.deb sudo apt install -y ./zoom_amd64.deb rm zoom_amd64.deb diff --git a/install/select-dev-env.sh b/install/select-dev-env.sh new file mode 100644 index 0000000..1049e77 --- /dev/null +++ b/install/select-dev-env.sh @@ -0,0 +1,39 @@ +# Install default programming languages +languages=$(gum choose "Ruby" "Node.js" "Go" "Python" "Java" --no-limit --selected "Ruby","Node.js" --height 7 --header "Select programming languages") + +for language in $languages; do + case $language in + Ruby) + mise use --global ruby@3.3 + ;; + Node.js) + mise use --global node@lts + ;; + Go) + mise use --global go@latest + ;; + Java) + mise use --global java@latest + ;; + Python) + mise use --global python@latest + ;; + esac +done + +# Install default databases +dbs=$(gum choose "MySQL" "Redis" "PostgreSQL" --no-limit --selected "MySQL","Redis" --height 5 --header "Select databases (runs in Docker)") + +for db in $dbs; do + case $db in + MySQL) + sudo docker run -d --restart unless-stopped -p "127.0.0.1:3306:3306" --name=mysql8 -e MYSQL_ROOT_PASSWORD= -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.4 + ;; + Redis) + sudo docker run -d --restart unless-stopped -p "127.0.0.1:6379:6379" --name=redis redis:7 + ;; + PostgreSQL) + sudo docker run -d --restart unless-stopped -p "127.0.0.1:5432:5432" --name=postgres16 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:16 + ;; + esac +done diff --git a/install/select-optional-apps.sh b/install/select-optional-apps.sh new file mode 100644 index 0000000..27ed4f9 --- /dev/null +++ b/install/select-optional-apps.sh @@ -0,0 +1,6 @@ +# Install optional apps +apps=$(gum choose "1password" "Spotify" "Zoom" "Dropbox" "VirtualBox" --no-limit --selected "1password","Spotify","Zoom" --height 7 --header "Select commercial apps") + +for app in $apps; do + source "$OMAKUB_PATH/install/optional/app-$app.sh" +done diff --git a/install/set-dock.sh b/install/set-dock.sh index cb40545..ed5b1cc 100644 --- a/install/set-dock.sh +++ b/install/set-dock.sh @@ -1,2 +1,43 @@ -# Set default pinned applications (funny installer name to ensure it runs after all app installations!) -gsettings set org.gnome.shell favorite-apps "['google-chrome.desktop', 'Alacritty.desktop', 'code.desktop', 'WhatsApp.desktop', 'signal-desktop.desktop', 'spotify.desktop', 'typora.desktop', 'Zoom.desktop', 'pinta_pinta.desktop', 'com.github.xournalpp.xournalpp.desktop', '1password.desktop', 'org.gnome.Settings.desktop', 'org.gnome.Nautilus.desktop']" +# Favorite apps for dock +apps=( + "google-chrome.desktop" + "Alacritty.desktop" + "code.desktop" + "WhatsApp.desktop" + "signal-desktop.desktop" + "spotify.desktop" + "typora.desktop" + "Zoom.desktop" + "pinta_pinta.desktop" + "com.github.xournalpp.xournalpp.desktop" + "1password.desktop" + "org.gnome.Settings.desktop" + "org.gnome.Nautilus.desktop" +) + +# Array to hold installed favorite apps +installed_apps=() + +# Directory where .desktop files are typically stored +desktop_dirs=( + "/usr/share/applications" + "/usr/local/share/applications" + "$HOME/.local/share/applications" +) + +# Check if a .desktop file exists for each app +for app in "${apps[@]}"; do + for dir in "${desktop_dirs[@]}"; do + if [ -f "$dir/$app" ]; then + installed_apps+=("$app") + break + fi + done +done + +# Convert the array to a format suitable for gsettings +favorites_list=$(printf "'%s'," "${installed_apps[@]}") +favorites_list="[${favorites_list%,}]" + +# Set the favorite apps +gsettings set org.gnome.shell favorite-apps "$favorites_list" diff --git a/install/set-gnome-extensions.sh b/install/set-gnome-extensions.sh index fc3acc6..4e4e368 100644 --- a/install/set-gnome-extensions.sh +++ b/install/set-gnome-extensions.sh @@ -15,6 +15,7 @@ gext install tactile@lundal.io gext install just-perfection-desktop@just-perfection gext install blur-my-shell@aunetx gext install space-bar@luchrioh +gext install undecorate@sun.wxg@gmail.com # Compile gsettings schemas in order to be able to set them sudo cp ~/.local/share/gnome-shell/extensions/tactile@lundal.io/schemas/org.gnome.shell.extensions.tactile.gschema.xml /usr/share/glib-2.0/schemas/ diff --git a/uninstall/app-fastfetch.sh b/uninstall/app-fastfetch.sh new file mode 100644 index 0000000..c162351 --- /dev/null +++ b/uninstall/app-fastfetch.sh @@ -0,0 +1 @@ +sudo apt remove -y fastfetch diff --git a/uninstall/docker.sh b/uninstall/docker.sh index 0ac4a52..f021887 100644 --- a/uninstall/docker.sh +++ b/uninstall/docker.sh @@ -1,2 +1,2 @@ -sudo apt remove -y docker.io docker-buildx +sudo apt purge --auto-remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras sudo groupdel docker