# Theming Since the widget toolkit is **GTK3** theming is done with **CSS**. - [CSS tutorial](https://www.w3schools.com/css/) - [GTK CSS Overview wiki](https://docs.gtk.org/gtk3/css-overview.html) - [GTK CSS Properties Overview wiki](https://docs.gtk.org/gtk3/css-properties.html) :::warning GTK is not the web While most features are implemented in GTK, you can't assume anything that works on the web will work with GTK. Refer to the [GTK docs](https://docs.gtk.org/gtk3/css-overview.html) to see what is available. ::: So far every widget you made used your default GTK3 theme. To make them more custom, you can apply stylesheets to them. ## From file at startup You can pass a path to a file or css as a string in `App.start` :::code-group ```ts [app.ts] const inlineCss = ` window { background-color: transparent; } ` App.start({ css: inlineCss, css: "./style.css", css: "/path/to/style.css", }) ``` ::: :::warning When using relative paths, for example `./style.css` keep in mind that they will be relative to the current working directory. ::: ## Css Property on Widgets ```ts Widget.Label({ css: "color: blue; padding: 1em;", label: "hello", }) ``` :::info The `css` property of a widget will not cascade to its children. ::: ## Apply Stylesheets at Runtime You can apply additional styles at runtime. ```ts App.apply_css("/path/to/file.css") ``` ```ts App.apply_css(` window { background-color: transparent; } `) ``` ```ts App.reset_css() // reset if need ``` :::warning `App.apply_css` will apply on top of other stylesheets applied before. You can reset stylesheets with `App.resetCss` ::: ## Inspector If you are not sure about the widget hierarchy or any CSS selector, you can use the [GTK inspector](https://wiki.gnome.org/Projects/GTK/Inspector) ```sh # to bring up the inspector run astal --inspector ``` ## Using SCSS Gtk's CSS only supports a subset of what the web offers. Most notably nested selectors are unsupported by Gtk, but this can be workaround by using preprocessors like [SCSS](https://sass-lang.com/). :::code-group ```sh [ Arch] sudo pacman -Syu dart-sass ``` ```sh [ Fedora] npm install -g sass # not packaged on Fedora ``` ```sh [ Ubuntu] npm install -g sass # not packaged on Ubuntu ``` ::: :::code-group ```ts [app.ts] import { exec } from "astal/process" exec("sass", "./style.scss", "/tmp/style.css") App.start({ css: "/tmp/style.css", main() {}, }) ``` ::: :::tip You could also transpile scss into css using a bundler and simply passing the path of the resulting css file to `css`. :::