Compare commits

..
61 Commits
Author SHA1 Message Date
Lucas Oskorep 5faf4ec3bf feat: update version in package.json
Build and Test / build (push) Successful in 23s
Build and Test / release (push) Successful in 3s
2026-03-02 23:09:39 -05:00
Lucas Oskorep add86d284b feat: initial README.md
Build and Test / build (push) Successful in 24s
Build and Test / release (push) Successful in 3s
2026-03-02 23:07:28 -05:00
Lucas Oskorep 696269d8b8 feat: adding support for multi-monitor window moving
Build and Test / release (push) Has been cancelled
Build and Test / build (push) Has been cancelled
Build and Test / build (pull_request) Successful in 24s
Build and Test / release (pull_request) Has been skipped
2026-03-02 23:06:47 -05:00
Lucas Oskorep fa021b08eb feat: adding active window selection and refactoring keybindings 2026-03-02 18:46:26 -05:00
Lucas Oskorep 8ed5f104b2 fix: when new items enter the tabbed view they should be the active window
Build and Test / build (push) Successful in 25s
Build and Test / release (push) Successful in 3s
2026-03-02 11:26:28 -05:00
Lucas Oskorep cbaa802797 feat: equal-sized tabs and constantly updated tab titles
Build and Test / build (push) Successful in 25s
Build and Test / release (push) Successful in 3s
2026-02-27 12:24:58 -05:00
Lucas Oskorep e2a1792388 fix: tab bars showing when apps are fullscreen on same monitor
Build and Test / build (push) Successful in 25s
Build and Test / release (push) Successful in 2s
2026-02-26 22:06:30 -05:00
Lucas Oskorep 656e448927 feat: add tabbed container layout mode with tab bar UI
Build and Test / build (push) Successful in 25s
Build and Test / release (push) Successful in 3s
fix: tab bars no longer shown in overview.  Tab bars show name of app with pipe and then title of the app
2026-02-26 21:45:40 -05:00
Lucas Oskorep 93516b31fb fix: new bug from combining resize and move commands - if window has min-size set and resize goes smaller window would not move or resize causing vesktop and steam to frequently break when in arrays on a smaller monitors
Build and Test / build (push) Successful in 39s
Build and Test / release (push) Successful in 10s
2026-02-26 01:54:49 -05:00
Lucas Oskorep 918c07c419 Merge pull request 'chore(deps): update dependency eslint to v10' (#16) from renovate/major-eslint-monorepo into main
Build and Test / build (push) Successful in 25s
Build and Test / release (push) Successful in 2s
Reviewed-on: #16
2026-02-25 17:18:42 -05:00
Lucas Oskorep 15188b9990 Merge branch 'main' into renovate/major-eslint-monorepo
Build and Test / build (pull_request) Successful in 24s
Build and Test / release (pull_request) Has been skipped
2026-02-25 17:02:44 -05:00
Lucas Oskorep 19696298d0 Merge pull request 'feat/percentage-based-container-sizing' (#18) from feat/percentage-based-container-sizing into main
Build and Test / build (push) Successful in 23s
Build and Test / release (push) Successful in 11s
Reviewed-on: #18
2026-02-25 11:36:39 -05:00
Lucas Oskorep 4be7602316 feat: adding support for changing the size of windows during window resize events to aerospike. Also cleaning up imports and simplifying some of the settings logic.
Build and Test / build (pull_request) Successful in 23s
Build and Test / release (pull_request) Has been skipped
2026-02-25 11:35:59 -05:00
Renovate Bot 8f6e8582c9 chore(deps): update dependency eslint to v10
Build and Test / build (pull_request) Successful in 24s
Build and Test / release (pull_request) Has been skipped
2026-02-06 23:13:10 +00:00
Lucas Oskorep 3d2da0a4bc Update .gitea/workflows/build.yaml
Build and Test / build (push) Successful in 24s
Build and Test / release (push) Successful in 11s
2026-01-29 02:47:15 -05:00
Lucas Oskorep a17441cda3 Merge pull request 'chore(deps): update all-dependencies' (#12) from renovate/all into main
Build and Test / build (push) Successful in 24s
Build and Test / release (push) Has been cancelled
Reviewed-on: #12
2026-01-29 02:46:04 -05:00
Lucas Oskorep c4f5835424 fix: renovate updating past v3 for upload when v4+ is unsupported in gitea
Build and Test / build (pull_request) Successful in 33s
Build and Test / release (pull_request) Has been cancelled
2026-01-29 02:45:04 -05:00
Lucas Oskorep 7773c3b808 feat: update code to work with new libs
Build and Test / build (pull_request) Failing after 24s
Build and Test / release (pull_request) Has been cancelled
2026-01-29 02:41:59 -05:00
Renovate Bot b8e861cf9e chore(deps): update all-dependencies
Build and Test / build (pull_request) Failing after 24s
Build and Test / release (pull_request) Has been cancelled
2026-01-29 02:38:21 -05:00
Lucas Oskorep 318ce6c064 Update .gitea/workflows/build.yaml
Build and Test / build (push) Failing after 39s
Build and Test / release (push) Has been cancelled
2026-01-29 02:36:39 -05:00
Lucas Oskorep 1a4d8253f7 Merge pull request 'chore(deps): update all-dependencies' (#10) from renovate/all into main
Build and Test / build (push) Has been cancelled
Build and Test / release (push) Has been cancelled
Reviewed-on: #10
2026-01-29 01:57:18 -05:00
Renovate Bot 86786ba831 chore(deps): update all-dependencies
renovate/artifacts Artifact file update failure
Build and Test / build (pull_request) Has been cancelled
Build and Test / release (pull_request) Has been cancelled
2026-01-29 06:55:32 +00:00
Lucas Oskorep bfd027f6c3 Merge pull request 'chore: Configure Renovate' (#8) from renovate/configure into main
Build and Test / build (push) Has been cancelled
Build and Test / release (push) Has been cancelled
Reviewed-on: #8
Reviewed-by: Lucas Oskorep <lucas.oskorep@gmail.com>
2026-01-29 01:46:16 -05:00
Renovate Bot b46810bc0f Add renovate.json
Build and Test / build (pull_request) Has been cancelled
Build and Test / release (pull_request) Has been cancelled
2026-01-29 06:45:35 +00:00
Lucas Oskorep c4abd1e8e5 revert df9bc3e1eb
Build and Test / build (push) Has been cancelled
Build and Test / release (push) Has been cancelled
revert Merge pull request 'chore: Configure Renovate' (#1) from renovate/configure into main

Reviewed-on: #1
2026-01-29 01:36:37 -05:00
Lucas Oskorep df9bc3e1eb Merge pull request 'chore: Configure Renovate' (#1) from renovate/configure into main
Build and Test / build (push) Has been cancelled
Build and Test / release (push) Has been cancelled
Reviewed-on: #1
2026-01-29 01:05:11 -05:00
Renovate Bot 90a4e19751 Add renovate.json
Build and Test / build (pull_request) Has been cancelled
Build and Test / release (pull_request) Has been cancelled
2026-01-29 05:44:36 +00:00
Lucas Oskorep 5da4001a32 feat: gitea pipeline fix for upload
Build and Test / build (push) Successful in 27s
Build and Test / release (push) Successful in 11s
2025-10-17 02:50:21 -04:00
Lucas Oskorep 9011cd48f2 feat: gitea pipeline fix for upload
Build and Test / build (push) Successful in 36s
2025-10-17 02:46:56 -04:00
Lucas Oskorep e065acd37d feat: gitea pipeline
Build and Test / build (push) Failing after 1m2s
2025-10-17 02:42:12 -04:00
Lucas Oskorep b4afd6d4dc feat: gitea pipeline
Build and Test / build (push) Has been cancelled
2025-10-17 02:38:04 -04:00
Lucas Oskorep 1ae379868b feat: adding basic unit tests and framework for them 2025-10-17 02:06:16 -04:00
Lucas Oskorep 8d4e51284d bugfixes 2025-10-17 01:56:09 -04:00
Lucas Oskorep 9f46347179 feat: cleanup 2025-10-17 01:26:57 -04:00
Lucas Oskorep 5a6c3ccd72 Finish adding debugging command and ability to swap the orientation of a container 2025-10-17 01:25:47 -04:00
Lucas Oskorep c977c61714 adding debug command 2025-10-17 01:09:13 -04:00
Lucas Oskorep e615efceb9 feat: removing prettyborders zip 2025-10-17 00:08:57 -04:00
Lucas Oskorep 88623f32d7 feat: update devkit command 2025-10-16 03:44:33 -04:00
Lucas Oskorep 265ff05436 upgrade to gnome 49 2025-09-24 00:55:24 -04:00
Lucas Oskorep 2b86856a97 feat: remove crap code 2025-05-20 18:37:15 -04:00
Lucas Oskorep a858af73f4 fix: allow windows to be moved in the overview 2025-05-20 01:59:08 -04:00
Lucas Oskorep ecb5a568cd fix: bug with window manager resizing a window during grab ops for 1 frame when the background had to be tiled 2025-05-20 01:48:34 -04:00
Lucas Oskorep 5e9bc796ea feat: enable the window manager to be able to drag across monitors and support keybindings propperly in the extension settings 2025-05-20 01:20:48 -04:00
Lucas Oskorep 04f402c686 feat: upgrade packages and set parent for windows on add 2025-05-19 21:43:09 -04:00
Lucas Oskorep 1d3d9dc402 feat: add ability to change ordering of monitors 2025-05-16 02:58:51 -04:00
Lucas Oskorep c7f45ecf3b feat: refactored to monitor -> workspace -> container -> window workflow 2025-05-16 02:01:11 -04:00
Lucas Oskorep c23b9113ab feat: adding support for workspaces 2025-05-16 00:19:49 -04:00
Lucas Oskorep 50ceb02124 feat: refactoring 2025-05-04 17:17:33 -04:00
Lucas Oskorep 717c240d70 feat: fixed display signal handling on disable 2025-05-02 01:31:46 -04:00
Lucas Oskorep 822a7bd2e4 Merge branch 'feat/fix-login-issues' 2025-04-30 00:06:03 -04:00
Lucas Oskorep 4543c98de8 feat: adding fix for minimized windows still taking up space 2025-04-30 00:05:46 -04:00
Lucas Oskorep d59a0fef6d feat: set nvm version 2025-04-19 02:18:32 +00:00
Lucas Oskorep ed661b3fa6 feat: attempting to fix windows lost on logout 2025-04-18 17:33:02 -04:00
Lucas Oskorep 6a19b77742 feat: initial commit with multi-monitor support 2025-04-18 03:22:35 -04:00
Lucas Oskorep 7b0f37f3f9 fix 2025-04-18 01:57:45 -04:00
Lucas Oskorep e1e240924a feat: first draft of everything working single monitor with just mouse commands 2025-04-18 01:57:29 -04:00
Lucas Oskorep 185a8e233c feat: adding in demo settings page for gnome extensions 2025-04-05 23:55:46 -04:00
Lucas Oskorep 84777c4db1 feat: remove prefs 2025-04-03 02:28:54 -04:00
Lucas Oskorep fe4558d628 feat: update gschema 2025-04-03 02:27:55 -04:00
Lucas Oskorep c8a453f329 feat: adding initial source code 2025-04-03 02:24:40 -04:00
Lucas Oskorep 0ddac224fb feat: readme 2025-04-03 02:23:46 -04:00
18 changed files with 1723 additions and 2430 deletions

No files matched your search

+1 -1
View File
@@ -31,7 +31,7 @@ jobs:
apt-get install -y libglib2.0-dev glib-networking zip
- name: Install project dependencies
run: pnpm install --ignore-scripts
run: pnpm install
- name: Run unit tests
run: just test
-3
View File
@@ -1,3 +0,0 @@
[tools]
node = "26"
pnpm = "12.3.4"
+1
View File
@@ -0,0 +1 @@
24
-62
View File
@@ -28,65 +28,3 @@ MacOS tiling WMs, mainly [Aerospace](https://github.com/nikitabobko/AeroSpace) (
- complicated window dragging features and uis
- Aerospace supports control + drag to combine windows while moving with the mouse, and normal window dragging.
## Installation
Aerospike isn't on the GNOME extension store yet, so install it from source.
This builds the extension locally and drops it into your user's extension dir.
Requires [just](https://github.com/casey/just) as the command runner, plus the
same build toolchain used for development (see [Development](#development)):
[mise](https://mise.jdx.dev/) for managing tool versions (`node` and `pnpm`),
and `glib2` for `glib-compile-schemas`.
Arch Linux:
```bash
sudo pacman -S git just mise glib2 # mise needs its shell hook: https://mise.jdx.dev/getting-started.html#shells
```
Clone and install:
```bash
git clone https://github.com/lucasoskorep/aerospike-gnome
cd aerospike-gnome
mise install
just install
```
After installing from source, enable it (toggle in the Extensions app, or):
```bash
gnome-extensions enable aerospike@lucaso.io
```
Re-login or restart the shell (`Alt+F2` → `r` on X11) to pick it up.
## Development
Building and debugging locally needs a few extra tools:
- `just` — the command runner
- `mise` — runtime & tool manager (pins `node` and `pnpm` in `.mise.toml`)
- `glib2` — provides `glib-compile-schemas` for compiling the settings schema
Arch Linux:
```bash
sudo pacman -S just mise glib2
```
Install the pinned tools with mise (defined in `.mise.toml`):
```bash
mise install
```
Then:
```bash
just install # install deps + build + drop into the extension dir
just lint # lint
just test # run the test suite
just test-watch # run tests in watch mode
just live-debug # tail gnome-shell logs while you poke at it
```
+10 -12
View File
@@ -1,13 +1,11 @@
import "@girs/gjs/ambient";
import "@girs/gjs";
import "@girs/gjs/dom";
import "@girs/glib-2.0/ambient";
import "@girs/gio-2.0/ambient";
import "@girs/gobject-2.0/ambient";
import "@girs/gtk-4.0/ambient";
import "@girs/gdk-4.0/ambient";
import "@girs/adw-1/ambient";
import "@girs/pango-1.0/ambient";
import "@girs/clutter-51/ambient";
import "@girs/st-51/ambient";
import "@girs/meta-51/ambient";
import "@girs/shell-51/ambient";
import "@girs/gnome-shell/ambient";
import "@girs/gnome-shell/extensions/global";
// Extend Meta.Window with our custom property
declare namespace Meta {
interface Window {
_aerospikeData?: any;
}
}
-30
View File
@@ -1,30 +0,0 @@
import eslint from "@eslint/js";
import tseslint from "typescript-eslint";
import jsdoc from "eslint-plugin-jsdoc";
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommended,
jsdoc.configs["flat/recommended-typescript"],
{
languageOptions: {
parserOptions: {
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
rules: {
"jsdoc/require-jsdoc": "off",
"jsdoc/require-param-description": "off",
"jsdoc/require-returns-description": "off",
"jsdoc/require-returns": "off",
"@typescript-eslint/no-unused-vars": [
"warn",
{ argsIgnorePattern: "^_", varsIgnorePattern: "^_" },
],
},
},
{
ignores: ["dist/", "node_modules/", "*.js"],
},
);
+1 -7
View File
@@ -8,7 +8,7 @@ packages:
build: packages && build-schemas
rm -rf dist/*
pnpm run build
pnpm exec tsc
cp metadata.json dist/
cp stylesheet.css dist/
mkdir -p dist/schemas
@@ -47,12 +47,6 @@ test-coverage:
ci-local:
act -W .gitea/workflows/build.yaml
lint:
pnpm run lint
clean:
pnpm run clean
#pack: build
# gnome-extensions pack dist \
# --force \
+3 -5
View File
@@ -1,14 +1,12 @@
{
"name": "Aerospike WM",
"name": "aerospike",
"description": "I3 Like Tiling Window Manager for Gnome",
"uuid": "aerospike@lucaso.io",
"settings-schema": "org.gnome.shell.extensions.aerospike",
"shell-version": [
"48",
"49",
"50",
"51"
"49"
],
"gettext-domain": "aerospike@lucaso.io",
"url": "https://github.com/lucasoskorep/aerospike-gnome"
"url": "https://gitea.chaosdev.gay/lucasoskorep/aerospike@lucaso.io"
}
+35 -28
View File
@@ -1,8 +1,7 @@
{
"name": "aerospike",
"version": "0.2.5",
"description": "Simple, Opinionated Tiling Window Manager for Gnome written in Typescript",
"packageManager": "pnpm@12.3.4",
"version": "0.2.1",
"description": "A TypeScript GNOME Extension for Pretty Borders",
"type": "module",
"private": true,
"repository": {
@@ -12,39 +11,47 @@
"author": "Lucas Oskorep <lucas.oskorep@gmail.com>",
"license": "GPL-3.0-only",
"bugs": {
"url": "https://github.com/lucasoskorep/aerospike-gnome/issues"
"url": "https://github.com/example/my-extension/issues"
},
"homepage": "https://github.com/lucasoskorep/aerospike-gnome/#readme",
"homepage": "https://github.com/example/my-extension#readme",
"sideEffects": false,
"scripts": {
"build": "tsc",
"clean": "rm -rf dist/*",
"lint": "eslint .",
"test": "jest",
"test:watch": "jest --watch",
"test:coverage": "jest --coverage"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@girs/adw-1": "^5.5.0",
"@girs/clutter-51": "^5.5.0",
"@girs/gio-2.0": "^5.5.0",
"@girs/gjs": "^5.5.0",
"@girs/glib-2.0": "^5.5.0",
"@girs/gobject-2.0": "^5.5.0",
"@girs/gdk-4.0": "^5.5.0",
"@girs/gtk-4.0": "^5.5.0",
"@girs/meta-51": "^5.5.0",
"@girs/pango-1.0": "^5.5.0",
"@girs/shell-51": "^5.5.0",
"@girs/st-51": "^5.5.0",
"@jest/globals": "^30.5.2",
"@girs/gjs": "4.0.0-beta.38",
"@girs/gnome-shell": "49.1.0",
"@jest/globals": "^30.0.0",
"@types/jest": "^30.0.0",
"eslint": "^10.12.0",
"eslint-plugin-jsdoc": "^65.3.4",
"jest": "^30.5.2",
"ts-jest": "^29.4.14",
"typescript": "^6.0.3",
"typescript-eslint": "^8.71.2"
"eslint": "^10.0.0",
"eslint-plugin-jsdoc": "^62.0.0",
"jest": "^30.0.0",
"ts-jest": "^29.1.2",
"typescript": "^5.9.2"
},
"dependencies": {
"@girs/mtk-17": "17.0.0-4.0.0-beta.38"
},
"pnpm": {
"overrides": {
"@girs/cairo-1.0": "1.0.0-4.0.0-beta.38",
"@girs/freetype2-2.0": "2.0.0-4.0.0-beta.38",
"@girs/gdk-4.0": "4.0.0-4.0.0-beta.38",
"@girs/gdkpixbuf-2.0": "2.0.0-4.0.0-beta.38",
"@girs/gio-2.0": "2.86.0-4.0.0-beta.38",
"@girs/gjs": "4.0.0-beta.38",
"@girs/glib-2.0": "2.86.0-4.0.0-beta.38",
"@girs/gmodule-2.0": "2.0.0-4.0.0-beta.38",
"@girs/gobject-2.0": "2.86.0-4.0.0-beta.38",
"@girs/graphene-1.0": "1.0.0-4.0.0-beta.38",
"@girs/gsk-4.0": "4.0.0-4.0.0-beta.38",
"@girs/gtk-4.0": "4.20.1-4.0.0-beta.38",
"@girs/harfbuzz-0.0": "11.5.0-4.0.0-beta.38",
"@girs/mtk-17": "17.0.0-4.0.0-beta.38",
"@girs/pango-1.0": "1.57.0-4.0.0-beta.38",
"@girs/pangocairo-1.0": "1.0.0-4.0.0-beta.38"
}
}
}
+1669 -2110
View File
File diff suppressed because it is too large. Load diff
-5
View File
@@ -1,5 +0,0 @@
allowBuilds:
'@parcel/watcher': true
unrs-resolver: true
minimumReleaseAgeExclude:
- eslint-plugin-jsdoc@65.3.4
-1
View File
@@ -173,7 +173,6 @@ export default class AerospikeExtensions extends ExtensionPreferences {
if (!!value) {
const mappings = value.split(',').map((x) => {
const [, key, mods] = Gtk.accelerator_parse(x);
if (mods === null) return false;
return Gtk.accelerator_valid(key, mods) && Gtk.accelerator_name(key, mods);
});
// Filter out any false values to ensure we only have strings
+1 -3
View File
@@ -21,9 +21,7 @@ export class TabBar {
this._onTabClicked = onTabClicked;
this._bar = new St.BoxLayout({
style_class: 'aerospike-tab-bar',
// `vertical` was removed from St widgets in GNOME Shell 51 (deprecated
// in 48); `orientation` is its replacement and exists in 48 and later.
orientation: Clutter.Orientation.HORIZONTAL,
vertical: false,
reactive: true,
can_focus: false,
track_hover: false,
-9
View File
@@ -47,10 +47,6 @@ export class WindowWrapper {
return this._window.get_frame_rect();
}
isFullscreen(): boolean {
return this._window.is_fullscreen();
}
getTabLabel(): string {
const rawAppName = this._window.get_wm_class() ?? '';
// Strip reverse-domain prefix (e.g. "org.gnome.Nautilus" -> "Nautilus")
@@ -144,11 +140,6 @@ export class WindowWrapper {
return;
}
if (this.isFullscreen()) {
Logger.info("STOPPED RESIZE BECAUSE WINDOW IS FULLSCREEN");
return;
}
const actor = this._window.get_compositor_private() as Clutter.Actor | null;
if (!actor) {
Logger.log("No actor available, can't resize safely yet");
+2 -3
View File
@@ -10,15 +10,14 @@
"target": "ES2022",
"lib": [
"ES2022"
]
],
},
"include": [
"ambient.d.ts",
"types/**/*.d.ts",
"prefs.ts",
"src/**/*"
],
"files": [
"extension.ts"
]
],
}
-20
View File
@@ -1,20 +0,0 @@
/**
* GNOME Shell runtime globals.
*
* The `global` object is created by the shell before an extension is loaded and
* has no `.gir`, so it is not covered by the generated `@girs/*-51` packages.
* Upstream ships these in `@girs/gnome-shell`, but its GNOME 51 build
* (51.0.0-alpha.1) is unpublished, and v50 pulls St-18/Meta-18 types that
* collide with the -51 packages. Declaring the few symbols we use keeps the
* project on GNOME 51 types and installable from the registry.
*
* @see https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/ui/environment.js
*/
import type Shell from "@girs/shell-51";
declare global {
/** Global shell object created by GNOME Shell on startup. */
const global: Shell.Global;
}
export {};
-131
View File
@@ -1,131 +0,0 @@
/**
* Ambient declarations for the GNOME Shell JavaScript modules this extension
* imports.
*
* Shell's JavaScript API has no `.gir`, so generated `@girs/*` types do not
* cover it. Upstream maintains those types in `@girs/gnome-shell`, but its
* GNOME 51 support (51.0.0-alpha.1) is unpublished on npm, and v50 depends on
* St-18/Meta-18 types that conflict with the -51 packages this project uses.
* Only the symbols actually imported here are declared; extend as needed.
*
* @see https://gitlab.gnome.org/GNOME/gnome-shell/-/tree/main/js/ui
*/
declare module "resource:///org/gnome/shell/extensions/extension.js" {
import type Gio from "@girs/gio-2.0";
/** Parsed contents of the extension's `metadata.json`. */
export interface ExtensionMetadata {
uuid: string;
name: string;
description: string;
"shell-version"?: string[];
"settings-schema"?: string;
"gettext-domain"?: string;
url?: string;
[key: string]: unknown;
}
/**
* Base class for an extension's `extension.js` default export.
*
* GNOME Shell 51 requires `disable()` to stay synchronous; returning a
* promise now throws.
*/
export class Extension {
constructor(metadata: ExtensionMetadata);
readonly metadata: ExtensionMetadata;
readonly uuid: string;
readonly path: string;
/** Returns a {@link Gio.Settings} for the extension's schema. */
getSettings(schema?: string | null, subdir?: string | null): Gio.Settings;
/** Marks the extension's settings as translatable. */
translateConfig(): void;
/** Opens the extension's preferences dialog, if it has one. */
openPreferences(): void;
enable(): void;
disable(): void;
}
}
declare module "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js" {
import type Gio from "@girs/gio-2.0";
import type Adw from "@girs/adw-1";
/** Marks a string for translation and returns the translation. */
export function gettext(str: string): string;
/** Pluralised form of {@link gettext}. */
export function ngettext(fid: string, fidPlural: string, n: number): string;
/** Context-sensitive form of {@link gettext}. */
export function pgettext(context: string, str: string): string;
/** Base class for an extension's `prefs.js` default export. */
export class ExtensionPreferences {
readonly metadata: Record<string, unknown>;
readonly uuid: string;
readonly path: string;
/** Returns a {@link Gio.Settings} for the extension's schema. */
getSettings(schema?: string | null, subdir?: string | null): Gio.Settings;
/** Marks the extension's settings as translatable. */
translateConfig(): void;
/** Called by the shell to populate the preferences window. */
fillPreferencesWindow(window: Adw.PreferencesWindow): Promise<void> | void;
}
}
declare module "resource:///org/gnome/shell/ui/main.js" {
import type Gio from "@girs/gio-2.0";
import type Meta from "@girs/meta-51";
import type Shell from "@girs/shell-51";
import type St from "@girs/st-51";
/** Window management helpers exposed to extensions. */
export interface ShellWM {
/**
* Registers a keybinding from an extension's schema and returns its id.
*/
addKeybinding(
name: string,
settings: Gio.Settings,
flags: Meta.KeyBindingFlags,
mode: Shell.ActionMode,
handler: () => void,
): number;
/** Removes a keybinding previously added by this extension. */
removeKeybinding(name: string): boolean;
}
/** The shell's layout manager. */
export interface LayoutManager {
/** Actor holding all non-window UI. */
readonly uiGroup: St.Widget;
/** Actor holding the window group. */
readonly windowGroup: St.Widget;
readonly panelBox: St.BoxLayout;
readonly monitorManager: Meta.MonitorManager;
readonly nMonitors: number;
}
/** The overview (window overview + search). */
export interface Overview extends St.Widget {
connect(signal: "showing" | "hiding" | "show-overview", callback: () => void): number;
}
export const wm: ShellWM;
export const layoutManager: LayoutManager;
export const overview: Overview;
/** Shows a notification in the message tray. */
export function notify(message: string): void;
}
View File
Whitespace-only changes.