{ pkgs, inputs, system, lib, config, ... }: { programs.vscode = lib.mkIf config.meta.home-manager.vscode.enable ( let vscode-package = pkgs.vscodium; in { enable = true; package = vscode-package; enableUpdateCheck = false; enableExtensionUpdateCheck = false; mutableExtensionsDir = false; extensions = with (inputs.vscode-extensions.extensions."${system}".forVSCodeVersion ( # Get pkgs.vscodium version, and remove the 4th part (forVSCodeVersion only expects 3 parts) # By using forVSCodeVersion, any unsupported versions are automatically excluded and this config # won't build (rather than only finding out in vscode itself) pkgs.lib.strings.concatStringsSep "." ( pkgs.lib.lists.take 3 ( pkgs.lib.strings.splitString "." vscode-package.version ) ) )); ( (with open-vsx; [ # Language support rust-lang.rust-analyzer # Rust llvm-vs-code-extensions.vscode-clangd # C++ # vadimcn.vscode-lldb # C++ Debugging jnoortheen.nix-ide # Nix tamasfe.even-better-toml # TOML yzhang.markdown-all-in-one # Markdown denoland.vscode-deno # Deno JS/TS mathiasfrohlich.kotlin # Kotlin (no LSP) matthewpi.caddyfile-support # Caddyfile # Theming pkief.material-icon-theme # Material icons # Utilities streetsidesoftware.code-spell-checker # Spellchecking jeanp413.open-remote-ssh # Remote SSH mkhl.direnv # nix-direnv autoloading cschlosser.doxdocgen # C++ Doxygen generator tomoki1207.pdf # PDF Viewing exodiusstudios.comment-anchors # Comment anchors and highlighting ]) ++ (with vscode-marketplace; [ yy0931.save-as-root # Save as root over SSH akiramiyakoda.cppincludeguard # Auto-insert header guards for header files ]) ) ++ (with pkgs.vscode-extensions; [ vadimcn.vscode-lldb ]); userSettings = { # Editor "editor.fontFamily" = "'FiraCode Nerd Font Mono', 'Droid Sans Mono', 'monospace', monospace"; "editor.indentSize" = "tabSize"; "editor.tabSize" = 4; "files.associations" = { "*.hujson" = "jsonc"; }; # JJ "files.watcherExclude" = { "**/.git/objects/**" = true; "**/.git/subtree-cache/**" = true; "**/.hg/store/**" = true; "**/.jj" = true; }; "files.exclude" = { "**/.git" = true; "**/.jj" = true; "**/.svn" = true; "**/.hg" = true; "**/CVS" = true; "**/.DS_Store" = true; "**/Thumbs.db" = true; }; # Nix "nix.enableLanguageServer" = true; "nix.serverPath" = "nixd"; "nix.serverSettings" = { nixd = { formatting = { command = [ "nixfmt" ]; }; nixpkgs = { expr = ''import (builtins.getFlake "/etc/nixos").inputs.nixpkgs { }''; }; options = { nixos = { expr = ''(builtins.getFlake "/etc/nixos").nixosConfigurations.ty-nixos.options''; }; home-manager = { expr = ''(builtins.getFlake "/etc/nixos").homeConfigurations."ty".options''; }; }; }; }; "direnv.restart.automatic" = true; # C++ Include guards "C/C++ Include Guard.Comment Style" = "Line"; "C/C++ Include Guard.Macro Type" = "Filename"; }; } ); }