Compare commits
59
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
696269d8b8 | ||
|
|
fa021b08eb | ||
|
|
8ed5f104b2 | ||
|
|
cbaa802797 | ||
|
|
e2a1792388 | ||
|
|
656e448927 | ||
|
|
93516b31fb | ||
|
|
918c07c419 | ||
|
|
15188b9990 | ||
|
|
19696298d0 | ||
|
|
4be7602316 | ||
|
|
8f6e8582c9 | ||
|
|
3d2da0a4bc | ||
|
|
a17441cda3 | ||
|
|
c4f5835424 | ||
|
|
7773c3b808 | ||
|
|
b8e861cf9e | ||
|
|
318ce6c064 | ||
|
|
1a4d8253f7 | ||
|
|
86786ba831 | ||
|
|
bfd027f6c3 | ||
|
|
b46810bc0f | ||
|
|
c4abd1e8e5 | ||
|
|
df9bc3e1eb | ||
|
|
90a4e19751 | ||
|
|
5da4001a32 | ||
|
|
9011cd48f2 | ||
|
|
e065acd37d | ||
|
|
b4afd6d4dc | ||
|
|
1ae379868b | ||
|
|
8d4e51284d | ||
|
|
9f46347179 | ||
|
|
5a6c3ccd72 | ||
|
|
c977c61714 | ||
|
|
e615efceb9 | ||
|
|
88623f32d7 | ||
|
|
265ff05436 | ||
|
|
2b86856a97 | ||
|
|
a858af73f4 | ||
|
|
ecb5a568cd | ||
|
|
5e9bc796ea | ||
|
|
04f402c686 | ||
|
|
1d3d9dc402 | ||
|
|
c7f45ecf3b | ||
|
|
c23b9113ab | ||
|
|
50ceb02124 | ||
|
|
717c240d70 | ||
|
|
822a7bd2e4 | ||
|
|
4543c98de8 | ||
|
|
d59a0fef6d | ||
|
|
ed661b3fa6 | ||
|
|
6a19b77742 | ||
|
|
7b0f37f3f9 | ||
|
|
e1e240924a | ||
|
|
185a8e233c | ||
|
|
84777c4db1 | ||
|
|
fe4558d628 | ||
|
|
c8a453f329 | ||
|
|
0ddac224fb |
No files matched your search
@@ -16,7 +16,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install pnpm and TypeScript
|
- name: Install pnpm and TypeScript
|
||||||
run: npm install -g pnpm typescript@5.8.3
|
run: npm install -g pnpm typescript@5.8.3
|
||||||
@@ -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 --ignore-scripts
|
run: pnpm install
|
||||||
|
|
||||||
- name: Run unit tests
|
- name: Run unit tests
|
||||||
run: just test
|
run: just test
|
||||||
@@ -57,7 +57,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Download artifact
|
- name: Download artifact
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
[tools]
|
|
||||||
node = "26"
|
|
||||||
pnpm = "12.3.4"
|
|
||||||
@@ -1,92 +1 @@
|
|||||||
# Aerospike Gnome (Tiling Window Manager)
|
# Aerospike Gnome (Tiling Window Manager)
|
||||||
|
|
||||||
Aerospike is a simple and opinionated tiling window manager for gnome.
|
|
||||||
|
|
||||||
This project takes inspiration from previous gnome tiling window managers such
|
|
||||||
as [forge](https://github.com/forge-ext/forge)
|
|
||||||
and [cosmic-shell](https://github.com/pop-os/gnome-shell-extension-pop-cosmic) as well as
|
|
||||||
MacOS tiling WMs, mainly [Aerospace](https://github.com/nikitabobko/AeroSpace) (not affiliated).
|
|
||||||
|
|
||||||
## Current Features
|
|
||||||
|
|
||||||
- Auto-tiling
|
|
||||||
- Accordion layouts with variable sizes
|
|
||||||
- Tabbed layouts
|
|
||||||
- Tree-based (albeit set depth of 2 for now) container-window paired layout similar to Aerospace
|
|
||||||
- Diagram for this is pending
|
|
||||||
|
|
||||||
## Planned functionality
|
|
||||||
|
|
||||||
- Full Keyboard control w/window movement
|
|
||||||
- Sub-containers (more tree layers than the 1 supported for now)
|
|
||||||
- Gap size customization
|
|
||||||
|
|
||||||
## Not currently planned
|
|
||||||
|
|
||||||
- Active window borders
|
|
||||||
- See my other extension for a rainbow or static border - [PrettyBorders](https://github.com//pretty-borders)
|
|
||||||
- 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
|
|
||||||
```
|
|
||||||
|
|
||||||
@@ -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"],
|
|
||||||
},
|
|
||||||
);
|
|
||||||
@@ -8,7 +8,7 @@ packages:
|
|||||||
|
|
||||||
build: packages && build-schemas
|
build: packages && build-schemas
|
||||||
rm -rf dist/*
|
rm -rf dist/*
|
||||||
pnpm run build
|
pnpm exec tsc
|
||||||
cp metadata.json dist/
|
cp metadata.json dist/
|
||||||
cp stylesheet.css dist/
|
cp stylesheet.css dist/
|
||||||
mkdir -p dist/schemas
|
mkdir -p dist/schemas
|
||||||
@@ -47,12 +47,6 @@ test-coverage:
|
|||||||
ci-local:
|
ci-local:
|
||||||
act -W .gitea/workflows/build.yaml
|
act -W .gitea/workflows/build.yaml
|
||||||
|
|
||||||
lint:
|
|
||||||
pnpm run lint
|
|
||||||
|
|
||||||
clean:
|
|
||||||
pnpm run clean
|
|
||||||
|
|
||||||
#pack: build
|
#pack: build
|
||||||
# gnome-extensions pack dist \
|
# gnome-extensions pack dist \
|
||||||
# --force \
|
# --force \
|
||||||
|
|||||||
+3
-4
@@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "Aerospike WM",
|
"name": "aerospike",
|
||||||
"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://github.com/lucasoskorep/aerospike-gnome"
|
"url": "https://gitea.chaosdev.gay/lucasoskorep/aerospike@lucaso.io"
|
||||||
}
|
}
|
||||||
+34
-20
@@ -1,8 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "aerospike",
|
"name": "aerospike",
|
||||||
"version": "0.2.4",
|
"version": "0.2.0",
|
||||||
"description": "Simple, Opinionated Tiling Window Manager for Gnome written in Typescript",
|
"description": "A TypeScript GNOME Extension for Pretty Borders",
|
||||||
"packageManager": "pnpm@12.3.4",
|
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"private": true,
|
"private": true,
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -10,34 +9,49 @@
|
|||||||
"url": "git+https://gitlab.com/lucasoskorep/aerospike"
|
"url": "git+https://gitlab.com/lucasoskorep/aerospike"
|
||||||
},
|
},
|
||||||
"author": "Lucas Oskorep <lucas.oskorep@gmail.com>",
|
"author": "Lucas Oskorep <lucas.oskorep@gmail.com>",
|
||||||
"license": "GPL-3.0-only",
|
"license": "LGPL-3.0-or-later",
|
||||||
"bugs": {
|
"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,
|
"sideEffects": false,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
|
||||||
"clean": "rm -rf dist/*",
|
|
||||||
"lint": "eslint .",
|
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"test:watch": "jest --watch",
|
"test:watch": "jest --watch",
|
||||||
"test:coverage": "jest --coverage"
|
"test:coverage": "jest --coverage"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^10.0.1",
|
"@girs/gjs": "4.0.0-beta.38",
|
||||||
"@girs/gjs": "^5.0.0",
|
"@girs/gnome-shell": "49.1.0",
|
||||||
"@girs/gnome-shell": "^50.0.4",
|
"@jest/globals": "^30.0.0",
|
||||||
"@jest/globals": "^30.5.1",
|
|
||||||
"@types/jest": "^30.0.0",
|
"@types/jest": "^30.0.0",
|
||||||
"eslint": "^10.10.0",
|
"eslint": "^10.0.0",
|
||||||
"eslint-plugin-jsdoc": "^64.3.6",
|
"eslint-plugin-jsdoc": "^62.0.0",
|
||||||
"jest": "^30.5.1",
|
"jest": "^30.0.0",
|
||||||
"ts-jest": "^29.4.12",
|
"ts-jest": "^29.1.2",
|
||||||
"typescript": "^7.0.0",
|
"typescript": "^5.9.2"
|
||||||
"typescript-eslint": "^8.69.0"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@girs/mtk-17": "17.0.0-4.0.4"
|
"@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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Generated
+1639
-2407
File diff suppressed because it is too large.
Load diff
@@ -1,3 +0,0 @@
|
|||||||
allowBuilds:
|
|
||||||
'@parcel/watcher': true
|
|
||||||
unrs-resolver: true
|
|
||||||
@@ -173,7 +173,6 @@ 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,10 +47,6 @@ 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")
|
||||||
@@ -144,11 +140,6 @@ 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