Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9633cfbd48 | ||
|
|
6729cb118e | ||
|
|
c3d98b7b48 | ||
|
|
02c66359d9 | ||
|
|
00263f6b81 | ||
|
|
55e06d4f60 | ||
|
|
4c994943cd | ||
|
|
c9ef3f404a | ||
|
|
2fa02eac85 | ||
|
|
6dfb107ad9 | ||
|
|
e2fc4e7127 | ||
|
|
bf7fe98b05 | ||
|
|
4a2067811c | ||
|
|
e49b923667 | ||
|
|
75f2f107de |
No files matched your search
@@ -31,7 +31,7 @@ jobs:
|
|||||||
apt-get install -y libglib2.0-dev glib-networking zip
|
apt-get install -y libglib2.0-dev glib-networking zip
|
||||||
|
|
||||||
- name: Install project dependencies
|
- name: Install project dependencies
|
||||||
run: pnpm install
|
run: pnpm install --ignore-scripts
|
||||||
|
|
||||||
- name: Run unit tests
|
- name: Run unit tests
|
||||||
run: just test
|
run: just test
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[tools]
|
||||||
|
node = "26"
|
||||||
|
pnpm = "12.3.4"
|
||||||
@@ -1 +0,0 @@
|
|||||||
25
|
|
||||||
@@ -28,3 +28,65 @@ MacOS tiling WMs, mainly [Aerospace](https://github.com/nikitabobko/AeroSpace) (
|
|||||||
- complicated window dragging features and uis
|
- complicated window dragging features and uis
|
||||||
- Aerospace supports control + drag to combine windows while moving with the mouse, and normal window dragging.
|
- 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
|
||||||
|
```
|
||||||
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
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"],
|
||||||
|
},
|
||||||
|
);
|
||||||
+4
-3
@@ -1,12 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "aerospike",
|
"name": "Aerospike WM",
|
||||||
"description": "I3 Like Tiling Window Manager for Gnome",
|
"description": "I3 Like Tiling Window Manager for Gnome",
|
||||||
"uuid": "aerospike@lucaso.io",
|
"uuid": "aerospike@lucaso.io",
|
||||||
"settings-schema": "org.gnome.shell.extensions.aerospike",
|
"settings-schema": "org.gnome.shell.extensions.aerospike",
|
||||||
"shell-version": [
|
"shell-version": [
|
||||||
"48",
|
"48",
|
||||||
"49"
|
"49",
|
||||||
|
"50"
|
||||||
],
|
],
|
||||||
"gettext-domain": "aerospike@lucaso.io",
|
"gettext-domain": "aerospike@lucaso.io",
|
||||||
"url": "https://gitea.chaosdev.gay/lucasoskorep/aerospike@lucaso.io"
|
"url": "https://github.com/lucasoskorep/aerospike-gnome"
|
||||||
}
|
}
|
||||||
+13
-30
@@ -1,7 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "aerospike",
|
"name": "aerospike",
|
||||||
"version": "0.2.2",
|
"version": "0.2.4",
|
||||||
"description": "Simple, Opinionated Tiling Window Manager for Gnome written in Typescript",
|
"description": "Simple, Opinionated Tiling Window Manager for Gnome written in Typescript",
|
||||||
|
"packageManager": "pnpm@12.3.4",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -24,37 +25,19 @@
|
|||||||
"test:coverage": "jest --coverage"
|
"test:coverage": "jest --coverage"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@girs/gjs": "4.0.0-beta.38",
|
"@eslint/js": "^10.0.1",
|
||||||
"@girs/gnome-shell": "49.1.0",
|
"@girs/gjs": "^4.7.0",
|
||||||
"@jest/globals": "^30.0.0",
|
"@girs/gnome-shell": "^50.0.4",
|
||||||
|
"@jest/globals": "^30.5.1",
|
||||||
"@types/jest": "^30.0.0",
|
"@types/jest": "^30.0.0",
|
||||||
"eslint": "^10.0.0",
|
"eslint": "^10.10.0",
|
||||||
"eslint-plugin-jsdoc": "^62.0.0",
|
"eslint-plugin-jsdoc": "^64.3.6",
|
||||||
"jest": "^30.0.0",
|
"jest": "^30.5.1",
|
||||||
"ts-jest": "^29.1.2",
|
"ts-jest": "^29.4.12",
|
||||||
"typescript": "^5.9.2"
|
"typescript": "^5.9.3",
|
||||||
|
"typescript-eslint": "^8.69.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@girs/mtk-17": "17.0.0-4.0.0-beta.38"
|
"@girs/mtk-17": "17.0.0-4.0.4"
|
||||||
},
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Generated
+2247
-1635
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,3 @@
|
|||||||
|
allowBuilds:
|
||||||
|
'@parcel/watcher': true
|
||||||
|
unrs-resolver: true
|
||||||
@@ -173,6 +173,7 @@ export default class AerospikeExtensions extends ExtensionPreferences {
|
|||||||
if (!!value) {
|
if (!!value) {
|
||||||
const mappings = value.split(',').map((x) => {
|
const mappings = value.split(',').map((x) => {
|
||||||
const [, key, mods] = Gtk.accelerator_parse(x);
|
const [, key, mods] = Gtk.accelerator_parse(x);
|
||||||
|
if (mods === null) return false;
|
||||||
return Gtk.accelerator_valid(key, mods) && Gtk.accelerator_name(key, mods);
|
return Gtk.accelerator_valid(key, mods) && Gtk.accelerator_name(key, mods);
|
||||||
});
|
});
|
||||||
// Filter out any false values to ensure we only have strings
|
// Filter out any false values to ensure we only have strings
|
||||||
|
|||||||
@@ -47,6 +47,10 @@ export class WindowWrapper {
|
|||||||
return this._window.get_frame_rect();
|
return this._window.get_frame_rect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isFullscreen(): boolean {
|
||||||
|
return this._window.is_fullscreen();
|
||||||
|
}
|
||||||
|
|
||||||
getTabLabel(): string {
|
getTabLabel(): string {
|
||||||
const rawAppName = this._window.get_wm_class() ?? '';
|
const rawAppName = this._window.get_wm_class() ?? '';
|
||||||
// Strip reverse-domain prefix (e.g. "org.gnome.Nautilus" -> "Nautilus")
|
// Strip reverse-domain prefix (e.g. "org.gnome.Nautilus" -> "Nautilus")
|
||||||
@@ -140,6 +144,11 @@ export class WindowWrapper {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.isFullscreen()) {
|
||||||
|
Logger.info("STOPPED RESIZE BECAUSE WINDOW IS FULLSCREEN");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const actor = this._window.get_compositor_private() as Clutter.Actor | null;
|
const actor = this._window.get_compositor_private() as Clutter.Actor | null;
|
||||||
if (!actor) {
|
if (!actor) {
|
||||||
Logger.log("No actor available, can't resize safely yet");
|
Logger.log("No actor available, can't resize safely yet");
|
||||||
|
|||||||
Whitespace-only changes.
Reference in new issue
Block a user