diff --git a/.github/workflows/linutil.yml b/.github/workflows/linutil.yml index 34ce5d4c..30f7f8ad 100644 --- a/.github/workflows/linutil.yml +++ b/.github/workflows/linutil.yml @@ -30,13 +30,11 @@ jobs: key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo-index- - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable + uses: dtolnay/rust-toolchain@stable - name: Build run: cargo build --target-dir=build --release --verbose - uses: stefanzweifel/git-auto-commit-action@v5 with: commit_message: Commit Linutil file_pattern: 'build/release/linutil' - if: success() \ No newline at end of file + if: success() diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 471af03f..0b2e12a4 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -1,4 +1,4 @@ -name: Rust Check +name: Rust Checks on: pull_request: @@ -9,25 +9,46 @@ env: jobs: cargo_check: + name: Cargo Check runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout sources + uses: actions/checkout@v4 + - name: Cache Cargo registry uses: actions/cache@v4 with: path: ~/.cargo/registry key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo-registry- + - name: Cache Cargo index uses: actions/cache@v4 with: path: ~/.cargo/git key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} restore-keys: ${{ runner.os }}-cargo-index- + - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable + uses: dtolnay/rust-toolchain@stable + - name: Build - run: cargo check \ No newline at end of file + run: cargo check + + lints: + name: Lints + runs-on: ubuntu-latest + + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + + - name: Run cargo fmt + run: cargo fmt --all --check + + - name: Run cargo clippy + run: cargo clippy diff --git a/README.md b/README.md index b7cc61b2..590457ea 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,23 @@ -## Chris Titus Tech's Linux Utility +# Chris Titus Tech's Linux Utility +[![Version](https://img.shields.io/github/v/release/ChrisTitusTech/linutil?color=%230567ff&label=Latest%20Release&style=for-the-badge)](https://github.com/ChrisTitusTech/linutil/releases/latest) +![GitHub Downloads (specific asset, all releases)](https://img.shields.io/github/downloads/ChrisTitusTech/linutil/linutil?label=Total%20Downloads&style=for-the-badge) -![pv](https://i.imgur.com/quoAwXf.png) +![Preview](docs/assets/preview.png) -## Usage +## 💡 Usage Open your terminal and paste this command ```bash curl -fsSL https://christitus.com/linux | sh ``` +## 💖 Support +- To morally and mentally support the project, make sure to leave a ⭐️! + +## 🏅 Thanks to all Contributors +Thanks a lot for spending your time helping Winutil grow. Thanks a lot! Keep rocking 🍻. + +[![Contributors](https://contrib.rocks/image?repo=ChrisTitusTech/linutil)](https://github.com/ChrisTitusTech/linutil/graphs/contributors) + ## Credits Rust Shell written by [@JustLinuxUser](https://github.com/JustLinuxUser) diff --git a/build/release/linutil b/build/release/linutil index d45a974d..abee02e2 100755 Binary files a/build/release/linutil and b/build/release/linutil differ diff --git a/docs/assets/preview.png b/docs/assets/preview.png new file mode 100644 index 00000000..399ea373 Binary files /dev/null and b/docs/assets/preview.png differ diff --git a/src/commands/common-script.sh b/src/commands/common-script.sh index a8d43871..a6f31515 100644 --- a/src/commands/common-script.sh +++ b/src/commands/common-script.sh @@ -1,28 +1,33 @@ #!/bin/sh -e +# shellcheck disable=SC2034 + RC='\033[0m' RED='\033[31m' YELLOW='\033[33m' GREEN='\033[32m' command_exists() { - which $1 >/dev/null 2>&1 + which "$1" >/dev/null 2>&1 } -checkEnv() { + +checkCommandRequirements() { ## Check for requirements. - REQUIREMENTS='curl groups sudo' + REQUIREMENTS=$1 for req in ${REQUIREMENTS}; do - if ! command_exists ${req}; then - echo -e "${RED}To run me, you need: ${REQUIREMENTS}${RC}" + if ! command_exists "${req}"; then + echo "${RED}To run me, you need: ${REQUIREMENTS}${RC}" exit 1 fi done +} - ## Check Package Handler - PACKAGEMANAGER='apt-get dnf pacman zypper' +checkPackageManager() { + ## Check Package Manager + PACKAGEMANAGER=$1 for pgm in ${PACKAGEMANAGER}; do - if command_exists ${pgm}; then + if command_exists "${pgm}"; then PACKAGER=${pgm} echo "Using ${pgm}" break @@ -33,11 +38,13 @@ checkEnv() { echo -e "${RED}Can't find a supported package manager${RC}" exit 1 fi +} +checkSuperUser() { ## Check SuperUser Group SUPERUSERGROUP='wheel sudo root' for sug in ${SUPERUSERGROUP}; do - if groups | grep -q ${sug}; then + if groups | grep -q "${sug}"; then SUGROUP=${sug} echo "Super user group ${SUGROUP}" break @@ -45,15 +52,33 @@ checkEnv() { done ## Check if member of the sudo group. - if ! groups | grep -q ${SUGROUP}; then - echo -e "${RED}You need to be a member of the sudo group to run me!${RC}" + if ! groups | grep -q "${SUGROUP}"; then + echo "${RED}You need to be a member of the sudo group to run me!${RC}" exit 1 fi +} +checkCurrentDirectoryWritable() { + ## Check if the current directory is writable. + GITPATH="$(dirname "$(realpath "$0")")" + if [ ! -w "$GITPATH" ]; then + echo "${RED}Can't write to $GITPATH${RC}" + exit 1 + fi +} + +checkDistro() { DTYPE="unknown" # Default to unknown # Use /etc/os-release for modern distro identification if [ -f /etc/os-release ]; then . /etc/os-release DTYPE=$ID fi -} \ No newline at end of file +} + +checkEnv() { + checkCommandRequirements 'curl groups sudo' + checkPackageManager 'apt-get dnf pacman zypper' + checkSuperUser + checkDistro +} diff --git a/src/commands/dotfiles/alacritty-setup.sh b/src/commands/dotfiles/alacritty-setup.sh index bf8473d5..2e2156d4 100755 --- a/src/commands/dotfiles/alacritty-setup.sh +++ b/src/commands/dotfiles/alacritty-setup.sh @@ -1,61 +1,10 @@ #!/bin/sh -e -RC='\033[0m' -RED='\033[31m' -YELLOW='\033[33m' -GREEN='\033[32m' - -command_exists() { - which $1 >/dev/null 2>&1 -} - checkEnv() { - ## Check for requirements. - REQUIREMENTS='curl groups sudo' - for req in ${REQUIREMENTS}; do - if ! command_exists ${req}; then - echo -e "${RED}To run me, you need: ${REQUIREMENTS}${RC}" - exit 1 - fi - done - - ## Check Package Handler - PACKAGEMANAGER='apt-get dnf pacman zypper' - for pgm in ${PACKAGEMANAGER}; do - if command_exists ${pgm}; then - PACKAGER=${pgm} - echo "Using ${pgm}" - break - fi - done - - if [ -z "${PACKAGER}" ]; then - echo -e "${RED}Can't find a supported package manager${RC}" - exit 1 - fi - - ## Check SuperUser Group - SUPERUSERGROUP='wheel sudo root' - for sug in ${SUPERUSERGROUP}; do - if groups | grep -q ${sug}; then - SUGROUP=${sug} - echo "Super user group ${SUGROUP}" - break - fi - done - - ## Check if member of the sudo group. - if ! groups | grep -q ${SUGROUP}; then - echo -e "${RED}You need to be a member of the sudo group to run me!${RC}" - exit 1 - fi - - DTYPE="unknown" # Default to unknown - # Use /etc/os-release for modern distro identification - if [ -f /etc/os-release ]; then - . /etc/os-release - DTYPE=$ID - fi + checkCommandRequirements 'curl groups sudo' + checkPackageManager 'apt-get dnf pacman zypper' + checkSuperUser + checkDistro } setupAlacritty() { @@ -82,4 +31,4 @@ setupAlacritty() { } checkEnv -setupAlacritty \ No newline at end of file +setupAlacritty diff --git a/src/commands/dotfiles/kitty-setup.sh b/src/commands/dotfiles/kitty-setup.sh index 52167460..131d1f9a 100755 --- a/src/commands/dotfiles/kitty-setup.sh +++ b/src/commands/dotfiles/kitty-setup.sh @@ -1,61 +1,10 @@ #!/bin/sh -e -RC='\033[0m' -RED='\033[31m' -YELLOW='\033[33m' -GREEN='\033[32m' - -command_exists() { - which $1 >/dev/null 2>&1 -} - checkEnv() { - ## Check for requirements. - REQUIREMENTS='curl groups sudo' - for req in ${REQUIREMENTS}; do - if ! command_exists ${req}; then - echo -e "${RED}To run me, you need: ${REQUIREMENTS}${RC}" - exit 1 - fi - done - - ## Check Package Handler - PACKAGEMANAGER='apt-get dnf pacman zypper' - for pgm in ${PACKAGEMANAGER}; do - if command_exists ${pgm}; then - PACKAGER=${pgm} - echo "Using ${pgm}" - break - fi - done - - if [ -z "${PACKAGER}" ]; then - echo -e "${RED}Can't find a supported package manager${RC}" - exit 1 - fi - - ## Check SuperUser Group - SUPERUSERGROUP='wheel sudo root' - for sug in ${SUPERUSERGROUP}; do - if groups | grep -q ${sug}; then - SUGROUP=${sug} - echo "Super user group ${SUGROUP}" - break - fi - done - - ## Check if member of the sudo group. - if ! groups | grep -q ${SUGROUP}; then - echo -e "${RED}You need to be a member of the sudo group to run me!${RC}" - exit 1 - fi - - DTYPE="unknown" # Default to unknown - # Use /etc/os-release for modern distro identification - if [ -f /etc/os-release ]; then - . /etc/os-release - DTYPE=$ID - fi + checkCommandRequirements 'curl groups sudo' + checkPackageManager 'apt-get dnf pacman zypper' + checkSuperUser + checkDistro } setupKitty() { @@ -63,10 +12,10 @@ setupKitty() { if ! command_exists kitty; then case ${PACKAGER} in pacman) - sudo ${PACKAGER} -S --noconfirm kitty + sudo "${PACKAGER}" -S --noconfirm kitty ;; *) - sudo ${PACKAGER} install -y kitty + sudo "${PACKAGER}" install -y kitty ;; esac else @@ -74,12 +23,12 @@ setupKitty() { fi echo "Copy Kitty config files" if [ -d "${HOME}/.config/kitty" ]; then - cp -r ${HOME}/.config/kitty ${HOME}/.config/kitty-bak + cp -r "${HOME}"/.config/kitty "${HOME}"/.config/kitty-bak fi - mkdir -p ${HOME}/.config/kitty/ - wget -O ${HOME}/.config/kitty/kitty.conf https://github.com/ChrisTitusTech/dwm-titus/raw/main/config/kitty/kitty.conf - wget -O ${HOME}/.config/kitty/nord.conf https://github.com/ChrisTitusTech/dwm-titus/raw/main/config/kitty/nord.conf + mkdir -p "${HOME}"/.config/kitty/ + wget -O "${HOME}"/.config/kitty/kitty.conf https://github.com/ChrisTitusTech/dwm-titus/raw/main/config/kitty/kitty.conf + wget -O "${HOME}"/.config/kitty/nord.conf https://github.com/ChrisTitusTech/dwm-titus/raw/main/config/kitty/nord.conf } checkEnv -setupKitty \ No newline at end of file +setupKitty diff --git a/src/commands/dotfiles/rofi-setup.sh b/src/commands/dotfiles/rofi-setup.sh index 16fc84c6..aab942ed 100755 --- a/src/commands/dotfiles/rofi-setup.sh +++ b/src/commands/dotfiles/rofi-setup.sh @@ -1,61 +1,10 @@ #!/bin/sh -e -RC='\033[0m' -RED='\033[31m' -YELLOW='\033[33m' -GREEN='\033[32m' - -command_exists() { - which "$1" >/dev/null 2>&1 -} - checkEnv() { - ## Check for requirements. - REQUIREMENTS='curl groups sudo' - for req in $REQUIREMENTS; do - if ! command_exists "$req"; then - echo -e "${RED}To run me, you need: ${REQUIREMENTS}${RC}" - exit 1 - fi - done - - ## Check Package Handler - PACKAGEMANAGER='apt-get dnf pacman zypper' - for pgm in $PACKAGEMANAGER; do - if command_exists "$pgm"; then - PACKAGER="$pgm" - echo "Using $pgm" - break - fi - done - - if [ -z "$PACKAGER" ]; then - echo -e "${RED}Can't find a supported package manager${RC}" - exit 1 - fi - - ## Check SuperUser Group - SUPERUSERGROUP='wheel sudo root' - for sug in $SUPERUSERGROUP; do - if groups | grep -q "$sug"; then - SUGROUP="$sug" - echo "Super user group $SUGROUP" - break - fi - done - - ## Check if member of the sudo group. - if ! groups | grep -q "$SUGROUP"; then - echo -e "${RED}You need to be a member of the sudo group to run me!${RC}\n" - exit 1 - fi - - DTYPE="unknown" # Default to unknown - # Use /etc/os-release for modern distro identification - if [ -f /etc/os-release ]; then - . /etc/os-release - DTYPE="$ID" - fi + checkCommandRequirements 'curl groups sudo' + checkPackageManager 'apt-get dnf pacman zypper' + checkSuperUser + checkDistro } setupRofi() { @@ -87,4 +36,4 @@ setupRofi() { } checkEnv -setupRofi \ No newline at end of file +setupRofi diff --git a/src/commands/system-setup/1-compile-setup.sh b/src/commands/system-setup/1-compile-setup.sh index 0c0df4f7..0ae78950 100755 --- a/src/commands/system-setup/1-compile-setup.sh +++ b/src/commands/system-setup/1-compile-setup.sh @@ -1,10 +1,5 @@ #!/bin/sh -e -RC='\033[0m' -RED='\033[31m' -YELLOW='\033[33m' -GREEN='\033[32m' - # Check if the home directory and linuxtoolbox folder exist, create them if they don't LINUXTOOLBOXDIR="$HOME/linuxtoolbox" @@ -14,70 +9,24 @@ if [ ! -d "$LINUXTOOLBOXDIR" ]; then echo -e "${GREEN}linuxtoolbox directory created: $LINUXTOOLBOXDIR${RC}" fi -if [ ! -d "$LINUXTOOLBOXDIR/linux-setup" ]; then - echo -e "${YELLOW}Cloning linux-setup repository into: $LINUXTOOLBOXDIR/linux-setup${RC}" - git clone https://github.com/ChrisTitusTech/linux-setup "$LINUXTOOLBOXDIR/linux-setup" +if [ ! -d "$LINUXTOOLBOXDIR/linutil" ]; then + echo -e "${YELLOW}Cloning linutil repository into: $LINUXTOOLBOXDIR/linutil${RC}" + git clone https://github.com/ChrisTitusTech/linutil "$LINUXTOOLBOXDIR/linutil" if [ $? -eq 0 ]; then - echo -e "${GREEN}Successfully cloned linux-setup repository${RC}" + echo -e "${GREEN}Successfully cloned linutil repository${RC}" else - echo -e "${RED}Failed to clone linux-setup repository${RC}" + echo -e "${RED}Failed to clone linutil repository${RC}" exit 1 fi fi -cd "$LINUXTOOLBOXDIR/linux-setup" || exit - -command_exists() { - command -v "$1" >/dev/null 2>&1 -} +cd "$LINUXTOOLBOXDIR/linutil" || exit checkEnv() { - ## Check for requirements. - REQUIREMENTS='curl groups sudo' - for req in $REQUIREMENTS; do - if ! command_exists "$req"; then - echo -e "${RED}To run me, you need: $REQUIREMENTS${RC}" - exit 1 - fi - done - - ## Check Package Manager - PACKAGEMANAGER='apt yum dnf pacman zypper' - for pgm in $PACKAGEMANAGER; do - if command_exists "$pgm"; then - PACKAGER="$pgm" - echo "Using $pgm" - break - fi - done - - if [ -z "$PACKAGER" ]; then - echo -e "${RED}Can't find a supported package manager${RC}" - exit 1 - fi - - ## Check if the current directory is writable. - GITPATH="$(dirname "$(realpath "$0")")" - if [ ! -w "$GITPATH" ]; then - echo -e "${RED}Can't write to $GITPATH${RC}" - exit 1 - fi - - ## Check SuperUser Group - SUPERUSERGROUP='wheel sudo root' - for sug in $SUPERUSERGROUP; do - if groups | grep -q "$sug"; then - SUGROUP="$sug" - echo "Super user group $SUGROUP" - break - fi - done - - ## Check if member of the sudo group. - if ! groups | grep -q "$SUGROUP"; then - echo -e "${RED}You need to be a member of the sudo group to run me!${RC}" - exit 1 - fi + checkCommandRequirements 'curl groups sudo' + checkPackageHandler 'apt yum dnf pacman zypper' + checkCurrentDirectoryWritable + checkSuperUser } installDepend() { @@ -109,30 +58,30 @@ installDepend() { echo "No AUR helper found. Please install yay or paru." exit 1 fi - "$AUR_HELPER" --noconfirm -S $DEPENDENCIES + "$AUR_HELPER" --noconfirm -S "$DEPENDENCIES" ;; apt) COMPILEDEPS='build-essential' sudo "$PACKAGER" update sudo dpkg --add-architecture i386 sudo "$PACKAGER" update - sudo "$PACKAGER" install -y $DEPENDENCIES $COMPILEDEPS + sudo "$PACKAGER" install -y "$DEPENDENCIES" $COMPILEDEPS ;; dnf) COMPILEDEPS='@development-tools' sudo "$PACKAGER" update sudo "$PACKAGER" config-manager --set-enabled powertools - sudo "$PACKAGER" install -y $DEPENDENCIES $COMPILEDEPS + sudo "$PACKAGER" install -y "$DEPENDENCIES" $COMPILEDEPS sudo "$PACKAGER" install -y glibc-devel.i686 libgcc.i686 ;; zypper) COMPILEDEPS='patterns-devel-base-devel_basis' sudo "$PACKAGER" refresh - sudo "$PACKAGER" --non-interactive install $DEPENDENCIES $COMPILEDEPS + sudo "$PACKAGER" --non-interactive install "$DEPENDENCIES" $COMPILEDEPS sudo "$PACKAGER" --non-interactive install libgcc_s1-gcc7-32bit glibc-devel-32bit ;; *) - sudo "$PACKAGER" install -y $DEPENDENCIES + sudo "$PACKAGER" install -y "$DEPENDENCIES" ;; esac } @@ -159,4 +108,4 @@ install_additional_dependencies() { checkEnv installDepend -install_additional_dependencies \ No newline at end of file +install_additional_dependencies diff --git a/src/commands/system-setup/2-gaming-setup.sh b/src/commands/system-setup/2-gaming-setup.sh index c9ed0368..f044162c 100755 --- a/src/commands/system-setup/2-gaming-setup.sh +++ b/src/commands/system-setup/2-gaming-setup.sh @@ -1,58 +1,10 @@ #!/bin/sh -e -RC='\e[0m' -RED='\e[31m' -YELLOW='\e[33m' -GREEN='\e[32m' - -command_exists() { - command -v $1 >/dev/null 2>&1 -} - checkEnv() { - ## Check for requirements. - REQUIREMENTS='curl groups sudo' - if ! command_exists ${REQUIREMENTS}; then - echo -e "${RED}To run me, you need: ${REQUIREMENTS}${RC}" - exit 1 - fi - - ## Check Package Handeler - PACKAGEMANAGER='apt-get yum dnf pacman zypper' - for pgm in ${PACKAGEMANAGER}; do - if command_exists ${pgm}; then - PACKAGER=${pgm} - echo "Using ${pgm}" - fi - done - - if [ -z "${PACKAGER}" ]; then - echo -e "${RED}Can't find a supported package manager" - exit 1 - fi - - ## Check if the current directory is writable. - GITPATH="$(dirname "$(readlink -f "$0")")" - if [ ! -w ${GITPATH} ]; then - echo -e "${RED}Can't write to ${GITPATH}${RC}" - exit 1 - fi - - ## Check SuperUser Group - SUPERUSERGROUP='wheel sudo root' - for sug in ${SUPERUSERGROUP}; do - if groups | grep ${sug}; then - SUGROUP=${sug} - echo "Super user group ${SUGROUP}" - fi - done - - ## Check if member of the sudo group. - if ! groups | grep ${SUGROUP} >/dev/null; then - echo -e "${RED}You need to be a member of the sudo group to run me!" - exit 1 - fi - + checkCommandRequirements 'curl groups sudo' + checkPackageManager 'apt-get yum dnf pacman zypper' + checkCurrentDirectoryWritable + checkSuperUser } installDepend() { @@ -138,4 +90,4 @@ install_additional_dependencies() { checkEnv installDepend -install_additional_dependencies \ No newline at end of file +install_additional_dependencies diff --git a/src/commands/system-setup/3-global-theme.sh b/src/commands/system-setup/3-global-theme.sh new file mode 100644 index 00000000..915684b1 --- /dev/null +++ b/src/commands/system-setup/3-global-theme.sh @@ -0,0 +1,65 @@ +#!/bin/sh -e + +# Check if the home directory and linuxtoolbox folder exist, create them if they don't +LINUXTOOLBOXDIR="$HOME/linuxtoolbox" + +if [ ! -d "$LINUXTOOLBOXDIR" ]; then + echo -e "${YELLOW}Creating linuxtoolbox directory: $LINUXTOOLBOXDIR${RC}" + mkdir -p "$LINUXTOOLBOXDIR" + echo -e "${GREEN}linuxtoolbox directory created: $LINUXTOOLBOXDIR${RC}" +fi + +cd "$LINUXTOOLBOXDIR" || exit + +install_theme_tools() { + echo -e "${YELLOW}Installing theme tools (qt6ct and kvantum)...${RC}" + case $PACKAGER in + apt-get) + sudo apt-get update + sudo apt-get install -y qt6ct kvantum + ;; + zypper) + sudo zypper refresh + sudo zypper --non-interactive install qt6ct kvantum + ;; + dnf) + sudo dnf update + sudo dnf install -y qt6ct kvantum + ;; + pacman) + sudo pacman -Sy + sudo pacman --noconfirm -S qt6ct kvantum + ;; + *) + echo -e "${RED}Unsupported package manager. Please install qt6ct and kvantum manually.${RC}" + exit 1 + ;; + esac +} + +configure_qt6ct() { + echo -e "${YELLOW}Configuring qt6ct...${RC}" + mkdir -p "$HOME/.config/qt6ct" + cat < "$HOME/.config/qt6ct/qt6ct.conf" +[Appearance] +style=kvantum +color_scheme=default +icon_theme=breeze +EOF + echo -e "${GREEN}qt6ct configured successfully.${RC}" +} + +configure_kvantum() { + echo -e "${YELLOW}Configuring Kvantum...${RC}" + mkdir -p "$HOME/.config/Kvantum" + cat < "$HOME/.config/Kvantum/kvantum.kvconfig" +[General] +theme=Breeze +EOF + echo -e "${GREEN}Kvantum configured successfully.${RC}" +} + +checkEnv +install_theme_tools +configure_qt6ct +configure_kvantum \ No newline at end of file diff --git a/src/commands/system-update.sh b/src/commands/system-update.sh index 6faaf62a..132e617d 100755 --- a/src/commands/system-update.sh +++ b/src/commands/system-update.sh @@ -1,60 +1,10 @@ #!/bin/sh -e -RC='\033[0m' -RED='\033[31m' -YELLOW='\033[33m' -GREEN='\033[32m' - -command_exists() { - which $1 >/dev/null 2>&1 -} - checkEnv() { - ## Check for requirements. - REQUIREMENTS='curl groups sudo' - for req in ${REQUIREMENTS}; do - if ! command_exists ${req}; then - echo -e "${RED}To run me, you need: ${REQUIREMENTS}${RC}" - exit 1 - fi - done - ## Check Package Handler - PACKAGEMANAGER='apt-get nala dnf pacman zypper yum xbps-install' - for pgm in ${PACKAGEMANAGER}; do - if command_exists ${pgm}; then - PACKAGER=${pgm} - echo "Using ${pgm}" - break - fi - done - - if [ -z "${PACKAGER}" ]; then - echo -e "${RED}Can't find a supported package manager${RC}" - exit 1 - fi - - ## Check SuperUser Group - SUPERUSERGROUP='wheel sudo root' - for sug in ${SUPERUSERGROUP}; do - if groups | grep ${sug} >/dev/null; then - SUGROUP=${sug} - echo "Super user group ${SUGROUP}" - break - fi - done - - ## Check if member of the sudo group. - if ! groups | grep ${SUGROUP} >/dev/null; then - echo -e "${RED}You need to be a member of the sudo group to run me!${RC}" - exit 1 - fi - - DTYPE="unknown" # Default to unknown - # Use /etc/os-release for modern distro identification - if [ -f /etc/os-release ]; then - . /etc/os-release - DTYPE=$ID - fi + checkCommandRequirements 'curl groups sudo' + checkPackageManager 'apt-get nala dnf pacman zypper yum xbps-install' + checkSuperUser + checkDistro } fastUpdate() { @@ -125,15 +75,15 @@ updateSystem() { echo -e "${GREEN}Updating system${RC}" case ${PACKAGER} in nala|apt-get) - sudo ${PACKAGER} update -y - sudo ${PACKAGER} upgrade -y + sudo "${PACKAGER}" update -y + sudo "${PACKAGER}" upgrade -y ;; yum|dnf) - sudo ${PACKAGER} update -y - sudo ${PACKAGER} upgrade -y + sudo "${PACKAGER}" update -y + sudo "${PACKAGER}" upgrade -y ;; pacman) - sudo ${PACKAGER} -Syu --noconfirm + sudo "${PACKAGER}" -Syu --noconfirm ;; zypper) sudo ${PACKAGER} ref diff --git a/src/list.rs b/src/list.rs index 97aa36c6..b564bdea 100644 --- a/src/list.rs +++ b/src/list.rs @@ -1,5 +1,3 @@ -use std::usize; - use crate::{float::floating_window, theme::*}; use crossterm::event::{KeyCode, KeyEvent, KeyEventKind}; use ego_tree::{tree, NodeId}; @@ -11,6 +9,15 @@ use ratatui::{ Frame, }; +macro_rules! with_common_script { + ($command:expr) => { + concat!( + include_str!("commands/common-script.sh"), + include_str!($command) + ) + }; +} + struct ListNode { name: &'static str, command: &'static str, @@ -57,7 +64,7 @@ impl CustomList { } => { ListNode { name: "Full System Update", - command: include_str!("commands/system-update.sh"), + command: with_common_script!("commands/system-update.sh"), }, ListNode { name: "Setup Bash Prompt", @@ -77,11 +84,15 @@ impl CustomList { } => { ListNode { name: "Build Prerequisites", - command: include_str!("commands/system-setup/1-compile-setup.sh"), + command: with_common_script!("commands/system-setup/1-compile-setup.sh"), }, ListNode { name: "Gaming Dependencies", - command: include_str!("commands/system-setup/2-gaming-setup.sh"), + command: with_common_script!("commands/system-setup/2-gaming-setup.sh"), + }, + ListNode { + name: "Global Theme", + command: with_common_script!("commands/system-setup/3-global-theme.sh"), }, ListNode { name: "Recursion?", @@ -94,15 +105,15 @@ impl CustomList { } => { ListNode { name: "Alacritty Setup", - command: include_str!("commands/dotfiles/alacritty-setup.sh"), + command: with_common_script!("commands/dotfiles/alacritty-setup.sh"), }, ListNode { name: "Kitty Setup", - command: include_str!("commands/dotfiles/kitty-setup.sh"), + command: with_common_script!("commands/dotfiles/kitty-setup.sh"), }, ListNode { name: "Rofi Setup", - command: include_str!("commands/dotfiles/rofi-setup.sh"), + command: with_common_script!("commands/dotfiles/rofi-setup.sh"), }, } }); @@ -156,7 +167,10 @@ impl CustomList { // node let list = List::new(items) .highlight_style(Style::default().reversed()) - .block(Block::default().borders(Borders::ALL).title(format!("Linux Toolbox - {}", chrono::Local::now().format("%Y-%m-%d")))) + .block(Block::default().borders(Borders::ALL).title(format!( + "Linux Toolbox - {}", + chrono::Local::now().format("%Y-%m-%d") + ))) .scroll_padding(1); // Render it @@ -238,7 +252,7 @@ impl CustomList { // Get the selected command if let Some(selected_command) = self.get_selected_command() { // If command is a folder, we don't display a preview - if selected_command == "" { + if selected_command.is_empty() { return; } @@ -370,4 +384,4 @@ impl CustomList { fn at_root(&self) -> bool { self.visit_stack.len() == 1 } -} \ No newline at end of file +} diff --git a/src/main.rs b/src/main.rs index 43d2410a..7acfcfb0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -95,6 +95,5 @@ fn run(terminal: &mut Terminal) -> io::Result<()> { } } } - } } diff --git a/src/running_command.rs b/src/running_command.rs index 0bed71c1..9d159ef7 100644 --- a/src/running_command.rs +++ b/src/running_command.rs @@ -30,7 +30,7 @@ pub struct RunningCommand { buffer: Arc>>, /// A handle of the tread where the command is being executed - command_thread: Option>, + command_thread: Option>, /// A handle to kill the running process, it's an option because it can only be used once child_killer: Option>>, @@ -279,4 +279,4 @@ impl RunningCommand { // Send the keycodes to the virtual terminal let _ = self.writer.write_all(&input_bytes); } -} \ No newline at end of file +} diff --git a/src/theme.rs b/src/theme.rs index c741e75b..71413752 100644 --- a/src/theme.rs +++ b/src/theme.rs @@ -31,9 +31,9 @@ pub const THEMES: [Theme; 2] = [ ]; pub fn get_theme() -> &'static Theme { - &THEMES[unsafe { THEME_IDX } ] + &THEMES[unsafe { THEME_IDX }] } -pub fn set_theme(idx: usize){ +pub fn set_theme(idx: usize) { unsafe { THEME_IDX = idx }; } diff --git a/start.sh b/start.sh index 2dd32630..2590d9d3 100755 --- a/start.sh +++ b/start.sh @@ -1,31 +1,34 @@ #!/bin/sh -RC='\033[0m' -RED='\033[0;31m' +rc='\033[0m' +red='\033[0;31m' -linutil="https://github.com/ChrisTitusTech/linutil/releases/latest/download/linutil" +binary_url="https://github.com/ChrisTitusTech/linutil/releases/latest/download/linutil" check() { - local exit_code=$1 - local message=$2 + exit_code=$1 + message=$2 - if [ $exit_code -ne 0 ]; then - echo -e "${RED}ERROR: $message${RC}" + if [ "$exit_code" -ne 0 ]; then + printf '%sERROR: %s%s\n' "$red" "$message" "$rc" exit 1 fi + + unset exit_code + unset message } -TMPFILE=$(mktemp) +temp_file=$(mktemp) check $? "Creating the temporary file" -curl -fsL $linutil -o $TMPFILE +curl -fsL "$binary_url" -o "$temp_file" check $? "Downloading linutil" -chmod +x $TMPFILE +chmod +x "$temp_file" check $? "Making linutil executable" -"$TMPFILE" +"$temp_file" check $? "Executing linutil" -rm -f $TMPFILE +rm -f "$temp_file" check $? "Deleting the temporary file"