diff --git a/flake.nix b/flake.nix index 0c74b03..10cb05d 100644 --- a/flake.nix +++ b/flake.nix @@ -31,38 +31,56 @@ src = ./.; name = "my-shell"; entry = "app.ts"; + + # additional libraries and executables to add to gjs' runtime + extraPackages = [ + # ags.packages.${system}.battery + # pkgs.fzf + ]; }; }; devShells.${system} = { default = pkgs.mkShell { buildInputs = with pkgs; [ + nodejs_23 + gobject-introspection + json-glib + gjs # includes astal3 astal4 astal-io by default (ags.packages.${system}.default.override { extraPackages = builtins.attrValues { inherit (astal.packages.${system}) - io - astal4 - battery - wireplumber - network - mpris - powerprofiles - tray - bluetooth hyprland + tray + network + battery ; }; }) - nodejs_23 - meson - ninja - pkg-config + wrapGAppsHook gobject-introspection - wrapGAppsHook4 + meson + pkg-config + ninja + vala + gtk3 + gtk4 + gtk-layer-shell + gtk4-layer-shell + json-glib + pam + gvfs + networkmanager + gdk-pixbuf + wireplumber + libdbusmenu-gtk3 + wayland blueprint-compiler + libadwaita + wayland-scanner dart-sass esbuild gjs diff --git a/nodemon.json b/nodemon.json index a38bafe..060c9f5 100644 --- a/nodemon.json +++ b/nodemon.json @@ -1,5 +1,5 @@ { - "watch": ["app.ts", "style.scss", "widget/"], - "ext": "ts, tsx, scss, css", + "watch": ["app.ts", "widget/"], + "ext": "ts, tsx", "exec": "ags run --gtk4 ." } diff --git a/style.scss b/style.scss index ec93789..4db19a6 100644 --- a/style.scss +++ b/style.scss @@ -1,97 +1,43 @@ // https://gitlab.gnome.org/GNOME/gtk/-/blob/gtk-3-24/gtk/theme/Adwaita/_colors-public.scss -// Colors: - -$fg-color: white; -$active-color: #bdae93; -$hover-color: #b8bb26; - +$fg-color: #{"@theme_fg_color"}; $bg-color: #{"@theme_bg_color"}; -$corner-size: 7; - -* { - font-size: 18px; -} window.Bar { background: transparent; - /* background: #fbf1c7; */ - padding: 2px; - margin: 5px; - border-radius: 40px; - padding-left: 10px; - - color: $fg-color; + font-weight: bold; + font-size: 25px; >centerbox { background: $bg-color; border-radius: 10px; + margin: 8px; } - - .AudioSlider { - min-width: 200px; - } - -} - -.Systray { - color: $fg-color; -} - -.Workspaces { - $workspace-button-size: 8px; - $bar-button-border-radius: 25px; - - margin: 0 60px 4px 60px; - margin: 0; - - border: 2px solid black; - padding: 3px; - border-radius: 40px; - transition: all 1 linear; - transition-delay: 1s; - button { - all: unset; - color: $fg-color; - transition: min-width 0.25s ease-out; - margin: 1em; - padding: $workspace-button-size; - margin: $workspace-button-size; - background-color: black; - border-radius: calc(nth($bar-button-border-radius, 1) * 1.5); - /* Hide non-occupied workspaces */ - min-height: 0; - min-width: 0; - margin: 0; - opacity: 0; - padding: 0; - transition: 0; + border-radius: 8px; + margin: 2px; + } - &:hover { - color: $fg-color; - background-color: $fg-color; + .Workspaces { + button { + all: unset; + background-color: transparent; + margin: 2px; + padding: 2px; + + &:hover label { + background-color: red; + border-color: $bg-color; + } + + &:active label { + background-color: $fg-color; + } + + .focused { + color: red; + } } - - &.active, - &.occupied { - - opacity: 1; - margin: 1rem; - padding: $workspace-button-size; - margin: $workspace-button-size; - } - - &.active { - min-width: 2.5rem !important; - min-height: 0.95rem !important; - } - - &.occupied { - min-height: 0.65em; - min-width: 0.65rem; - } - } } \ No newline at end of file diff --git a/widget/Bar.tsx b/widget/Bar.tsx index c2be237..0082bc0 100644 --- a/widget/Bar.tsx +++ b/widget/Bar.tsx @@ -1,10 +1,85 @@ -import { App, Astal, Gtk, Gdk, } from "astal/gtk4" -import Workspaces from "./workspaces" -import Systray from "./systray" -import Battery from "./battery" -import Time from "./time" +import { App, Astal, Gtk, Gdk, Widget, astalify } from "astal/gtk4" +import { GLib, Variable } from "astal" +import Hyprland from "gi://AstalHyprland" +import Tray from "gi://AstalTray" +import Battery from "gi://AstalBattery" +import Network from "gi://AstalNetwork" +import AstalTray from "gi://AstalTray?version=0.1" +type Workspace = { + id: number + focus: () => void +} + +type Hyprland = { + workspaces: Workspace[] + focusedWorkspace: Workspace | null +} + +function Bat() { + const bat = Battery.get_default() + + return + Battery: {bat.get_percentage() * 100}% + + +} + +function Net() { + const network = Network.get_default() + + return + {network.wifi.enabled} + +} + +function Workspaces() { + const hypr = Hyprland.get_default() + + return + { + hypr.workspaces.filter(ws => !(ws.id >= -99 && ws.id < -2)) + .sort((a, b) => a.id - b.id) + .map(ws => ( + + )) + } + +} + +function SysTray() { + const tray = AstalTray.get_default() + + print(tray.get_items.length) + + return + {tray.get_items().map(item => ( + + + + ))} + +} + +function Time({ }) { + const time = Variable("").poll(1000, () => GLib.DateTime.new_now_local().format("%H:%M")!) + + return