From 48c0f82593ba69a21711bfc2f28b860ba8088c3b Mon Sep 17 00:00:00 2001 From: tom Date: Sun, 30 Jun 2024 19:14:50 +0100 Subject: [PATCH] init commit --- .gitignore | 2 ++ Makefile | 30 ++++++++++++++++++++++++++++++ ambient.d.ts | 4 ++++ extension.ts | 20 ++++++++++++++++++++ metadata.json | 10 ++++++++++ package.json | 21 +++++++++++++++++++++ prefs.ts | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ tsconfig.json | 20 ++++++++++++++++++++ 8 files changed, 158 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 ambient.d.ts create mode 100644 extension.ts create mode 100644 metadata.json create mode 100644 package.json create mode 100644 prefs.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8c1d8aa --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +**node_modules +package-lock.json diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1386b4e --- /dev/null +++ b/Makefile @@ -0,0 +1,30 @@ +NAME=floarbar +DOMAIN=tomtroeger.de + +.PHONY: all pack install clean + +all: dist/extension.js + +node_modules: package.json + npm install + +dist/extension.js dist/prefs.js: node_modules + tsc + +schemas/gschemas.compiled: schemas/org.gnome.shell.extensions.$(NAME).gschema.xml + glib-compile-schemas schemas + +$(NAME).zip: dist/extension.js dist/prefs.js schemas/gschemas.compiled + @cp -r schemas dist/ + @cp metadata.json dist/ + @(cd dist && zip ../$(NAME).zip -9r .) + +pack: $(NAME).zip + +install: $(NAME).zip + @touch ~/.local/share/gnome-shell/extensions/$(NAME)@$(DOMAIN) + @rm -rf ~/.local/share/gnome-shell/extensions/$(NAME)@$(DOMAIN) + @mv dist ~/.local/share/gnome-shell/extensions/$(NAME)@$(DOMAIN) + +clean: + @rm -rf dist node_modules $(NAME).zip \ No newline at end of file diff --git a/ambient.d.ts b/ambient.d.ts new file mode 100644 index 0000000..e0792f1 --- /dev/null +++ b/ambient.d.ts @@ -0,0 +1,4 @@ +import "@girs/gjs"; +import "@girs/gjs/dom"; +import "@girs/gnome-shell/ambient"; +import "@girs/gnome-shell/extensions/global"; diff --git a/extension.ts b/extension.ts new file mode 100644 index 0000000..3a43a7c --- /dev/null +++ b/extension.ts @@ -0,0 +1,20 @@ +import GLib from "gi://GLib"; +import Gio from "gi://Gio"; +import Meta from "gi://Meta"; +import Shell from "gi://Shell"; +import * as Main from "resource:///org/gnome/shell/ui/main.js"; +import { Extension } from "resource:///org/gnome/shell/extensions/extension.js"; + +export default class MyExtension extends Extension { + gsettings?: Gio.Settings; + animationsEnabled: boolean = true; + + enable() { + this.gsettings = this.getSettings(); + this.animationsEnabled = this.gsettings!.get_value("padding-inner").deepUnpack() ?? 8; + } + + disable() { + this.gsettings = undefined; + } +} diff --git a/metadata.json b/metadata.json new file mode 100644 index 0000000..c6df5c3 --- /dev/null +++ b/metadata.json @@ -0,0 +1,10 @@ +{ + "name": "float bar", + "description": "Adaptive floating topbar", + "uuid": "floatbar@tomtroeger.de", + "settings-schema": "org.gnome.shell.extensions.my-extension", + "shell-version": [ + "46" + ] + } + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..a66282e --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "floatbar", + "version": "0.0.0", + "description": "A TypeScript GNOME Extension", + "type": "module", + "private": true, + "repository": {}, + "author": "Tom Tröger ", + "license": "LGPL-3.0-or-later", + "bugs": {}, + "sideEffects": false, + "devDependencies": { + "eslint": "^9.6.0", + "eslint-plugin-jsdoc": "^48.5.0", + "typescript": "^5.5.2" + }, + "dependencies": { + "@girs/gjs": "^4.0.0-beta.5", + "@girs/gnome-shell": "^46.0.0-beta8" + } +} diff --git a/prefs.ts b/prefs.ts new file mode 100644 index 0000000..9499e9f --- /dev/null +++ b/prefs.ts @@ -0,0 +1,51 @@ +import Gtk from "gi://Gtk"; +import Adw from "gi://Adw"; +import Gio from "gi://Gio"; +import { ExtensionPreferences, gettext as _ } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js"; + +export default class GnomeRectanglePreferences extends ExtensionPreferences { + _settings?: Gio.Settings; + + fillPreferencesWindow(window: Adw.PreferencesWindow) { + this._settings = this.getSettings(); + + const page = new Adw.PreferencesPage({ + title: _("General"), + iconName: "dialog-information-symbolic", + }); + + const animationGroup = new Adw.PreferencesGroup({ + title: _("Animation"), + description: _("Configure move/resize animation"), + }); + page.add(animationGroup); + + const animationEnabled = new Adw.SwitchRow({ + title: _("Enabled"), + subtitle: _("Wether to animate windows"), + }); + animationGroup.add(animationEnabled); + + const paddingGroup = new Adw.PreferencesGroup({ + title: _("Paddings"), + description: _("Configure the padding between windows"), + }); + page.add(paddingGroup); + + const paddingInner = new Adw.SpinRow({ + title: _("Inner"), + subtitle: _("Padding between windows"), + adjustment: new Gtk.Adjustment({ + lower: 0, + upper: 1000, + stepIncrement: 1, + }), + }); + paddingGroup.add(paddingInner); + + window.add(page); + + this._settings!.bind("animate", animationEnabled, "active", Gio.SettingsBindFlags.DEFAULT); + this._settings!.bind("padding-inner", paddingInner, "value", Gio.SettingsBindFlags.DEFAULT); + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..5ca135d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "./dist", + "sourceMap": false, + "strict": true, + "target": "ES2022", + "lib": [ + "ES2022" + ], + }, + "include": [ + "ambient.d.ts", + ], + "files": [ + "extension.ts", + "prefs.ts" + ], + } \ No newline at end of file