aboutsummaryrefslogtreecommitdiff
path: root/linux/home/.config/ags/widget/bar/Bar.ts
blob: 9343a36f7dd06e377d8feea8d38371590c00eff7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import BatteryBar from "./buttons/BatteryBar"
import ColorPicker from "./buttons/ColorPicker"
import Date from "./buttons/Date"
import Launcher from "./buttons/Launcher"
import Media from "./buttons/Media"
import PowerMenu from "./buttons/PowerMenu"
import SysTray from "./buttons/SysTray"
import SystemIndicators from "./buttons/SystemIndicators"
import Taskbar from "./buttons/Taskbar"
import Workspaces from "./buttons/Workspaces"
import ScreenRecord from "./buttons/ScreenRecord"
import Messages from "./buttons/Messages"
import options from "options"

const { start, center, end } = options.bar.layout
const pos = options.bar.position.bind()

export type BarWidget = keyof typeof widget

const widget = {
  battery: BatteryBar,
  colorpicker: ColorPicker,
  date: Date,
  launcher: Launcher,
  media: Media,
  powermenu: PowerMenu,
  systray: SysTray,
  system: SystemIndicators,
  taskbar: Taskbar,
  workspaces: Workspaces,
  screenrecord: ScreenRecord,
  messages: Messages,
  expander: () => Widget.Box({ expand: true }),
}

export default (monitor: number) => Widget.Window({
  monitor,
  class_name: "bar",
  name: `bar${monitor}`,
  exclusivity: "exclusive",
  anchor: pos.as(pos => [pos, "right", "left"]),
  child: Widget.CenterBox({
    css: "min-width: 2px; min-height: 2px;",
    startWidget: Widget.Box({
      hexpand: true,
      children: start.bind().as(s => s.map(w => widget[w]())),
    }),
    centerWidget: Widget.Box({
      hpack: "center",
      children: center.bind().as(c => c.map(w => widget[w]())),
    }),
    endWidget: Widget.Box({
      hexpand: true,
      children: end.bind().as(e => e.map(w => widget[w]())),
    }),
  }),
})