summaryrefslogtreecommitdiff
path: root/ar/.local/bin/dmenusmbadd
blob: b4b720bb4653f90bcff1b7dd44e15243f162c3ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/sh

samba_conf="/etc/samba/smb.conf"
base_path="/media /mnt /home/$USER"
os="$(grep '^ID=' /etc/os-release | cut -d= -f2)"

restartinit() {
  case "$(basename "$(readlink -f /sbin/init)" | sed 's/-init//g')" in
  *systemd*)
    sudo systemctl restart smb >/dev/null/ 2>&1 && sudo systemctl restart nmb >/dev/null/ 2>&1
    ;;
  *runit*)
    sudo sv restart smbd >/dev/null 2>&1 && sudo sv restart nmbd >/dev/null 2>&1
    ;;
  esac
}

[ -f "$samba_conf" ] || { sudo touch "$samba_conf" && smbpasswd -a "$USER"; }
if [ "$#" -eq 1 ]; then
  folder_path="$1"
  folder_name=$(basename "$folder_path" | tr '[:upper:]' '[:lower:]')
  if [ "$folder_path" = "/media/$USER" ]; then
    folder_name="media"
  fi
else
  folder_name=$(echo | dmenu -p "Enter the name of the folder to share:" | tr '[:upper:]' '[:lower:]') || exit 1
  [ -z "$folder_name" ] && notify-send "📁No folder name provided." && exit 1

  if [ "$folder_name" = "media" ]; then
    target_name="$USER"
  else
    target_name="$folder_name"
  fi

  if command -v fd >/dev/null 2>&1; then
    # Use fd if available (fastest)
    folder_path=$(for path in $base_path; do
      fd -t d -d 3 -i "^$target_name$" "$path" 2>/dev/null
    done | sed 's:/$::' | sort -r | dmenu -l 10 -p "Select the folder to share:")
  else
    # Fallback to parallel find with depth limit
    folder_path=$(printf "%s\n" $base_path | xargs -P 3 -I {} find {} -maxdepth 3 -type d -iname "$target_name" -print 2>/dev/null | sed 's:/$::' | sort -r | dmenu -l 10 -p "Select the folder to share:")
  fi
  [ -z "$folder_path" ] && notify-send "📁Folder not found." && exit 1
fi

[ -d "$folder_path" ] || exit 1

if grep -qF "[$USER-$os-$folder_name]" "$samba_conf"; then
  notify-send "📁The folder '$target_name' is already shared."
  exit 0
fi

echo | sudo tee -a "$samba_conf" >/dev/null
sudo tee -a "$samba_conf" >/dev/null <<EOF && restartinit || exit 1
[$USER-$os-$folder_name]
    path = $folder_path
    writable = yes
    browsable = yes
    guest ok = yes
    create mask = 0755
EOF

notify-send "📁'$USER-$os-$folder_name' starts sharing." "path: '$folder_path'"