summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2026-01-09 15:15:49 -0500
committerFreya Murphy <freya@freyacat.org>2026-03-16 09:24:54 -0400
commit50bbd6f464fd32d3ce345681c6448ef963fb6e81 (patch)
treed29ac42d5faaf2c4beb3b8ef3f138729a09de7bf
parentonly show active workspaces, fix colors (diff)
downloadcaelestia-shell-50bbd6f464fd32d3ce345681c6448ef963fb6e81.tar.gz
caelestia-shell-50bbd6f464fd32d3ce345681c6448ef963fb6e81.tar.bz2
caelestia-shell-50bbd6f464fd32d3ce345681c6448ef963fb6e81.zip
remove more stuffff
-rw-r--r--README.md806
-rwxr-xr-xassets/wrap_term_launch.sh5
-rw-r--r--config/BackgroundConfig.qml32
-rw-r--r--config/Config.qml28
-rw-r--r--config/LauncherConfig.qml3
-rw-r--r--config/UtilitiesConfig.qml1
-rw-r--r--modules/areapicker/AreaPicker.qml125
-rw-r--r--modules/background/Background.qml97
-rw-r--r--modules/background/Wallpaper.qml40
-rw-r--r--modules/controlcenter/PaneRegistry.qml24
-rw-r--r--modules/controlcenter/Panes.qml4
-rw-r--r--modules/controlcenter/Session.qml2
-rw-r--r--modules/controlcenter/appearance/AppearancePane.qml263
-rw-r--r--modules/controlcenter/appearance/sections/AnimationsSection.qml44
-rw-r--r--modules/controlcenter/appearance/sections/BackgroundSection.qml345
-rw-r--r--modules/controlcenter/appearance/sections/BorderSection.qml68
-rw-r--r--modules/controlcenter/appearance/sections/ColorSchemeSection.qml145
-rw-r--r--modules/controlcenter/appearance/sections/ColorVariantSection.qml91
-rw-r--r--modules/controlcenter/appearance/sections/FontsSection.qml282
-rw-r--r--modules/controlcenter/appearance/sections/ScalesSection.qml92
-rw-r--r--modules/controlcenter/appearance/sections/ThemeModeSection.qml23
-rw-r--r--modules/controlcenter/appearance/sections/TransparencySection.qml79
-rw-r--r--modules/controlcenter/components/ConnectedButtonGroup.qml115
-rw-r--r--modules/controlcenter/launcher/LauncherPane.qml658
-rw-r--r--modules/controlcenter/launcher/Settings.qml166
-rw-r--r--modules/launcher/services/Apps.qml2
-rw-r--r--modules/utilities/cards/Toggles.qml4
-rw-r--r--nix/default.nix3
-rw-r--r--services/Colours.qml2
-rw-r--r--services/GameMode.qml76
-rw-r--r--services/Wallpapers.qml45
-rw-r--r--shell.qml2
32 files changed, 9 insertions, 3663 deletions
diff --git a/README.md b/README.md
index e3bebcd..17ca98d 100644
--- a/README.md
+++ b/README.md
@@ -1,805 +1,5 @@
-<h1 align=center>caelestia-shell</h1>
+# Caelestia shell
-<div align=center>
+This is a HARD fork of the caelestia shell with MANY modifications.
-![GitHub last commit](https://img.shields.io/github/last-commit/caelestia-dots/shell?style=for-the-badge&labelColor=101418&color=9ccbfb)
-![GitHub Repo stars](https://img.shields.io/github/stars/caelestia-dots/shell?style=for-the-badge&labelColor=101418&color=b9c8da)
-![GitHub repo size](https://img.shields.io/github/repo-size/caelestia-dots/shell?style=for-the-badge&labelColor=101418&color=d3bfe6)
-[![Ko-Fi donate](https://img.shields.io/badge/donate-kofi?style=for-the-badge&logo=ko-fi&logoColor=ffffff&label=ko-fi&labelColor=101418&color=f16061&link=https%3A%2F%2Fko-fi.com%2Fsoramane)](https://ko-fi.com/soramane)
-[![Discord invite](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fdiscordapp.com%2Fapi%2Finvites%2FBGDCFCmMBk%3Fwith_counts%3Dtrue&query=approximate_member_count&style=for-the-badge&logo=discord&logoColor=ffffff&label=discord&labelColor=101418&color=96f1f1&link=https%3A%2F%2Fdiscord.gg%2FBGDCFCmMBk)](https://discord.gg/BGDCFCmMBk)
-
-</div>
-
-https://github.com/user-attachments/assets/0840f496-575c-4ca6-83a8-87bb01a85c5f
-
-## Components
-
-- Widgets: [`Quickshell`](https://quickshell.outfoxxed.me)
-- Window manager: [`Hyprland`](https://hyprland.org)
-- Dots: [`caelestia`](https://github.com/caelestia-dots)
-
-## Installation
-
-> [!NOTE]
-> This repo is for the desktop shell of the caelestia dots. If you want installation instructions
-> for the entire dots, head to [the main repo](https://github.com/caelestia-dots/caelestia) instead.
-
-### Arch linux
-
-> [!NOTE]
-> If you want to make your own changes/tweaks to the shell do NOT edit the files installed by the AUR
-> package. Instead, follow the instructions in the [manual installation section](#manual-installation).
-
-The shell is available from the AUR as `caelestia-shell`. 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-shell-git`. This is bleeding edge
-and likely to be unstable/have bugs. Regular users are recommended to use the stable package
-(`caelestia-shell`).
-
-### Nix
-
-You can run the shell directly via `nix run`:
-
-```sh
-nix run github:caelestia-dots/shell
-```
-
-Or add it to your system configuration:
-
-```nix
-{
- inputs = {
- nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
-
- caelestia-shell = {
- url = "github:caelestia-dots/shell";
- inputs.nixpkgs.follows = "nixpkgs";
- };
- };
-}
-```
-
-The package is available as `caelestia-shell.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 shell can then be run via `caelestia-shell`.
-
-> [!TIP]
-> The default package does not have the CLI enabled by default, which is required for full funcionality.
-> To enable the CLI, use the `with-cli` package.
-
-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
-
-Dependencies:
-
-- [`caelestia-cli`](https://github.com/caelestia-dots/cli)
-- [`quickshell-git`](https://quickshell.outfoxxed.me) - this has to be the git version, not the latest tagged version
-- [`ddcutil`](https://github.com/rockowitz/ddcutil)
-- [`brightnessctl`](https://github.com/Hummer12007/brightnessctl)
-- [`app2unit`](https://github.com/Vladimir-csp/app2unit)
-- [`libcava`](https://github.com/LukashonakV/cava)
-- [`networkmanager`](https://networkmanager.dev)
-- [`lm-sensors`](https://github.com/lm-sensors/lm-sensors)
-- [`fish`](https://github.com/fish-shell/fish-shell)
-- [`aubio`](https://github.com/aubio/aubio)
-- [`libpipewire`](https://pipewire.org)
-- `glibc`
-- `qt6-declarative`
-- `gcc-libs`
-- [`material-symbols`](https://fonts.google.com/icons)
-- [`caskaydia-cove-nerd`](https://www.nerdfonts.com/font-downloads)
-- [`swappy`](https://github.com/jtheoof/swappy)
-- [`libqalculate`](https://github.com/Qalculate/libqalculate)
-- [`bash`](https://www.gnu.org/software/bash)
-- `qt6-base`
-- `qt6-declarative`
-
-Build dependencies:
-
-- [`cmake`](https://cmake.org)
-- [`ninja`](https://github.com/ninja-build/ninja)
-
-To install the shell manually, install all dependencies and clone this repo to `$XDG_CONFIG_HOME/quickshell/caelestia`.
-Then simply build and install using `cmake`.
-
-```sh
-cd $XDG_CONFIG_HOME/quickshell
-git clone https://github.com/caelestia-dots/shell.git caelestia
-
-cd caelestia
-cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/
-cmake --build build
-sudo cmake --install build
-```
-
-> [!TIP]
-> You can customise the installation location via the `cmake` flags `INSTALL_LIBDIR`, `INSTALL_QMLDIR` and
-> `INSTALL_QSCONFDIR` for the libraries (the beat detector), QML plugin and Quickshell config directories
-> respectively. If changing the library directory, remember to set the `CAELESTIA_LIB_DIR` environment
-> variable to the custom directory when launching the shell.
->
-> e.g. installing to `~/.config/quickshell/caelestia` for easy local changes:
->
-> ```sh
-> mkdir -p ~/.config/quickshell/caelestia
-> cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/ -DINSTALL_QSCONFDIR=~/.config/quickshell/caelestia
-> cmake --build build
-> sudo cmake --install build
-> sudo chown -R $USER ~/.config/quickshell/caelestia
-> ```
-
-## Usage
-
-The shell can be started via the `caelestia shell -d` command or `qs -c caelestia`.
-If the entire caelestia dots are installed, the shell will be autostarted on login
-via an `exec-once` in the hyprland config.
-
-### Shortcuts/IPC
-
-All keybinds are accessible via Hyprland [global shortcuts](https://wiki.hyprland.org/Configuring/Binds/#dbus-global-shortcuts).
-If using the entire caelestia dots, the keybinds are already configured for you.
-Otherwise, [this file](https://github.com/caelestia-dots/caelestia/blob/main/hypr/hyprland/keybinds.conf#L1-L39)
-contains an example on how to use global shortcuts.
-
-All IPC commands can be accessed via `caelestia shell ...`. For example
-
-```sh
-caelestia shell mpris getActive trackTitle
-```
-
-The list of IPC commands can be shown via `caelestia shell -s`:
-
-```
-$ caelestia shell -s
-target drawers
- function toggle(drawer: string): void
- function list(): string
-target notifs
- function clear(): void
-target lock
- function lock(): void
- function unlock(): void
- function isLocked(): bool
-target mpris
- function playPause(): void
- function getActive(prop: string): string
- function next(): void
- function stop(): void
- function play(): void
- function list(): string
- function pause(): void
- function previous(): void
-target picker
- function openFreeze(): void
- function open(): void
-target wallpaper
- function set(path: string): void
- function get(): string
- function list(): string
-```
-
-### PFP/Wallpapers
-
-The profile picture for the dashboard is read from the file `~/.face`, so to set
-it you can copy your image to there or set it via the dashboard.
-
-The wallpapers for the wallpaper switcher are read from `~/Pictures/Wallpapers`
-by default. To change it, change the wallpapers path in `~/.config/caelestia/shell.json`.
-
-To set the wallpaper, you can use the command `caelestia wallpaper`. Use `caelestia wallpaper -h` for more info about
-the command.
-
-## Updating
-
-If installed via the AUR package, simply update your system (e.g. using `yay`).
-
-If installed manually, you can update by running `git pull` in `$XDG_CONFIG_HOME/quickshell/caelestia`.
-
-```sh
-cd $XDG_CONFIG_HOME/quickshell/caelestia
-git pull
-```
-
-## Configuring
-
-All configuration options should be put in `~/.config/caelestia/shell.json`. This file is _not_ created by
-default, you must create it manually.
-
-### Example configuration
-
-> [!NOTE]
-> The example configuration only includes recommended configuration options. For more advanced customisation
-> such as modifying the size of individual items or changing constants in the code, there are some other
-> options which can be found in the source files in the `config` directory.
-
-<details><summary>Example</summary>
-
-```json
-{
- "appearance": {
- "mediaGifSpeedAdjustment": 300,
- "sessionGifSpeed": 0.7,
- "anim": {
- "durations": {
- "scale": 1
- }
- },
- "font": {
- "family": {
- "clock": "Rubik",
- "material": "Material Symbols Rounded",
- "mono": "CaskaydiaCove NF",
- "sans": "Rubik"
- },
- "size": {
- "scale": 1
- }
- },
- "padding": {
- "scale": 1
- },
- "rounding": {
- "scale": 1
- },
- "spacing": {
- "scale": 1
- },
- "transparency": {
- "enabled": false,
- "base": 0.85,
- "layers": 0.4
- }
- },
- "general": {
- "logo": "caelestia",
- "apps": {
- "terminal": ["foot"],
- "audio": ["pavucontrol"],
- "playback": ["mpv"],
- "explorer": ["thunar"]
- },
- "battery": {
- "warnLevels": [
- {
- "level": 20,
- "title": "Low battery",
- "message": "You might want to plug in a charger",
- "icon": "battery_android_frame_2"
- },
- {
- "level": 10,
- "title": "Did you see the previous message?",
- "message": "You should probably plug in a charger <b>now</b>",
- "icon": "battery_android_frame_1"
- },
- {
- "level": 5,
- "title": "Critical battery level",
- "message": "PLUG THE CHARGER RIGHT NOW!!",
- "icon": "battery_android_alert",
- "critical": true
- }
- ],
- "criticalLevel": 3
- },
- "idle": {
- "lockBeforeSleep": true,
- "inhibitWhenAudio": true,
- "timeouts": [
- {
- "timeout": 180,
- "idleAction": "lock"
- },
- {
- "timeout": 300,
- "idleAction": "dpms off",
- "returnAction": "dpms on"
- },
- {
- "timeout": 600,
- "idleAction": ["systemctl", "suspend-then-hibernate"]
- }
- ]
- }
- },
- "background": {
- "desktopClock": {
- "enabled": false,
- "scale": 1.0,
- "position": "bottom-right",
- "shadow": {
- "enabled": true,
- "opacity": 0.7,
- "blur": 0.4
- },
- "background": {
- "enabled": false,
- "opacity": 0.7,
- "blur": true
- },
- "invertColors": false
- },
- "enabled": true,
- "visualiser": {
- "blur": false,
- "enabled": false,
- "autoHide": true,
- "rounding": 1,
- "spacing": 1
- }
- },
- "bar": {
- "activeWindow": {
- "compact": false,
- "inverted": false,
- "showOnHover": true
- },
- "clock": {
- "showIcon": true
- },
- "dragThreshold": 20,
- "entries": [
- {
- "id": "logo",
- "enabled": true
- },
- {
- "id": "workspaces",
- "enabled": true
- },
- {
- "id": "spacer",
- "enabled": true
- },
- {
- "id": "activeWindow",
- "enabled": true
- },
- {
- "id": "spacer",
- "enabled": true
- },
- {
- "id": "tray",
- "enabled": true
- },
- {
- "id": "clock",
- "enabled": true
- },
- {
- "id": "statusIcons",
- "enabled": true
- },
- {
- "id": "power",
- "enabled": true
- }
- ],
- "persistent": true,
- "popouts": {
- "activeWindow": true,
- "statusIcons": true,
- "tray": true
- },
- "scrollActions": {
- "brightness": true,
- "workspaces": true,
- "volume": true
- },
- "showOnHover": true,
- "status": {
- "showAudio": false,
- "showBattery": true,
- "showBluetooth": true,
- "showKbLayout": false,
- "showMicrophone": false,
- "showNetwork": true,
- "showWifi": true,
- "showLockStatus": true
- },
- "tray": {
- "background": false,
- "compact": false,
- "iconSubs": [],
- "recolour": false
- },
- "workspaces": {
- "activeIndicator": true,
- "activeLabel": "󰮯",
- "activeTrail": false,
- "label": " ",
- "occupiedBg": false,
- "occupiedLabel": "󰮯",
- "perMonitorWorkspaces": true,
- "showWindows": true,
- "shown": 5,
- "specialWorkspaceIcons": [
- {
- "name": "steam",
- "icon": "sports_esports"
- }
- ],
- "windowIcons": [
- {
- "regex": "steam(_app_(default|[0-9]+))?",
- "icon": "sports_esports"
- }
- ]
- },
- "excludedScreens": [""],
- "activeWindow": {
- "inverted": false
- }
- },
- "border": {
- "rounding": 25,
- "thickness": 10
- },
- "dashboard": {
- "enabled": true,
- "dragThreshold": 50,
- "mediaUpdateInterval": 500,
- "showOnHover": true
- },
- "launcher": {
- "actionPrefix": ">",
- "actions": [
- {
- "name": "Calculator",
- "icon": "calculate",
- "description": "Do simple math equations (powered by Qalc)",
- "command": ["autocomplete", "calc"],
- "enabled": true,
- "dangerous": false
- },
- {
- "name": "Scheme",
- "icon": "palette",
- "description": "Change the current colour scheme",
- "command": ["autocomplete", "scheme"],
- "enabled": true,
- "dangerous": false
- },
- {
- "name": "Wallpaper",
- "icon": "image",
- "description": "Change the current wallpaper",
- "command": ["autocomplete", "wallpaper"],
- "enabled": true,
- "dangerous": false
- },
- {
- "name": "Variant",
- "icon": "colors",
- "description": "Change the current scheme variant",
- "command": ["autocomplete", "variant"],
- "enabled": true,
- "dangerous": false
- },
- {
- "name": "Transparency",
- "icon": "opacity",
- "description": "Change shell transparency",
- "command": ["autocomplete", "transparency"],
- "enabled": false,
- "dangerous": false
- },
- {
- "name": "Random",
- "icon": "casino",
- "description": "Switch to a random wallpaper",
- "command": ["caelestia", "wallpaper", "-r"],
- "enabled": true,
- "dangerous": false
- },
- {
- "name": "Light",
- "icon": "light_mode",
- "description": "Change the scheme to light mode",
- "command": ["setMode", "light"],
- "enabled": true,
- "dangerous": false
- },
- {
- "name": "Dark",
- "icon": "dark_mode",
- "description": "Change the scheme to dark mode",
- "command": ["setMode", "dark"],
- "enabled": true,
- "dangerous": false
- },
- {
- "name": "Shutdown",
- "icon": "power_settings_new",
- "description": "Shutdown the system",
- "command": ["systemctl", "poweroff"],
- "enabled": true,
- "dangerous": true
- },
- {
- "name": "Reboot",
- "icon": "cached",
- "description": "Reboot the system",
- "command": ["systemctl", "reboot"],
- "enabled": true,
- "dangerous": true
- },
- {
- "name": "Logout",
- "icon": "exit_to_app",
- "description": "Log out of the current session",
- "command": ["loginctl", "terminate-user", ""],
- "enabled": true,
- "dangerous": true
- },
- {
- "name": "Lock",
- "icon": "lock",
- "description": "Lock the current session",
- "command": ["loginctl", "lock-session"],
- "enabled": true,
- "dangerous": false
- },
- {
- "name": "Sleep",
- "icon": "bedtime",
- "description": "Suspend then hibernate",
- "command": ["systemctl", "suspend-then-hibernate"],
- "enabled": true,
- "dangerous": false
- },
- {
- "name": "Settings",
- "icon": "settings",
- "description": "Configure the shell",
- "command": ["caelestia", "shell", "controlCenter", "open"],
- "enabled": true,
- "dangerous": false
- }
- ],
- "dragThreshold": 50,
- "vimKeybinds": false,
- "enableDangerousActions": false,
- "maxShown": 7,
- "maxWallpapers": 9,
- "specialPrefix": "@",
- "useFuzzy": {
- "apps": false,
- "actions": false,
- "schemes": false,
- "variants": false,
- "wallpapers": false
- },
- "showOnHover": false,
- "favouriteApps": [],
- "hiddenApps": []
- },
- "lock": {
- "recolourLogo": false,
- "hideNotifs": false
- },
- "notifs": {
- "actionOnClick": false,
- "clearThreshold": 0.3,
- "defaultExpireTimeout": 5000,
- "expandThreshold": 20,
- "openExpanded": false,
- "expire": false
- },
- "osd": {
- "enabled": true,
- "enableBrightness": true,
- "enableMicrophone": false,
- "hideDelay": 2000
- },
- "paths": {
- "mediaGif": "root:/assets/bongocat.gif",
- "sessionGif": "root:/assets/kurukuru.gif",
- "wallpaperDir": "~/Pictures/Wallpapers"
- },
- "services": {
- "audioIncrement": 0.1,
- "brightnessIncrement": 0.1,
- "maxVolume": 1.0,
- "defaultPlayer": "Spotify",
- "gpuType": "",
- "playerAliases": [{ "from": "com.github.th_ch.youtube_music", "to": "YT Music" }],
- "weatherLocation": "",
- "useFahrenheit": false,
- "useFahrenheitPerformance": false,
- "useTwelveHourClock": false,
- "smartScheme": true,
- "visualiserBars": 45
- },
- "session": {
- "dragThreshold": 30,
- "enabled": true,
- "vimKeybinds": false,
- "icons": {
- "logout": "logout",
- "shutdown": "power_settings_new",
- "hibernate": "downloading",
- "reboot": "cached"
- },
- "commands": {
- "logout": ["loginctl", "terminate-user", ""],
- "shutdown": ["systemctl", "poweroff"],
- "hibernate": ["systemctl", "hibernate"],
- "reboot": ["systemctl", "reboot"]
- }
- },
- "sidebar": {
- "dragThreshold": 80,
- "enabled": true
- },
- "utilities": {
- "enabled": true,
- "maxToasts": 4,
- "toasts": {
- "audioInputChanged": true,
- "audioOutputChanged": true,
- "capsLockChanged": true,
- "chargingChanged": true,
- "configLoaded": true,
- "dndChanged": true,
- "gameModeChanged": true,
- "kbLayoutChanged": true,
- "kbLimit": true,
- "numLockChanged": true,
- "vpnChanged": true,
- "nowPlaying": false
- },
- "vpn": {
- "enabled": true,
- "provider": [
- {
- "name": "wireguard",
- "interface": "your-connection-name",
- "displayName": "Wireguard (Your VPN)",
- "enabled": false
- }
- ]
- },
- "quickToggles": [
- {
- "id": "wifi",
- "enabled": true
- },
- {
- "id": "bluetooth",
- "enabled": true
- },
- {
- "id": "mic",
- "enabled": true
- },
- {
- "enabled": true,
- "id": "settings"
- },
- {
- "id": "gameMode",
- "enabled": true
- },
- {
- "id": "dnd",
- "enabled": true
- },
- {
- "id": "vpn",
- "enabled": true
- }
- ]
- }
-}
-```
-
-</details>
-
-### Home Manager Module
-
-For NixOS users, a home manager module is also available.
-
-<details><summary><code>home.nix</code></summary>
-
-```nix
-programs.caelestia = {
- enable = true;
- systemd = {
- enable = false; # if you prefer starting from your compositor
- target = "graphical-session.target";
- environment = [];
- };
- settings = {
- bar.status = {
- showBattery = false;
- };
- paths.wallpaperDir = "~/Images";
- };
- cli = {
- enable = true; # Also add caelestia-cli to path
- settings = {
- theme.enableGtk = false;
- };
- };
-};
-```
-
-The module automatically adds Caelestia shell to the path with **full functionality**. The CLI is not required, however you have the option to enable and configure it.
-
-</details>
-
-## FAQ
-
-### Need help or support?
-
-You can join the community Discord server for assistance and discussion:
-https://discord.gg/BGDCFCmMBk
-
-### My screen is flickering, help pls!
-
-Try disabling VRR in the hyprland config. You can do this by adding the following to `~/.config/caelestia/hypr-user.conf`:
-
-```conf
-misc {
- vrr = 0
-}
-```
-
-### I want to make my own changes to the hyprland config!
-
-You can add your custom hyprland configs to `~/.config/caelestia/hypr-user.conf`.
-
-### I want to make my own changes to other stuff!
-
-See the [manual installation](https://github.com/caelestia-dots/shell?tab=readme-ov-file#manual-installation) section
-for the corresponding repo.
-
-### I want to disable XXX feature!
-
-Please read the [configuring](https://github.com/caelestia-dots/shell?tab=readme-ov-file#configuring) section in the readme.
-If there is no corresponding option, make feature request.
-
-### How do I make my colour scheme change with my wallpaper?
-
-Set a wallpaper via the launcher or `caelestia wallpaper` and set the scheme to the dynamic scheme via the launcher
-or `caelestia scheme set`. e.g.
-
-```sh
-caelestia wallpaper -f <path/to/file>
-caelestia scheme set -n dynamic
-```
-
-### My wallpapers aren't showing up in the launcher!
-
-The launcher pulls wallpapers from `~/Pictures/Wallpapers` by default. You can change this in the config. Additionally,
-the launcher only shows an odd number of wallpapers at one time. If you only have 2 wallpapers, consider getting more
-(or just putting one).
-
-## Credits
-
-Thanks to the Hyprland discord community (especially the homies in #rice-discussion) for all the help and suggestions
-for improving these dots!
-
-A special thanks to [@outfoxxed](https://github.com/outfoxxed) for making Quickshell and the effort put into fixing issues
-and implementing various feature requests.
-
-Another special thanks to [@end_4](https://github.com/end-4) for his [config](https://github.com/end-4/dots-hyprland)
-which helped me a lot with learning how to use Quickshell.
-
-Finally another thank you to all the configs I took inspiration from (only one for now):
-
-- [Axenide/Ax-Shell](https://github.com/Axenide/Ax-Shell)
-
-## Stonks 📈
-
-<a href="https://www.star-history.com/#caelestia-dots/shell&Date">
- <picture>
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=caelestia-dots/shell&type=Date&theme=dark" />
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=caelestia-dots/shell&type=Date" />
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=caelestia-dots/shell&type=Date" />
- </picture>
-</a>
+See the origional [here](https://github.com/caelestia-dots/shell).
diff --git a/assets/wrap_term_launch.sh b/assets/wrap_term_launch.sh
deleted file mode 100755
index caf60c7..0000000
--- a/assets/wrap_term_launch.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env sh
-
-cat ~/.local/state/caelestia/sequences.txt 2>/dev/null
-
-exec "$@"
diff --git a/config/BackgroundConfig.qml b/config/BackgroundConfig.qml
index 8383f52..9bcca87 100644
--- a/config/BackgroundConfig.qml
+++ b/config/BackgroundConfig.qml
@@ -2,36 +2,4 @@ import Quickshell.Io
JsonObject {
property bool enabled: true
- property bool wallpaperEnabled: true
- property DesktopClock desktopClock: DesktopClock {}
- property Visualiser visualiser: Visualiser {}
-
- component DesktopClock: JsonObject {
- property bool enabled: false
- property real scale: 1.0
- property string position: "bottom-right"
- property bool invertColors: false
- property DesktopClockBackground background: DesktopClockBackground {}
- property DesktopClockShadow shadow: DesktopClockShadow {}
- }
-
- component DesktopClockBackground: JsonObject {
- property bool enabled: false
- property real opacity: 0.7
- property bool blur: true
- }
-
- component DesktopClockShadow: JsonObject {
- property bool enabled: true
- property real opacity: 0.7
- property real blur: 0.4
- }
-
- component Visualiser: JsonObject {
- property bool enabled: false
- property bool autoHide: true
- property bool blur: false
- property real rounding: 1
- property real spacing: 1
- }
}
diff --git a/config/Config.qml b/config/Config.qml
index dbf73a3..de88c05 100644
--- a/config/Config.qml
+++ b/config/Config.qml
@@ -121,30 +121,6 @@ Singleton {
function serializeBackground(): var {
return {
enabled: background.enabled,
- wallpaperEnabled: background.wallpaperEnabled,
- desktopClock: {
- enabled: background.desktopClock.enabled,
- scale: background.desktopClock.scale,
- position: background.desktopClock.position,
- invertColors: background.desktopClock.invertColors,
- background: {
- enabled: background.desktopClock.background.enabled,
- opacity: background.desktopClock.background.opacity,
- blur: background.desktopClock.background.blur
- },
- shadow: {
- enabled: background.desktopClock.shadow.enabled,
- opacity: background.desktopClock.shadow.opacity,
- blur: background.desktopClock.shadow.blur
- }
- },
- visualiser: {
- enabled: background.visualiser.enabled,
- autoHide: background.visualiser.autoHide,
- blur: background.visualiser.blur,
- rounding: background.visualiser.rounding,
- spacing: background.visualiser.spacing
- }
};
}
@@ -252,9 +228,6 @@ Singleton {
hiddenApps: launcher.hiddenApps,
useFuzzy: {
apps: launcher.useFuzzy.apps,
- schemes: launcher.useFuzzy.schemes,
- variants: launcher.useFuzzy.variants,
- wallpapers: launcher.useFuzzy.wallpapers
},
actions: launcher.actions
sizes: {
@@ -326,7 +299,6 @@ Singleton {
toasts: {
configLoaded: utilities.toasts.configLoaded,
chargingChanged: utilities.toasts.chargingChanged,
- gameModeChanged: utilities.toasts.gameModeChanged,
dndChanged: utilities.toasts.dndChanged,
audioOutputChanged: utilities.toasts.audioOutputChanged,
audioInputChanged: utilities.toasts.audioInputChanged,
diff --git a/config/LauncherConfig.qml b/config/LauncherConfig.qml
index 8a6dff0..f3f4bc7 100644
--- a/config/LauncherConfig.qml
+++ b/config/LauncherConfig.qml
@@ -14,9 +14,6 @@ JsonObject {
component UseFuzzy: JsonObject {
property bool apps: false
- property bool schemes: false
- property bool variants: false
- property bool wallpapers: false
}
component Sizes: JsonObject {
diff --git a/config/UtilitiesConfig.qml b/config/UtilitiesConfig.qml
index 4d1dd6e..e102526 100644
--- a/config/UtilitiesConfig.qml
+++ b/config/UtilitiesConfig.qml
@@ -16,7 +16,6 @@ JsonObject {
component Toasts: JsonObject {
property bool configLoaded: true
property bool chargingChanged: true
- property bool gameModeChanged: true
property bool dndChanged: true
property bool audioOutputChanged: true
property bool audioInputChanged: true
diff --git a/modules/areapicker/AreaPicker.qml b/modules/areapicker/AreaPicker.qml
deleted file mode 100644
index 308b7d2..0000000
--- a/modules/areapicker/AreaPicker.qml
+++ /dev/null
@@ -1,125 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import qs.components.containers
-import qs.components.misc
-import qs.services
-import Quickshell
-import Quickshell.Wayland
-import Quickshell.Io
-
-Scope {
- LazyLoader {
- id: root
-
- property bool freeze
- property bool closing
- property bool clipboardOnly
-
- Variants {
- model: Screens.screens
-
- StyledWindow {
- id: win
-
- required property ShellScreen modelData
-
- screen: modelData
- name: "area-picker"
- WlrLayershell.exclusionMode: ExclusionMode.Ignore
- WlrLayershell.layer: WlrLayer.Overlay
- WlrLayershell.keyboardFocus: root.closing ? WlrKeyboardFocus.None : WlrKeyboardFocus.Exclusive
- mask: root.closing ? empty : null
-
- anchors.top: true
- anchors.bottom: true
- anchors.left: true
- anchors.right: true
-
- Region {
- id: empty
- }
-
- Picker {
- loader: root
- screen: win.modelData
- }
- }
- }
- }
-
- IpcHandler {
- target: "picker"
-
- function open(): void {
- root.freeze = false;
- root.closing = false;
- root.clipboardOnly = false;
- root.activeAsync = true;
- }
-
- function openFreeze(): void {
- root.freeze = true;
- root.closing = false;
- root.clipboardOnly = false;
- root.activeAsync = true;
- }
-
- function openClip(): void {
- root.freeze = false;
- root.closing = false;
- root.clipboardOnly = true;
- root.activeAsync = true;
- }
-
- function openFreezeClip(): void {
- root.freeze = true;
- root.closing = false;
- root.clipboardOnly = true;
- root.activeAsync = true;
- }
- }
-
- CustomShortcut {
- name: "screenshot"
- description: "Open screenshot tool"
- onPressed: {
- root.freeze = false;
- root.closing = false;
- root.clipboardOnly = false;
- root.activeAsync = true;
- }
- }
-
- CustomShortcut {
- name: "screenshotFreeze"
- description: "Open screenshot tool (freeze mode)"
- onPressed: {
- root.freeze = true;
- root.closing = false;
- root.clipboardOnly = false;
- root.activeAsync = true;
- }
- }
-
- CustomShortcut {
- name: "screenshotClip"
- description: "Open screenshot tool (clipboard)"
- onPressed: {
- root.freeze = false;
- root.closing = false;
- root.clipboardOnly = true;
- root.activeAsync = true;
- }
- }
-
- CustomShortcut {
- name: "screenshotFreezeClip"
- description: "Open screenshot tool (freeze mode, clipboard)"
- onPressed: {
- root.freeze = true;
- root.closing = false;
- root.clipboardOnly = true;
- root.activeAsync = true;
- }
- }
-}
diff --git a/modules/background/Background.qml b/modules/background/Background.qml
index c1f149a..44d3491 100644
--- a/modules/background/Background.qml
+++ b/modules/background/Background.qml
@@ -51,103 +51,6 @@ Loader {
wallpaper: wallpaper
}
}
-
- Loader {
- id: clockLoader
- active: Config.background.desktopClock.enabled
-
- anchors.margins: Appearance.padding.large * 2
- anchors.leftMargin: Appearance.padding.large * 2 + Config.bar.sizes.innerWidth + Math.max(Appearance.padding.smaller, Config.border.thickness)
-
- state: Config.background.desktopClock.position
- states: [
- State {
- name: "top-left"
- AnchorChanges {
- target: clockLoader
- anchors.top: parent.top
- anchors.left: parent.left
- }
- },
- State {
- name: "top-center"
- AnchorChanges {
- target: clockLoader
- anchors.top: parent.top
- anchors.horizontalCenter: parent.horizontalCenter
- }
- },
- State {
- name: "top-right"
- AnchorChanges {
- target: clockLoader
- anchors.top: parent.top
- anchors.right: parent.right
- }
- },
- State {
- name: "middle-left"
- AnchorChanges {
- target: clockLoader
- anchors.verticalCenter: parent.verticalCenter
- anchors.left: parent.left
- }
- },
- State {
- name: "middle-center"
- AnchorChanges {
- target: clockLoader
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
- }
- },
- State {
- name: "middle-right"
- AnchorChanges {
- target: clockLoader
- anchors.verticalCenter: parent.verticalCenter
- anchors.right: parent.right
- }
- },
- State {
- name: "bottom-left"
- AnchorChanges {
- target: clockLoader
- anchors.bottom: parent.bottom
- anchors.left: parent.left
- }
- },
- State {
- name: "bottom-center"
- AnchorChanges {
- target: clockLoader
- anchors.bottom: parent.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- }
- },
- State {
- name: "bottom-right"
- AnchorChanges {
- target: clockLoader
- anchors.bottom: parent.bottom
- anchors.right: parent.right
- }
- }
- ]
-
- transitions: Transition {
- AnchorAnimation {
- duration: Appearance.anim.durations.expressiveDefaultSpatial
- easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
- }
- }
-
- sourceComponent: DesktopClock {
- wallpaper: behindClock
- absX: clockLoader.x
- absY: clockLoader.y
- }
- }
}
}
}
diff --git a/modules/background/Wallpaper.qml b/modules/background/Wallpaper.qml
index 39a48fc..0929895 100644
--- a/modules/background/Wallpaper.qml
+++ b/modules/background/Wallpaper.qml
@@ -11,7 +11,7 @@ import QtQuick
Item {
id: root
- property string source: Wallpapers.current
+ property string source: Paths.wallpaper
property Image current: one
onSourceChanged: {
@@ -56,42 +56,6 @@ Item {
font.pointSize: Appearance.font.size.extraLarge * 2
font.bold: true
}
-
- StyledRect {
- implicitWidth: selectWallText.implicitWidth + Appearance.padding.large * 2
- implicitHeight: selectWallText.implicitHeight + Appearance.padding.small * 2
-
- radius: Appearance.rounding.full
- color: Colours.palette.m3primary
-
- FileDialog {
- id: dialog
-
- title: qsTr("Select a wallpaper")
- filterLabel: qsTr("Image files")
- filters: Images.validImageExtensions
- onAccepted: path => Wallpapers.setWallpaper(path)
- }
-
- StateLayer {
- radius: parent.radius
- color: Colours.palette.m3onPrimary
-
- function onClicked(): void {
- dialog.open();
- }
- }
-
- StyledText {
- id: selectWallText
-
- anchors.centerIn: parent
-
- text: qsTr("Set it now!")
- color: Colours.palette.m3onPrimary
- font.pointSize: Appearance.font.size.large
- }
- }
}
}
}
@@ -118,7 +82,7 @@ Item {
anchors.fill: parent
opacity: 0
- scale: Wallpapers.showPreview ? 1 : 0.8
+ scale: 0.8
onStatusChanged: {
if (status === Image.Ready)
diff --git a/modules/controlcenter/PaneRegistry.qml b/modules/controlcenter/PaneRegistry.qml
index ca48551..20719ca 100644
--- a/modules/controlcenter/PaneRegistry.qml
+++ b/modules/controlcenter/PaneRegistry.qml
@@ -24,30 +24,6 @@ QtObject {
readonly property string icon: "volume_up"
readonly property string component: "audio/AudioPane.qml"
},
- QtObject {
- readonly property string id: "appearance"
- readonly property string label: "appearance"
- readonly property string icon: "palette"
- readonly property string component: "appearance/AppearancePane.qml"
- },
- QtObject {
- readonly property string id: "taskbar"
- readonly property string label: "taskbar"
- readonly property string icon: "task_alt"
- readonly property string component: "taskbar/TaskbarPane.qml"
- },
- QtObject {
- readonly property string id: "launcher"
- readonly property string label: "launcher"
- readonly property string icon: "apps"
- readonly property string component: "launcher/LauncherPane.qml"
- },
- QtObject {
- readonly property string id: "dashboard"
- readonly property string label: "dashboard"
- readonly property string icon: "dashboard"
- readonly property string component: "dashboard/DashboardPane.qml"
- }
]
readonly property int count: panes.length
diff --git a/modules/controlcenter/Panes.qml b/modules/controlcenter/Panes.qml
index ab2f808..4794c03 100644
--- a/modules/controlcenter/Panes.qml
+++ b/modules/controlcenter/Panes.qml
@@ -3,10 +3,6 @@ pragma ComponentBehavior: Bound
import "bluetooth"
import "network"
import "audio"
-import "appearance"
-import "taskbar"
-import "launcher"
-import "dashboard"
import qs.components
import qs.services
import qs.config
diff --git a/modules/controlcenter/Session.qml b/modules/controlcenter/Session.qml
index 8a8545f..b7dd888 100644
--- a/modules/controlcenter/Session.qml
+++ b/modules/controlcenter/Session.qml
@@ -14,8 +14,6 @@ QtObject {
readonly property BluetoothState bt: BluetoothState {}
readonly property NetworkState network: NetworkState {}
readonly property EthernetState ethernet: EthernetState {}
- readonly property LauncherState launcher: LauncherState {}
- readonly property VpnState vpn: VpnState {}
onActiveChanged: activeIndex = Math.max(0, panes.indexOf(active))
onActiveIndexChanged: if (panes[activeIndex])
diff --git a/modules/controlcenter/appearance/AppearancePane.qml b/modules/controlcenter/appearance/AppearancePane.qml
deleted file mode 100644
index b4a3367..0000000
--- a/modules/controlcenter/appearance/AppearancePane.qml
+++ /dev/null
@@ -1,263 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../components"
-import "./sections"
-import "../../launcher/services"
-import qs.components
-import qs.components.controls
-import qs.components.effects
-import qs.components.containers
-import qs.components.images
-import qs.services
-import qs.config
-import qs.utils
-import Caelestia.Models
-import Quickshell
-import Quickshell.Widgets
-import QtQuick
-import QtQuick.Layouts
-
-Item {
- id: root
-
- required property Session session
-
- property real animDurationsScale: Config.appearance.anim.durations.scale ?? 1
- property string fontFamilyMaterial: Config.appearance.font.family.material ?? "Material Symbols Rounded"
- property string fontFamilyMono: Config.appearance.font.family.mono ?? "CaskaydiaCove NF"
- property string fontFamilySans: Config.appearance.font.family.sans ?? "Rubik"
- property real fontSizeScale: Config.appearance.font.size.scale ?? 1
- property real paddingScale: Config.appearance.padding.scale ?? 1
- property real roundingScale: Config.appearance.rounding.scale ?? 1
- property real spacingScale: Config.appearance.spacing.scale ?? 1
- property bool transparencyEnabled: Config.appearance.transparency.enabled ?? false
- property real transparencyBase: Config.appearance.transparency.base ?? 0.85
- property real transparencyLayers: Config.appearance.transparency.layers ?? 0.4
- property real borderRounding: Config.border.rounding ?? 1
- property real borderThickness: Config.border.thickness ?? 1
-
- property bool desktopClockEnabled: Config.background.desktopClock.enabled ?? false
- property real desktopClockScale: Config.background.desktopClock.scale ?? 1
- property string desktopClockPosition: Config.background.desktopClock.position ?? "bottom-right"
- property bool desktopClockShadowEnabled: Config.background.desktopClock.shadow.enabled ?? true
- property real desktopClockShadowOpacity: Config.background.desktopClock.shadow.opacity ?? 0.7
- property real desktopClockShadowBlur: Config.background.desktopClock.shadow.blur ?? 0.4
- property bool desktopClockBackgroundEnabled: Config.background.desktopClock.background.enabled ?? false
- property real desktopClockBackgroundOpacity: Config.background.desktopClock.background.opacity ?? 0.7
- property bool desktopClockBackgroundBlur: Config.background.desktopClock.background.blur ?? false
- property bool desktopClockInvertColors: Config.background.desktopClock.invertColors ?? false
- property bool backgroundEnabled: Config.background.enabled ?? true
- property bool wallpaperEnabled: Config.background.wallpaperEnabled ?? true
- property bool visualiserEnabled: Config.background.visualiser.enabled ?? false
- property bool visualiserAutoHide: Config.background.visualiser.autoHide ?? true
- property real visualiserRounding: Config.background.visualiser.rounding ?? 1
- property real visualiserSpacing: Config.background.visualiser.spacing ?? 1
-
- anchors.fill: parent
-
- function saveConfig() {
- Config.appearance.anim.durations.scale = root.animDurationsScale;
-
- Config.appearance.font.family.material = root.fontFamilyMaterial;
- Config.appearance.font.family.mono = root.fontFamilyMono;
- Config.appearance.font.family.sans = root.fontFamilySans;
- Config.appearance.font.size.scale = root.fontSizeScale;
-
- Config.appearance.padding.scale = root.paddingScale;
- Config.appearance.rounding.scale = root.roundingScale;
- Config.appearance.spacing.scale = root.spacingScale;
-
- Config.appearance.transparency.enabled = root.transparencyEnabled;
- Config.appearance.transparency.base = root.transparencyBase;
- Config.appearance.transparency.layers = root.transparencyLayers;
-
- Config.background.desktopClock.enabled = root.desktopClockEnabled;
- Config.background.enabled = root.backgroundEnabled;
- Config.background.desktopClock.scale = root.desktopClockScale;
- Config.background.desktopClock.position = root.desktopClockPosition;
- Config.background.desktopClock.shadow.enabled = root.desktopClockShadowEnabled;
- Config.background.desktopClock.shadow.opacity = root.desktopClockShadowOpacity;
- Config.background.desktopClock.shadow.blur = root.desktopClockShadowBlur;
- Config.background.desktopClock.background.enabled = root.desktopClockBackgroundEnabled;
- Config.background.desktopClock.background.opacity = root.desktopClockBackgroundOpacity;
- Config.background.desktopClock.background.blur = root.desktopClockBackgroundBlur;
- Config.background.desktopClock.invertColors = root.desktopClockInvertColors;
-
- Config.background.wallpaperEnabled = root.wallpaperEnabled;
-
- Config.background.visualiser.enabled = root.visualiserEnabled;
- Config.background.visualiser.autoHide = root.visualiserAutoHide;
- Config.background.visualiser.rounding = root.visualiserRounding;
- Config.background.visualiser.spacing = root.visualiserSpacing;
-
- Config.border.rounding = root.borderRounding;
- Config.border.thickness = root.borderThickness;
-
- Config.save();
- }
-
- Component {
- id: appearanceRightContentComponent
-
- Item {
- id: rightAppearanceFlickable
-
- ColumnLayout {
- id: contentLayout
-
- anchors.fill: parent
- spacing: 0
-
- StyledText {
- Layout.alignment: Qt.AlignHCenter
- Layout.bottomMargin: Appearance.spacing.normal
- text: qsTr("Wallpaper")
- font.pointSize: Appearance.font.size.extraLarge
- font.weight: 600
- }
-
- Loader {
- id: wallpaperLoader
-
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.bottomMargin: -Appearance.padding.large * 2
-
- active: {
- const isActive = root.session.activeIndex === 3;
- const isAdjacent = Math.abs(root.session.activeIndex - 3) === 1;
- const splitLayout = root.children[0];
- const loader = splitLayout && splitLayout.rightLoader ? splitLayout.rightLoader : null;
- const shouldActivate = loader && loader.item !== null && (isActive || isAdjacent);
- return shouldActivate;
- }
-
- onStatusChanged: {
- if (status === Loader.Error) {
- console.error("[AppearancePane] Wallpaper loader error!");
- }
- }
-
- sourceComponent: WallpaperGrid {
- session: root.session
- }
- }
- }
- }
- }
-
- SplitPaneLayout {
- anchors.fill: parent
-
- leftContent: Component {
-
- StyledFlickable {
- id: sidebarFlickable
- readonly property var rootPane: root
- flickableDirection: Flickable.VerticalFlick
- contentHeight: sidebarLayout.height
-
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: sidebarFlickable
- }
-
- ColumnLayout {
- id: sidebarLayout
- anchors.left: parent.left
- anchors.right: parent.right
- spacing: Appearance.spacing.small
-
- readonly property var rootPane: sidebarFlickable.rootPane
-
- readonly property bool allSectionsExpanded:
- themeModeSection.expanded &&
- colorVariantSection.expanded &&
- colorSchemeSection.expanded &&
- animationsSection.expanded &&
- fontsSection.expanded &&
- scalesSection.expanded &&
- transparencySection.expanded &&
- borderSection.expanded &&
- backgroundSection.expanded
-
- RowLayout {
- spacing: Appearance.spacing.smaller
-
- StyledText {
- text: qsTr("Appearance")
- font.pointSize: Appearance.font.size.large
- font.weight: 500
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- IconButton {
- icon: sidebarLayout.allSectionsExpanded ? "unfold_less" : "unfold_more"
- type: IconButton.Text
- label.animate: true
- onClicked: {
- const shouldExpand = !sidebarLayout.allSectionsExpanded;
- themeModeSection.expanded = shouldExpand;
- colorVariantSection.expanded = shouldExpand;
- colorSchemeSection.expanded = shouldExpand;
- animationsSection.expanded = shouldExpand;
- fontsSection.expanded = shouldExpand;
- scalesSection.expanded = shouldExpand;
- transparencySection.expanded = shouldExpand;
- borderSection.expanded = shouldExpand;
- backgroundSection.expanded = shouldExpand;
- }
- }
- }
-
- ThemeModeSection {
- id: themeModeSection
- }
-
- ColorVariantSection {
- id: colorVariantSection
- }
-
- ColorSchemeSection {
- id: colorSchemeSection
- }
-
- AnimationsSection {
- id: animationsSection
- rootPane: sidebarFlickable.rootPane
- }
-
- FontsSection {
- id: fontsSection
- rootPane: sidebarFlickable.rootPane
- }
-
- ScalesSection {
- id: scalesSection
- rootPane: sidebarFlickable.rootPane
- }
-
- TransparencySection {
- id: transparencySection
- rootPane: sidebarFlickable.rootPane
- }
-
- BorderSection {
- id: borderSection
- rootPane: sidebarFlickable.rootPane
- }
-
- BackgroundSection {
- id: backgroundSection
- rootPane: sidebarFlickable.rootPane
- }
- }
- }
- }
-
- rightContent: appearanceRightContentComponent
- }
-}
diff --git a/modules/controlcenter/appearance/sections/AnimationsSection.qml b/modules/controlcenter/appearance/sections/AnimationsSection.qml
deleted file mode 100644
index 0cba5ce..0000000
--- a/modules/controlcenter/appearance/sections/AnimationsSection.qml
+++ /dev/null
@@ -1,44 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../../components"
-import qs.components
-import qs.components.controls
-import qs.components.containers
-import qs.services
-import qs.config
-import QtQuick
-import QtQuick.Layouts
-
-CollapsibleSection {
- id: root
-
- required property var rootPane
-
- title: qsTr("Animations")
- showBackground: true
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Animation duration scale")
- value: rootPane.animDurationsScale
- from: 0.1
- to: 5.0
- decimals: 1
- suffix: "×"
- validator: DoubleValidator {
- bottom: 0.1
- top: 5.0
- }
-
- onValueModified: newValue => {
- rootPane.animDurationsScale = newValue;
- rootPane.saveConfig();
- }
- }
- }
-}
diff --git a/modules/controlcenter/appearance/sections/BackgroundSection.qml b/modules/controlcenter/appearance/sections/BackgroundSection.qml
deleted file mode 100644
index 9d6bc6e..0000000
--- a/modules/controlcenter/appearance/sections/BackgroundSection.qml
+++ /dev/null
@@ -1,345 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../../components"
-import qs.components
-import qs.components.controls
-import qs.components.containers
-import qs.services
-import qs.config
-import QtQuick
-import QtQuick.Layouts
-
-CollapsibleSection {
- id: root
-
- required property var rootPane
-
- title: qsTr("Background")
- showBackground: true
-
- SwitchRow {
- label: qsTr("Background enabled")
- checked: rootPane.backgroundEnabled
- onToggled: checked => {
- rootPane.backgroundEnabled = checked;
- rootPane.saveConfig();
- }
- }
-
- SwitchRow {
- label: qsTr("Wallpaper enabled")
- checked: rootPane.wallpaperEnabled
- onToggled: checked => {
- rootPane.wallpaperEnabled = checked;
- rootPane.saveConfig();
- }
- }
-
- StyledText {
- Layout.topMargin: Appearance.spacing.normal
- text: qsTr("Desktop Clock")
- font.pointSize: Appearance.font.size.larger
- font.weight: 500
- }
-
- SwitchRow {
- label: qsTr("Desktop Clock enabled")
- checked: rootPane.desktopClockEnabled
- onToggled: checked => {
- rootPane.desktopClockEnabled = checked;
- rootPane.saveConfig();
- }
- }
-
- SectionContainer {
- id: posContainer
-
- contentSpacing: Appearance.spacing.small
- z: 1
-
- readonly property var pos: (rootPane.desktopClockPosition || "top-left").split('-')
- readonly property string currentV: pos[0]
- readonly property string currentH: pos[1]
-
- function updateClockPos(v, h) {
- rootPane.desktopClockPosition = v + "-" + h;
- rootPane.saveConfig();
- }
-
- StyledText {
- text: qsTr("Positioning")
- font.pointSize: Appearance.font.size.larger
- font.weight: 500
- }
-
- SplitButtonRow {
- label: qsTr("Vertical Position")
- enabled: rootPane.desktopClockEnabled
-
- menuItems: [
- MenuItem {
- text: qsTr("Top")
- icon: "vertical_align_top"
- property string val: "top"
- },
- MenuItem {
- text: qsTr("Middle")
- icon: "vertical_align_center"
- property string val: "middle"
- },
- MenuItem {
- text: qsTr("Bottom")
- icon: "vertical_align_bottom"
- property string val: "bottom"
- }
- ]
-
- Component.onCompleted: {
- for (let i = 0; i < menuItems.length; i++) {
- if (menuItems[i].val === posContainer.currentV)
- active = menuItems[i];
- }
- }
-
- // The signal from SplitButtonRow
- onSelected: item => posContainer.updateClockPos(item.val, posContainer.currentH)
- }
-
- SplitButtonRow {
- label: qsTr("Horizontal Position")
- enabled: rootPane.desktopClockEnabled
- expandedZ: 99
-
- menuItems: [
- MenuItem {
- text: qsTr("Left")
- icon: "align_horizontal_left"
- property string val: "left"
- },
- MenuItem {
- text: qsTr("Center")
- icon: "align_horizontal_center"
- property string val: "center"
- },
- MenuItem {
- text: qsTr("Right")
- icon: "align_horizontal_right"
- property string val: "right"
- }
- ]
-
- Component.onCompleted: {
- for (let i = 0; i < menuItems.length; i++) {
- if (menuItems[i].val === posContainer.currentH)
- active = menuItems[i];
- }
- }
-
- onSelected: item => posContainer.updateClockPos(posContainer.currentV, item.val)
- }
- }
-
- SwitchRow {
- label: qsTr("Invert colors")
- checked: rootPane.desktopClockInvertColors
- onToggled: checked => {
- rootPane.desktopClockInvertColors = checked;
- rootPane.saveConfig();
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Shadow")
- font.pointSize: Appearance.font.size.larger
- font.weight: 500
- }
-
- SwitchRow {
- label: qsTr("Enabled")
- checked: rootPane.desktopClockShadowEnabled
- onToggled: checked => {
- rootPane.desktopClockShadowEnabled = checked;
- rootPane.saveConfig();
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Opacity")
- value: rootPane.desktopClockShadowOpacity * 100
- from: 0
- to: 100
- suffix: "%"
- validator: IntValidator {
- bottom: 0
- top: 100
- }
- formatValueFunction: val => Math.round(val).toString()
- parseValueFunction: text => parseInt(text)
-
- onValueModified: newValue => {
- rootPane.desktopClockShadowOpacity = newValue / 100;
- rootPane.saveConfig();
- }
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Blur")
- value: rootPane.desktopClockShadowBlur * 100
- from: 0
- to: 100
- suffix: "%"
- validator: IntValidator {
- bottom: 0
- top: 100
- }
- formatValueFunction: val => Math.round(val).toString()
- parseValueFunction: text => parseInt(text)
-
- onValueModified: newValue => {
- rootPane.desktopClockShadowBlur = newValue / 100;
- rootPane.saveConfig();
- }
- }
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Background")
- font.pointSize: Appearance.font.size.larger
- font.weight: 500
- }
-
- SwitchRow {
- label: qsTr("Enabled")
- checked: rootPane.desktopClockBackgroundEnabled
- onToggled: checked => {
- rootPane.desktopClockBackgroundEnabled = checked;
- rootPane.saveConfig();
- }
- }
-
- SwitchRow {
- label: qsTr("Blur enabled")
- checked: rootPane.desktopClockBackgroundBlur
- onToggled: checked => {
- rootPane.desktopClockBackgroundBlur = checked;
- rootPane.saveConfig();
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Opacity")
- value: rootPane.desktopClockBackgroundOpacity * 100
- from: 0
- to: 100
- suffix: "%"
- validator: IntValidator {
- bottom: 0
- top: 100
- }
- formatValueFunction: val => Math.round(val).toString()
- parseValueFunction: text => parseInt(text)
-
- onValueModified: newValue => {
- rootPane.desktopClockBackgroundOpacity = newValue / 100;
- rootPane.saveConfig();
- }
- }
- }
- }
-
- StyledText {
- Layout.topMargin: Appearance.spacing.normal
- text: qsTr("Visualiser")
- font.pointSize: Appearance.font.size.larger
- font.weight: 500
- }
-
- SwitchRow {
- label: qsTr("Visualiser enabled")
- checked: rootPane.visualiserEnabled
- onToggled: checked => {
- rootPane.visualiserEnabled = checked;
- rootPane.saveConfig();
- }
- }
-
- SwitchRow {
- label: qsTr("Visualiser auto hide")
- checked: rootPane.visualiserAutoHide
- onToggled: checked => {
- rootPane.visualiserAutoHide = checked;
- rootPane.saveConfig();
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Visualiser rounding")
- value: rootPane.visualiserRounding
- from: 0
- to: 10
- stepSize: 1
- validator: IntValidator {
- bottom: 0
- top: 10
- }
- formatValueFunction: val => Math.round(val).toString()
- parseValueFunction: text => parseInt(text)
-
- onValueModified: newValue => {
- rootPane.visualiserRounding = Math.round(newValue);
- rootPane.saveConfig();
- }
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Visualiser spacing")
- value: rootPane.visualiserSpacing
- from: 0
- to: 2
- validator: DoubleValidator {
- bottom: 0
- top: 2
- }
-
- onValueModified: newValue => {
- rootPane.visualiserSpacing = newValue;
- rootPane.saveConfig();
- }
- }
- }
-}
diff --git a/modules/controlcenter/appearance/sections/BorderSection.qml b/modules/controlcenter/appearance/sections/BorderSection.qml
deleted file mode 100644
index 9532d70..0000000
--- a/modules/controlcenter/appearance/sections/BorderSection.qml
+++ /dev/null
@@ -1,68 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../../components"
-import qs.components
-import qs.components.controls
-import qs.components.containers
-import qs.services
-import qs.config
-import QtQuick
-import QtQuick.Layouts
-
-CollapsibleSection {
- id: root
-
- required property var rootPane
-
- title: qsTr("Border")
- showBackground: true
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Border rounding")
- value: rootPane.borderRounding
- from: 0.1
- to: 100
- decimals: 1
- suffix: "px"
- validator: DoubleValidator {
- bottom: 0.1
- top: 100
- }
-
- onValueModified: newValue => {
- rootPane.borderRounding = newValue;
- rootPane.saveConfig();
- }
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Border thickness")
- value: rootPane.borderThickness
- from: 0.1
- to: 100
- decimals: 1
- suffix: "px"
- validator: DoubleValidator {
- bottom: 0.1
- top: 100
- }
-
- onValueModified: newValue => {
- rootPane.borderThickness = newValue;
- rootPane.saveConfig();
- }
- }
- }
-}
diff --git a/modules/controlcenter/appearance/sections/ColorSchemeSection.qml b/modules/controlcenter/appearance/sections/ColorSchemeSection.qml
deleted file mode 100644
index 95cb4b7..0000000
--- a/modules/controlcenter/appearance/sections/ColorSchemeSection.qml
+++ /dev/null
@@ -1,145 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../../../launcher/services"
-import qs.components
-import qs.components.controls
-import qs.components.containers
-import qs.services
-import qs.config
-import Quickshell
-import QtQuick
-import QtQuick.Layouts
-
-CollapsibleSection {
- title: qsTr("Color scheme")
- description: qsTr("Available color schemes")
- showBackground: true
-
- ColumnLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small / 2
-
- Repeater {
- model: Schemes.list
-
- delegate: StyledRect {
- required property var modelData
-
- Layout.fillWidth: true
-
- readonly property string schemeKey: `${modelData.name} ${modelData.flavour}`
- readonly property bool isCurrent: schemeKey === Schemes.currentScheme
-
- color: Qt.alpha(Colours.tPalette.m3surfaceContainer, isCurrent ? Colours.tPalette.m3surfaceContainer.a : 0)
- radius: Appearance.rounding.normal
- border.width: isCurrent ? 1 : 0
- border.color: Colours.palette.m3primary
-
- StateLayer {
- function onClicked(): void {
- const name = modelData.name;
- const flavour = modelData.flavour;
- const schemeKey = `${name} ${flavour}`;
-
- Schemes.currentScheme = schemeKey;
- Quickshell.execDetached(["caelestia", "scheme", "set", "-n", name, "-f", flavour]);
-
- Qt.callLater(() => {
- reloadTimer.restart();
- });
- }
- }
-
- Timer {
- id: reloadTimer
- interval: 300
- onTriggered: {
- Schemes.reload();
- }
- }
-
- RowLayout {
- id: schemeRow
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.normal
-
- spacing: Appearance.spacing.normal
-
- StyledRect {
- id: preview
-
- Layout.alignment: Qt.AlignVCenter
-
- border.width: 1
- border.color: Qt.alpha(`#${modelData.colours?.outline}`, 0.5)
-
- color: `#${modelData.colours?.surface}`
- radius: Appearance.rounding.full
- implicitWidth: iconPlaceholder.implicitWidth
- implicitHeight: iconPlaceholder.implicitWidth
-
- MaterialIcon {
- id: iconPlaceholder
- visible: false
- text: "circle"
- font.pointSize: Appearance.font.size.large
- }
-
- Item {
- anchors.top: parent.top
- anchors.bottom: parent.bottom
- anchors.right: parent.right
-
- implicitWidth: parent.implicitWidth / 2
- clip: true
-
- StyledRect {
- anchors.top: parent.top
- anchors.bottom: parent.bottom
- anchors.right: parent.right
-
- implicitWidth: preview.implicitWidth
- color: `#${modelData.colours?.primary}`
- radius: Appearance.rounding.full
- }
- }
- }
-
- Column {
- Layout.fillWidth: true
- spacing: 0
-
- StyledText {
- text: modelData.flavour ?? ""
- font.pointSize: Appearance.font.size.normal
- }
-
- StyledText {
- text: modelData.name ?? ""
- font.pointSize: Appearance.font.size.small
- color: Colours.palette.m3outline
-
- elide: Text.ElideRight
- anchors.left: parent.left
- anchors.right: parent.right
- }
- }
-
- Loader {
- active: isCurrent
-
- sourceComponent: MaterialIcon {
- text: "check"
- color: Colours.palette.m3onSurfaceVariant
- font.pointSize: Appearance.font.size.large
- }
- }
- }
-
- implicitHeight: schemeRow.implicitHeight + Appearance.padding.normal * 2
- }
- }
- }
-}
diff --git a/modules/controlcenter/appearance/sections/ColorVariantSection.qml b/modules/controlcenter/appearance/sections/ColorVariantSection.qml
deleted file mode 100644
index 3aa17dd..0000000
--- a/modules/controlcenter/appearance/sections/ColorVariantSection.qml
+++ /dev/null
@@ -1,91 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../../../launcher/services"
-import qs.components
-import qs.components.controls
-import qs.components.containers
-import qs.services
-import qs.config
-import Quickshell
-import QtQuick
-import QtQuick.Layouts
-
-CollapsibleSection {
- title: qsTr("Color variant")
- description: qsTr("Material theme variant")
- showBackground: true
-
- ColumnLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small / 2
-
- Repeater {
- model: M3Variants.list
-
- delegate: StyledRect {
- required property var modelData
-
- Layout.fillWidth: true
-
- color: Qt.alpha(Colours.tPalette.m3surfaceContainer, modelData.variant === Schemes.currentVariant ? Colours.tPalette.m3surfaceContainer.a : 0)
- radius: Appearance.rounding.normal
- border.width: modelData.variant === Schemes.currentVariant ? 1 : 0
- border.color: Colours.palette.m3primary
-
- StateLayer {
- function onClicked(): void {
- const variant = modelData.variant;
-
- Schemes.currentVariant = variant;
- Quickshell.execDetached(["caelestia", "scheme", "set", "-v", variant]);
-
- Qt.callLater(() => {
- reloadTimer.restart();
- });
- }
- }
-
- Timer {
- id: reloadTimer
- interval: 300
- onTriggered: {
- Schemes.reload();
- }
- }
-
- RowLayout {
- id: variantRow
-
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.normal
-
- spacing: Appearance.spacing.normal
-
- MaterialIcon {
- text: modelData.icon
- font.pointSize: Appearance.font.size.large
- fill: modelData.variant === Schemes.currentVariant ? 1 : 0
- }
-
- StyledText {
- Layout.fillWidth: true
- text: modelData.name
- font.weight: modelData.variant === Schemes.currentVariant ? 500 : 400
- }
-
- MaterialIcon {
- visible: modelData.variant === Schemes.currentVariant
- text: "check"
- color: Colours.palette.m3primary
- font.pointSize: Appearance.font.size.large
- }
- }
-
- implicitHeight: variantRow.implicitHeight + Appearance.padding.normal * 2
- }
- }
- }
-}
diff --git a/modules/controlcenter/appearance/sections/FontsSection.qml b/modules/controlcenter/appearance/sections/FontsSection.qml
deleted file mode 100644
index 3988863..0000000
--- a/modules/controlcenter/appearance/sections/FontsSection.qml
+++ /dev/null
@@ -1,282 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../../components"
-import qs.components
-import qs.components.controls
-import qs.components.containers
-import qs.services
-import qs.config
-import QtQuick
-import QtQuick.Layouts
-
-CollapsibleSection {
- id: root
-
- required property var rootPane
-
- title: qsTr("Fonts")
- showBackground: true
-
- CollapsibleSection {
- id: materialFontSection
- title: qsTr("Material font family")
- expanded: true
- showBackground: true
- nested: true
-
- Loader {
- id: materialFontLoader
- Layout.fillWidth: true
- Layout.preferredHeight: item ? Math.min(item.contentHeight, 300) : 0
- active: materialFontSection.expanded
-
- sourceComponent: StyledListView {
- id: materialFontList
- property alias contentHeight: materialFontList.contentHeight
-
- clip: true
- spacing: Appearance.spacing.small / 2
- model: Qt.fontFamilies()
-
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: materialFontList
- }
-
- delegate: StyledRect {
- required property string modelData
- required property int index
-
- width: ListView.view.width
-
- readonly property bool isCurrent: modelData === rootPane.fontFamilyMaterial
- color: Qt.alpha(Colours.tPalette.m3surfaceContainer, isCurrent ? Colours.tPalette.m3surfaceContainer.a : 0)
- radius: Appearance.rounding.normal
- border.width: isCurrent ? 1 : 0
- border.color: Colours.palette.m3primary
-
- StateLayer {
- function onClicked(): void {
- rootPane.fontFamilyMaterial = modelData;
- rootPane.saveConfig();
- }
- }
-
- RowLayout {
- id: fontFamilyMaterialRow
-
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.normal
-
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: modelData
- font.pointSize: Appearance.font.size.normal
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- Loader {
- active: isCurrent
-
- sourceComponent: MaterialIcon {
- text: "check"
- color: Colours.palette.m3onSurfaceVariant
- font.pointSize: Appearance.font.size.large
- }
- }
- }
-
- implicitHeight: fontFamilyMaterialRow.implicitHeight + Appearance.padding.normal * 2
- }
- }
- }
- }
-
- CollapsibleSection {
- id: monoFontSection
- title: qsTr("Monospace font family")
- expanded: false
- showBackground: true
- nested: true
-
- Loader {
- Layout.fillWidth: true
- Layout.preferredHeight: item ? Math.min(item.contentHeight, 300) : 0
- active: monoFontSection.expanded
-
- sourceComponent: StyledListView {
- id: monoFontList
- property alias contentHeight: monoFontList.contentHeight
-
- clip: true
- spacing: Appearance.spacing.small / 2
- model: Qt.fontFamilies()
-
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: monoFontList
- }
-
- delegate: StyledRect {
- required property string modelData
- required property int index
-
- width: ListView.view.width
-
- readonly property bool isCurrent: modelData === rootPane.fontFamilyMono
- color: Qt.alpha(Colours.tPalette.m3surfaceContainer, isCurrent ? Colours.tPalette.m3surfaceContainer.a : 0)
- radius: Appearance.rounding.normal
- border.width: isCurrent ? 1 : 0
- border.color: Colours.palette.m3primary
-
- StateLayer {
- function onClicked(): void {
- rootPane.fontFamilyMono = modelData;
- rootPane.saveConfig();
- }
- }
-
- RowLayout {
- id: fontFamilyMonoRow
-
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.normal
-
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: modelData
- font.pointSize: Appearance.font.size.normal
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- Loader {
- active: isCurrent
-
- sourceComponent: MaterialIcon {
- text: "check"
- color: Colours.palette.m3onSurfaceVariant
- font.pointSize: Appearance.font.size.large
- }
- }
- }
-
- implicitHeight: fontFamilyMonoRow.implicitHeight + Appearance.padding.normal * 2
- }
- }
- }
- }
-
- CollapsibleSection {
- id: sansFontSection
- title: qsTr("Sans-serif font family")
- expanded: false
- showBackground: true
- nested: true
-
- Loader {
- Layout.fillWidth: true
- Layout.preferredHeight: item ? Math.min(item.contentHeight, 300) : 0
- active: sansFontSection.expanded
-
- sourceComponent: StyledListView {
- id: sansFontList
- property alias contentHeight: sansFontList.contentHeight
-
- clip: true
- spacing: Appearance.spacing.small / 2
- model: Qt.fontFamilies()
-
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: sansFontList
- }
-
- delegate: StyledRect {
- required property string modelData
- required property int index
-
- width: ListView.view.width
-
- readonly property bool isCurrent: modelData === rootPane.fontFamilySans
- color: Qt.alpha(Colours.tPalette.m3surfaceContainer, isCurrent ? Colours.tPalette.m3surfaceContainer.a : 0)
- radius: Appearance.rounding.normal
- border.width: isCurrent ? 1 : 0
- border.color: Colours.palette.m3primary
-
- StateLayer {
- function onClicked(): void {
- rootPane.fontFamilySans = modelData;
- rootPane.saveConfig();
- }
- }
-
- RowLayout {
- id: fontFamilySansRow
-
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.normal
-
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: modelData
- font.pointSize: Appearance.font.size.normal
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- Loader {
- active: isCurrent
-
- sourceComponent: MaterialIcon {
- text: "check"
- color: Colours.palette.m3onSurfaceVariant
- font.pointSize: Appearance.font.size.large
- }
- }
- }
-
- implicitHeight: fontFamilySansRow.implicitHeight + Appearance.padding.normal * 2
- }
- }
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Font size scale")
- value: rootPane.fontSizeScale
- from: 0.7
- to: 1.5
- decimals: 2
- suffix: "×"
- validator: DoubleValidator {
- bottom: 0.7
- top: 1.5
- }
-
- onValueModified: newValue => {
- rootPane.fontSizeScale = newValue;
- rootPane.saveConfig();
- }
- }
- }
-}
diff --git a/modules/controlcenter/appearance/sections/ScalesSection.qml b/modules/controlcenter/appearance/sections/ScalesSection.qml
deleted file mode 100644
index b0e6e38..0000000
--- a/modules/controlcenter/appearance/sections/ScalesSection.qml
+++ /dev/null
@@ -1,92 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../../components"
-import qs.components
-import qs.components.controls
-import qs.components.containers
-import qs.services
-import qs.config
-import QtQuick
-import QtQuick.Layouts
-
-CollapsibleSection {
- id: root
-
- required property var rootPane
-
- title: qsTr("Scales")
- showBackground: true
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Padding scale")
- value: rootPane.paddingScale
- from: 0.5
- to: 2.0
- decimals: 1
- suffix: "×"
- validator: DoubleValidator {
- bottom: 0.5
- top: 2.0
- }
-
- onValueModified: newValue => {
- rootPane.paddingScale = newValue;
- rootPane.saveConfig();
- }
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Rounding scale")
- value: rootPane.roundingScale
- from: 0.1
- to: 5.0
- decimals: 1
- suffix: "×"
- validator: DoubleValidator {
- bottom: 0.1
- top: 5.0
- }
-
- onValueModified: newValue => {
- rootPane.roundingScale = newValue;
- rootPane.saveConfig();
- }
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Spacing scale")
- value: rootPane.spacingScale
- from: 0.1
- to: 2.0
- decimals: 1
- suffix: "×"
- validator: DoubleValidator {
- bottom: 0.1
- top: 2.0
- }
-
- onValueModified: newValue => {
- rootPane.spacingScale = newValue;
- rootPane.saveConfig();
- }
- }
- }
-}
diff --git a/modules/controlcenter/appearance/sections/ThemeModeSection.qml b/modules/controlcenter/appearance/sections/ThemeModeSection.qml
deleted file mode 100644
index 04eed91..0000000
--- a/modules/controlcenter/appearance/sections/ThemeModeSection.qml
+++ /dev/null
@@ -1,23 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import qs.components
-import qs.components.controls
-import qs.components.containers
-import qs.services
-import qs.config
-import QtQuick
-
-CollapsibleSection {
- title: qsTr("Theme mode")
- description: qsTr("Light or dark theme")
- showBackground: true
-
- SwitchRow {
- label: qsTr("Dark mode")
- checked: !Colours.currentLight
- onToggled: checked => {
- Colours.setMode(checked ? "dark" : "light");
- }
- }
-}
diff --git a/modules/controlcenter/appearance/sections/TransparencySection.qml b/modules/controlcenter/appearance/sections/TransparencySection.qml
deleted file mode 100644
index 9a48629..0000000
--- a/modules/controlcenter/appearance/sections/TransparencySection.qml
+++ /dev/null
@@ -1,79 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../../components"
-import qs.components
-import qs.components.controls
-import qs.components.containers
-import qs.services
-import qs.config
-import QtQuick
-import QtQuick.Layouts
-
-CollapsibleSection {
- id: root
-
- required property var rootPane
-
- title: qsTr("Transparency")
- showBackground: true
-
- SwitchRow {
- label: qsTr("Transparency enabled")
- checked: rootPane.transparencyEnabled
- onToggled: checked => {
- rootPane.transparencyEnabled = checked;
- rootPane.saveConfig();
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Transparency base")
- value: rootPane.transparencyBase * 100
- from: 0
- to: 100
- suffix: "%"
- validator: IntValidator {
- bottom: 0
- top: 100
- }
- formatValueFunction: val => Math.round(val).toString()
- parseValueFunction: text => parseInt(text)
-
- onValueModified: newValue => {
- rootPane.transparencyBase = newValue / 100;
- rootPane.saveConfig();
- }
- }
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.normal
-
- SliderInput {
- Layout.fillWidth: true
-
- label: qsTr("Transparency layers")
- value: rootPane.transparencyLayers * 100
- from: 0
- to: 100
- suffix: "%"
- validator: IntValidator {
- bottom: 0
- top: 100
- }
- formatValueFunction: val => Math.round(val).toString()
- parseValueFunction: text => parseInt(text)
-
- onValueModified: newValue => {
- rootPane.transparencyLayers = newValue / 100;
- rootPane.saveConfig();
- }
- }
- }
-}
diff --git a/modules/controlcenter/components/ConnectedButtonGroup.qml b/modules/controlcenter/components/ConnectedButtonGroup.qml
deleted file mode 100644
index ab707fb..0000000
--- a/modules/controlcenter/components/ConnectedButtonGroup.qml
+++ /dev/null
@@ -1,115 +0,0 @@
-import ".."
-import qs.components
-import qs.components.controls
-import qs.components.effects
-import qs.services
-import qs.config
-import QtQuick
-import QtQuick.Layouts
-
-StyledRect {
- id: root
-
- property var options: [] // Array of {label: string, propertyName: string, onToggled: function, state: bool?}
- property var rootItem: null // The root item that contains the properties we want to bind to
- property string title: "" // Optional title text
- property int rows: 1 // Number of rows
-
- Layout.fillWidth: true
- implicitHeight: layout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
- clip: true
-
- Behavior on implicitHeight {
- Anim {}
- }
-
- ColumnLayout {
- id: layout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- visible: root.title !== ""
- text: root.title
- font.pointSize: Appearance.font.size.normal
- }
-
- GridLayout {
- id: buttonGrid
- Layout.alignment: Qt.AlignHCenter
- rowSpacing: Appearance.spacing.small
- columnSpacing: Appearance.spacing.small
- rows: root.rows
- columns: Math.ceil(root.options.length / root.rows)
-
- Repeater {
- id: repeater
- model: root.options
-
- delegate: TextButton {
- id: button
- required property int index
- required property var modelData
-
- Layout.fillWidth: true
- text: modelData.label
-
- property bool _checked: false
-
- checked: _checked
- toggle: false
- type: TextButton.Tonal
-
- // Create binding in Component.onCompleted
- Component.onCompleted: {
- if (modelData.state !== undefined && modelData.state) {
- _checked = modelData.state;
- }
- else if (root.rootItem && modelData.propertyName) {
- const propName = modelData.propertyName;
- const rootItem = root.rootItem;
- _checked = Qt.binding(function () {
- return rootItem[propName] ?? false;
- });
- }
- }
-
- // Match utilities Toggles radius styling
- // Each button has full rounding (not connected) since they have spacing
- radius: stateLayer.pressed ? Appearance.rounding.small / 2 : internalChecked ? Appearance.rounding.small : Appearance.rounding.normal
-
- // Match utilities Toggles inactive color
- inactiveColour: Colours.layer(Colours.palette.m3surfaceContainerHighest, 2)
-
- // Adjust width similar to utilities toggles
- Layout.preferredWidth: implicitWidth + (stateLayer.pressed ? Appearance.padding.large : internalChecked ? Appearance.padding.smaller : 0)
-
- onClicked: {
- if (modelData.onToggled && root.rootItem && modelData.propertyName) {
- const currentValue = root.rootItem[modelData.propertyName] ?? false;
- modelData.onToggled(!currentValue);
- }
- }
-
- Behavior on Layout.preferredWidth {
- Anim {
- duration: Appearance.anim.durations.expressiveFastSpatial
- easing.bezierCurve: Appearance.anim.curves.expressiveFastSpatial
- }
- }
-
- Behavior on radius {
- Anim {
- duration: Appearance.anim.durations.expressiveFastSpatial
- easing.bezierCurve: Appearance.anim.curves.expressiveFastSpatial
- }
- }
- }
- }
- }
- }
-}
diff --git a/modules/controlcenter/launcher/LauncherPane.qml b/modules/controlcenter/launcher/LauncherPane.qml
deleted file mode 100644
index b236cf9..0000000
--- a/modules/controlcenter/launcher/LauncherPane.qml
+++ /dev/null
@@ -1,658 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../components"
-import "../../launcher/services"
-import qs.components
-import qs.components.controls
-import qs.components.effects
-import qs.components.containers
-import qs.services
-import qs.config
-import qs.utils
-import Caelestia
-import Quickshell
-import Quickshell.Widgets
-import QtQuick
-import QtQuick.Layouts
-import "../../../utils/scripts/fuzzysort.js" as Fuzzy
-
-Item {
- id: root
-
- required property Session session
-
- property var selectedApp: root.session.launcher.active
- property bool hideFromLauncherChecked: false
- property bool favouriteChecked: false
-
- anchors.fill: parent
-
- onSelectedAppChanged: {
- root.session.launcher.active = root.selectedApp;
- updateToggleState();
- }
-
- Connections {
- target: root.session.launcher
- function onActiveChanged() {
- root.selectedApp = root.session.launcher.active;
- updateToggleState();
- }
- }
-
- function updateToggleState() {
- if (!root.selectedApp) {
- root.hideFromLauncherChecked = false;
- root.favouriteChecked = false;
- return;
- }
-
- const appId = root.selectedApp.id || root.selectedApp.entry?.id;
-
- root.hideFromLauncherChecked = Config.launcher.hiddenApps && Config.launcher.hiddenApps.length > 0 && Strings.testRegexList(Config.launcher.hiddenApps, appId);
- root.favouriteChecked = Config.launcher.favouriteApps && Config.launcher.favouriteApps.length > 0 && Strings.testRegexList(Config.launcher.favouriteApps, appId);
- }
-
- function saveHiddenApps(isHidden) {
- if (!root.selectedApp) {
- return;
- }
-
- const appId = root.selectedApp.id || root.selectedApp.entry?.id;
-
- const hiddenApps = Config.launcher.hiddenApps ? [...Config.launcher.hiddenApps] : [];
-
- if (isHidden) {
- if (!hiddenApps.includes(appId)) {
- hiddenApps.push(appId);
- }
- } else {
- const index = hiddenApps.indexOf(appId);
- if (index !== -1) {
- hiddenApps.splice(index, 1);
- }
- }
-
- Config.launcher.hiddenApps = hiddenApps;
- Config.save();
- }
-
- AppDb {
- id: allAppsDb
-
- path: `${Paths.state}/apps.sqlite`
- favouriteApps: Config.launcher.favouriteApps
- entries: DesktopEntries.applications.values
- }
-
- property string searchText: ""
-
- function filterApps(search: string): list<var> {
- if (!search || search.trim() === "") {
- const apps = [];
- for (let i = 0; i < allAppsDb.apps.length; i++) {
- apps.push(allAppsDb.apps[i]);
- }
- return apps;
- }
-
- if (!allAppsDb.apps || allAppsDb.apps.length === 0) {
- return [];
- }
-
- const preparedApps = [];
- for (let i = 0; i < allAppsDb.apps.length; i++) {
- const app = allAppsDb.apps[i];
- const name = app.name || app.entry?.name || "";
- preparedApps.push({
- _item: app,
- name: Fuzzy.prepare(name)
- });
- }
-
- const results = Fuzzy.go(search, preparedApps, {
- all: true,
- keys: ["name"],
- scoreFn: r => r[0].score
- });
-
- return results.sort((a, b) => b._score - a._score).map(r => r.obj._item);
- }
-
- property list<var> filteredApps: []
-
- function updateFilteredApps() {
- filteredApps = filterApps(searchText);
- }
-
- onSearchTextChanged: {
- updateFilteredApps();
- }
-
- Component.onCompleted: {
- updateFilteredApps();
- }
-
- Connections {
- target: allAppsDb
- function onAppsChanged() {
- updateFilteredApps();
- }
- }
-
- SplitPaneLayout {
- anchors.fill: parent
-
- leftContent: Component {
-
- ColumnLayout {
- id: leftLauncherLayout
- anchors.fill: parent
-
- spacing: Appearance.spacing.small
-
- RowLayout {
- spacing: Appearance.spacing.smaller
-
- StyledText {
- text: qsTr("Launcher")
- font.pointSize: Appearance.font.size.large
- font.weight: 500
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- ToggleButton {
- toggled: !root.session.launcher.active
- icon: "settings"
- accent: "Primary"
- iconSize: Appearance.font.size.normal
- horizontalPadding: Appearance.padding.normal
- verticalPadding: Appearance.padding.smaller
- tooltip: qsTr("Launcher settings")
-
- onClicked: {
- if (root.session.launcher.active) {
- root.session.launcher.active = null;
- } else {
- if (root.filteredApps.length > 0) {
- root.session.launcher.active = root.filteredApps[0];
- }
- }
- }
- }
- }
-
- StyledText {
- Layout.topMargin: Appearance.spacing.large
- text: qsTr("Applications (%1)").arg(root.searchText ? root.filteredApps.length : allAppsDb.apps.length)
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- StyledText {
- text: qsTr("All applications available in the launcher")
- color: Colours.palette.m3outline
- }
-
- StyledRect {
- Layout.fillWidth: true
- Layout.topMargin: Appearance.spacing.normal
- Layout.bottomMargin: Appearance.spacing.small
-
- color: Colours.layer(Colours.palette.m3surfaceContainer, 2)
- radius: Appearance.rounding.full
-
- implicitHeight: Math.max(searchIcon.implicitHeight, searchField.implicitHeight, clearIcon.implicitHeight)
-
- MaterialIcon {
- id: searchIcon
-
- anchors.verticalCenter: parent.verticalCenter
- anchors.left: parent.left
- anchors.leftMargin: Appearance.padding.normal
-
- text: "search"
- color: Colours.palette.m3onSurfaceVariant
- }
-
- StyledTextField {
- id: searchField
-
- anchors.left: searchIcon.right
- anchors.right: clearIcon.left
- anchors.leftMargin: Appearance.spacing.small
- anchors.rightMargin: Appearance.spacing.small
-
- topPadding: Appearance.padding.normal
- bottomPadding: Appearance.padding.normal
-
- placeholderText: qsTr("Search applications...")
-
- onTextChanged: {
- root.searchText = text;
- }
- }
-
- MaterialIcon {
- id: clearIcon
-
- anchors.verticalCenter: parent.verticalCenter
- anchors.right: parent.right
- anchors.rightMargin: Appearance.padding.normal
-
- width: searchField.text ? implicitWidth : implicitWidth / 2
- opacity: {
- if (!searchField.text)
- return 0;
- if (clearMouse.pressed)
- return 0.7;
- if (clearMouse.containsMouse)
- return 0.8;
- return 1;
- }
-
- text: "close"
- color: Colours.palette.m3onSurfaceVariant
-
- MouseArea {
- id: clearMouse
-
- anchors.fill: parent
- hoverEnabled: true
- cursorShape: searchField.text ? Qt.PointingHandCursor : undefined
-
- onClicked: searchField.text = ""
- }
-
- Behavior on width {
- Anim {
- duration: Appearance.anim.durations.small
- }
- }
-
- Behavior on opacity {
- Anim {
- duration: Appearance.anim.durations.small
- }
- }
- }
- }
-
- Loader {
- id: appsListLoader
- Layout.fillWidth: true
- Layout.fillHeight: true
- asynchronous: true
- active: true
-
- sourceComponent: StyledListView {
- id: appsListView
-
- Layout.fillWidth: true
- Layout.fillHeight: true
-
- model: root.filteredApps
- spacing: Appearance.spacing.small / 2
- clip: true
-
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: parent
- }
-
- delegate: StyledRect {
- required property var modelData
-
- width: parent ? parent.width : 0
- implicitHeight: 40
-
- readonly property bool isSelected: root.selectedApp === modelData
-
- color: isSelected ? Colours.layer(Colours.palette.m3surfaceContainer, 2) : "transparent"
- radius: Appearance.rounding.normal
-
- opacity: 0
-
- Behavior on opacity {
- NumberAnimation {
- duration: 1000
- easing.type: Easing.OutCubic
- }
- }
-
- Component.onCompleted: {
- opacity = 1;
- }
-
- StateLayer {
- function onClicked(): void {
- root.session.launcher.active = modelData;
- }
- }
-
- RowLayout {
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.normal
-
- spacing: Appearance.spacing.normal
-
- IconImage {
- Layout.alignment: Qt.AlignVCenter
- implicitSize: 32
- source: {
- const entry = modelData.entry;
- return entry ? Quickshell.iconPath(entry.icon, "image-missing") : "image-missing";
- }
- }
-
- StyledText {
- Layout.fillWidth: true
- text: modelData.name || modelData.entry?.name || qsTr("Unknown")
- font.pointSize: Appearance.font.size.normal
- }
-
- Loader {
- Layout.alignment: Qt.AlignVCenter
- readonly property bool isHidden: modelData ? Strings.testRegexList(Config.launcher.hiddenApps, modelData.id) : false
- readonly property bool isFav: modelData ? Strings.testRegexList(Config.launcher.favouriteApps, modelData.id) : false
- active: isHidden || isFav
-
- sourceComponent: isHidden ? hiddenIcon : (isFav ? favouriteIcon : null)
- }
-
- Component {
- id: hiddenIcon
- MaterialIcon {
- text: "visibility_off"
- fill: 1
- color: Colours.palette.m3primary
- }
- }
-
- Component {
- id: favouriteIcon
- MaterialIcon {
- text: "favorite"
- fill: 1
- color: Colours.palette.m3primary
- }
- }
- }
- }
- }
- }
- }
- }
-
- rightContent: Component {
- Item {
- id: rightLauncherPane
-
- property var pane: root.session.launcher.active
- property string paneId: pane ? (pane.id || pane.entry?.id || "") : ""
- property Component targetComponent: settings
- property Component nextComponent: settings
- property var displayedApp: null
-
- function getComponentForPane() {
- return pane ? appDetails : settings;
- }
-
- Component.onCompleted: {
- displayedApp = pane;
- targetComponent = getComponentForPane();
- nextComponent = targetComponent;
- }
-
- Loader {
- id: rightLauncherLoader
-
- anchors.fill: parent
-
- opacity: 1
- scale: 1
- transformOrigin: Item.Center
- clip: false
-
- sourceComponent: rightLauncherPane.targetComponent
- active: true
-
- property var displayedApp: rightLauncherPane.displayedApp
-
- onItemChanged: {
- if (item && rightLauncherPane.pane && rightLauncherPane.displayedApp !== rightLauncherPane.pane) {
- rightLauncherPane.displayedApp = rightLauncherPane.pane;
- }
- }
- }
-
- Behavior on paneId {
- PaneTransition {
- target: rightLauncherLoader
- propertyActions: [
- PropertyAction {
- target: rightLauncherPane
- property: "displayedApp"
- value: rightLauncherPane.pane
- },
- PropertyAction {
- target: rightLauncherLoader
- property: "active"
- value: false
- },
- PropertyAction {
- target: rightLauncherPane
- property: "targetComponent"
- value: rightLauncherPane.nextComponent
- },
- PropertyAction {
- target: rightLauncherLoader
- property: "active"
- value: true
- }
- ]
- }
- }
-
- onPaneChanged: {
- nextComponent = getComponentForPane();
- paneId = pane ? (pane.id || pane.entry?.id || "") : "";
- }
-
- onDisplayedAppChanged: {
- if (displayedApp) {
- const appId = displayedApp.id || displayedApp.entry?.id;
- root.hideFromLauncherChecked = Config.launcher.hiddenApps && Config.launcher.hiddenApps.length > 0 && Strings.testRegexList(Config.launcher.hiddenApps, appId);
- root.favouriteChecked = Config.launcher.favouriteApps && Config.launcher.favouriteApps.length > 0 && Strings.testRegexList(Config.launcher.favouriteApps, appId);
- } else {
- root.hideFromLauncherChecked = false;
- root.favouriteChecked = false;
- }
- }
- }
- }
- }
-
- Component {
- id: settings
-
- StyledFlickable {
- id: settingsFlickable
- flickableDirection: Flickable.VerticalFlick
- contentHeight: settingsInner.height
-
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: settingsFlickable
- }
-
- Settings {
- id: settingsInner
-
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.top: parent.top
- session: root.session
- }
- }
- }
-
- Component {
- id: appDetails
-
- ColumnLayout {
- id: appDetailsLayout
- anchors.fill: parent
-
- readonly property var displayedApp: parent && parent.displayedApp !== undefined ? parent.displayedApp : null
-
- spacing: Appearance.spacing.normal
-
- SettingsHeader {
- Layout.leftMargin: Appearance.padding.large * 2
- Layout.rightMargin: Appearance.padding.large * 2
- Layout.topMargin: Appearance.padding.large * 2
- visible: displayedApp === null
- icon: "apps"
- title: qsTr("Launcher Applications")
- }
-
- Item {
- Layout.alignment: Qt.AlignHCenter
- Layout.leftMargin: Appearance.padding.large * 2
- Layout.rightMargin: Appearance.padding.large * 2
- Layout.topMargin: Appearance.padding.large * 2
- visible: displayedApp !== null
- implicitWidth: Math.max(appIconImage.implicitWidth, appTitleText.implicitWidth)
- implicitHeight: appIconImage.implicitHeight + Appearance.spacing.normal + appTitleText.implicitHeight
-
- ColumnLayout {
- anchors.centerIn: parent
- spacing: Appearance.spacing.normal
-
- IconImage {
- id: appIconImage
- Layout.alignment: Qt.AlignHCenter
- implicitSize: Appearance.font.size.extraLarge * 3 * 2
- source: {
- const app = appDetailsLayout.displayedApp;
- if (!app)
- return "image-missing";
- const entry = app.entry;
- if (entry && entry.icon) {
- return Quickshell.iconPath(entry.icon, "image-missing");
- }
- return "image-missing";
- }
- }
-
- StyledText {
- id: appTitleText
- Layout.alignment: Qt.AlignHCenter
- text: displayedApp ? (displayedApp.name || displayedApp.entry?.name || qsTr("Application Details")) : ""
- font.pointSize: Appearance.font.size.large
- font.bold: true
- }
- }
- }
-
- Item {
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.topMargin: Appearance.spacing.large
- Layout.leftMargin: Appearance.padding.large * 2
- Layout.rightMargin: Appearance.padding.large * 2
-
- StyledFlickable {
- id: detailsFlickable
- anchors.fill: parent
- flickableDirection: Flickable.VerticalFlick
- contentHeight: debugLayout.height
-
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: parent
- }
-
- ColumnLayout {
- id: debugLayout
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.top: parent.top
- spacing: Appearance.spacing.normal
-
- SwitchRow {
- Layout.topMargin: Appearance.spacing.normal
- visible: appDetailsLayout.displayedApp !== null
- label: qsTr("Mark as favourite")
- checked: root.favouriteChecked
- // disabled if:
- // * app is hidden
- // * app isn't in favouriteApps array but marked as favourite anyway
- // ^^^ This means that this app is favourited because of a regex check
- // this button can not toggle regexed apps
- enabled: appDetailsLayout.displayedApp !== null && !root.hideFromLauncherChecked && (Config.launcher.favouriteApps.indexOf(appDetailsLayout.displayedApp.id || appDetailsLayout.displayedApp.entry?.id) !== -1 || !root.favouriteChecked)
- opacity: enabled ? 1 : 0.6
- onToggled: checked => {
- root.favouriteChecked = checked;
- const app = appDetailsLayout.displayedApp;
- if (app) {
- const appId = app.id || app.entry?.id;
- const favouriteApps = Config.launcher.favouriteApps ? [...Config.launcher.favouriteApps] : [];
- if (checked) {
- if (!favouriteApps.includes(appId)) {
- favouriteApps.push(appId);
- }
- } else {
- const index = favouriteApps.indexOf(appId);
- if (index !== -1) {
- favouriteApps.splice(index, 1);
- }
- }
- Config.launcher.favouriteApps = favouriteApps;
- Config.save();
- }
- }
- }
- SwitchRow {
- Layout.topMargin: Appearance.spacing.normal
- visible: appDetailsLayout.displayedApp !== null
- label: qsTr("Hide from launcher")
- checked: root.hideFromLauncherChecked
- // disabled if:
- // * app is favourited
- // * app isn't in hiddenApps array but marked as hidden anyway
- // ^^^ This means that this app is hidden because of a regex check
- // this button can not toggle regexed apps
- enabled: appDetailsLayout.displayedApp !== null && !root.favouriteChecked && (Config.launcher.hiddenApps.indexOf(appDetailsLayout.displayedApp.id || appDetailsLayout.displayedApp.entry?.id) !== -1 || !root.hideFromLauncherChecked)
- opacity: enabled ? 1 : 0.6
- onToggled: checked => {
- root.hideFromLauncherChecked = checked;
- const app = appDetailsLayout.displayedApp;
- if (app) {
- const appId = app.id || app.entry?.id;
- const hiddenApps = Config.launcher.hiddenApps ? [...Config.launcher.hiddenApps] : [];
- if (checked) {
- if (!hiddenApps.includes(appId)) {
- hiddenApps.push(appId);
- }
- } else {
- const index = hiddenApps.indexOf(appId);
- if (index !== -1) {
- hiddenApps.splice(index, 1);
- }
- }
- Config.launcher.hiddenApps = hiddenApps;
- Config.save();
- }
- }
- }
- }
- }
- }
- }
- }
-}
diff --git a/modules/controlcenter/launcher/Settings.qml b/modules/controlcenter/launcher/Settings.qml
deleted file mode 100644
index ea8e5bb..0000000
--- a/modules/controlcenter/launcher/Settings.qml
+++ /dev/null
@@ -1,166 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import ".."
-import "../components"
-import qs.components
-import qs.components.controls
-import qs.components.effects
-import qs.services
-import qs.config
-import QtQuick
-import QtQuick.Layouts
-
-ColumnLayout {
- id: root
-
- required property Session session
-
- spacing: Appearance.spacing.normal
-
- SettingsHeader {
- icon: "apps"
- title: qsTr("Launcher Settings")
- }
-
- SectionHeader {
- Layout.topMargin: Appearance.spacing.large
- title: qsTr("General")
- description: qsTr("General launcher settings")
- }
-
- SectionContainer {
- ToggleRow {
- label: qsTr("Enabled")
- checked: Config.launcher.enabled
- toggle.onToggled: {
- Config.launcher.enabled = checked;
- Config.save();
- }
- }
-
- ToggleRow {
- label: qsTr("Show on hover")
- checked: Config.launcher.showOnHover
- toggle.onToggled: {
- Config.launcher.showOnHover = checked;
- Config.save();
- }
- }
-
- ToggleRow {
- label: qsTr("Vim keybinds")
- checked: Config.launcher.vimKeybinds
- toggle.onToggled: {
- Config.launcher.vimKeybinds = checked;
- Config.save();
- }
- }
- }
-
- SectionHeader {
- Layout.topMargin: Appearance.spacing.large
- title: qsTr("Display")
- description: qsTr("Display and appearance settings")
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.small / 2
-
- PropertyRow {
- label: qsTr("Max shown items")
- value: qsTr("%1").arg(Config.launcher.maxShown)
- }
-
- PropertyRow {
- showTopMargin: true
- label: qsTr("Drag threshold")
- value: qsTr("%1 px").arg(Config.launcher.dragThreshold)
- }
- }
-
- SectionHeader {
- Layout.topMargin: Appearance.spacing.large
- title: qsTr("Prefixes")
- description: qsTr("Command prefix settings")
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.small / 2
-
- PropertyRow {
- label: qsTr("Special prefix")
- value: Config.launcher.specialPrefix || qsTr("None")
- }
-
- PropertyRow {
- showTopMargin: true
- label: qsTr("Action prefix")
- value: Config.launcher.actionPrefix || qsTr("None")
- }
- }
-
- SectionHeader {
- Layout.topMargin: Appearance.spacing.large
- title: qsTr("Fuzzy search")
- description: qsTr("Fuzzy search settings")
- }
-
- SectionContainer {
- ToggleRow {
- label: qsTr("Apps")
- checked: Config.launcher.useFuzzy.apps
- toggle.onToggled: {
- Config.launcher.useFuzzy.apps = checked;
- Config.save();
- }
- }
- }
-
- SectionHeader {
- Layout.topMargin: Appearance.spacing.large
- title: qsTr("Sizes")
- description: qsTr("Size settings for launcher items")
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.small / 2
-
- PropertyRow {
- label: qsTr("Item width")
- value: qsTr("%1 px").arg(Config.launcher.sizes.itemWidth)
- }
-
- PropertyRow {
- showTopMargin: true
- label: qsTr("Item height")
- value: qsTr("%1 px").arg(Config.launcher.sizes.itemHeight)
- }
-
- PropertyRow {
- showTopMargin: true
- label: qsTr("Wallpaper width")
- value: qsTr("%1 px").arg(Config.launcher.sizes.wallpaperWidth)
- }
-
- PropertyRow {
- showTopMargin: true
- label: qsTr("Wallpaper height")
- value: qsTr("%1 px").arg(Config.launcher.sizes.wallpaperHeight)
- }
- }
-
- SectionHeader {
- Layout.topMargin: Appearance.spacing.large
- title: qsTr("Hidden apps")
- description: qsTr("Applications hidden from launcher")
- }
-
- SectionContainer {
- contentSpacing: Appearance.spacing.small / 2
-
- PropertyRow {
- label: qsTr("Total hidden")
- value: qsTr("%1").arg(Config.launcher.hiddenApps ? Config.launcher.hiddenApps.length : 0)
- }
- }
-}
diff --git a/modules/launcher/services/Apps.qml b/modules/launcher/services/Apps.qml
index 7f2d645..7569a1e 100644
--- a/modules/launcher/services/Apps.qml
+++ b/modules/launcher/services/Apps.qml
@@ -13,7 +13,7 @@ Searcher {
if (entry.runInTerminal)
Quickshell.execDetached({
- command: ["app2unit", "--", ...Config.general.apps.terminal, `${Quickshell.shellDir}/assets/wrap_term_launch.sh`, ...entry.command],
+ command: ["app2unit", "--", ...Config.general.apps.terminal, ...entry.command],
workingDirectory: entry.workingDirectory
});
else
diff --git a/modules/utilities/cards/Toggles.qml b/modules/utilities/cards/Toggles.qml
index d610586..4777648 100644
--- a/modules/utilities/cards/Toggles.qml
+++ b/modules/utilities/cards/Toggles.qml
@@ -20,13 +20,13 @@ StyledRect {
return Config.utilities.quickToggles.filter(item => {
if (!item.enabled)
return false;
-
+
if (seenIds.has(item.id)) {
return false;
}
if (item.id === "vpn") {
- return Config.utilities.vpn.provider.some(p =>
+ return Config.utilities.vpn.provider.some(p =>
typeof p === "object" ? (p.enabled === true) : false
);
}
diff --git a/nix/default.nix b/nix/default.nix
index 67747b2..bd246a6 100644
--- a/nix/default.nix
+++ b/nix/default.nix
@@ -140,9 +140,6 @@ in
mkdir -p $out/lib
ln -s ${extras}/lib/* $out/lib/
-
- # Ensure wrap_term_launch.sh is executable
- chmod 755 $out/share/caelestia-shell/assets/wrap_term_launch.sh
'';
passthru = {
diff --git a/services/Colours.qml b/services/Colours.qml
index d6f4812..cc07959 100644
--- a/services/Colours.qml
+++ b/services/Colours.qml
@@ -88,7 +88,7 @@ Singleton {
ImageAnalyser {
id: analyser
- source: Wallpapers.current
+ source: Paths.wallpaper
}
component Transparency: QtObject {
diff --git a/services/GameMode.qml b/services/GameMode.qml
deleted file mode 100644
index 83770b7..0000000
--- a/services/GameMode.qml
+++ /dev/null
@@ -1,76 +0,0 @@
-pragma Singleton
-
-import qs.services
-import qs.config
-import Caelestia
-import Quickshell
-import Quickshell.Io
-import QtQuick
-
-Singleton {
- id: root
-
- property alias enabled: props.enabled
-
- function setDynamicConfs(): void {
- Hypr.extras.applyOptions({
- "animations:enabled": 0,
- "decoration:shadow:enabled": 0,
- "decoration:blur:enabled": 0,
- "general:gaps_in": 0,
- "general:gaps_out": 0,
- "general:border_size": 1,
- "decoration:rounding": 0,
- "general:allow_tearing": 1
- });
- }
-
- onEnabledChanged: {
- if (enabled) {
- setDynamicConfs();
- if (Config.utilities.toasts.gameModeChanged)
- Toaster.toast(qsTr("Game mode enabled"), qsTr("Disabled Hyprland animations, blur, gaps and shadows"), "gamepad");
- } else {
- Hypr.extras.message("reload");
- if (Config.utilities.toasts.gameModeChanged)
- Toaster.toast(qsTr("Game mode disabled"), qsTr("Hyprland settings restored"), "gamepad");
- }
- }
-
- PersistentProperties {
- id: props
-
- property bool enabled: Hypr.options["animations:enabled"] === 0
-
- reloadableId: "gameMode"
- }
-
- Connections {
- target: Hypr
-
- function onConfigReloaded(): void {
- if (props.enabled)
- root.setDynamicConfs();
- }
- }
-
- IpcHandler {
- target: "gameMode"
-
- function isEnabled(): bool {
- return props.enabled;
- }
-
- function toggle(): void {
- props.enabled = !props.enabled;
- }
-
- function enable(): void {
- props.enabled = true;
- }
-
- function disable(): void {
- props.enabled = false;
- }
- }
-}
diff --git a/services/Wallpapers.qml b/services/Wallpapers.qml
deleted file mode 100644
index 443b416..0000000
--- a/services/Wallpapers.qml
+++ /dev/null
@@ -1,45 +0,0 @@
-pragma Singleton
-
-import qs.config
-import qs.utils
-import Caelestia.Models
-import Quickshell
-import Quickshell.Io
-import QtQuick
-
-Searcher {
- id: root
-
- readonly property list<string> smartArg: Config.services.smartScheme ? [] : ["--no-smart"]
-
- property bool showPreview: false
- readonly property string current: Paths.wallpaper
-
- function setWallpaper(path: string): void {
- actualCurrent = path;
- Quickshell.execDetached(["caelestia", "wallpaper", "-f", path, ...smartArg]);
- }
-
- list: wallpapers.entries
- key: "relativePath"
- useFuzzy: Config.launcher.useFuzzy.wallpapers
- extraOpts: useFuzzy ? ({}) : ({
- forward: false
- })
-
- IpcHandler {
- target: "wallpaper"
-
- function get(): string {
- return root.actualCurrent;
- }
-
- function set(path: string): void {
- root.setWallpaper(path);
- }
-
- function list(): string {
- return root.list.map(w => w.path).join("\n");
- }
- }
-}
diff --git a/shell.qml b/shell.qml
index 3ce7776..aa23e0a 100644
--- a/shell.qml
+++ b/shell.qml
@@ -5,14 +5,12 @@
import "modules"
import "modules/drawers"
import "modules/background"
-import "modules/areapicker"
import "modules/lock"
import Quickshell
ShellRoot {
Background {}
Drawers {}
- AreaPicker {}
Lock {
id: lock
}