feat: uwsm app -> app2unit

Also xdg-open -> app2unit
This commit is contained in:
2 * r + 2 * t 2025-04-04 18:30:08 +11:00
parent df1928e0d0
commit aed36b160f
6 changed files with 19 additions and 16 deletions

View file

@ -7,7 +7,7 @@ import { bindCurrentTime, osIcon } from "@/utils/system";
import type { AstalWidget } from "@/utils/types";
import { setupCustomTooltip } from "@/utils/widgets";
import ScreenCorner from "@/widgets/screencorner";
import { execAsync, Variable } from "astal";
import { execAsync, GLib, Variable } from "astal";
import { bind, kebabify } from "astal/binding";
import { App, Astal, Gtk, Widget } from "astal/gtk3";
import { bar as config } from "config";
@ -294,13 +294,16 @@ const Network = ({ monitor }: { monitor: Monitor }) => (
const network = AstalNetwork.get_default();
if (event.button === Astal.MouseButton.PRIMARY) switchPane(monitor, "connectivity");
else if (event.button === Astal.MouseButton.SECONDARY) network.wifi.enabled = !network.wifi.enabled;
else if (event.button === Astal.MouseButton.MIDDLE)
execAsync("uwsm app -- gnome-control-center wifi").catch(() => {
else if (event.button === Astal.MouseButton.MIDDLE) {
if (GLib.find_program_in_path("gnome-control-center"))
execAsync("app2unit -- gnome-control-center wifi").catch(console.error);
else {
network.wifi.scan();
execAsync(
"uwsm app -- foot -T nmtui -- fish -c 'sleep .1; set -e COLORTERM; TERM=xterm-old nmtui connect'"
"app2unit -- foot -T nmtui -- fish -c 'sleep .1; set -e COLORTERM; TERM=xterm-old nmtui connect'"
).catch(() => {}); // Ignore errors
});
}
}
}}
setup={self => {
const network = AstalNetwork.get_default();
@ -399,7 +402,7 @@ const BluetoothDevice = ({ monitor, device }: { monitor: Monitor; device: AstalB
else if (event.button === Astal.MouseButton.SECONDARY)
device.disconnect_device((_, res) => device.disconnect_device_finish(res));
else if (event.button === Astal.MouseButton.MIDDLE)
execAsync("uwsm app -- blueman-manager").catch(console.error);
execAsync("app2unit -- blueman-manager").catch(console.error);
}}
setup={self => setupCustomTooltip(self, bind(device, "alias"))}
>
@ -418,7 +421,7 @@ const Bluetooth = ({ monitor }: { monitor: Monitor }) => (
if (event.button === Astal.MouseButton.PRIMARY) switchPane(monitor, "connectivity");
else if (event.button === Astal.MouseButton.SECONDARY) AstalBluetooth.get_default().toggle();
else if (event.button === Astal.MouseButton.MIDDLE)
execAsync("uwsm app -- blueman-manager").catch(console.error);
execAsync("app2unit -- blueman-manager").catch(console.error);
}}
setup={self => {
const bluetooth = AstalBluetooth.get_default();

View file

@ -149,7 +149,7 @@ const actions = (mode: Variable<Mode>, entry: Widget.Entry): ActionMap => ({
View: () => {
const client = AstalHyprland.get_default().clients.find(c => c.class === "Todoist");
if (client) client.focus();
else execAsync("uwsm app -- todoist").catch(console.error);
else execAsync("app2unit -- todoist").catch(console.error);
},
},
});

View file

@ -41,7 +41,7 @@ const FileResult = ({ path }: { path: string }) => (
execAsync([
"bash",
"-c",
`dbus-send --session --dest=org.freedesktop.FileManager1 --type=method_call /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:"file://${path}" string:"" || xdg-open "${path}"`,
`dbus-send --session --dest=org.freedesktop.FileManager1 --type=method_call /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:'file://${path}' string:'' || app2unit -O '${path}'`,
]).catch(console.error);
close();
}}

View file

@ -9,11 +9,11 @@ const constructItem = (label: string, exec: string, quiet = true) =>
const Update = (update: IUpdate) => {
const menu = new Gtk.Menu();
menu.append(constructItem("Open info in browser", `xdg-open '${update.url}'`, false));
menu.append(constructItem("Open info in terminal", `uwsm app -- foot -H -- pacman -Qi ${update.name}`));
menu.append(constructItem("Open info in browser", `app2unit -O '${update.url}'`, false));
menu.append(constructItem("Open info in terminal", `app2unit -- foot -H -- pacman -Qi ${update.name}`));
menu.append(new Gtk.SeparatorMenuItem({ visible: true }));
menu.append(constructItem("Reinstall", `uwsm app -- foot -H -- yay -S ${update.name}`));
menu.append(constructItem("Remove with dependencies", `uwsm app -- foot -H -- yay -Rns ${update.name}`));
menu.append(constructItem("Reinstall", `app2unit -- foot -H -- yay -S ${update.name}`));
menu.append(constructItem("Remove with dependencies", `app2unit -- foot -H -- yay -Rns ${update.name}`));
return (
<button

View file

@ -370,7 +370,7 @@ export default class Weather extends GObject.Object {
icon: "dialog-warning-symbolic",
urgency: "critical",
actions: {
"Get API key": () => execAsync(["xdg-open", "https://www.weatherapi.com"]).catch(print),
"Get API key": () => execAsync(`app2unit -O 'https://www.weatherapi.com'`).catch(print),
},
});
}

View file

@ -16,11 +16,11 @@ const execToCmd = (app: AstalApps.Application) => {
export const launch = (app: AstalApps.Application) => {
let now = Date.now();
execAsync(["uwsm", "app", "--", app.entry]).catch(() => {
execAsync(["app2unit", "--", app.entry]).catch(() => {
// Try manual exec if launch fails (exits with error within 1 second)
if (Date.now() - now < 1000) {
now = Date.now();
execAsync(["uwsm", "app", "--", execToCmd(app)]).catch(() => {
execAsync(["app2unit", "--", execToCmd(app)]).catch(() => {
// Fallback to regular launch
if (Date.now() - now < 1000) {
app.frequency--; // Decrement frequency cause launch also increments it