Compare commits

..

1 Commits

Author SHA1 Message Date
zdiff
b64d8a464a
Merge 2fd93fb707 into 421044f43e 2024-11-07 13:58:22 -05:00
73 changed files with 111 additions and 748 deletions

View File

@ -1,3 +1,2 @@
external-sources=true external-sources=true
source=core/tabs/common-script.sh source=core/tabs/common-script.sh
source=core/tabs/common-service-script.sh

5
Cargo.lock generated
View File

@ -198,9 +198,9 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
[[package]] [[package]]
name = "ego-tree" name = "ego-tree"
version = "0.9.0" version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c6ba7d4eec39eaa9ab24d44a0e73a7949a1095a8b3f3abb11eddf27dbb56a53" checksum = "12a0bb14ac04a9fcf170d0bbbef949b44cc492f4452bd20c095636956f653642"
[[package]] [[package]]
name = "either" name = "either"
@ -383,6 +383,7 @@ dependencies = [
"ansi-to-tui", "ansi-to-tui",
"anstyle", "anstyle",
"clap", "clap",
"ego-tree",
"linutil_core", "linutil_core",
"oneshot", "oneshot",
"portable-pty", "portable-pty",

View File

@ -3,6 +3,9 @@ license = "MIT"
version = "24.9.28" version = "24.9.28"
edition = "2021" edition = "2021"
[workspace.dependencies]
ego-tree = "0.6.2"
[workspace] [workspace]
members = ["tui", "core", "xtask"] members = ["tui", "core", "xtask"]
default-members = ["tui", "core"] default-members = ["tui", "core"]

View File

@ -24,26 +24,6 @@ curl -fsSL https://christitus.com/linux | sh
```bash ```bash
curl -fsSL https://christitus.com/linuxdev | sh curl -fsSL https://christitus.com/linuxdev | sh
``` ```
<details>
<summary>CLI arguments</summary>
Linutil supports various command-line arguments to customize its behavior. Here are some common arguments you can use:
- `-t, --theme <THEME>` : Set the theme to use in the application [default: default] [possible values: default, compatible].
- `--override-validation` : Show all available options, disregarding compatibility checks (UNSAFE).
- `-h, --help` : Print help.
For more detailed usage, run:
```bash
curl -fsSL https://christitus.com/linux | sh -s -- --help
```
```bash
linutil --help
```
</details>
## ⬇️ Installation ## ⬇️ Installation
Linutil is also available as a package in various repositories: Linutil is also available as a package in various repositories:
@ -78,15 +58,7 @@ paru -S linutil
Replace `paru` with your preferred helper and `linutil` with your preferred package. Replace `paru` with your preferred helper and `linutil` with your preferred package.
</details> </details>
<details>
<summary>OpenSUSE</summary>
Linutil can be installed on OpenSUSE with:
```bash
sudo zypper install linutil
```
</details>
<details> <details>
<summary>Cargo</summary> <summary>Cargo</summary>
@ -100,28 +72,6 @@ Note that crates installed using `cargo install` require manual updating with `c
</details> </details>
## Configuration
Linutil supports configuration through a TOML config file. Path to the file can be specified with `--config` (or `-c`).
Available options:
- `auto_execute` - a list of commands to execute automatically (can be combined with `--skip-confirmation`)
Example config:
```toml
# example_config.toml
auto_execute = [
"Fastfetch",
"Alacritty",
"Kitty"
]
```
```bash
linutil --config /path/to/example_config.toml
```
## 💖 Support ## 💖 Support
If you find Linutil helpful, please consider giving it a ⭐️ to show your support! If you find Linutil helpful, please consider giving it a ⭐️ to show your support!

View File

@ -5,7 +5,11 @@ repository = "https://github.com/ChrisTitusTech/linutil/tree/main/core"
edition = "2021" edition = "2021"
version.workspace = true version.workspace = true
license.workspace = true license.workspace = true
include = ["src/*.rs", "Cargo.toml", "tabs/**"] include = [
"src/*.rs",
"Cargo.toml",
"tabs/**",
]
[dependencies] [dependencies]
include_dir = "0.7.4" include_dir = "0.7.4"
@ -13,4 +17,4 @@ temp-dir = "0.1.14"
serde = { version = "1.0.205", features = ["derive"], default-features = false } serde = { version = "1.0.205", features = ["derive"], default-features = false }
toml = { version = "0.8.19", features = ["parse"], default-features = false } toml = { version = "0.8.19", features = ["parse"], default-features = false }
which = "6.0.3" which = "6.0.3"
ego-tree = "0.9.0" ego-tree = { workspace = true }

View File

@ -1,28 +0,0 @@
use serde::Deserialize;
use std::path::Path;
use std::process;
#[derive(Deserialize)]
pub struct Config {
pub auto_execute: Vec<String>,
}
impl Config {
pub fn from_file(path: &Path) -> Self {
let content = match std::fs::read_to_string(path) {
Ok(content) => content,
Err(e) => {
eprintln!("Failed to read config file {}: {}", path.display(), e);
process::exit(1);
}
};
match toml::from_str(&content) {
Ok(config) => config,
Err(e) => {
eprintln!("Failed to parse config file: {}", e);
process::exit(1);
}
}
}
}

View File

@ -1,13 +1,10 @@
mod config;
mod inner; mod inner;
use std::rc::Rc; use std::rc::Rc;
pub use ego_tree;
use ego_tree::Tree; use ego_tree::Tree;
use std::path::PathBuf; use std::path::PathBuf;
pub use config::Config;
pub use inner::{get_tabs, TabList}; pub use inner::{get_tabs, TabList};
#[derive(Clone, Hash, Eq, PartialEq)] #[derive(Clone, Hash, Eq, PartialEq)]
@ -36,16 +33,3 @@ pub struct ListNode {
pub task_list: String, pub task_list: String,
pub multi_select: bool, pub multi_select: bool,
} }
impl Tab {
pub fn find_command(&self, name: &str) -> Option<Rc<ListNode>> {
self.tree.root().descendants().find_map(|node| {
let value = node.value();
if value.name == name && !node.has_children() {
Some(value.clone())
} else {
None
}
})
}
}

View File

@ -12,9 +12,6 @@ installMeld() {
apt-get|nala) apt-get|nala)
"$ESCALATION_TOOL" "$PACKAGER" -y install meld "$ESCALATION_TOOL" "$PACKAGER" -y install meld
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add meld
;;
*) *)
checkFlatpak checkFlatpak
flatpak install -y flathub org.gnome.meld flatpak install -y flathub org.gnome.meld

View File

@ -29,9 +29,6 @@ installNeovim() {
dnf|zypper) dnf|zypper)
"$ESCALATION_TOOL" "$PACKAGER" install -y neovim ripgrep fzf python3-virtualenv luarocks golang ShellCheck git "$ESCALATION_TOOL" "$PACKAGER" install -y neovim ripgrep fzf python3-virtualenv luarocks golang ShellCheck git
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add neovim ripgrep fzf py3-virtualenv luarocks go shellcheck git
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -3,7 +3,7 @@
. ../../common-script.sh . ../../common-script.sh
installVsCode() { installVsCode() {
if ! command_exists com.visualstudio.code && ! command_exists code; then if ! command_exists code; then
printf "%b\n" "${YELLOW}Installing VS Code..${RC}." printf "%b\n" "${YELLOW}Installing VS Code..${RC}."
case "$PACKAGER" in case "$PACKAGER" in
apt-get|nala) apt-get|nala)
@ -28,10 +28,6 @@ installVsCode() {
printf "%b\n" '[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc' | "$ESCALATION_TOOL" tee /etc/yum.repos.d/vscode.repo > /dev/null printf "%b\n" '[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc' | "$ESCALATION_TOOL" tee /etc/yum.repos.d/vscode.repo > /dev/null
"$ESCALATION_TOOL" "$PACKAGER" install -y code "$ESCALATION_TOOL" "$PACKAGER" install -y code
;; ;;
apk)
checkFlatpak
flatpak install -y flathub com.visualstudio.code
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -3,7 +3,7 @@
. ../../common-script.sh . ../../common-script.sh
installVsCodium() { installVsCodium() {
if ! command_exists com.vscodium.codium && ! command_exists codium; then if ! command_exists codium; then
printf "%b\n" "${YELLOW}Installing VS Codium...${RC}" printf "%b\n" "${YELLOW}Installing VS Codium...${RC}"
case "$PACKAGER" in case "$PACKAGER" in
apt-get|nala) apt-get|nala)
@ -26,10 +26,6 @@ installVsCodium() {
printf "%b\n" "[gitlab.com_paulcarroty_vscodium_repo]\nname=download.vscodium.com\nbaseurl=https://download.vscodium.com/rpms/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg\nmetadata_expire=1h" | "$ESCALATION_TOOL" tee -a /etc/yum.repos.d/vscodium.repo printf "%b\n" "[gitlab.com_paulcarroty_vscodium_repo]\nname=download.vscodium.com\nbaseurl=https://download.vscodium.com/rpms/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg\nmetadata_expire=1h" | "$ESCALATION_TOOL" tee -a /etc/yum.repos.d/vscodium.repo
"$ESCALATION_TOOL" "$PACKAGER" install -y codium "$ESCALATION_TOOL" "$PACKAGER" install -y codium
;; ;;
apk)
checkFlatpak
flatpak install -y flathub com.vscodium.codium
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -9,9 +9,6 @@ installAlacritty() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm alacritty "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm alacritty
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add alacritty
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y alacritty "$ESCALATION_TOOL" "$PACKAGER" install -y alacritty
;; ;;

View File

@ -15,9 +15,6 @@ install_adb() {
dnf|zypper) dnf|zypper)
"$ESCALATION_TOOL" "$PACKAGER" install -y android-tools "$ESCALATION_TOOL" "$PACKAGER" install -y android-tools
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add android-tools
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: "$PACKAGER"${RC}" printf "%b\n" "${RED}Unsupported package manager: "$PACKAGER"${RC}"
exit 1 exit 1

View File

@ -3,7 +3,7 @@
. ../../common-script.sh . ../../common-script.sh
installBrave() { installBrave() {
if ! command_exists com.brave.Browser && ! command_exists brave; then if ! command_exists brave; then
printf "%b\n" "${YELLOW}Installing Brave...${RC}" printf "%b\n" "${YELLOW}Installing Brave...${RC}"
case "$PACKAGER" in case "$PACKAGER" in
apt-get|nala) apt-get|nala)
@ -29,10 +29,6 @@ installBrave() {
"$ESCALATION_TOOL" rpm --import https://brave-browser-rpm-release.s3.brave.com/brave-core.asc "$ESCALATION_TOOL" rpm --import https://brave-browser-rpm-release.s3.brave.com/brave-core.asc
"$ESCALATION_TOOL" "$PACKAGER" install -y brave-browser "$ESCALATION_TOOL" "$PACKAGER" install -y brave-browser
;; ;;
apk)
checkFlatpak
flatpak install -y flathub com.brave.Browser
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -9,9 +9,6 @@ if ! command_exists chromium; then
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm chromium "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm chromium
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add chromium
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y chromium "$ESCALATION_TOOL" "$PACKAGER" install -y chromium
;; ;;

View File

@ -18,9 +18,6 @@ installFirefox() {
dnf) dnf)
"$ESCALATION_TOOL" "$PACKAGER" install -y firefox "$ESCALATION_TOOL" "$PACKAGER" install -y firefox
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add firefox
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -3,7 +3,7 @@
. ../../common-script.sh . ../../common-script.sh
installLibreWolf() { installLibreWolf() {
if ! command_exists io.gitlab.librewolf-community && ! command_exists librewolf; then if ! command_exists librewolf; then
printf "%b\n" "${YELLOW}Installing Librewolf...${RC}" printf "%b\n" "${YELLOW}Installing Librewolf...${RC}"
case "$PACKAGER" in case "$PACKAGER" in
apt-get|nala) apt-get|nala)
@ -32,10 +32,6 @@ Signed-By: /usr/share/keyrings/librewolf.gpg" | "$ESCALATION_TOOL" tee /etc/apt/
pacman) pacman)
"$AUR_HELPER" -S --needed --noconfirm librewolf-bin "$AUR_HELPER" -S --needed --noconfirm librewolf-bin
;; ;;
apk)
checkFlatpak
flatpak install flathub io.gitlab.librewolf-community
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -9,9 +9,6 @@ installLynx() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm lynx "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm lynx
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add lynx
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y lynx "$ESCALATION_TOOL" "$PACKAGER" install -y lynx
;; ;;

View File

@ -22,7 +22,6 @@ installThrorium() {
;; ;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1
;; ;;
esac esac
else else

View File

@ -1,34 +0,0 @@
#!/bin/sh -e
. ../../common-script.sh
installTorBrowser() {
if ! command_exists torbrowser-launcher; then
printf "%b\n" "${YELLOW}Installing Tor Browser...${RC}"
case "$PACKAGER" in
apt-get|nala)
"$ESCALATION_TOOL" "$PACKAGER" install -y torbrowser-launcher
;;
zypper)
"$ESCALATION_TOOL" "$PACKAGER" --non-interactive install torbrowser-launcher
;;
pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm torbrowser-launcher
;;
dnf)
"$ESCALATION_TOOL" "$PACKAGER" install -y torbrowser-launcher
;;
*)
printf "%b\n" "${RED}Unsupported package manager: ${PACKAGER}${RC}"
exit 1
;;
esac
else
printf "%b\n" "${GREEN}Tor Browser is already installed.${RC}"
fi
}
checkEnv
checkEscalationTool
installTorBrowser

View File

@ -3,14 +3,14 @@
. ../../common-script.sh . ../../common-script.sh
installWaterfox() { installWaterfox() {
if ! command_exists net.waterfox.waterfox && ! command_exists waterfox; then if ! command_exists waterfox; then
printf "%b\n" "${YELLOW}Installing waterfox...${RC}" printf "%b\n" "${YELLOW}Installing waterfox...${RC}"
case "$PACKAGER" in case "$PACKAGER" in
pacman) pacman)
"$AUR_HELPER" -S --needed --noconfirm waterfox-bin "$AUR_HELPER" -S --needed --noconfirm waterfox-bin
;; ;;
*) *)
checkFlatpak . ../setup-flatpak.sh
flatpak install -y flathub net.waterfox.waterfox flatpak install -y flathub net.waterfox.waterfox
;; ;;
esac esac

View File

@ -3,7 +3,7 @@
. ../../common-script.sh . ../../common-script.sh
installDiscord() { installDiscord() {
if ! command_exists com.discordapp.Discord && ! command_exists discord; then if ! command_exists discord; then
printf "%b\n" "${YELLOW}Installing Discord...${RC}" printf "%b\n" "${YELLOW}Installing Discord...${RC}"
case "$PACKAGER" in case "$PACKAGER" in
apt-get|nala) apt-get|nala)
@ -20,10 +20,6 @@ installDiscord() {
"$ESCALATION_TOOL" "$PACKAGER" install -y https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm "$ESCALATION_TOOL" "$PACKAGER" install -y https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
"$ESCALATION_TOOL" "$PACKAGER" install -y discord "$ESCALATION_TOOL" "$PACKAGER" install -y discord
;; ;;
apk)
checkFlatpak
flatpak install -y flathub com.discordapp.Discord
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -3,7 +3,7 @@
. ../../common-script.sh . ../../common-script.sh
installJitsi() { installJitsi() {
if ! command_exists org.jitsi.jitsi-meet && ! command_exists jitsi-meet; then if ! command_exists jitsi-meet; then
printf "%b\n" "${YELLOW}Installing Jitsi meet...${RC}" printf "%b\n" "${YELLOW}Installing Jitsi meet...${RC}"
case "$PACKAGER" in case "$PACKAGER" in
apt-get|nala) apt-get|nala)
@ -21,10 +21,6 @@ installJitsi() {
dnf) dnf)
"$ESCALATION_TOOL" "$PACKAGER" install -y jitsi-meet "$ESCALATION_TOOL" "$PACKAGER" install -y jitsi-meet
;; ;;
apk)
checkFlatpak
flatpak install flathub org.jitsi.jitsi-meet
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -23,10 +23,6 @@ installSignal() {
checkFlatpak checkFlatpak
flatpak install -y flathub org.signal.Signal flatpak install -y flathub org.signal.Signal
;; ;;
apk)
checkFlatpak
flatpak install -y flathub org.signal.Signal
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -9,9 +9,6 @@ installTelegram() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm telegram-desktop "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm telegram-desktop
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add telegram-desktop
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y telegram-desktop "$ESCALATION_TOOL" "$PACKAGER" install -y telegram-desktop
;; ;;

View File

@ -9,9 +9,6 @@ installThunderBird() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm thunderbird "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm thunderbird
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add thunderbird
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y thunderbird "$ESCALATION_TOOL" "$PACKAGER" install -y thunderbird
;; ;;

View File

@ -1,23 +0,0 @@
#!/bin/sh -e
. ../../common-script.sh
installZapZap() {
if ! command_exists com.rtosta.zapzap && ! command_exists zapzap; then
printf "%b\n" "${YELLOW}Installing Zap-Zap...${RC}"
case "$PACKAGER" in
pacman)
"$AUR_HELPER" -S --needed --noconfirm zapzap
;;
*)
checkFlatpak
flatpak install flathub com.rtosta.zapzap
;;
esac
else
printf "%b\n" "${GREEN}Zap-Zap is already installed.${RC}"
fi
}
checkEnv
installZapZap

View File

@ -1,10 +1,10 @@
#!/bin/sh -e #!/bin/sh -e
. ../common-script.sh . ../common-script.sh
. ../common-service-script.sh
# Function to prompt the user for installation choice # Function to prompt the user for installation choice
choose_installation() { choose_installation() {
clear
printf "%b\n" "${YELLOW}Choose what to install:${RC}" printf "%b\n" "${YELLOW}Choose what to install:${RC}"
printf "%b\n" "1. ${YELLOW}Docker${RC}" printf "%b\n" "1. ${YELLOW}Docker${RC}"
printf "%b\n" "2. ${YELLOW}Docker Compose${RC}" printf "%b\n" "2. ${YELLOW}Docker Compose${RC}"
@ -34,20 +34,19 @@ install_docker() {
;; ;;
zypper) zypper)
"$ESCALATION_TOOL" "$PACKAGER" --non-interactive install docker "$ESCALATION_TOOL" "$PACKAGER" --non-interactive install docker
"$ESCALATION_TOOL" systemctl enable docker
"$ESCALATION_TOOL" systemctl start docker
;; ;;
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm docker "$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm docker
;; "$ESCALATION_TOOL" systemctl enable docker
apk) "$ESCALATION_TOOL" systemctl start docker
"$ESCALATION_TOOL" "$PACKAGER" add docker
;; ;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1
;; ;;
esac esac
startAndEnableService docker
} }
install_docker_compose() { install_docker_compose() {
@ -67,9 +66,6 @@ install_docker_compose() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm docker-compose "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm docker-compose
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add docker-cli-compose
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -6,7 +6,7 @@ setupDWM() {
printf "%b\n" "${YELLOW}Installing DWM-Titus...${RC}" printf "%b\n" "${YELLOW}Installing DWM-Titus...${RC}"
case "$PACKAGER" in # Install pre-Requisites case "$PACKAGER" in # Install pre-Requisites
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm base-devel libx11 libxinerama libxft imlib2 libxcb git unzip flameshot lxappearance feh mate-polkit meson libev uthash libconfig "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm base-devel libx11 libxinerama libxft imlib2 libxcb git unzip flameshot lxappearance feh mate-polkit
;; ;;
apt-get|nala) apt-get|nala)
"$ESCALATION_TOOL" "$PACKAGER" install -y build-essential libx11-dev libxinerama-dev libxft-dev libimlib2-dev libx11-xcb-dev libfontconfig1 libx11-6 libxft2 libxinerama1 libxcb-res0-dev git unzip flameshot lxappearance feh mate-polkit "$ESCALATION_TOOL" "$PACKAGER" install -y build-essential libx11-dev libxinerama-dev libxft-dev libimlib2-dev libx11-xcb-dev libfontconfig1 libx11-6 libxft2 libxinerama1 libxcb-res0-dev git unzip flameshot lxappearance feh mate-polkit

View File

@ -14,9 +14,6 @@ installFastfetch() {
"$ESCALATION_TOOL" "$PACKAGER" install -y /tmp/fastfetch.deb "$ESCALATION_TOOL" "$PACKAGER" install -y /tmp/fastfetch.deb
rm /tmp/fastfetch.deb rm /tmp/fastfetch.deb
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add fastfetch
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y fastfetch "$ESCALATION_TOOL" "$PACKAGER" install -y fastfetch
;; ;;

View File

@ -9,9 +9,6 @@ installKitty() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm kitty "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm kitty
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add kitty
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y kitty "$ESCALATION_TOOL" "$PACKAGER" install -y kitty
;; ;;

View File

@ -25,10 +25,6 @@ installLinutil() {
esac esac
printf "%b\n" "${GREEN}Installed successfully.${RC}" printf "%b\n" "${GREEN}Installed successfully.${RC}"
;; ;;
zypper)
"$ESCALATION_TOOL" "$PACKAGER" install linutil -y
printf "%b\n" "${GREEN}Installed successfully.${RC}"
;;
*) *)
printf "%b\n" "${RED}There are no official packages for your distro.${RC}" printf "%b\n" "${RED}There are no official packages for your distro.${RC}"
printf "%b" "${YELLOW}Do you want to install the crates.io package? (y/N): ${RC}" printf "%b" "${YELLOW}Do you want to install the crates.io package? (y/N): ${RC}"
@ -44,12 +40,10 @@ installLinutil() {
dnf) dnf)
"$ESCALATION_TOOL" "$PACKAGER" install -y curl rustup man-pages man-db man "$ESCALATION_TOOL" "$PACKAGER" install -y curl rustup man-pages man-db man
;; ;;
apk) zypper)
"$ESCALATION_TOOL" "$PACKAGER" add build-base "$ESCALATION_TOOL" "$PACKAGER" install -n curl gcc make
"$ESCALATION_TOOL" "$PACKAGER" add rustup curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
rustup-init . $HOME/.cargo/env
# shellcheck disable=SC1091
. "$HOME/.cargo/env"
;; ;;
*) *)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y

View File

@ -19,13 +19,6 @@ updateLinutil() {
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
. $HOME/.cargo/env . $HOME/.cargo/env
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add build-base
"$ESCALATION_TOOL" "$PACKAGER" add rustup
rustup-init
# shellcheck disable=SC1091
. "$HOME/.cargo/env"
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y rustup "$ESCALATION_TOOL" "$PACKAGER" install -y rustup
;; ;;

View File

@ -11,9 +11,6 @@ installDepend() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm bash bash-completion tar bat tree unzip fontconfig git "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm bash bash-completion tar bat tree unzip fontconfig git
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add bash bash-completion tar bat tree unzip fontconfig git
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y bash bash-completion tar bat tree unzip fontconfig git "$ESCALATION_TOOL" "$PACKAGER" install -y bash bash-completion tar bat tree unzip fontconfig git
;; ;;
@ -57,7 +54,7 @@ installStarshipAndFzf() {
return return
fi fi
if ! curl -sSL https://starship.rs/install.sh | "$ESCALATION_TOOL" sh; then if ! curl -sSL https://starship.rs/install.sh | sh; then
printf "%b\n" "${RED}Something went wrong during starship install!${RC}" printf "%b\n" "${RED}Something went wrong during starship install!${RC}"
exit 1 exit 1
fi fi

View File

@ -16,9 +16,6 @@ installLibreOffice() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm libreoffice-fresh "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm libreoffice-fresh
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add libreoffice
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -9,9 +9,6 @@ installEvince() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm evince "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm evince
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add evince
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y evince "$ESCALATION_TOOL" "$PACKAGER" install -y evince
;; ;;

View File

@ -9,9 +9,6 @@ installOkular() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm okular "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm okular
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add okular
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y okular "$ESCALATION_TOOL" "$PACKAGER" install -y okular
;; ;;

View File

@ -9,9 +9,6 @@ installRofi() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm rofi "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm rofi
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add rofi
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y rofi "$ESCALATION_TOOL" "$PACKAGER" install -y rofi
;; ;;

View File

@ -84,17 +84,6 @@ description = "Sublime Text is a fast, lightweight, and customizable text editor
script = "Developer-tools/sublime-setup.sh" script = "Developer-tools/sublime-setup.sh"
task_list = "I" task_list = "I"
[[data.entries]]
name = "ZapZap"
description = "ZapZap is an open source whatsapp desktop client for Linux users developed by rafatosta."
script = "communication-apps/zapzap-setup.sh"
task_list = "I"
[[data.entries]]
name = "Zoom"
description = "Zoom is a widely-used video conferencing platform that allows users to host virtual meetings, webinars, and online collaboration with features like screen sharing and recording."
script = "communication-apps/zoom-setup.sh"
[[data.entries]] [[data.entries]]
name = "VS Code" name = "VS Code"
description = "Visual Studio Code (VS Code) is a lightweight, open-source code editor with built-in support for debugging, version control, and extensions for various programming languages and frameworks." description = "Visual Studio Code (VS Code) is a lightweight, open-source code editor with built-in support for debugging, version control, and extensions for various programming languages and frameworks."
@ -203,12 +192,6 @@ description = "Vivaldi is a freeware, cross-platform web browser developed by Vi
script = "browsers/vivaldi.sh" script = "browsers/vivaldi.sh"
task_list = "I" task_list = "I"
[[data.entries]]
name = "Tor Browser"
description = "Tor Browser is a free and open-source firefox-based web browser designed for anonymity and censorship circumvention."
script = "browsers/tor-browser.sh"
task_list = "I"
[[data.entries]] [[data.entries]]
name = "waterfox" name = "waterfox"
description = "Waterfox is the privacy-focused web browser engineered to give you speed, control, and peace of mind on the internet." description = "Waterfox is the privacy-focused web browser engineered to give you speed, control, and peace of mind on the internet."
@ -296,7 +279,7 @@ task_list = "I"
[[data.preconditions]] [[data.preconditions]]
matches = false matches = false
data = "command_exists" data = "command_exists"
values = ["linutil"] values = [ "linutil" ]
[[data]] [[data]]
name = "Linutil Updater" name = "Linutil Updater"
@ -307,7 +290,7 @@ task_list = "I"
[[data.preconditions]] [[data.preconditions]]
matches = true matches = true
data = "command_exists" data = "command_exists"
values = ["linutil"] values = [ "linutil" ]
[[data]] [[data]]
name = "Rofi" name = "Rofi"
@ -323,7 +306,7 @@ task_list = "I SS"
[[data.preconditions]] [[data.preconditions]]
matches = true matches = true
data = { environment = "XDG_SESSION_TYPE" } data = { environment = "XDG_SESSION_TYPE" }
values = ["wayland", "Wayland"] values = [ "wayland", "Wayland" ]
[[data]] [[data]]
name = "ZSH Prompt" name = "ZSH Prompt"

View File

@ -10,9 +10,6 @@ installZsh() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm zsh "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm zsh
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add zsh
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y zsh "$ESCALATION_TOOL" "$PACKAGER" install -y zsh
;; ;;

View File

@ -123,12 +123,6 @@ checkPackageManager() {
fi fi
done done
## Enable apk community packages
if [ "$PACKAGER" = "apk" ] && grep -qE '^#.*community' /etc/apk/repositories; then
"$ESCALATION_TOOL" sed -i '/community/s/^#//' /etc/apk/repositories
"$ESCALATION_TOOL" "$PACKAGER" update
fi
if [ -z "$PACKAGER" ]; then if [ -z "$PACKAGER" ]; then
printf "%b\n" "${RED}Can't find a supported package manager${RC}" printf "%b\n" "${RED}Can't find a supported package manager${RC}"
exit 1 exit 1
@ -175,7 +169,7 @@ checkEnv() {
checkArch checkArch
checkEscalationTool checkEscalationTool
checkCommandRequirements "curl groups $ESCALATION_TOOL" checkCommandRequirements "curl groups $ESCALATION_TOOL"
checkPackageManager 'nala apt-get dnf pacman zypper apk' checkPackageManager 'nala apt-get dnf pacman zypper'
checkCurrentDirectoryWritable checkCurrentDirectoryWritable
checkSuperUser checkSuperUser
checkDistro checkDistro

View File

@ -1,85 +0,0 @@
#!/bin/sh -e
checkInitManager() {
for manager in $1; do
if command_exists "$manager"; then
INIT_MANAGER="$manager"
printf "%b\n" "${CYAN}Using ${manager} to interact with init system${RC}"
break
fi
done
if [ -z "$INIT_MANAGER" ]; then
printf "%b\n" "${RED}Can't find a supported init system${RC}"
exit 1
fi
}
startService() {
case "$INIT_MANAGER" in
systemctl)
"$ESCALATION_TOOL" "$INIT_MANAGER" start "$1"
;;
rc-service)
"$ESCALATION_TOOL" "$INIT_MANAGER" "$1" start
;;
esac
}
stopService() {
case "$INIT_MANAGER" in
systemctl)
"$ESCALATION_TOOL" "$INIT_MANAGER" stop "$1"
;;
rc-service)
"$ESCALATION_TOOL" "$INIT_MANAGER" "$1" stop
;;
esac
}
enableService() {
case "$INIT_MANAGER" in
systemctl)
"$ESCALATION_TOOL" "$INIT_MANAGER" enable "$1"
;;
rc-service)
"$ESCALATION_TOOL" rc-update add "$1"
;;
esac
}
disableService() {
case "$INIT_MANAGER" in
systemctl)
"$ESCALATION_TOOL" "$INIT_MANAGER" disable "$1"
;;
rc-service)
"$ESCALATION_TOOL" rc-update del "$1"
;;
esac
}
startAndEnableService() {
case "$INIT_MANAGER" in
systemctl)
"$ESCALATION_TOOL" "$INIT_MANAGER" enable --now "$1"
;;
rc-service)
enableService "$1"
startService "$1"
;;
esac
}
isServiceActive() {
case "$INIT_MANAGER" in
systemctl)
"$ESCALATION_TOOL" "$INIT_MANAGER" is-active --quiet "$1"
;;
rc-service)
"$ESCALATION_TOOL" "$INIT_MANAGER" "$1" status --quiet
;;
esac
}
checkInitManager 'systemctl rc-service'

View File

@ -9,9 +9,6 @@ installPkg() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm ufw "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm ufw
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add ufw
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y ufw "$ESCALATION_TOOL" "$PACKAGER" install -y ufw
;; ;;

View File

@ -1,104 +0,0 @@
#!/bin/sh -e
. ../../common-script.sh
installQEMUDesktop() {
if ! command_exists qemu-img; then
printf "%b\n" "${YELLOW}Installing QEMU.${RC}"
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm qemu-desktop
else
printf "%b\n" "${GREEN}QEMU is already installed.${RC}"
fi
checkKVM
}
installQEMUEmulators() {
if ! "$PACKAGER" -Q | grep -q "qemu-emulators-full "; then
printf "%b\n" "${YELLOW}Installing QEMU-Emulators.${RC}"
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm qemu-emulators-full swtpm
else
printf "%b\n" "${GREEN}QEMU-Emulators already installed.${RC}"
fi
}
installVirtManager() {
if ! command_exists virt-manager; then
printf "%b\n" "${YELLOW}Installing Virt-Manager.${RC}"
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm virt-manager
else
printf "%b\n" "${GREEN}Virt-Manager already installed.${RC}"
fi
}
checkKVM() {
if [ ! -e "/dev/kvm" ]; then
printf "%b\n" "${RED}KVM is not available. Make sure you have CPU virtualization support enabled in your BIOS/UEFI settings. Please refer https://wiki.archlinux.org/title/KVM for more information.${RC}"
else
"$ESCALATION_TOOL" usermod "$USER" -aG kvm
fi
}
setupLibvirt() {
printf "%b\n" "${YELLOW}Configuring Libvirt.${RC}"
if "$PACKAGER" -Q | grep -q "iptables "; then
"$ESCALATION_TOOL" "$PACKAGER" -Rdd --noconfirm iptables
fi
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm dnsmasq iptables-nft
"$ESCALATION_TOOL" sed -i 's/^#\?firewall_backend\s*=\s*".*"/firewall_backend = "iptables"/' "/etc/libvirt/network.conf"
if systemctl is-active --quiet polkit; then
"$ESCALATION_TOOL" sed -i 's/^#\?auth_unix_ro\s*=\s*".*"/auth_unix_ro = "polkit"/' "/etc/libvirt/libvirtd.conf"
"$ESCALATION_TOOL" sed -i 's/^#\?auth_unix_rw\s*=\s*".*"/auth_unix_rw = "polkit"/' "/etc/libvirt/libvirtd.conf"
fi
"$ESCALATION_TOOL" usermod "$USER" -aG libvirt
for value in libvirt libvirt_guest; do
if ! grep -wq "$value" /etc/nsswitch.conf; then
"$ESCALATION_TOOL" sed -i "/^hosts:/ s/$/ ${value}/" /etc/nsswitch.conf
fi
done
"$ESCALATION_TOOL" systemctl enable --now libvirtd.service
"$ESCALATION_TOOL" virsh net-autostart default
checkKVM
}
installLibvirt() {
if ! command_exists libvirtd; then
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm libvirt dmidecode
else
printf "%b\n" "${GREEN}Libvirt is already installed.${RC}"
fi
setupLibvirt
}
main() {
printf "%b\n" "${YELLOW}Choose what to install:${RC}"
printf "%b\n" "1. ${YELLOW}QEMU${RC}"
printf "%b\n" "2. ${YELLOW}QEMU-Emulators ( Extended architectures )${RC}"
printf "%b\n" "3. ${YELLOW}Libvirt${RC}"
printf "%b\n" "4. ${YELLOW}Virtual-Manager${RC}"
printf "%b\n" "5. ${YELLOW}All${RC}"
printf "%b" "Enter your choice [1-5]: "
read -r CHOICE
case "$CHOICE" in
1) installQEMUDesktop ;;
2) installQEMUEmulators ;;
3) installLibvirt ;;
4) installVirtManager ;;
5)
installQEMUDesktop
installQEMUEmulators
installLibvirt
installVirtManager
;;
*) printf "%b\n" "${RED}Invalid choice.${RC}" && exit 1 ;;
esac
}
checkEnv
checkEscalationTool
main

View File

@ -37,9 +37,6 @@ installDepend() {
"$ESCALATION_TOOL" "$PACKAGER" --non-interactive install $DEPENDENCIES $COMPILEDEPS "$ESCALATION_TOOL" "$PACKAGER" --non-interactive install $DEPENDENCIES $COMPILEDEPS
"$ESCALATION_TOOL" "$PACKAGER" --non-interactive install libgcc_s1-gcc7-32bit glibc-devel-32bit "$ESCALATION_TOOL" "$PACKAGER" --non-interactive install libgcc_s1-gcc7-32bit glibc-devel-32bit
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add build-base multitail tar tree trash-cli unzip cmake jq
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y $DEPENDENCIES "$ESCALATION_TOOL" "$PACKAGER" install -y $DEPENDENCIES
;; ;;

View File

@ -50,8 +50,7 @@ installDepend() {
"$ESCALATION_TOOL" "$PACKAGER" -n install $DEPENDENCIES "$ESCALATION_TOOL" "$PACKAGER" -n install $DEPENDENCIES
;; ;;
*) *)
printf "%b\n" "${RED}Unsupported package manager ${PACKAGER}${RC}" "$ESCALATION_TOOL" "$PACKAGER" install -y $DEPENDENCIES
exit 1
;; ;;
esac esac
} }
@ -96,8 +95,6 @@ installAdditionalDepend() {
"$ESCALATION_TOOL" "$PACKAGER" -n install $DISTRO_DEPS "$ESCALATION_TOOL" "$PACKAGER" -n install $DISTRO_DEPS
;; ;;
*) *)
printf "%b\n" "${RED}Unsupported package manager ${PACKAGER}${RC}"
exit 1
;; ;;
esac esac
} }

View File

@ -1,7 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ../common-script.sh . ../common-script.sh
. ../common-service-script.sh
cleanup_system() { cleanup_system() {
printf "%b\n" "${YELLOW}Performing system cleanup...${RC}" printf "%b\n" "${YELLOW}Performing system cleanup...${RC}"
@ -24,9 +23,6 @@ cleanup_system() {
"$ESCALATION_TOOL" "$PACKAGER" -Sc --noconfirm "$ESCALATION_TOOL" "$PACKAGER" -Sc --noconfirm
"$ESCALATION_TOOL" "$PACKAGER" -Rns $(pacman -Qtdq) --noconfirm > /dev/null 2>&1 "$ESCALATION_TOOL" "$PACKAGER" -Rns $(pacman -Qtdq) --noconfirm > /dev/null 2>&1
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" cache clean
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ${PACKAGER}. Skipping.${RC}" printf "%b\n" "${RED}Unsupported package manager: ${PACKAGER}. Skipping.${RC}"
;; ;;
@ -43,9 +39,7 @@ common_cleanup() {
if [ -d /var/log ]; then if [ -d /var/log ]; then
"$ESCALATION_TOOL" find /var/log -type f -name "*.log" -exec truncate -s 0 {} \; "$ESCALATION_TOOL" find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
fi fi
if [ "$INIT_MANAGER" = "systemctl" ]; then "$ESCALATION_TOOL" journalctl --vacuum-time=3d
"$ESCALATION_TOOL" journalctl --vacuum-time=3d
fi
} }
clean_data() { clean_data() {

View File

@ -48,9 +48,6 @@ fastUpdate() {
"$ESCALATION_TOOL" "$PACKAGER" ref "$ESCALATION_TOOL" "$PACKAGER" ref
"$ESCALATION_TOOL" "$PACKAGER" --non-interactive dup "$ESCALATION_TOOL" "$PACKAGER" --non-interactive dup
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" update
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: "$PACKAGER"${RC}" printf "%b\n" "${RED}Unsupported package manager: "$PACKAGER"${RC}"
exit 1 exit 1
@ -77,9 +74,6 @@ updateSystem() {
"$ESCALATION_TOOL" "$PACKAGER" ref "$ESCALATION_TOOL" "$PACKAGER" ref
"$ESCALATION_TOOL" "$PACKAGER" --non-interactive dup "$ESCALATION_TOOL" "$PACKAGER" --non-interactive dup
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" upgrade
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: "$PACKAGER"${RC}" printf "%b\n" "${RED}Unsupported package manager: "$PACKAGER"${RC}"
exit 1 exit 1

View File

@ -38,12 +38,6 @@ description = "Paru is your standard pacman wrapping AUR helper with lots of fea
script = "arch/paru-setup.sh" script = "arch/paru-setup.sh"
task_list = "I" task_list = "I"
[[data.entries]]
name = "Virtualization"
description = "QEMU, Libvirt, Virt-Manager installation and configuration."
script = "arch/virtualization.sh"
task_list = "FM I SS RP"
[[data.entries]] [[data.entries]]
name = "Yay AUR Helper" name = "Yay AUR Helper"
description = "Yet Another Yogurt - An AUR Helper Written in Go. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers" description = "Yet Another Yogurt - An AUR Helper Written in Go. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers"

View File

@ -1,7 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ../common-script.sh . ../common-script.sh
. ../common-service-script.sh
# Function to check Bluez is installed # Function to check Bluez is installed
setupBluetooth() { setupBluetooth() {
@ -11,9 +10,6 @@ setupBluetooth() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm bluez-utils "$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm bluez-utils
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add bluez
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y bluez "$ESCALATION_TOOL" "$PACKAGER" install -y bluez
;; ;;
@ -22,7 +18,15 @@ setupBluetooth() {
printf "%b\n" "${GREEN}Bluez is already installed.${RC}" printf "%b\n" "${GREEN}Bluez is already installed.${RC}"
fi fi
startService bluetooth # Check if bluetooth service is running
if ! systemctl is-active --quiet bluetooth; then
printf "%b\n" "${YELLOW}Bluetooth service is not running. Starting it now...${RC}"
"$ESCALATION_TOOL" systemctl start bluetooth
if systemctl is-active --quiet bluetooth; then
printf "%b\n" "${GREEN}Bluetooth service started successfully.${RC}"
fi
fi
} }
# Function to display the main menu # Function to display the main menu

View File

@ -12,7 +12,6 @@ list_devices() {
printf "\n" printf "\n"
} }
# shellcheck disable=SC2086
installDependencies() { installDependencies() {
DEPENDENCIES="xz gzip bzip2 jq" DEPENDENCIES="xz gzip bzip2 jq"
if ! command_exists ${DEPENDENCIES}; then if ! command_exists ${DEPENDENCIES}; then
@ -24,8 +23,6 @@ installDependencies() {
"${ESCALATION_TOOL}" "${PACKAGER}" install -y ${DEPENDENCIES};; "${ESCALATION_TOOL}" "${PACKAGER}" install -y ${DEPENDENCIES};;
pacman) pacman)
"${ESCALATION_TOOL}" "${PACKAGER}" -S --noconfirm --needed ${DEPENDENCIES};; "${ESCALATION_TOOL}" "${PACKAGER}" -S --noconfirm --needed ${DEPENDENCIES};;
apk)
"${ESCALATION_TOOL}" "${PACKAGER}" add ${DEPENDENCIES};;
*) *)
printf "%b\n" "${RED}Unsupported package manager.${RC}" printf "%b\n" "${RED}Unsupported package manager.${RC}"
exit 1 exit 1

View File

@ -19,9 +19,6 @@ if ! command_exists openssl; then
zypper) zypper)
"$ESCALATION_TOOL" "$PACKAGER" install openssl "$ESCALATION_TOOL" "$PACKAGER" install openssl
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add openssl
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}" printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
exit 1 exit 1

View File

@ -1,11 +1,10 @@
#!/bin/sh -e #!/bin/sh -e
. ../common-script.sh . ../common-script.sh
. ../common-service-script.sh
create_file() { create_file() {
printf "%b\n" "Creating script..." printf "%b\n" "Creating script..."
"$ESCALATION_TOOL" tee "/usr/local/bin/numlock" >/dev/null <<'EOF' "$ESCALATION_TOOL" tee "/usr/local/bin/numlock" >/dev/null <<'EOF'
#!/bin/bash #!/bin/bash
for tty in /dev/tty{1..6} for tty in /dev/tty{1..6}
@ -14,12 +13,12 @@ do
done done
EOF EOF
"$ESCALATION_TOOL" chmod +x /usr/local/bin/numlock "$ESCALATION_TOOL" chmod +x /usr/local/bin/numlock
} }
create_service() { create_service() {
printf "%b\n" "Creating service..." printf "%b\n" "Creating service..."
"$ESCALATION_TOOL" tee "/etc/systemd/system/numlock.service" >/dev/null <<'EOF' "$ESCALATION_TOOL" tee "/etc/systemd/system/numlock.service" >/dev/null <<'EOF'
[Unit] [Unit]
Description=numlock Description=numlock
@ -34,28 +33,23 @@ EOF
} }
numlockSetup() { numlockSetup() {
if [ "$INIT_MANAGER" = "rc-service" ]; then if [ ! -f "/usr/local/bin/numlock" ]; then
printf "%b\n" "${RED}Unsupported init system.${RC}" create_file
exit 1 fi
fi
if [ ! -f "/usr/local/bin/numlock" ]; then if [ ! -f "/etc/systemd/system/numlock.service" ]; then
create_file create_service
fi fi
if [ ! -f "/etc/systemd/system/numlock.service" ]; then printf "%b" "Do you want to enable Numlock on boot? (y/N): "
create_service read -r confirm
fi if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
"$ESCALATION_TOOL" systemctl enable numlock.service --quiet
printf "%b" "Do you want to enable Numlock on boot? (y/N): " printf "%b\n" "Numlock will be enabled on boot"
read -r confirm else
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then "$ESCALATION_TOOL" systemctl disable numlock.service --quiet
enableService numlock printf "%b\n" "Numlock will not be enabled on boot"
printf "%b\n" "Numlock will be enabled on boot" fi
else
disableService numlock
printf "%b\n" "Numlock will not be enabled on boot"
fi
} }
checkEnv checkEnv

View File

@ -10,8 +10,8 @@ installollama() {
printf "%b\n" "${GREEN}ollama is already installed.${RC}" printf "%b\n" "${GREEN}ollama is already installed.${RC}"
else else
printf "%b\n" "${YELLOW}Installing ollama...${RC}" printf "%b\n" "${YELLOW}Installing ollama...${RC}"
curl -fsSL https://ollama.com/install.sh | "$ESCALATION_TOOL" sh curl -fsSL https://ollama.com/install.sh | sh
"$ESCALATION_TOOL" startService ollama "$ESCALATION_TOOL" systemctl start ollama
fi fi
} }

View File

@ -19,9 +19,6 @@ installAutoCpufreq() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm git "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm git
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add git
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y git "$ESCALATION_TOOL" "$PACKAGER" install -y git
;; ;;

View File

@ -1,27 +0,0 @@
#!/bin/sh -e
. ../../common-script.sh
installCUPS() {
clear
case "$PACKAGER" in
pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --noconfirm cups
;;
apt-get | nala)
"$ESCALATION_TOOL" "$PACKAGER" install -y cups
;;
dnf)
"$ESCALATION_TOOL" "$PACKAGER" install -y cups
;;
*)
printf "%b\n" "${RED}Unsupported package manager ${PACKAGER}${RC}"
exit 1
;;
esac
}
checkEnv
checkEscalationTool
installCUPS

View File

@ -1,30 +0,0 @@
#!/bin/sh -e
. ../../common-script.sh
. ./install-cups.sh
installEpsonPrinterDriver() {
clear
case "$PACKAGER" in
pacman)
"$AUR_HELPER" -S --noconfirm epson-inkjet-printer-escpr
;;
apt-get | nala)
"$ESCALATION_TOOL" "$PACKAGER" install -y printer-driver-escpr
;;
dnf)
"$ESCALATION_TOOL" "$PACKAGER" install -y epson-inkjet-printer-escpr
;;
*)
printf "%b\n" "${RED}Unsupported package manager ${PACKAGER}${RC}"
exit 1
;;
esac
}
checkEnv
checkEscalationTool
checkAURHelper
installCUPS
installEpsonPrinterDriver

View File

@ -11,9 +11,6 @@ install_package() {
pacman) pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm "$PACKAGE" "$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm "$PACKAGE"
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add "$PACKAGE"
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y "$PACKAGE" "$ESCALATION_TOOL" "$PACKAGER" install -y "$PACKAGE"
;; ;;
@ -37,23 +34,23 @@ setup_ssh() {
install_package openssh install_package openssh
SSH_SERVICE="sshd" SSH_SERVICE="sshd"
;; ;;
apk)
install_package openssh
SSH_SERVICE="sshd"
;;
*) *)
install_package openssh-server install_package openssh-server
SSH_SERVICE="sshd" SSH_SERVICE="sshd"
;; ;;
esac esac
startAndEnableService "$SSH_SERVICE" # 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) 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}" printf "%b\n" "${GREEN}Your local IP address is: $LOCAL_IP${RC}"
if isServiceActive "$SSH_SERVICE"; then # Check if SSH is running
if systemctl is-active --quiet "$SSH_SERVICE"; then
printf "%b\n" "${GREEN}SSH is up and running.${RC}" printf "%b\n" "${GREEN}SSH is up and running.${RC}"
else else
printf "%b\n" "${RED}Failed to start SSH.${RC}" printf "%b\n" "${RED}Failed to start SSH.${RC}"
@ -133,11 +130,12 @@ setup_samba() {
EOL EOL
fi fi
for service in smb nmb; do # Enable and start Samba services
startAndEnableService "$service" "$ESCALATION_TOOL" systemctl enable smb nmb
done "$ESCALATION_TOOL" systemctl start smb nmb
if isServiceActive smb && isServiceActive nmb; then # 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" "${GREEN}Samba is up and running.${RC}"
printf "%b\n" "${YELLOW}Samba share available at: $SHARED_DIR${RC}" printf "%b\n" "${YELLOW}Samba share available at: $SHARED_DIR${RC}"
else else

View File

@ -76,21 +76,6 @@ name = "Set Resolution"
description = "This script is designed to change the resolution of monitors connected to your system" description = "This script is designed to change the resolution of monitors connected to your system"
script = "monitor-control/set_resolutions.sh" script = "monitor-control/set_resolutions.sh"
[[data]]
name = "Printers"
[[data.entries]]
name = "CUPS"
script = "printers/install-cups.sh"
description = "This script will install the CUPS system, required for most printer drivers on Linux."
task_list = "I"
[[data.entries]]
name = "Epson printer drivers"
script = "printers/install-epson-printer-drivers.sh"
description = "This script will install the Epson printer drivers."
task_list = "I"
[[data]] [[data]]
name = "User Account Manager" name = "User Account Manager"
multi_select = false multi_select = false

View File

@ -12,11 +12,8 @@ install_timeshift() {
pacman) pacman)
"$ESCALATION_TOOL" "${PACKAGER}" -S --noconfirm timeshift "$ESCALATION_TOOL" "${PACKAGER}" -S --noconfirm timeshift
;; ;;
dnf|zypper|apt-get|nala)
"$ESCALATION_TOOL" "${PACKAGER}" install -y timeshift
;;
*) *)
printf "%b\n" "${RED}Unsupported package manager.${RC}" "$ESCALATION_TOOL" "${PACKAGER}" install -y timeshift
;; ;;
esac esac
else else

View File

@ -13,9 +13,6 @@ setup_xrandr() {
apt-get|nala) apt-get|nala)
"$ESCALATION_TOOL" "$PACKAGER" install -y x11-xserver-utils "$ESCALATION_TOOL" "$PACKAGER" install -y x11-xserver-utils
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add xrandr
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y xorg-x11-server-utils "$ESCALATION_TOOL" "$PACKAGER" install -y xorg-x11-server-utils
;; ;;

View File

@ -1,7 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
. ../common-script.sh . ../common-script.sh
. ../common-service-script.sh
# Function to check if NetworkManager is installed # Function to check if NetworkManager is installed
setupNetworkManager() { setupNetworkManager() {
@ -14,9 +13,6 @@ setupNetworkManager() {
dnf) dnf)
"$ESCALATION_TOOL" "$PACKAGER" install -y NetworkManager-1 "$ESCALATION_TOOL" "$PACKAGER" install -y NetworkManager-1
;; ;;
apk)
"$ESCALATION_TOOL" "$PACKAGER" add networkmanager-wifi iwd
;;
*) *)
"$ESCALATION_TOOL" "$PACKAGER" install -y network-manager "$ESCALATION_TOOL" "$PACKAGER" install -y network-manager
;; ;;
@ -26,11 +22,13 @@ setupNetworkManager() {
fi fi
# Check if NetworkManager service is running # Check if NetworkManager service is running
if ! isServiceActive NetworkManager; then if ! systemctl is-active --quiet NetworkManager; then
printf "%b\n" "${YELLOW}NetworkManager service is not running. Starting it now...${RC}" printf "%b\n" "${YELLOW}NetworkManager service is not running. Starting it now...${RC}"
startService NetworkManager "$ESCALATION_TOOL" systemctl start NetworkManager
else
printf "%b\n" "${GREEN}NetworkManager service started successfully.${RC}" if systemctl is-active --quiet NetworkManager; then
printf "%b\n" "${GREEN}NetworkManager service started successfully.${RC}"
fi
fi fi
} }

View File

@ -13,7 +13,7 @@
## Milestones ## Milestones
### Q4 2024 ### Q4 2024
- [x] Finish the foundation of the project's CLI - [x] Finish the foundation of the project's CLI
- [x] Implement CLI arguments and configuration support - [ ] Implement CLI arguments and configuration support
- [ ] Add an option for logging script executions - [ ] Add an option for logging script executions
### Q1 2025 ### Q1 2025

View File

@ -44,7 +44,6 @@ https://github.com/ChrisTitusTech/neovim
- **Mozilla Firefox**: Mozilla Firefox is a free and open-source web browser developed by the Mozilla Foundation. - **Mozilla Firefox**: Mozilla Firefox is a free and open-source web browser developed by the Mozilla Foundation.
- **Thorium**: Thorium is a Chromium-based browser focused on privacy and performance. - **Thorium**: Thorium is a Chromium-based browser focused on privacy and performance.
- **Vivaldi**: Vivaldi is a freeware, cross-platform web browser developed by Vivaldi Technologies. - **Vivaldi**: Vivaldi is a freeware, cross-platform web browser developed by Vivaldi Technologies.
- **Tor Browser**: Tor Browser is a free and open-source firefox-based web browser designed for anonymity and censorship circumvention.
- **waterfox**: Waterfox is the privacy-focused web browser engineered to give you speed, control, and peace of mind on the internet. - **waterfox**: Waterfox is the privacy-focused web browser engineered to give you speed, control, and peace of mind on the internet.
- **Alacritty**: Alacritty is a modern terminal emulator that comes with sensible defaults, but allows for extensive configuration. By integrating with other applications, rather than reimplementing their functionality, it manages to provide a flexible set of features with high performance. The supported platforms currently consist of BSD, Linux, macOS and Windows. This command installs and configures alacritty terminal emulator. - **Alacritty**: Alacritty is a modern terminal emulator that comes with sensible defaults, but allows for extensive configuration. By integrating with other applications, rather than reimplementing their functionality, it manages to provide a flexible set of features with high performance. The supported platforms currently consist of BSD, Linux, macOS and Windows. This command installs and configures alacritty terminal emulator.
- **Android Debloater**: Universal Android Debloater (UAD) is a tool designed to help users remove bloatware and unnecessary pre-installed applications from Android devices, enhancing performance and user experience. - **Android Debloater**: Universal Android Debloater (UAD) is a tool designed to help users remove bloatware and unnecessary pre-installed applications from Android devices, enhancing performance and user experience.
@ -89,7 +88,6 @@ https://github.com/ChrisTitusTech/dwm-titus
- **Linux Neptune for SteamDeck**: Valve's fork of Linux Kernel for the SteamDeck - **Linux Neptune for SteamDeck**: Valve's fork of Linux Kernel for the SteamDeck
- **Nvidia Drivers && Hardware Acceleration**: This script installs and configures nvidia drivers with Hardware Acceleration. - **Nvidia Drivers && Hardware Acceleration**: This script installs and configures nvidia drivers with Hardware Acceleration.
- **Paru AUR Helper**: Paru is your standard pacman wrapping AUR helper with lots of features and minimal interaction. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers - **Paru AUR Helper**: Paru is your standard pacman wrapping AUR helper with lots of features and minimal interaction. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers
- **Virtualization**: QEMU, Libvirt, Virt-Manager installation and configuration.
- **Yay AUR Helper**: Yet Another Yogurt - An AUR Helper Written in Go. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers - **Yay AUR Helper**: Yet Another Yogurt - An AUR Helper Written in Go. To know more about AUR helpers visit: https://wiki.archlinux.org/title/AUR_helpers
### Fedora ### Fedora
@ -127,11 +125,6 @@ https://github.com/ChrisTitusTech/dwm-titus
- **Set Primary Monitor**: This script is designed to set a Primary monitor in your system - **Set Primary Monitor**: This script is designed to set a Primary monitor in your system
- **Set Resolution**: This script is designed to change the resolution of monitors connected to your system - **Set Resolution**: This script is designed to change the resolution of monitors connected to your system
### Printers
- **CUPS**: This script will install the CUPS system, required for most printer drivers on Linux.
- **Epson printer drivers**: This script will install the Epson printer drivers.
### User Account Manager ### User Account Manager
- **Auto Mount Drive**: This utility is designed to help with automating the process of mounting a drive on to your system. - **Auto Mount Drive**: This utility is designed to help with automating the process of mounting a drive on to your system.

View File

@ -22,10 +22,6 @@ curl -fsSL https://christitus.com/linux | sh
curl -fsSL https://christitus.com/linuxdev | sh curl -fsSL https://christitus.com/linuxdev | sh
.SH OPTIONS .SH OPTIONS
.TP
\fB\-c\fR, \fB\-\-config\fR \fI<path>\fR
Path to the configuration file.
.TP .TP
\fB\-t\fR, \fB\-\-theme\fR \fI<theme>\fR \fB\-t\fR, \fB\-\-theme\fR \fI<theme>\fR
Set the theme to use in the TUI. Set the theme to use in the TUI.
@ -36,10 +32,6 @@ Possible values:
.br .br
Defaults to \fIdefault\fR. Defaults to \fIdefault\fR.
.TP
\fB\-y\fR, \fB\-\-skip\-confirmation\fR
Skip confirmation prompt before executing commands.
.TP .TP
\fB\-\-override\-validation\fR \fB\-\-override\-validation\fR
Show all available entries, disregarding compatibility checks. (\fBUNSAFE\fR) Show all available entries, disregarding compatibility checks. (\fBUNSAFE\fR)

View File

@ -43,7 +43,7 @@ check $? "Downloading linutil"
chmod +x "$temp_file" chmod +x "$temp_file"
check $? "Making linutil executable" check $? "Making linutil executable"
"$temp_file" "$@" "$temp_file"
check $? "Executing linutil" check $? "Executing linutil"
rm -f "$temp_file" rm -f "$temp_file"

View File

@ -69,7 +69,7 @@ check $? "Downloading linutil"
chmod +x "$TMPFILE" chmod +x "$TMPFILE"
check $? "Making linutil executable" check $? "Making linutil executable"
"$TMPFILE" "$@" "$TMPFILE"
check $? "Executing linutil" check $? "Executing linutil"
rm -f "$TMPFILE" rm -f "$TMPFILE"

View File

@ -15,6 +15,7 @@ tips = ["rand"]
[dependencies] [dependencies]
clap = { version = "4.5.20", features = ["derive", "std"], default-features = false } clap = { version = "4.5.20", features = ["derive", "std"], default-features = false }
ego-tree = { workspace = true }
oneshot = { version = "0.1.8", features = ["std"], default-features = false } oneshot = { version = "0.1.8", features = ["std"], default-features = false }
portable-pty = "0.8.1" portable-pty = "0.8.1"
ratatui = { version = "0.29.0", features = ["crossterm"], default-features = false } ratatui = { version = "0.29.0", features = ["crossterm"], default-features = false }

View File

@ -1,5 +1,6 @@
use crate::{state::ListEntry, theme::Theme}; use crate::{state::ListEntry, theme::Theme};
use linutil_core::{ego_tree::NodeId, Tab}; use ego_tree::NodeId;
use linutil_core::Tab;
use ratatui::{ use ratatui::{
crossterm::event::{KeyCode, KeyEvent, KeyModifiers}, crossterm::event::{KeyCode, KeyEvent, KeyModifiers},
layout::{Position, Rect}, layout::{Position, Rect},

View File

@ -71,8 +71,8 @@ impl Shortcut {
} }
fn to_spans(&self) -> Vec<Span<'static>> { fn to_spans(&self) -> Vec<Span<'static>> {
let description = Span::styled(self.desc, Style::default().italic()); let mut ret: Vec<_> = self
self.key_sequences .key_sequences
.iter() .iter()
.flat_map(|seq| { .flat_map(|seq| {
[ [
@ -81,7 +81,8 @@ impl Shortcut {
Span::default().content("] "), Span::default().content("] "),
] ]
}) })
.chain(std::iter::once(description)) .collect();
.collect() ret.push(Span::styled(self.desc, Style::default().italic()));
ret
} }
} }

View File

@ -9,7 +9,6 @@ mod theme;
use std::{ use std::{
io::{self, stdout}, io::{self, stdout},
path::PathBuf,
time::Duration, time::Duration,
}; };
@ -31,18 +30,10 @@ use state::AppState;
// Linux utility toolbox // Linux utility toolbox
#[derive(Debug, Parser)] #[derive(Debug, Parser)]
struct Args { struct Args {
#[arg(short, long, help = "Path to the configuration file")]
config: Option<PathBuf>,
#[arg(short, long, value_enum)] #[arg(short, long, value_enum)]
#[arg(default_value_t = Theme::Default)] #[arg(default_value_t = Theme::Default)]
#[arg(help = "Set the theme to use in the application")] #[arg(help = "Set the theme to use in the application")]
theme: Theme, theme: Theme,
#[arg(
short = 'y',
long,
help = "Skip confirmation prompt before executing commands"
)]
skip_confirmation: bool,
#[arg(long, default_value_t = false)] #[arg(long, default_value_t = false)]
#[clap(help = "Show all available options, disregarding compatibility checks (UNSAFE)")] #[clap(help = "Show all available options, disregarding compatibility checks (UNSAFE)")]
override_validation: bool, override_validation: bool,
@ -54,13 +45,7 @@ struct Args {
fn main() -> io::Result<()> { fn main() -> io::Result<()> {
let args = Args::parse(); let args = Args::parse();
let mut state = AppState::new( let mut state = AppState::new(args.theme, args.override_validation, args.size_bypass);
args.config,
args.theme,
args.override_validation,
args.size_bypass,
args.skip_confirmation,
);
stdout().execute(EnterAlternateScreen)?; stdout().execute(EnterAlternateScreen)?;
enable_raw_mode()?; enable_raw_mode()?;

View File

@ -255,7 +255,7 @@ impl RunningCommand {
// Process the buffer with a parser with the current screen size // Process the buffer with a parser with the current screen size
// We don't actually need to create a new parser every time, but it is so much easier this // We don't actually need to create a new parser every time, but it is so much easier this
// way, and doesn't cost that much // way, and doesn't cost that much
let mut parser = vt100::Parser::new(size.height, size.width, 1000); let mut parser = vt100::Parser::new(size.height, size.width, 200);
let mutex = self.buffer.lock(); let mutex = self.buffer.lock();
let buffer = mutex.as_ref().unwrap(); let buffer = mutex.as_ref().unwrap();
parser.process(buffer); parser.process(buffer);

View File

@ -7,8 +7,8 @@ use crate::{
running_command::RunningCommand, running_command::RunningCommand,
theme::Theme, theme::Theme,
}; };
use ego_tree::NodeId;
use linutil_core::{ego_tree::NodeId, Config, ListNode, TabList}; use linutil_core::{ListNode, TabList};
#[cfg(feature = "tips")] #[cfg(feature = "tips")]
use rand::Rng; use rand::Rng;
use ratatui::{ use ratatui::{
@ -19,7 +19,6 @@ use ratatui::{
widgets::{Block, Borders, List, ListState, Paragraph}, widgets::{Block, Borders, List, ListState, Paragraph},
Frame, Frame,
}; };
use std::path::PathBuf;
use std::rc::Rc; use std::rc::Rc;
const MIN_WIDTH: u16 = 100; const MIN_WIDTH: u16 = 100;
@ -62,7 +61,6 @@ pub struct AppState {
#[cfg(feature = "tips")] #[cfg(feature = "tips")]
tip: String, tip: String,
size_bypass: bool, size_bypass: bool,
skip_confirmation: bool,
} }
pub enum Focus { pub enum Focus {
@ -87,18 +85,10 @@ enum SelectedItem {
} }
impl AppState { impl AppState {
pub fn new( pub fn new(theme: Theme, override_validation: bool, size_bypass: bool) -> Self {
config_path: Option<PathBuf>,
theme: Theme,
override_validation: bool,
size_bypass: bool,
skip_confirmation: bool,
) -> Self {
let tabs = linutil_core::get_tabs(!override_validation); let tabs = linutil_core::get_tabs(!override_validation);
let root_id = tabs[0].tree.root().id(); let root_id = tabs[0].tree.root().id();
let auto_execute_commands = config_path.map(|path| Config::from_file(&path).auto_execute);
let mut state = Self { let mut state = Self {
theme, theme,
focus: Focus::List, focus: Focus::List,
@ -113,35 +103,12 @@ impl AppState {
#[cfg(feature = "tips")] #[cfg(feature = "tips")]
tip: get_random_tip(), tip: get_random_tip(),
size_bypass, size_bypass,
skip_confirmation,
}; };
state.update_items(); state.update_items();
if let Some(auto_execute_commands) = auto_execute_commands {
state.handle_initial_auto_execute(&auto_execute_commands);
}
state state
} }
fn handle_initial_auto_execute(&mut self, auto_execute_commands: &[String]) {
self.selected_commands = auto_execute_commands
.iter()
.filter_map(|name| self.tabs.iter().find_map(|tab| tab.find_command(name)))
.collect();
if !self.selected_commands.is_empty() {
let cmd_names: Vec<_> = self
.selected_commands
.iter()
.map(|node| node.name.as_str())
.collect();
let prompt = ConfirmPrompt::new(&cmd_names);
self.focus = Focus::ConfirmationPrompt(Float::new(Box::new(prompt), 40, 40));
}
}
fn get_list_item_shortcut(&self) -> Box<[Shortcut]> { fn get_list_item_shortcut(&self) -> Box<[Shortcut]> {
if self.selected_item_is_dir() { if self.selected_item_is_dir() {
Box::new([Shortcut::new("Go to selected dir", ["l", "Right", "Enter"])]) Box::new([Shortcut::new("Go to selected dir", ["l", "Right", "Enter"])])
@ -789,18 +756,14 @@ impl AppState {
} }
} }
if self.skip_confirmation { let cmd_names = self
self.handle_confirm_command(); .selected_commands
} else { .iter()
let cmd_names = self .map(|node| node.name.as_str())
.selected_commands .collect::<Vec<_>>();
.iter()
.map(|node| node.name.as_str())
.collect::<Vec<_>>();
let prompt = ConfirmPrompt::new(&cmd_names[..]); let prompt = ConfirmPrompt::new(&cmd_names[..]);
self.focus = Focus::ConfirmationPrompt(Float::new(Box::new(prompt), 40, 40)); self.focus = Focus::ConfirmationPrompt(Float::new(Box::new(prompt), 40, 40));
}
} }
SelectedItem::None => {} SelectedItem::None => {}
} }