summaryrefslogtreecommitdiff
path: root/ar/.local/bin/dmenusmbadd
blob: d1b76cdf8b47571065a3885627c20c401bea47d9 (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
#!/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

  folder_path=$(for path in $base_path; do
    find "$path" -type d -iname "$target_name" -print 2>/dev/null
  done | sort -r | dmenu -l 10 -p "Select the folder to share:")
  [ -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'"