Full Code of basecamp/omakub for AI

master c873902f1a5d cached
259 files
154.7 KB
54.0k tokens
1 requests
Download .txt
Showing preview only (200K chars total). Download the full file or copy to clipboard to get everything.
Repository: basecamp/omakub
Branch: master
Commit: c873902f1a5d
Files: 259
Total size: 154.7 KB

Directory structure:
gitextract_wu3rr8nv/

├── EXTENSIONS.md
├── README.md
├── applications/
│   ├── About.sh
│   ├── Activity.sh
│   ├── Basecamp.sh
│   ├── Docker.sh
│   ├── HEY.sh
│   ├── Neovim.sh
│   ├── Omakub.sh
│   └── WhatsApp.sh
├── ascii.sh
├── bin/
│   ├── omakub
│   └── omakub-sub/
│       ├── font-size.sh
│       ├── font.sh
│       ├── header.sh
│       ├── install-dev-editor.sh
│       ├── install.sh
│       ├── manual.sh
│       ├── menu.sh
│       ├── migrate.sh
│       ├── theme.sh
│       ├── uninstall.sh
│       └── update.sh
├── boot.sh
├── configs/
│   ├── alacritty/
│   │   ├── btop.toml
│   │   ├── font-size.toml
│   │   ├── fonts/
│   │   │   ├── CaskaydiaMono.toml
│   │   │   ├── FiraMono.toml
│   │   │   ├── JetBrainsMono.toml
│   │   │   └── MesloLGS.toml
│   │   ├── pane.toml
│   │   └── shared.toml
│   ├── alacritty.toml
│   ├── bashrc
│   ├── btop.conf
│   ├── fastfetch.jsonc
│   ├── inputrc
│   ├── neovim/
│   │   ├── lazyvim.json
│   │   ├── snacks-animated-scrolling-off.lua
│   │   └── transparency.lua
│   ├── typora/
│   │   ├── ia_typora.css
│   │   └── ia_typora_night.css
│   ├── ulauncher.desktop
│   ├── ulauncher.json
│   ├── vscode.json
│   ├── xcompose
│   └── zellij.kdl
├── defaults/
│   ├── bash/
│   │   ├── aliases
│   │   ├── functions
│   │   ├── init
│   │   ├── inputrc
│   │   ├── prompt
│   │   ├── rc
│   │   └── shell
│   └── xcompose
├── install/
│   ├── check-version.sh
│   ├── desktop/
│   │   ├── a-flatpak.sh
│   │   ├── app-alacritty.sh
│   │   ├── app-chrome.sh
│   │   ├── app-flameshot.sh
│   │   ├── app-gnome-sushi.sh
│   │   ├── app-gnome-tweak-tool.sh
│   │   ├── app-libreoffice.sh
│   │   ├── app-localsend.sh
│   │   ├── app-obsidian.sh
│   │   ├── app-pinta.sh
│   │   ├── app-signal.sh
│   │   ├── app-typora.sh
│   │   ├── app-vlc.sh
│   │   ├── app-vscode.sh
│   │   ├── app-wl-clipboard.sh
│   │   ├── app-xournalpp.sh
│   │   ├── applications.sh
│   │   ├── fonts.sh
│   │   ├── optional/
│   │   │   ├── app-1password.sh
│   │   │   ├── app-asdcontrol.sh
│   │   │   ├── app-audacity.sh
│   │   │   ├── app-brave.sh
│   │   │   ├── app-cursor.sh
│   │   │   ├── app-discord.sh
│   │   │   ├── app-doom-emacs.sh
│   │   │   ├── app-dropbox.sh
│   │   │   ├── app-gimp.sh
│   │   │   ├── app-mainline-kernels.sh
│   │   │   ├── app-minecraft.sh
│   │   │   ├── app-obs-studio.sh
│   │   │   ├── app-retroarch.sh
│   │   │   ├── app-rubymine.sh
│   │   │   ├── app-spotify.sh
│   │   │   ├── app-steam.sh
│   │   │   ├── app-virtualbox.sh
│   │   │   ├── app-windows.sh
│   │   │   ├── app-windsurf.sh
│   │   │   ├── app-zed.sh
│   │   │   ├── app-zoom.sh
│   │   │   └── select-web-apps.sh
│   │   ├── select-optional-apps.sh
│   │   ├── set-alacritty-default.sh
│   │   ├── set-app-grid.sh
│   │   ├── set-dock.sh
│   │   ├── set-framework-text-scaling.sh
│   │   ├── set-gnome-extensions.sh
│   │   ├── set-gnome-hotkeys.sh
│   │   ├── set-gnome-settings.sh
│   │   ├── set-gnome-theme.sh
│   │   ├── set-xcompose.sh
│   │   └── ulauncher.sh
│   ├── desktop.sh
│   ├── first-run-choices.sh
│   ├── identification.sh
│   ├── terminal/
│   │   ├── a-shell.sh
│   │   ├── app-btop.sh
│   │   ├── app-fastfetch.sh
│   │   ├── app-github-cli.sh
│   │   ├── app-lazydocker.sh
│   │   ├── app-lazygit.sh
│   │   ├── app-neovim.sh
│   │   ├── app-zellij.sh
│   │   ├── apps-terminal.sh
│   │   ├── docker.sh
│   │   ├── libraries.sh
│   │   ├── mise.sh
│   │   ├── optional/
│   │   │   ├── app-geekbench.sh
│   │   │   ├── app-ollama.sh
│   │   │   └── app-tailscale.sh
│   │   ├── required/
│   │   │   └── app-gum.sh
│   │   ├── select-dev-language.sh
│   │   ├── select-dev-storage.sh
│   │   └── set-git.sh
│   └── terminal.sh
├── install.sh
├── migrations/
│   ├── 1718359027.sh
│   ├── 1722091912.sh
│   ├── 1722387070.sh
│   ├── 1723756122.sh
│   ├── 1724344367.sh
│   ├── 1738744474.sh
│   ├── 1741193162.sh
│   ├── 1744854733.sh
│   ├── 1745060743.sh
│   ├── 1747237126.sh
│   ├── 1747501295.sh
│   ├── 1747736884.sh
│   ├── 1747737304.sh
│   ├── 1753775930.sh
│   ├── 1761481687.sh
│   └── 1770656330.sh
├── themes/
│   ├── catppuccin/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── everforest/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── gruvbox/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── kanagawa/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── matte-black/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── nord/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── osaka-jade/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── ristretto/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── rose-pine/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── set-gnome-theme.sh
│   ├── set-vscode-theme.sh
│   └── tokyo-night/
│       ├── alacritty.toml
│       ├── btop.theme
│       ├── gnome.sh
│       ├── neovim.lua
│       ├── tophat.sh
│       ├── vscode.sh
│       └── zellij.kdl
├── uninstall/
│   ├── app-1password.sh
│   ├── app-audacity.sh
│   ├── app-brave.sh
│   ├── app-chrome.sh
│   ├── app-cursor.sh
│   ├── app-discord.sh
│   ├── app-doom-emacs.sh
│   ├── app-fastfetch.sh
│   ├── app-flameshot.sh
│   ├── app-geekbench.sh
│   ├── app-gimp.sh
│   ├── app-github-cli.sh
│   ├── app-libreoffice.sh
│   ├── app-localsend.sh
│   ├── app-mainline-kernels.sh
│   ├── app-minecraft.sh
│   ├── app-neovim.sh
│   ├── app-obs-studio.sh
│   ├── app-obsidian.sh
│   ├── app-ollama.sh
│   ├── app-pinta.sh
│   ├── app-retroarch.sh
│   ├── app-rubymine.sh
│   ├── app-signal.sh
│   ├── app-spotify.sh
│   ├── app-steam.sh
│   ├── app-tailscale.sh
│   ├── app-typora.sh
│   ├── app-virtualbox.sh
│   ├── app-vlc.sh
│   ├── app-vscode.sh
│   ├── app-windsurf.sh
│   ├── app-xournalpp.sh
│   ├── app-zed.sh
│   ├── app-zoom.sh
│   ├── apps-web.sh
│   ├── dev-language.sh
│   ├── docker.sh
│   └── select-web-apps.sh
└── version

================================================
FILE CONTENTS
================================================

================================================
FILE: EXTENSIONS.md
================================================
# [Dark and light mode theme switch](https://github.com/florentdestremau/omakub-darkmode-switch)

Select a dark and light theme of your choice to be applied automatically when switching the gnome light/dark mode.



================================================
FILE: README.md
================================================
# Omakub

Turn a fresh Ubuntu installation into a fully-configured, beautiful, and modern web development system by running a single command. That's the one-line pitch for Omakub. No need to write bespoke configs for every essential tool just to get started or to be up on all the latest command-line tools. Omakub is an opinionated take on what Linux can be at its best.

Watch the introduction video and read more at [omakub.org](https://omakub.org).

## Contributing to the documentation

Please help us improve Omakub's documentation on the [basecamp/omakub-site repository](https://github.com/basecamp/omakub-site).

## License

Omakub is released under the [MIT License](https://opensource.org/licenses/MIT).

## Extras

While omakub is purposed to be an opinionated take, the open source community offers alternative customization, add-ons, extras, that you can use to adjust, replace or enrich your experience.

[⇒ Browse the omakub extensions.](EXTENSIONS.md)


================================================
FILE: applications/About.sh
================================================
#!/bin/bash

cat <<EOF >~/.local/share/applications/About.desktop
[Desktop Entry]
Version=1.0
Name=About
Comment=System information from Fastfetch
Exec=alacritty --config-file /home/$USER/.config/alacritty/pane.toml --class=About --title=About -e bash -c 'fastfetch; read -n 1 -s'
Terminal=false
Type=Application
Icon=/home/$USER/.local/share/omakub/applications/icons/Ubuntu.png
Categories=GTK;
StartupNotify=false
EOF


================================================
FILE: applications/Activity.sh
================================================
#!/bin/bash

cat <<EOF >~/.local/share/applications/Activity.desktop
[Desktop Entry]
Version=1.0
Name=Activity
Comment=System activity from btop
Exec=alacritty --config-file /home/$USER/.config/alacritty/btop.toml --class=Activity --title=Activity -e btop
Terminal=false
Type=Application
Icon=/home/$USER/.local/share/omakub/applications/icons/Activity.png
Categories=GTK;
StartupNotify=false
EOF


================================================
FILE: applications/Basecamp.sh
================================================
#!/bin/bash

cat <<EOF >~/.local/share/applications/Basecamp.desktop
[Desktop Entry]
Version=1.0
Name=Basecamp
Comment=Basecamp Project Management
Exec=google-chrome --app="https://launchpad.37signals.com" --name=Basecamp --class=Basecamp
Terminal=false
Type=Application
Icon=/home/$USER/.local/share/omakub/applications/icons/Basecamp.png
Categories=GTK;
MimeType=text/html;text/xml;application/xhtml_xml;
StartupNotify=true
EOF


================================================
FILE: applications/Docker.sh
================================================
#!/bin/bash

cat <<EOF >~/.local/share/applications/Docker.desktop
[Desktop Entry]
Version=1.0
Name=Docker
Comment=Manage Docker containers with LazyDocker
Exec=alacritty --config-file /home/$USER/.config/alacritty/pane.toml --class=Docker --title=Docker -e lazydocker
Terminal=false
Type=Application
Icon=/home/$USER/.local/share/omakub/applications/icons/Docker.png
Categories=GTK;
StartupNotify=false
EOF


================================================
FILE: applications/HEY.sh
================================================
#!/bin/bash

cat <<EOF >~/.local/share/applications/HEY.desktop
[Desktop Entry]
Version=1.0
Name=HEY
Comment=HEY Email + Calendar
Exec=google-chrome --app="https://app.hey.com/" --name=HEY --class=HEY
Terminal=false
Type=Application
Icon=/home/$USER/.local/share/omakub/applications/icons/HEY.png
Categories=GTK;
MimeType=text/html;text/xml;application/xhtml_xml;
StartupNotify=true
EOF


================================================
FILE: applications/Neovim.sh
================================================
#!/bin/bash

cat <<EOF >~/.local/share/applications/Neovim.desktop
[Desktop Entry]
Version=1.0
Name=Neovim
Comment=Edit text files
Exec=alacritty --config-file /home/$USER/.config/alacritty/pane.toml --class=Neovim --title=Neovim -e nvim %F
Terminal=false
Type=Application
Icon=nvim
Categories=Utilities;TextEditor;
StartupNotify=false
EOF


================================================
FILE: applications/Omakub.sh
================================================
#!/bin/bash

cat <<EOF >~/.local/share/applications/Omakub.desktop
[Desktop Entry]
Version=1.0
Name=Omakub
Comment=Omakub Controls
Exec=alacritty --config-file /home/$USER/.config/alacritty/pane.toml --class=Omakub --title=Omakub -e omakub
Terminal=false
Type=Application
Icon=/home/$USER/.local/share/omakub/applications/icons/Omakub.png
Categories=GTK;
StartupNotify=false
EOF


================================================
FILE: applications/WhatsApp.sh
================================================
#!/bin/bash

cat <<EOF >~/.local/share/applications/WhatsApp.desktop
[Desktop Entry]
Version=1.0
Name=WhatsApp
Comment=WhatsApp Messenger
Exec=google-chrome --app="https://web.whatsapp.com" --name=WhatsApp --class=Whatsapp
Terminal=false
Type=Application
Icon=/home/$USER/.local/share/omakub/applications/icons/WhatsApp.png
Categories=GTK;
MimeType=text/html;text/xml;application/xhtml_xml;
StartupNotify=true
EOF


================================================
FILE: ascii.sh
================================================
#!/bin/bash

ascii_art='
________                  __        ___.
\_____  \   _____ _____  |  | ____ _\_ |__
 /   |   \ /     \\__   \ |  |/ /  |  \ __ \
/    |    \  Y Y  \/ __ \|    <|  |  / \_\ \
\_______  /__|_|  (____  /__|_ \____/|___  /
        \/      \/     \/     \/         \/

'

# Define the color gradient (shades of cyan and blue)
colors=(
	'\033[38;5;81m' # Cyan
	'\033[38;5;75m' # Light Blue
	'\033[38;5;69m' # Sky Blue
	'\033[38;5;63m' # Dodger Blue
	'\033[38;5;57m' # Deep Sky Blue
	'\033[38;5;51m' # Cornflower Blue
	'\033[38;5;45m' # Royal Blue
)

# Split the ASCII art into lines
IFS=$'\n' read -rd '' -a lines <<<"$ascii_art"

# Print each line with the corresponding color
for i in "${!lines[@]}"; do
	color_index=$((i % ${#colors[@]}))
	echo -e "${colors[color_index]}${lines[i]}"
done


================================================
FILE: bin/omakub
================================================
#!/bin/bash

source $OMAKUB_PATH/bin/omakub-sub/header.sh
source $OMAKUB_PATH/bin/omakub-sub/menu.sh


================================================
FILE: bin/omakub-sub/font-size.sh
================================================
#!/bin/bash

choice=$(gum choose {7..14} "<< Back" --height 11 --header "Choose your terminal font size")

if [[ $choice =~ ^[0-9]+$ ]]; then
	sed -i "s/^size = .*$/size = $choice/g" ~/.config/alacritty/font-size.toml
	source $OMAKUB_PATH/bin/omakub-sub/font-size.sh
else
	source $OMAKUB_PATH/bin/omakub-sub/font.sh
fi


================================================
FILE: bin/omakub-sub/font.sh
================================================
#!/bin/bash

set_font() {
	local font_name=$1
	local url=$2
	local file_type=$3
	local file_name="${font_name/ Nerd Font/}"

	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 -
		clear
		source $OMAKUB_PATH/ascii.sh
	fi

	gsettings set org.gnome.desktop.interface monospace-font-name "$font_name 10"
	cp "$OMAKUB_PATH/configs/alacritty/fonts/$file_name.toml" ~/.config/alacritty/font.toml
	sed -i "s/\"editor.fontFamily\": \".*\"/\"editor.fontFamily\": \"$font_name\"/g" ~/.config/Code/User/settings.json
}

if [ "$#" -gt 1 ]; then
	choice=${!#}
else
	choice=$(gum choose "Cascadia Mono" "Fira Mono" "JetBrains Mono" "Meslo" "> Change size" "<< Back" --height 8 --header "Choose your programming font")
fi

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" "ttf"
	;;
"> Change size")
	source $OMAKUB_PATH/bin/omakub-sub/font-size.sh
	exit
	;;
esac

source $OMAKUB_PATH/bin/omakub-sub/menu.sh


================================================
FILE: bin/omakub-sub/header.sh
================================================
#!/bin/bash

source $OMAKUB_PATH/ascii.sh
echo "" # Add spacing
echo "                                 $(cat $OMAKUB_PATH/version)"
echo "" # Add spacing


================================================
FILE: bin/omakub-sub/install-dev-editor.sh
================================================
#!/bin/bash

CHOICES=(
  "Cursor            AI Code Editor"
  "Doom Emacs        Emacs framework with curated list of packages"
  "RubyMine          IntelliJ's commercial Ruby editor"
  "Windsurf          Another AI Code Editor"
  "Zed               Fast all-purpose editor"
  "<< Back           "
)

CHOICE=$(gum choose "${CHOICES[@]}" --height 8 --header "Install editor")

if [[ "$CHOICE" == "<< Back"* ]] || [[ -z "$CHOICE" ]]; then
  # Don't install anything
  echo ""
else
  INSTALLER=$(echo "$CHOICE" | awk -F ' {2,}' '{print $1}' | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
  INSTALLER_FILE="$OMAKUB_PATH/install/desktop/optional/app-$INSTALLER.sh"

  source $INSTALLER_FILE && gum spin --spinner globe --title "Install completed!" -- sleep 3
fi

clear
source $OMAKUB_PATH/bin/omakub-sub/header.sh
source $OMAKUB_PATH/bin/omakub-sub/install.sh


================================================
FILE: bin/omakub-sub/install.sh
================================================
#!/bin/bash

CHOICES=(
  "Dev Editor        Install alternative programming editors"
  "Dev Language      Install programming language environment"
  "Dev Database      Install development database in Docker"
  "1password         Manage your passwords securely across devices"
  "Audacity          Record and edit audio"
  "ASDControl        Set brightness on Apple Studio and XDR displays"
  "Brave             Chrome-based browser with built-in ad blocking"
  "Dropbox           Sync files across computers with ease"
  "Discord           Communication platform for voice, video, and text messaging"
  "Gimp              Image manipulation tool ala Photoshop"
  "Geekbench         CPU benchmaking tool"
  "Mainline Kernels  Install newer Linux kernels than Ubuntu defaults"
  "Minecraft         Everyone's favorite blocky building game"
  "OBS Studio        Record screencasts with inputs from both display + webcam"
  "Ollama            Run LLMs, like Meta's Llama3, locally"
  "Retroarch         Play retro games"
  "Spotify           Stream music from the world's most popular service"
  "Steam             Play games from Valve's store"
  "Tailscale         Mesh VPN based on WireGuard and with Magic DNS"
  "VirtualBox        Virtual machines to run Windows/Linux"
  "Zoom              Attend and host video chat meetings"
  "Web Apps          Install web apps with their own icon and shell"
  "> All             Re-run any of the default installers"
  "<< Back           "
)

CHOICE=$(gum choose "${CHOICES[@]}" --height 26 --header "Install application")

if [[ "$CHOICE" == "<< Back"* ]] || [[ -z "$CHOICE" ]]; then
  # Don't install anything
  echo ""
elif [[ "$CHOICE" == "> All"* ]]; then
  INSTALLER_FILE=$(gum file $OMAKUB_PATH/install)

  [[ -n "$INSTALLER_FILE" ]] &&
    gum confirm "Run installer?" &&
    source $INSTALLER_FILE &&
    gum spin --spinner globe --title "Install completed!" -- sleep 3
else
  INSTALLER=$(echo "$CHOICE" | awk -F ' {2,}' '{print $1}' | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')

  case "$INSTALLER" in
  "dev-editor") INSTALLER_FILE="$OMAKUB_PATH/bin/omakub-sub/install-dev-editor.sh" ;;
  "web-apps") INSTALLER_FILE="$OMAKUB_PATH/install/desktop/optional/select-web-apps.sh" ;;
  "dev-language") INSTALLER_FILE="$OMAKUB_PATH/install/terminal/select-dev-language.sh" ;;
  "dev-database") INSTALLER_FILE="$OMAKUB_PATH/install/terminal/select-dev-storage.sh" ;;
  "ollama") INSTALLER_FILE="$OMAKUB_PATH/install/terminal/optional/app-ollama.sh" ;;
  "tailscale") INSTALLER_FILE="$OMAKUB_PATH/install/terminal/optional/app-tailscale.sh" ;;
  "geekbench") INSTALLER_FILE="$OMAKUB_PATH/install/terminal/optional/app-geekbench.sh" ;;
  *) INSTALLER_FILE="$OMAKUB_PATH/install/desktop/optional/app-$INSTALLER.sh" ;;
  esac

  source $INSTALLER_FILE && gum spin --spinner globe --title "Install completed!" -- sleep 3
fi

clear
source $OMAKUB_PATH/bin/omakub


================================================
FILE: bin/omakub-sub/manual.sh
================================================
#!/bin/bash

xdg-open "https://manual.omakub.org" &>/dev/null
source $OMAKUB_PATH/bin/omakub-sub/menu.sh


================================================
FILE: bin/omakub-sub/menu.sh
================================================
#!/bin/bash

if [ $# -eq 0 ]; then
	SUB=$(gum choose "Theme" "Font" "Update" "Install" "Uninstall" "Manual" "Quit" --height 10 --header "" | tr '[:upper:]' '[:lower:]')
else
	SUB=$1
fi

[ -n "$SUB" ] && [ "$SUB" != "quit" ] && source $OMAKUB_PATH/bin/omakub-sub/$SUB.sh


================================================
FILE: bin/omakub-sub/migrate.sh
================================================
#!/bin/bash

cd $OMAKUB_PATH
last_updated_at=$(git log -1 --format=%cd --date=unix)
git pull

for file in $OMAKUB_PATH/migrations/*.sh; do
  filename=$(basename "$file")
  migrate_at="${filename%.sh}"

  if [ $migrate_at -gt $last_updated_at ]; then
    echo "Running migration for $migrate_at"
    source $file
  fi
done

cd -


================================================
FILE: bin/omakub-sub/theme.sh
================================================
#!/bin/bash

THEME_NAMES=("Tokyo Night" "Catppuccin" "Nord" "Everforest" "Gruvbox" "Kanagawa" "Ristretto" "Rose Pine" "Matte Black" "Osaka Jade")
THEME=$(gum choose "${THEME_NAMES[@]}" "<< Back" --header "Choose your theme" --height 12 | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')

if [ -n "$THEME" ] && [ "$THEME" != "<<-back" ]; then
  cp $OMAKUB_PATH/themes/$THEME/alacritty.toml ~/.config/alacritty/theme.toml
  cp $OMAKUB_PATH/themes/$THEME/zellij.kdl ~/.config/zellij/themes/$THEME.kdl
  sed -i "s/theme \".*\"/theme \"$THEME\"/g" ~/.config/zellij/config.kdl
  if [ -d "$HOME/.config/nvim" ]; then
    cp $OMAKUB_PATH/themes/$THEME/neovim.lua ~/.config/nvim/lua/plugins/theme.lua
  fi

  if [ -f "$OMAKUB_PATH/themes/$THEME/btop.theme" ]; then
    cp $OMAKUB_PATH/themes/$THEME/btop.theme ~/.config/btop/themes/$THEME.theme
    sed -i "s/color_theme = \".*\"/color_theme = \"$THEME\"/g" ~/.config/btop/btop.conf
  else
    sed -i "s/color_theme = \".*\"/color_theme = \"Default\"/g" ~/.config/btop/btop.conf
  fi

  source $OMAKUB_PATH/themes/$THEME/gnome.sh
  source $OMAKUB_PATH/themes/$THEME/tophat.sh
  source $OMAKUB_PATH/themes/$THEME/vscode.sh

  # Forgo setting the Chrome theme until we might find a less disruptive way of doing it.
  # Having to quit Chrome, and all Chrome-based apps, is too much of an inposition.
  # source $OMAKUB_PATH/themes/$THEME/chrome.sh
fi

source $OMAKUB_PATH/bin/omakub-sub/menu.sh


================================================
FILE: bin/omakub-sub/uninstall.sh
================================================
#!/bin/bash

UNINSTALLER=$(gum file $OMAKUB_PATH/uninstall --height 26)
[ -n "$UNINSTALLER" ] && gum confirm "Run uninstaller?" && source $UNINSTALLER && gum spin --spinner globe --title "Uninstall completed!" -- sleep 3
clear
source $OMAKUB_PATH/bin/omakub


================================================
FILE: bin/omakub-sub/update.sh
================================================
#!/bin/bash

CHOICES=(
	"Omakub        Update Omakub itself and run any migrations"
	"Ollama        Run LLMs, like Meta's Llama3, locally"
	"LazyGit       TUI for Git"
	"LazyDocker    TUI for Docker"
	"Neovim        Text editor that runs in the terminal"
	"Zellij        Adds panes, tabs, and sessions to the terminal"
	"<< Back       "
)

CHOICE=$(gum choose "${CHOICES[@]}" --height 10 --header "Update manually-managed applications")

if [[ "$CHOICE" == "<< Back"* ]] || [[ -z "$CHOICE" ]]; then
	# Don't update anything
	echo ""
else
	INSTALLER=$(echo "$CHOICE" | awk -F ' {2,}' '{print $1}' | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')

	case "$INSTALLER" in
	"omakub") INSTALLER_FILE="$OMAKUB_PATH/bin/omakub-sub/migrate.sh" ;;
	"ollama") INSTALLER_FILE="$OMAKUB_PATH/install/terminal/optional/app-ollama.sh" ;;
	*) INSTALLER_FILE="$OMAKUB_PATH/install/terminal/app-$INSTALLER.sh" ;;
	esac

	source $INSTALLER_FILE && gum spin --spinner globe --title "Update completed!" -- sleep 3
fi

clear
source $OMAKUB_PATH/bin/omakub


================================================
FILE: boot.sh
================================================
#!/bin/bash

set -e

ascii_art='________                  __        ___.
\_____  \   _____ _____  |  | ____ _\_ |__
 /   |   \ /     \\__   \ |  |/ /  |  \ __ \
/    |    \  Y Y  \/ __ \|    <|  |  / \_\ \
\_______  /__|_|  (____  /__|_ \____/|___  /
        \/      \/     \/     \/         \/
'

echo -e "$ascii_art"
echo "=> Omakub is for fresh Ubuntu 24.04+ installations only!"
echo -e "\nBegin installation (or abort with ctrl+c)..."

sudo apt-get update >/dev/null
sudo apt-get install -y git >/dev/null

echo "Cloning Omakub..."
rm -rf ~/.local/share/omakub
git clone https://github.com/basecamp/omakub.git ~/.local/share/omakub >/dev/null
if [[ $OMAKUB_REF != "master" ]]; then
	cd ~/.local/share/omakub
	git fetch origin "${OMAKUB_REF:-stable}" && git checkout "${OMAKUB_REF:-stable}"
	cd -
fi

echo "Installation starting..."
source ~/.local/share/omakub/install.sh


================================================
FILE: configs/alacritty/btop.toml
================================================
# Used by the Activity.desktop app
import = [ "~/.config/alacritty/pane.toml" ]

[window]
dimensions.columns = 121
dimensions.lines = 40

================================================
FILE: configs/alacritty/font-size.toml
================================================
# Leave this file in place for omakub to rely on a shared font size for all terminal apps
[font]
size = 9


================================================
FILE: configs/alacritty/fonts/CaskaydiaMono.toml
================================================
[font]
normal = { family = "CaskaydiaMono Nerd Font", style = "Regular" }
bold = { family = "CaskaydiaMono Nerd Font", style = "Bold" }
italic = { family = "CaskaydiaMono Nerd Font", style = "Italic" }


================================================
FILE: configs/alacritty/fonts/FiraMono.toml
================================================
[font]
normal = { family = "FiraMono Nerd Font Mono", style = "Regular" }
bold = { family = "FiraMono Nerd Font Mono", style = "Bold" }
italic = { family = "FiraMono Nerd Font Mono", style = "Italic" }


================================================
FILE: configs/alacritty/fonts/JetBrainsMono.toml
================================================
[font]
normal = { family = "JetBrainsMono Nerd Font Mono", style = "Regular" }
bold = { family = "JetBrainsMono Nerd Font Mono", style = "Bold" }
italic = { family = "JetBrainsMono Nerd Font Mono", style = "Italic" }


================================================
FILE: configs/alacritty/fonts/MesloLGS.toml
================================================
[font]
normal = { family = "MesloLGLDZ Nerd Font Mono", style = "Regular" }
bold = { family = "MesloLGLDZ Nerd Font Mono", style = "Bold" }
italic = { family = "MesloLGLDZ Nerd Font Mono", style = "Italic" }


================================================
FILE: configs/alacritty/pane.toml
================================================
# Used by the About.desktop, Activity.desktop, Docker.desktop, Omakub.desktop, and Neovim.desktop apps
import = [ "~/.config/alacritty/theme.toml", "~/.config/alacritty/font.toml", "~/.config/alacritty/font-size.toml", "~/.config/alacritty/shared.toml" ]

[window]
padding.x = 30
padding.y = 30


================================================
FILE: configs/alacritty/shared.toml
================================================
[env]
TERM = "xterm-256color"

[shell]
program = "zellij"

[window]
padding.x = 16
padding.y = 14
decorations = "None"
opacity = 0.98

[keyboard]
bindings = [
{ key = "F11", action = "ToggleFullscreen" }
]


================================================
FILE: configs/alacritty.toml
================================================
import = [ "~/.config/alacritty/theme.toml", "~/.config/alacritty/font.toml", "~/.config/alacritty/font-size.toml", "~/.config/alacritty/shared.toml" ]


================================================
FILE: configs/bashrc
================================================
source ~/.local/share/omakub/defaults/bash/rc

# Editor used by CLI
export EDITOR="nvim"
export SUDO_EDITOR="$EDITOR"


================================================
FILE: configs/btop.conf
================================================
#? Config file for btop v. 1.3.0

#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "tokyo-night"

#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = True

#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = True

#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = False

#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"

#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = False

#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = True

#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"

# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"

# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty".
graph_symbol_gpu = "default"

# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"

# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"

# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"

#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace.
shown_boxes = "cpu mem net proc"

#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000

#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "cpu lazy"

#* Reverse sorting order, True or False.
proc_reversed = False

#* Show processes as a tree.
proc_tree = False

#* Use the cpu graph colors in the process list.
proc_colors = True

#* Use a darkening gradient in the process list.
proc_gradient = True

#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = False

#* Show process memory as bytes instead of percent.
proc_mem_bytes = True

#* Show cpu graph for each process.
proc_cpu_graphs = True

#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = False

#* Show proc box on left side of screen instead of right.
proc_left = False

#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = False

#* In tree-view, always accumulate child process resources in the parent process.
proc_aggregate = False

#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "Auto"

#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "Auto"

#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off".
show_gpu_info = "Auto"

#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = True

#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = False

#* Show cpu box at bottom of screen instead of top.
cpu_bottom = False

#* Shows the system uptime in the CPU box.
show_uptime = True

#* Show cpu temperature.
check_temp = True

#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"

#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = True

#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""

#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"

#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = False

#* Show CPU frequency.
show_cpu_freq = True

#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"

#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = True

#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""

#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
disks_filter = ""

#* Show graphs instead of meters for memory values.
mem_graphs = True

#* Show mem box below net box instead of above.
mem_below_net = False

#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = True

#* If swap memory should be shown in memory box.
show_swap = True

#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = True

#* If mem box should be split to also show disks info.
show_disks = True

#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = True

#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = True

#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = False

#* Set to true to show available disk space for privileged users.
disk_free_priv = False

#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = True

#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = False

#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = False

#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""

#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100

net_upload = 100

#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = True

#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = True

#* Starts with the Network Interface specified here.
net_iface = ""

#* Show battery stats in top right if battery is present.
show_battery = True

#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"

#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"

#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards.
nvml_measure_pcie_speeds = True

#* Horizontally mirror the GPU graph.
gpu_mirror_graph = True

#* Custom gpu0 model name, empty string to disable.
custom_gpu_name0 = ""

#* Custom gpu1 model name, empty string to disable.
custom_gpu_name1 = ""

#* Custom gpu2 model name, empty string to disable.
custom_gpu_name2 = ""

#* Custom gpu3 model name, empty string to disable.
custom_gpu_name3 = ""

#* Custom gpu4 model name, empty string to disable.
custom_gpu_name4 = ""

#* Custom gpu5 model name, empty string to disable.
custom_gpu_name5 = ""


================================================
FILE: configs/fastfetch.jsonc
================================================
{
    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
    "logo": {
        "padding": {
            "top": 5,
            "right": 6
        }
    },
    "modules": [
        "break",
        {
            "type": "custom",
            "format": "\u001b[90m┌──────────────────────Hardware──────────────────────┐"
        },
        {
            "type": "host",
            "key": " PC",
            "keyColor": "green"
        },
        {
            "type": "cpu",
            "key": "│ ├",
            "showPeCoreCount": true,
            "keyColor": "green"
        },
        {
            "type": "gpu",
            "key": "│ ├",
            "detectionMethod": "pci",
            "keyColor": "green"
        },
        {
            "type": "display",
            "key": "│ ├󱄄",
            "keyColor": "green"
        },
        {
            "type": "disk",
            "key": "│ ├󰋊",
            "keyColor": "green"
        },
        {
            "type": "memory",
            "key": "│ ├",
            "keyColor": "green"
        },
        {
            "type": "swap",
            "key": "└ └󰓡 ",
            "keyColor": "green",
        },
        {
            "type": "custom",
            "format": "\u001b[90m└────────────────────────────────────────────────────┘"
        },
        "break",
        {
            "type": "custom",
            "format": "\u001b[90m┌──────────────────────Software──────────────────────┐"
        },
        {
            "type": "os",
            "key": " OS",
            "keyColor": "yellow"
        },
        {
            "type": "kernel",
            "key": "│ ├",
            "keyColor": "yellow"
        },
        {
            "type": "packages",
            "key": "│ ├󰏖",
            "keyColor": "yellow"
        },
        {
            "type": "shell",
            "key": "└ └",
            "keyColor": "yellow"
        },
        "break",
        {
            "type": "de",
            "key": " DE",
            "keyColor": "blue"
        },
        {
            "type": "wm",
            "key": "│ ├",
            "keyColor": "blue"
        },
        {
            "type": "wmtheme",
            "key": "│ ├󰉼",
            "keyColor": "blue"
        },
        {
            "type": "icons",
            "key": "│ ├󰀻",
            "keyColor": "blue",
        },
        {
            "type": "cursor",
            "key": "│ ├",
            "keyColor": "blue",
        },
        {
            "type": "terminalfont",
            "key": "│ ├",
            "keyColor": "blue",
        },
        {
            "type": "terminal",
            "key": "└ └",
            "keyColor": "blue"
        },
        {
            "type": "custom",
            "format": "\u001b[90m└────────────────────────────────────────────────────┘"
        },
        "break",
        {
            "type": "custom",
            "format": "\u001b[90m┌────────────────────Uptime / Age────────────────────┐"
        },
        {
            "type": "command",
            "key": "  OS Age ",
            "keyColor": "magenta",
            "text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"
        },
        {
            "type": "uptime",
            "key": "  Uptime ",
            "keyColor": "magenta"
        },
        {
            "type": "custom",
            "format": "\u001b[90m└────────────────────────────────────────────────────┘"
        },
        "break",
    ]
}


================================================
FILE: configs/inputrc
================================================
$include ~/.local/share/omakub/defaults/bash/inputrc


================================================
FILE: configs/neovim/lazyvim.json
================================================
{
  "extras": [
    "lazyvim.plugins.extras.editor.neo-tree"
  ],
  "install_version": 8,
  "news": {
    "NEWS.md": "10960"
  },
  "version": 8
}


================================================
FILE: configs/neovim/snacks-animated-scrolling-off.lua
================================================
return {
	"folke/snacks.nvim",
	opts = {
		scroll = {
			enabled = false, -- Disable scrolling animations
		},
	},
}


================================================
FILE: configs/neovim/transparency.lua
================================================
-- transparent background
vim.api.nvim_set_hl(0, "Normal", { bg = "none" })
vim.api.nvim_set_hl(0, "NormalFloat", { bg = "none" })
vim.api.nvim_set_hl(0, "FloatBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "Pmenu", { bg = "none" })
vim.api.nvim_set_hl(0, "Terminal", { bg = "none" })
vim.api.nvim_set_hl(0, "EndOfBuffer", { bg = "none" })
vim.api.nvim_set_hl(0, "FoldColumn", { bg = "none" })
vim.api.nvim_set_hl(0, "Folded", { bg = "none" })
vim.api.nvim_set_hl(0, "SignColumn", { bg = "none" })
vim.api.nvim_set_hl(0, "NormalNC", { bg = "none" })
vim.api.nvim_set_hl(0, "WhichKeyFloat", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopeBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopeNormal", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopePromptBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "TelescopePromptTitle", { bg = "none" })

-- transparent background for neotree
vim.api.nvim_set_hl(0, "NeoTreeNormal", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeNormalNC", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeVertSplit", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeWinSeparator", { bg = "none" })
vim.api.nvim_set_hl(0, "NeoTreeEndOfBuffer", { bg = "none" })

-- transparent background for nvim-tree
vim.api.nvim_set_hl(0, "NvimTreeNormal", { bg = "none" })
vim.api.nvim_set_hl(0, "NvimTreeVertSplit", { bg = "none" })
vim.api.nvim_set_hl(0, "NvimTreeEndOfBuffer", { bg = "none" })

-- transparent notify background
vim.api.nvim_set_hl(0, "NotifyINFOBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyERRORBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyWARNBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyTRACEBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyDEBUGBody", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyINFOTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyERRORTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyWARNTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyTRACETitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyDEBUGTitle", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyINFOBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyERRORBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyWARNBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyTRACEBorder", { bg = "none" })
vim.api.nvim_set_hl(0, "NotifyDEBUGBorder", { bg = "none" })


================================================
FILE: configs/typora/ia_typora.css
================================================
:root {
  --accent-color: #aeb1b5; /* #'s before H1-3 */
  --background-color: white;
  --border-color: #ddd; 
  --code-bg-color: #f8f8f8; 
  --font-color: #42464c;
  --header-color: #222324;
  --link-color: #2077b2;
  --control-text-color: #667176;
  --side-bar-bg-color: #fafafa;
  --body-font: iAWriterMonoS-Regular, monospace, Roboto;
  --border-radius: 2px;
  --document-horizontal-margin: 80px;
  --document-padding-x: 10ch;
  --font-size: 20px;
  --h1-fontsize: 20px;   /* 1,5   rem = 24px */
  --h2-fontsize: 20px; /* 1,375 rem = 22px */
  --h3-fontsize: 20px;  /* 1,25  rem = 20px */
  --h4-fontsize: 20px; /* 1,125 rem = 18px */
  --line-height: 1.8;
  --main-content-margin: 0 auto;
  --main-content-max-width: 85ch;
  --monospace-font-size: 20px;
  --monospace-font: iAWriterMonoS-Regular, monospace;
  --monospace-line-height: 1.6;
  --monospace: var(--monospace-font); /* Fixes source code mode */
  --nav-width: 200px;
  --vertical-padding: 40px;
}

