mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-29 07:52:50 -05:00
add dms-greeter wrapper
This commit is contained in:
@@ -491,7 +491,6 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Behavior on color { ColorAnimation { duration: Anims.durShort } }
|
|
||||||
Behavior on border.color { ColorAnimation { duration: Anims.durShort } }
|
Behavior on border.color { ColorAnimation { duration: Anims.durShort } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -675,14 +674,6 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: Anims.durShort
|
|
||||||
easing.type: Easing.BezierSpline
|
|
||||||
easing.bezierCurve: Anims.standard
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on border.color {
|
Behavior on border.color {
|
||||||
ColorAnimation {
|
ColorAnimation {
|
||||||
duration: Anims.durShort
|
duration: Anims.durShort
|
||||||
@@ -858,14 +849,6 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: Anims.durShort
|
|
||||||
easing.type: Easing.BezierSpline
|
|
||||||
easing.bezierCurve: Anims.standard
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1024,14 +1007,6 @@ Item {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: Anims.durShort
|
|
||||||
easing.type: Easing.BezierSpline
|
|
||||||
easing.bezierCurve: Anims.standard
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,46 +18,43 @@ The easiest thing is to run `dms greeter install` or `dms` for interactive insta
|
|||||||
|
|
||||||
### Manual
|
### Manual
|
||||||
|
|
||||||
1. Install `greetd` (in most distro's standard repositories)
|
1. Install `greetd` (in most distro's standard repositories) and `quickshell`
|
||||||
2. Create the `dms-greeter` group and add necessary users:
|
2. Clone the dms project to `/etc/xdg/quickshell/dms-greeter`
|
||||||
```bash
|
```bash
|
||||||
sudo groupadd dms-greeter
|
sudo git clone https://github.com/AvengeMedia/DankMaterialShell.git /etc/xdg/quickshell/dms-greeter
|
||||||
sudo usermod -aG dms-greeter greeter
|
|
||||||
sudo usermod -aG dms-greeter $USER
|
|
||||||
```
|
```
|
||||||
3. Set group permissions on DMS directories:
|
3. Copy `assets/dms-greeter` to `/usr/local/bin/dms-greeter`:
|
||||||
```bash
|
```bash
|
||||||
sudo chgrp -R dms-greeter ~/.config/DankMaterialShell
|
sudo cp assets/dms-greeter /usr/local/bin/dms-greeter
|
||||||
sudo chmod -R g+rX ~/.config/DankMaterialShell
|
sudo chmod +x /usr/local/bin/dms-greeter
|
||||||
sudo chgrp -R dms-greeter ~/.local/state/DankMaterialShell
|
|
||||||
sudo chmod -R g+rX ~/.local/state/DankMaterialShell
|
|
||||||
sudo chgrp -R dms-greeter ~/.cache/quickshell
|
|
||||||
sudo chmod -R g+rX ~/.cache/quickshell
|
|
||||||
sudo chgrp -R dms-greeter ~/.config/quickshell
|
|
||||||
sudo chmod -R g+rX ~/.config/quickshell
|
|
||||||
```
|
```
|
||||||
4. Copy `assets/dms-niri.kdl` or `assets/dms-hypr.conf` to `/etc/greetd`
|
4. Create greeter cache directory with proper permissions:
|
||||||
- niri if you want to run the greeter under niri, hypr if you want to run the greeter under Hyprland
|
```bash
|
||||||
5. Copy `assets/greet-niri.sh` or `assets/greet-hyprland.sh` to `/usr/local/bin/start-dms-greetd.sh`
|
sudo mkdir -p /var/cache/dmsgreeter
|
||||||
6. Edit `/etc/greetd/dms-niri.kdl` or `/etc/greetd/dms-hypr.conf` and replace `_DMS_PATH_` with the absolute path to dms, e.g. `/home/joecool/.config/quickshell/dms`
|
sudo chown greeter:greeter /var/cache/dmsgreeter
|
||||||
7. Edit or create `/etc/greetd/config.toml`:
|
sudo chmod 770 /var/cache/dmsgreeter
|
||||||
|
```
|
||||||
|
6. Edit or create `/etc/greetd/config.toml`:
|
||||||
```toml
|
```toml
|
||||||
[terminal]
|
[terminal]
|
||||||
vt = 1
|
vt = 1
|
||||||
|
|
||||||
[default_session]
|
[default_session]
|
||||||
user = "greeter"
|
user = "greeter"
|
||||||
command = "/usr/local/bin/start-dms-greetd.sh"
|
# Change compositor to sway or hyprland if preferred
|
||||||
```
|
command = "/usr/local/bin/dms-greeter --command niri"
|
||||||
8. Create greeter config directory with proper permissions:
|
|
||||||
```bash
|
|
||||||
sudo mkdir -p /etc/greetd/.dms
|
|
||||||
sudo chown greeter:dms-greeter /etc/greetd/.dms
|
|
||||||
sudo chmod 770 /etc/greetd/.dms
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Enable the greeter with `sudo systemctl enable greetd`
|
Enable the greeter with `sudo systemctl enable greetd`
|
||||||
|
|
||||||
|
#### Legacy installation (deprecated)
|
||||||
|
|
||||||
|
If you prefer the old method with separate shell scripts and config files:
|
||||||
|
1. Copy `assets/dms-niri.kdl` or `assets/dms-hypr.conf` to `/etc/greetd`
|
||||||
|
2. Copy `assets/greet-niri.sh` or `assets/greet-hyprland.sh` to `/usr/local/bin/start-dms-greetd.sh`
|
||||||
|
3. Edit the config file and replace `_DMS_PATH_` with your DMS installation path
|
||||||
|
4. Configure greetd to use `/usr/local/bin/start-dms-greetd.sh`
|
||||||
|
|
||||||
### NixOS
|
### NixOS
|
||||||
|
|
||||||
To install the greeter on NixOS add the repo to your flake inputs as described in the readme. Then somewhere in your NixOS config add this to imports:
|
To install the greeter on NixOS add the repo to your flake inputs as described in the readme. Then somewhere in your NixOS config add this to imports:
|
||||||
@@ -78,7 +75,30 @@ programs.dankMaterialShell.greeter = {
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
To run dms in greeter mode you just need to set `DMS_RUN_GREETER=1` in the environment.
|
### Using dms-greeter wrapper (recommended)
|
||||||
|
|
||||||
|
The `dms-greeter` wrapper simplifies running the greeter with any compositor:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dms-greeter --command niri
|
||||||
|
dms-greeter --command hyprland
|
||||||
|
dms-greeter --command sway
|
||||||
|
dms-greeter --command niri -C /path/to/custom-niri.kdl
|
||||||
|
```
|
||||||
|
|
||||||
|
Configure greetd to use it in `/etc/greetd/config.toml`:
|
||||||
|
```toml
|
||||||
|
[terminal]
|
||||||
|
vt = 1
|
||||||
|
|
||||||
|
[default_session]
|
||||||
|
user = "greeter"
|
||||||
|
command = "/usr/local/bin/dms-greeter --command niri"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Manual usage
|
||||||
|
|
||||||
|
To run dms in greeter mode you can also manually set environment variables:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
DMS_RUN_GREETER=1 qs -p /path/to/dms
|
DMS_RUN_GREETER=1 qs -p /path/to/dms
|
||||||
@@ -102,13 +122,13 @@ The greeter uses the `dms-greeter` group for file access permissions, so ensure
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# For core settings (theme, clock formats, etc)
|
# For core settings (theme, clock formats, etc)
|
||||||
sudo ln -sf ~/.config/DankMaterialShell/settings.json /etc/greetd/.dms/settings.json
|
sudo ln -sf ~/.config/DankMaterialShell/settings.json /var/cache/dms-greeter/settings.json
|
||||||
# For state (mainly you would configure wallpaper in this file)
|
# For state (mainly you would configure wallpaper in this file)
|
||||||
sudo ln -sf ~/.local/state/DankMaterialShell/session.json /etc/greetd/.dms/session.json
|
sudo ln -sf ~/.local/state/DankMaterialShell/session.json /var/cache/dms-greeter/session.json
|
||||||
# For wallpaper based theming
|
# For wallpaper based theming
|
||||||
sudo ln -sf ~/.cache/quickshell/dankshell/dms-colors.json /etc/greetd/.dms/dms-colors.json
|
sudo ln -sf ~/.cache/quickshell/dankshell/dms-colors.json /var/cache/dms-greeter/dms-colors.json
|
||||||
```
|
```
|
||||||
|
|
||||||
You can override the configuration path with the `DMS_GREET_CFG_DIR` environment variable, the default is `/etc/greetd/.dms`
|
You can override the configuration path with the `DMS_GREET_CFG_DIR` environment variable or the `--cache-dir` flag when using `dms-greeter`. The default is `/var/cache/dmsgreeter`.
|
||||||
|
|
||||||
The `/etc/greetd/.dms` directory should be owned by `greeter:dms-greeter` with `770` permissions.
|
The cache directory should be owned by `greeter:greeter` with `770` permissions.
|
||||||
174
Modules/Greetd/assets/dms-greeter
Executable file
174
Modules/Greetd/assets/dms-greeter
Executable file
@@ -0,0 +1,174 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
COMPOSITOR=""
|
||||||
|
COMPOSITOR_CONFIG=""
|
||||||
|
DMS_PATH="dms-greeter"
|
||||||
|
CACHE_DIR="/var/cache/dmsgreeter"
|
||||||
|
|
||||||
|
show_help() {
|
||||||
|
cat << EOF
|
||||||
|
dms-greeter - DankMaterialShell greeter launcher
|
||||||
|
|
||||||
|
Usage: dms-greeter --command COMPOSITOR [OPTIONS]
|
||||||
|
|
||||||
|
Required:
|
||||||
|
--command COMPOSITOR Compositor to use (niri, hyprland, or sway)
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-C, --config PATH Custom compositor config file
|
||||||
|
-p, --path PATH DMS path (config name or absolute path)
|
||||||
|
(default: dms-greeter)
|
||||||
|
--cache-dir PATH Cache directory for greeter data
|
||||||
|
(default: /var/cache/dmsgreeter)
|
||||||
|
-h, --help Show this help message
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
dms-greeter --command niri
|
||||||
|
dms-greeter --command hyprland -C /etc/greetd/custom-hypr.conf
|
||||||
|
dms-greeter --command sway -p /home/user/.config/quickshell/custom-dms
|
||||||
|
dms-greeter --command niri --cache-dir /tmp/dmsgreeter
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
--command)
|
||||||
|
COMPOSITOR="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-C|--config)
|
||||||
|
COMPOSITOR_CONFIG="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-p|--path)
|
||||||
|
DMS_PATH="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--cache-dir)
|
||||||
|
CACHE_DIR="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
show_help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option: $1" >&2
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -z "$COMPOSITOR" ]]; then
|
||||||
|
echo "Error: --command COMPOSITOR is required" >&2
|
||||||
|
show_help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
export XDG_SESSION_TYPE=wayland
|
||||||
|
export QT_QPA_PLATFORM=wayland
|
||||||
|
export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
|
||||||
|
export EGL_PLATFORM=gbm
|
||||||
|
export DMS_RUN_GREETER=1
|
||||||
|
export DMS_GREET_CFG_DIR="$CACHE_DIR"
|
||||||
|
|
||||||
|
mkdir -p "$CACHE_DIR"
|
||||||
|
|
||||||
|
QS_CMD="qs"
|
||||||
|
if [[ "$DMS_PATH" == /* ]]; then
|
||||||
|
QS_CMD="qs -p $DMS_PATH"
|
||||||
|
else
|
||||||
|
QS_CMD="qs -c $DMS_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$COMPOSITOR" in
|
||||||
|
niri)
|
||||||
|
if [[ -z "$COMPOSITOR_CONFIG" ]]; then
|
||||||
|
TEMP_CONFIG=$(mktemp)
|
||||||
|
cat > "$TEMP_CONFIG" << NIRI_EOF
|
||||||
|
hotkey-overlay {
|
||||||
|
skip-at-startup
|
||||||
|
}
|
||||||
|
|
||||||
|
environment {
|
||||||
|
DMS_RUN_GREETER "1"
|
||||||
|
}
|
||||||
|
|
||||||
|
spawn-at-startup "sh" "-c" "$QS_CMD; niri msg action quit --skip-confirmation"
|
||||||
|
|
||||||
|
debug {
|
||||||
|
keep-max-bpc-unchanged
|
||||||
|
}
|
||||||
|
|
||||||
|
gestures {
|
||||||
|
hot-corners {
|
||||||
|
off
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
layout {
|
||||||
|
background-color "#000000"
|
||||||
|
}
|
||||||
|
NIRI_EOF
|
||||||
|
COMPOSITOR_CONFIG="$TEMP_CONFIG"
|
||||||
|
else
|
||||||
|
TEMP_CONFIG=$(mktemp)
|
||||||
|
cat "$COMPOSITOR_CONFIG" > "$TEMP_CONFIG"
|
||||||
|
cat >> "$TEMP_CONFIG" << NIRI_EOF
|
||||||
|
|
||||||
|
spawn-at-startup "sh" "-c" "$QS_CMD; niri msg action quit --skip-confirmation"
|
||||||
|
NIRI_EOF
|
||||||
|
COMPOSITOR_CONFIG="$TEMP_CONFIG"
|
||||||
|
fi
|
||||||
|
exec niri -c "$COMPOSITOR_CONFIG"
|
||||||
|
;;
|
||||||
|
|
||||||
|
hyprland)
|
||||||
|
if [[ -z "$COMPOSITOR_CONFIG" ]]; then
|
||||||
|
TEMP_CONFIG=$(mktemp)
|
||||||
|
cat > "$TEMP_CONFIG" << HYPRLAND_EOF
|
||||||
|
env = DMS_RUN_GREETER,1
|
||||||
|
|
||||||
|
exec = sh -c "$QS_CMD; hyprctl dispatch exit"
|
||||||
|
HYPRLAND_EOF
|
||||||
|
COMPOSITOR_CONFIG="$TEMP_CONFIG"
|
||||||
|
else
|
||||||
|
TEMP_CONFIG=$(mktemp)
|
||||||
|
cat "$COMPOSITOR_CONFIG" > "$TEMP_CONFIG"
|
||||||
|
cat >> "$TEMP_CONFIG" << HYPRLAND_EOF
|
||||||
|
|
||||||
|
exec = sh -c "$QS_CMD; hyprctl dispatch exit"
|
||||||
|
HYPRLAND_EOF
|
||||||
|
COMPOSITOR_CONFIG="$TEMP_CONFIG"
|
||||||
|
fi
|
||||||
|
exec Hyprland -c "$COMPOSITOR_CONFIG"
|
||||||
|
;;
|
||||||
|
|
||||||
|
sway)
|
||||||
|
if [[ -z "$COMPOSITOR_CONFIG" ]]; then
|
||||||
|
TEMP_CONFIG=$(mktemp)
|
||||||
|
cat > "$TEMP_CONFIG" << SWAY_EOF
|
||||||
|
exec "$QS_CMD; swaymsg exit"
|
||||||
|
SWAY_EOF
|
||||||
|
COMPOSITOR_CONFIG="$TEMP_CONFIG"
|
||||||
|
else
|
||||||
|
TEMP_CONFIG=$(mktemp)
|
||||||
|
cat "$COMPOSITOR_CONFIG" > "$TEMP_CONFIG"
|
||||||
|
cat >> "$TEMP_CONFIG" << SWAY_EOF
|
||||||
|
|
||||||
|
exec "$QS_CMD; swaymsg exit"
|
||||||
|
SWAY_EOF
|
||||||
|
COMPOSITOR_CONFIG="$TEMP_CONFIG"
|
||||||
|
fi
|
||||||
|
exec sway -c "$COMPOSITOR_CONFIG"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Error: Unsupported compositor: $COMPOSITOR" >&2
|
||||||
|
echo "Supported compositors: niri, hyprland, sway" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
Reference in New Issue
Block a user