Matshell is a Material Design inspired desktop shell built with AGS/Astal for Hyprland. This project draws heavy inspiration from fufexan's AGSv1 config, with design influences from saimoomedits, tailored for both multi-monitor desktop setups and laptops.
This setup tries to achieve sleek, "MacOS-esque" looks with a little bit of rice sprinkled on top.
Now using AGSv3.
- Adaptive Layout: Automatically adapts to desktop or laptop environments by conditionally rendering notebook-specific widgets
- Dynamic Material Design Theming: Change themes on-the-fly via matugen templates
- Multi-monitor Support: Designed with multi-monitor setups in mind
- Hyprland Integration: Built specifically for the Hyprland compositor
- Nix Support: Support for NixOS / Home-Manager with dedicated module
- Configurable: Includes option menu to hot-reload styles and components
Show detailed components list
-
π Status Bar - Sleek, informative main bar with system information
- Workspace Management - Themed Hyprland workspace integration
- System Tray
- Visual Performance Monitoring - CPU & memory
- Simple Clock
-
π§ Music Player - Media controls, music cover themed
- Audio Visualization - Extensive library of CAVA visualizer styles to choose from
-
π§ System Menu - Minimalistic core system integration
- Network Management - WiFi scanning, connection management, and status monitoring
- Bluetooth Support - Device pairing, management, and status indicators
- Brightness Controls
- Audio Controls
- Battery Metrics
- Power Profiles
- Notification Center - Intuitive notification management system & DND mode
-
π€ Logout Menu - wlogout-like but ags
-
π― App Launcher - Fast fuzzy search application access
-
π» On-Screen Display - Tracks Audio, Brightness, and Bluetooth connections
Show dependency list
- aylurs-gtk-shell-git
- libastal-hyprland-git
- libastal-tray-git
- libastal-notifd-git
- libastal-apps-git
- libastal-wireplumber-git
- libastal-mpris-git
- libastal-network-git
- libastal-bluetooth-git
- libastal-cava-git
- libastal-battery-git
- libastal-powerprofiles-git
- libgtop
- libadwaita
- libsoup3
- hyprland
- coreutils
- dart-sass
- imagemagick
- networkmanager
- wireplumber
- bluez & bluez-utils (will also run fine without, but throws some non-critical errors on startup)
- adwaita-icon-theme
- ttf-material-symbols-variable-git
- ttf-firacode-nerd
- For matugen theming:
- matugen
- image-hct (optional; for additional chroma/tone based theming)
- upower
- brightnessctl
Note
If you're using an old version of matshell and want to update or you're using your own setup, you will need to move your old config out of ~/.config/ags/ or delete the folder before running the script, as I am not overwriting existing configs. If the Arch install below is broken please open an issue as I don't run Arch and only test this in a VM from time to time.
Run the installation script (Currently supports Arch-based with yay only):
bash <(curl -s https://raw.githubusercontent.com/Neurarian/matshell/refs/heads/master/scripts/install.sh)
... and implement the colors into your hyprland config to your liking.
Tip
Use Hyprland layerrules to add some blur to the shell for smoother visuals.
layerrule=blur, bar
layerrule=blur, gtk4-layer-shell
layerrule=ignorealpha 0.2, bar
layerrule=ignorealpha 0.2, gtk4-layer-shell
I am using a shell script to set a new wallpaper and matugen theme. It uses a custom cli utility that you can use to dynamically choose the scheme and mode. Otherwise just pin to one of your liking (e.g., matugen -t "scheme-vibrant" -m "dark" image "$wallpaper_path"). The color generation works better with wallpapers that have a bit of chroma.
Note
After a first launch, edit the autogenerated config.json in ~/.config/ags/ to add the shell commands for your terminal, file-manager, browser, resource monitor, and audio control apps to the shell. Defaults are Wezterm, Nautilus, Zen, Resources, and pwvucontrol. You can also add more advanced bluetooth and wifi apps to the config.json, but their toggles can also be disabled if the matshell controls alone are sufficient for you. Defaults are overskride and gnome-control-center.
Manual install
...Or do it manually by installing the dependencies above and cloning this repo.
βMake sure to create a backup of your current config if you want to keep itβ
git clone --depth 1 "https://github.com/Neurarian/matshell" "$XDG_CONFIG_HOME/ags/"
Finally, add this to your matugen config:
[templates.gtk3]
input_path = "~/.config/ags/matugen/templates/gtk.css"
output_path = "~/.config/gtk-3.0/gtk.css"
[templates.gtk4]
input_path = "~/.config/ags/matugen/templates/gtk.css"
output_path = "~/.config/gtk-4.0/gtk.css"
[templates.ags]
input_path = "~/.config/ags/matugen/templates/ags.scss"
output_path = "~/.config/ags/style/abstracts/_variables.scss"
[templates.hypr]
input_path = "~/.config/ags/matugen/templates/hyprland_colors.conf"
output_path = "~/.config/hypr/hyprland_colors.conf"
[templates.hyprlock]
input_path = "~/.config/ags/matugen/templates/hyprlock_colors.conf"
output_path = "~/.config/hypr/hyprlock_colors.conf"
You can generally test out matshell via the flake exposed package nix run github:Neurarian/matshell
. For a NixOS implementation and example script for use with hyprpaper, matugen, and the custom cli utility to get chroma/tone, you can enable dedicated options in the home-manager module:
# ...
imports = [
inputs.matshell.homeManagerModules.default
];
programs.matshell= {
# Enable the basic shell
enable = true;
# Enable a systemd service for matshell
autostart = true;
# Enable matugen theming via custom random wallpaper setter script and rust utility
# used to base theme and scheme on the HCT properties of the main color.
# Run this via "wal_set"
matugenThemeSetter = true;
# This also sets up the entire matugen config & templates.
# If you already have matugen set up you may want to omit this.
# To use the hyprland/hyprlock templates, you would still need to
# import the generated files and add the color aliases to your config as desired.
matugenConfig = true;
};
#...
Note
As I don't want to overwrite changes people potentially apply to the stylesheets in ~/.config/ags/ or even their current configs, I do not replace config files already present at ~/.config/ags/ on rebuild. This means, If a new version of matshell changed something style related, you may need to delete the old ~/.config/ags/ folder manually and rebuild again for the stylesheets to be up-to-date.
This project wouldn't be possible without:
- Aylur for the powerful widget toolkit
- fufexan's dotfiles for the initial inspiration and foundation
- matugen for the amazing Material Color theming utility
- kotontrion for the GTK4 CAVA Catmull-Rom spline widget
- ARKye03 for the GTK4 circular progress widget which is currently still on its way to be merged into Astal
- saimoomedits' eww-widgets for design influence
- end-4's dots-hyprland for some inspiration on the color generation
matshell.mp4
Floating mode
Full bar mode & cava in bar
Square bar with rounded screen corners & Hyprland blur
