diff --git a/users/common/options/home-manager/theme/default.nix b/users/common/options/home-manager/theme/default.nix index 85b4140..dcef887 100644 --- a/users/common/options/home-manager/theme/default.nix +++ b/users/common/options/home-manager/theme/default.nix @@ -328,6 +328,14 @@ in }; }; + font = { + size = mkOption { + type = ints.positive; + default = 12; + description = "The font size."; + }; + }; + cursor = { package = mkOption { type = package; diff --git a/users/configs/ags/src/.gitignore b/users/configs/ags/config/.gitignore similarity index 100% rename from users/configs/ags/src/.gitignore rename to users/configs/ags/config/.gitignore diff --git a/users/configs/ags/src/.prettierrc.json b/users/configs/ags/config/.prettierrc.json similarity index 100% rename from users/configs/ags/src/.prettierrc.json rename to users/configs/ags/config/.prettierrc.json diff --git a/users/configs/ags/src/default.nix b/users/configs/ags/config/default.nix similarity index 87% rename from users/configs/ags/src/default.nix rename to users/configs/ags/config/default.nix index 4e39b8c..a31a4ff 100644 --- a/users/configs/ags/src/default.nix +++ b/users/configs/ags/config/default.nix @@ -12,7 +12,7 @@ pkgs.stdenv.mkDerivation { ]; buildPhase = '' - bun build $src/index.ts --outfile=index.js \ + bun build $src/src/index.ts --outfile=index.js \ --external="file://$src/*" \ --external="gi://*" ''; diff --git a/users/configs/ags/src/eslint.config.js b/users/configs/ags/config/eslint.config.js similarity index 100% rename from users/configs/ags/src/eslint.config.js rename to users/configs/ags/config/eslint.config.js diff --git a/users/configs/ags/src/package.json b/users/configs/ags/config/package.json similarity index 100% rename from users/configs/ags/src/package.json rename to users/configs/ags/config/package.json diff --git a/users/configs/ags/src/index.ts b/users/configs/ags/config/src/index.ts similarity index 100% rename from users/configs/ags/src/index.ts rename to users/configs/ags/config/src/index.ts diff --git a/users/configs/ags/src/lib.ts b/users/configs/ags/config/src/lib.ts similarity index 100% rename from users/configs/ags/src/lib.ts rename to users/configs/ags/config/src/lib.ts diff --git a/users/configs/ags/src/theme.ts b/users/configs/ags/config/src/theme.ts similarity index 100% rename from users/configs/ags/src/theme.ts rename to users/configs/ags/config/src/theme.ts diff --git a/users/configs/ags/src/widgets/bar/bar.ts b/users/configs/ags/config/src/widgets/bar/bar.ts similarity index 87% rename from users/configs/ags/src/widgets/bar/bar.ts rename to users/configs/ags/config/src/widgets/bar/bar.ts index 8bad26d..b98c096 100644 --- a/users/configs/ags/src/widgets/bar/bar.ts +++ b/users/configs/ags/config/src/widgets/bar/bar.ts @@ -1,4 +1,5 @@ import date from './date/date'; +import workspace from './workspace/workspace'; export default (monitor: number) => Widget.Window({ monitor, @@ -11,13 +12,15 @@ export default (monitor: number) => Widget.Window({ // eslint-disable-next-line @typescript-eslint/naming-convention startWidget: Widget.Box({ hexpand: true, - children: [], + children: [ + workspace(), + ], }), // eslint-disable-next-line @typescript-eslint/naming-convention centerWidget: Widget.Box({ hpack: 'center', children: [ - date() + date(), ], }), // eslint-disable-next-line @typescript-eslint/naming-convention diff --git a/users/configs/ags/src/widgets/bar/date/date.ts b/users/configs/ags/config/src/widgets/bar/date/date.ts similarity index 94% rename from users/configs/ags/src/widgets/bar/date/date.ts rename to users/configs/ags/config/src/widgets/bar/date/date.ts index 728e09f..7aadb0e 100644 --- a/users/configs/ags/src/widgets/bar/date/date.ts +++ b/users/configs/ags/config/src/widgets/bar/date/date.ts @@ -4,7 +4,7 @@ const clock = Variable(glib.DateTime.new_now_local(), { poll: [1000, () => glib.DateTime.new_now_local()] }); -const time = Utils.derive([clock], (c) => c.format('%H:%M - %A, %e %B %Y') || ''); +const time = Utils.derive([clock], (c) => c.format('%H:%M - %A, %d %B %Y') || ''); export default () => Widget.Label({ class_name: 'label', diff --git a/users/configs/ags/config/src/widgets/bar/workspace/workspace.ts b/users/configs/ags/config/src/widgets/bar/workspace/workspace.ts new file mode 100644 index 0000000..f88f79e --- /dev/null +++ b/users/configs/ags/config/src/widgets/bar/workspace/workspace.ts @@ -0,0 +1,23 @@ +import { range } from 'lib'; + +const hyprland = await Service.import('hyprland'); +const dispatch = ws => hyprland.messageAsync(`dispatch workspace ${ws}`); + +const workspaceButton = (i: number) => Widget.Label({ + class_name: 'button', + attribute: i, + vpack: "center", + setup: self => self.hook(hyprland, () => { + self.toggleClassName('active', hyprland.active.workspace.id === i); + self.toggleClassName('occupied', (hyprland.getWorkspace(i)?.windows || 0) > 0); + }), +}); + +export default () => Widget.EventBox({ + class_name: 'workspace', + onScrollUp: () => dispatch('e-1'), + onScrollDown: () => dispatch('e+1'), + child: Widget.Box({ + children: range(10).map(workspaceButton), + }), +}); diff --git a/users/configs/ags/src/tsconfig.json b/users/configs/ags/config/tsconfig.json similarity index 91% rename from users/configs/ags/src/tsconfig.json rename to users/configs/ags/config/tsconfig.json index f42c8bc..b7c4803 100644 --- a/users/configs/ags/src/tsconfig.json +++ b/users/configs/ags/config/tsconfig.json @@ -9,7 +9,7 @@ "checkJs": true, "strict": true, "noImplicitAny": false, - "baseUrl": ".", + "baseUrl": "./src", "typeRoots": [ "./types", ], diff --git a/users/configs/ags/default.nix b/users/configs/ags/default.nix index 022668a..6c0f703 100644 --- a/users/configs/ags/default.nix +++ b/users/configs/ags/default.nix @@ -2,7 +2,7 @@ let hmConfig = config.home-manager.users."${user.name}"; - agsConfig = (import ./src { inherit pkgs; }); + agsConfig = (import ./config { inherit pkgs; }); in { home-manager.users."${user.name}" = { diff --git a/users/configs/ags/theme.sass b/users/configs/ags/theme.sass index 7bc30b3..42491d9 100644 --- a/users/configs/ags/theme.sass +++ b/users/configs/ags/theme.sass @@ -3,3 +3,28 @@ .label color: {{colors.on_surface.default.hex}} + font-size: {{custom.font_size}}pt; + +.workspace + min-height: {{custom.font_size}}pt; + + .button + font-size: 0; + transition: .5s; + margin: 0 .3 * {{custom.padding}}pt; + background-color: {{colors.surface_variant.default.hex}}; + min-width: .4 * {{custom.font_size}}pt; + min-height: .4 * {{custom.font_size}}pt; + border-radius: .5 * {{custom.font_size}}pt; + + &.occupied + background-color: {{colors.on_surface.default.hex}} + min-width: .6 * {{custom.font_size}}pt; + min-height: .6 * {{custom.font_size}}pt; + border-radius: .5 * {{custom.font_size}}pt; + + &.active + background-color: {{colors.primary.default.hex}} + min-width: 1.67 * {{custom.font_size}}pt; + min-height: {{custom.font_size}}pt; + border-radius: .4 * {{custom.font_size}}pt; diff --git a/users/configs/matugen/default.nix b/users/configs/matugen/default.nix index 6010fa7..0d99909 100644 --- a/users/configs/matugen/default.nix +++ b/users/configs/matugen/default.nix @@ -56,6 +56,7 @@ in opacity_hex = builtins.toString (percentageToHex hmConfig.theme.opacity); opacity_shadow = builtins.toString (hmConfig.theme.opacity * .75); opacity_shadow_hex = builtins.toString (percentageToHex (hmConfig.theme.opacity * .75)); + font_size = builtins.toString hmConfig.theme.font.size; }; };