Compare commits
33 Commits
v0.7.0
...
v1.0.0-rc1
Author | SHA1 | Date | |
---|---|---|---|
|
9625cc3eb1 | ||
|
d8a7720c1d | ||
|
4050bab0f1 | ||
|
fb3ceb6211 | ||
|
4b73517739 | ||
|
0c3e8817da | ||
|
baecd17698 | ||
|
877e75568c | ||
|
b353190bef | ||
|
558953cdd2 | ||
|
9e82be620c | ||
|
662a18a2d6 | ||
|
9da440ced6 | ||
|
42abad4561 | ||
|
edef76faba | ||
|
e7314059e2 | ||
|
355e12387f | ||
|
5b6c477850 | ||
|
4f4501f83b | ||
|
7000de38a1 | ||
|
8d9803f089 | ||
|
26b0d12b1b | ||
|
5b043b61c6 | ||
|
3b802c6b03 | ||
|
939386a30a | ||
|
e279ceffca | ||
|
c577226e9c | ||
|
76cccfa215 | ||
|
9082969c1c | ||
|
f3faf6d9da | ||
|
761a075ca9 | ||
|
23a48d8b81 | ||
|
03376d1003 |
33
.github/ISSUE_TEMPLATE/bug-report.md
vendored
33
.github/ISSUE_TEMPLATE/bug-report.md
vendored
@@ -1,33 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug report
|
|
||||||
about: Create a bug report about the GTK theme.
|
|
||||||
title: ''
|
|
||||||
labels: ''
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Describe the bug**
|
|
||||||
A clear and concise description of what the bug is.
|
|
||||||
|
|
||||||
**Mention your distribution and your theme version**
|
|
||||||
Please mention your Linux distribution and the theme version you've installed.
|
|
||||||
|
|
||||||
**Select how you installed the theme**
|
|
||||||
- [ ] GitHub Releases
|
|
||||||
- [ ] AUR package
|
|
||||||
- [ ] Nixpkg
|
|
||||||
- [ ] Using the python install script <!-- If you installed using the python script, please mention the command that you ran for installation. -->
|
|
||||||
- [ ] Flatpak
|
|
||||||
|
|
||||||
**Symlinked the gtk-4.0 folder?**
|
|
||||||
Have you symlinked the `gtk-4.0` folder as mentioned in the [README](https://github.com/catppuccin/gtk/blob/e907775723eb68a5628c1bcd718b9d822cea9aee/README.md?plain=1#L85-L93)? **This is not applicable for users who have installed the theme with the Nixpkg.**
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
A clear and concise description of what you expected to happen.
|
|
||||||
|
|
||||||
**Screenshots**
|
|
||||||
If possible, please share screenshots of the bug you've encountered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Please mention any additional context that might be applicable.
|
|
53
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
53
.github/ISSUE_TEMPLATE/bug.yml
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
name: Bug Report
|
||||||
|
description: Report your bugs with the theme here!
|
||||||
|
labels: [bug]
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue outlining your problem?
|
||||||
|
description: Please search to see if an issue already exists for your problem.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing issues and they do not solve my problem.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the bug.
|
||||||
|
description: Also tell us, what do you expect to see?
|
||||||
|
placeholder: The tabs are darker than they should be...
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Attach screenshots.
|
||||||
|
description: If applicable, attach screenshots which clearly highlight the bug.
|
||||||
|
- type: dropdown
|
||||||
|
id: installation_method
|
||||||
|
attributes:
|
||||||
|
label: How did you install the theme?
|
||||||
|
options:
|
||||||
|
- GitHub Release
|
||||||
|
- AUR Package
|
||||||
|
- catppuccin/nix
|
||||||
|
- Nixpkgs
|
||||||
|
- Flatpak
|
||||||
|
- From source (Python script)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: If using GTK4, have you symlinked the "gtk-4.0" folder?
|
||||||
|
description: "The instructions for symlinking are described in the [README](https://github.com/catppuccin/gtk/tree/877e75568c9bb0d57c7ddda85b246fa17af45e57?tab=readme-ov-file#for-gtk-4-users)."
|
||||||
|
options:
|
||||||
|
- label: I have symlinked the `gtk-4.0` folder.
|
||||||
|
required: false
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: What GNOME version are you seeing the bug on?
|
||||||
|
description: "Follow [GNOME's instructions](https://help.gnome.org/users/gnome-help/stable/gnome-version.html.en) to find out what version you are running."
|
||||||
|
placeholder: "GNOME Version 42.9"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Any additional comments?
|
||||||
|
description: Add any information that hasn't been covered in the previous sections!
|
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Community Discord
|
||||||
|
url: https://discord.com/servers/catppuccin-907385605422448742
|
||||||
|
about: Chat to other community members!
|
18
.github/ISSUE_TEMPLATE/enhancement.yml
vendored
Normal file
18
.github/ISSUE_TEMPLATE/enhancement.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
name: Enhancement Issue
|
||||||
|
description: Request improvements to the theme here!
|
||||||
|
labels: [enhancement]
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue outlining your improvement?
|
||||||
|
description: Please search to see if your improvement has already been raised as an issue.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing issues and my improvement has not been raised yet.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: What would you like to see added and/or changed?
|
||||||
|
description: Make sure to mention why you think this is an improvement!
|
||||||
|
placeholder: I'd like to have an extra configuration option for...
|
||||||
|
validations:
|
||||||
|
required: true
|
18
.github/ISSUE_TEMPLATE/meta.yml
vendored
Normal file
18
.github/ISSUE_TEMPLATE/meta.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
name: Meta Issue
|
||||||
|
description: Raise any issue regarding the repository here!
|
||||||
|
labels: [meta]
|
||||||
|
body:
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Is there an existing issue outlining your problem?
|
||||||
|
description: Please search to see if an issue already exists for your problem.
|
||||||
|
options:
|
||||||
|
- label: I have searched the existing issues and they do not solve my problem.
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the issue.
|
||||||
|
description: Bugs should be raised under a [Bug Report](https://github.com/catppuccin/gtk/issues/new?assignees=&labels=bug&template=bug.yml).
|
||||||
|
placeholder: The README is missing crucial information such as...
|
||||||
|
validations:
|
||||||
|
required: true
|
25
.github/workflows/release.yml
vendored
25
.github/workflows/release.yml
vendored
@@ -1,30 +1,33 @@
|
|||||||
name: "GTK theme release"
|
name: "Release"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- "*"
|
- "v*"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
- uses: actions/setup-python@v4
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: "3.11"
|
||||||
cache: 'pip'
|
cache: "pip"
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pip install -r requirements.txt
|
run: pip install -r requirements.txt
|
||||||
- name: Install colloid specific dependencies
|
- name: Install colloid specific dependencies
|
||||||
run: sudo apt update && sudo apt install -y sassc inkscape optipng
|
run: sudo apt update && sudo apt install -y sassc inkscape optipng
|
||||||
- name: Generate themes
|
- name: Generate themes
|
||||||
run: python ./install.py all -a all --zip -d $PWD/releases --recreate-asset
|
run: |
|
||||||
|
python ./build.py mocha -a all --zip -d $PWD/releases &&
|
||||||
|
python ./build.py macchiato -a all --zip -d $PWD/releases &&
|
||||||
|
python ./build.py frappe -a all --zip -d $PWD/releases &&
|
||||||
|
python ./build.py latte -a all --zip -d $PWD/releases
|
||||||
- name: Add zips to release
|
- name: Add zips to release
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
|
draft: true
|
||||||
files: ./releases/*.zip
|
files: ./releases/*.zip
|
||||||
|
5
.gitignore
vendored
5
.gitignore
vendored
@@ -3,6 +3,11 @@ pkgs/
|
|||||||
__pycache__
|
__pycache__
|
||||||
venv/
|
venv/
|
||||||
.venv
|
.venv
|
||||||
|
bin/
|
||||||
|
lib*/
|
||||||
|
*.cfg
|
||||||
|
.direnv
|
||||||
|
build/
|
||||||
|
|
||||||
# Releases folder
|
# Releases folder
|
||||||
releases
|
releases
|
||||||
|
204
README.md
204
README.md
@@ -15,162 +15,118 @@
|
|||||||
<img src="assets/res.webp"/>
|
<img src="assets/res.webp"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
# About
|
This GTK theme is based on the [Colloid](https://github.com/vinceliuice/Colloid-gtk-theme) theme made by [vinceliuice](https://github.com/vinceliuice)
|
||||||
|
|
||||||
This GTK theme is based on the [Colloid](https://github.com/vinceliuice/Colloid-gtk-theme) theme made by [Vinceliuice](https://github.com/vinceliuice)
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
- GTK `>=3.20`
|
- GTK >=3.20
|
||||||
- `gnome-themes-extra` (or `gnome-themes-standard`)
|
- `python3`
|
||||||
- Murrine engine
|
- `gnome-themes-extra` (or `gnome-themes-standard`)
|
||||||
|
|
||||||
### Installation
|
To build the theme, make sure the following packages are installed:
|
||||||
|
- `sassc`
|
||||||
|
- `inkscape`
|
||||||
|
- `optipng`
|
||||||
|
|
||||||
1. Download and extract the theme zip from [releases](https://github.com/catppuccin/gtk/releases/).
|
### Manually
|
||||||
2. Move the theme folder to **".themes"** in your home directory. **(~/.themes)** (Skip this step if you are using the AUR package)
|
|
||||||
3. Select the downloaded theme via your desktop specific tweaks application (**gnome-tweaks** on Gnome 3+).
|
|
||||||
|
|
||||||
### For Arch Linux users
|
1. Download and extract the theme zip from the [latest release](https://github.com/catppuccin/gtk/releases/latest/).
|
||||||
|
2. Move the theme folder to the `~/.local/share/themes` directory.
|
||||||
We have 4 AUR packages for all the 4 flavours of the theme:
|
3. Select the downloaded theme via your desktop specific tweaks application (GNOME Tweaks on GNOME 3+).
|
||||||
- [Latte](https://aur.archlinux.org/packages/catppuccin-gtk-theme-latte)
|
4. To theme other apps that are using GTK, make sure to run the following command:
|
||||||
- [Frappe](https://aur.archlinux.org/packages/catppuccin-gtk-theme-frappe)
|
```bash
|
||||||
- [Macchiato](https://aur.archlinux.org/packages/catppuccin-gtk-theme-macchiato)
|
export THEME_DIR="~/.local/share/themes/catppuccin-<flavor>-<accent>-standard+default"
|
||||||
- [Mocha](https://aur.archlinux.org/packages/catppuccin-gtk-theme-mocha)
|
mkdir -p "${HOME}/.config/gtk-4.0" &&
|
||||||
|
ln -sf "${THEME_DIR}/gtk-4.0/assets" "${HOME}/.config/gtk-4.0/assets" &&
|
||||||
With your favourite AUR helper, install them:
|
ln -sf "${THEME_DIR}/gtk-4.0/gtk.css" "${HOME}/.config/gtk-4.0/gtk.css" &&
|
||||||
```bash
|
ln -sf "${THEME_DIR}/gtk-4.0/gtk-dark.css" "${HOME}/.config/gtk-4.0/gtk-dark.css"
|
||||||
yay -S catppuccin-gtk-theme-mocha catppuccin-gtk-theme-macchiato catppuccin-gtk-theme-frappe catppuccin-gtk-theme-latte
|
|
||||||
```
|
|
||||||
### For Nix users
|
|
||||||
The [catppuccin-gtk](https://github.com/NixOS/nixpkgs/blob/master/pkgs/data/themes/catppuccin-gtk/default.nix) package in Nixpkgs allows you to specify the accents, size, tweaks and variant (flavour) of the theme by overriding the package.
|
|
||||||
|
|
||||||
By default, the variant is `frappe`, the accent is `blue`, the size is `standard`, and no tweaks are enabled. To change them, override the package. A list of valid choices are available in the package definition [here](https://github.com/NixOS/nixpkgs/blob/7ce8e7c4cf90492a631e96bcfe70724104914381/pkgs/data/themes/catppuccin-gtk/default.nix#L16).
|
|
||||||
|
|
||||||
Example:
|
|
||||||
```nix
|
|
||||||
pkgs.catppuccin-gtk.override {
|
|
||||||
accents = [ "pink" ]; # You can specify multiple accents here to output multiple themes
|
|
||||||
size = "compact";
|
|
||||||
tweaks = [ "rimless" "black" ]; # You can also specify multiple tweaks here
|
|
||||||
variant = "macchiato";
|
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
To use it in home-manager:
|
### Flatpak
|
||||||
|
|
||||||
|
In order for Flatpak to access the theme, make sure to run the following command:
|
||||||
|
```bash
|
||||||
|
sudo flatpak override --filesystem=$HOME/.local/share/themes
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, run the following command to apply the theme.
|
||||||
|
```bash
|
||||||
|
export THEME_DIR="~/.local/share/themes/catppuccin-<flavor>-<accent>-standard+default"
|
||||||
|
sudo flatpak override --env=GTK_THEME=$THEME_DIR
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using the install script to install the theme
|
||||||
|
|
||||||
|
To install the theme using the install script, run `install.py`:
|
||||||
|
```
|
||||||
|
python3 install.py <flavor> <accent>
|
||||||
|
```
|
||||||
|
|
||||||
|
If you have adwaita installed, make sure to include `--link` in order to add symlinks for it:
|
||||||
|
```
|
||||||
|
python3 install.py <flavor> <accent> --link
|
||||||
|
```
|
||||||
|
Run the command and the gtk theme should be installed!
|
||||||
|
|
||||||
|
### AUR
|
||||||
|
|
||||||
|
We have 4 AUR packages for all the 4 flavours (Latte, Frappe, Macchiato, Mocha)
|
||||||
|
|
||||||
|
With your favourite AUR helper, you can install one of these flavors:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yay -S catppuccin-gtk-theme-<flavor>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Nix
|
||||||
|
|
||||||
|
We suggest you use [catppuccin/nix](https://github.com/catppuccin/nix).
|
||||||
|
Alternatively, you can use [catppuccin-gtk](https://github.com/NixOS/nixpkgs/blob/master/pkgs/data/themes/catppuccin-gtk/default.nix) from nixpkgs.
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
# home.nix
|
{inputs, ...}: {
|
||||||
{
|
imports = [inputs.catppuccin.homeManagerModules.catppuccin];
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
gtk = {
|
gtk = {
|
||||||
enable = true;
|
enable = true;
|
||||||
theme = {
|
catppuccin = {
|
||||||
name = "Catppuccin-Macchiato-Compact-Pink-Dark";
|
enable = true;
|
||||||
package = pkgs.catppuccin-gtk.override {
|
flavor = "mocha";
|
||||||
accents = [ "pink" ];
|
accent = "pink";
|
||||||
size = "compact";
|
size = "standard";
|
||||||
tweaks = [ "rimless" "black" ];
|
tweaks = [ "normal" ];
|
||||||
variant = "macchiato";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### For GTK 4 users
|
> [!TIP]
|
||||||
|
> For further information on the options available, see the [full documentation](https://github.com/catppuccin/nix/blob/main/docs/home-manager-options.md#gtkcatppuccinenable).
|
||||||
|
|
||||||
To theme GTK 4 applications you have to manually symlink the `~/.config/gtk-4.0/` to the themes folder. Use the following commands
|
### For Other Distros
|
||||||
```bash
|
|
||||||
mkdir -p "${HOME}/.config/gtk-4.0"
|
|
||||||
ln -sf "${THEME_DIR}/gtk-4.0/assets" "${HOME}/.config/gtk-4.0/assets"
|
|
||||||
ln -sf "${THEME_DIR}/gtk-4.0/gtk.css" "${HOME}/.config/gtk-4.0/gtk.css"
|
|
||||||
ln -sf "${THEME_DIR}/gtk-4.0/gtk-dark.css" "${HOME}/.config/gtk-4.0/gtk-dark.css"
|
|
||||||
```
|
|
||||||
|
|
||||||
### For Flatpak users
|
Refer to [Using the install script to install the theme](https://github.com/catppuccin/gtk/edit/refactor/build-system/README.md#installing-the-theme-manually) or [Installing the theme manually](https://github.com/catppuccin/gtk/edit/refactor/build-system/README.md#installing-the-theme-manually).
|
||||||
|
|
||||||
1. To give your Flatpaks access to your themes folder run:
|
### Theming the GDM Theme
|
||||||
```bash
|
In order to theme the GDM theme, install the `gdm-settings` app, select the Catppuccin theme, and click *Save*.
|
||||||
sudo flatpak override --filesystem=$HOME/.themes
|
|
||||||
```
|
|
||||||
2. To set the theme for all Flatpaks, replace `##theme##` with the name of the theme you want to use and run this command:
|
|
||||||
```bash
|
|
||||||
sudo flatpak override --env=GTK_THEME=##theme##
|
|
||||||
```
|
|
||||||
3. For a more in depth tutorial see Hamza Algohary's tutorial on [It's FOSS](https://itsfoss.com/flatpak-app-apply-theme/)
|
|
||||||
|
|
||||||
### Using the script
|
|
||||||
|
|
||||||
**Note**: Ensure that you have at least Python version 3.10 installed
|
|
||||||
|
|
||||||
Clone the repository using
|
|
||||||
```bash
|
|
||||||
git clone --recurse-submodules git@github.com:catppuccin/gtk.git
|
|
||||||
virtualenv -p python3 venv # to be created only once and only if you need a virtual env
|
|
||||||
source venv/bin/activate
|
|
||||||
pip install -r requirements.txt
|
|
||||||
```
|
|
||||||
To check out the install script, run
|
|
||||||
```bash
|
|
||||||
python install.py --help
|
|
||||||
```
|
|
||||||
> Tip: `python install.py --help` allows the following options:
|
|
||||||
|
|
||||||
```
|
|
||||||
Compulsory field Specify color variant(s) [mocha|frappe|macchiato|latte|all]
|
|
||||||
-d, --dest DIR Specify destination directory (Default: ~/.themes)
|
|
||||||
-n, --name NAME Specify theme name (Default: Colloid)
|
|
||||||
-a, --accent VARIANT... Specify theme color variant(s) [rosewater|flamingo|pink|mauve|red|maroon|peach|yellow|green|teal|sky|
|
|
||||||
sapphire|blue|lavender|all] (Default: blue)
|
|
||||||
-s, --size VARIANT... Specify size variant [standard|compact] (Default: standard variant)
|
|
||||||
-l, --link Link installed gtk-4.0 theme to config folder for all libadwaita app use this theme
|
|
||||||
--zip Zips up the finally produced themes.
|
|
||||||
--tweaks Specify versions for tweaks [black|rimless|normal|float]
|
|
||||||
1. black: Blackness color version
|
|
||||||
2. rimless: Remove the 1px border about windows and menus
|
|
||||||
3. normal: Normal windows button style (titlebuttons: max/min/close)
|
|
||||||
4. float: Floating gnome-shell panel style
|
|
||||||
-h, --help Show help
|
|
||||||
```
|
|
||||||
You can install any theme like the following example
|
|
||||||
```bash
|
|
||||||
python install.py mocha -a sky --tweaks rimless -d ~/.themes
|
|
||||||
|
|
||||||
```
|
|
||||||
You can build all possible variations of the theme possible using the following command and it will install it to releases folder
|
|
||||||
```bash
|
|
||||||
python install.py all -a all
|
|
||||||
```
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
You need to install the following packages to build the theme. Check with your distribution for the package names in the repository
|
|
||||||
- `sassc`
|
|
||||||
- `inkscape`
|
|
||||||
- `optipng`
|
|
||||||
|
|
||||||
A few important notes to keep in mind
|
|
||||||
|
|
||||||
- `recolor.py` handles all changes that needs to be done to colloid to ensure it generated catppuccin colors. If vinceliuice changes anything in his theme in future, that is where you must change
|
|
||||||
- `var.py` includes all different variables that you can tinker around as per your personal requirements.
|
|
||||||
- `create_theme.py` consists of a wrapper that will recolor the colloid theme, install it as per the args provided and rename it accordingly.
|
|
||||||
|
|
||||||
## 💝 Thanks to
|
## 💝 Thanks to
|
||||||
|
|
||||||
**Current maintainers**
|
**Current maintainers**
|
||||||
|
|
||||||
- [npv12](https://github.com/npv12)
|
- [npv12](https://github.com/npv12)
|
||||||
- [ghostx31](https://github.com/ghostx31)
|
- [ghostx31](https://github.com/ghostx31)
|
||||||
- [Syndrizzle](https://github.com/Syndrizzle)
|
- [Syndrizzle](https://github.com/Syndrizzle)
|
||||||
|
|
||||||
**Contributions**
|
**Contributions**
|
||||||
- [rubyowo](https://github.com/rubyowo) - for working on the build and CI script
|
|
||||||
|
- [rubyowo](https://github.com/rubyowo) - CI and docs
|
||||||
|
- [braheezy](https://github.com/braheezy) - Instructions for the GDM theme
|
||||||
|
|
||||||
**Previous maintainer(s)**
|
**Previous maintainer(s)**
|
||||||
|
|
||||||
- [sadrach-cl](https://github.com/sadrach-cl)
|
- [sadrach-cl](https://github.com/sadrach-cl)
|
||||||
|
|
||||||
|
|
||||||
|
667
build.py
Executable file
667
build.py
Executable file
@@ -0,0 +1,667 @@
|
|||||||
|
#! /usr/bin/env python3
|
||||||
|
import os, re, shutil, subprocess, argparse, glob, logging, zipfile
|
||||||
|
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import Any, Literal, List
|
||||||
|
|
||||||
|
from catppuccin import PALETTE
|
||||||
|
from catppuccin.models import Flavor, Color
|
||||||
|
|
||||||
|
THIS_DIR = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
SRC_DIR = f"{THIS_DIR}/colloid/src"
|
||||||
|
SASSC_OPT = ["-M", "-t", "expanded"]
|
||||||
|
|
||||||
|
logger = logging.getLogger("catppuccin-gtk")
|
||||||
|
logger.setLevel(logging.DEBUG)
|
||||||
|
ch = logging.StreamHandler()
|
||||||
|
formatter = logging.Formatter("[%(name)s] [%(levelname)s] - %(message)s")
|
||||||
|
ch.setFormatter(formatter)
|
||||||
|
logger.addHandler(ch)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Tweaks:
|
||||||
|
tweaks: List[str]
|
||||||
|
|
||||||
|
def has(self, tweak: str) -> bool:
|
||||||
|
return tweak in self.tweaks
|
||||||
|
|
||||||
|
def id(self) -> str:
|
||||||
|
return ",".join(self.tweaks)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Suffix:
|
||||||
|
true_value: str
|
||||||
|
test: Any # callback function
|
||||||
|
false_value: str = ""
|
||||||
|
|
||||||
|
|
||||||
|
IS_DARK = Suffix(true_value="-Dark", test=lambda ctx: ctx.flavor.dark)
|
||||||
|
IS_LIGHT = Suffix(true_value="-Light", test=lambda ctx: not ctx.flavor.dark)
|
||||||
|
IS_WINDOW_NORMAL = Suffix(true_value="-Normal", test=lambda ctx: ctx.tweaks.has('normal'))
|
||||||
|
DARK_LIGHT = Suffix(
|
||||||
|
true_value="-Dark", false_value="-Light", test=lambda ctx: ctx.flavor.dark
|
||||||
|
)
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class BuildContext:
|
||||||
|
build_root: str
|
||||||
|
output_format: Literal["zip"] | Literal["dir"]
|
||||||
|
theme_name: str
|
||||||
|
flavor: Flavor
|
||||||
|
accent: Color
|
||||||
|
size: Literal["standard"] | Literal["compact"]
|
||||||
|
tweaks: Tweaks
|
||||||
|
|
||||||
|
def output_dir(self) -> str:
|
||||||
|
return f"{self.build_root}/{self.build_id()}"
|
||||||
|
|
||||||
|
def build_id(self) -> str:
|
||||||
|
return f"{self.theme_name}-{self.flavor.identifier}-{self.accent.identifier}-{self.size}+{self.tweaks.id() or 'default'}"
|
||||||
|
|
||||||
|
def apply_suffix(self, suffix: Suffix) -> str:
|
||||||
|
if suffix.test(self):
|
||||||
|
return suffix.true_value
|
||||||
|
else:
|
||||||
|
return suffix.false_value
|
||||||
|
|
||||||
|
|
||||||
|
def build(ctx: BuildContext):
|
||||||
|
output_dir = ctx.output_dir()
|
||||||
|
logger.info(f"Building into '{output_dir}'...")
|
||||||
|
|
||||||
|
apply_tweaks(ctx)
|
||||||
|
|
||||||
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
|
with open(f"{output_dir}/index.theme", "w") as file:
|
||||||
|
file.write("[Desktop Entry]\n")
|
||||||
|
file.write("Type=X-GNOME-Metatheme\n")
|
||||||
|
file.write(f"Name={ctx.build_id()}\n")
|
||||||
|
file.write("Comment=An Flat Gtk+ theme based on Elegant Design\n")
|
||||||
|
file.write("Encoding=UTF-8\n")
|
||||||
|
file.write("\n")
|
||||||
|
file.write("[X-GNOME-Metatheme]\n")
|
||||||
|
file.write(f"GtkTheme={ctx.build_id()}\n")
|
||||||
|
file.write(f"MetacityTheme={ctx.build_id()}\n")
|
||||||
|
file.write(f"IconTheme=Tela-circle{ctx.apply_suffix(IS_DARK)}\n")
|
||||||
|
file.write(f"CursorTheme={ctx.flavor.name}-cursors\n")
|
||||||
|
file.write("ButtonLayout=close,minimize,maximize:menu\n")
|
||||||
|
|
||||||
|
os.makedirs(f"{output_dir}/gnome-shell", exist_ok=True)
|
||||||
|
shutil.copyfile(
|
||||||
|
f"{SRC_DIR}/main/gnome-shell/pad-osd.css",
|
||||||
|
f"{output_dir}/gnome-shell/pad-osd.css",
|
||||||
|
)
|
||||||
|
subprocess.check_call(
|
||||||
|
[
|
||||||
|
"sassc",
|
||||||
|
*SASSC_OPT,
|
||||||
|
f"{SRC_DIR}/main/gnome-shell/gnome-shell{ctx.apply_suffix(DARK_LIGHT)}.scss",
|
||||||
|
f"{output_dir}/gnome-shell/gnome-shell.css",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
os.makedirs(f"{output_dir}/gtk-3.0", exist_ok=True)
|
||||||
|
subprocess.check_call(
|
||||||
|
[
|
||||||
|
"sassc",
|
||||||
|
*SASSC_OPT,
|
||||||
|
f"{SRC_DIR}/main/gtk-3.0/gtk{ctx.apply_suffix(DARK_LIGHT)}.scss",
|
||||||
|
f"{output_dir}/gtk-3.0/gtk.css",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
subprocess.check_call(
|
||||||
|
[
|
||||||
|
"sassc",
|
||||||
|
*SASSC_OPT,
|
||||||
|
# NOTE: This uses 'Dark' for the source, but 'dark' for the destination. This is intentional. Do !!NOT!! change it without consultation
|
||||||
|
f"{SRC_DIR}/main/gtk-3.0/gtk-Dark.scss",
|
||||||
|
f"{output_dir}/gtk-3.0/gtk-dark.css",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
os.makedirs(f"{output_dir}/gtk-4.0", exist_ok=True)
|
||||||
|
subprocess.check_call(
|
||||||
|
[
|
||||||
|
"sassc",
|
||||||
|
*SASSC_OPT,
|
||||||
|
f"{SRC_DIR}/main/gtk-4.0/gtk{ctx.apply_suffix(DARK_LIGHT)}.scss",
|
||||||
|
f"{output_dir}/gtk-4.0/gtk.css",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
subprocess.check_call(
|
||||||
|
[
|
||||||
|
"sassc",
|
||||||
|
*SASSC_OPT,
|
||||||
|
# NOTE: This uses 'Dark' for the source, but 'dark' for the destination. This is intentional. Do !!NOT!! change it without consultation
|
||||||
|
f"{SRC_DIR}/main/gtk-4.0/gtk-Dark.scss",
|
||||||
|
f"{output_dir}/gtk-4.0/gtk-dark.css",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
os.makedirs(f"{output_dir}/cinnamon", exist_ok=True)
|
||||||
|
subprocess.check_call(
|
||||||
|
[
|
||||||
|
"sassc",
|
||||||
|
*SASSC_OPT,
|
||||||
|
f"{SRC_DIR}/main/cinnamon/cinnamon{ctx.apply_suffix(DARK_LIGHT)}.scss",
|
||||||
|
f"{output_dir}/cinnamon/cinnamon.css",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
os.makedirs(f"{output_dir}/metacity-1", exist_ok=True)
|
||||||
|
shutil.copyfile(
|
||||||
|
f"{SRC_DIR}/main/metacity-1/metacity-theme-3{ctx.apply_suffix(IS_WINDOW_NORMAL)}.xml",
|
||||||
|
f"{output_dir}/metacity-1/metacity-theme-3.xml",
|
||||||
|
)
|
||||||
|
# FIXME: Symlinks aren't working as intended
|
||||||
|
# FIXME: Do we need them?
|
||||||
|
# os.symlink(
|
||||||
|
# f"{output_dir}/metacity-1/metacity-theme-3.xml",
|
||||||
|
# f"{output_dir}/metacity-1/metacity-theme-2.xml",
|
||||||
|
# )
|
||||||
|
# os.symlink(
|
||||||
|
# f"{output_dir}/metacity-1/metacity-theme-3.xml",
|
||||||
|
# f"{output_dir}/metacity-1/metacity-theme-1.xml",
|
||||||
|
# )
|
||||||
|
|
||||||
|
os.makedirs(f"{output_dir}/xfwm4", exist_ok=True)
|
||||||
|
shutil.copyfile(
|
||||||
|
f"{SRC_DIR}/main/xfwm4/themerc{ctx.apply_suffix(IS_LIGHT)}",
|
||||||
|
f"{output_dir}/xfwm4/themerc",
|
||||||
|
)
|
||||||
|
|
||||||
|
os.makedirs(f"{output_dir}-hdpi/xfwm4", exist_ok=True)
|
||||||
|
shutil.copyfile(
|
||||||
|
f"{SRC_DIR}/main/xfwm4/themerc{ctx.apply_suffix(IS_LIGHT)}",
|
||||||
|
f"{output_dir}-hdpi/xfwm4/themerc",
|
||||||
|
)
|
||||||
|
subst_text(f"{output_dir}-hdpi/xfwm4/themerc", "button_offset=6", "button_offset=9")
|
||||||
|
|
||||||
|
os.makedirs(f"{output_dir}-xhdpi/xfwm4", exist_ok=True)
|
||||||
|
shutil.copyfile(
|
||||||
|
f"{SRC_DIR}/main/xfwm4/themerc{ctx.apply_suffix(IS_LIGHT)}",
|
||||||
|
f"{output_dir}-xhdpi/xfwm4/themerc",
|
||||||
|
)
|
||||||
|
subst_text(
|
||||||
|
f"{output_dir}-xhdpi/xfwm4/themerc", "button_offset=6", "button_offset=12"
|
||||||
|
)
|
||||||
|
|
||||||
|
if not ctx.flavor.dark:
|
||||||
|
shutil.copytree(
|
||||||
|
f"{SRC_DIR}/main/plank/theme-Light-Catppuccin/", f"{output_dir}/plank"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
shutil.copytree(
|
||||||
|
f"{SRC_DIR}/main/plank/theme-Dark-Catppuccin/", f"{output_dir}/plank"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def tweaks_temp():
|
||||||
|
shutil.copyfile(f"{SRC_DIR}/sass/_tweaks.scss", f"{SRC_DIR}/sass/_tweaks-temp.scss")
|
||||||
|
|
||||||
|
|
||||||
|
def subst_text(path, _from, to):
|
||||||
|
with open(path, "r+") as f:
|
||||||
|
content = f.read()
|
||||||
|
f.seek(0)
|
||||||
|
f.truncate()
|
||||||
|
f.write(re.sub(_from, to, content))
|
||||||
|
|
||||||
|
|
||||||
|
GS_VERSION = "46-0"
|
||||||
|
|
||||||
|
|
||||||
|
def gnome_shell_version():
|
||||||
|
shutil.copyfile(
|
||||||
|
f"{SRC_DIR}/sass/gnome-shell/_common.scss",
|
||||||
|
f"{SRC_DIR}/sass/gnome-shell/_common-temp.scss",
|
||||||
|
)
|
||||||
|
subst_text(
|
||||||
|
f"{SRC_DIR}/sass/gnome-shell/_common-temp.scss",
|
||||||
|
"@import 'widgets-40-0';",
|
||||||
|
f"@import 'widgets-{GS_VERSION}';",
|
||||||
|
)
|
||||||
|
|
||||||
|
if GS_VERSION == "3-28":
|
||||||
|
subst_text(
|
||||||
|
f"{SRC_DIR}/sass/gnome-shell/_common-temp.scss",
|
||||||
|
"@import 'extensions-40-0';",
|
||||||
|
f"@import 'extensions-{GS_VERSION}';",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# Accent translation
|
||||||
|
ctp_to_colloid = {
|
||||||
|
"rosewater": "pink",
|
||||||
|
"flamingo": "pink",
|
||||||
|
"pink": "pink",
|
||||||
|
"mauve": "purple",
|
||||||
|
"red": "red",
|
||||||
|
"maroon": "red",
|
||||||
|
"peach": "orange",
|
||||||
|
"yellow": "yellow",
|
||||||
|
"green": "green",
|
||||||
|
"teal": "teal",
|
||||||
|
"sky": "teal",
|
||||||
|
"sapphire": "default",
|
||||||
|
"blue": "default",
|
||||||
|
"lavender": "default",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def translate_accent(ctp_accent: Color):
|
||||||
|
return ctp_to_colloid[ctp_accent.identifier]
|
||||||
|
|
||||||
|
|
||||||
|
def write_tweak(key, default, value):
|
||||||
|
subst_text(
|
||||||
|
f"{SRC_DIR}/sass/_tweaks-temp.scss", f"\\${key}: {default}", f"${key}: {value}"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def apply_tweaks(ctx: BuildContext):
|
||||||
|
write_tweak("theme", "'default'", translate_accent(ctx.accent))
|
||||||
|
|
||||||
|
if ctx.size == "compact":
|
||||||
|
write_tweak("compact", "'false'", "'true'")
|
||||||
|
|
||||||
|
subst_text(
|
||||||
|
f"{SRC_DIR}/sass/_tweaks-temp.scss",
|
||||||
|
"@import 'color-palette-default';",
|
||||||
|
f"@import 'color-palette-catppuccin-{ctx.flavor.identifier}';",
|
||||||
|
)
|
||||||
|
write_tweak("colorscheme", "'default'", "'catppuccin'")
|
||||||
|
|
||||||
|
if ctx.tweaks.has("black"):
|
||||||
|
write_tweak("blackness", "'false'", "'true'")
|
||||||
|
|
||||||
|
if ctx.tweaks.has("rimless"):
|
||||||
|
write_tweak("rimless", "'false'", "'true'")
|
||||||
|
|
||||||
|
if ctx.tweaks.has("normal"):
|
||||||
|
write_tweak("window_button", "'mac'", "'normal'")
|
||||||
|
|
||||||
|
if ctx.tweaks.has("float"):
|
||||||
|
write_tweak("float", "'false'", "'true'")
|
||||||
|
|
||||||
|
|
||||||
|
def make_assets(ctx: BuildContext):
|
||||||
|
output_dir = ctx.output_dir()
|
||||||
|
|
||||||
|
os.makedirs(f"{output_dir}/cinnamon/assets", exist_ok=True)
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/theme/*.svg"):
|
||||||
|
shutil.copy(file, f"{output_dir}/cinnamon/assets")
|
||||||
|
shutil.copy(
|
||||||
|
f"{SRC_DIR}/assets/cinnamon/thumbnail{ctx.apply_suffix(DARK_LIGHT)}.svg",
|
||||||
|
f"{output_dir}/cinnamon/thumbnail.png",
|
||||||
|
)
|
||||||
|
|
||||||
|
os.makedirs(f"{output_dir}/gnome-shell/assets", exist_ok=True)
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/gnome-shell/theme/*.svg"):
|
||||||
|
shutil.copy(file, f"{output_dir}/gnome-shell/assets")
|
||||||
|
|
||||||
|
shutil.copytree(
|
||||||
|
f"{SRC_DIR}/assets/gtk/assets",
|
||||||
|
f"{output_dir}/gtk-3.0/assets",
|
||||||
|
dirs_exist_ok=True,
|
||||||
|
)
|
||||||
|
shutil.copytree(
|
||||||
|
f"{SRC_DIR}/assets/gtk/assets",
|
||||||
|
f"{output_dir}/gtk-4.0/assets",
|
||||||
|
dirs_exist_ok=True,
|
||||||
|
)
|
||||||
|
shutil.copyfile(
|
||||||
|
f"{SRC_DIR}/assets/gtk/thumbnail{ctx.apply_suffix(IS_DARK)}.svg",
|
||||||
|
f"{output_dir}/gtk-3.0/thumbnail.png",
|
||||||
|
)
|
||||||
|
shutil.copyfile(
|
||||||
|
f"{SRC_DIR}/assets/gtk/thumbnail{ctx.apply_suffix(IS_DARK)}.svg",
|
||||||
|
f"{output_dir}/gtk-4.0/thumbnail.png",
|
||||||
|
)
|
||||||
|
|
||||||
|
theme_color = ctx.accent.hex
|
||||||
|
|
||||||
|
palette = ctx.flavor.colors
|
||||||
|
background = palette.base.hex
|
||||||
|
background_alt = palette.mantle.hex
|
||||||
|
titlebar = palette.overlay0.hex
|
||||||
|
|
||||||
|
for file in glob.glob(f"{output_dir}/cinnamon/assets/*.svg"):
|
||||||
|
subst_text(file, "#5b9bf8", theme_color)
|
||||||
|
subst_text(file, "#3c84f7", theme_color)
|
||||||
|
|
||||||
|
for file in glob.glob(f"{output_dir}/gnome-shell/assets/*.svg"):
|
||||||
|
subst_text(file, "#5b9bf8", theme_color)
|
||||||
|
subst_text(file, "#3c84f7", theme_color)
|
||||||
|
|
||||||
|
for file in glob.glob(f"{output_dir}/gtk-3.0/assets/*.svg"):
|
||||||
|
subst_text(file, "#5b9bf8", theme_color)
|
||||||
|
subst_text(file, "#3c84f7", theme_color)
|
||||||
|
subst_text(file, "#ffffff", background)
|
||||||
|
subst_text(file, "#2c2c2c", background)
|
||||||
|
subst_text(file, "#3c3c3c", background_alt)
|
||||||
|
|
||||||
|
for file in glob.glob(f"{output_dir}/gtk-4.0/assets/*.svg"):
|
||||||
|
subst_text(file, "#5b9bf8", theme_color)
|
||||||
|
subst_text(file, "#3c84f7", theme_color)
|
||||||
|
subst_text(file, "#ffffff", background)
|
||||||
|
subst_text(file, "#2c2c2c", background)
|
||||||
|
subst_text(file, "#3c3c3c", background_alt)
|
||||||
|
|
||||||
|
if ctx.flavor.dark:
|
||||||
|
subst_text(f"{output_dir}/cinnamon/thumbnail.png", "#2c2c2c", background)
|
||||||
|
subst_text(f"{output_dir}/cinnamon/thumbnail.png", "#5b9bf8", theme_color)
|
||||||
|
|
||||||
|
subst_text(f"{output_dir}/gtk-3.0/thumbnail.png", "#2c2c2c", background)
|
||||||
|
subst_text(f"{output_dir}/gtk-4.0/thumbnail.png", "#2c2c2c", background)
|
||||||
|
|
||||||
|
subst_text(f"{output_dir}/gtk-3.0/thumbnail.png", "#5b9bf8", theme_color)
|
||||||
|
subst_text(f"{output_dir}/gtk-4.0/thumbnail.png", "#5b9bf8", theme_color)
|
||||||
|
else:
|
||||||
|
subst_text(f"{output_dir}/cinnamon/thumbnail.png", "#ffffff", background)
|
||||||
|
subst_text(f"{output_dir}/cinnamon/thumbnail.png", "#f2f2f2", titlebar)
|
||||||
|
subst_text(f"{output_dir}/cinnamon/thumbnail.png", "#3c84f7", theme_color)
|
||||||
|
|
||||||
|
subst_text(f"{output_dir}/gtk-3.0/thumbnail.png", "#f2f2f2", titlebar)
|
||||||
|
subst_text(f"{output_dir}/gtk-3.0/thumbnail.png", "#3c84f7", theme_color)
|
||||||
|
|
||||||
|
subst_text(f"{output_dir}/gtk-4.0/thumbnail.png", "#f2f2f2", titlebar)
|
||||||
|
subst_text(f"{output_dir}/gtk-4.0/thumbnail.png", "#3c84f7", theme_color)
|
||||||
|
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/common-assets/*.svg"):
|
||||||
|
shutil.copy(file, f"{output_dir}/cinnamon/assets")
|
||||||
|
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/assets{ctx.apply_suffix(IS_DARK)}/*.svg"):
|
||||||
|
shutil.copy(file, f"{output_dir}/cinnamon/assets")
|
||||||
|
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/gnome-shell/common-assets/*.svg"):
|
||||||
|
shutil.copy(file, f"{output_dir}/gnome-shell/assets")
|
||||||
|
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/gnome-shell/assets{ctx.apply_suffix(IS_DARK)}/*.svg"):
|
||||||
|
shutil.copy(file, f"{output_dir}/gnome-shell/assets")
|
||||||
|
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/gtk/symbolics/*.svg"):
|
||||||
|
shutil.copy(file, f"{output_dir}/gtk-3.0/assets")
|
||||||
|
shutil.copy(file, f"{output_dir}/gtk-4.0/assets")
|
||||||
|
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/metacity-1/assets{ctx.apply_suffix(IS_WINDOW_NORMAL)}/*.svg"):
|
||||||
|
shutil.copy(file, f"{output_dir}/metacity-1/assets")
|
||||||
|
shutil.copy(
|
||||||
|
f"{SRC_DIR}/assets/metacity-1/thumbnail{ctx.apply_suffix(IS_DARK)}.png",
|
||||||
|
f"{output_dir}/metacity-1/thumbnail.png",
|
||||||
|
)
|
||||||
|
|
||||||
|
# TODO: Make our own assets for this and patch them in with the patch system, then code it to be
|
||||||
|
# {src_dir}/assets/xfwm4/assets{light_suffix}-Catppuccin/
|
||||||
|
# where assets-Light-Catppuccin will have latte
|
||||||
|
# nad assets-Catppuccin will have mocha or something
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{ctx.apply_suffix(IS_LIGHT)}/*.png"):
|
||||||
|
shutil.copy(file, f"{output_dir}/xfwm4")
|
||||||
|
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{ctx.apply_suffix(IS_LIGHT)}-hdpi/*.png"):
|
||||||
|
shutil.copy(file, f"{output_dir}-hdpi/xfwm4")
|
||||||
|
|
||||||
|
for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{ctx.apply_suffix(IS_LIGHT)}-xhdpi/*.png"):
|
||||||
|
shutil.copy(file, f"{output_dir}-xhdpi/xfwm4")
|
||||||
|
|
||||||
|
|
||||||
|
def zip_dir(path, zip_file):
|
||||||
|
# Ref: https://stackoverflow.com/questions/46229764/python-zip-multiple-directories-into-one-zip-file
|
||||||
|
for root, _, files in os.walk(path):
|
||||||
|
for file in files:
|
||||||
|
zip_file.write(
|
||||||
|
os.path.join(root, file),
|
||||||
|
os.path.relpath(os.path.join(root, file), os.path.join(path, "..")),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def zip_artifacts(dir_list, zip_name, remove=True):
|
||||||
|
with zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED) as zipf:
|
||||||
|
for dir in dir_list:
|
||||||
|
zip_dir(dir, zipf)
|
||||||
|
|
||||||
|
if remove:
|
||||||
|
for dir in dir_list:
|
||||||
|
shutil.rmtree(dir)
|
||||||
|
|
||||||
|
|
||||||
|
def build_theme(ctx: BuildContext):
|
||||||
|
build_info = f"""Build info:
|
||||||
|
build_root: {ctx.build_root}
|
||||||
|
theme_name: {ctx.theme_name}
|
||||||
|
flavor: {ctx.flavor.identifier}
|
||||||
|
accent: {ctx.accent.identifier}
|
||||||
|
size: {ctx.size}
|
||||||
|
tweaks: {ctx.tweaks}"""
|
||||||
|
logger.info(build_info)
|
||||||
|
build(ctx)
|
||||||
|
logger.info(f"Main build complete")
|
||||||
|
|
||||||
|
logger.info("Bundling assets...")
|
||||||
|
make_assets(ctx)
|
||||||
|
logger.info("Asset bundling done")
|
||||||
|
|
||||||
|
if ctx.output_format == "zip":
|
||||||
|
zip_artifacts(
|
||||||
|
[
|
||||||
|
ctx.output_dir(),
|
||||||
|
f"{ctx.output_dir()}-hdpi",
|
||||||
|
f"{ctx.output_dir()}-xhdpi",
|
||||||
|
],
|
||||||
|
f"{ctx.build_root}/{ctx.build_id()}.zip",
|
||||||
|
True,
|
||||||
|
)
|
||||||
|
|
||||||
|
"""
|
||||||
|
if (command -v xfce4-popup-whiskermenu &> /dev/null) && $(sed -i "s|.*menu-opacity=.*|menu-opacity=95|" "$HOME/.config/xfce4/panel/whiskermenu"*".rc" &> /dev/null); then
|
||||||
|
sed -i "s|.*menu-opacity=.*|menu-opacity=95|" "$HOME/.config/xfce4/panel/whiskermenu"*".rc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (pgrep xfce4-session &> /dev/null); then
|
||||||
|
xfce4-panel -r
|
||||||
|
fi
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def apply_colloid_patches():
|
||||||
|
if os.path.isfile("colloid/.patched"):
|
||||||
|
logger.info(
|
||||||
|
'Patches seem to be applied, remove "colloid/.patched" to force application (this may fail)'
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
logger.info("Applying patches...")
|
||||||
|
# Change into colloid
|
||||||
|
for patch in [
|
||||||
|
"plank-dark.patch",
|
||||||
|
"plank-light.patch",
|
||||||
|
"sass-colors.patch",
|
||||||
|
"sass-palette-frappe.patch",
|
||||||
|
"sass-palette-mocha.patch",
|
||||||
|
"sass-palette-latte.patch",
|
||||||
|
"sass-palette-macchiato.patch",
|
||||||
|
]:
|
||||||
|
path = f"./patches/colloid/{patch}"
|
||||||
|
logger.info(f"Applying patch '{patch}', located at '{path}'")
|
||||||
|
subprocess.check_call(["git", "apply", path, "--directory", f"colloid"])
|
||||||
|
|
||||||
|
with open("colloid/.patched", "w") as f:
|
||||||
|
f.write("true")
|
||||||
|
|
||||||
|
logger.info("Patching finished.")
|
||||||
|
|
||||||
|
|
||||||
|
def parse_args():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument(
|
||||||
|
"flavor",
|
||||||
|
type=str,
|
||||||
|
choices=["mocha", "frappe", "macchiato", "latte"],
|
||||||
|
help="Flavor of the theme to apply.",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--name",
|
||||||
|
"-n",
|
||||||
|
type=str,
|
||||||
|
default="catppuccin",
|
||||||
|
dest="name",
|
||||||
|
help="Name of the theme to apply.",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--dest",
|
||||||
|
"-d",
|
||||||
|
type=str,
|
||||||
|
required=True,
|
||||||
|
dest="dest",
|
||||||
|
help="Destination of the files.",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--accent",
|
||||||
|
"-a",
|
||||||
|
type=str,
|
||||||
|
default="mauve",
|
||||||
|
dest="accent",
|
||||||
|
choices=[
|
||||||
|
"rosewater",
|
||||||
|
"flamingo",
|
||||||
|
"pink",
|
||||||
|
"mauve",
|
||||||
|
"red",
|
||||||
|
"maroon",
|
||||||
|
"peach",
|
||||||
|
"yellow",
|
||||||
|
"green",
|
||||||
|
"teal",
|
||||||
|
"sky",
|
||||||
|
"sapphire",
|
||||||
|
"blue",
|
||||||
|
"lavender",
|
||||||
|
"all",
|
||||||
|
],
|
||||||
|
help="Accent of the theme.",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--size",
|
||||||
|
"-s",
|
||||||
|
type=str,
|
||||||
|
default="standard",
|
||||||
|
dest="size",
|
||||||
|
choices=["standard", "compact"],
|
||||||
|
help="Size variant of the theme.",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--tweaks",
|
||||||
|
type=str,
|
||||||
|
default=[],
|
||||||
|
nargs="+",
|
||||||
|
dest="tweaks",
|
||||||
|
choices=["black", "rimless", "normal", "float"],
|
||||||
|
help="Tweaks to apply to the build.",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--zip",
|
||||||
|
help="Whether to bundle the theme into a zip",
|
||||||
|
type=bool,
|
||||||
|
default=False,
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--patch",
|
||||||
|
help="Whether to patch the colloid submodule",
|
||||||
|
type=bool,
|
||||||
|
default=True,
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
)
|
||||||
|
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = parse_args()
|
||||||
|
if args.patch:
|
||||||
|
apply_colloid_patches()
|
||||||
|
|
||||||
|
palette = getattr(PALETTE, args.flavor)
|
||||||
|
accents = [
|
||||||
|
"rosewater",
|
||||||
|
"flamingo",
|
||||||
|
"pink",
|
||||||
|
"mauve",
|
||||||
|
"red",
|
||||||
|
"maroon",
|
||||||
|
"peach",
|
||||||
|
"yellow",
|
||||||
|
"green",
|
||||||
|
"teal",
|
||||||
|
"sky",
|
||||||
|
"sapphire",
|
||||||
|
"blue",
|
||||||
|
"lavender",
|
||||||
|
]
|
||||||
|
|
||||||
|
if args.accent == "all":
|
||||||
|
for accent in accents:
|
||||||
|
accent = getattr(palette.colors, accent)
|
||||||
|
|
||||||
|
tweaks = Tweaks(tweaks=args.tweaks)
|
||||||
|
|
||||||
|
if args.zip:
|
||||||
|
output_format = "zip"
|
||||||
|
else:
|
||||||
|
output_format = "dir"
|
||||||
|
|
||||||
|
ctx = BuildContext(
|
||||||
|
build_root=args.dest,
|
||||||
|
theme_name=args.name,
|
||||||
|
flavor=palette,
|
||||||
|
accent=accent,
|
||||||
|
size=args.size,
|
||||||
|
tweaks=tweaks,
|
||||||
|
output_format=output_format,
|
||||||
|
)
|
||||||
|
|
||||||
|
tweaks_temp()
|
||||||
|
gnome_shell_version()
|
||||||
|
build_theme(ctx)
|
||||||
|
logger.info("Done!")
|
||||||
|
else:
|
||||||
|
accent = getattr(palette.colors, args.accent)
|
||||||
|
tweaks = Tweaks(tweaks=args.tweaks)
|
||||||
|
|
||||||
|
if args.zip:
|
||||||
|
output_format = "zip"
|
||||||
|
else:
|
||||||
|
output_format = "dir"
|
||||||
|
|
||||||
|
ctx = BuildContext(
|
||||||
|
build_root=args.dest,
|
||||||
|
theme_name=args.name,
|
||||||
|
flavor=palette,
|
||||||
|
accent=accent,
|
||||||
|
size=args.size,
|
||||||
|
tweaks=tweaks,
|
||||||
|
output_format=output_format,
|
||||||
|
)
|
||||||
|
|
||||||
|
logger.info("Building temp tweaks file")
|
||||||
|
tweaks_temp()
|
||||||
|
logger.info("Inserting gnome-shell imports")
|
||||||
|
gnome_shell_version()
|
||||||
|
logger.info("Building main theme")
|
||||||
|
build_theme(ctx)
|
||||||
|
logger.info("Done!")
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
main()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error("Something went wrong when building the theme:", exc_info=e)
|
2
colloid
2
colloid
Submodule colloid updated: b3bb0af34f...1a13048ea1
27
flake.lock
generated
Normal file
27
flake.lock
generated
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1715961556,
|
||||||
|
"narHash": "sha256-+NpbZRCRisUHKQJZF3CT+xn14ZZQO+KjxIIanH3Pvn4=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "4a6b83b05df1a8bd7d99095ec4b4d271f2956b64",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
18
flake.nix
Normal file
18
flake.nix
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{ nixpkgs, ... }:
|
||||||
|
let
|
||||||
|
forAllSystems =
|
||||||
|
function:
|
||||||
|
nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed (
|
||||||
|
system: function nixpkgs.legacyPackages.${system}
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShells = forAllSystems (pkgs: {
|
||||||
|
default = pkgs.callPackage ./shell.nix { };
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
222
install.py
222
install.py
@@ -1,109 +1,147 @@
|
|||||||
"""
|
#!/usr/bin/env python3
|
||||||
Main script to clone, recolor and install the theme.
|
|
||||||
Run this from the root of the repo.
|
|
||||||
|
|
||||||
Usage:
|
import os, zipfile, argparse, logging, io
|
||||||
python install.py [options]
|
from pathlib import Path
|
||||||
"""
|
from dataclasses import dataclass
|
||||||
import argparse
|
from urllib.request import urlopen, Request
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
from scripts.ctp_colors import ctp_colors, get_all_accent
|
logger = logging.getLogger("catppuccin-gtk")
|
||||||
from scripts.create_theme import create_theme
|
logger.setLevel(logging.DEBUG)
|
||||||
from scripts.var import theme_name, work_dir
|
ch = logging.StreamHandler()
|
||||||
|
formatter = logging.Formatter("[%(name)s] [%(levelname)s] - %(message)s")
|
||||||
|
ch.setFormatter(formatter)
|
||||||
|
logger.addHandler(ch)
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="Catppuccin theme")
|
|
||||||
parser.add_argument("flavor",
|
|
||||||
metavar="theme flavor",
|
|
||||||
type=str,
|
|
||||||
nargs="+",
|
|
||||||
choices=["mocha", "frappe", "macchiato", "latte", "all"],
|
|
||||||
help="Flavor of the theme to apply. Can be frappe, mocha, macchiato, latte")
|
|
||||||
|
|
||||||
parser.add_argument("--name", "-n",
|
@dataclass
|
||||||
metavar="theme name",
|
class InstallContext:
|
||||||
type=str,
|
flavor: str
|
||||||
default=theme_name,
|
accent: str
|
||||||
dest="name",
|
dest: Path
|
||||||
help="Name of the theme to apply. Defaults to Catppuccin")
|
link: bool
|
||||||
|
|
||||||
parser.add_argument("--dest", "-d",
|
|
||||||
metavar="destination",
|
|
||||||
type=str,
|
|
||||||
dest="dest",
|
|
||||||
help="Destination of the files. defaults to releases folder inside the root")
|
|
||||||
|
|
||||||
parser.add_argument("--accent", "-a",
|
def parse_args():
|
||||||
metavar="Accent of the theme",
|
parser = argparse.ArgumentParser()
|
||||||
type=str,
|
parser.add_argument(
|
||||||
nargs="+",
|
"flavor",
|
||||||
default=["blue"],
|
type=str,
|
||||||
dest="accent",
|
choices=["mocha", "frappe", "macchiato", "latte"],
|
||||||
choices=["rosewater", "flamingo", "pink", "mauve", "red", "maroon", "peach",
|
help="Flavor of the theme to apply.",
|
||||||
"yellow", "green", "teal", "sky", "sapphire", "blue", "lavender", "all"],
|
)
|
||||||
help="Accent of the theme. Can include 'rosewater', 'flamingo', 'pink', 'mauve', 'red', 'maroon', \
|
|
||||||
'peach', 'yellow', 'green', 'teal', 'sky', 'sapphire', 'blue', 'lavender'")
|
|
||||||
|
|
||||||
parser.add_argument("--size", "-s",
|
parser.add_argument(
|
||||||
metavar="Size of the theme",
|
"accent",
|
||||||
type=str,
|
type=str,
|
||||||
default="standard",
|
default="mauve",
|
||||||
dest="size",
|
choices=[
|
||||||
choices=["standard", "compact"],
|
"rosewater",
|
||||||
help="Size variant of the theme. Can be standard or compact")
|
"flamingo",
|
||||||
|
"pink",
|
||||||
|
"mauve",
|
||||||
|
"red",
|
||||||
|
"maroon",
|
||||||
|
"peach",
|
||||||
|
"yellow",
|
||||||
|
"green",
|
||||||
|
"teal",
|
||||||
|
"sky",
|
||||||
|
"sapphire",
|
||||||
|
"blue",
|
||||||
|
"lavender",
|
||||||
|
"all",
|
||||||
|
],
|
||||||
|
help="Accent of the theme.",
|
||||||
|
)
|
||||||
|
|
||||||
parser.add_argument("--tweaks",
|
parser.add_argument(
|
||||||
metavar="Colloid specific tweaks",
|
"--dest",
|
||||||
type=str,
|
"-d",
|
||||||
default=[],
|
type=str,
|
||||||
nargs="+",
|
dest="dest",
|
||||||
dest="tweaks",
|
help="Destination of the files.",
|
||||||
choices=["black", "rimless", "normal", "float"],
|
)
|
||||||
help="Some specifc tweaks. like black, rimless, normal buttons")
|
|
||||||
|
|
||||||
parser.add_argument("-l", "--link",
|
parser.add_argument(
|
||||||
help="Link advaita themes to our catppuccin theme",
|
"--link",
|
||||||
type=bool,
|
help="Whether to add symlinks for libadwaita",
|
||||||
default=False,
|
type=bool,
|
||||||
action=argparse.BooleanOptionalAction,
|
default=False,
|
||||||
dest="link")
|
action=argparse.BooleanOptionalAction,
|
||||||
|
)
|
||||||
|
|
||||||
parser.add_argument("--zip",
|
return parser.parse_args()
|
||||||
help="Zip catppuccin theme",
|
|
||||||
type=bool,
|
|
||||||
default=False,
|
|
||||||
action=argparse.BooleanOptionalAction,
|
|
||||||
dest="zip")
|
|
||||||
|
|
||||||
parser.add_argument("--recreate-asset",
|
|
||||||
help="Recreate assets for xfwm4 and such",
|
|
||||||
type=bool,
|
|
||||||
default=False,
|
|
||||||
action=argparse.BooleanOptionalAction,
|
|
||||||
dest="rec_asset")
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
def build_release_url(ctx: InstallContext) -> str:
|
||||||
|
repo_root = "https://github.com/catppuccin/gtk/releases/download"
|
||||||
|
release = "v1.0.0-alpha"
|
||||||
|
zip_name = f"catppuccin-{ctx.flavor}-{ctx.accent}-standard+default.zip"
|
||||||
|
|
||||||
if "all" in args.flavor:
|
return f"{repo_root}/{release}/{zip_name}"
|
||||||
flavors = ctp_colors.keys()
|
|
||||||
else:
|
|
||||||
flavors = args.flavor
|
|
||||||
|
|
||||||
if "all" in args.accent:
|
|
||||||
accents = get_all_accent().keys()
|
|
||||||
else:
|
|
||||||
accents = args.accent
|
|
||||||
|
|
||||||
if args.dest:
|
def install(ctx: InstallContext):
|
||||||
dest = args.dest
|
url = build_release_url(ctx)
|
||||||
elif os.geteuid() == 0: # Sudo
|
build_info = f"""Installation info:
|
||||||
dest = "/usr/share/themes"
|
flavor: {ctx.flavor}
|
||||||
else:
|
accent: {ctx.accent}
|
||||||
dest = os.path.expanduser('~') + "/.themes"
|
dest: {ctx.dest.absolute()}
|
||||||
|
link: {ctx.link}
|
||||||
|
|
||||||
|
remote_url: {url}"""
|
||||||
|
logger.info(build_info)
|
||||||
|
httprequest = Request(url)
|
||||||
|
|
||||||
if not os.listdir(work_dir):
|
zip_file = None
|
||||||
subprocess.call("git submodule update --init --recursive", shell=True)
|
logger.info("Starting download...")
|
||||||
|
with urlopen(httprequest) as response:
|
||||||
|
logger.info(f"Response status: {response.status}")
|
||||||
|
zip_file = zipfile.ZipFile(io.BytesIO(response.read()))
|
||||||
|
logger.info("Download finished, zip is valid")
|
||||||
|
|
||||||
filename = create_theme(flavors, accents, dest,
|
logger.info("Verifying download..")
|
||||||
args.link, args.name, args.size, args.tweaks, args.zip, args.rec_asset)
|
first_bad_file = zip_file.testzip()
|
||||||
|
if first_bad_file is not None:
|
||||||
|
logger.error(f'Zip appears to be corrupt, first bad file is "{first_bad_file}"')
|
||||||
|
return
|
||||||
|
logger.info("Download verified")
|
||||||
|
|
||||||
|
logger.info("Extracting...")
|
||||||
|
zip_file.extractall(ctx.dest)
|
||||||
|
logger.info("Extraction complete")
|
||||||
|
|
||||||
|
if ctx.link:
|
||||||
|
dir_name = (ctx.dest / f"catppuccin-{ctx.flavor}-{ctx.accent}-standard+default" / 'gtk-4.0').absolute()
|
||||||
|
gtk4_dir = (Path(os.path.expanduser('~')) / '.config' / 'gtk-4.0').absolute()
|
||||||
|
os.makedirs(gtk4_dir, exist_ok=True)
|
||||||
|
|
||||||
|
logger.info("Adding symlinks for libadwaita")
|
||||||
|
logger.info(f'Root: {dir_name}')
|
||||||
|
logger.info(f'Target: {gtk4_dir}')
|
||||||
|
os.symlink(dir_name / 'assets', gtk4_dir / 'assets')
|
||||||
|
os.symlink(dir_name / 'gtk.css', gtk4_dir / 'gtk.css')
|
||||||
|
os.symlink(dir_name / 'gtk-dark.css', gtk4_dir / 'gtk-dark.css')
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = parse_args()
|
||||||
|
dest = Path(os.path.expanduser("~")) / ".local" / "share" / "themes"
|
||||||
|
os.makedirs(dest, exist_ok=True)
|
||||||
|
|
||||||
|
if args.dest:
|
||||||
|
dest = Path(args.dest)
|
||||||
|
|
||||||
|
ctx = InstallContext(
|
||||||
|
flavor=args.flavor, accent=args.accent, dest=dest, link=args.link
|
||||||
|
)
|
||||||
|
|
||||||
|
install(ctx)
|
||||||
|
|
||||||
|
logger.info('Theme installation complete!')
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
main()
|
||||||
|
except Exception as e:
|
||||||
|
logger.error("Something went wrong when installing the theme:", exc_info=e)
|
||||||
|
87
patches/colloid/palette.tera
Normal file
87
patches/colloid/palette.tera
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
---
|
||||||
|
whiskers:
|
||||||
|
version: 2.1.0
|
||||||
|
matrix:
|
||||||
|
- flavor
|
||||||
|
filename: 'sass-palette-{{ flavor.identifier }}.patch'
|
||||||
|
---
|
||||||
|
{%- set palette = flavor.colors -%}
|
||||||
|
diff --git a/src/sass/_color-palette-catppuccin-{{ flavor.identifier }}.scss b/src/sass/_color-palette-catppuccin-{{ flavor.identifier }}.scss
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..8a905942
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/sass/_color-palette-catppuccin-{{ flavor.identifier }}.scss
|
||||||
|
@@ -0,0 +1,72 @@
|
||||||
|
+// Default Theme Color Palette
|
||||||
|
+
|
||||||
|
+// Red
|
||||||
|
+$red-light: #{{ palette.red.hex }};
|
||||||
|
+$red-dark: #{{ palette.red.hex }};
|
||||||
|
+
|
||||||
|
+// Pink
|
||||||
|
+$pink-light: #{{ palette.pink.hex }};
|
||||||
|
+$pink-dark: #{{ palette.pink.hex }};
|
||||||
|
+
|
||||||
|
+// Purple
|
||||||
|
+$purple-light: #{{ palette.mauve.hex }};
|
||||||
|
+$purple-dark: #{{ palette.mauve.hex }};
|
||||||
|
+
|
||||||
|
+// Blue
|
||||||
|
+$blue-light: #{{ palette.blue.hex }};
|
||||||
|
+$blue-dark: #{{ palette.blue.hex }};
|
||||||
|
+
|
||||||
|
+// Teal
|
||||||
|
+$teal-light: #{{ palette.teal.hex }};
|
||||||
|
+$teal-dark: #{{ palette.teal.hex }};
|
||||||
|
+
|
||||||
|
+// Green
|
||||||
|
+$green-light: #{{ palette.green.hex }};
|
||||||
|
+$green-dark: #{{ palette.green.hex }};
|
||||||
|
+
|
||||||
|
+// Yellow
|
||||||
|
+$yellow-light: #{{ palette.yellow.hex }};
|
||||||
|
+$yellow-dark: #{{ palette.yellow.hex }};
|
||||||
|
+
|
||||||
|
+// Orange
|
||||||
|
+$orange-light: #{{ palette.peach.hex }};
|
||||||
|
+$orange-dark: #{{ palette.peach.hex }};
|
||||||
|
+
|
||||||
|
+// Grey
|
||||||
|
+$grey-050: #{{ palette.text.hex }};
|
||||||
|
+$grey-100: #{{ palette.subtext1.hex }};
|
||||||
|
+$grey-150: #{{ palette.subtext1.hex }};
|
||||||
|
+$grey-200: #{{ palette.subtext0.hex }};
|
||||||
|
+$grey-250: #{{ palette.subtext0.hex }};
|
||||||
|
+$grey-300: #{{ palette.overlay1.hex }};
|
||||||
|
+$grey-350: #{{ palette.overlay1.hex }};
|
||||||
|
+$grey-400: #{{ palette.overlay0.hex }};
|
||||||
|
+$grey-450: #{{ palette.overlay0.hex }};
|
||||||
|
+$grey-500: #{{ palette.surface2.hex }};
|
||||||
|
+$grey-550: #{{ palette.surface2.hex }};
|
||||||
|
+$grey-600: #{{ palette.surface1.hex }};
|
||||||
|
+$grey-650: #{{ palette.surface1.hex }};
|
||||||
|
+$grey-700: #{{ palette.surface0.hex }};
|
||||||
|
+$grey-750: #{{ palette.surface0.hex }};
|
||||||
|
+$grey-800: #{{ palette.base.hex }};
|
||||||
|
+$grey-850: #{{ palette.base.hex }};
|
||||||
|
+$grey-900: #{{ palette.crust.hex }};
|
||||||
|
+$grey-950: #{{ palette.crust.hex }};
|
||||||
|
+
|
||||||
|
+// White
|
||||||
|
+$white: #FFFFFF;
|
||||||
|
+
|
||||||
|
+// Black
|
||||||
|
+$black: #000000;
|
||||||
|
+
|
||||||
|
+// Button
|
||||||
|
+$button-close: #{{ palette.red.hex }};
|
||||||
|
+$button-max: #{{ palette.green.hex }};
|
||||||
|
+$button-min: #{{ palette.yellow.hex }};
|
||||||
|
+
|
||||||
|
+// Link
|
||||||
|
+$links: #{{ palette.sky.hex }};
|
||||||
|
+
|
||||||
|
+// Theme
|
||||||
|
+$default-light: $purple-light;
|
||||||
|
+$default-dark: $purple-dark;
|
||||||
|
{{ '' }}
|
70
patches/colloid/plank-dark.patch
Normal file
70
patches/colloid/plank-dark.patch
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
diff --git a/src/main/plank/theme-Dark-Catppuccin/dock.theme b/src/main/plank/theme-Dark-Catppuccin/dock.theme
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..26a6a747
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/plank/theme-Dark-Catppuccin/dock.theme
|
||||||
|
@@ -0,0 +1,64 @@
|
||||||
|
+#This file based on:
|
||||||
|
+#https://git.launchpad.net/plank/tree/data/themes/Default/dock.theme
|
||||||
|
+
|
||||||
|
+[PlankTheme]
|
||||||
|
+#The roundness of the top corners.
|
||||||
|
+TopRoundness=16
|
||||||
|
+#The roundness of the bottom corners.
|
||||||
|
+BottomRoundness=0
|
||||||
|
+#The thickness (in pixels) of lines drawn.
|
||||||
|
+LineWidth=0
|
||||||
|
+#The color (RGBA) of the outer stroke.
|
||||||
|
+OuterStrokeColor=0;;0;;0;;0
|
||||||
|
+#The starting color (RGBA) of the fill gradient.
|
||||||
|
+FillStartColor=33;;33;;33;;255
|
||||||
|
+#The ending color (RGBA) of the fill gradient.
|
||||||
|
+FillEndColor=33;;33;;33;;255
|
||||||
|
+#The color (RGBA) of the inner stroke.
|
||||||
|
+InnerStrokeColor=33;;33;;33;;255
|
||||||
|
+
|
||||||
|
+[PlankDockTheme]
|
||||||
|
+#The padding on the left/right dock edges, in tenths of a percent of IconSize.
|
||||||
|
+HorizPadding=2
|
||||||
|
+#The padding on the top dock edge, in tenths of a percent of IconSize.
|
||||||
|
+TopPadding=2
|
||||||
|
+#The padding on the bottom dock edge, in tenths of a percent of IconSize.
|
||||||
|
+BottomPadding=1
|
||||||
|
+#The padding between items on the dock, in tenths of a percent of IconSize.
|
||||||
|
+ItemPadding=2
|
||||||
|
+#The size of item indicators, in tenths of a percent of IconSize.
|
||||||
|
+IndicatorSize=5
|
||||||
|
+#The size of the icon-shadow behind every item, in tenths of a percent of IconSize.
|
||||||
|
+IconShadowSize=0
|
||||||
|
+#The height (in percent of IconSize) to bounce an icon when the application sets urgent.
|
||||||
|
+UrgentBounceHeight=1.6666666666666667
|
||||||
|
+#The height (in percent of IconSize) to bounce an icon when launching an application.
|
||||||
|
+LaunchBounceHeight=0.625
|
||||||
|
+#The opacity value (0 to 1) to fade the dock to when hiding it.
|
||||||
|
+FadeOpacity=1
|
||||||
|
+#The amount of time (in ms) for click animations.
|
||||||
|
+ClickTime=0
|
||||||
|
+#The amount of time (in ms) to bounce an urgent icon.
|
||||||
|
+UrgentBounceTime=600
|
||||||
|
+#The amount of time (in ms) to bounce an icon when launching an application.
|
||||||
|
+LaunchBounceTime=600
|
||||||
|
+#The amount of time (in ms) for active window indicator animations.
|
||||||
|
+ActiveTime=150
|
||||||
|
+#The amount of time (in ms) to slide icons into/out of the dock.
|
||||||
|
+SlideTime=300
|
||||||
|
+#The time (in ms) to fade the dock in/out on a hide (if FadeOpacity is < 1).
|
||||||
|
+FadeTime=250
|
||||||
|
+#The time (in ms) to slide the dock in/out on a hide (if FadeOpacity is 1).
|
||||||
|
+HideTime=250
|
||||||
|
+#The size of the urgent glow (shown when dock is hidden), in tenths of a percent of IconSize.
|
||||||
|
+GlowSize=30
|
||||||
|
+#The total time (in ms) to show the hidden-dock urgent glow.
|
||||||
|
+GlowTime=10000
|
||||||
|
+#The time (in ms) of each pulse of the hidden-dock urgent glow.
|
||||||
|
+GlowPulseTime=2000
|
||||||
|
+#The hue-shift (-180 to 180) of the urgent indicator color.
|
||||||
|
+UrgentHueShift=150
|
||||||
|
+#The time (in ms) to move an item to its new position or its addition/removal to/from the dock.
|
||||||
|
+ItemMoveTime=450
|
||||||
|
+#Whether background and icons will unhide/hide with different speeds. The top-border of both will leave/hit the screen-edge at the same time.
|
||||||
|
+CascadeHide=true
|
70
patches/colloid/plank-light.patch
Normal file
70
patches/colloid/plank-light.patch
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
diff --git a/src/main/plank/theme-Light-Catppuccin/dock.theme b/src/main/plank/theme-Light-Catppuccin/dock.theme
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..a4029c96
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/main/plank/theme-Light-Catppuccin/dock.theme
|
||||||
|
@@ -0,0 +1,64 @@
|
||||||
|
+#This file based on:
|
||||||
|
+#https://git.launchpad.net/plank/tree/data/themes/Default/dock.theme
|
||||||
|
+
|
||||||
|
+[PlankTheme]
|
||||||
|
+#The roundness of the top corners.
|
||||||
|
+TopRoundness=16
|
||||||
|
+#The roundness of the bottom corners.
|
||||||
|
+BottomRoundness=0
|
||||||
|
+#The thickness (in pixels) of lines drawn.
|
||||||
|
+LineWidth=0
|
||||||
|
+#The color (RGBA) of the outer stroke.
|
||||||
|
+OuterStrokeColor=0;;0;;0;;0
|
||||||
|
+#The starting color (RGBA) of the fill gradient.
|
||||||
|
+FillStartColor=242;;242;;242;;255
|
||||||
|
+#The ending color (RGBA) of the fill gradient.
|
||||||
|
+FillEndColor=242;;242;;242;;255
|
||||||
|
+#The color (RGBA) of the inner stroke.
|
||||||
|
+InnerStrokeColor=242;;242;;242;;255
|
||||||
|
+
|
||||||
|
+[PlankDockTheme]
|
||||||
|
+#The padding on the left/right dock edges, in tenths of a percent of IconSize.
|
||||||
|
+HorizPadding=2
|
||||||
|
+#The padding on the top dock edge, in tenths of a percent of IconSize.
|
||||||
|
+TopPadding=2
|
||||||
|
+#The padding on the bottom dock edge, in tenths of a percent of IconSize.
|
||||||
|
+BottomPadding=1
|
||||||
|
+#The padding between items on the dock, in tenths of a percent of IconSize.
|
||||||
|
+ItemPadding=2
|
||||||
|
+#The size of item indicators, in tenths of a percent of IconSize.
|
||||||
|
+IndicatorSize=5
|
||||||
|
+#The size of the icon-shadow behind every item, in tenths of a percent of IconSize.
|
||||||
|
+IconShadowSize=0
|
||||||
|
+#The height (in percent of IconSize) to bounce an icon when the application sets urgent.
|
||||||
|
+UrgentBounceHeight=1.6666666666666667
|
||||||
|
+#The height (in percent of IconSize) to bounce an icon when launching an application.
|
||||||
|
+LaunchBounceHeight=0.625
|
||||||
|
+#The opacity value (0 to 1) to fade the dock to when hiding it.
|
||||||
|
+FadeOpacity=1
|
||||||
|
+#The amount of time (in ms) for click animations.
|
||||||
|
+ClickTime=0
|
||||||
|
+#The amount of time (in ms) to bounce an urgent icon.
|
||||||
|
+UrgentBounceTime=600
|
||||||
|
+#The amount of time (in ms) to bounce an icon when launching an application.
|
||||||
|
+LaunchBounceTime=600
|
||||||
|
+#The amount of time (in ms) for active window indicator animations.
|
||||||
|
+ActiveTime=150
|
||||||
|
+#The amount of time (in ms) to slide icons into/out of the dock.
|
||||||
|
+SlideTime=300
|
||||||
|
+#The time (in ms) to fade the dock in/out on a hide (if FadeOpacity is < 1).
|
||||||
|
+FadeTime=250
|
||||||
|
+#The time (in ms) to slide the dock in/out on a hide (if FadeOpacity is 1).
|
||||||
|
+HideTime=250
|
||||||
|
+#The size of the urgent glow (shown when dock is hidden), in tenths of a percent of IconSize.
|
||||||
|
+GlowSize=30
|
||||||
|
+#The total time (in ms) to show the hidden-dock urgent glow.
|
||||||
|
+GlowTime=10000
|
||||||
|
+#The time (in ms) of each pulse of the hidden-dock urgent glow.
|
||||||
|
+GlowPulseTime=2000
|
||||||
|
+#The hue-shift (-180 to 180) of the urgent indicator color.
|
||||||
|
+UrgentHueShift=150
|
||||||
|
+#The time (in ms) to move an item to its new position or its addition/removal to/from the dock.
|
||||||
|
+ItemMoveTime=450
|
||||||
|
+#Whether background and icons will unhide/hide with different speeds. The top-border of both will leave/hit the screen-edge at the same time.
|
||||||
|
+CascadeHide=true
|
47
patches/colloid/sass-colors.patch
Normal file
47
patches/colloid/sass-colors.patch
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
diff --git a/src/sass/_colors.scss b/src/sass/_colors.scss
|
||||||
|
index e8366fa0..97fa670c 100644
|
||||||
|
--- a/src/sass/_colors.scss
|
||||||
|
+++ b/src/sass/_colors.scss
|
||||||
|
@@ -57,9 +57,8 @@
|
||||||
|
@else { @return rgba($white, 0.1); }
|
||||||
|
}
|
||||||
|
|
||||||
|
-@function theme($color) {
|
||||||
|
+@function theme() {
|
||||||
|
@if ($variant == 'light') {
|
||||||
|
- @if ($theme == 'default') { @return $default-dark; }
|
||||||
|
@if ($theme == 'purple') { @return $purple-dark; }
|
||||||
|
@if ($theme == 'pink') { @return $pink-dark; }
|
||||||
|
@if ($theme == 'red') { @return $red-dark; }
|
||||||
|
@@ -68,8 +67,9 @@
|
||||||
|
@if ($theme == 'green') { @return $green-dark; }
|
||||||
|
@if ($theme == 'teal') { @return $teal-dark; }
|
||||||
|
@if ($theme == 'grey') { @return $grey-600; }
|
||||||
|
+
|
||||||
|
+ @return $default-dark;
|
||||||
|
} @else {
|
||||||
|
- @if ($theme == 'default') { @return $default-light; }
|
||||||
|
@if ($theme == 'purple') { @return $purple-light; }
|
||||||
|
@if ($theme == 'pink') { @return $pink-light; }
|
||||||
|
@if ($theme == 'red') { @return $red-light; }
|
||||||
|
@@ -78,6 +78,8 @@
|
||||||
|
@if ($theme == 'green') { @return $green-light; }
|
||||||
|
@if ($theme == 'teal') { @return $teal-light; }
|
||||||
|
@if ($theme == 'grey') { @return $grey-200; }
|
||||||
|
+
|
||||||
|
+ @return $default-light;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -113,9 +115,9 @@
|
||||||
|
// Basic colors
|
||||||
|
//
|
||||||
|
|
||||||
|
-$primary: theme(color);
|
||||||
|
+$primary: theme();
|
||||||
|
$drop_target_color: $orange-dark;
|
||||||
|
-$indicator: theme(color);
|
||||||
|
+$indicator: theme();
|
||||||
|
$titlebar-indicator: if($variant == 'dark', currentColor, $primary);
|
||||||
|
$inverse-indicator: if($theme == 'grey', $white, $primary);
|
||||||
|
$applet-primary: if($theme == 'grey' and variant == 'light' and $topbar == 'dark', $grey-200, $primary);
|
78
patches/colloid/sass-palette-frappe.patch
Normal file
78
patches/colloid/sass-palette-frappe.patch
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
diff --git a/src/sass/_color-palette-catppuccin-frappe.scss b/src/sass/_color-palette-catppuccin-frappe.scss
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..8a905942
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/sass/_color-palette-catppuccin-frappe.scss
|
||||||
|
@@ -0,0 +1,72 @@
|
||||||
|
+// Default Theme Color Palette
|
||||||
|
+
|
||||||
|
+// Red
|
||||||
|
+$red-light: #e78284;
|
||||||
|
+$red-dark: #e78284;
|
||||||
|
+
|
||||||
|
+// Pink
|
||||||
|
+$pink-light: #f4b8e4;
|
||||||
|
+$pink-dark: #f4b8e4;
|
||||||
|
+
|
||||||
|
+// Purple
|
||||||
|
+$purple-light: #ca9ee6;
|
||||||
|
+$purple-dark: #ca9ee6;
|
||||||
|
+
|
||||||
|
+// Blue
|
||||||
|
+$blue-light: #8caaee;
|
||||||
|
+$blue-dark: #8caaee;
|
||||||
|
+
|
||||||
|
+// Teal
|
||||||
|
+$teal-light: #81c8be;
|
||||||
|
+$teal-dark: #81c8be;
|
||||||
|
+
|
||||||
|
+// Green
|
||||||
|
+$green-light: #a6d189;
|
||||||
|
+$green-dark: #a6d189;
|
||||||
|
+
|
||||||
|
+// Yellow
|
||||||
|
+$yellow-light: #e5c890;
|
||||||
|
+$yellow-dark: #e5c890;
|
||||||
|
+
|
||||||
|
+// Orange
|
||||||
|
+$orange-light: #ef9f76;
|
||||||
|
+$orange-dark: #ef9f76;
|
||||||
|
+
|
||||||
|
+// Grey
|
||||||
|
+$grey-050: #c6d0f5;
|
||||||
|
+$grey-100: #b5bfe2;
|
||||||
|
+$grey-150: #b5bfe2;
|
||||||
|
+$grey-200: #a5adce;
|
||||||
|
+$grey-250: #a5adce;
|
||||||
|
+$grey-300: #838ba7;
|
||||||
|
+$grey-350: #838ba7;
|
||||||
|
+$grey-400: #737994;
|
||||||
|
+$grey-450: #737994;
|
||||||
|
+$grey-500: #626880;
|
||||||
|
+$grey-550: #626880;
|
||||||
|
+$grey-600: #51576d;
|
||||||
|
+$grey-650: #51576d;
|
||||||
|
+$grey-700: #414559;
|
||||||
|
+$grey-750: #414559;
|
||||||
|
+$grey-800: #303446;
|
||||||
|
+$grey-850: #303446;
|
||||||
|
+$grey-900: #232634;
|
||||||
|
+$grey-950: #232634;
|
||||||
|
+
|
||||||
|
+// White
|
||||||
|
+$white: #FFFFFF;
|
||||||
|
+
|
||||||
|
+// Black
|
||||||
|
+$black: #000000;
|
||||||
|
+
|
||||||
|
+// Button
|
||||||
|
+$button-close: #e78284;
|
||||||
|
+$button-max: #a6d189;
|
||||||
|
+$button-min: #e5c890;
|
||||||
|
+
|
||||||
|
+// Link
|
||||||
|
+$links: #99d1db;
|
||||||
|
+
|
||||||
|
+// Theme
|
||||||
|
+$default-light: $purple-light;
|
||||||
|
+$default-dark: $purple-dark;
|
78
patches/colloid/sass-palette-latte.patch
Normal file
78
patches/colloid/sass-palette-latte.patch
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
diff --git a/src/sass/_color-palette-catppuccin-latte.scss b/src/sass/_color-palette-catppuccin-latte.scss
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..8a905942
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/sass/_color-palette-catppuccin-latte.scss
|
||||||
|
@@ -0,0 +1,72 @@
|
||||||
|
+// Default Theme Color Palette
|
||||||
|
+
|
||||||
|
+// Red
|
||||||
|
+$red-light: #d20f39;
|
||||||
|
+$red-dark: #d20f39;
|
||||||
|
+
|
||||||
|
+// Pink
|
||||||
|
+$pink-light: #ea76cb;
|
||||||
|
+$pink-dark: #ea76cb;
|
||||||
|
+
|
||||||
|
+// Purple
|
||||||
|
+$purple-light: #8839ef;
|
||||||
|
+$purple-dark: #8839ef;
|
||||||
|
+
|
||||||
|
+// Blue
|
||||||
|
+$blue-light: #1e66f5;
|
||||||
|
+$blue-dark: #1e66f5;
|
||||||
|
+
|
||||||
|
+// Teal
|
||||||
|
+$teal-light: #179299;
|
||||||
|
+$teal-dark: #179299;
|
||||||
|
+
|
||||||
|
+// Green
|
||||||
|
+$green-light: #40a02b;
|
||||||
|
+$green-dark: #40a02b;
|
||||||
|
+
|
||||||
|
+// Yellow
|
||||||
|
+$yellow-light: #df8e1d;
|
||||||
|
+$yellow-dark: #df8e1d;
|
||||||
|
+
|
||||||
|
+// Orange
|
||||||
|
+$orange-light: #fe640b;
|
||||||
|
+$orange-dark: #fe640b;
|
||||||
|
+
|
||||||
|
+// Grey
|
||||||
|
+$grey-050: #4c4f69;
|
||||||
|
+$grey-100: #5c5f77;
|
||||||
|
+$grey-150: #5c5f77;
|
||||||
|
+$grey-200: #6c6f85;
|
||||||
|
+$grey-250: #6c6f85;
|
||||||
|
+$grey-300: #8c8fa1;
|
||||||
|
+$grey-350: #8c8fa1;
|
||||||
|
+$grey-400: #9ca0b0;
|
||||||
|
+$grey-450: #9ca0b0;
|
||||||
|
+$grey-500: #acb0be;
|
||||||
|
+$grey-550: #acb0be;
|
||||||
|
+$grey-600: #bcc0cc;
|
||||||
|
+$grey-650: #bcc0cc;
|
||||||
|
+$grey-700: #ccd0da;
|
||||||
|
+$grey-750: #ccd0da;
|
||||||
|
+$grey-800: #eff1f5;
|
||||||
|
+$grey-850: #eff1f5;
|
||||||
|
+$grey-900: #dce0e8;
|
||||||
|
+$grey-950: #dce0e8;
|
||||||
|
+
|
||||||
|
+// White
|
||||||
|
+$white: #FFFFFF;
|
||||||
|
+
|
||||||
|
+// Black
|
||||||
|
+$black: #000000;
|
||||||
|
+
|
||||||
|
+// Button
|
||||||
|
+$button-close: #d20f39;
|
||||||
|
+$button-max: #40a02b;
|
||||||
|
+$button-min: #df8e1d;
|
||||||
|
+
|
||||||
|
+// Link
|
||||||
|
+$links: #04a5e5;
|
||||||
|
+
|
||||||
|
+// Theme
|
||||||
|
+$default-light: $purple-light;
|
||||||
|
+$default-dark: $purple-dark;
|
78
patches/colloid/sass-palette-macchiato.patch
Normal file
78
patches/colloid/sass-palette-macchiato.patch
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
diff --git a/src/sass/_color-palette-catppuccin-macchiato.scss b/src/sass/_color-palette-catppuccin-macchiato.scss
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..8a905942
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/sass/_color-palette-catppuccin-macchiato.scss
|
||||||
|
@@ -0,0 +1,72 @@
|
||||||
|
+// Default Theme Color Palette
|
||||||
|
+
|
||||||
|
+// Red
|
||||||
|
+$red-light: #ed8796;
|
||||||
|
+$red-dark: #ed8796;
|
||||||
|
+
|
||||||
|
+// Pink
|
||||||
|
+$pink-light: #f5bde6;
|
||||||
|
+$pink-dark: #f5bde6;
|
||||||
|
+
|
||||||
|
+// Purple
|
||||||
|
+$purple-light: #c6a0f6;
|
||||||
|
+$purple-dark: #c6a0f6;
|
||||||
|
+
|
||||||
|
+// Blue
|
||||||
|
+$blue-light: #8aadf4;
|
||||||
|
+$blue-dark: #8aadf4;
|
||||||
|
+
|
||||||
|
+// Teal
|
||||||
|
+$teal-light: #8bd5ca;
|
||||||
|
+$teal-dark: #8bd5ca;
|
||||||
|
+
|
||||||
|
+// Green
|
||||||
|
+$green-light: #a6da95;
|
||||||
|
+$green-dark: #a6da95;
|
||||||
|
+
|
||||||
|
+// Yellow
|
||||||
|
+$yellow-light: #eed49f;
|
||||||
|
+$yellow-dark: #eed49f;
|
||||||
|
+
|
||||||
|
+// Orange
|
||||||
|
+$orange-light: #f5a97f;
|
||||||
|
+$orange-dark: #f5a97f;
|
||||||
|
+
|
||||||
|
+// Grey
|
||||||
|
+$grey-050: #cad3f5;
|
||||||
|
+$grey-100: #b8c0e0;
|
||||||
|
+$grey-150: #b8c0e0;
|
||||||
|
+$grey-200: #a5adcb;
|
||||||
|
+$grey-250: #a5adcb;
|
||||||
|
+$grey-300: #8087a2;
|
||||||
|
+$grey-350: #8087a2;
|
||||||
|
+$grey-400: #6e738d;
|
||||||
|
+$grey-450: #6e738d;
|
||||||
|
+$grey-500: #5b6078;
|
||||||
|
+$grey-550: #5b6078;
|
||||||
|
+$grey-600: #494d64;
|
||||||
|
+$grey-650: #494d64;
|
||||||
|
+$grey-700: #363a4f;
|
||||||
|
+$grey-750: #363a4f;
|
||||||
|
+$grey-800: #24273a;
|
||||||
|
+$grey-850: #24273a;
|
||||||
|
+$grey-900: #181926;
|
||||||
|
+$grey-950: #181926;
|
||||||
|
+
|
||||||
|
+// White
|
||||||
|
+$white: #FFFFFF;
|
||||||
|
+
|
||||||
|
+// Black
|
||||||
|
+$black: #000000;
|
||||||
|
+
|
||||||
|
+// Button
|
||||||
|
+$button-close: #ed8796;
|
||||||
|
+$button-max: #a6da95;
|
||||||
|
+$button-min: #eed49f;
|
||||||
|
+
|
||||||
|
+// Link
|
||||||
|
+$links: #91d7e3;
|
||||||
|
+
|
||||||
|
+// Theme
|
||||||
|
+$default-light: $purple-light;
|
||||||
|
+$default-dark: $purple-dark;
|
78
patches/colloid/sass-palette-mocha.patch
Normal file
78
patches/colloid/sass-palette-mocha.patch
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
diff --git a/src/sass/_color-palette-catppuccin-mocha.scss b/src/sass/_color-palette-catppuccin-mocha.scss
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..8a905942
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/sass/_color-palette-catppuccin-mocha.scss
|
||||||
|
@@ -0,0 +1,72 @@
|
||||||
|
+// Default Theme Color Palette
|
||||||
|
+
|
||||||
|
+// Red
|
||||||
|
+$red-light: #f38ba8;
|
||||||
|
+$red-dark: #f38ba8;
|
||||||
|
+
|
||||||
|
+// Pink
|
||||||
|
+$pink-light: #f5c2e7;
|
||||||
|
+$pink-dark: #f5c2e7;
|
||||||
|
+
|
||||||
|
+// Purple
|
||||||
|
+$purple-light: #cba6f7;
|
||||||
|
+$purple-dark: #cba6f7;
|
||||||
|
+
|
||||||
|
+// Blue
|
||||||
|
+$blue-light: #89b4fa;
|
||||||
|
+$blue-dark: #89b4fa;
|
||||||
|
+
|
||||||
|
+// Teal
|
||||||
|
+$teal-light: #94e2d5;
|
||||||
|
+$teal-dark: #94e2d5;
|
||||||
|
+
|
||||||
|
+// Green
|
||||||
|
+$green-light: #a6e3a1;
|
||||||
|
+$green-dark: #a6e3a1;
|
||||||
|
+
|
||||||
|
+// Yellow
|
||||||
|
+$yellow-light: #f9e2af;
|
||||||
|
+$yellow-dark: #f9e2af;
|
||||||
|
+
|
||||||
|
+// Orange
|
||||||
|
+$orange-light: #fab387;
|
||||||
|
+$orange-dark: #fab387;
|
||||||
|
+
|
||||||
|
+// Grey
|
||||||
|
+$grey-050: #cdd6f4;
|
||||||
|
+$grey-100: #bac2de;
|
||||||
|
+$grey-150: #bac2de;
|
||||||
|
+$grey-200: #a6adc8;
|
||||||
|
+$grey-250: #a6adc8;
|
||||||
|
+$grey-300: #7f849c;
|
||||||
|
+$grey-350: #7f849c;
|
||||||
|
+$grey-400: #6c7086;
|
||||||
|
+$grey-450: #6c7086;
|
||||||
|
+$grey-500: #585b70;
|
||||||
|
+$grey-550: #585b70;
|
||||||
|
+$grey-600: #45475a;
|
||||||
|
+$grey-650: #45475a;
|
||||||
|
+$grey-700: #313244;
|
||||||
|
+$grey-750: #313244;
|
||||||
|
+$grey-800: #1e1e2e;
|
||||||
|
+$grey-850: #1e1e2e;
|
||||||
|
+$grey-900: #11111b;
|
||||||
|
+$grey-950: #11111b;
|
||||||
|
+
|
||||||
|
+// White
|
||||||
|
+$white: #FFFFFF;
|
||||||
|
+
|
||||||
|
+// Black
|
||||||
|
+$black: #000000;
|
||||||
|
+
|
||||||
|
+// Button
|
||||||
|
+$button-close: #f38ba8;
|
||||||
|
+$button-max: #a6e3a1;
|
||||||
|
+$button-min: #f9e2af;
|
||||||
|
+
|
||||||
|
+// Link
|
||||||
|
+$links: #89dceb;
|
||||||
|
+
|
||||||
|
+// Theme
|
||||||
|
+$default-light: $purple-light;
|
||||||
|
+$default-dark: $purple-dark;
|
@@ -1 +1 @@
|
|||||||
catppuccin>=1.1.1
|
catppuccin>=2.0.0
|
||||||
|
@@ -1,88 +0,0 @@
|
|||||||
import os
|
|
||||||
import shutil
|
|
||||||
import subprocess
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
from scripts.ctp_colors import ctp_colors
|
|
||||||
from scripts.patches import recreate_xfwm4_assets
|
|
||||||
from scripts.recolor import recolor
|
|
||||||
from scripts.utils import replacetext, zip_multiple_folders
|
|
||||||
from scripts.var import def_color_map, repo_dir, src_dir, theme_name, work_dir
|
|
||||||
|
|
||||||
|
|
||||||
def create_theme(types: List[str], accents: List[str], dest: str, link: bool = False,
|
|
||||||
name: str = theme_name, size: str = "standard", tweaks=[], zip = False, recreate_assets = False) -> None:
|
|
||||||
|
|
||||||
try:
|
|
||||||
os.makedirs(dest) # Create our destination directory
|
|
||||||
except FileExistsError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
for type in types:
|
|
||||||
if recreate_assets:
|
|
||||||
recreate_xfwm4_assets(type)
|
|
||||||
|
|
||||||
for accent in accents:
|
|
||||||
# Recolor colloid wrt our selection like mocha. latte
|
|
||||||
recolor(ctp_colors[type], accent)
|
|
||||||
theme_style: str = "light" if type == "latte" else "dark"
|
|
||||||
install_cmd: str = f"./install.sh -c {theme_style} -s {size} -n {name} -d {dest} -t {def_color_map[accent]}"
|
|
||||||
if tweaks:
|
|
||||||
install_cmd += f" --tweaks {' '.join([tweak for tweak in tweaks])}"
|
|
||||||
shutil.rmtree(f"{repo_dir}/chrome", ignore_errors=True)
|
|
||||||
shutil.copytree(f"{src_dir}/other/firefox/chrome", f"{repo_dir}/chrome")
|
|
||||||
os.chdir(work_dir)
|
|
||||||
subprocess.call("./build.sh", shell=True) # Rebuild all scss
|
|
||||||
subprocess.call(install_cmd, shell=True) # Install the theme globally for you
|
|
||||||
subprocess.call("git reset --hard HEAD", shell=True) # reset colloid repo to original state
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Rename colloid generated files as per catppuccin
|
|
||||||
new_filename = dest + \
|
|
||||||
f"/{name}-{type.capitalize()}-{size.capitalize()}-{accent.capitalize()}-{theme_style.title()}"
|
|
||||||
filename = f"{name}"
|
|
||||||
if def_color_map[accent] != 'default':
|
|
||||||
filename += f"-{def_color_map[accent].capitalize()}"
|
|
||||||
filename += f"-{theme_style.capitalize()}"
|
|
||||||
if size == 'compact':
|
|
||||||
filename += '-Compact'
|
|
||||||
try:
|
|
||||||
shutil.rmtree(new_filename + '-hdpi')
|
|
||||||
shutil.rmtree(new_filename + '-xhdpi')
|
|
||||||
shutil.rmtree(new_filename)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
os.rename(dest + "/" + filename + '-hdpi',
|
|
||||||
new_filename + '-hdpi')
|
|
||||||
os.rename(dest + "/" + filename + '-xhdpi',
|
|
||||||
new_filename + '-xhdpi')
|
|
||||||
os.rename(dest + "/" + filename, new_filename)
|
|
||||||
replacetext(new_filename + '/index.theme', filename, new_filename.split("/")[-1])
|
|
||||||
print("Successfully renamed file")
|
|
||||||
except Exception as e:
|
|
||||||
print("Failed to rename the files due to:", e)
|
|
||||||
|
|
||||||
if link:
|
|
||||||
try:
|
|
||||||
# Attempte relinking all the libadvaita files
|
|
||||||
subprocess.call(
|
|
||||||
'rm -rf "${HOME}/.config/gtk-4.0/"{assets,gtk.css,gtk-dark.css}', shell=True)
|
|
||||||
HOME = os.path.expanduser('~')
|
|
||||||
|
|
||||||
try:
|
|
||||||
os.makedirs(f"{HOME}/.config/gtk-4.0")
|
|
||||||
except FileExistsError:
|
|
||||||
pass
|
|
||||||
os.symlink(f"{new_filename}/gtk-4.0/assets",
|
|
||||||
f"{HOME}/.config/gtk-4.0/assets")
|
|
||||||
os.symlink(f"{new_filename}/gtk-4.0/gtk.css",
|
|
||||||
f"{HOME}/.config/gtk-4.0/gtk.css")
|
|
||||||
os.symlink(f"{new_filename}/gtk-4.0/gtk-dark.css",
|
|
||||||
f"{HOME}/.config/gtk-4.0/gtk-dark.css")
|
|
||||||
print("Successfully created symlinks for libadvaita")
|
|
||||||
except Exception as e:
|
|
||||||
print("Failed to link due to :", e)
|
|
||||||
|
|
||||||
if zip:
|
|
||||||
foldernames = [new_filename, new_filename + '-xhdpi', new_filename + '-hdpi']
|
|
||||||
zip_multiple_folders(foldernames, new_filename + ".zip", not link)
|
|
@@ -1,16 +0,0 @@
|
|||||||
from catppuccin import Flavour
|
|
||||||
|
|
||||||
ctp_colors = {
|
|
||||||
"latte": Flavour.latte(),
|
|
||||||
"mocha": Flavour.mocha(),
|
|
||||||
"frappe": Flavour.frappe(),
|
|
||||||
"macchiato": Flavour.macchiato()
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_all_accent():
|
|
||||||
accent = {}
|
|
||||||
for key, value in Flavour.latte().__dict__.items():
|
|
||||||
if key not in ['white', 'black', 'text', 'subtext0', 'subtext1', 'overlay0', 'overlay1', 'overlay2', 'surface0', 'surface1', 'surface2', 'base', 'mantle', 'crust']:
|
|
||||||
accent[key] = value
|
|
||||||
|
|
||||||
return accent
|
|
@@ -1,32 +0,0 @@
|
|||||||
import os
|
|
||||||
import shutil
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
from scripts.var import src_dir, repo_dir, work_dir
|
|
||||||
|
|
||||||
def recreate_xfwm4_assets(flavour):
|
|
||||||
"""
|
|
||||||
Recolors xfwm4 assets based on the flavour
|
|
||||||
|
|
||||||
Args:
|
|
||||||
flavour (Flavour): The flavour to recolor
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Delete assets that already exists and copy new assets file
|
|
||||||
folders = ["assets", "assets-Light"]
|
|
||||||
variants = ["", "-Normal"]
|
|
||||||
sizes = ["", "-hdpi", "-xhdpi"]
|
|
||||||
assets_folder = f"{src_dir}/assets/xfwm4"
|
|
||||||
|
|
||||||
for folder in folders:
|
|
||||||
for variant in variants:
|
|
||||||
for size in sizes:
|
|
||||||
shutil.rmtree(f"{assets_folder}/{folder}{variant}{size}", ignore_errors=True)
|
|
||||||
|
|
||||||
|
|
||||||
patched_asset = f"{repo_dir}/patches/xfwm4/{folder}-Catppuccin-{flavour}{variant}.svg"
|
|
||||||
shutil.copy(patched_asset, f"{assets_folder}/{folder}{variant}.svg")
|
|
||||||
|
|
||||||
os.chdir(assets_folder)
|
|
||||||
subprocess.call(f"{assets_folder}/render-assets.sh", shell=True) # Rebuild all assets
|
|
||||||
os.chdir(work_dir)
|
|
@@ -1,187 +0,0 @@
|
|||||||
from catppuccin import Flavour
|
|
||||||
|
|
||||||
from .utils import replacetext, replaceAllText
|
|
||||||
from .var import (def_accent_dark, def_accent_light, def_color_map, src_dir, work_dir)
|
|
||||||
|
|
||||||
|
|
||||||
def recolor_accent(flavor, accent: str = "blue"):
|
|
||||||
"""
|
|
||||||
Recolors the accent color in a file.
|
|
||||||
flavor:
|
|
||||||
The flavor to recolor to. Like mocha, frappe, latte, etc.
|
|
||||||
accent:
|
|
||||||
The accent color to replace. Defaults to Blue
|
|
||||||
"""
|
|
||||||
print(f"Recoloring all accents")
|
|
||||||
replaceAllText( # Recolor as per base for dark theme.
|
|
||||||
work_dir, def_accent_dark[def_color_map[accent]], flavor.__dict__[accent].hex)
|
|
||||||
replaceAllText( # Recolor as per accent for light. Hard code it as latte
|
|
||||||
work_dir, def_accent_light[def_color_map[accent]], Flavour.latte().__dict__[accent].hex)
|
|
||||||
|
|
||||||
|
|
||||||
def recolor_firefox(flavor, accent: str = "blue"):
|
|
||||||
"""
|
|
||||||
Recolor the custom gnomish firefox to catpuccin color
|
|
||||||
"""
|
|
||||||
firefox_color_file_dark = f"{src_dir}/other/firefox/chrome/Colloid/colors/dark.css"
|
|
||||||
firefox_color_file_light = f"{src_dir}/other/firefox/chrome/Colloid/colors/light.css"
|
|
||||||
|
|
||||||
replacetext(firefox_color_file_light, "2e3436", flavor.base.hex)
|
|
||||||
replacetext(firefox_color_file_light, "fafafa", Flavour.latte().base.hex)
|
|
||||||
replacetext(firefox_color_file_light, "f2f2f2", flavor.crust.hex)
|
|
||||||
replacetext(firefox_color_file_light, "303030", Flavour.mocha().base.hex)
|
|
||||||
replacetext(firefox_color_file_light, "ffffff", flavor.base.hex)
|
|
||||||
replacetext(firefox_color_file_light, "5b9bf8", flavor.surface0.hex)
|
|
||||||
replacetext(firefox_color_file_light, "3c84f7", flavor.__dict__[accent].hex)
|
|
||||||
replacetext(firefox_color_file_light, "dedede", flavor.surface1.hex)
|
|
||||||
replacetext(firefox_color_file_light, "f0f0f0", flavor.surface0.hex)
|
|
||||||
replacetext(firefox_color_file_light, "FAFAFA", flavor.surface1.hex)
|
|
||||||
replacetext(firefox_color_file_light, "fafafa", flavor.surface0.hex)
|
|
||||||
replacetext(firefox_color_file_light, "323232", flavor.mantle.hex)
|
|
||||||
replacetext(firefox_color_file_light, "d5d0cc", flavor.subtext1.hex)
|
|
||||||
|
|
||||||
# Buttons
|
|
||||||
replacetext(firefox_color_file_light, "fd5f51", flavor.red.hex)
|
|
||||||
replacetext(firefox_color_file_light, "38c76a", flavor.green.hex)
|
|
||||||
replacetext(firefox_color_file_light, "fdbe04", flavor.yellow.hex)
|
|
||||||
|
|
||||||
# Dark
|
|
||||||
replacetext(firefox_color_file_dark, "eeeeee", flavor.base.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "2c2c2c", Flavour.mocha().base.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "242424", flavor.crust.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "ffffff", Flavour.latte().base.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "383838", flavor.base.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "3584e4", flavor.surface0.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "78aeed", flavor.__dict__[accent].hex)
|
|
||||||
replacetext(firefox_color_file_dark, "363636", flavor.surface1.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "404040", flavor.surface0.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "4F4F4F", flavor.surface1.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "444444", flavor.surface0.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "323232", flavor.mantle.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "919191", flavor.subtext1.hex)
|
|
||||||
|
|
||||||
# Buttons
|
|
||||||
replacetext(firefox_color_file_dark, "fd5f51", flavor.red.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "38c76a", flavor.green.hex)
|
|
||||||
replacetext(firefox_color_file_dark, "fdbe04", flavor.yellow.hex)
|
|
||||||
|
|
||||||
def recolor(flavor, accent: str):
|
|
||||||
"""
|
|
||||||
Recolor the theme. currently hard code it frappe
|
|
||||||
"""
|
|
||||||
print("Recoloring to suit catppuccin theme")
|
|
||||||
print("Recoloring accents")
|
|
||||||
recolor_accent(flavor, accent)
|
|
||||||
print("Recoloring firefox")
|
|
||||||
recolor_firefox(flavor, accent)
|
|
||||||
|
|
||||||
print("MOD: Gtkrc.sh")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "background_light='#FFFFFF'",
|
|
||||||
f"background_light='#{Flavour.latte().base.hex}'") # use latte_base for background_light
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "titlebar_light='#F2F2F2'",
|
|
||||||
f"titlebar_light='#{Flavour.latte().crust.hex}'") # use latte_crust for titlebar_light
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh",
|
|
||||||
"titlebar_light='#F2F2F2'", f"titlebar_light='#{Flavour.latte().crust.hex}'")
|
|
||||||
|
|
||||||
if flavor == Flavour.latte():
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "background_dark='#0F0F0F'",
|
|
||||||
f"background_dark='#{Flavour.mocha().base.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "background_darker='#121212'",
|
|
||||||
f"background_darker='#{Flavour.mocha().mantle.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh",
|
|
||||||
"background_alt='#212121'", f"background_alt='#{Flavour.mocha().crust.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "titlebar_dark='#030303'",
|
|
||||||
f"titlebar_dark='#{Flavour.mocha().crust.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "background_dark='#2C2C2C'",
|
|
||||||
f"background_dark='#{Flavour.mocha().base.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "background_darker='#3C3C3C'",
|
|
||||||
f"background_darker='#{Flavour.mocha().mantle.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh",
|
|
||||||
"background_alt='#464646'", f"background_alt='#{Flavour.mocha().crust.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh",
|
|
||||||
"titlebar_dark='#242424'", f"titlebar_dark='#{Flavour.mocha().crust.hex}'")
|
|
||||||
else:
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "background_dark='#0F0F0F'",
|
|
||||||
f"background_dark='#{flavor.base.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "background_darker='#121212'",
|
|
||||||
f"background_darker='#{flavor.mantle.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh",
|
|
||||||
"background_alt='#212121'", f"background_alt='#{flavor.crust.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "titlebar_dark='#030303'",
|
|
||||||
f"titlebar_dark='#{flavor.crust.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "background_dark='#2C2C2C'",
|
|
||||||
f"background_dark='#{flavor.base.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh", "background_darker='#3C3C3C'",
|
|
||||||
f"background_darker='#{flavor.mantle.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh",
|
|
||||||
"background_alt='#464646'", f"background_alt='#{flavor.crust.hex}'")
|
|
||||||
replacetext(f"{work_dir}/gtkrc.sh",
|
|
||||||
"titlebar_dark='#242424'", f"titlebar_dark='#{flavor.crust.hex}'")
|
|
||||||
|
|
||||||
print("Mod SASS Color_Palette_default")
|
|
||||||
|
|
||||||
# Greys
|
|
||||||
if flavor == Flavour.latte(): # Hardcode till someone smarter than me comes along
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-050: #FAFAFA", f"grey-050: #{flavor.crust.hex}")
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-100: #F2F2F2", f"grey-100: #{flavor.mantle.hex}")
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-150: #EEEEEE", f"grey-150: #{flavor.base.hex}")
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-200: #DDDDDD", f"grey-200: #{flavor.surface0.hex}") # Surface 0 Late
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-250: #CCCCCC", f"grey-250: #{flavor.surface1.hex}") # D = Surface 1 Late
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-650: #3C3C3C", f"grey-650: #{Flavour.mocha().surface0.hex}") # H $surface $tooltip
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss", "grey-700: #2C2C2C",
|
|
||||||
f"grey-700: #{Flavour.mocha().base.hex}") # G $background; $base; titlebar-backdrop; $popover
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-750: #242424", f"grey-750: #{Flavour.mocha().crust.hex}") # F $base-alt
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-800: #212121", f"grey-800: #{Flavour.mocha().crust.hex}") # E $panel-solid;p
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-850: #121212", f"grey-850: #020202") # H Darknes
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-900: #0F0F0F", f"grey-900: #010101") # G Darknes
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-950: #030303", f"grey-950: #000000") # F Darknes
|
|
||||||
else:
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-050: #FAFAFA", f"grey-050: #{flavor.overlay2.hex}")
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-100: #F2F2F2", f"grey-100: #{flavor.overlay1.hex}")
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-150: #EEEEEE", f"grey-150: #{flavor.overlay0.hex}")
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-200: #DDDDDD", f"grey-200: #{flavor.surface2.hex}") # Surface 0 Late
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-250: #CCCCCC", f"grey-250: #{flavor.surface1.hex}") # D = Surface 1 Late
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-650: #3C3C3C", f"grey-650: #{flavor.surface0.hex}") # H $surface $tooltip
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss", "grey-700: #2C2C2C",
|
|
||||||
f"grey-700: #{flavor.base.hex}") # G $background; $base; titlebar-backdrop; $popover
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-750: #242424", f"grey-750: #{flavor.crust.hex}") # F $base-alt
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-800: #212121", f"grey-800: #{flavor.crust.hex}") # E $panel-solid;p
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-850: #121212", f"grey-850: #020202") # H Darknes
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-900: #0F0F0F", f"grey-900: #010101") # G Darknes
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"grey-950: #030303", f"grey-950: #000000") # F Darknes
|
|
||||||
|
|
||||||
# Make the hover black
|
|
||||||
replacetext(f"{src_dir}/sass/gtk/_common-3.0.scss",
|
|
||||||
"if\(\$colorscheme != 'dracula', white, rgba\(black, 0\.5\)\)", "rgba(black, 0.5)")
|
|
||||||
replacetext(f"{src_dir}/sass/gtk/_common-4.0.scss",
|
|
||||||
"if\(\$colorscheme != 'dracula', white, rgba\(black, 0\.5\)\)", "rgba(black, 0.5)")
|
|
||||||
|
|
||||||
# Buttons
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"button-close: #fd5f51", f"button-close: #{flavor.red.hex}")
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"button-max: #38c76a", f"button-max: #{flavor.green.hex}")
|
|
||||||
replacetext(f"{src_dir}/sass/_color-palette-default.scss",
|
|
||||||
"button-min: #fdbe04", f"button-min: #{flavor.yellow.hex}")
|
|
@@ -1,60 +0,0 @@
|
|||||||
import os
|
|
||||||
import re
|
|
||||||
import shutil
|
|
||||||
import zipfile
|
|
||||||
|
|
||||||
|
|
||||||
def replacetext(filepath: str, search_text: str, replace_text: str) -> None:
|
|
||||||
"""
|
|
||||||
Helper function to replace the color in the file.
|
|
||||||
Can be used to replace any text in the file.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
filepath (str): The file to replace the text in.
|
|
||||||
search_text (str): The text to be replaced.
|
|
||||||
replace_text (str): The text to replace with.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
None
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(filepath, 'r+') as f:
|
|
||||||
file = f.read()
|
|
||||||
file = re.sub(search_text, replace_text, file)
|
|
||||||
f.seek(0)
|
|
||||||
f.write(file)
|
|
||||||
f.truncate()
|
|
||||||
except Exception:
|
|
||||||
print(f"Failed to recolor {filepath}")
|
|
||||||
|
|
||||||
|
|
||||||
def replaceAllText(start_dir: str, search_text: str, replace_text: str) -> None:
|
|
||||||
for path, _, files in os.walk(os.path.abspath(start_dir)):
|
|
||||||
for filename in files:
|
|
||||||
filepath = os.path.join(path, filename)
|
|
||||||
if filepath.endswith(".png"):
|
|
||||||
continue
|
|
||||||
replacetext(filepath, search_text, replace_text)
|
|
||||||
|
|
||||||
|
|
||||||
def zipdir(path, ziph):
|
|
||||||
"""
|
|
||||||
Takes in a oath of a directory and zips it in a ziph.
|
|
||||||
Util to zip a directory.
|
|
||||||
Thanks https://stackoverflow.com/questions/46229764/python-zip-multiple-directories-into-one-zip-file
|
|
||||||
"""
|
|
||||||
for root, _, files in os.walk(path):
|
|
||||||
for file in files:
|
|
||||||
ziph.write(os.path.join(root, file),
|
|
||||||
os.path.relpath(os.path.join(root, file),
|
|
||||||
os.path.join(path, '..')))
|
|
||||||
|
|
||||||
|
|
||||||
def zip_multiple_folders(dir_list, zip_name, remove=True):
|
|
||||||
zipf = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)
|
|
||||||
for dir in dir_list:
|
|
||||||
zipdir(dir, zipf)
|
|
||||||
if remove:
|
|
||||||
shutil.rmtree(dir)
|
|
||||||
zipf.close()
|
|
@@ -1,50 +0,0 @@
|
|||||||
import os
|
|
||||||
|
|
||||||
|
|
||||||
repo_dir = os.getcwd()
|
|
||||||
work_dir = f"{repo_dir}/colloid"
|
|
||||||
src_dir = f"{work_dir}/src"
|
|
||||||
tmp_dir = f"{repo_dir}/releases"
|
|
||||||
theme_name = "Catppuccin"
|
|
||||||
|
|
||||||
# Map catppuccin colors to colloid ones
|
|
||||||
# These are mostly unused except for resources for lower gtk versions.
|
|
||||||
# These assets are in png format and I am not really interested right now to recolor them using opencv
|
|
||||||
# Maybe someone more motivated can follow through
|
|
||||||
def_color_map = {
|
|
||||||
'rosewater': 'pink',
|
|
||||||
'flamingo': 'pink',
|
|
||||||
'pink': 'pink',
|
|
||||||
'mauve': 'purple',
|
|
||||||
'red': 'red',
|
|
||||||
'maroon': 'red',
|
|
||||||
'peach': 'orange',
|
|
||||||
'yellow': 'yellow',
|
|
||||||
'green': 'green',
|
|
||||||
'teal': 'teal',
|
|
||||||
'sky': 'teal',
|
|
||||||
'sapphire': 'default',
|
|
||||||
'blue': 'default',
|
|
||||||
'lavender': 'default'}
|
|
||||||
|
|
||||||
def_accent_light = {
|
|
||||||
'default': '3c84f7',
|
|
||||||
'purple': 'AB47BC',
|
|
||||||
'pink': 'EC407A',
|
|
||||||
'red': 'E53935',
|
|
||||||
'orange': 'F57C00',
|
|
||||||
'yellow': 'FBC02D',
|
|
||||||
'green': '4CAF50',
|
|
||||||
'teal': '009688'
|
|
||||||
}
|
|
||||||
|
|
||||||
def_accent_dark = {
|
|
||||||
'default': '5b9bf8',
|
|
||||||
'purple': 'BA68C8',
|
|
||||||
'pink': 'F06292',
|
|
||||||
'red': 'F44336',
|
|
||||||
'orange': 'FB8C00',
|
|
||||||
'yellow': 'FFD600',
|
|
||||||
'green': '66BB6A',
|
|
||||||
'teal': '4DB6AC'
|
|
||||||
}
|
|
Reference in New Issue
Block a user