diff options
| author | srdusr <trevorgray@srdusr.com> | 2025-08-30 19:22:59 +0200 |
|---|---|---|
| committer | srdusr <trevorgray@srdusr.com> | 2025-08-30 19:22:59 +0200 |
| commit | 19120d4f9761c67d99ed1ce3da6084b83f5a49c9 (patch) | |
| tree | f234cad1bdad88114a63c9702144da487024967a /.config/ags/lib/utils.ts | |
| parent | 5928998af5404ae2be84c6cecc10ebf84bd3f3ed (diff) | |
| download | dotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.tar.gz dotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.zip | |
Linux-specific dotfiles
Diffstat (limited to '.config/ags/lib/utils.ts')
| -rw-r--r-- | .config/ags/lib/utils.ts | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/.config/ags/lib/utils.ts b/.config/ags/lib/utils.ts deleted file mode 100644 index f3ff2e3..0000000 --- a/.config/ags/lib/utils.ts +++ /dev/null @@ -1,113 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { type Application } from "types/service/applications" -import icons, { substitutes } from "./icons" -import Gtk from "gi://Gtk?version=3.0" -import Gdk from "gi://Gdk" -import GLib from "gi://GLib?version=2.0" - -export const HOME = GLib.get_home_dir(); - -export type Binding<T> = import("types/service").Binding<any, any, T> - -/** - * @returns substitute icon || name || fallback icon - */ -export function icon(name: string | null, fallback = icons.missing) { - if (!name) - return fallback || "" - - if (GLib.file_test(name, GLib.FileTest.EXISTS)) - return name - - const icon = (substitutes[name] || name) - if (Utils.lookUpIcon(icon)) - return icon - - print(`no icon substitute "${icon}" for "${name}", fallback: "${fallback}"`) - return fallback -} - -/** - * @returns execAsync(["bash", "-c", cmd]) - */ -export async function bash(strings: TemplateStringsArray | string, ...values: unknown[]) { - const cmd = typeof strings === "string" ? strings : strings - .flatMap((str, i) => str + `${values[i] ?? ""}`) - .join("") - - return Utils.execAsync(["bash", "-c", cmd]).catch(err => { - console.error(cmd, err) - return "" - }) -} - -/** - * @returns execAsync(cmd) - */ -export async function sh(cmd: string | string[]) { - return Utils.execAsync(cmd).catch(err => { - console.error(typeof cmd === "string" ? cmd : cmd.join(" "), err) - return "" - }) -} - -export function forMonitors(widget: (monitor: number) => Gtk.Window) { - const n = Gdk.Display.get_default()?.get_n_monitors() || 1 - return range(n, 0).map(widget).flat(1) -} - -/** - * @returns [start...length] - */ -export function range(length: number, start = 1) { - return Array.from({ length }, (_, i) => i + start) -} - -/** - * @returns true if all of the `bins` are found - */ -export function dependencies(...bins: string[]) { - const missing = bins.filter(bin => { - return !Utils.exec(`which ${bin}`) - }) - - if (missing.length > 0) { - console.warn("missing dependencies:", missing.join(", ")) - Utils.notify(`missing dependencies: ${missing.join(", ")}`) - } - - return missing.length === 0 -} - -/** - * run app detached - */ -export function launchApp(app: Application) { - const exe = app.executable - .split(/\s+/) - .filter(str => !str.startsWith("%") && !str.startsWith("@")) - .join(" ") - - bash(`${exe} &`) - app.frequency += 1 -} - -/** - * to use with drag and drop - */ -export function createSurfaceFromWidget(widget: Gtk.Widget) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const cairo = imports.gi.cairo as any - const alloc = widget.get_allocation() - const surface = new cairo.ImageSurface( - cairo.Format.ARGB32, - alloc.width, - alloc.height, - ) - const cr = new cairo.Context(surface) - cr.setSourceRGBA(255, 255, 255, 0) - cr.rectangle(0, 0, alloc.width, alloc.height) - cr.fill() - widget.draw(cr) - return surface -} |
