From 198993b0fbab9bff65a74e4e062732be03db9099 Mon Sep 17 00:00:00 2001 From: Aylur Date: Sun, 3 Nov 2024 02:56:25 +0100 Subject: [PATCH] feat: blueprint plugin --- flake.lock | 6 +++--- flake.nix | 4 ++-- result | 1 + src/data/env.d.ts | 5 +++++ src/data/tsconfig.json | 3 ++- src/default.nix | 8 ++++++-- src/esbuild.go | 40 ++++++++++++++++++++++++++++++++++++++-- src/main.go | 5 +++++ 8 files changed, 62 insertions(+), 10 deletions(-) create mode 120000 result diff --git a/flake.lock b/flake.lock index 16bbacb7..f10fcab3 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1730470478, - "narHash": "sha256-uEzrAQEY6g5TZ9SCUgFumHQ5AZWPi+ZxHITI8vAJueE=", + "lastModified": 1730598779, + "narHash": "sha256-GYDeqBeFjAxEkSGuG+dHg/PUy9Zt113oTxoo06LtF3E=", "owner": "aylur", "repo": "astal", - "rev": "d47b470f68a8e5f2d19f32fbfb1de95752ba8eb8", + "rev": "510b233438987890d794644da909f6cf34d03a42", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 1457cb6f..500f63f0 100644 --- a/flake.nix +++ b/flake.nix @@ -20,12 +20,12 @@ // { default = self.packages.${system}.ags; ags = pkgs.callPackage ./src (with astal.packages.${system}; { - astal3 = astal3; + inherit astal3 astal4; astal-io = io; astal-gjs = "${gjs}/share/astal/gjs"; }); agsFull = pkgs.callPackage ./src (with astal.packages.${system}; { - astal3 = astal3; + inherit astal3 astal4; astal-io = io; astal-gjs = "${gjs}/share/astal/gjs"; extraPackages = builtins.attrValues ( diff --git a/result b/result new file mode 120000 index 00000000..465fb738 --- /dev/null +++ b/result @@ -0,0 +1 @@ +/nix/store/6mqzmqvjv0bxgndprigwfdggbz3pqd55-gtk4-layer-shell-1.0.3 \ No newline at end of file diff --git a/src/data/env.d.ts b/src/data/env.d.ts index bdd011e7..4e7e508b 100644 --- a/src/data/env.d.ts +++ b/src/data/env.d.ts @@ -10,6 +10,11 @@ declare module "*.scss" { export default content } +declare module "*.blp" { + const content: string + export default content +} + declare module "*.css" { const content: string export default content diff --git a/src/data/tsconfig.json b/src/data/tsconfig.json index 444978b6..c1e72444 100644 --- a/src/data/tsconfig.json +++ b/src/data/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "experimentalDecorators": true, "strict": true, - "target": "ES2023", + "target": "ES2022", + "module": "ES2022", "moduleResolution": "Bundler", // "checkJs": true, // "allowJs": true, diff --git a/src/default.nix b/src/default.nix index 3af00484..10c0262b 100644 --- a/src/default.nix +++ b/src/default.nix @@ -1,5 +1,7 @@ { astal3, + astal4, + gtk4-layer-shell, astal-io, astal-gjs, lib, @@ -7,11 +9,11 @@ buildGoModule, wrapGAppsHook, gobject-introspection, - gtk3, glib, gjs, nodejs, dart-sass, + blueprint-compiler, extraPackages ? [], }: let inherit (builtins) replaceStrings readFile; @@ -27,6 +29,7 @@ gjs nodejs dart-sass + blueprint-compiler astal-io # FIXME: should not be needed after the astal commends are properly implemented using dbus in astal.go ]; in @@ -44,9 +47,9 @@ in buildInputs = extraPackages ++ [ glib - gtk3 astal-io astal3 + astal4 ]; preFixup = '' @@ -58,5 +61,6 @@ in ldflags = [ "-X main.astalGjs=${astal-gjs}" + "-X main.gtk4LayerShell=${gtk4-layer-shell}/lib/libgtk4-layer-shell.so" ]; } diff --git a/src/esbuild.go b/src/esbuild.go index 4a2558bd..24bbd8ef 100644 --- a/src/esbuild.go +++ b/src/esbuild.go @@ -48,7 +48,7 @@ var inlinePlugin api.Plugin = api.Plugin{ var sassPlugin api.Plugin = api.Plugin{ Name: "sass", Setup: func(build api.PluginBuild) { - build.OnResolve(api.OnResolveOptions{Filter: `.*\.(scss|sass)$`}, + build.OnResolve(api.OnResolveOptions{Filter: `.*\.scss$`}, func(args api.OnResolveArgs) (api.OnResolveResult, error) { return api.OnResolveResult{ Path: path.Join( @@ -60,7 +60,7 @@ var sassPlugin api.Plugin = api.Plugin{ }, ) - build.OnLoad(api.OnLoadOptions{Filter: `.*\.(scss|sass)$`, Namespace: "sass"}, + build.OnLoad(api.OnLoadOptions{Filter: `.*\.scss$`, Namespace: "sass"}, func(args api.OnLoadArgs) (api.OnLoadResult, error) { data, err := os.ReadFile(args.Path) if err != nil { @@ -91,6 +91,41 @@ var sassPlugin api.Plugin = api.Plugin{ }, } +var blpPlugin api.Plugin = api.Plugin{ + Name: "blueprint", + Setup: func(build api.PluginBuild) { + build.OnResolve(api.OnResolveOptions{Filter: `.*\.blp$`}, + func(args api.OnResolveArgs) (api.OnResolveResult, error) { + return api.OnResolveResult{ + Path: path.Join( + args.ResolveDir, + args.Path, + ), + Namespace: "blueprint", + }, nil + }, + ) + + build.OnLoad(api.OnLoadOptions{Filter: `.*\.blp$`, Namespace: "blueprint"}, + func(args api.OnLoadArgs) (api.OnLoadResult, error) { + blp := Exec("blueprint-compiler", "compile", args.Path) + blp.Stderr = os.Stderr + + data, err := blp.Output() + if err != nil { + return api.OnLoadResult{}, err + } + + content := strings.TrimSpace(string(data)) + return api.OnLoadResult{ + Contents: &content, + WatchFiles: []string{args.Path}, + Loader: api.LoaderText, + }, nil + }) + }, +} + // TODO: // svg loader // other css preproceccors @@ -124,6 +159,7 @@ func Build(infile, outfile string) { Plugins: []api.Plugin{ inlinePlugin, sassPlugin, + blpPlugin, }, }) diff --git a/src/main.go b/src/main.go index c0bba410..35403f7b 100644 --- a/src/main.go +++ b/src/main.go @@ -6,6 +6,8 @@ import ( "path/filepath" ) +var gtk4LayerShell = "/usr/lib/libgtk4-layer-shell.so" + func main() { if *Opts.help { PrintHelp() @@ -107,6 +109,9 @@ func run() { outfile := getOutfile() Build(infile, outfile) + + // TODO: gtk4 flag + // os.Setenv("LD_PRELOAD", gtk4LayerShell) cmd := Exec("gjs", "-m", outfile) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr