From dcf0f17712d0b07648b24f79b26b8728e2af25c2 Mon Sep 17 00:00:00 2001 From: Flameopathic <64027365+Flameopathic@users.noreply.github.com> Date: Thu, 12 Jun 2025 20:29:06 +0200 Subject: [PATCH] vscode: use mkTarget (#1477) Link: https://github.com/nix-community/stylix/pull/1477 Reviewed-by: awwpotato Reviewed-by: NAHO <90870942+trueNAHO@users.noreply.github.com> --- modules/vscode/hm.nix | 93 ++++++++++++++------------- modules/vscode/templates/settings.nix | 4 +- modules/vscode/templates/theme.nix | 5 +- 3 files changed, 54 insertions(+), 48 deletions(-) diff --git a/modules/vscode/hm.nix b/modules/vscode/hm.nix index 39828d4e..3f7ab46c 100644 --- a/modules/vscode/hm.nix +++ b/modules/vscode/hm.nix @@ -1,52 +1,59 @@ { + mkTarget, pkgs, config, lib, ... -}@args: +}: -let - extension = - pkgs.runCommandLocal "stylix-vscode" +mkTarget { + name = "vscode"; + humanName = "VSCode"; + + extraOptions.profileNames = lib.mkOption { + description = "The VSCode profile names to apply styling on."; + type = lib.types.listOf lib.types.str; + default = [ "default" ]; + }; + + configElements = [ + ( + { cfg }: { - vscodeExtUniqueId = "stylix.stylix"; - vscodeExtPublisher = "stylix"; - version = "0.0.0"; - theme = builtins.toJSON (import ./templates/theme.nix args); - passAsFile = [ "theme" ]; + warnings = + lib.optional (config.programs.vscode.enable && cfg.profileNames == [ ]) + ''stylix: vscode: `config.stylix.targets.vscode.profileNames` is empty. No theming will be applied. Add a profile or disable this warning by setting `stylix.targets.vscode.enable = false`.''; } - '' - mkdir -p "$out/share/vscode/extensions/$vscodeExtUniqueId/themes" - ln -s ${./package.json} "$out/share/vscode/extensions/$vscodeExtUniqueId/package.json" - cp "$themePath" "$out/share/vscode/extensions/$vscodeExtUniqueId/themes/stylix.json" - ''; - - settings = import ./templates/settings.nix args; - - profile = { - extensions = [ extension ]; - userSettings = settings; - }; - - cfg = config.stylix.targets.vscode; - -in -{ - options.stylix.targets.vscode = { - enable = config.lib.stylix.mkEnableTarget "VSCode" true; - - profileNames = lib.mkOption { - description = "The VSCode profile names to apply styling on."; - type = lib.types.listOf lib.types.str; - default = [ "default" ]; - }; - }; - - config = lib.mkIf (config.stylix.enable && cfg.enable) { - programs.vscode.profiles = lib.genAttrs cfg.profileNames (_name: profile); - - warnings = - lib.optional (config.programs.vscode.enable && cfg.profileNames == [ ]) - ''stylix: vscode: `config.stylix.targets.vscode.profileNames` is empty. No theming will be applied. Add a profile or disable this warning by setting `stylix.targets.vscode.enable = false`.''; - }; + ) + ( + { cfg, colors }: + { + programs.vscode.profiles = lib.genAttrs cfg.profileNames (_: { + extensions = lib.singleton ( + pkgs.runCommandLocal "stylix-vscode" + { + vscodeExtUniqueId = "stylix.stylix"; + vscodeExtPublisher = "stylix"; + version = "0.0.0"; + theme = builtins.toJSON (import ./templates/theme.nix colors); + passAsFile = [ "theme" ]; + } + '' + mkdir -p "$out/share/vscode/extensions/$vscodeExtUniqueId/themes" + ln -s ${./package.json} "$out/share/vscode/extensions/$vscodeExtUniqueId/package.json" + cp "$themePath" "$out/share/vscode/extensions/$vscodeExtUniqueId/themes/stylix.json" + '' + ); + }); + } + ) + ( + { cfg, fonts }: + { + programs.vscode.profiles = lib.genAttrs cfg.profileNames (_: { + userSettings = import ./templates/settings.nix fonts; + }); + } + ) + ]; } diff --git a/modules/vscode/templates/settings.nix b/modules/vscode/templates/settings.nix index c9144d24..8af7db84 100644 --- a/modules/vscode/templates/settings.nix +++ b/modules/vscode/templates/settings.nix @@ -1,6 +1,6 @@ -{ config, ... }: +fonts: -with config.stylix.fonts; +with fonts; { "workbench.colorTheme" = "Stylix"; diff --git a/modules/vscode/templates/theme.nix b/modules/vscode/templates/theme.nix index fbc14d86..9d3be6c0 100644 --- a/modules/vscode/templates/theme.nix +++ b/modules/vscode/templates/theme.nix @@ -1,6 +1,5 @@ -{ config, ... }: - -with config.lib.stylix.colors.withHashtag; +colors: +with colors.withHashtag; { "$schema" = "vscode://schemas/color-theme";