mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-29 16:02:51 -05:00
Update theme doc in readme
This commit is contained in:
@@ -9,7 +9,6 @@ import qs.Services
|
|||||||
import qs.Common
|
import qs.Common
|
||||||
|
|
||||||
Singleton {
|
Singleton {
|
||||||
|
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
readonly property string _homeUrl: StandardPaths.writableLocation(StandardPaths.HomeLocation)
|
readonly property string _homeUrl: StandardPaths.writableLocation(StandardPaths.HomeLocation)
|
||||||
@@ -23,8 +22,7 @@ Singleton {
|
|||||||
property bool qtThemingEnabled: false
|
property bool qtThemingEnabled: false
|
||||||
property bool systemThemeGenerationInProgress: false
|
property bool systemThemeGenerationInProgress: false
|
||||||
property string matugenJson: ""
|
property string matugenJson: ""
|
||||||
property var matugenColors: ({
|
property var matugenColors: ({})
|
||||||
})
|
|
||||||
property bool extractionRequested: false
|
property bool extractionRequested: false
|
||||||
property int colorUpdateTrigger: 0
|
property int colorUpdateTrigger: 0
|
||||||
property string lastWallpaperTimestamp: ""
|
property string lastWallpaperTimestamp: ""
|
||||||
@@ -48,13 +46,13 @@ Singleton {
|
|||||||
property color accentHi: primary
|
property color accentHi: primary
|
||||||
property color accentLo: secondary
|
property color accentLo: secondary
|
||||||
|
|
||||||
signal colorsUpdated()
|
signal colorsUpdated
|
||||||
|
|
||||||
function onLightModeChanged() {
|
function onLightModeChanged() {
|
||||||
if (matugenColors && Object.keys(matugenColors).length > 0) {
|
if (matugenColors && Object.keys(matugenColors).length > 0) {
|
||||||
colorUpdateTrigger++;
|
colorUpdateTrigger++;
|
||||||
colorsUpdated();
|
colorsUpdated();
|
||||||
|
|
||||||
if (typeof Theme !== "undefined" && Theme.isDynamicTheme) {
|
if (typeof Theme !== "undefined" && Theme.isDynamicTheme) {
|
||||||
generateSystemThemes();
|
generateSystemThemes();
|
||||||
}
|
}
|
||||||
@@ -98,12 +96,12 @@ Singleton {
|
|||||||
id: matugenCheck
|
id: matugenCheck
|
||||||
|
|
||||||
command: ["which", "matugen"]
|
command: ["which", "matugen"]
|
||||||
onExited: (code) => {
|
onExited: code => {
|
||||||
matugenAvailable = (code === 0);
|
matugenAvailable = (code === 0);
|
||||||
if (!matugenAvailable) {
|
if (!matugenAvailable) {
|
||||||
ToastService.wallpaperErrorStatus = "matugen_missing";
|
ToastService.wallpaperErrorStatus = "matugen_missing";
|
||||||
ToastService.showWarning("matugen not found - dynamic theming disabled");
|
ToastService.showWarning("matugen not found - dynamic theming disabled");
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
if (extractionRequested) {
|
if (extractionRequested) {
|
||||||
fileChecker.running = true;
|
fileChecker.running = true;
|
||||||
@@ -115,7 +113,7 @@ Singleton {
|
|||||||
id: fileChecker
|
id: fileChecker
|
||||||
|
|
||||||
command: ["test", "-r", wallpaperPath]
|
command: ["test", "-r", wallpaperPath]
|
||||||
onExited: (code) => {
|
onExited: code => {
|
||||||
if (code === 0) {
|
if (code === 0) {
|
||||||
matugenProcess.running = true;
|
matugenProcess.running = true;
|
||||||
} else {
|
} else {
|
||||||
@@ -138,7 +136,7 @@ Singleton {
|
|||||||
if (!out.length) {
|
if (!out.length) {
|
||||||
ToastService.wallpaperErrorStatus = "error";
|
ToastService.wallpaperErrorStatus = "error";
|
||||||
ToastService.showError("Wallpaper Processing Failed");
|
ToastService.showError("Wallpaper Processing Failed");
|
||||||
return ;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
root.matugenJson = out;
|
root.matugenJson = out;
|
||||||
@@ -156,7 +154,6 @@ Singleton {
|
|||||||
stderr: StdioCollector {
|
stderr: StdioCollector {
|
||||||
id: matugenErr
|
id: matugenErr
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateAppConfigs() {
|
function generateAppConfigs() {
|
||||||
@@ -166,18 +163,18 @@ Singleton {
|
|||||||
|
|
||||||
generateNiriConfig();
|
generateNiriConfig();
|
||||||
generateGhosttyConfig();
|
generateGhosttyConfig();
|
||||||
|
|
||||||
if (gtkThemingEnabled && typeof SettingsData !== "undefined" && SettingsData.gtkThemingEnabled) {
|
if (gtkThemingEnabled && typeof SettingsData !== "undefined" && SettingsData.gtkThemingEnabled) {
|
||||||
generateGtkThemes();
|
generateSystemThemes();
|
||||||
}
|
} else if (qtThemingEnabled && typeof SettingsData !== "undefined" && SettingsData.qtThemingEnabled) {
|
||||||
if (qtThemingEnabled && typeof SettingsData !== "undefined" && SettingsData.qtThemingEnabled) {
|
generateSystemThemes();
|
||||||
generateQtThemes();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateNiriConfig() {
|
function generateNiriConfig() {
|
||||||
var dark = matugenColors.colors.dark;
|
var dark = matugenColors.colors.dark;
|
||||||
if (!dark) return;
|
if (!dark)
|
||||||
|
return;
|
||||||
|
|
||||||
var bg = dark.background || "#1a1c1e";
|
var bg = dark.background || "#1a1c1e";
|
||||||
var primary = dark.primary || "#42a5f5";
|
var primary = dark.primary || "#42a5f5";
|
||||||
@@ -201,7 +198,8 @@ Singleton {
|
|||||||
function generateGhosttyConfig() {
|
function generateGhosttyConfig() {
|
||||||
var dark = matugenColors.colors.dark;
|
var dark = matugenColors.colors.dark;
|
||||||
var light = matugenColors.colors.light;
|
var light = matugenColors.colors.light;
|
||||||
if (!dark || !light) return;
|
if (!dark || !light)
|
||||||
|
return;
|
||||||
|
|
||||||
var bg = dark.background || "#1a1c1e";
|
var bg = dark.background || "#1a1c1e";
|
||||||
var fg = dark.on_background || "#e3e8ef";
|
var fg = dark.on_background || "#e3e8ef";
|
||||||
@@ -245,116 +243,108 @@ palette = 15=${fg_b}`;
|
|||||||
|
|
||||||
var ghosttyConfigDir = configDir + "/ghostty";
|
var ghosttyConfigDir = configDir + "/ghostty";
|
||||||
var ghosttyConfigPath = ghosttyConfigDir + "/config-dankcolors";
|
var ghosttyConfigPath = ghosttyConfigDir + "/config-dankcolors";
|
||||||
|
|
||||||
Quickshell.execDetached(["bash", "-c", `mkdir -p '${ghosttyConfigDir}' && echo '${content}' > '${ghosttyConfigPath}'`]);
|
Quickshell.execDetached(["bash", "-c", `mkdir -p '${ghosttyConfigDir}' && echo '${content}' > '${ghosttyConfigPath}'`]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkGtkThemingAvailability() {
|
function checkGtkThemingAvailability() {
|
||||||
gtkAvailabilityChecker.running = true;
|
gtkAvailabilityChecker.running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkQtThemingAvailability() {
|
function checkQtThemingAvailability() {
|
||||||
qtAvailabilityChecker.running = true;
|
qtAvailabilityChecker.running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateSystemThemes() {
|
function generateSystemThemes() {
|
||||||
if (systemThemeGenerationInProgress) {
|
if (systemThemeGenerationInProgress) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!matugenAvailable) {
|
if (!matugenAvailable) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!wallpaperPath || wallpaperPath === "") {
|
if (!wallpaperPath || wallpaperPath === "") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isLight = (typeof SessionData !== "undefined" && SessionData.isLightMode) ? "true" : "false";
|
const isLight = (typeof SessionData !== "undefined" && SessionData.isLightMode) ? "true" : "false";
|
||||||
const iconTheme = (typeof SettingsData !== "undefined" && SettingsData.iconTheme) ? SettingsData.iconTheme : "System Default";
|
const iconTheme = (typeof SettingsData !== "undefined" && SettingsData.iconTheme) ? SettingsData.iconTheme : "System Default";
|
||||||
const gtkTheming = (typeof SettingsData !== "undefined" && SettingsData.gtkThemingEnabled) ? "true" : "false";
|
const gtkTheming = (typeof SettingsData !== "undefined" && SettingsData.gtkThemingEnabled) ? "true" : "false";
|
||||||
const qtTheming = (typeof SettingsData !== "undefined" && SettingsData.qtThemingEnabled) ? "true" : "false";
|
const qtTheming = (typeof SettingsData !== "undefined" && SettingsData.qtThemingEnabled) ? "true" : "false";
|
||||||
|
|
||||||
systemThemeGenerationInProgress = true;
|
systemThemeGenerationInProgress = true;
|
||||||
systemThemeGenerator.command = [shellDir + "/generate-themes.sh", wallpaperPath, shellDir, configDir, "generate", isLight, iconTheme, gtkTheming, qtTheming];
|
systemThemeGenerator.command = [shellDir + "/generate-themes.sh", wallpaperPath, shellDir, configDir, "generate", isLight, iconTheme, gtkTheming, qtTheming];
|
||||||
systemThemeGenerator.running = true;
|
systemThemeGenerator.running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function generateGtkThemes() {
|
|
||||||
generateSystemThemes();
|
|
||||||
}
|
|
||||||
|
|
||||||
function generateQtThemes() {
|
|
||||||
generateSystemThemes();
|
|
||||||
}
|
|
||||||
|
|
||||||
function restoreSystemThemes() {
|
function restoreSystemThemes() {
|
||||||
const shellDir = root.shellDir;
|
const shellDir = root.shellDir;
|
||||||
if (!shellDir) {
|
if (!shellDir) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const isLight = (typeof SessionData !== "undefined" && SessionData.isLightMode) ? "true" : "false";
|
const isLight = (typeof SessionData !== "undefined" && SessionData.isLightMode) ? "true" : "false";
|
||||||
const iconTheme = (typeof SettingsData !== "undefined" && SettingsData.iconTheme) ? SettingsData.iconTheme : "System Default";
|
const iconTheme = (typeof SettingsData !== "undefined" && SettingsData.iconTheme) ? SettingsData.iconTheme : "System Default";
|
||||||
const gtkTheming = (typeof SettingsData !== "undefined" && SettingsData.gtkThemingEnabled) ? "true" : "false";
|
const gtkTheming = (typeof SettingsData !== "undefined" && SettingsData.gtkThemingEnabled) ? "true" : "false";
|
||||||
const qtTheming = (typeof SettingsData !== "undefined" && SettingsData.qtThemingEnabled) ? "true" : "false";
|
const qtTheming = (typeof SettingsData !== "undefined" && SettingsData.qtThemingEnabled) ? "true" : "false";
|
||||||
|
|
||||||
systemThemeRestoreProcess.command = [shellDir + "/generate-themes.sh", "", shellDir, configDir, "restore", isLight, iconTheme, gtkTheming, qtTheming];
|
systemThemeRestoreProcess.command = [shellDir + "/generate-themes.sh", "", shellDir, configDir, "restore", isLight, iconTheme, gtkTheming, qtTheming];
|
||||||
systemThemeRestoreProcess.running = true;
|
systemThemeRestoreProcess.running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Process {
|
Process {
|
||||||
id: gtkAvailabilityChecker
|
id: gtkAvailabilityChecker
|
||||||
command: ["bash", "-c", "command -v gsettings >/dev/null && [ -d " + configDir + "/gtk-3.0 -o -d " + configDir + "/gtk-4.0 ]"]
|
command: ["bash", "-c", "command -v gsettings >/dev/null && [ -d " + configDir + "/gtk-3.0 -o -d " + configDir + "/gtk-4.0 ]"]
|
||||||
running: false
|
running: false
|
||||||
onExited: (exitCode) => {
|
onExited: exitCode => {
|
||||||
gtkThemingEnabled = (exitCode === 0);
|
gtkThemingEnabled = (exitCode === 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Process {
|
Process {
|
||||||
id: qtAvailabilityChecker
|
id: qtAvailabilityChecker
|
||||||
command: ["bash", "-c", "command -v qt5ct >/dev/null || command -v qt6ct >/dev/null"]
|
command: ["bash", "-c", "command -v qt5ct >/dev/null || command -v qt6ct >/dev/null"]
|
||||||
running: false
|
running: false
|
||||||
onExited: (exitCode) => {
|
onExited: exitCode => {
|
||||||
qtThemingEnabled = (exitCode === 0);
|
qtThemingEnabled = (exitCode === 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Process {
|
Process {
|
||||||
id: systemThemeGenerator
|
id: systemThemeGenerator
|
||||||
running: false
|
running: false
|
||||||
|
|
||||||
stdout: StdioCollector {
|
stdout: StdioCollector {
|
||||||
id: systemThemeStdout
|
id: systemThemeStdout
|
||||||
}
|
}
|
||||||
|
|
||||||
stderr: StdioCollector {
|
stderr: StdioCollector {
|
||||||
id: systemThemeStderr
|
id: systemThemeStderr
|
||||||
}
|
}
|
||||||
|
|
||||||
onExited: (exitCode) => {
|
onExited: exitCode => {
|
||||||
systemThemeGenerationInProgress = false;
|
systemThemeGenerationInProgress = false;
|
||||||
|
|
||||||
if (exitCode !== 0) {
|
if (exitCode !== 0) {
|
||||||
ToastService.showError("Failed to generate system themes: " + systemThemeStderr.text);
|
ToastService.showError("Failed to generate system themes: " + systemThemeStderr.text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Process {
|
Process {
|
||||||
id: systemThemeRestoreProcess
|
id: systemThemeRestoreProcess
|
||||||
running: false
|
running: false
|
||||||
|
|
||||||
stdout: StdioCollector {
|
stdout: StdioCollector {
|
||||||
id: restoreThemeStdout
|
id: restoreThemeStdout
|
||||||
}
|
}
|
||||||
|
|
||||||
stderr: StdioCollector {
|
stderr: StdioCollector {
|
||||||
id: restoreThemeStderr
|
id: restoreThemeStderr
|
||||||
}
|
}
|
||||||
|
|
||||||
onExited: (exitCode) => {
|
onExited: exitCode => {
|
||||||
if (exitCode === 0) {
|
if (exitCode === 0) {
|
||||||
ToastService.showInfo("System themes restored to default");
|
ToastService.showInfo("System themes restored to default");
|
||||||
} else {
|
} else {
|
||||||
@@ -362,6 +352,4 @@ palette = 15=${fg_b}`;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
107
README.md
107
README.md
@@ -23,24 +23,31 @@ A modern Wayland desktop shell built with [Quickshell](https://quickshell.org/)
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
### Application Launcher
|
### Application Launcher
|
||||||
|
|
||||||
<img src="https://github.com/user-attachments/assets/2da00ea1-8921-4473-a2a9-44a44535a822" width="450" alt="Spotlight Launcher" />
|
<img src="https://github.com/user-attachments/assets/2da00ea1-8921-4473-a2a9-44a44535a822" width="450" alt="Spotlight Launcher" />
|
||||||
|
|
||||||
### System Monitor
|
### System Monitor
|
||||||
|
|
||||||
<img src="https://github.com/user-attachments/assets/b3c817ec-734d-4974-929f-2d11a1065349" width="600" alt="System Monitor" />
|
<img src="https://github.com/user-attachments/assets/b3c817ec-734d-4974-929f-2d11a1065349" width="600" alt="System Monitor" />
|
||||||
|
|
||||||
### Widget Customization
|
### Widget Customization
|
||||||
|
|
||||||
<img src="https://github.com/user-attachments/assets/903f7c60-146f-4fb3-a75d-a4823828f298" width="500" alt="Widget Customization" />
|
<img src="https://github.com/user-attachments/assets/903f7c60-146f-4fb3-a75d-a4823828f298" width="500" alt="Widget Customization" />
|
||||||
|
|
||||||
### Lock Screen
|
### Lock Screen
|
||||||
|
|
||||||
<img src="https://github.com/user-attachments/assets/3fa07de2-c1b0-4e57-8f25-3830ac6baf4f" width="600" alt="Lock Screen" />
|
<img src="https://github.com/user-attachments/assets/3fa07de2-c1b0-4e57-8f25-3830ac6baf4f" width="600" alt="Lock Screen" />
|
||||||
|
|
||||||
### Dynamic Theming
|
### Dynamic Theming
|
||||||
|
|
||||||
<img src="https://github.com/user-attachments/assets/1994e616-f9d9-424a-9f60-6f06708bf12e" width="700" alt="Auto Theme" />
|
<img src="https://github.com/user-attachments/assets/1994e616-f9d9-424a-9f60-6f06708bf12e" width="700" alt="Auto Theme" />
|
||||||
|
|
||||||
### Notification Center
|
### Notification Center
|
||||||
|
|
||||||
<img src="https://github.com/user-attachments/assets/07cbde9a-0242-4989-9f97-5765c6458c85" width="350" alt="Notification Center" />
|
<img src="https://github.com/user-attachments/assets/07cbde9a-0242-4989-9f97-5765c6458c85" width="350" alt="Notification Center" />
|
||||||
|
|
||||||
### Dock
|
### Dock
|
||||||
|
|
||||||
<img src="https://github.com/user-attachments/assets/e6999daf-f7bf-4329-98fa-0ce4f0e7219c" width="400" alt="Dock" />
|
<img src="https://github.com/user-attachments/assets/e6999daf-f7bf-4329-98fa-0ce4f0e7219c" width="400" alt="Dock" />
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -50,6 +57,7 @@ A modern Wayland desktop shell built with [Quickshell](https://quickshell.org/)
|
|||||||
## What's Inside
|
## What's Inside
|
||||||
|
|
||||||
**Core Widgets:**
|
**Core Widgets:**
|
||||||
|
|
||||||
- **TopBar**: fully customizable bar where widgets can be added, removed, and re-arranged.
|
- **TopBar**: fully customizable bar where widgets can be added, removed, and re-arranged.
|
||||||
- **App Launcher** with fuzzy search, categories, and auto-sorting by most used apps.
|
- **App Launcher** with fuzzy search, categories, and auto-sorting by most used apps.
|
||||||
- **Workspace Switcher** Dynamically resizing niri workspace switcher.
|
- **Workspace Switcher** Dynamically resizing niri workspace switcher.
|
||||||
@@ -71,6 +79,7 @@ A modern Wayland desktop shell built with [Quickshell](https://quickshell.org/)
|
|||||||
- **Lock Screen** Using quickshell's WlSessionLock
|
- **Lock Screen** Using quickshell's WlSessionLock
|
||||||
|
|
||||||
**Features:**
|
**Features:**
|
||||||
|
|
||||||
- Dynamic wallpaper-based theming with matugen integration
|
- Dynamic wallpaper-based theming with matugen integration
|
||||||
- Numerous IPCs to trigger actions and open various modals.
|
- Numerous IPCs to trigger actions and open various modals.
|
||||||
- Calendar integration with [khal](https://github.com/pimutils/khal)
|
- Calendar integration with [khal](https://github.com/pimutils/khal)
|
||||||
@@ -83,14 +92,15 @@ A modern Wayland desktop shell built with [Quickshell](https://quickshell.org/)
|
|||||||
|
|
||||||
### Quick Start
|
### Quick Start
|
||||||
|
|
||||||
*If you do not already have niri, see [#]
|
\*If you do not already have niri, see [#]
|
||||||
|
|
||||||
**Dependencies:**
|
**Dependencies:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Arch Linux
|
# Arch Linux
|
||||||
paru -S quickshell-git ttf-material-symbols-variable-git inter-font ttf-fira-code
|
paru -S quickshell-git ttf-material-symbols-variable-git inter-font ttf-fira-code
|
||||||
|
|
||||||
# Fedora
|
# Fedora
|
||||||
sudo dnf copr enable errornointernet/quickshell && sudo dnf install quickshell-git rsms-inter-fonts fira-code-fonts
|
sudo dnf copr enable errornointernet/quickshell && sudo dnf install quickshell-git rsms-inter-fonts fira-code-fonts
|
||||||
# Install icon fonts manually
|
# Install icon fonts manually
|
||||||
mkdir -p ~/.local/share/fonts
|
mkdir -p ~/.local/share/fonts
|
||||||
@@ -99,6 +109,7 @@ fc-cache -f
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Get the shell:**
|
**Get the shell:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Arch linux available via AUR
|
# Arch linux available via AUR
|
||||||
paru -S dankmaterialshell-git
|
paru -S dankmaterialshell-git
|
||||||
@@ -114,6 +125,7 @@ qs -c DankMaterialShell
|
|||||||
<details><summary>Font Installation</summary>
|
<details><summary>Font Installation</summary>
|
||||||
|
|
||||||
**Material Symbols (Required):**
|
**Material Symbols (Required):**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Manual installation
|
# Manual installation
|
||||||
mkdir -p ~/.local/share/fonts
|
mkdir -p ~/.local/share/fonts
|
||||||
@@ -125,6 +137,7 @@ paru -S ttf-material-symbols-variable-git
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Typography (Recommended):**
|
**Typography (Recommended):**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Inter Variable Font
|
# Inter Variable Font
|
||||||
curl -L "https://github.com/rsms/inter/releases/download/v4.0/Inter-4.0.zip" -o /tmp/Inter.zip
|
curl -L "https://github.com/rsms/inter/releases/download/v4.0/Inter-4.0.zip" -o /tmp/Inter.zip
|
||||||
@@ -142,23 +155,24 @@ rm /tmp/FiraCode.zip && fc-cache -f
|
|||||||
<details><summary>Optional Features</summary>
|
<details><summary>Optional Features</summary>
|
||||||
|
|
||||||
**Enhanced Functionality:**
|
**Enhanced Functionality:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Arch Linux
|
# Arch Linux
|
||||||
pacman -S cava wl-clipboard cliphist ddcutil brightnessctl qt5ct qt6ct
|
pacman -S cava wl-clipboard cliphist ddcutil brightnessctl
|
||||||
paru -S matugen
|
paru -S matugen
|
||||||
|
|
||||||
# Fedora
|
# Fedora
|
||||||
sudo dnf install cava wl-clipboard ddcutil brightnessctl qt5ct qt6ct
|
sudo dnf install cava wl-clipboard ddcutil brightnessctl
|
||||||
sudo dnf copr enable wef/cliphist && sudo dnf install cliphist
|
sudo dnf copr enable wef/cliphist && sudo dnf install cliphist
|
||||||
sudo dnf copr enable heus-sueh/packages && sudo dnf install matugen
|
sudo dnf copr enable heus-sueh/packages && sudo dnf install matugen
|
||||||
```
|
```
|
||||||
|
|
||||||
**What you get:**
|
**What you get:**
|
||||||
|
|
||||||
- `matugen`: Wallpaper-based dynamic theming
|
- `matugen`: Wallpaper-based dynamic theming
|
||||||
- `ddcutil`: External monitor brightness control
|
- `ddcutil`: External monitor brightness control
|
||||||
- `brightnessctl`: Laptop display brightness
|
- `brightnessctl`: Laptop display brightness
|
||||||
- `wl-clipboard`: Required for copying various elements to clipboard.
|
- `wl-clipboard`: Required for copying various elements to clipboard.
|
||||||
- `qt5ct/qt6ct`: Qt application theming
|
|
||||||
- `cava`: Audio visualizer
|
- `cava`: Audio visualizer
|
||||||
- `cliphist`: Clipboard history
|
- `cliphist`: Clipboard history
|
||||||
|
|
||||||
@@ -219,7 +233,7 @@ binds {
|
|||||||
}
|
}
|
||||||
XF86MonBrightnessDown allow-when-locked=true {
|
XF86MonBrightnessDown allow-when-locked=true {
|
||||||
spawn "qs" "-c" "DankMaterialShell" "ipc" "call" "brightness" "decrement" "5";
|
spawn "qs" "-c" "DankMaterialShell" "ipc" "call" "brightness" "decrement" "5";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -232,7 +246,7 @@ Control everything from the command line, or via keybinds:
|
|||||||
qs -c DankMaterialShell ipc call audio setvolume 50
|
qs -c DankMaterialShell ipc call audio setvolume 50
|
||||||
qs -c DankMaterialShell ipc call audio mute
|
qs -c DankMaterialShell ipc call audio mute
|
||||||
|
|
||||||
# Launch applications
|
# Launch applications
|
||||||
qs -c DankMaterialShell ipc call spotlight toggle
|
qs -c DankMaterialShell ipc call spotlight toggle
|
||||||
qs -c DankMaterialShell ipc call processlist toggle
|
qs -c DankMaterialShell ipc call processlist toggle
|
||||||
|
|
||||||
@@ -250,54 +264,98 @@ qs -c DankMaterialShell ipc call mpris next
|
|||||||
|
|
||||||
### System App Integration
|
### System App Integration
|
||||||
|
|
||||||
|
There's two toggles in the appearance section of settings, for GTK and QT apps.
|
||||||
|
|
||||||
|
These settings will override some local GTK and QT configuration files, you can still integrate auto-theming if you do not wish DankShell to mess with your QTCT/GTK files.
|
||||||
|
|
||||||
|
No matter what when matugen is enabled the files will be created on wallpaper changes:
|
||||||
|
|
||||||
|
- ~/.config/gtk-3.0/dank-colors.css
|
||||||
|
- ~/.config/gtk-4.0/dank-colors.css
|
||||||
|
- ~/.config/qt6ct/colors/matugen.conf
|
||||||
|
- ~/.config/qt5ct/colors/matugen.conf
|
||||||
|
|
||||||
|
If you do not like our theme path, you can integrate this with other GTK themes, matugen themes, etc.
|
||||||
|
|
||||||
**GTK Apps:**
|
**GTK Apps:**
|
||||||
Install [Colloid](https://github.com/vinceliuice/Colloid-gtk-theme) or similar Material theme:
|
|
||||||
|
1. Install [Colloid](https://github.com/vinceliuice/Colloid-gtk-theme)
|
||||||
|
|
||||||
|
Colloid is a hard requirement for the auto-theming because of how it integrates with colloid css files, however you can integrate auto-theming with other themes, you just have to do it manually (so leave the toggle OFF in settings)
|
||||||
|
|
||||||
|
It will still create `~/.config/gtk-3.0/4.0/dank-colors.css` on theme updates, these you can import into other compatible GTK themes.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
# Some default install settings for colloid
|
||||||
./install.sh -s standard -l --tweaks normal
|
./install.sh -s standard -l --tweaks normal
|
||||||
```
|
```
|
||||||
|
|
||||||
Configure in `~/.config/gtk-3.0/settings.ini`:
|
Configure in `~/.config/gtk-3.0/settings.ini` and `~/.config/gtk-4.0/settings.ini`:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[Settings]
|
[Settings]
|
||||||
gtk-theme-name=Colloid
|
gtk-theme-name=Colloid
|
||||||
```
|
```
|
||||||
|
|
||||||
**Qt Apps:**
|
**Qt Apps:**
|
||||||
```bash
|
|
||||||
# Install Breeze
|
|
||||||
pacman -S breeze breeze5 # Arch
|
|
||||||
sudo dnf install breeze # Fedora
|
|
||||||
|
|
||||||
# Configure qt5ct/qt6ct
|
You have **two** paths for QT theming, first path is to use **gtk3**. To do that, add the following to your niri config.
|
||||||
echo 'style=Breeze' >> ~/.config/qt5ct/qt5ct.conf
|
|
||||||
|
```kdl
|
||||||
|
environment {
|
||||||
|
// Add to existing environment block
|
||||||
|
QT_QPA_PLATFORMTHEME "gtk3"
|
||||||
|
QT_QPA_PLATFORMTHEME_QT6 "gtk3"
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**Dynamic Theming:**
|
**Done** - if you're not happy with this and wish to use Breeze or another QT theme then continue on.
|
||||||
Enable wallpaper-based theming in **Settings → Appearance → System App Theming** after installing matugen.
|
|
||||||
|
1. Install qt6ct and qt5ct
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Arch
|
||||||
|
pacman -S qt5ct qt6ct
|
||||||
|
# Fedora
|
||||||
|
dnf install qt5ct qt6ct
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Configure Environment in niri
|
||||||
|
|
||||||
|
```kdl
|
||||||
|
// Add to existing environment block
|
||||||
|
QT_QPA_PLATFORMTHEME "qt5ct"
|
||||||
|
QT_QPA_PLATFORMTHEME_QT6 "qt6ct"
|
||||||
|
```
|
||||||
|
|
||||||
|
You'll have to restart your session for themes to take effect.
|
||||||
|
|
||||||
### Terminal Integration
|
### Terminal Integration
|
||||||
|
|
||||||
**Ghostty users** can add automatic color theming:
|
**Ghostty users** can add automatic color theming:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
echo "config-file = ./config-dankcolors" >> ~/.config/ghostty/config
|
echo "config-file = ./config-dankcolors" >> ~/.config/ghostty/config
|
||||||
```
|
```
|
||||||
|
|
||||||
## Calendar Setup
|
## Calendar Setup
|
||||||
|
|
||||||
Sync your Google Calendar for dashboard integration:
|
Sync your caldev compatible calendar (Google, Office365, etc.) for dashboard integration:
|
||||||
|
|
||||||
<details><summary>Configuration Steps</summary>
|
<details><summary>Configuration Steps</summary>
|
||||||
|
|
||||||
**Install dependencies:**
|
**Install dependencies:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Arch
|
# Arch
|
||||||
pacman -S vdirsyncer khal python-aiohttp-oauthlib
|
pacman -S vdirsyncer khal python-aiohttp-oauthlib
|
||||||
|
|
||||||
# Fedora
|
# Fedora
|
||||||
sudo dnf install python3-vdirsyncer khal python3-aiohttp-oauthlib
|
sudo dnf install python3-vdirsyncer khal python3-aiohttp-oauthlib
|
||||||
```
|
```
|
||||||
|
|
||||||
**Configure vdirsyncer** (`~/.vdirsyncer/config`):
|
**Configure vdirsyncer** (`~/.vdirsyncer/config`):
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[general]
|
[general]
|
||||||
status_path = "~/.calendars/status"
|
status_path = "~/.calendars/status"
|
||||||
@@ -322,6 +380,7 @@ fileext = ".ics"
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Setup sync:**
|
**Setup sync:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
vdirsyncer sync
|
vdirsyncer sync
|
||||||
khal configure
|
khal configure
|
||||||
@@ -338,8 +397,9 @@ crontab -e
|
|||||||
All settings are configurable in `~/.config/DankMaterialShell/settings.json`, or more intuitively the built-in settings modal.
|
All settings are configurable in `~/.config/DankMaterialShell/settings.json`, or more intuitively the built-in settings modal.
|
||||||
|
|
||||||
**Key configuration areas:**
|
**Key configuration areas:**
|
||||||
|
|
||||||
- Widget positioning and behavior
|
- Widget positioning and behavior
|
||||||
- Theme and color preferences
|
- Theme and color preferences
|
||||||
- Time format, weather units and location
|
- Time format, weather units and location
|
||||||
- Light/Dark modes
|
- Light/Dark modes
|
||||||
- Wallpaper and Profile picture
|
- Wallpaper and Profile picture
|
||||||
@@ -348,12 +408,14 @@ All settings are configurable in `~/.config/DankMaterialShell/settings.json`, or
|
|||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
**Common issues:**
|
**Common issues:**
|
||||||
|
|
||||||
- **Missing icons:** Verify Material Symbols font installation with `fc-list | grep Material`
|
- **Missing icons:** Verify Material Symbols font installation with `fc-list | grep Material`
|
||||||
- **No dynamic theming:** Install matugen and enable in settings
|
- **No dynamic theming:** Install matugen and enable in settings
|
||||||
- **Qt apps not themed:** Configure qt5ct/qt6ct and set QT_QPA_PLATFORMTHEME
|
- **Qt apps not themed:** Configure qt5ct/qt6ct and set QT_QPA_PLATFORMTHEME
|
||||||
- **Calendar not syncing:** Check vdirsyncer credentials and network connectivity
|
- **Calendar not syncing:** Check vdirsyncer credentials and network connectivity
|
||||||
|
|
||||||
**Getting help:**
|
**Getting help:**
|
||||||
|
|
||||||
- Check the [issues](https://github.com/bbedward/DankMaterialShell/issues) for known problems
|
- Check the [issues](https://github.com/bbedward/DankMaterialShell/issues) for known problems
|
||||||
- Share logs from `qs -c DankMaterialShell` for debugging
|
- Share logs from `qs -c DankMaterialShell` for debugging
|
||||||
- Join the niri community for compositor-specific questions
|
- Join the niri community for compositor-specific questions
|
||||||
@@ -363,6 +425,7 @@ All settings are configurable in `~/.config/DankMaterialShell/settings.json`, or
|
|||||||
DankMaterialShell welcomes contributions! Whether it's bug fixes, new widgets, theme improvements, or documentation updates - all help is appreciated.
|
DankMaterialShell welcomes contributions! Whether it's bug fixes, new widgets, theme improvements, or documentation updates - all help is appreciated.
|
||||||
|
|
||||||
**Areas that need attention:**
|
**Areas that need attention:**
|
||||||
|
|
||||||
- More widget options and customization
|
- More widget options and customization
|
||||||
- Additional compositor compatibility
|
- Additional compositor compatibility
|
||||||
- Performance optimizations
|
- Performance optimizations
|
||||||
@@ -373,4 +436,4 @@ DankMaterialShell welcomes contributions! Whether it's bug fixes, new widgets, t
|
|||||||
- [quickshell](https://quickshell.org/) the core of what makes a shell like this possible.
|
- [quickshell](https://quickshell.org/) the core of what makes a shell like this possible.
|
||||||
- [niri](https://github.com/YaLTeR/niri) for the awesome scrolling compositor.
|
- [niri](https://github.com/YaLTeR/niri) for the awesome scrolling compositor.
|
||||||
- [soramanew](https://github.com/soramanew) who built [caelestia](https://github.com/caelestia-dots/shell) which served as inspiration and guidance for many dank widgets.
|
- [soramanew](https://github.com/soramanew) who built [caelestia](https://github.com/caelestia-dots/shell) which served as inspiration and guidance for many dank widgets.
|
||||||
- [end-4](https://github.com/end-4) for [dots-hyprland](https://github.com/end-4/dots-hyprland) which also served as inspiration and guidance for many dank widgets.
|
- [end-4](https://github.com/end-4) for [dots-hyprland](https://github.com/end-4/dots-hyprland) which also served as inspiration and guidance for many dank widgets.
|
||||||
|
|||||||
@@ -56,36 +56,35 @@ update_theme_settings() {
|
|||||||
|
|
||||||
update_gtk_css() {
|
update_gtk_css() {
|
||||||
local config_dir="$1"
|
local config_dir="$1"
|
||||||
local import_line="@import url(\"$config_dir/gtk-4.0/dank-colors.css\");"
|
local is_light="$2"
|
||||||
|
local shell_dir="$3"
|
||||||
|
|
||||||
echo "Updating GTK CSS imports..."
|
echo "Updating GTK CSS..."
|
||||||
|
|
||||||
# Update GTK-4.0
|
# GTK-3.0: Copy the appropriate template file
|
||||||
|
local gtk3_css="$config_dir/gtk-3.0/gtk.css"
|
||||||
|
if [ "$is_light" = "true" ]; then
|
||||||
|
echo "Copying light GTK-3.0 template..."
|
||||||
|
cp "$shell_dir/templates/gtk3-colloid-light.css" "$gtk3_css"
|
||||||
|
else
|
||||||
|
echo "Copying dark GTK-3.0 template..."
|
||||||
|
cp "$shell_dir/templates/gtk3-colloid-dark.css" "$gtk3_css"
|
||||||
|
fi
|
||||||
|
echo "Updated GTK-3.0 CSS"
|
||||||
|
|
||||||
|
# GTK-4.0: Use simplified import
|
||||||
|
local gtk4_import="@import url(\"dank-colors.css\");"
|
||||||
local gtk4_css="$config_dir/gtk-4.0/gtk.css"
|
local gtk4_css="$config_dir/gtk-4.0/gtk.css"
|
||||||
if [ -f "$gtk4_css" ]; then
|
if [ -f "$gtk4_css" ]; then
|
||||||
# Remove existing import if present
|
# Remove existing import if present
|
||||||
sed -i '/^@import url.*dank-colors\.css.*);$/d' "$gtk4_css"
|
sed -i '/^@import url.*dank-colors\.css.*);$/d' "$gtk4_css"
|
||||||
# Add import at the top
|
# Add import at the top
|
||||||
sed -i "1i\\$import_line" "$gtk4_css"
|
sed -i "1i\\$gtk4_import" "$gtk4_css"
|
||||||
else
|
else
|
||||||
# Create new gtk.css with import
|
# Create new gtk.css with import
|
||||||
echo "$import_line" > "$gtk4_css"
|
echo "$gtk4_import" > "$gtk4_css"
|
||||||
fi
|
fi
|
||||||
echo "Updated GTK-4.0 CSS import"
|
echo "Updated GTK-4.0 CSS import"
|
||||||
|
|
||||||
# Update GTK-3.0 with its own path
|
|
||||||
local gtk3_import="@import url(\"$config_dir/gtk-3.0/dank-colors.css\");"
|
|
||||||
local gtk3_css="$config_dir/gtk-3.0/gtk.css"
|
|
||||||
if [ -f "$gtk3_css" ]; then
|
|
||||||
# Remove existing import if present
|
|
||||||
sed -i '/^@import url.*dank-colors\.css.*);$/d' "$gtk3_css"
|
|
||||||
# Add import at the top
|
|
||||||
sed -i "1i\\$gtk3_import" "$gtk3_css"
|
|
||||||
else
|
|
||||||
# Create new gtk.css with import
|
|
||||||
echo "$gtk3_import" > "$gtk3_css"
|
|
||||||
fi
|
|
||||||
echo "Updated GTK-3.0 CSS import"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
update_qt_config() {
|
update_qt_config() {
|
||||||
@@ -240,7 +239,7 @@ update_theme_settings "$color_scheme" "$ICON_THEME"
|
|||||||
|
|
||||||
# Update GTK CSS imports if GTK theming is enabled
|
# Update GTK CSS imports if GTK theming is enabled
|
||||||
if [ "$GTK_THEMING" = "true" ]; then
|
if [ "$GTK_THEMING" = "true" ]; then
|
||||||
update_gtk_css "$CONFIG_DIR"
|
update_gtk_css "$CONFIG_DIR" "$IS_LIGHT" "$SHELL_DIR"
|
||||||
echo "GTK theming updated"
|
echo "GTK theming updated"
|
||||||
else
|
else
|
||||||
echo "GTK theming disabled - skipping GTK CSS updates"
|
echo "GTK theming disabled - skipping GTK CSS updates"
|
||||||
|
|||||||
8374
templates/gtk3-colloid-dark.css
Normal file
8374
templates/gtk3-colloid-dark.css
Normal file
File diff suppressed because it is too large
Load Diff
8376
templates/gtk3-colloid-light.css
Normal file
8376
templates/gtk3-colloid-light.css
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user