mirror of
https://github.com/ChrisTitusTech/linutil.git
synced 2024-11-05 21:28:48 +00:00
Merge branch 'main' into testing-7
This commit is contained in:
commit
e181871b84
23
.github/release-drafter.yml
vendored
Normal file
23
.github/release-drafter.yml
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
name-template: '$RESOLVED_VERSION'
|
||||
tag-template: '$RESOLVED_VERSION'
|
||||
categories:
|
||||
- title: '🚀 Features'
|
||||
labels:
|
||||
- 'feature'
|
||||
- 'enhancement'
|
||||
- title: '🐛 Bug Fixes'
|
||||
labels:
|
||||
- 'fix'
|
||||
- 'bugfix'
|
||||
- 'bug'
|
||||
- title: '🧰 Maintenance'
|
||||
label: 'chore'
|
||||
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
|
||||
template: |
|
||||
## Changes
|
||||
|
||||
$CHANGES
|
||||
|
||||
## Contributors
|
||||
|
||||
$CONTRIBUTORS
|
28
.github/workflows/pre-release.yaml
vendored
28
.github/workflows/pre-release.yaml
vendored
|
@ -25,18 +25,40 @@ jobs:
|
|||
echo "version=$version" >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- name: Generate Release Notes
|
||||
id: generate_notes
|
||||
uses: release-drafter/release-drafter@v5
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
config-name: release-drafter.yml
|
||||
version: ${{ env.version }}
|
||||
version-template: '$YEAR.$MONTH.$DAY'
|
||||
|
||||
- name: Prepare Release Body
|
||||
id: prepare_body
|
||||
run: |
|
||||
new_changes="${{ steps.generate_notes.outputs.body }}"
|
||||
echo "body<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$new_changes" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create and Upload Release
|
||||
id: create_release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ env.version }}
|
||||
name: Pre-Release ${{ env.version }}
|
||||
body: "![GitHub Downloads (specific asset, specific tag)](https://img.shields.io/github/downloads/ChrisTitusTech/linutil/${{ env.version }}/linutil)"
|
||||
body: |
|
||||
${{ steps.prepare_body.outputs.body }}
|
||||
|
||||
![GitHub Downloads (specific asset, specific tag)](https://img.shields.io/github/downloads/ChrisTitusTech/linutil/${{ env.version }}/linutil)
|
||||
append_body: false
|
||||
files: |
|
||||
./build/linutil
|
||||
./start.sh
|
||||
./startdev.sh
|
||||
prerelease: true
|
||||
generate_release_notes: true
|
||||
env:
|
||||
version: ${{ env.version }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
|
|
@ -2,54 +2,60 @@
|
|||
|
||||
Thank you for considering contributing to Linutil! We appreciate your effort in helping improve this project. To ensure that your contributions align with the goals and quality standards of Linutil, please follow these guidelines:
|
||||
|
||||
## 1. Setting Up Your Development Environment
|
||||
## 1. **Install Rust**:
|
||||
|
||||
1. **Clone the repo**: Start by cloning the Linutil repository to your local machine.
|
||||
```bash
|
||||
git clone https://github.com/christitustech/linutil.git
|
||||
cd linutil
|
||||
Make sure you have Rust installed on your machine. You can install it by following the instructions at [rust-lang.org](https://www.rust-lang.org/tools/install).
|
||||
|
||||
## 2. **Fork and Clone the repo**
|
||||
|
||||
1. Make a fork of the repo in GitHub
|
||||
2. Clone the fork
|
||||
```bash
|
||||
git clone https://github.com/YOUR_USERNAME_HERE/linutil.git
|
||||
cd linutil
|
||||
```
|
||||
2. **Install Rust**: Make sure you have Rust installed on your machine. If you don't, you can install it by following the instructions at [rust-lang.org](https://www.rust-lang.org/tools/install).
|
||||
3. **Edit the files you want to change**: Make your changes to the relevant files.
|
||||
4. **Test your changes**: Run `cargo run` to test your modifications in a local environment and ensure everything works as expected.
|
||||
|
||||
## 2. Make Meaningful Changes
|
||||
## 3. Make your changes
|
||||
- **Edit the files you want to change**: Make your changes to the relevant files.
|
||||
- **Test your changes**: Run `cargo run` to test your modifications in a local environment and ensure everything works as expected.
|
||||
|
||||
## 4. Understand the existing code
|
||||
|
||||
- **Have a clear reason**: Don’t change the way things are done without a valid reason. If you propose an alteration, be prepared to explain why it’s necessary and how it improves the project.
|
||||
- **Respect existing conventions**: Changes should align with the existing code style, design patterns, and overall project philosophy. If you want to introduce a new way of doing things, justify it clearly.
|
||||
|
||||
## 3. Learn from Past Pull Requests (PRs)
|
||||
## 5. Learn from Past Pull Requests (PRs)
|
||||
|
||||
- **Check merged PRs**: Reviewing merged pull requests can give you an idea of what kind of contributions are accepted and how they are implemented.
|
||||
- **Study rejected PRs**: This is especially important as it helps you avoid making similar mistakes or proposing changes that have already been considered and declined.
|
||||
|
||||
## 4. Write Clean, Descriptive Commit Messages
|
||||
## 6. Write Clean, Descriptive Commit Messages
|
||||
|
||||
- **Be descriptive**: Your commit messages should clearly describe what the change does and why it was made.
|
||||
- **Use the imperative mood**: For example, "Add feature X" or "Fix bug in Y", rather than "Added feature X" or "Fixed bug in Y".
|
||||
- **Keep commits clean**: Avoid committing a change and then immediately following it with a fix for that change. Instead, amend your commit or squash it if needed.
|
||||
|
||||
## 5. Keep Your Pull Requests (PRs) Small and Focused
|
||||
## 7. Keep Your Pull Requests (PRs) Small and Focused
|
||||
|
||||
- **Make small, targeted PRs**: Focus on one feature or fix per pull request. This makes it easier to review and increases the likelihood of acceptance.
|
||||
- **Avoid combining unrelated changes**: PRs that tackle multiple unrelated issues are harder to review and might be rejected because of a single problem.
|
||||
|
||||
## 6. Code Review and Feedback
|
||||
## 8. Code Review and Feedback
|
||||
|
||||
- **Expect feedback**: PRs will undergo code review. Be open to feedback and willing to make adjustments as needed.
|
||||
- **Participate in reviews**: If you feel comfortable, review other contributors' PRs as well. Peer review is a great way to learn and ensure high-quality contributions.
|
||||
|
||||
## 7. Contributing Is More Than Just Code
|
||||
## 9. Contributing Is More Than Just Code
|
||||
|
||||
- **Test the tool**: Running tests and providing feedback on how the tool works in different environments is a valuable contribution.
|
||||
- **Write well-formed issues**: Clearly describe bugs or problems you encounter, providing as much detail as possible, including steps to reproduce the issue.
|
||||
- **Propose reasonable feature requests**: When suggesting new features, ensure they fit within the scope, style, and design of the project. Provide clear reasoning and use cases.
|
||||
|
||||
## 8. Documentation
|
||||
## 10. Documentation
|
||||
|
||||
- **Update the documentation**: If your change affects the functionality, please update the relevant documentation files to reflect this.
|
||||
|
||||
## 9. License
|
||||
## 11. License
|
||||
|
||||
- **Agree to the license**: By contributing to Linutil, you agree that your contributions will be licensed under the project's MIT license.
|
||||
|
||||
|
|
16
Cargo.lock
generated
16
Cargo.lock
generated
|
@ -52,9 +52,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "anstyle"
|
||||
version = "1.0.7"
|
||||
version = "1.0.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b"
|
||||
checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1"
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-parse"
|
||||
|
@ -163,9 +163,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.5.13"
|
||||
version = "4.5.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc"
|
||||
checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
|
@ -173,9 +173,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.5.13"
|
||||
version = "4.5.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99"
|
||||
checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
|
@ -1120,9 +1120,9 @@ checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
|
|||
|
||||
[[package]]
|
||||
name = "which"
|
||||
version = "6.0.2"
|
||||
version = "6.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3d9c5ed668ee1f17edb3b627225343d210006a90bb1e3745ce1f30b1fb115075"
|
||||
checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f"
|
||||
dependencies = [
|
||||
"either",
|
||||
"home",
|
||||
|
|
|
@ -5,7 +5,7 @@ edition = "2021"
|
|||
|
||||
[dependencies]
|
||||
chrono = "0.4.33"
|
||||
clap = { version = "4.5.13", features = ["derive"] }
|
||||
clap = { version = "4.5.16", features = ["derive"] }
|
||||
crossterm = "0.27.0"
|
||||
ego-tree = "0.6.2"
|
||||
oneshot = "0.1.8"
|
||||
|
@ -16,7 +16,7 @@ include_dir = "0.7.4"
|
|||
tempdir = "0.3.7"
|
||||
serde = { version = "1.0.205", features = ["derive"] }
|
||||
toml = "0.8.19"
|
||||
which = "6.0.2"
|
||||
which = "6.0.3"
|
||||
|
||||
[[bin]]
|
||||
name = "linutil"
|
||||
|
|
11
README.md
11
README.md
|
@ -7,14 +7,19 @@
|
|||
|
||||
**Linutil** is a distro-agnostic toolbox designed to simplify everyday Linux tasks. It helps you set up applications and optimize your system for specific use cases. The utility is actively developed in Rust 🦀, providing performance and reliability.
|
||||
|
||||
*Note:* Since the project is still in active development, you may encounter some issues. Please consider [submitting feedback](https://github.com/ChrisTitusTech/linutil/issues) if you do.
|
||||
> [!NOTE]
|
||||
> Since the project is still in active development, you may encounter some issues. Please consider [submitting feedback](https://github.com/ChrisTitusTech/linutil/issues) if you do.
|
||||
|
||||
## 💡 Usage
|
||||
|
||||
To get started, open your terminal and run the following command:
|
||||
To get started, pick which branch you would like to use, then run the command in your terminal:
|
||||
### Stable Branch (Recommended)
|
||||
```bash
|
||||
curl -fsSL https://christitus.com/linux | sh
|
||||
```
|
||||
### Dev branch
|
||||
```bash
|
||||
curl -fsSL https://christitus.com/linuxdev | sh
|
||||
```
|
||||
## 💖 Support
|
||||
|
||||
If you find Linutil helpful, please consider giving it a ⭐️ to show your support!
|
||||
|
|
BIN
build/linutil
BIN
build/linutil
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 34 KiB |
|
@ -7,10 +7,10 @@ setupAlacritty() {
|
|||
if ! command_exists alacritty; then
|
||||
case ${PACKAGER} in
|
||||
pacman)
|
||||
sudo ${PACKAGER} -S --needed --noconfirm alacritty
|
||||
$ESCALATION_TOOL ${PACKAGER} -S --needed --noconfirm alacritty
|
||||
;;
|
||||
*)
|
||||
sudo ${PACKAGER} install -y alacritty
|
||||
$ESCALATION_TOOL ${PACKAGER} install -y alacritty
|
||||
;;
|
||||
esac
|
||||
else
|
||||
|
@ -26,4 +26,5 @@ setupAlacritty() {
|
|||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
setupAlacritty
|
||||
|
|
|
@ -1,27 +1,27 @@
|
|||
#!/bin/sh -e
|
||||
. ../common-script.sh
|
||||
|
||||
makeDWM(){
|
||||
cd $HOME && git clone https://github.com/ChrisTitusTech/dwm-titus.git # CD to Home directory to install dwm-titus
|
||||
# This path can be changed (e.g. to linux-toolbox directory)
|
||||
cd dwm-titus/ # Hardcoded path, maybe not the best.
|
||||
sudo ./setup.sh # Run setup
|
||||
sudo make clean install # Run make clean install
|
||||
makeDWM() {
|
||||
cd "$HOME" && git clone https://github.com/ChrisTitusTech/dwm-titus.git # CD to Home directory to install dwm-titus
|
||||
# This path can be changed (e.g. to linux-toolbox directory)
|
||||
cd dwm-titus/ # Hardcoded path, maybe not the best.
|
||||
$ESCALATION_TOOL ./setup.sh # Run setup
|
||||
$ESCALATION_TOOL make clean install # Run make clean install
|
||||
}
|
||||
|
||||
setupDWM() {
|
||||
echo "Installing DWM-Titus if not already installed"
|
||||
case "$PACKAGER" in # Install pre-Requisites
|
||||
pacman)
|
||||
sudo "$PACKAGER" -S --needed --noconfirm base-devel libx11 libxinerama libxft imlib2
|
||||
$ESCALATION_TOOL "$PACKAGER" -S --needed --noconfirm base-devel libx11 libxinerama libxft imlib2
|
||||
;;
|
||||
*)
|
||||
sudo "$PACKAGER" install -y build-essential libx11-dev libxinerama-dev libxft-dev libimlib2-dev
|
||||
$ESCALATION_TOOL "$PACKAGER" install -y build-essential libx11-dev libxinerama-dev libxft-dev libimlib2-dev
|
||||
;;
|
||||
esac
|
||||
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
setupDWM
|
||||
makeDWM
|
||||
|
|
|
@ -7,10 +7,10 @@ setupKitty() {
|
|||
if ! command_exists kitty; then
|
||||
case ${PACKAGER} in
|
||||
pacman)
|
||||
sudo "${PACKAGER}" -S --needed --noconfirm kitty
|
||||
$ESCALATION_TOOL "${PACKAGER}" -S --needed --noconfirm kitty
|
||||
;;
|
||||
*)
|
||||
sudo "${PACKAGER}" install -y kitty
|
||||
$ESCALATION_TOOL "${PACKAGER}" install -y kitty
|
||||
;;
|
||||
esac
|
||||
else
|
||||
|
@ -18,12 +18,13 @@ 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
|
||||
checkEscalationTool
|
||||
setupKitty
|
||||
|
|
|
@ -7,10 +7,10 @@ setupRofi() {
|
|||
if ! command_exists rofi; then
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
sudo "$PACKAGER" -S --needed --noconfirm rofi
|
||||
$ESCALATION_TOOL "$PACKAGER" -S --needed --noconfirm rofi
|
||||
;;
|
||||
*)
|
||||
sudo "$PACKAGER" install -y rofi
|
||||
$ESCALATION_TOOL "$PACKAGER" install -y rofi
|
||||
;;
|
||||
esac
|
||||
else
|
||||
|
@ -31,4 +31,5 @@ setupRofi() {
|
|||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
setupRofi
|
||||
|
|
|
@ -8,10 +8,10 @@ install_zsh() {
|
|||
if ! command_exists zsh; then
|
||||
case "$PACKAGER" in
|
||||
pacman)
|
||||
sudo "$PACKAGER" -S --needed --noconfirm zsh
|
||||
$ESCALATION_TOOL "$PACKAGER" -S --needed --noconfirm zsh
|
||||
;;
|
||||
*)
|
||||
sudo "$PACKAGER" install -y zsh
|
||||
$ESCALATION_TOOL "$PACKAGER" install -y zsh
|
||||
;;
|
||||
esac
|
||||
else
|
||||
|
@ -43,9 +43,10 @@ RPROMPT='%F{15}(%F{166}%D{%H:%M}%F{15})%f'
|
|||
EOL
|
||||
|
||||
# Ensure /etc/zsh/zshenv sets ZDOTDIR to the user's config directory
|
||||
echo 'export ZDOTDIR="$HOME/.config/zsh"' | sudo tee -a /etc/zsh/zshenv
|
||||
echo 'export ZDOTDIR="$HOME/.config/zsh"' | $ESCALATION_TOOL tee -a /etc/zsh/zshenv
|
||||
}
|
||||
|
||||
checkEnv
|
||||
setup_zsh_config
|
||||
checkEscalationTool
|
||||
install_zsh
|
||||
setup_zsh_config
|
||||
|
|
|
@ -11,6 +11,23 @@ command_exists() {
|
|||
which "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
checkEscalationTool() {
|
||||
## Check for escalation tools.
|
||||
if [ -z "$ESCALATION_TOOL_CHECKED" ]; then
|
||||
ESCALATION_TOOLS='sudo doas'
|
||||
for tool in ${ESCALATION_TOOLS}; do
|
||||
if command_exists "${tool}"; then
|
||||
ESCALATION_TOOL=${tool}
|
||||
echo "Using ${tool} for privilege escalation"
|
||||
ESCALATION_TOOL_CHECKED=true
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
echo -e "${RED}Can't find a supported escalation tool${RC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
checkCommandRequirements() {
|
||||
## Check for requirements.
|
||||
|
@ -82,4 +99,5 @@ checkEnv() {
|
|||
checkCurrentDirectoryWritable
|
||||
checkSuperUser
|
||||
checkDistro
|
||||
checkEscalationTool
|
||||
}
|
||||
|
|
|
@ -7,10 +7,10 @@ installPkg() {
|
|||
if ! command_exists ufw; then
|
||||
case ${PACKAGER} in
|
||||
pacman)
|
||||
sudo "${PACKAGER}" -S --needed --noconfirm ufw
|
||||
$ESCALATION_TOOL "${PACKAGER}" -S --needed --noconfirm ufw
|
||||
;;
|
||||
*)
|
||||
sudo "${PACKAGER}" install -y ufw
|
||||
$ESCALATION_TOOL "${PACKAGER}" install -y ufw
|
||||
;;
|
||||
esac
|
||||
else
|
||||
|
@ -22,27 +22,28 @@ configureUFW() {
|
|||
echo -e "${GREEN}Using Chris Titus Recommended Firewall Rules${RC}"
|
||||
|
||||
echo "Disabling UFW"
|
||||
sudo ufw disable
|
||||
$ESCALATION_TOOL ufw disable
|
||||
|
||||
echo "Limiting port 22/tcp (UFW)"
|
||||
sudo ufw limit 22/tcp
|
||||
$ESCALATION_TOOL ufw limit 22/tcp
|
||||
|
||||
echo "Allowing port 80/tcp (UFW)"
|
||||
sudo ufw allow 80/tcp
|
||||
$ESCALATION_TOOL ufw allow 80/tcp
|
||||
|
||||
echo "Allowing port 443/tcp (UFW)"
|
||||
sudo ufw allow 443/tcp
|
||||
$ESCALATION_TOOL ufw allow 443/tcp
|
||||
|
||||
echo "Denying Incoming Packets by Default(UFW)"
|
||||
sudo ufw default deny incoming
|
||||
$ESCALATION_TOOL ufw default deny incoming
|
||||
|
||||
echo "Allowing Outcoming Packets by Default(UFW)"
|
||||
sudo ufw default allow outgoing
|
||||
$ESCALATION_TOOL ufw default allow outgoing
|
||||
|
||||
sudo ufw enable
|
||||
$ESCALATION_TOOL ufw enable
|
||||
echo -e "${GREEN}Enabled Firewall with Baselines!${RC}"
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installPkg
|
||||
configureUFW
|
||||
|
|
|
@ -2,28 +2,6 @@
|
|||
|
||||
. ../common-script.sh
|
||||
|
||||
# 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
|
||||
|
||||
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 linutil repository${RC}"
|
||||
else
|
||||
echo -e "${RED}Failed to clone linutil repository${RC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
cd "$LINUXTOOLBOXDIR/linutil" || exit
|
||||
|
||||
installDepend() {
|
||||
## Check for dependencies.
|
||||
DEPENDENCIES='tar tree multitail tldr trash-cli unzip cmake make jq'
|
||||
|
@ -31,16 +9,16 @@ installDepend() {
|
|||
case $PACKAGER in
|
||||
pacman)
|
||||
if ! grep -q "^\s*\[multilib\]" /etc/pacman.conf; then
|
||||
echo "[multilib]" | sudo tee -a /etc/pacman.conf
|
||||
echo "Include = /etc/pacman.d/mirrorlist" | sudo tee -a /etc/pacman.conf
|
||||
sudo "$PACKAGER" -Syu
|
||||
echo "[multilib]" | $ESCALATION_TOOL tee -a /etc/pacman.conf
|
||||
echo "Include = /etc/pacman.d/mirrorlist" | $ESCALATION_TOOL tee -a /etc/pacman.conf
|
||||
$ESCALATION_TOOL "$PACKAGER" -Syu
|
||||
else
|
||||
echo "Multilib is already enabled."
|
||||
fi
|
||||
if ! command_exists yay && ! command_exists paru; then
|
||||
echo "Installing yay as AUR helper..."
|
||||
sudo "$PACKAGER" -S --needed --noconfirm base-devel
|
||||
cd /opt && sudo git clone https://aur.archlinux.org/yay-git.git && sudo chown -R "$USER":"$USER" ./yay-git
|
||||
$ESCALATION_TOOL "$PACKAGER" -S --needed --noconfirm base-devel
|
||||
cd /opt && $ESCALATION_TOOL git clone https://aur.archlinux.org/yay-git.git && $ESCALATION_TOOL chown -R "$USER":"$USER" ./yay-git
|
||||
cd yay-git && makepkg --noconfirm -si
|
||||
else
|
||||
echo "Aur helper already installed"
|
||||
|
@ -53,30 +31,30 @@ installDepend() {
|
|||
echo "No AUR helper found. Please install yay or paru."
|
||||
exit 1
|
||||
fi
|
||||
"$AUR_HELPER" -S --needed --noconfirm "$DEPENDENCIES"
|
||||
$AUR_HELPER -S --needed --noconfirm "$DEPENDENCIES"
|
||||
;;
|
||||
apt-get|nala)
|
||||
COMPILEDEPS='build-essential'
|
||||
sudo "$PACKAGER" update
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo "$PACKAGER" update
|
||||
sudo "$PACKAGER" install -y $DEPENDENCIES $COMPILEDEPS
|
||||
$ESCALATION_TOOL "$PACKAGER" update
|
||||
$ESCALATION_TOOL dpkg --add-architecture i386
|
||||
$ESCALATION_TOOL "$PACKAGER" update
|
||||
$ESCALATION_TOOL "$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 glibc-devel.i686 libgcc.i686
|
||||
$ESCALATION_TOOL "$PACKAGER" update
|
||||
$ESCALATION_TOOL "$PACKAGER" config-manager --set-enabled powertools
|
||||
$ESCALATION_TOOL "$PACKAGER" install -y "$DEPENDENCIES" $COMPILEDEPS
|
||||
$ESCALATION_TOOL "$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 libgcc_s1-gcc7-32bit glibc-devel-32bit
|
||||
$ESCALATION_TOOL "$PACKAGER" refresh
|
||||
$ESCALATION_TOOL "$PACKAGER" --non-interactive install "$DEPENDENCIES" $COMPILEDEPS
|
||||
$ESCALATION_TOOL "$PACKAGER" --non-interactive install libgcc_s1-gcc7-32bit glibc-devel-32bit
|
||||
;;
|
||||
*)
|
||||
sudo "$PACKAGER" install -y $DEPENDENCIES # Fixed bug where no packages found on debian-based
|
||||
$ESCALATION_TOOL "$PACKAGER" install -y $DEPENDENCIES # Fixed bug where no packages found on debian-based
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
@ -102,5 +80,6 @@ install_additional_dependencies() {
|
|||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installDepend
|
||||
install_additional_dependencies
|
||||
|
|
|
@ -7,16 +7,16 @@ installDepend() {
|
|||
echo -e "${YELLOW}Installing dependencies...${RC}"
|
||||
if [ "$PACKAGER" = "pacman" ]; then
|
||||
if ! grep -q "^\s*\[multilib\]" /etc/pacman.conf; then
|
||||
echo "[multilib]" | sudo tee -a /etc/pacman.conf
|
||||
echo "Include = /etc/pacman.d/mirrorlist" | sudo tee -a /etc/pacman.conf
|
||||
sudo ${PACKAGER} -Syu
|
||||
echo "[multilib]" | $ESCALATION_TOOL tee -a /etc/pacman.conf
|
||||
echo "Include = /etc/pacman.d/mirrorlist" | $ESCALATION_TOOL tee -a /etc/pacman.conf
|
||||
$ESCALATION_TOOL ${PACKAGER} -Syu
|
||||
else
|
||||
echo "Multilib is already enabled."
|
||||
fi
|
||||
if ! command_exists yay && ! command_exists paru; then
|
||||
echo "Installing yay as AUR helper..."
|
||||
sudo ${PACKAGER} -S --needed --noconfirm base-devel
|
||||
cd /opt && sudo git clone https://aur.archlinux.org/yay-git.git && sudo chown -R ${USER}:${USER} ./yay-git
|
||||
$ESCALATION_TOOL ${PACKAGER} -S --needed --noconfirm base-devel
|
||||
cd /opt && $ESCALATION_TOOL git clone https://aur.archlinux.org/yay-git.git && $ESCALATION_TOOL chown -R ${USER}:${USER} ./yay-git
|
||||
cd yay-git && makepkg --noconfirm -si
|
||||
else
|
||||
echo "Aur helper already installed"
|
||||
|
@ -29,24 +29,24 @@ installDepend() {
|
|||
echo "No AUR helper found. Please install yay or paru."
|
||||
exit 1
|
||||
fi
|
||||
${AUR_HELPER} -S --needed --noconfirm wine giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap gnutls lib32-gnutls \
|
||||
$AUR_HELPER -S --needed --noconfirm wine giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap gnutls lib32-gnutls \
|
||||
mpg123 lib32-mpg123 openal lib32-openal v4l-utils lib32-v4l-utils libpulse lib32-libpulse libgpg-error \
|
||||
lib32-libgpg-error alsa-plugins lib32-alsa-plugins alsa-lib lib32-alsa-lib libjpeg-turbo lib32-libjpeg-turbo \
|
||||
sqlite lib32-sqlite libxcomposite lib32-libxcomposite libxinerama lib32-libgcrypt libgcrypt lib32-libxinerama \
|
||||
ncurses lib32-ncurses ocl-icd lib32-ocl-icd libxslt lib32-libxslt libva lib32-libva gtk3 \
|
||||
lib32-gtk3 gst-plugins-base-libs lib32-gst-plugins-base-libs vulkan-icd-loader lib32-vulkan-icd-loader
|
||||
elif [ "$PACKAGER" = "apt-get" ]; then
|
||||
sudo ${PACKAGER} update
|
||||
sudo ${PACKAGER} install -y wine64 wine32 libasound2-plugins:i386 libsdl2-2.0-0:i386 libdbus-1-3:i386 libsqlite3-0:i386
|
||||
$ESCALATION_TOOL ${PACKAGER} update
|
||||
$ESCALATION_TOOL ${PACKAGER} install -y wine64 wine32 libasound2-plugins:i386 libsdl2-2.0-0:i386 libdbus-1-3:i386 libsqlite3-0:i386
|
||||
elif [ "$PACKAGER" = "dnf" ] || [ "$PACKAGER" = "zypper" ]; then
|
||||
sudo ${PACKAGER} install -y wine
|
||||
$ESCALATION_TOOL ${PACKAGER} install -y wine
|
||||
else
|
||||
sudo ${PACKAGER} install -y ${DEPENDENCIES}
|
||||
$ESCALATION_TOOL ${PACKAGER} install -y ${DEPENDENCIES}
|
||||
fi
|
||||
}
|
||||
|
||||
install_additional_dependencies() {
|
||||
case $(which apt-get || which zypper || which dnf || which pacman) in
|
||||
case $(command -v apt-get || command -v zypper || command -v dnf || command -v pacman) in
|
||||
*apt-get)
|
||||
version=$(git -c 'versionsort.suffix=-' ls-remote --tags --sort='v:refname' https://github.com/lutris/lutris |
|
||||
grep -v 'beta' |
|
||||
|
@ -58,8 +58,8 @@ install_additional_dependencies() {
|
|||
|
||||
# Install the downloaded .deb package using apt-get
|
||||
echo "Installing lutris_${version_no_v}_all.deb"
|
||||
sudo apt-get update
|
||||
sudo apt-get install ./lutris_${version_no_v}_all.deb
|
||||
$ESCALATION_TOOL apt-get update
|
||||
$ESCALATION_TOOL apt-get install ./lutris_${version_no_v}_all.deb
|
||||
|
||||
# Clean up the downloaded .deb file
|
||||
rm lutris_${version_no_v}_all.deb
|
||||
|
@ -70,34 +70,45 @@ install_additional_dependencies() {
|
|||
#Install steam on Debian
|
||||
if (lsb_release -i | grep -qi Debian); then
|
||||
#Enable i386 repos
|
||||
sudo dpkg --add-architecture i386
|
||||
$ESCALATION_TOOL dpkg --add-architecture i386
|
||||
# Install software-properties-common to be able to add repos
|
||||
sudo apt-get install -y software-properties-common
|
||||
$ESCALATION_TOOL apt-get install -y software-properties-common
|
||||
# Add repos necessary for installing steam
|
||||
sudo apt-add-repository contrib -y
|
||||
sudo apt-add-repository non-free -y
|
||||
$ESCALATION_TOOL apt-add-repository contrib -y
|
||||
$ESCALATION_TOOL apt-add-repository non-free -y
|
||||
#Install steam
|
||||
sudo apt-get install steam-installer -y
|
||||
$ESCALATION_TOOL apt-get install steam-installer -y
|
||||
else
|
||||
#Install steam on Ubuntu
|
||||
sudo apt-get install -y steam
|
||||
$ESCALATION_TOOL apt-get install -y steam
|
||||
fi
|
||||
;;
|
||||
*zypper)
|
||||
|
||||
|
||||
;;
|
||||
*dnf)
|
||||
|
||||
|
||||
;;
|
||||
*pacman)
|
||||
echo "Installing Steam for Arch Linux..."
|
||||
$ESCALATION_TOOL pacman -S --needed --noconfirm steam
|
||||
echo "Steam installation complete."
|
||||
|
||||
echo "Installing Lutris for Arch Linux..."
|
||||
$ESCALATION_TOOL pacman -S --needed --noconfirm lutris
|
||||
echo "Lutris installation complete."
|
||||
|
||||
echo "Installing GOverlay for Arch Linux..."
|
||||
$ESCALATION_TOOL pacman -S --needed --noconfirm goverlay
|
||||
echo "GOverlay installation complete."
|
||||
;;
|
||||
*)
|
||||
|
||||
;;
|
||||
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
installDepend
|
||||
install_additional_dependencies
|
||||
|
|
|
@ -2,34 +2,23 @@
|
|||
|
||||
. ../common-script.sh
|
||||
|
||||
# Check if the home directory and linuxtoolbox folder exist, create them if they don't
|
||||
LINUXTOOLBOXDIR="$HOME/linuxtoolbox"
|
||||
|
||||
if [ ! -d "$LINUXTOOLBOXDIR" ]; then
|
||||
printf "${YELLOW}Creating linuxtoolbox directory: %s${RC}\n" "$LINUXTOOLBOXDIR"
|
||||
mkdir -p "$LINUXTOOLBOXDIR"
|
||||
printf "${GREEN}linuxtoolbox directory created: %s${RC}\n" "$LINUXTOOLBOXDIR"
|
||||
fi
|
||||
|
||||
cd "$LINUXTOOLBOXDIR" || exit
|
||||
|
||||
install_theme_tools() {
|
||||
printf "${YELLOW}Installing theme tools (qt6ct and kvantum)...${RC}\n"
|
||||
case $PACKAGER in
|
||||
apt-get)
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y qt6ct kvantum
|
||||
$ESCALATION_TOOL apt-get update
|
||||
$ESCALATION_TOOL apt-get install -y qt6ct kvantum
|
||||
;;
|
||||
zypper)
|
||||
sudo zypper refresh
|
||||
sudo zypper --non-interactive install qt6ct kvantum
|
||||
$ESCALATION_TOOL zypper refresh
|
||||
$ESCALATION_TOOL zypper --non-interactive install qt6ct kvantum
|
||||
;;
|
||||
dnf)
|
||||
sudo dnf update
|
||||
sudo dnf install -y qt6ct kvantum
|
||||
$ESCALATION_TOOL dnf update
|
||||
$ESCALATION_TOOL dnf install -y qt6ct kvantum
|
||||
;;
|
||||
pacman)
|
||||
sudo pacman -S --needed --noconfirm qt6ct kvantum
|
||||
$ESCALATION_TOOL pacman -S --needed --noconfirm qt6ct kvantum
|
||||
;;
|
||||
*)
|
||||
printf "${RED}Unsupported package manager. Please install qt6ct and kvantum manually.${RC}\n"
|
||||
|
@ -52,7 +41,7 @@ EOF
|
|||
# Add QT_QPA_PLATFORMTHEME to /etc/environment
|
||||
if ! grep -q "QT_QPA_PLATFORMTHEME=qt6ct" /etc/environment; then
|
||||
printf "${YELLOW}Adding QT_QPA_PLATFORMTHEME to /etc/environment...${RC}\n"
|
||||
echo "QT_QPA_PLATFORMTHEME=qt6ct" | sudo tee -a /etc/environment > /dev/null
|
||||
echo "QT_QPA_PLATFORMTHEME=qt6ct" | $ESCALATION_TOOL tee -a /etc/environment > /dev/null
|
||||
printf "${GREEN}QT_QPA_PLATFORMTHEME added to /etc/environment.${RC}\n"
|
||||
else
|
||||
printf "${GREEN}QT_QPA_PLATFORMTHEME already set in /etc/environment.${RC}\n"
|
||||
|
@ -70,6 +59,7 @@ EOF
|
|||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
install_theme_tools
|
||||
configure_qt6ct
|
||||
configure_kvantum
|
||||
|
|
|
@ -5,24 +5,26 @@
|
|||
removeSnaps() {
|
||||
case $PACKAGER in
|
||||
pacman)
|
||||
sudo ${PACKAGER} -Rns snapd
|
||||
$ESCALATION_TOOL ${PACKAGER} -Rns snapd
|
||||
;;
|
||||
apt-get|nala)
|
||||
sudo ${PACKAGER} autoremove --purge snapd
|
||||
$ESCALATION_TOOL ${PACKAGER} autoremove --purge snapd
|
||||
if [ "$ID" = ubuntu ]; then
|
||||
sudo apt-mark hold snapd
|
||||
$ESCALATION_TOOL apt-mark hold snapd
|
||||
fi
|
||||
;;
|
||||
dnf)
|
||||
sudo ${PACKAGER} remove snapd
|
||||
$ESCALATION_TOOL ${PACKAGER} remove snapd
|
||||
;;
|
||||
zypper)
|
||||
sudo ${PACKAGER} remove snapd
|
||||
$ESCALATION_TOOL ${PACKAGER} remove snapd
|
||||
;;
|
||||
*)
|
||||
echo "removing snapd not implemented for this package manager"
|
||||
echo "Removing snapd not implemented for this package manager"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
removeSnaps
|
||||
|
|
7
src/commands/system-setup/arch/paru-setup.sh
Normal file → Executable file
7
src/commands/system-setup/arch/paru-setup.sh
Normal file → Executable file
|
@ -7,8 +7,8 @@ installDepend() {
|
|||
pacman)
|
||||
if ! command_exists paru; then
|
||||
echo "Installing paru as AUR helper..."
|
||||
sudo "$PACKAGER" -S --needed --noconfirm base-devel
|
||||
cd /opt && sudo git clone https://aur.archlinux.org/paru.git && sudo chown -R "$USER": ./paru
|
||||
$ESCALATION_TOOL "$PACKAGER" -S --needed --noconfirm base-devel
|
||||
cd /opt && $ESCALATION_TOOL git clone https://aur.archlinux.org/paru.git && $ESCALATION_TOOL chown -R "$USER": ./paru
|
||||
cd paru && makepkg --noconfirm -si
|
||||
echo "Paru installed"
|
||||
else
|
||||
|
@ -22,4 +22,5 @@ installDepend() {
|
|||
}
|
||||
|
||||
checkEnv
|
||||
installDepend
|
||||
checkEscalationTool
|
||||
installDepend
|
||||
|
|
532
src/commands/system-setup/arch/server-setup.sh
Normal file → Executable file
532
src/commands/system-setup/arch/server-setup.sh
Normal file → Executable file
|
@ -1,13 +1,17 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Redirect stdout and stderr to archsetup.txt and still output to console
|
||||
exec > >(tee -i archsetup.txt)
|
||||
exec 2>&1
|
||||
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
█████╗ ██████╗ ██████╗██╗ ██╗████████╗██╗████████╗██╗ ██╗███████╗
|
||||
██╔══██╗██╔══██╗██╔════╝██║ ██║╚══██╔══╝██║╚══██╔══╝██║ ██║██╔════╝
|
||||
███████║██████╔╝██║ ███████║ ██║ ██║ ██║ ██║ ██║███████╗
|
||||
██╔══██║██╔══██╗██║ ██╔══██║ ██║ ██║ ██║ ██║ ██║╚════██║
|
||||
██║ ██║██║ ██║╚██████╗██║ ██║ ██║ ██║ ██║ ╚██████╔╝███████║
|
||||
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝
|
||||
█████╗ ██████╗ ██████╗██╗ ██╗████████╗██╗████████╗██╗ ██╗███████╗
|
||||
██╔══██╗██╔══██╗██╔════╝██║ ██║╚══██╔══╝██║╚══██╔══╝██║ ██║██╔════╝
|
||||
███████║██████╔╝██║ ███████║ ██║ ██║ ██║ ██║ ██║███████╗
|
||||
██╔══██║██╔══██╗██║ ██╔══██║ ██║ ██║ ██║ ██║ ██║╚════██║
|
||||
██║ ██║██║ ██║╚██████╗██║ ██║ ██║ ██║ ██║ ╚██████╔╝███████║
|
||||
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝
|
||||
-------------------------------------------------------------------------
|
||||
Automated Arch Linux Installer
|
||||
-------------------------------------------------------------------------
|
||||
|
@ -20,19 +24,6 @@ if [ ! -f /usr/bin/pacstrap ]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
set_password() {
|
||||
read -rs -p "Please enter password: " PASSWORD1
|
||||
echo -ne "\n"
|
||||
read -rs -p "Please re-enter password: " PASSWORD2
|
||||
echo -ne "\n"
|
||||
if [[ "$PASSWORD1" == "$PASSWORD2" ]]; then
|
||||
export PASSWORD=$PASSWORD1
|
||||
else
|
||||
echo -ne "ERROR! Passwords do not match. \n"
|
||||
set_password
|
||||
fi
|
||||
}
|
||||
|
||||
root_check() {
|
||||
if [[ "$(id -u)" != "0" ]]; then
|
||||
echo -ne "ERROR! This script must be run under the 'root' user!\n"
|
||||
|
@ -72,115 +63,60 @@ background_checks() {
|
|||
docker_check
|
||||
}
|
||||
|
||||
# Renders a text based list of options that can be selected by the
|
||||
# user using up, down and enter keys and returns the chosen option.
|
||||
#
|
||||
# Arguments : list of options, maximum of 256
|
||||
# "opt1" "opt2" ...
|
||||
# Return value: selected index (0 for opt1, 1 for opt2 ...)
|
||||
select_option() {
|
||||
local options=("$@")
|
||||
local num_options=${#options[@]}
|
||||
local selected=0
|
||||
local last_selected=-1
|
||||
|
||||
# little helpers for terminal print control and key input
|
||||
ESC=$( printf "\033")
|
||||
cursor_blink_on() { printf "$ESC[?25h"; }
|
||||
cursor_blink_off() { printf "$ESC[?25l"; }
|
||||
cursor_to() { printf "$ESC[$1;${2:-1}H"; }
|
||||
print_option() { printf "$2 $1 "; }
|
||||
print_selected() { printf "$2 $ESC[7m $1 $ESC[27m"; }
|
||||
get_cursor_row() { IFS=';' read -sdR -p $'\E[6n' ROW COL; echo ${ROW#*[}; }
|
||||
get_cursor_col() { IFS=';' read -sdR -p $'\E[6n' ROW COL; echo ${COL#*[}; }
|
||||
key_input() {
|
||||
local key
|
||||
IFS= read -rsn1 key 2>/dev/null >&2
|
||||
if [[ $key = "" ]]; then echo enter; fi;
|
||||
if [[ $key = $'\x20' ]]; then echo space; fi;
|
||||
if [[ $key = "k" ]]; then echo up; fi;
|
||||
if [[ $key = "j" ]]; then echo down; fi;
|
||||
if [[ $key = "h" ]]; then echo left; fi;
|
||||
if [[ $key = "l" ]]; then echo right; fi;
|
||||
if [[ $key = "a" ]]; then echo all; fi;
|
||||
if [[ $key = "n" ]]; then echo none; fi;
|
||||
if [[ $key = $'\x1b' ]]; then
|
||||
read -rsn2 key
|
||||
if [[ $key = [A || $key = k ]]; then echo up; fi;
|
||||
if [[ $key = [B || $key = j ]]; then echo down; fi;
|
||||
if [[ $key = [C || $key = l ]]; then echo right; fi;
|
||||
if [[ $key = [D || $key = h ]]; then echo left; fi;
|
||||
fi
|
||||
}
|
||||
print_options_multicol() {
|
||||
# print options by overwriting the last lines
|
||||
local curr_col=$1
|
||||
local curr_row=$2
|
||||
local curr_idx=0
|
||||
|
||||
local idx=0
|
||||
local row=0
|
||||
local col=0
|
||||
|
||||
curr_idx=$(( $curr_col + $curr_row * $colmax ))
|
||||
|
||||
for option in "${options[@]}"; do
|
||||
|
||||
row=$(( $idx/$colmax ))
|
||||
col=$(( $idx - $row * $colmax ))
|
||||
|
||||
cursor_to $(( $startrow + $row + 1)) $(( $offset * $col + 1))
|
||||
if [ $idx -eq $curr_idx ]; then
|
||||
print_selected "$option"
|
||||
else
|
||||
print_option "$option"
|
||||
fi
|
||||
((idx++))
|
||||
done
|
||||
}
|
||||
|
||||
# initially print empty new lines (scroll down if at bottom of screen)
|
||||
for opt; do printf "\n"; done
|
||||
|
||||
# determine current screen position for overwriting the options
|
||||
local return_value=$1
|
||||
local lastrow=`get_cursor_row`
|
||||
local lastcol=`get_cursor_col`
|
||||
local startrow=$(($lastrow - $#))
|
||||
local startcol=1
|
||||
local lines=$( tput lines )
|
||||
local cols=$( tput cols )
|
||||
local colmax=$2
|
||||
local offset=$(( $cols / $colmax ))
|
||||
|
||||
local size=$4
|
||||
shift 4
|
||||
|
||||
# ensure cursor and input echoing back on upon a ctrl+c during read -s
|
||||
trap "cursor_blink_on; stty echo; printf '\n'; exit" 2
|
||||
cursor_blink_off
|
||||
|
||||
local active_row=0
|
||||
local active_col=0
|
||||
while true; do
|
||||
print_options_multicol $active_col $active_row
|
||||
# user key control
|
||||
case `key_input` in
|
||||
enter) break;;
|
||||
up) ((active_row--));
|
||||
if [ $active_row -lt 0 ]; then active_row=0; fi;;
|
||||
down) ((active_row++));
|
||||
if [ $active_row -ge $(( ${#options[@]} / $colmax )) ]; then active_row=$(( ${#options[@]} / $colmax )); fi;;
|
||||
left) ((active_col=$active_col - 1));
|
||||
if [ $active_col -lt 0 ]; then active_col=0; fi;;
|
||||
right) ((active_col=$active_col + 1));
|
||||
if [ $active_col -ge $colmax ]; then active_col=$(( $colmax - 1 )) ; fi;;
|
||||
# Move cursor up to the start of the menu
|
||||
if [ $last_selected -ne -1 ]; then
|
||||
echo -ne "\033[${num_options}A"
|
||||
fi
|
||||
|
||||
if [ $last_selected -eq -1 ]; then
|
||||
echo "Please select an option using the arrow keys and Enter:"
|
||||
fi
|
||||
for i in "${!options[@]}"; do
|
||||
if [ $i -eq $selected ]; then
|
||||
echo "> ${options[$i]}"
|
||||
else
|
||||
echo " ${options[$i]}"
|
||||
fi
|
||||
done
|
||||
|
||||
last_selected=$selected
|
||||
|
||||
# Read user input
|
||||
read -rsn1 key
|
||||
case $key in
|
||||
$'\x1b') # ESC sequence
|
||||
read -rsn2 -t 0.1 key
|
||||
case $key in
|
||||
'[A') # Up arrow
|
||||
((selected--))
|
||||
if [ $selected -lt 0 ]; then
|
||||
selected=$((num_options - 1))
|
||||
fi
|
||||
;;
|
||||
'[B') # Down arrow
|
||||
((selected++))
|
||||
if [ $selected -ge $num_options ]; then
|
||||
selected=0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
'') # Enter key
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# cursor position back to normal
|
||||
cursor_to $lastrow
|
||||
printf "\n"
|
||||
cursor_blink_on
|
||||
|
||||
return $(( $active_col + $active_row * $colmax ))
|
||||
return $selected
|
||||
}
|
||||
|
||||
# @description Displays ArchTitus logo
|
||||
# @noargs
|
||||
logo () {
|
||||
|
@ -201,76 +137,76 @@ echo -ne "
|
|||
# @description This function will handle file systems. At this movement we are handling only
|
||||
# btrfs and ext4. Others will be added in future.
|
||||
filesystem () {
|
||||
echo -ne "
|
||||
Please Select your file system for both boot and root
|
||||
"
|
||||
options=("btrfs" "ext4" "luks" "exit")
|
||||
select_option $? 1 "${options[@]}"
|
||||
echo -ne "
|
||||
Please Select your file system for both boot and root
|
||||
"
|
||||
options=("btrfs" "ext4" "luks" "exit")
|
||||
select_option "${options[@]}"
|
||||
|
||||
case $? in
|
||||
0) export FS=btrfs;;
|
||||
1) export FS=ext4;;
|
||||
2)
|
||||
set_password "LUKS_PASSWORD"
|
||||
export FS=luks
|
||||
;;
|
||||
3) exit ;;
|
||||
*) echo "Wrong option please select again"; filesystem;;
|
||||
esac
|
||||
case $? in
|
||||
0) export FS=btrfs;;
|
||||
1) export FS=ext4;;
|
||||
2)
|
||||
set_password "LUKS_PASSWORD"
|
||||
export FS=luks
|
||||
;;
|
||||
3) exit ;;
|
||||
*) echo "Wrong option please select again"; filesystem;;
|
||||
esac
|
||||
}
|
||||
# @description Detects and sets timezone.
|
||||
timezone () {
|
||||
# Added this from arch wiki https://wiki.archlinux.org/title/System_time
|
||||
time_zone="$(curl --fail https://ipapi.co/timezone)"
|
||||
echo -ne "
|
||||
System detected your timezone to be '$time_zone' \n"
|
||||
echo -ne "Is this correct?
|
||||
"
|
||||
options=("Yes" "No")
|
||||
select_option $? 1 "${options[@]}"
|
||||
# Added this from arch wiki https://wiki.archlinux.org/title/System_time
|
||||
time_zone="$(curl --fail https://ipapi.co/timezone)"
|
||||
echo -ne "
|
||||
System detected your timezone to be '$time_zone' \n"
|
||||
echo -ne "Is this correct?
|
||||
"
|
||||
options=("Yes" "No")
|
||||
select_option "${options[@]}"
|
||||
|
||||
case ${options[$?]} in
|
||||
y|Y|yes|Yes|YES)
|
||||
echo "${time_zone} set as timezone"
|
||||
export TIMEZONE=$time_zone;;
|
||||
n|N|no|NO|No)
|
||||
echo "Please enter your desired timezone e.g. Europe/London :"
|
||||
read new_timezone
|
||||
echo "${new_timezone} set as timezone"
|
||||
export TIMEZONE=$new_timezone;;
|
||||
*) echo "Wrong option. Try again";timezone;;
|
||||
esac
|
||||
case ${options[$?]} in
|
||||
y|Y|yes|Yes|YES)
|
||||
echo "${time_zone} set as timezone"
|
||||
export TIMEZONE=$time_zone;;
|
||||
n|N|no|NO|No)
|
||||
echo "Please enter your desired timezone e.g. Europe/London :"
|
||||
read new_timezone
|
||||
echo "${new_timezone} set as timezone"
|
||||
export TIMEZONE=$new_timezone;;
|
||||
*) echo "Wrong option. Try again";timezone;;
|
||||
esac
|
||||
}
|
||||
# @description Set user's keyboard mapping.
|
||||
keymap () {
|
||||
echo -ne "
|
||||
Please select key board layout from this list"
|
||||
# These are default key maps as presented in official arch repo archinstall
|
||||
options=(us by ca cf cz de dk es et fa fi fr gr hu il it lt lv mk nl no pl ro ru sg ua uk)
|
||||
echo -ne "
|
||||
Please select key board layout from this list"
|
||||
# These are default key maps as presented in official arch repo archinstall
|
||||
options=(us by ca cf cz de dk es et fa fi fr gr hu il it lt lv mk nl no pl ro ru se sg ua uk)
|
||||
|
||||
select_option $? 4 "${options[@]}"
|
||||
keymap=${options[$?]}
|
||||
select_option "${options[@]}"
|
||||
keymap=${options[$?]}
|
||||
|
||||
echo -ne "Your key boards layout: ${keymap} \n"
|
||||
export KEYMAP=$keymap
|
||||
echo -ne "Your key boards layout: ${keymap} \n"
|
||||
export KEYMAP=$keymap
|
||||
}
|
||||
|
||||
# @description Choose whether drive is SSD or not.
|
||||
drivessd () {
|
||||
echo -ne "
|
||||
Is this an ssd? yes/no:
|
||||
"
|
||||
echo -ne "
|
||||
Is this an ssd? yes/no:
|
||||
"
|
||||
|
||||
options=("Yes" "No")
|
||||
select_option $? 1 "${options[@]}"
|
||||
options=("Yes" "No")
|
||||
select_option "${options[@]}"
|
||||
|
||||
case ${options[$?]} in
|
||||
y|Y|yes|Yes|YES)
|
||||
export MOUNT_OPTIONS="noatime,compress=zstd,ssd,commit=120";;
|
||||
n|N|no|NO|No)
|
||||
export MOUNT_OPTIONS="noatime,compress=zstd,commit=120";;
|
||||
*) echo "Wrong option. Try again";drivessd;;
|
||||
esac
|
||||
case ${options[$?]} in
|
||||
y|Y|yes|Yes|YES)
|
||||
export MOUNT_OPTIONS="noatime,compress=zstd,ssd,commit=120";;
|
||||
n|N|no|NO|No)
|
||||
export MOUNT_OPTIONS="noatime,compress=zstd,commit=120";;
|
||||
*) echo "Wrong option. Try again";drivessd;;
|
||||
esac
|
||||
}
|
||||
|
||||
# @description Disk selection for drive to be used with installation.
|
||||
|
@ -286,26 +222,64 @@ echo -ne "
|
|||
|
||||
"
|
||||
|
||||
PS3='
|
||||
Select the disk to install on: '
|
||||
options=($(lsblk -n --output TYPE,KNAME,SIZE | awk '$1=="disk"{print "/dev/"$2"|"$3}'))
|
||||
PS3='
|
||||
Select the disk to install on: '
|
||||
options=($(lsblk -n --output TYPE,KNAME,SIZE | awk '$1=="disk"{print "/dev/"$2"|"$3}'))
|
||||
|
||||
select_option $? 1 "${options[@]}"
|
||||
disk=${options[$?]%|*}
|
||||
select_option "${options[@]}"
|
||||
disk=${options[$?]%|*}
|
||||
|
||||
echo -e "\n${disk%|*} selected \n"
|
||||
export DISK=${disk%|*}
|
||||
echo -e "\n${disk%|*} selected \n"
|
||||
export DISK=${disk%|*}
|
||||
|
||||
drivessd
|
||||
drivessd
|
||||
}
|
||||
|
||||
# @description Gather username and password to be used for installation.
|
||||
userinfo () {
|
||||
read -p "Please enter your username: " username
|
||||
export USERNAME=${username,,} # convert to lower case as in issue #109
|
||||
set_password "PASSWORD"
|
||||
read -rep "Please enter your hostname: " nameofmachine
|
||||
export NAME_OF_MACHINE=$nameofmachine
|
||||
# Loop through user input until the user gives a valid username
|
||||
while true
|
||||
do
|
||||
read -p "Please enter username:" username
|
||||
if [[ "${username,,}" =~ ^[a-z_]([a-z0-9_-]{0,31}|[a-z0-9_-]{0,30}\$)$ ]]
|
||||
then
|
||||
break
|
||||
fi
|
||||
echo "Incorrect username."
|
||||
done
|
||||
export USERNAME=$username
|
||||
|
||||
while true
|
||||
do
|
||||
read -rs -p "Please enter password: " PASSWORD1
|
||||
echo -ne "\n"
|
||||
read -rs -p "Please re-enter password: " PASSWORD2
|
||||
echo -ne "\n"
|
||||
if [[ "$PASSWORD1" == "$PASSWORD2" ]]; then
|
||||
break
|
||||
else
|
||||
echo -ne "ERROR! Passwords do not match. \n"
|
||||
fi
|
||||
done
|
||||
export PASSWORD=$PASSWORD1
|
||||
|
||||
# Loop through user input until the user gives a valid hostname, but allow the user to force save
|
||||
while true
|
||||
do
|
||||
read -p "Please name your machine:" name_of_machine
|
||||
# hostname regex (!!couldn't find spec for computer name!!)
|
||||
if [[ "${name_of_machine,,}" =~ ^[a-z][a-z0-9_.-]{0,62}[a-z0-9]$ ]]
|
||||
then
|
||||
break
|
||||
fi
|
||||
# if validation fails allow the user to force saving of the hostname
|
||||
read -p "Hostname doesn't seem correct. Do you still want to save it? (y/n)" force
|
||||
if [[ "${force,,}" = "y" ]]
|
||||
then
|
||||
break
|
||||
fi
|
||||
done
|
||||
export NAME_OF_MACHINE=$name_of_machine
|
||||
}
|
||||
|
||||
# Starting functions
|
||||
|
@ -331,7 +305,7 @@ iso=$(curl -4 ifconfig.co/country-iso)
|
|||
timedatectl set-ntp true
|
||||
pacman -S --noconfirm archlinux-keyring #update keyrings to latest to prevent packages failing to install
|
||||
pacman -S --noconfirm --needed pacman-contrib terminus-font
|
||||
setfont ter-v22b
|
||||
setfont ter-v18b
|
||||
sed -i 's/^#ParallelDownloads/ParallelDownloads/' /etc/pacman.conf
|
||||
pacman -S --noconfirm --needed reflector rsync grub
|
||||
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
|
||||
|
@ -341,7 +315,9 @@ echo -ne "
|
|||
-------------------------------------------------------------------------
|
||||
"
|
||||
reflector -a 48 -c $iso -f 5 -l 20 --sort rate --save /etc/pacman.d/mirrorlist
|
||||
mkdir /mnt &>/dev/null # Hiding error message if any
|
||||
if [ ! -d "/mnt" ]; then
|
||||
mkdir /mnt
|
||||
fi
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
Installing Prerequisites
|
||||
|
@ -434,7 +410,11 @@ elif [[ "${FS}" == "luks" ]]; then
|
|||
subvolumesetup
|
||||
fi
|
||||
|
||||
# mount target
|
||||
sync
|
||||
if ! mountpoint -q /mnt; then
|
||||
echo "ERROR! Failed to mount ${partition3} to /mnt after multiple attempts."
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p /mnt/boot/efi
|
||||
mount -t vfat -L EFIBOOT /mnt/boot/
|
||||
|
||||
|
@ -450,9 +430,12 @@ echo -ne "
|
|||
Arch Install on Main Drive
|
||||
-------------------------------------------------------------------------
|
||||
"
|
||||
pacstrap /mnt base base-devel linux-lts linux-lts-firmware vim nano sudo archlinux-keyring wget libnewt --noconfirm --needed
|
||||
if [[ ! -d "/sys/firmware/efi" ]]; then
|
||||
pacstrap /mnt base base-devel linux-lts linux-firmware --noconfirm --needed
|
||||
else
|
||||
pacstrap /mnt base base-devel linux-lts linux-firmware efibootmgr --noconfirm --needed
|
||||
fi
|
||||
echo "keyserver hkp://keyserver.ubuntu.com" >> /mnt/etc/pacman.d/gnupg/gpg.conf
|
||||
cp -R ${SCRIPT_DIR} /mnt/root/ArchTitus
|
||||
cp /etc/pacman.d/mirrorlist /mnt/etc/pacman.d/mirrorlist
|
||||
|
||||
genfstab -L /mnt >> /mnt/etc/fstab
|
||||
|
@ -467,8 +450,6 @@ echo -ne "
|
|||
"
|
||||
if [[ ! -d "/sys/firmware/efi" ]]; then
|
||||
grub-install --boot-directory=/mnt/boot ${DISK}
|
||||
else
|
||||
pacstrap /mnt efibootmgr --noconfirm --needed
|
||||
fi
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
|
@ -491,6 +472,10 @@ if [[ $TOTAL_MEM -lt 8000000 ]]; then
|
|||
echo "/opt/swap/swapfile none swap sw 0 0" >> /mnt/etc/fstab # Add swap to fstab, so it KEEPS working after installation.
|
||||
fi
|
||||
|
||||
gpu_type=$(lspci | grep -E "VGA|3D|Display")
|
||||
|
||||
arch-chroot /mnt /bin/bash <<EOF
|
||||
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
Network Setup
|
||||
|
@ -504,14 +489,14 @@ echo -ne "
|
|||
-------------------------------------------------------------------------
|
||||
"
|
||||
pacman -S --noconfirm --needed pacman-contrib curl
|
||||
pacman -S --noconfirm --needed reflector rsync grub arch-install-scripts git
|
||||
pacman -S --noconfirm --needed reflector rsync grub arch-install-scripts git ntp wget
|
||||
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
|
||||
|
||||
nc=$(grep -c ^processor /proc/cpuinfo)
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
You have " $nc" cores. And
|
||||
changing the makeflags for "$nc" cores. Aswell as
|
||||
changing the makeflags for " $nc" cores. Aswell as
|
||||
changing the compression settings.
|
||||
-------------------------------------------------------------------------
|
||||
"
|
||||
|
@ -551,15 +536,14 @@ echo -ne "
|
|||
-------------------------------------------------------------------------
|
||||
"
|
||||
# determine processor type and install microcode
|
||||
proc_type=$(lscpu)
|
||||
if grep -E "GenuineIntel" <<< ${proc_type}; then
|
||||
if grep -q "GenuineIntel" /proc/cpuinfo; then
|
||||
echo "Installing Intel microcode"
|
||||
pacman -S --noconfirm --needed intel-ucode
|
||||
proc_ucode=intel-ucode.img
|
||||
elif grep -E "AuthenticAMD" <<< ${proc_type}; then
|
||||
elif grep -q "AuthenticAMD" /proc/cpuinfo; then
|
||||
echo "Installing AMD microcode"
|
||||
pacman -S --noconfirm --needed amd-ucode
|
||||
proc_ucode=amd-ucode.img
|
||||
else
|
||||
echo "Unable to determine CPU vendor. Skipping microcode installation."
|
||||
fi
|
||||
|
||||
echo -ne "
|
||||
|
@ -568,72 +552,32 @@ echo -ne "
|
|||
-------------------------------------------------------------------------
|
||||
"
|
||||
# Graphics Drivers find and install
|
||||
gpu_type=$(lspci)
|
||||
if grep -E "NVIDIA|GeForce" <<< ${gpu_type}; then
|
||||
if echo "${gpu_type}" | grep -E "NVIDIA|GeForce"; then
|
||||
echo "Installing NVIDIA drivers: nvidia-lts"
|
||||
pacman -S --noconfirm --needed nvidia-lts
|
||||
nvidia-xconfig
|
||||
elif lspci | grep 'VGA' | grep -E "Radeon|AMD"; then
|
||||
elif echo "${gpu_type}" | grep 'VGA' | grep -E "Radeon|AMD"; then
|
||||
echo "Installing AMD drivers: xf86-video-amdgpu"
|
||||
pacman -S --noconfirm --needed xf86-video-amdgpu
|
||||
elif grep -E "Integrated Graphics Controller" <<< ${gpu_type}; then
|
||||
elif echo "${gpu_type}" | grep -E "Integrated Graphics Controller"; then
|
||||
echo "Installing Intel drivers:"
|
||||
pacman -S --noconfirm --needed libva-intel-driver libvdpau-va-gl lib32-vulkan-intel vulkan-intel libva-intel-driver libva-utils lib32-mesa
|
||||
elif echo "${gpu_type}" | grep -E "Intel Corporation UHD"; then
|
||||
echo "Installing Intel UHD drivers:"
|
||||
pacman -S --noconfirm --needed libva-intel-driver libvdpau-va-gl lib32-vulkan-intel vulkan-intel libva-intel-driver libva-utils lib32-mesa
|
||||
elif grep -E "Intel Corporation UHD" <<< ${gpu_type}; then
|
||||
pacman -S --needed --noconfirm libva-intel-driver libvdpau-va-gl lib32-vulkan-intel vulkan-intel libva-intel-driver libva-utils lib32-mesa
|
||||
fi
|
||||
# Loop through user input until the user gives a valid username
|
||||
while true
|
||||
do
|
||||
read -p "Please enter username:" username
|
||||
# username regex per response here https://unix.stackexchange.com/questions/157426/what-is-the-regex-to-validate-linux-users
|
||||
# lowercase the username to test regex
|
||||
if [[ "${username,,}" =~ ^[a-z_]([a-z0-9_-]{0,31}|[a-z0-9_-]{0,30}\$)$ ]]
|
||||
then
|
||||
break
|
||||
fi
|
||||
echo "Incorrect username."
|
||||
done
|
||||
#Set Password
|
||||
read -p "Please enter password:" password
|
||||
|
||||
# Loop through user input until the user gives a valid hostname, but allow the user to force save
|
||||
while true
|
||||
do
|
||||
read -p "Please name your machine:" name_of_machine
|
||||
# hostname regex (!!couldn't find spec for computer name!!)
|
||||
if [[ "${name_of_machine,,}" =~ ^[a-z][a-z0-9_.-]{0,62}[a-z0-9]$ ]]
|
||||
then
|
||||
break
|
||||
fi
|
||||
# if validation fails allow the user to force saving of the hostname
|
||||
read -p "Hostname doesn't seem correct. Do you still want to save it? (y/n)" force
|
||||
if [[ "${force,,}" = "y" ]]
|
||||
then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
Adding User
|
||||
-------------------------------------------------------------------------
|
||||
"
|
||||
if [ $(whoami) = "root" ]; then
|
||||
groupadd libvirt
|
||||
useradd -m -G wheel,libvirt -s /bin/bash $USERNAME
|
||||
echo "$USERNAME created, home directory created, added to wheel and libvirt group, default shell set to /bin/bash"
|
||||
groupadd libvirt
|
||||
useradd -m -G wheel,libvirt -s /bin/bash $USERNAME
|
||||
echo "$USERNAME created, home directory created, added to wheel and libvirt group, default shell set to /bin/bash"
|
||||
echo "$USERNAME:$PASSWORD" | chpasswd
|
||||
echo "$USERNAME password set"
|
||||
echo $NAME_OF_MACHINE > /etc/hostname
|
||||
|
||||
# use chpasswd to enter $USERNAME:$password
|
||||
echo "$USERNAME:$PASSWORD" | chpasswd
|
||||
echo "$USERNAME password set"
|
||||
|
||||
cp -R $HOME/ArchTitus /home/$USERNAME/
|
||||
chown -R $USERNAME: /home/$USERNAME/ArchTitus
|
||||
echo "ArchTitus copied to home directory"
|
||||
|
||||
# enter $NAME_OF_MACHINE to /etc/hostname
|
||||
echo $NAME_OF_MACHINE > /etc/hostname
|
||||
else
|
||||
echo "You are already a user proceed with aur installs"
|
||||
fi
|
||||
if [[ ${FS} == "luks" ]]; then
|
||||
# Making sure to edit mkinitcpio conf if luks is selected
|
||||
# add encrypt in mkinitcpio.conf before filesystems in hooks
|
||||
|
@ -642,19 +586,16 @@ if [[ ${FS} == "luks" ]]; then
|
|||
mkinitcpio -p linux-lts
|
||||
fi
|
||||
|
||||
export PATH=$PATH:~/.local/bin
|
||||
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
█████╗ ██████╗ ██████╗██╗ ██╗████████╗██╗████████╗██╗ ██╗███████╗
|
||||
██╔══██╗██╔══██╗██╔════╝██║ ██║╚══██╔══╝██║╚══██╔══╝██║ ██║██╔════╝
|
||||
███████║██████╔╝██║ ███████║ ██║ ██║ ██║ ██║ ██║███████╗
|
||||
██╔══██║██╔══██╗██║ ██╔══██║ ██║ ██║ ██║ ██║ ██║╚════██║
|
||||
██║ ██║██║ ██║╚██████╗██║ ██║ ██║ ██║ ██║ ╚██████╔╝███████║
|
||||
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝
|
||||
█████╗ ██████╗ ██████╗██╗ ██╗████████╗██╗████████╗██╗ ██╗███████╗
|
||||
██╔══██╗██╔══██╗██╔════╝██║ ██║╚══██╔══╝██║╚══██╔══╝██║ ██║██╔════╝
|
||||
███████║██████╔╝██║ ███████║ ██║ ██║ ██║ ██║ ██║███████╗
|
||||
██╔══██║██╔══██╗██║ ██╔══██║ ██║ ██║ ██║ ██║ ██║╚════██║
|
||||
██║ ██║██║ ██║╚██████╗██║ ██║ ██║ ██║ ██║ ╚██████╔╝███████║
|
||||
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝
|
||||
-------------------------------------------------------------------------
|
||||
Automated Arch Linux Installer
|
||||
SCRIPTHOME: ArchTitus
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
Final Setup and Configurations
|
||||
|
@ -678,33 +619,31 @@ fi
|
|||
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& splash /' /etc/default/grub
|
||||
|
||||
echo -e "Installing CyberRe Grub theme..."
|
||||
THEME_DIR="/boot/grub/themes"
|
||||
THEME_NAME=CyberRe
|
||||
THEME_DIR="/boot/grub/themes/CyberRe"
|
||||
echo -e "Creating the theme directory..."
|
||||
mkdir -p "${THEME_DIR}/${THEME_NAME}"
|
||||
echo -e "Copying the theme..."
|
||||
cd "${HOME}/ArchTitus" || exit
|
||||
cp -a configs${THEME_DIR}/${THEME_NAME}/* ${THEME_DIR}/${THEME_NAME}
|
||||
mkdir -p "${THEME_DIR}"
|
||||
|
||||
# Clone the theme
|
||||
cd "${THEME_DIR}" || exit
|
||||
git init
|
||||
git remote add -f origin https://github.com/ChrisTitusTech/Top-5-Bootloader-Themes.git
|
||||
git config core.sparseCheckout true
|
||||
echo "themes/CyberRe/*" >> .git/info/sparse-checkout
|
||||
git pull origin main
|
||||
mv themes/CyberRe/* .
|
||||
rm -rf themes
|
||||
rm -rf .git
|
||||
|
||||
echo "CyberRe theme has been cloned to ${THEME_DIR}"
|
||||
echo -e "Backing up Grub config..."
|
||||
cp -an /etc/default/grub /etc/default/grub.bak
|
||||
echo -e "Setting the theme as the default..."
|
||||
# shellcheck disable=SC2069
|
||||
grep "GRUB_THEME=" /etc/default/grub 2>&1 >/dev/null && sed -i '/GRUB_THEME=/d' /etc/default/grub
|
||||
echo "GRUB_THEME=\"${THEME_DIR}/${THEME_NAME}/theme.txt\"" >> /etc/default/grub
|
||||
echo "GRUB_THEME=\"${THEME_DIR}/theme.txt\"" >> /etc/default/grub
|
||||
echo -e "Updating grub..."
|
||||
grub-mkconfig -o /boot/grub/grub.cfg
|
||||
echo -e "All set!"
|
||||
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
Enabling (and Theming) Login Display Manager
|
||||
-------------------------------------------------------------------------
|
||||
"
|
||||
|
||||
systemctl enable sddm.service
|
||||
echo "[Theme]" >> /etc/sddm.conf
|
||||
echo "Current=Nordic" >> /etc/sddm.conf
|
||||
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
Enabling Essential Services
|
||||
|
@ -720,25 +659,6 @@ echo " DHCP stopped"
|
|||
systemctl enable NetworkManager.service
|
||||
echo " NetworkManager enabled"
|
||||
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
Enabling (and Theming) Plymouth Boot Splash
|
||||
-------------------------------------------------------------------------
|
||||
"
|
||||
PLYMOUTH_THEMES_DIR="$HOME/ArchTitus/configs/usr/share/plymouth/themes"
|
||||
PLYMOUTH_THEME="arch-glow" # can grab from config later if we allow selection
|
||||
mkdir -p /usr/share/plymouth/themes
|
||||
echo 'Installing Plymouth theme...'
|
||||
cp -rf "${PLYMOUTH_THEMES_DIR}"/${PLYMOUTH_THEME} /usr/share/plymouth/themes
|
||||
if [[ $FS == "luks" ]]; then
|
||||
sed -i 's/HOOKS=(base udev*/& plymouth/' /etc/mkinitcpio.conf # add plymouth after base udev
|
||||
sed -i 's/HOOKS=(base udev \(.*block\) /&plymouth-/' /etc/mkinitcpio.conf # create plymouth-encrypt after block hook
|
||||
else
|
||||
sed -i 's/HOOKS=(base udev*/& plymouth/' /etc/mkinitcpio.conf # add plymouth after base udev
|
||||
fi
|
||||
plymouth-set-default-theme -R arch-glow # sets the theme and runs mkinitcpio
|
||||
echo 'Plymouth theme installed'
|
||||
|
||||
echo -ne "
|
||||
-------------------------------------------------------------------------
|
||||
Cleaning
|
||||
|
@ -751,10 +671,6 @@ sed -i 's/^%wheel ALL=(ALL:ALL) NOPASSWD: ALL/# %wheel ALL=(ALL:ALL) NOPASSWD: A
|
|||
sed -i 's/^# %wheel ALL=(ALL) ALL/%wheel ALL=(ALL) ALL/' /etc/sudoers
|
||||
sed -i 's/^# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/' /etc/sudoers
|
||||
|
||||
rm -r $HOME/ArchTitus
|
||||
rm -r /home/$USERNAME/ArchTitus
|
||||
|
||||
# Replace in the same state
|
||||
cd "$(pwd)" || exit
|
||||
|
||||
|
||||
EOF
|
||||
|
|
7
src/commands/system-setup/arch/yay-setup.sh
Normal file → Executable file
7
src/commands/system-setup/arch/yay-setup.sh
Normal file → Executable file
|
@ -7,8 +7,8 @@ installDepend() {
|
|||
pacman)
|
||||
if ! command_exists yay; then
|
||||
echo "Installing yay as AUR helper..."
|
||||
sudo "$PACKAGER" -S --needed --noconfirm base-devel
|
||||
cd /opt && sudo git clone https://aur.archlinux.org/yay-git.git && sudo chown -R "$USER": ./yay-git
|
||||
$ESCALATION_TOOL "$PACKAGER" -S --needed --noconfirm base-devel
|
||||
cd /opt && $ESCALATION_TOOL git clone https://aur.archlinux.org/yay-git.git && $ESCALATION_TOOL chown -R "$USER": ./yay-git
|
||||
cd yay-git && makepkg --noconfirm -si
|
||||
echo "Yay installed"
|
||||
else
|
||||
|
@ -22,4 +22,5 @@ installDepend() {
|
|||
}
|
||||
|
||||
checkEnv
|
||||
installDepend
|
||||
checkEscalationTool
|
||||
installDepend
|
||||
|
|
26
src/commands/system-setup/fedora/rpm-fusion-setup.sh
Normal file
26
src/commands/system-setup/fedora/rpm-fusion-setup.sh
Normal file
|
@ -0,0 +1,26 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
. "$(dirname "$0")/../../common-script.sh"
|
||||
|
||||
# https://rpmfusion.org/Configuration
|
||||
|
||||
installRPMFusion() {
|
||||
case $PACKAGER in
|
||||
dnf)
|
||||
if [[ ! -e /etc/yum.repos.d/rpmfusion-free.repo || ! -e /etc/yum.repos.d/rpmfusion-nonfree.repo ]]; then
|
||||
echo "Installing RPM Fusion..."
|
||||
$ESCALATION_TOOL "$PACKAGER" install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
|
||||
$ESCALATION_TOOL "$PACKAGER" config-manager --enable fedora-cisco-openh264
|
||||
$ESCALATION_TOOL "RPM Fusion installed"
|
||||
else
|
||||
echo "RPM Fusion already installed"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported distribution: $DTYPE"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
checkEnv
|
||||
installRPMFusion
|
|
@ -40,6 +40,7 @@ fastUpdate() {
|
|||
echo -e "${RED}Rate-mirrors failed, restoring backup.${RC}"
|
||||
$ESCALATION_TOOL cp /etc/pacman.d/mirrorlist.bak /etc/pacman.d/mirrorlist
|
||||
fi
|
||||
|
||||
;;
|
||||
apt-get|nala)
|
||||
$ESCALATION_TOOL apt-get update
|
||||
|
@ -111,8 +112,8 @@ updateFlatpaks() {
|
|||
fi
|
||||
}
|
||||
|
||||
checkEscalationTool
|
||||
checkEnv
|
||||
checkEscalationTool
|
||||
fastUpdate
|
||||
updateSystem
|
||||
updateFlatpaks
|
||||
updateFlatpaks
|
|
@ -20,6 +20,18 @@ script = "arch/paru-setup.sh"
|
|||
name = "Yay AUR Helper"
|
||||
script = "arch/yay-setup.sh"
|
||||
|
||||
[[data]]
|
||||
name = "Fedora"
|
||||
|
||||
[[data.preconditions]]
|
||||
matches = true
|
||||
data = "command_exists"
|
||||
values = ["dnf"]
|
||||
|
||||
[[data.entries]]
|
||||
name = "RPM Fusion Setup"
|
||||
script = "fedora/rpm-fusion-setup.sh"
|
||||
|
||||
[[data]]
|
||||
name = "Full System Update"
|
||||
script = "system-update.sh"
|
||||
|
|
60
src/commands/utils/numlock.sh
Executable file
60
src/commands/utils/numlock.sh
Executable file
|
@ -0,0 +1,60 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
# setleds can be used in all distros
|
||||
# This method works by calling a script using systemd service
|
||||
|
||||
# Create a script to toggle numlock
|
||||
create_file() {
|
||||
echo "Creating script..."
|
||||
sudo tee "/usr/local/bin/numlock" >/dev/null <<'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
for tty in /dev/tty{1..6}
|
||||
do
|
||||
/usr/bin/setleds -D +num < "$tty";
|
||||
done
|
||||
EOF
|
||||
|
||||
sudo chmod +x /usr/local/bin/numlock
|
||||
}
|
||||
|
||||
# Create a systemd service to run the script on boot
|
||||
create_service() {
|
||||
echo "Creating service..."
|
||||
sudo tee "/etc/systemd/system/numlock.service" >/dev/null <<'EOF'
|
||||
[Unit]
|
||||
Description=numlock
|
||||
|
||||
[Service]
|
||||
ExecStart=/usr/local/bin/numlock
|
||||
StandardInput=tty
|
||||
RemainAfterExit=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
}
|
||||
|
||||
main() {
|
||||
# Check if the script and service files exists
|
||||
if [ ! -f "/usr/local/bin/numlock" ]; then
|
||||
create_file
|
||||
fi
|
||||
|
||||
if [ ! -f "/etc/systemd/system/numlock.service" ]; then
|
||||
create_service
|
||||
fi
|
||||
|
||||
printf "Do you want to enable Numlock on boot? (y/n): "
|
||||
read -r confirm
|
||||
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
|
||||
sudo systemctl enable numlock.service --quiet
|
||||
echo "Numlock will be enabled on boot"
|
||||
else
|
||||
sudo systemctl disable numlock.service --quiet
|
||||
echo "Numlock will not be enabled on boot"
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
main
|
|
@ -8,6 +8,10 @@ script = "wifi-control.sh"
|
|||
name = "Bluetooth Manager"
|
||||
script = "bluetooth-control.sh"
|
||||
|
||||
[[data]]
|
||||
name = "Numlock on Startup"
|
||||
script = "numlock.sh"
|
||||
|
||||
[[data]]
|
||||
name = "Monitor Control"
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user