Skip to content

Repository files navigation

Rystal-Shell

Rystal-Shell is a part of the GUI shell for Ryprland. This shell is based on Aylur's GTK Shell. To use it, you must be using Ryprland. For installation instructions, please refer to the Ryprland repository.

recording.mp4

Usage

When you install Ryprland, this repository is cloned as a submodule. It will be extracted to /base/.config/ags/ and becomes usable by running stow ./base.

How to Start

./launch.sh

This command will automatically start the shell, provided AGS is installed. In practice, it relies on Hyprland's autostart capabilities. When doing so, you need to account for the lag associated with loading the modules. Therefore, you must introduce a startup delay as shown below:

-- hyprland.lua
hl.on("hyprland.start",
  function()
    hl.exec_cmd("sleep 5; ~/.config/ags/launch.sh")
    hl.exec_cmd("sleep 10; blueman-applet")
  end
)

This is pre-configured in Ryprland.

Configuration

There are several configurable items in this shell.

First, copy the config template using the following command:

cp ./config.json.template ./config.json

By modifying each setting in that file, you can alter the shell's behavior and some of the displayed information.

{
  "weather": {
    "location": "<Your preferred location; if left blank, the location will be determined from your IP address.>"
  },
  "worldClocks": [
    { "label": "<Your preferred location>", "tz": "<Timezone of that location>" },
    ...
  ],
  "recorder": {
    "savePath": "<Directory to save recorded videos>",
    "filenameFormat": "<Filename format for the recorded videos>"
  },
  "profile": {
    "avatarPath": "<Profile picture; 512x512 .png format is recommended>"
  }
}

Development

Requirement

  • pnpm

Usage

# init
ags init         # generate the types for GTK4 and AGS
pnpm install     # install devDependencies

pnpm run lint    # Run ESLint
pnpm run tsc     # Run the TypeScript type checker
pnpm run format  # Run Prettier
pnpm run build   # Build the AGS module
pnpm run start   # Start the AGS module
pnpm run dev     # Start the AGS module with new build

Note

Running pnpm run tsc will throw errors in the following three files: ../../../usr/share/ags/js/lib/gtk4/app.ts:288 ../../../usr/share/ags/js/node_modules/gnim/dist/fetch.ts:406 ../../../usr/share/ags/js/node_modules/gnim/dist/jsx/state.ts:715 You can safely ignore these errors.

Why AGS was chosen and its memory consumption

Maybe some people are wondering, "Why AGS? Why not QuickShell?"

Recently, QuickShell has become increasingly popular in the Hyprland community. Its memory efficiency and beautiful animations are definitely compelling reasons to choose it.

However, I'm still a beginner with both GTK and Qt. One of the main reasons I chose AGS was that I wanted to learn GObject, one of GTK's core strengths. Since I already had experience with React, I was also interested in understanding how GTK development differs from web development.

I've been reading the GJS and Gnim documentation and doing my best to avoid memory leaks wherever possible.

For those interested, here are the memory usage numbers I've observed, including the worst-case scenario:

  • Usually case:
    • around 350~450 MB
  • Worst case (many notifications containing large images):
    • Idle: ~540 MB
    • Peak: Depends on the number of notifications and the size of the attachments.

      I think it can be scale unlimited. I tested it with 100 notifications which has 2MB Image each, and the memory usage was around 1.7 GB

Memory usage returns to the idle level after those notifications are cleared. (not immediately, but gjs will gc them)

About

A part of the GUI shell for Ryprland that powerd by AGS!

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages