mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-26 06:22:50 -05:00
240 lines
8.9 KiB
Markdown
240 lines
8.9 KiB
Markdown
# DankMaterialShell (Quickshell)
|
|
|
|
A [Quickshell](https://quickshell.org/) built shell designed to be highly functional, in Material 3 style.
|
|
|
|
Specifically created for [niri](https://github.com/YaLTeR/niri).
|
|
|
|
<image>
|
|
|
|
## Installation
|
|
|
|
1. Install required dependencies
|
|
|
|
This shell was primarily built for [niri](https://github.com/YaLTeR/niri), but only for workspaces and the active window widget in TopBar. So it could be used on any other wayland compositor with minimal changes.
|
|
|
|
```bash
|
|
# 1 --- Material Symbols Font (if not present)
|
|
mkdir -p ~/.local/share/fonts && curl -L "https://github.com/google/material-design-icons/raw/master/variablefont/MaterialSymbolsRounded%5BFILL%2CGRAD%2Copsz%2Cwght%5D.ttf" -o ~/.local/share/fonts/MaterialSymbolsRounded.ttf && fc-cache -f
|
|
# Arch: paru -S ttf-material-symbols-variable-git
|
|
# Fedora: Use manual installation (Fedora packages contain legacy Material Icons, not Material Symbols)
|
|
|
|
# 2 --- Inter Variable (recommended font)
|
|
mkdir -p ~/.local/share/fonts && curl -L "https://github.com/rsms/inter/releases/download/v4.0/Inter-4.0.zip" -o /tmp/Inter.zip && unzip -j /tmp/Inter.zip "InterVariable.ttf" "InterVariable-Italic.ttf" -d ~/.local/share/fonts/ && rm /tmp/Inter.zip && fc-cache -f
|
|
# Arch: pacman -S inter-font
|
|
# Fedora: sudo dnf install rsms-inter-fonts
|
|
|
|
# 3 --- Fira Code (recommended monospace font)
|
|
mkdir -p ~/.local/share/fonts && curl -L "https://github.com/tonsky/FiraCode/releases/download/6.2/Fira_Code_v6.2.zip" -o /tmp/FiraCode.zip && unzip -j /tmp/FiraCode.zip "ttf/*.ttf" -d ~/.local/share/fonts/ && rm /tmp/FiraCode.zip && fc-cache -f
|
|
# Arch: pacman -S ttf-fira-code
|
|
# Fedora: sudo dnf install fira-code-fonts
|
|
|
|
# 4 --- QuickShell (recommended to use a git build)
|
|
# Arch
|
|
paru -S quickshell-git
|
|
|
|
# Fedora
|
|
sudo dnf copr enable errornointernet/quickshell
|
|
sudo dnf install quickshell
|
|
# or
|
|
sudo dnf install quickshell-git
|
|
```
|
|
|
|
2. Install optional dependencies to unlock certain features
|
|
|
|
| Dependency | Purpose | If Missing |
|
|
|------------|---------|------------|
|
|
| matugen | Allows dynamic themes based on wallpaper and system app theming | Just can choose from preconfigured themes instead of dynamic colors |
|
|
| ddcutil | Allows controlling brightness of external monitors via DDC/CI | No external monitor brightness control |
|
|
| brightnessctl | Allows controlling brightness of laptop displays via backlight | No laptop display brightness control |
|
|
| wl-clipboard | Unlocks copy functionality of certain elements, such as process PIDs | No copy |
|
|
| qt5ct + qt6ct | Icon theme and Qt app theming | Setting icon theme in settings won't work for QT5 or QT6 applications, no Qt theming |
|
|
| adw-gtk3 | GTK app theming | No GTK theming |
|
|
| gsettings | GTK theme management | No GTK theming |
|
|
|
|
```bash
|
|
# Arch
|
|
# Core dependencies
|
|
pacman -S inter-font ttf-fira-code cava wl-clipboard cliphist
|
|
paru -S ttf-material-symbols-variable-git # AUR package
|
|
|
|
# Optional: Brightness control
|
|
pacman -S ddcutil # For external monitors
|
|
pacman -S brightnessctl # For laptop displays
|
|
|
|
# Optional: App theming (only if you use GTK/Qt applications)
|
|
pacman -S adw-gtk3 qt5ct qt6ct gsettings-desktop-schemas
|
|
|
|
# Third-party packages (AUR)
|
|
paru -S matugen
|
|
|
|
# Fedora
|
|
# Core dependencies
|
|
sudo dnf install cava wl-clipboard
|
|
|
|
# COPR packages (core dependencies from third-party repositories)
|
|
sudo dnf copr enable wef/cliphist && sudo dnf install cliphist
|
|
|
|
# Optional: Brightness control
|
|
sudo dnf install ddcutil # For external monitors
|
|
sudo dnf install brightnessctl # For laptop displays
|
|
|
|
# Optional: App theming (only if you use GTK/Qt applications)
|
|
sudo dnf install adw-gtk3-theme qt5ct qt6ct gsettings-desktop-schemas
|
|
|
|
# Optional third-party packages (COPR repositories)
|
|
sudo dnf copr enable heus-sueh/packages && sudo dnf install matugen
|
|
```
|
|
|
|
**Note on networking:** This shell requires NetworkManager for WiFi functionality.
|
|
|
|
**Note on system app theming:** DankMaterialShell can automatically theme GTK and Qt applications to match your dynamic wallpaper colors. This requires:
|
|
- For GTK apps: `adw-gtk3` theme and `gsettings`
|
|
- For Qt apps: `qt5ct` and/or `qt6ct`
|
|
|
|
Enable these features in Settings → Appearance → System App Theming after installing the dependencies.
|
|
|
|
3. Install DankMaterialShell
|
|
|
|
```
|
|
mkdir -p ~/.config/quickshell
|
|
git clone https://github.com/bbedward/DankMaterialShell.git ~/.config/quickshell/DankMaterialShell
|
|
```
|
|
|
|
4. Enable
|
|
|
|
```
|
|
qs -c DankMaterialShell
|
|
|
|
# In niri config
|
|
spawn-at-startup "qs" "-c" "DankMaterialShell"
|
|
|
|
# Optionally at bindings for spotlight launcher and clipboard history
|
|
Mod+Space hotkey-overlay-title="Run an Application: Spotlight" { spawn "qs" "-c" "DankMaterialShell" "ipc" "call" "spotlight" "toggle"; }
|
|
Mod+V hotkey-overlay-title="Open Clipboard History" { spawn "qs" "-c" "DankMaterialShell" "ipc" "call" "clipboard" "toggle"; }
|
|
```
|
|
|
|
# Available IPC Events
|
|
|
|
IPC Events are events that can be triggered with `qs` cli.
|
|
|
|
```bash
|
|
qs -c DankMaterialShell ipc call <target> <function>
|
|
```
|
|
|
|
## System Controls
|
|
|
|
| Target | Function | Parameters | Description |
|
|
|--------|----------|------------|-------------|
|
|
| audio | setvolume | percentage (string) | Set audio volume to specific percentage (0-100) |
|
|
| audio | increment | step (string, default: "5") | Increase volume by step percentage |
|
|
| audio | decrement | step (string, default: "5") | Decrease volume by step percentage |
|
|
| audio | mute | none | Toggle audio mute |
|
|
| audio | setmic | percentage (string) | Set microphone volume to specific percentage |
|
|
| audio | micmute | none | Toggle microphone mute |
|
|
| audio | status | none | Get current audio status (output/input levels and mute states) |
|
|
|
|
## Application Controls
|
|
|
|
| Target | Function | Parameters | Description |
|
|
|--------|----------|------------|-------------|
|
|
| spotlight | open | none | Open spotlight (app launcher) |
|
|
| spotlight | close | none | Close spotlight (app launcher) |
|
|
| spotlight | toggle | none | Toggle spotlight (app launcher) |
|
|
| clipboard | open | none | Open clipboard history view |
|
|
| clipboard | close | none | Close clipboard history view |
|
|
| clipboard | toggle | none | Toggle clipboard history view |
|
|
| processlist | open | none | Open process list (task manager) |
|
|
| processlist | close | none | Close process list (task manager) |
|
|
| processlist | toggle | none | Toggle process list (task manager) |
|
|
| lock | lock | none | Activate lockscreen |
|
|
| lock | demo | none | Show lockscreen in demo mode |
|
|
| lock | isLocked | none | Returns whether screen is currently locked |
|
|
|
|
## Media Controls
|
|
|
|
| Target | Function | Parameters | Description |
|
|
|--------|----------|------------|-------------|
|
|
| mpris | list | none | Get list of available media players |
|
|
| mpris | play | none | Start media playback on active player |
|
|
| mpris | pause | none | Pause media playback on active player |
|
|
| mpris | playPause | none | Toggle play/pause state on active player |
|
|
| mpris | previous | none | Skip to previous track on active player |
|
|
| mpris | next | none | Skip to next track on active player |
|
|
| mpris | stop | none | Stop media playback on active player |
|
|
|
|
## System Services
|
|
|
|
| Target | Function | Parameters | Description |
|
|
|--------|----------|------------|-------------|
|
|
| wallpaper | get | none | Get current wallpaper path |
|
|
| wallpaper | set | path (string) | Set wallpaper to image path and refresh theme |
|
|
| wallpaper | clear | none | Clear current wallpaper |
|
|
| theme | get | none | Get current theme mode (light/dark) |
|
|
| theme | toggle | none | Toggle between light and dark mode |
|
|
| theme | light | none | Set theme to light mode |
|
|
| theme | dark | none | Set theme to dark mode |
|
|
| notifs | clear | none | Clear all notifications |
|
|
|
|
|
|
## (Optional) Setup Calendar events (Google, Microsoft, other Caldev, etc.)
|
|
|
|
1. Install [khal](https://github.com/pimutils/khal), [vdirsyncer](https://github.com/pimutils/vdirsyncer), and `aiohttp-oauthlib`
|
|
|
|
```
|
|
# Arch
|
|
pacman -S vdirsyncer khal python-aiohttp-oauthlib
|
|
|
|
# Fedora
|
|
sudo dnf install python3-vdirsyncer khal python3-aiohttp-oauthlib
|
|
```
|
|
|
|
2. Configure vdirsyncer
|
|
|
|
Follow the [documentation](https://vdirsyncer.pimutils.org/en/stable/config.html), you will have different steps depending on which calendars you want to sync with.
|
|
|
|
```
|
|
mkdir -p ~/.vdirsyncer
|
|
|
|
# Create ~/.vdirsyncer/config (a single google calendar would look like)
|
|
[general]
|
|
status_path = "~/.calendars/status"
|
|
|
|
[pair personal_sync]
|
|
a = "personal"
|
|
b = "personallocal"
|
|
collections = ["from a", "from b"]
|
|
conflict_resolution = "a wins"
|
|
metadata = ["color"]
|
|
|
|
[storage personal]
|
|
type = "google_calendar"
|
|
token_file = "~/.vdirsyncer/google_calendar_token"
|
|
client_id = "...."
|
|
client_secret = "...."
|
|
|
|
[storage personallocal]
|
|
type = "filesystem"
|
|
path = "~/.calendars/Personal"
|
|
fileext = ".ics"
|
|
|
|
# Sync
|
|
vdirsyncer sync
|
|
|
|
# Create crontab
|
|
crontab -e
|
|
# e.g., this syncs every 5 minutes
|
|
*/5 * * * * /usr/bin/vdirsyncer sync
|
|
```
|
|
|
|
3. Configure khal
|
|
|
|
```
|
|
# Run this
|
|
khal configure
|
|
|
|
# Choose option 2 for month/day/year
|
|
# Time format, doesnt matter
|
|
# Choose option 1 for use calendar already on this computer
|
|
```
|
|
|