{
  lib,
  pkgs,
  config,
  namespace,
  ...
}: let
  inherit (lib) mkEnableOption mkIf;
  cfg = config.${namespace}.apps.vscodium;
in {
  options.${namespace}.apps.vscodium = {
    enable = mkEnableOption "vscodium";
  };

  config = mkIf cfg.enable {
    home.packages = with pkgs; [
      alejandra
    ];

    sops.secrets.wakatime-cfg = {
      format = "binary";
      sopsFile = lib.snowfall.fs.get-file "secrets/wakatime.cfg";
      path = "/home/jo/.wakatime.cfg";
    };

    programs.vscode = {
      enable = true;
      package = pkgs.vscodium;
      mutableExtensionsDir = false;

      profiles.default = {
        enableUpdateCheck = false;
        enableExtensionUpdateCheck = false;

        extensions = with pkgs; [
          ### Theming
          vscode-extensions.pkief.material-icon-theme
          vscode-extensions.catppuccin.catppuccin-vsc

          ### General
          vscode-extensions.usernamehw.errorlens
          vscode-extensions.leonardssh.vscord
          vscode-extensions.davidlday.languagetool-linter
          vscode-extensions.christian-kohler.path-intellisense
          vscode-extensions.wakatime.vscode-wakatime

          ### Language specific
          # Nushell
          vscode-extensions.thenuprojectcontributors.vscode-nushell-lang

          # Nix
          vscode-extensions.kamadorueda.alejandra
          vscode-extensions.jnoortheen.nix-ide

          # Env
          vscode-extensions.irongeek.vscode-env

          # Deno (JavaScript)
          vscode-extensions.denoland.vscode-deno
        ];

        userSettings = {
          "files.autoSave" = "on";
          "workbench.colorTheme" = "Catppuccin Macchiato";
          "window.titleBarStyle" = "custom";

          "[nix]" = {
            "editor.tabSize" = 2;
            "formatterPath" = "alejandra";

            "enableLanguageServer" = true;
            "serverPath" = "nixd";
            "serverSettings" = {
              "nixd" = {
                "formatting.command" = ["alejandra"];
              };
            };
          };
        };
      };
    };
  };
}
