aboutsummaryrefslogtreecommitdiff
path: root/.config/ags/widget/launcher/ShRun.ts
diff options
context:
space:
mode:
authorsrdusr <trevorgray@srdusr.com>2025-08-30 19:22:59 +0200
committersrdusr <trevorgray@srdusr.com>2025-08-30 19:22:59 +0200
commit19120d4f9761c67d99ed1ce3da6084b83f5a49c9 (patch)
treef234cad1bdad88114a63c9702144da487024967a /.config/ags/widget/launcher/ShRun.ts
parent5928998af5404ae2be84c6cecc10ebf84bd3f3ed (diff)
downloaddotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.tar.gz
dotfiles-19120d4f9761c67d99ed1ce3da6084b83f5a49c9.zip
Linux-specific dotfiles
Diffstat (limited to '.config/ags/widget/launcher/ShRun.ts')
-rw-r--r--.config/ags/widget/launcher/ShRun.ts89
1 files changed, 0 insertions, 89 deletions
diff --git a/.config/ags/widget/launcher/ShRun.ts b/.config/ags/widget/launcher/ShRun.ts
deleted file mode 100644
index c4215ef..0000000
--- a/.config/ags/widget/launcher/ShRun.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-import icons from "lib/icons"
-import options from "options"
-import { bash, dependencies } from "lib/utils"
-
-const iconVisible = Variable(false)
-
-const MAX = options.launcher.sh.max
-const BINS = `${Utils.CACHE_DIR}/binaries`
-bash("{ IFS=:; ls -H $PATH; } | sort ")
- .then(bins => Utils.writeFile(bins, BINS))
-
-async function query(filter: string) {
- if (!dependencies("fzf"))
- return [] as string[]
-
- return bash(`cat ${BINS} | fzf -f ${filter} | head -n ${MAX}`)
- .then(str => Array.from(new Set(str.split("\n").filter(i => i)).values()))
- .catch(err => { print(err); return [] })
-}
-
-function run(args: string) {
- Utils.execAsync(args)
- .then(out => {
- print(`:sh ${args.trim()}:`)
- print(out)
- })
- .catch(err => {
- Utils.notify("ShRun Error", err, icons.app.terminal)
- })
-}
-
-function Item(bin: string) {
- return Widget.Box(
- {
- attribute: { bin },
- vertical: true,
- },
- Widget.Separator(),
- Widget.Button({
- child: Widget.Label({
- label: bin,
- hpack: "start",
- }),
- class_name: "sh-item",
- on_clicked: () => {
- Utils.execAsync(bin)
- App.closeWindow("launcher")
- },
- }),
- )
-}
-
-export function Icon() {
- const icon = Widget.Icon({
- icon: icons.app.terminal,
- class_name: "spinner",
- })
-
- return Widget.Revealer({
- transition: "slide_left",
- child: icon,
- reveal_child: iconVisible.bind(),
- })
-}
-
-export function ShRun() {
- const list = Widget.Box<ReturnType<typeof Item>>({
- vertical: true,
- })
-
- const revealer = Widget.Revealer({
- child: list,
- })
-
- async function filter(term: string) {
- iconVisible.value = Boolean(term)
-
- if (!term)
- revealer.reveal_child = false
-
- if (term.trim()) {
- const found = await query(term)
- list.children = found.map(Item)
- revealer.reveal_child = true
- }
- }
-
- return Object.assign(revealer, { filter, run })
-}