Commit Graph

132 Commits

Author SHA1 Message Date
xeisenberg 51cecd481c fix: wall not Path type (#89) 2026-03-04 19:30:11 +11:00
2 * r + 2 * t 6e711ec289 fix: dynamic scheme import <3.0.0 compat 2026-03-03 01:04:33 +11:00
2 * r + 2 * t 0b9e416175 fix: missing colon 2026-02-21 00:52:12 +11:00
Unrectified 8ce97ea3f5 feat: add GIF files support as wallpaper (#88)
* feat: add GIF files support as wallpaper (not animated tho)

* tweak: simplifying variable use

* fix: git is good but damn it's annoying

* fix

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2026-02-21 00:17:16 +11:00
Soramane 011989e3ca fix: dynamic scheme import 2026-02-18 11:18:15 +11:00
Nathachou d88cc7ff79 feat: scheme support for Pandora Minecraft launcher (#87)
* added pandora theme template json

* feat: add support for Pandora theme integration
2026-02-17 11:36:42 +11:00
2 * r + 2 * t d890f7c3af feat: add dynamic hard flavour
Someone requested idk who tho
2026-02-15 00:24:14 +11:00
Robin Seger bca7b12072 feat: thunar & papirus-folders theming + new schemes (#80)
* feat: GTK app theming system

- Implemented custom.css import for user-managed app themes
- process_app_themes() to dynamically update colors in imported CSS files
- Inline comment markers for color replacement (e.g, /* accent-color */)
- Papirus icon color syncing with weighted hue/saturation algorithm

This allows users to create modular app themes that automatically update when the scheme/wallpaper changes

Example usage:
  .app .element { color: #24BD5C; /* accent-color */ }
  .app .element:hover { background: rgba(36, 189, 92, 0.15); /* accent-color with 15% opacity */ }

* feat: atomic theme changes with locking and mode-specific CSS

- Implemented locking to prevent concurrent theme changes
- Added mode-light/mode-dark CSS markers for dynamic property reordering
- Made terminal writes and Papirus sync non-blocking to prevent hangs
- Only save scheme.json after successful theme application

Fixes race conditions during rapid theme switching and ensures Shell and GTK apps scheme stay in sync.

* theme: added to color mapping for custom theming, new schemes

* theme: quick fixes, cleanup

* theme: include thunar.css as template, with new theming system

* theme: modified GTK theming approach

- Dropped comment targeted theming in favor for existing {{  }} replacement
- [app].css.template file created for customization, bypassing built in default if present
- Handling *.template for added templates to be parsed and added to import

* theme: fixes for  thunar.css

* theme: remove .template file use

* theme: path button color adjustment, non-active hover

* fixes & cleanup

* thunar css fixes

* more css fixes

* format

* fix tab vert spacing

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2026-02-14 23:23:33 +11:00
2 * r + 2 * t fe8adde6c1 fix: compat for python-materialyoucolor < 3.0.0 2026-02-14 23:22:30 +11:00
AteebXYZ 6a91c7b990 fix: apply mode substitution after dynamic template fill (#84) 2026-02-10 21:37:58 +11:00
2 * r + 2 * t bdc5f91009 fix: xxx_paletteKeyColor rename in myc 3.0.0
Fixes caelestia-dots/shell#1112
2026-02-10 21:33:19 +11:00
Chea Vuthearith 164bda5462 record: add arg to copy screen recording to clipboard (#83) 2026-02-10 20:53:27 +11:00
Kalagmitan 52a3a3c50e theme: inject mode into user templates (#77)
* theme: apply_user_templates accepts mode.

* Some themes like those in NvChad require a mode to be supplied to
work. Added a minimal change that makes apply_user_templates accept a
mode parameter and replaces any {{ mode }} placeholder in a file with
the actual mode.

* theme: mode replace integrated with gen_replace_dynamic

+ Moved the {{ mode }} replacement logic to the gen_replace_dynamic
function.

* refactor: adjusted comment
2026-01-24 14:45:32 +11:00
mj0x0 7de6c60631 theme: ensure atomic writes for configuration files (#76)
* fix: ensure atomic writes for configuration files

* requested changes
2026-01-18 00:11:13 +11:00
2 * r + 2 * t 08dc3e0e87 theme: update discord theme template
Fixes caelestia-dots/caelestia#206
2026-01-14 19:22:19 +11:00
github-actions 178e73a065 [CI] emojis: update data 2025-11-23 01:39:22 +00:00
Evence Wang 57dfea955e shell: fix log rules arg (#67) 2025-11-04 23:13:00 +11:00
2 * r + 2 * t cc458bf859 scheme: ignore empty lines in schemes 2025-10-25 22:41:34 +11:00
Davi Ribeiro 4593b823d7 wallpaper: fix random for multi-monitor setup (#63) 2025-10-17 04:59:13 +11:00
Givani Boekestijn c6f46db36c feat: add wallpaper post-hook for dynamic theming (#61)
* feat: add wallpaper post-hook for dynamic theming

Adds support for running custom shell commands after wallpaper changes
via the `wallpaper.postHook` config option in `~/.config/caelestia/cli.json`.

The wallpaper path is made available to the hook via the $WALLPAPER_PATH
environment variable. This enables integration with tools like `matugen`
or `pywal` for dynamic theming based on wallpaper colors.

The hook runs after apply_colours() in set_wallpaper(), ensuring it
executes for all wallpaper change methods (UI, IPC, and direct CLI).

* Replaced comment in example config with no-op command
2025-10-17 04:56:32 +11:00
2 * r + 2 * t ad6df1c9d2 record: add extraArgs config 2025-09-15 23:18:08 +10:00
2 * r + 2 * t e560a6e3d2 version: catch correct error 2025-09-14 20:45:57 +10:00
2 * r + 2 * t 62e7911864 version: fix pacman + use shell version helper 2025-09-14 00:12:42 +10:00
2 * r + 2 * t 2eda287a80 record: wl-screenrec -> gpu-screen-recorder
Supports NVIDIA, so no need for having a fallback
Also supports pausing
2025-09-13 22:58:57 +10:00
sweenu 3319d2ca19 theme: continue execution after failure for one theme (#50) 2025-09-09 13:59:04 +10:00
hoangbaoa c20bc567a4 resizer/pip: account for monitor scale (#51) 2025-09-08 23:32:30 +10:00
Matheus Oliveira 35b10394b6 record: fix wf-recorder audio flag and proc error handling (#48)
* fix(recording): Fix wf-recorder audio flag and improve process monitoring

- Fix incorrect audio flag format for wf-recorder(Invalid whitespace)
  Changed from `-a <device>` to `--audio=<device>` as per wf-recorder docs:
  "Specify device like this: -a<device> or --audio=<device>"

- Add fallback to IDLE audio sources
  Audio sources are typically in IDLE state when no media is playing.
  Now falls back to IDLE sources if no RUNNING sources are found,
  ensuring audio capture works when recording starts during silence
  but media plays later.

- Improve process startup monitoring
  The 0.1s sleep was insufficient for reliable process detection on NVIDIA systems.
  Process would start and immediately die ~90% of the time when triggered via keybinds.
  Now shows immediate UI feedback then monitors for 3 seconds to ensure
  stable process startup while maintaining responsive user experience.

* check returncode + timeout 3s -> 1s + format

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2025-08-30 21:59:26 +10:00
2 * r + 2 * t db1e0da5bb Revert "shell: set QT_QPA_PLATFORMTHEME env"
This reverts commit 99142f11ad.
2025-08-23 22:31:18 +10:00
2 * r + 2 * t 6cdfe72e8b wallpaper: random prevent duplicate 2025-08-23 16:22:09 +10:00
Matheus Oliveira 12f0d51862 record: use correct proc (#47)
Previously, the start() function always invoked 'wl-screenrec' regardless of detected GPU, which prevented recording on systems with NVIDIA GPUswhen 'wf-recorder' is available.

This change updates start() to launch the recorder stored in
self.recorder, ensuring the correct recorder is used based on GPU detection.
2025-08-20 12:19:06 +10:00
2 * r + 2 * t 99142f11ad shell: set QT_QPA_PLATFORMTHEME env
Hopefully fixes most people's icon issues

Fixes caelestia-dots/shell@390
2025-08-19 17:15:36 +10:00
Batuhan Edgüer c72223a7e6 feat: window resizer command & daemon (#43)
* resizer: add window resizer daemon command

Implements a continuous window resizer daemon that automatically resizes
windows based on configurable rules. Features include:

- Listens to Hyprland socket events for real-time window detection
- Supports multiple match types: initial_title, title_contains, title_exact
- Configurable via CLI config file with fallback to sensible defaults
- Rate limiting to prevent excessive resize operations
- Window actions: float, center, and custom dimensions
- Integration with existing CLI structure

Usage: caelestia resizer --daemon

* refactor: replace pip daemon with integrated resizer functionality

## Summary
- Remove standalone pip daemon and integrate its functionality into the resizer
- Add regex matching, config support, and active mode to resizer
- Implement clean 'caelestia resizer pip' command for quick PiP operations
- Update keybinds to use new unified resizer command

## Why Replace the Old PiP Method?

### 1. Code Duplication
The old pip daemon duplicated window management logic that already existed in the resizer:
- Both daemons listened to Hyprland socket events
- Both had similar window detection and manipulation code
- Both needed rate limiting and error handling

### 2. Limited Functionality
The old pip daemon was restricted:
- Only worked with regex pattern matching for 'Picture in Picture' titles
- No configuration support for custom rules
- No way to apply PiP to arbitrary windows
- No integration with other window actions

### 3. Maintenance Overhead
Having two separate daemons created maintenance issues:
- Two different codebases to maintain and debug
- Potential conflicts when both daemons run simultaneously
- Inconsistent error handling and logging approaches

### 4. Review Feedback Implementation
The PR review specifically requested this consolidation:
- "This can actually probably replace the pip daemon entirely"
- "consider adding a regex match mode and pip action, then add that to the default rules"

## New Integrated Approach Benefits

### 1. Unified Window Management
- Single daemon handles all window operations (resize, float, center, pip)
- Consistent configuration format using camelCase
- Shared error handling and rate limiting

### 2. Enhanced PiP Functionality
- Works with any window title pattern (regex, contains, exact)
- Configurable through CLI config file
- Active mode: `caelestia resizer pip` for quick PiP on current window
- Better error messages and user guidance

### 3. Future-Proof Architecture
- Easy to add new window actions (e.g., minimize, maximize, workspace move)
- Extensible pattern matching (could add class-based matching)
- Single place to implement new Hyprland features

### 4. Improved User Experience
- Simpler command structure: `caelestia resizer pip` vs complex arguments
- Better error messages when windows aren't floating
- Consistent CLI interface across all window operations

## Implementation Details
- Added pip action to WindowRule system
- Integrated original pip calculation with minimum size constraints
- Added type safety improvements throughout
- Maintained backward compatibility for existing users
- Updated keybind: `bind = $kbWindowPip, exec, caelestia resizer pip`

* fix: unpack dispatch_commands list in hypr.batch call

- Fix 'sequence item 0: expected str instance, list found' error
- hypr.batch() expects individual string arguments, not a list
- Use *dispatch_commands to unpack the list properly

* fix: handle Hyprland event format with triple > separators

- Fix window ID parsing for events with >>> instead of >>
- Add .lstrip('>') to remove any leading > characters
- Support both >> and >>> formats for compatibility
- Fixes 'Invalid window ID format: >555ee935ba30' errors

* resizer: implement active mode for all matching windows

Active mode now searches through all open windows and applies the rule to
any that match the specified pattern, rather than just checking if the
currently active window matches. This allows for batch operations on
multiple windows with the same pattern.

Special case: using pattern "active" will still target only the currently
active window, allowing users to apply rules to just the focused window
when needed.

This addresses the latest review feedback requesting that active mode work
on any open window that matches the given pattern.

* parser: better resizer help

* completions: add for resizer

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2025-08-18 17:39:35 +10:00
Batuhan Edgüer 3e19fd6919 theme: add nvtop, htop, and cava support (#45)
* templates: add nvtop, htop, and cava support

* Triggers htop and cava theme reloads

Sends a USR2 signal to htop and cava after their themes are applied. This prompts the applications to reload their configuration files, ensuring new themes are visible instantly without requiring a manual restart.
2025-08-18 17:18:26 +10:00
2 * r + 2 * t f280b9cbb6 schemes: add dark green scheme
Scheme by @depcustodian with some tweaks
2025-08-17 15:25:12 +10:00
2 * r + 2 * t b22ab08a37 pip: use batch request 2025-08-17 15:02:12 +10:00
Batuhan Edgüer 63e2132830 theme: add Warp terminal theme support (#42)
* theme: add Warp terminal theme support

Add support for Warp terminal theming with proper template and integration.
- Add warp.yaml template with standard theme variables
- Implement apply_warp function with correct 'darker'/'lighter' values
- Integrate with main theme application pipeline via enableWarp config

* warp: improve theme generation and use proper data directory

- Use gen_replace with hash=True for consistent color formatting
- Remove # symbols from template to avoid double hashes
- Replace warp_mode manually after gen_replace instead of adding to colors dict
- Use data_dir for XDG-compliant theme location
2025-08-17 02:17:39 +10:00
2 * r + 2 * t 1cd8cae2d9 paths: fix custom path envs
Specify whole path instead of end
2025-08-16 18:07:29 +10:00
2 * r + 2 * t e325129f7a record: fix region 2025-08-16 18:05:33 +10:00
Batuhan Edgüer 651efcd137 record: add NVIDIA GPU support with wf-recorder (#41)
* record: add NVIDIA GPU support with wf-recorder

- Add automatic GPU detection to choose between wl-screenrec and wf-recorder
- Use wf-recorder for NVIDIA GPUs to fix compatibility issues
- Map wf-recorder arguments correctly for region, output, and audio recording
- Update documentation to include wf-recorder as dependency for NVIDIA users

Fixes #37

* format + deduplicate

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2025-08-16 18:05:02 +10:00
2 * r + 2 * t 0df89887a0 toggle: improvements
Closes #40
2025-08-16 17:41:23 +10:00
2 * r + 2 * t c9c1be183a toggle: fix specialws 2025-08-16 16:13:02 +10:00
2 * r + 2 * t d3881bfc26 data: add new colours
NOTE: clear your scheme cache when updating to this version
`rm -r ~/.cache/caelestia/schemes`
2025-08-15 16:00:37 +10:00
2 * r + 2 * t d727836cc9 theme: better qt theming
Switch to Darkly for default QT style
Use qt5ct-kde and qt6ct-kde
2025-08-15 15:53:39 +10:00
2 * r + 2 * t 386ccf3729 paths: allow configuring via env vars
Closes #39
2025-08-13 16:10:40 +10:00
anders130 1fcfb83fba record: fix multi-monitor and moving across filesystems (#38)
* fix(record): support differing filesystems for recording destination

* fix(record): for multi-monitor-systems wl-screenrec needs a -o argument

* fix(record): replace path.rename with shutil.move

* fix(record): use json option to retrieve hyprland focused monitor

* use generator

---------

Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
2025-08-13 16:07:12 +10:00
2 * r + 2 * t f541e99d07 pip: add monitor offset
Fixes #30 (hopefully)
2025-08-04 17:48:58 +10:00
2 * r + 2 * t ae8deb35a7 toggle: allow configuring
Closes #33
2025-08-04 17:33:43 +10:00
2 * r + 2 * t 50646cd565 paths: use xdg user paths
Closes #35
2025-08-04 16:48:15 +10:00
2 * r + 2 * t fed8cc5800 theme: add config for progs to theme 2025-08-04 16:43:55 +10:00
2 * r + 2 * t d8037819f0 ci: add flake update workflow
Also add contributing, funding and issue templates

parser: add kill option to shell
version: fix errors when not on arch
2025-08-04 15:40:17 +10:00