Installation
One script installs everything: setup. It installs the packages, copies
home/ into your home and system/ into /, builds two Hyprland plugins, and
sets up once what a copied file cannot hold. Nothing is linked. Every file is
a copy, and setup remembers what it wrote.
Requirements
Section titled “Requirements”- Arch Linux, with
gitto clone the repository. - Hyprland 0.56 or newer (tested on 0.56.2), configured in Lua.
- A terminal, in the Hyprland session or on a console before there is one. The plugins are built against the compositor that is running, so from a console the first session builds them.
- Your password, for sudo.
No Arch on the machine yet? A USB stick, built on one that has it, installs Arch and the desk together.
Install
Section titled “Install”-
Clone the repository and run the installer:
Terminal window git clone https://github.com/andreumassanet/impasto.git ~/impastocd ~/impasto./setup install -
Answer pacman’s questions and give your password when sudo asks for it.
-
Log out and back in, or reboot after an install from a console. The shell, the wallpaper daemon and the plugins start with the session, and the login screen with the next boot.
Installed from a console, the first Hyprland session opens a terminal on
./setup plugins, which builds both plugins and asks for your password once.
Cancel it and the next login asks again.
To see what would happen first, add --dry-run. It prints every package it
would install and every file it would write, and changes nothing.
./setup install --dry-runOr pick from a menu
Section titled “Or pick from a menu”Run ./setup with nothing after it and it asks instead, with the arrow keys:
install, update, sync, uninstall, check or help. Install opens a second screen
that turns the packages, the login screen, the plugins and the extras on or
off, and picks yay or paru, starting on the one you have. It needs a terminal
at least 76 columns wide and 20 rows tall; anywhere else it prints the help.
What it does, in order
Section titled “What it does, in order”| Step | What happens |
|---|---|
| Packages | Installs whatever packages/pacman.txt lists and is missing, with sudo pacman -Syu --needed, which upgrades the system in the same step. Then the AUR half, packages/aur.txt, through yay or paru. If you have neither, it offers to build yay-bin from the AUR. |
| User folders | Runs xdg-user-dirs-update, which creates the folders captures and recordings land in. Existing folders are never renamed. |
| oh-my-zsh | Clones oh-my-zsh into ~/.oh-my-zsh, with the zsh-autosuggestions and zsh-syntax-highlighting plugins. It is cloned rather than installed with its own script, because that script replaces ~/.zshrc. |
home/ | Copies every file into $HOME. The first time, it also renders the terminal greeting’s scenes (if ImageMagick is installed) and a minimal impasto icon theme. |
system/ | Copies the login screen’s theme, the boot splash’s theme and its drop-ins, a few configuration fragments and the lock screen’s PAM service for face unlock into /, with sudo, and creates /var/lib/impasto/faces. Where no display manager is enabled yet, it enables sddm for the next boot. With ddcutil installed, it loads i2c-dev, so the brightness of external monitors works without a reboot. |
| Plugins | Builds and enables hypr-dynamic-cursors (shake to find) and hyprglass (refraction on the windows) with hyprpm. From a console, it leaves them to the first session. |
| Extras | Sets up what a copied file cannot hold: what opens which file, dark GTK windows, the vector cursor, Nautilus, VSCodium, Vesktop, Spotify, face unlock, camera effects and the boot splash. |
A file of yours that is already in the way is moved to
~/.local/state/impasto/backups/ before anything is written. See
Updating for how the copies are kept after that.
| Flag | Effect |
|---|---|
--skip-packages | Install nothing; copy and build only. |
--skip-system | Leave / alone: no login screen, and no password for it. |
--skip-plugins | Do not build the plugins: no shake to find, no refraction. |
--skip-extras | Leave the extras alone: what opens which file, GTK, the cursor, Nautilus, VSCodium, Vesktop, Spotify, face unlock, camera effects and the boot splash. |
--aur-helper yay or paru | Which helper installs the AUR half. The one you have is used; if you have neither, this one is built from the AUR (yay if unset). |
--noconfirm | Take the default answer at every question, pacman’s and the helper’s included. |
-n, --dry-run | Say what would happen, and do none of it. |
What it asks for
Section titled “What it asks for”- sudo for pacman, to install the packages.
- sudo for the copy into
/, once, before the system files are written and sddm is enabled. - sudo for hyprpm, whose plugin store is root’s, under
/var/cache/hyprpm/: once for both plugins. This is why the plugins need a terminal that can ask for a password. - Whether to build yay, only when neither yay nor paru is installed.
- Whether spicetify may patch Spotify, which makes
/opt/spotifywritable with sudo. - Whether to enrol your face, only where there is an infrared camera. It installs howdy-next from the AUR first, then asks you to look at the camera.
- sudo for camera effects, only where there is a webcam: the virtual camera’s module, OpenCV and MediaPipe.
- sudo for the boot splash, to choose its theme and rebuild the initramfs.
What it sets up once
Section titled “What it sets up once”The extras run once per machine. Each has a verb of its own
(./setup defaults, cursors, nautilus, vscodium, vesktop, spotify,
face, camera and splash), and after the first time install and update leave them alone, so
what you change in those programs stays.
One that cannot run yet is skipped with the reason, and the next install or
update tries again:
- A program that is open: Vesktop writes its settings back while it runs, and patching Spotify restarts it. Close it and update.
- A Spotify never started: spicetify needs the settings Spotify writes on its first start. Open it once, close it, and update.
- No network, for the cursor, VSCodium’s extensions and the camera’s models.
- Nobody at the camera: with
--noconfirm, enrolling a face waits for./setup faceor the next update.
Spotify is also patched again whenever a Spotify update has taken the patch away. Every extra is in The setup script, and what each program takes from the palette is in Applications.
The login screen
Section titled “The login screen”install copies the SDDM theme into /usr/share/sddm/themes/impasto/ and names
it in /etc/sddm.conf.d/10-impasto.conf. Where no display manager is enabled,
it enables sddm, which comes up at the next boot; a machine that already starts
another one keeps it. Lock and login
has the rest.
The face
Section titled “The face”The picture on the lock and login screens is
/var/lib/impasto/faces/<username>.face.icon; without one, both show your
initials. The directory belongs to root, so copy it in with sudo:
sudo install -m 644 ~/picture.png /var/lib/impasto/faces/$USER.face.iconsetup creates the directory and never removes it, not even on uninstall.
Next: First steps.
