mirror of
https://github.com/caelestia-dots/cli.git
synced 2026-06-05 23:09:27 -05:00
5f1d008cce
* theme: add live theming for chromium-based browsers Writes the surface colour as an RGB triplet to chromium.theme and applies it as a managed browser policy for chromium, brave, and google-chrome-stable using the --refresh-platform-policy flag (introduced in Chrome 142+). Also fixes write_file to set 0644 permissions so browser processes can read the policy files. * feat: use sudo tee not chmod * chore: update readme --------- Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
253 lines
8.1 KiB
Markdown
253 lines
8.1 KiB
Markdown
# caelestia-cli
|
|
|
|
The main control script for the Caelestia dotfiles.
|
|
|
|
<details><summary id="dependencies">External dependencies</summary>
|
|
|
|
- [`libnotfy`](https://gitlab.gnome.org/GNOME/libnotify) - sending notifications
|
|
- [`swappy`](https://github.com/jtheoof/swappy) - screenshot editor
|
|
- [`grim`](https://gitlab.freedesktop.org/emersion/grim) - taking screenshots
|
|
- [`dart-sass`](https://github.com/sass/dart-sass) - discord theming
|
|
- [`app2unit`](https://github.com/Vladimir-csp/app2unit) - launching apps
|
|
- [`wl-clipboard`](https://github.com/bugaevc/wl-clipboard) - copying to clipboard
|
|
- [`slurp`](https://github.com/emersion/slurp) - selecting an area
|
|
- [`gpu-screen-recorder`](https://git.dec05eba.com/gpu-screen-recorder/about) - screen recording
|
|
- `glib2` - closing notifications
|
|
- [`cliphist`](https://github.com/sentriz/cliphist) - clipboard history
|
|
- [`fuzzel`](https://codeberg.org/dnkl/fuzzel) - clipboard history/emoji picker
|
|
|
|
</details>
|
|
|
|
## Installation
|
|
|
|
### Arch linux
|
|
|
|
The CLI is available from the AUR as `caelestia-cli`. You can install it with an AUR helper
|
|
like [`yay`](https://github.com/Jguer/yay) or manually downloading the PKGBUILD and running `makepkg -si`.
|
|
|
|
A package following the latest commit also exists as `caelestia-cli-git`. This is bleeding edge
|
|
and likely to be unstable/have bugs. Regular users are recommended to use the stable package
|
|
(`caelestia-cli`).
|
|
|
|
### Nix
|
|
|
|
You can run the CLI directly via `nix run`:
|
|
|
|
```sh
|
|
nix run github:caelestia-dots/cli
|
|
```
|
|
|
|
Or add it to your system configuration:
|
|
|
|
```nix
|
|
{
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
|
|
|
caelestia-cli = {
|
|
url = "github:caelestia-dots/cli";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
}
|
|
```
|
|
|
|
The package is available as `caelestia-cli.packages.<system>.default`, which can be added to your
|
|
`environment.systemPackages`, `users.users.<username>.packages`, `home.packages` if using home-manager,
|
|
or a devshell. The CLI can then be used via the `caelestia` command.
|
|
|
|
> [!TIP]
|
|
> The default package does not have the shell enabled by default, which is required for full functionality.
|
|
> To enable the shell, use the `with-shell` package. This is the recommended installation method, as
|
|
> the CLI exposes the shell via the `shell` subcommand, meaning there is no need for the shell package
|
|
> to be exposed.
|
|
|
|
For home-manager, you can also use the Caelestia's home manager module (explained in
|
|
[configuring](https://github.com/caelestia-dots/shell?tab=readme-ov-file#home-manager-module)) that
|
|
installs and configures the shell and the CLI.
|
|
|
|
### Manual installation
|
|
|
|
Install all [dependencies](#dependencies), then install
|
|
[`python-build`](https://github.com/pypa/build),
|
|
[`python-installer`](https://github.com/pypa/installer),
|
|
[`python-hatch`](https://github.com/pypa/hatch) and
|
|
[`python-hatch-vcs`](https://github.com/ofek/hatch-vcs).
|
|
|
|
e.g. via an AUR helper (yay)
|
|
|
|
```sh
|
|
yay -S libnotify swappy grim dart-sass app2unit wl-clipboard slurp gpu-screen-recorder glib2 cliphist fuzzel python-build python-installer python-hatch python-hatch-vcs
|
|
```
|
|
|
|
Now, clone the repo, `cd` into it, build the wheel via `python -m build --wheel`
|
|
and install it via `python -m installer dist/*.whl`. Then, to install the `fish`
|
|
completions, copy the `completions/caelestia.fish` file to
|
|
`/usr/share/fish/vendor_completions.d/caelestia.fish`.
|
|
|
|
```sh
|
|
git clone https://github.com/caelestia-dots/cli.git
|
|
cd cli
|
|
python -m build --wheel
|
|
sudo python -m installer dist/*.whl
|
|
sudo cp completions/caelestia.fish /usr/share/fish/vendor_completions.d/caelestia.fish
|
|
```
|
|
|
|
### Additional steps
|
|
|
|
#### Auto folder colour theming
|
|
|
|
For automatic Papirus folder icon colour syncing, you must have [`papirus-folders`](https://github.com/PapirusDevelopmentTeam/papirus-folders)
|
|
installed, and `papirus-folders` must to be able to run with `sudo` without a password prompt.
|
|
|
|
You can allow this by creating a sudoers file:
|
|
|
|
```sh
|
|
echo "$USER ALL=(ALL) NOPASSWD: $(which papirus-folders)" | sudo tee /etc/sudoers.d/papirus-folders
|
|
sudo chmod 440 /etc/sudoers.d/papirus-folders
|
|
```
|
|
|
|
#### Chromium-based browser theming
|
|
|
|
For live Chromium-based browser theming, the CLI must be allowed to create certain directories in `/etc`
|
|
and write to them via `sudo` without a password prompt.
|
|
|
|
You can allow this by creating a sudoers file:
|
|
|
|
```fish
|
|
# Fish shell
|
|
for dir in /etc/chromium/policies/managed /etc/brave/policies/managed /etc/opt/chrome/policies/managed
|
|
echo "$USER ALL=(ALL) NOPASSWD: $(which mkdir) -p $dir" | sudo tee -a /etc/sudoers.d/caelestia-chromium
|
|
echo "$USER ALL=(ALL) NOPASSWD: $(which tee) $dir/caelestia.json" | sudo tee -a /etc/sudoers.d/caelestia-chromium
|
|
end
|
|
sudo chmod 440 /etc/sudoers.d/caelestia-chromium
|
|
```
|
|
|
|
```sh
|
|
# Bash/other shells
|
|
for dir in /etc/chromium/policies/managed /etc/brave/policies/managed /etc/opt/chrome/policies/managed; do
|
|
echo "$USER ALL=(ALL) NOPASSWD: $(which mkdir) -p $dir" | sudo tee -a /etc/sudoers.d/caelestia-chromium
|
|
echo "$USER ALL=(ALL) NOPASSWD: $(which tee) $dir/caelestia.json" | sudo tee -a /etc/sudoers.d/caelestia-chromium
|
|
done
|
|
sudo chmod 440 /etc/sudoers.d/caelestia-chromium
|
|
```
|
|
|
|
## Usage
|
|
|
|
All subcommands/options can be explored via the help flag.
|
|
|
|
```
|
|
$ caelestia -h
|
|
usage: caelestia [-h] [-v] COMMAND ...
|
|
|
|
Main control script for the Caelestia dotfiles
|
|
|
|
options:
|
|
-h, --help show this help message and exit
|
|
-v, --version print the current version
|
|
|
|
subcommands:
|
|
valid subcommands
|
|
|
|
COMMAND the subcommand to run
|
|
shell start or message the shell
|
|
toggle toggle a special workspace
|
|
scheme manage the colour scheme
|
|
screenshot take a screenshot
|
|
record start a screen recording
|
|
clipboard open clipboard history
|
|
emoji emoji/glyph utilities
|
|
wallpaper manage the wallpaper
|
|
resizer window resizer daemon
|
|
```
|
|
|
|
### User templates
|
|
|
|
Custom user templates can be defined in `~/.config/caelestia/templates/`.
|
|
|
|
#### Template syntax
|
|
|
|
`{{ <color>.<format> }}`
|
|
|
|
- `<color>` is a theme color role derived from the Material You color system (e.g. `primary`, `secondary`, `background`)
|
|
- `<format>` is the output format: `hex` or `rgb`
|
|
|
|
#### Examples
|
|
|
|
- `{{ primary.hex }}` outputs `3f4ba2`
|
|
- `{{ primary.rgb }}` outputs `rgb(193, 132, 207)`
|
|
|
|
Output files are written to `~/.local/state/caelestia/theme/`. You can symlink them to your desired locations.
|
|
|
|
## Configuring
|
|
|
|
All configuration options are in `~/.config/caelestia/cli.json`.
|
|
|
|
<details><summary>Example configuration</summary>
|
|
|
|
```json
|
|
{
|
|
"record": {
|
|
"extraArgs": []
|
|
},
|
|
"wallpaper": {
|
|
"postHook": "echo $WALLPAPER_PATH"
|
|
},
|
|
"theme": {
|
|
"enableTerm": true,
|
|
"enableHypr": true,
|
|
"enableDiscord": true,
|
|
"enableSpicetify": true,
|
|
"enableFuzzel": true,
|
|
"enableBtop": true,
|
|
"enableGtk": true,
|
|
"enableQt": true
|
|
},
|
|
"toggles": {
|
|
"communication": {
|
|
"discord": {
|
|
"enable": true,
|
|
"match": [{ "class": "discord" }],
|
|
"command": ["discord"],
|
|
"move": true
|
|
},
|
|
"whatsapp": {
|
|
"enable": true,
|
|
"match": [{ "class": "whatsapp" }],
|
|
"move": true
|
|
}
|
|
},
|
|
"music": {
|
|
"spotify": {
|
|
"enable": true,
|
|
"match": [{ "class": "Spotify" }, { "initialTitle": "Spotify" }, { "initialTitle": "Spotify Free" }],
|
|
"command": ["spicetify", "watch", "-s"],
|
|
"move": true
|
|
},
|
|
"feishin": {
|
|
"enable": true,
|
|
"match": [{ "class": "feishin" }],
|
|
"move": true
|
|
}
|
|
},
|
|
"sysmon": {
|
|
"btop": {
|
|
"enable": true,
|
|
"match": [{ "class": "btop", "title": "btop", "workspace": { "name": "special:sysmon" } }],
|
|
"command": ["foot", "-a", "btop", "-T", "btop", "fish", "-C", "exec btop"]
|
|
}
|
|
},
|
|
"todo": {
|
|
"todoist": {
|
|
"enable": true,
|
|
"match": [{ "class": "Todoist" }],
|
|
"command": ["todoist"],
|
|
"move": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
</details>
|