Compare commits
14 Commits
4f615233c7
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 322cd72cc6 | |||
| 3c1fc38fae | |||
| fca58a98c7 | |||
| b593617163 | |||
| 84522b8b8a | |||
| 79a66c0d4b | |||
| 3a4845d999 | |||
| 09ff03a527 | |||
| c361a8bd12 | |||
| 2a13d31a94 | |||
| edb22899e6 | |||
| 26c7b549d7 | |||
| de695092c0 | |||
| cea2204433 |
@@ -0,0 +1,633 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
iatest=$(expr index "$-" i)
|
||||||
|
#######################################################
|
||||||
|
# SOURCED ALIAS'S AND SCRIPTS BY zachbrowne.me
|
||||||
|
#######################################################
|
||||||
|
if [ -f /usr/bin/fastfetch ]; then
|
||||||
|
fastfetch
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Source global definitions
|
||||||
|
if [ -f /etc/bashrc ]; then
|
||||||
|
. /etc/bashrc
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Enable bash programmable completion features in interactive shells
|
||||||
|
if [ -f /usr/share/bash-completion/bash_completion ]; then
|
||||||
|
. /usr/share/bash-completion/bash_completion
|
||||||
|
elif [ -f /etc/bash_completion ]; then
|
||||||
|
. /etc/bash_completion
|
||||||
|
fi
|
||||||
|
|
||||||
|
#######################################################
|
||||||
|
# EXPORTS
|
||||||
|
#######################################################
|
||||||
|
|
||||||
|
# Disable the bell
|
||||||
|
if [[ $iatest -gt 0 ]]; then bind "set bell-style visible"; fi
|
||||||
|
|
||||||
|
# Expand the history size
|
||||||
|
export HISTFILESIZE=10000
|
||||||
|
export HISTSIZE=500
|
||||||
|
export HISTTIMEFORMAT="%F %T" # add timestamp to history
|
||||||
|
|
||||||
|
# Don't put duplicate lines in the history and do not add lines that start with a space
|
||||||
|
export HISTCONTROL=erasedups:ignoredups:ignorespace
|
||||||
|
|
||||||
|
# Check the window size after each command and, if necessary, update the values of LINES and COLUMNS
|
||||||
|
shopt -s checkwinsize
|
||||||
|
|
||||||
|
# Causes bash to append to history instead of overwriting it so if you start a new terminal, you have old session history
|
||||||
|
shopt -s histappend
|
||||||
|
PROMPT_COMMAND='history -a'
|
||||||
|
|
||||||
|
# set up XDG folders
|
||||||
|
export XDG_DATA_HOME="$HOME/.local/share"
|
||||||
|
export XDG_CONFIG_HOME="$HOME/.config"
|
||||||
|
export XDG_STATE_HOME="$HOME/.local/state"
|
||||||
|
export XDG_CACHE_HOME="$HOME/.cache"
|
||||||
|
|
||||||
|
# Seeing as other scripts will use it might as well export it
|
||||||
|
export LINUXTOOLBOXDIR="$HOME/linuxtoolbox"
|
||||||
|
|
||||||
|
# Allow ctrl-S for history navigation (with ctrl-R)
|
||||||
|
[[ $- == *i* ]] && stty -ixon
|
||||||
|
|
||||||
|
# Ignore case on auto-completion
|
||||||
|
# Note: bind used instead of sticking these in .inputrc
|
||||||
|
if [[ $iatest -gt 0 ]]; then bind "set completion-ignore-case on"; fi
|
||||||
|
|
||||||
|
# Show auto-completion list automatically, without double tab
|
||||||
|
if [[ $iatest -gt 0 ]]; then bind "set show-all-if-ambiguous On"; fi
|
||||||
|
|
||||||
|
# Set the default editor
|
||||||
|
export EDITOR=nvim
|
||||||
|
export VISUAL=nvim
|
||||||
|
alias spico='sudo pico'
|
||||||
|
alias snano='sudo nano'
|
||||||
|
alias vim='nvim'
|
||||||
|
|
||||||
|
# To have colors for ls and all grep commands such as grep, egrep and zgrep
|
||||||
|
export CLICOLOR=1
|
||||||
|
export LS_COLORS='no=00:fi=00:di=00;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:*.xml=00;31:'
|
||||||
|
#export GREP_OPTIONS='--color=auto' #deprecated
|
||||||
|
|
||||||
|
# Check if ripgrep is installed
|
||||||
|
if command -v rg &> /dev/null; then
|
||||||
|
# Alias grep to rg if ripgrep is installed
|
||||||
|
alias grep='rg'
|
||||||
|
else
|
||||||
|
# Alias grep to /usr/bin/grep with GREP_OPTIONS if ripgrep is not installed
|
||||||
|
alias grep="/usr/bin/grep $GREP_OPTIONS"
|
||||||
|
fi
|
||||||
|
unset GREP_OPTIONS
|
||||||
|
|
||||||
|
# Color for manpages in less makes manpages a little easier to read
|
||||||
|
export LESS_TERMCAP_mb=$'\E[01;31m'
|
||||||
|
export LESS_TERMCAP_md=$'\E[01;31m'
|
||||||
|
export LESS_TERMCAP_me=$'\E[0m'
|
||||||
|
export LESS_TERMCAP_se=$'\E[0m'
|
||||||
|
export LESS_TERMCAP_so=$'\E[01;44;33m'
|
||||||
|
export LESS_TERMCAP_ue=$'\E[0m'
|
||||||
|
export LESS_TERMCAP_us=$'\E[01;32m'
|
||||||
|
|
||||||
|
#######################################################
|
||||||
|
# MACHINE SPECIFIC ALIAS'S
|
||||||
|
#######################################################
|
||||||
|
|
||||||
|
# Alias's for SSH
|
||||||
|
# alias SERVERNAME='ssh YOURWEBSITE.com -l USERNAME -p PORTNUMBERHERE'
|
||||||
|
|
||||||
|
# Alias's to change the directory
|
||||||
|
alias web='cd /var/www/html'
|
||||||
|
|
||||||
|
# Alias's to mount ISO files
|
||||||
|
# mount -o loop /home/NAMEOFISO.iso /home/ISOMOUNTDIR/
|
||||||
|
# umount /home/NAMEOFISO.iso
|
||||||
|
# (Both commands done as root only.)
|
||||||
|
|
||||||
|
#######################################################
|
||||||
|
# GENERAL ALIAS'S
|
||||||
|
#######################################################
|
||||||
|
# To temporarily bypass an alias, we precede the command with a \
|
||||||
|
# EG: the ls command is aliased, but to use the normal ls command you would type \ls
|
||||||
|
|
||||||
|
# Add an "alert" alias for long running commands. Use like so:
|
||||||
|
# sleep 10; alert
|
||||||
|
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
|
||||||
|
|
||||||
|
# Edit this .bashrc file
|
||||||
|
alias ebrc='edit ~/.bashrc'
|
||||||
|
|
||||||
|
# Show help for this .bashrc file
|
||||||
|
alias hlp='less ~/.bashrc_help'
|
||||||
|
|
||||||
|
# alias to show the date
|
||||||
|
alias da='date "+%Y-%m-%d %A %T %Z"'
|
||||||
|
|
||||||
|
# Alias's to modified commands
|
||||||
|
alias cp='cp -i'
|
||||||
|
alias mv='mv -i'
|
||||||
|
alias rm='trash -v'
|
||||||
|
alias mkdir='mkdir -p'
|
||||||
|
alias ps='ps auxf'
|
||||||
|
alias ping='ping -c 10'
|
||||||
|
alias less='less -R'
|
||||||
|
alias cls='clear'
|
||||||
|
alias apt-get='sudo apt-get'
|
||||||
|
alias multitail='multitail --no-repeat -c'
|
||||||
|
alias freshclam='sudo freshclam'
|
||||||
|
alias vi='nvim'
|
||||||
|
alias svi='sudo vi'
|
||||||
|
alias vis='nvim "+set si"'
|
||||||
|
alias yayf="yay -Slq | fzf --multi --preview 'yay -Sii {1}' --preview-window=down:75% | xargs -ro yay -S"
|
||||||
|
|
||||||
|
# Change directory aliases
|
||||||
|
alias home='cd ~'
|
||||||
|
alias cd..='cd ..'
|
||||||
|
alias ..='cd ..'
|
||||||
|
alias ...='cd ../..'
|
||||||
|
alias ....='cd ../../..'
|
||||||
|
alias .....='cd ../../../..'
|
||||||
|
|
||||||
|
# cd into the old directory
|
||||||
|
alias bd='cd "$OLDPWD"'
|
||||||
|
|
||||||
|
# Remove a directory and all files
|
||||||
|
alias rmd='/bin/rm --recursive --force --verbose '
|
||||||
|
|
||||||
|
# Alias's for multiple directory listing commands
|
||||||
|
alias la='ls -Alh' # show hidden files
|
||||||
|
alias ls='ls -aFh --color=always' # add colors and file type extensions
|
||||||
|
alias lx='ls -lXBh' # sort by extension
|
||||||
|
alias lk='ls -lSrh' # sort by size
|
||||||
|
alias lc='ls -ltcrh' # sort by change time
|
||||||
|
alias lu='ls -lturh' # sort by access time
|
||||||
|
alias lr='ls -lRh' # recursive ls
|
||||||
|
alias lt='ls -ltrh' # sort by date
|
||||||
|
alias lm='ls -alh |more' # pipe through 'more'
|
||||||
|
alias lw='ls -xAh' # wide listing format
|
||||||
|
alias ll='ls -Fls' # long listing format
|
||||||
|
alias labc='ls -lap' # alphabetical sort
|
||||||
|
alias lf="ls -l | egrep -v '^d'" # files only
|
||||||
|
alias ldir="ls -l | egrep '^d'" # directories only
|
||||||
|
alias lla='ls -Al' # List and Hidden Files
|
||||||
|
alias las='ls -A' # Hidden Files
|
||||||
|
alias lls='ls -l' # List
|
||||||
|
|
||||||
|
# alias chmod commands
|
||||||
|
alias mx='chmod a+x'
|
||||||
|
alias 000='chmod -R 000'
|
||||||
|
alias 644='chmod -R 644'
|
||||||
|
alias 666='chmod -R 666'
|
||||||
|
alias 755='chmod -R 755'
|
||||||
|
alias 777='chmod -R 777'
|
||||||
|
|
||||||
|
# Search command line history
|
||||||
|
alias h="history | grep "
|
||||||
|
|
||||||
|
# Search running processes
|
||||||
|
alias p="ps aux | grep "
|
||||||
|
alias topcpu="/bin/ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10"
|
||||||
|
|
||||||
|
# Search files in the current folder
|
||||||
|
alias f="find . | grep "
|
||||||
|
|
||||||
|
# Count all files (recursively) in the current folder
|
||||||
|
alias countfiles="for t in files links directories; do echo \`find . -type \${t:0:1} | wc -l\` \$t; done 2> /dev/null"
|
||||||
|
|
||||||
|
# To see if a command is aliased, a file, or a built-in command
|
||||||
|
alias checkcommand="type -t"
|
||||||
|
|
||||||
|
# Show open ports
|
||||||
|
alias openports='netstat -nape --inet'
|
||||||
|
|
||||||
|
# Alias's for safe and forced reboots
|
||||||
|
alias rebootsafe='sudo shutdown -r now'
|
||||||
|
alias rebootforce='sudo shutdown -r -n now'
|
||||||
|
|
||||||
|
# Alias's to show disk space and space used in a folder
|
||||||
|
alias diskspace="du -S | sort -n -r |more"
|
||||||
|
alias folders='du -h --max-depth=1'
|
||||||
|
alias folderssort='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'
|
||||||
|
alias tree='tree -CAhF --dirsfirst'
|
||||||
|
alias treed='tree -CAFd'
|
||||||
|
alias mountedinfo='df -hT'
|
||||||
|
|
||||||
|
# Alias's for archives
|
||||||
|
alias mktar='tar -cvf'
|
||||||
|
alias mkbz2='tar -cvjf'
|
||||||
|
alias mkgz='tar -cvzf'
|
||||||
|
alias untar='tar -xvf'
|
||||||
|
alias unbz2='tar -xvjf'
|
||||||
|
alias ungz='tar -xvzf'
|
||||||
|
|
||||||
|
# Show all logs in /var/log
|
||||||
|
alias logs="sudo find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:$//g' | grep -v '[0-9]$' | xargs tail -f"
|
||||||
|
|
||||||
|
# SHA1
|
||||||
|
alias sha1='openssl sha1'
|
||||||
|
|
||||||
|
alias clickpaste='sleep 3; xdotool type "$(xclip -o -selection clipboard)"'
|
||||||
|
|
||||||
|
# KITTY - alias to be able to use kitty features when connecting to remote servers(e.g use tmux on remote server)
|
||||||
|
|
||||||
|
alias kssh="kitty +kitten ssh"
|
||||||
|
|
||||||
|
# alias to cleanup unused docker containers, images, networks, and volumes
|
||||||
|
|
||||||
|
alias docker-clean=' \
|
||||||
|
docker container prune -f ; \
|
||||||
|
docker image prune -f ; \
|
||||||
|
docker network prune -f ; \
|
||||||
|
docker volume prune -f '
|
||||||
|
|
||||||
|
#######################################################
|
||||||
|
# SPECIAL FUNCTIONS
|
||||||
|
#######################################################
|
||||||
|
# Extracts any archive(s) (if unp isn't installed)
|
||||||
|
extract() {
|
||||||
|
for archive in "$@"; do
|
||||||
|
if [ -f "$archive" ]; then
|
||||||
|
case $archive in
|
||||||
|
*.tar.bz2) tar xvjf $archive ;;
|
||||||
|
*.tar.gz) tar xvzf $archive ;;
|
||||||
|
*.bz2) bunzip2 $archive ;;
|
||||||
|
*.rar) rar x $archive ;;
|
||||||
|
*.gz) gunzip $archive ;;
|
||||||
|
*.tar) tar xvf $archive ;;
|
||||||
|
*.tbz2) tar xvjf $archive ;;
|
||||||
|
*.tgz) tar xvzf $archive ;;
|
||||||
|
*.zip) unzip $archive ;;
|
||||||
|
*.Z) uncompress $archive ;;
|
||||||
|
*.7z) 7z x $archive ;;
|
||||||
|
*) echo "don't know how to extract '$archive'..." ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
echo "'$archive' is not a valid file!"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Searches for text in all files in the current folder
|
||||||
|
ftext() {
|
||||||
|
# -i case-insensitive
|
||||||
|
# -I ignore binary files
|
||||||
|
# -H causes filename to be printed
|
||||||
|
# -r recursive search
|
||||||
|
# -n causes line number to be printed
|
||||||
|
# optional: -F treat search term as a literal, not a regular expression
|
||||||
|
# optional: -l only print filenames and not the matching lines ex. grep -irl "$1" *
|
||||||
|
grep -iIHrn --color=always "$1" . | less -r
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copy file with a progress bar
|
||||||
|
cpp() {
|
||||||
|
set -e
|
||||||
|
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 |
|
||||||
|
awk '{
|
||||||
|
count += $NF
|
||||||
|
if (count % 10 == 0) {
|
||||||
|
percent = count / total_size * 100
|
||||||
|
printf "%3d%% [", percent
|
||||||
|
for (i=0;i<=percent;i++)
|
||||||
|
printf "="
|
||||||
|
printf ">"
|
||||||
|
for (i=percent;i<100;i++)
|
||||||
|
printf " "
|
||||||
|
printf "]\r"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
END { print "" }' total_size="$(stat -c '%s' "${1}")" count=0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copy and go to the directory
|
||||||
|
cpg() {
|
||||||
|
if [ -d "$2" ]; then
|
||||||
|
cp "$1" "$2" && cd "$2"
|
||||||
|
else
|
||||||
|
cp "$1" "$2"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Move and go to the directory
|
||||||
|
mvg() {
|
||||||
|
if [ -d "$2" ]; then
|
||||||
|
mv "$1" "$2" && cd "$2"
|
||||||
|
else
|
||||||
|
mv "$1" "$2"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create and go to the directory
|
||||||
|
mkdirg() {
|
||||||
|
mkdir -p "$1"
|
||||||
|
cd "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Goes up a specified number of directories (i.e. up 4)
|
||||||
|
up() {
|
||||||
|
local d=""
|
||||||
|
limit=$1
|
||||||
|
for ((i = 1; i <= limit; i++)); do
|
||||||
|
d=$d/..
|
||||||
|
done
|
||||||
|
d=$(echo $d | sed 's/^\///')
|
||||||
|
if [ -z "$d" ]; then
|
||||||
|
d=..
|
||||||
|
fi
|
||||||
|
cd $d
|
||||||
|
}
|
||||||
|
|
||||||
|
# Automatically do an ls after each cd, z, or zoxide
|
||||||
|
cd ()
|
||||||
|
{
|
||||||
|
if [ -n "$1" ]; then
|
||||||
|
builtin cd "$@" && ls
|
||||||
|
else
|
||||||
|
builtin cd ~ && ls
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Returns the last 2 fields of the working directory
|
||||||
|
pwdtail() {
|
||||||
|
pwd | awk -F/ '{nlast = NF -1;print $nlast"/"$NF}'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show the current distribution
|
||||||
|
distribution () {
|
||||||
|
local dtype="unknown" # Default to unknown
|
||||||
|
|
||||||
|
# Use /etc/os-release for modern distro identification
|
||||||
|
if [ -r /etc/os-release ]; then
|
||||||
|
source /etc/os-release
|
||||||
|
case $ID in
|
||||||
|
fedora|rhel|centos)
|
||||||
|
dtype="redhat"
|
||||||
|
;;
|
||||||
|
sles|opensuse*)
|
||||||
|
dtype="suse"
|
||||||
|
;;
|
||||||
|
ubuntu|debian)
|
||||||
|
dtype="debian"
|
||||||
|
;;
|
||||||
|
gentoo)
|
||||||
|
dtype="gentoo"
|
||||||
|
;;
|
||||||
|
arch|manjaro)
|
||||||
|
dtype="arch"
|
||||||
|
;;
|
||||||
|
slackware)
|
||||||
|
dtype="slackware"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Check ID_LIKE only if dtype is still unknown
|
||||||
|
if [ -n "$ID_LIKE" ]; then
|
||||||
|
case $ID_LIKE in
|
||||||
|
*fedora*|*rhel*|*centos*)
|
||||||
|
dtype="redhat"
|
||||||
|
;;
|
||||||
|
*sles*|*opensuse*)
|
||||||
|
dtype="suse"
|
||||||
|
;;
|
||||||
|
*ubuntu*|*debian*)
|
||||||
|
dtype="debian"
|
||||||
|
;;
|
||||||
|
*gentoo*)
|
||||||
|
dtype="gentoo"
|
||||||
|
;;
|
||||||
|
*arch*)
|
||||||
|
dtype="arch"
|
||||||
|
;;
|
||||||
|
*slackware*)
|
||||||
|
dtype="slackware"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If ID or ID_LIKE is not recognized, keep dtype as unknown
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo $dtype
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DISTRIBUTION=$(distribution)
|
||||||
|
if [ "$DISTRIBUTION" = "redhat" ] || [ "$DISTRIBUTION" = "arch" ]; then
|
||||||
|
alias cat='bat'
|
||||||
|
else
|
||||||
|
alias cat='batcat'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Show the current version of the operating system
|
||||||
|
ver() {
|
||||||
|
local dtype
|
||||||
|
dtype=$(distribution)
|
||||||
|
|
||||||
|
case $dtype in
|
||||||
|
"redhat")
|
||||||
|
if [ -s /etc/redhat-release ]; then
|
||||||
|
cat /etc/redhat-release
|
||||||
|
else
|
||||||
|
cat /etc/issue
|
||||||
|
fi
|
||||||
|
uname -a
|
||||||
|
;;
|
||||||
|
"suse")
|
||||||
|
cat /etc/SuSE-release
|
||||||
|
;;
|
||||||
|
"debian")
|
||||||
|
lsb_release -a
|
||||||
|
;;
|
||||||
|
"gentoo")
|
||||||
|
cat /etc/gentoo-release
|
||||||
|
;;
|
||||||
|
"arch")
|
||||||
|
cat /etc/os-release
|
||||||
|
;;
|
||||||
|
"slackware")
|
||||||
|
cat /etc/slackware-version
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [ -s /etc/issue ]; then
|
||||||
|
cat /etc/issue
|
||||||
|
else
|
||||||
|
echo "Error: Unknown distribution"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Automatically install the needed support files for this .bashrc file
|
||||||
|
install_bashrc_support() {
|
||||||
|
local dtype
|
||||||
|
dtype=$(distribution)
|
||||||
|
|
||||||
|
case $dtype in
|
||||||
|
"redhat")
|
||||||
|
sudo yum install multitail tree zoxide trash-cli fzf bash-completion fastfetch
|
||||||
|
;;
|
||||||
|
"suse")
|
||||||
|
sudo zypper install multitail tree zoxide trash-cli fzf bash-completion fastfetch
|
||||||
|
;;
|
||||||
|
"debian")
|
||||||
|
sudo apt-get install multitail tree zoxide trash-cli fzf bash-completion
|
||||||
|
# Fetch the latest fastfetch release URL for linux-amd64 deb file
|
||||||
|
FASTFETCH_URL=$(curl -s https://api.github.com/repos/fastfetch-cli/fastfetch/releases/latest | grep "browser_download_url.*linux-amd64.deb" | cut -d '"' -f 4)
|
||||||
|
|
||||||
|
# Download the latest fastfetch deb file
|
||||||
|
curl -sL $FASTFETCH_URL -o /tmp/fastfetch_latest_amd64.deb
|
||||||
|
|
||||||
|
# Install the downloaded deb file using apt-get
|
||||||
|
sudo apt-get install /tmp/fastfetch_latest_amd64.deb
|
||||||
|
;;
|
||||||
|
"arch")
|
||||||
|
sudo paru multitail tree zoxide trash-cli fzf bash-completion fastfetch
|
||||||
|
;;
|
||||||
|
"slackware")
|
||||||
|
echo "No install support for Slackware"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown distribution"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# IP address lookup
|
||||||
|
alias whatismyip="whatsmyip"
|
||||||
|
function whatsmyip () {
|
||||||
|
# Internal IP Lookup.
|
||||||
|
if command -v ip &> /dev/null; then
|
||||||
|
echo -n "Internal IP: "
|
||||||
|
ip addr show wlan0 | grep "inet " | awk '{print $2}' | cut -d/ -f1
|
||||||
|
else
|
||||||
|
echo -n "Internal IP: "
|
||||||
|
ifconfig wlan0 | grep "inet " | awk '{print $2}'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# External IP Lookup
|
||||||
|
echo -n "External IP: "
|
||||||
|
curl -4 ifconfig.me
|
||||||
|
}
|
||||||
|
|
||||||
|
# View Apache logs
|
||||||
|
apachelog() {
|
||||||
|
if [ -f /etc/httpd/conf/httpd.conf ]; then
|
||||||
|
cd /var/log/httpd && ls -xAh && multitail --no-repeat -c -s 2 /var/log/httpd/*_log
|
||||||
|
else
|
||||||
|
cd /var/log/apache2 && ls -xAh && multitail --no-repeat -c -s 2 /var/log/apache2/*.log
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Edit the Apache configuration
|
||||||
|
apacheconfig() {
|
||||||
|
if [ -f /etc/httpd/conf/httpd.conf ]; then
|
||||||
|
sedit /etc/httpd/conf/httpd.conf
|
||||||
|
elif [ -f /etc/apache2/apache2.conf ]; then
|
||||||
|
sedit /etc/apache2/apache2.conf
|
||||||
|
else
|
||||||
|
echo "Error: Apache config file could not be found."
|
||||||
|
echo "Searching for possible locations:"
|
||||||
|
sudo updatedb && locate httpd.conf && locate apache2.conf
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Edit the PHP configuration file
|
||||||
|
phpconfig() {
|
||||||
|
if [ -f /etc/php.ini ]; then
|
||||||
|
sedit /etc/php.ini
|
||||||
|
elif [ -f /etc/php/php.ini ]; then
|
||||||
|
sedit /etc/php/php.ini
|
||||||
|
elif [ -f /etc/php5/php.ini ]; then
|
||||||
|
sedit /etc/php5/php.ini
|
||||||
|
elif [ -f /usr/bin/php5/bin/php.ini ]; then
|
||||||
|
sedit /usr/bin/php5/bin/php.ini
|
||||||
|
elif [ -f /etc/php5/apache2/php.ini ]; then
|
||||||
|
sedit /etc/php5/apache2/php.ini
|
||||||
|
else
|
||||||
|
echo "Error: php.ini file could not be found."
|
||||||
|
echo "Searching for possible locations:"
|
||||||
|
sudo updatedb && locate php.ini
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Edit the MySQL configuration file
|
||||||
|
mysqlconfig() {
|
||||||
|
if [ -f /etc/my.cnf ]; then
|
||||||
|
sedit /etc/my.cnf
|
||||||
|
elif [ -f /etc/mysql/my.cnf ]; then
|
||||||
|
sedit /etc/mysql/my.cnf
|
||||||
|
elif [ -f /usr/local/etc/my.cnf ]; then
|
||||||
|
sedit /usr/local/etc/my.cnf
|
||||||
|
elif [ -f /usr/bin/mysql/my.cnf ]; then
|
||||||
|
sedit /usr/bin/mysql/my.cnf
|
||||||
|
elif [ -f ~/my.cnf ]; then
|
||||||
|
sedit ~/my.cnf
|
||||||
|
elif [ -f ~/.my.cnf ]; then
|
||||||
|
sedit ~/.my.cnf
|
||||||
|
else
|
||||||
|
echo "Error: my.cnf file could not be found."
|
||||||
|
echo "Searching for possible locations:"
|
||||||
|
sudo updatedb && locate my.cnf
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Trim leading and trailing spaces (for scripts)
|
||||||
|
trim() {
|
||||||
|
local var=$*
|
||||||
|
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
|
||||||
|
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters
|
||||||
|
echo -n "$var"
|
||||||
|
}
|
||||||
|
# GitHub Titus Additions
|
||||||
|
|
||||||
|
gcom() {
|
||||||
|
git add .
|
||||||
|
git commit -m "$1"
|
||||||
|
}
|
||||||
|
lazyg() {
|
||||||
|
git add .
|
||||||
|
git commit -m "$1"
|
||||||
|
git push
|
||||||
|
}
|
||||||
|
|
||||||
|
function hb {
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "No file path specified."
|
||||||
|
return
|
||||||
|
elif [ ! -f "$1" ]; then
|
||||||
|
echo "File path does not exist."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
uri="http://bin.christitus.com/documents"
|
||||||
|
response=$(curl -s -X POST -d @"$1" "$uri")
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
hasteKey=$(echo $response | jq -r '.key')
|
||||||
|
echo "http://bin.christitus.com/$hasteKey"
|
||||||
|
else
|
||||||
|
echo "Failed to upload the document."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################################
|
||||||
|
# Set the ultimate amazing command prompt
|
||||||
|
#######################################################
|
||||||
|
|
||||||
|
alias hug="systemctl --user restart hugo"
|
||||||
|
alias lanm="systemctl --user restart lan-mouse"
|
||||||
|
|
||||||
|
# Check if the shell is interactive
|
||||||
|
if [[ $- == *i* ]]; then
|
||||||
|
# Bind Ctrl+f to insert 'zi' followed by a newline
|
||||||
|
bind '"\C-f":"zi\n"'
|
||||||
|
fi
|
||||||
|
|
||||||
|
export PATH=$PATH:"$HOME/.local/bin:$HOME/.cargo/bin:/var/lib/flatpak/exports/bin:/.local/share/flatpak/exports/bin"
|
||||||
|
|
||||||
|
eval "$(starship init bash)"
|
||||||
|
eval "$(zoxide init bash)"
|
||||||
Generated
+10
@@ -0,0 +1,10 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Ignored default folder with query files
|
||||||
|
/queries/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
Generated
+9
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+8
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/Fedora-postInstall-Script.iml" filepath="$PROJECT_DIR$/.idea/Fedora-postInstall-Script.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="GENERAL_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$/../Fedora-PostInstall-Script" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
@@ -35,10 +35,6 @@ This script automates the following tasks:
|
|||||||
* **Internet Connection**: Required to download packages and repositories.
|
* **Internet Connection**: Required to download packages and repositories.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
1. **Run script directly**
|
|
||||||
```bash
|
|
||||||
bash <(curl -fsSL https://gitea.schantli.ca/jschantli/Fedora-PIS/raw/branch/main/postinstall.sh)
|
|
||||||
```
|
|
||||||
|
|
||||||
1. **Clone the repository:**
|
1. **Clone the repository:**
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -0,0 +1,449 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Post install script for Fedora
|
||||||
|
# Author: Jacob Schantli
|
||||||
|
# Version: 0.8
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Helper Functions
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Colors for output
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
log_info() {
|
||||||
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warn() {
|
||||||
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
command_exists() {
|
||||||
|
command -v "$1" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if the last command was successful
|
||||||
|
check_status() {
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_info "$1 successful."
|
||||||
|
else
|
||||||
|
log_error "$1 failed."
|
||||||
|
# If the second argument is "critical", exit the script
|
||||||
|
if [ "$2" == "critical" ]; then
|
||||||
|
log_error "Critical error encountered. Exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Append text to a file if it doesn't already exist
|
||||||
|
append_to_file_if_missing() {
|
||||||
|
local file="$1"
|
||||||
|
local text="$2"
|
||||||
|
local description="$3"
|
||||||
|
local use_sudo="$4"
|
||||||
|
|
||||||
|
if grep -Fq "$text" "$file"; then
|
||||||
|
log_warn "$description already exists in $file. Skipping."
|
||||||
|
else
|
||||||
|
if [ "$use_sudo" == "true" ]; then
|
||||||
|
echo "$text" | sudo tee -a "$file" > /dev/null
|
||||||
|
else
|
||||||
|
echo "$text" >> "$file"
|
||||||
|
fi
|
||||||
|
log_info "Added $description to $file."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Installation Functions
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
optimize_dnf() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Modifying /etc/dnf/dnf.conf for faster downloads."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
DNF_CONF="/etc/dnf/dnf.conf"
|
||||||
|
if [ -f "$DNF_CONF" ]; then
|
||||||
|
append_to_file_if_missing "$DNF_CONF" "max_parallel_downloads=10" "max_parallel_downloads" "true"
|
||||||
|
append_to_file_if_missing "$DNF_CONF" "defaultyes=True" "defaultyes" "true"
|
||||||
|
append_to_file_if_missing "$DNF_CONF" "keepcache=True" "keepcache" "true"
|
||||||
|
else
|
||||||
|
log_error "$DNF_CONF not found!"
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
}
|
||||||
|
|
||||||
|
install_fonts() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Microsoft Core Fonts and Meslo Nerd Font."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
log_info "Updating system and installing prerequisites..."
|
||||||
|
sudo dnf upgrade --refresh -y
|
||||||
|
check_status "System upgrade" "critical"
|
||||||
|
|
||||||
|
sudo dnf install -y curl cabextract xorg-x11-font-utils fontconfig wget
|
||||||
|
check_status "Prerequisites installation" "critical"
|
||||||
|
|
||||||
|
log_info "Installing Microsoft Core Fonts..."
|
||||||
|
if rpm -q msttcore-fonts-installer > /dev/null 2>&1; then
|
||||||
|
log_warn "Microsoft Core Fonts already installed."
|
||||||
|
else
|
||||||
|
sudo rpm -i https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm
|
||||||
|
check_status "Microsoft Core Fonts installation" "non-critical"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Installing Meslo Nerd Font..."
|
||||||
|
FONT_NAME="MesloLGS Nerd Font Mono"
|
||||||
|
if fc-list :family | grep -iq "$FONT_NAME"; then
|
||||||
|
log_info "Font '$FONT_NAME' is already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing font '$FONT_NAME'..."
|
||||||
|
FONT_URL="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.zip"
|
||||||
|
FONT_DIR="$HOME/.local/share/fonts"
|
||||||
|
TEMP_DIR=$(mktemp -d)
|
||||||
|
|
||||||
|
wget -O "$TEMP_DIR/$FONT_NAME.zip" "$FONT_URL"
|
||||||
|
unzip "$TEMP_DIR/$FONT_NAME.zip" -d "$TEMP_DIR"
|
||||||
|
mkdir -p "$FONT_DIR/$FONT_NAME"
|
||||||
|
mv "$TEMP_DIR"/*.ttf "$FONT_DIR/$FONT_NAME/"
|
||||||
|
|
||||||
|
fc-cache -fv
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
check_status "Meslo Nerd Font installation" "non-critical"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_repos() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Adding RPM Fusion repositories."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
sudo dnf install -y \
|
||||||
|
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
|
||||||
|
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
|
||||||
|
check_status "RPM Fusion repositories installation" "non-critical"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_software() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing most used software."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
DNF_PACKAGES=(
|
||||||
|
"gnome-tweaks"
|
||||||
|
"steam"
|
||||||
|
"lutris"
|
||||||
|
"btop"
|
||||||
|
"fastfetch"
|
||||||
|
"jstest-gtk"
|
||||||
|
"yaru-icon-theme"
|
||||||
|
"distrobox"
|
||||||
|
"pipx"
|
||||||
|
"bash-completion"
|
||||||
|
"tar"
|
||||||
|
"bat"
|
||||||
|
"tree"
|
||||||
|
"unzip"
|
||||||
|
"git"
|
||||||
|
"fzf"
|
||||||
|
)
|
||||||
|
|
||||||
|
log_info "Installing DNF packages..."
|
||||||
|
sudo dnf install -y "${DNF_PACKAGES[@]}"
|
||||||
|
check_status "DNF packages installation" "non-critical"
|
||||||
|
|
||||||
|
# Ensure flatpak is set up
|
||||||
|
if ! command -v flatpak &> /dev/null; then
|
||||||
|
log_info "Flatpak not found. Installing..."
|
||||||
|
sudo dnf install -y flatpak
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Adding Flathub remote..."
|
||||||
|
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||||
|
check_status "Flathub remote add" "non-critical"
|
||||||
|
|
||||||
|
FLATPAK_PACKAGES=(
|
||||||
|
"com.discordapp.Discord"
|
||||||
|
"com.github.tchx84.Flatseal"
|
||||||
|
"net.nokyan.Resources"
|
||||||
|
"com.mattjakeman.ExtensionManager"
|
||||||
|
"io.github.realmazharhussain.GdmSettings"
|
||||||
|
"io.github.dvlv.boxbuddyrs"
|
||||||
|
"it.mijorus.gearlever"
|
||||||
|
"io.github.fastrizwaan.WineZGUI"
|
||||||
|
"com.vysp3r.ProtonPlus"
|
||||||
|
"io.missioncenter.MissionCenter"
|
||||||
|
"io.github.peazip.PeaZip"
|
||||||
|
"app.devsuite.Ptyxis"
|
||||||
|
"re.sonny.Junction"
|
||||||
|
"com.github.rafostar.Clapper"
|
||||||
|
"io.github.flattool.Ignition"
|
||||||
|
"io.github.swordpuffin.rewaita"
|
||||||
|
"page.tesk.Refine"
|
||||||
|
"io.gitlab.adhami3310.Converter"
|
||||||
|
"com.bitwarden.desktop"
|
||||||
|
"com.usebottles.bottles"
|
||||||
|
"com.ulaa.Ulaa"
|
||||||
|
"com.bambulab.BambuStudio"
|
||||||
|
"com.collaboraoffice.Office"
|
||||||
|
"org.mozilla.Thunderbird"
|
||||||
|
)
|
||||||
|
|
||||||
|
log_info "Installing Flatpak packages..."
|
||||||
|
for app in "${FLATPAK_PACKAGES[@]}"; do
|
||||||
|
log_info "Installing $app..."
|
||||||
|
flatpak install flathub -y "$app"
|
||||||
|
check_status "Flatpak $app" "non-critical"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
install_cachyos() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing CachyOS kernel"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
sudo dnf copr enable -y bieszczaders/kernel-cachyos
|
||||||
|
check_status "Enabling CachyOS Copr" "non-critical"
|
||||||
|
|
||||||
|
sudo dnf install -y kernel-cachyos kernel-cachyos-devel-matched
|
||||||
|
check_status "CachyOS Kernel installation" "non-critical"
|
||||||
|
|
||||||
|
log_info "Installing CachyOS addons"
|
||||||
|
sudo dnf copr enable -y bieszczaders/kernel-cachyos-addons
|
||||||
|
check_status "Enabling CachyOS Addons Copr" "non-critical"
|
||||||
|
|
||||||
|
sudo dnf swap -y zram-generator-defaults cachyos-settings
|
||||||
|
sudo dracut -f
|
||||||
|
sudo dnf -y install scx-scheds scx-tools scx-manager ananicy-cpp
|
||||||
|
check_status "CachyOS addons installation" "non-critical"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_linuxtoys() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing LinuxToys"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
curl -fsSL https://linux.toys/install.sh | bash
|
||||||
|
check_status "LinuxToys installation" "non-critical"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_shell_env() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Shell Environment (Starship, FZF, Zoxide, MyBash)"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
# Install Starship
|
||||||
|
if command_exists starship; then
|
||||||
|
log_info "Starship already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing Starship..."
|
||||||
|
curl -sSL https://starship.rs/install.sh | sudo sh
|
||||||
|
check_status "Starship installation" "non-critical"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install FZF (Fallback if not installed via DNF)
|
||||||
|
if ! command_exists fzf; then
|
||||||
|
log_info "Installing FZF via git..."
|
||||||
|
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
|
||||||
|
~/.fzf/install --all
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install Zoxide
|
||||||
|
if command_exists zoxide; then
|
||||||
|
log_info "Zoxide already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing Zoxide..."
|
||||||
|
curl -sSL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh
|
||||||
|
check_status "Zoxide installation" "non-critical"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone MyBash
|
||||||
|
log_info "Cloning MyBash configuration..."
|
||||||
|
GITPATH="$HOME/.local/share/mybash"
|
||||||
|
if [ -d "$GITPATH" ]; then
|
||||||
|
rm -rf "$GITPATH"
|
||||||
|
fi
|
||||||
|
mkdir -p "$HOME/.local/share"
|
||||||
|
|
||||||
|
if git clone https://gitea.schantli.ca/jschantli/mybash.git "$GITPATH"; then
|
||||||
|
log_info "MyBash cloned successfully."
|
||||||
|
|
||||||
|
# Link Config
|
||||||
|
log_info "Linking configuration files..."
|
||||||
|
OLD_BASHRC="$HOME/.bashrc"
|
||||||
|
|
||||||
|
# Check if .bashrc exists in the cloned repo
|
||||||
|
if [ -f "$GITPATH/.bashrc" ]; then
|
||||||
|
if [ -e "$OLD_BASHRC" ] && [ ! -e "$HOME/.bashrc.bak" ]; then
|
||||||
|
log_info "Backing up .bashrc to .bashrc.bak..."
|
||||||
|
mv "$OLD_BASHRC" "$HOME/.bashrc.bak"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Linking new .bashrc..."
|
||||||
|
ln -svf "$GITPATH/.bashrc" "$HOME/.bashrc"
|
||||||
|
|
||||||
|
# Ensure Starship is initialized in the new .bashrc
|
||||||
|
if ! grep -q "starship init bash" "$HOME/.bashrc"; then
|
||||||
|
log_warn ".bashrc does not contain starship init. Appending it..."
|
||||||
|
echo 'eval "$(starship init bash)"' >> "$HOME/.bashrc"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_error "$GITPATH/.bashrc not found! Skipping .bashrc linking."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if starship.toml exists in the cloned repo
|
||||||
|
if [ -f "$GITPATH/starship.toml" ]; then
|
||||||
|
log_info "Linking starship.toml..."
|
||||||
|
mkdir -p "$HOME/.config"
|
||||||
|
ln -svf "$GITPATH/starship.toml" "$HOME/.config/starship.toml"
|
||||||
|
else
|
||||||
|
log_warn "$GITPATH/starship.toml not found! Skipping Starship config linking."
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_status "Linking config files" "non-critical"
|
||||||
|
else
|
||||||
|
log_error "Failed to clone MyBash repository. Skipping shell configuration."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_gnome_extensions() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing GNOME extensions"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
# Ensure pipx is installed and path is set
|
||||||
|
if ! command -v pipx &> /dev/null; then
|
||||||
|
log_info "pipx not found. Installing..."
|
||||||
|
sudo dnf install -y pipx
|
||||||
|
pipx ensurepath
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install gnome-extensions-cli
|
||||||
|
log_info "Installing gnome-extensions-cli..."
|
||||||
|
pipx install gnome-extensions-cli --system-site-packages
|
||||||
|
check_status "gnome-extensions-cli installation" "non-critical"
|
||||||
|
|
||||||
|
# Define the tool path explicitly to avoid 'pipx run' overhead/warnings
|
||||||
|
EXTENSION_TOOL="$HOME/.local/bin/gnome-extensions-cli"
|
||||||
|
|
||||||
|
GNOME_EXTENSIONS=(
|
||||||
|
"dash-to-dock@micxgx.gmail.com"
|
||||||
|
"app-grid-wizard@mirzadeh.pro"
|
||||||
|
"appindicatorsupport@rgcjonas.gmail.com"
|
||||||
|
"blur-my-shell@aunetx"
|
||||||
|
"caffeine@patapon.info"
|
||||||
|
"dynamic-music-pill@andbal"
|
||||||
|
"gnome-fuzzy-app-search@gnome-shell-extensions.Czarlie.gitlab.com"
|
||||||
|
"IP-Finder@linxgem33.com"
|
||||||
|
"lan-ip-address@mrhuber.com"
|
||||||
|
"update-extension@purejava.org"
|
||||||
|
"user-theme@gnome-shell-extensions.gcampax.github.com"
|
||||||
|
)
|
||||||
|
|
||||||
|
log_info "Installing GNOME extensions..."
|
||||||
|
log_info "NOTE: A popup may appear asking you to confirm installation for each extension."
|
||||||
|
log_info "If the extension is already installed, no popup will appear."
|
||||||
|
|
||||||
|
for extension in "${GNOME_EXTENSIONS[@]}"; do
|
||||||
|
log_info "Processing $extension..."
|
||||||
|
|
||||||
|
# Install (using the direct binary path)
|
||||||
|
"$EXTENSION_TOOL" install "$extension"
|
||||||
|
|
||||||
|
# Attempt to enable the extension (in case it's installed but disabled)
|
||||||
|
log_info "Ensuring $extension is enabled..."
|
||||||
|
gnome-extensions enable "$extension"
|
||||||
|
|
||||||
|
# Prompt user to press Enter to continue
|
||||||
|
read -p "Press Enter to continue (if a popup appeared, confirm it first)..."
|
||||||
|
|
||||||
|
check_status "GNOME Extension $extension" "non-critical"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Main Menu
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
show_menu() {
|
||||||
|
clear
|
||||||
|
echo "===================================================="
|
||||||
|
echo " Fedora Post-Install Script - Main Menu"
|
||||||
|
echo "===================================================="
|
||||||
|
echo "1. Install Everything (Recommended)"
|
||||||
|
echo "2. Optimize DNF"
|
||||||
|
echo "3. Install Fonts"
|
||||||
|
echo "4. Add Repositories (RPM Fusion)"
|
||||||
|
echo "5. Install Software (DNF & Flatpak)"
|
||||||
|
echo "6. Install CachyOS Kernel"
|
||||||
|
echo "7. Install LinuxToys"
|
||||||
|
echo "8. Install Shell Environment (Starship, MyBash)"
|
||||||
|
echo "9. Install GNOME Extensions"
|
||||||
|
echo "0. Exit"
|
||||||
|
echo "===================================================="
|
||||||
|
read -p "Enter your choice [0-9]: " choice
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Main Execution
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
log_info "Starting Post-install script for Fedora..."
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
# Ensure sudo permissions are available upfront
|
||||||
|
sudo -v
|
||||||
|
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
show_menu
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
optimize_dnf
|
||||||
|
install_fonts
|
||||||
|
install_repos
|
||||||
|
install_software
|
||||||
|
install_cachyos
|
||||||
|
install_linuxtoys
|
||||||
|
install_shell_env
|
||||||
|
install_gnome_extensions
|
||||||
|
log_info "All tasks completed successfully!"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
2) optimize_dnf ;;
|
||||||
|
3) install_fonts ;;
|
||||||
|
4) install_repos ;;
|
||||||
|
5) install_software ;;
|
||||||
|
6) install_cachyos ;;
|
||||||
|
7) install_linuxtoys ;;
|
||||||
|
8) install_shell_env ;;
|
||||||
|
9) install_gnome_extensions ;;
|
||||||
|
0)
|
||||||
|
log_info "Exiting..."
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_error "Invalid option. Please try again."
|
||||||
|
sleep 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "$choice" != "1" ]; then
|
||||||
|
read -p "Press Enter to return to the main menu..."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Post-install script completed successfully!"
|
||||||
|
log_info "Please restart your shell or run 'source ~/.bashrc' to see the changes."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
@@ -0,0 +1,425 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Post install script for Bazzite (Fedora Atomic)
|
||||||
|
# Author: Jacob Schantli
|
||||||
|
# Version: 0.1
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Global Configuration
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Note: Packages like Steam, Lutris, Git, and Distrobox are pre-installed on Bazzite.
|
||||||
|
SYSTEM_PACKAGES=(
|
||||||
|
"gnome-tweaks"
|
||||||
|
"btop"
|
||||||
|
"fastfetch"
|
||||||
|
"jstest-gtk"
|
||||||
|
"yaru-icon-theme"
|
||||||
|
"pipx"
|
||||||
|
"bash-completion"
|
||||||
|
"bat"
|
||||||
|
"tree"
|
||||||
|
"fzf"
|
||||||
|
"syncthing"
|
||||||
|
)
|
||||||
|
|
||||||
|
FLATPAK_PACKAGES=(
|
||||||
|
"com.discordapp.Discord"
|
||||||
|
"com.github.tchx84.Flatseal"
|
||||||
|
"net.nokyan.Resources"
|
||||||
|
"com.mattjakeman.ExtensionManager"
|
||||||
|
"io.github.realmazharhussain.GdmSettings"
|
||||||
|
"com.ranfdev.DistroShelf"
|
||||||
|
"it.mijorus.gearlever"
|
||||||
|
"io.github.fastrizwaan.WineZGUI"
|
||||||
|
"com.vysp3r.ProtonPlus"
|
||||||
|
"io.missioncenter.MissionCenter"
|
||||||
|
"io.github.peazip.PeaZip"
|
||||||
|
"app.devsuite.Ptyxis"
|
||||||
|
"re.sonny.Junction"
|
||||||
|
"com.github.rafostar.Clapper"
|
||||||
|
"io.github.flattool.Ignition"
|
||||||
|
"io.github.swordpuffin.rewaita"
|
||||||
|
"page.tesk.Refine"
|
||||||
|
"io.gitlab.adhami3310.Converter"
|
||||||
|
"com.usebottles.bottles"
|
||||||
|
"com.bambulab.BambuStudio"
|
||||||
|
"com.collaboraoffice.Office"
|
||||||
|
"org.mozilla.Thunderbird"
|
||||||
|
"io.github.martchus.syncthingtray"
|
||||||
|
"io.github.kolunmi.Bazaar"
|
||||||
|
)
|
||||||
|
|
||||||
|
GNOME_EXTENSIONS=(
|
||||||
|
"dash-to-dock@micxgx.gmail.com"
|
||||||
|
"app-grid-wizard@mirzadeh.pro"
|
||||||
|
"appindicatorsupport@rgcjonas.gmail.com"
|
||||||
|
"blur-my-shell@aunetx"
|
||||||
|
"caffeine@patapon.info"
|
||||||
|
"dynamic-music-pill@andbal"
|
||||||
|
"gnome-fuzzy-app-search@gnome-shell-extensions.Czarlie.gitlab.com"
|
||||||
|
"IP-Finder@linxgem33.com"
|
||||||
|
"lan-ip-address@mrhuber.com"
|
||||||
|
"update-extension@purejava.org"
|
||||||
|
"user-theme@gnome-shell-extensions.gcampax.github.com"
|
||||||
|
)
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Helper Functions
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Colors for output
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
log_info() {
|
||||||
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warn() {
|
||||||
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
command_exists() {
|
||||||
|
command -v "$1" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if the last command was successful
|
||||||
|
check_status() {
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_info "$1 successful."
|
||||||
|
else
|
||||||
|
log_error "$1 failed."
|
||||||
|
# If the second argument is "critical", exit the script
|
||||||
|
if [ "$2" == "critical" ]; then
|
||||||
|
log_error "Critical error encountered. Exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Installation Functions
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
install_fonts() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Microsoft Core Fonts and Meslo Nerd Font."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
log_info "Updating system (rpm-ostree upgrade)..."
|
||||||
|
sudo rpm-ostree upgrade
|
||||||
|
check_status "System upgrade" "non-critical"
|
||||||
|
|
||||||
|
log_info "Installing Microsoft Core Fonts..."
|
||||||
|
if rpm -q msttcore-fonts-installer > /dev/null 2>&1; then
|
||||||
|
log_warn "Microsoft Core Fonts already installed."
|
||||||
|
else
|
||||||
|
sudo rpm-ostree install https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm
|
||||||
|
check_status "Microsoft Core Fonts installation" "non-critical"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Installing Meslo Nerd Font..."
|
||||||
|
FONT_NAME="MesloLGS Nerd Font Mono"
|
||||||
|
if fc-list :family | grep -iq "$FONT_NAME"; then
|
||||||
|
log_info "Font '$FONT_NAME' is already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing font '$FONT_NAME'..."
|
||||||
|
FONT_URL="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.zip"
|
||||||
|
FONT_DIR="$HOME/.local/share/fonts"
|
||||||
|
TEMP_DIR=$(mktemp -d)
|
||||||
|
|
||||||
|
wget -O "$TEMP_DIR/$FONT_NAME.zip" "$FONT_URL"
|
||||||
|
unzip "$TEMP_DIR/$FONT_NAME.zip" -d "$TEMP_DIR"
|
||||||
|
mkdir -p "$FONT_DIR/$FONT_NAME"
|
||||||
|
mv "$TEMP_DIR"/*.ttf "$FONT_DIR/$FONT_NAME/"
|
||||||
|
|
||||||
|
fc-cache -fv
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
check_status "Meslo Nerd Font installation" "non-critical"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_software() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing most used software."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
log_info "Installing System packages via rpm-ostree..."
|
||||||
|
local PKGS_TO_INSTALL=()
|
||||||
|
for pkg in "${SYSTEM_PACKAGES[@]}"; do
|
||||||
|
if rpm -q "$pkg" > /dev/null 2>&1; then
|
||||||
|
log_info "$pkg is already installed."
|
||||||
|
else
|
||||||
|
PKGS_TO_INSTALL+=("$pkg")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ ${#PKGS_TO_INSTALL[@]} -gt 0 ]; then
|
||||||
|
log_info "Installing: ${PKGS_TO_INSTALL[*]}"
|
||||||
|
sudo rpm-ostree install ${PKGS_TO_INSTALL[@]}
|
||||||
|
check_status "System packages installation" "non-critical"
|
||||||
|
else
|
||||||
|
log_info "All system packages are already installed."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure flatpak is set up
|
||||||
|
if ! command -v flatpak &> /dev/null; then
|
||||||
|
log_info "Flatpak not found. Installing..."
|
||||||
|
sudo rpm-ostree install flatpak
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Adding Flathub remote..."
|
||||||
|
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||||
|
check_status "Flathub remote add" "non-critical"
|
||||||
|
|
||||||
|
log_info "Installing Flatpak packages..."
|
||||||
|
for app in "${FLATPAK_PACKAGES[@]}"; do
|
||||||
|
log_info "Installing $app..."
|
||||||
|
flatpak install flathub -y "$app"
|
||||||
|
check_status "Flatpak $app" "non-critical"
|
||||||
|
done
|
||||||
|
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Homebrew and Gemini CLI"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
# Install Homebrew
|
||||||
|
if command_exists brew; then
|
||||||
|
log_info "Homebrew already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing Homebrew..."
|
||||||
|
# Using NONINTERACTIVE=1 to avoid prompts during brew install
|
||||||
|
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
|
|
||||||
|
# Add brew to path for the current session
|
||||||
|
if [ -d "/home/linuxbrew/.linuxbrew/bin" ]; then
|
||||||
|
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
||||||
|
elif [ -d "$HOME/.linuxbrew/bin" ]; then
|
||||||
|
eval "$($HOME/.linuxbrew/bin/brew shellenv)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_status "Homebrew installation" "non-critical"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install Gemini CLI
|
||||||
|
log_info "Installing gemini-cli via Homebrew..."
|
||||||
|
brew install gemini-cli
|
||||||
|
check_status "gemini-cli installation" "non-critical"
|
||||||
|
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing 1Password"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
if rpm -q 1password > /dev/null 2>&1; then
|
||||||
|
log_info "1Password already installed."
|
||||||
|
else
|
||||||
|
log_info "Downloading and installing 1Password..."
|
||||||
|
sudo rpm-ostree install https://downloads.1password.com/linux/rpm/stable/x86_64/1password-latest.rpm
|
||||||
|
sudo rpm-ostree install 1password-cli
|
||||||
|
check_status "1Password installation" "non-critical"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_shell_env() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Shell Environment (Starship, FZF, Zoxide, MyBash)"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
# Install Starship
|
||||||
|
if command_exists starship; then
|
||||||
|
log_info "Starship already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing Starship to ~/.local/bin..."
|
||||||
|
# Bazzite's /usr/local/bin might be read-only so we install into user directory
|
||||||
|
mkdir -p ~/.local/bin
|
||||||
|
curl -sSL https://starship.rs/install.sh | sh -s -- -b ~/.local/bin -y
|
||||||
|
check_status "Starship installation" "non-critical"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install FZF (Fallback if not installed via base system)
|
||||||
|
if ! command_exists fzf; then
|
||||||
|
log_info "Installing FZF via git..."
|
||||||
|
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
|
||||||
|
~/.fzf/install --all
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install Zoxide
|
||||||
|
if command_exists zoxide; then
|
||||||
|
log_info "Zoxide already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing Zoxide..."
|
||||||
|
curl -sSL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh
|
||||||
|
check_status "Zoxide installation" "non-critical"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone MyBash
|
||||||
|
log_info "Cloning MyBash configuration..."
|
||||||
|
GITPATH="$HOME/.local/share/mybash"
|
||||||
|
if [ -d "$GITPATH" ]; then
|
||||||
|
rm -rf "$GITPATH"
|
||||||
|
fi
|
||||||
|
mkdir -p "$HOME/.local/share"
|
||||||
|
|
||||||
|
if git clone https://gitea.schantli.ca/jschantli/mybash.git "$GITPATH"; then
|
||||||
|
log_info "MyBash cloned successfully."
|
||||||
|
|
||||||
|
# Link Config
|
||||||
|
log_info "Linking configuration files..."
|
||||||
|
OLD_BASHRC="$HOME/.bashrc"
|
||||||
|
|
||||||
|
# Check if .bashrc exists in the cloned repo
|
||||||
|
if [ -f "$GITPATH/.bashrc" ]; then
|
||||||
|
if [ -e "$OLD_BASHRC" ] && [ ! -e "$HOME/.bashrc.bak" ]; then
|
||||||
|
log_info "Backing up .bashrc to .bashrc.bak..."
|
||||||
|
mv "$OLD_BASHRC" "$HOME/.bashrc.bak"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Linking new .bashrc..."
|
||||||
|
ln -svf "$GITPATH/.bashrc" "$HOME/.bashrc"
|
||||||
|
|
||||||
|
# Ensure Starship is initialized in the new .bashrc
|
||||||
|
if ! grep -q "starship init bash" "$HOME/.bashrc"; then
|
||||||
|
log_warn ".bashrc does not contain starship init. Appending it..."
|
||||||
|
echo 'eval "$(starship init bash)"' >> "$HOME/.bashrc"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_error "$GITPATH/.bashrc not found! Skipping .bashrc linking."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if starship.toml exists in the cloned repo
|
||||||
|
if [ -f "$GITPATH/starship.toml" ]; then
|
||||||
|
log_info "Linking starship.toml..."
|
||||||
|
mkdir -p "$HOME/.config"
|
||||||
|
ln -svf "$GITPATH/starship.toml" "$HOME/.config/starship.toml"
|
||||||
|
else
|
||||||
|
log_warn "$GITPATH/starship.toml not found! Skipping Starship config linking."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if config.jsonc exists in the cloned repo
|
||||||
|
if [ -f "$GITPATH/config.jsonc" ]; then
|
||||||
|
log_info "Linking config.jsonc..."
|
||||||
|
mkdir -p "$HOME/.config/fastfetch/"
|
||||||
|
ln -svf "$GITPATH/config.jsonc" "$HOME/.config/fastfetch/config.jsonc"
|
||||||
|
else
|
||||||
|
log_warn "$GITPATH/config.jsonc not found! Skipping fastfetch config linking."
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_status "Linking config files" "non-critical"
|
||||||
|
else
|
||||||
|
log_error "Failed to clone MyBash repository. Skipping shell configuration."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_gnome_extensions() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing GNOME extensions"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
# Ensure pipx is installed and path is set
|
||||||
|
if ! command -v pipx &> /dev/null; then
|
||||||
|
log_info "pipx not found. Installing via rpm-ostree..."
|
||||||
|
sudo rpm-ostree install pipx
|
||||||
|
pipx ensurepath
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install gnome-extensions-cli
|
||||||
|
log_info "Installing gnome-extensions-cli..."
|
||||||
|
pipx install gnome-extensions-cli --system-site-packages
|
||||||
|
check_status "gnome-extensions-cli installation" "non-critical"
|
||||||
|
|
||||||
|
# Define the tool path explicitly to avoid 'pipx run' overhead/warnings
|
||||||
|
EXTENSION_TOOL="$HOME/.local/bin/gnome-extensions-cli"
|
||||||
|
|
||||||
|
log_info "Installing GNOME extensions..."
|
||||||
|
log_info "NOTE: A popup may appear asking you to confirm installation for each extension."
|
||||||
|
log_info "If the extension is already installed, no popup will appear."
|
||||||
|
|
||||||
|
for extension in "${GNOME_EXTENSIONS[@]}"; do
|
||||||
|
log_info "Processing $extension..."
|
||||||
|
|
||||||
|
# Install (using the direct binary path)
|
||||||
|
"$EXTENSION_TOOL" install "$extension"
|
||||||
|
|
||||||
|
# Attempt to enable the extension (in case it's installed but disabled)
|
||||||
|
log_info "Ensuring $extension is enabled..."
|
||||||
|
gnome-extensions enable "$extension"
|
||||||
|
|
||||||
|
# Prompt user to press Enter to continue
|
||||||
|
read -p "Press Enter to continue (if a popup appeared, confirm it first)..."
|
||||||
|
|
||||||
|
check_status "GNOME Extension $extension" "non-critical"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Main Menu
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
show_menu() {
|
||||||
|
clear
|
||||||
|
echo "===================================================="
|
||||||
|
echo " Bazzite Post-Install Script - Main Menu"
|
||||||
|
echo "===================================================="
|
||||||
|
echo "1. Install Everything"
|
||||||
|
echo "2. Install Fonts"
|
||||||
|
echo "3. Install Software (rpm-ostree & Flatpak)"
|
||||||
|
echo "4. Install Shell Environment (Starship, MyBash)"
|
||||||
|
echo "5. Install GNOME Extensions"
|
||||||
|
echo "0. Exit"
|
||||||
|
echo "===================================================="
|
||||||
|
read -p "Enter your choice [0-6]: " choice
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Main Execution
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
log_info "Starting Post-install script for Bazzite..."
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
# Ensure sudo permissions are available upfront
|
||||||
|
sudo -v
|
||||||
|
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
show_menu
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
install_fonts
|
||||||
|
install_software
|
||||||
|
install_shell_env
|
||||||
|
install_gnome_extensions
|
||||||
|
log_info "All tasks completed successfully!"
|
||||||
|
log_warn "IMPORTANT: You MUST REBOOT your system to apply rpm-ostree package installations!"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
2) install_fonts ;;
|
||||||
|
3) install_software ;;
|
||||||
|
4) install_shell_env ;;
|
||||||
|
5) install_gnome_extensions ;;
|
||||||
|
0)
|
||||||
|
log_info "Exiting..."
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_error "Invalid option. Please try again."
|
||||||
|
sleep 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "$choice" != "1" ]; then
|
||||||
|
read -p "Press Enter to return to the main menu..."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Post-install script completed successfully!"
|
||||||
|
log_info "Please restart your shell or run 'source ~/.bashrc' to see the changes."
|
||||||
|
log_warn "If you installed system packages via rpm-ostree, PLEASE REBOOT now."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
+130
@@ -0,0 +1,130 @@
|
|||||||
|
|
||||||
|
{
|
||||||
|
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||||
|
"logo": {
|
||||||
|
"padding": {
|
||||||
|
"top": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"display": {
|
||||||
|
"separator": " "
|
||||||
|
},
|
||||||
|
"modules": [
|
||||||
|
"break",
|
||||||
|
{
|
||||||
|
"type": "os",
|
||||||
|
"key": " DISTRO",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "kernel",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "packages",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "command",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "yellow",
|
||||||
|
"text": "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"key": "│ └",
|
||||||
|
"keyColor": "yellow"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "wm",
|
||||||
|
"key": " DE/WM",
|
||||||
|
"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": "host",
|
||||||
|
"key": " SYSTEM",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "cpu",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "gpu",
|
||||||
|
"key": "│ ├",
|
||||||
|
"format": "{2}",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "display",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green",
|
||||||
|
"compactType": "original-with-refresh-rate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "memory",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "swap",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "uptime",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "green"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "sound",
|
||||||
|
"key": " AUDIO",
|
||||||
|
"format": "{2}",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "player",
|
||||||
|
"key": "│ ├",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "media",
|
||||||
|
"key": "│ └",
|
||||||
|
"keyColor": "magenta"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "custom",
|
||||||
|
"format": "\u001b[90m \u001b[31m \u001b[32m \u001b[33m \u001b[34m \u001b[35m \u001b[36m \u001b[37m \u001b[38m \u001b[39m \u001b[39m \u001b[38m \u001b[37m \u001b[36m \u001b[35m \u001b[34m \u001b[33m \u001b[32m \u001b[31m \u001b[90m "
|
||||||
|
},
|
||||||
|
"break",
|
||||||
|
]
|
||||||
|
}
|
||||||
+228
@@ -0,0 +1,228 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Fedora Post-Install Script</title>
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--bg-color: #121212;
|
||||||
|
--card-bg: #1e1e1e;
|
||||||
|
--text-color: #e0e0e0;
|
||||||
|
--accent-color: #007bff;
|
||||||
|
--accent-hover: #0056b3;
|
||||||
|
--success-color: #28a745;
|
||||||
|
--code-bg: #2d2d2d;
|
||||||
|
--code-text: #a5d6ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
color: var(--text-color);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
padding: 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
background-color: var(--card-bg);
|
||||||
|
padding: 3rem;
|
||||||
|
border-radius: 16px;
|
||||||
|
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
|
||||||
|
text-align: center;
|
||||||
|
max-width: 700px;
|
||||||
|
width: 100%;
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: #ffffff;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-size: 2.5rem;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: -0.5px;
|
||||||
|
background: linear-gradient(45deg, #007bff, #00d4ff);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
line-height: 1.6;
|
||||||
|
margin-bottom: 2.5rem;
|
||||||
|
color: #b0b0b0;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.command-box {
|
||||||
|
background-color: var(--code-bg);
|
||||||
|
padding: 1.2rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid #3d3d3d;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
font-family: "Fira Code", monospace;
|
||||||
|
color: var(--code-text);
|
||||||
|
word-break: break-all;
|
||||||
|
text-align: left;
|
||||||
|
margin-right: 1rem;
|
||||||
|
font-size: 0.95rem;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.copy-btn {
|
||||||
|
background-color: var(--accent-color);
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
padding: 0.6rem 1.2rem;
|
||||||
|
border-radius: 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-weight: 600;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.copy-btn:hover {
|
||||||
|
background-color: var(--accent-hover);
|
||||||
|
transform: translateY(-1px);
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 123, 255, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.copy-btn:active {
|
||||||
|
transform: scale(0.98);
|
||||||
|
}
|
||||||
|
|
||||||
|
.features {
|
||||||
|
text-align: left;
|
||||||
|
margin-top: 2.5rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
color: #ccc;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background: rgba(255, 255, 255, 0.05);
|
||||||
|
padding: 0.8rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
transition: background 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-item:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-icon {
|
||||||
|
color: var(--success-color);
|
||||||
|
margin-right: 0.8rem;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
.container {
|
||||||
|
padding: 1.5rem;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
.command-box {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: stretch;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
.copy-btn {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
code {
|
||||||
|
margin-right: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<!-- Preload fonts for better performance -->
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Fira+Code&display=swap" rel="stylesheet">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1>Fedora Post-Install Script</h1>
|
||||||
|
<p>
|
||||||
|
Supercharge your Fedora workstation in minutes. Optimize performance, install essential apps, and configure a powerful development environment with a single command.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<div class="command-box">
|
||||||
|
<code id="install-cmd">bash <(curl -fsSL https://gitea.schantli.ca/jschantli/Fedora-PIS/raw/branch/main/postinstall.sh)</code>
|
||||||
|
<button class="copy-btn" onclick="copyCommand()">Copy Command</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="features">
|
||||||
|
<div class="feature-item">
|
||||||
|
<span class="feature-icon">⚡</span>
|
||||||
|
<span>Optimized DNF Config</span>
|
||||||
|
</div>
|
||||||
|
<div class="feature-item">
|
||||||
|
<span class="feature-icon">📦</span>
|
||||||
|
<span>Essential Flatpaks</span>
|
||||||
|
</div>
|
||||||
|
<div class="feature-item">
|
||||||
|
<span class="feature-icon">🚀</span>
|
||||||
|
<span>CachyOS Kernel</span>
|
||||||
|
</div>
|
||||||
|
<div class="feature-item">
|
||||||
|
<span class="feature-icon">🐚</span>
|
||||||
|
<span>Starship + MyBash</span>
|
||||||
|
</div>
|
||||||
|
<div class="feature-item">
|
||||||
|
<span class="feature-icon">🧩</span>
|
||||||
|
<span>GNOME Extensions</span>
|
||||||
|
</div>
|
||||||
|
<div class="feature-item">
|
||||||
|
<span class="feature-icon">🛠️</span>
|
||||||
|
<span>Dev Tools (Git, FZF)</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function copyCommand() {
|
||||||
|
const commandText = document.getElementById('install-cmd').innerText;
|
||||||
|
const btn = document.querySelector('.copy-btn');
|
||||||
|
|
||||||
|
navigator.clipboard.writeText(commandText).then(() => {
|
||||||
|
const originalText = btn.innerText;
|
||||||
|
const originalBg = btn.style.backgroundColor;
|
||||||
|
|
||||||
|
btn.innerText = 'Copied!';
|
||||||
|
btn.style.backgroundColor = 'var(--success-color)';
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
btn.innerText = originalText;
|
||||||
|
btn.style.backgroundColor = ''; // Reset to CSS default
|
||||||
|
}, 2000);
|
||||||
|
}).catch(err => {
|
||||||
|
console.error('Failed to copy: ', err);
|
||||||
|
alert('Failed to copy command. Please select and copy manually.');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,525 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Post install script for openSUSE
|
||||||
|
# Author: Jacob Schantli
|
||||||
|
# Version: 1.0
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Global Configuration
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ZYPPER_PACKAGES=(
|
||||||
|
"gnome-tweaks"
|
||||||
|
"steam"
|
||||||
|
"lutris"
|
||||||
|
"btop"
|
||||||
|
"fastfetch"
|
||||||
|
"jstest-gtk"
|
||||||
|
"distrobox"
|
||||||
|
"python3-pipx"
|
||||||
|
"bash-completion"
|
||||||
|
"tar"
|
||||||
|
"bat"
|
||||||
|
"tree"
|
||||||
|
"unzip"
|
||||||
|
"git"
|
||||||
|
"fzf"
|
||||||
|
"syncthing"
|
||||||
|
"mpv"
|
||||||
|
"fuse"
|
||||||
|
"fuse3"
|
||||||
|
"nodejs"
|
||||||
|
)
|
||||||
|
|
||||||
|
FLATPAK_PACKAGES=(
|
||||||
|
"com.github.tchx84.Flatseal"
|
||||||
|
"net.nokyan.Resources"
|
||||||
|
"com.mattjakeman.ExtensionManager"
|
||||||
|
"io.github.realmazharhussain.GdmSettings"
|
||||||
|
"com.ranfdev.DistroShelf"
|
||||||
|
"it.mijorus.gearlever"
|
||||||
|
"io.github.fastrizwaan.WineZGUI"
|
||||||
|
"com.vysp3r.ProtonPlus"
|
||||||
|
"io.missioncenter.MissionCenter"
|
||||||
|
"io.github.peazip.PeaZip"
|
||||||
|
"app.devsuite.Ptyxis"
|
||||||
|
"re.sonny.Junction"
|
||||||
|
"com.github.rafostar.Clapper"
|
||||||
|
"io.github.flattool.Ignition"
|
||||||
|
"io.github.swordpuffin.rewaita"
|
||||||
|
"page.tesk.Refine"
|
||||||
|
"io.gitlab.adhami3310.Converter"
|
||||||
|
"com.usebottles.bottles"
|
||||||
|
"com.bambulab.BambuStudio"
|
||||||
|
"com.collaboraoffice.Office"
|
||||||
|
"io.github.martchus.syncthingtray"
|
||||||
|
"io.github.kolunmi.Bazaar"
|
||||||
|
"com.fastmail.Fastmail"
|
||||||
|
)
|
||||||
|
|
||||||
|
GNOME_EXTENSIONS=(
|
||||||
|
"dash-to-dock@micxgx.gmail.com"
|
||||||
|
"app-grid-wizard@mirzadeh.pro"
|
||||||
|
"appindicatorsupport@rgcjonas.gmail.com"
|
||||||
|
"blur-my-shell@aunetx"
|
||||||
|
"caffeine@patapon.info"
|
||||||
|
"dynamic-music-pill@andbal"
|
||||||
|
"gnome-fuzzy-app-search@gnome-shell-extensions.Czarlie.gitlab.com"
|
||||||
|
"IP-Finder@linxgem33.com"
|
||||||
|
"lan-ip-address@mrhuber.com"
|
||||||
|
"update-extension@purejava.org"
|
||||||
|
"user-theme@gnome-shell-extensions.gcampax.github.com"
|
||||||
|
"gnome-wallpaper-engine@gjs.com.zip"
|
||||||
|
)
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Helper Functions
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Colors for output
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
log_info() {
|
||||||
|
echo -e "${GREEN}[INFO]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
log_warn() {
|
||||||
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
command_exists() {
|
||||||
|
command -v "$1" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if the last command was successful
|
||||||
|
check_status() {
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
log_info "$1 successful."
|
||||||
|
else
|
||||||
|
log_error "$1 failed."
|
||||||
|
# If the second argument is "critical", exit the script
|
||||||
|
if [ "$2" == "critical" ]; then
|
||||||
|
log_error "Critical error encountered. Exiting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Append text to a file if it doesn't already exist
|
||||||
|
append_to_file_if_missing() {
|
||||||
|
local file="$1"
|
||||||
|
local text="$2"
|
||||||
|
local description="$3"
|
||||||
|
local use_sudo="$4"
|
||||||
|
|
||||||
|
if grep -Fq "$text" "$file"; then
|
||||||
|
log_warn "$description already exists in $file. Skipping."
|
||||||
|
else
|
||||||
|
if [ "$use_sudo" == "true" ]; then
|
||||||
|
echo "$text" | sudo tee -a "$file" > /dev/null
|
||||||
|
else
|
||||||
|
echo "$text" >> "$file"
|
||||||
|
fi
|
||||||
|
log_info "Added $description to $file."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Installation Functions
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
optimize_zypper() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Modifying /etc/zypp/zypp.conf for faster downloads."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
ZYPP_CONF="/etc/zypp/zypp.conf"
|
||||||
|
if [ -f "$ZYPP_CONF" ]; then
|
||||||
|
if grep -q "^# download.max_concurrent_connections" "$ZYPP_CONF" || ! grep -q "download.max_concurrent_connections = 10" "$ZYPP_CONF"; then
|
||||||
|
sudo sed -i 's/^# download.max_concurrent_connections.*/download.max_concurrent_connections = 10/' "$ZYPP_CONF"
|
||||||
|
log_info "Enabled max concurrent connections."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_warn "$ZYPP_CONF not found!"
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
}
|
||||||
|
|
||||||
|
install_fonts() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Microsoft Core Fonts and Meslo Nerd Font."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
log_info "Updating system and installing prerequisites..."
|
||||||
|
sudo zypper refresh
|
||||||
|
sudo zypper --non-interactive update
|
||||||
|
check_status "System upgrade" "critical"
|
||||||
|
|
||||||
|
sudo zypper install -y curl cabextract fontconfig wget fetchmsttfonts
|
||||||
|
check_status "Prerequisites installation" "critical"
|
||||||
|
|
||||||
|
log_info "Installing Meslo Nerd Font..."
|
||||||
|
FONT_NAME="MesloLGS Nerd Font Mono"
|
||||||
|
if fc-list :family | grep -iq "$FONT_NAME"; then
|
||||||
|
log_info "Font '$FONT_NAME' is already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing font '$FONT_NAME'..."
|
||||||
|
FONT_URL="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/Meslo.zip"
|
||||||
|
FONT_DIR="$HOME/.local/share/fonts"
|
||||||
|
TEMP_DIR=$(mktemp -d)
|
||||||
|
|
||||||
|
wget -O "$TEMP_DIR/$FONT_NAME.zip" "$FONT_URL"
|
||||||
|
unzip "$TEMP_DIR/$FONT_NAME.zip" -d "$TEMP_DIR"
|
||||||
|
mkdir -p "$FONT_DIR/$FONT_NAME"
|
||||||
|
mv "$TEMP_DIR"/*.ttf "$FONT_DIR/$FONT_NAME/"
|
||||||
|
|
||||||
|
fc-cache -fv
|
||||||
|
rm -rf "$TEMP_DIR"
|
||||||
|
check_status "Meslo Nerd Font installation" "non-critical"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_repos() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Adding Packman repository."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
sudo zypper addrepo -cfp 90 'https://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Tumbleweed/' packman
|
||||||
|
sudo zypper refresh
|
||||||
|
sudo zypper --non-interactive dist-upgrade --from packman --allow-vendor-change
|
||||||
|
check_status "Packman repository installation" "non-critical"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_software() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing most used software."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
log_info "Installing Zypper packages..."
|
||||||
|
sudo zypper install -y "${ZYPPER_PACKAGES[@]}"
|
||||||
|
check_status "Zypper packages installation" "non-critical"
|
||||||
|
|
||||||
|
# Ensure flatpak is set up
|
||||||
|
if ! command -v flatpak &> /dev/null; then
|
||||||
|
log_info "Flatpak not found. Installing..."
|
||||||
|
sudo zypper install -y flatpak
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Adding Flathub remote..."
|
||||||
|
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||||
|
check_status "Flathub remote add" "non-critical"
|
||||||
|
|
||||||
|
log_info "Installing Flatpak packages..."
|
||||||
|
for app in "${FLATPAK_PACKAGES[@]}"; do
|
||||||
|
log_info "Installing $app..."
|
||||||
|
flatpak install flathub -y "$app"
|
||||||
|
check_status "Flatpak $app" "non-critical"
|
||||||
|
done
|
||||||
|
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Homebrew and Gemini CLI"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
# Install Homebrew
|
||||||
|
if command_exists brew; then
|
||||||
|
log_info "Homebrew already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing Homebrew..."
|
||||||
|
# Using NONINTERACTIVE=1 to avoid prompts during brew install
|
||||||
|
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
|
|
||||||
|
# Add brew to path for the current session
|
||||||
|
if [ -d "/home/linuxbrew/.linuxbrew/bin" ]; then
|
||||||
|
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
||||||
|
elif [ -d "$HOME/.linuxbrew/bin" ]; then
|
||||||
|
eval "$($HOME/.linuxbrew/bin/brew shellenv)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_status "Homebrew installation" "non-critical"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install Gemini CLI
|
||||||
|
log_info "Installing gemini-cli via Homebrew..."
|
||||||
|
brew install gemini-cli
|
||||||
|
check_status "gemini-cli installation" "non-critical"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_discord() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Discord"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
if rpm -q discord > /dev/null 2>&1; then
|
||||||
|
log_info "Discord already installed."
|
||||||
|
else
|
||||||
|
log_info "Downloading and installing Discord..."
|
||||||
|
sudo zypper install -y "https://discord.com/api/download?platform=linux&format=rpm"
|
||||||
|
check_status "Discord installation" "non-critical"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_1password() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing 1Password"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
if rpm -q 1password > /dev/null 2>&1; then
|
||||||
|
log_info "1Password already installed."
|
||||||
|
else
|
||||||
|
log_info "Downloading and installing 1Password..."
|
||||||
|
sudo rpm --import https://downloads.1password.com/linux/keys/1password.asc
|
||||||
|
sudo zypper addrepo https://downloads.1password.com/linux/rpm/stable/x86_64 1password
|
||||||
|
sudo zypper install -y 1password
|
||||||
|
check_status "1Password installation" "non-critical"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_Windscribe() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Windscribe"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
if rpm -q windscribe-cli > /dev/null 2>&1 || command_exists windscribe; then
|
||||||
|
log_info "Windscribe already installed."
|
||||||
|
else
|
||||||
|
log_info "Downloading and installing Windscribe..."
|
||||||
|
sudo zypper install -y https://windscribe.com/install/desktop/linux_rpm_x64
|
||||||
|
check_status "Windscribe installation" "non-critical"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_linuxtoys() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing LinuxToys"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
curl -fsSL https://linux.toys/install.sh | bash
|
||||||
|
check_status "LinuxToys installation" "non-critical"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_shell_env() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Shell Environment (Starship, FZF, Zoxide, MyBash)"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
# Install Starship
|
||||||
|
if command_exists starship; then
|
||||||
|
log_info "Starship already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing Starship..."
|
||||||
|
curl -sSL https://starship.rs/install.sh | sudo sh
|
||||||
|
check_status "Starship installation" "non-critical"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install FZF (Fallback if not installed via Zypper)
|
||||||
|
if ! command_exists fzf; then
|
||||||
|
log_info "Installing FZF via git..."
|
||||||
|
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
|
||||||
|
~/.fzf/install --all
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install Zoxide
|
||||||
|
if command_exists zoxide; then
|
||||||
|
log_info "Zoxide already installed."
|
||||||
|
else
|
||||||
|
log_info "Installing Zoxide..."
|
||||||
|
curl -sSL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh
|
||||||
|
check_status "Zoxide installation" "non-critical"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone MyBash
|
||||||
|
log_info "Cloning MyBash configuration..."
|
||||||
|
GITPATH="$HOME/.local/share/mybash"
|
||||||
|
if [ -d "$GITPATH" ]; then
|
||||||
|
rm -rf "$GITPATH"
|
||||||
|
fi
|
||||||
|
mkdir -p "$HOME/.local/share"
|
||||||
|
|
||||||
|
if git clone https://gitea.schantli.ca/jschantli/mybash.git "$GITPATH"; then
|
||||||
|
log_info "MyBash cloned successfully."
|
||||||
|
|
||||||
|
# Link Config
|
||||||
|
log_info "Linking configuration files..."
|
||||||
|
OLD_BASHRC="$HOME/.bashrc"
|
||||||
|
|
||||||
|
# Check if .bashrc exists in the cloned repo
|
||||||
|
if [ -f "$GITPATH/.bashrc" ]; then
|
||||||
|
if [ -e "$OLD_BASHRC" ] && [ ! -e "$HOME/.bashrc.bak" ]; then
|
||||||
|
log_info "Backing up .bashrc to .bashrc.bak..."
|
||||||
|
mv "$OLD_BASHRC" "$HOME/.bashrc.bak"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "Linking new .bashrc..."
|
||||||
|
ln -svf "$GITPATH/.bashrc" "$HOME/.bashrc"
|
||||||
|
|
||||||
|
# Ensure Starship is initialized in the new .bashrc
|
||||||
|
if ! grep -q "starship init bash" "$HOME/.bashrc"; then
|
||||||
|
log_warn ".bashrc does not contain starship init. Appending it..."
|
||||||
|
echo 'eval "$(starship init bash)"' >> "$HOME/.bashrc"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_error "$GITPATH/.bashrc not found! Skipping .bashrc linking."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if starship.toml exists in the cloned repo
|
||||||
|
if [ -f "$GITPATH/starship.toml" ]; then
|
||||||
|
log_info "Linking starship.toml..."
|
||||||
|
mkdir -p "$HOME/.config"
|
||||||
|
ln -svf "$GITPATH/starship.toml" "$HOME/.config/starship.toml"
|
||||||
|
else
|
||||||
|
log_warn "$GITPATH/starship.toml not found! Skipping Starship config linking."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if config.jsonc exists in the cloned repo
|
||||||
|
if [ -f "$GITPATH/config.jsonc" ]; then
|
||||||
|
log_info "Linking config.jsonc..."
|
||||||
|
mkdir -p "$HOME/.config/fastfetch/"
|
||||||
|
ln -svf "$GITPATH/config.jsonc" "$HOME/.config/fastfetch/config.jsonc"
|
||||||
|
else
|
||||||
|
log_warn "$GITPATH/config.jsonc not found! Skipping fastfetch config linking."
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_status "Linking config files" "non-critical"
|
||||||
|
else
|
||||||
|
log_error "Failed to clone MyBash repository. Skipping shell configuration."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_topgrade() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Topgrade"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
sudo zypper install -y topgrade
|
||||||
|
check_status "Topgrade installation" "non-critical"
|
||||||
|
}
|
||||||
|
|
||||||
|
install_gnome_extensions() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing GNOME extensions"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
# Ensure pipx is installed and path is set
|
||||||
|
if ! command -v pipx &> /dev/null; then
|
||||||
|
log_info "pipx not found. Installing..."
|
||||||
|
sudo zypper install -y python3-pipx
|
||||||
|
pipx ensurepath
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install gnome-extensions-cli
|
||||||
|
log_info "Installing gnome-extensions-cli..."
|
||||||
|
pipx install gnome-extensions-cli --system-site-packages
|
||||||
|
check_status "gnome-extensions-cli installation" "non-critical"
|
||||||
|
|
||||||
|
# Define the tool path explicitly to avoid 'pipx run' overhead/warnings
|
||||||
|
EXTENSION_TOOL="$HOME/.local/bin/gnome-extensions-cli"
|
||||||
|
|
||||||
|
log_info "Installing GNOME extensions..."
|
||||||
|
log_info "NOTE: A popup may appear asking you to confirm installation for each extension."
|
||||||
|
log_info "If the extension is already installed, no popup will appear."
|
||||||
|
|
||||||
|
for extension in "${GNOME_EXTENSIONS[@]}"; do
|
||||||
|
log_info "Processing $extension..."
|
||||||
|
|
||||||
|
# Install (using the direct binary path)
|
||||||
|
"$EXTENSION_TOOL" install "$extension"
|
||||||
|
|
||||||
|
# Attempt to enable the extension (in case it's installed but disabled)
|
||||||
|
log_info "Ensuring $extension is enabled..."
|
||||||
|
gnome-extensions enable "$extension"
|
||||||
|
|
||||||
|
# Prompt user to press Enter to continue
|
||||||
|
read -p "Press Enter to continue (if a popup appeared, confirm it first)..."
|
||||||
|
|
||||||
|
check_status "GNOME Extension $extension" "non-critical"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Main Menu
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
show_menu() {
|
||||||
|
clear
|
||||||
|
echo "===================================================="
|
||||||
|
echo " openSUSE Post-Install Script - Main Menu"
|
||||||
|
echo "===================================================="
|
||||||
|
echo "1. Install Everything (Recommended)"
|
||||||
|
echo "2. Optimize Zypper"
|
||||||
|
echo "3. Install Fonts"
|
||||||
|
echo "4. Add Repositories (Packman)"
|
||||||
|
echo "5. Install Software (Zypper & Flatpak)"
|
||||||
|
echo "6. Install LinuxToys"
|
||||||
|
echo "7. Install Shell Environment (Starship, MyBash)"
|
||||||
|
echo "8. Install GNOME Extensions"
|
||||||
|
echo "9. Install Discord"
|
||||||
|
echo "10. Install 1Password"
|
||||||
|
echo "11. Install Windscribe"
|
||||||
|
echo "12. Install Topgrade"
|
||||||
|
echo "0. Exit"
|
||||||
|
echo "===================================================="
|
||||||
|
read -p "Enter your choice [0-12]: " choice
|
||||||
|
}
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Main Execution
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
log_info "Starting Post-install script for openSUSE..."
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
# Ensure sudo permissions are available upfront
|
||||||
|
sudo -v
|
||||||
|
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
show_menu
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
optimize_zypper
|
||||||
|
install_fonts
|
||||||
|
install_repos
|
||||||
|
install_software
|
||||||
|
install_discord
|
||||||
|
install_1password
|
||||||
|
install_Windscribe
|
||||||
|
install_topgrade
|
||||||
|
install_linuxtoys
|
||||||
|
install_shell_env
|
||||||
|
install_gnome_extensions
|
||||||
|
log_info "All tasks completed successfully!"
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
2) optimize_zypper ;;
|
||||||
|
3) install_fonts ;;
|
||||||
|
4) install_repos ;;
|
||||||
|
5) install_software ;;
|
||||||
|
6) install_linuxtoys ;;
|
||||||
|
7) install_shell_env ;;
|
||||||
|
8) install_gnome_extensions ;;
|
||||||
|
9) install_discord ;;
|
||||||
|
10) install_1password ;;
|
||||||
|
11) install_Windscribe ;;
|
||||||
|
12) install_topgrade ;;
|
||||||
|
0)
|
||||||
|
log_info "Exiting..."
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log_error "Invalid option. Please try again."
|
||||||
|
sleep 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "$choice" != "1" ]; then
|
||||||
|
read -p "Press Enter to return to the main menu..."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Post-install script completed successfully!"
|
||||||
|
log_info "Please restart your shell or run 'source ~/.bashrc' to see the changes."
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
+82
-14
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
# Post install script for Fedora
|
# Post install script for Fedora
|
||||||
# Author: Jacob Schantli
|
# Author: Jacob Schantli
|
||||||
# Version: 0.90
|
# Version: 1.0
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
# Global Configuration
|
# Global Configuration
|
||||||
@@ -26,12 +26,13 @@ DNF_PACKAGES=(
|
|||||||
"git"
|
"git"
|
||||||
"fzf"
|
"fzf"
|
||||||
"syncthing"
|
"syncthing"
|
||||||
|
"mpv"
|
||||||
"fuse"
|
"fuse"
|
||||||
"fuse-libs"
|
"fuse-libs"
|
||||||
|
"nodejs"
|
||||||
)
|
)
|
||||||
|
|
||||||
FLATPAK_PACKAGES=(
|
FLATPAK_PACKAGES=(
|
||||||
"com.discordapp.Discord"
|
|
||||||
"com.github.tchx84.Flatseal"
|
"com.github.tchx84.Flatseal"
|
||||||
"net.nokyan.Resources"
|
"net.nokyan.Resources"
|
||||||
"com.mattjakeman.ExtensionManager"
|
"com.mattjakeman.ExtensionManager"
|
||||||
@@ -49,18 +50,16 @@ FLATPAK_PACKAGES=(
|
|||||||
"io.github.swordpuffin.rewaita"
|
"io.github.swordpuffin.rewaita"
|
||||||
"page.tesk.Refine"
|
"page.tesk.Refine"
|
||||||
"io.gitlab.adhami3310.Converter"
|
"io.gitlab.adhami3310.Converter"
|
||||||
"com.bitwarden.desktop"
|
|
||||||
"com.usebottles.bottles"
|
"com.usebottles.bottles"
|
||||||
"com.ulaa.Ulaa"
|
|
||||||
"com.bambulab.BambuStudio"
|
"com.bambulab.BambuStudio"
|
||||||
"com.collaboraoffice.Office"
|
"com.collaboraoffice.Office"
|
||||||
"org.mozilla.Thunderbird"
|
|
||||||
"io.github.martchus.syncthingtray"
|
"io.github.martchus.syncthingtray"
|
||||||
"io.github.kolunmi.Bazaar"
|
"io.github.kolunmi.Bazaar"
|
||||||
|
"com.fastmail.Fastmail"
|
||||||
)
|
)
|
||||||
|
|
||||||
GNOME_EXTENSIONS=(
|
GNOME_EXTENSIONS=(
|
||||||
"dash-to-dock@micxgx.gmail.com"
|
"dhruva@narkagni"
|
||||||
"app-grid-wizard@mirzadeh.pro"
|
"app-grid-wizard@mirzadeh.pro"
|
||||||
"appindicatorsupport@rgcjonas.gmail.com"
|
"appindicatorsupport@rgcjonas.gmail.com"
|
||||||
"blur-my-shell@aunetx"
|
"blur-my-shell@aunetx"
|
||||||
@@ -71,6 +70,7 @@ GNOME_EXTENSIONS=(
|
|||||||
"lan-ip-address@mrhuber.com"
|
"lan-ip-address@mrhuber.com"
|
||||||
"update-extension@purejava.org"
|
"update-extension@purejava.org"
|
||||||
"user-theme@gnome-shell-extensions.gcampax.github.com"
|
"user-theme@gnome-shell-extensions.gcampax.github.com"
|
||||||
|
"gnome-wallpaper-engine@gjs.com.zip"
|
||||||
)
|
)
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
@@ -199,8 +199,8 @@ install_repos() {
|
|||||||
log_info "----------------------------------------------------"
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
sudo dnf install -y \
|
sudo dnf install -y \
|
||||||
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
|
"https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm" \
|
||||||
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
|
"https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm"
|
||||||
check_status "RPM Fusion repositories installation" "non-critical"
|
check_status "RPM Fusion repositories installation" "non-critical"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,6 +213,11 @@ install_software() {
|
|||||||
sudo dnf install -y "${DNF_PACKAGES[@]}"
|
sudo dnf install -y "${DNF_PACKAGES[@]}"
|
||||||
check_status "DNF packages installation" "non-critical"
|
check_status "DNF packages installation" "non-critical"
|
||||||
|
|
||||||
|
# Install Gemini CLI
|
||||||
|
log_info "Installing gemini-cli via Homebrew..."
|
||||||
|
npm i @google/gemini-cli
|
||||||
|
check_status "gemini-cli installation" "non-critical"
|
||||||
|
|
||||||
# Ensure flatpak is set up
|
# Ensure flatpak is set up
|
||||||
if ! command -v flatpak &> /dev/null; then
|
if ! command -v flatpak &> /dev/null; then
|
||||||
log_info "Flatpak not found. Installing..."
|
log_info "Flatpak not found. Installing..."
|
||||||
@@ -252,10 +257,45 @@ install_software() {
|
|||||||
check_status "Homebrew installation" "non-critical"
|
check_status "Homebrew installation" "non-critical"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install Gemini CLI
|
}
|
||||||
log_info "Installing gemini-cli via Homebrew..."
|
|
||||||
brew install gemini-cli
|
install_discord() {
|
||||||
check_status "gemini-cli installation" "non-critical"
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Discord"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
if rpm -q discord > /dev/null 2>&1; then
|
||||||
|
log_info "Discord already installed."
|
||||||
|
else
|
||||||
|
log_info "Downloading and installing Discord..."
|
||||||
|
sudo dnf install -y "https://discord.com/api/download?platform=linux&format=rpm"
|
||||||
|
check_status "Discord installation" "non-critical"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_1password() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing 1Password"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
if rpm -q 1password > /dev/null 2>&1; then
|
||||||
|
log_info "1Password already installed."
|
||||||
|
else
|
||||||
|
log_info "Downloading and installing 1Password..."
|
||||||
|
sudo dnf install -y https://downloads.1password.com/linux/rpm/stable/x86_64/1password-latest.rpm
|
||||||
|
check_status "1Password installation" "non-critical"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
install_Windscribe() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Windscribe"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
if rpm -q windscribe-cli > /dev/null 2>&1 || command_exists windscribe; then
|
||||||
|
log_info "Windscribe already installed."
|
||||||
|
else
|
||||||
|
log_info "Downloading and installing Windscribe..."
|
||||||
|
sudo dnf install -y https://windscribe.com/install/desktop/linux_rpm_x64
|
||||||
|
check_status "Windscribe installation" "non-critical"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
install_cachyos() {
|
install_cachyos() {
|
||||||
@@ -375,6 +415,18 @@ install_shell_env() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
install_topgrade() {
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
log_info "Installing Topgrade"
|
||||||
|
log_info "----------------------------------------------------"
|
||||||
|
|
||||||
|
sudo dnf copr enable lilay/topgrade
|
||||||
|
check_status "Enabling Topgrade" "non-critical"
|
||||||
|
|
||||||
|
sudo dnf install -y topgrade
|
||||||
|
check_status "Topgrade installation" "non-critical"
|
||||||
|
}
|
||||||
|
|
||||||
install_gnome_extensions() {
|
install_gnome_extensions() {
|
||||||
log_info "----------------------------------------------------"
|
log_info "----------------------------------------------------"
|
||||||
log_info "Installing GNOME extensions"
|
log_info "Installing GNOME extensions"
|
||||||
@@ -435,9 +487,13 @@ show_menu() {
|
|||||||
echo "8. Install LinuxToys"
|
echo "8. Install LinuxToys"
|
||||||
echo "9. Install Shell Environment (Starship, MyBash)"
|
echo "9. Install Shell Environment (Starship, MyBash)"
|
||||||
echo "10. Install GNOME Extensions"
|
echo "10. Install GNOME Extensions"
|
||||||
|
echo "11. Install Discord"
|
||||||
|
echo "12. Install 1Password"
|
||||||
|
echo "13. Install Windscribe"
|
||||||
|
echo "14. Install Topgrade"
|
||||||
echo "0. Exit"
|
echo "0. Exit"
|
||||||
echo "===================================================="
|
echo "===================================================="
|
||||||
read -p "Enter your choice [0-10]: " choice
|
read -p "Enter your choice [0-14]: " choice
|
||||||
}
|
}
|
||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
@@ -459,6 +515,10 @@ while true; do
|
|||||||
install_fonts
|
install_fonts
|
||||||
install_repos
|
install_repos
|
||||||
install_software
|
install_software
|
||||||
|
install_discord
|
||||||
|
install_1password
|
||||||
|
install_Windscribe
|
||||||
|
install_topgrade
|
||||||
install_cachyos
|
install_cachyos
|
||||||
install_linuxtoys
|
install_linuxtoys
|
||||||
install_shell_env
|
install_shell_env
|
||||||
@@ -471,6 +531,10 @@ while true; do
|
|||||||
install_fonts
|
install_fonts
|
||||||
install_repos
|
install_repos
|
||||||
install_software
|
install_software
|
||||||
|
install_discord
|
||||||
|
install_1password
|
||||||
|
install_Windscribe
|
||||||
|
install_topgrade
|
||||||
# install_cachyos (Skipped)
|
# install_cachyos (Skipped)
|
||||||
install_linuxtoys
|
install_linuxtoys
|
||||||
install_shell_env
|
install_shell_env
|
||||||
@@ -486,6 +550,10 @@ while true; do
|
|||||||
8) install_linuxtoys ;;
|
8) install_linuxtoys ;;
|
||||||
9) install_shell_env ;;
|
9) install_shell_env ;;
|
||||||
10) install_gnome_extensions ;;
|
10) install_gnome_extensions ;;
|
||||||
|
11) install_discord ;;
|
||||||
|
12) install_1password ;;
|
||||||
|
13) install_Windscribe ;;
|
||||||
|
14) install_topgrade ;;
|
||||||
0)
|
0)
|
||||||
log_info "Exiting..."
|
log_info "Exiting..."
|
||||||
exit 0
|
exit 0
|
||||||
@@ -504,4 +572,4 @@ done
|
|||||||
log_info "----------------------------------------------------"
|
log_info "----------------------------------------------------"
|
||||||
log_info "Post-install script completed successfully!"
|
log_info "Post-install script completed successfully!"
|
||||||
log_info "Please restart your shell or run 'source ~/.bashrc' to see the changes."
|
log_info "Please restart your shell or run 'source ~/.bashrc' to see the changes."
|
||||||
log_info "----------------------------------------------------"
|
log_info "----------------------------------------------------"
|
||||||
+279
@@ -0,0 +1,279 @@
|
|||||||
|
"$schema" = 'https://starship.rs/config-schema.json'
|
||||||
|
|
||||||
|
format = """
|
||||||
|
[](red)\
|
||||||
|
$os\
|
||||||
|
$username\
|
||||||
|
[](bg:peach fg:red)\
|
||||||
|
$directory\
|
||||||
|
[](bg:yellow fg:peach)\
|
||||||
|
$git_branch\
|
||||||
|
$git_status\
|
||||||
|
[](fg:yellow bg:green)\
|
||||||
|
$c\
|
||||||
|
$rust\
|
||||||
|
$golang\
|
||||||
|
$nodejs\
|
||||||
|
$php\
|
||||||
|
$java\
|
||||||
|
$kotlin\
|
||||||
|
$haskell\
|
||||||
|
$python\
|
||||||
|
[](fg:green bg:sapphire)\
|
||||||
|
$conda\
|
||||||
|
[](fg:sapphire bg:lavender)\
|
||||||
|
$time\
|
||||||
|
[ ](fg:lavender)\
|
||||||
|
$cmd_duration\
|
||||||
|
$line_break\
|
||||||
|
$character"""
|
||||||
|
|
||||||
|
palette = 'catppuccin_latte'
|
||||||
|
|
||||||
|
[os]
|
||||||
|
disabled = false
|
||||||
|
style = "bg:red fg:crust"
|
||||||
|
|
||||||
|
[os.symbols]
|
||||||
|
Windows = ""
|
||||||
|
Ubuntu = ""
|
||||||
|
SUSE = ""
|
||||||
|
Raspbian = ""
|
||||||
|
Mint = ""
|
||||||
|
Macos = ""
|
||||||
|
Manjaro = ""
|
||||||
|
Linux = ""
|
||||||
|
Gentoo = ""
|
||||||
|
Fedora = ""
|
||||||
|
Alpine = ""
|
||||||
|
Amazon = ""
|
||||||
|
Android = ""
|
||||||
|
AOSC = ""
|
||||||
|
Arch = ""
|
||||||
|
Artix = ""
|
||||||
|
CentOS = ""
|
||||||
|
Debian = ""
|
||||||
|
Redhat = ""
|
||||||
|
RedHatEnterprise = ""
|
||||||
|
|
||||||
|
[username]
|
||||||
|
show_always = true
|
||||||
|
style_user = "bg:red fg:crust"
|
||||||
|
style_root = "bg:red fg:crust"
|
||||||
|
format = '[ $user]($style)'
|
||||||
|
|
||||||
|
[directory]
|
||||||
|
style = "bg:peach fg:crust"
|
||||||
|
format = "[ $path ]($style)"
|
||||||
|
truncation_length = 3
|
||||||
|
truncation_symbol = "…/"
|
||||||
|
|
||||||
|
[directory.substitutions]
|
||||||
|
"Documents" = " "
|
||||||
|
"Downloads" = " "
|
||||||
|
"Music" = " "
|
||||||
|
"Pictures" = " "
|
||||||
|
"Developer" = " "
|
||||||
|
|
||||||
|
[git_branch]
|
||||||
|
symbol = ""
|
||||||
|
style = "bg:yellow"
|
||||||
|
format = '[[ $symbol $branch ](fg:crust bg:yellow)]($style)'
|
||||||
|
|
||||||
|
[git_status]
|
||||||
|
style = "bg:yellow"
|
||||||
|
format = '[[($all_status$ahead_behind )](fg:crust bg:yellow)]($style)'
|
||||||
|
|
||||||
|
[nodejs]
|
||||||
|
symbol = ""
|
||||||
|
style = "bg:green"
|
||||||
|
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||||
|
|
||||||
|
[c]
|
||||||
|
symbol = " "
|
||||||
|
style = "bg:green"
|
||||||
|
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||||
|
|
||||||
|
[rust]
|
||||||
|
symbol = ""
|
||||||
|
style = "bg:green"
|
||||||
|
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||||
|
|
||||||
|
[golang]
|
||||||
|
symbol = ""
|
||||||
|
style = "bg:green"
|
||||||
|
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||||
|
|
||||||
|
[php]
|
||||||
|
symbol = ""
|
||||||
|
style = "bg:green"
|
||||||
|
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||||
|
|
||||||
|
[java]
|
||||||
|
symbol = " "
|
||||||
|
style = "bg:green"
|
||||||
|
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||||
|
|
||||||
|
[kotlin]
|
||||||
|
symbol = ""
|
||||||
|
style = "bg:green"
|
||||||
|
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||||
|
|
||||||
|
[haskell]
|
||||||
|
symbol = ""
|
||||||
|
style = "bg:green"
|
||||||
|
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||||
|
|
||||||
|
[python]
|
||||||
|
symbol = ""
|
||||||
|
style = "bg:green"
|
||||||
|
format = '[[ $symbol( $version)(\(#$virtualenv\)) ](fg:crust bg:green)]($style)'
|
||||||
|
|
||||||
|
[docker_context]
|
||||||
|
symbol = ""
|
||||||
|
style = "bg:sapphire"
|
||||||
|
format = '[[ $symbol( $context) ](fg:crust bg:sapphire)]($style)'
|
||||||
|
|
||||||
|
[conda]
|
||||||
|
symbol = " "
|
||||||
|
style = "fg:crust bg:sapphire"
|
||||||
|
format = '[$symbol$environment ]($style)'
|
||||||
|
ignore_base = false
|
||||||
|
|
||||||
|
[time]
|
||||||
|
disabled = false
|
||||||
|
time_format = "%R"
|
||||||
|
style = "bg:lavender"
|
||||||
|
format = '[[ $time ](fg:crust bg:lavender)]($style)'
|
||||||
|
|
||||||
|
[line_break]
|
||||||
|
disabled = true
|
||||||
|
|
||||||
|
[character]
|
||||||
|
disabled = false
|
||||||
|
success_symbol = '[❯](bold fg:green)'
|
||||||
|
error_symbol = '[❯](bold fg:red)'
|
||||||
|
vimcmd_symbol = '[❮](bold fg:green)'
|
||||||
|
vimcmd_replace_one_symbol = '[❮](bold fg:lavender)'
|
||||||
|
vimcmd_replace_symbol = '[❮](bold fg:lavender)'
|
||||||
|
vimcmd_visual_symbol = '[❮](bold fg:yellow)'
|
||||||
|
|
||||||
|
[cmd_duration]
|
||||||
|
show_milliseconds = true
|
||||||
|
format = " in $duration "
|
||||||
|
style = "bg:lavender"
|
||||||
|
disabled = false
|
||||||
|
show_notifications = true
|
||||||
|
min_time_to_notify = 45000
|
||||||
|
|
||||||
|
[palettes.catppuccin_mocha]
|
||||||
|
rosewater = "#f5e0dc"
|
||||||
|
flamingo = "#f2cdcd"
|
||||||
|
pink = "#f5c2e7"
|
||||||
|
mauve = "#cba6f7"
|
||||||
|
red = "#f38ba8"
|
||||||
|
maroon = "#eba0ac"
|
||||||
|
peach = "#fab387"
|
||||||
|
yellow = "#f9e2af"
|
||||||
|
green = "#a6e3a1"
|
||||||
|
teal = "#94e2d5"
|
||||||
|
sky = "#89dceb"
|
||||||
|
sapphire = "#74c7ec"
|
||||||
|
blue = "#89b4fa"
|
||||||
|
lavender = "#b4befe"
|
||||||
|
text = "#cdd6f4"
|
||||||
|
subtext1 = "#bac2de"
|
||||||
|
subtext0 = "#a6adc8"
|
||||||
|
overlay2 = "#9399b2"
|
||||||
|
overlay1 = "#7f849c"
|
||||||
|
overlay0 = "#6c7086"
|
||||||
|
surface2 = "#585b70"
|
||||||
|
surface1 = "#45475a"
|
||||||
|
surface0 = "#313244"
|
||||||
|
base = "#1e1e2e"
|
||||||
|
mantle = "#181825"
|
||||||
|
crust = "#11111b"
|
||||||
|
|
||||||
|
[palettes.catppuccin_frappe]
|
||||||
|
rosewater = "#f2d5cf"
|
||||||
|
flamingo = "#eebebe"
|
||||||
|
pink = "#f4b8e4"
|
||||||
|
mauve = "#ca9ee6"
|
||||||
|
red = "#e78284"
|
||||||
|
maroon = "#ea999c"
|
||||||
|
peach = "#ef9f76"
|
||||||
|
yellow = "#e5c890"
|
||||||
|
green = "#a6d189"
|
||||||
|
teal = "#81c8be"
|
||||||
|
sky = "#99d1db"
|
||||||
|
sapphire = "#85c1dc"
|
||||||
|
blue = "#8caaee"
|
||||||
|
lavender = "#babbf1"
|
||||||
|
text = "#c6d0f5"
|
||||||
|
subtext1 = "#b5bfe2"
|
||||||
|
subtext0 = "#a5adce"
|
||||||
|
overlay2 = "#949cbb"
|
||||||
|
overlay1 = "#838ba7"
|
||||||
|
overlay0 = "#737994"
|
||||||
|
surface2 = "#626880"
|
||||||
|
surface1 = "#51576d"
|
||||||
|
surface0 = "#414559"
|
||||||
|
base = "#303446"
|
||||||
|
mantle = "#292c3c"
|
||||||
|
crust = "#232634"
|
||||||
|
|
||||||
|
[palettes.catppuccin_latte]
|
||||||
|
rosewater = "#dc8a78"
|
||||||
|
flamingo = "#dd7878"
|
||||||
|
pink = "#ea76cb"
|
||||||
|
mauve = "#8839ef"
|
||||||
|
red = "#d20f39"
|
||||||
|
maroon = "#e64553"
|
||||||
|
peach = "#fe640b"
|
||||||
|
yellow = "#df8e1d"
|
||||||
|
green = "#40a02b"
|
||||||
|
teal = "#179299"
|
||||||
|
sky = "#04a5e5"
|
||||||
|
sapphire = "#209fb5"
|
||||||
|
blue = "#1e66f5"
|
||||||
|
lavender = "#7287fd"
|
||||||
|
text = "#4c4f69"
|
||||||
|
subtext1 = "#5c5f77"
|
||||||
|
subtext0 = "#6c6f85"
|
||||||
|
overlay2 = "#7c7f93"
|
||||||
|
overlay1 = "#8c8fa1"
|
||||||
|
overlay0 = "#9ca0b0"
|
||||||
|
surface2 = "#acb0be"
|
||||||
|
surface1 = "#bcc0cc"
|
||||||
|
surface0 = "#ccd0da"
|
||||||
|
base = "#eff1f5"
|
||||||
|
mantle = "#e6e9ef"
|
||||||
|
crust = "#dce0e8"
|
||||||
|
|
||||||
|
[palettes.catppuccin_macchiato]
|
||||||
|
rosewater = "#f4dbd6"
|
||||||
|
flamingo = "#f0c6c6"
|
||||||
|
pink = "#f5bde6"
|
||||||
|
mauve = "#c6a0f6"
|
||||||
|
red = "#ed8796"
|
||||||
|
maroon = "#ee99a0"
|
||||||
|
peach = "#f5a97f"
|
||||||
|
yellow = "#eed49f"
|
||||||
|
green = "#a6da95"
|
||||||
|
teal = "#8bd5ca"
|
||||||
|
sky = "#91d7e3"
|
||||||
|
sapphire = "#7dc4e4"
|
||||||
|
blue = "#8aadf4"
|
||||||
|
lavender = "#b7bdf8"
|
||||||
|
text = "#cad3f5"
|
||||||
|
subtext1 = "#b8c0e0"
|
||||||
|
subtext0 = "#a5adcb"
|
||||||
|
overlay2 = "#939ab7"
|
||||||
|
overlay1 = "#8087a2"
|
||||||
|
overlay0 = "#6e738d"
|
||||||
|
surface2 = "#5b6078"
|
||||||
|
surface1 = "#494d64"
|
||||||
|
surface0 = "#363a4f"
|
||||||
|
base = "#24273a"
|
||||||
|
mantle = "#1e2030"
|
||||||
|
crust = "#181926"
|
||||||
Executable
+156
@@ -0,0 +1,156 @@
|
|||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
# Define color codes using tput for better compatibility
|
||||||
|
RC=$(tput sgr0)
|
||||||
|
RED=$(tput setaf 1)
|
||||||
|
YELLOW=$(tput setaf 3)
|
||||||
|
GREEN=$(tput setaf 2)
|
||||||
|
|
||||||
|
LINUXTOOLBOXDIR="$HOME/linuxtoolbox"
|
||||||
|
PACKAGER=""
|
||||||
|
SUDO_CMD=""
|
||||||
|
|
||||||
|
print_colored() {
|
||||||
|
color=$1
|
||||||
|
message=$2
|
||||||
|
printf "${color}%s${RC}\n" "$message"
|
||||||
|
}
|
||||||
|
|
||||||
|
command_exists() {
|
||||||
|
command -v "$1" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
determine_package_manager() {
|
||||||
|
PACKAGEMANAGER='nala apt dnf yum pacman zypper emerge xbps-install nix-env'
|
||||||
|
for pgm in $PACKAGEMANAGER; do
|
||||||
|
if command_exists "$pgm"; then
|
||||||
|
PACKAGER="$pgm"
|
||||||
|
printf "Using %s\n" "$pgm"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$PACKAGER" ]; then
|
||||||
|
print_colored "$RED" "Can't find a supported package manager"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
determine_sudo_command() {
|
||||||
|
if command_exists sudo; then
|
||||||
|
SUDO_CMD="sudo"
|
||||||
|
elif command_exists doas && [ -f "/etc/doas.conf" ]; then
|
||||||
|
SUDO_CMD="doas"
|
||||||
|
else
|
||||||
|
SUDO_CMD="su -c"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "Using %s as privilege escalation software\n" "$SUDO_CMD"
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_dependencies() {
|
||||||
|
DEPENDENCIES='bash-completion bat tree multitail fastfetch neovim trash-cli'
|
||||||
|
|
||||||
|
print_colored "$YELLOW" "Uninstalling dependencies..."
|
||||||
|
if [ "$PACKAGER" = "pacman" ]; then
|
||||||
|
if command_exists yay; then
|
||||||
|
yay -Rns --noconfirm ${DEPENDENCIES}
|
||||||
|
elif command_exists paru; then
|
||||||
|
paru -Rns --noconfirm ${DEPENDENCIES}
|
||||||
|
else
|
||||||
|
${SUDO_CMD} pacman -Rns --noconfirm ${DEPENDENCIES}
|
||||||
|
fi
|
||||||
|
elif [ "$PACKAGER" = "nala" ] || [ "$PACKAGER" = "apt" ]; then
|
||||||
|
${SUDO_CMD} ${PACKAGER} purge -y ${DEPENDENCIES}
|
||||||
|
elif [ "$PACKAGER" = "emerge" ]; then
|
||||||
|
${SUDO_CMD} ${PACKAGER} --deselect app-shells/bash-completion sys-apps/bat app-text/tree app-text/multitail app-misc/fastfetch app-editors/neovim app-misc/trash-cli
|
||||||
|
elif [ "$PACKAGER" = "xbps-install" ]; then
|
||||||
|
${SUDO_CMD} xbps-remove -Ry ${DEPENDENCIES}
|
||||||
|
elif [ "$PACKAGER" = "nix-env" ]; then
|
||||||
|
${SUDO_CMD} ${PACKAGER} -e bash-completion bat tree multitail fastfetch neovim trash-cli
|
||||||
|
elif [ "$PACKAGER" = "dnf" ] || [ "$PACKAGER" = "yum" ]; then
|
||||||
|
${SUDO_CMD} ${PACKAGER} remove -y ${DEPENDENCIES}
|
||||||
|
else
|
||||||
|
${SUDO_CMD} ${PACKAGER} remove -y ${DEPENDENCIES}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_font() {
|
||||||
|
FONT_NAME="MesloLGS Nerd Font Mono"
|
||||||
|
FONT_DIR="$HOME/.local/share/fonts/$FONT_NAME"
|
||||||
|
|
||||||
|
if [ -d "$FONT_DIR" ]; then
|
||||||
|
print_colored "$YELLOW" "Removing font: $FONT_NAME"
|
||||||
|
rm -rf "$FONT_DIR"
|
||||||
|
fc-cache -fv
|
||||||
|
print_colored "$GREEN" "Font removed: $FONT_NAME"
|
||||||
|
else
|
||||||
|
print_colored "$YELLOW" "Font not found: $FONT_NAME"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_starship_and_fzf() {
|
||||||
|
if command_exists starship; then
|
||||||
|
print_colored "$YELLOW" "Uninstalling Starship..."
|
||||||
|
${SUDO_CMD} rm -f "$(command -v starship)"
|
||||||
|
print_colored "$GREEN" "Starship uninstalled"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d "$HOME/.fzf" ]; then
|
||||||
|
print_colored "$YELLOW" "Uninstalling fzf..."
|
||||||
|
"$HOME/.fzf/uninstall"
|
||||||
|
rm -rf "$HOME/.fzf"
|
||||||
|
print_colored "$GREEN" "fzf uninstalled"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_zoxide() {
|
||||||
|
if command_exists zoxide; then
|
||||||
|
print_colored "$YELLOW" "Uninstalling Zoxide..."
|
||||||
|
${SUDO_CMD} rm -f "$(command -v zoxide)"
|
||||||
|
print_colored "$GREEN" "Zoxide uninstalled"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_configs() {
|
||||||
|
USER_HOME=$(getent passwd "${SUDO_USER:-$USER}" | cut -d: -f6)
|
||||||
|
|
||||||
|
print_colored "$YELLOW" "Removing configuration files..."
|
||||||
|
|
||||||
|
# Remove .bashrc symlink and restore backup if it exists
|
||||||
|
if [ -L "$USER_HOME/.bashrc" ]; then
|
||||||
|
rm "$USER_HOME/.bashrc"
|
||||||
|
if [ -f "$USER_HOME/.bashrc.bak" ]; then
|
||||||
|
mv "$USER_HOME/.bashrc.bak" "$USER_HOME/.bashrc"
|
||||||
|
print_colored "$GREEN" "Restored original .bashrc"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Remove starship config
|
||||||
|
rm -f "$USER_HOME/.config/starship.toml"
|
||||||
|
|
||||||
|
# Remove fastfetch config
|
||||||
|
rm -f "$USER_HOME/.config/fastfetch/config.jsonc"
|
||||||
|
|
||||||
|
print_colored "$GREEN" "Configuration files removed"
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_linuxtoolbox() {
|
||||||
|
if [ -d "$LINUXTOOLBOXDIR" ]; then
|
||||||
|
print_colored "$YELLOW" "Removing linuxtoolbox directory..."
|
||||||
|
rm -rf "$LINUXTOOLBOXDIR"
|
||||||
|
print_colored "$GREEN" "linuxtoolbox directory removed"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main execution
|
||||||
|
determine_package_manager
|
||||||
|
determine_sudo_command
|
||||||
|
uninstall_dependencies
|
||||||
|
uninstall_font
|
||||||
|
uninstall_starship_and_fzf
|
||||||
|
uninstall_zoxide
|
||||||
|
remove_configs
|
||||||
|
remove_linuxtoolbox
|
||||||
|
|
||||||
|
print_colored "$GREEN" "Uninstallation complete. Please restart your shell for changes to take effect."
|
||||||
Reference in New Issue
Block a user