diff --git a/users/hu/packages/ags/config/config.js b/users/hu/packages/ags/config/config.js new file mode 100644 index 0000000..1aac540 --- /dev/null +++ b/users/hu/packages/ags/config/config.js @@ -0,0 +1,141 @@ +/* TODO: Make this more useful */ + +const hyprland = await Service.import("hyprland") +const notifications = await Service.import("notifications") +const mpris = await Service.import("mpris") +const audio = await Service.import("audio") +const systemtray = await Service.import("systemtray") + +const date = Variable("", { + poll: [1000, 'date "+%H:%M:%S"'], +}) + +function Workspaces() { + const activeId = hyprland.active.workspace.bind("id"); + const workspaces = hyprland.bind("workspaces").as((ws) => + ws.sort((a, b) => a.id - b.id) + .map(({ id }) => + Widget.Button({ + on_clicked: () => hyprland.messageAsync(`dispatch workspace ${id}`), + child: Widget.Label(`${id}`), + class_name: activeId.as((i) => `${i === id ? "focused" : ""}`), + }) + ) + ); + + return Widget.Box({ + class_name: "workspaces", + children: workspaces, + }) +} + +function Clock() { + return Widget.Label({ + class_name: "clock", + label: date.bind(), + }) +} + +function Notification() { + const popups = notifications.bind("popups") + return Widget.Box({ + class_name: "notification", + visible: popups.as(p => p.length > 0), + children: [ + Widget.Icon({ + icon: "preferences-system-notifications-symbolic", + }), + Widget.Label({ + label: popups.as(p => p[0]?.summary || ""), + }), + ], + }) +} + + +function Media() { + const label = Utils.watch("", mpris, "player-changed", () => { + if (mpris.players[0]) { + const { track_artists, track_title } = mpris.players[0] + return `${track_artists.join(", ")} - ${track_title}` + } else { + return "Nothing is playing" + } + }) + + return Widget.Button({ + class_name: "media", + on_primary_click: () => mpris.getPlayer("")?.playPause(), + on_scroll_up: () => mpris.getPlayer("")?.next(), + on_scroll_down: () => mpris.getPlayer("")?.previous(), + child: Widget.Label({ label }), + }) +} + +function SysTray() { + const items = systemtray.bind("items") + .as(items => items.map(item => Widget.Button({ + child: Widget.Icon({ icon: item.bind("icon") }), + on_primary_click: (_, event) => item.activate(event), + on_secondary_click: (_, event) => item.openMenu(event), + tooltip_markup: item.bind("tooltip_markup"), + }))) + + return Widget.Box({ + children: items, + }) +} + +function Left() { + return Widget.Box({ + spacing: 8, + children: [ + Workspaces(), + ], + }) +} + +function Center() { + return Widget.Box({ + spacing: 8, + children: [ + Media(), + Notification(), + ], + }) +} + +function Right() { + return Widget.Box({ + hpack: "end", + spacing: 8, + children: [ + SysTray(), + Clock(), + ], + }) +} + +function Bar(monitor = 0) { + return Widget.Window({ + name: `bar-${monitor}`, + class_name: "bar", + monitor, + anchor: ["top", "left", "right"], + exclusivity: "exclusive", + child: Widget.CenterBox({ + start_widget: Left(), + center_widget: Center(), + end_widget: Right(), + }), + }) +} + +App.config({ + style: "./style.css", + windows: [ + Bar(), + ], +}) + +export { } diff --git a/users/hu/packages/ags/config/style.css b/users/hu/packages/ags/config/style.css new file mode 100644 index 0000000..9ac7355 --- /dev/null +++ b/users/hu/packages/ags/config/style.css @@ -0,0 +1,40 @@ +window.bar { + background-color: @theme_bg_color; + color: @theme_fg_color; +} + +button { + min-width: 0; + padding-top: 0; + padding-bottom: 0; + background-color: transparent; +} + +button:active { + background-color: @theme_selected_bg_color; +} + +button:hover { + border-bottom: 3px solid @theme_fg_color; +} + +label { + font-weight: bold; +} + +.workspaces button.focused { + border-bottom: 3px solid @theme_selected_bg_color; +} + +.client-title { + color: @theme_selected_bg_color; +} + +.notification { + color: yellow; +} + +levelbar block, +highlight { + min-height: 10px; +} diff --git a/users/hu/packages/hyprland.nix b/users/hu/packages/hyprland.nix index 94448e3..2f33f3a 100644 --- a/users/hu/packages/hyprland.nix +++ b/users/hu/packages/hyprland.nix @@ -80,6 +80,10 @@ "$mod SHIFT, 8, movetoworkspace, 8" "$mod SHIFT, 9, movetoworkspace, 9" ]; + + exec-once = [ + "ags" + ]; }; services.hyprpaper = { diff --git a/users/hu/user.nix b/users/hu/user.nix index b4aeb6d..1856e2e 100644 --- a/users/hu/user.nix +++ b/users/hu/user.nix @@ -35,9 +35,8 @@ ./packages/foot.nix ./packages/firefox.nix ./packages/rofi.nix - ./packages/dunst.nix ./packages/nvim/neovim.nix - # ./packages/ags/ags.nix + ./packages/ags/ags.nix ]; }; };