Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions extensions/gnome-extensions/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
4 changes: 4 additions & 0 deletions extensions/gnome-extensions/.prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"printWidth": 120,
"singleQuote": false
}
9 changes: 9 additions & 0 deletions extensions/gnome-extensions/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## [1.0.0] - 2026-03-24

### Added

- Initial release.
- List installed GNOME Shell extensions with details (UUID, description, state, settings schema path).
- Enable and disable extensions.
- Open extension preferences dialog (hidden when no preferences are available).
- Official extension icons support.
69 changes: 69 additions & 0 deletions extensions/gnome-extensions/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Vicinae GNOME Extensions

Manage your GNOME Shell extensions directly from Vicinae.

## Requirements

- GNOME Shell environment
- `gnome-extensions` CLI tool
- `curl` command-line tool
- Internet connection (for extension screenshots)

> _Optional: dconf editor (for extension settings)_

### Install the requirements

Make sure the `gnome-extensions` CLI is installed. On most distros it's included with GNOME Shell. If not:

**Ubuntu**
```shell
sudo apt install gnome-shell-extensions curl
```

**Fedora**
```shell
sudo dnf install gnome-shell-extensions curl
```

**Arch**
```shell
sudo pacman -S gnome-shell-extensions curl
```

## Features

- List all installed GNOME extensions
- Enable/disable extensions with one click
- Open extension preferences
- Access extension settings
- Open the extension in Dconf Editor (if schema is available)
- View extension screenshots from extensions.gnome.org
- Copy extension UUID to clipboard
- Open extension's Homepage
- Search through extensions

## Usage

1. Run the `GNOME Extensions` command in Vicinae
2. Browse your installed extensions
3. Use actions to enable/disable or configure extensions
4. Press Enter to view extension details with screenshot

## Commands

| Command | Description |
| --- | --- |
| `GNOME Extensions` | List and manage installed GNOME Shell extensions |

## Preferences

- **Extension Manager Path** – Path to your extension manager command (default: `gnome-extensions`)
- **Show Disabled Extensions** – Include disabled extensions in the list

## Development

```bash
cd extensions/gnome-extensions
npm install
npm run dev
```
Binary file added extensions/gnome-extensions/assets/extensions.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
140 changes: 140 additions & 0 deletions extensions/gnome-extensions/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
import { defineConfig } from "eslint/config";
import globals from "globals";
import pluginEslintJs from "@eslint/js";
import pluginEslintReact from "eslint-plugin-react";
import stylistic from "@stylistic/eslint-plugin";
import pluginReactHooks from "eslint-plugin-react-hooks";
import raycastConfig from "@raycast/eslint-config";

export default defineConfig([
...raycastConfig,
{
files: ["**/*.{js,mjs,cjs,jsx,ts,tsx}"],
plugins: {
pluginEslintJs,
pluginEslintReact,
"@stylistic": stylistic,
},
extends: [pluginEslintJs.configs.recommended, pluginEslintReact.configs.flat.recommended],
languageOptions: {
parserOptions: {
ecmaFeatures: {
jsx: true,
},
},
globals: {
...globals.browser,
},
},
settings: {
react: {
pragma: "React",
version: "19.1",
defaultVersion: "19.1",
},
},
},
pluginReactHooks.configs.flat.recommended,
{
rules: {
yoda: ["error", "always"],
"arrow-body-style": ["error", "as-needed"],
"no-empty": ["error", { allowEmptyCatch: true }],
"no-multiple-empty-lines": 1,
"no-unused-vars": [
"error",
{
vars: "all",
args: "after-used",
caughtErrors: "none",
ignoreRestSiblings: false,
reportUsedIgnorePattern: false,
},
],
"@stylistic/semi": 0,
"@stylistic/comma-dangle": [
1,
{
arrays: "only-multiline",
objects: "only-multiline",
imports: "only-multiline",
exports: "only-multiline",
functions: "only-multiline",
},
],
"@stylistic/operator-linebreak": ["error", "before"],
"@stylistic/indent": ["error", 2, { SwitchCase: 1 }],
"@stylistic/space-before-function-paren": [
"error",
{
anonymous: "never",
named: "never",
asyncArrow: "always",
},
],
"@stylistic/arrow-parens": [
"error",
"as-needed",
{
requireForBlockBody: false,
},
],
"@stylistic/arrow-spacing": [
"error",
{
before: true,
after: true,
},
],
"@stylistic/no-mixed-spaces-and-tabs": 1,
"@stylistic/jsx-closing-bracket-location": 1,
"@stylistic/jsx-closing-tag-location": 1,
"@stylistic/jsx-curly-brace-presence": [1, "never"],
"@stylistic/jsx-curly-spacing": 1,
"@stylistic/jsx-equals-spacing": 1,
"@stylistic/jsx-first-prop-new-line": [1, "multiline-multiprop"],
// '@stylistic/jsx-indent': [1, 2, { // deprecated
// checkAttributes: true,
// indentLogicalExpressions: true,
// }],
"@stylistic/jsx-pascal-case": [
1,
{
allowAllCaps: false,
allowNamespace: true,
allowLeadingUnderscore: false,
},
],
"@stylistic/no-multi-spaces": 1,
"@stylistic/jsx-self-closing-comp": [
"error",
{
component: true,
html: true,
},
],
"@stylistic/jsx-wrap-multilines": [
1,
{
declaration: "parens-new-line",
assignment: "parens-new-line",
return: "parens-new-line",
arrow: "parens-new-line",
condition: "ignore",
logical: "parens-new-line",
prop: "parens-new-line",
propertyValue: "parens-new-line",
},
],
"@stylistic/jsx-tag-spacing": [
1,
{
closingSlash: "never",
beforeSelfClosing: "always",
afterOpening: "never",
beforeClosing: "allow",
},
],
},
},
]);
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading