A ready to go Wayland status bar for Hyprland.
Feel free to fork this project and customize it for your needs or just open an issue to request a particular feature.
If you have graphical issues like missing transparency or graphical artifact you could launch ashell with WGPU_BACKEND=gl. This env var forces wgpu to use OpenGL instead of Vulkan
While it's currently tailored for Hyprland, it could work with other compositors.
However, it currently relies on hyprland-rs to gather information about the active window and workspaces. I haven't implemented any feature flags to disable these functionalities or alternative methods to obtain this data.
You can get the official Arch Linux package from the AUR:
paru/yay -S ashell
paru/yay -S ashell-git
su -
apt-get install ashell
To install ashell using the nix package be sure to enable flakes and then run
nix profile install github:MalpenZibo/ashell?ref=0.3.1
nix profile install github:MalpenZibo/ashell
I haven't tested ashell on NixOS.
To enable this flake use
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
(import (pkgs.callPackage (pkgs.fetchFromGitHub {
owner = "MalpenZibo";
repo = "ashell";
rev = "refs/heads/main"; # Or specify the branch/tag you need
sha256 = "sha256-PLACEHOLDER"; # Replace with the correct hash
}) {}).defaultPackage.x86_64-linux)
];
}
I'm not an expert and I haven't tested this configuration but I'm quite sure that if you use NixOS you are smart enough to add ashell to your configuration :D
- App Launcher button
- Сlipboard button
- OS Updates indicator
- Hyprland Active Window
- Hyprland Workspaces
- System Information (CPU, RAM, Temperature)
- Hyprland Keyboard Layout
- Hyprland Keyboard Submap
- Tray
- Date time
- Privacy (check microphone, camera and screenshare usage)
- Settings panel
- Power menu
- Battery information
- Audio sources and sinks
- Screen brightness
- Network stuff
- VPN
- Bluetooth
- Power profiles
- Idle inhibitor
- Airplane mode
The configuration uses the yaml file format and is named ~/.config/ashell.yml
# Ashell log level filter, possible values "DEBUG" | "INFO" | "WARNING" | "ERROR". Needs reload
logLevel: "WARN" # optional, default "WARN"
# Possible status bar outputs, values could be: All, Active, or Targets
# All: the status bar will be displayed on all the available outputs, example: outputs: All
# Active: the status bar will be displayed on the active output, example: outputs: Active
# Targets: the status bar will be displayed on the outputs listed here,
# example:
# outputs: !Targets
# - DP-1
# - eDP-1
# if the outputs is not available the bar will be displayed in the active output
outputs: All # optional, default all
# Bar position, possible values Top | Bottom.
position: Top # optional, default Top
# Declare which modules should be used and in which position in the status bar.
# This is the list of all possible modules
# - AppLauncher
# - Updates
# - Clipboard
# - Workspaces
# - WindowTitle
# - SystemInfo
# - KeyboardLayout
# - KeyboardSubmap
# - Tray
# - Clock
# - Privacy
# - Settings
# optional, the following is the default configuration
modules:
# The modules that will be displayed on the left side of the status bar
left:
- Workspaces
# The modules that will be displayed in the center of the status bar
center:
- WindowTitle
# The modules that will be displayed on the right side of the status bar
right:
- SystemInfo
# This modules will form a group sharing the same element in the status bar
- [Clock, Privacy, Settings]
# App launcher command, it will be used to open the launcher,
# without a value the related button will not appear
appLauncherCmd: "~/.config/rofi/launcher.sh" # optional, default None
# Clipboard command, it will be used to open the clipboard menu,
# without a value the related button will not appear
clipboardCmd: "cliphist-rofi-img | wl-copy" # optional, default None
# Update module configuration.
# Without a value the related button will not appear.
updates: # optional, default None
# The check command will be used to retrieve the update list.
# It should return something like `package_name version_from -> version_to\n`
checkCmd: "checkupdates; paru -Qua" # required
# The update command is used to init the OS update process
updateCmd: 'alacritty -e bash -c "paru; echo Done - Press enter to exit; read" &' # required
# Maximum number of chars that can be present in the window title
# after that the title will be truncated
truncateTitleAfterLength: 150 # optional, default 150
# Workspaces module configuration, optional
workspaces:
# The visibility mode of the workspaces, possible values are:
# All: all the workspaces will be displayed
# MonitorSpecific: only the workspaces of the related monitor will be displayed
visibilityMode: All # optional, default All
# Enable filling with empty workspaces
# For example:
# With this flag set to true if there are only 2 workspaces,
# the workspace 1 and the workspace 4, the module will show also
# two more workspaces, the workspace 2 and the workspace 3
enableWorkspaceFilling: false # optional, default false
# The system module configuration
system:
cpuWarnThreshold: 60 # cpu indicator warning level (default 60)
cpuAlertThreshold: 80 # cpu indicator alert level (default 80)
memWarnThreshold: 70 # mem indicator warning level (default 70)
memAlertThreshold: 85 # mem indicator alert level (default 85)
tempWarnThreshold: 60 # temperature indicator warning level (default 60)
tempAlertThreshold: 80 # temperature indicator alert level (default 80)
# Clock module configuration
clock:
# clock format see: https://docs.rs/chrono/latest/chrono/format/strftime/index.html
format: "%a %d %b %R" # optional, default: %a %d %b %R
# Settings module configuration
settings:
# command used for lock the system
# without a value the related button will not appear
lockCmd: "hyprlock &" # optional, default None
# command used to open the sinks audio settings
# without a value the related button will not appear
audioSinksMoreCmd: "pavucontrol -t 3" # optional default None
# command used to open the sources audio settings
# without a value the related button will not appear
audioSourcesMoreCmd: "pavucontrol -t 4" # optional, default None
# command used to open the network settings
# without a value the related button will not appear
wifiMoreCmd: "nm-connection-editor" # optional, default None
# command used to open the VPN settings
# without a value the related button will not appear
vpnMoreCmd: "nm-connection-editor" # optional, default None
# command used to open the Bluetooth settings
# without a value the related button will not appear
bluetoothMoreCmd: "blueman-manager" # optional, default None
# Appearance config
# Each color could be a simple hex color like #228800 or an
# object that define a base hex color and two optional variant of that color (a strong one and a weak one)
# and the text color that should be used with that base color
# example:
# backgroundColor:
# base: #448877
# strong: #448888 -- optional default autogenerated from base color
# weak: #448855 -- optional default autogenarated from base color
# text: #ffffff -- optional default base text color
appearance:
backgroundColor: "#1e1e2e" # used as a base background color for header module button
primaryColor: "#fab387" # used as a accent color
secondaryColor: "#11111b" # used for darker background color
successColor: "#a6e3a1" # used for success message or happy state
dangerColor: "#f38ba8" # used for danger message or danger state (the weak version is used for the warning state
textColor: "#f38ba8" # base default text color
# this is a list of color that will be used in the workspace module (one color for each monitor)
workspaceColors:
- "#fab387"
- "#b4befe"
# this is a list of color that will be used in the workspace module
# for the special workspace (one color for each monitor)
# optional, default None
# without a value the workspaceColors list will be used
specialWorkspaceColors:
- "#a6e3a1"
- "#f38ba8"
I will try my best to keep these screenshots as updated as possible but some details could be different