Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 39 additions & 1 deletion PKGBUILD
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,47 @@ package() {
cp -r . "$pkgdir/opt/$pkgname/"

# Create launch script
install -Dm755 /dev/stdin "$pkgdir/usr/bin/pawlette" << EOF
install -Dm755 /dev/stdin "$pkgdir/usr/bin/pawlette" <<EOF
#!/bin/sh
cd /opt/pawlette-git
exec .venv/bin/python run.py "\$@"
EOF

# Create log directory with proper permissions
install -d -m755 "$pkgdir/var/log/pawlette"

# Install systemd tmpfiles config to set correct ownership
install -Dm644 /dev/stdin "$pkgdir/usr/lib/tmpfiles.d/pawlette.conf" <<EOF
d /var/log/pawlette 0755 - users -
EOF
}

post_install() {
echo "Setting up pawlette configuration..."

# Apply systemd tmpfiles configuration
systemd-tmpfiles --create /usr/lib/tmpfiles.d/pawlette.conf

# Create default config for all users if they don't have one
getent passwd | while IFS=: read -r name _ uid _ _ home _; do
# Skip system users (uid < 1000)
if [ "$uid" -ge 1000 ] && [ -d "$home" ]; then
config_dir="$home/.config/pawlette"
config_file="$config_dir/pawlette.json"

if [ ! -f "$config_file" ]; then
echo "Creating default config for user $name"
sudo -u "$name" mkdir -p "$config_dir"
sudo -u "$name" /usr/bin/pawlette generate-config 2>/dev/null || true
fi
fi
done

echo "Pawlette installation completed!"
echo "Configuration file: ~/.config/pawlette/pawlette.json"
echo "Logs: journalctl -t pawlette"
}

post_upgrade() {
post_install
}
42 changes: 40 additions & 2 deletions PKGBUILD.stable
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,47 @@ package() {
cp -r . "$pkgdir/opt/$pkgname/"

# Create launch script
install -Dm755 /dev/stdin "$pkgdir/usr/bin/pawlette" << EOF
install -Dm755 /dev/stdin "$pkgdir/usr/bin/pawlette" <<EOF
#!/bin/sh
cd /opt/pawlette
exec .venv/bin/python run.py "\$@"
EOF
}

# Create log directory with proper permissions
install -d -m755 "$pkgdir/var/log/pawlette"

# Install systemd tmpfiles config to set correct ownership
install -Dm644 /dev/stdin "$pkgdir/usr/lib/tmpfiles.d/pawlette.conf" <<EOF
d /var/log/pawlette 0755 - users -
EOF
}

post_install() {
echo "Setting up pawlette configuration..."

# Apply systemd tmpfiles configuration
systemd-tmpfiles --create /usr/lib/tmpfiles.d/pawlette.conf

# Create default config for all users if they don't have one
getent passwd | while IFS=: read -r name _ uid _ _ home _; do
# Skip system users (uid < 1000)
if [ "$uid" -ge 1000 ] && [ -d "$home" ]; then
config_dir="$home/.config/pawlette"
config_file="$config_dir/pawlette.json"

if [ ! -f "$config_file" ]; then
echo "Creating default config for user $name"
sudo -u "$name" mkdir -p "$config_dir"
sudo -u "$name" /usr/bin/pawlette generate-config 2>/dev/null || true
fi
fi
done

echo "Pawlette installation completed!"
echo "Configuration file: ~/.config/pawlette/pawlette.json"
echo "Logs: journalctl -t pawlette"
}

post_upgrade() {
post_install
}
89 changes: 80 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,12 @@

## 🌟 Особенности
- **Полная поддержка XDG**
- **Неинвазивная система патчей** с автоматическим откатом
- **Модульная архитектура** обработчиков конфигов
- **Сквозная проверка целостности** файлов
- **Транзакционная система** изменений
- **Поддержка пользовательских тем** через единый формат
- **Автоматические бэкапы** перед изменениями
- **Частичное изменение** конфигураций (patch)
- **Git-based управление версиями** пользовательских изменений
- **Умное игнорирование** временных файлов и кешей
- **Автоматическое сохранение** пользовательских настроек при переключении тем