/* Narrow layout styles */
@media (max-width: 640px) {
  :root {
    --document-padding-x: 4ch;
  }
}

html {
  font-size: var(--font-size);
  background-color: var(--background-color);
}

html,
body {
  color: var(--font-color);
  font-family: var(--body-font);
  line-height: var(--line-height);
}

#write {
	/* size of writing area: */
  padding-left: var(--document-padding-x);
  padding-right: var(--document-padding-x);
  max-width: var(--main-content-max-width);
  box-sizing: border-box;
}

/**
 * ---------------------
 * Block Elements
 */

/* yaml */
pre.md-meta-block {
  background-color: var(--background-color);
  padding-bottom: .5rem;
  color: var(--accent-color);
  border-bottom: 2px solid var(--border-color);
  font-family: var(--monospace-font);
}

/* headings */
h1, h2, h3 {
  font-weight: bold;
  color: var(--header-color);  
}

h1 {
  margin-top: 1rem;
  margin-bottom: 1rem;
  font-size: var(--h1-fontsize);
}

h1:not(:first-child) {
  margin-top: 1rem;
}

h2 {
  margin-top: 1rem;
  margin-bottom: 0rem;
  font-size: var(--h2-fontsize);
}

h3 {
  margin-top: 1rem;
  margin-bottom: 0rem;
  font-size: var(--h3-fontsize);
}

h4, h5, h6 {
  color: var(--header-color);  
  margin-top: 1rem;
  margin-bottom: 0rem;
  font-size: 1rem;
}

h4 {
  font-size: var(--h4-fontsize);
}

h6 {
  color: var(--control-text-color);	
}

h1::before,
h2::before,
h3::before {
  font-weight: 400;
  text-align: right;
  width: 5ch;
  padding-right: 1ch;
  margin-left: -5ch;
  color: var(--accent-color);
  display: inline-block;
}

h1::before {
  content: '#';
}

h2::before {
  content: '##';
}

h3::before {
  content: '###';
}

h1 tt,
h1 code {
    font-size: inherit;
}
h2 tt,
h2 code {
    font-size: inherit;
}
h3 tt,
h3 code {
    font-size: inherit;
}
h4 tt,
h4 code {
    font-size: inherit;
}
h5 tt,
h5 code {
    font-size: inherit;
}
h6 tt,
h6 code {
    font-size: inherit;
}

/* table */
table {
  margin-top: 1rem;
  margin-bottom: 1rem;
}

table tr:nth-child(2n),
thead {
    background-color: var(--side-bar-bg-color);
}

td,
th {
  border-style: solid;
  border-color: var(--border-color);
  border-width: 1px;
  padding: .35rem .7rem
}

li p {
  margin: 0;
}

.task-list {
  padding-left: 0;
}

.task-list-item {
  padding-left: 1.5em;
  margin-bottom: 0rem;
}

#write input[type='checkbox'] {
  margin-top: 5px;
}

blockquote {
  margin: 1rem 0;
  padding-left: 2ch;
  margin-left: .5ch;
  position: relative;
  overflow: hidden;
  border-left: 2px solid var(--border-color);
  color: var(--accent-color);
}

/* horizontal line */
hr {
  border: none;
  border-bottom: 2px solid var(--border-color);
  margin-top: 1.4rem;
  margin-bottom: 1.4rem;
}

p {
  margin: 2rem 0;
}

/**
 * Code Fences
 * see http:/*support.typora.io/Code-Block-Styles
 */

.cm-s-inner .CodeMirror-gutters {
   background: var(--code-bg-color);
}

.code-tooltip {
  box-shadow: none;
  border-radius: var(--border-radius);
  background-color: var(--code-bg-color);
  border-color: var(--border-color);
  border-style: solid;
  border-width: 1px;
}

.code-tooltip input {
  outline: none;
  width: 20ch;
}

.md-fences .code-tooltip {
  bottom: -1.8rem;
  padding: none;
}

.md-fences.md-focus .cm-s-inner {
  /* Remove bottom right border radius when tooltip is shown */
  border-bottom-right-radius: 0;
}

/* code tooltip autocomplete list */

.autoComplt-hint {
  background-color: transparent !important;
  margin: 0 !important;
  padding: 0.125rem 0.375rem !important;
  color: var(--text-color) !important;
  line-height: var(--line-height) !important;
  height: 1.4rem !important;
}

.autoComplt-hint-selected {
  background-color: var(--link-color) !important;
  color: var(--background-color) !important;
}

/* basic styles */

.md-fences,
code,
tt {
  border: 1px solid var(--border-color);
  background-color: var(--code-bg-color);
  font-family: var(--monospace-font);
  font-size: var(--monospace-font-size);
  border-radius: .25rem;
  padding: 0 .125rem;
  line-height: var(--monospace-line-height);
}

.md-fences {
  margin-bottom: 18px;
  margin-top: 15px;
  padding: 0.2em 1em;
  padding-top: 8px;
  padding-bottom: 6px;
}

a {
  color:  var(--link-color);
}


/**
 * Control UI (optional)
 */

.outline-item:hover {
  color: var(--header-color);
}

#write div.md-toc-tooltip {
	background-color: var(--background-color);
}



================================================
FILE: configs/typora/ia_typora_night.css
================================================
@import 'night/codeblock.dark.css';
@import 'night/mermaid.dark.css';
@import 'night/sourcemode.dark.css';
@import 'ia_typora.css';

:root {
  --accented-background-color: #1e1e1e;
  --light-header-color: #dbdbdb; /* H1-H3 */
  --select-text-bg-color: #186a9a;
  --accent-color: #4f525a;
  --background-color: #101010;
  --font-color: #bbbcbc;
  --header-color: #bebebe; /* H4-H6 */
  --border-color: #232629;
  --link-color: #5584aa; 
  --code-bg-color: #1c1a1a;
  --hover-bg-color: #050505; 
  --control-text-color: var(--font-color); 
  --side-bar-bg-color: var(--accented-background-color);
  --control-text-hover-color: var(--header-color);
  --item-hover-text-color: var(--header-color);
  --item-hover-bg-color: var(--hover-bg-color); 
  --bg-color: var(--background-color);
  --text-color: var(--font-color);
  --meta-content-color: var(--accent-color);
  --md-char-color: var(--accent-color);
  --window-border: 1px solid rgba(0,0,0,.07);
  --active-file-bg-color: var(--hover-bg-color);
}

.outline-item:hover {
  background-color: var(--hover-bg-color);
}

#write {
  cursor: -webkit-image-set(url("night/cursor.png") 1x, url("night/cursor@2x.png") 2x) 8 8, auto;
}

h1,
h2,
h3 {
  color: var(--light-header-color);
}

mark {
  background: #b8b80a
}

table tr:nth-child(2n),
thead {
    background-color: #141313;
}

sup.md-footnote {
  background-color: var(--code-bg-color);
  color: var(--font-color);
}

/* right click menu */
.context-menu {
  background-color: #141313;
}

.context-menu.dropdown-menu .divider {
  background-color: #232629;
}

/* focus mode */
.on-focus-mode .md-end-block:not(.md-focus):not(.md-focus-container) * {
  color: #4f525a !important;
}

.on-focus-mode .md-end-block:not(.md-focus) img,
.on-focus-mode .md-task-list-item:not(.md-focus-container)>input {
  opacity: #4f525a !important;
}

.on-focus-mode li[cid]:not(.md-focus-container){
  color: #4f525a;
}

.on-focus-mode .md-fences.md-focus .CodeMirror-code>*:not(.CodeMirror-activeline) *,
.on-focus-mode .CodeMirror.cm-s-inner:not(.CodeMirror-focused) * {
  color: #4f525a !important;
}

.on-focus-mode .md-focus,
.on-focus-mode .md-focus-container {
  color: var(--light-header-color);
}

.on-focus-mode #typora-source .CodeMirror-code>*:not(.CodeMirror-activeline) * {
  color: #4f525a !important;
}



================================================
FILE: configs/ulauncher.desktop
================================================
[Desktop Entry]
Name=Ulauncher
Comment=Application launcher for Linux
GenericName=Launcher
Categories=GNOME;GTK;Utility;
TryExec=/usr/bin/ulauncher
Exec=env GDK_BACKEND=wayland /usr/bin/ulauncher --hide-window
Icon=ulauncher
Terminal=false
Type=Application
X-GNOME-Autostart-enabled=true


================================================
FILE: configs/ulauncher.json
================================================
{
  "blacklisted-desktop-dirs": "/usr/share/locale:/usr/share/app-install:/usr/share/kservices5:/usr/share/fk5:/usr/share/kservicetypes5:/usr/share/applications/screensavers:/usr/share/kde4:/usr/share/mimelnk",
  "clear-previous-query": true,
  "disable-desktop-filters": false,
  "grab-mouse-pointer": false,
  "hotkey-show-app": "null",
  "render-on-screen": "mouse-pointer-monitor",
  "show-indicator-icon": true,
  "show-recent-apps": "0",
  "terminal-command": "",
  "theme-name": "dark"
}


================================================
FILE: configs/vscode.json
================================================
{
  "editor.fontFamily": "CaskaydiaMono Nerd Font",
  "editor.tabSize": 2,
  "security.workspace.trust.untrustedFiles": "open",
  "editor.minimap.enabled": false,
  "git.ignoreMissingGitWarning": true,
  "editor.fontSize": 12,
  "editor.occurrencesHighlight": false,
  "editor.selectionHighlight": false,
  "editor.suggestOnTriggerCharacters": false,
  "editor.tabCompletion": "on",
  "editor.quickSuggestions": {
    "other": false,
    "comments": false,
    "strings": false
  },
  "files.trimTrailingWhitespace": true,
  "git.confirmSync": false,
  "window.menuBarVisibility": "compact",
  "git.autofetch": true,
  "git.openRepositoryInParentFolders": "always",
  "explorer.confirmDelete": false,
  "extensions.ignoreRecommendations": true,
  "workbench.colorTheme": "Tokyo Night",
  "window.titleBarStyle": "custom"
}


================================================
FILE: configs/xcompose
================================================
include "%H/.local/share/omakub/defaults/xcompose"

# Identification
<Multi_key> <space> <n> : "$OMAKUB_USER_NAME"
<Multi_key> <space> <e> : "$OMAKUB_USER_EMAIL"


================================================
FILE: configs/zellij.kdl
================================================
theme "tokyo-night"
default_layout "compact"
on_force_close "quit"

default_mode "locked"
keybinds clear-defaults=true {
    locked {
        bind "Ctrl g" { SwitchToMode "normal"; }
    }
    pane {
        bind "Left" { MoveFocus "left"; }
        bind "Down" { MoveFocus "down"; }
        bind "Up" { MoveFocus "up"; }
        bind "Right" { MoveFocus "right"; }
        bind "c" { SwitchToMode "renamepane"; PaneNameInput 0; }
        bind "d" { NewPane "down"; SwitchToMode "locked"; }
        bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "locked"; }
        bind "f" { ToggleFocusFullscreen; SwitchToMode "locked"; }
        bind "h" { MoveFocus "left"; }
        bind "j" { MoveFocus "down"; }
        bind "k" { MoveFocus "up"; }
        bind "l" { MoveFocus "right"; }
        bind "n" { NewPane; SwitchToMode "locked"; }
        bind "p" { SwitchToMode "normal"; }
        bind "r" { NewPane "right"; SwitchToMode "locked"; }
        bind "w" { ToggleFloatingPanes; SwitchToMode "locked"; }
        bind "x" { CloseFocus; SwitchToMode "locked"; }
        bind "z" { TogglePaneFrames; SwitchToMode "locked"; }
        bind "Tab" { SwitchFocus; }
    }
    tab {
        bind "Left" { GoToPreviousTab; }
        bind "Down" { GoToNextTab; }
        bind "Up" { GoToPreviousTab; }
        bind "Right" { GoToNextTab; }
        bind "1" { GoToTab 1; SwitchToMode "locked"; }
        bind "2" { GoToTab 2; SwitchToMode "locked"; }
        bind "3" { GoToTab 3; SwitchToMode "locked"; }
        bind "4" { GoToTab 4; SwitchToMode "locked"; }
        bind "5" { GoToTab 5; SwitchToMode "locked"; }
        bind "6" { GoToTab 6; SwitchToMode "locked"; }
        bind "7" { GoToTab 7; SwitchToMode "locked"; }
        bind "8" { GoToTab 8; SwitchToMode "locked"; }
        bind "9" { GoToTab 9; SwitchToMode "locked"; }
        bind "[" { BreakPaneLeft; SwitchToMode "locked"; }
        bind "]" { BreakPaneRight; SwitchToMode "locked"; }
        bind "b" { BreakPane; SwitchToMode "locked"; }
        bind "h" { GoToPreviousTab; }
        bind "j" { GoToNextTab; }
        bind "k" { GoToPreviousTab; }
        bind "l" { GoToNextTab; }
        bind "n" { NewTab; SwitchToMode "locked"; }
        bind "r" { SwitchToMode "renametab"; TabNameInput 0; }
        bind "s" { ToggleActiveSyncTab; SwitchToMode "locked"; }
        bind "t" { SwitchToMode "normal"; }
        bind "x" { CloseTab; SwitchToMode "locked"; }
        bind "Tab" { ToggleTab; }
    }
    resize {
        bind "Left" { Resize "Increase left"; }
        bind "Down" { Resize "Increase down"; }
        bind "Up" { Resize "Increase up"; }
        bind "Right" { Resize "Increase right"; }
        bind "+" { Resize "Increase"; }
        bind "-" { Resize "Decrease"; }
        bind "=" { Resize "Increase"; }
        bind "H" { Resize "Decrease left"; }
        bind "J" { Resize "Decrease down"; }
        bind "K" { Resize "Decrease up"; }
        bind "L" { Resize "Decrease right"; }
        bind "h" { Resize "Increase left"; }
        bind "j" { Resize "Increase down"; }
        bind "k" { Resize "Increase up"; }
        bind "l" { Resize "Increase right"; }
        bind "r" { SwitchToMode "normal"; }
    }
    move {
        bind "Left" { MovePane "left"; }
        bind "Down" { MovePane "down"; }
        bind "Up" { MovePane "up"; }
        bind "Right" { MovePane "right"; }
        bind "h" { MovePane "left"; }
        bind "j" { MovePane "down"; }
        bind "k" { MovePane "up"; }
        bind "l" { MovePane "right"; }
        bind "m" { SwitchToMode "normal"; }
        bind "n" { MovePane; }
        bind "p" { MovePaneBackwards; }
        bind "Tab" { MovePane; }
    }
    scroll {
        bind "Alt Left" { MoveFocusOrTab "left"; SwitchToMode "locked"; }
        bind "Alt Down" { MoveFocus "down"; SwitchToMode "locked"; }
        bind "Alt Up" { MoveFocus "up"; SwitchToMode "locked"; }
        bind "Alt Right" { MoveFocusOrTab "right"; SwitchToMode "locked"; }
        bind "e" { EditScrollback; SwitchToMode "locked"; }
        bind "f" { SwitchToMode "entersearch"; SearchInput 0; }
        bind "Alt h" { MoveFocusOrTab "left"; SwitchToMode "locked"; }
        bind "Alt j" { MoveFocus "down"; SwitchToMode "locked"; }
        bind "Alt k" { MoveFocus "up"; SwitchToMode "locked"; }
        bind "Alt l" { MoveFocusOrTab "right"; SwitchToMode "locked"; }
        bind "s" { SwitchToMode "normal"; }
    }
    search {
        bind "c" { SearchToggleOption "CaseSensitivity"; }
        bind "n" { Search "down"; }
        bind "o" { SearchToggleOption "WholeWord"; }
        bind "p" { Search "up"; }
        bind "w" { SearchToggleOption "Wrap"; }
    }
    session {
        bind "c" {
            LaunchOrFocusPlugin "configuration" {
                floating true
                move_to_focused_tab true
            }
            SwitchToMode "locked"
        }
        bind "d" { Detach; }
        bind "o" { SwitchToMode "normal"; }
        bind "p" {
            LaunchOrFocusPlugin "plugin-manager" {
                floating true
                move_to_focused_tab true
            }
            SwitchToMode "locked"
        }
        bind "w" {
            LaunchOrFocusPlugin "session-manager" {
                floating true
                move_to_focused_tab true
            }
            SwitchToMode "locked"
        }
    }
    shared_among "normal" "locked" {
        bind "Alt Left" { MoveFocusOrTab "left"; }
        bind "Alt Down" { MoveFocus "down"; }
        bind "Alt Up" { MoveFocus "up"; }
        bind "Alt Right" { MoveFocusOrTab "right"; }
        bind "Alt +" { Resize "Increase"; }
        bind "Alt -" { Resize "Decrease"; }
        bind "Alt =" { Resize "Increase"; }
        bind "Alt [" { PreviousSwapLayout; }
        bind "Alt ]" { NextSwapLayout; }
        bind "Alt f" { ToggleFloatingPanes; }
        bind "Alt h" { MoveFocusOrTab "left"; }
        bind "Alt i" { MoveTab "left"; }
        bind "Alt j" { MoveFocus "down"; }
        bind "Alt k" { MoveFocus "up"; }
        bind "Alt l" { MoveFocusOrTab "right"; }
        bind "Alt n" { NewPane; }
        bind "Alt o" { MoveTab "right"; }
    }
    shared_except "locked" "renametab" "renamepane" {
        bind "Ctrl g" { SwitchToMode "locked"; }
        bind "Ctrl q" { Quit; }
    }
    shared_except "locked" "entersearch" {
        bind "Enter" { SwitchToMode "locked"; }
    }
    shared_except "locked" "entersearch" "renametab" "renamepane" {
        bind "Esc" { SwitchToMode "locked"; }
    }
    shared_except "locked" "entersearch" "renametab" "renamepane" "move" {
        bind "m" { SwitchToMode "move"; }
    }
    shared_except "locked" "entersearch" "search" "renametab" "renamepane" "session" {
        bind "o" { SwitchToMode "session"; }
    }
    shared_except "locked" "tab" "entersearch" "renametab" "renamepane" {
        bind "t" { SwitchToMode "tab"; }
    }
    shared_except "locked" "tab" "scroll" "entersearch" "renametab" "renamepane" {
        bind "s" { SwitchToMode "scroll"; }
    }
    shared_among "normal" "resize" "tab" "scroll" "prompt" "tmux" {
        bind "p" { SwitchToMode "pane"; }
    }
    shared_except "locked" "resize" "pane" "tab" "entersearch" "renametab" "renamepane" {
        bind "r" { SwitchToMode "resize"; }
    }
    shared_among "scroll" "search" {
        bind "PageDown" { PageScrollDown; }
        bind "PageUp" { PageScrollUp; }
        bind "Left" { PageScrollUp; }
        bind "Down" { ScrollDown; }
        bind "Up" { ScrollUp; }
        bind "Right" { PageScrollDown; }
        bind "Ctrl b" { PageScrollUp; }
        bind "Ctrl c" { ScrollToBottom; SwitchToMode "locked"; }
        bind "d" { HalfPageScrollDown; }
        bind "Ctrl f" { PageScrollDown; }
        bind "h" { PageScrollUp; }
        bind "j" { ScrollDown; }
        bind "k" { ScrollUp; }
        bind "l" { PageScrollDown; }
        bind "u" { HalfPageScrollUp; }
    }
    entersearch {
        bind "Ctrl c" { SwitchToMode "scroll"; }
        bind "Esc" { SwitchToMode "scroll"; }
        bind "Enter" { SwitchToMode "search"; }
    }
    renametab {
        bind "Esc" { UndoRenameTab; SwitchToMode "tab"; }
    }
    shared_among "renametab" "renamepane" {
        bind "Ctrl c" { SwitchToMode "locked"; }
    }
    renamepane {
        bind "Esc" { UndoRenamePane; SwitchToMode "pane"; }
    }
}


================================================
FILE: defaults/bash/aliases
================================================
# File system
alias ls='eza -lh --group-directories-first --icons=auto'
alias lsa='ls -a'
alias lt='eza --tree --level=2 --long --icons --git'
alias lta='lt -a'
alias ff="fzf --preview 'batcat --style=numbers --color=always {}'"
alias fd='fdfind'
alias cd='z'

# Directories
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

# Tools
n() { if [ "$#" -eq 0 ]; then nvim .; else nvim "$@"; fi; }
alias g='git'
alias d='docker'
alias r='rails'
alias bat='batcat'
alias lzg='lazygit'
alias lzd='lazydocker'

# Git
alias gcm='git commit -m'
alias gcam='git commit -a -m'
alias gcad='git commit -a --amend'


================================================
FILE: defaults/bash/functions
================================================
# Compression
compress() { tar -czf "${1%/}.tar.gz" "${1%/}"; }
alias decompress="tar -xzf"

# Convert webm files generated by the Gnome screenshot video recorder to mp4s that are more compatible
webm2mp4() {
  input_file="$1"
  output_file="${input_file%.webm}.mp4"
  ffmpeg -i "$input_file" -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 192k "$output_file"
}

