Compare commits

...

11 Commits

Author SHA1 Message Date
Adam Perkowski
047ee12664
Merge f688f0c9dd into e3688e9b3d 2024-10-24 22:07:39 +02:00
Adam Perkowski
e3688e9b3d
fix+refact(system-cleanup) (#856)
* fix(system-cleanup): some issues

* new packager quotes
2024-10-24 14:59:23 -05:00
Adam Perkowski
51631a16cb
feat: desktop entry & manpage installation through linutil-installer.sh (#802) 2024-10-24 14:55:56 -05:00
Adam Perkowski
d39ffad527
📖 fix(docs): newlines (#796) 2024-10-24 14:50:27 -05:00
Adam Perkowski
c0982a787f
📖 add auto docs generation instructions to the Contributing Guidelines (#788)
* 📖 add auto docs generation instructions to the Contributing Guidelines

* Commit Contributing Guidelines

---------

Co-authored-by: adamperkowski <adamperkowski@users.noreply.github.com>
2024-10-24 14:45:37 -05:00
Adam Perkowski
4f7de594a6
🔍️ exiting search with Ctrl-C + better shortcut tips (#768) 2024-10-24 14:43:16 -05:00
Adam Perkowski
fa2f838b63
📃 fix(monitor setup): a bug with utility-functions; newlines & colors in the scripts (#713)
* fixed newlines & changed colors to keep synergy

* fixed a bug
2024-10-24 14:39:04 -05:00
Adam Perkowski
f688f0c9dd
even more + ,, 2024-09-30 00:17:46 +02:00
Adam Perkowski
9618128ff8
more tildas 2024-09-28 21:04:14 +02:00
Adam Perkowski
858d1194fb
Merge remote-tracking branch 'upstream/main' into tilda_env 2024-09-28 21:01:29 +02:00
Adam Perkowski
96af3c9b6e
Changed every ~ to $HOME 2024-09-24 13:38:07 +02:00
17 changed files with 93 additions and 55 deletions

View File

@ -16,6 +16,7 @@ cd linutil
```
## 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.
@ -60,6 +61,7 @@ cd linutil
## 11. Documentation
- **Update the documentation**: If your change affects the functionality, please update the relevant documentation files to reflect this.
- **Automatic generation**: If you decide to add functionality through a new shell script, make sure to fill out all fields in `tab_data.toml` and run `cargo xtask docgen`.
## 12. License

View File

@ -22,7 +22,7 @@ jobs:
- name: Copy Contributing Guidelines
run: |
echo "<!-- THIS FILE IS GENERATED AUTOMATICALLY. EDIT .github/CONTRIBUTING.md -->\n\n$(cat .github/CONTRIBUTING.md)" > 'docs/contributing.md'
echo -e "<!-- THIS FILE IS GENERATED AUTOMATICALLY. EDIT .github/CONTRIBUTING.md -->\n\n$(cat .github/CONTRIBUTING.md)" > 'docs/contributing.md'
- uses: stefanzweifel/git-auto-commit-action@v5
with:

View File

@ -129,17 +129,17 @@ picom_animations() {
clone_config_folders() {
# Ensure the target directory exists
[ ! -d ~/.config ] && mkdir -p ~/.config
[ ! -d "$HOME/.config" ] && mkdir -p "$HOME/.config"
# Iterate over all directories in config/*
for dir in config/*/; do
# Extract the directory name
dir_name=$(basename "$dir")
# Clone the directory to ~/.config/
# Clone the directory to $HOME/.config/
if [ -d "$dir" ]; then
cp -r "$dir" ~/.config/
printf "%b\n" "${GREEN}Cloned $dir_name to ~/.config/${RC}"
cp -r "$dir" "$HOME/.config/"
printf "%b\n" "${GREEN}Cloned $dir_name to $HOME/.config/${RC}"
else
printf "%b\n" "${RED}Directory $dir_name does not exist, skipping${RC}"
fi
@ -153,11 +153,11 @@ configure_backgrounds() {
# Set the variable BG_DIR to the path where backgrounds will be stored
BG_DIR="$PIC_DIR/backgrounds"
# Check if the ~/Pictures directory exists
# Check if the $HOME/Pictures directory exists
if [ ! -d "$PIC_DIR" ]; then
# If it doesn't exist, print an error message and return with a status of 1 (indicating failure)
printf "%b\n" "${RED}Pictures directory does not exist${RC}"
mkdir ~/Pictures
mkdir "$HOME/Pictures"
printf "%b\n" "${GREEN}Directory was created in Home folder${RC}"
fi

View File

@ -35,10 +35,10 @@ installLinutil() {
printf "%b\n" "${YELLOW}Installing rustup...${RC}"
case "$PACKAGER" in
pacman)
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm rustup
"$ESCALATION_TOOL" "$PACKAGER" -S --needed --noconfirm curl rustup man-db
;;
dnf)
"$ESCALATION_TOOL" "$PACKAGER" install -y rustup
"$ESCALATION_TOOL" "$PACKAGER" install -y curl rustup man-pages man-db man
;;
zypper)
"$ESCALATION_TOOL" "$PACKAGER" install -n curl gcc make
@ -54,12 +54,23 @@ installLinutil() {
rustup default stable
cargo install --force linutil_tui
printf "%b\n" "${GREEN}Installed successfully.${RC}"
installExtra
;;
*) printf "%b\n" "${RED}Linutil not installed.${RC}" ;;
esac
esac
}
installExtra() {
printf "%b\n" "${YELLOW}Installing the manpage...${RC}"
"$ESCALATION_TOOL" mkdir -p /usr/share/man/man1
curl 'https://raw.githubusercontent.com/ChrisTitusTech/linutil/refs/heads/main/man/linutil.1' | "$ESCALATION_TOOL" tee '/usr/share/man/man1/linutil.1' > /dev/null
printf "%b\n" "${YELLOW}Creating a Desktop Entry...${RC}"
"$ESCALATION_TOOL" mkdir -p /usr/share/applications
curl 'https://raw.githubusercontent.com/ChrisTitusTech/linutil/refs/heads/main/linutil.desktop' | "$ESCALATION_TOOL" tee /usr/share/applications/linutil.desktop > /dev/null
printf "%b\n" "${GREEN}Done.${RC}"
}
checkEnv
checkEscalationTool
checkAURHelper

View File

@ -61,8 +61,8 @@ installStarshipAndFzf() {
if command_exists fzf; then
printf "%b\n" "${GREEN}Fzf already installed${RC}"
else
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
"$ESCALATION_TOOL" ~/.fzf/install
git clone --depth 1 https://github.com/junegunn/fzf.git "$HOME/.fzf"
"$ESCALATION_TOOL" "$HOME/.fzf/install"
fi
}

View File

@ -242,7 +242,7 @@ userinfo () {
while true
do
read -r -p "Please enter username: " username
if [[ "${username,,}" =~ ^[a-z_]([a-z0-9_-]{0,31}|[a-z0-9_-]{0,30}\$)$ ]]
if echo "$username" | grep -qE '^[a-z_][a-z0-9_-]{0,31}(\$)?$'
then
break
fi
@ -267,20 +267,23 @@ userinfo () {
# Loop through user input until the user gives a valid hostname, but allow the user to force save
while true
do
read -r -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]$ ]]
printf "%b" "Please name your machine: "
read -r machine_name
lower_machine_name=$(echo "$machine_name" | tr '[:upper:]' '[:lower:]')
if echo "$lower_machine_name" | grep -q '^[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 -r -p "Hostname doesn't seem correct. Do you still want to save it? (y/n)" force
if [[ "${force,,}" = "y" ]]
printf "%b" "Hostname doesn't seem correct. Do you still want to save it? (y/N) "
read -r force
if [[ "$force" == "y" || "$force" == "Y" ]]
then
break
fi
done
export NAME_OF_MACHINE=$name_of_machine
export NAME_OF_MACHINE=$lower_machine_name
}
# Starting functions
@ -376,7 +379,7 @@ subvolumesetup () {
mountallsubvol
}
if [[ "${DISK}" =~ "nvme" ]]; then
if echo "$DISK" | grep -q "nvme"; then
partition2=${DISK}p2
partition3=${DISK}p3
else

23
core/tabs/system-setup/system-cleanup.sh Normal file → Executable file
View File

@ -26,16 +26,21 @@ cleanup_system() {
"$ESCALATION_TOOL" "$PACKAGER" -Rns $(pacman -Qtdq) --noconfirm > /dev/null 2>&1
;;
*)
printf "%b\n" "${RED}Unsupported package manager: ""$PACKAGER""${RC}"
return 1
printf "%b\n" "${RED}Unsupported package manager: ${PACKAGER}. Skipping.${RC}"
;;
esac
}
common_cleanup() {
"$ESCALATION_TOOL" find /var/tmp -type f -atime +5 -delete
"$ESCALATION_TOOL" find /tmp -type f -atime +5 -delete
"$ESCALATION_TOOL" find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
if [ -d /var/tmp ]; then
"$ESCALATION_TOOL" find /var/tmp -type f -atime +5 -delete
fi
if [ -d /tmp ]; then
"$ESCALATION_TOOL" find /tmp -type f -atime +5 -delete
fi
if [ -d /var/log ]; then
"$ESCALATION_TOOL" find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
fi
"$ESCALATION_TOOL" journalctl --vacuum-time=3d
}
@ -45,8 +50,12 @@ clean_data() {
case $clean_response in
y|Y)
printf "%b\n" "${YELLOW}Cleaning up old cache files and emptying trash...${RC}"
find "$HOME/.cache/" -type f -atime +5 -delete
find "$HOME/.local/share/Trash" -mindepth 1 -delete
if [ -d "$HOME/.cache" ]; then
find "$HOME/.cache/" -type f -atime +5 -delete
fi
if [ -d "$HOME/.local/share/Trash" ]; then
find "$HOME/.local/share/Trash" -mindepth 1 -delete
fi
printf "%b\n" "${GREEN}Cache and trash cleanup completed.${RC}"
;;
*)

View File

@ -13,7 +13,7 @@ change_orientation() {
printf "%b\n" "${YELLOW}=========================================${RC}"
printf "%b\n" "${YELLOW} Change Monitor Orientation${RC}"
printf "%b\n" "${YELLOW}=========================================${RC}"
printf "%b" "${YELLOW}Choose a monitor to configure: ${RC}"
printf "%b\n" "${YELLOW}Choose a monitor to configure: ${RC}"
i=1
for monitor in $monitor_array; do
printf "%b\n" "$i. ${GREEN}$monitor${RC}"

View File

@ -13,7 +13,7 @@ disable_monitor() {
printf "%b\n" "${YELLOW}=========================================${RC}"
printf "%b\n" "${YELLOW} Disable Monitor${RC}"
printf "%b\n" "${YELLOW}=========================================${RC}"
printf "%b" "Choose a monitor to disable: "
printf "%b\n" "Choose a monitor to disable: "
i=1
for monitor in $monitor_array; do
printf "%b\n" "$i. ${GREEN}$monitor${RC}"

View File

@ -13,7 +13,7 @@ enable_monitor() {
printf "%b\n" "${YELLOW}=========================================${RC}"
printf "%b\n" "${YELLOW} Enable Monitor${RC}"
printf "%b\n" "${YELLOW}=========================================${RC}"
printf "%b" "${YELLOW}Choose a monitor to enable: ${RC}"
printf "%b\n" "${YELLOW}Choose a monitor to enable: ${RC}"
i=1
for monitor in $monitor_array; do

View File

@ -1,6 +1,6 @@
#!/bin/sh -e
. ./utility_functions.sh
. ../utility_functions.sh
. ../../common-script.sh

View File

@ -13,10 +13,10 @@ manage_arrangement() {
printf "%b\n" "${YELLOW}=========================================${RC}"
printf "%b\n" "${YELLOW} Manage Monitor Arrangement${RC}"
printf "%b\n" "${YELLOW}=========================================${RC}"
printf "%b" "${YELLOW}Choose the monitor to arrange: ${RC}"
printf "%b\n" "${YELLOW}Choose the monitor to arrange: ${RC}"
i=1
for monitor in $monitor_array; do
printf "%b\n" "$i. ${YELLOW}$monitor${RC}"
printf "%b\n" "$i. ${GREEN}$monitor${RC}"
i=$((i + 1))
done

View File

@ -16,7 +16,7 @@ set_primary_monitor() {
printf "%b\n" "${YELLOW}Choose a monitor to set as primary:${RC}"
i=1
for monitor in $monitor_array; do
printf "%b\n" "$i. ${YELLOW}$monitor${RC}"
printf "%b\n" "$i. ${GREEN}$monitor${RC}"
i=$((i + 1))
done

View File

@ -2,16 +2,16 @@
. ../common-script.sh
# Check if ~/.ssh/config exists, if not, create it
if [ ! -f ~/.ssh/config ]; then
touch ~/.ssh/config
chmod 600 ~/.ssh/config
# Check if $HOME/.ssh/config exists, if not, create it
if [ ! -f "$HOME/.ssh/config" ]; then
touch "$HOME/.ssh/config"
chmod 600 "$HOME/.ssh/config"
fi
# Function to show available hosts from ~/.ssh/config
# Function to show available hosts from $HOME/.ssh/config
show_available_hosts() {
printf "%b\n" "Available Systems:"
grep -E "^Host " ~/.ssh/config | awk '{print $2}'
grep -E "^Host " "$HOME/.ssh/config" | awk '{print $2}'
printf "%b\n" "-------------------"
}
@ -27,18 +27,18 @@ ask_for_host_details() {
printf "%b\n" "Host $host_alias"
printf "%b\n" " HostName $host"
printf "%b\n" " User $user"
printf "%b\n" " IdentityFile ~/.ssh/id_rsa"
printf "%b\n" " IdentityFile $HOME/.ssh/id_rsa"
printf "%b\n" " StrictHostKeyChecking no"
printf "%b\n" " UserKnownHostsFile=/dev/null"
} >> ~/.ssh/config
} >> "$HOME/.ssh/config"
printf "%b\n" "Host $host_alias added successfully."
}
# Function to generate SSH key if not exists
generate_ssh_key() {
if [ ! -f ~/.ssh/id_rsa ]; then
if [ ! -f "$HOME/.ssh/id_rsa" ]; then
printf "%b\n" "SSH key not found, generating one..."
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N "" -C "$(whoami)@$(hostname)"
ssh-keygen -t rsa -b 4096 -f "$HOME/.ssh/id_rsa -N" "" -C "$(whoami)@$(hostname)"
else
printf "%b\n" "SSH key already exists."
fi
@ -150,7 +150,7 @@ move_directory_to_remote() {
remove_system() {
printf "%b\n" "Enter the alias of the host to remove: "
read -r host_alias
sed -i "/^Host $host_alias/,+3d" ~/.ssh/config
sed -i "/^Host $host_alias/,+3d" "$HOME/.ssh/config"
printf "%b\n" "Removed $host_alias from SSH configuration."
}
@ -159,9 +159,9 @@ view_ssh_config() {
printf "%b\n" "Enter the alias of the host to view (or press Enter to view all): "
read -r host_alias
if [ -z "$host_alias" ]; then
cat ~/.ssh/config
cat "$HOME/.ssh/config"
else
grep -A 3 "^Host $host_alias" ~/.ssh/config
grep -A 3 "^Host $host_alias" "$HOME/.ssh/config"
fi
}
@ -249,4 +249,4 @@ done
checkEnv
checkEscalationTool
main
main

View File

@ -1,4 +1,6 @@
<!-- THIS FILE IS GENERATED AUTOMATICALLY. EDIT .github/CONTRIBUTING.md -->\n\n# Contributing Guidelines for Linutil
<!-- THIS FILE IS GENERATED AUTOMATICALLY. EDIT .github/CONTRIBUTING.md -->
# Contributing Guidelines for Linutil
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:
@ -16,6 +18,7 @@ cd linutil
```
## 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.
@ -60,6 +63,7 @@ cd linutil
## 11. Documentation
- **Update the documentation**: If your change affects the functionality, please update the relevant documentation files to reflect this.
- **Automatic generation**: If you decide to add functionality through a new shell script, make sure to fill out all fields in `tab_data.toml` and run `cargo xtask docgen`.
## 12. License

View File

@ -1,5 +1,5 @@
use crate::{state::ListEntry, theme::Theme};
use crossterm::event::{KeyCode, KeyEvent};
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers};
use ego_tree::NodeId;
use linutil_core::Tab;
use ratatui::{
@ -116,21 +116,27 @@ impl Filter {
pub fn handle_key(&mut self, event: &KeyEvent) -> SearchAction {
//Insert user input into the search bar
match event.code {
KeyCode::Char('c') if event.modifiers.contains(KeyModifiers::CONTROL) => {
return self.exit_search()
}
KeyCode::Char(c) => self.insert_char(c),
KeyCode::Backspace => self.remove_previous(),
KeyCode::Delete => self.remove_next(),
KeyCode::Left => return self.cursor_left(),
KeyCode::Right => return self.cursor_right(),
KeyCode::Esc => {
self.input_position = 0;
self.search_input.clear();
return SearchAction::Exit;
}
KeyCode::Enter => return SearchAction::Exit,
KeyCode::Esc => return self.exit_search(),
_ => return SearchAction::None,
};
SearchAction::Update
}
fn exit_search(&mut self) -> SearchAction {
self.input_position = 0;
self.search_input.clear();
SearchAction::Exit
}
fn cursor_left(&mut self) -> SearchAction {
self.input_position = self.input_position.saturating_sub(1);
SearchAction::None

View File

@ -119,7 +119,10 @@ impl AppState {
match self.focus {
Focus::Search => (
"Search bar",
Box::new([Shortcut::new("Finish search", ["Enter"])]),
Box::new([
Shortcut::new("Abort search", ["Esc", "CTRL-c"]),
Shortcut::new("Search", ["Enter"]),
]),
),
Focus::List => {