-21
.leaderrc
-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
+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
-
[](https://github.com/vic/vix/actions/workflows/build-systems.yaml)
4
-
[](https://app.cachix.org/cache/vix)
5
-
[](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
+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
+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
+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
+10
modules/community/autologin.nix
+7
modules/community/bluetooth.nix
+7
modules/community/bluetooth.nix
+6
modules/community/bootable.nix
+6
modules/community/bootable.nix
+16
modules/community/dev-laptop.nix
+16
modules/community/dev-laptop.nix
-74
modules/community/features/_macos-keys.nix
-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
-7
modules/community/features/all-firmware.nix
-16
modules/community/features/bootable-private.nix
-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
-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
-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
-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
-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
-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
modules/community/features/kvm+amd.nix
modules/community/kvm-amd.nix
-8
modules/community/features/kvm+intel.nix
-8
modules/community/features/kvm+intel.nix
-14
modules/community/features/macos-keys.nix
-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
+4
-3
modules/community/features/niri-desktop.nix
modules/community/niri-desktop.nix
-40
modules/community/features/nix-setttings.nix
-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
-9
modules/community/features/nixos.nix
-29
modules/community/features/nvidia.nix
-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
-6
modules/community/features/platform.nix
-31
modules/community/features/rdesk+inputleap+anydesk.nix
-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
-4
modules/community/features/unfree.nix
-13
modules/community/features/wl-broadcom.nix
-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
-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
-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
-10
modules/community/flake/formatter.nix
-4
modules/community/flake/systems.nix
-4
modules/community/flake/systems.nix
-15
modules/community/home/nix-index.nix
-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
-8
modules/community/home/nix-registry.nix
-23
modules/community/home/vscode-server.nix
-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
+5
modules/community/host-name.nix
+9
modules/community/hw-detect.nix
+9
modules/community/hw-detect.nix
-12
modules/community/lib/+hosts-by-system.nix
-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
-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
-8
modules/community/lib/+unfree-module.nix
-7
modules/community/lib/option.nix
-7
modules/community/lib/option.nix
+6
modules/community/mexico.nix
+6
modules/community/mexico.nix
+8
modules/community/networking.nix
+8
modules/community/networking.nix
-51
modules/community/packages/+gh-flake-update.nix
-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
-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
+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
+11
modules/community/sound.nix
+7
modules/community/state-version.nix
+7
modules/community/state-version.nix
+23
modules/community/unfree.nix
+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
+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
+9
modules/community/xserver.nix
+7
modules/dendritic.nix
+7
modules/dendritic.nix
-10
modules/flake/dendritic.nix
-10
modules/flake/dendritic.nix
-16
modules/flake/fmt-excludes.nix
-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
-12
modules/flake/imports.nix
-15
modules/flake/nixConfig.nix
-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
-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
+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
-10
modules/hosts/annatar/configuration.nix
-6
modules/hosts/bert/darwin-configuration.nix
-6
modules/hosts/bert/darwin-configuration.nix
-7
modules/hosts/bill/configuration.nix
-7
modules/hosts/bill/configuration.nix
-40
modules/hosts/bombadil/configuration.nix
-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
-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
-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
-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
+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
-16
modules/hosts/nargun/configuration.nix
-21
modules/hosts/nargun/filesystems.nix
-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
-13
modules/hosts/nargun/hardware-configuration.nix
-24
modules/hosts/nienna/configuration.nix
-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
-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
-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
-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
-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
-11
modules/hosts/smaug/hardware-configuration.nix
-7
modules/hosts/tom/configuration.nix
-7
modules/hosts/tom/configuration.nix
-7
modules/hosts/varda/darwin-configuration.nix
-7
modules/hosts/varda/darwin-configuration.nix
-8
modules/hosts/yavanna/darwin-configuration.nix
-8
modules/hosts/yavanna/darwin-configuration.nix
-22
modules/packages/edgevpn.nix
-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
-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
-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
-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
-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
+16
modules/vic/admin.nix
-80
modules/vic/apps.nix
-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
+14
modules/vic/browser.nix
+21
modules/vic/cli-tui.nix
+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
+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
-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
-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
+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
-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
+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
-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
+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
+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
+13
modules/vic/fonts.nix
-75
modules/vic/git.nix
-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
+5
modules/vic/hm-backup.nix
-29
modules/vic/home.nix
-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
-9
modules/vic/imports.nix
-225
modules/vic/jujutsu.nix
-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
+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
-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
-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
-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
-13
modules/vic/packages/vic-sops-rotate.nix
-33
modules/vic/rdesk.nix
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-7
modules/vic/sops.yaml
-69
modules/vic/ssh.nix
-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
+20
modules/vic/terminals.nix
-16
modules/vic/unfree.nix
-16
modules/vic/unfree.nix
-60
modules/vic/user.nix
-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
+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
+7
modules/vix.nix
+13
modules/vm.nix
+13
modules/vm.nix
+17
non-dendritic/hosts/nargun/_nixos/filesystems.nix
+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
+
}