Repository navigation
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·138 lines (120 loc) · 4.27 KB
/
Copy pathinstall.sh
File metadata and controls
executable file
·138 lines (120 loc) · 4.27 KB
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/bash
# Installation script for WallPicker
set -e
INSTALL_DIR="$HOME/.local/share/wallpicker"
BIN_DIR="$HOME/.local/bin"
DESKTOP_DIR="$HOME/.local/share/applications"
ICON_DIR="$HOME/.local/share/icons/hicolor/scalable/apps"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
echo "Installing WallPicker..."
# Check Python 3
if ! command -v python3 &> /dev/null; then
echo "Error: python3 not found. Please install Python 3."
exit 1
fi
# Install system dependencies
echo "Installing system dependencies..."
if command -v apt-get &> /dev/null; then
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y python3-pip python3-venv python3-gi libgirepository1.0-dev \
gir1.2-gtk-4.0 gir1.2-adw-1
elif command -v dnf &> /dev/null; then
# Fedora
sudo dnf install -y python3-pip python3-gobject gtk4 libadwaita-devel
elif command -v pacman &> /dev/null; then
# Arch
sudo pacman -S --needed python python-pip python-gobject gtk4 \
libadwaita
else
echo "Warning: Could not detect package manager. Please install manually."
echo "Required: python3, python3-gobject, gtk4, libadwaita"
fi
# Create installation directories
echo "Creating installation directories..."
mkdir -p "$INSTALL_DIR"
# Install Python dependencies into a dedicated virtualenv (PEP 668-safe).
echo "Installing Python dependencies..."
if python3 -m venv "$INSTALL_DIR/venv" 2>/dev/null; then
"$INSTALL_DIR/venv/bin/pip" install --upgrade pip >/dev/null
"$INSTALL_DIR/venv/bin/pip" install -r "$SCRIPT_DIR/requirements.txt"
USE_VENV=1
else
echo "Warning: could not create a virtualenv (is 'python3-venv' installed?)."
# Fall back to --break-system-packages for PEP 668 (externally managed) systems.
if ! pip3 install --user -r "$SCRIPT_DIR/requirements.txt" 2>/dev/null; then
pip3 install --user --break-system-packages -r "$SCRIPT_DIR/requirements.txt"
fi
USE_VENV=0
fi
# Create remaining directories
mkdir -p "$BIN_DIR"
mkdir -p ~/.config/wallpicker
mkdir -p ~/.cache/wallpicker/thumbnails
# Copy source files
echo "Copying source files..."
cp -r "$SCRIPT_DIR/src" "$INSTALL_DIR/"
cp -r "$SCRIPT_DIR/data" "$INSTALL_DIR/" 2>/dev/null || true
cp "$SCRIPT_DIR/wallpicker" "$INSTALL_DIR/"
# Make entry point executable
chmod +x "$INSTALL_DIR/wallpicker"
# Create launcher in bin directory (uses the virtualenv when available)
echo "Creating executable launcher..."
if [ "$USE_VENV" = "1" ]; then
cat > "$BIN_DIR/wallpicker" << EOF
#!/bin/bash
exec "$INSTALL_DIR/venv/bin/python" "$INSTALL_DIR/wallpicker" "\$@"
EOF
chmod +x "$BIN_DIR/wallpicker"
else
ln -sf "$INSTALL_DIR/wallpicker" "$BIN_DIR/wallpicker"
fi
# Install icon
echo "Installing icon..."
mkdir -p "$ICON_DIR"
if [ -f "$SCRIPT_DIR/data/wallpaper-icon.svg" ]; then
cp "$SCRIPT_DIR/data/wallpaper-icon.svg" "$ICON_DIR/wallpicker.svg"
fi
# Install desktop entry
echo "Creating desktop entry..."
mkdir -p "$DESKTOP_DIR"
if [ -f "$SCRIPT_DIR/wallpicker.desktop" ]; then
# Use existing desktop file and update paths to the actual entries
sed -e "s|^Exec=/usr/bin/wallpicker|Exec=$BIN_DIR/wallpicker|" \
-e "s|^Icon=wallpicker\$|Icon=$ICON_DIR/wallpicker.svg|" \
"$SCRIPT_DIR/wallpicker.desktop" > "$DESKTOP_DIR/wallpicker.desktop"
else
# Fallback: create desktop entry from scratch
cat > "$DESKTOP_DIR/wallpicker.desktop" << EOF
[Desktop Entry]
Version=1.0
Type=Application
Name=WallPicker
Comment=Browse and set wallpapers from Wallhaven and local collection
Exec=$BIN_DIR/wallpicker
Icon=$ICON_DIR/wallpicker.svg
Terminal=false
StartupNotify=true
Categories=Utility;Graphics;
Keywords=wallpaper;background;desktop;wallhaven;
X-GNOME-UsesNotifications=true
EOF
fi
# Update desktop database
if command -v update-desktop-database &> /dev/null; then
update-desktop-database "$DESKTOP_DIR" 2>/dev/null || true
fi
# Update icon cache
if command -v gtk-update-icon-cache &> /dev/null; then
gtk-update-icon-cache "$HOME/.local/share/icons/hicolor" 2>/dev/null || true
fi
echo ""
echo "Installation complete!"
echo ""
echo "To run WallPicker:"
echo " - From terminal: wallpicker"
echo " - From menu: WallPicker"
echo ""
echo "Note: Make sure ~/.local/bin is in your PATH. Add this to your ~/.bashrc or ~/.zshrc:"
echo " export PATH=\"\$HOME/.local/bin:\$PATH\""
echo ""