## ⚡ Быстрый старт
Для установки на систему Arch Linux выполните команду:
Expand Down Expand Up @@ -62,12 +61,84 @@ theme-name/
Если суффикс `.prepaw`, то содержимое этого файла вставится перед основной частью оригинальной конфигурации.
Соответственно, если суффикс `.postpaw`, то содержимое вставится после основной части оригинальной конфигурации.

## 🧠 Селективный менеджер тем
Pawlette использует инновационную систему селективного управления темами на базе Git. Это означает:

- **Каждая тема = отдельная ветка** в internal git-репозитории
- **Пользовательские изменения** автоматически сохраняются как uncommitted changes
- **Переключение между темами** сохраняет ваши индивидуальные настройки
- **История изменений** доступна для каждой темы
- **Умное игнорирование** временных файлов и кешей

### Рабочий процесс:
1. **Применение темы** → создается ветка темы, применяются базовые конфигурации
2. **Ваши изменения** → отслеживаются как uncommitted changes в git
3. **Переключение темы** → автоматически сохраняет ваши изменения и переключается на другую ветку
4. **Возврат к теме** → восстанавливает вашу персонализированную версию

### Преимущества:
- 🔄 **Безопасность**: невозможно потерять пользовательские настройки
- 📚 **История**: полная история изменений для каждой темы
- 🎯 **Селективность**: изменяются только релевантные файлы
- 🧹 **Чистота**: автоматическое игнорирование "мусорных" файлов

## 🎛 Управление темами
| Команда | Описание |
| ----------------------- | ----------------------------------------|
| `generate-config` | Сгенерировать конфигурацию по умолчанию |
| `pawlette get-themes` | Список доступных тем |
| `pawlette theme <name>` | Применить указанную тему |
| Команда | Описание |
| -------------------------- | --------------------------------------------- |
| `pawlette generate-config` | Сгенерировать конфигурацию по умолчанию |
| `pawlette get-themes` | Список установленных тем |
| `pawlette get-themes-info` | JSON с информацией об установленных темах |
| `pawlette set-theme <name>`| Применить указанную тему |
| `pawlette apply <name>` | Применить указанную тему (алиас) |
| `pawlette current-theme` | Показать текущую активную тему |
| `pawlette restore` | Восстановить оригинальный вид |
| `pawlette reset-theme <name>` | Сбросить тему к чистому состоянию |

## 📦 Установка и обновление тем
| Команда | Описание |
| ------------------------------------ | ---------------------------------------- |
| `pawlette get-available-themes` | JSON со всеми доступными темами для загрузки |
| `pawlette install-theme <name>` | Установить тему из официального репозитория |
| `pawlette update-theme <name>` | Обновить тему из официального репозитория |
| `pawlette update-all-themes` | Обновить все темы |

## 📜 Управление версиями и историей
| Команда | Описание |
| -------------------------------------------- | ------------------------------------------- |
| `pawlette status` | Показать статус и незакоммиченные изменения |
| `pawlette history [theme] [--limit N]` | Показать историю коммитов для темы |
| `pawlette user-changes [theme]` | Показать информацию о пользовательских изменениях |
| `pawlette restore-commit <hash> [theme]` | Восстановить изменения из конкретного коммита |

### Примеры использования:
```bash
# Проверить текущий статус
pawlette status
# ➤ Current theme: dark-blue
# ⚠️ You have 3 uncommitted changes
# Modified files:
# - kitty/kitty.conf
# - waybar/config.json
# - alacritty/alacritty.yml

# Посмотреть историю текущей темы
pawlette history
# 📜 History for theme: dark-blue
# 👤 a1b2c3d Персональные настройки шрифтов [USER]
# 🔧 e4f5g6h Обновление конфигурации waybar
# 🔧 h7i8j9k Первоначальное применение темы

# Посмотреть, какие файлы изменены в теме
pawlette user-changes dark-blue
# 🔍 User changes for theme: dark-blue
# Found 2 modified files:
# 📝 kitty/kitty.conf
# 📝 waybar/style.css

# Восстановить определенный коммит
pawlette restore-commit a1b2c3d
# ✅ Successfully restored commit a1b2c3d for theme dark-blue
```

## 🔄 Управление бэкапами
| Команда | Описание |
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ dev = [
"pre-commit>=4.1.0",
"pytest>=8.3.4",
"ruff>=0.9.6",
"vulture>=2.14",
]

[tool.uv]
Expand Down
Loading
Loading