[[Item Size Position]] --- https://quickshell.org When launching `quickshell` it wil scan XDG_CONFIG_DIRS for `shell.qml` that it will load unless `-c` is specified. It will scan sub-directories if no `shell.qml` is found in the root directory. Quickshell expands [[QtQuick]] with functionalities useful for building shells. ## Windows Requires `import Quickshell`. Types: - PanelWindow: for bars, widgets and overlays - FloatingWindow: standard desktop windows [Type reference](https://quickshell.org/docs/types/Quickshell/PanelWindow) ## Text [Text](https://doc.qt.io/qt-6/qml-qtquick-text.html) requires `import QtQuick. Set `id: somename` to reference by `somename`, ie `somename.text = "blaat"` Strings can be concat using `+` ## Processes Requires `import Quickshell.Io` (NOTE the capital I in Io) [Process](https://quickshell.org/docs/types/quickshell.io/process) object runs commands. [StdioCollector](https://quickshell.org/docs/types/Quickshell.Io/StdioCollector) reads process' output. Use a [Timer](https://doc.qt.io/qt-6/qml-qtqml-timer.html) to run Process on an interval. ## Component A reusable tree of objects. [Variants](https://quickshell.org/docs/types/Quickshell/Variants) creates instances of a component based on user supplied data. For example this used to create instances of a window based on the monitor list. To prevent many of the same processes when we reuse a component many times use `Scope` to move them outside of the reused component. We can use a [Property Definition](https://quickshell.org/docs/configuration/qml-overview/#property-definitions) on the parent scope to communicate between components in different scopes but in the same parent scope. Properties are reactive. ## Objects Properties `[required] [readonly] [default] property [: binding]` `id` is a special property that can be used to reference an object throughout the entire current file. Has to be lowercase. Functions ```qml function ([: ][, ...])[: returntype] { // multiline expression (note that `return` is required) } ``` Can be invoked in expressions, reactivity is carried through -- so if the argument value changes all expressions are re-evaluated. Lambas `() => ...` ## Multiple files shell.qml is the root. If a filename starts with a capital letter it can be referenced. E.g Bar.qml ```qml Scope { Bar {} } ``` Other folders can be imported using `import` statements. ## Singleton Has only one instance that is accessible from every scope. For example the date process in the bar. Set `pragma Singleton` at the top of the file ( before imports ). and Use `Singleton` type. [Clock formatting](https://doc.qt.io/qt-6/qml-qtqml-qt.html#formatDateTime-method) ## Signals Event emitter. Same rules as properties and function. `signal (: [, ...])` Objects have implict `on` (note capital S) for each signal defined. Connections object can be used to access difficult to reach signal handlers, such as those from Singletons. `Connections { target: id; function onClicked() # example target: button }` Does that somehow override the onClicked function of the target?? All properties have `propertynameChanged` handler, powering the reactivity. ## Attached objects Every object has `Component` attached, used to run stuff when an Object finishes initializes using `Component.onCompleted`.