mirror of
https://github.com/ChrisTitusTech/linutil.git
synced 2024-11-25 14:30:11 +00:00
Merge branch 'main' into testing-7
This commit is contained in:
commit
56e031ed8e
5
.github/PULL_REQUEST_TEMPLATE.md
vendored
5
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
@ -1,8 +1,3 @@
|
|||
# Pull Request
|
||||
|
||||
## Title
|
||||
<!--[Provide a succinct and descriptive title for the pull request.]-->
|
||||
|
||||
## Type of Change
|
||||
- [ ] New feature
|
||||
- [ ] Bug fix
|
||||
|
|
26
.github/workflows/pr-labels.yaml
vendored
26
.github/workflows/pr-labels.yaml
vendored
|
@ -1,7 +1,7 @@
|
|||
name: Manage labels based on PR body
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types: [opened, edited, reopened, synchronize]
|
||||
|
||||
jobs:
|
||||
|
@ -9,8 +9,9 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Analyze PR Body and manage labels
|
||||
shell: bash
|
||||
run: |
|
||||
body="${{ github.event.pull_request.body }}"
|
||||
body=$(jq -r '.pull_request.body' "$GITHUB_EVENT_PATH")
|
||||
labels_to_add=()
|
||||
labels_to_remove=()
|
||||
declare -A label_checks=(
|
||||
|
@ -20,19 +21,23 @@ jobs:
|
|||
["Refactoring"]="refactor"
|
||||
["UI/UX improvement"]="UI/UX"
|
||||
)
|
||||
for key in "${!label_checks[@]}"; do
|
||||
if echo "$body" | grep -q "\- \[x\] $key"; then
|
||||
labels_to_add+=("${label_checks[$key]}")
|
||||
for pattern in "${!label_checks[@]}"; do
|
||||
label="${label_checks[$pattern]}"
|
||||
if echo "$body" | grep -Eq "\- \[x\] ($pattern)"; then
|
||||
labels_to_add+=("$label")
|
||||
else
|
||||
labels_to_remove+=("${label_checks[$key]}")
|
||||
labels_to_remove+=("$label")
|
||||
fi
|
||||
done
|
||||
echo "LABELS_TO_ADD=${labels_to_add[*]}" >> $GITHUB_ENV
|
||||
echo "LABELS_TO_REMOVE=${labels_to_remove[*]}" >> $GITHUB_ENV
|
||||
|
||||
echo "LABELS_TO_ADD=$(IFS=,; echo "${labels_to_add[*]}")" >> $GITHUB_ENV
|
||||
echo "LABELS_TO_REMOVE=$(IFS=,; echo "${labels_to_remove[*]}")" >> $GITHUB_ENV
|
||||
|
||||
- name: Add labels if necessary
|
||||
if: env.LABELS_TO_ADD != ''
|
||||
run: |
|
||||
for label in ${{ env.LABELS_TO_ADD }}; do
|
||||
IFS=',' read -ra labels <<< "${LABELS_TO_ADD}"
|
||||
for label in "${labels[@]}"; do
|
||||
curl -s -X POST \
|
||||
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
|
@ -42,7 +47,8 @@ jobs:
|
|||
- name: Remove labels if necessary
|
||||
if: env.LABELS_TO_REMOVE != ''
|
||||
run: |
|
||||
for label in ${{ env.LABELS_TO_REMOVE }}; do
|
||||
IFS=',' read -ra labels <<< "${LABELS_TO_REMOVE}"
|
||||
for label in "${labels[@]}"; do
|
||||
curl -s -X DELETE \
|
||||
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/sh
|
||||
#!/bin/sh -e
|
||||
|
||||
RC='\033[0m'
|
||||
RED='\033[0;31m'
|
||||
|
@ -35,7 +35,7 @@ check() {
|
|||
local message=$2
|
||||
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
echo -e "${RED}ERROR: $message${RC}"
|
||||
printf "%b\n" "${RED}ERROR: $message${RC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
. ../common-script.sh
|
||||
|
||||
setupAlacritty() {
|
||||
printf "%b\n" "${YELLOW}Install Alacritty if not already installed...${RC}"
|
||||
installAlacritty() {
|
||||
echo "Installing Alacritty..."
|
||||
if ! command_exists alacritty; then
|
||||
case ${PACKAGER} in
|
||||
pacman)
|
||||
|
@ -31,5 +31,5 @@ setupAlacrittyConfig() {
|
|||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
setupAlacritty
|
||||
installAlacritty
|
||||
setupAlacrittyConfig
|
|
@ -143,11 +143,14 @@ clone_config_folders() {
|
|||
}
|
||||
|
||||
configure_backgrounds() {
|
||||
# Set the variable PIC_DIR which stores the path for images
|
||||
PIC_DIR="$HOME/Pictures"
|
||||
|
||||
# Set the variable BG_DIR to the path where backgrounds will be stored
|
||||
BG_DIR="$HOME/Pictures/backgrounds"
|
||||
BG_DIR="$PIC_DIR/backgrounds"
|
||||
|
||||
# Check if the ~/Pictures directory exists
|
||||
if [ ! -d "~/Pictures" ]; then
|
||||
if [ ! -d "$PIC_DIR" ]; then
|
||||
# If it doesn't exist, print an error message and return with a status of 1 (indicating failure)
|
||||
printf "%b\n" "${RED}Pictures directory does not exist${RC}"
|
||||
mkdir ~/Pictures
|
||||
|
@ -157,13 +160,13 @@ configure_backgrounds() {
|
|||
# Check if the backgrounds directory (BG_DIR) exists
|
||||
if [ ! -d "$BG_DIR" ]; then
|
||||
# If the backgrounds directory doesn't exist, attempt to clone a repository containing backgrounds
|
||||
if ! git clone https://github.com/ChrisTitusTech/nord-background.git ~/Pictures; then
|
||||
if ! git clone https://github.com/ChrisTitusTech/nord-background.git "$PIC_DIR/nord-background"; then
|
||||
# If the git clone command fails, print an error message and return with a status of 1
|
||||
printf "%b\n" "${RED}Failed to clone the repository${RC}"
|
||||
return 1
|
||||
fi
|
||||
# Rename the cloned directory to 'backgrounds'
|
||||
mv ~/Pictures/nord-background ~/Pictures/backgrounds
|
||||
mv "$PIC_DIR/nord-background" "$PIC_DIR/backgrounds"
|
||||
# Print a success message indicating that the backgrounds have been downloaded
|
||||
printf "%b\n" "${GREEN}Downloaded desktop backgrounds to $BG_DIR${RC}"
|
||||
else
|
||||
|
@ -261,9 +264,6 @@ setupDisplayManager() {
|
|||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
install_slstatus() {
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
|
||||
. ../common-script.sh
|
||||
|
||||
setupFastfetch() {
|
||||
installFastfetch() {
|
||||
printf "%b\n" "${YELLOW}Installing Fastfetch if not already installed...${RC}"
|
||||
|
||||
if ! command_exists fastfetch; then
|
||||
case ${PACKAGER} in
|
||||
pacman)
|
||||
|
@ -29,5 +30,5 @@ setupFastfetchConfig() {
|
|||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
setupFastfetch
|
||||
installFastfetch
|
||||
setupFastfetchConfig
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
. ../common-script.sh
|
||||
|
||||
setupKitty() {
|
||||
installKitty() {
|
||||
printf "%b\n" "${YELLOW}Install Kitty if not already installed...${RC}"
|
||||
if ! command_exists kitty; then
|
||||
case ${PACKAGER} in
|
||||
|
@ -19,7 +19,7 @@ setupKitty() {
|
|||
}
|
||||
|
||||
setupKittyConfig() {
|
||||
printf "%b\n" "${YELLOW}Copy Kitty config files${RC}"
|
||||
printf "%b\n" "${YELLOW}Copying Kitty configuration files...${RC}"
|
||||
if [ -d "${HOME}/.config/kitty" ] && [ ! -d "${HOME}/.config/kitty-bak" ]; then
|
||||
cp -r "${HOME}/.config/kitty" "${HOME}/.config/kitty-bak"
|
||||
fi
|
||||
|
@ -30,5 +30,5 @@ setupKittyConfig() {
|
|||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
setupKitty
|
||||
installKitty
|
||||
setupKittyConfig
|
|
@ -14,7 +14,7 @@ cloneMyBash() {
|
|||
}
|
||||
|
||||
installDepend() {
|
||||
printf "%b\n" "${YELLOW}Install mybash if not already installed${RC}"
|
||||
printf "%b\n" "${YELLOW}Installing Bash...${RC}"
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
$ESCALATION_TOOL "$PACKAGER" -S --needed --noconfirm bash bash-completion tar bat tree unzip fontconfig
|
||||
|
|
|
@ -13,8 +13,8 @@ cloneNeovim() {
|
|||
cd "$HOME" && git clone https://github.com/ChrisTitusTech/neovim.git "$HOME/.local/share/neovim"
|
||||
}
|
||||
|
||||
setupNeovim() {
|
||||
printf "%b\n" "${YELLOW}Install Neovim if not already installed${RC}"
|
||||
installNeovim() {
|
||||
printf "%b\n" "${YELLOW}Installing Neovim...${RC}"
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
$ESCALATION_TOOL "$PACKAGER" -S --needed --noconfirm neovim ripgrep fzf python-virtualenv luarocks go shellcheck
|
||||
|
@ -36,6 +36,7 @@ setupNeovim() {
|
|||
}
|
||||
|
||||
backupNeovimConfig() {
|
||||
printf "%b\n" "${YELLOW}Backing up existing configuration files...${RC}"
|
||||
if [ -d "$HOME/.config/nvim" ] && [ ! -d "$HOME/.config/nvim-backup" ]; then
|
||||
cp -r "$HOME/.config/nvim" "$HOME/.config/nvim-backup"
|
||||
fi
|
||||
|
@ -43,6 +44,7 @@ backupNeovimConfig() {
|
|||
}
|
||||
|
||||
linkNeovimConfig() {
|
||||
printf "%b\n" "${YELLOW}Linking Neovim configuration files...${RC}"
|
||||
mkdir -p "$HOME/.config/nvim"
|
||||
ln -s "$gitpath/titus-kickstart/"* "$HOME/.config/nvim/" # Wild card is used here to link all contents of titus-kickstart.
|
||||
}
|
||||
|
@ -50,6 +52,6 @@ linkNeovimConfig() {
|
|||
checkEnv
|
||||
checkEscalationTool
|
||||
cloneNeovim
|
||||
setupNeovim
|
||||
installNeovim
|
||||
backupNeovimConfig
|
||||
linkNeovimConfig
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
. ../common-script.sh
|
||||
|
||||
setupRofi() {
|
||||
printf "%b\n" "${YELLOW}Install Rofi if not already installed...${RC}"
|
||||
installRofi() {
|
||||
printf "%b\n" "${YELLOW}Installing Rofi...${RC}"
|
||||
if ! command_exists rofi; then
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
|
@ -19,7 +19,7 @@ setupRofi() {
|
|||
}
|
||||
|
||||
setupRofiConfig() {
|
||||
printf "%b\n" "${YELLOW}Copy Rofi config files${RC}"
|
||||
printf "%b\n" "${YELLOW}Copying Rofi configuration files...${RC}"
|
||||
if [ -d "$HOME/.config/rofi" ] && [ ! -d "$HOME/.config/rofi-bak" ]; then
|
||||
cp -r "$HOME/.config/rofi" "$HOME/.config/rofi-bak"
|
||||
fi
|
||||
|
@ -35,5 +35,5 @@ setupRofiConfig() {
|
|||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
setupRofi
|
||||
installRofi
|
||||
setupRofiConfig
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
. ../common-script.sh
|
||||
|
||||
# Function to install zsh
|
||||
install_zsh() {
|
||||
printf "%b\n" "${YELLOW}Install ZSH if not already installed...${RC}"
|
||||
installZsh() {
|
||||
printf "%b\n" "${YELLOWInstalling Zsh...${RC}"
|
||||
if ! command_exists zsh; then
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
|
@ -20,7 +20,8 @@ install_zsh() {
|
|||
}
|
||||
|
||||
# Function to setup zsh configuration
|
||||
setup_zsh_config() {
|
||||
setupZshConfig() {
|
||||
echo "Setting up Zsh configuration..."
|
||||
CONFIG_DIR="$HOME/.config/zsh"
|
||||
ZSHRC_FILE="$CONFIG_DIR/.zshrc"
|
||||
|
||||
|
@ -48,5 +49,5 @@ EOL
|
|||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
install_zsh
|
||||
setup_zsh_config
|
||||
installZsh
|
||||
setupZshConfig
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
RC='\033[0m'
|
||||
RED='\033[31m'
|
||||
YELLOW='\033[33m'
|
||||
CYAN='\033[36m'
|
||||
GREEN='\033[32m'
|
||||
|
||||
command_exists() {
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
. ../common-script.sh
|
||||
|
||||
installPkg() {
|
||||
echo "Install UFW if not already installed..."
|
||||
echo "Installing UFW..."
|
||||
if ! command_exists ufw; then
|
||||
case ${PACKAGER} in
|
||||
pacman)
|
||||
|
@ -19,7 +19,7 @@ installPkg() {
|
|||
}
|
||||
|
||||
configureUFW() {
|
||||
printf "%b\n" "${GREEN}Using Chris Titus Recommended Firewall Rules${RC}"
|
||||
printf "%b\n" "${YELLOW}Using Chris Titus Recommended Firewall Rules${RC}"
|
||||
|
||||
printf "%b\n" "${YELLOW}Disabling UFW${RC}"
|
||||
$ESCALATION_TOOL ufw disable
|
||||
|
|
205
tabs/system-setup/5-samba-ssh-setup.sh
Executable file
205
tabs/system-setup/5-samba-ssh-setup.sh
Executable file
|
@ -0,0 +1,205 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
# Load common script functions
|
||||
. ../common-script.sh
|
||||
|
||||
# Function to install packages based on the package manager
|
||||
install_package() {
|
||||
PACKAGE=$1
|
||||
if ! command_exists "$PACKAGE"; then
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
$ESCALATION_TOOL "$PACKAGER" -S --noconfirm "$PACKAGE"
|
||||
;;
|
||||
*)
|
||||
$ESCALATION_TOOL "$PACKAGER" install -y "$PACKAGE"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo "$PACKAGE is already installed."
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup and configure SSH
|
||||
setup_ssh() {
|
||||
printf "%b\n" "${YELLOW}Setting up SSH...${RC}"
|
||||
|
||||
# Detect package manager and install appropriate SSH package
|
||||
case "$PACKAGER" in
|
||||
"apt-get")
|
||||
install_package openssh-server
|
||||
SSH_SERVICE="ssh"
|
||||
;;
|
||||
"pacman")
|
||||
install_package openssh
|
||||
SSH_SERVICE="sshd"
|
||||
;;
|
||||
*)
|
||||
install_package openssh-server
|
||||
SSH_SERVICE="sshd"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Enable and start the appropriate SSH service
|
||||
$ESCALATION_TOOL systemctl enable "$SSH_SERVICE"
|
||||
$ESCALATION_TOOL systemctl start "$SSH_SERVICE"
|
||||
|
||||
# Get the local IP address
|
||||
LOCAL_IP=$(ip -4 addr show | awk '/inet / {print $2}' | tail -n 1)
|
||||
|
||||
printf "%b\n" "${GREEN}Your local IP address is: $LOCAL_IP${RC}"
|
||||
|
||||
# Check if SSH is running
|
||||
if systemctl is-active --quiet "$SSH_SERVICE"; then
|
||||
printf "%b\n" "${GREEN}SSH is up and running.${RC}"
|
||||
else
|
||||
printf "%b\n" "${RED}Failed to start SSH.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to setup and configure Samba
|
||||
setup_samba() {
|
||||
printf "%b\n" "${YELLOW}Setting up Samba...${RC}"
|
||||
|
||||
# Install Samba if not installed
|
||||
install_package samba
|
||||
|
||||
SAMBA_CONFIG="/etc/samba/smb.conf"
|
||||
|
||||
if [ -f "$SAMBA_CONFIG" ]; then
|
||||
printf "%b\n" "${YELLOW}Samba configuration file already exists in $SAMBA_CONFIG.${RC}"
|
||||
printf "Do you want to modify the existing Samba configuration? (yes/no): "
|
||||
read -r MODIFY_SAMBA
|
||||
if [ "$MODIFY_SAMBA" = "yes" ]; then
|
||||
"$ESCALATION_TOOL" "$EDITOR" "$SAMBA_CONFIG"
|
||||
fi
|
||||
else
|
||||
printf "%b\n" "${YELLOW}No existing Samba configuration found. Setting up a new one...${RC}"
|
||||
|
||||
# Prompt user for shared directory path
|
||||
printf "Enter the path for the Samba share (default: /srv/samba/share): "
|
||||
read -r SHARED_DIR
|
||||
SHARED_DIR=${SHARED_DIR:-/srv/samba/share}
|
||||
|
||||
# Create the shared directory if it doesn't exist
|
||||
$ESCALATION_TOOL mkdir -p "$SHARED_DIR"
|
||||
$ESCALATION_TOOL chmod -R 0777 "$SHARED_DIR"
|
||||
|
||||
# Add a new Samba user
|
||||
echo "Enter Samba username: "
|
||||
read -r SAMBA_USER
|
||||
|
||||
# Loop until the passwords match
|
||||
while true; do
|
||||
echo "Enter Samba password: "
|
||||
stty -echo
|
||||
read -r SAMBA_PASSWORD
|
||||
stty echo
|
||||
echo "Confirm Samba password: "
|
||||
stty -echo
|
||||
read SAMBA_PASSWORD_CONFIRM
|
||||
stty echo
|
||||
echo ""
|
||||
if [ "$SAMBA_PASSWORD" = "$SAMBA_PASSWORD_CONFIRM" ]; then
|
||||
printf "%b\n" "${GREEN}Passwords match.${RC}"
|
||||
break
|
||||
else
|
||||
printf "%b\n" "${RED}Passwords do not match. Please try again.${RC}"
|
||||
fi
|
||||
done
|
||||
|
||||
# Add the user and set the password
|
||||
$ESCALATION_TOOL smbpasswd -a "$SAMBA_USER"
|
||||
|
||||
# Configure Samba settings
|
||||
$ESCALATION_TOOL sh -c "cat > $SAMBA_CONFIG" <<EOL
|
||||
[global]
|
||||
workgroup = WORKGROUP
|
||||
server string = Samba Server
|
||||
security = user
|
||||
map to guest = bad user
|
||||
dns proxy = no
|
||||
|
||||
[Share]
|
||||
path = $SHARED_DIR
|
||||
browsable = yes
|
||||
writable = yes
|
||||
guest ok = no
|
||||
read only = no
|
||||
EOL
|
||||
fi
|
||||
|
||||
# Enable and start Samba services
|
||||
$ESCALATION_TOOL systemctl enable smb nmb
|
||||
$ESCALATION_TOOL systemctl start smb nmb
|
||||
|
||||
# Check if Samba is running
|
||||
if systemctl is-active --quiet smb && systemctl is-active --quiet nmb; then
|
||||
printf "%b\n" "${GREEN}Samba is up and running.${RC}"
|
||||
printf "%b\n" "${YELLOW}Samba share available at: $SHARED_DIR${RC}"
|
||||
else
|
||||
printf "%b\n" "${RED}Failed to start Samba.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to configure firewall (optional)
|
||||
configure_firewall() {
|
||||
printf "%b\n" "${BLUE}Configuring firewall...${RC}"
|
||||
|
||||
if command_exists ufw; then
|
||||
$ESCALATION_TOOL ufw allow OpenSSH
|
||||
$ESCALATION_TOOL ufw allow Samba
|
||||
$ESCALATION_TOOL ufw enable
|
||||
printf "%b\n" "${GREEN}Firewall configured for SSH and Samba.${RC}"
|
||||
else
|
||||
printf "%b\n" "${YELLOW}UFW is not installed. Skipping firewall configuration.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
setup_ssh_samba(){
|
||||
printf "Samba and SSH Setup Script\n"
|
||||
printf "----------------------------\n"
|
||||
clear
|
||||
|
||||
# Display menu
|
||||
printf "Select an option:\n"
|
||||
printf "1. Setup SSH\n"
|
||||
printf "2. Setup Samba\n"
|
||||
printf "3. Configure Firewall\n"
|
||||
printf "4. Setup All\n"
|
||||
printf "5. Exit\n"
|
||||
|
||||
printf "Enter your choice [1-5]: "
|
||||
read CHOICE
|
||||
|
||||
case "$CHOICE" in
|
||||
1)
|
||||
setup_ssh
|
||||
;;
|
||||
2)
|
||||
setup_samba
|
||||
;;
|
||||
3)
|
||||
configure_firewall
|
||||
;;
|
||||
4)
|
||||
setup_ssh
|
||||
setup_samba
|
||||
configure_firewall
|
||||
;;
|
||||
5)
|
||||
printf "%b\n" "${GREEN}Exiting.${RC}"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Invalid choice. Please enter a number between 1 and 5.${RC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
printf "%b\n" "${GREEN}Setup completed.${RC}"
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
setup_ssh_samba
|
87
tabs/system-setup/6-docker-setup.sh
Executable file
87
tabs/system-setup/6-docker-setup.sh
Executable file
|
@ -0,0 +1,87 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
. ../common-script.sh
|
||||
|
||||
# Function to prompt the user for installation choice
|
||||
choose_installation() {
|
||||
clear
|
||||
printf "%b\n" "${YELLOW}Choose what to install:${RC}"
|
||||
printf "%b\n" "1. ${YELLOW}Docker${RC}"
|
||||
printf "%b\n" "2. ${YELLOW}Docker Compose${RC}"
|
||||
printf "%b\n" "3. ${YELLOW}Both${RC}"
|
||||
read -p "Enter your choice [1-3]: " CHOICE
|
||||
|
||||
case "$CHOICE" in
|
||||
1) INSTALL_DOCKER=1; INSTALL_COMPOSE=0 ;;
|
||||
2) INSTALL_DOCKER=0; INSTALL_COMPOSE=1 ;;
|
||||
3) INSTALL_DOCKER=1; INSTALL_COMPOSE=1 ;;
|
||||
*) echo "Invalid choice. Exiting."; exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
install_docker() {
|
||||
printf "%b\n" "${YELLOW}Installing Docker...${RC}"
|
||||
case $PACKAGER in
|
||||
apt-get | yum)
|
||||
curl -fsSL https://get.docker.com | sh
|
||||
;;
|
||||
zypper)
|
||||
$ESCALATION_TOOL ${PACKAGER} --non-interactive install docker
|
||||
$ESCALATION_TOOL systemctl enable docker
|
||||
$ESCALATION_TOOL systemctl start docker
|
||||
;;
|
||||
pacman)
|
||||
$ESCALATION_TOOL ${PACKAGER} -S --noconfirm docker
|
||||
$ESCALATION_TOOL systemctl enable docker
|
||||
$ESCALATION_TOOL systemctl start docker
|
||||
;;
|
||||
*)
|
||||
printf "${RED}Unsupported package manager. Please install Docker manually.${RC}\n"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
install_docker_compose() {
|
||||
printf "%b\n" "${YELLOW}Installing Docker Compose...${RC}"
|
||||
case $PACKAGER in
|
||||
apt-get | yum)
|
||||
$ESCALATION_TOOL ${PACKAGER} update
|
||||
$ESCALATION_TOOL ${PACKAGER} install -y docker-compose-plugin
|
||||
;;
|
||||
zypper)
|
||||
$ESCALATION_TOOL ${PACKAGER} --non-interactive install docker-compose
|
||||
;;
|
||||
pacman)
|
||||
$ESCALATION_TOOL ${PACKAGER} -S --noconfirm docker-compose
|
||||
;;
|
||||
*)
|
||||
printf "${RED}Unsupported package manager. Please install Docker Compose manually.${RC}\n"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
install_components() {
|
||||
choose_installation
|
||||
|
||||
if [ "$INSTALL_DOCKER" -eq 1 ]; then
|
||||
if ! command_exists docker; then
|
||||
install_docker
|
||||
else
|
||||
printf "%b\n" "${GREEN}Docker is already installed.${RC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$INSTALL_COMPOSE" -eq 1 ]; then
|
||||
if ! command_exists docker-compose || ! command_exists docker compose version; then
|
||||
install_docker_compose
|
||||
else
|
||||
printf "%b\n" "${GREEN}Docker Compose is already installed.${RC}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
install_components
|
|
@ -336,7 +336,7 @@ sgdisk -a 2048 -o ${DISK} # new gpt disk 2048 alignment
|
|||
|
||||
# create partitions
|
||||
sgdisk -n 1::+1M --typecode=1:ef02 --change-name=1:'BIOSBOOT' ${DISK} # partition 1 (BIOS Boot Partition)
|
||||
sgdisk -n 2::+300M --typecode=2:ef00 --change-name=2:'EFIBOOT' ${DISK} # partition 2 (UEFI Boot Partition)
|
||||
sgdisk -n 2::+1GiB --typecode=2:ef00 --change-name=2:'EFIBOOT' ${DISK} # partition 2 (UEFI Boot Partition)
|
||||
sgdisk -n 3::-0 --typecode=3:8300 --change-name=3:'ROOT' ${DISK} # partition 3 (Root), default start, remaining
|
||||
if [[ ! -d "/sys/firmware/efi" ]]; then # Checking for bios system
|
||||
sgdisk -A 1:set:2 ${DISK}
|
||||
|
|
|
@ -61,7 +61,7 @@ fastUpdate() {
|
|||
}
|
||||
|
||||
updateSystem() {
|
||||
printf "%b\n" "${GREEN}Updating system${RC}"
|
||||
printf "%b\n" "${YELLOW}Updating system${RC}"
|
||||
case ${PACKAGER} in
|
||||
nala|apt-get)
|
||||
$ESCALATION_TOOL "${PACKAGER}" update -y
|
||||
|
|
|
@ -51,3 +51,11 @@ script = "3-global-theme.sh"
|
|||
[[data]]
|
||||
name = "Remove Snaps"
|
||||
script = "4-remove-snaps.sh"
|
||||
|
||||
[[data]]
|
||||
name = "SSH-Samba Setup"
|
||||
script = "5-samba-ssh-setup.sh"
|
||||
|
||||
[[data]]
|
||||
name = "Docker Setup"
|
||||
script = "6-docker-setup.sh"
|
|
@ -1,5 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
say_hello () {
|
||||
echo Hi
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# The current working directory will always be inside "commands"
|
||||
. test/lib.sh
|
||||
|
||||
say_hello
|
179
tabs/utils/auto-login.sh
Normal file
179
tabs/utils/auto-login.sh
Normal file
|
@ -0,0 +1,179 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
. ../common-script.sh
|
||||
|
||||
# Function to list common session options
|
||||
list_sessions() {
|
||||
echo "Select the session:"
|
||||
echo "1) GNOME (gnome.desktop)"
|
||||
echo "2) KDE Plasma (plasma.desktop)"
|
||||
echo "3) XFCE (xfce.desktop)"
|
||||
echo "4) LXDE (LXDE.desktop)"
|
||||
echo "5) LXQt (lxqt.desktop)"
|
||||
echo "6) Cinnamon (cinnamon.desktop)"
|
||||
echo "7) MATE (mate.desktop)"
|
||||
echo "8) Openbox (openbox.desktop)"
|
||||
echo "9) i3 (i3.desktop)"
|
||||
echo "10) Custom session"
|
||||
echo "Enter your choice [1-10]: "
|
||||
read session_choice
|
||||
|
||||
case "$session_choice" in
|
||||
1) session="gnome.desktop" ;;
|
||||
2) session="plasma.desktop" ;;
|
||||
3) session="xfce.desktop" ;;
|
||||
4) session="LXDE.desktop" ;;
|
||||
5) session="lxqt.desktop" ;;
|
||||
6) session="cinnamon.desktop" ;;
|
||||
7) session="mate.desktop" ;;
|
||||
8) session="openbox.desktop" ;;
|
||||
9) session="i3.desktop" ;;
|
||||
10)
|
||||
echo "Enter custom session name (e.g., mysession.desktop): "
|
||||
read -r session ;;
|
||||
*)
|
||||
echo "Invalid option selected."
|
||||
exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Function to configure LightDM
|
||||
configure_lightdm() {
|
||||
echo "Configuring LightDM for autologin..."
|
||||
|
||||
echo "Enter username for LightDM autologin: "
|
||||
read -r user
|
||||
|
||||
$ESCALATION_TOOL "echo '[Seat:*]' > /etc/lightdm/lightdm.conf.d/50-autologin.conf"
|
||||
$ESCALATION_TOOL "echo 'autologin-user=$user' >> /etc/lightdm/lightdm.conf.d/50-autologin.conf"
|
||||
$ESCALATION_TOOL "echo 'autologin-user-timeout=0' >> /etc/lightdm/lightdm.conf.d/50-autologin.conf"
|
||||
|
||||
echo "LightDM has been configured for autologin."
|
||||
}
|
||||
|
||||
# Function to remove LightDM autologin
|
||||
remove_lightdm_autologin() {
|
||||
echo "Removing LightDM autologin configuration..."
|
||||
$ESCALATION_TOOL rm -f /etc/lightdm/lightdm.conf.d/50-autologin.conf
|
||||
echo "LightDM autologin configuration has been removed."
|
||||
}
|
||||
|
||||
# Function to configure GDM
|
||||
configure_gdm() {
|
||||
echo "Configuring GDM for autologin..."
|
||||
|
||||
echo "Enter username for GDM autologin: "
|
||||
read -r user
|
||||
|
||||
$ESCALATION_TOOL "echo '[daemon]' > /etc/gdm/custom.conf"
|
||||
$ESCALATION_TOOL "echo 'AutomaticLoginEnable = true' >> /etc/gdm/custom.conf"
|
||||
$ESCALATION_TOOL "echo 'AutomaticLogin = $user' >> /etc/gdm/custom.conf"
|
||||
|
||||
echo "GDM has been configured for autologin."
|
||||
}
|
||||
|
||||
# Function to remove GDM autologin
|
||||
remove_gdm_autologin() {
|
||||
echo "Removing GDM autologin configuration..."
|
||||
$ESCALATION_TOOL sed -i '/AutomaticLoginEnable/d' /etc/gdm/custom.conf
|
||||
$ESCALATION_TOOL sed -i '/AutomaticLogin/d' /etc/gdm/custom.conf
|
||||
echo "GDM autologin configuration has been removed."
|
||||
}
|
||||
|
||||
# Function to configure SDDM
|
||||
configure_sddm() {
|
||||
echo "Configuring SDDM for autologin..."
|
||||
|
||||
echo "Enter username for SDDM autologin: "
|
||||
read -r user
|
||||
list_sessions # Show session options
|
||||
|
||||
$ESCALATION_TOOL "echo '[Autologin]' > /etc/sddm.conf"
|
||||
$ESCALATION_TOOL "echo 'User=$user' >> /etc/sddm.conf"
|
||||
$ESCALATION_TOOL "echo 'Session=$session' >> /etc/sddm.conf"
|
||||
|
||||
echo "SDDM has been configured for autologin."
|
||||
}
|
||||
|
||||
# Function to remove SDDM autologin
|
||||
remove_sddm_autologin() {
|
||||
echo "Removing SDDM autologin configuration..."
|
||||
$ESCALATION_TOOL sed -i '/\[Autologin\]/,+2d' /etc/sddm.conf
|
||||
echo "SDDM autologin configuration has been removed."
|
||||
}
|
||||
|
||||
# Function to configure LXDM
|
||||
configure_lxdm() {
|
||||
echo "Configuring LXDM for autologin..."
|
||||
|
||||
echo "Enter username for LXDM autologin: "
|
||||
read -r user
|
||||
list_sessions # Show session options
|
||||
|
||||
$ESCALATION_TOOL sed -i "s/^#.*autologin=.*$/autologin=${user}/" /etc/lxdm/lxdm.conf
|
||||
$ESCALATION_TOOL sed -i "s|^#.*session=.*$|session=/usr/bin/${session}|; s|^session=.*$|session=/usr/bin/${session}|" /etc/lxdm/lxdm.conf
|
||||
|
||||
echo "LXDM has been configured for autologin."
|
||||
}
|
||||
|
||||
# Function to remove LXDM autologin
|
||||
remove_lxdm_autologin() {
|
||||
echo "Removing LXDM autologin configuration..."
|
||||
$ESCALATION_TOOL sed -i "s/^autologin=.*$/#autologin=/" /etc/lxdm/lxdm.conf
|
||||
$ESCALATION_TOOL sed -i "s/^session=.*$/#session=/" /etc/lxdm/lxdm.conf
|
||||
echo "LXDM autologin configuration has been removed."
|
||||
}
|
||||
|
||||
# Function to configure or remove autologin based on user choice
|
||||
configure_or_remove_autologin() {
|
||||
echo "Do you want to add or remove autologin?"
|
||||
echo "1) Add autologin"
|
||||
echo "2) Remove autologin"
|
||||
echo "Enter your choice [1-2]: "
|
||||
read action_choice
|
||||
|
||||
if [ "$action_choice" = "1" ]; then
|
||||
echo "Choose the display manager to configure:"
|
||||
echo "1) LightDM"
|
||||
echo "2) GDM"
|
||||
echo "3) SDDM"
|
||||
echo "4) LXDM"
|
||||
echo "Enter your choice [1-4]: "
|
||||
read choice
|
||||
|
||||
case "$choice" in
|
||||
1) configure_lightdm ;;
|
||||
2) configure_gdm ;;
|
||||
3) configure_sddm ;;
|
||||
4) configure_lxdm ;;
|
||||
*) echo "Invalid option selected." ;;
|
||||
esac
|
||||
elif [ "$action_choice" = "2" ]; then
|
||||
echo "Choose the display manager to remove autologin:"
|
||||
echo "1) LightDM"
|
||||
echo "2) GDM"
|
||||
echo "3) SDDM"
|
||||
echo "4) LXDM"
|
||||
echo "Enter your choice [1-4]: "
|
||||
read choice
|
||||
|
||||
case "$choice" in
|
||||
1) remove_lightdm_autologin ;;
|
||||
2) remove_gdm_autologin ;;
|
||||
3) remove_sddm_autologin ;;
|
||||
4) remove_lxdm_autologin ;;
|
||||
*) echo "Invalid option selected." ;;
|
||||
esac
|
||||
else
|
||||
echo "Invalid choice. Exiting..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Action completed. Exiting..."
|
||||
exit 0
|
||||
}
|
||||
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
configure_or_remove_autologin
|
193
tabs/utils/create-bootable-usb.sh
Normal file
193
tabs/utils/create-bootable-usb.sh
Normal file
|
@ -0,0 +1,193 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
. ../common-script.sh
|
||||
|
||||
# Function to display usage instructions
|
||||
usage() {
|
||||
printf "%b\n" "${RED} Usage: $0 ${RC}"
|
||||
echo "No arguments needed. The script will prompt for ISO path and USB device."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Function to display all available block devices
|
||||
list_devices() {
|
||||
printf "%b\n" "${YELLOW} Available devices and partitions: ${RC}"
|
||||
echo ""
|
||||
$ESCALATION_TOOL lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Function to fetch the latest Arch Linux ISO
|
||||
fetch_arch_latest_iso() {
|
||||
ARCH_BASE_URL="https://archive.archlinux.org/iso/"
|
||||
ARCH_LATEST=$(curl -s "$ARCH_BASE_URL" | grep -oP '(?<=href=")[0-9]{4}\.[0-9]{2}\.[0-9]{2}(?=/)' | sort -V | tail -1)
|
||||
ARCH_URL="${ARCH_BASE_URL}${ARCH_LATEST}/archlinux-${ARCH_LATEST}-x86_64.iso"
|
||||
printf "%b\n" "${GREEN} Selected Arch Linux (latest) ISO URL: ${RC} $ARCH_URL"
|
||||
}
|
||||
|
||||
# Function to fetch older Arch Linux ISOs and display in a table format
|
||||
fetch_arch_older_isos() {
|
||||
ARCH_BASE_URL="https://archive.archlinux.org/iso/"
|
||||
ARCH_VERSIONS=$(curl -s "$ARCH_BASE_URL" | grep -oP '(?<=href=")[0-9]{4}\.[0-9]{2}\.[0-9]{2}(?=/)' | sort -V)
|
||||
|
||||
# Filter versions to include only those from 2017-04-01 and later
|
||||
MIN_DATE="2017.04.01"
|
||||
ARCH_VERSIONS=$(echo "$ARCH_VERSIONS" | awk -v min_date="$MIN_DATE" '$0 >= min_date')
|
||||
|
||||
if [ -z "$ARCH_VERSIONS" ]; then
|
||||
printf "%b\n" "${RED}No Arch Linux versions found from ${MIN_DATE} onwards.${RC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printf "%b\n" "${YELLOW}Available Arch Linux versions from ${MIN_DATE} onwards:${RC}"
|
||||
|
||||
COUNTER=1
|
||||
ROW_ITEMS=6 # Number of versions to show per row
|
||||
for VERSION in $ARCH_VERSIONS; do
|
||||
printf "%-5s${YELLOW}%-15s ${RC}" "$COUNTER)" "$VERSION"
|
||||
|
||||
if [ $(( COUNTER % ROW_ITEMS )) -eq 0 ]; then
|
||||
echo "" # New line after every 6 versions
|
||||
fi
|
||||
|
||||
COUNTER=$((COUNTER + 1))
|
||||
done
|
||||
printf "\n" # New line after the last row
|
||||
printf "Select an Arch Linux version (1-%d): " "$((COUNTER - 1))"
|
||||
read -r ARCH_OPTION
|
||||
ARCH_DIR=$(echo "$ARCH_VERSIONS" | sed -n "${ARCH_OPTION}p")
|
||||
ARCH_URL="${ARCH_BASE_URL}${ARCH_DIR}/archlinux-${ARCH_DIR}-x86_64.iso"
|
||||
printf "%b\n" "${GREEN}Selected Arch Linux (older) ISO URL: $ARCH_URL${RC}"
|
||||
}
|
||||
|
||||
|
||||
# Function to fetch the latest Debian Linux ISO
|
||||
fetch_debian_latest_iso() {
|
||||
DEBIAN_URL=$(curl -s https://www.debian.org/distrib/netinst | grep -oP '(?<=href=")[^"]+debian-[0-9.]+-amd64-netinst.iso(?=")' | head -1)
|
||||
printf "%b\n" "${GREEN} Selected Debian Linux (latest) ISO URL: ${RC} $DEBIAN_URL"
|
||||
}
|
||||
|
||||
# Function to ask whether to use local or online ISO
|
||||
choose_iso_source() {
|
||||
printf "%b\n" "${YELLOW} Do you want to use a local ISO or download online? ${RC}"
|
||||
printf "1) Download online\n"
|
||||
printf "2) Use local ISO\n"
|
||||
printf "\n"
|
||||
printf "Select option (1-2): "
|
||||
read -r ISO_SOURCE_OPTION
|
||||
|
||||
case $ISO_SOURCE_OPTION in
|
||||
1)
|
||||
fetch_iso_urls # Call the function to fetch online ISO URLs
|
||||
;;
|
||||
2)
|
||||
printf "Enter the path to the already downloaded ISO file: "
|
||||
read -r ISO_PATH
|
||||
if [ ! -f "$ISO_PATH" ]; then
|
||||
printf "%b\n" "${RED} ISO file not found: $ISO_PATH ${RC}"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Invalid option selected. ${RC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Function to fetch ISO URLs
|
||||
fetch_iso_urls() {
|
||||
clear
|
||||
printf "%b\n" "${YELLOW}Available ISOs for download:${RC}"
|
||||
echo "1) Arch Linux (latest)"
|
||||
echo "2) Arch Linux (older versions)"
|
||||
echo "3) Debian Linux (latest)"
|
||||
echo ""
|
||||
read -p "Select the ISO you want to download (1-3): " ISO_OPTION
|
||||
|
||||
case $ISO_OPTION in
|
||||
1)
|
||||
fetch_arch_latest_iso
|
||||
ISO_URL=$ARCH_URL
|
||||
;;
|
||||
2)
|
||||
fetch_arch_older_isos
|
||||
ISO_URL=$ARCH_URL
|
||||
;;
|
||||
3)
|
||||
fetch_debian_latest_iso
|
||||
ISO_URL=$DEBIAN_URL
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Invalid option selected.${RC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
ISO_PATH=$(basename "$ISO_URL")
|
||||
printf "%b\n" "${YELLOW}Downloading ISO...${RC}"
|
||||
curl -L -o "$ISO_PATH" "$ISO_URL"
|
||||
if [ $? -ne 0 ]; then
|
||||
printf "%b\n" "${RED}Failed to download the ISO file.${RC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
write_iso(){
|
||||
clear
|
||||
|
||||
# Ask whether to use a local or online ISO
|
||||
choose_iso_source
|
||||
|
||||
clear
|
||||
# Display all available devices
|
||||
list_devices
|
||||
|
||||
# Prompt user for USB device
|
||||
read -p "Enter the USB device (e.g., /dev/sdX): " USB_DEVICE
|
||||
|
||||
# Verify that the USB device exists
|
||||
if [ ! -b "$USB_DEVICE" ]; then
|
||||
printf "%b\n" "${RED}USB device not found: $USB_DEVICE${RC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Confirm the device selection with the user
|
||||
printf "%b\n" "${RED}WARNING: This will erase all data on ${USB_DEVICE}. Are you sure you want to continue? (yes/no)${RC}"
|
||||
read -r CONFIRMATION
|
||||
|
||||
if [ "$CONFIRMATION" != "yes" ]; then
|
||||
printf "%b\n" "${YELLOW}Operation cancelled.${RC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Display progress and create the bootable USB drive
|
||||
printf "%b\n" "${YELLOW}Creating bootable USB drive...${RC}"
|
||||
if ! $ESCALATION_TOOL dd if="$ISO_PATH" of="$USB_DEVICE" bs=4M status=progress oflag=sync; then
|
||||
printf "%b\n" "${RED}Failed to create bootable USB drive${RC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Sync to ensure all data is written
|
||||
if ! $ESCALATION_TOOL sync; then
|
||||
printf "%b\n" "${RED}Failed to sync data${RC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printf "%b\n" "${GREEN}Bootable USB drive created successfully!${RC}"
|
||||
|
||||
# Eject the USB device
|
||||
printf "%b\n" "${YELLOW}Ejecting ${USB_DEVICE}...${RC}"
|
||||
if ! $ESCALATION_TOOL umount "${USB_DEVICE}"* 2>/dev/null; then
|
||||
printf "%b\n" "${RED}Failed to unmount ${USB_DEVICE}${RC}"
|
||||
fi
|
||||
if ! $ESCALATION_TOOL eject "$USB_DEVICE"; then
|
||||
printf "%b\n" "${RED}Failed to eject ${USB_DEVICE}${RC}"
|
||||
fi
|
||||
|
||||
printf "%b\n" "${GREEN}You can safely remove your USB drive. Reinsert the drive to be detected.${RC}"
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
write_iso
|
85
tabs/utils/monitor-control/set_brightness.sh
Normal file
85
tabs/utils/monitor-control/set_brightness.sh
Normal file
|
@ -0,0 +1,85 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
. ./utility_functions.sh
|
||||
|
||||
# Function to adjust brightness for a selected monitor
|
||||
adjust_monitor_brightness() {
|
||||
while true; do
|
||||
monitor_list=$(detect_connected_monitors)
|
||||
monitor_array=$(echo "$monitor_list" | tr '\n' ' ')
|
||||
set -- $monitor_array
|
||||
count=1
|
||||
|
||||
clear
|
||||
printf "%b\n" "${YELLOW}=========================================${RC}"
|
||||
printf "%b\n" "${YELLOW} Adjust Monitor Brightness${RC}"
|
||||
printf "%b\n" "${YELLOW}=========================================${RC}"
|
||||
printf "%b\n" "${YELLOW}Choose a monitor to adjust brightness:${RC}"
|
||||
for monitor in "$@"; do
|
||||
echo "$count. $monitor"
|
||||
count=$((count + 1))
|
||||
done
|
||||
|
||||
echo "Enter the number of the monitor (or 'q' to quit): "
|
||||
read monitor_choice
|
||||
|
||||
if [ "$monitor_choice" = "q" ]; then
|
||||
printf "%b\n" "${RED}Exiting...${RC}"
|
||||
return
|
||||
fi
|
||||
|
||||
if ! echo "$monitor_choice" | grep -qE '^[0-9]+$'; then
|
||||
echo "Invalid selection. Please try again."
|
||||
echo "Press [Enter] to continue..."
|
||||
read dummy
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "$monitor_choice" -lt 1 ] || [ "$monitor_choice" -gt "$#" ]; then
|
||||
printf "%b\n" "${RED}Invalid selection. Please try again.${RC}"
|
||||
echo "Press [Enter] to continue..."
|
||||
read dummy
|
||||
continue
|
||||
fi
|
||||
|
||||
monitor_name=$(eval echo "\${$monitor_choice}")
|
||||
current_brightness=$(get_current_brightness "$monitor_name")
|
||||
|
||||
# Correctly calculate the brightness percentage
|
||||
current_brightness_percentage=$(awk "BEGIN {printf \"%.0f\", $current_brightness * 100}")
|
||||
printf "%b\n" "${YELLOW}Current brightness for $monitor_name${RC}: ${GREEN}$current_brightness_percentage%${RC}"
|
||||
|
||||
while true; do
|
||||
echo "Enter the new brightness value as a percentage (10 to 100, or 'q' to quit): "
|
||||
read new_brightness_percentage
|
||||
|
||||
if [ "$new_brightness_percentage" = "q" ]; then
|
||||
printf "%b\n" "${RED}Exiting...${RC}"
|
||||
return
|
||||
fi
|
||||
|
||||
# Validate brightness input: accept only values above 10
|
||||
if ! echo "$new_brightness_percentage" | grep -qE '^[0-9]+$' || [ "$new_brightness_percentage" -lt 10 ] || [ "$new_brightness_percentage" -gt 100 ]; then
|
||||
printf "%b\n" "${RED}Invalid brightness value. Please enter a value between 10 and 100.${RC}"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Convert percentage to xrandr brightness value (10% to 0.10)
|
||||
new_brightness=$(awk "BEGIN {printf \"%.2f\", $new_brightness_percentage / 100}")
|
||||
|
||||
echo "Set brightness for $monitor_name to $new_brightness_percentage%? (y/n): "
|
||||
read confirm
|
||||
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
|
||||
printf "%b\n" "${GREEN}Setting brightness for $monitor_name to $new_brightness_percentage%${RC}"
|
||||
execute_command "xrandr --output $monitor_name --brightness $new_brightness"
|
||||
printf "%b\n" "${GREEN}Brightness for $monitor_name set to $new_brightness_percentage% successfully.${RC}"
|
||||
break
|
||||
else
|
||||
printf "%b\n" "${RED}Action canceled. Please choose a different brightness value.${RC}"
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
# Call the adjust_monitor_brightness function
|
||||
adjust_monitor_brightness
|
|
@ -38,6 +38,12 @@ detect_connected_monitors() {
|
|||
echo "$xrandr_output" | grep " connected" | awk '{print $1}'
|
||||
}
|
||||
|
||||
# Function to get the current brightness for a monitor
|
||||
get_current_brightness() {
|
||||
monitor="$1"
|
||||
xrandr --verbose | grep -A 10 "^$monitor connected" | grep "Brightness:" | awk '{print $2}'
|
||||
}
|
||||
|
||||
# Function to get resolutions for a monitor
|
||||
get_unique_resolutions() {
|
||||
monitor="$1"
|
||||
|
@ -73,8 +79,9 @@ get_unique_resolutions() {
|
|||
# Function to prompt for confirmation
|
||||
confirm_action() {
|
||||
action="$1"
|
||||
echo "$action"
|
||||
read -p "Are you sure? (y/n): " confirm
|
||||
printf "%b\n" "${CYAN}$action${RC}"
|
||||
printf "%b" "${CYAN}Are you sure? (y/n): ${RC}"
|
||||
read -r confirm
|
||||
if echo "$confirm" | grep -qE '^[Yy]$'; then
|
||||
return 0
|
||||
else
|
||||
|
|
100
tabs/utils/power-profile.sh
Normal file
100
tabs/utils/power-profile.sh
Normal file
|
@ -0,0 +1,100 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
. ../common-script.sh
|
||||
|
||||
installAutoCpufreq() {
|
||||
clear
|
||||
printf "%b\n" "${YELLOW}Checking if auto-cpufreq is already installed...${RC}"
|
||||
|
||||
# Check if auto-cpufreq is already installed
|
||||
if command_exists auto-cpufreq; then
|
||||
printf "%b\n" "${GREEN}auto-cpufreq is already installed.${RC}"
|
||||
else
|
||||
printf "%b\n" "${YELLOW}Installing auto-cpufreq...${RC}"
|
||||
|
||||
# Install git if not already installed
|
||||
if ! command_exists git; then
|
||||
printf "%b\n" "${YELLOW}git not found. Installing git...${RC}"
|
||||
case ${PACKAGER} in
|
||||
pacman)
|
||||
$ESCALATION_TOOL ${PACKAGER} -S --needed --noconfirm git
|
||||
;;
|
||||
*)
|
||||
$ESCALATION_TOOL ${PACKAGER} install -y git
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Clone the auto-cpufreq repository and run the installer
|
||||
if [ ! -d "auto-cpufreq" ]; then
|
||||
printf "%b\n" "${YELLOW}Cloning auto-cpufreq repository...${RC}"
|
||||
git clone https://github.com/AdnanHodzic/auto-cpufreq.git
|
||||
fi
|
||||
|
||||
case ${PACKAGER} in
|
||||
*)
|
||||
cd auto-cpufreq
|
||||
printf "%b\n" "${YELLOW}Running auto-cpufreq installer...${RC}"
|
||||
$ESCALATION_TOOL ./auto-cpufreq-installer
|
||||
;;
|
||||
esac
|
||||
cd ..
|
||||
fi
|
||||
}
|
||||
|
||||
configureAutoCpufreq() {
|
||||
printf "%b\n" "${YELLOW}Configuring auto-cpufreq...${RC}"
|
||||
|
||||
if command_exists auto-cpufreq; then
|
||||
# Check if the system has a battery to determine if it's a laptop
|
||||
if [ -d /sys/class/power_supply/BAT0 ]; then
|
||||
printf "%b\n" "${GREEN}System detected as laptop. Updating auto-cpufreq for laptop...${RC}"
|
||||
$ESCALATION_TOOL auto-cpufreq --force powersave
|
||||
else
|
||||
printf "%b\n" "${GREEN}System detected as desktop. Updating auto-cpufreq for desktop...${RC}"
|
||||
$ESCALATION_TOOL auto-cpufreq --force performance
|
||||
fi
|
||||
else
|
||||
printf "%b\n" "${RED}auto-cpufreq is not installed, skipping configuration.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
removeAutoCpufreqTweak() {
|
||||
printf "%b\n" "${YELLOW}Removing auto-cpufreq tweak...${RC}"
|
||||
|
||||
if command_exists auto-cpufreq; then
|
||||
printf "%b\n" "${YELLOW}Resetting auto-cpufreq configuration...${RC}"
|
||||
$ESCALATION_TOOL auto-cpufreq --force reset
|
||||
else
|
||||
printf "%b\n" "${RED}auto-cpufreq is not installed, skipping removal.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
apply_or_remove_auto_cpufreq() {
|
||||
# Prompt user for action
|
||||
printf "%b\n" "${YELLOW}Do you want to apply the auto-cpufreq tweak or remove it?${RC}"
|
||||
printf "%b\n" "${YELLOW}1) Apply tweak${RC}"
|
||||
printf "%b\n" "${YELLOW}2) Remove tweak${RC}"
|
||||
printf "%b" "Enter your choice [1/2]: "
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
configureAutoCpufreq
|
||||
;;
|
||||
2)
|
||||
removeAutoCpufreqTweak
|
||||
;;
|
||||
*)
|
||||
printf "%b\n" "${RED}Invalid choice. Exiting.${RC}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
printf "%b\n" "${GREEN}auto-cpufreq setup complete.${RC}"
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installAutoCpufreq
|
||||
apply_or_remove_auto_cpufreq
|
|
@ -20,6 +20,22 @@ script = "ollama.sh"
|
|||
name = "Service Manager"
|
||||
script = "service-control.sh"
|
||||
|
||||
[[data]]
|
||||
name = "Auto Login"
|
||||
script = "auto-login.sh"
|
||||
|
||||
[[data]]
|
||||
name = "Bootable USB Creator"
|
||||
script = "create-bootable-usb.sh"
|
||||
|
||||
[[data]]
|
||||
name = "Auto Power Profiling"
|
||||
script = "power-profile.sh"
|
||||
|
||||
[[data]]
|
||||
name = "Timeshift Backup"
|
||||
script = "timeshift.sh"
|
||||
|
||||
[[data]]
|
||||
name = "Monitor Control"
|
||||
|
||||
|
@ -73,3 +89,8 @@ script = "monitor-control/scale_monitor.sh"
|
|||
name = "Reset Scaling"
|
||||
script = "monitor-control/reset_scaling.sh"
|
||||
matches = true
|
||||
|
||||
[[data.entries]]
|
||||
name = "Set Brightness"
|
||||
script = "monitor-control/set_brightness.sh"
|
||||
matches = true
|
162
tabs/utils/timeshift.sh
Normal file
162
tabs/utils/timeshift.sh
Normal file
|
@ -0,0 +1,162 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
. ../common-script.sh
|
||||
|
||||
# Function to install Timeshift
|
||||
install_timeshift() {
|
||||
clear
|
||||
printf "%b\n" "${YELLOW}Checking if Timeshift is installed...${RC}"
|
||||
|
||||
if ! command_exists timeshift; then
|
||||
case ${PACKAGER} in
|
||||
pacman)
|
||||
$ESCALATION_TOOL "${PACKAGER}" -S --noconfirm timeshift
|
||||
;;
|
||||
*)
|
||||
$ESCALATION_TOOL "${PACKAGER}" install -y timeshift
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo "Timeshift is already installed."
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to display the menu
|
||||
display_menu() {
|
||||
clear
|
||||
printf "%b\n" "${CYAN}Timeshift CLI Automation${RC}"
|
||||
printf "%b\n" "${CYAN}\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-"
|
||||
printf "%b\n" "${CYAN}1) List Snapshots${RC}"
|
||||
printf "%b\n" "${CYAN}2) List Devices${RC}"
|
||||
printf "%b\n" "${CYAN}3) Create Snapshot${RC}"
|
||||
printf "%b\n" "${CYAN}4) Restore Snapshot${RC}"
|
||||
printf "%b\n" "${CYAN}5) Delete Snapshot${RC}"
|
||||
printf "%b\n" "${CYAN}6) Delete All Snapshots${RC}"
|
||||
printf "%b\n" "${CYAN}7) Exit${RC}"
|
||||
printf "%b\n" "${CYAN}\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-"
|
||||
}
|
||||
|
||||
# Function to list snapshots
|
||||
list_snapshots() {
|
||||
printf "%b\n" "${CYAN}Listing snapshots...${RC}"
|
||||
$ESCALATION_TOOL timeshift --list-snapshots
|
||||
}
|
||||
|
||||
# Function to list devices
|
||||
list_devices() {
|
||||
printf "%b\n" "${CYAN}Listing available devices...${RC}"
|
||||
$ESCALATION_TOOL timeshift --list-devices
|
||||
}
|
||||
|
||||
# Function to create a new snapshot
|
||||
create_snapshot() {
|
||||
printf "%b" "${CYAN}Enter a comment for the snapshot (optional): ${RC}"
|
||||
read -r COMMENT
|
||||
printf "%b" "${CYAN}Enter snapshot tag (O,B,H,D,W,M) (leave empty for no tag): ${RC}"
|
||||
read -r TAG
|
||||
|
||||
if [ -z "$COMMENT" ] && [ -z "$TAG" ]; then
|
||||
echo "Creating snapshot with no comment or tag..."
|
||||
$ESCALATION_TOOL timeshift --create
|
||||
elif [ -z "$TAG" ]; then
|
||||
echo "Creating snapshot with no tag..."
|
||||
$ESCALATION_TOOL timeshift --create --comments "$COMMENT"
|
||||
else
|
||||
echo "Creating snapshot with tag: $TAG..."
|
||||
$ESCALATION_TOOL timeshift --create --comments "$COMMENT" --tags "$TAG"
|
||||
fi
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Snapshot created successfully."
|
||||
else
|
||||
echo "Snapshot creation failed."
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to restore a snapshot
|
||||
restore_snapshot() {
|
||||
list_snapshots
|
||||
|
||||
printf "%b" "${CYAN}Enter the snapshot name you want to restore: ${RC}"
|
||||
read -r SNAPSHOT
|
||||
printf "%b" "${CYAN}Enter the target device (e.g., /dev/sda1): ${RC}"
|
||||
read -r TARGET_DEVICE
|
||||
printf "%b" "${CYAN}Do you want to skip GRUB reinstall? (yes/no): ${RC}"
|
||||
read -r SKIP_GRUB
|
||||
|
||||
if [ "$SKIP_GRUB" = "yes" ]; then
|
||||
$ESCALATION_TOOL timeshift --restore --snapshot "$SNAPSHOT" --target-device "$TARGET_DEVICE" --skip-grub --yes
|
||||
else
|
||||
printf "%b" "${CYAN}Enter GRUB device (e.g., /dev/sda): ${RC}"
|
||||
read -r GRUB_DEVICE
|
||||
$ESCALATION_TOOL timeshift --restore --snapshot "$SNAPSHOT" --target-device "$TARGET_DEVICE" --grub-device "$GRUB_DEVICE" --yes
|
||||
fi
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
printf "%b\n" "${GREEN}Snapshot restored successfully.${RC}"
|
||||
else
|
||||
printf "%b\n" "${RED}Snapshot restore failed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to delete a snapshot
|
||||
delete_snapshot() {
|
||||
list_snapshots
|
||||
|
||||
printf "%b" "${CYAN}Enter the snapshot name you want to delete: ${RC}"
|
||||
read -r SNAPSHOT
|
||||
|
||||
printf "%b\n" "${YELLOW}Deleting snapshot $SNAPSHOT...${RC}"
|
||||
$ESCALATION_TOOL timeshift --delete --snapshot "$SNAPSHOT" --yes
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
printf "%b\n" "${GREEN}Snapshot deleted successfully.${RC}"
|
||||
else
|
||||
printf "%b\n" "${RED}Snapshot deletion failed.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to delete all snapshots
|
||||
delete_all_snapshots() {
|
||||
printf "%b\n" "${RED}WARNING: This will delete all snapshots!${RC}"
|
||||
printf "%b" "${CYAN}Are you sure? (yes/no): ${RC}"
|
||||
read -r CONFIRMATION
|
||||
|
||||
if [ "$CONFIRMATION" = "yes" ]; then
|
||||
echo "Deleting all snapshots..."
|
||||
$ESCALATION_TOOL timeshift --delete-all --yes
|
||||
if [ $? -eq 0 ]; then
|
||||
printf "%b\n" "${GREEN}All snapshots deleted successfully.${RC}"
|
||||
else
|
||||
printf "%b\n" "${RED}Failed to delete snapshots.${RC}"
|
||||
fi
|
||||
else
|
||||
printf "%b\n" "${RED}Operation cancelled.${RC}"
|
||||
fi
|
||||
}
|
||||
|
||||
main_menu() {
|
||||
while true; do
|
||||
display_menu
|
||||
printf "%b" "${CYAN}Select an option (1-7): ${RC}"
|
||||
read -r OPTION
|
||||
|
||||
case $OPTION in
|
||||
1) list_snapshots ;;
|
||||
2) list_devices ;;
|
||||
3) create_snapshot ;;
|
||||
4) restore_snapshot ;;
|
||||
5) delete_snapshot ;;
|
||||
6) delete_all_snapshots ;;
|
||||
7) printf "%b\n" "${GREEN}Exiting...${RC}"; exit 0 ;;
|
||||
*) printf "%b\n" "${RED}Invalid option. Please try again.${RC}" ;;
|
||||
esac
|
||||
printf "%b" "${CYAN}Press Enter to continue...${RC}"
|
||||
read -r dummy
|
||||
done
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
install_timeshift
|
||||
main_menu
|
|
@ -16,7 +16,7 @@ pub struct ShortcutList {
|
|||
}
|
||||
|
||||
pub struct Shortcut {
|
||||
pub key_sequenses: Vec<Span<'static>>,
|
||||
pub key_sequences: Vec<Span<'static>>,
|
||||
pub desc: &'static str,
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,7 @@ impl ShortcutList {
|
|||
impl Shortcut {
|
||||
pub fn new(key_sequences: Vec<&'static str>, desc: &'static str) -> Self {
|
||||
Self {
|
||||
key_sequenses: key_sequences
|
||||
key_sequences: key_sequences
|
||||
.iter()
|
||||
.map(|s| Span::styled(*s, Style::default().bold()))
|
||||
.collect(),
|
||||
|
@ -85,7 +85,7 @@ impl Shortcut {
|
|||
|
||||
fn to_spans(&self) -> Vec<Span> {
|
||||
let mut ret: Vec<_> = self
|
||||
.key_sequenses
|
||||
.key_sequences
|
||||
.iter()
|
||||
.flat_map(|seq| {
|
||||
[
|
||||
|
@ -124,10 +124,10 @@ pub fn draw_shortcuts(state: &AppState, frame: &mut Frame, area: Rect) {
|
|||
if state.selected_item_is_up_dir() {
|
||||
hints.push(Shortcut::new(
|
||||
vec!["l", "Right", "Enter", "h", "Left"],
|
||||
"Go to parrent directory",
|
||||
"Go to parent directory",
|
||||
));
|
||||
} else {
|
||||
hints.push(Shortcut::new(vec!["h", "Left"], "Go to parrent directory"));
|
||||
hints.push(Shortcut::new(vec!["h", "Left"], "Go to parent directory"));
|
||||
hints.push(get_list_item_shortcut(state));
|
||||
if state.selected_item_is_cmd() {
|
||||
hints.push(Shortcut::new(vec!["p"], "Enable preview"));
|
||||
|
|
|
@ -26,7 +26,7 @@ pub struct AppState {
|
|||
tabs: Vec<Tab>,
|
||||
/// Current tab
|
||||
current_tab: ListState,
|
||||
/// This stack keeps track of our "current dirrectory". You can think of it as `pwd`. but not
|
||||
/// This stack keeps track of our "current directory". You can think of it as `pwd`. but not
|
||||
/// just the current directory, all paths that took us here, so we can "cd .."
|
||||
visit_stack: Vec<NodeId>,
|
||||
/// This is the state asociated with the list widget, used to display the selection in the
|
||||
|
@ -262,7 +262,7 @@ impl AppState {
|
|||
);
|
||||
}
|
||||
|
||||
/// Checks ehther the current tree node is the root node (can we go up the tree or no)
|
||||
/// Checks either the current tree node is the root node (can we go up the tree or no)
|
||||
/// Returns `true` if we can't go up the tree (we are at the tree root)
|
||||
/// else returns `false`
|
||||
pub fn at_root(&self) -> bool {
|
||||
|
|
Loading…
Reference in New Issue
Block a user