# Write iso file to sd card
iso2sd() {
  if [ $# -ne 2 ]; then
    echo "Usage: iso2sd <input_file> <output_device>"
    echo "Example: iso2sd ~/Downloads/ubuntu-25.04-desktop-amd64.iso /dev/sda"
    echo -e "\nAvailable SD cards:"
    lsblk -d -o NAME | grep -E '^sd[a-z]' | awk '{print "/dev/"$1}'
  else
    sudo dd bs=4M status=progress oflag=sync if="$1" of="$2"
    sudo eject $2
  fi
}

# Create a desktop launcher for a web app
web2app() {
  if [ "$#" -ne 3 ]; then
    echo "Usage: web2app <AppName> <AppURL> <IconURL> (IconURL must be in PNG -- use https://dashboardicons.com)"
    return 1
  fi

  local APP_NAME="$1"
  local APP_URL="$2"
  local ICON_URL="$3"
  local ICON_DIR="$HOME/.local/share/applications/icons"
  local DESKTOP_FILE="$HOME/.local/share/applications/${APP_NAME}.desktop"
  local ICON_PATH="${ICON_DIR}/${APP_NAME}.png"

  mkdir -p "$ICON_DIR"

  if ! curl -sL -o "$ICON_PATH" "$ICON_URL"; then
    echo "Error: Failed to download icon."
    return 1
  fi

  cat > "$DESKTOP_FILE" <<EOF
[Desktop Entry]
Version=1.0
Name=$APP_NAME
Comment=$APP_NAME
Exec=google-chrome --app="$APP_URL" --name="$APP_NAME" --class="$APP_NAME" --window-size=800,600
Terminal=false
Type=Application
Icon=$ICON_PATH
Categories=GTK;
MimeType=text/html;text/xml;application/xhtml_xml;
StartupNotify=true
EOF

  chmod +x "$DESKTOP_FILE"
}

web2app-remove() {
  if [ "$#" -ne 1 ]; then
    echo "Usage: web2app-remove <AppName>"
    return 1
  fi

  local APP_NAME="$1"
  local ICON_DIR="$HOME/.local/share/applications/icons"
  local DESKTOP_FILE="$HOME/.local/share/applications/${APP_NAME}.desktop"
  local ICON_PATH="${ICON_DIR}/${APP_NAME}.png"

  rm "$DESKTOP_FILE"
  rm "$ICON_PATH"
}

# Move a reference to a .desktop file, like Spotify.desktop, to a named folder, like Xtra.
# Don't use full path for the .desktop file.
app2folder() {
  if [ "$#" -ne 2 ]; then
    local FOLDERS=$(gsettings get org.gnome.desktop.app-folders folder-children | tr -d "[],'")
    echo "Usage: app2folder <desktop_file.desktop> <folder_name>"
    echo "Folders: $FOLDERS"
    return 1
  fi

  local DESKTOP_FILE="$1"
  local FOLDER="$2"
  local SCHEMA="org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/$FOLDER/"
  local CURRENT_APPS=$(gsettings get "$SCHEMA" apps)

  if [[ "$CURRENT_APPS" != *"$DESKTOP_FILE"* ]]; then
    local TRIMMED=$(echo "$CURRENT_APPS" | sed "s/^\[//;s/\]$//")
    gsettings set "$SCHEMA" apps "[$TRIMMED, '$DESKTOP_FILE']"
  fi
}

# Remove desktop app from folder
app2folder-remove() {
  if [ "$#" -ne 2 ]; then
    local FOLDERS=$(gsettings get org.gnome.desktop.app-folders folder-children | tr -d "[],'")
    echo "Usage: app2folder-remove <desktop_file.desktop> <folder_name>"
    echo "Folders: $FOLDERS"
    return 1
  fi

  local DESKTOP_FILE="$1"
  local FOLDER="$2"
  local SCHEMA="org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/$FOLDER/"
  local CURRENT_APPS=$(gsettings get "$SCHEMA" apps)

  if [[ "$CURRENT_APPS" == *"$DESKTOP_FILE"* ]]; then
    local RAW_LIST=$(echo "$CURRENT_APPS" | tr -d "[]'")
    IFS=',' read -ra APPS_ARRAY <<< "$RAW_LIST"

    # Filter out the app to be removed
    local NEW_APPS=()
    for app in "${APPS_ARRAY[@]}"; do
      app=$(echo "$app" | xargs) # trim spaces
      if [[ "$app" != "$DESKTOP_FILE" && -n "$app" ]]; then
        NEW_APPS+=("'$app'")
      fi
    done

    # Join list again
    local NEW_LIST=$(IFS=, ; echo "${NEW_APPS[*]}")

    gsettings set "$SCHEMA" apps "[$NEW_LIST]"
  fi
}

# Ensure that external keyboards that use an fn key has the F keys as the default
alias fix_fkeys='echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode'

# Spotify window is too large on many displays, so fix this by zooming it down
alias fix_spotify_window_size="sudo sed -i 's|^Exec=.*|Exec=spotify --force-device-scale-factor=1.5 %U|' /usr/local/share/applications/spotify.desktop"


================================================
FILE: defaults/bash/init
================================================
if command -v mise &> /dev/null; then
  eval "$(mise activate bash)"
fi

if command -v zoxide &> /dev/null; then
  eval "$(zoxide init bash)"
fi

if command -v fzf &> /dev/null; then
  if [[ -f /usr/share/bash-completion/completions/fzf ]]; then
    source /usr/share/bash-completion/completions/fzf
  fi
  if [[ -f /usr/share/doc/fzf/examples/key-bindings.bash ]]; then
    source /usr/share/doc/fzf/examples/key-bindings.bash
  fi
fi


================================================
FILE: defaults/bash/inputrc
================================================
set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set completion-ignore-case on
set completion-prefix-display-length 2
set show-all-if-ambiguous on
set show-all-if-unmodified on

# Arrow keys match what you've typed so far against your command history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char

# Immediately add a trailing slash when autocompleting symlinks to directories
set mark-symlinked-directories on

# Do not autocomplete hidden files unless the pattern explicitly begins with a dot
set match-hidden-files off

# Show all autocomplete results at once
set page-completions off

# If there are more than 200 possible completions for a word, ask to show them all
set completion-query-items 200

# Show extra file information when completing, like `ls -F` does
set visible-stats on

$if Bash
  # Be more intelligent when autocompleting by also looking at the text after
  # the cursor. For example, when the current line is "cd ~/src/mozil", and
  # the cursor is on the "z", pressing Tab will not autocomplete it to "cd
  # ~/src/mozillail", but to "cd ~/src/mozilla". (This is supported by the
  # Readline used by Bash 4.)
  set skip-completed-text on

  # Coloring for Bash 4 tab completions.
  set colored-stats on
$endif


================================================
FILE: defaults/bash/prompt
================================================
# Technicolor dreams
force_color_prompt=yes
color_prompt=yes

# Simple prompt with path in the window/pane title and caret for typing line
PS1=$'\uf0a9 '
PS1="\[\e]0;\w\a\]$PS1"


================================================
FILE: defaults/bash/rc
================================================
source ~/.local/share/omakub/defaults/bash/shell
source ~/.local/share/omakub/defaults/bash/aliases
source ~/.local/share/omakub/defaults/bash/functions
source ~/.local/share/omakub/defaults/bash/prompt
source ~/.local/share/omakub/defaults/bash/init


================================================
FILE: defaults/bash/shell
================================================
# History control
shopt -s histappend
HISTCONTROL=ignoreboth
HISTSIZE=32768
HISTFILESIZE="${HISTSIZE}"

# Autocompletion
source /usr/share/bash-completion/bash_completion

# Set complete path
export PATH="./bin:$HOME/.local/bin:$HOME/.local/share/omakub/bin:$PATH"
set +h

export OMAKUB_PATH="$HOME/.local/share/omakub"


================================================
FILE: defaults/xcompose
================================================
include "%L"

# Emoji
<Multi_key> <m> <s> : "😄" # smile
<Multi_key> <m> <c> : "😂" # cry
<Multi_key> <m> <l> : "😍" # love
<Multi_key> <m> <v> : "✌️"  # victory
<Multi_key> <m> <h> : "❤️"  # heart
<Multi_key> <m> <y> : "👍" # yes
<Multi_key> <m> <n> : "👎" # no
<Multi_key> <m> <f> : "🖕" # fuck
<Multi_key> <m> <w> : "🤞" # wish
<Multi_key> <m> <r> : "🤘" # rock
<Multi_key> <m> <k> : "😘" # kiss
<Multi_key> <m> <e> : "🙄" # eyeroll
<Multi_key> <m> <d> : "🤤" # droll
<Multi_key> <m> <m> : "💰" # money
<Multi_key> <m> <x> : "🎉" # xellebrate
<Multi_key> <m> <1> : "💯" # 100%
<Multi_key> <m> <t> : "🥂" # toast
<Multi_key> <m> <p> : "🙏" # pray
<Multi_key> <m> <i> : "😉" # wink
<Multi_key> <m> <o> : "👌" # OK
<Multi_key> <m> <g> : "👋" # greeting
<Multi_key> <m> <a> : "💪" # arm
<Multi_key> <m> <b> : "🤯" # blowing

# Typography
<Multi_key> <space> <space> : "—"


================================================
FILE: install/check-version.sh
================================================
#!/bin/bash

if [ ! -f /etc/os-release ]; then
  echo "$(tput setaf 1)Error: Unable to determine OS. /etc/os-release file not found."
  echo "Installation stopped."
  exit 1
fi

. /etc/os-release

# Check if running on Ubuntu 24.04 or higher
if [ "$ID" != "ubuntu" ] || [ $(echo "$VERSION_ID >= 24.04" | bc) != 1 ]; then
  echo "$(tput setaf 1)Error: OS requirement not met"
  echo "You are currently running: $ID $VERSION_ID"
  echo "OS required: Ubuntu 24.04 or higher"
  echo "Installation stopped."
  exit 1
fi

# Check if running on x86
ARCH=$(uname -m)
if [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i686" ]; then
  echo "$(tput setaf 1)Error: Unsupported architecture detected"
  echo "Current architecture: $ARCH"
  echo "This installation is only supported on x86 architectures (x86_64 or i686)."
  echo "Installation stopped."
  exit 1
fi


================================================
FILE: install/desktop/a-flatpak.sh
================================================
#!/bin/bash

sudo apt install -y flatpak
sudo apt install -y gnome-software-plugin-flatpak
sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo


================================================
FILE: install/desktop/app-alacritty.sh
================================================
#!/bin/bash

# Alacritty is a GPU-powered and highly extensible terminal. See https://alacritty.org/
sudo apt install -y alacritty
mkdir -p ~/.config/alacritty
cp ~/.local/share/omakub/configs/alacritty.toml ~/.config/alacritty/alacritty.toml
cp ~/.local/share/omakub/configs/alacritty/shared.toml ~/.config/alacritty/shared.toml
cp ~/.local/share/omakub/configs/alacritty/pane.toml ~/.config/alacritty/pane.toml
cp ~/.local/share/omakub/configs/alacritty/btop.toml ~/.config/alacritty/btop.toml
cp ~/.local/share/omakub/themes/tokyo-night/alacritty.toml ~/.config/alacritty/theme.toml
cp ~/.local/share/omakub/configs/alacritty/fonts/CaskaydiaMono.toml ~/.config/alacritty/font.toml
cp ~/.local/share/omakub/configs/alacritty/font-size.toml ~/.config/alacritty/font-size.toml

# Migrate config format if needed
alacritty migrate 2>/dev/null || true
alacritty migrate -c ~/.config/alacritty/pane.toml 2>/dev/null || true
alacritty migrate -c ~/.config/alacritty/btop.toml 2>/dev/null || true

source ~/.local/share/omakub/install/desktop/set-alacritty-default.sh


================================================
FILE: install/desktop/app-chrome.sh
================================================
#!/bin/bash

# Browse the web with the most popular browser. See https://www.google.com/chrome/
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
xdg-settings set default-web-browser google-chrome.desktop
cd -


================================================
FILE: install/desktop/app-flameshot.sh
================================================
#!/bin/bash

# Flameshot is a nice step-up over the default Gnome screenshot tool
sudo apt install -y flameshot


================================================
FILE: install/desktop/app-gnome-sushi.sh
================================================
#!/bin/bash

# Gives you previews in the file manager when pressing space
sudo apt install -y gnome-sushi


================================================
FILE: install/desktop/app-gnome-tweak-tool.sh
================================================
#!/bin/bash

sudo apt install -y gnome-tweak-tool


================================================
FILE: install/desktop/app-libreoffice.sh
================================================
#!/bin/bash

# Work with Word, Excel, Powerpoint files
sudo apt install -y libreoffice


================================================
FILE: install/desktop/app-localsend.sh
================================================
#!/bin/bash

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
rm localsend.deb
cd -


================================================
FILE: install/desktop/app-obsidian.sh
================================================
#!/bin/bash

# Obsidian is a multi-platform note taking application. See https://obsidian.md
cd /tmp
OBSIDIAN_VERSION=$(curl -s https://api.github.com/repos/obsidianmd/obsidian-releases/releases/latest | grep -Po '"tag_name": "v\K[^"]*')
wget -O obsidian.deb "https://github.com/obsidianmd/obsidian-releases/releases/latest/download/obsidian_${OBSIDIAN_VERSION}_amd64.deb"
sudo apt install -y ./obsidian.deb
rm obsidian.deb
cd -


================================================
FILE: install/desktop/app-pinta.sh
================================================
#!/bin/bash

# Pinta is a simple drawing and image editing program. See https://www.pinta-project.com/
flatpak install -y flathub com.github.PintaProject.Pinta

================================================
FILE: install/desktop/app-signal.sh
================================================
#!/bin/bash

if [ ! -f /etc/apt/sources.list.d/signal-desktop.sources ]; then
  [ -f /usr/share/keyrings/signal-desktop-keyring.gpg ] && sudo rm /usr/share/keyrings/signal-desktop-keyring.gpg
  wget -O- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor > signal-desktop-keyring.gpg;
  cat signal-desktop-keyring.gpg | sudo tee /usr/share/keyrings/signal-desktop-keyring.gpg > /dev/null
  wget -O signal-desktop.sources https://updates.signal.org/static/desktop/apt/signal-desktop.sources;
  cat signal-desktop.sources | sudo tee /etc/apt/sources.list.d/signal-desktop.sources > /dev/null
  rm signal-desktop-keyring.gpg signal-desktop.sources
fi

sudo apt update
sudo apt install -y signal-desktop


================================================
FILE: install/desktop/app-typora.sh
================================================
#!/bin/bash

# Typora is a markdown editor and reader. See https://typora.io/
if [ ! -f /etc/apt/sources.list.d/typora.list ]; then
  [ -f /etc/apt/keyrings/typora.gpg ] && sudo rm /etc/apt/keyrings/typora.gpg
  sudo mkdir -p /etc/apt/keyrings
  curl -fsSL https://downloads.typora.io/typora.gpg | sudo tee /etc/apt/keyrings/typora.gpg > /dev/null
  echo "deb [signed-by=/etc/apt/keyrings/typora.gpg] https://downloads.typora.io/linux ./" | sudo tee /etc/apt/sources.list.d/typora.list
fi

sudo apt update
sudo apt install typora -y

# Add iA Typora theme
mkdir -p ~/.config/Typora/themes
cp ~/.local/share/omakub/configs/typora/ia_typora.css ~/.config/Typora/themes/
cp ~/.local/share/omakub/configs/typora/ia_typora_night.css ~/.config/Typora/themes/


================================================
FILE: install/desktop/app-vlc.sh
================================================
#!/bin/bash

sudo apt install -y vlc


================================================
FILE: install/desktop/app-vscode.sh
================================================
#!/bin/bash

if [ ! -f /etc/apt/keyrings/packages.microsoft.gpg ] || [ ! -f /usr/share/keyrings/microsoft.gpg ]; then
  [ -f /etc/apt/keyrings/packages.microsoft.gpg ] && sudo rm /etc/apt/keyrings/packages.microsoft.gpg
  cd /tmp
  wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor >packages.microsoft.gpg
  sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
  echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list >/dev/null
  rm -f packages.microsoft.gpg
  cd -
fi

sudo apt update
sudo apt install -y code

mkdir -p ~/.config/Code/User
cp ~/.local/share/omakub/configs/vscode.json ~/.config/Code/User/settings.json

# Install default supported themes
code --install-extension enkia.tokyo-night

================================================
FILE: install/desktop/app-wl-clipboard.sh
================================================
#!/bin/bash

# Provides a system clipboard interface for Neovim under Wayland
sudo apt install wl-clipboard


================================================
FILE: install/desktop/app-xournalpp.sh
================================================
#!/bin/bash

sudo apt install -y xournalpp


================================================
FILE: install/desktop/applications.sh
================================================
#!/bin/bash

for script in ~/.local/share/omakub/applications/*.sh; do source $script; done


================================================
FILE: install/desktop/fonts.sh
================================================
#!/bin/bash

mkdir -p ~/.local/share/fonts

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 -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 iafonts.zip iaFonts

fc-cache
cd -


================================================
FILE: install/desktop/optional/app-1password.sh
================================================
#!/bin/bash

# Install 1password and 1password-cli single script
cd /tmp
wget https://downloads.1password.com/linux/debian/amd64/stable/1password-latest.deb -O 1password.deb
sudo apt install ./1password.deb -y
rm 1password.deb
cd -

================================================
FILE: install/desktop/optional/app-asdcontrol.sh
================================================
#!/bin/bash

# Install asdcontrol
git clone https://github.com/nikosdion/asdcontrol.git /tmp/asdcontrol
cd /tmp/asdcontrol
make
sudo make install
cd -
rm -rf /tmp/asdcontrol

# Setup sudo-less controls
echo 'KERNEL=="hiddev*", ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="9243", GROUP="users", OWNER="root", MODE="0660"' | sudo tee /etc/udev/rules.d/50-apple-xdr.rules >/dev/null
echo 'KERNEL=="hiddev*", ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="1114", GROUP="users", OWNER="root", MODE="0660"' | sudo tee /etc/udev/rules.d/50-apple-studio.rules >/dev/null
sudo udevadm control --reload-rules

# Reboot to pickup changes
gum confirm "Ready to reboot for brightness controls to be available?" && sudo reboot


================================================
FILE: install/desktop/optional/app-audacity.sh
================================================
#!/bin/bash

flatpak install -y flathub org.audacityteam.Audacity


================================================
FILE: install/desktop/optional/app-brave.sh
================================================
#!/bin/bash

if [ ! -f /etc/apt/sources.list.d/brave-browser-release.list ]; then
  [ -f /usr/share/keyrings/brave-browser-archive-keyring.gpg ] && sudo rm /usr/share/keyrings/brave-browser-archive-keyring.gpg
  sudo curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg
  echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg arch=amd64] https://brave-browser-apt-release.s3.brave.com/ stable main" | sudo tee /etc/apt/sources.list.d/brave-browser-release.list
fi

sudo apt update
sudo apt install -y brave-browser


================================================
FILE: install/desktop/optional/app-cursor.sh
================================================
#!/bin/bash

cd /tmp
curl -L "https://www.cursor.com/api/download?platform=linux-x64&releaseTrack=stable" | jq -r '.downloadUrl' | xargs curl -L -o cursor.appimage
sudo mv cursor.appimage /opt/cursor.appimage
sudo chmod +x /opt/cursor.appimage
sudo apt install -y fuse3
sudo apt install -y libfuse2t64

DESKTOP_FILE="/usr/share/applications/cursor.desktop"

sudo bash -c "cat > $DESKTOP_FILE" <<EOL
[Desktop Entry]
Name=Cursor
Comment=AI-powered code editor
Exec=/opt/cursor.appimage --no-sandbox
Icon=/home/$USER/.local/share/omakub/applications/icons/cursor.png
Type=Application
Categories=Development;IDE;
EOL

if [ -f "$DESKTOP_FILE" ]; then
	echo "cursor.desktop created successfully"
else
	echo "Failed to create cursor.desktop"
fi


================================================
FILE: install/desktop/optional/app-discord.sh
================================================
# A Communication platform for voice, video, and text messaging https://discord.com/
cd /tmp
wget https://discord.com/api/download?platform=linux -O discord.deb
sudo apt install ./discord.deb -y
rm discord.deb
cd -

================================================
FILE: install/desktop/optional/app-doom-emacs.sh
================================================
#!/bin/bash

sudo apt install -y emacs
git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs
~/.config/emacs/bin/doom install


================================================
FILE: install/desktop/optional/app-dropbox.sh
================================================
#!/bin/bash

# Sync files across machines using https://dropbox.com
sudo apt install -y nautilus-dropbox >/dev/null


================================================
FILE: install/desktop/optional/app-gimp.sh
================================================
#!/bin/bash

sudo flatpak install -y org.gimp.GIMP


================================================
FILE: install/desktop/optional/app-mainline-kernels.sh
================================================
#!/bin/bash

sudo add-apt-repository -y ppa:cappelikan/ppa
sudo apt update -y
sudo apt install -y mainline


================================================
FILE: install/desktop/optional/app-minecraft.sh
================================================
#!/bin/bash

sudo apt install -y openjdk-8-jdk

cd /tmp
wget https://launcher.mojang.com/download/Minecraft.deb
sudo apt install -y ./Minecraft.deb
rm Minecraft.deb
cd -


================================================
FILE: install/desktop/optional/app-obs-studio.sh
================================================
#!/bin/bash

# OBS Studio is a screen recording application that allows you to capture both display and webcam in the same recording
sudo apt install -y obs-studio


================================================
FILE: install/desktop/optional/app-retroarch.sh
================================================
#!/bin/bash

flatpak install -y flathub org.libretro.RetroArch


================================================
FILE: install/desktop/optional/app-rubymine.sh
================================================
#!/bin/bash

sudo snap install rubymine --classic


================================================
FILE: install/desktop/optional/app-spotify.sh
================================================
#!/bin/bash

# Stream music using https://spotify.com
if [ ! -f /etc/apt/sources.list.d/spotify.list ]; then
  [ -f /etc/apt/trusted.gpg.d/spotify.gpg ] && sudo rm /etc/apt/trusted.gpg.d/spotify.gpg
  curl -sS https://download.spotify.com/debian/pubkey_5384CE82BA52C83A.gpg | sudo gpg --dearmor --yes -o /etc/apt/trusted.gpg.d/spotify.gpg
  echo "deb [signed-by=/etc/apt/trusted.gpg.d/spotify.gpg] https://repository.spotify.com stable non-free" | sudo tee /etc/apt/sources.list.d/spotify.list
fi

sudo apt update
sudo apt install -y spotify-client


================================================
FILE: install/desktop/optional/app-steam.sh
================================================
#!/bin/bash

# Play games from https://store.steampowered.com/
cd /tmp
wget https://cdn.akamai.steamstatic.com/client/installer/steam.deb
sudo apt install -y ./steam.deb
rm steam.deb
cd -


================================================
FILE: install/desktop/optional/app-virtualbox.sh
================================================
#!/bin/bash

# Virtualbox allows you to run VMs for other flavors of Linux or even Windows
# See https://ubuntu.com/tutorials/how-to-run-ubuntu-desktop-on-a-virtual-machine-using-virtualbox#1-overview
# for a guide on how to run Ubuntu inside it.

sudo apt install -y virtualbox virtualbox-ext-pack
sudo usermod -aG vboxusers ${USER}


================================================
FILE: install/desktop/optional/app-windows.sh
================================================
#!/bin/bash

echo "Downloading the VirtIO drivers to ~/Downloads"
mkdir -p ~/Downloads
wget -O ~/Downloads/virtio-win-0.1.240.iso https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.240-1/virtio-win-0.1.240.iso

echo "Download the Windows 11 ISO..."
open https://www.microsoft.com/software-download/windows11
gum confirm "Have you finished downloading?"

echo "Follow instructions in..."
open https://sysguides.com/install-a-windows-11-virtual-machine-on-kvm


================================================
FILE: install/desktop/optional/app-windsurf.sh
================================================
#!/bin/bash

if [ ! -f /etc/apt/sources.list.d/windsurf.list ]; then
    [ -f /usr/share/keyrings/windsurf-stable-archive-keyring.gpg ] && sudo rm /usr/share/keyrings/windsurf-stable-archive-keyring.gpg
    curl -fsSL "https://windsurf-stable.codeiumdata.com/wVxQEIWkwPUEAGf3/windsurf.gpg" | sudo gpg --dearmor -o /usr/share/keyrings/windsurf-stable-archive-keyring.gpg
    echo "deb [signed-by=/usr/share/keyrings/windsurf-stable-archive-keyring.gpg arch=amd64] https://windsurf-stable.codeiumdata.com/wVxQEIWkwPUEAGf3/apt stable main" | sudo tee /etc/apt/sources.list.d/windsurf.list >/dev/null
fi

sudo apt update
sudo apt install -y windsurf


================================================
FILE: install/desktop/optional/app-zed.sh
================================================
#!/bin/bash

curl https://zed.dev/install.sh | sh


================================================
FILE: install/desktop/optional/app-zoom.sh
================================================
#!/bin/bash

# Make video calls using https://zoom.us/
cd /tmp
wget https://zoom.us/client/latest/zoom_amd64.deb
sudo apt install -y ./zoom_amd64.deb
rm zoom_amd64.deb
cd -


================================================
FILE: install/desktop/optional/select-web-apps.sh
================================================
#!/bin/bash

source $OMAKUB_PATH/defaults/bash/functions

AVAILABLE_WEB_APPS=("Chat GPT" "Google Photos" "Google Contacts" "Tailscale")
apps=$(gum choose "${AVAILABLE_WEB_APPS[@]}" --no-limit --height 6 --header "Select web apps")

if [[ -n "$apps" ]]; then
  IFS=$'\n'
  for app in $apps; do
    case $app in
    "Chat GPT")
      web2app 'Chat GPT' https://chatgpt.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/chatgpt.png
      app2folder 'Chat GPT.desktop' WebApps
      ;;
    "Google Photos")
      web2app 'Google Photos' https://photos.google.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-photos.png
      app2folder 'Google Photos.desktop' WebApps
      ;;
    "Google Contacts")
      web2app 'Google Contacts' https://contacts.google.com/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/google-contacts.png
      app2folder 'Google Contacts.desktop' WebApps
      ;;
    "Tailscale")
      web2app 'Tailscale' https://login.tailscale.com/admin/ https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/tailscale-light.png
      app2folder 'Tailscale.desktop' WebApps
      ;;
    esac
  done
fi


================================================
FILE: install/desktop/select-optional-apps.sh
================================================
#!/bin/bash

if [[ -v OMAKUB_FIRST_RUN_OPTIONAL_APPS ]]; then
	apps=$OMAKUB_FIRST_RUN_OPTIONAL_APPS

	if [[ -n "$apps" ]]; then
		for app in $apps; do
			source "$OMAKUB_PATH/install/desktop/optional/app-${app,,}.sh"
		done
	fi
fi


================================================
FILE: install/desktop/set-alacritty-default.sh
================================================
#!/usr/bin/env sh

# Make alacritty default terminal emulator
sudo update-alternatives --set x-terminal-emulator /usr/bin/alacritty

================================================
FILE: install/desktop/set-app-grid.sh
================================================
#!/bin/bash

# Remove Btop entry for one that runs in alacritty
sudo rm -rf /usr/share/applications/btop.desktop

# App doesn't do anything when started from the app grid
sudo rm -rf /usr/share/applications/org.flameshot.Flameshot.desktop

# Remove the ImageMagick icon
sudo rm -rf /usr/share/applications/display-im6.q16.desktop
sudo rm -rf /usr/share/applications/display-im7.q16.desktop

# Replacing this with btop
sudo rm -rf /usr/share/applications/org.gnome.SystemMonitor.desktop

# We added our own meant for Alacritty
sudo rm -rf /usr/local/share/applications/nvim.desktop
sudo rm -rf /usr/local/share/applications/vim.desktop

# Create folders
gsettings set org.gnome.desktop.app-folders folder-children "['Utilities', 'Sundry', 'YaST', 'Updates', 'Xtra', 'LibreOffice', 'WebApps']"
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/Updates/ name 'Install & Update'
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/Updates/ apps "['org.gnome.Software.desktop', 'software-properties-drivers.desktop', 'software-properties-gtk.desktop', 'update-manager.desktop', 'firmware-updater_firmware-updater.desktop', 'snap-store_snap-store.desktop']"
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/Xtra/ name 'Xtra'
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/Xtra/ apps "['org.Characters.desktop', 'gnome-language-selector.desktop', 'org.gnome.PowerStats.desktop', 'org.gnome.Logs.desktop', 'yelp.desktop', 'org.gnome.Yelp.desktop', 'org.gnome.eog.desktop', 'org.gnome.Sysprof.desktop' ]"
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/LibreOffice/ name 'LibreOffice'
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/LibreOffice/ apps "['libreoffice-base.desktop', 'libreoffice-calc.desktop', 'libreoffice-draw.desktop', 'libreoffice-impress.desktop', 'libreoffice-math.desktop', 'libreoffice-startcenter.desktop', 'libreoffice-writer.desktop', 'libreoffice-xsltfilter.desktop']"
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/WebApps/ name 'Web Apps'
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/WebApps/ apps "['Basecamp.desktop', 'HEY.desktop']"


================================================
FILE: install/desktop/set-dock.sh
================================================
#!/bin/bash

# Favorite apps for dock
apps=(
	"google-chrome.desktop"
	"Alacritty.desktop"
	"Neovim.desktop"
	"code.desktop"
	"WhatsApp.desktop"
	"signal-desktop.desktop"
	"Zoom.desktop"
	"spotify.desktop"
	"steam.desktop"
	"pinta_pinta.desktop"
	"md.obsidian.Obsidian.desktop"
	"Activity.desktop"
	"Docker.desktop"
	"Omakub.desktop"
	"1password.desktop"
	"org.gnome.Settings.desktop"
	"org.gnome.Nautilus.desktop"
	"localsend_app.desktop"
)

# Array to hold installed favorite apps
installed_apps=()

# Directory where .desktop files are typically stored
desktop_dirs=(
	"/var/lib/flatpak/exports/share/applications"
	"/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"


================================================
FILE: install/desktop/set-framework-text-scaling.sh
================================================
#!/bin/bash

COMPUTER_MAKER=$(sudo dmidecode -t system | grep 'Manufacturer:' | awk '{print $2}')
SCREEN_RESOLUTION=$(xrandr | grep '*+' | awk '{print $1}')

if [ "$COMPUTER_MAKER" == "Framework" ] && [ "$SCREEN_RESOLUTION" == "2256x1504" ]; then
	gsettings set org.gnome.desktop.interface text-scaling-factor 0.8
	gsettings set org.gnome.desktop.interface cursor-size 16
	sed -i "s/size = 9/size = 7/g" ~/.config/alacritty/alacritty.toml
fi


================================================
FILE: install/desktop/set-gnome-extensions.sh
================================================
#!/bin/bash

sudo apt install -y gnome-shell-extension-manager gir1.2-gtop-2.0 gir1.2-clutter-1.0
pipx install gnome-extensions-cli --system-site-packages

# Turn off default Ubuntu extensions
gnome-extensions disable tiling-assistant@ubuntu.com
gnome-extensions disable ubuntu-appindicators@ubuntu.com
gnome-extensions disable ubuntu-dock@ubuntu.com
gnome-extensions disable ding@rastersoft.com

# Pause to assure user is ready to accept confirmations
gum confirm "To install Gnome extensions, you need to accept some confirmations. Ready?"

# Install new extensions
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
gext install tophat@fflewddur.github.io
gext install AlphabeticalAppGrid@stuarthayhurst

# 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/
sudo cp ~/.local/share/gnome-shell/extensions/just-perfection-desktop\@just-perfection/schemas/org.gnome.shell.extensions.just-perfection.gschema.xml /usr/share/glib-2.0/schemas/
sudo cp ~/.local/share/gnome-shell/extensions/blur-my-shell\@aunetx/schemas/org.gnome.shell.extensions.blur-my-shell.gschema.xml /usr/share/glib-2.0/schemas/
sudo cp ~/.local/share/gnome-shell/extensions/space-bar\@luchrioh/schemas/org.gnome.shell.extensions.space-bar.gschema.xml /usr/share/glib-2.0/schemas/
sudo cp ~/.local/share/gnome-shell/extensions/tophat@fflewddur.github.io/schemas/org.gnome.shell.extensions.tophat.gschema.xml /usr/share/glib-2.0/schemas/
sudo cp ~/.local/share/gnome-shell/extensions/AlphabeticalAppGrid\@stuarthayhurst/schemas/org.gnome.shell.extensions.AlphabeticalAppGrid.gschema.xml /usr/share/glib-2.0/schemas/
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/

# Configure Tactile
gsettings set org.gnome.shell.extensions.tactile col-0 1
gsettings set org.gnome.shell.extensions.tactile col-1 2
gsettings set org.gnome.shell.extensions.tactile col-2 1
gsettings set org.gnome.shell.extensions.tactile col-3 0
gsettings set org.gnome.shell.extensions.tactile row-0 1
gsettings set org.gnome.shell.extensions.tactile row-1 1
gsettings set org.gnome.shell.extensions.tactile gap-size 32

# Configure Just Perfection
gsettings set org.gnome.shell.extensions.just-perfection animation 2
gsettings set org.gnome.shell.extensions.just-perfection dash-app-running true
gsettings set org.gnome.shell.extensions.just-perfection workspace true
gsettings set org.gnome.shell.extensions.just-perfection workspace-popup false

# Configure Blur My Shell
gsettings set org.gnome.shell.extensions.blur-my-shell.appfolder blur false
gsettings set org.gnome.shell.extensions.blur-my-shell.lockscreen blur false
gsettings set org.gnome.shell.extensions.blur-my-shell.screenshot blur false
gsettings set org.gnome.shell.extensions.blur-my-shell.window-list blur false
gsettings set org.gnome.shell.extensions.blur-my-shell.panel blur false
gsettings set org.gnome.shell.extensions.blur-my-shell.overview blur true
gsettings set org.gnome.shell.extensions.blur-my-shell.overview pipeline 'pipeline_default'
gsettings set org.gnome.shell.extensions.blur-my-shell.dash-to-dock blur true
gsettings set org.gnome.shell.extensions.blur-my-shell.dash-to-dock brightness 0.6
gsettings set org.gnome.shell.extensions.blur-my-shell.dash-to-dock sigma 30
gsettings set org.gnome.shell.extensions.blur-my-shell.dash-to-dock static-blur true
gsettings set org.gnome.shell.extensions.blur-my-shell.dash-to-dock style-dash-to-dock 0

# Configure Space Bar
gsettings set org.gnome.shell.extensions.space-bar.behavior smart-workspace-names false
gsettings set org.gnome.shell.extensions.space-bar.shortcuts enable-activate-workspace-shortcuts false
gsettings set org.gnome.shell.extensions.space-bar.shortcuts enable-move-to-workspace-shortcuts true
gsettings set org.gnome.shell.extensions.space-bar.shortcuts open-menu "@as []"

# Configure TopHat
gsettings set org.gnome.shell.extensions.tophat show-icons false
gsettings set org.gnome.shell.extensions.tophat show-cpu false
gsettings set org.gnome.shell.extensions.tophat show-disk false
gsettings set org.gnome.shell.extensions.tophat show-mem false
gsettings set org.gnome.shell.extensions.tophat show-fs false
gsettings set org.gnome.shell.extensions.tophat network-usage-unit bits

# Configure AlphabeticalAppGrid
gsettings set org.gnome.shell.extensions.alphabetical-app-grid folder-order-position 'end'


================================================
FILE: install/desktop/set-gnome-hotkeys.sh
================================================
#!/bin/bash

# Alt+F4 is very cumbersome
gsettings set org.gnome.desktop.wm.keybindings close "['<Super>w']"

# Make it easy to maximize like you can fill left/right
gsettings set org.gnome.desktop.wm.keybindings maximize "['<Super>Up']"

# Make it easy to resize undecorated windows
gsettings set org.gnome.desktop.wm.keybindings begin-resize "['<Super>BackSpace']"

# For keyboards that only have a start/stop button for music, like Logitech MX Keys Mini
gsettings set org.gnome.settings-daemon.plugins.media-keys next "['<Shift>AudioPlay']"

# Full-screen with title/navigation bar
gsettings set org.gnome.desktop.wm.keybindings toggle-fullscreen "['<Shift>F11']"

# Use 6 fixed workspaces instead of dynamic mode
gsettings set org.gnome.mutter dynamic-workspaces false
gsettings set org.gnome.desktop.wm.preferences num-workspaces 6

# Disable the hotkeys in the Dash to Dock extension (most likely culprit)
gsettings set org.gnome.shell.extensions.dash-to-dock hot-keys false

# Use alt for pinned apps
gsettings set org.gnome.shell.keybindings switch-to-application-1 "['<Alt>1']"
gsettings set org.gnome.shell.keybindings switch-to-application-2 "['<Alt>2']"
gsettings set org.gnome.shell.keybindings switch-to-application-3 "['<Alt>3']"
gsettings set org.gnome.shell.keybindings switch-to-application-4 "['<Alt>4']"
gsettings set org.gnome.shell.keybindings switch-to-application-5 "['<Alt>5']"
gsettings set org.gnome.shell.keybindings switch-to-application-6 "['<Alt>6']"
gsettings set org.gnome.shell.keybindings switch-to-application-7 "['<Alt>7']"
gsettings set org.gnome.shell.keybindings switch-to-application-8 "['<Alt>8']"
gsettings set org.gnome.shell.keybindings switch-to-application-9 "['<Alt>9']"

# Use super for workspaces
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 "['<Super>1']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2 "['<Super>2']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-3 "['<Super>3']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "['<Super>4']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-5 "['<Super>5']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-6 "['<Super>6']"

# Reserve slots for custom keybindings
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/', '/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6/']"

# Set ulauncher to Super+Space
gsettings set org.gnome.desktop.wm.keybindings switch-input-source "@as []"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ name 'Ulauncher'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command 'sh -c "pgrep -x ulauncher && { ulauncher-toggle || true; } || setsid -f ulauncher"'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ binding '<Super>space'

# Set flameshot (with the sh fix for starting under Wayland) on alternate print screen key
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ name 'Flameshot'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ command 'sh -c -- "flameshot gui"'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ binding '<Control>Print'

# Start a new alacritty window (rather than just switch to the already open one)
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/ name 'New Alacritty Window'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/ command 'alacritty'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/ binding '<Shift><Alt>2'

# Start a new Chrome window (rather than just switch to the already open one)
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/ name 'New Chrome Window'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/ command 'google-chrome --new-window'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/ binding '<Shift><Alt>1'

# Turn bightness down on Apple monitor (requires ASDControl installed)
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/ name 'Apple Brightness Down (ASDControl)'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/ binding '<Control>F1'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/ command "sh -c 'asdcontrol \$(asdcontrol --detect /dev/usb/hiddev* 2>/dev/null | grep ^/dev/usb/hiddev | cut -d: -f1) -- -5000'"

# Turn bightness up on Apple monitor (requires ADSControl installed)
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/ name 'Apple Brightness Up (ASDControl)'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/ binding '<Control>F2'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/ command "sh -c 'asdcontrol \$(asdcontrol --detect /dev/usb/hiddev* 2>/dev/null | grep ^/dev/usb/hiddev | cut -d: -f1) -- +5000'"

# Turn bightness up to max on Apple monitor (requires ADSControl installed)
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6/ name 'Apple Brightness Max (ASDControl)'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6/ binding '<Control><Shift>F2'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom6/ command "sh -c 'asdcontrol \$(asdcontrol --detect /dev/usb/hiddev* 2>/dev/null | grep ^/dev/usb/hiddev | cut -d: -f1) -- +60000'"


================================================
FILE: install/desktop/set-gnome-settings.sh
================================================
#!/bin/bash

# Center new windows in the middle of the screen
gsettings set org.gnome.mutter center-new-windows true

# Set Cascadia Mono as the default monospace font
gsettings set org.gnome.desktop.interface monospace-font-name 'CaskaydiaMono Nerd Font 10'

# Reveal week numbers in the Gnome calendar
gsettings set org.gnome.desktop.calendar show-weekdate true

# Turn off ambient sensors for setting screen brightness (they rarely work well!)
gsettings set org.gnome.settings-daemon.plugins.power ambient-enabled false


================================================
FILE: install/desktop/set-gnome-theme.sh
================================================
#!/bin/bash

source ~/.local/share/omakub/themes/tokyo-night/gnome.sh
source ~/.local/share/omakub/themes/tokyo-night/tophat.sh


================================================
FILE: install/desktop/set-xcompose.sh
================================================
#!/bin/bash

envsubst < ~/.local/share/omakub/configs/xcompose > ~/.XCompose
ibus restart
gsettings set org.gnome.desktop.input-sources xkb-options "['compose:caps']"


================================================
FILE: install/desktop/ulauncher.sh
================================================
#!/bin/bash

sudo add-apt-repository universe -y
sudo add-apt-repository ppa:agornostal/ulauncher -y
sudo apt update
sudo apt install ulauncher -y

# Start ulauncher to have it populate config before we overwrite
mkdir -p ~/.config/autostart/
cp ~/.local/share/omakub/configs/ulauncher.desktop ~/.config/autostart/ulauncher.desktop
gtk-launch ulauncher.desktop >/dev/null 2>&1
sleep 2 # ensure enough time for ulauncher to set defaults
cp ~/.local/share/omakub/configs/ulauncher.json ~/.config/ulauncher/settings.json


================================================
FILE: install/desktop.sh
================================================
#!/bin/bash

# Run desktop installers
for installer in ~/.local/share/omakub/install/desktop/*.sh; do source $installer; done

# Logout to pickup changes
gum confirm "Ready to reboot for all settings to take effect?" && sudo reboot || true


================================================
FILE: install/first-run-choices.sh
================================================
#!/bin/bash

# Only ask for default desktop app choices when running Gnome
if [[ "$XDG_CURRENT_DESKTOP" == *"GNOME"* ]]; then
  OPTIONAL_APPS=("1password" "Spotify" "Zoom" "Dropbox")
  DEFAULT_OPTIONAL_APPS='1password,Spotify,Zoom'
  export OMAKUB_FIRST_RUN_OPTIONAL_APPS=$(gum choose "${OPTIONAL_APPS[@]}" --no-limit --selected $DEFAULT_OPTIONAL_APPS --height 7 --header "Select optional apps" | tr ' ' '-')
fi

AVAILABLE_LANGUAGES=("Ruby on Rails" "Node.js" "Go" "PHP" "Python" "Elixir" "Rust" "Java")
SELECTED_LANGUAGES="Ruby on Rails","Node.js"
export OMAKUB_FIRST_RUN_LANGUAGES=$(gum choose "${AVAILABLE_LANGUAGES[@]}" --no-limit --selected "$SELECTED_LANGUAGES" --height 10 --header "Select programming languages")

AVAILABLE_DBS=("MySQL" "Redis" "PostgreSQL")
SELECTED_DBS="MySQL,Redis"
export OMAKUB_FIRST_RUN_DBS=$(gum choose "${AVAILABLE_DBS[@]}" --no-limit --selected "$SELECTED_DBS" --height 5 --header "Select databases (runs in Docker)")


================================================
FILE: install/identification.sh
================================================
#!/bin/bash

echo "Enter identification for git and autocomplete..."
SYSTEM_NAME=$(getent passwd "$USER" | cut -d ':' -f 5 | cut -d ',' -f 1)
export OMAKUB_USER_NAME=$(gum input --placeholder "Enter full name" --value "$SYSTEM_NAME" --prompt "Name> ")
export OMAKUB_USER_EMAIL=$(gum input --placeholder "Enter email address" --prompt "Email> ")


================================================
FILE: install/terminal/a-shell.sh
================================================
#!/bin/bash

# Configure the bash shell using Omakub defaults
[ -f ~/.bashrc ] && mv ~/.bashrc ~/.bashrc.bak
cp ~/.local/share/omakub/configs/bashrc ~/.bashrc

# Load the PATH for use later in the installers
source ~/.local/share/omakub/defaults/bash/shell

[ -f ~/.inputrc ] && mv ~/.inputrc ~/.inputrc.bak
# Configure the inputrc using Omakub defaults
cp ~/.local/share/omakub/configs/inputrc ~/.inputrc


================================================
FILE: install/terminal/app-btop.sh
================================================
#!/bin/bash

# This script installs btop, a resource monitor that shows usage and stats for processor, memory, disks, network and processes.
sudo apt install -y btop

# Use Omakub btop config
mkdir -p ~/.config/btop/themes
cp ~/.local/share/omakub/configs/btop.conf ~/.config/btop/btop.conf
cp ~/.local/share/omakub/themes/tokyo-night/btop.theme ~/.config/btop/themes/tokyo-night.theme



================================================
FILE: install/terminal/app-fastfetch.sh
================================================
#!/bin/bash

# Display system information in the terminal
sudo add-apt-repository -y ppa:zhangsongcui3371/fastfetch
sudo apt update -y
sudo apt install -y fastfetch

# Only attempt to set configuration if fastfetch is not already set
if [ ! -f "$HOME/.config/fastfetch/config.jsonc" ]; then
  # Use Omakub fastfetch config
  mkdir -p ~/.config/fastfetch
  cp ~/.local/share/omakub/configs/fastfetch.jsonc ~/.config/fastfetch/config.jsonc
fi


================================================
FILE: install/terminal/app-github-cli.sh
================================================
#!/bin/bash

if [ ! -f /etc/apt/sources.list.d/github-cli.list ]; then
    [ -f /usr/share/keyrings/githubcli-archive-keyring.gpg ] && sudo rm /usr/share/keyrings/githubcli-archive-keyring.gpg
    curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg status=none
    sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list >/dev/null
fi

sudo apt update
sudo apt install gh -y

================================================
FILE: install/terminal/app-lazydocker.sh
================================================
#!/bin/bash

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
sudo install lazydocker /usr/local/bin
rm lazydocker.tar.gz lazydocker
cd -


================================================
FILE: install/terminal/app-lazygit.sh
================================================
#!/bin/bash

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
sudo install lazygit /usr/local/bin
rm lazygit.tar.gz lazygit
mkdir -p ~/.config/lazygit/
touch ~/.config/lazygit/config.yml
cd -


================================================
FILE: install/terminal/app-neovim.sh
================================================
#!/bin/bash

cd /tmp
wget -O nvim.tar.gz "https://github.com/neovim/neovim/releases/download/stable/nvim-linux-x86_64.tar.gz"
tar -xf nvim.tar.gz
sudo install nvim-linux-x86_64/bin/nvim /usr/local/bin/nvim
sudo cp -R nvim-linux-x86_64/lib /usr/local/
sudo cp -R nvim-linux-x86_64/share /usr/local/
rm -rf nvim-linux-x86_64 nvim.tar.gz
cd -

# Install luarocks and tree-sitter-cli to resolve lazyvim :checkhealth warnings
sudo apt install -y luarocks tree-sitter-cli

# Only attempt to set configuration if Neovim has never been run
if [ ! -d "$HOME/.config/nvim" ]; then
  # Use LazyVim
  git clone https://github.com/LazyVim/starter ~/.config/nvim
  # Remove the .git folder, so you can add it to your own repo later
  rm -rf ~/.config/nvim/.git

  # Make everything match the terminal transparency
  mkdir -p ~/.config/nvim/plugin/after
  cp ~/.local/share/omakub/configs/neovim/transparency.lua ~/.config/nvim/plugin/after/

  # Default to Tokyo Night theme
  cp ~/.local/share/omakub/themes/tokyo-night/neovim.lua ~/.config/nvim/lua/plugins/theme.lua

  # Turn off animated scrolling
  cp ~/.local/share/omakub/configs/neovim/snacks-animated-scrolling-off.lua ~/.config/nvim/lua/plugins/

  # Turn off relative line numbers
  echo "vim.opt.relativenumber = false" >>~/.config/nvim/lua/config/options.lua

  # Ensure editor.neo-tree is used by default
  cp ~/.local/share/omakub/configs/neovim/lazyvim.json ~/.config/nvim/
fi

# Replace desktop launcher with one running inside Alacritty
if [[ -d ~/.local/share/applications ]]; then
  sudo rm -rf /usr/share/applications/nvim.desktop
  sudo rm -rf /usr/local/share/applications/nvim.desktop
  source ~/.local/share/omakub/applications/Neovim.sh
fi


================================================
FILE: install/terminal/app-zellij.sh
================================================
#!/bin/bash

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
rm zellij.tar.gz zellij
cd -

mkdir -p ~/.config/zellij/themes
[ ! -f "$HOME/.config/zellij/config.kdl" ] && cp ~/.local/share/omakub/configs/zellij.kdl ~/.config/zellij/config.kdl
cp ~/.local/share/omakub/themes/tokyo-night/zellij.kdl ~/.config/zellij/themes/tokyo-night.kdl


================================================
FILE: install/terminal/apps-terminal.sh
================================================
#!/bin/bash

sudo apt install -y fzf ripgrep bat eza zoxide plocate apache2-utils fd-find


================================================
FILE: install/terminal/docker.sh
================================================
#!/bin/bash

# Add the official Docker repo
if [ ! -f /etc/apt/sources.list.d/docker.list ]; then
    [ -f /etc/apt/keyrings/docker.asc ] && sudo rm /etc/apt/keyrings/docker.asc
    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
fi

# Install Docker engine and standard plugins
sudo apt update
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}

# Limit log size to avoid running out of disk
echo '{"log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"5"}}' | sudo tee /etc/docker/daemon.json


================================================
FILE: install/terminal/libraries.sh
================================================
#!/bin/bash

sudo apt install -y \
  build-essential pkg-config autoconf bison clang rustc pipx \
  libssl-dev libreadline-dev zlib1g-dev libyaml-dev libreadline-dev libncurses5-dev libffi-dev libgdbm-dev libjemalloc2 \
  libvips imagemagick libmagickwand-dev mupdf mupdf-tools \
  redis-tools sqlite3 libsqlite3-0 libmysqlclient-dev libpq-dev postgresql-client postgresql-client-common


================================================
FILE: install/terminal/mise.sh
================================================
#!/bin/bash

# Install mise for managing multiple versions of languages. See https://mise.jdx.dev/
sudo apt update -y && sudo apt install -y gpg wget curl
sudo install -dm 755 /etc/apt/keyrings
wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1>/dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=$(dpkg --print-architecture)] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
sudo apt update
sudo apt install -y mise


================================================
FILE: install/terminal/optional/app-geekbench.sh
================================================
#!/bin/bash

GB_VERSION="6.4.0"

cd /tmp
gum spin --title "Downloading Geekbench $GB_VERSION..." -- \
  curl -sLo geekbench.tar.gz "https://cdn.geekbench.com/Geekbench-${GB_VERSION}-Linux.tar.gz"
gum spin --title "Extracting Geekbench $GB_VERSION..." -- \
  tar -xzf geekbench.tar.gz
sudo mv "Geekbench-${GB_VERSION}-Linux" /usr/local/geekbench6
sudo ln -sf /usr/local/geekbench6/geekbench6 /usr/local/bin/geekbench6
rm -rf Geekbench* geekbench.tar.gz
cd -
echo "Run as geekbench6 from the terminal"


================================================
FILE: install/terminal/optional/app-ollama.sh
================================================
#!/bin/bash

curl -fsSL https://ollama.com/install.sh | sh


================================================
FILE: install/terminal/optional/app-tailscale.sh
================================================
#!/bin/bash

curl -fsSL https://tailscale.com/install.sh | sh


================================================
FILE: install/terminal/required/app-gum.sh
================================================
#!/bin/bash

# Gum is used for the Omakub commands for tailoring Omakub after the initial install
cd /tmp
GUM_VERSION="0.17.0"
wget -qO gum.deb "https://github.com/charmbracelet/gum/releases/download/v${GUM_VERSION}/gum_${GUM_VERSION}_amd64.deb"
sudo apt-get install -y --allow-downgrades ./gum.deb
rm gum.deb
cd -


================================================
FILE: install/terminal/select-dev-language.sh
================================================
#!/bin/bash

# Install default programming languages
if [[ -v OMAKUB_FIRST_RUN_LANGUAGES ]]; then
  languages=$OMAKUB_FIRST_RUN_LANGUAGES
else
  AVAILABLE_LANGUAGES=("Ruby on Rails" "Node.js" "Go" "PHP" "Python" "Elixir" "Rust" "Java")
  languages=$(gum choose "${AVAILABLE_LANGUAGES[@]}" --no-limit --height 10 --header "Select programming languages")
fi

if [[ -n "$languages" ]]; then
  for language in $languages; do
    case $language in
    Ruby)
      mise use --global ruby@latest
      mise settings add idiomatic_version_file_enable_tools ruby
      mise x ruby -- gem install rails --no-document
      ;;
    Node.js)
      mise use --global node@lts
      ;;
    Go)
      mise use --global go@latest
      ;;
    PHP)
      sudo apt -y install php php-{curl,apcu,intl,mbstring,opcache,pgsql,mysql,sqlite3,redis,xml,zip} --no-install-recommends
      php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
      php composer-setup.php --quiet && sudo mv composer.phar /usr/local/bin/composer
      rm composer-setup.php
      ;;
    Python)
      mise use --global python@latest
      ;;
    Elixir)
      mise use --global erlang@latest
      mise use --global elixir@latest
      mise x elixir -- mix local.hex --force
      ;;
    Rust)
      bash -c "$(curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs)" -- -y
      ;;
    Java)
      mise use --global java@latest
      ;;
    esac
  done
fi


================================================
FILE: install/terminal/select-dev-storage.sh
================================================
#!/bin/bash

# Install default databases
if [[ -v OMAKUB_FIRST_RUN_DBS ]]; then
	dbs=$OMAKUB_FIRST_RUN_DBS
else
	AVAILABLE_DBS=("MySQL" "Redis" "PostgreSQL")
	dbs=$(gum choose "${AVAILABLE_DBS[@]}" --no-limit --height 5 --header "Select databases (runs in Docker)")
fi

if [[ -n "$dbs" ]]; then
	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
fi


================================================
FILE: install/terminal/set-git.sh
================================================
#!/bin/bash

# Set common git aliases
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global pull.rebase true

# Set identification from install inputs
if [[ -n "${OMAKUB_USER_NAME//[[:space:]]/}" ]]; then
  git config --global user.name "$OMAKUB_USER_NAME"
fi

if [[ -n "${OMAKUB_USER_EMAIL//[[:space:]]/}" ]]; then
  git config --global user.email "$OMAKUB_USER_EMAIL"
fi


================================================
FILE: install/terminal.sh
================================================
#!/bin/bash

# Needed for all installers
sudo apt update -y
sudo apt upgrade -y
sudo apt install -y curl git unzip

# Run terminal installers
for installer in ~/.local/share/omakub/install/terminal/*.sh; do source $installer; done


================================================
FILE: install.sh
================================================
#!/bin/bash

# Exit immediately if a command exits with a non-zero status
set -e

# Give people a chance to retry running the installation
trap 'echo "Omakub installation failed! You can retry by running: source ~/.local/share/omakub/install.sh"' ERR

# Check the distribution name and version and abort if incompatible
source ~/.local/share/omakub/install/check-version.sh

# Ask for app choices
echo "Get ready to make a few choices..."
source ~/.local/share/omakub/install/terminal/required/app-gum.sh >/dev/null
source ~/.local/share/omakub/install/first-run-choices.sh
source ~/.local/share/omakub/install/identification.sh

# Desktop software and tweaks will only be installed if we're running Gnome
if [[ "$XDG_CURRENT_DESKTOP" == *"GNOME"* ]]; then
  # Ensure computer doesn't go to sleep or lock while installing
  gsettings set org.gnome.desktop.screensaver lock-enabled false
  gsettings set org.gnome.desktop.session idle-delay 0

  echo "Installing terminal and desktop tools..."

  # Install terminal tools
  source ~/.local/share/omakub/install/terminal.sh

  # Install desktop tools and tweaks
  source ~/.local/share/omakub/install/desktop.sh

  # Revert to normal idle and lock settings
  gsettings set org.gnome.desktop.screensaver lock-enabled true
  gsettings set org.gnome.desktop.session idle-delay 300
else
  echo "Only installing terminal tools..."
  source ~/.local/share/omakub/install/terminal.sh
fi


================================================
FILE: migrations/1718359027.sh
================================================
#!/bin/bash

# Catch 1.0.0 up to 1.1.0

sudo echo "Running upgrade migration..."

# Change Zellij directory to be realized rather than a symlink
ZELLIJ_THEMES_DIR="$HOME/.config/zellij/themes"
if [ -L $ZELLIJ_THEMES_DIR ]; then
	rm $ZELLIJ_THEMES_DIR
	mkdir -p $ZELLIJ_THEMES_DIR
	for dir in $OMAKUB_PATH/themes/*; do
		if [ -d "$dir" ]; then
			zellij_file="$dir/zellij.kdl"
			dir_name=$(basename "$dir")
			dest_file="$ZELLIJ_THEMES_DIR/$dir_name.kdl"
			cp "$zellij_file" "$dest_file"
		fi
	done
fi

# New neovim settings
mkdir -p ~/.config/nvim/plugin/after
cp $OMAKUB_PATH/configs/neovim/transparency.lua ~/.config/nvim/plugin/after/
sed -i 's/checker = { enabled = true }/checker = { enabled = true, notify = false }/g' ~/.config/nvim/lua/config/lazy.lua
source ~/.local/share/omakub/applications/Neovim.sh

# New font size setup
cp $OMAKUB_PATH/configs/alacritty/font-size.toml ~/.config/alacritty/
cp ~/.config/alacritty/alacritty.toml ~/.config/alacritty/alacritty.toml.bak
cp $OMAKUB_PATH/configs/alacritty.toml ~/.config/alacritty/alacritty.toml
source $OMAKUB_PATH/install/desktop/set-framework-text-scaling.sh

cp $OMAKUB_PATH/themes/tokyo-night/alacritty.toml ~/.config/alacritty/theme.toml
cp $OMAKUB_PATH/configs/alacritty/fonts/CaskaydiaMono.toml ~/.config/alacritty/font.toml

# Set new Gnome settings
source $OMAKUB_PATH/install/desktop/set-gnome-settings.sh

# Install new apps
source $OMAKUB_PATH/install/desktop/a-flatpak.sh
source $OMAKUB_PATH/install/desktop/app-gnome-sushi.sh
source $OMAKUB_PATH/install/desktop/app-localsend.sh
source $OMAKUB_PATH/install/desktop/app-obsidian.sh
source $OMAKUB_PATH/install/terminal/app-fastfetch.sh
source $OMAKUB_PATH/install/terminal/apps-terminal.sh

# Add new desktop applications icons
source $OMAKUB_PATH/applications/Omakub.sh
source $OMAKUB_PATH/applications/About.sh
source $OMAKUB_PATH/applications/Activity.sh
source $OMAKUB_PATH/applications/Docker.sh

# Update icons of apps still installed
[ -f ~/.local/share/applications/Basecamp.desktop ] && source $OMAKUB_PATH/applications/Basecamp.sh
[ -f ~/.local/share/applications/HEY.desktop ] && source $OMAKUB_PATH/applications/HEY.sh
[ -f ~/.local/share/applications/WhatsApp.desktop ] && source $OMAKUB_PATH/applications/WhatsApp.sh

# Set new app grid
source $OMAKUB_PATH/install/desktop/set-app-grid.sh

# Add new Gnome extensions
source $OMAKUB_PATH/install/desktop/set-gnome-extensions.sh

gum style \
	--foreground 212 --border-foreground 212 --border double \
	--align left --width 80 --margin "1 2" --padding "2 4" \
	"1. alacritty.toml config moved to .bak to include new font-size.toml" \
	"2. Alacritty theme/font has been reset. Use omakub app to set again." \
	"3. To use Pano, the new clipboard manager, enable in Gnome Extensions."

gum confirm "Set your application dock to default with new apps?" && source $OMAKUB_PATH/install/desktop/set-dock.sh
gum confirm "Ready to logout for all settings to take effect?" && gnome-session-quit --logout --no-prompt


================================================
FILE: migrations/1722091912.sh
================================================
#!/bin/bash

sudo echo "Running upgrade migration..."

# Add rustc and pgsql client libs
source $OMAKUB_PATH/install/terminal/libraries.sh

# Set name and class for desktop files
source $OMAKUB_PATH/applications/About.sh
source $OMAKUB_PATH/applications/Activity.sh
source $OMAKUB_PATH/applications/Basecamp.sh
source $OMAKUB_PATH/applications/HEY.sh
source $OMAKUB_PATH/applications/Docker.sh
source $OMAKUB_PATH/applications/Neovim.sh
source $OMAKUB_PATH/applications/Omakub.sh
source $OMAKUB_PATH/applications/WhatsApp.sh


================================================
FILE: migrations/1722387070.sh
================================================
#!/bin/bash

source $OMAKUB_PATH/install/desktop/app-wl-clipboard.sh


================================================
FILE: migrations/1723756122.sh
================================================
#!/bin/bash

# Uninstall Vitals
if [ -n "$(gnome-extensions list | grep Vitals@CoreCoding.com)" ]; then
  gnome-extensions uninstall Vitals@CoreCoding.com
fi

# Install Tophat libraries
sudo apt install -y gir1.2-gtop-2.0 gir1.2-clutter-1.0

# Install TopHat
gext install tophat@fflewddur.github.io

sudo cp ~/.local/share/gnome-shell/extensions/tophat@fflewddur.github.io/schemas/org.gnome.shell.extensions.tophat.gschema.xml /usr/share/glib-2.0/schemas/
sudo glib-compile-schemas /usr/share/glib-2.0/schemas/

# Configure TopHat
gsettings set org.gnome.shell.extensions.tophat show-icons false
gsettings set org.gnome.shell.extensions.tophat show-cpu false
gsettings set org.gnome.shell.extensions.tophat show-disk false
gsettings set org.gnome.shell.extensions.tophat show-mem false
gsettings set org.gnome.shell.extensions.tophat network-usage-unit bits

# Set TopHat metrics color to match the theme
THEME_NAMES=("Tokyo Night" "Catppuccin" "Nord" "Everforest" "Gruvbox" "Kanagawa" "Rose Pine")
THEME=$(gum choose "${THEME_NAMES[@]}" "Default" --header "Choose your theme" --height 10 | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')

if [ -n "$THEME" ] && [ "$THEME" != "default" ]; then
  source $OMAKUB_PATH/themes/$THEME/tophat.sh
fi

# Logout
gum confirm "Ready to logout for all settings to take effect?" && gnome-session-quit --logout --no-prompt


================================================
FILE: migrations/1724344367.sh
================================================
#!/bin/bash

# Check if fastfetch config.jsonc is already set
if [ -f "$HOME/.config/fastfetch/config.jsonc" ]; then
  gum confirm "It appears that a fastfetch configuration is already set. Do you want to overwrite it?" && rm "$HOME/.config/fastfetch/config.jsonc"
fi

# Only attempt to set configuration if fastfetch is not already set
if [ ! -f "$HOME/.config/fastfetch/config.jsonc" ]; then
  # Use Omakub fastfetch config
  mkdir -p ~/.config/fastfetch
  cp "$OMAKUB_PATH/configs/fastfetch.jsonc" ~/.config/fastfetch/config.jsonc
fi


================================================
FILE: migrations/1738744474.sh
================================================
#!/bin/bash

# Local XCompose must change for included files to be picked up by ibus
sed -i '1i # Touched to update for Omakub defaults [5/2/2025]' ~/.XCompose
ibus restart


================================================
FILE: migrations/1741193162.sh
================================================
#!/bin/bash

# Turn off animationd scrolling
cp ~/.local/share/omakub/configs/neovim/snacks-animated-scrolling-off.lua ~/.config/nvim/lua/plugins/


================================================
FILE: migrations/1744854733.sh
================================================
#!/bin/bash

source $OMAKUB_PATH/install/desktop/set-alacritty-default.sh

nautilus -q


================================================
FILE: migrations/1745060743.sh
================================================
#!/bin/bash

cp ~/.local/share/omakub/configs/alacritty/shared.toml ~/.config/alacritty/shared.toml
cp ~/.local/share/omakub/configs/alacritty/pane.toml ~/.config/alacritty/pane.toml
cp ~/.local/share/omakub/configs/alacritty/btop.toml ~/.config/alacritty/btop.toml
cp ~/.local/share/omakub/configs/alacritty.toml ~/.config/alacritty/alacritty.toml

source $OMAKUB_PATH/applications/About.sh
source $OMAKUB_PATH/applications/Activity.sh
source $OMAKUB_PATH/applications/Neovim.sh
source $OMAKUB_PATH/applications/Docker.sh
source $OMAKUB_PATH/applications/Omakub.sh

alacritty migrate 2>/dev/null || true
alacritty migrate -c ~/.config/alacritty/pane.toml 2>/dev/null || true
alacritty migrate -c ~/.config/alacritty/btop.toml 2>/dev/null || true


================================================
FILE: migrations/1747237126.sh
================================================
#!/bin/bash

cp ~/.local/share/omakub/configs/alacritty/btop.toml ~/.config/alacritty/btop.toml

# Only attempt to set configuration if btop is not already set
if [ ! -f "$HOME/.config/btop/btop.conf" ]; then
  # Use Omakub btop config
  mkdir -p ~/.config/btop/themes
  cp ~/.local/share/omakub/configs/btop.conf ~/.config/btop/btop.conf
fi

# Set the theme for btop
THEME_NAMES=("Tokyo Night" "Catppuccin" "Nord" "Everforest" "Gruvbox" "Kanagawa" "Rose Pine")
THEME=$(gum choose "${THEME_NAMES[@]}" ">> Skip" --header "Choose your current theme" --height 10 | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')

if [ -n "$THEME" ] && [ "$THEME" != ">>-skip" ]; then
  if [ -f "$OMAKUB_PATH/themes/$THEME/btop.theme" ]; then
    cp $OMAKUB_PATH/themes/$THEME/btop.theme ~/.config/btop/themes/$THEME.theme
    sed -i "s/color_theme = \".*\"/color_theme = \"$THEME\"/g" ~/.config/btop/btop.conf
  else
    sed -i "s/color_theme = \".*\"/color_theme = \"Default\"/g" ~/.config/btop/btop.conf
  fi
fi



================================================
FILE: migrations/1747501295.sh
================================================
#!/bin/bash

gsettings set org.gnome.desktop.app-folders folder-children "['Utilities', 'Sundry', 'YaST', 'Updates', 'Xtra', 'LibreOffice', 'WebApps']"
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/Xtra/ apps "['gnome-language-selector.desktop', 'org.gnome.PowerStats.desktop', 'yelp.desktop', 'org.gnome.eog.desktop']"
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/LibreOffice/ name 'LibreOffice'
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/LibreOffice/ apps "['libreoffice-base.desktop', 'libreoffice-calc.desktop', 'libreoffice-draw.desktop', 'libreoffice-impress.desktop', 'libreoffice-math.desktop', 'libreoffice-startcenter.desktop', 'libreoffice-writer.desktop', 'libreoffice-xsltfilter.desktop']"
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/WebApps/ name 'Web Apps'
gsettings set org.gnome.desktop.app-folders.folder:/org/gnome/desktop/app-folders/folders/WebApps/ apps "['Basecamp.desktop', 'HEY.desktop']"


================================================
FILE: migrations/1747736884.sh
================================================
#!/bin/bash

# Ensure all alacritty configs have been migrated
alacritty migrate
alacritty migrate --config-file ~/.config/alacritty/btop.toml
alacritty migrate --config-file ~/.config/alacritty/pane.toml


================================================
FILE: migrations/1747737304.sh
================================================
#!/bin/bash

# Ensure btop themes folder is available
mkdir -p ~/.config/btop/themes


================================================
FILE: migrations/1753775930.sh
================================================
#!/bin/bash

# Work-around ulauncher issue on nvidia
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ command 'sh -c "pgrep -x ulauncher && { ulauncher-toggle || true; } || setsid -f ulauncher"'


================================================
FILE: migrations/1761481687.sh
================================================
#!/bin/bash

# Force upgrade to gum 0.17.0 to fix issues with older versions
cd /tmp
GUM_VERSION="0.17.0"
wget -qO gum.deb "https://github.com/charmbracelet/gum/releases/download/v${GUM_VERSION}/gum_${GUM_VERSION}_amd64.deb"
sudo apt-get install -y --allow-downgrades ./gum.deb
rm gum.deb
cd -

================================================
FILE: migrations/1770656330.sh
================================================
#!/bin/bash

# Update Spotify GPG key if the repository is present
if [ -f /etc/apt/sources.list.d/spotify.list ]; then
  echo "Updating Spotify GPG key..."
  curl -sS https://download.spotify.com/debian/pubkey_5384CE82BA52C83A.gpg | sudo gpg --dearmor --yes -o /etc/apt/trusted.gpg.d/spotify.gpg
  echo "deb [signed-by=/etc/apt/trusted.gpg.d/spotify.gpg] https://repository.spotify.com stable non-free" | sudo tee /etc/apt/sources.list.d/spotify.list
fi

================================================
FILE: themes/catppuccin/alacritty.toml
================================================
[colors.primary]
background = "#24273a"
foreground = "#cad3f5"
dim_foreground = "#8087a2"
bright_foreground = "#cad3f5"

[colors.cursor]
text = "#24273a"
cursor = "#f4dbd6"

[colors.vi_mode_cursor]
text = "#24273a"
cursor = "#b7bdf8"

[colors.search.matches]
foreground = "#24273a"
background = "#a5adcb"

[colors.search.focused_match]
foreground = "#24273a"
background = "#a6da95"

[colors.footer_bar]
foreground = "#24273a"
background = "#a5adcb"

[colors.hints.start]
foreground = "#24273a"
background = "#eed49f"

[colors.hints.end]
foreground = "#24273a"
background = "#a5adcb"

[colors.selection]
text = "#24273a"
background = "#f4dbd6"

[colors.normal]
black = "#494d64"
red = "#ed8796"
green = "#a6da95"
yellow = "#eed49f"
blue = "#8aadf4"
magenta = "#f5bde6"
cyan = "#8bd5ca"
white = "#b8c0e0"

[colors.bright]
black = "#5b6078"
red = "#ed8796"
green = "#a6da95"
yellow = "#eed49f"
blue = "#8aadf4"
magenta = "#f5bde6"
cyan = "#8bd5ca"
white = "#a5adcb"

[colors.dim]
black = "#494d64"
red = "#ed8796"
green = "#a6da95"
yellow = "#eed49f"
blue = "#8aadf4"
magenta = "#f5bde6"
cyan = "#8bd5ca"
white = "#b8c0e0"

[[colors.indexed_colors]]
index = 16
color = "#f5a97f"

[[colors.indexed_colors]]
index = 17
color = "#f4dbd6"


================================================
FILE: themes/catppuccin/btop.theme
================================================
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#24273a"

# Main text color
theme[main_fg]="#c6d0f5"

# Title color for boxes
theme[title]="#c6d0f5"

# Highlight color for keyboard shortcuts
theme[hi_fg]="#8caaee"

# Background color of selected item in processes box
theme[selected_bg]="#51576d"

# Foreground color of selected item in processes box
theme[selected_fg]="#8caaee"

# Color of inactive/disabled text
theme[inactive_fg]="#838ba7"

# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]="#f2d5cf"

# Background color of the percentage meters
theme[meter_bg]="#51576d"

# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#f2d5cf"

# CPU, Memory, Network, Proc box outline colors
theme[cpu_box]="#ca9ee6" #Mauve
theme[mem_box]="#a6d189" #Green
theme[net_box]="#ea999c" #Maroon
theme[proc_box]="#8caaee" #Blue

# Box divider line and small boxes line color
theme[div_line]="#737994"

# Temperature graph color (Green -> Yellow -> Red)
theme[temp_start]="#a6d189"
theme[temp_mid]="#e5c890"
theme[temp_end]="#e78284"

# CPU graph colors (Teal -> Lavender)
theme[cpu_start]="#81c8be"
theme[cpu_mid]="#85c1dc"
theme[cpu_end]="#babbf1"

# Mem/Disk free meter (Mauve -> Lavender -> Blue)
theme[free_start]="#ca9ee6"
theme[free_mid]="#babbf1"
theme[free_end]="#8caaee"

# Mem/Disk cached meter (Sapphire -> Lavender)
theme[cached_start]="#85c1dc"
theme[cached_mid]="#8caaee"
theme[cached_end]="#babbf1"

# Mem/Disk available meter (Peach -> Red)
theme[available_start]="#ef9f76"
theme[available_mid]="#ea999c"
theme[available_end]="#e78284"

# Mem/Disk used meter (Green -> Sky)
theme[used_start]="#a6d189"
theme[used_mid]="#81c8be"
theme[used_end]="#99d1db"

# Download graph colors (Peach -> Red)
theme[download_start]="#ef9f76"
theme[download_mid]="#ea999c"
theme[download_end]="#e78284"

# Upload graph colors (Green -> Sky)
theme[upload_start]="#a6d189"
theme[upload_mid]="#81c8be"
theme[upload_end]="#99d1db"

# Process box color gradient for threads, mem and cpu usage (Sapphire -> Mauve)
theme[process_start]="#85c1dc"
theme[process_mid]="#babbf1"
theme[process_end]="#ca9ee6"


================================================
FILE: themes/catppuccin/gnome.sh
================================================
#!/bin/bash

OMAKUB_THEME_COLOR="magenta"
OMAKUB_THEME_BACKGROUND="catppuccin/background.png"
source $OMAKUB_PATH/themes/set-gnome-theme.sh


================================================
FILE: themes/catppuccin/neovim.lua
================================================
return {
	{
		"LazyVim/LazyVim",
		opts = {
			colorscheme = "catppuccin",
		},
	},
}


================================================
FILE: themes/catppuccin/tophat.sh
================================================
#!/bin/bash

gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#e920a3"


================================================
FILE: themes/catppuccin/vscode.sh
================================================
#!/bin/bash

VSC_THEME="Catppuccin Macchiato"
VSC_EXTENSION="Catppuccin.catppuccin-vsc"
source $OMAKUB_PATH/themes/set-vscode-theme.sh


================================================
FILE: themes/catppuccin/zellij.kdl
================================================
themes {
  catppuccin {
    bg "#626880" // Surface2
    fg "#c6d0f5"
    red "#e78284"
    green "#a6d189"
    blue "#8caaee"
    yellow "#e5c890"
    magenta "#f4b8e4" // Pink
    orange "#ef9f76" // Peach
    cyan "#99d1db" // Sky
    black "#292c3c" // Mantle
    white "#c6d0f5"
  }

  catppuccin-latte {
    bg "#acb0be" // Surface2
    fg "#acb0be" // Surface2
    red "#d20f39"
    green "#40a02b"
    blue "#1e66f5"
    yellow "#df8e1d"
    magenta "#ea76cb" // Pink
    orange "#fe640b" // Peach
    cyan "#04a5e5" // Sky
    black "#dce0e8" // Crust
    white "#4c4f69" // Text
  }

  catppuccin-macchiato {
    bg "#5b6078" // Surface2
    fg "#cad3f5"
    red "#ed8796"
    green "#a6da95"
    blue "#8aadf4"
    yellow "#eed49f"
    magenta "#f5bde6" // Pink
    orange "#f5a97f" // Peach
    cyan "#91d7e3" // Sky
    black "#1e2030" // Mantle
    white "#cad3f5"
  }

  catppuccin-mocha {
    bg "#585b70" // Surface2
    fg "#cdd6f4"
    red "#f38ba8"
    green "#a6e3a1"
    blue "#89b4fa"
    yellow "#f9e2af"
    magenta "#f5c2e7" // Pink
    orange "#fab387" // Peach
    cyan "#89dceb" // Sky
    black "#181825" // Mantle
    white "#cdd6f4"
  }
}


================================================
FILE: themes/everforest/alacritty.toml
================================================
[colors]
[colors.primary]
background = '#2d353b'
foreground = '#d3c6aa'

[colors.normal]
black = '#475258'
red = '#e67e80'
green = '#a7c080'
yellow = '#dbbc7f'
blue = '#7fbbb3'
magenta = '#d699b6'
cyan = '#83c092'
white = '#d3c6aa'

[colors.bright]
black = '#475258'
red = '#e67e80'
green = '#a7c080'
yellow = '#dbbc7f'
blue = '#7fbbb3'
magenta = '#d699b6'
cyan = '#83c092'
white = '#d3c6aa'


================================================
FILE: themes/everforest/btop.theme
================================================
# All graphs and meters can be gradients
# For single color graphs leave "mid" and "end" variable empty.
# Use "start" and "end" variables for two color gradient
# Use "start", "mid" and "end" for three color gradient

# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#2d353b"

# Main text color
theme[main_fg]="#d3c6aa"

# Title color for boxes
theme[title]="#d3c6aa"

# Highlight color for keyboard shortcuts
theme[hi_fg]="#e67e80"

# Background color of selected items
theme[selected_bg]="#3d484d"

# Foreground color of selected items
theme[selected_fg]="#dbbc7f"

# Color of inactive/disabled text
theme[inactive_fg]="#2d353b"  

# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]="#d3c6aa"

# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#a7c080"

# Cpu box outline color
theme[cpu_box]="#3d484d"

# Memory/disks box outline color
theme[mem_box]="#3d484d"

# Net up/down box outline color
theme[net_box]="#3d484d"

# Processes box outline color
theme[proc_box]="#3d484d"

# Box divider line and small boxes line color
theme[div_line]="#3d484d"

# Temperature graph colors
theme[temp_start]="#a7c080"
theme[temp_mid]="#dbbc7f"
theme[temp_end]="#f85552"

# CPU graph colors
theme[cpu_start]="#a7c080"
theme[cpu_mid]="#dbbc7f"
theme[cpu_end]="#f85552"

# Mem/Disk free meter
theme[free_start]="#f85552"
theme[free_mid]="#dbbc7f"
theme[free_end]="#a7c080"

# Mem/Disk cached meter
theme[cached_start]="#7fbbb3"
theme[cached_mid]="#83c092"
theme[cached_end]="#a7c080"

# Mem/Disk available meter
theme[available_start]="#f85552"
theme[available_mid]="#dbbc7f"
theme[available_end]="#a7c080"

# Mem/Disk used meter
theme[used_start]="#a7c080"
theme[used_mid]="#dbbc7f"
theme[used_end]="#f85552"

# Download graph colors
theme[download_start]="#a7c080"
theme[download_mid]="#83c092"
theme[download_end]="#7fbbb3"

# Upload graph colors
theme[upload_start]="#dbbc7f"
theme[upload_mid]="#e69875"
theme[upload_end]="#e67e80"

# Process box color gradient for threads, mem and cpu usage
theme[process_start]="#a7c080"
theme[process_mid]="#e67e80"
theme[process_end]="#f85552"



================================================
FILE: themes/everforest/gnome.sh
================================================
#!/bin/bash

OMAKUB_THEME_COLOR="bark"
OMAKUB_THEME_BACKGROUND="everforest/background.jpg"
source $OMAKUB_PATH/themes/set-gnome-theme.sh


================================================
FILE: themes/everforest/neovim.lua
================================================
return {
	{ "neanias/everforest-nvim" },
	{
		"LazyVim/LazyVim",
		opts = {
			colorscheme = "everforest",
			background = "soft",
		},
	},
}


================================================
FILE: themes/everforest/tophat.sh
================================================
#!/bin/bash

gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#78ab50"


================================================
FILE: themes/everforest/vscode.sh
================================================
#!/bin/bash

VSC_THEME="Everforest Dark"
VSC_EXTENSION="sainnhe.everforest"
source $OMAKUB_PATH/themes/set-vscode-theme.sh


================================================
FILE: themes/everforest/zellij.kdl
================================================
themes {
    everforest {
        bg "#2b3339"
        fg "#d3c6aa"
        black "#4b565c"
        red "#e67e80"
        green "#a7c080"
        yellow "#dbbc7f"
        blue "#7fbbb3"
        magenta "#d699b6"
        cyan "#83c092"
        white "#d3c6aa"
        orange "#FF9E64"
    }
}


================================================
FILE: themes/gruvbox/alacritty.toml
================================================
[colors]
[colors.primary]
background = "0x282828"
foreground = "0xd4be98"

[colors.normal]
black = "0x3c3836"
red = "0xea6962"
green = "0xa9b665"
yellow = "0xd8a657"
blue = "0x7daea3"
magenta = "0xd3869b"
cyan = "0x89b482"
white = "0xd4be98"

[colors.bright]
black = "0x3c3836"
red = "0xea6962"
green = "0xa9b665"
yellow = "0xd8a657"
blue = "0x7daea3"
magenta = "0xd3869b"
cyan = "0x89b482"
white = "0xd4be98"


================================================
FILE: themes/gruvbox/btop.theme
================================================
#Bashtop gruvbox (https://github.com/morhetz/gruvbox) theme
#by BachoSeven

# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255"
# example for white: "#FFFFFF", "#ff" or "255 255 255".

# All graphs and meters can be gradients
# For single color graphs leave "mid" and "end" variable empty.
# Use "start" and "end" variables for two color gradient
# Use "start", "mid" and "end" for three color gradient

# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#282828"

# Main text color
theme[main_fg]="#a89984"

# Title color for boxes
theme[title]="#ebdbb2"

# Highlight color for keyboard shortcuts
theme[hi_fg]="#d79921"

# Background color of selected items
theme[selected_bg]="#282828"

# Foreground color of selected items
theme[selected_fg]="#fabd2f"

# Color of inactive/disabled text
theme[inactive_fg]="#282828"

# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]="#585858"

# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#98971a"

# Cpu box outline color
theme[cpu_box]="#a89984"

# Memory/disks box outline color
theme[mem_box]="#a89984"

# Net up/down box outline color
theme[net_box]="#a89984"

# Processes box outline color
theme[proc_box]="#a89984"

# Box divider line and small boxes line color
theme[div_line]="#a89984"

# Temperature graph colors
theme[temp_start]="#458588"
theme[temp_mid]="#d3869b"
theme[temp_end]="#fb4394"

# CPU graph colors
theme[cpu_start]="#b8bb26"
theme[cpu_mid]="#d79921"
theme[cpu_end]="#fb4934"

# Mem/Disk free meter
theme[free_start]="#4e5900"
theme[free_mid]=""
theme[free_end]="#98971a"

# Mem/Disk cached meter
theme[cached_start]="#458588"
theme[cached_mid]=""
theme[cached_end]="#83a598"

# Mem/Disk available meter
theme[available_start]="#d79921"
theme[available_mid]=""
theme[available_end]="#fabd2f"

# Mem/Disk used meter
theme[used_start]="#cc241d"
theme[used_mid]=""
theme[used_end]="#fb4934"

# Download graph colors
theme[download_start]="#3d4070"
theme[download_mid]="#6c71c4"
theme[download_end]="#a3a8f7"

# Upload graph colors
theme[upload_start]="#701c45"
theme[upload_mid]="#b16286"
theme[upload_end]="#d3869b"


================================================
FILE: themes/gruvbox/gnome.sh
================================================
#!/bin/bash

OMAKUB_THEME_COLOR="sage"
OMAKUB_THEME_BACKGROUND="gruvbox/background.jpg"
source $OMAKUB_PATH/themes/set-gnome-theme.sh


================================================
FILE: themes/gruvbox/neovim.lua
================================================
return {
	{ "ellisonleao/gruvbox.nvim" },
	{
		"LazyVim/LazyVim",
		opts = {
			colorscheme = "gruvbox",
		},
	},
}


================================================
FILE: themes/gruvbox/tophat.sh
================================================
#!/bin/bash

gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#78ab50"


================================================
FILE: themes/gruvbox/vscode.sh
================================================
#!/bin/bash

VSC_THEME="Gruvbox Dark Medium"
VSC_EXTENSION="jdinhlife.gruvbox"
source $OMAKUB_PATH/themes/set-vscode-theme.sh


================================================
FILE: themes/gruvbox/zellij.kdl
================================================
themes {
    gruvbox {
        fg "#d5c4a1"
        bg "#282828"
        black "#3c3836"
        red "#cc241d"
        green "#98971a"
        yellow "#d79921"
        blue "#3c8588"
        magenta "#b16286"
        cyan "#689d6a"
        white "#fbf1c7"
        orange "#d65d0e"
    }
}


================================================
FILE: themes/kanagawa/alacritty.toml
================================================
[colors]
[colors.primary]
background = '#1f1f28'
foreground = '#dcd7ba'

[colors.normal]
black   = '#090618'
red     = '#c34043'
green   = '#76946a'
yellow  = '#c0a36e'
blue    = '#7e9cd8'
magenta = '#957fb8'
cyan    = '#6a9589'
white   = '#c8c093'

[colors.bright]
black   = '#727169'
red     = '#e82424'
green   = '#98bb6c'
yellow  = '#e6c384'
blue    = '#7fb4ca'
magenta = '#938aa9'
cyan    = '#7aa89f'
white   = '#dcd7ba'

[colors.selection]
background = '#2d4f67'
foreground = '#c8c093'

[[colors.indexed_colors]]
index = 16
color = '#ffa066'

[[colors.indexed_colors]]
index = 17
color = '#ff5d62'


================================================
FILE: themes/kanagawa/btop.theme
================================================
# Bashtop Kanagawa-wave (https://github.com/rebelot/kanagawa.nvim) theme
# By: philikarus

# Main bg
theme[main_bg]="#1f1f28"

# Main text color
theme[main_fg]="#dcd7ba"

# Title color for boxes
theme[title]="#dcd7ba"

# Highlight color for keyboard shortcuts
theme[hi_fg]="#C34043"

# Background color of selected item in processes box
theme[selected_bg]="#223249"

# Foreground color of selected item in processes box
theme[selected_fg]="#dca561"

# Color of inactive/disabled text
theme[inactive_fg]="#727169"

# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#7aa89f"

# Cpu box outline color
theme[cpu_box]="#727169"

# Memory/disks box outline color
theme[mem_box]="#727169"

# Net up/down box outline color
theme[net_box]="#727169"

# Processes box outline color
theme[proc_box]="#727169"

# Box divider line and small boxes line color
theme[div_line]="#727169"

# Temperature graph colors
theme[temp_start]="#98BB6C"
theme[temp_mid]="#DCA561"
theme[temp_end]="#E82424"

# CPU graph colors
theme[cpu_start]="#98BB6C"
theme[cpu_mid]="#DCA561"
theme[cpu_end]="#E82424"

# Mem/Disk free meter
theme[free_start]="#E82424"
theme[free_mid]="#C34043"
theme[free_end]="#FF5D62"

# Mem/Disk cached meter
theme[cached_start]="#C0A36E"
theme[cached_mid]="#DCA561"
theme[cached_end]="#FF9E3B"

# Mem/Disk available meter
theme[available_start]="#938AA9"
theme[available_mid]="#957FBB"
theme[available_end]="#9CABCA"

# Mem/Disk used meter
theme[used_start]="#658594"
theme[used_mid]="#7E9CDB"
theme[used_end]="#7FB4CA"

# Download graph colors
theme[download_start]="#7E9CDB"
theme[download_mid]="#938AA9"
theme[download_end]="#957FBB"

# Upload graph colors
theme[upload_start]="#DCA561"
theme[upload_mid]="#E6C384"
theme[upload_end]="#E82424"

# Process box color gradient for threads, mem and cpu usage
theme[process_start]="#98BB6C"
theme[process_mid]="#DCA561"
theme[process_end]="#C34043"


================================================
FILE: themes/kanagawa/gnome.sh
================================================
#!/bin/bash

OMAKUB_THEME_COLOR="purple"
OMAKUB_THEME_BACKGROUND="kanagawa/background.jpg"
source $OMAKUB_PATH/themes/set-gnome-theme.sh


================================================
FILE: themes/kanagawa/neovim.lua
================================================
return {
	{ "rebelot/kanagawa.nvim" },
	{
		"LazyVim/LazyVim",
		opts = {
			colorscheme = "kanagawa",
		},
	},
}


================================================
FILE: themes/kanagawa/tophat.sh
================================================
#!/bin/bash

gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#924d8b"


================================================
FILE: themes/kanagawa/vscode.sh
================================================
#!/bin/bash

VSC_THEME="Kanagawa"
VSC_EXTENSION="qufiwefefwoyn.kanagawa"
source $OMAKUB_PATH/themes/set-vscode-theme.sh


================================================
FILE: themes/kanagawa/zellij.kdl
================================================
themes {
    kanagawa {
        fg "#DCD7BA"
        bg "#1F1F28"
        red "#C34043"
        green "#76946A"
        yellow "#FF9E3B"
        blue "#7E9CD8"
        magenta "#957FB8"
        orange "#FFA066"
        cyan "#7FB4CA"
        black "#16161D"
        white "#DCD7BA"
    }
}


================================================
FILE: themes/matte-black/alacritty.toml
================================================
# ────────────────────────────────────────────────────────────
# Omarchy Matte Black Theme for Alacritty
# By tahayvr
# https://github.com/tahayvr
# ────────────────────────────────────────────────────────────

[window]
# window padding {px}
padding.x = 12
padding.y = 12

[font]
size = 12.0



[colors]
[colors.primary]
background = "#121212"
foreground = "#bebebe"
dim_foreground = "#8a8a8d"

[colors.cursor]
text = "#121212"
cursor = "#eaeaea"

[colors.vi_mode_cursor]
text = "#121212"
cursor = "#eaeaea"

[colors.selection]
text = "CellForeground"
background = "#333333"

[colors.normal]
black = "#333333"
red = "#D35F5F"
green = "#FFC107"
yellow = "#b91c1c"
blue = "#e68e0d"
magenta = "#D35F5F"
cyan = "#bebebe"
white = "#bebebe"

[colors.bright]
black = "#8a8a8d"
red = "#B91C1C"
green = "#FFC107"
yellow = "#b90a0a"
blue = "#f59e0b"
magenta = "#B91C1C"
cyan = "#eaeaea"
white = "#ffffff"

================================================
FILE: themes/matte-black/btop.theme
================================================
# ────────────────────────────────────────────────────────────
# Bashtop theme - Omarchy Matte Black
# by tahayvr
# https://github.com/tahayvr
# ────────────────────────────────────────────────────────────

# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255"
# example for white: "#ffffff", "#ff" or "255 255 255".

# All graphs and meters can be gradients
# For single color graphs leave "mid" and "end" variable empty.
# Use "start" and "end" variables for two color gradient
# Use "start", "mid" and "end" for three color gradient

# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]=""

# Main text color
theme[main_fg]="#EAEAEA"

# Title color for boxes
theme[title]="#8a8a8d"

# Highlight color for keyboard shortcuts
theme[hi_fg]="#f59e0b"

# Background color of selected item in processes box
theme[selected_bg]="#f59e0b"

# Foreground color of selected item in processes box
theme[selected_fg]="#EAEAEA"

# Color of inactive/disabled text
theme[inactive_fg]="#333333"

# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#8a8a8d"

# Cpu box outline color
theme[cpu_box]="#8a8a8d"

# Memory/disks box outline color
theme[mem_box]="#8a8a8d"

# Net up/down box outline color
theme[net_box]="#8a8a8d"

# Processes box outline color
theme[proc_box]="#8a8a8d"

# Box divider line and small boxes line color
theme[div_line]="#8a8a8d"

# Temperature graph colors
theme[temp_start]="#8a8a8d"
theme[temp_mid]="#f59e0b"
theme[temp_end]="#b91c1c"

# CPU graph colors
theme[cpu_start]="#8a8a8d"
theme[cpu_mid]="#f59e0b"
theme[cpu_end]="#b91c1c"

# Mem/Disk free meter
theme[free_start]="#8a8a8d"
theme[free_mid]="#f59e0b"
theme[free_end]="#b91c1c"

# Mem/Disk cached meter
theme[cached_start]="#8a8a8d"
theme[cached_mid]="#f59e0b"
theme[cached_end]="#b91c1c"

# Mem/Disk available meter
theme[available_start]="#8a8a8d"
theme[available_mid]="#f59e0b"
theme[available_end]="#b91c1c"

# Mem/Disk used meter
theme[used_start]="#8a8a8d"
theme[used_mid]="#f59e0b"
theme[used_end]="#b91c1c"

# Download graph colors
theme[download_start]="#8a8a8d"
theme[download_mid]="#f59e0b"
theme[download_end]="#b91c1c"

# Upload graph colors
theme[upload_start]="#8a8a8d"
theme[upload_mid]="#f59e0b"
theme[upload_end]="#b91c1c"


================================================
FILE: themes/matte-black/gnome.sh
================================================
#!/bin/bash

OMAKUB_THEME_COLOR="orange"
OMAKUB_THEME_BACKGROUND="matte-black/background.jpg"
source $OMAKUB_PATH/themes/set-gnome-theme.sh


================================================
FILE: themes/matte-black/neovim.lua
================================================
return {
  { "tahayvr/matteblack.nvim", lazy = false, priority = 1000 },
  {
		"LazyVim/LazyVim",
		opts = {
			colorscheme = "matteblack",
		},
	},
}

================================================
FILE: themes/matte-black/tophat.sh
================================================
#!/bin/bash

gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#FFFFFF"


================================================
FILE: themes/matte-black/vscode.sh
================================================
#!/bin/bash

VSC_THEME="Matte Black Theme"
VSC_EXTENSION="CleanThemes.matte-black-theme"
source $OMAKUB_PATH/themes/set-vscode-theme.sh


================================================
FILE: themes/matte-black/zellij.kdl
================================================
themes {
    matte-black {
        fg "#bebebe"
        bg "#121212"
        red "#D35F5F"
        green "#FFC107"
        yellow "#b91c1c"
        blue "#e68e0d"
        orange "#FFA066"
        magenta "#D35F5F"
        cyan "#bebebe"
        black "#333333"
        white "#bebebe"
    }
}


================================================
FILE: themes/nord/alacritty.toml
================================================
[colors]
[colors.primary]
background = "#2e3440"
foreground = "#d8dee9"
dim_foreground = "#a5abb6"

[colors.cursor]
text = "#2e3440"
cursor = "#d8dee9"

[colors.vi_mode_cursor]
text = "#2e3440"
cursor = "#d8dee9"

[colors.selection]
text = "CellForeground"
background = "#4c566a"

[colors.normal]
black = "#3b4252"
red = "#bf616a"
green = "#a3be8c"
yellow = "#ebcb8b"
blue = "#81a1c1"
magenta = "#b48ead"
cyan = "#88c0d0"
white = "#e5e9f0"

[colors.bright]
black = "#4c566a"
red = "#bf616a"
green = "#a3be8c"
yellow = "#ebcb8b"
blue = "#81a1c1"
magenta = "#b48ead"
cyan = "#8fbcbb"
white = "#eceff4"

[colors.dim]
black = "#373e4d"
red = "#94545d"
green = "#809575"
yellow = "#b29e75"
blue = "#68809a"
magenta = "#8c738c"
cyan = "#6d96a5"
white = "#aeb3bb"


================================================
FILE: themes/nord/btop.theme
================================================
#Bashtop theme with nord palette (https://www.nordtheme.com)
#by Justin Zobel <justin.zobel@gmail.com>

# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255"
# example for white: "#ffffff", "#ff" or "255 255 255".

# All graphs and meters can be gradients
# For single color graphs leave "mid" and "end" variable empty.
# Use "start" and "end" variables for two color gradient
# Use "start", "mid" and "end" for three color gradient

# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#2E3440"

# Main text color
theme[main_fg]="#D8DEE9"

# Title color for boxes
theme[title]="#8FBCBB"

# Highlight color for keyboard shortcuts
theme[hi_fg]="#5E81AC"

# Background color of selected item in processes box
theme[selected_bg]="#4C566A"

# Foreground color of selected item in processes box
theme[selected_fg]="#ECEFF4"

# Color of inactive/disabled text
theme[inactive_fg]="#4C566A"

# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#5E81AC"

# Cpu box outline color
theme[cpu_box]="#4C566A"

# Memory/disks box outline color
theme[mem_box]="#4C566A"

# Net up/down box outline color
theme[net_box]="#4C566A"

# Processes box outline color
theme[proc_box]="#4C566A"

# Box divider line and small boxes line color
theme[div_line]="#4C566A"

# Temperature graph colors
theme[temp_start]="#81A1C1"
theme[temp_mid]="#88C0D0"
theme[temp_end]="#ECEFF4"

# CPU graph colors
theme[cpu_start]="#81A1C1"
theme[cpu_mid]="#88C0D0"
theme[cpu_end]="#ECEFF4"

# Mem/Disk free meter
theme[free_start]="#81A1C1"
theme[free_mid]="#88C0D0"
theme[free_end]="#ECEFF4"

# Mem/Disk cached meter
theme[cached_start]="#81A1C1"
theme[cached_mid]="#88C0D0"
theme[cached_end]="#ECEFF4"

# Mem/Disk available meter
theme[available_start]="#81A1C1"
theme[available_mid]="#88C0D0"
theme[available_end]="#ECEFF4"

# Mem/Disk used meter
theme[used_start]="#81A1C1"
theme[used_mid]="#88C0D0"
theme[used_end]="#ECEFF4"

# Download graph colors
theme[download_start]="#81A1C1"
theme[download_mid]="#88C0D0"
theme[download_end]="#ECEFF4"

# Upload graph colors
theme[upload_start]="#81A1C1"
theme[upload_mid]="#88C0D0"
theme[upload_end]="#ECEFF4"


================================================
FILE: themes/nord/gnome.sh
================================================
#!/bin/bash

OMAKUB_THEME_COLOR="blue"
OMAKUB_THEME_BACKGROUND="nord/background.png"
source $OMAKUB_PATH/themes/set-gnome-theme.sh


================================================
FILE: themes/nord/neovim.lua
================================================
return {
	{ "EdenEast/nightfox.nvim" },
	{
		"LazyVim/LazyVim",
		opts = {
			colorscheme = "nordfox",
		},
	},
}


================================================
FILE: themes/nord/tophat.sh
================================================
#!/bin/bash

gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#208fe9"


================================================
FILE: themes/nord/vscode.sh
================================================
#!/bin/bash

VSC_THEME="Nord"
VSC_EXTENSION="arcticicestudio.nord-visual-studio-code"
source $OMAKUB_PATH/themes/set-vscode-theme.sh


================================================
FILE: themes/nord/zellij.kdl
================================================
themes {
    nord {
        fg "#D8DEE9"
        bg "#2E3440"
        black "#3B4252"
        red "#BF616A"
        green "#A3BE8C"
        yellow "#EBCB8B"
        blue "#81A1C1"
        magenta "#B48EAD"
        cyan "#88C0D0"
        white "#E5E9F0"
        orange "#D08770"
    }
}


================================================
FILE: themes/osaka-jade/alacritty.toml
================================================
[window]
# window padding {px}
padding.x = 12
padding.y = 12

[font]
size = 12.0

[colors]
[colors.primary]
background = '#111c18'
foreground = '#C1C497'
dim_foreground = '#8087a2'

[colors.cursor]
text = '#000000'
cursor = '#D7C995'

[colors.vi_mode_cursor]
text = '#000000'
cursor = '#D7C995'

[colors.selection]
text = 'CellForeground'
background = '#23372B'

[colors.normal]
black = '#23372B'
red = '#FF5345'
green = '#549e6a'
yellow = '#459451'
blue = '#509475'
magenta = '#D2689C'
cyan = '#2DD5B7'
white = '#F6F5DD'

[colors.bright]
black = '#53685B'
red = '#db9f9c'
green = '#63b07a'
yellow = '#E5C736'
blue = '#ACD4CF'
magenta = '#75bbb3'
cyan = '#8CD3CB'
white = '#9eebb3'

================================================
FILE: themes/osaka-jade/btop.theme
================================================
# Main background
theme[main_bg]="#111c18"

# Main text color
theme[main_fg]="#F7E8B2"

# Title color for boxes
theme[title]="#D6D5BC"

# Highlight color for keyboard shortcuts
theme[hi_fg]="#E67D64"

# Background color of selected items
theme[selected_bg]="#364538"

# Foreground color of selected items
theme[selected_fg]="#DEB266"

# Color of inactive/disabled text
theme[inactive_fg]="#32473B"  

# Color of text appearing on top of graphs
theme[graph_text]="#E6D8BA"

# Misc colors for processes box
theme[proc_misc]="#E6D8BA"

# Cpu box outline color
theme[cpu_box]="#81B8A8"

# Memory/disks box outline color
theme[mem_box]="#81B8A8"

# Net up/down box outline color
theme[net_box]="#81B8A8"

# Processes box outline color
theme[proc_box]="#81B8A8"

# Box divider line and small boxes line color
theme[div_line]="#81B8A8"

# Temperature graph colors
theme[temp_start]="#BFD99A"
theme[temp_mid]="#E1B55E"
theme[temp_end]="#DBB05C"

# CPU graph colors
theme[cpu_start]="#5F8C86"
theme[cpu_mid]="#629C89"
theme[cpu_end]="#76AD98"

# Mem/Disk free meter
theme[free_start]="#5F8C86"
theme[free_mid]="#629C89"
theme[free_end]="#76AD98"

# Mem/Disk cached meter
theme[cached_start]="#5F8C86"
theme[cached_mid]="#629C89"
theme[cached_end]="#76AD98"

# Mem/Disk available meter
theme[available_start]="#5F8C86"
theme[available_mid]="#629C89"
theme[available_end]="#76AD98"

# Mem/Disk used meter
theme[used_start]="#5F8C86"
theme[used_mid]="#629C89"
theme[used_end]="#76AD98"

# Download graph colors
theme[download_start]="#75BBB3"
theme[download_mid]="#61949A"
theme[download_end]="#215866"

# Upload graph colors
theme[upload_start]="#215866"
theme[upload_mid]="#91C080"
theme[upload_end]="#549E6A"

# Process box color gradient for threads, mem and cpu usage
theme[process_start]="#72CFA3"
theme[process_mid]="#D0D494"
theme[process_end]="#DB9F9C"

================================================
FILE: themes/osaka-jade/gnome.sh
================================================
#!/bin/bash

OMAKUB_THEME_COLOR="green"
OMAKUB_THEME_BACKGROUND="osaka-jade/background.jpg"
source $OMAKUB_PATH/themes/set-gnome-theme.sh

================================================
FILE: themes/osaka-jade/neovim.lua
================================================
return {
  {
    "ribru17/bamboo.nvim",
    lazy = false,
    priority = 1000,
    config = function()
      require("bamboo").setup({})
      require("bamboo").load()
    end,
  },
  {
    "LazyVim/LazyVim",
    opts = {
      colorscheme = "bamboo",
    },
  },
}

================================================
FILE: themes/osaka-jade/tophat.sh
================================================
#!/bin/bash

gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#214237"

================================================
FILE: themes/osaka-jade/vscode.sh
================================================
#!/bin/bash

VSC_THEME="Ocean Green: Dark"
VSC_EXTENSION="jovejonovski.ocean-green"
source $OMAKUB_PATH/themes/set-vscode-theme.sh

================================================
FILE: themes/osaka-jade/zellij.kdl
================================================
themes {
    osaka-jade {
        fg "#C1C497"
        bg "#111c18"
        red "#FF5345"
        green "#549e6a"
        yellow "#459451"
        blue "#509475"
        magenta "#D2689C"
        cyan "#2DD5B7"
        black "#23372B"
        orange "#E5C736"
        white "#F6F5DD"
    }
}

================================================
FILE: themes/ristretto/alacritty.toml
================================================
[colors]

[colors.normal]
black = "#2c2525"
red = "#fd6883"
green = "#adda78"
yellow = "#f9cc6c"
blue = "#f38d70"
magenta = "#a8a9eb"
cyan = "#85dacc"
white = "#e6d9db"

[colors.bright]
black   = "#463a3a"
red     = "#ff8297"
green   = "#c8e292"
yellow  = "#fcd675"
blue    = "#f8a788"
magenta = "#bebffd"
cyan    = "#9bf1e1"
white   = "#f1e5e7"

[colors.cursor]
cursor = '#c3b7b8'
text = '#c3b7b8'

[colors.primary]
background = '#2c2525'
foreground = '#e6d9db'

[colors.selection]
background = '#403e41'
text = '#e6d9db'


================================================
FILE: themes/ristretto/btop.theme
================================================
#Btop monokai pro ristretto theme
#Reconfigured from monokai theme

# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#2c2421"

# Main text color
theme[main_fg]="#e6d9db"

# Title color for boxes
theme[title]="#e6d9db"

# Higlight color for keyboard shortcuts
theme[hi_fg]="#fd6883"

# Background color of selected item in processes box
theme[selected_bg]="#3d2f2a"

# Foreground color of selected item in processes box
theme[selected_fg]="#e6d9db"

# Color of inactive/disabled text
theme[inactive_fg]="#72696a"

# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#adda78"

# Cpu box outline color
theme[cpu_box]="#5b4a45"

# Memory/disks box outline color
theme[mem_box]="#5b4a45"

# Net up/down box outline color
theme[net_box]="#5b4a45"

# Processes box outline color
theme[proc_box]="#5b4a45"

# Box divider line and small boxes line color
theme[div_line]="#72696a"

# Temperature graph colors
theme[temp_start]="#a8a9eb"
theme[temp_mid]="#f38d70"
theme[temp_end]="#fd6a85"

# CPU graph colors
theme[cpu_start]="#adda78"
theme[cpu_mid]="#f9cc6c"
theme[cpu_end]="#fd6883"

# Mem/Disk free meter
theme[free_start]="#5b4a45"
theme[free_mid]="#adda78"
theme[free_end]="#c5e2a3"

# Mem/Disk cached meter
theme[cached_start]="#5b4a45"
theme[cached_mid]="#85dacc"
theme[cached_end]="#b3e8dd"

# Mem/Disk available meter
theme[available_start]="#5b4a45"
theme[available_mid]="#f9cc6c"
theme[available_end]="#fce2a3"

# Mem/Disk used meter
theme[used_start]="#5b4a45"
theme[used_mid]="#fd6a85"
theme[used_end]="#feb5c7"

# Download graph colors
theme[download_start]="#3d2f2a"
theme[download_mid]="#a8a9eb"
theme[download_end]="#c5c6f0"

# Upload graph colors
theme[upload_start]="#3d2f2a"
theme[upload_mid]="#fd6a85"
theme[upload_end]="#feb5c7"



================================================
FILE: themes/ristretto/gnome.sh
================================================
#!/bin/bash

OMAKUB_THEME_COLOR="grey"
OMAKUB_THEME_BACKGROUND="ristretto/background.jpg"
source $OMAKUB_PATH/themes/set-gnome-theme.sh


================================================
FILE: themes/ristretto/neovim.lua
================================================
return {
	{
		"gthelding/monokai-pro.nvim",
		config = function()
			require("monokai-pro").setup({
				filter = "ristretto",
				override = function()
					return {
						NonText = { fg = "#948a8b" },
					}
				end,
			})
			vim.cmd([[colorscheme monokai-pro]])
		end,
	},
	{
		"LazyVim/LazyVim",
		opts = {
			colorscheme = "monokai-pro",
		},
	},
}


================================================
FILE: themes/ristretto/tophat.sh
================================================
#!/bin/bash

gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#2c2525"


================================================
FILE: themes/ristretto/vscode.sh
================================================
#!/bin/bash

VSC_THEME="Monokai Pro (Filter Ristretto)"
VSC_EXTENSION="monokai.theme-monokai-pro-vscode"
source $OMAKUB_PATH/themes/set-vscode-theme.sh


================================================
FILE: themes/ristretto/zellij.kdl
================================================
themes {
    ristretto {
        fg "#e6d9db"
        bg "#2c2525"
        red "#fd6883"
        green "#adda78"
        yellow "#f9cc6c"
        blue "#f38d70"
        orange "#FFA066"
        magenta "#a8a9eb"
        cyan "#85dacc"
        black "#2c2525"
        white "#e6d9db"
    }
}


================================================
FILE: themes/rose-pine/alacritty.toml
================================================
[colors.primary]
foreground = "#575279"
background = "#faf4ed"
dim_foreground = "#797593"
bright_foreground = "#575279"

[colors.cursor]
text = "#575279"
cursor = "#cecacd"

[colors.vi_mode_cursor]
text = "#575279"
cursor = "#cecacd"

[colors.search.matches]
foreground = "#797593"
background = "#f2e9e1"

[colors.search.focused_match]
foreground = "#faf4ed"
background = "#d7827e"

[colors.hints.start]
foreground = "#797593"
background = "#fffaf3"

[colors.hints.end]
foreground = "#9893a5"
background = "#fffaf3"

[colors.line_indicator]
foreground = "None"
background = "None"

[colors.footer_bar]
foreground = "#575279"
background = "#fffaf3"

[colors.selection]
text = "#575279"
background = "#dfdad9"

[colors.normal]
black = "#f2e9e1"
red = "#b4637a"
green = "#286983"
yellow = "#ea9d34"
blue = "#56949f"
magenta = "#907aa9"
cyan = "#d7827e"
white = "#575279"

[colors.bright]
black = "#9893a5"
red = "#b4637a"
green = "#286983"
yellow = "#ea9d34"
blue = "#56949f"
magenta = "#907aa9"
cyan = "#d7827e"
white = "#575279"

[colors.dim]
black = "#9893a5"
red = "#b4637a"
green = "#286983"
yellow = "#ea9d34"
blue = "#56949f"
magenta = "#907aa9"
cyan = "#d7827e"
white = "#575279"



================================================
FILE: themes/rose-pine/btop.theme
================================================
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#faf4ed"
# Base

# Main text color
theme[main_fg]="#575279"
# Text

# Title color for boxes
theme[title]="#908caa"
# Subtle

# Highlight color for keyboard shortcuts
theme[hi_fg]="#e0def4"
# Text

# Background color of selected item in processes box
theme[selected_bg]="#524f67"
# HL High

# Foreground color of selected item in processes box
theme[selected_fg]="#f6c177"
# Gold

# Color of inactive/disabled text
theme[inactive_fg]="#403d52"
# HL Med

# Color of text appearing on top of graphs, i.e uptime and current network graph scaling
theme[graph_text]="#9ccfd8"
# Foam

# Background color of the percentage meters
theme[meter_bg]="#9ccfd8"
# Foam

# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#c4a7e7"
# Iris

# Cpu box outline color
theme[cpu_box]="#ebbcba"
# Rose

# Memory/disks box outline color
theme[mem_box]="#31748f"
# Pine

# Net up/down box outline color
theme[net_box]="#c4a7e7"
# Iris

# Processes box outline color
theme[proc_box]="#eb6f92"
# Love

# Box divider line and small boxes line color
theme[div_line]="#6e6a86"
# Muted

# Temperature graph colors
theme[temp_start]="#ebbcba"
# Rose
theme[temp_mid]="#f6c177"
# Gold
theme[temp_end]="#eb6f92"
# Love

# CPU graph colors
theme[cpu_start]="#f6c177"
# Gold
theme[cpu_mid]="#ebbcba"
# Rose
theme[cpu_end]="#eb6f92"
# Love

# Mem/Disk free meter
# all love
theme[free_start]="#eb6f92"
theme[free_mid]="#eb6f92"
theme[free_end]="#eb6f92"

# Mem/Disk cached meter
# all iris
theme[cached_start]="#c4a7e7"
theme[cached_mid]="#c4a7e7"
theme[cached_end]="#c4a7e7"

# Mem/Disk available meter
# all pine
theme[available_start]="#31748f"
theme[available_mid]="#31748f"
theme[available_end]="#31748f"

# Mem/Disk used meter
# all rose
theme[used_start]="#ebbcba"
theme[used_mid]="#ebbcba"
theme[used_end]="#ebbcba"

# Download graph colors
# Pine for start, foam for the rest
theme[download_start]="#31748f"
theme[download_mid]="#9ccfd8"
theme[download_end]="#9ccfd8"

# Upload graph colors
theme[upload_start]="#ebbcba"
# Rose for start
theme[upload_mid]="#eb6f92"
# Love for mid and end
theme[upload_end]="#eb6f92"

# Process box color gradient for threads, mem and cpu usage
theme[process_start]="#31748f"
# Pine
theme[process_mid]="#9ccfd8"
# Foam for mid and end
theme[process_end]="#9ccfd8"


================================================
FILE: themes/rose-pine/gnome.sh
================================================
#!/bin/bash

OMAKUB_THEME_COLOR="red"
OMAKUB_THEME_BACKGROUND="rose-pine/background.jpg"
source $OMAKUB_PATH/themes/set-gnome-theme.sh
gsettings set org.gnome.desktop.interface color-scheme 'prefer-light'


================================================
FILE: themes/rose-pine/neovim.lua
================================================
return {
	{ "rose-pine/neovim", name = "rose-pine" },
	{
		"LazyVim/LazyVim",
		opts = {
			colorscheme = "rose-pine-dawn",
		},
	},
}


================================================
FILE: themes/rose-pine/tophat.sh
================================================
#!/bin/bash

gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#e92020"


================================================
FILE: themes/rose-pine/vscode.sh
================================================
#!/bin/bash

VSC_THEME="Rosé Pine Dawn"
VSC_EXTENSION="mvllow.rose-pine"
source $OMAKUB_PATH/themes/set-vscode-theme.sh


================================================
FILE: themes/rose-pine/zellij.kdl
================================================
themes {
	rose-pine {
		bg "#faf4ed"
		fg "#575279"
		red "#b4637a"
		green "#286983"
		blue "#56949f"
		yellow "#ea9d34"
		magenta "#907aa9"
		orange "#fe640b"
		cyan "#d7827e"
		black "#f2e9e1"
		white "#575279"
	}
}


================================================
FILE: themes/set-gnome-theme.sh
================================================
#!/bin/bash

gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
gsettings set org.gnome.desktop.interface cursor-theme 'Yaru'
gsettings set org.gnome.desktop.interface gtk-theme "Yaru-$OMAKUB_THEME_COLOR-dark"
gsettings set org.gnome.desktop.interface icon-theme "Yaru-$OMAKUB_THEME_COLOR"
gsettings set org.gnome.desktop.interface accent-color "$OMAKUB_THEME_COLOR" 2>/dev/null || true

BACKGROUND_ORG_PATH="$HOME/.local/share/omakub/themes/$OMAKUB_THEME_BACKGROUND"
BACKGROUND_DEST_DIR="$HOME/.local/share/backgrounds"
BACKGROUND_DEST_PATH="$BACKGROUND_DEST_DIR/$(echo $OMAKUB_THEME_BACKGROUND | tr '/' '-')"

if [ ! -d "$BACKGROUND_DEST_DIR" ]; then mkdir -p "$BACKGROUND_DEST_DIR"; fi

[ ! -f $BACKGROUND_DEST_PATH ] && cp $BACKGROUND_ORG_PATH $BACKGROUND_DEST_PATH
gsettings set org.gnome.desktop.background picture-uri $BACKGROUND_DEST_PATH
gsettings set org.gnome.desktop.background picture-uri-dark $BACKGROUND_DEST_PATH
gsettings set org.gnome.desktop.background picture-options 'zoom'


================================================
FILE: themes/set-vscode-theme.sh
================================================
#!/bin/bash

if command -v code &>/dev/null; then
  code --install-extension $VSC_EXTENSION >/dev/null
  sed -i "s/\"workbench.colorTheme\": \".*\"/\"workbench.colorTheme\": \"$VSC_THEME\"/g" ~/.config/Code/User/settings.json
fi


================================================
FILE: themes/tokyo-night/alacritty.toml
================================================
[colors]
[colors.primary]
background = '#1a1b26'
foreground = '#a9b1d6'

# Normal colors
[colors.normal]
black = '#32344a'
red = '#f7768e'
green = '#9ece6a'
yellow = '#e0af68'
blue = '#7aa2f7'
magenta = '#ad8ee6'
cyan = '#449dab'
white = '#787c99'

# Bright colors
[colors.bright]
black = '#444b6a'
red = '#ff7a93'
green = '#b9f27c'
yellow = '#ff9e64'
blue = '#7da6ff'
magenta = '#bb9af7'
cyan = '#0db9d7'
white = '#acb0d0'

[colors.selection]
background = '#7aa2f7'


================================================
FILE: themes/tokyo-night/btop.theme
================================================
# Theme: tokyo-night
# By: Pascal Jaeger

# Main bg
theme[main_bg]="#1a1b26"

# Main text color
theme[main_fg]="#cfc9c2"

# Title color for boxes
theme[title]="#cfc9c2"

# Highlight color for keyboard shortcuts
theme[hi_fg]="#7dcfff"

# Background color of selected item in processes box
theme[selected_bg]="#414868"

# Foreground color of selected item in processes box
theme[selected_fg]="#cfc9c2"

# Color of inactive/disabled text
theme[inactive_fg]="#565f89"

# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#7dcfff"

# Cpu box outline color
theme[cpu_box]="#565f89"

# Memory/disks box outline color
theme[mem_box]="#565f89"

# Net up/down box outline color
theme[net_box]="#565f89"

# Processes box outline color
theme[proc_box]="#565f89"

# Box divider line and small boxes line color
theme[div_line]="#565f89"

# Temperature graph colors
theme[temp_start]="#9ece6a"
theme[temp_mid]="#e0af68"
theme[temp_end]="#f7768e"

# CPU graph colors
theme[cpu_start]="#9ece6a"
theme[cpu_mid]="#e0af68"
theme[cpu_end]="#f7768e"

# Mem/Disk free meter
theme[free_start]="#9ece6a"
theme[free_mid]="#e0af68"
theme[free_end]="#f7768e"

# Mem/Disk cached meter
theme[cached_start]="#9ece6a"
theme[cached_mid]="#e0af68"
theme[cached_end]="#f7768e"

# Mem/Disk available meter
theme[available_start]="#9ece6a"
theme[available_mid]="#e0af68"
theme[available_end]="#f7768e"

# Mem/Disk used meter
theme[used_start]="#9ece6a"
theme[used_mid]="#e0af68"
theme[used_end]="#f7768e"

# Download graph colors
theme[download_start]="#9ece6a"
theme[download_mid]="#e0af68"
theme[download_end]="#f7768e"

# Upload graph colors
theme[upload_start]="#9ece6a"
theme[upload_mid]="#e0af68"
theme[upload_end]="#f7768e"


================================================
FILE: themes/tokyo-night/gnome.sh
================================================
#!/bin/bash

OMAKUB_THEME_COLOR="purple"
OMAKUB_THEME_BACKGROUND="tokyo-night/background.jpg"
source $OMAKUB_PATH/themes/set-gnome-theme.sh


================================================
FILE: themes/tokyo-night/neovim.lua
================================================
return {
	{
		"LazyVim/LazyVim",
		opts = {
			colorscheme = "tokyonight",
		},
	},
}


================================================
FILE: themes/tokyo-night/tophat.sh
================================================
#!/bin/bash

gsettings set org.gnome.shell.extensions.tophat meter-fg-color "#924d8b"


================================================
FILE: themes/tokyo-night/vscode.sh
================================================
#!/bin/bash

VSC_THEME="Tokyo Night"
VSC_EXTENSION="enkia.tokyo-night"
source $OMAKUB_PATH/themes/set-vscode-theme.sh


================================================
FILE: themes/tokyo-night/zellij.kdl
================================================
themes {
    tokyo-night {
        fg 169 177 214
        bg 26 27 38
        black 56 62 90
        red 249 51 87
        green 158 206 106
        yellow 224 175 104
        blue 122 162 247
        magenta 187 154 247
        cyan 42 195 222
        white 192 202 245
        orange 255 158 100
    }
}


================================================
FILE: uninstall/app-1password.sh
================================================
#!/bin/bash

sudo rm /etc/apt/sources.list.d/1password.list
sudo rm /usr/share/keyrings/1password-archive-keyring.gpg
sudo rm /usr/share/debsig/keyrings/AC2D62742012EA22/debsig.gpg
sudo rm -r /etc/debsig/policies/AC2D62742012EA22/
sudo apt remove --purge -y 1password 1password-cli


================================================
FILE: uninstall/app-audacity.sh
================================================
#!/bin/bash

flatpak uninstall -y flathub org.audacityteam.Audacity


================================================
FILE: uninstall/app-brave.sh
================================================
#!/bin/bash

sudo apt remove --purge -y brave-browser
sudo rm /etc/apt/sources.list.d/brave-browser-release.list
sudo rm /usr/share/keyrings/brave-browser-*.gpg


================================================
FILE: uninstall/app-chrome.sh
================================================
#!/bin/bash

sudo apt remove -y google-chrome-stable


================================================
FILE: uninstall/app-cursor.sh
================================================
#!/bin/bash

sudo rm /opt/cursor.appimage
sudo rm /usr/share/applications/cursor.desktop


================================================
FILE: uninstall/app-discord.sh
================================================
sudo apt remove --purge -y discord

================================================
FILE: uninstall/app-doom-emacs.sh
================================================
#!/bin/bash

sudo apt remove --purge -y emacs emacs-gtk
sudo rm -rf ~/.config/emacs
sudo rm -rf ~/.emacs.d
sudo rm -rf ~/.config/doom


================================================
FILE: uninstall/app-fastfetch.sh
================================================
#!/bin/bash

sudo apt remove -y fastfetch


================================================
FILE: uninstall/app-flameshot.sh
================================================
#!/bin/bash

sudo apt remove -y flameshot


================================================
FILE: uninstall/app-geekbench.sh
================================================
#!/bin/bash

sudo rm -rf /usr/local/geekbench6
sudo rm -rf /usr/local/bin/geekbench6


================================================
FILE: uninstall/app-gimp.sh
================================================
#!/bin/bash

sudo flatpak remove -y org.gimp.GIMP


================================================
FILE: uninstall/app-github-cli.sh
================================================
#!/bin/bash

sudo apt remove -y gh


================================================
FILE: uninstall/app-libreoffice.sh
================================================
#!/bin/bash

sudo apt remove -y libreoffice


================================================
FILE: uninstall/app-localsend.sh
================================================
#!/bin/bash

sudo apt remove -y localsend


================================================
FILE: uninstall/app-mainline-kernels.sh
================================================
#!/bin/bash

sudo apt remove -y mainline


================================================
FILE: uninstall/app-minecraft.sh
================================================
#!/bin/bash

sudo apt remove -y openjdk-8-jdk minecraft-launcher


================================================
FILE: uninstall/app-neovim.sh
================================================
#!/bin/bash

sudo rm /usr/local/bin/nvim
sudo rm -r /usr/local/share/nvim/
rm ~/.local/share/applications/Neovim.desktop
rm -rf ~/.config/nvim
rm -rf ~/.local/share/nvim
rm -rf ~/.local/state/nvim
rm -rf ~/.cache/nvim


================================================
FILE: uninstall/app-obs-studio.sh
================================================
#!/bin/bash

sudo apt remove -y obs-studio


================================================
FILE: uninstall/app-obsidian.sh
================================================
#!/bin/bash

sudo apt remove --purge -y obsidian


================================================
FILE: uninstall/app-ollama.sh
================================================
#!/bin/bash

# Remove service
sudo systemctl stop ollama
sudo systemctl disable ollama
sudo rm /etc/systemd/system/ollama.service

# Remove command
sudo rm $(which ollama)

# Remove installed models
sudo rm -r /usr/share/ollama
sudo userdel ollama
sudo groupdel ollama


================================================
FILE: uninstall/app-pinta.sh
================================================
#!/bin/bash

flatpak uninstall -y flathub com.github.PintaProject.Pinta


================================================
FILE: uninstall/app-retroarch.sh
================================================
#!/bin/bash

flatpak uninstall -y flathub org.libretro.RetroArch


================================================
FILE: uninstall/app-rubymine.sh
================================================
#!/bin/bash

sudo snap remove rubymine


================================================
FILE: uninstall/app-signal.sh
================================================
#!/bin/bash

sudo apt remove --purge -y signal-desktop


================================================
FILE: uninstall/app-spotify.sh
================================================
#!/bin/bash

sudo apt remove -y spotify-client


================================================
FILE: uninstall/app-steam.sh
================================================
#!/bin/bash

sudo apt remove -y steam steam-launcher


================================================
FILE: uninstall/app-tailscale.sh
================================================
#!/bin/bash

sudo apt remove -y tailscale


================================================
FILE: uninstall/app-typora.sh
================================================
#!/bin/bash

sudo apt remove typora -y
rm -rf ~/.config/Typora


================================================
FILE: uninstall/app-virtualbox.sh
================================================
#!/bin/bash

sudo apt purge -y virtualbox virtualbox-dkms virtualbox-qt virtualbox-ext-pack
sudo apt autoremove --purge -y
rm -rf ~/.config/VirtualBox


================================================
FILE: uninstall/app-vlc.sh
================================================
#!/bin/bash

sudo apt remove -y vlc


================================================
FILE: uninstall/app-vscode.sh
================================================
#!/bin/bash

sudo apt purge -y remove code
rm -rf ~/.config/Code/User


================================================
FILE: uninstall/app-windsurf.sh
================================================
#!/bin/bash

sudo apt purge -y windsurf
sudo rm /etc/apt/sources.list.d/windsurf.list
sudo rm /usr/share/keyrings/windsurf-stable-archive-keyring.gpg


================================================
FILE: uninstall/app-xournalpp.sh
================================================
#!/bin/bash

sudo apt remove -y xournalpp


================================================
FILE: uninstall/app-zed.sh
================================================
#!/bin/bash

rm -rf ~/.local/zed.app
rm -rf ~/.local/bin/zed
rm -rf ~/.local/share/applications/dev.zed.Zed.desktop
rm -rf ~/.config/zed


================================================
FILE: uninstall/app-zoom.sh
================================================
#!/bin/bash

sudo apt remove -y zoom


================================================
FILE: uninstall/apps-web.sh
================================================
#!/bin/bash

rm ~/.local/share/applications/WhatsApp.desktop
rm ~/.local/share/applications/Basecamp.desktop
rm ~/.local/share/applications/HEY.desktop


================================================
FILE: uninstall/dev-language.sh
================================================
#!/bin/bash

# Uninstall default programming languages
if [[ -v OMAKUB_FIRST_RUN_LANGUAGES ]]; then
  languages=$OMAKUB_FIRST_RUN_LANGUAGES
else
  AVAILABLE_LANGUAGES=("Ruby on Rails" "Node.js" "Go" "PHP" "Python" "Elixir" "Rust" "Java")
  languages=$(gum choose "${AVAILABLE_LANGUAGES[@]}" --no-limit --height 10 --header "Select programming languages to uninstall")
fi

if [[ -n $languages ]]; then
  for language in $languages; do
    case $language in
    Ruby)
      mise uninstall ruby@3.4
      mise x ruby -- gem uninstall rails
      ;;
    Node.js)
      mise uninstall node@lts
      ;;
    Go)
      mise uninstall go@latest
      ;;
    PHP)
      sudo apt -y purge php php-{curl,apcu,intl,mbstring,opcache,pgsql,mysql,sqlite3,redis,xml,zip}
      sudo apt -y autoremove
      sudo rm /usr/local/bin/composer
      ;;
    Python)
      mise uninstall python@latest
      ;;
    Elixir)
      mise uninstall elixir@latest
      mise uninstall erlang@latest
      ;;
    Rust)
      rustup self uninstall -y
      ;;
    Java)
      mise uninstall java@latest
      ;;
    esac
  done
fi


================================================
FILE: uninstall/docker.sh
================================================
#!/bin/bash

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


================================================
FILE: uninstall/select-web-apps.sh
================================================
#!/bin/bash

source $OMAKUB_PATH/defaults/bash/functions

AVAILABLE_WEB_APPS=("Chat GPT" "Google Photos" "Google Contacts" "Tailscale")
apps=$(gum choose "${AVAILABLE_WEB_APPS[@]}" --no-limit --height 6 --header "Select web apps to uninstall")

if [[ -n "$apps" ]]; then
  IFS=$'\n'
  for app in $apps; do
    case $app in
    "Chat GPT")
      web2app-remove 'Chat GPT'
      app2folder-remove 'Chat GPT.desktop' WebApps
      ;;
    "Google Photos")
      web2app-remove 'Google Photos'
      app2folder-remove 'Google Photos.desktop' WebApps
      ;;
    "Google Contacts")
      web2app-remove 'Google Contacts'
      app2folder-remove 'Google Contacts.desktop' WebApps
      ;;
    "Tailscale")
      web2app-remove 'Tailscale'
      app2folder-remove 'Tailscale.desktop' WebApps
      ;;
    esac
  done
fi


================================================
FILE: version
================================================
1.5.0
Download .txt
gitextract_wu3rr8nv/

├── EXTENSIONS.md
├── README.md
├── applications/
│   ├── About.sh
│   ├── Activity.sh
│   ├── Basecamp.sh
│   ├── Docker.sh
│   ├── HEY.sh
│   ├── Neovim.sh
│   ├── Omakub.sh
│   └── WhatsApp.sh
├── ascii.sh
├── bin/
│   ├── omakub
│   └── omakub-sub/
│       ├── font-size.sh
│       ├── font.sh
│       ├── header.sh
│       ├── install-dev-editor.sh
│       ├── install.sh
│       ├── manual.sh
│       ├── menu.sh
│       ├── migrate.sh
│       ├── theme.sh
│       ├── uninstall.sh
│       └── update.sh
├── boot.sh
├── configs/
│   ├── alacritty/
│   │   ├── btop.toml
│   │   ├── font-size.toml
│   │   ├── fonts/
│   │   │   ├── CaskaydiaMono.toml
│   │   │   ├── FiraMono.toml
│   │   │   ├── JetBrainsMono.toml
│   │   │   └── MesloLGS.toml
│   │   ├── pane.toml
│   │   └── shared.toml
│   ├── alacritty.toml
│   ├── bashrc
│   ├── btop.conf
│   ├── fastfetch.jsonc
│   ├── inputrc
│   ├── neovim/
│   │   ├── lazyvim.json
│   │   ├── snacks-animated-scrolling-off.lua
│   │   └── transparency.lua
│   ├── typora/
│   │   ├── ia_typora.css
│   │   └── ia_typora_night.css
│   ├── ulauncher.desktop
│   ├── ulauncher.json
│   ├── vscode.json
│   ├── xcompose
│   └── zellij.kdl
├── defaults/
│   ├── bash/
│   │   ├── aliases
│   │   ├── functions
│   │   ├── init
│   │   ├── inputrc
│   │   ├── prompt
│   │   ├── rc
│   │   └── shell
│   └── xcompose
├── install/
│   ├── check-version.sh
│   ├── desktop/
│   │   ├── a-flatpak.sh
│   │   ├── app-alacritty.sh
│   │   ├── app-chrome.sh
│   │   ├── app-flameshot.sh
│   │   ├── app-gnome-sushi.sh
│   │   ├── app-gnome-tweak-tool.sh
│   │   ├── app-libreoffice.sh
│   │   ├── app-localsend.sh
│   │   ├── app-obsidian.sh
│   │   ├── app-pinta.sh
│   │   ├── app-signal.sh
│   │   ├── app-typora.sh
│   │   ├── app-vlc.sh
│   │   ├── app-vscode.sh
│   │   ├── app-wl-clipboard.sh
│   │   ├── app-xournalpp.sh
│   │   ├── applications.sh
│   │   ├── fonts.sh
│   │   ├── optional/
│   │   │   ├── app-1password.sh
│   │   │   ├── app-asdcontrol.sh
│   │   │   ├── app-audacity.sh
│   │   │   ├── app-brave.sh
│   │   │   ├── app-cursor.sh
│   │   │   ├── app-discord.sh
│   │   │   ├── app-doom-emacs.sh
│   │   │   ├── app-dropbox.sh
│   │   │   ├── app-gimp.sh
│   │   │   ├── app-mainline-kernels.sh
│   │   │   ├── app-minecraft.sh
│   │   │   ├── app-obs-studio.sh
│   │   │   ├── app-retroarch.sh
│   │   │   ├── app-rubymine.sh
│   │   │   ├── app-spotify.sh
│   │   │   ├── app-steam.sh
│   │   │   ├── app-virtualbox.sh
│   │   │   ├── app-windows.sh
│   │   │   ├── app-windsurf.sh
│   │   │   ├── app-zed.sh
│   │   │   ├── app-zoom.sh
│   │   │   └── select-web-apps.sh
│   │   ├── select-optional-apps.sh
│   │   ├── set-alacritty-default.sh
│   │   ├── set-app-grid.sh
│   │   ├── set-dock.sh
│   │   ├── set-framework-text-scaling.sh
│   │   ├── set-gnome-extensions.sh
│   │   ├── set-gnome-hotkeys.sh
│   │   ├── set-gnome-settings.sh
│   │   ├── set-gnome-theme.sh
│   │   ├── set-xcompose.sh
│   │   └── ulauncher.sh
│   ├── desktop.sh
│   ├── first-run-choices.sh
│   ├── identification.sh
│   ├── terminal/
│   │   ├── a-shell.sh
│   │   ├── app-btop.sh
│   │   ├── app-fastfetch.sh
│   │   ├── app-github-cli.sh
│   │   ├── app-lazydocker.sh
│   │   ├── app-lazygit.sh
│   │   ├── app-neovim.sh
│   │   ├── app-zellij.sh
│   │   ├── apps-terminal.sh
│   │   ├── docker.sh
│   │   ├── libraries.sh
│   │   ├── mise.sh
│   │   ├── optional/
│   │   │   ├── app-geekbench.sh
│   │   │   ├── app-ollama.sh
│   │   │   └── app-tailscale.sh
│   │   ├── required/
│   │   │   └── app-gum.sh
│   │   ├── select-dev-language.sh
│   │   ├── select-dev-storage.sh
│   │   └── set-git.sh
│   └── terminal.sh
├── install.sh
├── migrations/
│   ├── 1718359027.sh
│   ├── 1722091912.sh
│   ├── 1722387070.sh
│   ├── 1723756122.sh
│   ├── 1724344367.sh
│   ├── 1738744474.sh
│   ├── 1741193162.sh
│   ├── 1744854733.sh
│   ├── 1745060743.sh
│   ├── 1747237126.sh
│   ├── 1747501295.sh
│   ├── 1747736884.sh
│   ├── 1747737304.sh
│   ├── 1753775930.sh
│   ├── 1761481687.sh
│   └── 1770656330.sh
├── themes/
│   ├── catppuccin/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── everforest/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── gruvbox/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── kanagawa/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── matte-black/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── nord/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── osaka-jade/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── ristretto/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── rose-pine/
│   │   ├── alacritty.toml
│   │   ├── btop.theme
│   │   ├── gnome.sh
│   │   ├── neovim.lua
│   │   ├── tophat.sh
│   │   ├── vscode.sh
│   │   └── zellij.kdl
│   ├── set-gnome-theme.sh
│   ├── set-vscode-theme.sh
│   └── tokyo-night/
│       ├── alacritty.toml
│       ├── btop.theme
│       ├── gnome.sh
│       ├── neovim.lua
│       ├── tophat.sh
│       ├── vscode.sh
│       └── zellij.kdl
├── uninstall/
│   ├── app-1password.sh
│   ├── app-audacity.sh
│   ├── app-brave.sh
│   ├── app-chrome.sh
│   ├── app-cursor.sh
│   ├── app-discord.sh
│   ├── app-doom-emacs.sh
│   ├── app-fastfetch.sh
│   ├── app-flameshot.sh
│   ├── app-geekbench.sh
│   ├── app-gimp.sh
│   ├── app-github-cli.sh
│   ├── app-libreoffice.sh
│   ├── app-localsend.sh
│   ├── app-mainline-kernels.sh
│   ├── app-minecraft.sh
│   ├── app-neovim.sh
│   ├── app-obs-studio.sh
│   ├── app-obsidian.sh
│   ├── app-ollama.sh
│   ├── app-pinta.sh
│   ├── app-retroarch.sh
│   ├── app-rubymine.sh
│   ├── app-signal.sh
│   ├── app-spotify.sh
│   ├── app-steam.sh
│   ├── app-tailscale.sh
│   ├── app-typora.sh
│   ├── app-virtualbox.sh
│   ├── app-vlc.sh
│   ├── app-vscode.sh
│   ├── app-windsurf.sh
│   ├── app-xournalpp.sh
│   ├── app-zed.sh
│   ├── app-zoom.sh
│   ├── apps-web.sh
│   ├── dev-language.sh
│   ├── docker.sh
│   └── select-web-apps.sh
└── version
Condensed preview — 259 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (183K chars).
[
  {
    "path": "EXTENSIONS.md",
    "chars": 214,
    "preview": "# [Dark and light mode theme switch](https://github.com/florentdestremau/omakub-darkmode-switch)\n\nSelect a dark and ligh"
  },
  {
    "path": "README.md",
    "chars": 969,
    "preview": "# Omakub\n\nTurn a fresh Ubuntu installation into a fully-configured, beautiful, and modern web development system by runn"
  },
  {
    "path": "applications/About.sh",
    "chars": 420,
    "preview": "#!/bin/bash\n\ncat <<EOF >~/.local/share/applications/About.desktop\n[Desktop Entry]\nVersion=1.0\nName=About\nComment=System "
  },
  {
    "path": "applications/Activity.sh",
    "chars": 397,
    "preview": "#!/bin/bash\n\ncat <<EOF >~/.local/share/applications/Activity.desktop\n[Desktop Entry]\nVersion=1.0\nName=Activity\nComment=S"
  },
  {
    "path": "applications/Basecamp.sh",
    "chars": 430,
    "preview": "#!/bin/bash\n\ncat <<EOF >~/.local/share/applications/Basecamp.desktop\n[Desktop Entry]\nVersion=1.0\nName=Basecamp\nComment=B"
  },
  {
    "path": "applications/Docker.sh",
    "chars": 408,
    "preview": "#!/bin/bash\n\ncat <<EOF >~/.local/share/applications/Docker.desktop\n[Desktop Entry]\nVersion=1.0\nName=Docker\nComment=Manag"
  },
  {
    "path": "applications/HEY.sh",
    "chars": 387,
    "preview": "#!/bin/bash\n\ncat <<EOF >~/.local/share/applications/HEY.desktop\n[Desktop Entry]\nVersion=1.0\nName=HEY\nComment=HEY Email +"
  },
  {
    "path": "applications/Neovim.sh",
    "chars": 340,
    "preview": "#!/bin/bash\n\ncat <<EOF >~/.local/share/applications/Neovim.desktop\n[Desktop Entry]\nVersion=1.0\nName=Neovim\nComment=Edit "
  },
  {
    "path": "applications/Omakub.sh",
    "chars": 379,
    "preview": "#!/bin/bash\n\ncat <<EOF >~/.local/share/applications/Omakub.desktop\n[Desktop Entry]\nVersion=1.0\nName=Omakub\nComment=Omaku"
  },
  {
    "path": "applications/WhatsApp.sh",
    "chars": 414,
    "preview": "#!/bin/bash\n\ncat <<EOF >~/.local/share/applications/WhatsApp.desktop\n[Desktop Entry]\nVersion=1.0\nName=WhatsApp\nComment=W"
  },
  {
    "path": "ascii.sh",
    "chars": 811,
    "preview": "#!/bin/bash\n\nascii_art='\n________                  __        ___.\n\\_____  \\   _____ _____  |  | ____ _\\_ |__\n /   |   \\ "
  },
  {
    "path": "bin/omakub",
    "chars": 101,
    "preview": "#!/bin/bash\n\nsource $OMAKUB_PATH/bin/omakub-sub/header.sh\nsource $OMAKUB_PATH/bin/omakub-sub/menu.sh\n"
  },
  {
    "path": "bin/omakub-sub/font-size.sh",
    "chars": 319,
    "preview": "#!/bin/bash\n\nchoice=$(gum choose {7..14} \"<< Back\" --height 11 --header \"Choose your terminal font size\")\n\nif [[ $choice"
  },
  {
    "path": "bin/omakub-sub/font.sh",
    "chars": 1606,
    "preview": "#!/bin/bash\n\nset_font() {\n\tlocal font_name=$1\n\tlocal url=$2\n\tlocal file_type=$3\n\tlocal file_name=\"${font_name/ Nerd Font"
  },
  {
    "path": "bin/omakub-sub/header.sh",
    "chars": 154,
    "preview": "#!/bin/bash\n\nsource $OMAKUB_PATH/ascii.sh\necho \"\" # Add spacing\necho \"                                 $(cat $OMAKUB_PAT"
  },
  {
    "path": "bin/omakub-sub/install-dev-editor.sh",
    "chars": 854,
    "preview": "#!/bin/bash\n\nCHOICES=(\n  \"Cursor            AI Code Editor\"\n  \"Doom Emacs        Emacs framework with curated list of pa"
  },
  {
    "path": "bin/omakub-sub/install.sh",
    "chars": 2902,
    "preview": "#!/bin/bash\n\nCHOICES=(\n  \"Dev Editor        Install alternative programming editors\"\n  \"Dev Language      Install progra"
  },
  {
    "path": "bin/omakub-sub/manual.sh",
    "chars": 105,
    "preview": "#!/bin/bash\n\nxdg-open \"https://manual.omakub.org\" &>/dev/null\nsource $OMAKUB_PATH/bin/omakub-sub/menu.sh\n"
  },
  {
    "path": "bin/omakub-sub/menu.sh",
    "chars": 270,
    "preview": "#!/bin/bash\n\nif [ $# -eq 0 ]; then\n\tSUB=$(gum choose \"Theme\" \"Font\" \"Update\" \"Install\" \"Uninstall\" \"Manual\" \"Quit\" --hei"
  },
  {
    "path": "bin/omakub-sub/migrate.sh",
    "chars": 328,
    "preview": "#!/bin/bash\n\ncd $OMAKUB_PATH\nlast_updated_at=$(git log -1 --format=%cd --date=unix)\ngit pull\n\nfor file in $OMAKUB_PATH/m"
  },
  {
    "path": "bin/omakub-sub/theme.sh",
    "chars": 1428,
    "preview": "#!/bin/bash\n\nTHEME_NAMES=(\"Tokyo Night\" \"Catppuccin\" \"Nord\" \"Everforest\" \"Gruvbox\" \"Kanagawa\" \"Ristretto\" \"Rose Pine\" \"M"
  },
  {
    "path": "bin/omakub-sub/uninstall.sh",
    "chars": 258,
    "preview": "#!/bin/bash\n\nUNINSTALLER=$(gum file $OMAKUB_PATH/uninstall --height 26)\n[ -n \"$UNINSTALLER\" ] && gum confirm \"Run uninst"
  },
  {
    "path": "bin/omakub-sub/update.sh",
    "chars": 1030,
    "preview": "#!/bin/bash\n\nCHOICES=(\n\t\"Omakub        Update Omakub itself and run any migrations\"\n\t\"Ollama        Run LLMs, like Meta'"
  },
  {
    "path": "boot.sh",
    "chars": 877,
    "preview": "#!/bin/bash\n\nset -e\n\nascii_art='________                  __        ___.\n\\_____  \\   _____ _____  |  | ____ _\\_ |__\n /  "
  },
  {
    "path": "configs/alacritty/btop.toml",
    "chars": 136,
    "preview": "# Used by the Activity.desktop app\nimport = [ \"~/.config/alacritty/pane.toml\" ]\n\n[window]\ndimensions.columns = 121\ndimen"
  },
  {
    "path": "configs/alacritty/font-size.toml",
    "chars": 106,
    "preview": "# Leave this file in place for omakub to rely on a shared font size for all terminal apps\n[font]\nsize = 9\n"
  },
  {
    "path": "configs/alacritty/fonts/CaskaydiaMono.toml",
    "chars": 202,
    "preview": "[font]\nnormal = { family = \"CaskaydiaMono Nerd Font\", style = \"Regular\" }\nbold = { family = \"CaskaydiaMono Nerd Font\", s"
  },
  {
    "path": "configs/alacritty/fonts/FiraMono.toml",
    "chars": 202,
    "preview": "[font]\nnormal = { family = \"FiraMono Nerd Font Mono\", style = \"Regular\" }\nbold = { family = \"FiraMono Nerd Font Mono\", s"
  },
  {
    "path": "configs/alacritty/fonts/JetBrainsMono.toml",
    "chars": 217,
    "preview": "[font]\nnormal = { family = \"JetBrainsMono Nerd Font Mono\", style = \"Regular\" }\nbold = { family = \"JetBrainsMono Nerd Fon"
  },
  {
    "path": "configs/alacritty/fonts/MesloLGS.toml",
    "chars": 208,
    "preview": "[font]\nnormal = { family = \"MesloLGLDZ Nerd Font Mono\", style = \"Regular\" }\nbold = { family = \"MesloLGLDZ Nerd Font Mono"
  },
  {
    "path": "configs/alacritty/pane.toml",
    "chars": 295,
    "preview": "# Used by the About.desktop, Activity.desktop, Docker.desktop, Omakub.desktop, and Neovim.desktop apps\nimport = [ \"~/.co"
  },
  {
    "path": "configs/alacritty/shared.toml",
    "chars": 206,
    "preview": "[env]\nTERM = \"xterm-256color\"\n\n[shell]\nprogram = \"zellij\"\n\n[window]\npadding.x = 16\npadding.y = 14\ndecorations = \"None\"\no"
  },
  {
    "path": "configs/alacritty.toml",
    "chars": 152,
    "preview": "import = [ \"~/.config/alacritty/theme.toml\", \"~/.config/alacritty/font.toml\", \"~/.config/alacritty/font-size.toml\", \"~/."
  },
  {
    "path": "configs/bashrc",
    "chars": 118,
    "preview": "source ~/.local/share/omakub/defaults/bash/rc\n\n# Editor used by CLI\nexport EDITOR=\"nvim\"\nexport SUDO_EDITOR=\"$EDITOR\"\n"
  },
  {
    "path": "configs/btop.conf",
    "chars": 9264,
    "preview": "#? Config file for btop v. 1.3.0\n\n#* Name of a btop++/bpytop/bashtop formatted \".theme\" file, \"Default\" and \"TTY\" for bu"
  },
  {
    "path": "configs/fastfetch.jsonc",
    "chars": 3613,
    "preview": "{\n    \"$schema\": \"https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json\",\n    \"logo\": {\n        \"paddi"
  },
  {
    "path": "configs/inputrc",
    "chars": 53,
    "preview": "$include ~/.local/share/omakub/defaults/bash/inputrc\n"
  },
  {
    "path": "configs/neovim/lazyvim.json",
    "chars": 147,
    "preview": "{\n  \"extras\": [\n    \"lazyvim.plugins.extras.editor.neo-tree\"\n  ],\n  \"install_version\": 8,\n  \"news\": {\n    \"NEWS.md\": \"10"
  },
  {
    "path": "configs/neovim/snacks-animated-scrolling-off.lua",
    "chars": 117,
    "preview": "return {\n\t\"folke/snacks.nvim\",\n\topts = {\n\t\tscroll = {\n\t\t\tenabled = false, -- Disable scrolling animations\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "configs/neovim/transparency.lua",
    "chars": 2347,
    "preview": "-- transparent background\nvim.api.nvim_set_hl(0, \"Normal\", { bg = \"none\" })\nvim.api.nvim_set_hl(0, \"NormalFloat\", { bg ="
  },
  {
    "path": "configs/typora/ia_typora.css",
    "chars": 5310,
    "preview": ":root {\n  --accent-color: #aeb1b5; /* #'s before H1-3 */\n  --background-color: white;\n  --border-color: #ddd; \n  --code-"
  },
  {
    "path": "configs/typora/ia_typora_night.css",
    "chars": 2302,
    "preview": "@import 'night/codeblock.dark.css';\n@import 'night/mermaid.dark.css';\n@import 'night/sourcemode.dark.css';\n@import 'ia_t"
  },
  {
    "path": "configs/ulauncher.desktop",
    "chars": 288,
    "preview": "[Desktop Entry]\nName=Ulauncher\nComment=Application launcher for Linux\nGenericName=Launcher\nCategories=GNOME;GTK;Utility;"
  },
  {
    "path": "configs/ulauncher.json",
    "chars": 495,
    "preview": "{\n  \"blacklisted-desktop-dirs\": \"/usr/share/locale:/usr/share/app-install:/usr/share/kservices5:/usr/share/fk5:/usr/shar"
  },
  {
    "path": "configs/vscode.json",
    "chars": 823,
    "preview": "{\n  \"editor.fontFamily\": \"CaskaydiaMono Nerd Font\",\n  \"editor.tabSize\": 2,\n  \"security.workspace.trust.untrustedFiles\": "
  },
  {
    "path": "configs/xcompose",
    "chars": 162,
    "preview": "include \"%H/.local/share/omakub/defaults/xcompose\"\n\n# Identification\n<Multi_key> <space> <n> : \"$OMAKUB_USER_NAME\"\n<Mult"
  },
  {
    "path": "configs/zellij.kdl",
    "chars": 8349,
    "preview": "theme \"tokyo-night\"\ndefault_layout \"compact\"\non_force_close \"quit\"\n\ndefault_mode \"locked\"\nkeybinds clear-defaults=true {"
  },
  {
    "path": "defaults/bash/aliases",
    "chars": 614,
    "preview": "# File system\nalias ls='eza -lh --group-directories-first --icons=auto'\nalias lsa='ls -a'\nalias lt='eza --tree --level=2"
  },
  {
    "path": "defaults/bash/functions",
    "chars": 4276,
    "preview": "# Compression\ncompress() { tar -czf \"${1%/}.tar.gz\" \"${1%/}\"; }\nalias decompress=\"tar -xzf\"\n\n# Convert webm files genera"
  },
  {
    "path": "defaults/bash/init",
    "chars": 436,
    "preview": "if command -v mise &> /dev/null; then\n  eval \"$(mise activate bash)\"\nfi\n\nif command -v zoxide &> /dev/null; then\n  eval "
  },
  {
    "path": "defaults/bash/inputrc",
    "chars": 1321,
    "preview": "set meta-flag on\nset input-meta on\nset output-meta on\nset convert-meta off\nset completion-ignore-case on\nset completion-"
  },
  {
    "path": "defaults/bash/prompt",
    "chars": 178,
    "preview": "# Technicolor dreams\nforce_color_prompt=yes\ncolor_prompt=yes\n\n# Simple prompt with path in the window/pane title and car"
  },
  {
    "path": "defaults/bash/rc",
    "chars": 251,
    "preview": "source ~/.local/share/omakub/defaults/bash/shell\nsource ~/.local/share/omakub/defaults/bash/aliases\nsource ~/.local/shar"
  },
  {
    "path": "defaults/bash/shell",
    "chars": 320,
    "preview": "# History control\nshopt -s histappend\nHISTCONTROL=ignoreboth\nHISTSIZE=32768\nHISTFILESIZE=\"${HISTSIZE}\"\n\n# Autocompletion"
  },
  {
    "path": "defaults/xcompose",
    "chars": 850,
    "preview": "include \"%L\"\n\n# Emoji\n<Multi_key> <m> <s> : \"😄\" # smile\n<Multi_key> <m> <c> : \"😂\" # cry\n<Multi_key> <m> <l> : \"😍\" # love"
  },
  {
    "path": "install/check-version.sh",
    "chars": 846,
    "preview": "#!/bin/bash\n\nif [ ! -f /etc/os-release ]; then\n  echo \"$(tput setaf 1)Error: Unable to determine OS. /etc/os-release fil"
  },
  {
    "path": "install/desktop/a-flatpak.sh",
    "chars": 187,
    "preview": "#!/bin/bash\n\nsudo apt install -y flatpak\nsudo apt install -y gnome-software-plugin-flatpak\nsudo flatpak remote-add --if-"
  },
  {
    "path": "install/desktop/app-alacritty.sh",
    "chars": 1063,
    "preview": "#!/bin/bash\n\n# Alacritty is a GPU-powered and highly extensible terminal. See https://alacritty.org/\nsudo apt install -y"
  },
  {
    "path": "install/desktop/app-chrome.sh",
    "chars": 350,
    "preview": "#!/bin/bash\n\n# Browse the web with the most popular browser. See https://www.google.com/chrome/\ncd /tmp\nwget https://dl."
  },
  {
    "path": "install/desktop/app-flameshot.sh",
    "chars": 112,
    "preview": "#!/bin/bash\n\n# Flameshot is a nice step-up over the default Gnome screenshot tool\nsudo apt install -y flameshot\n"
  },
  {
    "path": "install/desktop/app-gnome-sushi.sh",
    "chars": 106,
    "preview": "#!/bin/bash\n\n# Gives you previews in the file manager when pressing space\nsudo apt install -y gnome-sushi\n"
  },
  {
    "path": "install/desktop/app-gnome-tweak-tool.sh",
    "chars": 50,
    "preview": "#!/bin/bash\n\nsudo apt install -y gnome-tweak-tool\n"
  },
  {
    "path": "install/desktop/app-libreoffice.sh",
    "chars": 87,
    "preview": "#!/bin/bash\n\n# Work with Word, Excel, Powerpoint files\nsudo apt install -y libreoffice\n"
  },
  {
    "path": "install/desktop/app-localsend.sh",
    "chars": 346,
    "preview": "#!/bin/bash\n\ncd /tmp\nLOCALSEND_VERSION=$(curl -s \"https://api.github.com/repos/localsend/localsend/releases/latest\" | gr"
  },
  {
    "path": "install/desktop/app-obsidian.sh",
    "chars": 429,
    "preview": "#!/bin/bash\n\n# Obsidian is a multi-platform note taking application. See https://obsidian.md\ncd /tmp\nOBSIDIAN_VERSION=$("
  },
  {
    "path": "install/desktop/app-pinta.sh",
    "chars": 159,
    "preview": "#!/bin/bash\n\n# Pinta is a simple drawing and image editing program. See https://www.pinta-project.com/\nflatpak install -"
  },
  {
    "path": "install/desktop/app-signal.sh",
    "chars": 712,
    "preview": "#!/bin/bash\n\nif [ ! -f /etc/apt/sources.list.d/signal-desktop.sources ]; then\n  [ -f /usr/share/keyrings/signal-desktop-"
  },
  {
    "path": "install/desktop/app-typora.sh",
    "chars": 753,
    "preview": "#!/bin/bash\n\n# Typora is a markdown editor and reader. See https://typora.io/\nif [ ! -f /etc/apt/sources.list.d/typora.l"
  },
  {
    "path": "install/desktop/app-vlc.sh",
    "chars": 37,
    "preview": "#!/bin/bash\n\nsudo apt install -y vlc\n"
  },
  {
    "path": "install/desktop/app-vscode.sh",
    "chars": 908,
    "preview": "#!/bin/bash\n\nif [ ! -f /etc/apt/keyrings/packages.microsoft.gpg ] || [ ! -f /usr/share/keyrings/microsoft.gpg ]; then\n  "
  },
  {
    "path": "install/desktop/app-wl-clipboard.sh",
    "chars": 108,
    "preview": "#!/bin/bash\n\n# Provides a system clipboard interface for Neovim under Wayland\nsudo apt install wl-clipboard\n"
  },
  {
    "path": "install/desktop/app-xournalpp.sh",
    "chars": 43,
    "preview": "#!/bin/bash\n\nsudo apt install -y xournalpp\n"
  },
  {
    "path": "install/desktop/applications.sh",
    "chars": 92,
    "preview": "#!/bin/bash\n\nfor script in ~/.local/share/omakub/applications/*.sh; do source $script; done\n"
  },
  {
    "path": "install/desktop/fonts.sh",
    "chars": 506,
    "preview": "#!/bin/bash\n\nmkdir -p ~/.local/share/fonts\n\ncd /tmp\nwget https://github.com/ryanoasis/nerd-fonts/releases/latest/downloa"
  },
  {
    "path": "install/desktop/optional/app-1password.sh",
    "chars": 231,
    "preview": "#!/bin/bash\n\n# Install 1password and 1password-cli single script\ncd /tmp\nwget https://downloads.1password.com/linux/debi"
  },
  {
    "path": "install/desktop/optional/app-asdcontrol.sh",
    "chars": 709,
    "preview": "#!/bin/bash\n\n# Install asdcontrol\ngit clone https://github.com/nikosdion/asdcontrol.git /tmp/asdcontrol\ncd /tmp/asdcontr"
  },
  {
    "path": "install/desktop/optional/app-audacity.sh",
    "chars": 66,
    "preview": "#!/bin/bash\n\nflatpak install -y flathub org.audacityteam.Audacity\n"
  },
  {
    "path": "install/desktop/optional/app-brave.sh",
    "chars": 630,
    "preview": "#!/bin/bash\n\nif [ ! -f /etc/apt/sources.list.d/brave-browser-release.list ]; then\n  [ -f /usr/share/keyrings/brave-brows"
  },
  {
    "path": "install/desktop/optional/app-cursor.sh",
    "chars": 738,
    "preview": "#!/bin/bash\n\ncd /tmp\ncurl -L \"https://www.cursor.com/api/download?platform=linux-x64&releaseTrack=stable\" | jq -r '.down"
  },
  {
    "path": "install/desktop/optional/app-discord.sh",
    "chars": 214,
    "preview": "# A Communication platform for voice, video, and text messaging https://discord.com/\ncd /tmp\nwget https://discord.com/ap"
  },
  {
    "path": "install/desktop/optional/app-doom-emacs.sh",
    "chars": 147,
    "preview": "#!/bin/bash\n\nsudo apt install -y emacs\ngit clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs\n~/.con"
  },
  {
    "path": "install/desktop/optional/app-dropbox.sh",
    "chars": 116,
    "preview": "#!/bin/bash\n\n# Sync files across machines using https://dropbox.com\nsudo apt install -y nautilus-dropbox >/dev/null\n"
  },
  {
    "path": "install/desktop/optional/app-gimp.sh",
    "chars": 51,
    "preview": "#!/bin/bash\n\nsudo flatpak install -y org.gimp.GIMP\n"
  },
  {
    "path": "install/desktop/optional/app-mainline-kernels.sh",
    "chars": 107,
    "preview": "#!/bin/bash\n\nsudo add-apt-repository -y ppa:cappelikan/ppa\nsudo apt update -y\nsudo apt install -y mainline\n"
  },
  {
    "path": "install/desktop/optional/app-minecraft.sh",
    "chars": 170,
    "preview": "#!/bin/bash\n\nsudo apt install -y openjdk-8-jdk\n\ncd /tmp\nwget https://launcher.mojang.com/download/Minecraft.deb\nsudo apt"
  },
  {
    "path": "install/desktop/optional/app-obs-studio.sh",
    "chars": 164,
    "preview": "#!/bin/bash\n\n# OBS Studio is a screen recording application that allows you to capture both display and webcam in the sa"
  },
  {
    "path": "install/desktop/optional/app-retroarch.sh",
    "chars": 63,
    "preview": "#!/bin/bash\n\nflatpak install -y flathub org.libretro.RetroArch\n"
  },
  {
    "path": "install/desktop/optional/app-rubymine.sh",
    "chars": 50,
    "preview": "#!/bin/bash\n\nsudo snap install rubymine --classic\n"
  },
  {
    "path": "install/desktop/optional/app-spotify.sh",
    "chars": 549,
    "preview": "#!/bin/bash\n\n# Stream music using https://spotify.com\nif [ ! -f /etc/apt/sources.list.d/spotify.list ]; then\n  [ -f /etc"
  },
  {
    "path": "install/desktop/optional/app-steam.sh",
    "chars": 188,
    "preview": "#!/bin/bash\n\n# Play games from https://store.steampowered.com/\ncd /tmp\nwget https://cdn.akamai.steamstatic.com/client/in"
  },
  {
    "path": "install/desktop/optional/app-virtualbox.sh",
    "chars": 334,
    "preview": "#!/bin/bash\n\n# Virtualbox allows you to run VMs for other flavors of Linux or even Windows\n# See https://ubuntu.com/tuto"
  },
  {
    "path": "install/desktop/optional/app-windows.sh",
    "chars": 502,
    "preview": "#!/bin/bash\n\necho \"Downloading the VirtIO drivers to ~/Downloads\"\nmkdir -p ~/Downloads\nwget -O ~/Downloads/virtio-win-0."
  },
  {
    "path": "install/desktop/optional/app-windsurf.sh",
    "chars": 646,
    "preview": "#!/bin/bash\n\nif [ ! -f /etc/apt/sources.list.d/windsurf.list ]; then\n    [ -f /usr/share/keyrings/windsurf-stable-archiv"
  },
  {
    "path": "install/desktop/optional/app-zed.sh",
    "chars": 50,
    "preview": "#!/bin/bash\n\ncurl https://zed.dev/install.sh | sh\n"
  },
  {
    "path": "install/desktop/optional/app-zoom.sh",
    "chars": 173,
    "preview": "#!/bin/bash\n\n# Make video calls using https://zoom.us/\ncd /tmp\nwget https://zoom.us/client/latest/zoom_amd64.deb\nsudo ap"
  },
  {
    "path": "install/desktop/optional/select-web-apps.sh",
    "chars": 1166,
    "preview": "#!/bin/bash\n\nsource $OMAKUB_PATH/defaults/bash/functions\n\nAVAILABLE_WEB_APPS=(\"Chat GPT\" \"Google Photos\" \"Google Contact"
  },
  {
    "path": "install/desktop/select-optional-apps.sh",
    "chars": 231,
    "preview": "#!/bin/bash\n\nif [[ -v OMAKUB_FIRST_RUN_OPTIONAL_APPS ]]; then\n\tapps=$OMAKUB_FIRST_RUN_OPTIONAL_APPS\n\n\tif [[ -n \"$apps\" ]"
  },
  {
    "path": "install/desktop/set-alacritty-default.sh",
    "chars": 131,
    "preview": "#!/usr/bin/env sh\n\n# Make alacritty default terminal emulator\nsudo update-alternatives --set x-terminal-emulator /usr/bi"
  },
  {
    "path": "install/desktop/set-app-grid.sh",
    "chars": 2390,
    "preview": "#!/bin/bash\n\n# Remove Btop entry for one that runs in alacritty\nsudo rm -rf /usr/share/applications/btop.desktop\n\n# App "
  },
  {
    "path": "install/desktop/set-dock.sh",
    "chars": 1149,
    "preview": "#!/bin/bash\n\n# Favorite apps for dock\napps=(\n\t\"google-chrome.desktop\"\n\t\"Alacritty.desktop\"\n\t\"Neovim.desktop\"\n\t\"code.desk"
  },
  {
    "path": "install/desktop/set-framework-text-scaling.sh",
    "chars": 442,
    "preview": "#!/bin/bash\n\nCOMPUTER_MAKER=$(sudo dmidecode -t system | grep 'Manufacturer:' | awk '{print $2}')\nSCREEN_RESOLUTION=$(xr"
  },
  {
    "path": "install/desktop/set-gnome-extensions.sh",
    "chars": 4600,
    "preview": "#!/bin/bash\n\nsudo apt install -y gnome-shell-extension-manager gir1.2-gtop-2.0 gir1.2-clutter-1.0\npipx install gnome-ext"
  },
  {
    "path": "install/desktop/set-gnome-hotkeys.sh",
    "chars": 7614,
    "preview": "#!/bin/bash\n\n# Alt+F4 is very cumbersome\ngsettings set org.gnome.desktop.wm.keybindings close \"['<Super>w']\"\n\n# Make it "
  },
  {
    "path": "install/desktop/set-gnome-settings.sh",
    "chars": 523,
    "preview": "#!/bin/bash\n\n# Center new windows in the middle of the screen\ngsettings set org.gnome.mutter center-new-windows true\n\n# "
  },
  {
    "path": "install/desktop/set-gnome-theme.sh",
    "chars": 128,
    "preview": "#!/bin/bash\n\nsource ~/.local/share/omakub/themes/tokyo-night/gnome.sh\nsource ~/.local/share/omakub/themes/tokyo-night/to"
  },
  {
    "path": "install/desktop/set-xcompose.sh",
    "chars": 167,
    "preview": "#!/bin/bash\n\nenvsubst < ~/.local/share/omakub/configs/xcompose > ~/.XCompose\nibus restart\ngsettings set org.gnome.deskto"
  },
  {
    "path": "install/desktop/ulauncher.sh",
    "chars": 518,
    "preview": "#!/bin/bash\n\nsudo add-apt-repository universe -y\nsudo add-apt-repository ppa:agornostal/ulauncher -y\nsudo apt update\nsud"
  },
  {
    "path": "install/desktop.sh",
    "chars": 240,
    "preview": "#!/bin/bash\n\n# Run desktop installers\nfor installer in ~/.local/share/omakub/install/desktop/*.sh; do source $installer;"
  },
  {
    "path": "install/first-run-choices.sh",
    "chars": 952,
    "preview": "#!/bin/bash\n\n# Only ask for default desktop app choices when running Gnome\nif [[ \"$XDG_CURRENT_DESKTOP\" == *\"GNOME\"* ]];"
  },
  {
    "path": "install/identification.sh",
    "chars": 345,
    "preview": "#!/bin/bash\n\necho \"Enter identification for git and autocomplete...\"\nSYSTEM_NAME=$(getent passwd \"$USER\" | cut -d ':' -f"
  },
  {
    "path": "install/terminal/a-shell.sh",
    "chars": 406,
    "preview": "#!/bin/bash\n\n# Configure the bash shell using Omakub defaults\n[ -f ~/.bashrc ] && mv ~/.bashrc ~/.bashrc.bak\ncp ~/.local"
  },
  {
    "path": "install/terminal/app-btop.sh",
    "chars": 387,
    "preview": "#!/bin/bash\n\n# This script installs btop, a resource monitor that shows usage and stats for processor, memory, disks, ne"
  },
  {
    "path": "install/terminal/app-fastfetch.sh",
    "chars": 441,
    "preview": "#!/bin/bash\n\n# Display system information in the terminal\nsudo add-apt-repository -y ppa:zhangsongcui3371/fastfetch\nsudo"
  },
  {
    "path": "install/terminal/app-github-cli.sh",
    "chars": 674,
    "preview": "#!/bin/bash\n\nif [ ! -f /etc/apt/sources.list.d/github-cli.list ]; then\n    [ -f /usr/share/keyrings/githubcli-archive-ke"
  },
  {
    "path": "install/terminal/app-lazydocker.sh",
    "chars": 423,
    "preview": "#!/bin/bash\n\ncd /tmp\nLAZYDOCKER_VERSION=$(curl -s \"https://api.github.com/repos/jesseduffield/lazydocker/releases/latest"
  },
  {
    "path": "install/terminal/app-lazygit.sh",
    "chars": 453,
    "preview": "#!/bin/bash\n\ncd /tmp\nLAZYGIT_VERSION=$(curl -s \"https://api.github.com/repos/jesseduffield/lazygit/releases/latest\" | gr"
  },
  {
    "path": "install/terminal/app-neovim.sh",
    "chars": 1702,
    "preview": "#!/bin/bash\n\ncd /tmp\nwget -O nvim.tar.gz \"https://github.com/neovim/neovim/releases/download/stable/nvim-linux-x86_64.ta"
  },
  {
    "path": "install/terminal/app-zellij.sh",
    "chars": 487,
    "preview": "#!/bin/bash\n\ncd /tmp\nwget -O zellij.tar.gz \"https://github.com/zellij-org/zellij/releases/latest/download/zellij-x86_64-"
  },
  {
    "path": "install/terminal/apps-terminal.sh",
    "chars": 90,
    "preview": "#!/bin/bash\n\nsudo apt install -y fzf ripgrep bat eza zoxide plocate apache2-utils fd-find\n"
  },
  {
    "path": "install/terminal/docker.sh",
    "chars": 1037,
    "preview": "#!/bin/bash\n\n# Add the official Docker repo\nif [ ! -f /etc/apt/sources.list.d/docker.list ]; then\n    [ -f /etc/apt/keyr"
  },
  {
    "path": "install/terminal/libraries.sh",
    "chars": 387,
    "preview": "#!/bin/bash\n\nsudo apt install -y \\\n  build-essential pkg-config autoconf bison clang rustc pipx \\\n  libssl-dev libreadli"
  },
  {
    "path": "install/terminal/mise.sh",
    "chars": 543,
    "preview": "#!/bin/bash\n\n# Install mise for managing multiple versions of languages. See https://mise.jdx.dev/\nsudo apt update -y &&"
  },
  {
    "path": "install/terminal/optional/app-geekbench.sh",
    "chars": 500,
    "preview": "#!/bin/bash\n\nGB_VERSION=\"6.4.0\"\n\ncd /tmp\ngum spin --title \"Downloading Geekbench $GB_VERSION...\" -- \\\n  curl -sLo geekbe"
  },
  {
    "path": "install/terminal/optional/app-ollama.sh",
    "chars": 59,
    "preview": "#!/bin/bash\n\ncurl -fsSL https://ollama.com/install.sh | sh\n"
  },
  {
    "path": "install/terminal/optional/app-tailscale.sh",
    "chars": 62,
    "preview": "#!/bin/bash\n\ncurl -fsSL https://tailscale.com/install.sh | sh\n"
  },
  {
    "path": "install/terminal/required/app-gum.sh",
    "chars": 315,
    "preview": "#!/bin/bash\n\n# Gum is used for the Omakub commands for tailoring Omakub after the initial install\ncd /tmp\nGUM_VERSION=\"0"
  },
  {
    "path": "install/terminal/select-dev-language.sh",
    "chars": 1437,
    "preview": "#!/bin/bash\n\n# Install default programming languages\nif [[ -v OMAKUB_FIRST_RUN_LANGUAGES ]]; then\n  languages=$OMAKUB_FI"
  },
  {
    "path": "install/terminal/select-dev-storage.sh",
    "chars": 780,
    "preview": "#!/bin/bash\n\n# Install default databases\nif [[ -v OMAKUB_FIRST_RUN_DBS ]]; then\n\tdbs=$OMAKUB_FIRST_RUN_DBS\nelse\n\tAVAILAB"
  },
  {
    "path": "install/terminal/set-git.sh",
    "chars": 485,
    "preview": "#!/bin/bash\n\n# Set common git aliases\ngit config --global alias.co checkout\ngit config --global alias.br branch\ngit conf"
  },
  {
    "path": "install/terminal.sh",
    "chars": 231,
    "preview": "#!/bin/bash\n\n# Needed for all installers\nsudo apt update -y\nsudo apt upgrade -y\nsudo apt install -y curl git unzip\n\n# Ru"
  },
  {
    "path": "install.sh",
    "chars": 1428,
    "preview": "#!/bin/bash\n\n# Exit immediately if a command exits with a non-zero status\nset -e\n\n# Give people a chance to retry runnin"
  },
  {
    "path": "migrations/1718359027.sh",
    "chars": 2994,
    "preview": "#!/bin/bash\n\n# Catch 1.0.0 up to 1.1.0\n\nsudo echo \"Running upgrade migration...\"\n\n# Change Zellij directory to be realiz"
  },
  {
    "path": "migrations/1722091912.sh",
    "chars": 525,
    "preview": "#!/bin/bash\n\nsudo echo \"Running upgrade migration...\"\n\n# Add rustc and pgsql client libs\nsource $OMAKUB_PATH/install/ter"
  },
  {
    "path": "migrations/1722387070.sh",
    "chars": 69,
    "preview": "#!/bin/bash\n\nsource $OMAKUB_PATH/install/desktop/app-wl-clipboard.sh\n"
  },
  {
    "path": "migrations/1723756122.sh",
    "chars": 1355,
    "preview": "#!/bin/bash\n\n# Uninstall Vitals\nif [ -n \"$(gnome-extensions list | grep Vitals@CoreCoding.com)\" ]; then\n  gnome-extensio"
  },
  {
    "path": "migrations/1724344367.sh",
    "chars": 537,
    "preview": "#!/bin/bash\n\n# Check if fastfetch config.jsonc is already set\nif [ -f \"$HOME/.config/fastfetch/config.jsonc\" ]; then\n  g"
  },
  {
    "path": "migrations/1738744474.sh",
    "chars": 173,
    "preview": "#!/bin/bash\n\n# Local XCompose must change for included files to be picked up by ibus\nsed -i '1i # Touched to update for "
  },
  {
    "path": "migrations/1741193162.sh",
    "chars": 147,
    "preview": "#!/bin/bash\n\n# Turn off animationd scrolling\ncp ~/.local/share/omakub/configs/neovim/snacks-animated-scrolling-off.lua ~"
  },
  {
    "path": "migrations/1744854733.sh",
    "chars": 87,
    "preview": "#!/bin/bash\n\nsource $OMAKUB_PATH/install/desktop/set-alacritty-default.sh\n\nnautilus -q\n"
  },
  {
    "path": "migrations/1745060743.sh",
    "chars": 747,
    "preview": "#!/bin/bash\n\ncp ~/.local/share/omakub/configs/alacritty/shared.toml ~/.config/alacritty/shared.toml\ncp ~/.local/share/om"
  },
  {
    "path": "migrations/1747237126.sh",
    "chars": 992,
    "preview": "#!/bin/bash\n\ncp ~/.local/share/omakub/configs/alacritty/btop.toml ~/.config/alacritty/btop.toml\n\n# Only attempt to set c"
  },
  {
    "path": "migrations/1747501295.sh",
    "chars": 1096,
    "preview": "#!/bin/bash\n\ngsettings set org.gnome.desktop.app-folders folder-children \"['Utilities', 'Sundry', 'YaST', 'Updates', 'Xt"
  },
  {
    "path": "migrations/1747736884.sh",
    "chars": 205,
    "preview": "#!/bin/bash\n\n# Ensure all alacritty configs have been migrated\nalacritty migrate\nalacritty migrate --config-file ~/.conf"
  },
  {
    "path": "migrations/1747737304.sh",
    "chars": 85,
    "preview": "#!/bin/bash\n\n# Ensure btop themes folder is available\nmkdir -p ~/.config/btop/themes\n"
  },
  {
    "path": "migrations/1753775930.sh",
    "chars": 297,
    "preview": "#!/bin/bash\n\n# Work-around ulauncher issue on nvidia\ngsettings set org.gnome.settings-daemon.plugins.media-keys.custom-k"
  },
  {
    "path": "migrations/1761481687.sh",
    "chars": 293,
    "preview": "#!/bin/bash\n\n# Force upgrade to gum 0.17.0 to fix issues with older versions\ncd /tmp\nGUM_VERSION=\"0.17.0\"\nwget -qO gum.d"
  },
  {
    "path": "migrations/1770656330.sh",
    "chars": 454,
    "preview": "#!/bin/bash\n\n# Update Spotify GPG key if the repository is present\nif [ -f /etc/apt/sources.list.d/spotify.list ]; then\n"
  },
  {
    "path": "themes/catppuccin/alacritty.toml",
    "chars": 1232,
    "preview": "[colors.primary]\nbackground = \"#24273a\"\nforeground = \"#cad3f5\"\ndim_foreground = \"#8087a2\"\nbright_foreground = \"#cad3f5\"\n"
  },
  {
    "path": "themes/catppuccin/btop.theme",
    "chars": 2278,
    "preview": "# Main background, empty for terminal default, need to be empty if you want transparent background\ntheme[main_bg]=\"#2427"
  },
  {
    "path": "themes/catppuccin/gnome.sh",
    "chars": 140,
    "preview": "#!/bin/bash\n\nOMAKUB_THEME_COLOR=\"magenta\"\nOMAKUB_THEME_BACKGROUND=\"catppuccin/background.png\"\nsource $OMAKUB_PATH/themes"
  },
  {
    "path": "themes/catppuccin/neovim.lua",
    "chars": 86,
    "preview": "return {\n\t{\n\t\t\"LazyVim/LazyVim\",\n\t\topts = {\n\t\t\tcolorscheme = \"catppuccin\",\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "themes/catppuccin/tophat.sh",
    "chars": 86,
    "preview": "#!/bin/bash\n\ngsettings set org.gnome.shell.extensions.tophat meter-fg-color \"#e920a3\"\n"
  },
  {
    "path": "themes/catppuccin/vscode.sh",
    "chars": 135,
    "preview": "#!/bin/bash\n\nVSC_THEME=\"Catppuccin Macchiato\"\nVSC_EXTENSION=\"Catppuccin.catppuccin-vsc\"\nsource $OMAKUB_PATH/themes/set-v"
  },
  {
    "path": "themes/catppuccin/zellij.kdl",
    "chars": 1171,
    "preview": "themes {\n  catppuccin {\n    bg \"#626880\" // Surface2\n    fg \"#c6d0f5\"\n    red \"#e78284\"\n    green \"#a6d189\"\n    blue \"#8"
  },
  {
    "path": "themes/everforest/alacritty.toml",
    "chars": 392,
    "preview": "[colors]\n[colors.primary]\nbackground = '#2d353b'\nforeground = '#d3c6aa'\n\n[colors.normal]\nblack = '#475258'\nred = '#e67e8"
  },
  {
    "path": "themes/everforest/btop.theme",
    "chars": 2269,
    "preview": "# All graphs and meters can be gradients\n# For single color graphs leave \"mid\" and \"end\" variable empty.\n# Use \"start\" a"
  },
  {
    "path": "themes/everforest/gnome.sh",
    "chars": 137,
    "preview": "#!/bin/bash\n\nOMAKUB_THEME_COLOR=\"bark\"\nOMAKUB_THEME_BACKGROUND=\"everforest/background.jpg\"\nsource $OMAKUB_PATH/themes/se"
  },
  {
    "path": "themes/everforest/neovim.lua",
    "chars": 142,
    "preview": "return {\n\t{ \"neanias/everforest-nvim\" },\n\t{\n\t\t\"LazyVim/LazyVim\",\n\t\topts = {\n\t\t\tcolorscheme = \"everforest\",\n\t\t\tbackground"
  },
  {
    "path": "themes/everforest/tophat.sh",
    "chars": 86,
    "preview": "#!/bin/bash\n\ngsettings set org.gnome.shell.extensions.tophat meter-fg-color \"#78ab50\"\n"
  },
  {
    "path": "themes/everforest/vscode.sh",
    "chars": 123,
    "preview": "#!/bin/bash\n\nVSC_THEME=\"Everforest Dark\"\nVSC_EXTENSION=\"sainnhe.everforest\"\nsource $OMAKUB_PATH/themes/set-vscode-theme."
  },
  {
    "path": "themes/everforest/zellij.kdl",
    "chars": 292,
    "preview": "themes {\n    everforest {\n        bg \"#2b3339\"\n        fg \"#d3c6aa\"\n        black \"#4b565c\"\n        red \"#e67e80\"\n      "
  },
  {
    "path": "themes/gruvbox/alacritty.toml",
    "chars": 410,
    "preview": "[colors]\n[colors.primary]\nbackground = \"0x282828\"\nforeground = \"0xd4be98\"\n\n[colors.normal]\nblack = \"0x3c3836\"\nred = \"0xe"
  },
  {
    "path": "themes/gruvbox/btop.theme",
    "chars": 2342,
    "preview": "#Bashtop gruvbox (https://github.com/morhetz/gruvbox) theme\n#by BachoSeven\n\n# Colors should be in 6 or 2 character hexad"
  },
  {
    "path": "themes/gruvbox/gnome.sh",
    "chars": 134,
    "preview": "#!/bin/bash\n\nOMAKUB_THEME_COLOR=\"sage\"\nOMAKUB_THEME_BACKGROUND=\"gruvbox/background.jpg\"\nsource $OMAKUB_PATH/themes/set-g"
  },
  {
    "path": "themes/gruvbox/neovim.lua",
    "chars": 116,
    "preview": "return {\n\t{ \"ellisonleao/gruvbox.nvim\" },\n\t{\n\t\t\"LazyVim/LazyVim\",\n\t\topts = {\n\t\t\tcolorscheme = \"gruvbox\",\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "themes/gruvbox/tophat.sh",
    "chars": 86,
    "preview": "#!/bin/bash\n\ngsettings set org.gnome.shell.extensions.tophat meter-fg-color \"#78ab50\"\n"
  },
  {
    "path": "themes/gruvbox/vscode.sh",
    "chars": 126,
    "preview": "#!/bin/bash\n\nVSC_THEME=\"Gruvbox Dark Medium\"\nVSC_EXTENSION=\"jdinhlife.gruvbox\"\nsource $OMAKUB_PATH/themes/set-vscode-the"
  },
  {
    "path": "themes/gruvbox/zellij.kdl",
    "chars": 289,
    "preview": "themes {\n    gruvbox {\n        fg \"#d5c4a1\"\n        bg \"#282828\"\n        black \"#3c3836\"\n        red \"#cc241d\"\n        g"
  },
  {
    "path": "themes/kanagawa/alacritty.toml",
    "chars": 604,
    "preview": "[colors]\n[colors.primary]\nbackground = '#1f1f28'\nforeground = '#dcd7ba'\n\n[colors.normal]\nblack   = '#090618'\nred     = '"
  },
  {
    "path": "themes/kanagawa/btop.theme",
    "chars": 1963,
    "preview": "# Bashtop Kanagawa-wave (https://github.com/rebelot/kanagawa.nvim) theme\n# By: philikarus\n\n# Main bg\ntheme[main_bg]=\"#1f"
  },
  {
    "path": "themes/kanagawa/gnome.sh",
    "chars": 137,
    "preview": "#!/bin/bash\n\nOMAKUB_THEME_COLOR=\"purple\"\nOMAKUB_THEME_BACKGROUND=\"kanagawa/background.jpg\"\nsource $OMAKUB_PATH/themes/se"
  },
  {
    "path": "themes/kanagawa/neovim.lua",
    "chars": 114,
    "preview": "return {\n\t{ \"rebelot/kanagawa.nvim\" },\n\t{\n\t\t\"LazyVim/LazyVim\",\n\t\topts = {\n\t\t\tcolorscheme = \"kanagawa\",\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "themes/kanagawa/tophat.sh",
    "chars": 86,
    "preview": "#!/bin/bash\n\ngsettings set org.gnome.shell.extensions.tophat meter-fg-color \"#924d8b\"\n"
  },
  {
    "path": "themes/kanagawa/vscode.sh",
    "chars": 120,
    "preview": "#!/bin/bash\n\nVSC_THEME=\"Kanagawa\"\nVSC_EXTENSION=\"qufiwefefwoyn.kanagawa\"\nsource $OMAKUB_PATH/themes/set-vscode-theme.sh\n"
  },
  {
    "path": "themes/kanagawa/zellij.kdl",
    "chars": 290,
    "preview": "themes {\n    kanagawa {\n        fg \"#DCD7BA\"\n        bg \"#1F1F28\"\n        red \"#C34043\"\n        green \"#76946A\"\n        "
  },
  {
    "path": "themes/matte-black/alacritty.toml",
    "chars": 894,
    "preview": "# ────────────────────────────────────────────────────────────\n# Omarchy Matte Black Theme for Alacritty\n# By tahayvr\n# "
  },
  {
    "path": "themes/matte-black/btop.theme",
    "chars": 2408,
    "preview": "# ────────────────────────────────────────────────────────────\n# Bashtop theme - Omarchy Matte Black\n# by tahayvr\n# http"
  },
  {
    "path": "themes/matte-black/gnome.sh",
    "chars": 140,
    "preview": "#!/bin/bash\n\nOMAKUB_THEME_COLOR=\"orange\"\nOMAKUB_THEME_BACKGROUND=\"matte-black/background.jpg\"\nsource $OMAKUB_PATH/themes"
  },
  {
    "path": "themes/matte-black/neovim.lua",
    "chars": 150,
    "preview": "return {\n  { \"tahayvr/matteblack.nvim\", lazy = false, priority = 1000 },\n  {\n\t\t\"LazyVim/LazyVim\",\n\t\topts = {\n\t\t\tcolorsch"
  },
  {
    "path": "themes/matte-black/tophat.sh",
    "chars": 86,
    "preview": "#!/bin/bash\n\ngsettings set org.gnome.shell.extensions.tophat meter-fg-color \"#FFFFFF\"\n"
  },
  {
    "path": "themes/matte-black/vscode.sh",
    "chars": 136,
    "preview": "#!/bin/bash\n\nVSC_THEME=\"Matte Black Theme\"\nVSC_EXTENSION=\"CleanThemes.matte-black-theme\"\nsource $OMAKUB_PATH/themes/set-"
  },
  {
    "path": "themes/matte-black/zellij.kdl",
    "chars": 293,
    "preview": "themes {\n    matte-black {\n        fg \"#bebebe\"\n        bg \"#121212\"\n        red \"#D35F5F\"\n        green \"#FFC107\"\n     "
  },
  {
    "path": "themes/nord/alacritty.toml",
    "chars": 757,
    "preview": "[colors]\n[colors.primary]\nbackground = \"#2e3440\"\nforeground = \"#d8dee9\"\ndim_foreground = \"#a5abb6\"\n\n[colors.cursor]\ntext"
  },
  {
    "path": "themes/nord/btop.theme",
    "chars": 2312,
    "preview": "#Bashtop theme with nord palette (https://www.nordtheme.com)\n#by Justin Zobel <justin.zobel@gmail.com>\n\n# Colors should "
  },
  {
    "path": "themes/nord/gnome.sh",
    "chars": 131,
    "preview": "#!/bin/bash\n\nOMAKUB_THEME_COLOR=\"blue\"\nOMAKUB_THEME_BACKGROUND=\"nord/background.png\"\nsource $OMAKUB_PATH/themes/set-gnom"
  },
  {
    "path": "themes/nord/neovim.lua",
    "chars": 114,
    "preview": "return {\n\t{ \"EdenEast/nightfox.nvim\" },\n\t{\n\t\t\"LazyVim/LazyVim\",\n\t\topts = {\n\t\t\tcolorscheme = \"nordfox\",\n\t\t},\n\t},\n}\n"
  },
  {
    "path": "themes/nord/tophat.sh",
    "chars": 86,
    "preview": "#!/bin/bash\n\ngsettings set org.gnome.shell.extensions.tophat meter-fg-color \"#208fe9\"\n"
  },
  {
    "path": "themes/nord/vscode.sh",
    "chars": 133,
    "preview": "#!/bin/bash\n\nVSC_THEME=\"Nord\"\nVSC_EXTENSION=\"arcticicestudio.nord-visual-studio-code\"\nsource $OMAKUB_PATH/themes/set-vsc"
  },
  {
    "path": "themes/nord/zellij.kdl",
    "chars": 286,
    "preview": "themes {\n    nord {\n        fg \"#D8DEE9\"\n        bg \"#2E3440\"\n        black \"#3B4252\"\n        red \"#BF616A\"\n        gree"
  },
  {
    "path": "themes/osaka-jade/alacritty.toml",
    "chars": 681,
    "preview": "[window]\n# window padding {px}\npadding.x = 12\npadding.y = 12\n\n[font]\nsize = 12.0\n\n[colors]\n[colors.primary]\nbackground ="
  },
  {
    "path": "themes/osaka-jade/btop.theme",
    "chars": 1849,
    "preview": "# Main background\ntheme[main_bg]=\"#111c18\"\n\n# Main text color\ntheme[main_fg]=\"#F7E8B2\"\n\n# Title color for boxes\ntheme[ti"
  },
  {
    "path": "themes/osaka-jade/gnome.sh",
    "chars": 137,
    "preview": "#!/bin/bash\n\nOMAKUB_THEME_COLOR=\"green\"\nOMAKUB_THEME_BACKGROUND=\"osaka-jade/background.jpg\"\nsource $OMAKUB_PATH/themes/s"
  },
  {
    "path": "themes/osaka-jade/neovim.lua",
    "chars": 265,
    "preview": "return {\n  {\n    \"ribru17/bamboo.nvim\",\n    lazy = false,\n    priority = 1000,\n    config = function()\n      require(\"ba"
  },
  {
    "path": "themes/osaka-jade/tophat.sh",
    "chars": 85,
    "preview": "#!/bin/bash\n\ngsettings set org.gnome.shell.extensions.tophat meter-fg-color \"#214237\""
  },
  {
    "path": "themes/osaka-jade/vscode.sh",
    "chars": 130,
    "preview": "#!/bin/bash\n\nVSC_THEME=\"Ocean Green: Dark\"\nVSC_EXTENSION=\"jovejonovski.ocean-green\"\nsource $OMAKUB_PATH/themes/set-vscod"
  },
  {
    "path": "themes/osaka-jade/zellij.kdl",
    "chars": 291,
    "preview": "themes {\n    osaka-jade {\n        fg \"#C1C497\"\n        bg \"#111c18\"\n        red \"#FF5345\"\n        green \"#549e6a\"\n      "
  },
  {
    "path": "themes/ristretto/alacritty.toml",
    "chars": 523,
    "preview": "[colors]\n\n[colors.normal]\nblack = \"#2c2525\"\nred = \"#fd6883\"\ngreen = \"#adda78\"\nyellow = \"#f9cc6c\"\nblue = \"#f38d70\"\nmagent"
  },
  {
    "path": "themes/ristretto/btop.theme",
    "chars": 1879,
    "preview": "#Btop monokai pro ristretto theme\n#Reconfigured from monokai theme\n\n# Main background, empty for terminal default, need "
  },
  {
    "path": "themes/ristretto/gnome.sh",
    "chars": 136,
    "preview": "#!/bin/bash\n\nOMAKUB_THEME_COLOR=\"grey\"\nOMAKUB_THEME_BACKGROUND=\"ristretto/background.jpg\"\nsource $OMAKUB_PATH/themes/set"
  },
  {
    "path": "themes/ristretto/neovim.lua",
    "chars": 353,
    "preview": "return {\n\t{\n\t\t\"gthelding/monokai-pro.nvim\",\n\t\tconfig = function()\n\t\t\trequire(\"monokai-pro\").setup({\n\t\t\t\tfilter = \"ristre"
  }
]

// ... and 59 more files (download for full content)

About this extraction

This page contains the full source code of the basecamp/omakub GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 259 files (154.7 KB), approximately 54.0k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!