almost done(i thing so)
This commit is contained in:
@@ -1,3 +1,215 @@
|
|||||||
# labwc-alpine
|
# Labwc-Alpine
|
||||||
|
|
||||||
адаптированный репозиторий s13bby/labwc для дистрибутива alpine linux
|
Адаптированная конфигурация оконного менеджера **Labwc** для дистрибутива **Alpine Linux** от [s13bby](https://zenithcode.duckdns.org/s13bby/labwc-alpine).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Установка Alpine Linux
|
||||||
|
|
||||||
|
### 1. Запуск установки
|
||||||
|
|
||||||
|
```bash
|
||||||
|
setup-alpine
|
||||||
|
```
|
||||||
|
|
||||||
|
Следуйте инструкциям установщика. После завершения перезагрузите систему:
|
||||||
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Первоначальная настройка
|
||||||
|
|
||||||
|
Войдите в систему как **root** и выполните:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apk update
|
||||||
|
apk upgrade
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Установка базовых пакетов
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apk add nano sudo git
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Примечание:** Вы можете использовать любой другой текстовый редактор вместо `nano`.
|
||||||
|
|
||||||
|
### 4. Создание пользователя
|
||||||
|
|
||||||
|
Если вы ещё не создали пользователя во время установки:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
adduser <имя_пользователя>
|
||||||
|
```
|
||||||
|
|
||||||
|
Добавьте пользователя в группу `wheel` (для доступа к `sudo`):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
addgroup <имя_пользователя> wheel
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Настройка sudo
|
||||||
|
|
||||||
|
Отредактируйте файл `/etc/sudoers`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano /etc/sudoers
|
||||||
|
```
|
||||||
|
|
||||||
|
Раскомментируйте строку:
|
||||||
|
|
||||||
|
```
|
||||||
|
%wheel ALL=(ALL) ALL
|
||||||
|
```
|
||||||
|
|
||||||
|
Сохраните и выйдите из редактора.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🖥️ Установка и настройка Labwc
|
||||||
|
|
||||||
|
### 1. Вход в систему от имени пользователя
|
||||||
|
|
||||||
|
```bash
|
||||||
|
su - <имя_пользователя>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Установка рабочего окружения
|
||||||
|
|
||||||
|
Запустите скрипт настройки рабочего стола:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo setup-desktop
|
||||||
|
```
|
||||||
|
|
||||||
|
Выберите **`xfce`** в качестве временного окружения.
|
||||||
|
|
||||||
|
Дождитесь завершения установки и перезагрузитесь:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Установка Labwc и терминала
|
||||||
|
|
||||||
|
Войдите в среду Xfce и установите Labwc:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apk add labwc alacritty
|
||||||
|
```
|
||||||
|
|
||||||
|
Выйдите из сессии Xfce и войдите в Labwc.
|
||||||
|
|
||||||
|
> **Готово!** Теперь у вас есть базовый Labwc.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ Установка конфигурации
|
||||||
|
|
||||||
|
Клонируйте репозиторий с готовой конфигурацией:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://zenithcode.duckdns.org/s13bby/labwc-alpine.git
|
||||||
|
```
|
||||||
|
|
||||||
|
Перейдите в директорию проекта:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd labwc-alpine/
|
||||||
|
```
|
||||||
|
|
||||||
|
Сделайте установочный скрипт исполняемым:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Запустите установку:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sh ./install.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Структура проекта
|
||||||
|
|
||||||
|
```
|
||||||
|
labwc-alpine/
|
||||||
|
├── backgrounds/ # Фоновые изображения
|
||||||
|
│ ├── alpine_bg_dark_sign.jpg
|
||||||
|
│ ├── alpine_bg_light_sign.jpg
|
||||||
|
│ ├── fuji_dark.jpg
|
||||||
|
│ └── fuji_light.jpg
|
||||||
|
│
|
||||||
|
├── configs/ # Конфигурационные файлы
|
||||||
|
│ ├── hypr/ # Hyprland (если используется)
|
||||||
|
│ │ ├── hypridle.conf
|
||||||
|
│ │ ├── hyprland.lua
|
||||||
|
│ │ └── hyprlock.conf
|
||||||
|
│ │
|
||||||
|
│ ├── labwc/ # Основная конфигурация Labwc
|
||||||
|
│ │ ├── autostart
|
||||||
|
│ │ ├── environment
|
||||||
|
│ │ ├── menu.xml
|
||||||
|
│ │ ├── rc.xml
|
||||||
|
│ │ ├── shutdown
|
||||||
|
│ │ ├── themerc-override
|
||||||
|
│ │ └── update_theme.sh
|
||||||
|
│ │
|
||||||
|
│ ├── waybar/ # Панель Waybar
|
||||||
|
│ │ ├── config.jsonc
|
||||||
|
│ │ ├── style.css
|
||||||
|
│ │ └── v2raya-toggle.sh
|
||||||
|
│ │
|
||||||
|
│ ├── wofi/ # Лаунчер Wofi
|
||||||
|
│ │ ├── cliphist-img.sh
|
||||||
|
│ │ └── style.css
|
||||||
|
│ │
|
||||||
|
│ ├── qt6ct/ # Настройки Qt6
|
||||||
|
│ │ └── qt6ct.conf
|
||||||
|
│ │
|
||||||
|
│ └── alacritty/ # Терминал Alacritty
|
||||||
|
│ └── alacritty.toml
|
||||||
|
│
|
||||||
|
├── palettes/ # Цветовые палитры
|
||||||
|
│ ├── alpine/
|
||||||
|
│ │ ├── alpine_palette_dark
|
||||||
|
│ │ ├── alpine_palette_light
|
||||||
|
│ │ ├── alpine_palette_pastel_dark
|
||||||
|
│ │ └── alpine_palette_pastel_light
|
||||||
|
│ │
|
||||||
|
│ └── fuji/
|
||||||
|
│ ├── fuji_palette_dark
|
||||||
|
│ ├── fuji_palette_light
|
||||||
|
│ ├── fuji_palette_pastel_dark
|
||||||
|
│ └── fuji_palette_pastel_light
|
||||||
|
│
|
||||||
|
├── fonts/ # Шрифты
|
||||||
|
│ └── Widock TRIAL Bold.otf
|
||||||
|
│
|
||||||
|
├── install.sh # Главный установочный скрипт
|
||||||
|
├── LICENSE # Лицензия
|
||||||
|
└── README.md # Этот файл
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🗑️ Удаление Xfce
|
||||||
|
|
||||||
|
После успешной настройки Labwc вы можете удалить Xfce:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
apk del xfce4 xfce4-scenarios xfce4-terminal orage thunar
|
||||||
|
apk del .xfce4-rundeps 2>/dev/null || true
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 Лицензия
|
||||||
|
|
||||||
|
Этот проект распространяется под лицензией **MIT**. Подробнее см. в файле [LICENSE](LICENSE).
|
||||||
|
|
||||||
|
---
|
||||||
|
|||||||
@@ -1,548 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# =============================================================================
|
|
||||||
# Labwc Installer for Alpine Linux (KVM/QEMU)
|
|
||||||
# =============================================================================
|
|
||||||
# Запускать от root: sh install_labwc.sh [username]
|
|
||||||
# Если username не указан — используется текущий не-root пользователь
|
|
||||||
# =============================================================================
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# --- Цвета ---
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
NC='\033[0m' # No Color
|
|
||||||
|
|
||||||
info() { printf "${BLUE}[INFO]${NC} %s\n" "$1"; }
|
|
||||||
ok() { printf "${GREEN}[OK]${NC} %s\n" "$1"; }
|
|
||||||
warn() { printf "${YELLOW}[WARN]${NC} %s\n" "$1"; }
|
|
||||||
error() { printf "${RED}[ERROR]${NC} %s\n" "$1"; }
|
|
||||||
|
|
||||||
# --- Проверка root ---
|
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
|
||||||
error "Этот скрипт нужно запускать от root (su или sudo)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# --- Определение пользователя ---
|
|
||||||
if [ -n "$1" ]; then
|
|
||||||
TARGET_USER="$1"
|
|
||||||
else
|
|
||||||
# Ищем первого не-root пользователя с домашней директорией
|
|
||||||
TARGET_USER=$(awk -F: '$3 >= 1000 && $3 < 65534 {print $1; exit}' /etc/passwd)
|
|
||||||
if [ -z "$TARGET_USER" ]; then
|
|
||||||
error "Не найден обычный пользователь. Создайте пользователя: adduser username"
|
|
||||||
error "Или запустите: sh $0 username"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! id "$TARGET_USER" >/dev/null 2>&1; then
|
|
||||||
error "Пользователь '$TARGET_USER' не существует"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
USER_UID=$(id -u "$TARGET_USER")
|
|
||||||
USER_GID=$(id -g "$TARGET_USER")
|
|
||||||
USER_HOME=$(getent passwd "$TARGET_USER" | cut -d: -f6)
|
|
||||||
|
|
||||||
info "Целевой пользователь: $TARGET_USER (uid=$USER_UID, home=$USER_HOME)"
|
|
||||||
|
|
||||||
# --- Добавление community репозитория ---
|
|
||||||
info "Настройка репозиториев..."
|
|
||||||
ALPINE_VERSION=$(cat /etc/alpine-release | cut -d'.' -f1,2)
|
|
||||||
COMMUNITY_URL="https://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community"
|
|
||||||
|
|
||||||
if ! grep -q "$COMMUNITY_URL" /etc/apk/repositories 2>/dev/null; then
|
|
||||||
echo "$COMMUNITY_URL" >> /etc/apk/repositories
|
|
||||||
ok "Добавлен community репозиторий"
|
|
||||||
else
|
|
||||||
ok "Community репозиторий уже настроен"
|
|
||||||
fi
|
|
||||||
|
|
||||||
apk update
|
|
||||||
|
|
||||||
# --- Установка пакетов ---
|
|
||||||
info "Установка labwc и зависимостей..."
|
|
||||||
|
|
||||||
PACKAGES="
|
|
||||||
labwc
|
|
||||||
wlroots
|
|
||||||
seatd
|
|
||||||
seatd-launch
|
|
||||||
elogind
|
|
||||||
polkit-elogind
|
|
||||||
wayland-utils
|
|
||||||
wayland-protocols
|
|
||||||
mesa-dri-gallium
|
|
||||||
mesa-va-gallium
|
|
||||||
libseat
|
|
||||||
xf86-video-qxl
|
|
||||||
xf86-video-virtio
|
|
||||||
xwayland
|
|
||||||
foot
|
|
||||||
waybar
|
|
||||||
wofi
|
|
||||||
swaybg
|
|
||||||
swayidle
|
|
||||||
swaylock
|
|
||||||
mako
|
|
||||||
grim
|
|
||||||
slurp
|
|
||||||
wl-clipboard
|
|
||||||
xdg-utils
|
|
||||||
font-dejavu
|
|
||||||
font-noto
|
|
||||||
adwaita-icon-theme
|
|
||||||
papirus-icon-theme
|
|
||||||
pipewire
|
|
||||||
wireplumber
|
|
||||||
pipewire-pulse
|
|
||||||
pavucontrol
|
|
||||||
"
|
|
||||||
|
|
||||||
apk add $PACKAGES
|
|
||||||
ok "Пакеты установлены"
|
|
||||||
|
|
||||||
# --- Настройка служб ---
|
|
||||||
info "Настройка служб..."
|
|
||||||
|
|
||||||
rc-update add seatd default 2>/dev/null || true
|
|
||||||
rc-update add elogind default 2>/dev/null || true
|
|
||||||
rc-update add pipewire default 2>/dev/null || true
|
|
||||||
|
|
||||||
rc-service seatd start 2>/dev/null || true
|
|
||||||
rc-service elogind start 2>/dev/null || true
|
|
||||||
|
|
||||||
ok "Службы настроены"
|
|
||||||
|
|
||||||
# --- Права пользователя ---
|
|
||||||
info "Настройка прав пользователя..."
|
|
||||||
|
|
||||||
# Добавляем пользователя в необходимые группы
|
|
||||||
for group in seat video audio input; do
|
|
||||||
if getent group "$group" >/dev/null 2>&1; then
|
|
||||||
adduser "$TARGET_USER" "$group" 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
ok "Пользователь $TARGET_USER добавлен в группы"
|
|
||||||
|
|
||||||
# --- Создание XDG_RUNTIME_DIR ---
|
|
||||||
info "Настройка XDG_RUNTIME_DIR..."
|
|
||||||
|
|
||||||
RUNDIR="/run/user/$USER_UID"
|
|
||||||
mkdir -p "$RUNDIR"
|
|
||||||
chown "$TARGET_USER:$TARGET_USER" "$RUNDIR"
|
|
||||||
chmod 700 "$RUNDIR"
|
|
||||||
|
|
||||||
# Добавляем в /etc/profile.d для persistency
|
|
||||||
mkdir -p /etc/profile.d
|
|
||||||
cat > /etc/profile.d/xdg-runtime.sh << 'EOF'
|
|
||||||
if [ -z "$XDG_RUNTIME_DIR" ]; then
|
|
||||||
export XDG_RUNTIME_DIR=/run/user/$(id -u)
|
|
||||||
fi
|
|
||||||
if [ ! -d "$XDG_RUNTIME_DIR" ]; then
|
|
||||||
mkdir -p "$XDG_RUNTIME_DIR"
|
|
||||||
chmod 700 "$XDG_RUNTIME_DIR"
|
|
||||||
fi
|
|
||||||
EOF
|
|
||||||
chmod 644 /etc/profile.d/xdg-runtime.sh
|
|
||||||
ok "XDG_RUNTIME_DIR настроен"
|
|
||||||
|
|
||||||
# --- Конфигурация labwc ---
|
|
||||||
info "Создание конфигурации labwc..."
|
|
||||||
|
|
||||||
LABWC_DIR="$USER_HOME/.config/labwc"
|
|
||||||
mkdir -p "$LABWC_DIR"
|
|
||||||
|
|
||||||
# rc.xml — только если не существует
|
|
||||||
if [ ! -f "$LABWC_DIR/rc.xml" ]; then
|
|
||||||
cat > "$LABWC_DIR/rc.xml" << 'EOF'
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<labwc_config>
|
|
||||||
<core>
|
|
||||||
<gap>8</gap>
|
|
||||||
<adaptiveSync>no</adaptiveSync>
|
|
||||||
</core>
|
|
||||||
|
|
||||||
<theme>
|
|
||||||
<name>Clearlooks</name>
|
|
||||||
<cornerRadius>8</cornerRadius>
|
|
||||||
<font place="ActiveWindow">
|
|
||||||
<name>sans</name>
|
|
||||||
<size>10</size>
|
|
||||||
</font>
|
|
||||||
<font place="MenuItem">
|
|
||||||
<name>sans</name>
|
|
||||||
<size>10</size>
|
|
||||||
</font>
|
|
||||||
<font place="OnScreenDisplay">
|
|
||||||
<name>sans</name>
|
|
||||||
<size>10</size>
|
|
||||||
</font>
|
|
||||||
</theme>
|
|
||||||
|
|
||||||
<keyboard>
|
|
||||||
<default />
|
|
||||||
<keybind key="W-Return">
|
|
||||||
<action name="Execute" command="foot" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-d">
|
|
||||||
<action name="Execute" command="wofi --show drun" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-Shift-d">
|
|
||||||
<action name="Execute" command="wofi --show run" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-l">
|
|
||||||
<action name="Execute" command="swaylock -f -c 000000" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-q">
|
|
||||||
<action name="Close" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-Shift-e">
|
|
||||||
<action name="Exit" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-f">
|
|
||||||
<action name="ToggleMaximize" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-Left">
|
|
||||||
<action name="SnapToEdge" direction="left" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-Right">
|
|
||||||
<action name="SnapToEdge" direction="right" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-1">
|
|
||||||
<action name="GoToDesktop" to="1" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-2">
|
|
||||||
<action name="GoToDesktop" to="2" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-3">
|
|
||||||
<action name="GoToDesktop" to="3" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="W-4">
|
|
||||||
<action name="GoToDesktop" to="4" />
|
|
||||||
</keybind>
|
|
||||||
<keybind key="Print">
|
|
||||||
<action name="Execute" command="grim -g $(slurp) $HOME/Pictures/screenshot-$(date +%Y%m%d-%H%M%S).png" />
|
|
||||||
</keybind>
|
|
||||||
</keyboard>
|
|
||||||
|
|
||||||
<mouse>
|
|
||||||
<default />
|
|
||||||
<context name="Frame">
|
|
||||||
<mousebind button="W-Left" action="Press">
|
|
||||||
<action name="Focus" />
|
|
||||||
<action name="Raise" />
|
|
||||||
</mousebind>
|
|
||||||
<mousebind button="W-Left" action="Drag">
|
|
||||||
<action name="Move" />
|
|
||||||
</mousebind>
|
|
||||||
<mousebind button="W-Right" action="Drag">
|
|
||||||
<action name="Resize" />
|
|
||||||
</mousebind>
|
|
||||||
</context>
|
|
||||||
</mouse>
|
|
||||||
</labwc_config>
|
|
||||||
EOF
|
|
||||||
ok "Создан $LABWC_DIR/rc.xml"
|
|
||||||
else
|
|
||||||
warn "$LABWC_DIR/rc.xml уже существует, пропускаю"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# autostart — только если не существует
|
|
||||||
if [ ! -f "$LABWC_DIR/autostart" ]; then
|
|
||||||
cat > "$LABWC_DIR/autostart" << 'EOF'
|
|
||||||
#!/bin/sh
|
|
||||||
# Автозапуск labwc
|
|
||||||
|
|
||||||
# Фон
|
|
||||||
swaybg -c '#2e3440' &
|
|
||||||
|
|
||||||
# Панель
|
|
||||||
waybar &
|
|
||||||
|
|
||||||
# Уведомления
|
|
||||||
mako &
|
|
||||||
|
|
||||||
# Буфер обмена
|
|
||||||
wl-paste --watch cliphist store &
|
|
||||||
|
|
||||||
# Экранный блокировщик при простое
|
|
||||||
swayidle -w \
|
|
||||||
timeout 300 'swaylock -f -c 000000' \
|
|
||||||
timeout 600 'wlopm --off \*' \
|
|
||||||
resume 'wlopm --on \*' \
|
|
||||||
before-sleep 'swaylock -f -c 000000' &
|
|
||||||
EOF
|
|
||||||
chmod +x "$LABWC_DIR/autostart"
|
|
||||||
ok "Создан $LABWC_DIR/autostart"
|
|
||||||
else
|
|
||||||
warn "$LABWC_DIR/autostart уже существует, пропускаю"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# menu.xml — контекстное меню
|
|
||||||
if [ ! -f "$LABWC_DIR/menu.xml" ]; then
|
|
||||||
cat > "$LABWC_DIR/menu.xml" << 'EOF'
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<openbox_menu>
|
|
||||||
<menu id="root-menu" label="Labwc">
|
|
||||||
<item label="Terminal">
|
|
||||||
<action name="Execute" command="foot" />
|
|
||||||
</item>
|
|
||||||
<item label="Browser">
|
|
||||||
<action name="Execute" command="firefox" />
|
|
||||||
</item>
|
|
||||||
<separator />
|
|
||||||
<item label="Reconfigure">
|
|
||||||
<action name="Reconfigure" />
|
|
||||||
</item>
|
|
||||||
<item label="Exit">
|
|
||||||
<action name="Exit" />
|
|
||||||
</item>
|
|
||||||
</menu>
|
|
||||||
</openbox_menu>
|
|
||||||
EOF
|
|
||||||
ok "Создан $LABWC_DIR/menu.xml"
|
|
||||||
else
|
|
||||||
warn "$LABWC_DIR/menu.xml уже существует, пропускаю"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# --- Настройка waybar ---
|
|
||||||
info "Настройка waybar..."
|
|
||||||
|
|
||||||
WAYBAR_DIR="$USER_HOME/.config/waybar"
|
|
||||||
mkdir -p "$WAYBAR_DIR"
|
|
||||||
|
|
||||||
if [ ! -f "$WAYBAR_DIR/config" ]; then
|
|
||||||
cat > "$WAYBAR_DIR/config" << 'EOF'
|
|
||||||
{
|
|
||||||
"layer": "top",
|
|
||||||
"position": "top",
|
|
||||||
"height": 30,
|
|
||||||
"spacing": 4,
|
|
||||||
"modules-left": ["sway/workspaces", "sway/window"],
|
|
||||||
"modules-center": ["clock"],
|
|
||||||
"modules-right": ["pulseaudio", "network", "cpu", "memory", "tray"],
|
|
||||||
|
|
||||||
"clock": {
|
|
||||||
"format": "{:%Y-%m-%d %H:%M}",
|
|
||||||
"tooltip-format": "<big>{:%Y %B}</big>\n<tt>{calendar}</tt>",
|
|
||||||
"format-alt": "{:%H:%M:%S}"
|
|
||||||
},
|
|
||||||
|
|
||||||
"cpu": {
|
|
||||||
"format": "CPU {usage}%",
|
|
||||||
"tooltip": false
|
|
||||||
},
|
|
||||||
|
|
||||||
"memory": {
|
|
||||||
"format": "RAM {}%"
|
|
||||||
},
|
|
||||||
|
|
||||||
"network": {
|
|
||||||
"format-wifi": "WiFi {signalStrength}%",
|
|
||||||
"format-ethernet": "Eth {ipaddr}/{cidr}",
|
|
||||||
"tooltip-format": "{ifname} via {gwaddr}",
|
|
||||||
"format-linked": "{ifname} (No IP)",
|
|
||||||
"format-disconnected": "Disconnected",
|
|
||||||
"format-alt": "{ifname}: {ipaddr}/{cidr}"
|
|
||||||
},
|
|
||||||
|
|
||||||
"pulseaudio": {
|
|
||||||
"format": "Vol {volume}%",
|
|
||||||
"format-muted": "Muted",
|
|
||||||
"on-click": "pavucontrol"
|
|
||||||
},
|
|
||||||
|
|
||||||
"tray": {
|
|
||||||
"spacing": 10
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
ok "Создан $WAYBAR_DIR/config"
|
|
||||||
else
|
|
||||||
warn "$WAYBAR_DIR/config уже существует, пропускаю"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$WAYBAR_DIR/style.css" ]; then
|
|
||||||
cat > "$WAYBAR_DIR/style.css" << 'EOF'
|
|
||||||
* {
|
|
||||||
border: none;
|
|
||||||
border-radius: 0;
|
|
||||||
font-family: "DejaVu Sans", sans-serif;
|
|
||||||
font-size: 13px;
|
|
||||||
min-height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
window#waybar {
|
|
||||||
background-color: #2e3440;
|
|
||||||
color: #d8dee9;
|
|
||||||
transition-property: background-color;
|
|
||||||
transition-duration: .5s;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button {
|
|
||||||
padding: 0 10px;
|
|
||||||
color: #d8dee9;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button.focused {
|
|
||||||
background-color: #4c566a;
|
|
||||||
color: #eceff4;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button.urgent {
|
|
||||||
background-color: #bf616a;
|
|
||||||
}
|
|
||||||
|
|
||||||
#clock,
|
|
||||||
#cpu,
|
|
||||||
#memory,
|
|
||||||
#network,
|
|
||||||
#pulseaudio,
|
|
||||||
#tray {
|
|
||||||
padding: 0 10px;
|
|
||||||
margin: 0 4px;
|
|
||||||
color: #d8dee9;
|
|
||||||
}
|
|
||||||
|
|
||||||
#clock {
|
|
||||||
background-color: #434c5e;
|
|
||||||
}
|
|
||||||
|
|
||||||
#tray {
|
|
||||||
background-color: #3b4252;
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
ok "Создан $WAYBAR_DIR/style.css"
|
|
||||||
else
|
|
||||||
warn "$WAYBAR_DIR/style.css уже существует, пропускаю"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# --- Настройка foot (терминал) ---
|
|
||||||
info "Настройка foot..."
|
|
||||||
|
|
||||||
FOOT_DIR="$USER_HOME/.config/foot"
|
|
||||||
mkdir -p "$FOOT_DIR"
|
|
||||||
|
|
||||||
if [ ! -f "$FOOT_DIR/foot.ini" ]; then
|
|
||||||
cat > "$FOOT_DIR/foot.ini" << 'EOF'
|
|
||||||
[main]
|
|
||||||
font=monospace:size=10
|
|
||||||
pad=8x8
|
|
||||||
|
|
||||||
[scrollback]
|
|
||||||
lines=10000
|
|
||||||
|
|
||||||
[cursor]
|
|
||||||
style=block
|
|
||||||
blink=no
|
|
||||||
|
|
||||||
[colors]
|
|
||||||
alpha=0.95
|
|
||||||
background=2e3440
|
|
||||||
foreground=d8dee9
|
|
||||||
regular0=3b4252
|
|
||||||
regular1=bf616a
|
|
||||||
regular2=a3be8c
|
|
||||||
regular3=ebcb8b
|
|
||||||
regular4=81a1c1
|
|
||||||
regular5=b48ead
|
|
||||||
regular6=88c0d0
|
|
||||||
regular7=e5e9f0
|
|
||||||
EOF
|
|
||||||
ok "Создан $FOOT_DIR/foot.ini"
|
|
||||||
else
|
|
||||||
warn "$FOOT_DIR/foot.ini уже существует, пропускаю"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# --- Настройка mako (уведомления) ---
|
|
||||||
info "Настройка mako..."
|
|
||||||
|
|
||||||
MAKO_DIR="$USER_HOME/.config/mako"
|
|
||||||
mkdir -p "$MAKO_DIR"
|
|
||||||
|
|
||||||
if [ ! -f "$MAKO_DIR/config" ]; then
|
|
||||||
cat > "$MAKO_DIR/config" << 'EOF'
|
|
||||||
font=DejaVu Sans 10
|
|
||||||
background-color=#2e3440
|
|
||||||
text-color=#d8dee9
|
|
||||||
width=300
|
|
||||||
height=100
|
|
||||||
margin=10
|
|
||||||
padding=10
|
|
||||||
border-size=2
|
|
||||||
border-color=#4c566a
|
|
||||||
border-radius=8
|
|
||||||
progress-color=over #88c0d0
|
|
||||||
icons=1
|
|
||||||
max-icon-size=48
|
|
||||||
layer=overlay
|
|
||||||
anchor=top-right
|
|
||||||
default-timeout=5000
|
|
||||||
EOF
|
|
||||||
ok "Создан $MAKO_DIR/config"
|
|
||||||
else
|
|
||||||
warn "$MAKO_DIR/config уже существует, пропускаю"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# --- Настройка автозапуска labwc при входе ---
|
|
||||||
info "Настройка автозапуска labwc..."
|
|
||||||
|
|
||||||
BASH_PROFILE="$USER_HOME/.bash_profile"
|
|
||||||
AUTOSTART_MARKER="# === labwc autostart ==="
|
|
||||||
|
|
||||||
if [ -f "$BASH_PROFILE" ] && grep -q "$AUTOSTART_MARKER" "$BASH_PROFILE" 2>/dev/null; then
|
|
||||||
warn "Автозапуск labwc уже настроен в .bash_profile"
|
|
||||||
else
|
|
||||||
cat >> "$BASH_PROFILE" << EOF
|
|
||||||
|
|
||||||
$AUTOSTART_MARKER
|
|
||||||
if [ -z "\$WAYLAND_DISPLAY" ] && [ "\$(tty)" = "/dev/tty1" ]; then
|
|
||||||
exec labwc
|
|
||||||
fi
|
|
||||||
# === end labwc autostart ===
|
|
||||||
EOF
|
|
||||||
ok "Автозапуск labwc добавлен в .bash_profile"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# --- Права на конфиги ---
|
|
||||||
chown -R "$TARGET_USER:$TARGET_USER" "$USER_HOME/.config"
|
|
||||||
|
|
||||||
# --- Создание директорий ---
|
|
||||||
mkdir -p "$USER_HOME/Pictures" "$USER_HOME/Downloads"
|
|
||||||
chown "$TARGET_USER:$TARGET_USER" "$USER_HOME/Pictures" "$USER_HOME/Downloads"
|
|
||||||
|
|
||||||
# --- Финал ---
|
|
||||||
echo ""
|
|
||||||
echo "============================================================"
|
|
||||||
echo " Labwc установлен и настроен!"
|
|
||||||
echo "============================================================"
|
|
||||||
echo ""
|
|
||||||
echo "Пользователь: $TARGET_USER"
|
|
||||||
echo ""
|
|
||||||
echo "Горячие клавиши:"
|
|
||||||
echo " Win+Enter — Терминал (foot)"
|
|
||||||
echo " Win+D — Меню приложений (wofi)"
|
|
||||||
echo " Win+Shift+D — Запуск команды (wofi --show run)"
|
|
||||||
echo " Win+L — Блокировка экрана"
|
|
||||||
echo " Win+Q — Закрыть окно"
|
|
||||||
echo " Win+F — Развернуть окно"
|
|
||||||
echo " Win+1..4 — Переключение рабочих столов"
|
|
||||||
echo " Print — Скриншот области"
|
|
||||||
echo " Win+Shift+E — Выход из labwc"
|
|
||||||
echo ""
|
|
||||||
echo "Действия после установки:"
|
|
||||||
echo " 1. Перезагрузитесь: reboot"
|
|
||||||
echo " 2. Войдите как $TARGET_USER на tty1"
|
|
||||||
echo " 3. Labwc запустится автоматически"
|
|
||||||
echo ""
|
|
||||||
echo "Если labwc не запустился автоматически:"
|
|
||||||
echo " login: $TARGET_USER"
|
|
||||||
echo " $ labwc"
|
|
||||||
echo ""
|
|
||||||
ok "Установка завершена!"
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.8 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.8 MiB |
@@ -0,0 +1,17 @@
|
|||||||
|
general {
|
||||||
|
# Команда, которая выполняется при вызове блокировки через систему/dbus
|
||||||
|
lock_cmd = hyprlock
|
||||||
|
}
|
||||||
|
|
||||||
|
# ПРАВИЛО 1: Блокировка экрана через 5 минут бездействия
|
||||||
|
listener {
|
||||||
|
timeout = 300 # 5 минут (300 секунд)
|
||||||
|
on-timeout = hyprlock # Только блокируем экран
|
||||||
|
}
|
||||||
|
|
||||||
|
# ПРАВИЛО 2: Выключение мониторов через 5.5 минут (через 30 секунд после блокировки)
|
||||||
|
listener {
|
||||||
|
timeout = 330 # 5 минут 30 секунд
|
||||||
|
on-timeout = wlopm --off \* # Гасим все мониторы
|
||||||
|
on-resume = wlopm --on \* # Включаем при активности
|
||||||
|
}
|
||||||
@@ -0,0 +1,364 @@
|
|||||||
|
|
||||||
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||||
|
-- AUTOGENERATED HYPRLAND CONFIG. --
|
||||||
|
-- EDIT THIS CONFIG ACCORDING TO THE WIKI INSTRUCTIONS. --
|
||||||
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||||
|
|
||||||
|
hl.config({ autogenerated = true }) -- remove this line to remove the warning
|
||||||
|
|
||||||
|
-- This is an example Hyprland Lua config file.
|
||||||
|
-- Refer to the wiki for more information.
|
||||||
|
-- https://wiki.hypr.land/Configuring/Start/
|
||||||
|
|
||||||
|
-- Please note not all available settings / options are set here.
|
||||||
|
-- For a full list, see the wiki
|
||||||
|
|
||||||
|
-- You can (and should!!) split this configuration into multiple files
|
||||||
|
-- Create your files separately and then require them like this:
|
||||||
|
-- require("myColors")
|
||||||
|
|
||||||
|
|
||||||
|
------------------
|
||||||
|
---- MONITORS ----
|
||||||
|
------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
|
||||||
|
hl.monitor({
|
||||||
|
output = "",
|
||||||
|
mode = "preferred",
|
||||||
|
position = "auto",
|
||||||
|
scale = "auto",
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
---- MY PROGRAMS ----
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
-- Set programs that you use
|
||||||
|
local terminal = "kitty"
|
||||||
|
local fileManager = "dolphin"
|
||||||
|
local menu = "hyprlauncher"
|
||||||
|
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
---- AUTOSTART ----
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Autostart/
|
||||||
|
|
||||||
|
-- Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||||
|
-- Or execute your favorite apps at launch like this:
|
||||||
|
--
|
||||||
|
-- hl.on("hyprland.start", function ()
|
||||||
|
-- hl.exec_cmd(terminal)
|
||||||
|
-- hl.exec_cmd("nm-applet")
|
||||||
|
-- hl.exec_cmd("waybar & hyprpaper & firefox")
|
||||||
|
-- end)
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
---- ENVIRONMENT VARIABLES ----
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/
|
||||||
|
|
||||||
|
hl.env("XCURSOR_SIZE", "24")
|
||||||
|
hl.env("HYPRCURSOR_SIZE", "24")
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
----- PERMISSIONS -----
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Permissions/
|
||||||
|
-- Please note permission changes here require a Hyprland restart and are not applied on-the-fly
|
||||||
|
-- for security reasons
|
||||||
|
|
||||||
|
-- hl.config({
|
||||||
|
-- ecosystem = {
|
||||||
|
-- enforce_permissions = true,
|
||||||
|
-- },
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow")
|
||||||
|
-- hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow")
|
||||||
|
-- hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow")
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
---- LOOK AND FEEL ----
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/
|
||||||
|
hl.config({
|
||||||
|
general = {
|
||||||
|
gaps_in = 5,
|
||||||
|
gaps_out = 20,
|
||||||
|
|
||||||
|
border_size = 2,
|
||||||
|
|
||||||
|
col = {
|
||||||
|
active_border = { colors = {"rgba(33ccffee)", "rgba(00ff99ee)"}, angle = 45 },
|
||||||
|
inactive_border = "rgba(595959aa)",
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Set to true to enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = false,
|
||||||
|
|
||||||
|
-- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false,
|
||||||
|
|
||||||
|
layout = "dwindle",
|
||||||
|
},
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
rounding = 10,
|
||||||
|
rounding_power = 2,
|
||||||
|
|
||||||
|
-- Change transparency of focused and unfocused windows
|
||||||
|
active_opacity = 1.0,
|
||||||
|
inactive_opacity = 1.0,
|
||||||
|
|
||||||
|
shadow = {
|
||||||
|
enabled = true,
|
||||||
|
range = 4,
|
||||||
|
render_power = 3,
|
||||||
|
color = 0xee1a1a1a,
|
||||||
|
},
|
||||||
|
|
||||||
|
blur = {
|
||||||
|
enabled = true,
|
||||||
|
size = 3,
|
||||||
|
passes = 1,
|
||||||
|
vibrancy = 0.1696,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
animations = {
|
||||||
|
enabled = true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/
|
||||||
|
hl.curve("easeOutQuint", { type = "bezier", points = { {0.23, 1}, {0.32, 1} } })
|
||||||
|
hl.curve("easeInOutCubic", { type = "bezier", points = { {0.65, 0.05}, {0.36, 1} } })
|
||||||
|
hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } })
|
||||||
|
hl.curve("almostLinear", { type = "bezier", points = { {0.5, 0.5}, {0.75, 1} } })
|
||||||
|
hl.curve("quick", { type = "bezier", points = { {0.15, 0}, {0.1, 1} } })
|
||||||
|
|
||||||
|
-- Default springs
|
||||||
|
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||||
|
|
||||||
|
hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" })
|
||||||
|
hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
|
||||||
|
hl.animation({ leaf = "windows", enabled = true, speed = 4.79, spring = "easy" })
|
||||||
|
hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, spring = "easy", style = "popin 87%" })
|
||||||
|
hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" })
|
||||||
|
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" })
|
||||||
|
hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" })
|
||||||
|
hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" })
|
||||||
|
hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" })
|
||||||
|
|
||||||
|
-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
|
||||||
|
-- "Smart gaps" / "No gaps when only"
|
||||||
|
-- uncomment all if you wish to use that.
|
||||||
|
-- hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 })
|
||||||
|
-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 })
|
||||||
|
-- hl.window_rule({
|
||||||
|
-- name = "no-gaps-wtv1",
|
||||||
|
-- match = { float = false, workspace = "w[tv1]" },
|
||||||
|
-- border_size = 0,
|
||||||
|
-- rounding = 0,
|
||||||
|
-- })
|
||||||
|
-- hl.window_rule({
|
||||||
|
-- name = "no-gaps-f1",
|
||||||
|
-- match = { float = false, workspace = "f[1]" },
|
||||||
|
-- border_size = 0,
|
||||||
|
-- rounding = 0,
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more
|
||||||
|
hl.config({
|
||||||
|
dwindle = {
|
||||||
|
preserve_split = true, -- You probably want this
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more
|
||||||
|
hl.config({
|
||||||
|
master = {
|
||||||
|
new_status = "master",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/ for more
|
||||||
|
hl.config({
|
||||||
|
scrolling = {
|
||||||
|
fullscreen_on_one_column = true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
----------------
|
||||||
|
---- MISC ----
|
||||||
|
----------------
|
||||||
|
|
||||||
|
hl.config({
|
||||||
|
misc = {
|
||||||
|
force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
disable_hyprland_logo = false, -- If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
---------------
|
||||||
|
---- INPUT ----
|
||||||
|
---------------
|
||||||
|
|
||||||
|
hl.config({
|
||||||
|
input = {
|
||||||
|
kb_layout = "us",
|
||||||
|
kb_variant = "",
|
||||||
|
kb_model = "",
|
||||||
|
kb_options = "",
|
||||||
|
kb_rules = "",
|
||||||
|
|
||||||
|
follow_mouse = 1,
|
||||||
|
|
||||||
|
sensitivity = 0, -- -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad = {
|
||||||
|
natural_scroll = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.gesture({
|
||||||
|
fingers = 3,
|
||||||
|
direction = "horizontal",
|
||||||
|
action = "workspace"
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Example per-device config
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Devices/ for more
|
||||||
|
hl.device({
|
||||||
|
name = "epic-mouse-v1",
|
||||||
|
sensitivity = -0.5,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
---- KEYBINDINGS ----
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
local mainMod = "SUPER" -- Sets "Windows" key as main modifier
|
||||||
|
|
||||||
|
-- Example binds, see https://wiki.hypr.land/Configuring/Basics/Binds/ for more
|
||||||
|
hl.bind(mainMod .. " + Q", hl.dsp.exec_cmd(terminal))
|
||||||
|
local closeWindowBind = hl.bind(mainMod .. " + C", hl.dsp.window.close())
|
||||||
|
-- closeWindowBind:set_enabled(false)
|
||||||
|
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||||
|
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager))
|
||||||
|
hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" }))
|
||||||
|
hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu))
|
||||||
|
hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
|
||||||
|
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||||
|
|
||||||
|
-- Move focus with mainMod + arrow keys
|
||||||
|
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||||
|
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||||
|
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||||
|
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||||
|
|
||||||
|
-- Switch workspaces with mainMod + [0-9]
|
||||||
|
-- Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
for i = 1, 10 do
|
||||||
|
local key = i % 10 -- 10 maps to key 0
|
||||||
|
hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i}))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i }))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Example special workspace (scratchpad)
|
||||||
|
hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic"))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
|
||||||
|
|
||||||
|
-- Scroll through existing workspaces with mainMod + scroll
|
||||||
|
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||||
|
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||||
|
|
||||||
|
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||||
|
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||||
|
|
||||||
|
-- Laptop multimedia keys for volume and LCD brightness
|
||||||
|
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
|
||||||
|
|
||||||
|
-- Requires playerctl
|
||||||
|
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||||
|
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||||
|
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||||
|
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
---- WINDOWS AND WORKSPACES ----
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/
|
||||||
|
-- and https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
|
||||||
|
|
||||||
|
-- Example window rules that are useful
|
||||||
|
|
||||||
|
local suppressMaximizeRule = hl.window_rule({
|
||||||
|
-- Ignore maximize requests from all apps. You'll probably like this.
|
||||||
|
name = "suppress-maximize-events",
|
||||||
|
match = { class = ".*" },
|
||||||
|
|
||||||
|
suppress_event = "maximize",
|
||||||
|
})
|
||||||
|
-- suppressMaximizeRule:set_enabled(false)
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
-- Fix some dragging issues with XWayland
|
||||||
|
name = "fix-xwayland-drags",
|
||||||
|
match = {
|
||||||
|
class = "^$",
|
||||||
|
title = "^$",
|
||||||
|
xwayland = true,
|
||||||
|
float = true,
|
||||||
|
fullscreen = false,
|
||||||
|
pin = false,
|
||||||
|
},
|
||||||
|
|
||||||
|
no_focus = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Layer rules also return a handle.
|
||||||
|
-- local overlayLayerRule = hl.layer_rule({
|
||||||
|
-- name = "no-anim-overlay",
|
||||||
|
-- match = { namespace = "^my-overlay$" },
|
||||||
|
-- no_anim = true,
|
||||||
|
-- })
|
||||||
|
-- overlayLayerRule:set_enabled(false)
|
||||||
|
|
||||||
|
-- Hyprland-run windowrule
|
||||||
|
hl.window_rule({
|
||||||
|
name = "move-hyprland-run",
|
||||||
|
match = { class = "hyprland-run" },
|
||||||
|
|
||||||
|
move = "20 monitor_h-120",
|
||||||
|
float = true,
|
||||||
|
})
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
source = /home/ivan/.config/aether/theme/hyprlock.conf
|
||||||
|
$font_time = Widock TRIAL
|
||||||
|
$font = JetBrainsMono Nerd Font
|
||||||
|
|
||||||
|
general {
|
||||||
|
hide_cursor = false
|
||||||
|
}
|
||||||
|
|
||||||
|
background {
|
||||||
|
monitor =
|
||||||
|
path = screenshot # Сделает скриншот текущего экрана
|
||||||
|
blur_passes = 3 # Эффект размытия (оптимально 2-3)
|
||||||
|
blur_size = 7
|
||||||
|
|
||||||
|
# ЗАТЕМНЕНИЕ: Снижаем яркость картинки (0.0 — полностью черный, 1.0 — исходная яркость)
|
||||||
|
# Значение 0.5 уменьшит яркость скриншота ровно наполовину
|
||||||
|
brightness = 0.5
|
||||||
|
noise = 0.05
|
||||||
|
}
|
||||||
|
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
rounding = 0
|
||||||
|
size = 150, 50
|
||||||
|
outline_thickness = 2
|
||||||
|
font_family = $font
|
||||||
|
dots_size = 0.25
|
||||||
|
dots_spacing = 0.15
|
||||||
|
dots_center = true
|
||||||
|
fade_on_empty = false
|
||||||
|
placeholder_text = <i>you shall not pass</i>
|
||||||
|
hide_input = false
|
||||||
|
position = 0, -100
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
|
||||||
|
# Используем точные переменные из файла Aether
|
||||||
|
font_color = $font_color
|
||||||
|
inner_color = $inner_color
|
||||||
|
outer_color = $outer_color
|
||||||
|
check_color = $check_color
|
||||||
|
}
|
||||||
|
|
||||||
|
# ЧАСЫ
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo -e "$(date +"%H")"
|
||||||
|
color = $font_color
|
||||||
|
font_size = 150
|
||||||
|
font_family = $font_time
|
||||||
|
position = 0, -250
|
||||||
|
halign = center
|
||||||
|
valign = top
|
||||||
|
shadow_passes = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo -e "$(date +"%M")"
|
||||||
|
color = $font_color
|
||||||
|
font_size = 150
|
||||||
|
font_family = $font_time
|
||||||
|
position = 0, -400
|
||||||
|
halign = center
|
||||||
|
valign = top
|
||||||
|
shadow_passes = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# ДАТА
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "$(date +'%A')"
|
||||||
|
color = $font_color
|
||||||
|
font_size = 18
|
||||||
|
font_family = $font_time
|
||||||
|
position = 0, -20
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
shadow_passes = 0
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "$(date +'%d %B')"
|
||||||
|
color = $font_color
|
||||||
|
font_size = 18
|
||||||
|
font_family = $font_time
|
||||||
|
position = 0, -40
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
shadow_passes = 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "spotify-popup",
|
||||||
|
"position": "top",
|
||||||
|
"height": 0,
|
||||||
|
"layer": "background",
|
||||||
|
"exclusive_zone": false,
|
||||||
|
"popup_gap": 0,
|
||||||
|
"popup_autohide": true,
|
||||||
|
"css_path": "style.css",
|
||||||
|
|
||||||
|
"margin": {
|
||||||
|
"right": 400
|
||||||
|
},
|
||||||
|
|
||||||
|
"end": [
|
||||||
|
{
|
||||||
|
"type": "music",
|
||||||
|
"name": "spotify-music",
|
||||||
|
"player_type": "mpris",
|
||||||
|
"format": "",
|
||||||
|
"show_status_icon": false,
|
||||||
|
"cover_image_size": 120
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
@define-color background #0e0e06;
|
||||||
|
@define-color foreground #c9c7e1;
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family: "JetBrainsMono Nerd Font", "Font Awesome 7 Free", "Font Awesome 7 Free Solid", "Font Awesome 7 Brands", sans-serif;
|
||||||
|
/*font-size: 12px;*/
|
||||||
|
/*border: none;*/
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
window#ironbar {
|
||||||
|
background: #0e0e06;
|
||||||
|
}
|
||||||
|
#spotify-popup {
|
||||||
|
background: rgba(14, 14, 6, 0.75);
|
||||||
|
color: #c9c7e1;
|
||||||
|
min-height: 28px;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#spotify-music {
|
||||||
|
padding: 0 10px;
|
||||||
|
color: #c9c7e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#spotify-music .icon {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#spotify-music .cover {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#spotify-music {
|
||||||
|
background: red !important;
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# синхронизация окружения
|
||||||
|
dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=labwc &
|
||||||
|
systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &
|
||||||
|
|
||||||
|
# базовые сервисы
|
||||||
|
waybar &
|
||||||
|
mako &
|
||||||
|
hypridle &
|
||||||
|
hyprpolkitagent &
|
||||||
|
ironbar &
|
||||||
|
|
||||||
|
# буфер обмена
|
||||||
|
wl-paste --type text --watch cliphist store &
|
||||||
|
wl-paste --type image --watch cliphist store &
|
||||||
|
|
||||||
|
# тема и обои
|
||||||
|
~/.config/labwc/update_theme.sh &
|
||||||
|
|
||||||
|
# аудиоэффекты
|
||||||
|
(sleep 2 && easyeffects --gapplication-service) &
|
||||||
|
|
||||||
|
# polkit agent
|
||||||
|
systemctl --user start hyprpolkitagent.service &
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# раскладка и ее порядок
|
||||||
|
XKB_DEFAULT_LAYOUT=us,ru
|
||||||
|
|
||||||
|
# смена раскладки на сочетание клавиш
|
||||||
|
XKB_DEFAULT_OPTIONS=grp:ctrl_space_toggle
|
||||||
|
|
||||||
|
# тема для Qt-приложений
|
||||||
|
QT_QPA_PLATFORMTHEME=qt6ct
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<openbox_menu>
|
||||||
|
<menu id="root-menu" label="">
|
||||||
|
|
||||||
|
<item label="reconfigure">
|
||||||
|
<action name="Reconfigure" />
|
||||||
|
<action name="Execute" command="sh -c '~/.config/labwc/update_theme.sh; killall waybar; waybar &'" />
|
||||||
|
</item> <separator />
|
||||||
|
|
||||||
|
<item label="logout"><action name="Exit"/></item> <separator />
|
||||||
|
|
||||||
|
<item label="lock"><action name="Execute" command="hyprlock" /></item> <separator />
|
||||||
|
|
||||||
|
<item label="sleep"><action name="Execute" command="systemctl suspend" /></item> <separator />
|
||||||
|
|
||||||
|
<item label="reboot"><action name="Execute" command="systemctl reboot" /></item> <separator />
|
||||||
|
|
||||||
|
<item label="shutdown"><action name="Execute" command="systemctl poweroff" /></item>
|
||||||
|
|
||||||
|
</menu>
|
||||||
|
</openbox_menu>
|
||||||
@@ -0,0 +1,194 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<labwc_config>
|
||||||
|
<!-- настройка кол-ва рабочих столов -->
|
||||||
|
<desktops>
|
||||||
|
<names>
|
||||||
|
<name>1</name>
|
||||||
|
<name>2</name>
|
||||||
|
<name>3</name>
|
||||||
|
<name>4</name>
|
||||||
|
</names>
|
||||||
|
</desktops>
|
||||||
|
|
||||||
|
<!-- настройка поведения окон от курсора -->
|
||||||
|
<focus>
|
||||||
|
<followMouse>yes</followMouse>
|
||||||
|
<raiseOnFocus>no</raiseOnFocus>
|
||||||
|
</focus>
|
||||||
|
|
||||||
|
<core>
|
||||||
|
<theme>
|
||||||
|
<name>DynamicAether</name>
|
||||||
|
</theme>
|
||||||
|
<windowSwitcher style="thumbnail" preview="yes" outlines="yes" />
|
||||||
|
</core>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- настройка биндов -->
|
||||||
|
<keyboard>
|
||||||
|
<default />
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== РАБОТА С ОКНАМИ ==================== -->
|
||||||
|
|
||||||
|
<!-- закрытие окон -->
|
||||||
|
<keybind key="W-w"> <!-- Win+W -->
|
||||||
|
<action name="Close" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- растянуть окно в полноэкранный режим -->
|
||||||
|
<keybind key="S-W-f"> <!-- Shift+Win+F -->
|
||||||
|
<action name="ToggleFullscreen" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- максимизировать окно. работает в обратную сторону -->
|
||||||
|
<keybind key="W-f"> <!-- Win+F -->
|
||||||
|
<action name="ToggleMaximize" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- свернуть окно -->
|
||||||
|
<keybind key="S-C-f"> <!-- Shift+Ctrl+F -->
|
||||||
|
<action name="Iconify" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- снап окна влево (полэкрана) -->
|
||||||
|
<keybind key="W-;"> <!-- Win+; -->
|
||||||
|
<action name="SnapToEdge" direction="Left" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- снап окна вправо (полэкрана) -->
|
||||||
|
<keybind key="W-'"> <!-- Win+' -->
|
||||||
|
<action name="SnapToEdge" direction="Right" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- cнап окна в левый верхний угол (четверть экрана) -->
|
||||||
|
<keybind key="W-p"> <!-- Win+[ -->
|
||||||
|
<action name="SnapToEdge" direction="up-Left" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- cнап окна в левый нижний угол (четверть экрана) -->
|
||||||
|
<keybind key="W-,"> <!-- Win+. -->
|
||||||
|
<action name="SnapToEdge" direction="down-Left" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- cнап окна в правый верхний угол (четверть экрана) -->
|
||||||
|
<keybind key="W-]"> <!-- Win+] -->
|
||||||
|
<action name="SnapToEdge" direction="up-Right" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- cнап окна в правый нижний угол (четверть экрана) -->
|
||||||
|
<keybind key="W-/"> <!-- Win+/ -->
|
||||||
|
<action name="SnapToEdge" direction="down-Right" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- cнап окна вверх (полэкрана) -->
|
||||||
|
<keybind key="W-["> <!-- Win+] -->
|
||||||
|
<action name="SnapToEdge" direction="up" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- cнап окна вниз (полэкрана) -->
|
||||||
|
<keybind key="W-."> <!-- Win+] -->
|
||||||
|
<action name="SnapToEdge" direction="down" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- переместить окно на левый монитор -->
|
||||||
|
<keybind key="A-S-a"> <!-- Right Ctrl + <- (left) -->
|
||||||
|
<action name="MoveToOutput" direction="left" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- переместить окно на правый монитор -->
|
||||||
|
<keybind key="A-S-d"> <!-- Right Ctrl + -> (right) -->
|
||||||
|
<action name="MoveToOutput" direction="right" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- ==================== РАБОТА С РАБОЧИМИ СТОЛАМИ ==================== -->
|
||||||
|
|
||||||
|
<!-- перейти на раб стол 1 -->
|
||||||
|
<keybind key="W-1"> <!-- Win+1 -->
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>1</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- перейти на раб стол 2 -->
|
||||||
|
<keybind key="W-2"> <!-- Win+2 -->
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>2</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- перейти на раб стол 3 -->
|
||||||
|
<keybind key="W-3"> <!-- Win+3 -->
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>3</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- перейти на раб стол 4 -->
|
||||||
|
<keybind key="W-4"> <!-- Win+4 -->
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>4</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- ==================== ЗАПУСК ПРИЛОЖЕНИЙ ==================== -->
|
||||||
|
|
||||||
|
<!-- запустить меню приложений(wofi) -->
|
||||||
|
<keybind key="W-space"> <!-- Win+Space -->
|
||||||
|
<action name="Execute" command="wofi --show drun" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- запустить терминал(alacritty) -->
|
||||||
|
<keybind key="W-return"> <!-- Win+Return(enter) -->
|
||||||
|
<action name="Execute" command="alacritty --config-file ~/.config/aether/theme/alacritty.toml" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- запустить проводник(dolphin) -->
|
||||||
|
<keybind key="W-e"> <!-- Win+E -->
|
||||||
|
<action name="Execute" command="dolphin" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- заблокировать пк -->
|
||||||
|
<keybind key="W-l"> <!-- Win+L -->
|
||||||
|
<action name="Execute" command="hyprlock" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- сделать скриншот области(скриншот не сохраняется на диск) -->
|
||||||
|
<keybind key="W-S-s"> <!-- Shift+Win+S -->
|
||||||
|
<action name="Execute">
|
||||||
|
<command>sh -c 'grim -g "$(slurp)" - | wl-copy'</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- запустить clipboard -->
|
||||||
|
<keybind key="C-W-v"> <!-- Ctrl+Win+v -->
|
||||||
|
<action name="Execute">
|
||||||
|
<command>~/.config/wofi/cliphist-img.sh</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== УПРАВЛЕНИЕ МУЛЬТИМЕДИЕЙ ====================-->
|
||||||
|
|
||||||
|
<!-- остановить/запустить -->
|
||||||
|
<keybind key="A-R-s"> <!-- Right Alt+s -->
|
||||||
|
<action name="Execute" command="playerctl --player=spotify,%any play-pause" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- следующий трек -->
|
||||||
|
<keybind key="A-R-d"> <!-- Right Alt+d -->
|
||||||
|
<action name="Execute" command="playerctl --player=spotify,%any next" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- предыдущий трек -->
|
||||||
|
<keybind key="A-R-a"> <!-- Right Alt+a -->
|
||||||
|
<action name="Execute" command="playerctl --player=spotify,%any previous" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
</keyboard>
|
||||||
|
|
||||||
|
</labwc_config>
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# очистка clipboard
|
||||||
|
cliphist wipe &
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# цвет рамки active и inactive
|
||||||
|
window.active.border.color: #F9EDE4
|
||||||
|
window.inactive.border.color: #141414
|
||||||
|
|
||||||
|
# цвет фона заголовка active и inactive
|
||||||
|
window.active.title.bg.color: #141414
|
||||||
|
window.inactive.title.bg.color: #141414
|
||||||
|
|
||||||
|
# цвет текста заголовка окна
|
||||||
|
window.active.label.text.color: #F9EDE4
|
||||||
|
window.inactive.label.text.color: #F9EDE4
|
||||||
|
|
||||||
|
# цвет иконок кнопок для АКТИВНОГО окна
|
||||||
|
window.active.button.unpressed.image.color: #F9EDE4
|
||||||
|
|
||||||
|
# цвет иконок кнопок для НЕАКТИВНОГО окна (ОБЯЗАТЕЛЬНЫЙ КЛЮЧ LABWC)
|
||||||
|
window.inactive.button.image.color: #F9EDE4
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
window.active.title.bg: #040608
|
||||||
|
window.active.title.text: #D4CFCB
|
||||||
|
window.active.border.color: #040608
|
||||||
|
window.inactive.title.bg: #040608
|
||||||
|
window.inactive.title.text: #D4CFCB
|
||||||
|
window.inactive.border.color: #040608
|
||||||
|
window.active.border.width: 2
|
||||||
|
window.inactive.border.width: 1
|
||||||
Executable
+41
@@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
TARGET_FILE="$HOME/.config/aether/theme/waybar.css"
|
||||||
|
THEME_FILE="$HOME/.config/labwc/themerc-override"
|
||||||
|
|
||||||
|
BG_FOLDER="$HOME/.config/aether/theme/backgrounds"
|
||||||
|
WALLPAPER=$(find "$BG_FOLDER" -type f | head -n 1)
|
||||||
|
|
||||||
|
if [ -f "$TARGET_FILE" ]; then
|
||||||
|
BG_COLOR=$(grep "background" "$TARGET_FILE" | awk '{print $3}' | tr -d ';')
|
||||||
|
FG_COLOR=$(grep "foreground" "$TARGET_FILE" | awk '{print $3}' | tr -d ';')
|
||||||
|
|
||||||
|
if [ ! -z "$BG_COLOR" ] && [ ! -z "$FG_COLOR" ]; then
|
||||||
|
cat << EOF > "$THEME_FILE"
|
||||||
|
# цвет рамки active и inactive
|
||||||
|
window.active.border.color: $FG_COLOR
|
||||||
|
window.inactive.border.color: $BG_COLOR
|
||||||
|
|
||||||
|
# цвет фона заголовка active и inactive
|
||||||
|
window.active.title.bg.color: $BG_COLOR
|
||||||
|
window.inactive.title.bg.color: $BG_COLOR
|
||||||
|
|
||||||
|
# цвет текста заголовка окна
|
||||||
|
window.active.label.text.color: $FG_COLOR
|
||||||
|
window.inactive.label.text.color: $FG_COLOR
|
||||||
|
|
||||||
|
# цвет иконок кнопок для АКТИВНОГО окна
|
||||||
|
window.active.button.unpressed.image.color: $FG_COLOR
|
||||||
|
|
||||||
|
# цвет иконок кнопок для НЕАКТИВНОГО окна (ОБЯЗАТЕЛЬНЫЙ КЛЮЧ LABWC)
|
||||||
|
window.inactive.button.image.color: $FG_COLOR
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
killall swaybg 2>/dev/null
|
||||||
|
|
||||||
|
if [ ! -z "$WALLPAPER" ] && [ -f "$WALLPAPER" ]; then
|
||||||
|
swaybg -m fill -i "$WALLPAPER" &
|
||||||
|
else
|
||||||
|
swaybg -c "$BG_COLOR" &
|
||||||
|
fi
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
стек:
|
||||||
|
labwc
|
||||||
|
waybar
|
||||||
|
swaylock(замена hyprlock)
|
||||||
|
swayidle(замена hypridle)
|
||||||
|
polkit-gnome(замена hyprpolkit)
|
||||||
|
dolphin
|
||||||
|
kate
|
||||||
|
google-chrome
|
||||||
|
pipewire
|
||||||
|
kitty(alacritty)
|
||||||
|
v2ray
|
||||||
|
v2rayA
|
||||||
|
telegram
|
||||||
|
htop
|
||||||
|
gparted
|
||||||
|
pavucontrol
|
||||||
|
qdirstat
|
||||||
|
easyeffects
|
||||||
|
lsp-plugins-lv2
|
||||||
|
obsidian
|
||||||
|
ristretto
|
||||||
|
mpv
|
||||||
|
wofi
|
||||||
|
cliphist
|
||||||
|
sddm
|
||||||
|
pango
|
||||||
|
xorg-server-xwayland
|
||||||
|
mesa-dri
|
||||||
|
nvidia-open-dkms
|
||||||
|
wl-clipboard
|
||||||
|
gtk-layer-shell
|
||||||
|
grim
|
||||||
|
slurp
|
||||||
|
swaybg
|
||||||
|
mako
|
||||||
|
seatd
|
||||||
|
dbus
|
||||||
|
polkit
|
||||||
|
fontconfig
|
||||||
|
noto-fonts-ttf
|
||||||
|
ttf-dejavu
|
||||||
|
alsa-pipewire
|
||||||
|
wireplumber
|
||||||
|
xdg-desktop-portal-wlr
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
qt6-wayland
|
||||||
|
qt5-wayland
|
||||||
|
base-system
|
||||||
|
void-repo-nonfree
|
||||||
|
fuse
|
||||||
|
fuse-common
|
||||||
|
ca-certificates
|
||||||
|
curl
|
||||||
|
xdg-utils
|
||||||
|
dhcpcd
|
||||||
|
sudo
|
||||||
|
acpid
|
||||||
|
breeze-icons
|
||||||
|
ffmpeg
|
||||||
|
libnotify
|
||||||
|
ttf-jetbrains-mono
|
||||||
|
adwaita-icon-theme
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
unzip
|
||||||
|
zip
|
||||||
|
p7zip
|
||||||
|
qt5ct
|
||||||
|
qt6ct
|
||||||
|
linux-firmware
|
||||||
|
ttf-font-awesome
|
||||||
|
|
||||||
|
|
||||||
|
aether(буду писать замену)
|
||||||
|
|
||||||
|
установка чистого void linux
|
||||||
|
|
||||||
|
обновление системы
|
||||||
|
sudo xbps-install -Syu
|
||||||
|
sudo xbps-install -u xbps
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
[Appearance]
|
||||||
|
color_scheme_path=/usr/share/qt6ct/colors/darker.conf
|
||||||
|
custom_palette=true
|
||||||
|
icon_theme=breeze-dark
|
||||||
|
standard_dialogs=default
|
||||||
|
style=Fusion
|
||||||
|
|
||||||
|
[Fonts]
|
||||||
|
fixed="JetBrainsMono Nerd Font,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular,0,0"
|
||||||
|
general="JetBrainsMonoNL Nerd Font,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular,0,0"
|
||||||
|
|
||||||
|
[Interface]
|
||||||
|
activate_item_on_single_click=1
|
||||||
|
buttonbox_layout=2
|
||||||
|
cursor_flash_time=1000
|
||||||
|
dialog_buttons_have_icons=1
|
||||||
|
double_click_interval=400
|
||||||
|
gui_effects=@Invalid()
|
||||||
|
keyboard_scheme=2
|
||||||
|
menus_have_icons=true
|
||||||
|
show_shortcuts_in_context_menus=true
|
||||||
|
stylesheets=@Invalid()
|
||||||
|
toolbutton_style=4
|
||||||
|
underline_shortcut=1
|
||||||
|
wheel_scroll_lines=3
|
||||||
|
|
||||||
|
[SettingsWindow]
|
||||||
|
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m\0\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m)
|
||||||
|
|
||||||
|
[Troubleshooting]
|
||||||
|
force_raster_widgets=1
|
||||||
|
ignored_applications=@Invalid()
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"layer": "top",
|
||||||
|
"position": "top",
|
||||||
|
"height": 25,
|
||||||
|
"spacing": 0,
|
||||||
|
"modules-left": ["wlr/taskbar"],
|
||||||
|
"modules-center": ["clock"],
|
||||||
|
"modules-right": ["network", "custom/spotify", "custom/v2raya", "custom/language", "pulseaudio", "cpu", "memory", "tray"],
|
||||||
|
|
||||||
|
"wlr/taskbar": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"icon-size": 15,
|
||||||
|
"tooltip-format": "{title}",
|
||||||
|
"on-click": "activate"
|
||||||
|
},
|
||||||
|
"custom/language": {
|
||||||
|
"exec": "xkblayout-state print %s | tr 'a-z' 'A-Z'",
|
||||||
|
"interval": 1,
|
||||||
|
"format": " {} "
|
||||||
|
},
|
||||||
|
"custom/spotify": {
|
||||||
|
"format": "[{}] ",
|
||||||
|
"exec": "playerctl metadata --format '{{artist}} - {{title}}' spotify 2>/dev/null || echo ''",
|
||||||
|
"on-click": "ironbar bar spotify-popup toggle-popup spotify-music",
|
||||||
|
"interval": 3,
|
||||||
|
"max-length": 50
|
||||||
|
},
|
||||||
|
"custom/v2raya": {
|
||||||
|
"format": "PROXY{}",
|
||||||
|
"return-type": "json",
|
||||||
|
"interval": 2,
|
||||||
|
"exec": "/home/ivan/.config/waybar/v2raya-toggle.sh",
|
||||||
|
"on-click": "/home/ivan/.config/waybar/v2raya-toggle.sh toggle",
|
||||||
|
"signal": 10
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%H:%M}",
|
||||||
|
"format-alt": "{:%d-%m-%Y}"
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"format": " {usage}%",
|
||||||
|
"tooltip": false,
|
||||||
|
"on-click": "alacritty -e htop"
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": " {}%"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"min-length": 10,
|
||||||
|
"format-wifi": " {bandwidthDownBytes}",
|
||||||
|
"format-ethernet": " {bandwidthDownBytes}",
|
||||||
|
"format-disconnected": "⚠ DONT",
|
||||||
|
"interval": 1
|
||||||
|
},
|
||||||
|
"pulseaudio": {
|
||||||
|
"format": " {volume}%",
|
||||||
|
"format-muted": " Muted",
|
||||||
|
"on-click": "pavucontrol"
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 10,
|
||||||
|
"spacing": 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
* {
|
||||||
|
font-family: "JetBrainsMono Nerd Font", "Font Awesome 7 Free", "Font Awesome 7 Free Solid", "Font Awesome 7 Brands", sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@import "/home/ivan/.config/aether/theme/waybar.css";
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background: alpha(@background, 0.75);
|
||||||
|
color: @foreground;
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#network,
|
||||||
|
#pulseaudio,
|
||||||
|
#taskbar,
|
||||||
|
#custom-spotify,
|
||||||
|
#tray {
|
||||||
|
padding: 0 10px;
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#taskbar button {
|
||||||
|
color: alpha(@foreground, 0.6);
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#taskbar button.active {
|
||||||
|
background-color: alpha(@foreground, 0.2);
|
||||||
|
box-shadow: inset 0 -2px 0 0 @foreground;
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-v2raya.enabled {
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-v2raya.disabled {
|
||||||
|
color: @background;
|
||||||
|
}
|
||||||
Executable
+19
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Проверяем, запущен ли процесс v2rayA
|
||||||
|
if pgrep -x "v2raya" > /dev/null; then
|
||||||
|
if [ "$1" = "toggle" ]; then
|
||||||
|
sudo systemctl stop v2raya.service 2>/dev/null || sudo killall v2raya
|
||||||
|
echo "{\"text\": \" \", \"class\": \"disabled\", \"tooltip\": \"v2rayA выключен\"}"
|
||||||
|
else
|
||||||
|
echo "{\"text\": \" \", \"class\": \"enabled\", \"tooltip\": \"v2rayA включен\"}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ "$1" = "toggle" ]; then
|
||||||
|
sudo systemctl start v2raya.service 2>/dev/null || sudo v2raya --daemon &
|
||||||
|
echo "{\"text\": \" \", \"class\": \"enabled\", \"tooltip\": \"v2rayA включен\"}"
|
||||||
|
else
|
||||||
|
echo "{\"text\": \" \", \"class\": \"disabled\", \"tooltip\": \"v2rayA выключен\"}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
Executable
+61
@@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
export WAYLAND_DISPLAY=wayland-0
|
||||||
|
export XDG_RUNTIME_DIR=/run/user/$(id -u)
|
||||||
|
|
||||||
|
thumb_dir="${XDG_CACHE_HOME:-$HOME/.cache}/cliphist/thumbs"
|
||||||
|
mkdir -p "$thumb_dir"
|
||||||
|
|
||||||
|
make_thumb() { # $1 - исходник, $2 - результат
|
||||||
|
if command -v gdk-pixbuf-thumbnailer >/dev/null 2>&1; then
|
||||||
|
gdk-pixbuf-thumbnailer -s 256 "$1" "$2" 2>/dev/null
|
||||||
|
elif command -v magick >/dev/null 2>&1; then
|
||||||
|
magick "$1" -resize '256x256>' "$2" 2>/dev/null
|
||||||
|
elif command -v convert >/dev/null 2>&1; then
|
||||||
|
convert "$1" -resize '256x256>' "$2" 2>/dev/null
|
||||||
|
fi
|
||||||
|
# если тулза нет/ошибка — отдаём оригинал, wofi сам смасштабирует
|
||||||
|
[ -s "$2" ] || cp -f "$1" "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
wofi_input=""
|
||||||
|
|
||||||
|
while read -r line; do
|
||||||
|
[[ "$line" == *"<meta http-equiv="* ]] && continue
|
||||||
|
[[ -z "$line" ]] && continue
|
||||||
|
|
||||||
|
id="${line%%[[:space:]]*}"
|
||||||
|
|
||||||
|
if [[ "$line" == *binary* ]]; then
|
||||||
|
thumb_path="${thumb_dir}/${id}.png"
|
||||||
|
|
||||||
|
if [ ! -s "$thumb_path" ]; then
|
||||||
|
tmp="$(mktemp)"
|
||||||
|
# ВАЖНО: передаём строку через pipe,
|
||||||
|
# иначе decode прочитает stdin цикла и «съест» список
|
||||||
|
printf '%s\n' "$line" | cliphist decode > "$tmp" 2>/dev/null
|
||||||
|
[ -s "$tmp" ] && make_thumb "$tmp" "$thumb_path"
|
||||||
|
rm -f "$tmp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -s "$thumb_path" ]; then
|
||||||
|
wofi_input+="img:${thumb_path}\n"
|
||||||
|
else
|
||||||
|
wofi_input+="${line}\n"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
wofi_input+="${line}\n"
|
||||||
|
fi
|
||||||
|
done <<< "$(cliphist list)"
|
||||||
|
|
||||||
|
choice="$(printf '%b' "$wofi_input" | wofi -I --dmenu --cache-file=/dev/null \
|
||||||
|
-Dimage_size=100 -Dynamic_lines=true --prompt "Буфер обмена")"
|
||||||
|
|
||||||
|
[ -z "$choice" ] && exit 0
|
||||||
|
|
||||||
|
if [[ "$choice" == img:* ]]; then
|
||||||
|
f="${choice#img:}"
|
||||||
|
id="$(basename "$f" .png)"
|
||||||
|
printf '%s\t' "$id" | cliphist decode | wl-copy
|
||||||
|
else
|
||||||
|
printf '%s\n' "$choice" | cliphist decode | wl-copy
|
||||||
|
fi
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
@import "/home/ivan/.config/aether/theme/wofi.css";
|
||||||
|
|
||||||
|
#img {
|
||||||
|
padding: 5px;
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
window {
|
||||||
|
background-color: @bg;
|
||||||
|
border: 2px solid @gray3;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
background-color: @bg;
|
||||||
|
color: @fg;
|
||||||
|
border: 1px solid @gray2;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:selected {
|
||||||
|
background-color: @gray1;
|
||||||
|
color: @fg_bright;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
color: @fg;
|
||||||
|
background-color: @bg;
|
||||||
|
padding: 5px;
|
||||||
|
margin: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:selected {
|
||||||
|
background-color: @gray1;
|
||||||
|
color: @fg_bright;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollbar {
|
||||||
|
background-color: @bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollbar slider {
|
||||||
|
background-color: @gray2;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollbar slider:hover {
|
||||||
|
background-color: @gray3;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
general {
|
||||||
|
# Команда, которая выполняется при вызове блокировки через систему/dbus
|
||||||
|
lock_cmd = hyprlock
|
||||||
|
}
|
||||||
|
|
||||||
|
# ПРАВИЛО 1: Блокировка экрана через 5 минут бездействия
|
||||||
|
listener {
|
||||||
|
timeout = 300 # 5 минут (300 секунд)
|
||||||
|
on-timeout = hyprlock # Только блокируем экран
|
||||||
|
}
|
||||||
|
|
||||||
|
# ПРАВИЛО 2: Выключение мониторов через 5.5 минут (через 30 секунд после блокировки)
|
||||||
|
listener {
|
||||||
|
timeout = 330 # 5 минут 30 секунд
|
||||||
|
on-timeout = wlopm --off \* # Гасим все мониторы
|
||||||
|
on-resume = wlopm --on \* # Включаем при активности
|
||||||
|
}
|
||||||
@@ -0,0 +1,364 @@
|
|||||||
|
|
||||||
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||||
|
-- AUTOGENERATED HYPRLAND CONFIG. --
|
||||||
|
-- EDIT THIS CONFIG ACCORDING TO THE WIKI INSTRUCTIONS. --
|
||||||
|
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
||||||
|
|
||||||
|
hl.config({ autogenerated = true }) -- remove this line to remove the warning
|
||||||
|
|
||||||
|
-- This is an example Hyprland Lua config file.
|
||||||
|
-- Refer to the wiki for more information.
|
||||||
|
-- https://wiki.hypr.land/Configuring/Start/
|
||||||
|
|
||||||
|
-- Please note not all available settings / options are set here.
|
||||||
|
-- For a full list, see the wiki
|
||||||
|
|
||||||
|
-- You can (and should!!) split this configuration into multiple files
|
||||||
|
-- Create your files separately and then require them like this:
|
||||||
|
-- require("myColors")
|
||||||
|
|
||||||
|
|
||||||
|
------------------
|
||||||
|
---- MONITORS ----
|
||||||
|
------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
|
||||||
|
hl.monitor({
|
||||||
|
output = "",
|
||||||
|
mode = "preferred",
|
||||||
|
position = "auto",
|
||||||
|
scale = "auto",
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
---- MY PROGRAMS ----
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
-- Set programs that you use
|
||||||
|
local terminal = "kitty"
|
||||||
|
local fileManager = "dolphin"
|
||||||
|
local menu = "hyprlauncher"
|
||||||
|
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
---- AUTOSTART ----
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Autostart/
|
||||||
|
|
||||||
|
-- Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||||
|
-- Or execute your favorite apps at launch like this:
|
||||||
|
--
|
||||||
|
-- hl.on("hyprland.start", function ()
|
||||||
|
-- hl.exec_cmd(terminal)
|
||||||
|
-- hl.exec_cmd("nm-applet")
|
||||||
|
-- hl.exec_cmd("waybar & hyprpaper & firefox")
|
||||||
|
-- end)
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
---- ENVIRONMENT VARIABLES ----
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/
|
||||||
|
|
||||||
|
hl.env("XCURSOR_SIZE", "24")
|
||||||
|
hl.env("HYPRCURSOR_SIZE", "24")
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
----- PERMISSIONS -----
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Permissions/
|
||||||
|
-- Please note permission changes here require a Hyprland restart and are not applied on-the-fly
|
||||||
|
-- for security reasons
|
||||||
|
|
||||||
|
-- hl.config({
|
||||||
|
-- ecosystem = {
|
||||||
|
-- enforce_permissions = true,
|
||||||
|
-- },
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow")
|
||||||
|
-- hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow")
|
||||||
|
-- hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow")
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------
|
||||||
|
---- LOOK AND FEEL ----
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/
|
||||||
|
hl.config({
|
||||||
|
general = {
|
||||||
|
gaps_in = 5,
|
||||||
|
gaps_out = 20,
|
||||||
|
|
||||||
|
border_size = 2,
|
||||||
|
|
||||||
|
col = {
|
||||||
|
active_border = { colors = {"rgba(33ccffee)", "rgba(00ff99ee)"}, angle = 45 },
|
||||||
|
inactive_border = "rgba(595959aa)",
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Set to true to enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = false,
|
||||||
|
|
||||||
|
-- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false,
|
||||||
|
|
||||||
|
layout = "dwindle",
|
||||||
|
},
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
rounding = 10,
|
||||||
|
rounding_power = 2,
|
||||||
|
|
||||||
|
-- Change transparency of focused and unfocused windows
|
||||||
|
active_opacity = 1.0,
|
||||||
|
inactive_opacity = 1.0,
|
||||||
|
|
||||||
|
shadow = {
|
||||||
|
enabled = true,
|
||||||
|
range = 4,
|
||||||
|
render_power = 3,
|
||||||
|
color = 0xee1a1a1a,
|
||||||
|
},
|
||||||
|
|
||||||
|
blur = {
|
||||||
|
enabled = true,
|
||||||
|
size = 3,
|
||||||
|
passes = 1,
|
||||||
|
vibrancy = 0.1696,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
animations = {
|
||||||
|
enabled = true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/
|
||||||
|
hl.curve("easeOutQuint", { type = "bezier", points = { {0.23, 1}, {0.32, 1} } })
|
||||||
|
hl.curve("easeInOutCubic", { type = "bezier", points = { {0.65, 0.05}, {0.36, 1} } })
|
||||||
|
hl.curve("linear", { type = "bezier", points = { {0, 0}, {1, 1} } })
|
||||||
|
hl.curve("almostLinear", { type = "bezier", points = { {0.5, 0.5}, {0.75, 1} } })
|
||||||
|
hl.curve("quick", { type = "bezier", points = { {0.15, 0}, {0.1, 1} } })
|
||||||
|
|
||||||
|
-- Default springs
|
||||||
|
hl.curve("easy", { type = "spring", mass = 1, stiffness = 238.1191, dampening = 24.21279333 })
|
||||||
|
|
||||||
|
hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" })
|
||||||
|
hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
|
||||||
|
hl.animation({ leaf = "windows", enabled = true, speed = 4.79, spring = "easy" })
|
||||||
|
hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, spring = "easy", style = "popin 87%" })
|
||||||
|
hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" })
|
||||||
|
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" })
|
||||||
|
hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" })
|
||||||
|
hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" })
|
||||||
|
hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" })
|
||||||
|
hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
|
||||||
|
hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" })
|
||||||
|
|
||||||
|
-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
|
||||||
|
-- "Smart gaps" / "No gaps when only"
|
||||||
|
-- uncomment all if you wish to use that.
|
||||||
|
-- hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 })
|
||||||
|
-- hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 })
|
||||||
|
-- hl.window_rule({
|
||||||
|
-- name = "no-gaps-wtv1",
|
||||||
|
-- match = { float = false, workspace = "w[tv1]" },
|
||||||
|
-- border_size = 0,
|
||||||
|
-- rounding = 0,
|
||||||
|
-- })
|
||||||
|
-- hl.window_rule({
|
||||||
|
-- name = "no-gaps-f1",
|
||||||
|
-- match = { float = false, workspace = "f[1]" },
|
||||||
|
-- border_size = 0,
|
||||||
|
-- rounding = 0,
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more
|
||||||
|
hl.config({
|
||||||
|
dwindle = {
|
||||||
|
preserve_split = true, -- You probably want this
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Layouts/Master-Layout/ for more
|
||||||
|
hl.config({
|
||||||
|
master = {
|
||||||
|
new_status = "master",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Layouts/Scrolling-Layout/ for more
|
||||||
|
hl.config({
|
||||||
|
scrolling = {
|
||||||
|
fullscreen_on_one_column = true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
----------------
|
||||||
|
---- MISC ----
|
||||||
|
----------------
|
||||||
|
|
||||||
|
hl.config({
|
||||||
|
misc = {
|
||||||
|
force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
disable_hyprland_logo = false, -- If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
---------------
|
||||||
|
---- INPUT ----
|
||||||
|
---------------
|
||||||
|
|
||||||
|
hl.config({
|
||||||
|
input = {
|
||||||
|
kb_layout = "us",
|
||||||
|
kb_variant = "",
|
||||||
|
kb_model = "",
|
||||||
|
kb_options = "",
|
||||||
|
kb_rules = "",
|
||||||
|
|
||||||
|
follow_mouse = 1,
|
||||||
|
|
||||||
|
sensitivity = 0, -- -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad = {
|
||||||
|
natural_scroll = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
hl.gesture({
|
||||||
|
fingers = 3,
|
||||||
|
direction = "horizontal",
|
||||||
|
action = "workspace"
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Example per-device config
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Devices/ for more
|
||||||
|
hl.device({
|
||||||
|
name = "epic-mouse-v1",
|
||||||
|
sensitivity = -0.5,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
---------------------
|
||||||
|
---- KEYBINDINGS ----
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
local mainMod = "SUPER" -- Sets "Windows" key as main modifier
|
||||||
|
|
||||||
|
-- Example binds, see https://wiki.hypr.land/Configuring/Basics/Binds/ for more
|
||||||
|
hl.bind(mainMod .. " + Q", hl.dsp.exec_cmd(terminal))
|
||||||
|
local closeWindowBind = hl.bind(mainMod .. " + C", hl.dsp.window.close())
|
||||||
|
-- closeWindowBind:set_enabled(false)
|
||||||
|
hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'"))
|
||||||
|
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager))
|
||||||
|
hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" }))
|
||||||
|
hl.bind(mainMod .. " + R", hl.dsp.exec_cmd(menu))
|
||||||
|
hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
|
||||||
|
hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||||
|
|
||||||
|
-- Move focus with mainMod + arrow keys
|
||||||
|
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||||
|
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||||
|
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||||
|
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||||
|
|
||||||
|
-- Switch workspaces with mainMod + [0-9]
|
||||||
|
-- Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
for i = 1, 10 do
|
||||||
|
local key = i % 10 -- 10 maps to key 0
|
||||||
|
hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i}))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i }))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Example special workspace (scratchpad)
|
||||||
|
hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic"))
|
||||||
|
hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
|
||||||
|
|
||||||
|
-- Scroll through existing workspaces with mainMod + scroll
|
||||||
|
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||||
|
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||||
|
|
||||||
|
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
||||||
|
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
||||||
|
|
||||||
|
-- Laptop multimedia keys for volume and LCD brightness
|
||||||
|
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
|
||||||
|
hl.bind("XF86MonBrightnessDown",hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
|
||||||
|
|
||||||
|
-- Requires playerctl
|
||||||
|
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||||
|
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||||
|
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||||
|
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------
|
||||||
|
---- WINDOWS AND WORKSPACES ----
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/
|
||||||
|
-- and https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
|
||||||
|
|
||||||
|
-- Example window rules that are useful
|
||||||
|
|
||||||
|
local suppressMaximizeRule = hl.window_rule({
|
||||||
|
-- Ignore maximize requests from all apps. You'll probably like this.
|
||||||
|
name = "suppress-maximize-events",
|
||||||
|
match = { class = ".*" },
|
||||||
|
|
||||||
|
suppress_event = "maximize",
|
||||||
|
})
|
||||||
|
-- suppressMaximizeRule:set_enabled(false)
|
||||||
|
|
||||||
|
hl.window_rule({
|
||||||
|
-- Fix some dragging issues with XWayland
|
||||||
|
name = "fix-xwayland-drags",
|
||||||
|
match = {
|
||||||
|
class = "^$",
|
||||||
|
title = "^$",
|
||||||
|
xwayland = true,
|
||||||
|
float = true,
|
||||||
|
fullscreen = false,
|
||||||
|
pin = false,
|
||||||
|
},
|
||||||
|
|
||||||
|
no_focus = true,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Layer rules also return a handle.
|
||||||
|
-- local overlayLayerRule = hl.layer_rule({
|
||||||
|
-- name = "no-anim-overlay",
|
||||||
|
-- match = { namespace = "^my-overlay$" },
|
||||||
|
-- no_anim = true,
|
||||||
|
-- })
|
||||||
|
-- overlayLayerRule:set_enabled(false)
|
||||||
|
|
||||||
|
-- Hyprland-run windowrule
|
||||||
|
hl.window_rule({
|
||||||
|
name = "move-hyprland-run",
|
||||||
|
match = { class = "hyprland-run" },
|
||||||
|
|
||||||
|
move = "20 monitor_h-120",
|
||||||
|
float = true,
|
||||||
|
})
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
source = /home/ivan/.config/aether/theme/hyprlock.conf
|
||||||
|
$font_time = Widock TRIAL
|
||||||
|
$font = JetBrainsMono Nerd Font
|
||||||
|
|
||||||
|
general {
|
||||||
|
hide_cursor = false
|
||||||
|
}
|
||||||
|
|
||||||
|
background {
|
||||||
|
monitor =
|
||||||
|
path = screenshot # Сделает скриншот текущего экрана
|
||||||
|
blur_passes = 3 # Эффект размытия (оптимально 2-3)
|
||||||
|
blur_size = 7
|
||||||
|
|
||||||
|
# ЗАТЕМНЕНИЕ: Снижаем яркость картинки (0.0 — полностью черный, 1.0 — исходная яркость)
|
||||||
|
# Значение 0.5 уменьшит яркость скриншота ровно наполовину
|
||||||
|
brightness = 0.5
|
||||||
|
noise = 0.05
|
||||||
|
}
|
||||||
|
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
rounding = 0
|
||||||
|
size = 150, 50
|
||||||
|
outline_thickness = 2
|
||||||
|
font_family = $font
|
||||||
|
dots_size = 0.25
|
||||||
|
dots_spacing = 0.15
|
||||||
|
dots_center = true
|
||||||
|
fade_on_empty = false
|
||||||
|
placeholder_text = <i>you shall not pass</i>
|
||||||
|
hide_input = false
|
||||||
|
position = 0, -100
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
|
||||||
|
# Используем точные переменные из файла Aether
|
||||||
|
font_color = $font_color
|
||||||
|
inner_color = $inner_color
|
||||||
|
outer_color = $outer_color
|
||||||
|
check_color = $check_color
|
||||||
|
}
|
||||||
|
|
||||||
|
# ЧАСЫ
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo -e "$(date +"%H")"
|
||||||
|
color = $font_color
|
||||||
|
font_size = 150
|
||||||
|
font_family = $font_time
|
||||||
|
position = 0, -250
|
||||||
|
halign = center
|
||||||
|
valign = top
|
||||||
|
shadow_passes = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo -e "$(date +"%M")"
|
||||||
|
color = $font_color
|
||||||
|
font_size = 150
|
||||||
|
font_family = $font_time
|
||||||
|
position = 0, -400
|
||||||
|
halign = center
|
||||||
|
valign = top
|
||||||
|
shadow_passes = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# ДАТА
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "$(date +'%A')"
|
||||||
|
color = $font_color
|
||||||
|
font_size = 18
|
||||||
|
font_family = $font_time
|
||||||
|
position = 0, -20
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
shadow_passes = 0
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "$(date +'%d %B')"
|
||||||
|
color = $font_color
|
||||||
|
font_size = 18
|
||||||
|
font_family = $font_time
|
||||||
|
position = 0, -40
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
shadow_passes = 0
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
# базовые сервисы
|
||||||
|
waybar &
|
||||||
|
mako &
|
||||||
|
|
||||||
|
# буфер обмена
|
||||||
|
wl-paste --type text --watch cliphist store &
|
||||||
|
wl-paste --type image --watch cliphist store &
|
||||||
|
|
||||||
|
# обои
|
||||||
|
# потом заменить на ~/.config/labwc/update_theme.sh &
|
||||||
|
~/.config/labwc/scripts/base_theme_dark.sh &
|
||||||
|
|
||||||
|
|
||||||
|
# polkit agent
|
||||||
|
systemctl --user start hyprpolkitagent.service &
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# синхронизация окружения
|
||||||
|
dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=labwc &
|
||||||
|
systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP &
|
||||||
|
|
||||||
|
# базовые сервисы
|
||||||
|
waybar &
|
||||||
|
mako &
|
||||||
|
hypridle &
|
||||||
|
hyprpolkitagent &
|
||||||
|
ironbar &
|
||||||
|
|
||||||
|
# буфер обмена
|
||||||
|
wl-paste --type text --watch cliphist store &
|
||||||
|
wl-paste --type image --watch cliphist store &
|
||||||
|
|
||||||
|
# тема и обои
|
||||||
|
~/.config/labwc/update_theme.sh &
|
||||||
|
|
||||||
|
# аудиоэффекты
|
||||||
|
(sleep 2 && easyeffects --gapplication-service) &
|
||||||
|
|
||||||
|
# polkit agent
|
||||||
|
systemctl --user start hyprpolkitagent.service &
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# раскладка и ее порядок
|
||||||
|
XKB_DEFAULT_LAYOUT=us,ru
|
||||||
|
|
||||||
|
# смена раскладки на сочетание клавиш
|
||||||
|
XKB_DEFAULT_OPTIONS=grp:ctrl_space_toggle
|
||||||
|
|
||||||
|
# тема для Qt-приложений
|
||||||
|
QT_QPA_PLATFORMTHEME=qt6ct
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" ?>
|
||||||
|
<openbox_menu>
|
||||||
|
<menu id="root-menu" label="">
|
||||||
|
|
||||||
|
<item label="reconfigure">
|
||||||
|
<action name="Reconfigure" />
|
||||||
|
<action name="Execute" command="sh -c '~/.config/labwc/update_theme.sh; killall waybar; waybar &'" />
|
||||||
|
</item> <separator />
|
||||||
|
|
||||||
|
<item label="logout"><action name="Exit"/></item> <separator />
|
||||||
|
|
||||||
|
<item label="lock"><action name="Execute" command="hyprlock" /></item> <separator />
|
||||||
|
|
||||||
|
<item label="sleep"><action name="Execute" command="systemctl suspend" /></item> <separator />
|
||||||
|
|
||||||
|
<item label="reboot"><action name="Execute" command="systemctl reboot" /></item> <separator />
|
||||||
|
|
||||||
|
<item label="shutdown"><action name="Execute" command="systemctl poweroff" /></item>
|
||||||
|
|
||||||
|
</menu>
|
||||||
|
</openbox_menu>
|
||||||
@@ -0,0 +1,194 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<labwc_config>
|
||||||
|
<!-- настройка кол-ва рабочих столов -->
|
||||||
|
<desktops>
|
||||||
|
<names>
|
||||||
|
<name>1</name>
|
||||||
|
<name>2</name>
|
||||||
|
<name>3</name>
|
||||||
|
<name>4</name>
|
||||||
|
</names>
|
||||||
|
</desktops>
|
||||||
|
|
||||||
|
<!-- настройка поведения окон от курсора -->
|
||||||
|
<focus>
|
||||||
|
<followMouse>yes</followMouse>
|
||||||
|
<raiseOnFocus>no</raiseOnFocus>
|
||||||
|
</focus>
|
||||||
|
|
||||||
|
<core>
|
||||||
|
<theme>
|
||||||
|
<name>DynamicAether</name>
|
||||||
|
</theme>
|
||||||
|
<windowSwitcher style="thumbnail" preview="yes" outlines="yes" />
|
||||||
|
</core>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- настройка биндов -->
|
||||||
|
<keyboard>
|
||||||
|
<default />
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== РАБОТА С ОКНАМИ ==================== -->
|
||||||
|
|
||||||
|
<!-- закрытие окон -->
|
||||||
|
<keybind key="W-w"> <!-- Win+W -->
|
||||||
|
<action name="Close" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- растянуть окно в полноэкранный режим -->
|
||||||
|
<keybind key="S-W-f"> <!-- Shift+Win+F -->
|
||||||
|
<action name="ToggleFullscreen" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- максимизировать окно. работает в обратную сторону -->
|
||||||
|
<keybind key="W-f"> <!-- Win+F -->
|
||||||
|
<action name="ToggleMaximize" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- свернуть окно -->
|
||||||
|
<keybind key="S-C-f"> <!-- Shift+Ctrl+F -->
|
||||||
|
<action name="Iconify" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- снап окна влево (полэкрана) -->
|
||||||
|
<keybind key="W-;"> <!-- Win+; -->
|
||||||
|
<action name="SnapToEdge" direction="Left" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- снап окна вправо (полэкрана) -->
|
||||||
|
<keybind key="W-'"> <!-- Win+' -->
|
||||||
|
<action name="SnapToEdge" direction="Right" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- cнап окна в левый верхний угол (четверть экрана) -->
|
||||||
|
<keybind key="W-p"> <!-- Win+[ -->
|
||||||
|
<action name="SnapToEdge" direction="up-Left" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- cнап окна в левый нижний угол (четверть экрана) -->
|
||||||
|
<keybind key="W-,"> <!-- Win+. -->
|
||||||
|
<action name="SnapToEdge" direction="down-Left" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- cнап окна в правый верхний угол (четверть экрана) -->
|
||||||
|
<keybind key="W-]"> <!-- Win+] -->
|
||||||
|
<action name="SnapToEdge" direction="up-Right" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- cнап окна в правый нижний угол (четверть экрана) -->
|
||||||
|
<keybind key="W-/"> <!-- Win+/ -->
|
||||||
|
<action name="SnapToEdge" direction="down-Right" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- cнап окна вверх (полэкрана) -->
|
||||||
|
<keybind key="W-["> <!-- Win+] -->
|
||||||
|
<action name="SnapToEdge" direction="up" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- cнап окна вниз (полэкрана) -->
|
||||||
|
<keybind key="W-."> <!-- Win+] -->
|
||||||
|
<action name="SnapToEdge" direction="down" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- переместить окно на левый монитор -->
|
||||||
|
<keybind key="A-S-a"> <!-- Right Ctrl + <- (left) -->
|
||||||
|
<action name="MoveToOutput" direction="left" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- переместить окно на правый монитор -->
|
||||||
|
<keybind key="A-S-d"> <!-- Right Ctrl + -> (right) -->
|
||||||
|
<action name="MoveToOutput" direction="right" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- ==================== РАБОТА С РАБОЧИМИ СТОЛАМИ ==================== -->
|
||||||
|
|
||||||
|
<!-- перейти на раб стол 1 -->
|
||||||
|
<keybind key="W-1"> <!-- Win+1 -->
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>1</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- перейти на раб стол 2 -->
|
||||||
|
<keybind key="W-2"> <!-- Win+2 -->
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>2</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- перейти на раб стол 3 -->
|
||||||
|
<keybind key="W-3"> <!-- Win+3 -->
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>3</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- перейти на раб стол 4 -->
|
||||||
|
<keybind key="W-4"> <!-- Win+4 -->
|
||||||
|
<action name="GoToDesktop">
|
||||||
|
<to>4</to>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- ==================== ЗАПУСК ПРИЛОЖЕНИЙ ==================== -->
|
||||||
|
|
||||||
|
<!-- запустить меню приложений(wofi) -->
|
||||||
|
<keybind key="W-space"> <!-- Win+Space -->
|
||||||
|
<action name="Execute" command="wofi --show drun" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- запустить терминал(alacritty) -->
|
||||||
|
<keybind key="W-return"> <!-- Win+Return(enter) -->
|
||||||
|
<action name="Execute" command="alacritty --config-file ~/.config/aether/theme/alacritty.toml" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- запустить проводник(dolphin) -->
|
||||||
|
<keybind key="W-e"> <!-- Win+E -->
|
||||||
|
<action name="Execute" command="dolphin" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- заблокировать пк -->
|
||||||
|
<keybind key="W-l"> <!-- Win+L -->
|
||||||
|
<action name="Execute" command="hyprlock" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- сделать скриншот области(скриншот не сохраняется на диск) -->
|
||||||
|
<keybind key="W-S-s"> <!-- Shift+Win+S -->
|
||||||
|
<action name="Execute">
|
||||||
|
<command>sh -c 'grim -g "$(slurp)" - | wl-copy'</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- запустить clipboard -->
|
||||||
|
<keybind key="C-W-v"> <!-- Ctrl+Win+v -->
|
||||||
|
<action name="Execute">
|
||||||
|
<command>~/.config/wofi/cliphist-img.sh</command>
|
||||||
|
</action>
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ==================== УПРАВЛЕНИЕ МУЛЬТИМЕДИЕЙ ====================-->
|
||||||
|
|
||||||
|
<!-- остановить/запустить -->
|
||||||
|
<keybind key="A-R-s"> <!-- Right Alt+s -->
|
||||||
|
<action name="Execute" command="playerctl --player=spotify,%any play-pause" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- следующий трек -->
|
||||||
|
<keybind key="A-R-d"> <!-- Right Alt+d -->
|
||||||
|
<action name="Execute" command="playerctl --player=spotify,%any next" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
<!-- предыдущий трек -->
|
||||||
|
<keybind key="A-R-a"> <!-- Right Alt+a -->
|
||||||
|
<action name="Execute" command="playerctl --player=spotify,%any previous" />
|
||||||
|
</keybind>
|
||||||
|
|
||||||
|
</keyboard>
|
||||||
|
|
||||||
|
</labwc_config>
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# очистка clipboard
|
||||||
|
cliphist wipe &
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# цвет рамки active и inactive
|
||||||
|
window.active.border.color: #F9EDE4
|
||||||
|
window.inactive.border.color: #141414
|
||||||
|
|
||||||
|
# цвет фона заголовка active и inactive
|
||||||
|
window.active.title.bg.color: #141414
|
||||||
|
window.inactive.title.bg.color: #141414
|
||||||
|
|
||||||
|
# цвет текста заголовка окна
|
||||||
|
window.active.label.text.color: #F9EDE4
|
||||||
|
window.inactive.label.text.color: #F9EDE4
|
||||||
|
|
||||||
|
# цвет иконок кнопок для АКТИВНОГО окна
|
||||||
|
window.active.button.unpressed.image.color: #F9EDE4
|
||||||
|
|
||||||
|
# цвет иконок кнопок для НЕАКТИВНОГО окна (ОБЯЗАТЕЛЬНЫЙ КЛЮЧ LABWC)
|
||||||
|
window.inactive.button.image.color: #F9EDE4
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
window.active.title.bg: #040608
|
||||||
|
window.active.title.text: #D4CFCB
|
||||||
|
window.active.border.color: #040608
|
||||||
|
window.inactive.title.bg: #040608
|
||||||
|
window.inactive.title.text: #D4CFCB
|
||||||
|
window.inactive.border.color: #040608
|
||||||
|
window.active.border.width: 2
|
||||||
|
window.inactive.border.width: 1
|
||||||
Executable
+41
@@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
TARGET_FILE="$HOME/.config/aether/theme/waybar.css"
|
||||||
|
THEME_FILE="$HOME/.config/labwc/themerc-override"
|
||||||
|
|
||||||
|
BG_FOLDER="$HOME/.config/aether/theme/backgrounds"
|
||||||
|
WALLPAPER=$(find "$BG_FOLDER" -type f | head -n 1)
|
||||||
|
|
||||||
|
if [ -f "$TARGET_FILE" ]; then
|
||||||
|
BG_COLOR=$(grep "background" "$TARGET_FILE" | awk '{print $3}' | tr -d ';')
|
||||||
|
FG_COLOR=$(grep "foreground" "$TARGET_FILE" | awk '{print $3}' | tr -d ';')
|
||||||
|
|
||||||
|
if [ ! -z "$BG_COLOR" ] && [ ! -z "$FG_COLOR" ]; then
|
||||||
|
cat << EOF > "$THEME_FILE"
|
||||||
|
# цвет рамки active и inactive
|
||||||
|
window.active.border.color: $FG_COLOR
|
||||||
|
window.inactive.border.color: $BG_COLOR
|
||||||
|
|
||||||
|
# цвет фона заголовка active и inactive
|
||||||
|
window.active.title.bg.color: $BG_COLOR
|
||||||
|
window.inactive.title.bg.color: $BG_COLOR
|
||||||
|
|
||||||
|
# цвет текста заголовка окна
|
||||||
|
window.active.label.text.color: $FG_COLOR
|
||||||
|
window.inactive.label.text.color: $FG_COLOR
|
||||||
|
|
||||||
|
# цвет иконок кнопок для АКТИВНОГО окна
|
||||||
|
window.active.button.unpressed.image.color: $FG_COLOR
|
||||||
|
|
||||||
|
# цвет иконок кнопок для НЕАКТИВНОГО окна (ОБЯЗАТЕЛЬНЫЙ КЛЮЧ LABWC)
|
||||||
|
window.inactive.button.image.color: $FG_COLOR
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
killall swaybg 2>/dev/null
|
||||||
|
|
||||||
|
if [ ! -z "$WALLPAPER" ] && [ -f "$WALLPAPER" ]; then
|
||||||
|
swaybg -m fill -i "$WALLPAPER" &
|
||||||
|
else
|
||||||
|
swaybg -c "$BG_COLOR" &
|
||||||
|
fi
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
стек:
|
||||||
|
labwc
|
||||||
|
waybar
|
||||||
|
swaylock(замена hyprlock)
|
||||||
|
swayidle(замена hypridle)
|
||||||
|
polkit-gnome(замена hyprpolkit)
|
||||||
|
dolphin
|
||||||
|
kate
|
||||||
|
google-chrome
|
||||||
|
pipewire
|
||||||
|
kitty(alacritty)
|
||||||
|
v2ray
|
||||||
|
v2rayA
|
||||||
|
telegram
|
||||||
|
htop
|
||||||
|
gparted
|
||||||
|
pavucontrol
|
||||||
|
qdirstat
|
||||||
|
easyeffects
|
||||||
|
lsp-plugins-lv2
|
||||||
|
obsidian
|
||||||
|
ristretto
|
||||||
|
mpv
|
||||||
|
wofi
|
||||||
|
cliphist
|
||||||
|
sddm
|
||||||
|
pango
|
||||||
|
xorg-server-xwayland
|
||||||
|
mesa-dri
|
||||||
|
nvidia-open-dkms
|
||||||
|
wl-clipboard
|
||||||
|
gtk-layer-shell
|
||||||
|
grim
|
||||||
|
slurp
|
||||||
|
swaybg
|
||||||
|
mako
|
||||||
|
seatd
|
||||||
|
dbus
|
||||||
|
polkit
|
||||||
|
fontconfig
|
||||||
|
noto-fonts-ttf
|
||||||
|
ttf-dejavu
|
||||||
|
alsa-pipewire
|
||||||
|
wireplumber
|
||||||
|
xdg-desktop-portal-wlr
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
qt6-wayland
|
||||||
|
qt5-wayland
|
||||||
|
base-system
|
||||||
|
void-repo-nonfree
|
||||||
|
fuse
|
||||||
|
fuse-common
|
||||||
|
ca-certificates
|
||||||
|
curl
|
||||||
|
xdg-utils
|
||||||
|
dhcpcd
|
||||||
|
sudo
|
||||||
|
acpid
|
||||||
|
breeze-icons
|
||||||
|
ffmpeg
|
||||||
|
libnotify
|
||||||
|
ttf-jetbrains-mono
|
||||||
|
adwaita-icon-theme
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
unzip
|
||||||
|
zip
|
||||||
|
p7zip
|
||||||
|
qt5ct
|
||||||
|
qt6ct
|
||||||
|
linux-firmware
|
||||||
|
ttf-font-awesome
|
||||||
|
|
||||||
|
|
||||||
|
aether(буду писать замену)
|
||||||
|
|
||||||
|
установка чистого void linux
|
||||||
|
|
||||||
|
обновление системы
|
||||||
|
sudo xbps-install -Syu
|
||||||
|
sudo xbps-install -u xbps
|
||||||
|
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
PALETTE="$HOME/.config/labwc/palettes/palette-dark.json"
|
||||||
|
|
||||||
|
FG_COLOR=$(jq -r '.FG_COLOR' "$PALETTE")
|
||||||
|
SUB_FG_COLOR=$(jq -r '.SUB_FG_COLOR' "$PALETTE")
|
||||||
|
|
||||||
|
BG_COLOR=$(jq -r '.BG_COLOR' "$PALETTE")
|
||||||
|
SUB_BG_COLOR=$(jq -r '.SUB_BG_COLOR' "$PALETTE")
|
||||||
|
|
||||||
|
ACCENT_COLOR=$(jq -r '.ACCENT_COLOR' "$PALETTE")
|
||||||
|
SUB_ACCENT_COLOR=$(jq -r '.SUB_ACCENT_COLOR' "$PALETTE")
|
||||||
|
|
||||||
|
|
||||||
|
cat << EOF > "$HOME/.config/labwc/themerc-override"
|
||||||
|
# цвет рамки active и inactive
|
||||||
|
window.active.border.color: $FG_COLOR
|
||||||
|
window.inactive.border.color: $BG_COLOR
|
||||||
|
|
||||||
|
# цвет фона заголовка active и inactive
|
||||||
|
window.active.title.bg.color: $FG_COLOR
|
||||||
|
window.inactive.title.bg.color: $FG_COLOR
|
||||||
|
|
||||||
|
# цвет текста заголовка окна
|
||||||
|
window.active.label.text.color: $BG_COLOR
|
||||||
|
window.inactive.label.text.color: $BG_COLOR
|
||||||
|
|
||||||
|
# цвет иконок кнопок для АКТИВНОГО окна
|
||||||
|
window.active.button.unpressed.image.color: $BG_COLOR
|
||||||
|
|
||||||
|
# цвет иконок кнопок для НЕАКТИВНОГО окна
|
||||||
|
window.inactive.button.image.color: $BG_COLOR
|
||||||
|
EOF
|
||||||
|
|
||||||
|
killall swaybg 2>/dev/null
|
||||||
|
|
||||||
|
swaybg \
|
||||||
|
-m fill \
|
||||||
|
-i "$HOME/.config/labwc/backgrounds/voidlinux_bg_dark.png" &
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cat << EOF > "$HOME/.config/labwc/themerc-override"
|
||||||
|
# цвет рамки active и inactive
|
||||||
|
window.active.border.color: #ECE7DD
|
||||||
|
window.inactive.border.color: #141414
|
||||||
|
|
||||||
|
# цвет фона заголовка active и inactive
|
||||||
|
window.active.title.bg.color: #ECE7DD
|
||||||
|
window.inactive.title.bg.color: #ECE7DD
|
||||||
|
|
||||||
|
# цвет текста заголовка окна
|
||||||
|
window.active.label.text.color: #141414
|
||||||
|
window.inactive.label.text.color: #141414
|
||||||
|
|
||||||
|
# цвет иконок кнопок для АКТИВНОГО окна
|
||||||
|
window.active.button.unpressed.image.color: #141414
|
||||||
|
|
||||||
|
# цвет иконок кнопок для НЕАКТИВНОГО окна (ОБЯЗАТЕЛЬНЫЙ КЛЮЧ LABWC)
|
||||||
|
window.inactive.button.image.color: #141414
|
||||||
|
EOF
|
||||||
|
|
||||||
|
killall swaybg 2>/dev/null
|
||||||
|
|
||||||
|
swaybg -m fill -i "$HOME/.config/labwc/backgrounds/voidlinux_bg_light.png" &
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
[Appearance]
|
||||||
|
color_scheme_path=/usr/share/qt6ct/colors/darker.conf
|
||||||
|
custom_palette=true
|
||||||
|
icon_theme=breeze-dark
|
||||||
|
standard_dialogs=default
|
||||||
|
style=Fusion
|
||||||
|
|
||||||
|
[Fonts]
|
||||||
|
fixed="JetBrainsMono Nerd Font,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular,0,0"
|
||||||
|
general="JetBrainsMonoNL Nerd Font,10,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular,0,0"
|
||||||
|
|
||||||
|
[Interface]
|
||||||
|
activate_item_on_single_click=1
|
||||||
|
buttonbox_layout=2
|
||||||
|
cursor_flash_time=1000
|
||||||
|
dialog_buttons_have_icons=1
|
||||||
|
double_click_interval=400
|
||||||
|
gui_effects=@Invalid()
|
||||||
|
keyboard_scheme=2
|
||||||
|
menus_have_icons=true
|
||||||
|
show_shortcuts_in_context_menus=true
|
||||||
|
stylesheets=@Invalid()
|
||||||
|
toolbutton_style=4
|
||||||
|
underline_shortcut=1
|
||||||
|
wheel_scroll_lines=3
|
||||||
|
|
||||||
|
[SettingsWindow]
|
||||||
|
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m\0\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\xde\0\0\x2m)
|
||||||
|
|
||||||
|
[Troubleshooting]
|
||||||
|
force_raster_widgets=1
|
||||||
|
ignored_applications=@Invalid()
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"layer": "top",
|
||||||
|
"position": "top",
|
||||||
|
"height": 25,
|
||||||
|
"spacing": 0,
|
||||||
|
"modules-left": ["wlr/taskbar"],
|
||||||
|
"modules-center": ["clock"],
|
||||||
|
"modules-right": ["network", "custom/spotify", "custom/v2raya", "custom/language", "pulseaudio", "cpu", "memory", "tray"],
|
||||||
|
|
||||||
|
"wlr/taskbar": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"icon-size": 15,
|
||||||
|
"tooltip-format": "{title}",
|
||||||
|
"on-click": "activate"
|
||||||
|
},
|
||||||
|
"custom/language": {
|
||||||
|
"exec": "xkblayout-state print %s | tr 'a-z' 'A-Z'",
|
||||||
|
"interval": 1,
|
||||||
|
"format": " {} "
|
||||||
|
},
|
||||||
|
"custom/spotify": {
|
||||||
|
"format": "[{}] ",
|
||||||
|
"exec": "playerctl metadata --format '{{artist}} - {{title}}' spotify 2>/dev/null || echo ''",
|
||||||
|
"on-click": "ironbar bar spotify-popup toggle-popup spotify-music",
|
||||||
|
"interval": 3,
|
||||||
|
"max-length": 50
|
||||||
|
},
|
||||||
|
"custom/v2raya": {
|
||||||
|
"format": "PROXY{}",
|
||||||
|
"return-type": "json",
|
||||||
|
"interval": 2,
|
||||||
|
"exec": "/home/ivan/.config/waybar/v2raya-toggle.sh",
|
||||||
|
"on-click": "/home/ivan/.config/waybar/v2raya-toggle.sh toggle",
|
||||||
|
"signal": 10
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%H:%M}",
|
||||||
|
"format-alt": "{:%d-%m-%Y}"
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"format": " {usage}%",
|
||||||
|
"tooltip": false,
|
||||||
|
"on-click": "alacritty -e htop"
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": " {}%"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"min-length": 10,
|
||||||
|
"format-wifi": " {bandwidthDownBytes}",
|
||||||
|
"format-ethernet": " {bandwidthDownBytes}",
|
||||||
|
"format-disconnected": "⚠ DONT",
|
||||||
|
"interval": 1
|
||||||
|
},
|
||||||
|
"pulseaudio": {
|
||||||
|
"format": " {volume}%",
|
||||||
|
"format-muted": " Muted",
|
||||||
|
"on-click": "pavucontrol"
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 10,
|
||||||
|
"spacing": 15
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
* {
|
||||||
|
font-family: "JetBrainsMono Nerd Font", "Font Awesome 7 Free", "Font Awesome 7 Free Solid", "Font Awesome 7 Brands", sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@import "/home/ivan/.config/aether/theme/waybar.css";
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background: alpha(@background, 0.75);
|
||||||
|
color: @foreground;
|
||||||
|
min-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#network,
|
||||||
|
#pulseaudio,
|
||||||
|
#taskbar,
|
||||||
|
#custom-spotify,
|
||||||
|
#tray {
|
||||||
|
padding: 0 10px;
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#taskbar button {
|
||||||
|
color: alpha(@foreground, 0.6);
|
||||||
|
padding: 0 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#taskbar button.active {
|
||||||
|
background-color: alpha(@foreground, 0.2);
|
||||||
|
box-shadow: inset 0 -2px 0 0 @foreground;
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-v2raya.enabled {
|
||||||
|
color: @foreground;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-v2raya.disabled {
|
||||||
|
color: @background;
|
||||||
|
}
|
||||||
Executable
+19
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Проверяем, запущен ли процесс v2rayA
|
||||||
|
if pgrep -x "v2raya" > /dev/null; then
|
||||||
|
if [ "$1" = "toggle" ]; then
|
||||||
|
sudo systemctl stop v2raya.service 2>/dev/null || sudo killall v2raya
|
||||||
|
echo "{\"text\": \" \", \"class\": \"disabled\", \"tooltip\": \"v2rayA выключен\"}"
|
||||||
|
else
|
||||||
|
echo "{\"text\": \" \", \"class\": \"enabled\", \"tooltip\": \"v2rayA включен\"}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ "$1" = "toggle" ]; then
|
||||||
|
sudo systemctl start v2raya.service 2>/dev/null || sudo v2raya --daemon &
|
||||||
|
echo "{\"text\": \" \", \"class\": \"enabled\", \"tooltip\": \"v2rayA включен\"}"
|
||||||
|
else
|
||||||
|
echo "{\"text\": \" \", \"class\": \"disabled\", \"tooltip\": \"v2rayA выключен\"}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
Executable
+61
@@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
export WAYLAND_DISPLAY=wayland-0
|
||||||
|
export XDG_RUNTIME_DIR=/run/user/$(id -u)
|
||||||
|
|
||||||
|
thumb_dir="${XDG_CACHE_HOME:-$HOME/.cache}/cliphist/thumbs"
|
||||||
|
mkdir -p "$thumb_dir"
|
||||||
|
|
||||||
|
make_thumb() { # $1 - исходник, $2 - результат
|
||||||
|
if command -v gdk-pixbuf-thumbnailer >/dev/null 2>&1; then
|
||||||
|
gdk-pixbuf-thumbnailer -s 256 "$1" "$2" 2>/dev/null
|
||||||
|
elif command -v magick >/dev/null 2>&1; then
|
||||||
|
magick "$1" -resize '256x256>' "$2" 2>/dev/null
|
||||||
|
elif command -v convert >/dev/null 2>&1; then
|
||||||
|
convert "$1" -resize '256x256>' "$2" 2>/dev/null
|
||||||
|
fi
|
||||||
|
# если тулза нет/ошибка — отдаём оригинал, wofi сам смасштабирует
|
||||||
|
[ -s "$2" ] || cp -f "$1" "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
wofi_input=""
|
||||||
|
|
||||||
|
while read -r line; do
|
||||||
|
[[ "$line" == *"<meta http-equiv="* ]] && continue
|
||||||
|
[[ -z "$line" ]] && continue
|
||||||
|
|
||||||
|
id="${line%%[[:space:]]*}"
|
||||||
|
|
||||||
|
if [[ "$line" == *binary* ]]; then
|
||||||
|
thumb_path="${thumb_dir}/${id}.png"
|
||||||
|
|
||||||
|
if [ ! -s "$thumb_path" ]; then
|
||||||
|
tmp="$(mktemp)"
|
||||||
|
# ВАЖНО: передаём строку через pipe,
|
||||||
|
# иначе decode прочитает stdin цикла и «съест» список
|
||||||
|
printf '%s\n' "$line" | cliphist decode > "$tmp" 2>/dev/null
|
||||||
|
[ -s "$tmp" ] && make_thumb "$tmp" "$thumb_path"
|
||||||
|
rm -f "$tmp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -s "$thumb_path" ]; then
|
||||||
|
wofi_input+="img:${thumb_path}\n"
|
||||||
|
else
|
||||||
|
wofi_input+="${line}\n"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
wofi_input+="${line}\n"
|
||||||
|
fi
|
||||||
|
done <<< "$(cliphist list)"
|
||||||
|
|
||||||
|
choice="$(printf '%b' "$wofi_input" | wofi -I --dmenu --cache-file=/dev/null \
|
||||||
|
-Dimage_size=100 -Dynamic_lines=true --prompt "Буфер обмена")"
|
||||||
|
|
||||||
|
[ -z "$choice" ] && exit 0
|
||||||
|
|
||||||
|
if [[ "$choice" == img:* ]]; then
|
||||||
|
f="${choice#img:}"
|
||||||
|
id="$(basename "$f" .png)"
|
||||||
|
printf '%s\t' "$id" | cliphist decode | wl-copy
|
||||||
|
else
|
||||||
|
printf '%s\n' "$choice" | cliphist decode | wl-copy
|
||||||
|
fi
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
@import "/home/ivan/.config/aether/theme/wofi.css";
|
||||||
|
|
||||||
|
#img {
|
||||||
|
padding: 5px;
|
||||||
|
width: 120px;
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
window {
|
||||||
|
background-color: @bg;
|
||||||
|
border: 2px solid @gray3;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
background-color: @bg;
|
||||||
|
color: @fg;
|
||||||
|
border: 1px solid @gray2;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:selected {
|
||||||
|
background-color: @gray1;
|
||||||
|
color: @fg_bright;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
color: @fg;
|
||||||
|
background-color: @bg;
|
||||||
|
padding: 5px;
|
||||||
|
margin: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:selected {
|
||||||
|
background-color: @gray1;
|
||||||
|
color: @fg_bright;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollbar {
|
||||||
|
background-color: @bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollbar slider {
|
||||||
|
background-color: @gray2;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollbar slider:hover {
|
||||||
|
background-color: @gray3;
|
||||||
|
}
|
||||||
@@ -1,252 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# setup-sddm-labwc.sh
|
|
||||||
# Alpine Linux / OpenRC: SDDM + elogind + LabWC.
|
|
||||||
#
|
|
||||||
# Запуск от root:
|
|
||||||
# chmod +x setup-sddm-labwc.sh
|
|
||||||
# ./setup-sddm-labwc.sh ivan
|
|
||||||
#
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
USER_NAME="${1:-ivan}"
|
|
||||||
HOME_DIR="/home/$USER_NAME"
|
|
||||||
PROFILE="$HOME_DIR/.profile"
|
|
||||||
|
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
|
||||||
echo "[!] Запусти скрипт от root."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f /etc/alpine-release ]; then
|
|
||||||
echo "[!] Этот скрипт только для Alpine Linux."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! id "$USER_NAME" >/dev/null 2>&1; then
|
|
||||||
echo "[!] Пользователь не найден: $USER_NAME"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "=================================================="
|
|
||||||
echo " Alpine: SDDM + elogind + LabWC"
|
|
||||||
echo "=================================================="
|
|
||||||
echo
|
|
||||||
echo "[*] Пользователь: $USER_NAME"
|
|
||||||
echo "[*] Alpine: $(cat /etc/alpine-release)"
|
|
||||||
echo
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# Пакеты
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "[*] Обновление индекса APK..."
|
|
||||||
apk update
|
|
||||||
|
|
||||||
echo "[*] Установка зависимостей display manager..."
|
|
||||||
apk add \
|
|
||||||
dbus \
|
|
||||||
seatd \
|
|
||||||
elogind \
|
|
||||||
elogind-openrc \
|
|
||||||
sddm \
|
|
||||||
sddm-openrc \
|
|
||||||
xorg-server \
|
|
||||||
mesa \
|
|
||||||
mesa-dri-gallium \
|
|
||||||
xf86-input-libinput
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# Удаление старых/неверных конфигов SDDM
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "[*] Очистка старой конфигурации SDDM..."
|
|
||||||
|
|
||||||
mkdir -p /etc/sddm.conf.d
|
|
||||||
|
|
||||||
rm -f /etc/sddm.conf.d/wayland.conf
|
|
||||||
rm -f /etc/sddm.conf.d/labwc.conf
|
|
||||||
rm -f /etc/sddm.conf.d/00-general.conf
|
|
||||||
|
|
||||||
cat > /etc/sddm.conf.d/00-general.conf << 'EOF'
|
|
||||||
[General]
|
|
||||||
DisplayServer=x11
|
|
||||||
|
|
||||||
[Autologin]
|
|
||||||
Relogin=false
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod 644 /etc/sddm.conf.d/00-general.conf
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# Удаление старого getty-autologin wrapper
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "[*] Удаление старого getty-autologin wrapper..."
|
|
||||||
rm -f /usr/local/sbin/autologin-login
|
|
||||||
|
|
||||||
# /etc/inittab намеренно не меняем.
|
|
||||||
# kill -HUP 1 намеренно не вызываем.
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# Группы пользователя
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "[*] Настройка групп пользователя..."
|
|
||||||
|
|
||||||
for GROUP_NAME in wheel seat video input; do
|
|
||||||
if ! getent group "$GROUP_NAME" >/dev/null 2>&1; then
|
|
||||||
echo "[*] Создание группы: $GROUP_NAME"
|
|
||||||
addgroup "$GROUP_NAME"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if id -nG "$USER_NAME" | tr ' ' '\n' | grep -qx "$GROUP_NAME"; then
|
|
||||||
echo "[+] $USER_NAME уже в группе $GROUP_NAME."
|
|
||||||
else
|
|
||||||
echo "[*] Добавление $USER_NAME в группу $GROUP_NAME..."
|
|
||||||
addgroup "$USER_NAME" "$GROUP_NAME"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# Сессия LabWC в меню SDDM
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "[*] Создание записи LabWC для SDDM..."
|
|
||||||
|
|
||||||
mkdir -p /usr/share/wayland-sessions
|
|
||||||
|
|
||||||
cat > /usr/share/wayland-sessions/labwc.desktop << 'EOF'
|
|
||||||
[Desktop Entry]
|
|
||||||
Name=LabWC
|
|
||||||
Comment=LabWC Wayland compositor
|
|
||||||
Exec=labwc
|
|
||||||
TryExec=labwc
|
|
||||||
Type=Application
|
|
||||||
DesktopNames=labwc
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod 644 /usr/share/wayland-sessions/labwc.desktop
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# Конфигурация LabWC пользователя
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "[*] Настройка LabWC..."
|
|
||||||
|
|
||||||
mkdir -p "$HOME_DIR/.config/labwc"
|
|
||||||
|
|
||||||
cat > "$HOME_DIR/.config/labwc/environment" << 'EOF'
|
|
||||||
XDG_CURRENT_DESKTOP=labwc
|
|
||||||
XDG_SESSION_DESKTOP=labwc
|
|
||||||
XDG_SESSION_TYPE=wayland
|
|
||||||
|
|
||||||
MOZ_ENABLE_WAYLAND=1
|
|
||||||
QT_QPA_PLATFORM=wayland
|
|
||||||
SDL_VIDEODRIVER=wayland
|
|
||||||
|
|
||||||
LIBSEAT_BACKEND=seatd
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat > "$HOME_DIR/.config/labwc/autostart" << 'EOF'
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if command -v nm-applet >/dev/null 2>&1; then
|
|
||||||
nm-applet &
|
|
||||||
fi
|
|
||||||
|
|
||||||
if command -v waybar >/dev/null 2>&1; then
|
|
||||||
waybar &
|
|
||||||
fi
|
|
||||||
|
|
||||||
if command -v mako >/dev/null 2>&1; then
|
|
||||||
mako &
|
|
||||||
fi
|
|
||||||
|
|
||||||
if command -v pipewire >/dev/null 2>&1 &&
|
|
||||||
! pgrep -x pipewire >/dev/null 2>&1
|
|
||||||
then
|
|
||||||
pipewire &
|
|
||||||
fi
|
|
||||||
|
|
||||||
if command -v wireplumber >/dev/null 2>&1 &&
|
|
||||||
! pgrep -x wireplumber >/dev/null 2>&1
|
|
||||||
then
|
|
||||||
wireplumber &
|
|
||||||
fi
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod 755 "$HOME_DIR/.config/labwc/autostart"
|
|
||||||
chown -R "$USER_NAME:$USER_NAME" "$HOME_DIR/.config"
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# Удаление старого запуска LabWC из login shell
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "[*] Отключение старого запуска LabWC из .profile..."
|
|
||||||
|
|
||||||
if [ -f "$PROFILE" ] && grep -qF '# LABWC-AUTOSTART' "$PROFILE"; then
|
|
||||||
cp "$PROFILE" "$PROFILE.before-sddm.bak"
|
|
||||||
sed -i '/^# LABWC-AUTOSTART$/,$d' "$PROFILE"
|
|
||||||
chown "$USER_NAME:$USER_NAME" "$PROFILE"
|
|
||||||
echo "[+] LABWC-AUTOSTART удалён из .profile."
|
|
||||||
else
|
|
||||||
echo "[+] Блока LABWC-AUTOSTART в .profile нет."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
# OpenRC
|
|
||||||
# ------------------------------------------------------------
|
|
||||||
|
|
||||||
echo "[*] Включение служб OpenRC..."
|
|
||||||
|
|
||||||
rc-update add dbus default 2>/dev/null || true
|
|
||||||
rc-update add seatd default 2>/dev/null || true
|
|
||||||
rc-update add elogind default 2>/dev/null || true
|
|
||||||
rc-update add sddm default 2>/dev/null || true
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "=================================================="
|
|
||||||
echo " Проверка"
|
|
||||||
echo "=================================================="
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "[*] Установленные пакеты:"
|
|
||||||
apk info -e dbus seatd elogind elogind-openrc sddm sddm-openrc \
|
|
||||||
xorg-server mesa mesa-dri-gallium xf86-input-libinput || true
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "[*] Группы пользователя:"
|
|
||||||
id "$USER_NAME"
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "[*] Запись LabWC:"
|
|
||||||
cat /usr/share/wayland-sessions/labwc.desktop
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "[*] DRM:"
|
|
||||||
ls -la /dev/dri 2>&1 || true
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "=================================================="
|
|
||||||
echo " Готово"
|
|
||||||
echo "=================================================="
|
|
||||||
echo
|
|
||||||
echo "[!] В этом скрипте SDDM специально НЕ запускается."
|
|
||||||
echo "[!] Это нужно, чтобы не повторять проблему stale-процесса."
|
|
||||||
echo
|
|
||||||
echo "Теперь выполни:"
|
|
||||||
echo
|
|
||||||
echo " reboot"
|
|
||||||
echo
|
|
||||||
echo "После перезагрузки порядок будет такой:"
|
|
||||||
echo " 1. dbus"
|
|
||||||
echo " 2. seatd"
|
|
||||||
echo " 3. elogind"
|
|
||||||
echo " 4. sddm"
|
|
||||||
echo
|
|
||||||
echo "В SDDM войди пользователем $USER_NAME"
|
|
||||||
echo "и в меню сессий выбери LabWC."
|
|
||||||
echo
|
|
||||||
Binary file not shown.
Executable
+256
@@ -0,0 +1,256 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# colors for output
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
# helpers
|
||||||
|
info() {
|
||||||
|
printf '%b\n' "${BLUE}>>$1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
success() {
|
||||||
|
printf '%b\n' "${GREEN}>>$1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
printf '%b\n' "${RED}>>ERROR: $1${NC}" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# 0. Check environment
|
||||||
|
|
||||||
|
if [ "$(id -u)" -eq 0 ]; then
|
||||||
|
error "do not run this installer as root"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f /etc/alpine-release ]; then
|
||||||
|
error "Alpine Linux is required"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "$HOME/labwc-alpine" ]; then
|
||||||
|
error "labwc-alpine directory not found in $HOME"
|
||||||
|
printf '%b\n' "${RED}>>Please clone the repository first:${NC}"
|
||||||
|
printf '%b\n' "${RED}>>git clone https://zenithcode.duckdns.org/s13bby/labwc-alpine.git${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "$HOME/labwc-alpine/.git" ]; then
|
||||||
|
error "$HOME/labwc-alpine is not a git repository"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v sudo >/dev/null 2>&1; then
|
||||||
|
error "sudo is required"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# 1. Begin
|
||||||
|
|
||||||
|
echo "┌──────────────────────────────────────┐"
|
||||||
|
echo "│ zenithcode.duckdns.org │"
|
||||||
|
echo "│ welcome to installer labwc-alpine │"
|
||||||
|
echo "│ by s13bby │"
|
||||||
|
echo "└──────────────────────────────────────┘"
|
||||||
|
|
||||||
|
|
||||||
|
# 2. Update and upgrade system
|
||||||
|
|
||||||
|
info "updating distro repositories..."
|
||||||
|
sudo apk update
|
||||||
|
|
||||||
|
info "upgrading system packages..."
|
||||||
|
sudo apk upgrade
|
||||||
|
|
||||||
|
success "distro repositories and system are up-to-date"
|
||||||
|
|
||||||
|
|
||||||
|
# 3. Install needed packages
|
||||||
|
|
||||||
|
info "installing needed packages..."
|
||||||
|
|
||||||
|
sudo apk add \
|
||||||
|
gcc \
|
||||||
|
g++ \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
cmake \
|
||||||
|
libcurl \
|
||||||
|
libcurl-dev \
|
||||||
|
opencv \
|
||||||
|
opencv-dev \
|
||||||
|
waybar \
|
||||||
|
mako \
|
||||||
|
swaybg \
|
||||||
|
wofi \
|
||||||
|
font-noto \
|
||||||
|
font-dejavu \
|
||||||
|
wl-clipboard \
|
||||||
|
xdg-desktop-portal \
|
||||||
|
xdg-desktop-portal-gtk \
|
||||||
|
pipewire \
|
||||||
|
wireplumber \
|
||||||
|
alsa-utils \
|
||||||
|
networkmanager \
|
||||||
|
nm-applet \
|
||||||
|
pcmanfm-gtk3 \
|
||||||
|
firefox \
|
||||||
|
swaylock \
|
||||||
|
playerctl \
|
||||||
|
font-jetbrains-mono
|
||||||
|
|
||||||
|
success "all packages installed"
|
||||||
|
|
||||||
|
|
||||||
|
# 4. Configure NetworkManager
|
||||||
|
|
||||||
|
info "configuring NetworkManager..."
|
||||||
|
|
||||||
|
if rc-update show default 2>/dev/null | grep -q "networkmanager"; then
|
||||||
|
success "networkmanager already configured"
|
||||||
|
else
|
||||||
|
sudo rc-update add networkmanager default
|
||||||
|
success "networkmanager added to default runlevel"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if rc-service networkmanager status >/dev/null 2>&1; then
|
||||||
|
success "networkmanager is already running"
|
||||||
|
else
|
||||||
|
sudo rc-service networkmanager start
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# 5. Build zenith-cli
|
||||||
|
|
||||||
|
if [ -d "$HOME/zenith-cli/.git" ]; then
|
||||||
|
info "zenith-cli already exists, updating..."
|
||||||
|
|
||||||
|
cd "$HOME/zenith-cli"
|
||||||
|
git pull
|
||||||
|
else
|
||||||
|
if [ -e "$HOME/zenith-cli" ]; then
|
||||||
|
error "$HOME/zenith-cli exists but is not a git repository"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
info "cloning zenith-cli repository..."
|
||||||
|
|
||||||
|
git clone \
|
||||||
|
https://zenithcode.duckdns.org/s13bby/zenith-cli.git \
|
||||||
|
"$HOME/zenith-cli"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "$HOME/zenith-cli/build.sh" ]; then
|
||||||
|
error "zenith-cli/build.sh not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
info "making build script executable..."
|
||||||
|
chmod +x "$HOME/zenith-cli/build.sh"
|
||||||
|
|
||||||
|
info "building zenith-cli..."
|
||||||
|
sh "$HOME/zenith-cli/build.sh"
|
||||||
|
|
||||||
|
if [ ! -f "$HOME/zenith-cli/zenith-cli" ]; then
|
||||||
|
error "zenith-cli binary was not created"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
info "installing zenith-cli to ~/.local/bin..."
|
||||||
|
|
||||||
|
mkdir -p "$HOME/.local/bin"
|
||||||
|
|
||||||
|
cp "$HOME/zenith-cli/zenith-cli" "$HOME/.local/bin/zenith-cli"
|
||||||
|
chmod +x "$HOME/.local/bin/zenith-cli"
|
||||||
|
|
||||||
|
if ! grep -Fq 'export PATH="$HOME/.local/bin:$PATH"' "$HOME/.profile" 2>/dev/null; then
|
||||||
|
echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$HOME/.profile"
|
||||||
|
success "added ~/.local/bin to PATH in .profile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make zenith-cli available in the current shell
|
||||||
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
|
||||||
|
success "zenith-cli ready to work"
|
||||||
|
|
||||||
|
|
||||||
|
# 6. Copy configs
|
||||||
|
|
||||||
|
info "creating config directory..."
|
||||||
|
|
||||||
|
mkdir -p "$HOME/.config"
|
||||||
|
|
||||||
|
info "copying dotfiles..."
|
||||||
|
|
||||||
|
for config in hypr labwc waybar wofi qt6ct alacritty; do
|
||||||
|
if [ -d "$HOME/labwc-alpine/configs/$config" ]; then
|
||||||
|
cp -r "$HOME/labwc-alpine/configs/$config" "$HOME/.config/"
|
||||||
|
else
|
||||||
|
error "config directory not found: $config"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -d "$HOME/labwc-alpine/palettes" ]; then
|
||||||
|
cp -r "$HOME/labwc-alpine/palettes" "$HOME/.config/"
|
||||||
|
else
|
||||||
|
error "palettes directory not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
success "dotfiles copied"
|
||||||
|
|
||||||
|
|
||||||
|
# 7. Copy fonts
|
||||||
|
|
||||||
|
info "creating fonts directory..."
|
||||||
|
|
||||||
|
mkdir -p "$HOME/.local/share/fonts"
|
||||||
|
|
||||||
|
if [ -d "$HOME/labwc-alpine/fonts" ]; then
|
||||||
|
cp -r "$HOME/labwc-alpine/fonts/"* "$HOME/.local/share/fonts/"
|
||||||
|
else
|
||||||
|
error "fonts directory not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
info "updating font cache..."
|
||||||
|
fc-cache -fv >/dev/null
|
||||||
|
|
||||||
|
success "fonts copied"
|
||||||
|
|
||||||
|
|
||||||
|
# 8. Copy backgrounds
|
||||||
|
|
||||||
|
info "creating backgrounds directory..."
|
||||||
|
|
||||||
|
mkdir -p "$HOME/backgrounds/"
|
||||||
|
|
||||||
|
if [ -d "$HOME/labwc-alpine/backgrounds" ]; then
|
||||||
|
cp -r "$HOME/labwc-alpine/backgrounds/"* "$HOME/backgrounds/"
|
||||||
|
else
|
||||||
|
error "backgrounds directory not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
success "backgrounds copied"
|
||||||
|
|
||||||
|
|
||||||
|
# 9. Done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "┌──────────────────────────────────────┐"
|
||||||
|
echo "│ zenithcode.duckdns.org │"
|
||||||
|
echo "│ thanks for use my dotfiles │"
|
||||||
|
echo "│ mail: qaws3623@gmail.com by s13bby │"
|
||||||
|
echo "└──────────────────────────────────────┘"
|
||||||
|
|
||||||
|
printf '%b\n' "${GREEN}"
|
||||||
|
printf '%b\n' ">>please reboot system<<"
|
||||||
|
printf '%b\n' "${NC}"
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#0c0c0c
|
||||||
|
#121212
|
||||||
|
#7e49b2
|
||||||
|
#1c1c1c
|
||||||
|
#c8c8c8
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#c8c8c8
|
||||||
|
#1c1c1c
|
||||||
|
#7e49b2
|
||||||
|
#121212
|
||||||
|
#0c0c0c
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#cbb0e6
|
||||||
|
#e6c2c2
|
||||||
|
#e6c2c2
|
||||||
|
#e6c2c2
|
||||||
|
#e6c2c2
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#e6c2c2
|
||||||
|
#e6c2c2
|
||||||
|
#e6c2c2
|
||||||
|
#e6c2c2
|
||||||
|
#cbb0e6
|
||||||
Reference in New Issue
Block a user