diff --git a/flake.lock b/flake.lock index d611ad4..900bb0e 100644 --- a/flake.lock +++ b/flake.lock @@ -22,6 +22,22 @@ } }, "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { "flake": false, "locked": { "lastModified": 1696426674, @@ -41,6 +57,24 @@ "inputs": { "systems": "systems" }, + "locked": { + "lastModified": 1681202837, + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, "locked": { "lastModified": 1694529238, "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", @@ -55,9 +89,9 @@ "type": "github" } }, - "flake-utils_2": { + "flake-utils_3": { "inputs": { - "systems": "systems_2" + "systems": "systems_3" }, "locked": { "lastModified": 1681202837, @@ -73,9 +107,9 @@ "type": "github" } }, - "flake-utils_3": { + "flake-utils_4": { "inputs": { - "systems": "systems_4" + "systems": "systems_5" }, "locked": { "lastModified": 1681202837, @@ -112,10 +146,30 @@ "type": "github" } }, - "nixos-wsl": { + "nix-vscode-extensions": { "inputs": { "flake-compat": "flake-compat", "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1698628736, + "narHash": "sha256-ua0xK8rzo6g07ZzSMmhGGzaESaxIxq6rfgWyTwXQBKY=", + "owner": "nix-community", + "repo": "nix-vscode-extensions", + "rev": "6dabe9a8649863bff07d65829ab6f09ac2cf1aba", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-vscode-extensions", + "type": "github" + } + }, + "nixos-wsl": { + "inputs": { + "flake-compat": "flake-compat_2", + "flake-utils": "flake-utils_2", "nixpkgs": [ "nixpkgs" ] @@ -135,6 +189,22 @@ } }, "nixpkgs": { + "locked": { + "lastModified": 1684570954, + "narHash": "sha256-FX5y4Sm87RWwfu9PI71XFvuRpZLowh00FQpIJ1WfXqE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3005f20ce0aaa58169cdee57c8aa12e5f1b6e1b3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1698434055, "narHash": "sha256-Phxi5mUKSoL7A0IYUiYtkI9e8NcGaaV5PJEaJApU1Ko=", @@ -149,7 +219,7 @@ "type": "indirect" } }, - "nixpkgs_2": { + "nixpkgs_3": { "locked": { "lastModified": 1681358109, "narHash": "sha256-eKyxW4OohHQx9Urxi7TQlFBTDWII+F+x2hklDOQPB50=", @@ -184,8 +254,9 @@ "inputs": { "darwin": "darwin", "home-manager": "home-manager", + "nix-vscode-extensions": "nix-vscode-extensions", "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "nur": "nur", "rust-overlay": "rust-overlay", "unstable": "unstable", @@ -195,8 +266,8 @@ }, "rust-overlay": { "inputs": { - "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_2" + "flake-utils": "flake-utils_3", + "nixpkgs": "nixpkgs_3" }, "locked": { "lastModified": 1698545594, @@ -272,6 +343,21 @@ "type": "github" } }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "unstable": { "locked": { "lastModified": 1698318101, @@ -289,7 +375,7 @@ }, "utils": { "inputs": { - "systems": "systems_3" + "systems": "systems_4" }, "locked": { "lastModified": 1694529238, @@ -307,7 +393,7 @@ }, "vscode-server": { "inputs": { - "flake-utils": "flake-utils_3", + "flake-utils": "flake-utils_4", "nixpkgs": [ "nixpkgs" ] diff --git a/flake.nix b/flake.nix index 0471b26..607ffa3 100644 --- a/flake.nix +++ b/flake.nix @@ -8,6 +8,7 @@ utils.url = "github:numtide/flake-utils"; rust-overlay.url = "github:oxalica/rust-overlay"; + nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions"; nixos-wsl = { url = "github:nix-community/NixOS-WSL"; @@ -33,7 +34,7 @@ }; }; - outputs = { self, nixpkgs, unstable, nur, utils, rust-overlay, nixos-wsl, vscode-server, darwin, home-manager, ... }@inputs: { + outputs = { self, nixpkgs, unstable, nur, utils, rust-overlay, nix-vscode-extensions, nixos-wsl, vscode-server, darwin, home-manager, ... }@inputs: { # This repo's overlay plus any other overlays you use # If you want to use packages from flakes that are not nixpkgs (such as NUR), add their overlays here.\ @@ -46,6 +47,7 @@ } ); rust-overlay = rust-overlay.overlays.default; + vscode-extensions = nix-vscode-extensions.overlays.default; }; overlaysModule = { diff --git a/user/modules/vscode.nix b/user/modules/vscode.nix index 5ae63ad..a0044fe 100644 --- a/user/modules/vscode.nix +++ b/user/modules/vscode.nix @@ -1,15 +1,68 @@ -{ config, pkgs, libs, ... }: -{ +{ config, pkgs, ... }: + +let + package = pkgs.vscodium; + + vscodePname = package.pname; + + configDir = { + "vscode" = "Code"; + "vscode-insiders" = "Code - Insiders"; + "vscodium" = "VSCodium"; + }.${vscodePname}; + + userDir = if pkgs.stdenv.hostPlatform.isDarwin then + "Library/Application Support/${configDir}/User" + else + "${config.xdg.configHome}/${configDir}/User"; + + configFilePath = "${userDir}/settings.json"; + keybindingsFilePath = "${userDir}/keybindings.json"; +in { + xdg.configFile."${config.home.homeDirectory}/${configFilePath}".source = + config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/Projects/nix-dots/user/modules/vscode/settings.json"; + + xdg.configFile."${config.home.homeDirectory}/${keybindingsFilePath}".source = + config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/Projects/nix-dots/user/modules/vscode/keybindings.json"; + programs = { vscode = { enable = true; - extensions = [ - # pkgs.vscode-extensions.bbenoist.Nix + inherit package; + extensions = with pkgs.open-vsx; [ + # Editor + vscodevim.vim + pkgs.vscode-marketplace.miguelsolorio.min-theme + streetsidesoftware.code-spell-checker + + # Git + mhutchie.git-graph + waderyan.gitblame + + # Web Development + astro-build.astro-vscode + redwan-hossain.auto-rename-tag-clone + bradlc.vscode-tailwindcss + johnsoncodehk.volar + svelte.svelte-vscode + dbaeumer.vscode-eslint + esbenp.prettier-vscode + antfu.iconify + csstools.postcss + + # Dart / Flutter + dart-code.dart-code + + # Java + redhat.java + vscjava.vscode-java-debug + vscjava.vscode-java-test + vscjava.vscode-maven + vscjava.vscode-java-dependency + + # Nix + jnoortheen.nix-ide ]; - # userSettings = { - # "editor.fontFamily" = "'FiraCode Nerd Font', 'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback'"; - # "editor.tabSize" = 2; - # }; }; }; -} \ No newline at end of file +} diff --git a/user/modules/vscode/keybindings.json b/user/modules/vscode/keybindings.json new file mode 100644 index 0000000..2176d5e --- /dev/null +++ b/user/modules/vscode/keybindings.json @@ -0,0 +1,34 @@ +[ + { + "key": "ctrl+alt+q", + "command": "workbench.action.quickOpenView" + }, + { + "key": "ctrl+q", + "command": "-workbench.action.quickOpenView" + }, + { + "key": "ctrl+shift+alt+q", + "command": "workbench.action.quickOpenNavigatePreviousInViewPicker", + "when": "inQuickOpen && inViewsPicker" + }, + { + "key": "ctrl+shift+q", + "command": "-workbench.action.quickOpenNavigatePreviousInViewPicker", + "when": "inQuickOpen && inViewsPicker" + }, + { + "key": "ctrl+alt+q", + "command": "workbench.action.quickOpenNavigateNextInViewPicker", + "when": "inQuickOpen && inViewsPicker" + }, + { + "key": "ctrl+q", + "command": "-workbench.action.quickOpenNavigateNextInViewPicker", + "when": "inQuickOpen && inViewsPicker" + }, + { + "key": "shift shift", + "command": "workbench.action.quickOpen" + } +] diff --git a/user/modules/vscode/settings.json b/user/modules/vscode/settings.json new file mode 100644 index 0000000..d24b994 --- /dev/null +++ b/user/modules/vscode/settings.json @@ -0,0 +1,164 @@ +{ + "git.enableSmartCommit": true, + "git.autofetch": true, + "git.confirmSync": false, + "editor.tabSize": 2, + "editor.fontSize": 14, + "editor.fontFamily": "'CaskaydiaCove Nerd Font', 'Cascadia Code', Menlo, Monaco, 'Courier New', monospace", + "workbench.editorAssociations": { + "*.ipynb": "jupyter-notebook" + }, + "editor.lineHeight": 20, + "editor.suggestSelection": "first", + "vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue", + "files.exclude": { + "**/.classpath": true, + "**/.project": true, + "**/.settings": true, + "**/.factorypath": true + }, + "explorer.confirmDragAndDrop": false, + "intelephense.stubs": [ + "apache", + "bcmath", + "bz2", + "calendar", + "com_dotnet", + "Core", + "ctype", + "curl", + "date", + "dba", + "dom", + "enchant", + "exif", + "FFI", + "fileinfo", + "filter", + "fpm", + "ftp", + "gd", + "gettext", + "gmp", + "hash", + "iconv", + "imap", + "intl", + "json", + "ldap", + "libxml", + "mbstring", + "meta", + "mysqli", + "oci8", + "odbc", + "openssl", + "pcntl", + "pcre", + "PDO", + "pdo_ibm", + "pdo_mysql", + "pdo_pgsql", + "pdo_sqlite", + "pgsql", + "Phar", + "posix", + "pspell", + "readline", + "Reflection", + "session", + "shmop", + "SimpleXML", + "snmp", + "soap", + "sockets", + "sodium", + "SPL", + "sqlite3", + "standard", + "superglobals", + "sysvmsg", + "sysvsem", + "sysvshm", + "tidy", + "tokenizer", + "xml", + "xmlreader", + "xmlrpc", + "xmlwriter", + "xsl", + "Zend OPcache", + "zip", + "zlib", + "wordpress" + ], + "terminal.integrated.fontFamily": "'CaskaydiaCove Nerd Font Mono', 'Cascadia Mono PL'", + "terminal.integrated.fontSize": 13, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "svelte.enable-ts-plugin": true, + "svelte.plugin.svelte.note-new-transformation": false, + "editor.accessibilitySupport": "off", + "editor.smoothScrolling": true, + "workbench.list.smoothScrolling": true, + "window.commandCenter": false, + "java.eclipse.downloadSources": true, + "java.configuration.runtimes": [ + { + "name": "JavaSE-17", + "path": "/opt/homebrew/Cellar/openjdk@17/17.0.6/libexec/openjdk.jdk/Contents/Home", + "default": true + } + ], + "editor.minimap.enabled": false, + "eslint.format.enable": true, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "editor.formatOnSave": true, + "[html]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[vue]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "[markdown]": { + "editor.wordWrap": "bounded" + }, + "[latex]": { + "editor.wordWrap": "bounded" + }, + "workbench.editor.enablePreview": false, + "typescript.updateImportsOnFileMove.enabled": "always", + "diffEditor.ignoreTrimWhitespace": false, + "[python]": { + "editor.defaultFormatter": "ms-python.black-formatter" + }, + "[dart]": { + "editor.formatOnSave": true, + "editor.formatOnType": true, + "editor.rulers": [ + 80 + ], + "editor.selectionHighlight": false, + "editor.suggestSelection": "first", + "editor.tabCompletion": "onlySnippets", + "editor.wordBasedSuggestions": false + }, + "[svelte]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "workbench.colorTheme": "Min Dark", + "nix.enableLanguageServer": true, + "nix.serverPath": "nil" +}