Vic's *Nix config.

den

new beginnings

local inputs

Changed files
+1138 -3270
modules
community
flake
hosts
packages
vic
non-dendritic
+1
.gitignore
··· 4 4 .devenv 5 5 .direnv 6 6 .DS_Store 7 + *cow*
-21
.leaderrc
··· 1 - { 2 - "name": "Leader", 3 - "keys": { 4 - "R": "nh-reboot", 5 - "c": "nh clean all", 6 - "C": "nh-clean-boot", 7 - "s": "nh os switch", 8 - "b": "nh os boot", 9 - "S": "nr-switch", 10 - "f": "nix fmt", 11 - "r": "nh os repl", 12 - "F": { 13 - "name": "flake", 14 - "keys": { 15 - "u": "nix flake update", 16 - "s": "nix flake show", 17 - "c": "nix flake check" 18 - } 19 - } 20 - } 21 - }
+432 -125
README.md
··· 1 - # Vic's Nix Environment 1 + # vix - A Dendritic NixOS Configuration 2 + 3 + A complete example of the **dendritic pattern** for NixOS, using [den](https://github.com/vic/den) to achieve composable, aspect-oriented system configuration. 4 + 5 + This repository demonstrates how to structure a real-world NixOS setup using: 6 + - [den](https://github.com/vic/den) - Dendritic configuration framework 7 + - [flake-aspects](https://github.com/vic/flake-aspects) - Aspect-oriented programming for Nix 8 + - [flake-file](https://github.com/vic/flake-file) - Auto-generated flake management 9 + - [import-tree](https://github.com/vic/import-tree) - Automatic module discovery 10 + 11 + ## Try It Out 12 + 13 + Experience the dendritic pattern immediately: 14 + ```bash 15 + nix run github:vic/vix/den#vm 16 + ``` 17 + 18 + This launches a VM configured with the same dendritic structure as the production system. 19 + 20 + ## Understanding the Dendritic Structure 21 + 22 + ### 🎯 Core Concept: Aspects Over Modules 23 + 24 + Traditional NixOS configurations use modules that get imported into a monolithic tree. The dendritic pattern uses **aspects**—named, composable units that can be mixed and matched without creating deep import hierarchies. 25 + 26 + ### 📁 Repository Structure 27 + 28 + ``` 29 + modules/ 30 + ├── dendritic.nix # Entry point: initializes dendritic setup 31 + ├── vix.nix # Custom aspect namespace 32 + ├── hosts.nix # Host declarations & default profiles 33 + ├── vm.nix # VM launcher for development 34 + 35 + ├── community/ # Reusable aspects (candidate for upstreaming) 36 + │ ├── profile.nix # Host/user profile hooks 37 + │ ├── unfree.nix # Aspect for unfree packages 38 + │ ├── autologin.nix # Parametric autologin aspect 39 + │ ├── *-desktop.nix # Desktop environment aspects 40 + │ └── dev-laptop.nix # Composed laptop aspect 41 + 42 + ├── vic/ # User-specific aspects 43 + │ ├── common-host-env.nix # User environment composition 44 + │ ├── admin.nix # User permissions aspect 45 + │ ├── fish.nix # Shell configuration aspect 46 + │ ├── dots.nix # Dotfile management aspect 47 + │ └── *.nix # Individual feature aspects 48 + 49 + └── hosts/ 50 + └── nargun.nix # Host-specific aspect composition with vm variant. 51 + ``` 52 + 53 + ## Key Benefits of This Structure 54 + 55 + ### 1. **Namespace Isolation** ([`vix.nix`](modules/vix.nix)) 56 + 57 + Created my own aspect namespace without polluting the global scope: 58 + 59 + ```nix 60 + # vix is actually: den.aspects.vix.provides. 61 + { vix, ... }: { # read access 62 + vix.gaming = ...; # write access 63 + } 64 + ``` 65 + 66 + **Benefit**: All my aspects live under `vix.*`, making it clear what's yours vs. what comes from den or other sources. 67 + 68 + ### 2. **Declarative Host Registration** ([`hosts.nix`](modules/hosts.nix)) 69 + 70 + Declare hosts and users in one place: 71 + 72 + ```nix 73 + den.hosts.x86_64-linux.nargun.users.vic = { }; 74 + den.hosts.x86_64-linux.nargun-vm.users.vic = { }; 75 + ``` 76 + 77 + **Benefit**: Clear overview of your infrastructure. No hidden host definitions scattered across files. 78 + 79 + ### 3. **Profile Hooks for Automatic Composition** ([`profile.nix`](modules/community/profile.nix)) 80 + 81 + Set default includes for all hosts and users: 82 + 83 + ```nix 84 + den.default.host._.host.includes = [ 85 + vix.host-profile 86 + den.home-manager 87 + ]; 88 + 89 + den.default.user._.user.includes = [ 90 + vix.user-profile 91 + ]; 92 + ``` 93 + 94 + **Benefit**: Every host/user automatically gets base configuration without manual wiring. Add once, applies everywhere. 95 + 96 + ### 4. **Parametric Aspects** ([`profile.nix`](modules/community/profile.nix)) 97 + 98 + Profiles can dynamically select aspects based on host/user names: 99 + 100 + ```nix 101 + vix.host-profile = { host }: { 102 + includes = [ 103 + (vix.${host.name} or { }) # Host-specific if exists 104 + (vix.host-name host) # Parametric hostname setter 105 + vix.state-version # Common to all hosts 106 + ]; 107 + }; 108 + ``` 109 + 110 + **Benefit**: Generic code that adapts to context. No hardcoded names, fully reusable. 111 + 112 + ### 5. **Aspect Composition** ([`nargun.nix`](modules/hosts/nargun.nix)) 113 + 114 + Hosts are built by composing aspects: 115 + 116 + ```nix 117 + vix.nargun.includes = [ 118 + vix.nargun._.base 119 + vix.nargun._.hw 120 + ]; 121 + 122 + vix.nargun.provides = { 123 + hw.includes = [ 124 + vix.mexico # Locale configuration 125 + vix.bootable # Boot loader setup 126 + vix.kvm-amd # Virtualization support 127 + vix.niri-desktop # Window manager 128 + vix.kde-desktop # Fallback desktop 129 + ]; 130 + 131 + base.includes = [ 132 + vix.dev-laptop # Common laptop features 133 + ]; 134 + }; 135 + ``` 136 + 137 + **Benefit**: 138 + - Mix hardware configs, desktops, and features freely 139 + - Share common setups between real hardware and VM 140 + - Easy to see what a host includes at a glance 141 + 142 + ### 6. **Shared Configuration Between Host Variants** ([`nargun.nix`](modules/hosts/nargun.nix)) 143 + 144 + Production and VM hosts share a base: 145 + 146 + ```nix 147 + vix.nargun-vm.includes = [ 148 + vix.nargun._.base # Shared configuration 149 + vix.nargun._.vm # VM-specific overrides 150 + ]; 151 + ``` 152 + 153 + **Benefit**: Test your actual configuration in a VM with minimal differences. No "works on my VM" problems. 154 + 155 + ### 7. **Hierarchical Aspect Organization** ([`nargun.nix`](modules/hosts/nargun.nix)) 156 + 157 + Use `provides` to create sub-aspects: 158 + 159 + ```nix 160 + vix.nargun.provides = { 161 + base.includes = [...]; # vix.nargun._.base 162 + hw.includes = [...]; # vix.nargun._.hw 163 + vm.includes = [...]; # vix.nargun._.vm 164 + }; 165 + ``` 166 + 167 + **Benefit**: Organize related configuration without creating separate files. The `_` makes sub-aspects non-recursive. 168 + 169 + ### 8. **User Environment Composition** ([`common-host-env.nix`](modules/vic/common-host-env.nix)) 170 + 171 + Compose user environments from small, focused aspects: 172 + 173 + ```nix 174 + vix.vic._.common-host-env = { host, user }: { 175 + includes = map (f: f { inherit host user; }) [ 176 + vix.vic.provides.admin 177 + vix.vic.provides.fish 178 + vix.vic.provides.terminals 179 + vix.vic.provides.editors 180 + vix.vic.provides.doom-btw 181 + vix.vic.provides.vim-btw 182 + // ... more aspects 183 + ]; 184 + }; 185 + ``` 186 + 187 + **Benefit**: 188 + - Each aspect is small, testable, focused 189 + - Easy to enable/disable features 190 + - Functions receive context (`host`, `user`) for parametric behavior 191 + 192 + ### 9. **Parametric, Generic Aspects** ([`admin.nix`](modules/vic/admin.nix), [`fish.nix`](modules/vic/fish.nix)) 193 + 194 + Aspects accept parameters instead of hardcoding values: 195 + 196 + ```nix 197 + # admin.nix 198 + vix.vic.provides.admin = { user, ... }: { 199 + nixos.users.users.${user.userName} = { 200 + isNormalUser = true; 201 + extraGroups = [ "wheel" "networkmanager" ]; 202 + }; 203 + }; 204 + 205 + # fish.nix 206 + vix.vic.provides.fish = { user, ... }: { 207 + nixos.users.users.${user.userName}.shell = pkgs.fish; 208 + homeManager.programs.fish.enable = true; 209 + }; 210 + ``` 211 + 212 + **Benefit**: Aspects are reusable across different users/hosts. Change username once in host declaration, everything updates. 213 + 214 + ### 10. **Multi-Class Aspects** ([`fish.nix`](modules/vic/fish.nix)) 215 + 216 + Single aspect can configure multiple "classes" (nixos, homeManager, darwin, etc.): 217 + 218 + ```nix 219 + vix.vic.provides.fish = { user, ... }: { 220 + nixos = { pkgs, ... }: { 221 + programs.fish.enable = true; 222 + users.users.${user.userName}.shell = pkgs.fish; 223 + }; 224 + 225 + homeManager = { 226 + programs.fish.enable = true; 227 + }; 228 + }; 229 + ``` 230 + 231 + **Benefit**: Related configuration stays together. System-level and user-level config for one feature in one file. 232 + 233 + ### 11. **Reusable Community Aspects** ([`modules/community/`](modules/community/)) 234 + 235 + Structure promotes sharing: 236 + 237 + ``` 238 + community/ 239 + ├── profile.nix # Integration hooks 240 + ├── unfree.nix # Unfree package handling 241 + ├── autologin.nix # Parametric autologin 242 + ├── *-desktop.nix # Desktop environments 243 + └── dev-laptop.nix # Feature compositions 244 + ``` 245 + 246 + **Benefit**: 247 + - Clear separation of reusable vs. personal 248 + - Easy to upstream to [denful](https://github.com/vic/denful) 249 + - Stop copy-pasting, start sharing 2 250 3 - [![CI](https://github.com/vic/vix/actions/workflows/build-systems.yaml/badge.svg)](https://github.com/vic/vix/actions/workflows/build-systems.yaml) 4 - [![Cachix](https://img.shields.io/badge/cachix-vix-blue.svg)](https://app.cachix.org/cache/vix) 5 - [![Dendritic Pattern](https://img.shields.io/badge/pattern-dendritic-6c3.svg)](https://vic.github.io/dendrix/Dendritic.html) 251 + ### 12. **Functional Aspects with Parameters** ([`unfree.nix`](modules/community/unfree.nix)) 6 252 7 - Welcome! This repository is vic's, modular, and shareable NixOS/MacOS/WSL configuration, designed both for my own use and as a template for anyone interested in the [Dendritic](https://vic.github.io/dendrix/Dendritic.html) pattern. Whether you're new to Nix or a seasoned user, you'll find reusable modules, clear structure, and plenty of pointers to help you get started or extend your own setup. 253 + Aspects can be functions that return aspects: 8 254 9 - --- 255 + ```nix 256 + vix.unfree = allowed-names: { 257 + __functor = _: { class, aspect-chain }: { 258 + ${class}.nixpkgs.config.allowUnfreePredicate = 259 + pkg: builtins.elem (lib.getName pkg) allowed-names; 260 + }; 261 + }; 10 262 11 - ## Table of Contents 263 + # Usage: 264 + vix.vic.provides.editors.includes = [ 265 + (vix.unfree [ "cursor" "vscode" ]) 266 + ]; 267 + ``` 268 + 269 + **Benefit**: Create aspect factories. Same pattern, different parameters. No duplication. 270 + 271 + ### 13. **Development Workflow with VM** ([`vm.nix`](modules/vm.nix)) 272 + 273 + Package your system as a runnable VM: 274 + 275 + ```nix 276 + packages.vm = pkgs.writeShellApplication { 277 + name = "vm"; 278 + text = '' 279 + ${inputs.self.nixosConfigurations.nargun-vm.config.system.build.vm}/bin/run-nargun-vm-vm "$@" 280 + ''; 281 + }; 282 + ``` 12 283 13 - 1. [Overview](#overview) 14 - 2. [Getting Started](#getting-started) 15 - 3. [Host Configurations](#host-configurations) 16 - 4. [Everyday Usage](#everyday-usage) 17 - 5. [Shareable Modules & Features](#shareable-modules--features) 18 - - [Community Modules Overview](#community-modules-overview) 19 - 6. [For Contributors](#for-contributors) 20 - 7. [Quaerendo Invenietis](#quaerendo-invenietis) 21 - 8. [CI & Caching](#ci--caching) 22 - 9. [References](#references) 284 + **Benefit**: 285 + - Test configuration changes without rebooting 286 + - Share exact system state with others via `nix run` 287 + - Rapid iteration during development 23 288 24 - --- 289 + ### 14. **Smart Dotfile Management** ([`dots.nix`](modules/vic/dots.nix)) 25 290 26 - ## Overview 291 + Out-of-store symlinks for live editing: 27 292 28 - - **Dendritic Pattern:** 29 - This repo uses [`vic/flake-file`](https://github.com/vic/flake-file) to automatically generate `flake.nix` from [inputs defined on modules](https://github.com/search?q=repo%3Avic%2Fvix%20%22flake-file.inputs%22%20language%3ANix&type=code), flattening dependencies for you. The entrypoint is [`modules/flake/dendritic.nix`](modules/flake/dendritic.nix). 30 - [`vic/import-tree`](https://github.com/vic/import-tree) then auto-discovers and loads all `./modules/**/*.nix` files, so you can focus on writing modular, reusable code. 293 + ```nix 294 + dotsLink = path: 295 + config.lib.file.mkOutOfStoreSymlink 296 + "${config.home.homeDirectory}/.flake/modules/vic/dots/${path}"; 31 297 32 - - **Modular Structure:** 33 - - `modules/community/`: Shareable, generic modules and features for any NixOS/Darwin system. 34 - - `modules/vic/`: Personal, but some modules are reusable (see below). 35 - - `modules/hosts/`: Per-host configuration (see [osConfigurations.nix](modules/flake/osConfigurations.nix)). 298 + home.file.".config/nvim".source = dotsLink "config/nvim"; 299 + ``` 36 300 37 - --- 301 + **Benefit**: Edit dotfiles directly, changes reflect immediately without rebuilding. Best of both worlds. 38 302 39 - ## Getting Started 303 + ## Getting Started with Dendritic 40 304 41 - It's easy to get going! Clone the repo, link it, and (optionally) set up secrets: 305 + ### 1. Bootstrap from Template 42 306 43 - ```fish 44 - git clone https://github.com/vic/vix ~/vix 45 - ln -sfn ~/vix ~/.flake 46 - # (Optional) Setup SOPS keys if using secrets 47 - nix run path:~/vix#vic-sops-get -- --keyservice tcp://SOPS_SERVER:5000 -f SSH_KEY --setup - >> ~/.config/sops/age/keys.txt 307 + ```bash 308 + nix flake init -t github:vic/flake-file#dendritic 309 + nix flake update 48 310 ``` 49 311 50 - - **NixOS:** 51 - `nixos-install --root /mnt --flake ~/vix#HOST` 52 - - **Darwin/WSL/Ubuntu:** 53 - `nix run path:~/vix#os-rebuild -- HOST switch` 312 + This creates: 313 + - [`modules/dendritic.nix`](modules/dendritic.nix) - Den initialization 314 + - Basic structure following the pattern 54 315 55 - --- 316 + ### 2. Create Your Namespace ([`vix.nix`](modules/vix.nix)) 56 317 57 - ## Host Configurations 318 + ```nix 319 + { config, lib, ... }: 320 + { 321 + den.aspects.myname.provides = { }; 322 + _module.args.myname = config.den.aspects.myname.provides; 323 + flake.myname = config.den.aspects.myname.provides; 324 + imports = [ (lib.mkAliasOptionModule [ "myname" ] [ "den" "aspects" "myname" "provides" ]) ]; 325 + } 326 + ``` 58 327 59 - All hosts are defined in [`modules/hosts/`](modules/hosts/), and exposed via [`osConfigurations.nix`](modules/flake/osConfigurations.nix). 328 + ### 3. Register Hosts ([`hosts.nix`](modules/hosts.nix)) 60 329 61 - | Host | Platform | Users | Notes | 62 - | -------- | ------------ | ---------- | ----------------------- | 63 - | bombadil | NixOS ISO | vic | USB installer, CI build | 64 - | varda | MacOS (M4) | vic | Mac Mini | 65 - | yavanna | MacOS (x86) | vic | MacBook Pro | 66 - | nienna | NixOS | vic | MacBook Pro | 67 - | mordor | NixOS | vic | ASUS ROG Tower | 68 - | annatar | WSL2 | vic | ASUS ROG Tower | 69 - | nargun | NixOS | vic | Lenovo Laptop | 70 - | smaug | NixOS | vic | HP Laptop | 71 - | bill | Ubuntu (ARM) | runner/vic | GH Action Runner | 72 - | bert | MacOS (ARM) | runner/vic | GH Action Runner | 73 - | tom | Ubuntu | runner/vic | GH Action Runner | 330 + ```nix 331 + { myname, den, ... }: 332 + { 333 + den.hosts.x86_64-linux.myhost.users.myuser = { }; 74 334 75 - --- 335 + den.default.host._.host.includes = [ 336 + myname.host-profile 337 + den.home-manager 338 + ]; 76 339 77 - ## Everyday Usage 340 + den.default.user._.user.includes = [ 341 + myname.user-profile 342 + ]; 343 + } 344 + ``` 78 345 79 - - **Rebuild any host:** 80 - `nix run path:~/vix#os-rebuild -- HOST switch` 81 - - **Rotate secrets:** 82 - `nix develop .#nixos -c vic-sops-rotate` 346 + ### 4. Create Profile Hooks (see [`profile.nix`](modules/community/profile.nix)) 83 347 84 - --- 348 + ```nix 349 + myname.host-profile = { host }: { 350 + includes = [ 351 + (myname.${host.name} or { }) 352 + myname.state-version 353 + ]; 354 + }; 85 355 86 - ## Shareable Modules & Features 356 + myname.user-profile = { host, user }: { 357 + includes = [ 358 + ((myname.${user.name}._.common-host-env or (_: { })) { inherit host user; }) 359 + ]; 360 + }; 361 + ``` 87 362 88 - This repository is not just for me! Many modules are designed to be reused in your own Nix setups, especially if you want to try the Dendritic pattern. You can browse the [`modules/community/`](https://github.com/vic/vix/tree/main/modules/community) directory, or use the `dendrix.vic-vix` tree in your own flake. 363 + ### 5. Define Host Aspects (see [`nargun.nix`](modules/hosts/nargun.nix)) 89 364 90 365 ```nix 91 - # Example usage in your own flake 92 - { inputs, lib, ...}: { 93 - imports = [ 94 - # Use import-tree's API to select only the files you need 95 - inputs.dendrix.vic-vix.filter(lib.hasSuffix "xfce-desktop.nix") 366 + { myname, ... }: 367 + { 368 + myname.myhost.includes = [ 369 + myname.bootable 370 + myname.networking 371 + myname.my-desktop 96 372 ]; 97 373 } 98 374 ``` 99 375 100 - ### Community Modules Overview 376 + ### 6. Build User Environment (see [`common-host-env.nix`](modules/vic/common-host-env.nix)) 101 377 102 - #### features/ 378 + ```nix 379 + myname.myuser._.common-host-env = { host, user }: { 380 + includes = map (f: f { inherit host user; }) [ 381 + myname.myuser.provides.admin 382 + myname.myuser.provides.shell 383 + myname.myuser.provides.editor 384 + ]; 385 + }; 386 + ``` 103 387 104 - - **\_macos-keys.nix**: MacOS-specific key management helpers. 105 - - **all-firmware.nix**: Installs all available firmware blobs for broad hardware support. 106 - - **bootable-private.nix**: Example for hiding private files in bootable images. 107 - - **bootable.nix**: Makes a NixOS system image bootable (for ISOs/USB). 108 - - **darwin.nix**: MacOS-specific system settings and tweaks. 109 - - **gnome-desktop.nix**: GNOME desktop environment configuration. 110 - - **kde-desktop.nix**: KDE desktop environment configuration. 111 - - **kvm+amd.nix**: KVM/QEMU virtualization support for AMD CPUs. 112 - - **kvm+intel.nix**: KVM/QEMU virtualization support for Intel CPUs. 113 - - **macos-keys.nix**: (Alias/duplicate) MacOS key management. 114 - - **nix-setttings.nix**: Common Nix settings. 115 - - **nixos.nix**: NixOS-specific system settings. 116 - - **nvidia.nix**: NVIDIA GPU support and configuration. 117 - - **platform.nix**: Platform detection and helpers (Linux, Darwin, WSL, etc). 118 - - **rdesk+inputleap+anydesk.nix**: Remote desktop and input sharing tools. 119 - - **unfree.nix**: Enables unfree packages and related options. 120 - - **wl-broadcom.nix**: Broadcom wireless support for Linux. 121 - - **wsl.nix**: WSL2-specific tweaks and integration. 122 - - **xfce-desktop.nix**: XFCE desktop environment configuration. 388 + ## Design Principles 123 389 124 - #### flake/ 390 + ### Aspect Composition Over Module Imports 125 391 126 - - **formatter.nix**: Nix formatter configuration for consistent code style. 127 - - **systems.nix**: Supported system types/architectures for the flake. 392 + **Traditional NixOS:** 393 + ```nix 394 + imports = [ 395 + ./hardware.nix 396 + ./networking.nix 397 + ./desktop.nix 398 + ./users/vic.nix 399 + ]; 400 + ``` 128 401 129 - #### home/ 402 + **Dendritic Pattern:** 403 + ```nix 404 + vix.nargun.includes = [ 405 + vix.hardware 406 + vix.networking 407 + vix.desktop 408 + ]; 409 + ``` 410 + 411 + Benefits: 412 + - Aspects are named and first-class 413 + - Can be referenced, composed, and parameterized 414 + - No relative path management 415 + - Clear dependency relationships 416 + 417 + ### Parametric by Default 418 + 419 + All aspects should accept `{ host, user }` when relevant: 420 + 421 + ```nix 422 + # ❌ Hardcoded 423 + vix.vic.admin.nixos.users.users.vic = { ... }; 130 424 131 - - **nix-index.nix**: Home-manager integration for `nix-index` (fast file search). 132 - - **nix-registry.nix**: Home-manager integration for Nix registry pinning. 133 - - **vscode-server.nix**: Home-manager config for VSCode server (remote editing). 425 + # ✅ Parametric 426 + vix.vic.provides.admin = { user, ... }: { 427 + nixos.users.users.${user.userName} = { ... }; 428 + }; 429 + ``` 134 430 135 - #### lib/ 431 + ### Separate Personal from Shareable 136 432 137 - - **+hosts-by-system.nix**: Utility to group hosts by system type. 138 - - **+mk-os.nix**: Helper for creating OS-specific module sets. 139 - - **+unfree-module.nix**: Helper for enabling unfree modules. 140 - - **option.nix**: Option utilities for Nix modules. 433 + - `modules/community/` - Reusable, generic, upstreamable 434 + - `modules/{yourname}/` - Personal, specific to your needs 435 + - `modules/hosts/` - Host-specific configuration 141 436 142 - #### packages/ 437 + When something in your personal namespace becomes useful, move it to `community/` and consider upstreaming to [denful](https://github.com/vic/denful). 143 438 144 - - **+gh-flake-update.nix**: Script to update flake inputs and create a GitHub PR. 145 - - **+os-rebuild.nix**: Universal rebuild script for any host. 439 + ## Learning Path 146 440 147 - --- 441 + Follow this sequence to understand the pattern: 148 442 149 - ## For Contributors 443 + 1. **[`dendritic.nix`](modules/dendritic.nix)** - How den is initialized 444 + 2. **[`vix.nix`](modules/vix.nix)** - Creating a custom namespace 445 + 3. **[`hosts.nix`](modules/hosts.nix)** - Host registration and default hooks 446 + 4. **[`profile.nix`](modules/community/profile.nix)** - Profile system for automatic composition 447 + 5. **[`nargun.nix`](modules/hosts/nargun.nix)** - Host aspect composition example 448 + 6. **[`common-host-env.nix`](modules/vic/common-host-env.nix)** - User environment composition 449 + 7. **[`admin.nix`](modules/vic/admin.nix)**, **[`fish.nix`](modules/vic/fish.nix)** - Simple parametric aspects 450 + 8. **[`unfree.nix`](modules/community/unfree.nix)** - Advanced: functional aspects 451 + 9. **[`vm.nix`](modules/vm.nix)** - Development workflow 150 452 151 - - Contributions are accepted mostly for files under `modules/community/`. 152 - - All other modules like `modules/hosts/HOST/`, or `modules/vic` are most 153 - likely only useful for me, but the most I can move to community the better. 154 - - My hosts are exposed at [`modules/flake/osConfigurations.nix`](modules/flake/osConfigurations.nix). 453 + ## Contributing to the Dendritic Ecosystem 155 454 156 - --- 455 + Found something useful in this repo? Instead of copy-pasting: 157 456 158 - ## Quaerendo Invenietis 457 + 1. Move it to `modules/community/` if it's not already there 458 + 2. Make it parametric and generic 459 + 3. Open an issue to discuss upstreaming to [denful](https://github.com/vic/denful) 159 460 160 - If you need help with something, just ask. I'll be happy to help. 461 + The goal is to build a library of well-maintained, composable aspects that everyone can benefit from. 161 462 162 - --- 463 + ## Migration Notes 163 464 164 - ## CI & Caching 465 + This repository represents a complete rewrite of vix using the dendritic pattern. The old monolithic approach is preserved in the `main` branch for reference. 165 466 166 - - [GitHub Actions](.github/workflows/build-systems.yaml) builds and caches all hosts. 167 - - [Cachix](https://app.cachix.org/cache/vix) used for binary caching. 467 + **Development workflow:** Boot from stable `main` branch, edit this `den` branch, test changes via `nix run .#vm` without rebooting. 168 468 169 - There's also actions for reminding me to SOP rotate secrets and flake updates. 469 + ## Why Dendritic? 170 470 171 - --- 471 + Traditional NixOS configurations grow into tangled import trees. You end up with: 472 + - Deep hierarchies hard to navigate 473 + - Unclear dependencies 474 + - Difficulty reusing configuration 475 + - Copy-paste proliferation 172 476 173 - ## References 477 + The dendritic pattern solves this by: 478 + - **Named aspects** instead of file paths 479 + - **Composition** instead of inheritance 480 + - **Parameters** instead of hardcoded values 481 + - **Namespaces** instead of global scope 482 + - **Automatic discovery** via import-tree 483 + - **First-class functions** for aspect factories 174 484 175 - - [Dendritic Pattern](https://github.com/mightyiam/dendritic) 176 - - [vic/flake-file](https://github.com/vic/flake-file) 177 - - [vic/import-tree](https://github.com/vic/import-tree) 178 - - [Dendrix Layers](https://github.com/vic/dendrix) 485 + The result: configuration that's easier to understand, modify, test, and share. 179 486 180 487 --- 181 488 182 - _For more details, see the [modules](modules/) directory and comments in each file._ 489 + **See also:** [den documentation](https://github.com/vic/den), [flake-aspects](https://github.com/vic/flake-aspects), [denful](https://github.com/vic/denful)
+54 -488
flake.lock
··· 76 76 "type": "github" 77 77 } 78 78 }, 79 - "devshell": { 80 - "inputs": { 81 - "nixpkgs": "nixpkgs_3" 82 - }, 79 + "den": { 83 80 "locked": { 84 - "lastModified": 1741473158, 85 - "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=", 86 - "owner": "numtide", 87 - "repo": "devshell", 88 - "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0", 81 + "lastModified": 1761868207, 82 + "narHash": "sha256-7SFc4wObbOSKsqopFN6HuAZP6OZp6ORwVlKURCKl6OM=", 83 + "owner": "vic", 84 + "repo": "den", 85 + "rev": "4e505fe86821776357c2c13a567e1628f974db21", 89 86 "type": "github" 90 87 }, 91 88 "original": { 92 - "owner": "numtide", 93 - "repo": "devshell", 89 + "owner": "vic", 90 + "repo": "den", 94 91 "type": "github" 95 92 } 96 93 }, ··· 110 107 "type": "github" 111 108 } 112 109 }, 113 - "edgevpn": { 114 - "flake": false, 115 - "locked": { 116 - "lastModified": 1756497901, 117 - "narHash": "sha256-c1KokbwuPgbRMvF40hD78ppf1VfcyR4PQd21/Dq6nk8=", 118 - "owner": "mudler", 119 - "repo": "edgevpn", 120 - "rev": "45ace51385b5aad01ad8712853c90d559a339ee4", 121 - "type": "github" 122 - }, 123 - "original": { 124 - "owner": "mudler", 125 - "repo": "edgevpn", 126 - "type": "github" 127 - } 128 - }, 129 - "enthium": { 130 - "flake": false, 131 - "locked": { 132 - "lastModified": 1757459180, 133 - "narHash": "sha256-JGUlTiNq+JPAHc+kiZUv0ytTwdy5xhVwDg5dH4X9onI=", 134 - "owner": "sunaku", 135 - "repo": "enthium", 136 - "rev": "f82f60446e00cc9e3d948b56d449d766d6183781", 137 - "type": "github" 138 - }, 139 - "original": { 140 - "owner": "sunaku", 141 - "ref": "v10", 142 - "repo": "enthium", 143 - "type": "github" 144 - } 145 - }, 146 110 "flake-aspects": { 147 111 "locked": { 148 - "lastModified": 1760660080, 149 - "narHash": "sha256-DQoC7mZkWUGML5yZTfFoHBWsQquCtowwqcwbN5sCr7c=", 112 + "lastModified": 1761855217, 113 + "narHash": "sha256-hw/JcRW+th/7wm2W3cj3Iy8gLZhshtbaq26v8J15dGM=", 150 114 "owner": "vic", 151 115 "repo": "flake-aspects", 152 - "rev": "071a69188e4f309c678da6afcc249994024817a3", 116 + "rev": "c1773064daef959c3eb3b002b785a713691aa524", 153 117 "type": "github" 154 118 }, 155 119 "original": { ··· 158 122 "type": "github" 159 123 } 160 124 }, 161 - "flake-compat": { 162 - "flake": false, 163 - "locked": { 164 - "lastModified": 1747046372, 165 - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", 166 - "owner": "edolstra", 167 - "repo": "flake-compat", 168 - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", 169 - "type": "github" 170 - }, 171 - "original": { 172 - "owner": "edolstra", 173 - "repo": "flake-compat", 174 - "type": "github" 175 - } 176 - }, 177 125 "flake-file": { 178 126 "locked": { 179 - "lastModified": 1760677764, 180 - "narHash": "sha256-MD7KKtYk3kicJC5UM/BNIbMwDGBOVUN14J8Ej9rx2ro=", 127 + "lastModified": 1761535278, 128 + "narHash": "sha256-OPZ7XpG778i9CIJfchAwgrZGZ9z1dWJzfN18VFxCyS4=", 181 129 "owner": "vic", 182 130 "repo": "flake-file", 183 - "rev": "232a812b066d570368dd22ec07b65791479f0c84", 131 + "rev": "57b2a65831ae49e4f9218dbba1c2dc9700f6cd68", 184 132 "type": "github" 185 133 }, 186 134 "original": { ··· 191 139 }, 192 140 "flake-parts": { 193 141 "inputs": { 194 - "nixpkgs-lib": "nixpkgs-lib" 195 - }, 196 - "locked": { 197 - "lastModified": 1759362264, 198 - "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=", 199 - "owner": "hercules-ci", 200 - "repo": "flake-parts", 201 - "rev": "758cf7296bee11f1706a574c77d072b8a7baa881", 202 - "type": "github" 203 - }, 204 - "original": { 205 - "owner": "hercules-ci", 206 - "repo": "flake-parts", 207 - "type": "github" 208 - } 209 - }, 210 - "flake-parts_2": { 211 - "inputs": { 212 - "nixpkgs-lib": "nixpkgs-lib_2" 142 + "nixpkgs-lib": [ 143 + "nixpkgs-lib" 144 + ] 213 145 }, 214 146 "locked": { 215 - "lastModified": 1759362264, 216 - "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=", 147 + "lastModified": 1760948891, 148 + "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=", 217 149 "owner": "hercules-ci", 218 150 "repo": "flake-parts", 219 - "rev": "758cf7296bee11f1706a574c77d072b8a7baa881", 151 + "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04", 220 152 "type": "github" 221 153 }, 222 154 "original": { ··· 225 157 "type": "github" 226 158 } 227 159 }, 228 - "flake-utils": { 229 - "inputs": { 230 - "systems": "systems_4" 231 - }, 232 - "locked": { 233 - "lastModified": 1681202837, 234 - "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", 235 - "owner": "numtide", 236 - "repo": "flake-utils", 237 - "rev": "cfacdce06f30d2b68473a46042957675eebb3401", 238 - "type": "github" 239 - }, 240 - "original": { 241 - "owner": "numtide", 242 - "repo": "flake-utils", 243 - "type": "github" 244 - } 245 - }, 246 160 "home-manager": { 247 161 "inputs": { 248 - "nixpkgs": "nixpkgs_4" 162 + "nixpkgs": [ 163 + "nixpkgs" 164 + ] 249 165 }, 250 166 "locked": { 251 - "lastModified": 1760662441, 252 - "narHash": "sha256-mlDqR1Ntgs9uYYEAUR1IhamKBO0lxoNS4zGLzEZaY0A=", 167 + "lastModified": 1761878381, 168 + "narHash": "sha256-lCRaipHgszaFZ1Cs8fdGJguVycCisBAf2HEFgip5+xU=", 253 169 "owner": "nix-community", 254 170 "repo": "home-manager", 255 - "rev": "722792af097dff5790f1a66d271a47759f477755", 171 + "rev": "4ac96eb21c101a3e5b77ba105febc5641a8959aa", 256 172 "type": "github" 257 173 }, 258 174 "original": { ··· 263 179 }, 264 180 "import-tree": { 265 181 "locked": { 266 - "lastModified": 1752730890, 267 - "narHash": "sha256-GES8fapSLGz36MMPRVNkSUWXUTtqvGQNXHjRmRLfJUY=", 182 + "lastModified": 1761120675, 183 + "narHash": "sha256-TEbh9zISiQcU82VwVoEbmXHnSGlUxTwvjJA9g9ErSDA=", 268 184 "owner": "vic", 269 185 "repo": "import-tree", 270 - "rev": "6ebb8cb87987b20264c09296166543fd3761d274", 186 + "rev": "a037ed2a58fc0ebed9e93b9ef79b0646e648f719", 271 187 "type": "github" 272 188 }, 273 189 "original": { ··· 276 192 "type": "github" 277 193 } 278 194 }, 279 - "jjui": { 280 - "inputs": { 281 - "flake-parts": "flake-parts_2", 282 - "nixpkgs": "nixpkgs_5", 283 - "systems": "systems_2" 284 - }, 285 - "locked": { 286 - "lastModified": 1760470186, 287 - "narHash": "sha256-D6YFHkWDzOckz2ZU74aV0Hknf1ArlWP/0VphhGdZcJc=", 288 - "owner": "idursun", 289 - "repo": "jjui", 290 - "rev": "ebc4f2447a93c05d533300856f072037473dfc61", 291 - "type": "github" 292 - }, 293 - "original": { 294 - "owner": "idursun", 295 - "repo": "jjui", 296 - "type": "github" 297 - } 298 - }, 299 195 "nix-auto-follow": { 300 196 "inputs": { 301 - "nixpkgs": "nixpkgs_6" 197 + "nixpkgs": [ 198 + "nixpkgs" 199 + ] 302 200 }, 303 201 "locked": { 304 202 "lastModified": 1754073254, ··· 314 212 "type": "github" 315 213 } 316 214 }, 317 - "nix-darwin": { 318 - "inputs": { 319 - "nixpkgs": "nixpkgs_7" 320 - }, 321 - "locked": { 322 - "lastModified": 1760338583, 323 - "narHash": "sha256-IGwy02SH5K2hzIFrKMRsCmyvwOwWxrcquiv4DbKL1S4=", 324 - "owner": "LnL7", 325 - "repo": "nix-darwin", 326 - "rev": "9a9ab01072f78823ca627ae5e895e40d493c3ecf", 327 - "type": "github" 328 - }, 329 - "original": { 330 - "owner": "LnL7", 331 - "repo": "nix-darwin", 332 - "type": "github" 333 - } 334 - }, 335 - "nix-index-database": { 336 - "inputs": { 337 - "nixpkgs": "nixpkgs_8" 338 - }, 339 - "locked": { 340 - "lastModified": 1760241904, 341 - "narHash": "sha256-OD7QnaGEVNdukYEbJbUNWPsvnDrpbZOZxVIk6Pt9Jhw=", 342 - "owner": "nix-community", 343 - "repo": "nix-index-database", 344 - "rev": "c9f5ea45f25652ec2f771f9426ccacb21cbbaeaa", 345 - "type": "github" 346 - }, 347 - "original": { 348 - "owner": "nix-community", 349 - "repo": "nix-index-database", 350 - "type": "github" 351 - } 352 - }, 353 - "nixos-wsl": { 354 - "inputs": { 355 - "flake-compat": "flake-compat", 356 - "nixpkgs": "nixpkgs_9" 357 - }, 358 - "locked": { 359 - "lastModified": 1760536587, 360 - "narHash": "sha256-wfWqt+igns/VazjPLkyb4Z/wpn4v+XIjUeI3xY/1ENg=", 361 - "owner": "nix-community", 362 - "repo": "nixos-wsl", 363 - "rev": "f98ee1de1fa36eca63c67b600f5d617e184e82ea", 364 - "type": "github" 365 - }, 366 - "original": { 367 - "owner": "nix-community", 368 - "repo": "nixos-wsl", 369 - "type": "github" 370 - } 371 - }, 372 215 "nixpkgs": { 373 216 "locked": { 374 - "lastModified": 1760596604, 375 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 376 - "owner": "nixos", 377 - "repo": "nixpkgs", 378 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 379 - "type": "github" 380 - }, 381 - "original": { 382 - "owner": "nixos", 383 - "ref": "nixpkgs-unstable", 384 - "repo": "nixpkgs", 385 - "type": "github" 386 - } 387 - }, 388 - "nixpkgs-lib": { 389 - "locked": { 390 - "lastModified": 1754788789, 391 - "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=", 392 - "owner": "nix-community", 393 - "repo": "nixpkgs.lib", 394 - "rev": "a73b9c743612e4244d865a2fdee11865283c04e6", 395 - "type": "github" 396 - }, 397 - "original": { 398 - "owner": "nix-community", 399 - "repo": "nixpkgs.lib", 400 - "type": "github" 401 - } 402 - }, 403 - "nixpkgs-lib_2": { 404 - "locked": { 405 - "lastModified": 1754788789, 406 - "narHash": "sha256-x2rJ+Ovzq0sCMpgfgGaaqgBSwY+LST+WbZ6TytnT9Rk=", 407 - "owner": "nix-community", 408 - "repo": "nixpkgs.lib", 409 - "rev": "a73b9c743612e4244d865a2fdee11865283c04e6", 410 - "type": "github" 411 - }, 412 - "original": { 413 - "owner": "nix-community", 414 - "repo": "nixpkgs.lib", 415 - "type": "github" 416 - } 417 - }, 418 - "nixpkgs_10": { 419 - "locked": { 420 - "lastModified": 1760596604, 421 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 422 - "owner": "nixos", 423 - "repo": "nixpkgs", 424 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 425 - "type": "github" 426 - }, 427 - "original": { 428 - "owner": "nixos", 429 - "ref": "nixpkgs-unstable", 430 - "repo": "nixpkgs", 431 - "type": "github" 432 - } 433 - }, 434 - "nixpkgs_11": { 435 - "locked": { 436 - "lastModified": 1760596604, 437 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 438 - "owner": "nixos", 439 - "repo": "nixpkgs", 440 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 441 - "type": "github" 442 - }, 443 - "original": { 444 - "owner": "nixos", 445 - "ref": "nixpkgs-unstable", 446 - "repo": "nixpkgs", 447 - "type": "github" 448 - } 449 - }, 450 - "nixpkgs_12": { 451 - "locked": { 452 - "lastModified": 1760596604, 453 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 454 - "owner": "nixos", 455 - "repo": "nixpkgs", 456 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 457 - "type": "github" 458 - }, 459 - "original": { 217 + "lastModified": 1761849641, 218 + "narHash": "sha256-b8mTUdmB80tHcvvVD+Gf+X2HMMxHGiD/UmOr5nYDAmY=", 460 219 "owner": "nixos", 461 - "ref": "nixpkgs-unstable", 462 220 "repo": "nixpkgs", 463 - "type": "github" 464 - } 465 - }, 466 - "nixpkgs_13": { 467 - "locked": { 468 - "lastModified": 1760596604, 469 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 470 - "owner": "nixos", 471 - "repo": "nixpkgs", 472 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 221 + "rev": "45ebaee5d90bab997812235564af4cf5107bde89", 473 222 "type": "github" 474 223 }, 475 224 "original": { ··· 481 230 }, 482 231 "nixpkgs_2": { 483 232 "locked": { 484 - "lastModified": 1760596604, 485 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 486 - "owner": "nixos", 487 - "repo": "nixpkgs", 488 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 489 - "type": "github" 490 - }, 491 - "original": { 492 - "owner": "nixos", 493 - "ref": "nixpkgs-unstable", 494 - "repo": "nixpkgs", 495 - "type": "github" 496 - } 497 - }, 498 - "nixpkgs_3": { 499 - "locked": { 500 - "lastModified": 1760596604, 501 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 502 - "owner": "nixos", 503 - "repo": "nixpkgs", 504 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 505 - "type": "github" 506 - }, 507 - "original": { 508 - "owner": "nixos", 509 - "ref": "nixpkgs-unstable", 510 - "repo": "nixpkgs", 511 - "type": "github" 512 - } 513 - }, 514 - "nixpkgs_4": { 515 - "locked": { 516 - "lastModified": 1760596604, 517 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 518 - "owner": "nixos", 519 - "repo": "nixpkgs", 520 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 521 - "type": "github" 522 - }, 523 - "original": { 524 - "owner": "nixos", 525 - "ref": "nixpkgs-unstable", 526 - "repo": "nixpkgs", 527 - "type": "github" 528 - } 529 - }, 530 - "nixpkgs_5": { 531 - "locked": { 532 - "lastModified": 1760596604, 533 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 534 - "owner": "nixos", 535 - "repo": "nixpkgs", 536 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 537 - "type": "github" 538 - }, 539 - "original": { 540 - "owner": "nixos", 541 - "ref": "nixpkgs-unstable", 542 - "repo": "nixpkgs", 543 - "type": "github" 544 - } 545 - }, 546 - "nixpkgs_6": { 547 - "locked": { 548 - "lastModified": 1760596604, 549 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 550 - "owner": "nixos", 551 - "repo": "nixpkgs", 552 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 553 - "type": "github" 554 - }, 555 - "original": { 233 + "lastModified": 1761849641, 234 + "narHash": "sha256-b8mTUdmB80tHcvvVD+Gf+X2HMMxHGiD/UmOr5nYDAmY=", 556 235 "owner": "nixos", 557 - "ref": "nixpkgs-unstable", 558 236 "repo": "nixpkgs", 559 - "type": "github" 560 - } 561 - }, 562 - "nixpkgs_7": { 563 - "locked": { 564 - "lastModified": 1760596604, 565 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 566 - "owner": "nixos", 567 - "repo": "nixpkgs", 568 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 569 - "type": "github" 570 - }, 571 - "original": { 572 - "owner": "nixos", 573 - "ref": "nixpkgs-unstable", 574 - "repo": "nixpkgs", 575 - "type": "github" 576 - } 577 - }, 578 - "nixpkgs_8": { 579 - "locked": { 580 - "lastModified": 1760596604, 581 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 582 - "owner": "nixos", 583 - "repo": "nixpkgs", 584 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 585 - "type": "github" 586 - }, 587 - "original": { 588 - "owner": "nixos", 589 - "ref": "nixpkgs-unstable", 590 - "repo": "nixpkgs", 591 - "type": "github" 592 - } 593 - }, 594 - "nixpkgs_9": { 595 - "locked": { 596 - "lastModified": 1760596604, 597 - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", 598 - "owner": "nixos", 599 - "repo": "nixpkgs", 600 - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", 237 + "rev": "45ebaee5d90bab997812235564af4cf5107bde89", 601 238 "type": "github" 602 239 }, 603 240 "original": { ··· 610 247 "root": { 611 248 "inputs": { 612 249 "SPC": "SPC", 613 - "devshell": "devshell", 250 + "den": "den", 614 251 "doom-emacs": "doom-emacs", 615 - "edgevpn": "edgevpn", 616 - "enthium": "enthium", 617 252 "flake-aspects": "flake-aspects", 618 253 "flake-file": "flake-file", 619 254 "flake-parts": "flake-parts", 620 255 "home-manager": "home-manager", 621 256 "import-tree": "import-tree", 622 - "jjui": "jjui", 623 257 "nix-auto-follow": "nix-auto-follow", 624 - "nix-darwin": "nix-darwin", 625 - "nix-index-database": "nix-index-database", 626 - "nixos-wsl": "nixos-wsl", 627 - "nixpkgs": "nixpkgs_10", 258 + "nixpkgs": "nixpkgs_2", 628 259 "nixpkgs-lib": [ 629 260 "nixpkgs" 630 261 ], 631 - "sops-nix": "sops-nix", 632 - "systems": "systems_3", 633 - "treefmt-nix": "treefmt-nix_2", 634 - "vscode-server": "vscode-server" 635 - } 636 - }, 637 - "sops-nix": { 638 - "inputs": { 639 - "nixpkgs": "nixpkgs_11" 640 - }, 641 - "locked": { 642 - "lastModified": 1760393368, 643 - "narHash": "sha256-8mN3kqyqa2PKY0wwZ2UmMEYMcxvNTwLaOrrDsw6Qi4E=", 644 - "owner": "Mic92", 645 - "repo": "sops-nix", 646 - "rev": "ab8d56e85b8be14cff9d93735951e30c3e86a437", 647 - "type": "github" 648 - }, 649 - "original": { 650 - "owner": "Mic92", 651 - "repo": "sops-nix", 652 - "type": "github" 262 + "systems": "systems_2", 263 + "treefmt-nix": "treefmt-nix_2" 653 264 } 654 265 }, 655 266 "systems": { ··· 682 293 "type": "github" 683 294 } 684 295 }, 685 - "systems_3": { 686 - "locked": { 687 - "lastModified": 1681028828, 688 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 689 - "owner": "nix-systems", 690 - "repo": "default", 691 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 692 - "type": "github" 693 - }, 694 - "original": { 695 - "owner": "nix-systems", 696 - "repo": "default", 697 - "type": "github" 698 - } 699 - }, 700 - "systems_4": { 701 - "locked": { 702 - "lastModified": 1681028828, 703 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 704 - "owner": "nix-systems", 705 - "repo": "default", 706 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 707 - "type": "github" 708 - }, 709 - "original": { 710 - "owner": "nix-systems", 711 - "repo": "default", 712 - "type": "github" 713 - } 714 - }, 715 296 "treefmt-nix": { 716 297 "inputs": { 717 - "nixpkgs": "nixpkgs_2" 298 + "nixpkgs": [ 299 + "nixpkgs" 300 + ] 718 301 }, 719 302 "locked": { 720 - "lastModified": 1760120816, 721 - "narHash": "sha256-gq9rdocpmRZCwLS5vsHozwB6b5nrOBDNc2kkEaTXHfg=", 303 + "lastModified": 1761311587, 304 + "narHash": "sha256-Msq86cR5SjozQGCnC6H8C+0cD4rnx91BPltZ9KK613Y=", 722 305 "owner": "numtide", 723 306 "repo": "treefmt-nix", 724 - "rev": "761ae7aff00907b607125b2f57338b74177697ed", 307 + "rev": "2eddae033e4e74bf581c2d1dfa101f9033dbd2dc", 725 308 "type": "github" 726 309 }, 727 310 "original": { ··· 732 315 }, 733 316 "treefmt-nix_2": { 734 317 "inputs": { 735 - "nixpkgs": "nixpkgs_12" 318 + "nixpkgs": [ 319 + "nixpkgs" 320 + ] 736 321 }, 737 322 "locked": { 738 - "lastModified": 1760120816, 739 - "narHash": "sha256-gq9rdocpmRZCwLS5vsHozwB6b5nrOBDNc2kkEaTXHfg=", 323 + "lastModified": 1761311587, 324 + "narHash": "sha256-Msq86cR5SjozQGCnC6H8C+0cD4rnx91BPltZ9KK613Y=", 740 325 "owner": "numtide", 741 326 "repo": "treefmt-nix", 742 - "rev": "761ae7aff00907b607125b2f57338b74177697ed", 327 + "rev": "2eddae033e4e74bf581c2d1dfa101f9033dbd2dc", 743 328 "type": "github" 744 329 }, 745 330 "original": { 746 331 "owner": "numtide", 747 332 "repo": "treefmt-nix", 748 - "type": "github" 749 - } 750 - }, 751 - "vscode-server": { 752 - "inputs": { 753 - "flake-utils": "flake-utils", 754 - "nixpkgs": "nixpkgs_13" 755 - }, 756 - "locked": { 757 - "lastModified": 1753541826, 758 - "narHash": "sha256-foGgZu8+bCNIGeuDqQ84jNbmKZpd+JvnrL2WlyU4tuU=", 759 - "owner": "nix-community", 760 - "repo": "nixos-vscode-server", 761 - "rev": "6d5f074e4811d143d44169ba4af09b20ddb6937d", 762 - "type": "github" 763 - }, 764 - "original": { 765 - "owner": "nix-community", 766 - "repo": "nixos-vscode-server", 767 333 "type": "github" 768 334 } 769 335 }
+22 -35
flake.nix
··· 1 1 # DO-NOT-EDIT. This file was auto-generated using github:vic/flake-file. 2 2 # Use `nix run .#write-flake` to regenerate it. 3 3 { 4 - description = "Vic's Nix Environment"; 5 4 6 5 outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules); 7 6 8 - nixConfig = { 9 - allow-import-from-derivation = true; 10 - extra-substituters = [ "https://vix.cachix.org" ]; 11 - extra-trusted-public-keys = [ "vix.cachix.org-1:hP/Lpdsi1dB3AxK9o6coWh+xHzvAc4ztdDYuG7lC6dI=" ]; 12 - }; 13 - 14 7 inputs = { 15 8 SPC = { 16 9 url = "github:vic/SPC"; 17 10 }; 18 - devshell = { 19 - url = "github:numtide/devshell"; 11 + den = { 12 + url = "github:vic/den"; 20 13 }; 21 14 doom-emacs = { 22 15 flake = false; 23 16 url = "github:doomemacs/doomemacs"; 24 17 }; 25 - edgevpn = { 26 - flake = false; 27 - url = "github:mudler/edgevpn"; 28 - }; 29 - enthium = { 30 - flake = false; 31 - url = "github:sunaku/enthium/v10"; 32 - }; 33 18 flake-aspects = { 34 19 url = "github:vic/flake-aspects"; 35 20 }; ··· 37 22 url = "github:vic/flake-file"; 38 23 }; 39 24 flake-parts = { 25 + inputs = { 26 + nixpkgs-lib = { 27 + follows = "nixpkgs-lib"; 28 + }; 29 + }; 40 30 url = "github:hercules-ci/flake-parts"; 41 31 }; 42 32 home-manager = { 33 + inputs = { 34 + nixpkgs = { 35 + follows = "nixpkgs"; 36 + }; 37 + }; 43 38 url = "github:nix-community/home-manager"; 44 39 }; 45 40 import-tree = { 46 41 url = "github:vic/import-tree"; 47 42 }; 48 - jjui = { 49 - url = "github:idursun/jjui"; 50 - }; 51 43 nix-auto-follow = { 44 + inputs = { 45 + nixpkgs = { 46 + follows = "nixpkgs"; 47 + }; 48 + }; 52 49 url = "github:fzakaria/nix-auto-follow"; 53 50 }; 54 - nix-darwin = { 55 - url = "github:LnL7/nix-darwin"; 56 - }; 57 - nix-index-database = { 58 - url = "github:nix-community/nix-index-database"; 59 - }; 60 - nixos-wsl = { 61 - url = "github:nix-community/nixos-wsl"; 62 - }; 63 51 nixpkgs = { 64 52 url = "github:nixos/nixpkgs/nixpkgs-unstable"; 65 53 }; 66 54 nixpkgs-lib = { 67 55 follows = "nixpkgs"; 68 56 }; 69 - sops-nix = { 70 - url = "github:Mic92/sops-nix"; 71 - }; 72 57 systems = { 73 58 url = "github:nix-systems/default"; 74 59 }; 75 60 treefmt-nix = { 61 + inputs = { 62 + nixpkgs = { 63 + follows = "nixpkgs"; 64 + }; 65 + }; 76 66 url = "github:numtide/treefmt-nix"; 77 - }; 78 - vscode-server = { 79 - url = "github:nix-community/nixos-vscode-server"; 80 67 }; 81 68 }; 82 69
+11
modules/_local-inputs.nix
··· 1 + # override inputs with vic's development repos. 2 + { lib, ... }: 3 + { 4 + 5 + flake-file.inputs = lib.mkIf (builtins.pathExists ../../den) { 6 + den.url = "path:/home/vic/hk/den"; 7 + denful.url = "path:/home/vic/hk/denful"; 8 + flake-aspects.url = "path:/home/vic/hk/flake-aspects"; 9 + }; 10 + 11 + }
+10
modules/community/autologin.nix
··· 1 + { 2 + vix.autologin = user: { 3 + nixos = 4 + { config, lib, ... }: 5 + lib.mkIf config.services.displayManager.enable { 6 + services.displayManager.autoLogin.enable = true; 7 + services.displayManager.autoLogin.user = user.userName; 8 + }; 9 + }; 10 + }
+7
modules/community/bluetooth.nix
··· 1 + { 2 + vix.bluetooth.nixos = { 3 + hardware.bluetooth.enable = true; 4 + hardware.bluetooth.powerOnBoot = true; 5 + services.blueman.enable = true; 6 + }; 7 + }
+6
modules/community/bootable.nix
··· 1 + { 2 + vix.bootable.nixos = { 3 + boot.loader.systemd-boot.enable = true; 4 + boot.loader.efi.canTouchEfiVariables = true; 5 + }; 6 + }
+16
modules/community/dev-laptop.nix
··· 1 + { vix, ... }: 2 + { 3 + vix.dev-laptop = { 4 + includes = [ 5 + vix.networking 6 + vix.bluetooth 7 + vix.sound 8 + vix.xserver 9 + vix.hw-detect 10 + ]; 11 + nixos = { 12 + security.rtkit.enable = true; 13 + powerManagement.enable = true; 14 + }; 15 + }; 16 + }
-74
modules/community/features/_macos-keys.nix
··· 1 - # see https://raw.githubusercontent.com/rvaiya/keyd/refs/heads/master/docs/keyd.scdoc 2 - # see https://github.com/rvaiya/keyd/blob/master/examples/macos.conf 3 - { ... }: 4 - let 5 - 6 - # MacOS Command (⌘) 7 - mac_leftcmd = { 8 - tab = "swapm(altgr, G-tab)"; 9 - 10 - # Switch directly to an open tab (e.g. Firefox, VS code) 11 - "1" = "A-1"; 12 - "2" = "A-2"; 13 - "3" = "A-3"; 14 - "4" = "A-4"; 15 - "5" = "A-5"; 16 - "6" = "A-6"; 17 - "7" = "A-7"; 18 - "8" = "A-8"; 19 - "9" = "A-9"; 20 - 21 - # clipboard 22 - c = "C-S-c"; 23 - v = "C-S-v"; 24 - t = "C-S-t"; 25 - w = "C-S-w"; 26 - 27 - q = "A-f4"; 28 - }; 29 - 30 - mac_rightcmd = { 31 - }; 32 - 33 - # MacOS Option (⌥ 34 - 35 - mac_opt = { }; 36 - 37 - # Macos Meh (⌃⌥⇧) 38 - mac_meh = { }; 39 - 40 - # Hyper (⌃⌥⇧⌘) 41 - mac_hyper = { 42 - h = "left"; 43 - j = "down"; 44 - k = "up"; 45 - l = "right"; 46 - }; 47 - 48 - in 49 - { 50 - main.shift = "oneshot(shift)"; 51 - main.meta = "oneshot(meta)"; 52 - main.control = "oneshot(control)"; 53 - 54 - main.capslock = "overload(control, esc)"; 55 - 56 - # Left Alt (left from spacebar) becomes MacOS Command 57 - main.leftalt = "overload(mac_leftcmd, oneshot(mac_leftcmd))"; 58 - "mac_leftcmd:C" = mac_leftcmd; # Keep as Ctrl 59 - 60 - # Right Alt (right from spacebar) becomes MacOS Command 61 - main.rightalt = "overload(mac_rightcmd, oneshot(mac_rightcmd))"; 62 - "mac_rightcmd:A" = mac_rightcmd; # Keep original Alt 63 - 64 - # Left Meta (two left from spacebar) becomes MacOS Option 65 - main.leftmeta = "overload(mac_leftopt, oneshot(mac_leftopt))"; 66 - "mac_leftopt:M" = mac_opt; # inherit from original Meta layer 67 - 68 - main.rightcontrol = "overload(mac_meh, oneshot(mac_meh))"; 69 - "mac_meh:C-A-M" = mac_meh; 70 - 71 - main.leftcontrol = "overload(mac_hyper, oneshot(control))"; 72 - "mac_hyper:C-A" = mac_hyper; 73 - 74 - }
-7
modules/community/features/all-firmware.nix
··· 1 - { 2 - flake.modules.nixos.all-firmware = { 3 - hardware.enableAllFirmware = true; 4 - hardware.enableRedistributableFirmware = true; 5 - nixpkgs.config.allowUnfree = true; # enableAllFirmware depends on this 6 - }; 7 - }
-16
modules/community/features/bootable-private.nix
··· 1 - # this private file exists just to make an example 2 - # how to hide private files from dennix, even in a 3 - # community shared tree. 4 - { 5 - flake.modules.nixos.bootable = 6 - { modulesPath, ... }: 7 - { 8 - 9 - time.timeZone = "America/Mexico_City"; 10 - 11 - imports = [ 12 - # include this once instead of doing in every host. 13 - (modulesPath + "/installer/scan/not-detected.nix") 14 - ]; 15 - }; 16 - }
-80
modules/community/features/bootable.nix
··· 1 - { 2 - 3 - flake.modules.nixos.bootable = 4 - { lib, ... }: 5 - { 6 - # Bootloader. 7 - boot.loader.systemd-boot.enable = true; 8 - boot.loader.efi.canTouchEfiVariables = true; 9 - powerManagement.enable = true; 10 - 11 - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. 12 - 13 - # Configure network proxy if necessary 14 - # networking.proxy.default = "http://user:password@proxy:port/"; 15 - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; 16 - 17 - # Enable networking 18 - networking.networkmanager.enable = true; 19 - 20 - # Select internationalisation properties. 21 - i18n.defaultLocale = "en_US.UTF-8"; 22 - 23 - # Enable the X11 windowing system. 24 - services.xserver.enable = true; 25 - 26 - # Configure keymap in X11 27 - services.xserver.xkb = { 28 - layout = "us"; 29 - variant = ""; 30 - }; 31 - 32 - # Enable CUPS to print documents. 33 - # services.printing.enable = true; 34 - 35 - # Enable sound with pipewire. 36 - # sound.enable = true; 37 - hardware.bluetooth.enable = true; 38 - hardware.bluetooth.powerOnBoot = true; 39 - services.pulseaudio.enable = false; 40 - services.blueman.enable = true; 41 - security.rtkit.enable = true; 42 - services.pipewire = { 43 - enable = true; 44 - alsa.enable = true; 45 - alsa.support32Bit = true; 46 - pulse.enable = true; 47 - # If you want to use JACK applications, uncomment this 48 - #jack.enable = true; 49 - 50 - # use the example session manager (no others are packaged yet so this is enabled by default, 51 - # no need to redefine it in your config for now) 52 - #media-session.enable = true; 53 - }; 54 - 55 - # Enable touchpad support (enabled default in most desktopManager). 56 - # services.xserver.libinput.enable = true; 57 - 58 - # Some programs need SUID wrappers, can be configured further or are 59 - # started in user sessions. 60 - # programs.mtr.enable = true; 61 - # programs.gnupg.agent = { 62 - # enable = true; 63 - # enableSSHSupport = true; 64 - # }; 65 - 66 - # List services that you want to enable: 67 - 68 - # Enable the OpenSSH daemon. 69 - # services.openssh.enable = true; 70 - 71 - # Open ports in the firewall. 72 - # networking.firewall.allowedTCPPorts = [ ... ]; 73 - # networking.firewall.allowedUDPPorts = [ ... ]; 74 - # Or disable the firewall altogether. 75 - # networking.firewall.enable = false; 76 - 77 - networking.useDHCP = lib.mkDefault true; 78 - }; 79 - 80 - }
-42
modules/community/features/darwin.nix
··· 1 - { inputs, ... }: 2 - let 3 - 4 - flake-file.inputs = { 5 - nix-darwin.url = "github:LnL7/nix-darwin"; 6 - }; 7 - 8 - flake.modules.darwin.darwin.imports = [ 9 - inputs.home-manager.darwinModules.home-manager 10 - inputs.self.modules.darwin.nix-settings 11 - nix-darwin-pkgs 12 - darwin-cfg 13 - ]; 14 - 15 - darwin-cfg = { 16 - # Determinate uses its own daemon to manage the Nix installation 17 - # nix.enable = false; 18 - 19 - system.defaults.trackpad.Clicking = true; 20 - system.defaults.trackpad.TrackpadThreeFingerDrag = true; 21 - system.defaults.NSGlobalDomain.ApplePressAndHoldEnabled = false; 22 - 23 - system.keyboard.enableKeyMapping = true; 24 - system.keyboard.remapCapsLockToControl = true; 25 - }; 26 - 27 - nix-darwin-pkgs = 28 - { pkgs, ... }: 29 - { 30 - environment.systemPackages = with inputs.nix-darwin.packages.${pkgs.system}; [ 31 - darwin-option 32 - darwin-rebuild 33 - darwin-version 34 - darwin-uninstaller 35 - ]; 36 - }; 37 - 38 - # TODO: link home-manager apps. 39 - in 40 - { 41 - inherit flake flake-file; 42 - }
-19
modules/community/features/enthium-kbd-layout.nix
··· 1 - { inputs, ... }: 2 - { 3 - 4 - flake-file.inputs.enthium = { 5 - url = "github:sunaku/enthium/v10"; 6 - flake = false; 7 - }; 8 - 9 - flake.modules.nixos.enthium = { 10 - 11 - services.xserver.xkb.extraLayouts.enthium = { 12 - description = "Enthium"; 13 - languages = [ "eng" ]; 14 - symbolsFile = "${inputs.enthium}/linux/usr-share-X11-xkb-symbols-us"; 15 - }; 16 - 17 - }; 18 - 19 - }
-11
modules/community/features/gnome-desktop.nix
··· 1 - { 2 - flake.modules.nixos.gnome-desktop = { 3 - # Enable the GNOME Desktop Environment. 4 - services.xserver.displayManager.gdm.enable = true; 5 - services.xserver.desktopManager.gnome.enable = true; 6 - 7 - # Workaround for GNOME autologin: https://github.com/NixOS/nixpkgs/issues/103746#issuecomment-945091229 8 - systemd.services."getty@tty1".enable = false; 9 - systemd.services."autovt@tty1".enable = false; 10 - }; 11 - }
+1 -3
modules/community/features/kde-desktop.nix modules/community/kde-desktop.nix
··· 1 1 { 2 - flake.modules.nixos.kde-desktop = 2 + vix.kde-desktop.nixos = 3 3 { pkgs, ... }: 4 4 { 5 - # Enable the KDE Plasma Desktop Environment. 6 5 services.displayManager.sddm.wayland.enable = true; 7 6 services.desktopManager.plasma6.enable = true; 8 7 ··· 19 18 domain = true; 20 19 }; 21 20 }; 22 - 23 21 }; 24 22 }
+1 -1
modules/community/features/kvm+amd.nix modules/community/kvm-amd.nix
··· 1 1 { 2 - flake.modules.nixos.kvm-amd = 2 + vix.kvm-amd.nixos = 3 3 { lib, config, ... }: 4 4 { 5 5 boot.kernelModules = [ "kvm-amd" ];
-8
modules/community/features/kvm+intel.nix
··· 1 - { 2 - flake.modules.nixos.kvm-intel = 3 - { lib, config, ... }: 4 - { 5 - boot.kernelModules = [ "kvm-intel" ]; 6 - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 7 - }; 8 - }
-14
modules/community/features/macos-keys.nix
··· 1 - { 2 - flake.modules.nixos.macos-keys = 3 - { 4 - lib, 5 - pkgs, 6 - config, 7 - ... 8 - }: 9 - { 10 - services.keyd.enable = true; 11 - services.keyd.keyboards.default.ids = [ "*" ]; # apply on all devices 12 - services.keyd.keyboards.default.settings = import ./_macos-keys.nix { inherit lib pkgs config; }; 13 - }; 14 - }
+4 -3
modules/community/features/niri-desktop.nix modules/community/niri-desktop.nix
··· 1 - { lib, ... }: 2 1 { 3 - flake.modules.nixos.niri-desktop = 4 - { pkgs, ... }: 2 + 3 + vix.niri-desktop.nixos = 4 + { pkgs, lib, ... }: 5 5 { 6 6 programs.niri.enable = true; 7 7 services.displayManager.defaultSession = lib.mkForce "niri"; ··· 10 10 pkgs.swaybg 11 11 ]; 12 12 }; 13 + 13 14 }
-40
modules/community/features/nix-setttings.nix
··· 1 - let 2 - flake.modules.nixos = { inherit nix-settings; }; 3 - flake.modules.darwin = { inherit nix-settings; }; 4 - 5 - nix-settings = 6 - { pkgs, config, ... }: 7 - { 8 - nix = { 9 - optimise.automatic = true; 10 - settings = { 11 - substituters = [ 12 - "https://vix.cachix.org" 13 - "https://devenv.cachix.org" 14 - ]; 15 - trusted-public-keys = [ 16 - "vix.cachix.org-1:hP/Lpdsi1dB3AxK9o6coWh+xHzvAc4ztdDYuG7lC6dI=" 17 - "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" 18 - ]; 19 - 20 - experimental-features = [ 21 - "nix-command" 22 - "flakes" 23 - # "allow-import-from-derivation" 24 - ]; 25 - trusted-users = [ 26 - "root" 27 - "@wheel" 28 - ]; 29 - }; 30 - gc = pkgs.lib.optionalAttrs config.nix.enable { 31 - automatic = true; 32 - # interval = "weekly"; # TODO! 33 - options = "--delete-older-than 7d"; 34 - }; 35 - }; 36 - }; 37 - in 38 - { 39 - inherit flake; 40 - }
-9
modules/community/features/nixos.nix
··· 1 - { inputs, ... }: 2 - { 3 - flake.modules.nixos.nixos.imports = [ 4 - inputs.home-manager.nixosModules.home-manager 5 - inputs.self.modules.nixos.bootable 6 - inputs.self.modules.nixos.nix-settings 7 - inputs.self.modules.nixos.unfree 8 - ]; 9 - }
-29
modules/community/features/nvidia.nix
··· 1 - { 2 - 3 - flake.modules.nixos.nvidia = 4 - { config, ... }: 5 - { 6 - boot.initrd.kernelModules = [ "nvidia" ]; 7 - boot.extraModulePackages = [ config.boot.kernelPackages.nvidia_x11 ]; 8 - boot.blacklistedKernelModules = [ "nouveau" ]; 9 - boot.extraModprobeConfig = '' 10 - blacklist nouveau 11 - options nouveau modeset=0 12 - ''; 13 - services.xserver.videoDrivers = [ "nvidia" ]; 14 - hardware.graphics.enable = true; 15 - hardware.nvidia = rec { 16 - open = false; 17 - nvidiaSettings = true; 18 - package = config.boot.kernelPackages.nvidiaPackages.stable; 19 - powerManagement.enable = true; 20 - powerManagement.finegrained = false; 21 - modesetting.enable = true; 22 - 23 - prime = { 24 - offload.enable = powerManagement.finegrained; 25 - offload.enableOffloadCmd = prime.offload.enable; 26 - }; 27 - }; 28 - }; 29 - }
-6
modules/community/features/platform.nix
··· 1 - { 2 - flake.modules.nixos.x86_64-linux = { }; 3 - flake.modules.nixos.aarch64-linux = { }; 4 - flake.modules.darwin.x86_64-darwin = { }; 5 - flake.modules.darwin.aarch64-darwin = { }; 6 - }
-31
modules/community/features/rdesk+inputleap+anydesk.nix
··· 1 - { ... }: 2 - let 3 - 4 - flake.modules.homeManager.rdesk = 5 - { pkgs, lib, ... }: 6 - { 7 - home.packages = lib.optionals pkgs.stdenvNoCC.isLinux [ 8 - pkgs.anydesk 9 - #inputs.versioned.packages.${pkgs.system}.input-leap 10 - # pkgs.input-leap 11 - ]; 12 - }; 13 - 14 - flake.modules.nixos.rdesk.networking.firewall = { 15 - enable = true; 16 - allowedTCPPorts = [ 17 - 24800 # inputleap 18 - 6568 # anydesk 19 - 50001 # anydesk 20 - ]; 21 - allowedUDPPorts = [ 22 - 24800 # inputleap 23 - 6568 # anydesk 24 - 50001 # anydesk 25 - ]; 26 - }; 27 - 28 - in 29 - { 30 - inherit flake; 31 - }
-4
modules/community/features/unfree.nix
··· 1 - { inputs, ... }: 2 - { 3 - flake.modules.nixos.unfree = inputs.self.lib.unfree-module [ ]; 4 - }
-13
modules/community/features/wl-broadcom.nix
··· 1 - { 2 - flake.modules.nixos.wl-broadcom = 3 - { lib, config, ... }: 4 - { 5 - boot.kernelModules = [ "wl" ]; 6 - boot.extraModulePackages = [ config.boot.kernelPackages.broadcom_sta ]; 7 - nixpkgs.config.allowInsecurePredicate = 8 - pkg: 9 - builtins.elem (lib.getName pkg) [ 10 - "broadcom-sta" 11 - ]; 12 - }; 13 - }
-17
modules/community/features/wsl.nix
··· 1 - { inputs, ... }: 2 - { 3 - flake-file.inputs = { 4 - nixos-wsl.url = "github:nix-community/nixos-wsl"; 5 - }; 6 - 7 - flake.modules.nixos.wsl = { 8 - imports = [ 9 - inputs.nixos-wsl.nixosModules.default 10 - inputs.home-manager.nixosModules.home-manager 11 - inputs.self.modules.nixos.nix-settings 12 - inputs.self.modules.nixos.unfree 13 - ]; 14 - 15 - wsl.enable = true; 16 - }; 17 - }
-18
modules/community/features/xfce-desktop.nix
··· 1 - { lib, ... }: 2 - { 3 - flake.modules.nixos.xfce-desktop = { 4 - # https://gist.github.com/nat-418/1101881371c9a7b419ba5f944a7118b0 5 - services.xserver = { 6 - enable = true; 7 - desktopManager = { 8 - xterm.enable = false; 9 - xfce.enable = true; 10 - }; 11 - }; 12 - 13 - services.displayManager = { 14 - defaultSession = lib.mkDefault "xfce"; 15 - enable = true; 16 - }; 17 - }; 18 - }
-10
modules/community/flake/formatter.nix
··· 1 - { 2 - perSystem.treefmt.projectRootFile = "flake.nix"; 3 - perSystem.treefmt.programs = { 4 - nixfmt.enable = true; 5 - nixfmt.excludes = [ ".direnv" ]; 6 - deadnix.enable = true; 7 - fish_indent.enable = true; 8 - kdlfmt.enable = true; 9 - }; 10 - }
-4
modules/community/flake/systems.nix
··· 1 - { inputs, ... }: 2 - { 3 - systems = import inputs.systems; 4 - }
-15
modules/community/home/nix-index.nix
··· 1 - { inputs, ... }: 2 - { 3 - 4 - flake-file.inputs.nix-index-database.url = "github:nix-community/nix-index-database"; 5 - 6 - flake.modules.homeManager.nix-index = { 7 - imports = [ 8 - inputs.nix-index-database.homeModules.nix-index 9 - ]; 10 - 11 - programs.nix-index.enable = true; 12 - programs.nix-index.enableFishIntegration = true; 13 - programs.nix-index-database.comma.enable = true; 14 - }; 15 - }
-8
modules/community/home/nix-registry.nix
··· 1 - { inputs, lib, ... }: 2 - { 3 - 4 - flake.modules.homeManager.nix-registry.nix.registry = lib.mapAttrs (_name: v: { flake = v; }) ( 5 - lib.filterAttrs (_name: value: value ? outputs) inputs 6 - ); 7 - 8 - }
-23
modules/community/home/vscode-server.nix
··· 1 - { inputs, ... }: 2 - { 3 - flake-file.inputs = { 4 - vscode-server.url = "github:nix-community/nixos-vscode-server"; 5 - }; 6 - 7 - flake.modules.homeManager.vscode-server = 8 - { pkgs, ... }: 9 - { 10 - imports = [ 11 - inputs.vscode-server.homeModules.default 12 - ]; 13 - 14 - services.vscode-server = { 15 - enable = true; 16 - nodejsPackage = pkgs.nodejs_latest; 17 - extraRuntimeDependencies = with pkgs; [ 18 - curl 19 - wget 20 - ]; 21 - }; 22 - }; 23 - }
+5
modules/community/host-name.nix
··· 1 + { 2 + vix.host-name = host: { 3 + ${host.class}.networking.hostName = host.hostName; 4 + }; 5 + }
+9
modules/community/hw-detect.nix
··· 1 + { 2 + vix.hw-detect.nixos = 3 + { modulesPath, ... }: 4 + { 5 + imports = [ 6 + (modulesPath + "/installer/scan/not-detected.nix") 7 + ]; 8 + }; 9 + }
-12
modules/community/lib/+hosts-by-system.nix
··· 1 - { inputs, lib, ... }: 2 - { 3 - flake.lib.hostsBySystem = 4 - system: 5 - let 6 - self = inputs.self; 7 - where = 8 - if lib.hasSuffix "darwin" system then self.darwinConfigurations else self.nixosConfigurations; 9 - sameSystem = lib.filterAttrs (_: v: v.config.nixpkgs.hostPlatform.system == system) where; 10 - in 11 - lib.attrNames sameSystem; 12 - }
-49
modules/community/lib/+mk-os.nix
··· 1 - { inputs, lib, ... }: 2 - let 3 - flake.lib.mk-os = { 4 - inherit mkNixos mkDarwin; 5 - inherit wsl linux linux-arm; 6 - inherit darwin darwin-intel; 7 - }; 8 - 9 - wsl = mkNixos "x86_64-linux" "wsl"; 10 - 11 - linux = mkNixos "x86_64-linux" "nixos"; 12 - linux-arm = mkNixos "aarch64-linux" "nixos"; 13 - 14 - darwin-intel = mkDarwin "x86_64-darwin"; 15 - darwin = mkDarwin "aarch64-darwin"; 16 - 17 - mkNixos = 18 - system: cls: name: 19 - inputs.nixpkgs.lib.nixosSystem { 20 - inherit system; 21 - modules = [ 22 - inputs.self.modules.nixos.${cls} 23 - inputs.self.modules.nixos.${name} 24 - { 25 - networking.hostName = lib.mkDefault name; 26 - nixpkgs.hostPlatform = lib.mkDefault system; 27 - system.stateVersion = "25.05"; 28 - } 29 - ]; 30 - }; 31 - 32 - mkDarwin = 33 - system: name: 34 - inputs.nix-darwin.lib.darwinSystem { 35 - inherit system; 36 - modules = [ 37 - inputs.self.modules.darwin.darwin 38 - inputs.self.modules.darwin.${name} 39 - { 40 - networking.hostName = lib.mkDefault name; 41 - nixpkgs.hostPlatform = lib.mkDefault system; 42 - system.stateVersion = 6; 43 - } 44 - ]; 45 - }; 46 - in 47 - { 48 - inherit flake; 49 - }
-8
modules/community/lib/+unfree-module.nix
··· 1 - { 2 - flake.lib.unfree-module = 3 - names: 4 - { lib, ... }: 5 - { 6 - nixpkgs.config.allowUnfreePredicate = pkg: lib.elem (lib.getName pkg) names; 7 - }; 8 - }
-7
modules/community/lib/option.nix
··· 1 - { lib, ... }: 2 - { 3 - options.flake.lib = lib.mkOption { 4 - type = lib.types.attrsOf lib.types.unspecified; 5 - default = { }; 6 - }; 7 - }
+6
modules/community/mexico.nix
··· 1 + { 2 + vix.mexico.nixos = { 3 + time.timeZone = "America/Mexico_City"; 4 + i18n.defaultLocale = "en_US.UTF-8"; 5 + }; 6 + }
+8
modules/community/networking.nix
··· 1 + { 2 + vix.networking.nixos = 3 + { lib, ... }: 4 + { 5 + networking.networkmanager.enable = true; 6 + networking.useDHCP = lib.mkDefault true; 7 + }; 8 + }
-51
modules/community/packages/+gh-flake-update.nix
··· 1 - let 2 - 3 - app = 4 - pkgs: 5 - pkgs.writeShellApplication { 6 - name = "gh-flake-update"; 7 - text = '' 8 - export GIT_AUTHOR_NAME="Victor Borja" 9 - export GIT_AUTHOR_EMAIL="vborja@apache.org" 10 - export GIT_COMMITTER_NAME="Victor Borja" 11 - export GIT_COMMITTER_EMAIL="vborja@apache.org" 12 - 13 - branch="flake-update-$(date '+%F')" 14 - 15 - git checkout -b "$branch" 16 - title="Updating flake inputs $(date)" 17 - 18 - ( 19 - echo "$title" 20 - echo -ne "\n\n\n\n" 21 - echo '```shell' 22 - echo '$ nix flake update' 23 - nix flake update --accept-flake-config 2>&1 24 - echo '```' 25 - echo -ne "\n\n\n\n" 26 - echo 'request-checks: true' 27 - ) | tee /tmp/commit-message.md 28 - 29 - changes="$(git status -s | grep -o 'M ' | wc -l)" 30 - 31 - if test "$changes" -eq 0; then 32 - echo "No changes" 33 - exit 0 34 - fi 35 - 36 - git status -s | grep 'M ' | cut -d 'M' -f 2 | xargs git add 37 - git commit -F /tmp/commit-message.md --no-signoff --no-verify --trailer "request-checks:true" --no-edit --cleanup=verbatim 38 - git push origin "$branch:$branch" --force 39 - 40 - gh pr create --base main --label flake-update --reviewer vic --assignee vic --body-file /tmp/commit-message.md --title "$title" --head "$branch" | tee /tmp/pr-url 41 - ''; 42 - }; 43 - 44 - in 45 - { 46 - perSystem = 47 - { pkgs, ... }: 48 - { 49 - packages.gh-flake-update = app pkgs; 50 - }; 51 - }
-79
modules/community/packages/+os-rebuild.nix
··· 1 - { inputs, ... }: 2 - { 3 - 4 - perSystem = 5 - { pkgs, lib, ... }: 6 - let 7 - 8 - same-system-oses = 9 - let 10 - has-same-system = _n: o: o.config.nixpkgs.hostPlatform.system == pkgs.system; 11 - all-oses = (inputs.self.nixosConfigurations or { }) // (inputs.self.darwinConfigurations or { }); 12 - in 13 - lib.filterAttrs has-same-system all-oses; 14 - 15 - os-builder = 16 - name: os: 17 - let 18 - platform = os.config.nixpkgs.hostPlatform; 19 - darwin-rebuild = lib.getExe inputs.nix-darwin.packages.${platform.system}.darwin-rebuild; 20 - nixos-rebuild = lib.getExe pkgs.nixos-rebuild; 21 - flake-param = ''--flake "path:${inputs.self}#${name}" ''; 22 - in 23 - pkgs.writeShellApplication { 24 - name = "${name}-os-rebuild"; 25 - text = '' 26 - ${if platform.isDarwin then darwin-rebuild else nixos-rebuild} ${flake-param} "''${@}" 27 - ''; 28 - }; 29 - 30 - os-builders = lib.mapAttrs os-builder same-system-oses; 31 - 32 - os-rebuild = pkgs.writeShellApplication { 33 - name = "os-rebuild"; 34 - text = '' 35 - export PATH="${ 36 - pkgs.lib.makeBinPath ( 37 - (lib.attrValues os-builders) 38 - ++ [ 39 - pkgs.coreutils 40 - ] 41 - ++ (lib.optionals pkgs.stdenv.isLinux [ pkgs.systemd ]) 42 - 43 - ) 44 - }" 45 - 46 - if [ "-h" = "''${1:-}" ] || [ "--help" = "''${1:-}" ]; then 47 - echo Usage: "$0" [HOSTNAME] [${ 48 - if pkgs.stdenv.isDarwin then "DARWIN" else "NIXOS" 49 - }-REBUILD OPTIONS ...] 50 - echo 51 - echo Default hostname: "$(uname -n)" 52 - echo Default ${if pkgs.stdenv.isDarwin then "darwin" else "nixos"}-rebuild options: switch 53 - echo 54 - echo Known hostnames on ${pkgs.system}: 55 - echo "${lib.concatStringsSep "\n" (lib.attrNames same-system-oses)}" 56 - exit 0 57 - fi 58 - 59 - if test "file" = "$(type -t "''${1:-_}-os-rebuild")"; then 60 - hostname="$1" 61 - shift 62 - else 63 - hostname="$(uname -n)" 64 - fi 65 - 66 - if test "file" = "$(type -t "$hostname-os-rebuild")"; then 67 - "$hostname-os-rebuild" "''${@:-switch}" 68 - else 69 - echo "No configuration found for host: $hostname" 70 - exit 1 71 - fi 72 - ''; 73 - }; 74 - 75 - in 76 - { 77 - packages.os-rebuild = os-rebuild; 78 - }; 79 - }
+22
modules/community/profile.nix
··· 1 + { vix, ... }: 2 + { 3 + vix.host-profile = 4 + { host }: 5 + { 6 + includes = [ 7 + (vix.${host.name} or { }) 8 + (vix.host-name host) 9 + vix.state-version 10 + ]; 11 + }; 12 + 13 + vix.user-profile = 14 + { host, user }@ctx: 15 + { 16 + includes = [ 17 + (vix."${user.name}@${host.name}" or { }) 18 + ((vix.${host.name}._.common-user-env or (_: { })) ctx) 19 + ((vix.${user.name}._.common-host-env or (_: { })) ctx) 20 + ]; 21 + }; 22 + }
+11
modules/community/sound.nix
··· 1 + { 2 + vix.sound.nixos = { 3 + services.pulseaudio.enable = false; 4 + services.pipewire = { 5 + enable = true; 6 + alsa.enable = true; 7 + alsa.support32Bit = true; 8 + pulse.enable = true; 9 + }; 10 + }; 11 + }
+7
modules/community/state-version.nix
··· 1 + { 2 + vix.state-version = { 3 + nixos.system.stateVersion = "25.11"; 4 + homeManager.home.stateVersion = "25.11"; 5 + darwin.system.stateVersion = 6; 6 + }; 7 + }
+23
modules/community/unfree.nix
··· 1 + { 2 + 3 + # Creates an aspect that allows 4 + # unfree packages on dynamic nix clases. 5 + # 6 + # usage: 7 + # den.aspects.my-laptop.includes = [ 8 + # (vix.unfree [ "cursor" ]) 9 + # ] 10 + vix.unfree = allowed-names: { 11 + __functor = 12 + _: 13 + { class, aspect-chain }: 14 + { 15 + ${class} = 16 + { lib, ... }: 17 + { 18 + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) allowed-names; 19 + }; 20 + }; 21 + }; 22 + 23 + }
+19
modules/community/xfce-desktop.nix
··· 1 + { 2 + vix.xfce-desktop.nixos = 3 + { lib, ... }: 4 + { 5 + # https://gist.github.com/nat-418/1101881371c9a7b419ba5f944a7118b0 6 + services.xserver = { 7 + enable = true; 8 + desktopManager = { 9 + xterm.enable = false; 10 + xfce.enable = true; 11 + }; 12 + }; 13 + 14 + services.displayManager = { 15 + defaultSession = lib.mkDefault "xfce"; 16 + enable = true; 17 + }; 18 + }; 19 + }
+9
modules/community/xserver.nix
··· 1 + { 2 + vix.xserver.nixos = { 3 + services.xserver.enable = true; 4 + services.xserver.xkb = { 5 + layout = "us"; 6 + variant = ""; 7 + }; 8 + }; 9 + }
+7
modules/dendritic.nix
··· 1 + { inputs, lib, ... }: 2 + { 3 + flake-file.inputs.flake-file.url = lib.mkDefault "github:vic/flake-file"; 4 + imports = [ 5 + inputs.flake-file.flakeModules.dendritic 6 + ]; 7 + }
-10
modules/flake/dendritic.nix
··· 1 - { inputs, ... }: 2 - { 3 - 4 - imports = [ inputs.flake-file.flakeModules.dendritic ]; 5 - 6 - flake-file.inputs = { 7 - flake-file.url = "github:vic/flake-file"; 8 - }; 9 - 10 - }
-16
modules/flake/fmt-excludes.nix
··· 1 - { 2 - 3 - perSystem.treefmt.settings.global.excludes = [ 4 - "flake.lock" 5 - ".envrc" 6 - ".leaderrc" 7 - "*.el" # TODO contribute an emacs treefmt 8 - "**/.gitignore" 9 - "*/config/ghostty/*" 10 - "*/config/wezterm/*" 11 - "*/vic/dots/vscode/*" 12 - "*/vic/dots/ssh/*" 13 - "*/vic/secrets/*" 14 - ]; 15 - 16 - }
-12
modules/flake/imports.nix
··· 1 - { inputs, ... }: 2 - { 3 - imports = [ 4 - inputs.devshell.flakeModule 5 - inputs.home-manager.flakeModules.home-manager 6 - ]; 7 - 8 - flake-file.inputs = { 9 - devshell.url = "github:numtide/devshell"; 10 - home-manager.url = "github:nix-community/home-manager"; 11 - }; 12 - }
-15
modules/flake/nixConfig.nix
··· 1 - { 2 - 3 - flake-file = { 4 - description = "Vic's Nix Environment"; 5 - 6 - nixConfig = { 7 - allow-import-from-derivation = true; 8 - extra-trusted-public-keys = [ 9 - "vix.cachix.org-1:hP/Lpdsi1dB3AxK9o6coWh+xHzvAc4ztdDYuG7lC6dI=" 10 - ]; 11 - extra-substituters = [ "https://vix.cachix.org" ]; 12 - }; 13 - }; 14 - 15 - }
-31
modules/flake/osConfigurations.nix
··· 1 - { inputs, ... }: 2 - let 3 - inherit (inputs.self.lib.mk-os) 4 - wsl 5 - linux 6 - linux-arm 7 - darwin 8 - darwin-intel 9 - ; 10 - 11 - flake.nixosConfigurations = { 12 - annatar = wsl "annatar"; 13 - mordor = linux "mordor"; 14 - nargun = linux "nargun"; 15 - smaug = linux "smaug"; 16 - nienna = linux "nienna"; 17 - tom = linux "tom"; 18 - bombadil = linux "bombadil"; 19 - bill = linux-arm "bill"; 20 - }; 21 - 22 - flake.darwinConfigurations = { 23 - yavanna = darwin-intel "yavanna"; 24 - varda = darwin "varda"; 25 - bert = darwin "bert"; 26 - }; 27 - 28 - in 29 - { 30 - inherit flake; 31 - }
+18
modules/hosts.nix
··· 1 + { vix, den, ... }: 2 + { 3 + den.hosts.x86_64-linux.nargun.users.vic = { }; 4 + den.hosts.x86_64-linux.nargun-vm.users.vic = { }; 5 + 6 + den.default.host._.host.includes = [ 7 + vix.host-profile 8 + den.home-manager 9 + (den.import-tree._.host { root = ../non-dendritic/hosts; }) 10 + ]; 11 + 12 + den.default.user._.user.includes = [ 13 + vix.user-profile 14 + ]; 15 + 16 + flake-file.inputs.home-manager.url = "github:nix-community/home-manager"; 17 + flake-file.inputs.home-manager.inputs.nixpkgs.follows = "nixpkgs"; 18 + }
-10
modules/hosts/annatar/configuration.nix
··· 1 - { inputs, ... }: 2 - let 3 - flake.modules.nixos.annatar.imports = with inputs.self.modules.nixos; [ 4 - vic 5 - { wsl.defaultUser = "vic"; } 6 - ]; 7 - in 8 - { 9 - inherit flake; 10 - }
-6
modules/hosts/bert/darwin-configuration.nix
··· 1 - { 2 - flake.modules.darwin.bert = { 3 - users.users.runner.home = "/Users/runner"; 4 - system.primaryUser = "runner"; 5 - }; 6 - }
-7
modules/hosts/bill/configuration.nix
··· 1 - { 2 - flake.modules.nixos.bill = { 3 - boot.loader.grub.enable = false; 4 - fileSystems."/".device = "/dev/null"; 5 - users.users.runner.isNormalUser = true; 6 - }; 7 - }
-40
modules/hosts/bombadil/configuration.nix
··· 1 - # nix build .#.nixosConfigurations.bombadil.config.system.build.isoImage 2 - { inputs, ... }: 3 - { 4 - flake.modules.nixos.bombadil = 5 - { 6 - modulesPath, 7 - config, 8 - lib, 9 - ... 10 - }: 11 - { 12 - imports = with inputs.self.modules.nixos; [ 13 - "${toString modulesPath}/installer/cd-dvd/installation-cd-base.nix" 14 - vic 15 - macos-keys 16 - kvm-intel 17 - wl-broadcom 18 - all-firmware 19 - xfce-desktop 20 - ]; 21 - 22 - lib.isoFileSystems."/home/vic" = { 23 - device = "/dev/disk/by-label/vic"; 24 - fsType = "ext4"; 25 - }; 26 - 27 - users.users.vic.uid = 1000; 28 - users.users.nixos.uid = 1001; 29 - 30 - isoImage.edition = lib.mkDefault config.networking.hostName; 31 - networking.networkmanager.enable = true; 32 - networking.wireless.enable = lib.mkImageMediaOverride false; 33 - 34 - hardware.bluetooth.enable = true; 35 - hardware.bluetooth.powerOnBoot = true; 36 - services.blueman.enable = true; 37 - services.pulseaudio.enable = false; 38 - 39 - }; 40 - }
-23
modules/hosts/mordor/configuration.nix
··· 1 - { inputs, ... }: 2 - let 3 - flake.modules.nixos.mordor.imports = with inputs.self.modules.nixos; [ 4 - kvm-amd 5 - mordor-nvidia 6 - mordor-unfree 7 - nvidia 8 - vic 9 - xfce-desktop 10 - ]; 11 - 12 - mordor-nvidia = { 13 - hardware.nvidia.prime.nvidiaBusId = "PCI:9:0:0"; 14 - }; 15 - mordor-unfree = inputs.self.lib.unfree-module [ 16 - "nvidia-x11" 17 - "nvidia-settings" 18 - ]; 19 - 20 - in 21 - { 22 - inherit flake; 23 - }
-30
modules/hosts/mordor/filesystems.nix
··· 1 - { 2 - flake.modules.nixos.mordor = { 3 - 4 - boot.initrd.availableKernelModules = [ "nvme" ]; 5 - 6 - fileSystems."/" = { 7 - device = "/dev/disk/by-label/nixos"; 8 - fsType = "ext4"; 9 - }; 10 - 11 - fileSystems."/home" = { 12 - device = "/dev/disk/by-label/home"; 13 - fsType = "ext4"; 14 - }; 15 - 16 - fileSystems."/boot" = { 17 - device = "/dev/disk/by-label/BOOT"; 18 - fsType = "vfat"; 19 - options = [ 20 - "fmask=0022" 21 - "dmask=0022" 22 - ]; 23 - }; 24 - 25 - swapDevices = [ 26 - { device = "/dev/disk/by-label/swap"; } 27 - ]; 28 - 29 - }; 30 - }
-15
modules/hosts/mordor/hardware-configuration.nix
··· 1 - # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 - # and may be overwritten by future invocations. Please make changes 3 - # to /etc/nixos/configuration.nix instead. 4 - { 5 - 6 - flake.modules.nixos.mordor = { 7 - boot.initrd.availableKernelModules = [ 8 - "xhci_pci" 9 - "ahci" 10 - "usbhid" 11 - "usb_storage" 12 - "sd_mod" 13 - ]; 14 - }; 15 - }
+31
modules/hosts/nargun.nix
··· 1 + { vix, ... }: 2 + { 3 + vix.nargun.includes = [ 4 + vix.nargun._.base 5 + vix.nargun._.hw 6 + ]; 7 + 8 + vix.nargun-vm.includes = [ 9 + vix.nargun._.base 10 + vix.nargun._.vm 11 + ]; 12 + 13 + vix.nargun.provides = { 14 + # for real-world hw machine 15 + hw.includes = [ 16 + vix.mexico 17 + vix.bootable 18 + vix.kvm-amd 19 + vix.niri-desktop 20 + vix.kde-desktop 21 + ]; 22 + 23 + vm.includes = [ 24 + vix.xfce-desktop 25 + ]; 26 + 27 + base.includes = [ 28 + vix.dev-laptop 29 + ]; 30 + }; 31 + }
-16
modules/hosts/nargun/configuration.nix
··· 1 - { inputs, ... }: 2 - let 3 - flake.modules.nixos.nargun.imports = with inputs.self.modules.nixos; [ 4 - vic 5 - kde-desktop 6 - niri-desktop 7 - xfce-desktop 8 - macos-keys 9 - kvm-amd 10 - enthium 11 - ]; 12 - 13 - in 14 - { 15 - inherit flake; 16 - }
-21
modules/hosts/nargun/filesystems.nix
··· 1 - { 2 - flake.modules.nixos.nargun = { 3 - 4 - fileSystems."/" = { 5 - device = "/dev/disk/by-uuid/5e0a5652-9af6-4590-9bd1-be059e339b84"; 6 - fsType = "ext4"; 7 - }; 8 - 9 - fileSystems."/boot" = { 10 - device = "/dev/disk/by-uuid/3902-2085"; 11 - fsType = "vfat"; 12 - options = [ 13 - "fmask=0077" 14 - "dmask=0077" 15 - ]; 16 - }; 17 - 18 - swapDevices = [ { device = "/dev/disk/by-uuid/3be2776b-3153-443b-95b8-0fbd06becb75"; } ]; 19 - 20 - }; 21 - }
-13
modules/hosts/nargun/hardware-configuration.nix
··· 1 - { 2 - flake.modules.nixos.nargun = { 3 - 4 - boot.initrd.availableKernelModules = [ 5 - "nvme" 6 - "xhci_pci" 7 - "usb_storage" 8 - "sd_mod" 9 - "sdhci_pci" 10 - ]; 11 - 12 - }; 13 - }
-24
modules/hosts/nienna/configuration.nix
··· 1 - # Edit this configuration file to define what should be installed on 2 - # your system. Help is available in the configuration.nix(5) man page 3 - # and in the NixOS manual (accessible by running ‘nixos-help’). 4 - 5 - { 6 - inputs, 7 - ... 8 - }: 9 - let 10 - flake.modules.nixos.nienna.imports = with inputs.self.modules.nixos; [ 11 - vic 12 - xfce-desktop 13 - macos-keys 14 - kvm-intel 15 - wl-broadcom 16 - nienna-unfree 17 - ]; 18 - nienna-unfree = inputs.self.lib.unfree-module [ 19 - "broadcom-sta" 20 - ]; 21 - in 22 - { 23 - inherit flake; 24 - }
-24
modules/hosts/nienna/filesystems.nix
··· 1 - # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 - # and may be overwritten by future invocations. Please make changes 3 - # to /etc/nixos/configuration.nix instead. 4 - { 5 - flake.modules.nixos.nienna = { 6 - 7 - fileSystems."/" = { 8 - device = "/dev/disk/by-uuid/389d7756-a765-4be8-81eb-6712e893e705"; 9 - fsType = "ext4"; 10 - }; 11 - 12 - fileSystems."/boot" = { 13 - device = "/dev/disk/by-uuid/67E3-17ED"; 14 - fsType = "vfat"; 15 - options = [ 16 - "fmask=0077" 17 - "dmask=0077" 18 - ]; 19 - }; 20 - 21 - swapDevices = [ ]; 22 - 23 - }; 24 - }
-19
modules/hosts/nienna/hardware-configuration.nix
··· 1 - # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 - # and may be overwritten by future invocations. Please make changes 3 - # to /etc/nixos/configuration.nix instead. 4 - { 5 - 6 - flake.modules.nixos.nienna = { 7 - boot.initrd.availableKernelModules = [ 8 - "uhci_hcd" 9 - "ehci_pci" 10 - "ahci" 11 - "firewire_ohci" 12 - "usbhid" 13 - "usb_storage" 14 - "sd_mod" 15 - "sdhci_pci" 16 - ]; 17 - }; 18 - 19 - }
-15
modules/hosts/smaug/configuration.nix
··· 1 - # Edit this configuration file to define what should be installed on 2 - # your system. Help is available in the configuration.nix(5) man page 3 - # and in the NixOS manual (accessible by running ‘nixos-help’). 4 - { inputs, ... }: 5 - { 6 - flake.modules.nixos.smaug.imports = with inputs.self.modules.nixos; [ 7 - vic 8 - xfce-desktop 9 - macos-keys 10 - kvm-intel 11 - wl-broadcom 12 - nvidia 13 - all-firmware 14 - ]; 15 - }
-32
modules/hosts/smaug/filesystems.nix
··· 1 - # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 - # and may be overwritten by future invocations. Please make changes 3 - # to /etc/nixos/configuration.nix instead. 4 - { 5 - 6 - flake.modules.nixos.smaug = { 7 - 8 - fileSystems."/" = { 9 - device = "/dev/disk/by-label/nixos"; 10 - fsType = "ext4"; 11 - }; 12 - 13 - fileSystems."/boot" = { 14 - device = "/dev/disk/by-label/boot"; 15 - fsType = "vfat"; 16 - options = [ 17 - "fmask=0077" 18 - "dmask=0077" 19 - ]; 20 - }; 21 - 22 - fileSystems."/home" = { 23 - device = "/dev/disk/by-label/home"; 24 - fsType = "ext4"; 25 - }; 26 - 27 - swapDevices = [ 28 - { device = "/dev/disk/by-label/swap"; } 29 - ]; 30 - 31 - }; 32 - }
-11
modules/hosts/smaug/hardware-configuration.nix
··· 1 - { 2 - flake.modules.nixos.smaug = { 3 - 4 - boot.initrd.availableKernelModules = [ 5 - "xhci_pci" 6 - "ehci_pci" 7 - "usb_storage" 8 - "sd_mod" 9 - ]; 10 - }; 11 - }
-7
modules/hosts/tom/configuration.nix
··· 1 - { 2 - flake.modules.nixos.tom = { 3 - boot.loader.grub.enable = false; 4 - fileSystems."/".device = "/dev/null"; 5 - users.users.runner.isNormalUser = true; 6 - }; 7 - }
-7
modules/hosts/varda/darwin-configuration.nix
··· 1 - { inputs, ... }: 2 - { 3 - flake.modules.darwin.varda.imports = with inputs.self.modules.darwin; [ 4 - vic 5 - { users.users.vic.home = "/Users/vic"; } 6 - ]; 7 - }
-8
modules/hosts/yavanna/darwin-configuration.nix
··· 1 - { inputs, ... }: 2 - { 3 - flake.modules.darwin.yavanna.imports = with inputs.self.modules.darwin; [ 4 - vic 5 - { users.users.vic.home = "/Users/vic"; } 6 - ]; 7 - 8 - }
-22
modules/packages/edgevpn.nix
··· 1 - { inputs, ... }: 2 - let 3 - flake-file.inputs.edgevpn = { 4 - url = "github:mudler/edgevpn"; 5 - flake = false; 6 - }; 7 - 8 - perSystem = 9 - { pkgs, ... }: 10 - { 11 - packages.edgevpn = pkgs.buildGoModule { 12 - name = "edgevpn"; 13 - src = inputs.edgevpn; 14 - doCheck = false; 15 - vendorHash = "sha256-/YAE34MmGsluncabzTcyIGYQUFDPUKidol7hZP2uR20="; 16 - meta.mainProgram = "edgevpn"; 17 - }; 18 - }; 19 - in 20 - { 21 - inherit flake-file perSystem; 22 - }
-90
modules/vic/_fish/abbrs.nix
··· 1 - { 2 - ls = "exa"; 3 - top = "btm"; 4 - cat = "bat"; 5 - grep = "rg"; 6 - find = "fd"; 7 - nr = "nix run"; 8 - nf = "fd --glob '*.nix' -X nixfmt {}"; 9 - 10 - vir = { 11 - expansion = "nvim -c \"'0%\""; 12 - setCursor = true; 13 - }; 14 - 15 - vt = { 16 - expansion = "nvim -c \":Tv %\""; 17 - setCursor = true; 18 - }; 19 - 20 - # jj 21 - jz = "jj-fzf"; 22 - lj = "lazyjj"; 23 - jb = "jj bookmark"; 24 - jc = "jj commit -i"; 25 - jd = { 26 - expansion = "jj describe -m \"%\""; 27 - setCursor = true; 28 - }; 29 - jdd = "jj diff"; 30 - jdt = "jj show --tool difft"; 31 - je = "jj edit"; 32 - jf = "jj git fetch"; 33 - jg = "jj git"; 34 - jl = "jj log"; 35 - jll = "jj ll"; 36 - jm = "jj bookmark set main -r @"; 37 - jm- = "jj bookmark set main -r @-"; 38 - jn = "jj new"; 39 - jN = { 40 - expansion = "jj new -m \"%\""; 41 - setCursor = true; 42 - }; 43 - jp = "jj git push"; 44 - jP = "jj git push && jj new -A main"; 45 - jr = "jj rebase"; 46 - jR = "jj restore -i"; 47 - jS = "jj squash -i"; 48 - js = "jj show --stat --no-pager"; 49 - jss = "jj show --summary --no-pager"; 50 - ju = "jjui"; 51 - jdp = "jj-desc && jj bookmark set main -r @ && jj git push -r main"; 52 - jcp = "jj commit -i && jj bookmark set main -r @- && jj git push -r main"; 53 - 54 - # git 55 - lg = "lazygit"; 56 - gr = "git recents"; 57 - gc = "git commit"; 58 - gb = "git branch"; 59 - gd = "git dff"; 60 - gs = "git status"; 61 - gco = "git checkout"; 62 - gcb = "git checkout -b"; 63 - gp = "git pull --rebase --no-commit"; 64 - gz = "git stash"; 65 - gza = "git stash apply"; 66 - gfp = "git push --force-with-lease"; 67 - gfap = "git fetch --all -p"; 68 - groh = "git rebase remotes/origin/HEAD"; 69 - grih = "git rebase -i remotes/origin/HEAD"; 70 - grom = "git rebase remotes/origin/master"; 71 - grim = "git rebase -i remotes/origin/master"; 72 - gpfh = "git push --force-with-lease origin HEAD"; 73 - gfix = "git commit --all --fixup amend:HEAD"; 74 - gcm = "git commit --all --message"; 75 - ga = "git commit --amend --reuse-message HEAD --all"; 76 - gcam = "git commit --amend --all --message"; 77 - gbDm = "git rm-merged"; 78 - # Magit 79 - ms = "mg SPC g g"; 80 - # status 81 - mc = "mg SPC g / c"; 82 - # commit 83 - md = "mg SPC g / d u"; 84 - # diff unstaged 85 - ml = "mg SPC g / l l"; 86 - # log 87 - mr = "mg SPC g / r i"; 88 - # rebase interactive 89 - mz = "mg SPC g / Z l"; 90 - }
-15
modules/vic/_fish/aliases.nix
··· 1 - { 2 - y = "EDITOR=d yazi"; 3 - l = "exa -l"; 4 - ll = "exa -l -@ --git"; 5 - tree = "exa -T"; 6 - # "." = "exa -g"; 7 - ".." = "cd .."; 8 - vs = ''vim -c "lua Snacks.picker.smart()"''; 9 - vf = ''vim -c "lua Snacks.picker.files()"''; 10 - vg = ''vim -c "lua Snacks.picker.grep()"''; 11 - vr = ''vim -c "lua Snacks.picker.recent()"''; 12 - vd = ''vim -c "DiffEditor $left $right $output"''; 13 - av = ''astrovim''; 14 - lv = ''lazyvim''; 15 - }
-58
modules/vic/_fish/functions.nix
··· 1 - { 2 - lib, 3 - inputs, 4 - ... 5 - }: 6 - { 7 - jj-git-init.description = "init jj to follow git branch"; 8 - jj-git-init.argumentNames = [ "branch" ]; 9 - jj-git-init.body = '' 10 - jj git init --colocate 11 - jj bookmark track "$branch@origin" 12 - jj config set --repo "revset-aliases.'trunk()'" "$branch@origin" 13 - ''; 14 - 15 - jj-desc.body = '' 16 - jj describe --edit -m "$(echo -e "\n")$(jj status --color never | awk '{print "JJ: " $0}')$(echo -e "\n")$(jj show --git --color never | awk '{print "JJ: " $0}')" 17 - ''; 18 - 19 - mg.body = "spc u SPC gg -r \"$PWD\" RET"; 20 - spc.body = "SPC $argv -- -nw"; 21 - vspc.body = "SPC $argv -- -c"; 22 - fish_hybrid_key_bindings.description = "Vi-style bindings that inherit emacs-style bindings in all modes"; 23 - fish_hybrid_key_bindings.body = '' 24 - for mode in default insert visual 25 - fish_default_key_bindings -M $mode 26 - end 27 - fish_vi_key_bindings --no-erase 28 - ''; 29 - vix-activate.description = "Activate a new vix system generation"; 30 - vix-activate.body = "nix run /hk/vix"; 31 - vix-shell.description = "Run nix shell with vix's nixpkgs"; 32 - vix-shell.body = "nix shell --inputs-from $HOME/.nix-out/nixpkgs"; 33 - vix-nixpkg-search.description = "Nix search on vix's nixpkgs input"; 34 - vix-nixpkg-search.body = "nix search --inputs-from $HOME/.nix-out/vix nixpkgs $argv"; 35 - rg-vix-inputs.description = "Search on vix flake inputs"; 36 - rg-vix-inputs.body = 37 - let 38 - maybeFlakePaths = f: if builtins.hasAttr "inputs" f then flakePaths f else [ ]; 39 - flakePaths = 40 - flake: [ flake.outPath ] ++ lib.flatten (lib.mapAttrsToList (_: maybeFlakePaths) flake.inputs); 41 - paths = builtins.concatStringsSep " " (flakePaths inputs.self); 42 - in 43 - "rg $argv ${paths}"; 44 - rg-vix.description = "Search on current vix"; 45 - rg-vix.body = "rg $argv $HOME/.nix-out/vix"; 46 - rg-nixpkgs.description = "Search on current nixpkgs"; 47 - rg-nixpkgs.body = "rg $argv $HOME/.nix-out/nixpkgs"; 48 - rg-home-manager.description = "Search on current home-manager"; 49 - rg-home-manager.body = "rg $argv $HOME/.nix-out/home-manager"; 50 - rg-nix-darwin.description = "Search on current nix-darwin"; 51 - rg-nix-darwin.body = "rg $argv $HOME/.nix-out/nix-darwin"; 52 - nixos-opt.description = "Open a browser on search.nixos.org for options"; 53 - nixos-opt.body = ''open "https://search.nixos.org/options?sort=relevance&query=$argv"''; 54 - nixos-pkg.description = "Open a browser on search.nixos.org for packages"; 55 - nixos-pkg.body = ''open "https://search.nixos.org/packages?sort=relevance&query=$argv"''; 56 - repology-nixpkgs.description = "Open a browser on search for nixpkgs on repology.org"; 57 - repology-nixpkgs.body = ''open "https://repology.org/projects/?inrepo=nix_unstable&search=$argv"''; 58 - }
-60
modules/vic/_fish/tv.fish
··· 1 - bind \t __tv_complete 2 - 3 - function __tv_complete -d 'fish completion widget with tv' 4 - # modified from https://github.com/junegunn/fzf/wiki/Examples-(fish)#completion 5 - # As of 2.6, fish's "complete" function does not understand 6 - # subcommands. Instead, we use the same hack as __fish_complete_subcommand and 7 - # extract the subcommand manually. 8 - set -l cmd (commandline -co) (commandline -ct) 9 - 10 - switch $cmd[1] 11 - case env sudo 12 - for i in (seq 2 (count $cmd)) 13 - switch $cmd[$i] 14 - case '-*' 15 - case '*=*' 16 - case '*' 17 - set cmd $cmd[$i..-1] 18 - break 19 - end 20 - end 21 - end 22 - 23 - set -l cmd_lastw $cmd[-1] 24 - set cmd (string join -- ' ' $cmd) 25 - 26 - set -l complist (complete -C$cmd) 27 - set -l result 28 - 29 - # do nothing if there is nothing to select from 30 - test -z "$complist"; and return 31 - 32 - set -l compwc (echo $complist | wc -w) 33 - if test $compwc -eq 1 34 - # if there is only one option dont open fzf 35 - set result "$complist" 36 - else 37 - set result (string join -- \n $complist | column -t -l 2 -o \t | tv --select-1 --no-status-bar --keybindings='tab="confirm_selection"' --inline --input-header "$cmd" | string split -m 2 -f 1 \t | string trim --right) 38 - end 39 - 40 - set -l prefix (string sub -s 1 -l 1 -- (commandline -t)) 41 - for i in (seq (count $result)) 42 - set -l r $result[$i] 43 - switch $prefix 44 - case "'" 45 - commandline -t -- (string escape -- $r) 46 - case '"' 47 - if string match '*"*' -- $r >/dev/null 48 - commandline -t -- (string escape -- $r) 49 - else 50 - commandline -t -- '"'$r'"' 51 - end 52 - case '~' 53 - commandline -t -- (string sub -s 2 (string escape -n -- $r)) 54 - case '*' 55 - commandline -t -- $r 56 - end 57 - commandline -i ' ' 58 - end 59 - commandline -f repaint 60 - end
+16
modules/vic/admin.nix
··· 1 + { 2 + 3 + vix.vic.provides.admin = 4 + { user, ... }: 5 + { 6 + darwin.system.primaryUser = user.userName; 7 + nixos.users.users.${user.userName} = { 8 + isNormalUser = true; 9 + extraGroups = [ 10 + "wheel" 11 + "networkmanager" 12 + ]; 13 + }; 14 + }; 15 + 16 + }
-80
modules/vic/apps.nix
··· 1 - { inputs, ... }: 2 - let 3 - flake.modules.homeManager.vic.imports = [ 4 - nonBombadil 5 - anywhere 6 - linux 7 - ]; 8 - 9 - linux = 10 - { lib, pkgs, ... }: 11 - lib.mkIf (pkgs.stdenvNoCC.isLinux) { 12 - home.packages = [ 13 - pkgs.gparted 14 - pkgs.wl-clipboard 15 - pkgs.copilot-language-server 16 - pkgs.aider-chat 17 - pkgs.qutebrowser 18 - pkgs.multimarkdown 19 - pkgs.gemini-cli-bin 20 - # perSystem.self.copilot-language-server # tab tab tab 21 - ]; 22 - }; 23 - 24 - nonBombadil = 25 - { 26 - lib, 27 - pkgs, 28 - osConfig, 29 - ... 30 - }: 31 - lib.mkIf (pkgs.stdenvNoCC.isLinux && osConfig.networking.hostName != "bombadil") { 32 - home.packages = [ 33 - #perSystem.nox.default 34 - #perSystem.self.devicon-lookup # for eee 35 - #perSystem.self.leader 36 - pkgs.yazi # file tui 37 - pkgs.zoxide # cd 38 - pkgs.nix-search-cli 39 - pkgs.nixd # lsp 40 - pkgs.nixfmt-rfc-style 41 - pkgs.ispell 42 - pkgs.gh 43 - ]; 44 - }; 45 - 46 - anywhere = 47 - { pkgs, ... }: 48 - let 49 - selfpkgs = inputs.self.packages.${pkgs.system}; 50 - in 51 - { 52 - programs.nh.enable = true; 53 - programs.home-manager.enable = true; 54 - 55 - home.packages = [ 56 - #inputs.nix-versions.packages.${pkgs.system}.default 57 - # pkgs.tree 58 - pkgs.fzf 59 - pkgs.ripgrep # grep 60 - pkgs.bat # cat 61 - pkgs.bottom 62 - pkgs.htop 63 - pkgs.eza # ls 64 - pkgs.fd # find 65 - # pkgs.lazygit # no magit 66 - # pkgs.tig # alucard 67 - pkgs.cachix 68 - pkgs.jq 69 - pkgs.home-manager 70 - pkgs.helix 71 - pkgs.television 72 - selfpkgs.vic-sops-get 73 - selfpkgs.vic-sops-rotate 74 - ]; 75 - }; 76 - 77 - in 78 - { 79 - inherit flake; 80 - }
+14
modules/vic/browser.nix
··· 1 + { 2 + vix.vic.provides.browser = _: { 3 + 4 + homeManager = 5 + { pkgs, ... }: 6 + { 7 + home.packages = [ 8 + pkgs.librewolf 9 + pkgs.qutebrowser 10 + ]; 11 + }; 12 + 13 + }; 14 + }
+21
modules/vic/cli-tui.nix
··· 1 + { 2 + vix.vic.provides.cli-tui = _: { 3 + 4 + homeManager = 5 + { pkgs, ... }: 6 + { 7 + home.packages = [ 8 + pkgs.fzf 9 + pkgs.ripgrep # grep 10 + pkgs.bat # cat 11 + pkgs.bottom 12 + pkgs.htop 13 + pkgs.eza # ls 14 + pkgs.fd # find 15 + pkgs.jq 16 + pkgs.television 17 + ]; 18 + }; 19 + 20 + }; 21 + }
+27
modules/vic/common-host-env.nix
··· 1 + { vix, ... }: 2 + let 3 + env-providers = with vix.vic.provides; [ 4 + admin # vic is admin in all hosts 5 + ({ user, ... }: vix.autologin user) 6 + (_: vix.state-version) # for hm 7 + fonts 8 + browser 9 + hm-backup 10 + fish 11 + terminals 12 + cli-tui 13 + editors # for normal people not btw'ing. 14 + doom-btw 15 + vim-btw 16 + nix-btw 17 + dots 18 + ]; 19 + in 20 + { 21 + # for all hosts that include vic. 22 + vix.vic._.common-host-env = 23 + { host, user }: 24 + { 25 + includes = map (f: f { inherit host user; }) env-providers; 26 + }; 27 + }
-53
modules/vic/desktop-apps.nix
··· 1 - { ... }: 2 - let 3 - 4 - flake.modules.homeManager.vic.imports = [ 5 - everywhere 6 - nonBombadil 7 - darwin 8 - ]; 9 - 10 - darwin = 11 - { pkgs, lib, ... }: 12 - lib.mkIf pkgs.stdenvNoCC.isDarwin { 13 - home.packages = [ pkgs.iterm2 ]; 14 - }; 15 - 16 - nonBombadil = 17 - { 18 - pkgs, 19 - osConfig, 20 - lib, 21 - ... 22 - }: 23 - lib.mkIf (pkgs.stdenvNoCC.isLinux && osConfig.networking.hostName != "bombadil") { 24 - home.packages = [ 25 - pkgs.code-cursor 26 - pkgs.zed-editor 27 - ]; 28 - }; 29 - 30 - everywhere = 31 - { 32 - pkgs, 33 - lib, 34 - ... 35 - }: 36 - { 37 - home.packages = [ 38 - pkgs.librewolf 39 - ] 40 - ++ (lib.optionals (pkgs.system == "aarm64-darwin" || pkgs.stdenvNoCC.isLinux) [ 41 - pkgs.ghostty 42 - ]) 43 - ++ (lib.optionals pkgs.stdenvNoCC.isLinux [ 44 - pkgs.gnome-disk-utility 45 - pkgs.vscode 46 - pkgs.wezterm 47 - ]); 48 - }; 49 - 50 - in 51 - { 52 - inherit flake; 53 - }
-39
modules/vic/direnv.nix
··· 1 - { inputs, ... }: 2 - let 3 - flake.modules.homeManager.vic = { 4 - programs.direnv.enable = true; 5 - programs.direnv.nix-direnv.enable = true; 6 - 7 - home.file.".config/direnv/lib/use_nix_installables.sh".text = use_nix_installables; 8 - home.file.".config/direnv/lib/use_vix_go.sh".text = use_vix_go; 9 - home.file.".config/direnv/lib/use_vix_llm.sh".text = use_vix_llm; 10 - home.file.".envrc".text = home_envrc; 11 - 12 - }; 13 - 14 - use_nix_installables = '' 15 - use_nix_installables() { 16 - direnv_load nix shell "''${@}" -c $direnv dump 17 - } 18 - ''; 19 - 20 - use_vix_go = '' 21 - use_vix_go() { 22 - use nix_installables ${inputs.nixpkgs}#go ${inputs.nixpkgs}#gopls 23 - } 24 - ''; 25 - 26 - use_vix_llm = '' 27 - use_vix_llm() { 28 - source $HOME/.config/sops-nix/secrets/rendered/llm_apis.env 29 - } 30 - ''; 31 - 32 - home_envrc = '' 33 - use vix_llm 34 - ''; 35 - 36 - in 37 - { 38 - inherit flake; 39 - }
+77
modules/vic/doom-btw.nix
··· 1 + { inputs, ... }: 2 + { 3 + 4 + flake-file.inputs = { 5 + doom-emacs.flake = false; 6 + doom-emacs.url = "github:doomemacs/doomemacs"; 7 + SPC.url = "github:vic/SPC"; 8 + }; 9 + 10 + vix.vic.provides.doom-btw = _: { 11 + homeManager = 12 + { pkgs, lib, ... }: 13 + let 14 + emacsPkg = pkgs.emacs30; 15 + 16 + doom-install = pkgs.writeShellApplication { 17 + name = "doom-install"; 18 + runtimeInputs = with pkgs; [ 19 + git 20 + emacsPkg 21 + ripgrep 22 + openssh 23 + ]; 24 + text = '' 25 + set -e 26 + if test -f "$HOME"/.config/emacs/.local/etc/@/init*.el; then 27 + doom_rev="$(rg "put 'doom-version 'ref '\"(\w+)\"" "$HOME"/.config/emacs/.local/etc/@/init*.el -or '$1')" 28 + fi 29 + 30 + if test "''${doom_rev:-}" = "${inputs.doom-emacs.rev}"; then 31 + echo "DOOM Emacs already at revision ${inputs.doom-emacs.rev}" 32 + exit 0 # doom already pointing to same revision 33 + fi 34 + 35 + ( 36 + echo "DOOM Emacs obtaining revision ${inputs.doom-emacs.rev}" 37 + if ! test -d "$HOME/.config/emacs/.git"; then 38 + git clone --depth 1 https://github.com/doomemacs/doomemacs "$HOME/.config/emacs" 39 + fi 40 + cd "$HOME/.config/emacs" 41 + git fetch --depth 1 origin "${inputs.doom-emacs.rev}" 42 + git reset --hard "${inputs.doom-emacs.rev}" 43 + bin/doom install --no-config --no-env --no-install --no-fonts --no-hooks --force 44 + echo "DOOM Emacs updated to revision ${inputs.doom-emacs.rev}" 45 + bin/doom sync -e --force 46 + ) 47 + ''; 48 + }; 49 + 50 + SPC = inputs.SPC.packages.${pkgs.system}.SPC.override { emacs = emacsPkg; }; 51 + 52 + in 53 + { 54 + programs.emacs.enable = true; 55 + programs.emacs.package = emacsPkg; 56 + #services.emacs.enable = true; 57 + services.emacs.package = emacsPkg; 58 + services.emacs.extraOptions = [ 59 + "--init-directory" 60 + "~/.config/emacs" 61 + ]; 62 + 63 + home.packages = [ 64 + SPC 65 + (pkgs.writeShellScriptBin "doom" ''exec $HOME/.config/emacs/bin/doom "$@"'') 66 + (pkgs.writeShellScriptBin "doomscript" ''exec $HOME/.config/emacs/bin/doomscript "$@"'') 67 + (pkgs.writeShellScriptBin "d" ''exec emacsclient -nw -a "doom run -nw --" "$@"'') 68 + ]; 69 + 70 + #home.activation.doom-install = lib.hm.dag.entryAfter [ "link-ssh-id" ] '' 71 + # run ${lib.getExe doom-install} 72 + #''; 73 + }; 74 + 75 + }; 76 + 77 + }
-84
modules/vic/doom.nix
··· 1 - { inputs, ... }: 2 - let 3 - 4 - flake-file.inputs = { 5 - doom-emacs.flake = false; 6 - doom-emacs.url = "github:doomemacs/doomemacs"; 7 - SPC.url = "github:vic/SPC"; 8 - }; 9 - 10 - flake.modules.homeManager.vic = 11 - { 12 - pkgs, 13 - lib, 14 - ... 15 - }: 16 - let 17 - 18 - emacsPkg = pkgs.emacs30; 19 - 20 - doom-install = pkgs.writeShellApplication { 21 - name = "doom-install"; 22 - runtimeInputs = with pkgs; [ 23 - git 24 - emacsPkg 25 - ripgrep 26 - openssh 27 - ]; 28 - text = '' 29 - set -e 30 - if test -f "$HOME"/.config/emacs/.local/etc/@/init*.el; then 31 - doom_rev="$(rg "put 'doom-version 'ref '\"(\w+)\"" "$HOME"/.config/emacs/.local/etc/@/init*.el -or '$1')" 32 - fi 33 - 34 - if test "''${doom_rev:-}" = "${inputs.doom-emacs.rev}"; then 35 - echo "DOOM Emacs already at revision ${inputs.doom-emacs.rev}" 36 - exit 0 # doom already pointing to same revision 37 - fi 38 - 39 - ( 40 - echo "DOOM Emacs obtaining revision ${inputs.doom-emacs.rev}" 41 - if ! test -d "$HOME/.config/emacs/.git"; then 42 - git clone --depth 1 https://github.com/doomemacs/doomemacs "$HOME/.config/emacs" 43 - fi 44 - cd "$HOME/.config/emacs" 45 - git fetch --depth 1 origin "${inputs.doom-emacs.rev}" 46 - git reset --hard "${inputs.doom-emacs.rev}" 47 - bin/doom install --no-config --no-env --no-install --no-fonts --no-hooks --force 48 - echo "DOOM Emacs updated to revision ${inputs.doom-emacs.rev}" 49 - bin/doom sync -e --force 50 - ) 51 - ''; 52 - }; 53 - 54 - SPC = inputs.SPC.packages.${pkgs.system}.SPC.override { emacs = emacsPkg; }; 55 - 56 - doom = { 57 - programs.emacs.enable = true; 58 - programs.emacs.package = emacsPkg; 59 - #services.emacs.enable = true; 60 - services.emacs.package = emacsPkg; 61 - services.emacs.extraOptions = [ 62 - "--init-directory" 63 - "~/.config/emacs" 64 - ]; 65 - 66 - home.packages = [ 67 - SPC 68 - (pkgs.writeShellScriptBin "doom" ''exec $HOME/.config/emacs/bin/doom "$@"'') 69 - (pkgs.writeShellScriptBin "doomscript" ''exec $HOME/.config/emacs/bin/doomscript "$@"'') 70 - (pkgs.writeShellScriptBin "d" ''exec emacsclient -nw -a "doom run -nw --" "$@"'') 71 - ]; 72 - 73 - home.activation.doom-install = lib.hm.dag.entryAfter [ "link-ssh-id" ] '' 74 - run ${lib.getExe doom-install} 75 - ''; 76 - }; 77 - 78 - in 79 - lib.mkIf pkgs.stdenvNoCC.isLinux doom; 80 - in 81 - { 82 - inherit flake-file; 83 - inherit flake; 84 - }
+42 -39
modules/vic/dots.nix
··· 1 1 { 2 - flake.modules.homeManager.vic = 3 - { config, pkgs, ... }: 4 - let 5 - dotsLink = 6 - path: 7 - config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.flake/modules/vic/dots/${path}"; 8 - in 9 - { 10 - home.activation.link-flake = config.lib.dag.entryAfter [ "writeBoundary" ] '' 11 - echo Checking that "$HOME/.flake" exists. 12 - if ! test -L "$HOME/.flake"; then 13 - echo "Missing $HOME/.flake link" 14 - exit 1 15 - fi 16 - ''; 2 + # Use hjem instead of mkOutOfStoreSymlink ! 3 + vix.vic.provides.dots = _: { 4 + homeManager = 5 + { config, pkgs, ... }: 6 + let 7 + dotsLink = 8 + path: 9 + config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/.flake/modules/vic/dots/${path}"; 10 + in 11 + { 12 + home.activation.link-flake = config.lib.dag.entryAfter [ "writeBoundary" ] '' 13 + echo Checking that "$HOME/.flake" exists. 14 + if ! test -L "$HOME/.flake"; then 15 + echo "Missing $HOME/.flake link" 16 + exit 1 17 + fi 18 + ''; 17 19 18 - home.file.".ssh" = { 19 - recursive = true; 20 - source = ./dots/ssh; 21 - }; 20 + home.file.".ssh" = { 21 + recursive = true; 22 + source = ./dots/ssh; 23 + }; 22 24 23 - home.file.".config/niri".source = dotsLink "config/niri"; 24 - home.file.".config/nvim".source = dotsLink "config/nvim"; 25 - home.file.".config/astrovim".source = dotsLink "config/astrovim"; 26 - home.file.".config/lazyvim".source = dotsLink "config/lazyvim"; 27 - home.file.".config/vscode-vim".source = dotsLink "config/vscode-vim"; 28 - home.file.".config/doom".source = dotsLink "config/doom"; 29 - home.file.".config/zed".source = dotsLink "config/zed"; 30 - home.file.".config/wezterm".source = dotsLink "config/wezterm"; 31 - home.file.".config/ghostty".source = dotsLink "config/ghostty"; 25 + home.file.".config/niri".source = dotsLink "config/niri"; 26 + home.file.".config/nvim".source = dotsLink "config/nvim"; 27 + home.file.".config/astrovim".source = dotsLink "config/astrovim"; 28 + home.file.".config/lazyvim".source = dotsLink "config/lazyvim"; 29 + home.file.".config/vscode-vim".source = dotsLink "config/vscode-vim"; 30 + home.file.".config/doom".source = dotsLink "config/doom"; 31 + home.file.".config/zed".source = dotsLink "config/zed"; 32 + home.file.".config/wezterm".source = dotsLink "config/wezterm"; 33 + home.file.".config/ghostty".source = dotsLink "config/ghostty"; 32 34 33 - home.file.".config/Code/User/settings.json".source = dotsLink "config/Code/User/settings.json"; 34 - home.file.".config/Code/User/keybindings.json".source = 35 - dotsLink "config/Code/User/keybindings.json"; 36 - home.file.".vscode/extensions/extensions.json".source = 37 - dotsLink "vscode/extensions/extensions-${pkgs.stdenv.hostPlatform.uname.system}.json"; 35 + home.file.".config/Code/User/settings.json".source = dotsLink "config/Code/User/settings.json"; 36 + home.file.".config/Code/User/keybindings.json".source = 37 + dotsLink "config/Code/User/keybindings.json"; 38 + home.file.".vscode/extensions/extensions.json".source = 39 + dotsLink "vscode/extensions/extensions-${pkgs.stdenv.hostPlatform.uname.system}.json"; 38 40 39 - home.file.".config/Cursor/User/settings.json".source = dotsLink "config/Code/User/settings.json"; 40 - home.file.".config/Cursor/User/keybindings.json".source = 41 - dotsLink "config/Code/User/keybindings.json"; 42 - home.file.".cursor/extensions/extensions.json".source = 43 - dotsLink "cursor/extensions/extensions-${pkgs.stdenv.hostPlatform.uname.system}.json"; 41 + home.file.".config/Cursor/User/settings.json".source = dotsLink "config/Code/User/settings.json"; 42 + home.file.".config/Cursor/User/keybindings.json".source = 43 + dotsLink "config/Code/User/keybindings.json"; 44 + home.file.".cursor/extensions/extensions.json".source = 45 + dotsLink "cursor/extensions/extensions-${pkgs.stdenv.hostPlatform.uname.system}.json"; 44 46 45 - }; 47 + }; 48 + }; 46 49 }
+1 -1
modules/vic/dots/vscode/extensions/extensions-Linux.json
··· 1 - [{"identifier":{"id":"cybersamurai.midnight-purple-2077","uuid":"093e3b44-8c4f-461b-8aa8-ba46f938aae3"},"version":"1.1.9","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/cybersamurai.midnight-purple-2077-1.1.9","scheme":"file"},"relativeLocation":"cybersamurai.midnight-purple-2077-1.1.9","metadata":{"installedTimestamp":1742623962707,"pinned":false,"source":"gallery","id":"093e3b44-8c4f-461b-8aa8-ba46f938aae3","publisherId":"716a7a71-9c4e-490a-ba29-0780f389e5e8","publisherDisplayName":"cyber samurai","targetPlatform":"undefined","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"chaitanyashahare.lazygit","uuid":"e370d573-0664-4b89-b241-5d3cfeb9a427"},"version":"1.0.7","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/chaitanyashahare.lazygit-1.0.7","scheme":"file"},"relativeLocation":"chaitanyashahare.lazygit-1.0.7","metadata":{"installedTimestamp":1742624175976,"pinned":false,"source":"gallery","id":"e370d573-0664-4b89-b241-5d3cfeb9a427","publisherId":"dce96627-2e0f-4f44-8cd1-a081a4b4e98e","publisherDisplayName":"Chaitanya Shahare","targetPlatform":"undefined","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode.cpptools-themes","uuid":"99b17261-8f6e-45f0-9ad5-a69c6f509a4f"},"version":"2.0.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.cpptools-themes-2.0.0","scheme":"file"},"relativeLocation":"ms-vscode.cpptools-themes-2.0.0","metadata":{"installedTimestamp":1743618545498,"source":"gallery","id":"99b17261-8f6e-45f0-9ad5-a69c6f509a4f","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"github.github-vscode-theme","uuid":"7328a705-91fc-49e6-8293-da6f112e482d"},"version":"6.3.5","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.github-vscode-theme-6.3.5","scheme":"file"},"relativeLocation":"github.github-vscode-theme-6.3.5","metadata":{"installedTimestamp":1743618590147,"source":"gallery","id":"7328a705-91fc-49e6-8293-da6f112e482d","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"dracula-theme.theme-dracula","uuid":"4e44877c-1c8d-4f9c-ba86-1372d0fbeeb1"},"version":"2.25.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/dracula-theme.theme-dracula-2.25.1","scheme":"file"},"relativeLocation":"dracula-theme.theme-dracula-2.25.1","metadata":{"installedTimestamp":1744233970240,"source":"gallery","id":"4e44877c-1c8d-4f9c-ba86-1372d0fbeeb1","publisherId":"fbb3d024-f8f2-460c-bdb5-99552f6d8c4b","publisherDisplayName":"Dracula Theme","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"hyzeta.vscode-theme-github-light","uuid":"b84ed643-ec7d-49cc-a514-3ce104ed777f"},"version":"7.14.2","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/hyzeta.vscode-theme-github-light-7.14.2","scheme":"file"},"relativeLocation":"hyzeta.vscode-theme-github-light-7.14.2","metadata":{"installedTimestamp":1744238749461,"source":"gallery","id":"b84ed643-ec7d-49cc-a514-3ce104ed777f","publisherId":"18f3a989-6d93-420d-a045-baf7651c8552","publisherDisplayName":"Hyzeta","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"mkhl.direnv","uuid":"e365e970-aeef-4dcd-8e4a-17306a27ab62"},"version":"0.17.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/mkhl.direnv-0.17.0","scheme":"file"},"relativeLocation":"mkhl.direnv-0.17.0","metadata":{"installedTimestamp":1746581315466,"pinned":false,"source":"gallery","id":"e365e970-aeef-4dcd-8e4a-17306a27ab62","publisherId":"577d6c37-7054-4ca5-b4ce-9250409f3903","publisherDisplayName":"Martin Kühl","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"vspacecode.whichkey","uuid":"47ddeb9c-b4bb-4594-906b-412886e20e47"},"version":"0.11.4","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/vspacecode.whichkey-0.11.4","scheme":"file"},"relativeLocation":"vspacecode.whichkey-0.11.4","metadata":{"installedTimestamp":1746581341954,"pinned":false,"source":"gallery","id":"47ddeb9c-b4bb-4594-906b-412886e20e47","publisherId":"60415ab6-4581-4e73-a7e0-6fc6b3369f12","publisherDisplayName":"VSpaceCode","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"bodil.file-browser","uuid":"97a82b1e-e6f7-4519-b1fc-f6be103e3824"},"version":"0.2.11","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/bodil.file-browser-0.2.11","scheme":"file"},"relativeLocation":"bodil.file-browser-0.2.11","metadata":{"installedTimestamp":1746581346580,"pinned":false,"source":"gallery","id":"97a82b1e-e6f7-4519-b1fc-f6be103e3824","publisherId":"e5c9456a-b78b-41ec-95c2-0cc218272ab9","publisherDisplayName":"Bodil Stokke","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"jacobdufault.fuzzy-search","uuid":"c2ebe7f7-8974-4ceb-a4a5-aea798305313"},"version":"0.0.3","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/jacobdufault.fuzzy-search-0.0.3","scheme":"file"},"relativeLocation":"jacobdufault.fuzzy-search-0.0.3","metadata":{"installedTimestamp":1746581346581,"pinned":false,"source":"gallery","id":"c2ebe7f7-8974-4ceb-a4a5-aea798305313","publisherId":"e7902c39-c8b4-4fb0-b245-6241b490a67b","publisherDisplayName":"jacobdufault","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"usernamehw.errorlens","uuid":"9d8c32ab-354c-4daf-a9bf-20b633734435"},"version":"3.26.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/usernamehw.errorlens-3.26.0","scheme":"file"},"relativeLocation":"usernamehw.errorlens-3.26.0","metadata":{"installedTimestamp":1746581420935,"pinned":false,"source":"gallery","id":"9d8c32ab-354c-4daf-a9bf-20b633734435","publisherId":"151820df-5dc5-4c97-8751-eb84643203fa","publisherDisplayName":"Alexander","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"scala-lang.scala","uuid":"c6f87c08-f5ca-4f59-8cee-bc29464dcbfb"},"version":"0.5.9","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/scala-lang.scala-0.5.9","scheme":"file"},"relativeLocation":"scala-lang.scala-0.5.9","metadata":{"installedTimestamp":1747372492850,"pinned":false,"source":"gallery","id":"c6f87c08-f5ca-4f59-8cee-bc29464dcbfb","publisherId":"2ffc6e5b-e6aa-408c-98b4-47db120356c8","publisherDisplayName":"scala-lang","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"sanaajani.taskrunnercode","uuid":"2e19ddff-cc5a-4840-9f43-b45371d0c09d"},"version":"0.3.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/sanaajani.taskrunnercode-0.3.0","scheme":"file"},"relativeLocation":"sanaajani.taskrunnercode-0.3.0","metadata":{"installedTimestamp":1747375915641,"pinned":false,"source":"gallery","id":"2e19ddff-cc5a-4840-9f43-b45371d0c09d","publisherId":"60bc378d-7290-4490-873d-5212f6a32882","publisherDisplayName":"Sana Ajani","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"virejdasani.in-your-face","uuid":"c2436335-4b8a-4530-9f45-e0a8315325c2"},"version":"1.1.3","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/virejdasani.in-your-face-1.1.3","scheme":"file"},"relativeLocation":"virejdasani.in-your-face-1.1.3","metadata":{"installedTimestamp":1747376489763,"pinned":false,"source":"gallery","id":"c2436335-4b8a-4530-9f45-e0a8315325c2","publisherId":"91638527-c61c-44ed-8007-7469d95df049","publisherDisplayName":"Virej Dasani","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"akamud.vscode-theme-onedark","uuid":"9b2c953d-6ad4-46d1-b18e-7e5992d1d8a6"},"version":"2.3.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/akamud.vscode-theme-onedark-2.3.0","scheme":"file"},"relativeLocation":"akamud.vscode-theme-onedark-2.3.0","metadata":{"installedTimestamp":1747775771341,"source":"gallery","id":"9b2c953d-6ad4-46d1-b18e-7e5992d1d8a6","publisherId":"1a680e61-b64e-4eff-bbbb-2085b0618f52","publisherDisplayName":"Mahmoud Ali","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode.test-adapter-converter","uuid":"47210ec2-0324-4cbb-9523-9dff02a5f9ec"},"version":"0.2.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.test-adapter-converter-0.2.1","scheme":"file"},"relativeLocation":"ms-vscode.test-adapter-converter-0.2.1","metadata":{"installedTimestamp":1747953994821,"pinned":false,"source":"gallery","id":"47210ec2-0324-4cbb-9523-9dff02a5f9ec","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"swellaby.vscode-rust-test-adapter","uuid":"c167848c-fc11-496e-b432-1fd0a578a408"},"version":"0.11.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/swellaby.vscode-rust-test-adapter-0.11.0","scheme":"file"},"relativeLocation":"swellaby.vscode-rust-test-adapter-0.11.0","metadata":{"installedTimestamp":1747953994807,"pinned":false,"source":"gallery","id":"c167848c-fc11-496e-b432-1fd0a578a408","publisherId":"48c64ea1-db35-4e9e-8977-84495a6cc789","publisherDisplayName":"Swellaby","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"hbenl.vscode-test-explorer","uuid":"ff96f1b4-a4b8-45ef-8ecf-c232c0cb75c8"},"version":"2.22.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/hbenl.vscode-test-explorer-2.22.1","scheme":"file"},"relativeLocation":"hbenl.vscode-test-explorer-2.22.1","metadata":{"installedTimestamp":1747953994813,"pinned":false,"source":"gallery","id":"ff96f1b4-a4b8-45ef-8ecf-c232c0cb75c8","publisherId":"3356f11a-6798-4f03-a93f-3d929b7fca7c","publisherDisplayName":"Holger Benl","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"vadimcn.vscode-lldb","uuid":"bee31e34-a44b-4a76-9ec2-e9fd1439a0f6"},"version":"1.11.4","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/vadimcn.vscode-lldb-1.11.4","scheme":"file"},"relativeLocation":"vadimcn.vscode-lldb-1.11.4","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1747954011953,"pinned":true,"source":"vsix","id":"bee31e34-a44b-4a76-9ec2-e9fd1439a0f6","publisherDisplayName":"Vadim Chugunov","publisherId":"3b05d186-6311-4caa-99b5-09032a9d3cf5","isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"panicbit.cargo","uuid":"ca2ba891-775c-480a-9764-414b06f6e114"},"version":"0.3.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/panicbit.cargo-0.3.0","scheme":"file"},"relativeLocation":"panicbit.cargo-0.3.0","metadata":{"installedTimestamp":1747954004156,"pinned":false,"source":"gallery","id":"ca2ba891-775c-480a-9764-414b06f6e114","publisherId":"87b278c0-dad0-48eb-9013-47f418b56e72","publisherDisplayName":"panicbit","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"jscearcy.rust-doc-viewer","uuid":"eb6486a2-2c35-4e5b-956b-e320c44f732a"},"version":"4.2.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/jscearcy.rust-doc-viewer-4.2.0","scheme":"file"},"relativeLocation":"jscearcy.rust-doc-viewer-4.2.0","metadata":{"installedTimestamp":1747954004153,"pinned":false,"source":"gallery","id":"eb6486a2-2c35-4e5b-956b-e320c44f732a","publisherId":"b2cab060-96e8-4793-836b-317b1e884253","publisherDisplayName":"JScearcy","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"tamasfe.even-better-toml","uuid":"b2215d5f-675e-4a2b-b6ac-1ca737518b78"},"version":"0.21.2","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/tamasfe.even-better-toml-0.21.2","scheme":"file"},"relativeLocation":"tamasfe.even-better-toml-0.21.2","metadata":{"installedTimestamp":1747954004144,"pinned":false,"source":"gallery","id":"b2215d5f-675e-4a2b-b6ac-1ca737518b78","publisherId":"78c2102e-13a2-49ea-ac79-8d1bbacbbf0e","publisherDisplayName":"tamasfe","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"kevinkassimo.cargo-toml-snippets","uuid":"ead9e178-3ef8-4788-999f-bab7a412524f"},"version":"0.1.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/kevinkassimo.cargo-toml-snippets-0.1.1","scheme":"file"},"relativeLocation":"kevinkassimo.cargo-toml-snippets-0.1.1","metadata":{"installedTimestamp":1747954004163,"pinned":false,"source":"gallery","id":"ead9e178-3ef8-4788-999f-bab7a412524f","publisherId":"344316b0-132a-41f9-a82a-ac88b5f3361c","publisherDisplayName":"Kevin (Kassimo) Qian","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"willroe.base16-rebecca","uuid":"97c3f9b5-0aed-445e-a12a-765ae71657ad"},"version":"0.0.3","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/willroe.base16-rebecca-0.0.3","scheme":"file"},"relativeLocation":"willroe.base16-rebecca-0.0.3","metadata":{"installedTimestamp":1748968644749,"source":"gallery","id":"97c3f9b5-0aed-445e-a12a-765ae71657ad","publisherId":"c929070a-5ab8-46c3-a191-3a53e4ccd85a","publisherDisplayName":"William Roe","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"kahole.magit","uuid":"4d965b97-6bfd-43d8-882c-d4dfce310168"},"version":"0.6.67","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/kahole.magit-0.6.67","scheme":"file"},"relativeLocation":"kahole.magit-0.6.67","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1750400699458,"pinned":false,"source":"gallery","id":"4d965b97-6bfd-43d8-882c-d4dfce310168","publisherId":"74af81ef-7bda-475b-bfe0-ccf6aa9b34dc","publisherDisplayName":"Kristian Andersen Hole","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"vspacecode.vspacecode","uuid":"1c81ab96-0424-43c4-b356-fe408a1bd1cf"},"version":"0.10.20","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/vspacecode.vspacecode-0.10.20","scheme":"file"},"relativeLocation":"vspacecode.vspacecode-0.10.20","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1752784997556,"pinned":false,"source":"gallery","id":"1c81ab96-0424-43c4-b356-fe408a1bd1cf","publisherId":"60415ab6-4581-4e73-a7e0-6fc6b3369f12","publisherDisplayName":"VSpaceCode","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"jjk.jjk","uuid":"27fecc3e-093e-4ff1-b130-b3ccf371337d"},"version":"0.8.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/jjk.jjk-0.8.1","scheme":"file"},"relativeLocation":"jjk.jjk-0.8.1","metadata":{"installedTimestamp":1752544123150,"pinned":false,"source":"gallery","id":"27fecc3e-093e-4ff1-b130-b3ccf371337d","publisherId":"8a38bc31-626a-4853-9ef7-91fe4f1486f4","publisherDisplayName":"Jujutsu Kaizen","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"auiworks.amvim","uuid":"55783e24-aad5-4679-b3ec-d048c905c0d0"},"version":"1.37.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/auiworks.amvim-1.37.0","scheme":"file"},"relativeLocation":"auiworks.amvim-1.37.0","metadata":{"installedTimestamp":1753762699375,"pinned":false,"source":"gallery","id":"55783e24-aad5-4679-b3ec-d048c905c0d0","publisherId":"c1a486df-076f-49ae-b795-abcc614f5584","publisherDisplayName":"auiWorks","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"goofygoobers.color-blind-themes","uuid":"2f1c4eec-257d-4360-890a-4c457ecb3535"},"version":"2.2.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/goofygoobers.color-blind-themes-2.2.0","scheme":"file"},"relativeLocation":"goofygoobers.color-blind-themes-2.2.0","metadata":{"installedTimestamp":1755151684906,"source":"gallery","id":"2f1c4eec-257d-4360-890a-4c457ecb3535","publisherId":"2761bd8f-5545-4286-808c-267df1251875","publisherDisplayName":"Goofygoobers","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"saahilclaypool.blind-themes","uuid":"18136ff1-1a9c-4602-ae24-891631acbd8a"},"version":"0.16.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/saahilclaypool.blind-themes-0.16.0","scheme":"file"},"relativeLocation":"saahilclaypool.blind-themes-0.16.0","metadata":{"installedTimestamp":1755155089132,"source":"gallery","id":"18136ff1-1a9c-4602-ae24-891631acbd8a","publisherId":"e855d536-29af-4c0e-86dd-b33570ee92f8","publisherDisplayName":"saahilclaypool","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"harai.light-theme-for-color-blind-people","uuid":"ee3ca637-387d-4c1b-95ac-f3e598abceba"},"version":"0.0.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/harai.light-theme-for-color-blind-people-0.0.1","scheme":"file"},"relativeLocation":"harai.light-theme-for-color-blind-people-0.0.1","metadata":{"installedTimestamp":1755194728184,"source":"gallery","id":"ee3ca637-387d-4c1b-95ac-f3e598abceba","publisherId":"4973c7cf-b856-44f9-949f-8bce144095fd","publisherDisplayName":"harai","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"jeff-hykin.better-nix-syntax","uuid":"233db2c9-69d8-4d47-a1b0-7b8c6210c1b2"},"version":"2.2.3","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/jeff-hykin.better-nix-syntax-2.2.3","scheme":"file"},"relativeLocation":"jeff-hykin.better-nix-syntax-2.2.3","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1757034316414,"pinned":false,"source":"gallery","id":"233db2c9-69d8-4d47-a1b0-7b8c6210c1b2","publisherId":"b734936b-6cc4-40c1-b17a-c6a7e1f680cd","publisherDisplayName":"Jeff Hykin","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"robbowen.synthwave-vscode","uuid":"e5fd2b56-1637-4d4f-8252-6c9d416f9a28"},"version":"0.1.20","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/robbowen.synthwave-vscode-0.1.20","scheme":"file"},"relativeLocation":"robbowen.synthwave-vscode-0.1.20","metadata":{"installedTimestamp":1757114956744,"source":"gallery","id":"e5fd2b56-1637-4d4f-8252-6c9d416f9a28","publisherId":"561257c5-26a1-41f1-944f-17639b7b9c87","publisherDisplayName":"Robb Owen","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"enkia.tokyo-night","uuid":"1cac7443-911e-48b9-8341-49f3880c288a"},"version":"1.1.2","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/enkia.tokyo-night-1.1.2","scheme":"file"},"relativeLocation":"enkia.tokyo-night-1.1.2","metadata":{"installedTimestamp":1757222775832,"source":"gallery","id":"1cac7443-911e-48b9-8341-49f3880c288a","publisherId":"745c7670-02e7-4a27-b662-e1b5719f2ba7","publisherDisplayName":"enkia","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"sdras.night-owl","uuid":"e58f546c-babc-455f-a265-ba40dbd140d4"},"version":"2.1.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/sdras.night-owl-2.1.1","scheme":"file"},"relativeLocation":"sdras.night-owl-2.1.1","metadata":{"installedTimestamp":1757223091021,"source":"gallery","id":"e58f546c-babc-455f-a265-ba40dbd140d4","publisherId":"addae8ad-0041-44f2-a2d4-cbebe4912d50","publisherDisplayName":"sarah.drasner","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"mickaellherminez.365-daynight-vscode-theme-ext","uuid":"7cbd8c01-3b16-4f95-aee4-19985f404526"},"version":"0.9.7","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/mickaellherminez.365-daynight-vscode-theme-ext-0.9.7","scheme":"file"},"relativeLocation":"mickaellherminez.365-daynight-vscode-theme-ext-0.9.7","metadata":{"installedTimestamp":1757278152614,"source":"gallery","id":"7cbd8c01-3b16-4f95-aee4-19985f404526","publisherId":"69c634fe-9de1-4edb-bd69-423d27360ff2","publisherDisplayName":"Mickael Lherminez","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode.vscode-speech","uuid":"e6610e16-9699-4e1d-a5d7-9bb1643db131"},"version":"0.16.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.vscode-speech-0.16.0-linux-x64","scheme":"file"},"relativeLocation":"ms-vscode.vscode-speech-0.16.0-linux-x64","metadata":{"installedTimestamp":1757278355064,"pinned":false,"source":"gallery","id":"e6610e16-9699-4e1d-a5d7-9bb1643db131","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"linux-x64","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"undefined_publisher.delta-nets-vscode-extension"},"version":"0.1.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/undefined_publisher.delta-nets-vscode-extension-0.1.0","scheme":"file"},"relativeLocation":"undefined_publisher.delta-nets-vscode-extension-0.1.0","metadata":{"installedTimestamp":1757457290758,"pinned":true,"source":"vsix"}},{"identifier":{"id":"tomrijndorp.find-it-faster","uuid":"d5eafbee-176a-421a-b74d-fbc51bd86a21"},"version":"0.0.39","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/tomrijndorp.find-it-faster-0.0.39","scheme":"file"},"relativeLocation":"tomrijndorp.find-it-faster-0.0.39","metadata":{"installedTimestamp":1757481534711,"pinned":false,"source":"gallery","id":"d5eafbee-176a-421a-b74d-fbc51bd86a21","publisherId":"f002c5e6-5db9-4df2-8791-8800b44272a4","publisherDisplayName":"Tom Rijndorp","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ehabhelaly.summer-night","uuid":"f8c49484-1baf-4459-a2ed-4094c48fc6c3"},"version":"1.0.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ehabhelaly.summer-night-1.0.1","scheme":"file"},"relativeLocation":"ehabhelaly.summer-night-1.0.1","metadata":{"installedTimestamp":1757573022724,"source":"gallery","id":"f8c49484-1baf-4459-a2ed-4094c48fc6c3","publisherId":"18266100-3872-4466-ad31-3f6b187fd1d0","publisherDisplayName":"Ehab Helaly","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode-remote.remote-containers","uuid":"93ce222b-5f6f-49b7-9ab1-a0463c6238df"},"version":"0.427.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0","scheme":"file"},"relativeLocation":"ms-vscode-remote.remote-containers-0.427.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1757616838626,"pinned":false,"source":"gallery","id":"93ce222b-5f6f-49b7-9ab1-a0463c6238df","publisherId":"ac9410a2-0d75-40ec-90de-b59bb705801d","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"ms-vscode.remote-server","uuid":"105c0b3c-07a9-4156-a4fc-4141040eb07e"},"version":"1.5.3","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.remote-server-1.5.3","scheme":"file"},"relativeLocation":"ms-vscode.remote-server-1.5.3","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1757616838825,"pinned":false,"source":"gallery","id":"105c0b3c-07a9-4156-a4fc-4141040eb07e","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"rhighs.summerrelax","uuid":"0c50c577-e40e-47ae-9144-c3e250269fc0"},"version":"0.0.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/rhighs.summerrelax-0.0.1","scheme":"file"},"relativeLocation":"rhighs.summerrelax-0.0.1","metadata":{"installedTimestamp":1757629649149,"source":"gallery","id":"0c50c577-e40e-47ae-9144-c3e250269fc0","publisherId":"41bedfb1-a868-4a4e-8dfa-37bc9aa2f731","publisherDisplayName":"rhighs","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"krueger71.crt-themes","uuid":"46ed7e19-d635-4ec8-97f8-783097fe5d22"},"version":"0.5.2","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/krueger71.crt-themes-0.5.2","scheme":"file"},"relativeLocation":"krueger71.crt-themes-0.5.2","metadata":{"installedTimestamp":1757642747179,"source":"gallery","id":"46ed7e19-d635-4ec8-97f8-783097fe5d22","publisherId":"6e72b3df-4b07-480c-ba3b-30d472abe33d","publisherDisplayName":"krueger71","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"rickonono3.docpanel","uuid":"ebdbecf2-30d6-4ac1-8cbc-c2824a7ca53d"},"version":"1.0.10","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/rickonono3.docpanel-1.0.10","scheme":"file"},"relativeLocation":"rickonono3.docpanel-1.0.10","metadata":{"installedTimestamp":1757695117543,"pinned":false,"source":"gallery","id":"ebdbecf2-30d6-4ac1-8cbc-c2824a7ca53d","publisherId":"adb53dd0-9cdf-4be3-a2bc-d80a60760814","publisherDisplayName":"rickonono3","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"alefragnani.bookmarks","uuid":"b689fcc8-d494-4dbf-a228-2c694a578afc"},"version":"13.5.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/alefragnani.bookmarks-13.5.0","scheme":"file"},"relativeLocation":"alefragnani.bookmarks-13.5.0","metadata":{"installedTimestamp":1757709656579,"pinned":false,"source":"gallery","id":"b689fcc8-d494-4dbf-a228-2c694a578afc","publisherId":"3fbdef65-bdf5-4723-aeaf-9e12a50546ef","publisherDisplayName":"Alessandro Fragnani","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"asvetliakov.vscode-neovim","uuid":"caf8995c-5426-4bf7-9d01-f7968ebd49bb"},"version":"1.18.24","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/asvetliakov.vscode-neovim-1.18.24","scheme":"file"},"relativeLocation":"asvetliakov.vscode-neovim-1.18.24","metadata":{"installedTimestamp":1757714293122,"pinned":false,"source":"gallery","id":"caf8995c-5426-4bf7-9d01-f7968ebd49bb","publisherId":"ce6190db-6762-4c9c-99c7-1717b9504159","publisherDisplayName":"Alexey Svetliakov","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"fill-labs.dependi","uuid":"456278dd-7f50-4cbe-8314-ab06540c1057"},"version":"0.7.15","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/fill-labs.dependi-0.7.15","scheme":"file"},"relativeLocation":"fill-labs.dependi-0.7.15","metadata":{"installedTimestamp":1757715369175,"pinned":false,"source":"gallery","id":"456278dd-7f50-4cbe-8314-ab06540c1057","publisherId":"250a42ca-96a3-4224-91b7-caf37e830adb","publisherDisplayName":"Fill Labs","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"alexpasmantier.television","uuid":"4b553b38-4723-423c-9aa2-ac4396fbdb8c"},"version":"0.4.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/alexpasmantier.television-0.4.0","scheme":"file"},"relativeLocation":"alexpasmantier.television-0.4.0","metadata":{"installedTimestamp":1757752703364,"source":"gallery","id":"4b553b38-4723-423c-9aa2-ac4396fbdb8c","publisherId":"d4dec780-bedb-448a-bd30-67d5465c2a5c","publisherDisplayName":"alexpasmantier","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"foam.foam-vscode","uuid":"b85c6625-454b-4b61-8a22-c42f3d0f2e1e"},"version":"0.27.6","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/foam.foam-vscode-0.27.6","scheme":"file"},"relativeLocation":"foam.foam-vscode-0.27.6","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1757898672542,"pinned":false,"source":"gallery","id":"b85c6625-454b-4b61-8a22-c42f3d0f2e1e","publisherId":"34339645-24f0-4619-9917-12157fd92446","publisherDisplayName":"Foam","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"github.remotehub","uuid":"fc7d7e85-2e58-4c1c-97a3-2172ed9a77cd"},"version":"0.64.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.remotehub-0.64.0","scheme":"file"},"relativeLocation":"github.remotehub-0.64.0","metadata":{"installedTimestamp":1757903322287,"pinned":false,"source":"gallery","id":"fc7d7e85-2e58-4c1c-97a3-2172ed9a77cd","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode.remote-repositories","uuid":"cf5142f0-3701-4992-980c-9895a750addf"},"version":"0.42.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.remote-repositories-0.42.0","scheme":"file"},"relativeLocation":"ms-vscode.remote-repositories-0.42.0","metadata":{"installedTimestamp":1757903322267,"pinned":false,"source":"gallery","id":"cf5142f0-3701-4992-980c-9895a750addf","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode-remote.remote-ssh","uuid":"607fd052-be03-4363-b657-2bd62b83d28a"},"version":"0.120.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0","scheme":"file"},"relativeLocation":"ms-vscode-remote.remote-ssh-0.120.0","metadata":{"installedTimestamp":1757903411566,"pinned":false,"source":"gallery","id":"607fd052-be03-4363-b657-2bd62b83d28a","publisherId":"ac9410a2-0d75-40ec-90de-b59bb705801d","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode.remote-explorer","uuid":"11858313-52cc-4e57-b3e4-d7b65281e34b"},"version":"0.5.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.remote-explorer-0.5.0","scheme":"file"},"relativeLocation":"ms-vscode.remote-explorer-0.5.0","metadata":{"installedTimestamp":1757903411572,"pinned":false,"source":"gallery","id":"11858313-52cc-4e57-b3e4-d7b65281e34b","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode-remote.remote-ssh-edit","uuid":"bfeaf631-bcff-4908-93ed-fda4ef9a0c5c"},"version":"0.87.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode-remote.remote-ssh-edit-0.87.0","scheme":"file"},"relativeLocation":"ms-vscode-remote.remote-ssh-edit-0.87.0","metadata":{"installedTimestamp":1757903411579,"pinned":false,"source":"gallery","id":"bfeaf631-bcff-4908-93ed-fda4ef9a0c5c","publisherId":"ac9410a2-0d75-40ec-90de-b59bb705801d","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"github.vscode-pull-request-github","uuid":"69ddd764-339a-4ecc-97c1-9c4ece58e36d"},"version":"0.118.2","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.vscode-pull-request-github-0.118.2","scheme":"file"},"relativeLocation":"github.vscode-pull-request-github-0.118.2","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1758881233647,"pinned":false,"source":"gallery","id":"69ddd764-339a-4ecc-97c1-9c4ece58e36d","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"elmtooling.elm-ls-vscode","uuid":"85f62745-7ea6-4f23-8aa0-521c0732f664"},"version":"2.8.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/elmtooling.elm-ls-vscode-2.8.0","scheme":"file"},"relativeLocation":"elmtooling.elm-ls-vscode-2.8.0","metadata":{"installedTimestamp":1758887948232,"pinned":false,"source":"gallery","id":"85f62745-7ea6-4f23-8aa0-521c0732f664","publisherId":"e2da53e0-c6b6-4bd2-9b30-15175ab16fb4","publisherDisplayName":"Elm tooling","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ziglang.vscode-zig","uuid":"9f528315-746c-44d9-97ba-d4d505cca308"},"version":"0.6.14","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ziglang.vscode-zig-0.6.14","scheme":"file"},"relativeLocation":"ziglang.vscode-zig-0.6.14","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1759266379332,"pinned":false,"source":"gallery","id":"9f528315-746c-44d9-97ba-d4d505cca308","publisherId":"cefd71b0-991b-4e5d-bcad-e691066ed199","publisherDisplayName":"ziglang","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"raits.rust-development","uuid":"6ea362b4-b01e-4fc9-96b8-078103f808e0"},"version":"0.0.6","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/raits.rust-development-0.0.6","scheme":"file"},"relativeLocation":"raits.rust-development-0.0.6","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1759266379669,"pinned":false,"source":"gallery","id":"6ea362b4-b01e-4fc9-96b8-078103f808e0","publisherId":"ae82625c-b501-42ca-919e-e5a6ca09932e","publisherDisplayName":"René André IT-Services GmbH","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"google.gemini-cli-vscode-ide-companion","uuid":"3f22f99d-2695-4d6c-9a37-0450025dc16b"},"version":"0.7.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/google.gemini-cli-vscode-ide-companion-0.7.0","scheme":"file"},"relativeLocation":"google.gemini-cli-vscode-ide-companion-0.7.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1759474061765,"pinned":false,"source":"gallery","id":"3f22f99d-2695-4d6c-9a37-0450025dc16b","publisherId":"93a45bde-b507-401c-9deb-7a098ebcded8","publisherDisplayName":"Google","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"github.vscode-github-actions","uuid":"04f49bfc-8330-4eee-8237-ea938fb755ef"},"version":"0.28.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.vscode-github-actions-0.28.0","scheme":"file"},"relativeLocation":"github.vscode-github-actions-0.28.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1759474061761,"pinned":false,"source":"gallery","id":"04f49bfc-8330-4eee-8237-ea938fb755ef","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"vscodevim.vim","uuid":"d96e79c6-8b25-4be3-8545-0e0ecefcae03"},"version":"1.31.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/vscodevim.vim-1.31.0","scheme":"file"},"relativeLocation":"vscodevim.vim-1.31.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1759772947568,"pinned":false,"source":"gallery","id":"d96e79c6-8b25-4be3-8545-0e0ecefcae03","publisherId":"5d63889b-1b67-4b1f-8350-4f1dce041a26","publisherDisplayName":"vscodevim","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"github.vscode-pull-request-github","uuid":"69ddd764-339a-4ecc-97c1-9c4ece58e36d"},"version":"0.120.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.vscode-pull-request-github-0.120.0","scheme":"file"},"relativeLocation":"github.vscode-pull-request-github-0.120.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1760564934900,"pinned":false,"source":"gallery","id":"69ddd764-339a-4ecc-97c1-9c4ece58e36d","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"jnoortheen.nix-ide","uuid":"0ffebccd-4265-4f2d-a855-db1adcf278c7"},"version":"0.5.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/jnoortheen.nix-ide-0.5.0","scheme":"file"},"relativeLocation":"jnoortheen.nix-ide-0.5.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1760251960235,"pinned":false,"source":"gallery","id":"0ffebccd-4265-4f2d-a855-db1adcf278c7","publisherId":"3a7c13d8-8768-454a-be53-290c25bd0f85","publisherDisplayName":"Noortheen","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"ahmadawais.shades-of-purple","uuid":"431aa1a8-74f4-43d5-a83b-f4960510da5f"},"version":"7.3.6","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ahmadawais.shades-of-purple-7.3.6","scheme":"file"},"relativeLocation":"ahmadawais.shades-of-purple-7.3.6","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1760564934598,"pinned":false,"source":"gallery","id":"431aa1a8-74f4-43d5-a83b-f4960510da5f","publisherId":"530c7464-efca-4776-9142-c6f0aeb4084e","publisherDisplayName":"Ahmad Awais ⚡","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"github.vscode-pull-request-github","uuid":"69ddd764-339a-4ecc-97c1-9c4ece58e36d"},"version":"0.120.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.vscode-pull-request-github-0.120.1","scheme":"file"},"relativeLocation":"github.vscode-pull-request-github-0.120.1","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1760645140975,"pinned":false,"source":"gallery","id":"69ddd764-339a-4ecc-97c1-9c4ece58e36d","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"kamen.noctis-high-contrast","uuid":"d91aef70-2e68-4a66-84d6-d6f61a8d8945"},"version":"10.39.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/kamen.noctis-high-contrast-10.39.1","scheme":"file"},"relativeLocation":"kamen.noctis-high-contrast-10.39.1","metadata":{"installedTimestamp":1760994306748,"source":"gallery","id":"d91aef70-2e68-4a66-84d6-d6f61a8d8945","publisherId":"7aef037f-8f06-4326-98b0-8c461b7ce9b5","publisherDisplayName":"Kamen","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"github.copilot-chat","uuid":"7ec7d6e6-b89e-4cc5-a59b-d6c4d238246f"},"version":"0.32.3","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.copilot-chat-0.32.3","scheme":"file"},"relativeLocation":"github.copilot-chat-0.32.3","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761002396001,"pinned":false,"source":"gallery","id":"7ec7d6e6-b89e-4cc5-a59b-d6c4d238246f","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"loilo.snazzy-light","uuid":"20077bb9-6134-4ff3-8f68-23555bb241f3"},"version":"1.4.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/loilo.snazzy-light-1.4.1","scheme":"file"},"relativeLocation":"loilo.snazzy-light-1.4.1","metadata":{"installedTimestamp":1761069553707,"source":"gallery","id":"20077bb9-6134-4ff3-8f68-23555bb241f3","publisherId":"541949d0-3bea-4547-a4de-f7c108b6c624","publisherDisplayName":"Florian Reuschel","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"google.geminicodeassist","uuid":"51643712-2cb2-4384-b7cc-d55b01b8274b"},"version":"2.55.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/google.geminicodeassist-2.55.0","scheme":"file"},"relativeLocation":"google.geminicodeassist-2.55.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761189368826,"pinned":false,"source":"gallery","id":"51643712-2cb2-4384-b7cc-d55b01b8274b","publisherId":"93a45bde-b507-401c-9deb-7a098ebcded8","publisherDisplayName":"Google","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"scalameta.metals","uuid":"d56562ae-394d-46cd-a26d-2eafab4ce5a2"},"version":"1.59.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/scalameta.metals-1.59.0","scheme":"file"},"relativeLocation":"scalameta.metals-1.59.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761244318029,"pinned":false,"source":"gallery","id":"d56562ae-394d-46cd-a26d-2eafab4ce5a2","publisherId":"5b1ac358-daf6-4046-980b-bb94d2c94e8a","publisherDisplayName":"Scalameta","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"github.codespaces","uuid":"4023d3e5-c840-4cdd-8b54-51c77548aa3f"},"version":"1.17.5","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.codespaces-1.17.5","scheme":"file"},"relativeLocation":"github.codespaces-1.17.5","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761244318024,"pinned":false,"source":"gallery","id":"4023d3e5-c840-4cdd-8b54-51c77548aa3f","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"whizkydee.material-palenight-theme","uuid":"7f147721-ec06-4043-9e37-c9ffbecbccd1"},"version":"2.0.4","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/whizkydee.material-palenight-theme-2.0.4","scheme":"file"},"relativeLocation":"whizkydee.material-palenight-theme-2.0.4","metadata":{"installedTimestamp":1761286091545,"source":"gallery","id":"7f147721-ec06-4043-9e37-c9ffbecbccd1","publisherId":"942a68c7-9bce-4e1c-9bb0-828710897a61","publisherDisplayName":"Olaolu Olawuyi","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"github.copilot","uuid":"23c4aeee-f844-43cd-b53e-1113e483f1a6"},"version":"1.388.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.copilot-1.388.0","scheme":"file"},"relativeLocation":"github.copilot-1.388.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761349625010,"pinned":false,"source":"gallery","id":"23c4aeee-f844-43cd-b53e-1113e483f1a6","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"golang.go","uuid":"d6f6cfea-4b6f-41f4-b571-6ad2ab7918da"},"version":"0.51.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/golang.go-0.51.1","scheme":"file"},"relativeLocation":"golang.go-0.51.1","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761589873539,"pinned":false,"source":"gallery","id":"d6f6cfea-4b6f-41f4-b571-6ad2ab7918da","publisherId":"dbf6ae0a-da75-4167-ac8b-75b4512f2153","publisherDisplayName":"Go Team at Google","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":true,"hasPreReleaseVersion":true,"preRelease":true}},{"identifier":{"id":"visualjj.visualjj","uuid":"338d7429-21f3-449d-acdf-8518eae43a72"},"version":"0.19.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/visualjj.visualjj-0.19.1-linux-x64","scheme":"file"},"relativeLocation":"visualjj.visualjj-0.19.1-linux-x64","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761589873547,"pinned":false,"source":"gallery","id":"338d7429-21f3-449d-acdf-8518eae43a72","publisherId":"828fee6d-3c80-4fdc-9b0e-a9a8d09fb856","publisherDisplayName":"VisualJJ","targetPlatform":"linux-x64","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"rust-lang.rust-analyzer"},"version":"0.3.2660","location":{"$mid":1,"fsPath":"/home/vic/.vscode/extensions/rust-lang.rust-analyzer-0.3.2660-linux-x64","external":"file:///home/vic/.vscode/extensions/rust-lang.rust-analyzer-0.3.2660-linux-x64","path":"/home/vic/.vscode/extensions/rust-lang.rust-analyzer-0.3.2660-linux-x64","scheme":"file"},"relativeLocation":"rust-lang.rust-analyzer-0.3.2660-linux-x64","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761674633013,"pinned":false,"source":"gallery","id":"06574cb4-e5dc-4631-8174-a543a4533621","publisherId":"cb14a7a7-a188-40bd-a953-e0a20757c5dd","publisherDisplayName":"The Rust Programming Language ","targetPlatform":"linux-x64","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}}] 1 + [{"identifier":{"id":"cybersamurai.midnight-purple-2077","uuid":"093e3b44-8c4f-461b-8aa8-ba46f938aae3"},"version":"1.1.9","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/cybersamurai.midnight-purple-2077-1.1.9","scheme":"file"},"relativeLocation":"cybersamurai.midnight-purple-2077-1.1.9","metadata":{"installedTimestamp":1742623962707,"pinned":false,"source":"gallery","id":"093e3b44-8c4f-461b-8aa8-ba46f938aae3","publisherId":"716a7a71-9c4e-490a-ba29-0780f389e5e8","publisherDisplayName":"cyber samurai","targetPlatform":"undefined","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"chaitanyashahare.lazygit","uuid":"e370d573-0664-4b89-b241-5d3cfeb9a427"},"version":"1.0.7","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/chaitanyashahare.lazygit-1.0.7","scheme":"file"},"relativeLocation":"chaitanyashahare.lazygit-1.0.7","metadata":{"installedTimestamp":1742624175976,"pinned":false,"source":"gallery","id":"e370d573-0664-4b89-b241-5d3cfeb9a427","publisherId":"dce96627-2e0f-4f44-8cd1-a081a4b4e98e","publisherDisplayName":"Chaitanya Shahare","targetPlatform":"undefined","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode.cpptools-themes","uuid":"99b17261-8f6e-45f0-9ad5-a69c6f509a4f"},"version":"2.0.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.cpptools-themes-2.0.0","scheme":"file"},"relativeLocation":"ms-vscode.cpptools-themes-2.0.0","metadata":{"installedTimestamp":1743618545498,"source":"gallery","id":"99b17261-8f6e-45f0-9ad5-a69c6f509a4f","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"github.github-vscode-theme","uuid":"7328a705-91fc-49e6-8293-da6f112e482d"},"version":"6.3.5","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.github-vscode-theme-6.3.5","scheme":"file"},"relativeLocation":"github.github-vscode-theme-6.3.5","metadata":{"installedTimestamp":1743618590147,"source":"gallery","id":"7328a705-91fc-49e6-8293-da6f112e482d","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"dracula-theme.theme-dracula","uuid":"4e44877c-1c8d-4f9c-ba86-1372d0fbeeb1"},"version":"2.25.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/dracula-theme.theme-dracula-2.25.1","scheme":"file"},"relativeLocation":"dracula-theme.theme-dracula-2.25.1","metadata":{"installedTimestamp":1744233970240,"source":"gallery","id":"4e44877c-1c8d-4f9c-ba86-1372d0fbeeb1","publisherId":"fbb3d024-f8f2-460c-bdb5-99552f6d8c4b","publisherDisplayName":"Dracula Theme","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"hyzeta.vscode-theme-github-light","uuid":"b84ed643-ec7d-49cc-a514-3ce104ed777f"},"version":"7.14.2","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/hyzeta.vscode-theme-github-light-7.14.2","scheme":"file"},"relativeLocation":"hyzeta.vscode-theme-github-light-7.14.2","metadata":{"installedTimestamp":1744238749461,"source":"gallery","id":"b84ed643-ec7d-49cc-a514-3ce104ed777f","publisherId":"18f3a989-6d93-420d-a045-baf7651c8552","publisherDisplayName":"Hyzeta","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"mkhl.direnv","uuid":"e365e970-aeef-4dcd-8e4a-17306a27ab62"},"version":"0.17.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/mkhl.direnv-0.17.0","scheme":"file"},"relativeLocation":"mkhl.direnv-0.17.0","metadata":{"installedTimestamp":1746581315466,"pinned":false,"source":"gallery","id":"e365e970-aeef-4dcd-8e4a-17306a27ab62","publisherId":"577d6c37-7054-4ca5-b4ce-9250409f3903","publisherDisplayName":"Martin Kühl","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"vspacecode.whichkey","uuid":"47ddeb9c-b4bb-4594-906b-412886e20e47"},"version":"0.11.4","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/vspacecode.whichkey-0.11.4","scheme":"file"},"relativeLocation":"vspacecode.whichkey-0.11.4","metadata":{"installedTimestamp":1746581341954,"pinned":false,"source":"gallery","id":"47ddeb9c-b4bb-4594-906b-412886e20e47","publisherId":"60415ab6-4581-4e73-a7e0-6fc6b3369f12","publisherDisplayName":"VSpaceCode","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"bodil.file-browser","uuid":"97a82b1e-e6f7-4519-b1fc-f6be103e3824"},"version":"0.2.11","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/bodil.file-browser-0.2.11","scheme":"file"},"relativeLocation":"bodil.file-browser-0.2.11","metadata":{"installedTimestamp":1746581346580,"pinned":false,"source":"gallery","id":"97a82b1e-e6f7-4519-b1fc-f6be103e3824","publisherId":"e5c9456a-b78b-41ec-95c2-0cc218272ab9","publisherDisplayName":"Bodil Stokke","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"jacobdufault.fuzzy-search","uuid":"c2ebe7f7-8974-4ceb-a4a5-aea798305313"},"version":"0.0.3","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/jacobdufault.fuzzy-search-0.0.3","scheme":"file"},"relativeLocation":"jacobdufault.fuzzy-search-0.0.3","metadata":{"installedTimestamp":1746581346581,"pinned":false,"source":"gallery","id":"c2ebe7f7-8974-4ceb-a4a5-aea798305313","publisherId":"e7902c39-c8b4-4fb0-b245-6241b490a67b","publisherDisplayName":"jacobdufault","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"usernamehw.errorlens","uuid":"9d8c32ab-354c-4daf-a9bf-20b633734435"},"version":"3.26.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/usernamehw.errorlens-3.26.0","scheme":"file"},"relativeLocation":"usernamehw.errorlens-3.26.0","metadata":{"installedTimestamp":1746581420935,"pinned":false,"source":"gallery","id":"9d8c32ab-354c-4daf-a9bf-20b633734435","publisherId":"151820df-5dc5-4c97-8751-eb84643203fa","publisherDisplayName":"Alexander","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"scala-lang.scala","uuid":"c6f87c08-f5ca-4f59-8cee-bc29464dcbfb"},"version":"0.5.9","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/scala-lang.scala-0.5.9","scheme":"file"},"relativeLocation":"scala-lang.scala-0.5.9","metadata":{"installedTimestamp":1747372492850,"pinned":false,"source":"gallery","id":"c6f87c08-f5ca-4f59-8cee-bc29464dcbfb","publisherId":"2ffc6e5b-e6aa-408c-98b4-47db120356c8","publisherDisplayName":"scala-lang","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"sanaajani.taskrunnercode","uuid":"2e19ddff-cc5a-4840-9f43-b45371d0c09d"},"version":"0.3.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/sanaajani.taskrunnercode-0.3.0","scheme":"file"},"relativeLocation":"sanaajani.taskrunnercode-0.3.0","metadata":{"installedTimestamp":1747375915641,"pinned":false,"source":"gallery","id":"2e19ddff-cc5a-4840-9f43-b45371d0c09d","publisherId":"60bc378d-7290-4490-873d-5212f6a32882","publisherDisplayName":"Sana Ajani","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"virejdasani.in-your-face","uuid":"c2436335-4b8a-4530-9f45-e0a8315325c2"},"version":"1.1.3","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/virejdasani.in-your-face-1.1.3","scheme":"file"},"relativeLocation":"virejdasani.in-your-face-1.1.3","metadata":{"installedTimestamp":1747376489763,"pinned":false,"source":"gallery","id":"c2436335-4b8a-4530-9f45-e0a8315325c2","publisherId":"91638527-c61c-44ed-8007-7469d95df049","publisherDisplayName":"Virej Dasani","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"akamud.vscode-theme-onedark","uuid":"9b2c953d-6ad4-46d1-b18e-7e5992d1d8a6"},"version":"2.3.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/akamud.vscode-theme-onedark-2.3.0","scheme":"file"},"relativeLocation":"akamud.vscode-theme-onedark-2.3.0","metadata":{"installedTimestamp":1747775771341,"source":"gallery","id":"9b2c953d-6ad4-46d1-b18e-7e5992d1d8a6","publisherId":"1a680e61-b64e-4eff-bbbb-2085b0618f52","publisherDisplayName":"Mahmoud Ali","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode.test-adapter-converter","uuid":"47210ec2-0324-4cbb-9523-9dff02a5f9ec"},"version":"0.2.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.test-adapter-converter-0.2.1","scheme":"file"},"relativeLocation":"ms-vscode.test-adapter-converter-0.2.1","metadata":{"installedTimestamp":1747953994821,"pinned":false,"source":"gallery","id":"47210ec2-0324-4cbb-9523-9dff02a5f9ec","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"swellaby.vscode-rust-test-adapter","uuid":"c167848c-fc11-496e-b432-1fd0a578a408"},"version":"0.11.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/swellaby.vscode-rust-test-adapter-0.11.0","scheme":"file"},"relativeLocation":"swellaby.vscode-rust-test-adapter-0.11.0","metadata":{"installedTimestamp":1747953994807,"pinned":false,"source":"gallery","id":"c167848c-fc11-496e-b432-1fd0a578a408","publisherId":"48c64ea1-db35-4e9e-8977-84495a6cc789","publisherDisplayName":"Swellaby","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"hbenl.vscode-test-explorer","uuid":"ff96f1b4-a4b8-45ef-8ecf-c232c0cb75c8"},"version":"2.22.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/hbenl.vscode-test-explorer-2.22.1","scheme":"file"},"relativeLocation":"hbenl.vscode-test-explorer-2.22.1","metadata":{"installedTimestamp":1747953994813,"pinned":false,"source":"gallery","id":"ff96f1b4-a4b8-45ef-8ecf-c232c0cb75c8","publisherId":"3356f11a-6798-4f03-a93f-3d929b7fca7c","publisherDisplayName":"Holger Benl","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"vadimcn.vscode-lldb","uuid":"bee31e34-a44b-4a76-9ec2-e9fd1439a0f6"},"version":"1.11.4","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/vadimcn.vscode-lldb-1.11.4","scheme":"file"},"relativeLocation":"vadimcn.vscode-lldb-1.11.4","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1747954011953,"pinned":true,"source":"vsix","id":"bee31e34-a44b-4a76-9ec2-e9fd1439a0f6","publisherDisplayName":"Vadim Chugunov","publisherId":"3b05d186-6311-4caa-99b5-09032a9d3cf5","isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"panicbit.cargo","uuid":"ca2ba891-775c-480a-9764-414b06f6e114"},"version":"0.3.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/panicbit.cargo-0.3.0","scheme":"file"},"relativeLocation":"panicbit.cargo-0.3.0","metadata":{"installedTimestamp":1747954004156,"pinned":false,"source":"gallery","id":"ca2ba891-775c-480a-9764-414b06f6e114","publisherId":"87b278c0-dad0-48eb-9013-47f418b56e72","publisherDisplayName":"panicbit","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"jscearcy.rust-doc-viewer","uuid":"eb6486a2-2c35-4e5b-956b-e320c44f732a"},"version":"4.2.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/jscearcy.rust-doc-viewer-4.2.0","scheme":"file"},"relativeLocation":"jscearcy.rust-doc-viewer-4.2.0","metadata":{"installedTimestamp":1747954004153,"pinned":false,"source":"gallery","id":"eb6486a2-2c35-4e5b-956b-e320c44f732a","publisherId":"b2cab060-96e8-4793-836b-317b1e884253","publisherDisplayName":"JScearcy","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"tamasfe.even-better-toml","uuid":"b2215d5f-675e-4a2b-b6ac-1ca737518b78"},"version":"0.21.2","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/tamasfe.even-better-toml-0.21.2","scheme":"file"},"relativeLocation":"tamasfe.even-better-toml-0.21.2","metadata":{"installedTimestamp":1747954004144,"pinned":false,"source":"gallery","id":"b2215d5f-675e-4a2b-b6ac-1ca737518b78","publisherId":"78c2102e-13a2-49ea-ac79-8d1bbacbbf0e","publisherDisplayName":"tamasfe","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"kevinkassimo.cargo-toml-snippets","uuid":"ead9e178-3ef8-4788-999f-bab7a412524f"},"version":"0.1.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/kevinkassimo.cargo-toml-snippets-0.1.1","scheme":"file"},"relativeLocation":"kevinkassimo.cargo-toml-snippets-0.1.1","metadata":{"installedTimestamp":1747954004163,"pinned":false,"source":"gallery","id":"ead9e178-3ef8-4788-999f-bab7a412524f","publisherId":"344316b0-132a-41f9-a82a-ac88b5f3361c","publisherDisplayName":"Kevin (Kassimo) Qian","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"willroe.base16-rebecca","uuid":"97c3f9b5-0aed-445e-a12a-765ae71657ad"},"version":"0.0.3","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/willroe.base16-rebecca-0.0.3","scheme":"file"},"relativeLocation":"willroe.base16-rebecca-0.0.3","metadata":{"installedTimestamp":1748968644749,"source":"gallery","id":"97c3f9b5-0aed-445e-a12a-765ae71657ad","publisherId":"c929070a-5ab8-46c3-a191-3a53e4ccd85a","publisherDisplayName":"William Roe","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"kahole.magit","uuid":"4d965b97-6bfd-43d8-882c-d4dfce310168"},"version":"0.6.67","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/kahole.magit-0.6.67","scheme":"file"},"relativeLocation":"kahole.magit-0.6.67","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1750400699458,"pinned":false,"source":"gallery","id":"4d965b97-6bfd-43d8-882c-d4dfce310168","publisherId":"74af81ef-7bda-475b-bfe0-ccf6aa9b34dc","publisherDisplayName":"Kristian Andersen Hole","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"vspacecode.vspacecode","uuid":"1c81ab96-0424-43c4-b356-fe408a1bd1cf"},"version":"0.10.20","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/vspacecode.vspacecode-0.10.20","scheme":"file"},"relativeLocation":"vspacecode.vspacecode-0.10.20","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1752784997556,"pinned":false,"source":"gallery","id":"1c81ab96-0424-43c4-b356-fe408a1bd1cf","publisherId":"60415ab6-4581-4e73-a7e0-6fc6b3369f12","publisherDisplayName":"VSpaceCode","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"jjk.jjk","uuid":"27fecc3e-093e-4ff1-b130-b3ccf371337d"},"version":"0.8.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/jjk.jjk-0.8.1","scheme":"file"},"relativeLocation":"jjk.jjk-0.8.1","metadata":{"installedTimestamp":1752544123150,"pinned":false,"source":"gallery","id":"27fecc3e-093e-4ff1-b130-b3ccf371337d","publisherId":"8a38bc31-626a-4853-9ef7-91fe4f1486f4","publisherDisplayName":"Jujutsu Kaizen","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"auiworks.amvim","uuid":"55783e24-aad5-4679-b3ec-d048c905c0d0"},"version":"1.37.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/auiworks.amvim-1.37.0","scheme":"file"},"relativeLocation":"auiworks.amvim-1.37.0","metadata":{"installedTimestamp":1753762699375,"pinned":false,"source":"gallery","id":"55783e24-aad5-4679-b3ec-d048c905c0d0","publisherId":"c1a486df-076f-49ae-b795-abcc614f5584","publisherDisplayName":"auiWorks","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"goofygoobers.color-blind-themes","uuid":"2f1c4eec-257d-4360-890a-4c457ecb3535"},"version":"2.2.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/goofygoobers.color-blind-themes-2.2.0","scheme":"file"},"relativeLocation":"goofygoobers.color-blind-themes-2.2.0","metadata":{"installedTimestamp":1755151684906,"source":"gallery","id":"2f1c4eec-257d-4360-890a-4c457ecb3535","publisherId":"2761bd8f-5545-4286-808c-267df1251875","publisherDisplayName":"Goofygoobers","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"saahilclaypool.blind-themes","uuid":"18136ff1-1a9c-4602-ae24-891631acbd8a"},"version":"0.16.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/saahilclaypool.blind-themes-0.16.0","scheme":"file"},"relativeLocation":"saahilclaypool.blind-themes-0.16.0","metadata":{"installedTimestamp":1755155089132,"source":"gallery","id":"18136ff1-1a9c-4602-ae24-891631acbd8a","publisherId":"e855d536-29af-4c0e-86dd-b33570ee92f8","publisherDisplayName":"saahilclaypool","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"harai.light-theme-for-color-blind-people","uuid":"ee3ca637-387d-4c1b-95ac-f3e598abceba"},"version":"0.0.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/harai.light-theme-for-color-blind-people-0.0.1","scheme":"file"},"relativeLocation":"harai.light-theme-for-color-blind-people-0.0.1","metadata":{"installedTimestamp":1755194728184,"source":"gallery","id":"ee3ca637-387d-4c1b-95ac-f3e598abceba","publisherId":"4973c7cf-b856-44f9-949f-8bce144095fd","publisherDisplayName":"harai","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"robbowen.synthwave-vscode","uuid":"e5fd2b56-1637-4d4f-8252-6c9d416f9a28"},"version":"0.1.20","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/robbowen.synthwave-vscode-0.1.20","scheme":"file"},"relativeLocation":"robbowen.synthwave-vscode-0.1.20","metadata":{"installedTimestamp":1757114956744,"source":"gallery","id":"e5fd2b56-1637-4d4f-8252-6c9d416f9a28","publisherId":"561257c5-26a1-41f1-944f-17639b7b9c87","publisherDisplayName":"Robb Owen","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"enkia.tokyo-night","uuid":"1cac7443-911e-48b9-8341-49f3880c288a"},"version":"1.1.2","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/enkia.tokyo-night-1.1.2","scheme":"file"},"relativeLocation":"enkia.tokyo-night-1.1.2","metadata":{"installedTimestamp":1757222775832,"source":"gallery","id":"1cac7443-911e-48b9-8341-49f3880c288a","publisherId":"745c7670-02e7-4a27-b662-e1b5719f2ba7","publisherDisplayName":"enkia","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"sdras.night-owl","uuid":"e58f546c-babc-455f-a265-ba40dbd140d4"},"version":"2.1.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/sdras.night-owl-2.1.1","scheme":"file"},"relativeLocation":"sdras.night-owl-2.1.1","metadata":{"installedTimestamp":1757223091021,"source":"gallery","id":"e58f546c-babc-455f-a265-ba40dbd140d4","publisherId":"addae8ad-0041-44f2-a2d4-cbebe4912d50","publisherDisplayName":"sarah.drasner","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"mickaellherminez.365-daynight-vscode-theme-ext","uuid":"7cbd8c01-3b16-4f95-aee4-19985f404526"},"version":"0.9.7","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/mickaellherminez.365-daynight-vscode-theme-ext-0.9.7","scheme":"file"},"relativeLocation":"mickaellherminez.365-daynight-vscode-theme-ext-0.9.7","metadata":{"installedTimestamp":1757278152614,"source":"gallery","id":"7cbd8c01-3b16-4f95-aee4-19985f404526","publisherId":"69c634fe-9de1-4edb-bd69-423d27360ff2","publisherDisplayName":"Mickael Lherminez","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode.vscode-speech","uuid":"e6610e16-9699-4e1d-a5d7-9bb1643db131"},"version":"0.16.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.vscode-speech-0.16.0-linux-x64","scheme":"file"},"relativeLocation":"ms-vscode.vscode-speech-0.16.0-linux-x64","metadata":{"installedTimestamp":1757278355064,"pinned":false,"source":"gallery","id":"e6610e16-9699-4e1d-a5d7-9bb1643db131","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"linux-x64","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"undefined_publisher.delta-nets-vscode-extension"},"version":"0.1.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/undefined_publisher.delta-nets-vscode-extension-0.1.0","scheme":"file"},"relativeLocation":"undefined_publisher.delta-nets-vscode-extension-0.1.0","metadata":{"installedTimestamp":1757457290758,"pinned":true,"source":"vsix"}},{"identifier":{"id":"tomrijndorp.find-it-faster","uuid":"d5eafbee-176a-421a-b74d-fbc51bd86a21"},"version":"0.0.39","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/tomrijndorp.find-it-faster-0.0.39","scheme":"file"},"relativeLocation":"tomrijndorp.find-it-faster-0.0.39","metadata":{"installedTimestamp":1757481534711,"pinned":false,"source":"gallery","id":"d5eafbee-176a-421a-b74d-fbc51bd86a21","publisherId":"f002c5e6-5db9-4df2-8791-8800b44272a4","publisherDisplayName":"Tom Rijndorp","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ehabhelaly.summer-night","uuid":"f8c49484-1baf-4459-a2ed-4094c48fc6c3"},"version":"1.0.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ehabhelaly.summer-night-1.0.1","scheme":"file"},"relativeLocation":"ehabhelaly.summer-night-1.0.1","metadata":{"installedTimestamp":1757573022724,"source":"gallery","id":"f8c49484-1baf-4459-a2ed-4094c48fc6c3","publisherId":"18266100-3872-4466-ad31-3f6b187fd1d0","publisherDisplayName":"Ehab Helaly","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode-remote.remote-containers","uuid":"93ce222b-5f6f-49b7-9ab1-a0463c6238df"},"version":"0.427.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode-remote.remote-containers-0.427.0","scheme":"file"},"relativeLocation":"ms-vscode-remote.remote-containers-0.427.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1757616838626,"pinned":false,"source":"gallery","id":"93ce222b-5f6f-49b7-9ab1-a0463c6238df","publisherId":"ac9410a2-0d75-40ec-90de-b59bb705801d","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"ms-vscode.remote-server","uuid":"105c0b3c-07a9-4156-a4fc-4141040eb07e"},"version":"1.5.3","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.remote-server-1.5.3","scheme":"file"},"relativeLocation":"ms-vscode.remote-server-1.5.3","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1757616838825,"pinned":false,"source":"gallery","id":"105c0b3c-07a9-4156-a4fc-4141040eb07e","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"rhighs.summerrelax","uuid":"0c50c577-e40e-47ae-9144-c3e250269fc0"},"version":"0.0.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/rhighs.summerrelax-0.0.1","scheme":"file"},"relativeLocation":"rhighs.summerrelax-0.0.1","metadata":{"installedTimestamp":1757629649149,"source":"gallery","id":"0c50c577-e40e-47ae-9144-c3e250269fc0","publisherId":"41bedfb1-a868-4a4e-8dfa-37bc9aa2f731","publisherDisplayName":"rhighs","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"krueger71.crt-themes","uuid":"46ed7e19-d635-4ec8-97f8-783097fe5d22"},"version":"0.5.2","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/krueger71.crt-themes-0.5.2","scheme":"file"},"relativeLocation":"krueger71.crt-themes-0.5.2","metadata":{"installedTimestamp":1757642747179,"source":"gallery","id":"46ed7e19-d635-4ec8-97f8-783097fe5d22","publisherId":"6e72b3df-4b07-480c-ba3b-30d472abe33d","publisherDisplayName":"krueger71","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"rickonono3.docpanel","uuid":"ebdbecf2-30d6-4ac1-8cbc-c2824a7ca53d"},"version":"1.0.10","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/rickonono3.docpanel-1.0.10","scheme":"file"},"relativeLocation":"rickonono3.docpanel-1.0.10","metadata":{"installedTimestamp":1757695117543,"pinned":false,"source":"gallery","id":"ebdbecf2-30d6-4ac1-8cbc-c2824a7ca53d","publisherId":"adb53dd0-9cdf-4be3-a2bc-d80a60760814","publisherDisplayName":"rickonono3","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"alefragnani.bookmarks","uuid":"b689fcc8-d494-4dbf-a228-2c694a578afc"},"version":"13.5.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/alefragnani.bookmarks-13.5.0","scheme":"file"},"relativeLocation":"alefragnani.bookmarks-13.5.0","metadata":{"installedTimestamp":1757709656579,"pinned":false,"source":"gallery","id":"b689fcc8-d494-4dbf-a228-2c694a578afc","publisherId":"3fbdef65-bdf5-4723-aeaf-9e12a50546ef","publisherDisplayName":"Alessandro Fragnani","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"asvetliakov.vscode-neovim","uuid":"caf8995c-5426-4bf7-9d01-f7968ebd49bb"},"version":"1.18.24","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/asvetliakov.vscode-neovim-1.18.24","scheme":"file"},"relativeLocation":"asvetliakov.vscode-neovim-1.18.24","metadata":{"installedTimestamp":1757714293122,"pinned":false,"source":"gallery","id":"caf8995c-5426-4bf7-9d01-f7968ebd49bb","publisherId":"ce6190db-6762-4c9c-99c7-1717b9504159","publisherDisplayName":"Alexey Svetliakov","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"fill-labs.dependi","uuid":"456278dd-7f50-4cbe-8314-ab06540c1057"},"version":"0.7.15","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/fill-labs.dependi-0.7.15","scheme":"file"},"relativeLocation":"fill-labs.dependi-0.7.15","metadata":{"installedTimestamp":1757715369175,"pinned":false,"source":"gallery","id":"456278dd-7f50-4cbe-8314-ab06540c1057","publisherId":"250a42ca-96a3-4224-91b7-caf37e830adb","publisherDisplayName":"Fill Labs","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"alexpasmantier.television","uuid":"4b553b38-4723-423c-9aa2-ac4396fbdb8c"},"version":"0.4.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/alexpasmantier.television-0.4.0","scheme":"file"},"relativeLocation":"alexpasmantier.television-0.4.0","metadata":{"installedTimestamp":1757752703364,"source":"gallery","id":"4b553b38-4723-423c-9aa2-ac4396fbdb8c","publisherId":"d4dec780-bedb-448a-bd30-67d5465c2a5c","publisherDisplayName":"alexpasmantier","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"foam.foam-vscode","uuid":"b85c6625-454b-4b61-8a22-c42f3d0f2e1e"},"version":"0.27.6","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/foam.foam-vscode-0.27.6","scheme":"file"},"relativeLocation":"foam.foam-vscode-0.27.6","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1757898672542,"pinned":false,"source":"gallery","id":"b85c6625-454b-4b61-8a22-c42f3d0f2e1e","publisherId":"34339645-24f0-4619-9917-12157fd92446","publisherDisplayName":"Foam","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"github.remotehub","uuid":"fc7d7e85-2e58-4c1c-97a3-2172ed9a77cd"},"version":"0.64.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.remotehub-0.64.0","scheme":"file"},"relativeLocation":"github.remotehub-0.64.0","metadata":{"installedTimestamp":1757903322287,"pinned":false,"source":"gallery","id":"fc7d7e85-2e58-4c1c-97a3-2172ed9a77cd","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode.remote-repositories","uuid":"cf5142f0-3701-4992-980c-9895a750addf"},"version":"0.42.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.remote-repositories-0.42.0","scheme":"file"},"relativeLocation":"ms-vscode.remote-repositories-0.42.0","metadata":{"installedTimestamp":1757903322267,"pinned":false,"source":"gallery","id":"cf5142f0-3701-4992-980c-9895a750addf","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode-remote.remote-ssh","uuid":"607fd052-be03-4363-b657-2bd62b83d28a"},"version":"0.120.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode-remote.remote-ssh-0.120.0","scheme":"file"},"relativeLocation":"ms-vscode-remote.remote-ssh-0.120.0","metadata":{"installedTimestamp":1757903411566,"pinned":false,"source":"gallery","id":"607fd052-be03-4363-b657-2bd62b83d28a","publisherId":"ac9410a2-0d75-40ec-90de-b59bb705801d","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode.remote-explorer","uuid":"11858313-52cc-4e57-b3e4-d7b65281e34b"},"version":"0.5.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode.remote-explorer-0.5.0","scheme":"file"},"relativeLocation":"ms-vscode.remote-explorer-0.5.0","metadata":{"installedTimestamp":1757903411572,"pinned":false,"source":"gallery","id":"11858313-52cc-4e57-b3e4-d7b65281e34b","publisherId":"5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ms-vscode-remote.remote-ssh-edit","uuid":"bfeaf631-bcff-4908-93ed-fda4ef9a0c5c"},"version":"0.87.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ms-vscode-remote.remote-ssh-edit-0.87.0","scheme":"file"},"relativeLocation":"ms-vscode-remote.remote-ssh-edit-0.87.0","metadata":{"installedTimestamp":1757903411579,"pinned":false,"source":"gallery","id":"bfeaf631-bcff-4908-93ed-fda4ef9a0c5c","publisherId":"ac9410a2-0d75-40ec-90de-b59bb705801d","publisherDisplayName":"Microsoft","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"elmtooling.elm-ls-vscode","uuid":"85f62745-7ea6-4f23-8aa0-521c0732f664"},"version":"2.8.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/elmtooling.elm-ls-vscode-2.8.0","scheme":"file"},"relativeLocation":"elmtooling.elm-ls-vscode-2.8.0","metadata":{"installedTimestamp":1758887948232,"pinned":false,"source":"gallery","id":"85f62745-7ea6-4f23-8aa0-521c0732f664","publisherId":"e2da53e0-c6b6-4bd2-9b30-15175ab16fb4","publisherDisplayName":"Elm tooling","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"ziglang.vscode-zig","uuid":"9f528315-746c-44d9-97ba-d4d505cca308"},"version":"0.6.14","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ziglang.vscode-zig-0.6.14","scheme":"file"},"relativeLocation":"ziglang.vscode-zig-0.6.14","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1759266379332,"pinned":false,"source":"gallery","id":"9f528315-746c-44d9-97ba-d4d505cca308","publisherId":"cefd71b0-991b-4e5d-bcad-e691066ed199","publisherDisplayName":"ziglang","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"raits.rust-development","uuid":"6ea362b4-b01e-4fc9-96b8-078103f808e0"},"version":"0.0.6","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/raits.rust-development-0.0.6","scheme":"file"},"relativeLocation":"raits.rust-development-0.0.6","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1759266379669,"pinned":false,"source":"gallery","id":"6ea362b4-b01e-4fc9-96b8-078103f808e0","publisherId":"ae82625c-b501-42ca-919e-e5a6ca09932e","publisherDisplayName":"René André IT-Services GmbH","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"google.gemini-cli-vscode-ide-companion","uuid":"3f22f99d-2695-4d6c-9a37-0450025dc16b"},"version":"0.7.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/google.gemini-cli-vscode-ide-companion-0.7.0","scheme":"file"},"relativeLocation":"google.gemini-cli-vscode-ide-companion-0.7.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1759474061765,"pinned":false,"source":"gallery","id":"3f22f99d-2695-4d6c-9a37-0450025dc16b","publisherId":"93a45bde-b507-401c-9deb-7a098ebcded8","publisherDisplayName":"Google","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"github.vscode-github-actions","uuid":"04f49bfc-8330-4eee-8237-ea938fb755ef"},"version":"0.28.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.vscode-github-actions-0.28.0","scheme":"file"},"relativeLocation":"github.vscode-github-actions-0.28.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1759474061761,"pinned":false,"source":"gallery","id":"04f49bfc-8330-4eee-8237-ea938fb755ef","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"vscodevim.vim","uuid":"d96e79c6-8b25-4be3-8545-0e0ecefcae03"},"version":"1.31.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/vscodevim.vim-1.31.0","scheme":"file"},"relativeLocation":"vscodevim.vim-1.31.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1759772947568,"pinned":false,"source":"gallery","id":"d96e79c6-8b25-4be3-8545-0e0ecefcae03","publisherId":"5d63889b-1b67-4b1f-8350-4f1dce041a26","publisherDisplayName":"vscodevim","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"jnoortheen.nix-ide","uuid":"0ffebccd-4265-4f2d-a855-db1adcf278c7"},"version":"0.5.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/jnoortheen.nix-ide-0.5.0","scheme":"file"},"relativeLocation":"jnoortheen.nix-ide-0.5.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1760251960235,"pinned":false,"source":"gallery","id":"0ffebccd-4265-4f2d-a855-db1adcf278c7","publisherId":"3a7c13d8-8768-454a-be53-290c25bd0f85","publisherDisplayName":"Noortheen","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"ahmadawais.shades-of-purple","uuid":"431aa1a8-74f4-43d5-a83b-f4960510da5f"},"version":"7.3.6","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/ahmadawais.shades-of-purple-7.3.6","scheme":"file"},"relativeLocation":"ahmadawais.shades-of-purple-7.3.6","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1760564934598,"pinned":false,"source":"gallery","id":"431aa1a8-74f4-43d5-a83b-f4960510da5f","publisherId":"530c7464-efca-4776-9142-c6f0aeb4084e","publisherDisplayName":"Ahmad Awais ⚡","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"kamen.noctis-high-contrast","uuid":"d91aef70-2e68-4a66-84d6-d6f61a8d8945"},"version":"10.39.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/kamen.noctis-high-contrast-10.39.1","scheme":"file"},"relativeLocation":"kamen.noctis-high-contrast-10.39.1","metadata":{"installedTimestamp":1760994306748,"source":"gallery","id":"d91aef70-2e68-4a66-84d6-d6f61a8d8945","publisherId":"7aef037f-8f06-4326-98b0-8c461b7ce9b5","publisherDisplayName":"Kamen","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"loilo.snazzy-light","uuid":"20077bb9-6134-4ff3-8f68-23555bb241f3"},"version":"1.4.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/loilo.snazzy-light-1.4.1","scheme":"file"},"relativeLocation":"loilo.snazzy-light-1.4.1","metadata":{"installedTimestamp":1761069553707,"source":"gallery","id":"20077bb9-6134-4ff3-8f68-23555bb241f3","publisherId":"541949d0-3bea-4547-a4de-f7c108b6c624","publisherDisplayName":"Florian Reuschel","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"scalameta.metals","uuid":"d56562ae-394d-46cd-a26d-2eafab4ce5a2"},"version":"1.59.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/scalameta.metals-1.59.0","scheme":"file"},"relativeLocation":"scalameta.metals-1.59.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761244318029,"pinned":false,"source":"gallery","id":"d56562ae-394d-46cd-a26d-2eafab4ce5a2","publisherId":"5b1ac358-daf6-4046-980b-bb94d2c94e8a","publisherDisplayName":"Scalameta","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"github.codespaces","uuid":"4023d3e5-c840-4cdd-8b54-51c77548aa3f"},"version":"1.17.5","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.codespaces-1.17.5","scheme":"file"},"relativeLocation":"github.codespaces-1.17.5","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761244318024,"pinned":false,"source":"gallery","id":"4023d3e5-c840-4cdd-8b54-51c77548aa3f","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"whizkydee.material-palenight-theme","uuid":"7f147721-ec06-4043-9e37-c9ffbecbccd1"},"version":"2.0.4","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/whizkydee.material-palenight-theme-2.0.4","scheme":"file"},"relativeLocation":"whizkydee.material-palenight-theme-2.0.4","metadata":{"installedTimestamp":1761286091545,"source":"gallery","id":"7f147721-ec06-4043-9e37-c9ffbecbccd1","publisherId":"942a68c7-9bce-4e1c-9bb0-828710897a61","publisherDisplayName":"Olaolu Olawuyi","targetPlatform":"undefined","updated":false,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false}},{"identifier":{"id":"github.copilot","uuid":"23c4aeee-f844-43cd-b53e-1113e483f1a6"},"version":"1.388.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.copilot-1.388.0","scheme":"file"},"relativeLocation":"github.copilot-1.388.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761349625010,"pinned":false,"source":"gallery","id":"23c4aeee-f844-43cd-b53e-1113e483f1a6","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"golang.go","uuid":"d6f6cfea-4b6f-41f4-b571-6ad2ab7918da"},"version":"0.51.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/golang.go-0.51.1","scheme":"file"},"relativeLocation":"golang.go-0.51.1","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761589873539,"pinned":false,"source":"gallery","id":"d6f6cfea-4b6f-41f4-b571-6ad2ab7918da","publisherId":"dbf6ae0a-da75-4167-ac8b-75b4512f2153","publisherDisplayName":"Go Team at Google","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":true,"hasPreReleaseVersion":true,"preRelease":true}},{"identifier":{"id":"visualjj.visualjj","uuid":"338d7429-21f3-449d-acdf-8518eae43a72"},"version":"0.19.1","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/visualjj.visualjj-0.19.1-linux-x64","scheme":"file"},"relativeLocation":"visualjj.visualjj-0.19.1-linux-x64","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761589873547,"pinned":false,"source":"gallery","id":"338d7429-21f3-449d-acdf-8518eae43a72","publisherId":"828fee6d-3c80-4fdc-9b0e-a9a8d09fb856","publisherDisplayName":"VisualJJ","targetPlatform":"linux-x64","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"rust-lang.rust-analyzer","uuid":"06574cb4-e5dc-4631-8174-a543a4533621"},"version":"0.3.2660","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/rust-lang.rust-analyzer-0.3.2660-linux-x64","scheme":"file"},"relativeLocation":"rust-lang.rust-analyzer-0.3.2660-linux-x64","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761674633013,"pinned":false,"source":"gallery","id":"06574cb4-e5dc-4631-8174-a543a4533621","publisherId":"cb14a7a7-a188-40bd-a953-e0a20757c5dd","publisherDisplayName":"The Rust Programming Language ","targetPlatform":"linux-x64","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"google.geminicodeassist","uuid":"51643712-2cb2-4384-b7cc-d55b01b8274b"},"version":"2.56.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/google.geminicodeassist-2.56.0","scheme":"file"},"relativeLocation":"google.geminicodeassist-2.56.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761871725101,"pinned":false,"source":"gallery","id":"51643712-2cb2-4384-b7cc-d55b01b8274b","publisherId":"93a45bde-b507-401c-9deb-7a098ebcded8","publisherDisplayName":"Google","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"jeff-hykin.better-nix-syntax","uuid":"233db2c9-69d8-4d47-a1b0-7b8c6210c1b2"},"version":"2.3.0","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/jeff-hykin.better-nix-syntax-2.3.0","scheme":"file"},"relativeLocation":"jeff-hykin.better-nix-syntax-2.3.0","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761871725105,"pinned":false,"source":"gallery","id":"233db2c9-69d8-4d47-a1b0-7b8c6210c1b2","publisherId":"b734936b-6cc4-40c1-b17a-c6a7e1f680cd","publisherDisplayName":"Jeff Hykin","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"github.vscode-pull-request-github","uuid":"69ddd764-339a-4ecc-97c1-9c4ece58e36d"},"version":"0.120.2","location":{"$mid":1,"path":"/home/vic/.vscode/extensions/github.vscode-pull-request-github-0.120.2","scheme":"file"},"relativeLocation":"github.vscode-pull-request-github-0.120.2","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761871725340,"pinned":false,"source":"gallery","id":"69ddd764-339a-4ecc-97c1-9c4ece58e36d","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}},{"identifier":{"id":"github.copilot-chat"},"version":"0.32.4","location":{"$mid":1,"fsPath":"/home/vic/.vscode/extensions/github.copilot-chat-0.32.4","path":"/home/vic/.vscode/extensions/github.copilot-chat-0.32.4","scheme":"file"},"relativeLocation":"github.copilot-chat-0.32.4","metadata":{"isApplicationScoped":false,"isMachineScoped":false,"isBuiltin":false,"installedTimestamp":1761871725344,"pinned":false,"source":"gallery","id":"7ec7d6e6-b89e-4cc5-a59b-d6c4d238246f","publisherId":"7c1c19cd-78eb-4dfb-8999-99caf7679002","publisherDisplayName":"GitHub","targetPlatform":"undefined","updated":true,"private":false,"isPreReleaseVersion":false,"hasPreReleaseVersion":false,"preRelease":false}}]
+19
modules/vic/editors.nix
··· 1 + { vix, ... }: 2 + { 3 + vix.vic.provides.editors = _: { 4 + includes = [ 5 + (vix.unfree [ "cursor" "vscode"]) 6 + ]; 7 + 8 + homeManager = 9 + { pkgs, ... }: 10 + { 11 + home.packages = [ 12 + pkgs.helix 13 + pkgs.code-cursor 14 + pkgs.zed-editor 15 + pkgs.vscode 16 + ]; 17 + }; 18 + }; 19 + }
+12 -32
modules/vic/fish.nix
··· 1 - { inputs, ... }: 2 1 { 3 - flake.modules.homeManager.vic = 4 - { pkgs, ... }: 5 - let 6 - inherit (pkgs) lib; 7 - 8 - code-visual = '' 9 - if test "$VSCODE_INJECTION" = "1" 10 - set -x VISUAL code 11 - end 12 - ''; 13 - in 2 + vix.vic.provides.fish = 3 + { user, ... }: 14 4 { 15 - 16 - #home.file.".config/fish/conf.d/init-leader.fish".source = 17 - # "${inputs.cli-leader.outPath}/assets/leader.fish.sh"; 18 - home.file.".config/fish/conf.d/vscode-vim.fish".text = code-visual; 19 - home.file.".config/fish/conf.d/tv.fish".text = '' 20 - ${pkgs.television}/bin/tv init fish | source 21 - ''; 22 - home.file.".config/fish/conf.d/tvtab.fish".source = ./_fish/tv.fish; 23 - 24 - programs.fzf.enable = true; 25 - # programs.fzf.enableFishIntegration = true; 26 - 27 - programs.fish = { 28 - enable = true; 29 - 30 - functions = import ./_fish/functions.nix { inherit inputs lib; }; 31 - shellAliases = import ./_fish/aliases.nix; 32 - shellAbbrs = import ./_fish/abbrs.nix; 5 + nixos = 6 + { pkgs, ... }: 7 + { 8 + programs.fish.enable = true; 9 + users.users.${user.userName}.shell = pkgs.fish; 10 + }; 33 11 34 - plugins = [ ]; # pure done fzf.fish pisces z 12 + homeManager = { 13 + programs.fzf.enable = true; 14 + # programs.fzf.enableFishIntegration = true; 15 + programs.fish.enable = true; 35 16 }; 36 - 37 17 }; 38 18 }
+13
modules/vic/fonts.nix
··· 1 + { 2 + vix.vic.provides.fonts = _: { 3 + nixos = 4 + { pkgs, ... }: 5 + { 6 + fonts.packages = with pkgs.nerd-fonts; [ 7 + victor-mono 8 + jetbrains-mono 9 + inconsolata 10 + ]; 11 + }; 12 + }; 13 + }
-75
modules/vic/git.nix
··· 1 - { 2 - flake.modules.homeManager.vic = 3 - { pkgs, ... }: 4 - { 5 - 6 - home.packages = [ pkgs.difftastic ]; 7 - 8 - programs.git = { 9 - enable = true; 10 - userName = "Victor Borja"; 11 - userEmail = "vborja@apache.org"; 12 - signing.format = "ssh"; 13 - 14 - extraConfig = { 15 - init.defaultBranch = "main"; 16 - pull.rebase = true; 17 - pager.difftool = true; 18 - diff.tool = "difftastic"; 19 - difftool.prompt = false; 20 - difftool.difftastic.cmd = "${pkgs.difftastic}/bin/difft $LOCAL $REMOTE"; 21 - 22 - github.user = "vic"; 23 - gitlab.user = "vic"; 24 - 25 - core.editor = "vim"; 26 - }; 27 - aliases = { 28 - "dff" = "difftool"; 29 - "fap" = "fetch --all -p"; 30 - "rm-merged" = 31 - "for-each-ref --format '%(refname:short)' refs/heads | grep -v master | xargs git branch -D"; 32 - "recents" = 33 - "for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))'"; 34 - }; 35 - ignores = [ 36 - ".DS_Store" 37 - "*.swp" 38 - ".direnv" 39 - ".envrc" 40 - ".envrc.local" 41 - ".env" 42 - ".env.local" 43 - ".jj" 44 - "devshell.toml" 45 - ".tool-versions" 46 - "/.github/chatmodes" 47 - "/.github/instructions" 48 - "/vic" 49 - "*.key" 50 - "target" 51 - "result" 52 - "out" 53 - "old" 54 - "*~" 55 - ".aider*" 56 - ".crush*" 57 - "CRUSH.md" 58 - "GEMINI.md" 59 - "CLAUDE.md" 60 - ]; 61 - includes = [ ]; 62 - # { path = "${DOTS}/git/something"; } 63 - 64 - lfs.enable = true; 65 - 66 - delta.enable = true; 67 - delta.options = { 68 - line-numbers = true; 69 - side-by-side = false; 70 - }; 71 - }; 72 - 73 - }; 74 - 75 - }
+5
modules/vic/hm-backup.nix
··· 1 + { 2 + vix.vic.provides.hm-backup = _: { 3 + nixos.home-manager.backupFileExtension = "hm-backup"; 4 + }; 5 + }
-29
modules/vic/home.nix
··· 1 - { inputs, ... }: 2 - let 3 - flake.homeConfigurations.vic = vic_at "mordor"; 4 - flake.homeConfigurations."vic@mordor" = vic_at "mordor"; 5 - 6 - vic_at = 7 - host: 8 - inputs.home-manager.lib.homeManagerConfiguration { 9 - pkgs = inputs.self.nixosConfigurations.${host}.pkgs; 10 - modules = [ inputs.self.homeModules.vic ]; 11 - extraSpecialArgs.osConfig = inputs.self.nixosConfigurations.${host}.config; 12 - }; 13 - 14 - flake.homeModules.vic.imports = [ 15 - inputs.self.modules.homeManager.vic 16 - ]; 17 - 18 - flake.modules.homeManager.vic = 19 - { pkgs, lib, ... }: 20 - { 21 - home.username = lib.mkDefault "vic"; 22 - home.homeDirectory = lib.mkDefault (if pkgs.stdenvNoCC.isDarwin then "/Users/vic" else "/home/vic"); 23 - home.stateVersion = lib.mkDefault "25.05"; 24 - }; 25 - 26 - in 27 - { 28 - inherit flake; 29 - }
-9
modules/vic/imports.nix
··· 1 - { inputs, ... }: 2 - { 3 - # home.file.".nix-flake".source = inputs.self.outPath; 4 - flake.modules.homeManager.vic.imports = [ 5 - inputs.self.modules.homeManager.nix-index 6 - inputs.self.modules.homeManager.nix-registry 7 - inputs.self.modules.homeManager.vscode-server 8 - ]; 9 - }
-225
modules/vic/jujutsu.nix
··· 1 - # https://oppi.li/posts/configuring_jujutsu/ 2 - # https://github.com/jj-vcs/jj/discussions/5812 3 - # https://gist.github.com/thoughtpolice/8f2fd36ae17cd11b8e7bd93a70e31ad6 4 - { inputs, ... }: 5 - { 6 - flake-file.inputs.jjui.url = "github:idursun/jjui"; 7 - 8 - flake.modules.homeManager.vic = 9 - { pkgs, ... }: 10 - let 11 - jjui = inputs.jjui.packages.${pkgs.system}.jjui; 12 - jjui-wrapped = pkgs.writeShellApplication { 13 - name = "jjui"; 14 - text = '' 15 - # ask for password if key is not loaded, before jjui 16 - ssh-add -l || ssh-add 17 - ${pkgs.lib.getExe jjui} "$@" 18 - ''; 19 - }; 20 - in 21 - { 22 - home.packages = [ 23 - pkgs.lazyjj 24 - pkgs.jj-fzf 25 - jjui-wrapped 26 - ]; 27 - 28 - programs.jujutsu = 29 - let 30 - diff-formatter = [ 31 - (pkgs.lib.getExe pkgs.delta) 32 - # "--pager" 33 - # (pkgs.lib.getExe pkgs.bat) 34 - # "--side-by-side" 35 - "$left" 36 - "$right" 37 - ]; 38 - in 39 - { 40 - enable = true; 41 - 42 - # See https://jj-vcs.github.io/jj/v0.17.0/config 43 - settings = { 44 - user.name = "Victor Borja"; 45 - user.email = "vborja@apache.org"; 46 - 47 - revsets.log = "default()"; 48 - 49 - revset-aliases = { 50 - "trunk()" = "main@origin"; 51 - 52 - # commits on working-copy compared to `trunk` 53 - "compared_to_trunk()" = "(trunk()..@):: | (trunk()..@)-"; 54 - 55 - # immutable heads: 56 - # main and not mine commits. 57 - # "immutable_heads()" = "trunk() | (trunk().. & ~mine())"; 58 - "immutable_heads()" = "builtin_immutable_heads() | remote_bookmarks()"; 59 - 60 - "closest_bookmark(to)" = "heads(::to & bookmarks())"; 61 - 62 - # jjui default 63 - "default_log()" = "present(@) | ancestors(immutable_heads().., 2) | present(trunk())"; 64 - 65 - "default()" = "coalesce(trunk(),root())::present(@) | ancestors(visible_heads() & recent(), 2)"; 66 - 67 - "recent()" = "committer_date(after:'1 week ago')"; 68 - }; 69 - 70 - template-aliases = { 71 - "format_short_id(id)" = "id.shortest().upper()"; # default is shortest(12) 72 - "format_short_change_id(id)" = "format_short_id(id)"; 73 - "format_short_signature(signature)" = "signature.email()"; 74 - "format_timestamp(timestamp)" = "timestamp.ago()"; 75 - }; 76 - 77 - "--scope" = [ 78 - { 79 - "--when".commands = [ 80 - "diff" 81 - "show" 82 - ]; 83 - ui.pager = (pkgs.lib.getExe pkgs.delta); 84 - ui.diff-formatter = diff-formatter; 85 - } 86 - { 87 - "--when".repositories = [ "~/hk/jjui" ]; 88 - revsets.log = "default()"; 89 - revset-aliases = { 90 - "trunk()" = "main@idursun"; 91 - "vic" = "remote_bookmarks('', 'vic')"; 92 - "idursun" = "remote_bookmarks('', 'idursun')"; 93 - "default()" = 94 - "coalesce( trunk(), root() )::present(@) | ancestors(visible_heads() & recent(), 2) | idursun | vic"; 95 - }; 96 - aliases = { 97 - "n" = [ 98 - "new" 99 - "main@idursun" 100 - ]; 101 - }; 102 - } 103 - ]; 104 - 105 - ui = { 106 - default-command = [ 107 - "status" 108 - "--no-pager" 109 - ]; 110 - inherit diff-formatter; 111 - # pager = ":builtin"; 112 - # editor = "nvim"; 113 - # merge-editor = pkgs.meld; # meld 114 - diff-editor = [ 115 - "nvim" 116 - "-c" 117 - "DiffEditor $left $right $output" 118 - ]; 119 - conflict-marker-style = "git"; 120 - movement.edit = false; 121 - }; 122 - 123 - signing = { 124 - behaviour = "own"; 125 - backend = "ssh"; 126 - key = "~/.ssh/id_ed25519.pub"; 127 - }; 128 - 129 - templates = { 130 - git_push_bookmark = "vic/jj-change-"; 131 - }; 132 - 133 - aliases = { 134 - tug = [ 135 - "bookmark" 136 - "move" 137 - "--from" 138 - "closest_bookmark(@-)" 139 - "--to" 140 - "@-" 141 - ]; 142 - lr = [ 143 - "log" 144 - "-r" 145 - "default() & recent()" 146 - ]; 147 - 148 - s = [ "show" ]; 149 - 150 - sq = [ 151 - "squash" 152 - "-i" 153 - ]; 154 - sU = [ 155 - "squash" 156 - "-i" 157 - "-f" 158 - "@+" 159 - "-t" 160 - "@" 161 - ]; 162 - su = [ 163 - "squash" 164 - "-i" 165 - "-f" 166 - "@" 167 - "-t" 168 - "@+" 169 - ]; 170 - sd = [ 171 - "squash" 172 - "-i" 173 - "-f" 174 - "@" 175 - "-t" 176 - "@-" 177 - ]; 178 - sD = [ 179 - "squash" 180 - "-i" 181 - "-f" 182 - "@-" 183 - "-t" 184 - "@" 185 - ]; 186 - 187 - l = [ 188 - "log" 189 - "-r" 190 - "compared_to_trunk()" 191 - "--config" 192 - "template-aliases.'format_short_id(id)'='id.shortest().upper()'" 193 - "--config" 194 - "template-aliases.'format_short_change_id(id)'='id.shortest().upper()'" 195 - "--config" 196 - "template-aliases.'format_timestamp(timestamp)'='timestamp.ago()'" 197 - ]; 198 - 199 - # like git log, all visible commits in the repo 200 - ll = [ 201 - "log" 202 - "-r" 203 - ".." 204 - ]; 205 - }; 206 - 207 - }; 208 - }; 209 - 210 - home.file.".config/jjui/config.toml".source = 211 - let 212 - # https://github.com/idursun/jjui/wiki/Configuration 213 - toml = { 214 - leader.e.help = "Edit file"; 215 - leader.e.send = [ 216 - "$" 217 - "jj edit $change_id && $VISUAL $file" 218 - "enter" 219 - ]; 220 - }; 221 - fmt = pkgs.formats.toml { }; 222 - in 223 - fmt.generate "config.toml" toml; 224 - }; 225 - }
+21
modules/vic/nix-btw.nix
··· 1 + { 2 + # flake-file.inputs.ntv.url = "github:vic/ntv"; 3 + 4 + vix.vic.provides.nix-btw = _: { 5 + 6 + homeManager = 7 + { pkgs, ... }: 8 + { 9 + home.packages = [ 10 + pkgs.nix-search-cli 11 + pkgs.nixd # lsp 12 + pkgs.cachix 13 + ]; 14 + 15 + programs.nh.enable = true; 16 + programs.home-manager.enable = true; 17 + }; 18 + 19 + }; 20 + 21 + }
-45
modules/vic/nvim.nix
··· 1 - { 2 - perSystem.treefmt.programs = { 3 - stylua.enable = true; 4 - fish_indent.enable = true; 5 - }; 6 - 7 - flake.modules.homeManager.vic = 8 - { pkgs, lib, config, ... }: 9 - let 10 - vim_variant = name: inputs: pkgs.writeShellApplication { 11 - inherit name; 12 - runtimeEnv = { NVIM_APPNAME = name; }; 13 - runtimeInputs = [ config.programs.neovim.package ] ++ inputs; 14 - text = ''exec nvim "$@"''; 15 - }; 16 - astrovim = vim_variant "astrovim" []; 17 - lazyvim = vim_variant "lazyvim" []; 18 - vscode-vim = vim_variant "vscode-vim" []; 19 - in 20 - { 21 - home.packages = [ lazyvim vscode-vim astrovim pkgs.neovim-remote ]; 22 - home.sessionVariables.VISUAL = "vim"; 23 - home.sessionVariables.EDITOR = "vim"; 24 - programs.neovim.enable = true; 25 - programs.neovim.viAlias = true; 26 - programs.neovim.vimAlias = true; 27 - programs.neovim.withNodeJs = true; 28 - programs.neovim.extraPackages = 29 - (with pkgs; [ 30 - sqlite 31 - treefmt 32 - gcc 33 - gnumake 34 - ]) 35 - ++ (lib.optionals pkgs.stdenv.isLinux [ pkgs.zig ]); 36 - programs.neovim.plugins = with pkgs; [ 37 - vimPlugins.nvim-treesitter-parsers.go 38 - vimPlugins.nvim-treesitter-parsers.rust 39 - vimPlugins.nvim-treesitter-parsers.yaml 40 - vimPlugins.nvim-treesitter-parsers.nix 41 - pkgs.vimPlugins.nvim-treesitter.withAllGrammars 42 - ]; 43 - }; 44 - 45 - }
-23
modules/vic/packages/vic-edge.nix
··· 1 - { inputs, ... }: 2 - let 3 - perSystem = 4 - { pkgs, ... }: 5 - let 6 - edgevpn = inputs.self.packages.${pkgs.system}.edgevpn; 7 - in 8 - { 9 - packages.vic-edge = pkgs.writeShellApplication { 10 - name = "vic-edge"; 11 - text = '' 12 - sudo env \ 13 - ADDRESS="''${ADDRESS:-"192.168.192.192/24"}" \ 14 - EDGEVPNLOGLEVEL="''${EDGEVPNLOGLEVEL:-debug}" \ 15 - EDGEVPNTOKEN="''${EDGEVPNTOKEN:-$(< "''${HOME}"/.config/sops-nix/secrets/edge.token)}" \ 16 - ${edgevpn}/bin/edgevpn "$@" 17 - ''; 18 - }; 19 - }; 20 - in 21 - { 22 - inherit perSystem; 23 - }
-87
modules/vic/packages/vic-sops-get.nix
··· 1 - { 2 - perSystem = 3 - { pkgs, ... }: 4 - let 5 - vic-sops-get = pkgs.writeShellApplication { 6 - name = "vic-sops-get"; 7 - text = '' 8 - export PATH="${ 9 - pkgs.lib.makeBinPath [ 10 - pkgs.sops 11 - pkgs.ssh-to-age 12 - ] 13 - }:$PATH" 14 - declare -a args more 15 - 16 - file="" 17 - dry="" 18 - extract="" 19 - server="" 20 - setup="" 21 - 22 - while test -n "''${1:-}"; do 23 - first="$1" 24 - shift 25 - case "$first" in 26 - "--setup") 27 - setup="$1" 28 - shift 29 - ;; 30 - "--dry-run") 31 - dry="true" 32 - ;; 33 - "-f" | "--file") 34 - file="${./..}/vic/secrets/$1" 35 - shift 36 - ;; 37 - "-a" | "--attr") 38 - file="${./..}/vic/secrets.yaml" 39 - extract="[\"$1\"]" 40 - shift 41 - ;; 42 - "-s" | "--keyservice") 43 - server="$1" 44 - shift 45 - ;; 46 - *) 47 - more+=("$first") 48 - ;; 49 - esac 50 - done 51 - 52 - if test -n "$extract"; then 53 - args+=("--extract" "$extract") 54 - fi 55 - 56 - if test -n "$server"; then 57 - args+=("--enable-local-service=false" "--keyservice" "$server") 58 - fi 59 - 60 - args+=("''${more[@]}") 61 - 62 - if test -n "$file"; then 63 - args+=("$file") 64 - fi 65 - 66 - function perform_setup() { 67 - echo -n "Password: " >&2 68 - local pass 69 - read -r -s pass 70 - sops decrypt "''${args[@]}" | SSH_TO_AGE_PASSPHRASE="$pass" ssh-to-age -private-key -o "$setup" 2>/dev/null 71 - } 72 - 73 - if test -n "$dry"; then 74 - echo "sops decrypt" "''${args[@]}" 75 - exit 0 76 - elif test -n "$setup"; then 77 - perform_setup 78 - else 79 - exec sops decrypt "''${args[@]}" 80 - fi 81 - ''; 82 - }; 83 - in 84 - { 85 - packages.vic-sops-get = vic-sops-get; 86 - }; 87 - }
-13
modules/vic/packages/vic-sops-rotate.nix
··· 1 - { 2 - perSystem = 3 - { pkgs, ... }: 4 - { 5 - packages.vic-sops-rotate = pkgs.writeShellApplication { 6 - name = "vic-sops-rotate"; 7 - text = '' 8 - # shellcheck disable=SC2011 9 - ls --zero modules/vic/secrets{.yaml,/*} | xargs -0 -n 1 sops rotate -i 10 - ''; 11 - }; 12 - }; 13 - }
-33
modules/vic/rdesk.nix
··· 1 - { inputs, ... }: 2 - let 3 - flake.modules.nixos.vic.imports = [ 4 - inputs.self.modules.nixos.rdesk 5 - ]; 6 - 7 - linux = 8 - { pkgs, lib, ... }: 9 - lib.mkIf pkgs.stdenvNoCC.isLinux { 10 - home.packages = [ 11 - pkgs.kdePackages.krdc 12 - pkgs.xpra 13 - ]; 14 - }; 15 - 16 - any = 17 - { pkgs, ... }: 18 - { 19 - home.packages = [ 20 - inputs.self.packages.${pkgs.system}.vic-edge 21 - pkgs.gsocket 22 - ]; 23 - }; 24 - 25 - flake.modules.homeManager.vic.imports = [ 26 - inputs.self.modules.homeManager.rdesk 27 - linux 28 - any 29 - ]; 30 - in 31 - { 32 - inherit flake; 33 - }
-71
modules/vic/secrets.nix
··· 1 - { inputs, ... }: 2 - let 3 - 4 - flake-file.inputs.sops-nix.url = "github:Mic92/sops-nix"; 5 - 6 - flake.modules.homeManager.vic = 7 - { 8 - config, 9 - pkgs, 10 - ... 11 - }: 12 - { 13 - 14 - imports = [ 15 - inputs.sops-nix.homeManagerModules.sops 16 - ]; 17 - 18 - home.packages = [ pkgs.sops ]; 19 - 20 - sops = { 21 - age.keyFile = "${config.xdg.configHome}/sops/age/keys.txt"; 22 - age.sshKeyPaths = [ ]; 23 - age.generateKey = false; 24 - defaultSopsFile = ./secrets.yaml; 25 - validateSopsFiles = true; 26 - 27 - secrets = { 28 - "hello" = { }; 29 - "groq_api_key" = { }; 30 - "openrouter_api_key" = { }; 31 - "gemini_eco_key" = { }; 32 - "copilot_api_key" = { }; 33 - "anthropic_api_key" = { }; 34 - "edge.token" = { 35 - format = "binary"; 36 - sopsFile = ./secrets/edge.token; 37 - }; 38 - "ssh/id_ed25519" = { 39 - format = "binary"; 40 - sopsFile = ./secrets/mordor; 41 - }; 42 - "ssh/sops_ssh_config" = { 43 - format = "binary"; 44 - sopsFile = ./secrets/ssh-conf; 45 - }; 46 - "ssh/localhost_run" = { 47 - format = "binary"; 48 - sopsFile = ./secrets/localhost_run; 49 - }; 50 - }; 51 - 52 - templates = { 53 - "hello.toml".content = '' 54 - hello = "Wooo ${config.sops.placeholder.hello} Hoo"; 55 - ''; 56 - "llm_apis.env".content = '' 57 - export OPENROUTER_API_KEY="${config.sops.placeholder.openrouter_api_key}" 58 - export GEMINI_API_KEY="${config.sops.placeholder.gemini_eco_key}" 59 - export OPENAI_API_KEY="${config.sops.placeholder.copilot_api_key}" 60 - export ANTHROPIC_API_KEY="${config.sops.placeholder.anthropic_api_key}" 61 - export GROQ_API_KEY="${config.sops.placeholder.groq_api_key}" 62 - ''; 63 - }; 64 - }; 65 - 66 - }; 67 - in 68 - { 69 - inherit flake-file; 70 - inherit flake; 71 - }
-38
modules/vic/secrets.yaml
··· 1 - hello: ENC[AES256_GCM,data:6bqz3LftXaUYtW8FNm6Jw7+7k7GjxgX1GD0jNqvLf6KLtqJVbh770F5dxwdjHg==,iv:f8cgbppFfeESlcEwAxBQFVNVJP2EVib2uCiUw0zfwP8=,tag:wtjxBckxr6l72CCvEpV72A==,type:str] 2 - gemini_eco_key: ENC[AES256_GCM,data:cvtR8MwOx6rBg3n30b6NMWpoDRy7GcgDItobDIOqO3iqVcRiCXmW,iv:EF2lAGOZWN3cWu/Xn+VpwSzyxIDam4j7mpTbsY8vhIA=,tag:HmlhtrCBv2HLXKSdDrrqxA==,type:str] 3 - egdevnc: ENC[AES256_GCM,data:CG0uK84HCtHhAXZw,iv:dBu3dLlYFRhTiXOXfnY8tQAi7X9vIepV/BHh2TGghgA=,tag:Ydh7y7N6lSjH/e3rjBDFoQ==,type:str] 4 - gh_actions_pat: ENC[AES256_GCM,data:SqCxpMtXX7jBG0toAHru5TLyKr121dZDZun1Bc/hBj3eJV31axs8o9HyL4by9NttfaYbg+5AEXZQqwHF3a0Upo8dsxv90dCJLWzz+vc2iDsl6uPktZtiN6aPLMsI,iv:NONHWFikaQCiTz+gzrJ5dn9bKgo1NjbustcsNCRDUXI=,tag:iPru+5wgFvk+OMfrB0KSaQ==,type:str] 5 - cachix_personal: ENC[AES256_GCM,data:0YQp5ClidOxfeq0rDhZl3Ia9JGK8OIZWBaQhvrJmLDpRUlw8aENdT2vVaoXNljw8idd3vmZ/Dk5rOCghQrDibLNUgI991JvQNfvAukD02kjbE+Fg/pBmDWYiafuacQd5e/SYpth/IojEP76yF9AEn7JHS2hs3DNlOHpNjYwPyXROlRax7CXKIxwASThOxmZoMw==,iv:mymYXDiM7gheeCWR5vYJI3plVSIbT9g6l6oZGrB8k0Y=,tag:gGfvSZrrVlaufHnqU9Hg5Q==,type:str] 6 - cachix_gleam_nix: ENC[AES256_GCM,data:MzEI/ql0DCEY0xVadsC+Njiy0mFhJzI5vUrYuce4dvmjAWsDbL0lCBHamRFGWmCPqiRTOqWcSgdo7B9xfkPyJ6QHV1JDKtWP/TGFDITRVG/E1NYOp7oiEEe/dEw1VbKNQq+PAumjLtwBFA6h5iJDaGOkNUwbVCkLWN8PGcPx5VkjQKObaXt0dBclUb1dexwoW1qeqD8=,iv:ylE+G++jSOEto2pipGxHZBb8doYR2gGiZ8ZcaD6sdq4=,tag:igtHU6VITpl4uQTwT5F7Kg==,type:str] 7 - cachix_vix: ENC[AES256_GCM,data:tWkRHHpWFMSv1Nn9be2zF0tH/e5zmTyWQ0SyHggq/hhRaK/jnZkjHB68LxwvUDaavwwkIwhXGguqnByzmlP73v8hZPH3RRU8K49HEeHxnUp8DaHVbVo+WEJyQ1MAy0qxzH8u8QPlg1a3z2qaXZ+tC4oKcCiHUELhqYmYV+v8X5NYzYEAmrIHeDut0vIjyMJaMtgcxjo=,iv:8xnWPN7l+5dg5NQhYMkqytQDHl+JKIBdM13HmmnlyEQ=,tag:0Oa/d8B3vRRLHnHGVGV22g==,type:str] 8 - alwaysdata_tuiter: ENC[AES256_GCM,data:Mjh3M3Pjd4aTHnzcuNfG06jZsHWLFhee,iv:7F9mSmWTm4Ou6Ll13P8zwSaeT4l/qvDPxX87C4lAlzM=,tag:zzSKVGiS33QpoTx/zVCRKA==,type:str] 9 - alwaysdata_vic: ENC[AES256_GCM,data:yGvBaClubO/cjmqbHmJLsveLnUk4sO9VTual01m62kw=,iv:WevxrLrFeDe7T4b/t0+ETP1h0K8AXOmuASlszaaTdhE=,tag:22JgDBkYJFqIT/yQTh3jiw==,type:str] 10 - alwaysdata_vix: ENC[AES256_GCM,data:i4HlGhqWTEWY50IQMkjexWn7ZB8MqaNBVm0=,iv:MPAh+oPqfgbYiZhLPq2YkxI2A0YevI6tQ63A4errBss=,tag:WaLIGyeABKPcVvNSiCaAYQ==,type:str] 11 - alwaysdata_nix_versions: ENC[AES256_GCM,data:SY+SiXcPDTbL4iJldDKWfQd/TpgASRo=,iv:JblAEGt7rRmSkuIo4IJYfV2zFVIEVofThJcRb9dORv0=,tag:43cCy1fiN/c03XOtT7E2hA==,type:str] 12 - alwaysdata_nix_versions_api_key: ENC[AES256_GCM,data:IDLXfolXSbSEJNlYUNvU7gGzHcWdhEz0GMvgPHPbjW4=,iv:EcRH91F8r4FVonyy16ys+mOf2E4tx8qmZttU1CXEVr4=,tag:HX+vTJthW566fo5K3mlJEQ==,type:str] 13 - alwaysdata_nix_versions_totp: ENC[AES256_GCM,data:z8xv5bvrQ/xT84L5QjTq8z2FZ4viG9aA74p0KiqhzP8=,iv:5akqwLvFLePU0zs3LhLAE5pxWrdGwQdSZtMSWTI4XYY=,tag:2oz1lpmnp81jglieS6RBsQ==,type:str] 14 - nix_versions_ssh: ENC[AES256_GCM,data:oVLETHffJGIQBIoXq1kFv6Nbe/DbykplG7c=,iv:Xbe5TQhadHKtgJjDb2ncew4XfhLsD9pl4YVnkdv7na4=,tag:+ZSRakfB66xTUeJwhwuxMg==,type:str] 15 - gemini_api_key: ENC[AES256_GCM,data:TkZUBjmpn4gj4nS/8sUzr5VFDKbvAsg+yaGg7Xg9WGPIss4OMxLv,iv:3zsX3cvbnz1+PDSwGGjN9nX9gDC9hrzgFhG3VPzXb/E=,tag:02pn6COVs4zVs3U0PIvw0A==,type:str] 16 - CARGO_REGISTRY_TOKEN: ENC[AES256_GCM,data:7Kvv94HRZomAwCJkrlcqUGqVn/DXalyLDpTfzotbz5QjsgY=,iv:P72DnhI9DUHV9kbUB40mIi2jzHhs9MXT+++cg05rD6M=,tag:unKHWsszgniicLn7ocjI9w==,type:str] 17 - gh_models_pat: ENC[AES256_GCM,data:bM9WqGMFQuS4hb1gznq7rje3BALO4nUw8/rWyZackThf35GscAKo5j1wmiheBoi/piqXoK/dB21NHQKBoJSEUkh88FgME+9Aq/RefS62Lu5Z7qAW1SNA1Mti6882,iv:+3hoL9CgtTGSeK43UaAL09azywmY2m6QLjRCaR2p7hQ=,tag:7sNfOU2So8+7aBjrz5BhVg==,type:str] 18 - copilot_api_key: ENC[AES256_GCM,data:mSh74YgZT+K3jd7/JPrzFpGdaGHo5bjpmmZccXuzXjtY5hXvlTvnPg==,iv:5PgEg3g6p8pZk6krZozDApPVIzuv9pbd1xQ+X4Qibi4=,tag:HkWtWM0eqULe6mkpdT56sQ==,type:str] 19 - anthropic_api_key: ENC[AES256_GCM,data:gdl2HTeCCDukqZ/12Xlcq/Dn1WH8HqWjAG2R6nBUEVd07awRqoaNXQ7PGXemcIWtn1+sU08SPHJmt6VIWC67/ZfIoUqnzN6+krj1Xr03dci4HqCatp3NtxSNh54moSeb7rPlemisxuPXTZEx,iv:e3smLUJUY0d8Q/ZOrMjRgCeYaIuRam6zPJinyuZ1rS0=,tag:ZUxXh5a4UkHpUt5NCElE2A==,type:str] 20 - groq_api_key: ENC[AES256_GCM,data:M+FM3qfxwIzmsfnMhky5/JKEqk40h7hxXv54hzfi3d5InLJDg2kkq0xjTHXTA3JyWPekbsiqxoY=,iv:vI491WqAMkju68zyVm6aJYGtCYbzzc0JALEv9DnCMEM=,tag:Pz5EWNl8gX8I+0dvdYxFAA==,type:str] 21 - tinted_jjui_pat: ENC[AES256_GCM,data:zaihfuoHS4CNc9BgI9Vjz4tzlr6j9c4T7eIE6SadCFR0mJNcj/zeWmg6pgB8WlAjXs6Pn8uzKDTHMi4RJzVXTZ2uFPu21ZVpUZv7FKvgLw4n30EwuxO15TRzDWGn,iv:2/3tvdFg1u+JT9deJxbzc9Ir3xDINTYBQxSikXds1rk=,tag:mqwfCH/koM6geWuYsoBPCg==,type:str] 22 - openrouter_crush: ENC[AES256_GCM,data:TMX3gBilaQdrONyq1C7WhDUwjnZymys5SCKsd0bxiHdK+oRLHQnSbQ4SS+NNDI2zaV+XcbCQ3RcTji9DvfnOE+UHRmnQWadpag==,iv:MJtX7pAP436z30v+NfSf40rqIYB6VRHMOYO1W6noXSA=,tag:/OZL06A2hsoMIpPTzJJp9Q==,type:str] 23 - openrouter_api_key: ENC[AES256_GCM,data:GOyO0PuXPEhJv+Fp//on/sWLABQ4oEUKSIKI/eTEu46B4ZM/fWVGa5JvQ2NNETZt9dddnw2ehzgUY1UahjzNPO3LMiQZ4s9TXg==,iv:iVDIHqDzBhHTcLdFffYo/O5IufIb/7QAsWOqaFwl940=,tag:yzEvoiXMQdWmG8mQBZjQmw==,type:str] 24 - sops: 25 - age: 26 - - recipient: age1wmg6gkfar8nl9tr2y409vac6zqwnfjvjh6rxh2fl6x3tx4rzwdxqwj2r9e 27 - enc: | 28 - -----BEGIN AGE ENCRYPTED FILE----- 29 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4bHFkOFFEd0RuY3pKTDY5 30 - V1haRXpvRmZXWE9BV3BURDJvei9qVXF5RkRZCllpc3Njbk9mQzk2R2MvK0RZQk1V 31 - M2xDOTNvUWNTRzVIOWlPR3MxRHRlTGsKLS0tIG9QQXB0aFF1dU4rV0tRTFdqWW1P 32 - M3J3SzU1bW1TZmp0a2FRb2Nsekl5QXMKaqjyNio/N+LfBTWM+TjvFBUVDgCLlKW/ 33 - 0n7iA/34zefZLHe2sPjCIX1IT8aN6CHhzJNBysNHEzMfRni2w4zrvQ== 34 - -----END AGE ENCRYPTED FILE----- 35 - lastmodified: "2025-10-12T19:41:00Z" 36 - mac: ENC[AES256_GCM,data:HRd/j62siyMzx2emp1shkKHNCboQYq7SP4+ev1mHl1x7IX1E4exNq+HasbTQgCK100oJt50MstRl8IyRQUuIAxCBik6NiylVQ7bUW8EDHJikVFqQo/Ii1Ae3HDyn97ZRrR+NpZvCK5fAML7sPRDXzkmCTOXulfvIGLrve/lDiYo=,iv:zgVc5qDs0IXxt7iWRxACMn4Ns4i+tqvOSd0ZiVJjUto=,tag:PHbWiA7X2OkaZhe480qv0w==,type:str] 37 - unencrypted_suffix: _unencrypted 38 - version: 3.10.2
-15
modules/vic/secrets/edge.token
··· 1 - { 2 - "data": "ENC[AES256_GCM,data:0+CeXmPMx6cbSDOVnvpSZE0jfz3t8asaVRpbj8Hesaun3S5+0CDEf51EcHGK3hx++Qx3/V1fYv77fjpC482bfv73hu1YuqmkJGmrRsj9kJBkoF/pNe+1EhzVfzguSnAawNr43f57aSwghubljgMDMl6ooQ5niDgrv92pu5GKHVLPnYhoTG/JA2kOIca0Of9+LbhwcXKO3uQhVPdykujGlvjaKVoPW0feYhpszXVcoyXgBC5lxYNLLsl162UeDlvQfJl2tM8dl3Uv83TbuL3FpkO+K/9S+Au+5Tmcp4phFaHSYd183mWBr0/sRoXdKKY5gCzjmYdMFfgoFaRlb+dZPXg5Ho357W1ChgSaKKt9ftfMzsT7F+kvRdktEeRmfuN6iq1buoox6RTJGKHcbLGVR0LzhARd5lOX2Hyiv5cHCIEB10+GLHLLHN61AZGOBhV2QaNwGALjdOS6boQ/d4+r2c8IAKucdchfa3wjNebr+IbhGLKJ2pW3OfpU7p9f8+NuXBxNAIEExvUnDQMYk28wyqfbzI9hv6z0NhhjGLX2FtSYnJMZM0jZIkjLOroRb7SCoADT3rDH9IQAdskdzkUfNscJPGuMK7zqJHPoqjBbPZovvdfVcjCBeuyVOQwJOM9U6JWVPGKL168A/eFHbPKOqtvY5qjrE2xVsw==,iv:5OT0BE0gPmn7Rko/h3J/14llCf+w3GNmCS5GqcWw/e8=,tag:ns9TSA0iUVeIfHTTr47YKg==,type:str]", 3 - "sops": { 4 - "age": [ 5 - { 6 - "recipient": "age1wmg6gkfar8nl9tr2y409vac6zqwnfjvjh6rxh2fl6x3tx4rzwdxqwj2r9e", 7 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtWXIvdVdVMXc1eTBlZmJE\nZkdpQjM5cWNIdDZGcUxWdG9uUnNWOGlCK1ZvClJGWTduRWFDeTN3TUtiRlYzOWJp\nYU05WUdoVXhWZTlSSjJrcmg5VDRZUUUKLS0tIGhSREFTdXROb3FqcjBGMHdIanYr\ncFUrdU8rMzhwc2xVUlRwVFhoek5DcFUKV1nzXQnrBwyLvqGsLSIRJ+NWmZz0knvK\n2nyeKvUzbfe3nQ5Bulk5uoD805Ms+nd2snYF3Ul/q6nceWXiM6bKyg==\n-----END AGE ENCRYPTED FILE-----\n" 8 - } 9 - ], 10 - "lastmodified": "2025-10-12T19:41:00Z", 11 - "mac": "ENC[AES256_GCM,data:2V53Z7aoBTjV3OEk8MkMphVjMv6NY2PIfq6MueEYzP7nsKmt5c94AlRY3RPvK0WYuqSMpZfQpy0Da5g83NUjA/ez0gxohs5UnXvKG2joSkLwneji2csX1K3WaUeUweFB2M3rypgN4HnUr73n6Wk7KceSRpgiJJJ92XbMFdSHGl4=,iv:18zTXjIL8StwrHdGnDgdttWmOmdBdlMJkN57uQ7OXpE=,tag:0E7ywqiriHtqx+Yh31f8ZQ==,type:str]", 12 - "unencrypted_suffix": "_unencrypted", 13 - "version": "3.10.2" 14 - } 15 - }
-15
modules/vic/secrets/gh-recover
··· 1 - { 2 - "data": "ENC[AES256_GCM,data:h9VKAU31/V/u8wwJS8w1wQydxWP+BEJOuthKdROx1+923lyh4DSewkn5xDxz1ddFT8sgzazNUmJHo+dXFm4uhQiwiKws6Gr42ArrgoJfhvLWqdKA7S2bWMqW5V1PiVYlkd+ARG+PuLl4C600rSOF/TY3N3R3I7gZAGYT11oK2UBbhwz24HYaRUdVywoOnKG7UaAaRi/CJFu4+NBTJP1vJM0j1DKiw8b0+3qzlTjld3nb/RgNaz80e82V62T6jAYpmjrxEY8Tedpke8nEMQ0=,iv:aCjlCntFSHeb8iuJ+DAEzBPY7pRXCpFGZSBuhJiM3/M=,tag:QQxOYyU3hInOb61zx2MUzQ==,type:str]", 3 - "sops": { 4 - "age": [ 5 - { 6 - "recipient": "age1wmg6gkfar8nl9tr2y409vac6zqwnfjvjh6rxh2fl6x3tx4rzwdxqwj2r9e", 7 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsY1FmenhhTzJTQTZoSlFP\nUUpCd3R0a1NETEFFaGoxTDdpSFNkSElvTzI4CjB0Tno2dTdjQ3FhR1NIRFVBRFYr\ncDZjT3JsanFhWGRHbFlnc0dSakV0SE0KLS0tIHlYYTRGelFDb1NWMUxLWHNITHFv\ndUo2YUdWdzBZZHl1bVVYaUJYMWorcE0K9pPRMxqBthTtVwLqRU+2xgfirH2Yyqwn\nn/wQ6sV+lXFhwNWg+ldtcSFW85NtKlzURwu4lt/h7zLZX1fVeFB5sw==\n-----END AGE ENCRYPTED FILE-----\n" 8 - } 9 - ], 10 - "lastmodified": "2025-10-12T19:41:00Z", 11 - "mac": "ENC[AES256_GCM,data:LXirYDG+DGwmxhN0BEtVhlRpy2RogY7Rv+n0V2tIr3vJCVprUhVTaYZCZ1y/e25+P5EbaIl0xkTlnJoxZxKLDCvtktDD95mU6J+qU70wBA/zLv/Wvx9M/zCNYc946x13fJi45T8MgSCgYLFKlNj0OF2guRZfS//zaumvjSmhkZg=,iv:xwc61gRZi+qoYoN+J4u2JlZjRc7PlcCKVtT4vfqKD/s=,tag:B6X+xkKD+3lgP4eLuRK9lw==,type:str]", 12 - "unencrypted_suffix": "_unencrypted", 13 - "version": "3.9.4" 14 - } 15 - }
-15
modules/vic/secrets/localhost_run
··· 1 - { 2 - "data": "ENC[AES256_GCM,data:sX+Yft27rNP5/DPPM2k2sLBZUU4sCBzvCjLUQHPMP86ck6EroHQMemn+Mz45ZJdagM3L35XgHperMHeBK5asQhdMMoXDyzmfq84S1ajkRC9TblNUw53/sKT/AFXEqzg/WocUKmW5yjiyIkM9Zxkk5crPSJX1VJv5etkdnbpKIKnBGj15HvYw3IFsCr0MXxQPvnYG9E2NabgCL2Qi6hbQALXhll0jgCfMLJ5esfWV/EhqPd9t1VCntUlRUaOH6PLxQ57GQal23d6hOL/Qcyl8o2pu+zHLO+C6f/6FMIzn4p8Yho5ZCe9WjSYoJrjAePDuaSGkqmNcxdH4/dmioYaCR1yWsWQrmdPiiy+VLDOG90lTuGPFTUV/yZI5KfDtyBCaIdM67CB/ZuPp5LASRwXGVa/3LG7YfyK0K+aX7em5Y3+l9gHHkmYRdu3S7oxzeGa42C/zNsnUdg0vK1ulnUuriMMtHWdjy4Ce/k+QEeHausdv7yprXes9+6hQgtn01iU4jLbrRpazNKKhlIui+8HT,iv:sEwoROZF2d5WGb1maAMkpZwb95+4UdmWxoVVyYRnX3M=,tag:3cF2rFzc+5eqlpTUnIgK5g==,type:str]", 3 - "sops": { 4 - "age": [ 5 - { 6 - "recipient": "age1wmg6gkfar8nl9tr2y409vac6zqwnfjvjh6rxh2fl6x3tx4rzwdxqwj2r9e", 7 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYVEc5QXRBb2tOSWhieU5I\ncDg4ejRTVFpGOWpKMlBtTk1kenpGVytybUNZCjVkMHBVSFdDQlJYaXJ1MnN2TkZz\nYWJhR3JLU0FxbWJ0WEdvaU9BWEVxSVEKLS0tIEsxRGZFVHNPMzBSWmFmMmtXZXFO\nMFZyVkY0RVgzMVBBZHExeTcweHIyL2MKabkz85+0QlO3I/G3C232qD5Uiq3pwTXr\ntl8P3LJ3UeoMzzdWCbKHyAh8T4zgP+DsQ2ZiYu6zSm4jGR8u6Hsm8w==\n-----END AGE ENCRYPTED FILE-----\n" 8 - } 9 - ], 10 - "lastmodified": "2025-10-12T19:41:00Z", 11 - "mac": "ENC[AES256_GCM,data:DXJXpoC1KYfx3IjTr/GCo13zyrxr9eB/izP9MqDn/Tz0Cc07ILvbuDXc7OHhvhTr5IWr52RnxeuEYTI6qhZb+/FbfjGrsoMqfujYMPJ+ScBKvJiAPzF9l0eDCofoOjSBW3k39JPjf180B79wzV2TvFncx7hCUtMZRnbKBICESIY=,iv:AINLlEH8U/Iqxih2dmQQsfY2mhRNAh8tIRfL54vWyP8=,tag:1yqcrNHxfCSoxY4hPJqkmQ==,type:str]", 12 - "unencrypted_suffix": "_unencrypted", 13 - "version": "3.10.2" 14 - } 15 - }
-15
modules/vic/secrets/mordor
··· 1 - { 2 - "data": "ENC[AES256_GCM,data:K/RYRgQO5jf0Ax3pLZyVl8qEpFoDAZsPf0KkRJd/MpI8A92cSSz8jsfzfzNjsMhib0/x5S9f/AEm0G2uunWXjFjj5d0UQwii2lbrHWBuCfaXxK1CQxa1C5Pv0+ZO0hzP3Dt4ZsezHlxyg6D+ot27j5m2xZ+zhWyyhjp/mlDEEaxv9ntaqAe1LdL0mLliTVoQXrWN3IfNR9b0EokEeavdLMWKQjxQzZp06z6uxHpRxH1B+nZ4T7qQE4jbvNQxb5MawM9wj5fIVKfeK4DMPZBHNUwTXutNtnTuuSvlQZd37Ww4ObWJ34V7m0QniQWUwiWj7CXdBJ5HMSxJDu48HcPwV6ym/wcxyqMy0tD0pSQna6Z0MX93yc2Y+wAp8zylevPSQ1u9AzJ7mzlHc0w2xXaNpy/rO92BHGeCF/L+aKJ9Cn2ROkGaeLyDk9SFKu9uAEYDBHzfDCz5SyczT5cX4WC/J0y0ZBqV2J0fTyPXkI5c4fmtsGqBmJCLciQBXv4wiWEfCN5TW1hTOH24UdCJYSH4aJ2x/xuyK54sogGs8UB1M1hnnijBwccbuB2+TlPZA7rjNiqdAHxGbS49AMWF,iv:+Zm1AEglKHEH/TIzrZnFH+vDFQtQKrdFBGVzGx+IjlU=,tag:ZB/8m+UmOsWMVYCUX7fAlA==,type:str]", 3 - "sops": { 4 - "age": [ 5 - { 6 - "recipient": "age1wmg6gkfar8nl9tr2y409vac6zqwnfjvjh6rxh2fl6x3tx4rzwdxqwj2r9e", 7 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuRWlBMFBsZGs2WmcxVWMz\nTXV0aXpsUXA2UXhUVXV1UEh1dmtNYkJiVm4wCnU3eGNwRlNnNmE0OTV2em1LbVdz\naGl4TzdqbHczaHZ0L2FoNGd5ZGI1T0kKLS0tIDluQ3A3b3dYU21HaXo2TUtmK0U2\nRzRLS3BudmFMUHFrdGgzbUhEbDVnZ0kKaSaXwyPFpEsYVyRHOHbl/Zj+rXvXKqAu\nJiAwh39Rf/rXd9XGLC3C3qetvLM7T+dbiZ5+sA2W8mkoWOpO2I0igA==\n-----END AGE ENCRYPTED FILE-----\n" 8 - } 9 - ], 10 - "lastmodified": "2025-10-12T19:41:00Z", 11 - "mac": "ENC[AES256_GCM,data:l1H4ZwfdFb+PSAaRBCQpfR/era/l2YhZncojquHOBcvz8nmx0DmhxLf4iGrBrNwT/Kg1NLaAB8hfLKnf5aO1VjyEPkIL5BzhhHJoDb3Wxs0fnhrXIfR3j3CfqEcbruX3/2PgqzXXkMg6kJhKidhgefyak9Mnv9JrprHytrA5vXk=,iv:CJ2xXfB3cw6HuDqGo7EBOL7hOjDwCl6zefhfaNrjmvs=,tag:QtsKxaGnxe2Q9uTzMw5DnA==,type:str]", 12 - "unencrypted_suffix": "_unencrypted", 13 - "version": "3.9.4" 14 - } 15 - }
-15
modules/vic/secrets/nix-versions
··· 1 - { 2 - "data": "ENC[AES256_GCM,data:agiWDhFLwRVQ5T4M0Ziwg347236ZJHmfYkMgl+xYUNqA4EQap9DxguCyZasA5l6mUxELLe0QFG27aWhzoAiBeRHVEF5pTbJICUpdmm8amauN54GATGM+5AO2jEd63XdOdWwsrDGG3Eu0Wvpf/Fm7AS7iqHENvcPKOiUSWKwnDO11U+6aH0Jm/9bTg3fTiogFhreNkVYGHJ9KcIkSpbmH4l7CEE0iORCzkqSzcPLZNVpel7lj8HBnhSSna9gYcInJWgrn9ncWmiO+0DfYSgw9qongamM6vHcEi+5Ozb9tidRRR/RUL6invuMQiD4UnFgt+HicTIuDQSDV5DvqGv+gPlkHStk75X6OaOLDQ/OE/uViPqg1abeJWiGU7Xigfz/LhhT+2jjFcqgcP9OwnzqADxVO0atSXuikXUhwA5D5ZAD/d/+4/fQZ9EyDGSa2VNhaGneWcUP6cmkAEt0Pr9Teg9g9hbycscVhgWhC/zAKzD2cBHefc/yBqb6USfe4Ivt/6DyTfnIB3UsmATta7eIl,iv:crVwb2Sr694f047Dg35t86/gOy5XVzCKR7eyPB1v3CQ=,tag:qUdrSXzZS8C/FCDq7vZCCA==,type:str]", 3 - "sops": { 4 - "age": [ 5 - { 6 - "recipient": "age1wmg6gkfar8nl9tr2y409vac6zqwnfjvjh6rxh2fl6x3tx4rzwdxqwj2r9e", 7 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzT0hzOUNUMGdCVFJvVTQ1\nTlB4TVlpTE9uK3hjb0FqQ1pmMDBZcS9tdVVBCjJHekJNQXVOemR5RnZnNmVkOWFz\nQzFZSmZxb2ptWDlFMzh2TS9wY285TTAKLS0tIFVRdGZTRXFZNFE4L0Mvd2M1eVda\ncjV5MzFVek5KakRNc0FISC9HR2YwbGcKplpwbSoniheE/F3Ppn/jHm3+LY9lZOkp\nVO+78jwE6dDn/rPjzaQGm2NlZDaKwq10Z+oE4Y8aBU6K3HUHEaes1g==\n-----END AGE ENCRYPTED FILE-----\n" 8 - } 9 - ], 10 - "lastmodified": "2025-10-12T19:41:00Z", 11 - "mac": "ENC[AES256_GCM,data:XmtsxFFysd47M0sW0ABIB6H1gDNVbQuCvZzt6DamtMfehgdAGdtqCmB73sRTtph8slKItuO40ZWwSCTC+WbNc6qtYo2jCACVi/1EIldbQzZhsZKHx1SxgbyZpqImD9D5NOur0O1zYG/13QI+0wZLyM4BAWhSW0L/dHfdydTZ/2s=,iv:PHEFZ47IjyPLOz9GTzB3YsyetlcHLoxMialTBxVTGco=,tag:YPbu0U1qURuiZAMVW2K9Gg==,type:str]", 12 - "unencrypted_suffix": "_unencrypted", 13 - "version": "3.9.4" 14 - } 15 - }
-15
modules/vic/secrets/ssh-conf
··· 1 - { 2 - "data": "ENC[AES256_GCM,data:NiKpZtn2S1K8oH9VcjOQh9SdeiVMwUD72tOXTBh3geYbJTFg7Bqcyy3hb3esGO3CgVNo3e55ZMXPy2qnCsVZtplcaAbzS0UvX5R1jjadPkuwKTeyn6gfuCpgENhUFnuo/1rPFJYetcWY1kn0Oo5c0B4WI9+cWbY+r2Pn5b7bNYgqoPPD4UlrSq8aZ0hXc3Z/S8mO+ikrkazYnkIeKKqdbY7IDKRtUut3Vgqsj4GYpw1tYf2bAKr45KZoGtd19cmoES4crWfhQiyxNk9FY5qdC2K8KRRIczrl5RVQcPpWXmrbaclbs13uYW/aPIiPnXqCETrcm0u1bfS/0g==,iv:iSlNo/WSvc2G31qmwXxFECC+gOH9YK2gA7mzvsdVoU8=,tag:xYKPca8JlmSYwcfKMqk0Zg==,type:str]", 3 - "sops": { 4 - "age": [ 5 - { 6 - "recipient": "age1wmg6gkfar8nl9tr2y409vac6zqwnfjvjh6rxh2fl6x3tx4rzwdxqwj2r9e", 7 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUQVFHWmlWWkVCKzdPblB4\nc2U1MlVYS3NRQkE4Wjg1cWk1RUlFRGV5bUdzClNXWWpsdnY3dFhVYmk4b2FaU2V1\nK1FjRTh5UTh6VW1GUVJncmx6NG94N1UKLS0tIG5NQlBQZ0lHWFd6Y3ZNbUlHdk1x\nLytVOVZpdkV4NHBtaHh0dzNaZWs2b1UK67ygAcelFVispPIzjfWepJ6edImPSQG6\n4qDpB61hO2Uc46FTaSf6d9dtdeuMK/uSVdZAodoL0ASB4F0fddm2UQ==\n-----END AGE ENCRYPTED FILE-----\n" 8 - } 9 - ], 10 - "lastmodified": "2025-10-12T19:41:00Z", 11 - "mac": "ENC[AES256_GCM,data:IBFKDMEcr3Pmk4yl6ZGSmmq9bA2cXnb+8cfqWacjnWmHz3laS0I0u7EVe6AyT823Sidsc7bm/vuprRlE4XxRernxQ9MKGpSXwMFAbcAenqQoq/FSvNy4WX2QLJQFqtr6J4joU1fhrtKBF5nb4n45Kz8hfdT+KOvxrdUYPiNAdl4=,iv:Bz04c2pU1MQtLIT1ayWmaxB9tfIFHnv0z43wRczeRbM=,tag:d8tfIqRWfWn/48MKrgbv4g==,type:str]", 12 - "unencrypted_suffix": "_unencrypted", 13 - "version": "3.9.4" 14 - } 15 - }
-15
modules/vic/secrets/vix
··· 1 - { 2 - "data": "ENC[AES256_GCM,data:zHRABg1DaObXkLitsWh3cD6e3fYbPfBXyX6laXNW2y/6xtgQxXA3F8yanPRO/r8o3Z6MEx7v8n6BVhtICp7dRsLGiJ85d8OcmmtZY5RHMbHkPZXyuJjbErgQS1WNucY63x0XZheaiIHPZN+hV7CXw0EkFmYc7ij5fAMCGWu6U75LxUG4+mbCXIoGXmztrAVkdwFAIUwgwiobOld8fDqpC6lUs7Sph0gwXtkcCoVvein4d2CPFEHVTkg4r7AKSSZUPEq+L1zEimSusZkW3uHCCO8TsWhKS37uTVbLQBymQ8d+MJOZqNp7t+cCu9GRnEL/mKR7Yg3irRHrPh8HNyJVpIue5iBz8yqKf6BYJn6reKVY0qAtxbbOG3oYZbAFgN0OoM7h/Tz3uXx8hRATuiwIWcwr0YHKW5S7DFbc1Epr2skmTFUggQGPPugHN5QXtAanOQwWjNQtrKu78aeQjzmcX5qLzYfnWXwFGkHr2TLHer6zeEd5OYlwJS74VWQcaapDh0Bs,iv:A4LRsPwPU5uIkLFNE/tyqsTBJZmUa8FN3r7D7kS6hig=,tag:evfqlXKFgeItf6jVF7W5cw==,type:str]", 3 - "sops": { 4 - "age": [ 5 - { 6 - "recipient": "age1wmg6gkfar8nl9tr2y409vac6zqwnfjvjh6rxh2fl6x3tx4rzwdxqwj2r9e", 7 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLNHVzcmhmTzk4ZnpZdDR1\nTXFtMW9wZTBLbkdlWHB0ZGNwKzJrTEJBWGlvCnBsamU4SlpUSnJtRXNPdFlJM3dJ\nLzc2Tlkzd3Z6MVl2dnJhMXU5bDBESncKLS0tIGV6UW9nc01BbXV5dlBkRHBHZkdX\nYy9xWUc5QzNkYUhwYnVDUzBjMEVjc0EK5eCTPOekxLuCDMh81yF5UmS311IgX1cu\nT9qX0go7nKb8gRrXI4utFFWNvSqp64U2jGNh3I+rFgha1q4LHzzjUQ==\n-----END AGE ENCRYPTED FILE-----\n" 8 - } 9 - ], 10 - "lastmodified": "2025-10-12T19:41:00Z", 11 - "mac": "ENC[AES256_GCM,data:y3c7siKyJ4+hhPbQ2r3pzo8iG2/AGoW6WLPPMMRU1h6fmg8bUcfPhu8EYpEe19yaq5nUNlfxSqZOycg/WWc3Nx3u1j4MIHVJr5C4Yf5ODEr/CWwL4WaSOwBLFpS0gT72DTDKMdkOAoY6el9YtSz0wC+aO61MbDlAXMskWbXVWas=,iv:GlAye+exTA2p/NjJKWZGb1q/s6w+iOERkrN4WfwFzX4=,tag:QZdtaUUKspwytttFvVh5vA==,type:str]", 12 - "unencrypted_suffix": "_unencrypted", 13 - "version": "3.10.1" 14 - } 15 - }
-7
modules/vic/sops.yaml
··· 1 - keys: 2 - - &vic age1wmg6gkfar8nl9tr2y409vac6zqwnfjvjh6rxh2fl6x3tx4rzwdxqwj2r9e 3 - creation_rules: 4 - - path_regex: ^.*$ 5 - key_groups: 6 - - age: 7 - - *vic
-69
modules/vic/ssh.nix
··· 1 - let 2 - flake.modules.homeManager.vic = 3 - { 4 - lib, 5 - config, 6 - pkgs, 7 - ... 8 - }: 9 - { 10 - programs.ssh = { 11 - enable = true; 12 - addKeysToAgent = "yes"; 13 - controlMaster = "auto"; 14 - controlPath = "~/.ssh/socket-%r@%h:%p"; 15 - controlPersist = "10m"; 16 - includes = [ "~/.config/sops-nix/secrets/ssh/sops_ssh_config" "~/.ssh/config.local" ]; 17 - 18 - matchBlocks = { 19 - "github.com" = { 20 - identityFile = "~/.ssh/id_ed25519"; 21 - extraOptions.ControlPersist = "no"; 22 - }; 23 - 24 - "edge" = { 25 - host = "edge"; 26 - hostname = "192.168.192.168"; 27 - }; 28 - 29 - "uptermd.upterm.dev" = { 30 - forwardAgent = true; 31 - serverAliveInterval = 10; 32 - serverAliveCountMax = 6; 33 - extraOptions.ControlPath = "~/.ssh/upterm-%C"; 34 - setEnv.TERM = "xterm-256color"; 35 - localForwards = [ 36 - { 37 - bind.port = 8000; # http 38 - host.address = "127.0.0.1"; 39 - host.port = 8000; 40 - } 41 - { 42 - bind.port = 5900; # vnc 43 - host.address = "127.0.0.1"; 44 - host.port = 5900; 45 - } 46 - ]; 47 - remoteForwards = [ 48 - { 49 - bind.port = 5000; # sops 50 - host.address = "127.0.0.1"; 51 - host.port = 5000; 52 - } 53 - ]; 54 - }; 55 - 56 - }; 57 - }; 58 - 59 - services.ssh-agent.enable = pkgs.stdenv.isLinux; 60 - 61 - home.activation.link-ssh-id = lib.hm.dag.entryAfter [ "link-flake" "sops-nix" "reloadSystemd" ] '' 62 - run ln -sf "${config.sops.secrets."ssh/id_ed25519".path}" $HOME/.ssh/id_ed25519 63 - run ln -sf "${config.sops.secrets."ssh/localhost_run".path}" $HOME/.ssh/id_localhost_run 64 - ''; 65 - }; 66 - in 67 - { 68 - inherit flake; 69 - }
+20
modules/vic/terminals.nix
··· 1 + { 2 + vix.vic.provides.terminals = _: { 3 + 4 + darwin = 5 + { pkgs, ... }: 6 + { 7 + home.packages = [ pkgs.iterm2 ]; 8 + }; 9 + 10 + homeManager = 11 + { pkgs, ... }: 12 + { 13 + home.packages = [ 14 + pkgs.ghostty 15 + pkgs.wezterm 16 + ]; 17 + }; 18 + 19 + }; 20 + }
-16
modules/vic/unfree.nix
··· 1 - { inputs, ... }: 2 - let 3 - flake.modules.homeManager.vic.imports = [ 4 - unfree 5 - ]; 6 - 7 - unfree = inputs.self.lib.unfree-module [ 8 - "cursor" 9 - "vscode" 10 - "anydesk" 11 - "copilot-language-server" 12 - ]; 13 - in 14 - { 15 - inherit flake; 16 - }
-60
modules/vic/user.nix
··· 1 - { inputs, ... }: 2 - let 3 - flake.modules.nixos.vic.imports = [ 4 - user 5 - linux 6 - autologin 7 - home 8 - ]; 9 - 10 - flake.modules.darwin.vic.imports = [ 11 - user 12 - darwin 13 - home 14 - ]; 15 - 16 - home.home-manager.users.vic.imports = [ 17 - inputs.self.homeModules.vic 18 - ]; 19 - 20 - autologin = 21 - { config, lib, ... }: 22 - lib.mkIf config.services.displayManager.enable { 23 - services.displayManager.autoLogin.enable = true; 24 - services.displayManager.autoLogin.user = "vic"; 25 - }; 26 - 27 - linux = { 28 - users.users.vic = { 29 - isNormalUser = true; 30 - extraGroups = [ 31 - "networkmanager" 32 - "wheel" 33 - ]; 34 - }; 35 - }; 36 - 37 - darwin.system.primaryUser = "vic"; 38 - 39 - user = 40 - { pkgs, ... }: 41 - { 42 - home-manager.backupFileExtension = "backup"; 43 - 44 - programs.fish.enable = true; 45 - 46 - fonts.packages = with pkgs.nerd-fonts; [ 47 - victor-mono 48 - jetbrains-mono 49 - inconsolata 50 - ]; 51 - 52 - users.users.vic = { 53 - description = "vic"; 54 - shell = pkgs.fish; 55 - }; 56 - }; 57 - in 58 - { 59 - inherit flake; 60 - }
+64
modules/vic/vim-btw.nix
··· 1 + { 2 + vix.vic.provides.vim-btw = _: { 3 + 4 + homeManager = 5 + { 6 + pkgs, 7 + lib, 8 + config, 9 + ... 10 + }: 11 + let 12 + 13 + vim_variant = 14 + name: inputs: 15 + pkgs.writeShellApplication { 16 + inherit name; 17 + runtimeEnv = { 18 + NVIM_APPNAME = name; 19 + }; 20 + runtimeInputs = [ config.programs.neovim.package ] ++ inputs; 21 + text = ''exec nvim "$@"''; 22 + }; 23 + 24 + astrovim = vim_variant "astrovim" [ ]; 25 + lazyvim = vim_variant "lazyvim" [ ]; 26 + vscode-vim = vim_variant "vscode-vim" [ ]; 27 + 28 + in 29 + { 30 + home.packages = [ 31 + lazyvim 32 + vscode-vim 33 + astrovim 34 + pkgs.neovim-remote 35 + ]; 36 + 37 + home.sessionVariables.VISUAL = "vim"; 38 + home.sessionVariables.EDITOR = "vim"; 39 + 40 + programs.neovim.enable = true; 41 + programs.neovim.viAlias = true; 42 + programs.neovim.vimAlias = true; 43 + programs.neovim.withNodeJs = true; 44 + 45 + programs.neovim.extraPackages = 46 + (with pkgs; [ 47 + sqlite 48 + treefmt 49 + gcc 50 + gnumake 51 + ]) 52 + ++ (lib.optionals pkgs.stdenv.isLinux [ pkgs.zig ]); 53 + 54 + programs.neovim.plugins = with pkgs; [ 55 + vimPlugins.nvim-treesitter-parsers.go 56 + vimPlugins.nvim-treesitter-parsers.rust 57 + vimPlugins.nvim-treesitter-parsers.yaml 58 + vimPlugins.nvim-treesitter-parsers.nix 59 + pkgs.vimPlugins.nvim-treesitter.withAllGrammars 60 + ]; 61 + }; 62 + 63 + }; 64 + }
+7
modules/vix.nix
··· 1 + { config, lib, ... }: 2 + { 3 + den.aspects.vix.provides = { }; 4 + _module.args.vix = config.den.aspects.vix.provides; 5 + flake.vix = config.den.aspects.vix.provides; 6 + imports = [ (lib.mkAliasOptionModule [ "vix" ] [ "den" "aspects" "vix" "provides" ]) ]; 7 + }
+13
modules/vm.nix
··· 1 + { inputs, ... }: 2 + { 3 + perSystem = 4 + { pkgs, ... }: 5 + { 6 + packages.vm = pkgs.writeShellApplication { 7 + name = "vm"; 8 + text = '' 9 + ${inputs.self.nixosConfigurations.nargun-vm.config.system.build.vm}/bin/run-nargun-vm-vm "$@" 10 + ''; 11 + }; 12 + }; 13 + }
+17
non-dendritic/hosts/nargun/_nixos/filesystems.nix
··· 1 + { 2 + fileSystems."/" = { 3 + device = "/dev/disk/by-uuid/5e0a5652-9af6-4590-9bd1-be059e339b84"; 4 + fsType = "ext4"; 5 + }; 6 + 7 + fileSystems."/boot" = { 8 + device = "/dev/disk/by-uuid/3902-2085"; 9 + fsType = "vfat"; 10 + options = [ 11 + "fmask=0077" 12 + "dmask=0077" 13 + ]; 14 + }; 15 + 16 + swapDevices = [ { device = "/dev/disk/by-uuid/3be2776b-3153-443b-95b8-0fbd06becb75"; } ]; 17 + }
+9
non-dendritic/hosts/nargun/_nixos/hardware-configuration.nix
··· 1 + { 2 + boot.initrd.availableKernelModules = [ 3 + "nvme" 4 + "xhci_pci" 5 + "usb_storage" 6 + "sd_mod" 7 + "sdhci_pci" 8 + ]; 9 + }