{ pkgs, config, system, inputs, ... }: rec { # Make VSCode config writable # https://github.com/nix-community/home-manager/issues/1800#issuecomment-2262881846 home.activation.makeVSCodeConfigWritable = let configDirName = { "vscode" = "Code"; "vscode-insiders" = "Code - Insiders"; "vscodium" = "VSCodium"; } .${programs.vscode.package.pname}; configPath = "${config.xdg.configHome}/${configDirName}/User/settings.json"; in { after = [ "writeBoundary" ]; before = [ ]; data = '' install -m 0640 "$(readlink ${configPath})" ${configPath} ''; }; programs.vscode = { enable = true; package = pkgs.vscode.fhsWithPackages ( ps: with pkgs; [ dotnetCorePackages.sdk_8_0 jdk21 go ] ); extensions = with inputs.nix-vscode-extensions.extensions.${system}.vscode-marketplace; with inputs.nix-vscode-extensions.extensions.${system}.vscode-marketplace-release; [ # Themes (pkgs.catppuccin-vsc.override { accent = "blue"; extraBordersEnabled = true; italicKeywords = false; customUIColors = { mocha = { "statusBar.foreground" = "accent"; }; macchiato = { "statusBar.foreground" = "accent"; }; frappe = { "statusBar.foreground" = "accent"; }; latte = { "statusBar.foreground" = "accent"; }; }; }) catppuccin.catppuccin-vsc-icons # C# ms-dotnettools.csharp ms-dotnettools.csdevkit ms-dotnettools.vscodeintellicode-csharp ms-dotnettools.vscode-dotnet-runtime csharpier.csharpier-vscode patcx.vscode-nuget-gallery # Python ms-python.python ms-python.vscode-pylance ms-python.debugpy ms-python.black-formatter ms-python.mypy-type-checker charliermarsh.ruff # JavaScript / TypeScript dbaeumer.vscode-eslint yoavbls.pretty-ts-errors quick-lint.quick-lint-js gregorbiswanger.json2ts vendicated.vencord-companion # Lua sumneko.lua # Luau evaera.vscode-rojo undermywheel.roblox-lua johnnymorganz.stylua johnnymorganz.luau-lsp nightrains.robloxlsp # Go golang.go # Hugo budparr.language-hugo-vscode kaellarkin.hugo-shortcode-syntax # Kotlin mathiasfrohlich.kotlin # Java vscjava.vscode-java-debug vscjava.vscode-gradle vscjava.vscode-maven vscjava.vscode-java-dependency vscjava.vscode-java-test redhat.java # Bash mads-hartmann.bash-ide-vscode foxundermoon.shell-format timonwong.shellcheck shakram02.bash-beautify # Paradox Interactive Scripting tboby.cwtools-vscode # Git donjayamanne.githistory codezombiech.gitignore eamodio.gitlens # GitHub ziyasal.vscode-open-in-github pkgs.vscode-extensions.github.vscode-github-actions github.vscode-pull-request-github # Misc - Language Support bradlc.vscode-tailwindcss jnoortheen.nix-ide tamasfe.even-better-toml jnoortheen.xonsh matthewpi.caddyfile-support editorconfig.editorconfig prisma.prisma redhat.vscode-yaml ms-vscode.powershell irongeek.vscode-env wholroyd.jinja ms-vscode.makefile-tools tnze.snbt logerfo.sln-support tboby.paradox-syntax xteal.mcmeta footerman.heracles-support # Misc - Debuggers firefox-devtools.vscode-firefox-debug rogalmic.zsh-debug # Misc - Linters tekumara.typos-vscode stylelint.vscode-stylelint davidanson.vscode-markdownlint # Misc - Formatters esbenp.prettier-vscode # Misc - Visuals naumovs.color-highlight kshetline.ligatures-limited # Misc - Utilities vasubasraj.flashpost adpyke.codesnap exodiusstudios.comment-anchors elypia.magick-image-reader adpyke.vscode-sql-formatter qwtel.sqlite-viewer yy0931.vscode-sqlite3-editor supermaven.supermaven # requires a supermaven subscription - https://supermaven.com/ leonardssh.vscord alefragnani.project-manager mkhl.direnv ms-vsliveshare.vsliveshare ms-azuretools.vscode-docker ms-vscode-remote.remote-ssh pkgs.vscode-extensions.ms-vscode-remote.remote-ssh-edit ms-vscode.remote-server ms-vscode.remote-explorer pkgs.vscode-extensions.ms-vscode-remote.remote-containers ms-vscode.remote-repositories formulahendry.auto-rename-tag prunoideae.probejs d-koppenhagen.file-tree-to-text-generator ]; userSettings = { "DO-NOT-EDIT-1" = "This file is managed by the Nix module located at `/etc/nixos/home-manager/vscode.nix`."; "DO-NOT-EDIT-2" = "Changes will be overwritten when VSCode is restarted."; "DO-NOT-EDIT-3" = "To persist changes, edit the module and run `upd` in your terminal."; "editor.tokenColorCustomizations" = { "[Catppuccin*]" = { "variables" = "#82eaf0"; "textMateRules" = [ { "scope" = "comment"; "settings" = { "foreground" = "#f465ec"; "fontStyle" = "italic"; }; } { "scope" = "punctuation.definition.comment"; "settings" = { "foreground" = "#f465ec"; "fontStyle" = "italic"; }; } { "scope" = "variable.other.readwrite"; "settings" = { "foreground" = "#82eaf0"; }; } { "scope" = "keyword.operator"; "settings" = { "foreground" = "#EBA0AC"; }; } { "scope" = "meta.block.paradox"; "settings" = { "foreground" = "#EBA0AC"; }; } { "scope" = "meta.shebang.shell"; "settings" = { "foreground" = "#fb5d1f"; "fontStyle" = "italic bold"; }; } { "scope" = "punctuation.definition.comment.shebang.shell"; "settings" = { "foreground" = "#fb5d1f"; "fontStyle" = "italic bold"; }; } { "scope" = "string.quoted.double.shell variable.other.normal.shell"; "settings" = { "foreground" = "#82e5f0"; }; } { "scope" = "variable.other.property.ts"; "settings" = { "foreground" = "#32d5e7"; }; } ]; }; }; "[python]" = { "editor.formatOnType" = true; "editor.formatOnSave" = true; "editor.defaultFormatter" = "charliermarsh.ruff"; "editor.codeActionsOnSave" = { "source.fixAll" = "explicit"; "source.organizeImports" = "explicit"; }; }; "python.terminal.activateEnvironment" = false; "python.terminal.activateEnvInCurrentTerminal" = false; "[csharp]" = { "editor.defaultFormatter" = "csharpier.csharpier-vscode"; "editor.formatOnSave" = true; "editor.formatOnSaveMode" = "file"; }; "[typescript]" = { "editor.defaultFormatter" = "esbenp.prettier-vscode"; "editor.formatOnType" = false; "editor.formatOnPaste" = true; "editor.formatOnSave" = true; "editor.formatOnSaveMode" = "file"; "files.autoSave" = "onFocusChange"; }; "[markdown]" = { "files.trimTrailingWhitespace" = false; }; "yaml.schemas" = { "https://json.schemastore.org/github-workflow.json" = [ ".github/workflows/*.{yml,yaml}" ".forgejo/workflows/*.{yml,yaml}" ".gitea/workflows/*.{yml,yaml}" ]; }; "yaml.schemaStore.enable" = true; "nix.enableLanguageServer" = true; "nix.serverSettings" = { "nil" = { "formatting" = { "command" = [ "nixfmt" ]; }; }; }; "nix.serverPath" = "nil"; "vscord.status.image.large.debugging.key" = "https://vscord.catppuccin.com/mocha/debugging.webp"; "vscord.status.image.large.editing.key" = "https://vscord.catppuccin.com/mocha/{lang}.webp"; "vscord.status.image.large.idle.key" = "https://vscord.catppuccin.com/mocha/idle-{app_id}.webp"; "vscord.status.image.large.notInFile.key" = "https://vscord.catppuccin.com/mocha/idle-{app_id}.webp"; "vscord.status.image.large.viewing.key" = "https://vscord.catppuccin.com/mocha/{lang}.webp"; "vscord.status.image.small.debugging.key" = "https://vscord.catppuccin.com/mocha/debugging.webp"; "vscord.status.image.small.editing.key" = "https://vscord.catppuccin.com/mocha/{app_id}.webp"; "vscord.status.image.small.idle.key" = "https://vscord.catppuccin.com/mocha/idle.webp"; "vscord.status.image.small.notInFile.key" = "https://vscord.catppuccin.com/mocha/idle.webp"; "vscord.status.image.small.viewing.key" = "https://vscord.catppuccin.com/mocha/{app_id}.webp"; "git.enableSmartCommit" = true; "git.autofetch" = true; "git.confirmSync" = false; "security.workspace.trust.untrustedFiles" = "open"; "files.insertFinalNewline" = true; "files.trimFinalNewlines" = true; "files.trimTrailingWhitespace" = true; "editor.inlineSuggest.enabled" = true; "diffEditor.ignoreTrimWhitespace" = false; "git.enableCommitSigning" = true; "editor.accessibilitySupport" = "off"; "git.inputValidationSubjectLength" = null; "git.inputValidationLength" = 150; "editor.fontLigatures" = "'cv01', 'cv02', 'ss05', 'ss08', 'ss03', 'cv29', 'cv30', 'cv11'"; "workbench.iconTheme" = "catppuccin-latte"; "catppuccin.syncWithIconPack" = false; "codesnap.shutterAction" = "copy"; "codesnap.transparentBackground" = true; "codesnap.realLineNumbers" = true; "codesnap.roundedCorners" = true; "codesnap.showWindowTitle" = true; "codesnap.showWindowControls" = false; "gitlens.remotes" = [ { "domain" = "www.coastalcommits.com"; "type" = "Gitea"; } ]; "markdownlint.config" = { "ol-prefix" = false; "html" = false; }; "markdownlint.lintWorkspaceGlobs" = [ "**/*.{md,mkd,mdwn,mdown,markdown,markdn,mdtxt,mdtext,workbook}" "!**/node_modules" "!**/bower_components" "!**/.git" "!**/LICENSE" "!**/LICENSE.md" ]; "editor.largeFileOptimizations" = false; "files.associations" = { ".env" = "properties"; "*.ini" = "paradox"; "*.kt" = "kotlin"; "**/xonsh/*.py" = "xonsh"; }; "editor.semanticHighlighting.enabled" = true; "[css]" = { "editor.defaultFormatter" = "esbenp.prettier-vscode"; }; "git.ignoreRebaseWarning" = true; "remote.autoForwardPortsSource" = "hybrid"; "git.replaceTagsWhenPull" = true; "redhat.telemetry.enabled" = true; "editor.fontSize" = 14; "workbench.colorTheme" = "Catppuccin Mocha"; "editor.codeLensFontFamily" = "'ComicCodeLigatures Nerd Font', 'Comic Code Ligatures', 'FiraCode Nerd Font'"; "editor.inlayHints.fontFamily" = "'ComicCodeLigatures Nerd Font', 'Comic Code Ligatures', 'FiraCode Nerd Font', 'FiraCode Nerd Font Light'"; "editor.fontFamily" = "'ComicCodeLigatures Nerd Font', 'Comic Code Ligatures', 'FiraCode Nerd Font'"; "explorer.confirmDelete" = false; "window.confirmSaveUntitledWorkspace" = false; "cwtools.cache.stellaris" = "/bulk/steam/steamapps/common/Stellaris"; "python.analysis.inlayHints.callArgumentNames" = "partial"; "python.analysis.inlayHints.functionReturnTypes" = true; "explorer.confirmDragAndDrop" = false; "editor.unicodeHighlight.allowedLocales" = { ru = true; }; "terminal.integrated.defaultProfile.linux" = "xonsh"; "explorer.confirmPasteNative" = false; "editor.renderWhitespace" = "none"; "explorer.fileNesting.patterns" = { "*.ts" = "\${capture}.js"; "*.js" = "\${capture}.js.map, \${capture}.min.js, \${capture}.d.ts"; "*.jsx" = "\${capture}.js"; "*.tsx" = "\${capture}.ts"; "tsconfig.json" = "tsconfig.*.json"; "package.json" = "package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb"; "Cargo.toml" = "Cargo.lock"; "*.sqlite" = "\${capture}.\${extname}-*"; "*.db" = "\${capture}.\${extname}-*"; "*.sqlite3" = "\${capture}.\${extname}-*"; "*.db3" = "\${capture}.\${extname}-*"; "*.sdb" = "\${capture}.\${extname}-*"; "*.s3db" = "\${capture}.\${extname}-*"; }; "[shellscript]" = { "editor.defaultFormatter" = "shakram02.bash-beautify"; }; "vscord.app.name" = "Visual Studio Code"; "workbench.editorAssociations" = { "*.db" = "sqlite3-editor.editor"; }; "vs-code-prettier-eslint.prettierLast" = false; "typescript.updateImportsOnFileMove.enabled" = "always"; "supermaven.allowGitignore" = true; "[javascript]" = { "editor.defaultFormatter" = "esbenp.prettier-vscode"; }; "[json]" = { "editor.defaultFormatter" = "esbenp.prettier-vscode"; }; "go.toolsManagement.autoUpdate" = true; "remote.SSH.remotePlatform" = { "eclipse" = "linux"; }; "terminal.integrated.fontWeightBold" = "bold"; "terminal.integrated.fontFamily" = "'ComicCodeLigatures Nerd Font', 'Comic Code Ligatures', 'FiraCode Nerd Font'"; "[jsonc]" = { "editor.defaultFormatter" = "esbenp.prettier-vscode"; }; }; }; }