tangled
alpha
login
or
join now
bwc9876.dev
/
nixos-config
1
fork
atom
Flake for my NixOS devices
1
fork
atom
overview
issues
pulls
pipelines
Start out with most hm modules
bwc9876.dev
4 months ago
51743186
b3901834
verified
This commit was signed with the committer's
known signature
.
bwc9876.dev
SSH Key Fingerprint:
SHA256:DanMEP/RNlSC7pAVbnXO6wzQV00rqyKj053tz4uH5gQ=
+1830
-429
78 changed files
expand all
collapse all
unified
split
flake.lock
flake.nix
homeModules
cat.nix
comma.nix
imperm.nix
music.nix
nushell.nix
nvim.nix
pfp.nix
starship.nix
yazi.nix
lib.nix
nixosModules
base
nushell.nix
starship.nix
yazi.nix
black-mesa-cache.nix
dev
android.nix
oldNixosModules
base
base.nix
boot.nix
nix.nix
personal.nix
shell.nix
theming.nix
default.nix
dev
android.nix
dotnet.nix
git.nix
haskell.nix
js.nix
misc.nix
nix.nix
nvim.nix
python.nix
rust.nix
dev+graphics
code.nix
misc.nix
nvim.nix
flatpak.nix
fun+graphics.nix
fun.nix
games+graphics.nix
graphics
apps.nix
audio.nix
firefox.nix
fonts.nix
greeter.nix
hypr.nix
lock.nix
news.nix
printing.nix
qmplay2.nix
shell.nix
swaync.nix
theming.nix
waybar.nix
wezterm.nix
xdg.nix
hypervisor+graphics.nix
hypervisor.nix
imperm+secureboot.nix
imperm.nix
latest-linux.nix
mc-server.nix
music.nix
networking.nix
normalboot.nix
podman.nix
secureboot.nix
ssh.nix
sync.nix
vm.nix
oldSystemConfigs
aperture.nix
black-mesa.nix
installer.nix
mann-co.nix
test.nix
res
nushellCompletions
carapace.nu
fish.nu
+34
-34
flake.lock
···
31
31
]
32
32
},
33
33
"locked": {
34
34
-
"lastModified": 1760953099,
35
35
-
"narHash": "sha256-sOKx2YcHa+lWEvaEOIGqLN2WWk1Wf5z6KM02tdfhMtw=",
34
34
+
"lastModified": 1761553912,
35
35
+
"narHash": "sha256-3UOEQPBlZo9OixT9L1zoD67QheopTG8/EfRPGKyP9bg=",
36
36
"owner": "catppuccin",
37
37
"repo": "nix",
38
38
-
"rev": "f5b21876888265d2fee7fb0640d1b66a1c1c6503",
38
38
+
"rev": "7b42c91911c143ae3ea32a79cc8582b5920f24e3",
39
39
"type": "github"
40
40
},
41
41
"original": {
···
128
128
"rust-analyzer-src": "rust-analyzer-src_2"
129
129
},
130
130
"locked": {
131
131
-
"lastModified": 1760769695,
132
132
-
"narHash": "sha256-eU4HnBCVuBg+c5UninnTh65VrbkkQ8HOjCaC3NDZLYM=",
131
131
+
"lastModified": 1761460927,
132
132
+
"narHash": "sha256-9BUyZfPBh3mh58fmpseqfMAB73PNm+iwl8UpjCbThk0=",
133
133
"owner": "nix-community",
134
134
"repo": "fenix",
135
135
-
"rev": "f4cb0863b5d772b7b378ea456ac86c359303dfa7",
135
135
+
"rev": "0f19d25425626ea42bded065029f45ca5f526ca1",
136
136
"type": "github"
137
137
},
138
138
"original": {
···
283
283
]
284
284
},
285
285
"locked": {
286
286
-
"lastModified": 1761155197,
287
287
-
"narHash": "sha256-3NcqyhZkWrqY0qlnXqtV82vGwaQ7Be3Ll1w7+NPzq8w=",
286
286
+
"lastModified": 1761636064,
287
287
+
"narHash": "sha256-xAbEYL5gqPnBfXOIGToPjF6E0n9RSe8YJ6E2/ePrPaM=",
288
288
"owner": "nix-community",
289
289
"repo": "flakelight",
290
290
-
"rev": "5afd70555737c62786b69a64980e7bb1c1947956",
290
290
+
"rev": "2c621bc66465c457b64b016bb00d575ff2e51094",
291
291
"type": "github"
292
292
},
293
293
"original": {
···
325
325
]
326
326
},
327
327
"locked": {
328
328
-
"lastModified": 1760359755,
329
329
-
"narHash": "sha256-k7sJPDPio2vQuqSJ/3nOkBy6I2YqZvJYNhJJARLSxrg=",
328
328
+
"lastModified": 1761155197,
329
329
+
"narHash": "sha256-3NcqyhZkWrqY0qlnXqtV82vGwaQ7Be3Ll1w7+NPzq8w=",
330
330
"owner": "nix-community",
331
331
"repo": "flakelight",
332
332
-
"rev": "d8d6ce0774c3df8f7b58b4cd4b5cf4b63b4a9fe6",
332
332
+
"rev": "5afd70555737c62786b69a64980e7bb1c1947956",
333
333
"type": "github"
334
334
},
335
335
"original": {
···
410
410
]
411
411
},
412
412
"locked": {
413
413
-
"lastModified": 1761081701,
414
414
-
"narHash": "sha256-IwpfaKg5c/WWQiy8b5QGaVPMvoEQ2J6kpwRFdpVpBNQ=",
413
413
+
"lastModified": 1761660375,
414
414
+
"narHash": "sha256-04hmZlwuV8OjzvsBvFMnmcyC5IWcVnIU1V8i0P60jXU=",
415
415
"owner": "nix-community",
416
416
"repo": "home-manager",
417
417
-
"rev": "9b4a2a7c4fbd75b422f00794af02d6edb4d9d315",
417
417
+
"rev": "d47259b685b1145b610fd8c28e7498304a97fa78",
418
418
"type": "github"
419
419
},
420
420
"original": {
···
498
498
]
499
499
},
500
500
"locked": {
501
501
-
"lastModified": 1760846226,
502
502
-
"narHash": "sha256-xmU8kAsRprJiTGBTaGrwmjBP3AMA9ltlrxHKFuy5JWc=",
501
501
+
"lastModified": 1761451000,
502
502
+
"narHash": "sha256-qBJL6xEIjqYq9zOcG2vf2nPTeVBppNJzvO0LuQWMwMo=",
503
503
"owner": "nix-community",
504
504
"repo": "nix-index-database",
505
505
-
"rev": "5024e1901239a76b7bf94a4cd27f3507e639d49e",
505
505
+
"rev": "ed6b293161b378a7368cda38659eb8d3d9a0dac4",
506
506
"type": "github"
507
507
},
508
508
"original": {
···
528
528
},
529
529
"nixpkgs": {
530
530
"locked": {
531
531
-
"lastModified": 1760878510,
532
532
-
"narHash": "sha256-K5Osef2qexezUfs0alLvZ7nQFTGS9DL2oTVsIXsqLgs=",
531
531
+
"lastModified": 1761373498,
532
532
+
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
533
533
"owner": "NixOS",
534
534
"repo": "nixpkgs",
535
535
-
"rev": "5e2a59a5b1a82f89f2c7e598302a9cacebb72a67",
535
535
+
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
536
536
"type": "github"
537
537
},
538
538
"original": {
···
552
552
"systems": "systems_2"
553
553
},
554
554
"locked": {
555
555
-
"lastModified": 1761169815,
556
556
-
"narHash": "sha256-a8JUU1NIey01VNHndAqAkP76JdESscXJpWITZTlKHWE=",
555
555
+
"lastModified": 1761657569,
556
556
+
"narHash": "sha256-2D4Tw5Vp52RU5amnBvq0/z+zgZqafwl4bhg8dJBBjXI=",
557
557
"owner": "nix-community",
558
558
"repo": "nixvim",
559
559
-
"rev": "9a057ef01a832df20f1e5b19db2f0b86b2c7e89a",
559
559
+
"rev": "03c0dabb9a63f52bc2ebf571f3755720df1ca81e",
560
560
"type": "github"
561
561
},
562
562
"original": {
···
573
573
]
574
574
},
575
575
"locked": {
576
576
-
"lastModified": 1760636396,
577
577
-
"narHash": "sha256-QHYUWrSpEd040JVBAoCK873nCNemT3gHNePka37FbpU=",
576
576
+
"lastModified": 1761235019,
577
577
+
"narHash": "sha256-jkseFs9Ty4x8FyVDzyFLh6enwIDBdcfZrUjE++5W9uA=",
578
578
"owner": "Bwc9876",
579
579
"repo": "nu_plugin_dbus",
580
580
-
"rev": "090be12d30371b46b9e7cbdb8ec8906a6fe16e60",
580
580
+
"rev": "47e1e232e44b38fc975839656124c74897ed3425",
581
581
"type": "github"
582
582
},
583
583
"original": {
···
724
724
"rust-analyzer-src_2": {
725
725
"flake": false,
726
726
"locked": {
727
727
-
"lastModified": 1760714286,
728
728
-
"narHash": "sha256-WOt9KquZ1BXjMcVyHpMeliqNRL6BfRvBHFGfRDriDx4=",
727
727
+
"lastModified": 1761412493,
728
728
+
"narHash": "sha256-Ig2yUk5ek3vSFR+m+rtmg0kJyRLPYol55QgsYsoSGI4=",
729
729
"owner": "rust-lang",
730
730
"repo": "rust-analyzer",
731
731
-
"rev": "1e20331e42449dfc0b44bce84147a06772d045d7",
731
731
+
"rev": "daf1cd953fe878226e3a5b0356468f5a61995bf0",
732
732
"type": "github"
733
733
},
734
734
"original": {
···
777
777
]
778
778
},
779
779
"locked": {
780
780
-
"lastModified": 1761008491,
781
781
-
"narHash": "sha256-gkZ9PYgx5mt+2F1++shCndW1U3GLpdnyHiRPfm0+pG8=",
780
780
+
"lastModified": 1761502163,
781
781
+
"narHash": "sha256-QOM9FyWS++87ejU9DiQpGb2SOLT2EJ0LBpNuxREZBvs=",
782
782
"ref": "refs/heads/main",
783
783
-
"rev": "0c5b9b010b5f70a43095a24bab4c1203706858bd",
784
784
-
"revCount": 270,
783
783
+
"rev": "68c3a8496acd185a1ab3863c6c7fd973077123ae",
784
784
+
"revCount": 274,
785
785
"type": "git",
786
786
"url": "https://codeberg.org/spoonbaker/mono"
787
787
},
+4
-4
flake.nix
···
56
56
gh-grader-preview,
57
57
}:
58
58
flakelight ./. {
59
59
-
imports = [
60
60
-
spoon.flakelightModules.repl
61
61
-
spoon.flakelightModules.ubercheck
62
62
-
];
59
59
+
# imports = [
60
60
+
# spoon.flakelightModules.repl
61
61
+
# spoon.flakelightModules.ubercheck
62
62
+
# ];
63
63
inherit inputs;
64
64
formatters = pkgs: {
65
65
"*.nix" = "alejandra .";
+18
homeModules/cat.nix
···
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
inputs,
5
5
+
...
6
6
+
}:
7
7
+
{
8
8
+
imports = [ inputs.catppuccin.homeModules.catppuccin ];
9
9
+
10
10
+
options.cow.cat.enable = lib.mkEnableOption "Catppuccin Home Customizations";
11
11
+
12
12
+
config = lib.mkIf config.cow.cat.enable {
13
13
+
catppuccin = {
14
14
+
enable = true;
15
15
+
mako.enable = false;
16
16
+
};
17
17
+
};
18
18
+
}
+19
homeModules/comma.nix
···
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
inputs,
5
5
+
pkgs,
6
6
+
...
7
7
+
}:
8
8
+
{
9
9
+
imports = [ inputs.nix-index-db.homeModules.nix-index ];
10
10
+
11
11
+
options.cow.comma.enable = lib.mkEnableOption "Command With DB";
12
12
+
13
13
+
config = lib.mkIf config.cow.comma.enable {
14
14
+
nix-index.enable = true;
15
15
+
home.packages = with pkgs; [
16
16
+
comma-with-db
17
17
+
];
18
18
+
};
19
19
+
}
+25
homeModules/imperm.nix
···
1
1
+
{ config, lib, ... }:
2
2
+
let
3
3
+
listOfDirs =
4
4
+
desc:
5
5
+
lib.mkOption {
6
6
+
type = lib.types.listOF lib.types.str;
7
7
+
};
8
8
+
in
9
9
+
{
10
10
+
options.cow.imperm = {
11
11
+
keepLibraries = lib.mkEnableOption "persisting library (Documents, Pictures, etc.) directories";
12
12
+
keepCache = listOfDirs "List of directories to persist if impermanence is enabled. These directories are *not* meant to be backed up";
13
13
+
keep = listOfDirs "List of directories to persist if impermanence is enabled. These directories should be backed up";
14
14
+
};
15
15
+
16
16
+
config = config.cow.imperm.keepLibraries {
17
17
+
cow.imperm.keep = [
18
18
+
"Downloads"
19
19
+
"Music"
20
20
+
"Videos"
21
21
+
"Pictures"
22
22
+
"Documents"
23
23
+
];
24
24
+
};
25
25
+
}
+372
homeModules/music.nix
···
1
1
+
{
2
2
+
lib,
3
3
+
config,
4
4
+
inputs',
5
5
+
...
6
6
+
}:
7
7
+
{
8
8
+
options.cow.music = {
9
9
+
enable = lib.mkEnableOption "music playback with MPD and rmpc + customizations";
10
10
+
};
11
11
+
12
12
+
config = lib.mkIf config.cow.music.enable (
13
13
+
let
14
14
+
cat =
15
15
+
(builtins.fromJSON (builtins.readFile "${inputs'.catppuccin.packages.palette}/palette.json"))
16
16
+
.${config.catppuccin.flavor}.colors;
17
17
+
accent = cat.${config.catppuccin.accent};
18
18
+
themeFile = ''
19
19
+
#![enable(implicit_some)]
20
20
+
#![enable(unwrap_newtypes)]
21
21
+
#![enable(unwrap_variant_newtypes)]
22
22
+
(
23
23
+
default_album_art_path: None,
24
24
+
draw_borders: true,
25
25
+
show_song_table_header: true,
26
26
+
symbols: (song: "", dir: "", playlist: "", marker: "\u{e0b0}"),
27
27
+
layout: Split(
28
28
+
direction: Vertical,
29
29
+
panes: [
30
30
+
(
31
31
+
size: "3",
32
32
+
pane: Pane(Tabs),
33
33
+
),
34
34
+
(
35
35
+
size: "4",
36
36
+
pane: Split(
37
37
+
direction: Horizontal,
38
38
+
panes: [
39
39
+
(
40
40
+
size: "100%",
41
41
+
pane: Split(
42
42
+
direction: Vertical,
43
43
+
panes: [
44
44
+
(
45
45
+
size: "4",
46
46
+
borders: "ALL",
47
47
+
pane: Pane(Header),
48
48
+
),
49
49
+
]
50
50
+
)
51
51
+
),
52
52
+
]
53
53
+
),
54
54
+
),
55
55
+
(
56
56
+
size: "100%",
57
57
+
pane: Split(
58
58
+
direction: Horizontal,
59
59
+
panes: [
60
60
+
(
61
61
+
size: "100%",
62
62
+
borders: "ALL",
63
63
+
pane: Pane(TabContent),
64
64
+
),
65
65
+
]
66
66
+
),
67
67
+
),
68
68
+
(
69
69
+
size: "3",
70
70
+
borders: "ALL",
71
71
+
pane: Pane(ProgressBar),
72
72
+
),
73
73
+
],
74
74
+
),
75
75
+
progress_bar: (
76
76
+
symbols: ["[", "=", ">", "-", "]"],
77
77
+
track_style: (bg: "${cat.mantle.hex}"),
78
78
+
elapsed_style: (fg: "${accent.hex}", bg: "${cat.mantle.hex}"),
79
79
+
thumb_style: (fg: "${accent.hex}", bg: "${cat.mantle.hex}"),
80
80
+
),
81
81
+
scrollbar: (
82
82
+
symbols: ["│", "█", "▲", "▼"],
83
83
+
track_style: (),
84
84
+
ends_style: (),
85
85
+
thumb_style: (fg: "${cat.teal.hex}"),
86
86
+
),
87
87
+
browser_column_widths: [20, 38, 42],
88
88
+
text_color: "${cat.text.hex}",
89
89
+
background_color: "${cat.base.hex}",
90
90
+
header_background_color: "${cat.mantle.hex}",
91
91
+
modal_background_color: None,
92
92
+
modal_backdrop: true,
93
93
+
tab_bar: (active_style: (fg: "black", bg: "${accent.hex}", modifiers: "Bold"), inactive_style: ()),
94
94
+
borders_style: (fg: "${cat.overlay0.hex}"),
95
95
+
highlighted_item_style: (fg: "${accent.hex}", modifiers: "Bold"),
96
96
+
current_item_style: (fg: "black", bg: "${cat.teal.hex}", modifiers: "Bold"),
97
97
+
highlight_border_style: (fg: "${cat.teal.hex}"),
98
98
+
cava: (
99
99
+
bar_symbols: ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'],
100
100
+
inverted_bar_symbols: ['▔', '🮂', '🮃', '▀', '🮄', '🮅', '🮆', '█'],
101
101
+
bar_width: 1,
102
102
+
bar_spacing: 1,
103
103
+
orientation: Bottom,
104
104
+
bar_color: Gradient({
105
105
+
0: "${cat.lavender.hex}",
106
106
+
10: "${cat.blue.hex}",
107
107
+
20: "${cat.sapphire.hex}",
108
108
+
30: "${cat.teal.hex}",
109
109
+
40: "${cat.green.hex}",
110
110
+
50: "${cat.yellow.hex}",
111
111
+
60: "${cat.maroon.hex}",
112
112
+
70: "${cat.red.hex}",
113
113
+
80: "${cat.mauve.hex}",
114
114
+
90: "${cat.pink.hex}",
115
115
+
100: "${cat.flamingo.hex}",
116
116
+
}),
117
117
+
),
118
118
+
song_table_format: [
119
119
+
(
120
120
+
prop: (kind: Property(Artist), style: (fg: "${cat.teal.hex}"), default: (kind: Text("Unknown"))),
121
121
+
width: "50%",
122
122
+
alignment: Right,
123
123
+
),
124
124
+
(
125
125
+
prop: (kind: Text("-"), style: (fg: "${cat.teal.hex}"), default: (kind: Text("Unknown"))),
126
126
+
width: "1",
127
127
+
alignment: Center,
128
128
+
),
129
129
+
(
130
130
+
prop: (kind: Property(Title), style: (fg: "${accent.hex}"), default: (kind: Text("Unknown"))),
131
131
+
width: "50%",
132
132
+
),
133
133
+
],
134
134
+
header: (
135
135
+
rows: [
136
136
+
(
137
137
+
left: [
138
138
+
(kind: Text("["), style: (fg: "${cat.teal.hex}", modifiers: "Bold")),
139
139
+
(kind: Property(Status(State)), style: (fg: "${cat.teal.hex}", modifiers: "Bold")),
140
140
+
(kind: Text("]"), style: (fg: "${cat.teal.hex}", modifiers: "Bold"))
141
141
+
],
142
142
+
center: [
143
143
+
(kind: Property(Song(Artist)), style: (fg: "${cat.yellow.hex}", modifiers: "Bold"),
144
144
+
default: (kind: Text("Unknown"), style: (fg: "${cat.yellow.hex}", modifiers: "Bold"))
145
145
+
),
146
146
+
(kind: Text(" - ")),
147
147
+
(kind: Property(Song(Title)), style: (fg: "${accent.hex}", modifiers: "Bold"),
148
148
+
default: (kind: Text("No Song"), style: (fg: "${accent.hex}", modifiers: "Bold"))
149
149
+
)
150
150
+
],
151
151
+
right: [
152
152
+
(kind: Text("Vol: "), style: (fg: "${cat.teal.hex}", modifiers: "Bold")),
153
153
+
(kind: Property(Status(Volume)), style: (fg: "${cat.teal.hex}", modifiers: "Bold")),
154
154
+
(kind: Text("% "), style: (fg: "${cat.teal.hex}", modifiers: "Bold"))
155
155
+
]
156
156
+
)
157
157
+
],
158
158
+
),
159
159
+
)
160
160
+
'';
161
161
+
configFile = ''
162
162
+
#![enable(implicit_some)]
163
163
+
#![enable(unwrap_newtypes)]
164
164
+
#![enable(unwrap_variant_newtypes)]
165
165
+
(
166
166
+
address: "127.0.0.1:6600",
167
167
+
password: None,
168
168
+
theme: ${if config.cow.cat.enable then ''Some("catppuccin")'' else "None"},
169
169
+
cache_dir: None,
170
170
+
lyrics_dir: "${config.services.mpd.musicDirectory}",
171
171
+
on_song_change: None,
172
172
+
volume_step: 5,
173
173
+
max_fps: 30,
174
174
+
scrolloff: 0,
175
175
+
wrap_navigation: true,
176
176
+
enable_mouse: true,
177
177
+
enable_config_hot_reload: true,
178
178
+
status_update_interval_ms: 1000,
179
179
+
rewind_to_start_sec: None,
180
180
+
reflect_changes_to_playlist: false,
181
181
+
select_current_song_on_change: false,
182
182
+
browser_song_sort: [Disc, Track, Artist, Title],
183
183
+
directories_sort: SortFormat(group_by_type: true, reverse: false),
184
184
+
album_art: (
185
185
+
method: Auto,
186
186
+
max_size_px: (width: 1200, height: 1200),
187
187
+
disabled_protocols: ["http://", "https://"],
188
188
+
vertical_align: Center,
189
189
+
horizontal_align: Center,
190
190
+
),
191
191
+
cava: (
192
192
+
framerate: 60, // default 60
193
193
+
autosens: true, // default true
194
194
+
sensitivity: 100, // default 100
195
195
+
lower_cutoff_freq: 50, // not passed to cava if not provided
196
196
+
higher_cutoff_freq: 10000, // not passed to cava if not provided
197
197
+
input: (
198
198
+
method: Fifo,
199
199
+
source: "/tmp/mpd.fifo",
200
200
+
sample_rate: 44100,
201
201
+
channels: 2,
202
202
+
sample_bits: 16,
203
203
+
),
204
204
+
smoothing: (
205
205
+
noise_reduction: 77, // default 77
206
206
+
monstercat: false, // default false
207
207
+
waves: false, // default false
208
208
+
),
209
209
+
eq: []
210
210
+
),
211
211
+
keybinds: (
212
212
+
global: {
213
213
+
":": CommandMode,
214
214
+
",": VolumeDown,
215
215
+
"s": Stop,
216
216
+
".": VolumeUp,
217
217
+
"<Tab>": NextTab,
218
218
+
"<S-Tab>": PreviousTab,
219
219
+
"1": SwitchToTab("Queue"),
220
220
+
"2": SwitchToTab("Directories"),
221
221
+
"3": SwitchToTab("Search"),
222
222
+
"q": Quit,
223
223
+
">": NextTrack,
224
224
+
"p": TogglePause,
225
225
+
"<": PreviousTrack,
226
226
+
"f": SeekForward,
227
227
+
"z": ToggleRepeat,
228
228
+
"x": ToggleRandom,
229
229
+
"c": ToggleConsume,
230
230
+
"v": ToggleSingle,
231
231
+
"b": SeekBack,
232
232
+
"~": ShowHelp,
233
233
+
"u": Update,
234
234
+
"U": Rescan,
235
235
+
"I": ShowCurrentSongInfo,
236
236
+
"O": ShowOutputs,
237
237
+
"P": ShowDecoders,
238
238
+
"R": AddRandom,
239
239
+
},
240
240
+
navigation: {
241
241
+
"k": Up,
242
242
+
"j": Down,
243
243
+
"h": Left,
244
244
+
"l": Right,
245
245
+
"<Up>": Up,
246
246
+
"<Down>": Down,
247
247
+
"<Left>": Left,
248
248
+
"<Right>": Right,
249
249
+
"<C-k>": PaneUp,
250
250
+
"<C-j>": PaneDown,
251
251
+
"<C-h>": PaneLeft,
252
252
+
"<C-l>": PaneRight,
253
253
+
"<C-u>": UpHalf,
254
254
+
"N": PreviousResult,
255
255
+
"a": Add,
256
256
+
"A": AddAll,
257
257
+
"r": Rename,
258
258
+
"n": NextResult,
259
259
+
"g": Top,
260
260
+
"<Space>": Select,
261
261
+
"<C-Space>": InvertSelection,
262
262
+
"G": Bottom,
263
263
+
"<CR>": Confirm,
264
264
+
"i": FocusInput,
265
265
+
"J": MoveDown,
266
266
+
"<C-d>": DownHalf,
267
267
+
"/": EnterSearch,
268
268
+
"<C-c>": Close,
269
269
+
"<Esc>": Close,
270
270
+
"K": MoveUp,
271
271
+
"D": Delete,
272
272
+
"B": ShowInfo,
273
273
+
},
274
274
+
queue: {
275
275
+
"D": DeleteAll,
276
276
+
"<CR>": Play,
277
277
+
"<C-s>": Save,
278
278
+
"a": AddToPlaylist,
279
279
+
"d": Delete,
280
280
+
"C": JumpToCurrent,
281
281
+
"X": Shuffle,
282
282
+
},
283
283
+
),
284
284
+
search: (
285
285
+
case_sensitive: false,
286
286
+
mode: Contains,
287
287
+
tags: [
288
288
+
(value: "any", label: "Any Tag"),
289
289
+
(value: "artist", label: "Artist"),
290
290
+
(value: "album", label: "Album"),
291
291
+
(value: "albumartist", label: "Album Artist"),
292
292
+
(value: "title", label: "Title"),
293
293
+
(value: "filename", label: "Filename"),
294
294
+
(value: "genre", label: "Genre"),
295
295
+
],
296
296
+
),
297
297
+
artists: (
298
298
+
album_display_mode: SplitByDate,
299
299
+
album_sort_by: Date,
300
300
+
),
301
301
+
tabs: [
302
302
+
(
303
303
+
name: "Queue",
304
304
+
pane: Split(
305
305
+
direction: Horizontal,
306
306
+
panes: [
307
307
+
(size: "60%", pane: Split(
308
308
+
direction: Vertical,
309
309
+
panes: [
310
310
+
(size: "50%", pane: Pane(Queue)),
311
311
+
(size: "50%", borders: "TOP", pane: Pane(Cava)),
312
312
+
],
313
313
+
)),
314
314
+
(size: "40%", borders: "LEFT", pane: Split(
315
315
+
direction: Vertical,
316
316
+
panes: [
317
317
+
(size: "70%", pane: Pane(AlbumArt)),
318
318
+
(size: "30%", borders: "TOP", pane: Pane(Lyrics)),
319
319
+
],
320
320
+
)),
321
321
+
],
322
322
+
),
323
323
+
),
324
324
+
(
325
325
+
name: "Directories",
326
326
+
pane: Pane(Directories),
327
327
+
),
328
328
+
(
329
329
+
name: "Search",
330
330
+
pane: Pane(Search),
331
331
+
),
332
332
+
],
333
333
+
)
334
334
+
'';
335
335
+
in
336
336
+
{
337
337
+
home-manager.users.bean = {
338
338
+
programs.cava = {
339
339
+
enable = true;
340
340
+
};
341
341
+
342
342
+
xdg.configFile = lib.mkIf config.cow.cat.enable {
343
343
+
"rmpc/themes/catppuccin.ron".text = themeFile;
344
344
+
};
345
345
+
346
346
+
programs.rmpc = {
347
347
+
enable = true;
348
348
+
config = configFile;
349
349
+
};
350
350
+
351
351
+
services = {
352
352
+
mpd = {
353
353
+
enable = true;
354
354
+
extraConfig = ''
355
355
+
audio_output {
356
356
+
type "fifo"
357
357
+
name "mpd_fifo"
358
358
+
path "/tmp/mpd.fifo"
359
359
+
format "44100:16:2"
360
360
+
}
361
361
+
audio_output {
362
362
+
type "pipewire"
363
363
+
name "Pipewire"
364
364
+
}
365
365
+
'';
366
366
+
};
367
367
+
mpdris2.enable = true;
368
368
+
};
369
369
+
};
370
370
+
}
371
371
+
);
372
372
+
}
+105
homeModules/nushell.nix
···
1
1
+
{
2
2
+
config,
3
3
+
pkgs,
4
4
+
lib,
5
5
+
...
6
6
+
}:
7
7
+
{
8
8
+
options.cow.nushell = {
9
9
+
enable = lib.mkEnableOption "Nushell + Customizations";
10
10
+
commandNotFound = lib.mkEnableOption "Custom Nix Command Not Found for Nushell";
11
11
+
completers = {
12
12
+
carapace = (lib.mkEnableOption "Carapace Completer In Nushell") // {
13
13
+
default = true;
14
14
+
};
15
15
+
fish = (lib.mkEnableOption "Fish Completions In Nushell") // {
16
16
+
default = true;
17
17
+
};
18
18
+
};
19
19
+
};
20
20
+
21
21
+
config =
22
22
+
let
23
23
+
conf = config.cow.nushell;
24
24
+
in
25
25
+
lib.mkIf conf.enable {
26
26
+
programs = {
27
27
+
command-not-found.enable = !conf.commandNotFound;
28
28
+
nushell =
29
29
+
let
30
30
+
fishComplete = builtins.replaceStrings [ "__fish__" ] [ "${pkgs.fish}/bin/fish" ] (
31
31
+
lib.fileContents ../res/nushellCompletions/fish.nu
32
32
+
);
33
33
+
carapaceComplete = builtins.replaceStrings [ "__carapace__" ] [ "${pkgs.carapace}/bin/carapace" ] (
34
34
+
lib.fileContents ../res/nushellCompletions/carapace.nu
35
35
+
);
36
36
+
completions = ''
37
37
+
{|spans|
38
38
+
# if the current command is an alias, get it's expansion
39
39
+
let expanded_alias = (scope aliases | where name == $spans.0 | get -o 0 | get -o expansion)
40
40
+
41
41
+
# overwrite
42
42
+
43
43
+
let spans = (if $expanded_alias != null {
44
44
+
# put the first word of the expanded alias first in the span
45
45
+
$spans | skip 1 | prepend ($expanded_alias | split row " ")
46
46
+
} else { $spans })
47
47
+
48
48
+
match $spans.0 {
49
49
+
${lib.optional conf.completers.fish ''
50
50
+
nu => ${fishComplete}
51
51
+
git => ${fishComplete}
52
52
+
''}
53
53
+
_ => ${
54
54
+
if conf.completers.carapace then
55
55
+
carapaceComplete
56
56
+
else if conf.completers.fish then
57
57
+
fishComplete
58
58
+
else
59
59
+
"{|spans| []}"
60
60
+
}
61
61
+
} | do $in $spans
62
62
+
}
63
63
+
'';
64
64
+
cnf = lib.fileContents ../res/command_not_found.nu;
65
65
+
nu_config =
66
66
+
let
67
67
+
doCompletions = builtins.any (x: x) (builtins.attrValues conf.completers);
68
68
+
in
69
69
+
''
70
70
+
{
71
71
+
show_banner: false,
72
72
+
completions: {
73
73
+
external: {
74
74
+
enable: ${doCompletions}
75
75
+
completer: ${if doCompletions then completions else "{|spans| []}"}
76
76
+
},
77
77
+
},
78
78
+
hooks: {
79
79
+
${lib.optional conf.commandNotFound ''
80
80
+
command_not_found: ${cnf}
81
81
+
''}
82
82
+
}
83
83
+
}
84
84
+
'';
85
85
+
init-starship = pkgs.runCommand "starship-init" { } ''
86
86
+
${pkgs.starship}/bin/starship init nu > $out
87
87
+
'';
88
88
+
in
89
89
+
{
90
90
+
enable = true;
91
91
+
configFile = ''
92
92
+
$env.config = ${nu_config}
93
93
+
94
94
+
${lib.optional config.cow.starship.enable ''
95
95
+
source ${init-starship}
96
96
+
''}
97
97
+
'';
98
98
+
shellAliases = {
99
99
+
"py" = "python";
100
100
+
"🥺" = "sudo";
101
101
+
};
102
102
+
};
103
103
+
};
104
104
+
};
105
105
+
}
+926
homeModules/nvim.nix
···
1
1
+
{
2
2
+
pkgs,
3
3
+
inputs,
4
4
+
config,
5
5
+
lib,
6
6
+
...
7
7
+
}:
8
8
+
{
9
9
+
imports = [ inputs.nixvim.homeModules.nixvim ];
10
10
+
11
11
+
options.cow.neovim.enable = lib.mkEnableOption "Neovim + Nixvim + Customizations";
12
12
+
13
13
+
config = lib.mkIf config.cow.neovim.enable {
14
14
+
home.packages = with pkgs; [
15
15
+
ripgrep
16
16
+
fd
17
17
+
];
18
18
+
19
19
+
programs.neovide = lib.mkIf config.cow.gdi.enable {
20
20
+
enable = true;
21
21
+
settings = {
22
22
+
fork = true;
23
23
+
font = {
24
24
+
normal = [ { family = "monospace"; } ];
25
25
+
size = 18.0;
26
26
+
};
27
27
+
title-hidden = false;
28
28
+
};
29
29
+
};
30
30
+
31
31
+
programs.nixvim = {
32
32
+
enable = true;
33
33
+
enableMan = false;
34
34
+
defaultEditor = true;
35
35
+
viAlias = true;
36
36
+
vimAlias = true;
37
37
+
38
38
+
nixpkgs.pkgs = pkgs;
39
39
+
clipboard.providers.wl-copy.enable = config.cow.gdi.enable;
40
40
+
41
41
+
globals.mapleader = " ";
42
42
+
43
43
+
colorschemes.catppuccin = lib.mkIf config.cow.cat.enable {
44
44
+
enable = true;
45
45
+
settings = {
46
46
+
inherit (config.catppuccin) flavor;
47
47
+
no_underline = false;
48
48
+
no_bold = false;
49
49
+
no_italics = false;
50
50
+
term_colors = true;
51
51
+
# transparent_background = true;
52
52
+
integrations = {
53
53
+
alpha = true;
54
54
+
dropbar.enabled = true;
55
55
+
fidget = true;
56
56
+
markdown = true;
57
57
+
dap = true;
58
58
+
ufo = true;
59
59
+
rainbow_delimiters = true;
60
60
+
lsp_trouble = true;
61
61
+
which_key = true;
62
62
+
telescope.enabled = true;
63
63
+
treesitter = true;
64
64
+
lsp_saga = true;
65
65
+
illuminate = {
66
66
+
enabled = true;
67
67
+
lsp = true;
68
68
+
};
69
69
+
gitsigns = true;
70
70
+
neotree = true;
71
71
+
native_lsp = {
72
72
+
enabled = true;
73
73
+
inlay_hints = {
74
74
+
background = true;
75
75
+
};
76
76
+
virtual_text = {
77
77
+
errors = [ "italic" ];
78
78
+
hints = [ "italic" ];
79
79
+
information = [ "italic" ];
80
80
+
warnings = [ "italic" ];
81
81
+
ok = [ "italic" ];
82
82
+
};
83
83
+
underlines = {
84
84
+
errors = [ "underline" ];
85
85
+
hints = [ "underline" ];
86
86
+
information = [ "underline" ];
87
87
+
warnings = [ "underline" ];
88
88
+
};
89
89
+
};
90
90
+
};
91
91
+
};
92
92
+
};
93
93
+
94
94
+
extraConfigLua = ''
95
95
+
vim.diagnostic.config({
96
96
+
signs = {
97
97
+
text = {
98
98
+
[vim.diagnostic.severity.ERROR] = "",
99
99
+
[vim.diagnostic.severity.WARN] = "",
100
100
+
},
101
101
+
},
102
102
+
})
103
103
+
vim.g.neovide_cursor_vfx_mode = "pixiedust"
104
104
+
105
105
+
-- require("satellite").setup({})
106
106
+
'';
107
107
+
108
108
+
autoGroups = {
109
109
+
restore_cursor = { };
110
110
+
open_neotree = { };
111
111
+
};
112
112
+
113
113
+
filetype.extension.mdx = "mdx";
114
114
+
115
115
+
opts = {
116
116
+
number = true;
117
117
+
relativenumber = true;
118
118
+
smartindent = true;
119
119
+
cursorline = true;
120
120
+
showtabline = 2;
121
121
+
breakindent = true;
122
122
+
fillchars.__raw = ''[[eob: ,fold: ,foldopen:,foldsep: ,foldclose:]]'';
123
123
+
foldcolumn = "1";
124
124
+
foldlevel = 10;
125
125
+
foldlevelstart = 10;
126
126
+
foldenable = true;
127
127
+
mouse = "";
128
128
+
};
129
129
+
130
130
+
autoCmd = [
131
131
+
{
132
132
+
group = "restore_cursor";
133
133
+
event = [ "BufReadPost" ];
134
134
+
pattern = "*";
135
135
+
callback.__raw = ''
136
136
+
function()
137
137
+
if
138
138
+
vim.fn.line "'\"" > 1
139
139
+
and vim.fn.line "'\"" <= vim.fn.line "$"
140
140
+
and vim.bo.filetype ~= "commit"
141
141
+
and vim.fn.index({ "xxd", "gitrebase" }, vim.bo.filetype) == -1
142
142
+
then
143
143
+
vim.cmd "normal! g`\""
144
144
+
end
145
145
+
end
146
146
+
'';
147
147
+
}
148
148
+
{
149
149
+
group = "open_neotree";
150
150
+
event = [ "BufRead" ];
151
151
+
pattern = "*";
152
152
+
once = true;
153
153
+
callback.__raw = ''
154
154
+
function()
155
155
+
if
156
156
+
vim.bo.filetype ~= "alpha"
157
157
+
and (not vim.g.neotree_opened)
158
158
+
then
159
159
+
vim.cmd "Neotree show"
160
160
+
vim.g.neotree_opened = true
161
161
+
end
162
162
+
end
163
163
+
'';
164
164
+
}
165
165
+
];
166
166
+
167
167
+
performance = {
168
168
+
byteCompileLua = {
169
169
+
enable = true;
170
170
+
nvimRuntime = true;
171
171
+
plugins = true;
172
172
+
};
173
173
+
combinePlugins = {
174
174
+
enable = true;
175
175
+
};
176
176
+
};
177
177
+
178
178
+
keymaps =
179
179
+
let
180
180
+
prefixMap =
181
181
+
pre: maps:
182
182
+
builtins.map (k: {
183
183
+
action = "<cmd>${k.action}<cr>";
184
184
+
key = "${pre}${k.key}";
185
185
+
options = k.options;
186
186
+
}) maps;
187
187
+
in
188
188
+
lib.lists.flatten (
189
189
+
builtins.map (g: if builtins.hasAttr "group" g then prefixMap g.prefix g.keys else g) [
190
190
+
{
191
191
+
action = ''"+p'';
192
192
+
key = "<C-S-V>";
193
193
+
options.desc = "Paste from system clipboard";
194
194
+
}
195
195
+
{
196
196
+
action = ''"+y'';
197
197
+
key = "<C-S-C>";
198
198
+
options.desc = "Copy to system clipboard";
199
199
+
}
200
200
+
{
201
201
+
action = ''"+x'';
202
202
+
key = "<C-S-X>";
203
203
+
options.desc = "Cut to system clipboard";
204
204
+
}
205
205
+
{
206
206
+
action = ''<cmd>Format<cr>'';
207
207
+
key = "<C-S-I>";
208
208
+
options.desc = "Format Buffer";
209
209
+
}
210
210
+
{
211
211
+
group = "Tab Navigation";
212
212
+
prefix = "<Tab>";
213
213
+
keys = [
214
214
+
{
215
215
+
action = "BufferLineCycleNext";
216
216
+
key = "e";
217
217
+
options.desc = "Next Tab";
218
218
+
}
219
219
+
{
220
220
+
action = "BufferLineCyclePrev";
221
221
+
key = "q";
222
222
+
options.desc = "Previous Tab";
223
223
+
}
224
224
+
{
225
225
+
action = "BufferLinePick";
226
226
+
key = "<Tab>";
227
227
+
options.desc = "Pick Tab and Switch";
228
228
+
}
229
229
+
{
230
230
+
action = "Neotree toggle";
231
231
+
key = "t";
232
232
+
options.desc = "Toggle Neotree";
233
233
+
}
234
234
+
];
235
235
+
}
236
236
+
{
237
237
+
group = "Tab Closing";
238
238
+
prefix = "<S-Tab>";
239
239
+
keys = [
240
240
+
{
241
241
+
action = "BufferLineCloseLeft";
242
242
+
key = "q";
243
243
+
options.desc = "Close Tab Left";
244
244
+
}
245
245
+
{
246
246
+
action = "BufferLineCloseRight";
247
247
+
key = "e";
248
248
+
options.desc = "Close Tab Right";
249
249
+
}
250
250
+
{
251
251
+
action = "BufferLinePickClose";
252
252
+
key = "<Tab>";
253
253
+
options.desc = "Pick Tab and Close";
254
254
+
}
255
255
+
{
256
256
+
action = "BufferLineCloseOthers";
257
257
+
key = "w";
258
258
+
options.desc = "Close Other Tabs";
259
259
+
}
260
260
+
];
261
261
+
}
262
262
+
{
263
263
+
action = "<cmd>Bdelete<cr>";
264
264
+
key = "<C-q>";
265
265
+
options.desc = "Close Current Buffer";
266
266
+
}
267
267
+
{
268
268
+
group = "LSP Actions";
269
269
+
prefix = "<C-.>";
270
270
+
keys = [
271
271
+
{
272
272
+
action = "Lspsaga code_action code_action";
273
273
+
key = "a";
274
274
+
options.desc = "Code Actions";
275
275
+
}
276
276
+
{
277
277
+
action = "Lspsaga rename";
278
278
+
key = "r";
279
279
+
options.desc = "LSP Rename";
280
280
+
}
281
281
+
{
282
282
+
action = "Lspsaga diagnostic_jump_next";
283
283
+
key = "e";
284
284
+
options.desc = "Next Diagnostic";
285
285
+
}
286
286
+
{
287
287
+
action = "Lspsaga diagnostic_jump_previous";
288
288
+
key = "E";
289
289
+
options.desc = "Previous Diagnostic";
290
290
+
}
291
291
+
{
292
292
+
action = "Lspsaga goto_definition";
293
293
+
key = "d";
294
294
+
options.desc = "Jump to Definition";
295
295
+
}
296
296
+
{
297
297
+
action = "Lspsaga peek_definition";
298
298
+
key = "D";
299
299
+
options.desc = "Peek Definition";
300
300
+
}
301
301
+
{
302
302
+
action = "Lspsaga finder ref";
303
303
+
key = "fr";
304
304
+
options.desc = "Find References";
305
305
+
}
306
306
+
{
307
307
+
action = "Lspsaga finder imp";
308
308
+
key = "fi";
309
309
+
options.desc = "Find Implementations";
310
310
+
}
311
311
+
{
312
312
+
action = "Lspsaga finder def";
313
313
+
key = "fd";
314
314
+
options.desc = "Find Definitions";
315
315
+
}
316
316
+
{
317
317
+
action = "Lspsaga finder";
318
318
+
key = "ff";
319
319
+
options.desc = "Finder";
320
320
+
}
321
321
+
{
322
322
+
action = "Lspsaga hover_doc";
323
323
+
key = "h";
324
324
+
options.desc = "Hover Doc";
325
325
+
}
326
326
+
];
327
327
+
}
328
328
+
{
329
329
+
action = "<cmd>Telescope<cr>";
330
330
+
key = "<leader><leader>";
331
331
+
options.desc = "Telescope Launch";
332
332
+
}
333
333
+
{
334
334
+
action.__raw = "[[<C-\\><C-n><C-w>]]";
335
335
+
mode = [ "t" ];
336
336
+
key = "<C-w>";
337
337
+
}
338
338
+
{
339
339
+
action.__raw = "[[<C-\\><C-n>]]";
340
340
+
mode = [ "t" ];
341
341
+
key = "<esc>";
342
342
+
}
343
343
+
{
344
344
+
action = "<cmd>WhichKey<cr>";
345
345
+
key = "<C-/>";
346
346
+
}
347
347
+
]
348
348
+
);
349
349
+
350
350
+
extraPlugins = with pkgs.vimPlugins; [
351
351
+
{ plugin = pkgs.nvim-mdx; }
352
352
+
{ plugin = satellite-nvim; }
353
353
+
{ plugin = flatten-nvim; }
354
354
+
{ plugin = tiny-devicons-auto-colors-nvim; }
355
355
+
];
356
356
+
357
357
+
plugins = {
358
358
+
telescope = {
359
359
+
enable = true;
360
360
+
settings.defaults = {
361
361
+
layout_config.prompt_position = "top";
362
362
+
};
363
363
+
extensions = {
364
364
+
file-browser.enable = true;
365
365
+
ui-select.enable = true;
366
366
+
undo.enable = true;
367
367
+
};
368
368
+
keymaps = lib.fix (self: {
369
369
+
"<leader>u" = {
370
370
+
action = "undo";
371
371
+
options.desc = "Undo Tree";
372
372
+
};
373
373
+
"<leader>c" = {
374
374
+
action = "commands";
375
375
+
options.desc = "Browse Commands";
376
376
+
};
377
377
+
"<leader>w" = {
378
378
+
action = "spell_suggest";
379
379
+
options.desc = "Spell Suggest";
380
380
+
};
381
381
+
"<leader>s" = {
382
382
+
action = "lsp_document_symbols";
383
383
+
options.desc = "LSP Symbols";
384
384
+
};
385
385
+
"<leader>t" = {
386
386
+
action = "treesitter";
387
387
+
options.desc = "Treesitter Symbols";
388
388
+
};
389
389
+
"<leader>f" = {
390
390
+
action = "find_files";
391
391
+
options.desc = "Files";
392
392
+
};
393
393
+
"<leader>gs" = {
394
394
+
action = "git_status";
395
395
+
options.desc = "Git Status";
396
396
+
};
397
397
+
"<leader>gb" = {
398
398
+
action = "git_branches";
399
399
+
options.desc = "Git Branches";
400
400
+
};
401
401
+
"<leader>gc" = {
402
402
+
action = "git_commits";
403
403
+
options.desc = "Git Commits";
404
404
+
};
405
405
+
"<leader>r" = {
406
406
+
action = "oldfiles";
407
407
+
options.desc = "Recent Files";
408
408
+
};
409
409
+
"<leader>l" = self."<C-S-F>";
410
410
+
"<C-S-F>" = {
411
411
+
action = "live_grep";
412
412
+
options.desc = "Live Grep";
413
413
+
};
414
414
+
});
415
415
+
};
416
416
+
417
417
+
alpha = {
418
418
+
enable = true;
419
419
+
opts = {
420
420
+
position = "center";
421
421
+
};
422
422
+
layout =
423
423
+
let
424
424
+
o = {
425
425
+
position = "center";
426
426
+
};
427
427
+
txt = s: {
428
428
+
type = "text";
429
429
+
val = s;
430
430
+
opts = {
431
431
+
hl = "Keyword";
432
432
+
}
433
433
+
// o;
434
434
+
};
435
435
+
grp = g: {
436
436
+
type = "group";
437
437
+
val = g;
438
438
+
opts.spacing = 1;
439
439
+
};
440
440
+
btn =
441
441
+
{
442
442
+
val,
443
443
+
onClick,
444
444
+
...
445
445
+
}:
446
446
+
{
447
447
+
type = "button";
448
448
+
inherit val;
449
449
+
opts = o;
450
450
+
on_press.__raw = "function() vim.cmd[[${onClick}]] end";
451
451
+
};
452
452
+
cmd =
453
453
+
{
454
454
+
command,
455
455
+
width,
456
456
+
height,
457
457
+
}:
458
458
+
{
459
459
+
type = "terminal";
460
460
+
inherit command width height;
461
461
+
opts = o;
462
462
+
};
463
463
+
pad = {
464
464
+
type = "padding";
465
465
+
val = 2;
466
466
+
};
467
467
+
in
468
468
+
[
469
469
+
pad
470
470
+
pad
471
471
+
]
472
472
+
++ (lib.intersperse pad [
473
473
+
(cmd {
474
474
+
command = ''
475
475
+
${pkgs.toilet}/bin/toilet " NIXVIM " -f mono12 -F border | ${pkgs.lolcat}/bin/lolcat -f
476
476
+
'';
477
477
+
# Hardcoding to prevent IFD
478
478
+
width = 83; # (builtins.stringLength (lib.trim (builtins.elemAt (lib.splitString "\n" bannerText) 1))) - 3;
479
479
+
height = 12; # (builtins.length (lib.splitString "\n" bannerText)) - 1;
480
480
+
})
481
481
+
(grp [
482
482
+
(btn {
483
483
+
val = " Terminal";
484
484
+
onClick = "ToggleTerm";
485
485
+
})
486
486
+
(btn {
487
487
+
val = " Quit";
488
488
+
onClick = "q";
489
489
+
})
490
490
+
])
491
491
+
(grp [
492
492
+
(txt " Neovim Version ${pkgs.neovim.version}")
493
493
+
(txt " NixVim Rev ${builtins.substring 0 5 inputs.nixvim.rev}")
494
494
+
])
495
495
+
])
496
496
+
++ [ pad ];
497
497
+
};
498
498
+
499
499
+
trouble = {
500
500
+
enable = true;
501
501
+
};
502
502
+
503
503
+
toggleterm = {
504
504
+
enable = true;
505
505
+
luaConfig.post = ''
506
506
+
local flatten = require('flatten')
507
507
+
508
508
+
---@type Terminal?
509
509
+
local saved_terminal
510
510
+
511
511
+
flatten.setup({
512
512
+
hooks = {
513
513
+
should_block = function(argv)
514
514
+
return vim.tbl_contains(argv, "-b")
515
515
+
end,
516
516
+
pre_open = function()
517
517
+
local term = require("toggleterm.terminal")
518
518
+
local termid = term.get_focused_id()
519
519
+
saved_terminal = term.get(termid)
520
520
+
end,
521
521
+
post_open = function(opts)
522
522
+
if saved_terminal then
523
523
+
saved_terminal:close()
524
524
+
else
525
525
+
vim.api.nvim_set_current_win(opts.winnr)
526
526
+
end
527
527
+
528
528
+
if opts.filetype == "gitcommit" or opts.filetype == "gitrebase" then
529
529
+
vim.api.nvim_create_autocmd("BufWritePost", {
530
530
+
buffer = opts.bufnr,
531
531
+
once = true,
532
532
+
callback = vim.schedule_wrap(function()
533
533
+
require('bufdelete').bufdelete(opts.bufnr, true)
534
534
+
end),
535
535
+
})
536
536
+
end
537
537
+
end,
538
538
+
block_end = function()
539
539
+
vim.schedule(function()
540
540
+
if saved_terminal then
541
541
+
saved_terminal:open()
542
542
+
saved_terminal = nil
543
543
+
end
544
544
+
end)
545
545
+
end,
546
546
+
},
547
547
+
window = {
548
548
+
open = "alternate",
549
549
+
},
550
550
+
})
551
551
+
'';
552
552
+
settings = {
553
553
+
size = 20;
554
554
+
open_mapping = "[[<C-x>]]";
555
555
+
direction = "horizontal";
556
556
+
start_in_insert = true;
557
557
+
insert_mappings = true;
558
558
+
terminal_mappings = true;
559
559
+
};
560
560
+
};
561
561
+
562
562
+
treesitter = {
563
563
+
enable = true;
564
564
+
luaConfig.post = ''
565
565
+
require('mdx').setup()
566
566
+
'';
567
567
+
settings = {
568
568
+
highlight.enable = true;
569
569
+
};
570
570
+
};
571
571
+
572
572
+
illuminate.enable = true;
573
573
+
cursorline.enable = true;
574
574
+
575
575
+
neocord = {
576
576
+
enable = true;
577
577
+
settings.logo = "https://raw.githubusercontent.com/IogaMaster/neovim/main/.github/assets/nixvim-dark.webp";
578
578
+
};
579
579
+
580
580
+
bufdelete.enable = true;
581
581
+
582
582
+
bufferline = {
583
583
+
enable = true;
584
584
+
settings.highlights.__raw = ''
585
585
+
require("catppuccin.special.bufferline").get_theme()
586
586
+
'';
587
587
+
settings.options = {
588
588
+
indicator.style = "none";
589
589
+
show_buffer_close_icons = false;
590
590
+
show_close_icon = false;
591
591
+
offsets = [
592
592
+
{
593
593
+
filetype = "neo-tree";
594
594
+
highlight = "String";
595
595
+
text = " Neovim";
596
596
+
text_align = "center";
597
597
+
# separator = true;
598
598
+
}
599
599
+
];
600
600
+
separator_style = "slant";
601
601
+
close_command.__raw = ''require('bufdelete').bufdelete'';
602
602
+
hover = {
603
603
+
enabled = true;
604
604
+
delay = 150;
605
605
+
reveal = [ "close" ];
606
606
+
};
607
607
+
sort_by = "insert_at_end";
608
608
+
diagnostics = "nvim_lsp";
609
609
+
diagnostics_indicator.__raw = ''
610
610
+
function(count, level, diagnostics_dict, context)
611
611
+
local icon = level:match("error") and " " or " "
612
612
+
return " " .. icon .. count
613
613
+
end
614
614
+
'';
615
615
+
};
616
616
+
};
617
617
+
618
618
+
statuscol = {
619
619
+
enable = true;
620
620
+
settings.segments =
621
621
+
let
622
622
+
dispCond = {
623
623
+
__raw = ''
624
624
+
function(ln)
625
625
+
return vim.bo.filetype ~= "neo-tree"
626
626
+
end
627
627
+
'';
628
628
+
};
629
629
+
in
630
630
+
[
631
631
+
{
632
632
+
click = "v:lua.ScSa";
633
633
+
condition = [
634
634
+
dispCond
635
635
+
];
636
636
+
text = [
637
637
+
"%s"
638
638
+
];
639
639
+
}
640
640
+
{
641
641
+
click = "v:lua.ScLa";
642
642
+
condition = [ dispCond ];
643
643
+
text = [
644
644
+
{
645
645
+
__raw = "require('statuscol.builtin').lnumfunc";
646
646
+
}
647
647
+
];
648
648
+
}
649
649
+
{
650
650
+
click = "v:lua.ScFa";
651
651
+
condition = [
652
652
+
dispCond
653
653
+
{
654
654
+
__raw = "require('statuscol.builtin').not_empty";
655
655
+
}
656
656
+
];
657
657
+
text = [
658
658
+
{
659
659
+
__raw = "require('statuscol.builtin').foldfunc";
660
660
+
}
661
661
+
" "
662
662
+
];
663
663
+
}
664
664
+
];
665
665
+
};
666
666
+
667
667
+
dropbar = {
668
668
+
enable = true;
669
669
+
settings = {
670
670
+
bar.padding.right = 5;
671
671
+
bar.padding.left = 1;
672
672
+
};
673
673
+
};
674
674
+
675
675
+
nvim-ufo = {
676
676
+
enable = true;
677
677
+
};
678
678
+
gitsigns.enable = true;
679
679
+
680
680
+
lualine = {
681
681
+
enable = true;
682
682
+
settings = {
683
683
+
extensions = [
684
684
+
"trouble"
685
685
+
"toggleterm"
686
686
+
];
687
687
+
688
688
+
options = {
689
689
+
theme = "catppuccin";
690
690
+
disabled_filetypes = [ "neo-tree" ];
691
691
+
ignore_focus = [ "neo-tree" ];
692
692
+
};
693
693
+
};
694
694
+
};
695
695
+
696
696
+
nix-develop = {
697
697
+
enable = true;
698
698
+
package = pkgs.vimPlugins.nix-develop-nvim.overrideAttrs (
699
699
+
prev: next: {
700
700
+
src = pkgs.fetchFromGitHub {
701
701
+
owner = "Bwc9876";
702
702
+
repo = "nix-develop.nvim";
703
703
+
rev = "089cd52191ccbb3726594e21cd96567af6088dd5";
704
704
+
sha256 = "sha256-EIEJk8/IAuG+UICUJ2F8QakgRpFrQ1ezDSJ79NAVuD8=";
705
705
+
};
706
706
+
}
707
707
+
);
708
708
+
};
709
709
+
710
710
+
neo-tree = {
711
711
+
enable = true;
712
712
+
settings = {
713
713
+
hide_root_node = false;
714
714
+
add_blank_line_at_top = true;
715
715
+
default_component_configs = {
716
716
+
container.right_padding = 2;
717
717
+
name.trailing_slash = true;
718
718
+
indent = {
719
719
+
indent_size = 2;
720
720
+
with_expanders = true;
721
721
+
};
722
722
+
};
723
723
+
window.width = 40;
724
724
+
auto_clean_after_session_restore = true;
725
725
+
close_if_last_window = true;
726
726
+
filesystem.components.name.__raw = ''
727
727
+
function(config, node, state)
728
728
+
local components = require('neo-tree.sources.common.components')
729
729
+
local name = components.name(config, node, state)
730
730
+
if node:get_depth() == 1 then
731
731
+
name.text = vim.fs.basename(vim.loop.cwd() or "") .. "/"
732
732
+
end
733
733
+
return name
734
734
+
end
735
735
+
'';
736
736
+
};
737
737
+
};
738
738
+
739
739
+
image = {
740
740
+
luaConfig = {
741
741
+
pre = "if not vim.g.neovide then";
742
742
+
post = "end";
743
743
+
};
744
744
+
enable = true;
745
745
+
};
746
746
+
web-devicons.enable = true;
747
747
+
748
748
+
guess-indent.enable = true;
749
749
+
intellitab.enable = true;
750
750
+
751
751
+
which-key = {
752
752
+
enable = true;
753
753
+
settings = {
754
754
+
show_help = true;
755
755
+
preset = "modern";
756
756
+
win.wo.winblend = 8;
757
757
+
};
758
758
+
};
759
759
+
760
760
+
fidget = {
761
761
+
enable = true;
762
762
+
settings.notification = {
763
763
+
override_vim_notify = true;
764
764
+
window = {
765
765
+
y_padding = 2;
766
766
+
x_padding = 2;
767
767
+
zindex = 50;
768
768
+
align = "top";
769
769
+
winblend = 0;
770
770
+
};
771
771
+
};
772
772
+
};
773
773
+
774
774
+
# none-ls = {
775
775
+
# enable = true;
776
776
+
# sources.formatting = {
777
777
+
# prettier = {
778
778
+
# enable = true;
779
779
+
# disableTsServerFormatter = true;
780
780
+
# };
781
781
+
# yamlfmt.enable = true;
782
782
+
# typstyle.enable = true;
783
783
+
# markdownlint.enable = true;
784
784
+
# };
785
785
+
# sources.diagnostics = {
786
786
+
# markdownlint.enable = true;
787
787
+
# };
788
788
+
# };
789
789
+
790
790
+
cmp = {
791
791
+
enable = true;
792
792
+
settings = {
793
793
+
sources = map (name: { inherit name; }) [
794
794
+
"nvim_lsp"
795
795
+
"nvim_lsp_signature_help"
796
796
+
"path"
797
797
+
"buffer"
798
798
+
];
799
799
+
mapping = {
800
800
+
"<Esc>" = "cmp.mapping.abort()";
801
801
+
"<Tab>" = "cmp.mapping.confirm({ select = true })";
802
802
+
"<Up>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
803
803
+
"<Down>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
804
804
+
};
805
805
+
};
806
806
+
};
807
807
+
808
808
+
cmp-nvim-lsp.enable = true;
809
809
+
cmp-nvim-lsp-document-symbol.enable = true;
810
810
+
cmp-spell.enable = true;
811
811
+
812
812
+
rainbow-delimiters.enable = true;
813
813
+
preview.enable = true;
814
814
+
815
815
+
# jupytext.enable = true;
816
816
+
817
817
+
# Broken
818
818
+
# hex = {
819
819
+
# enable = true;
820
820
+
# settings = {
821
821
+
# assemble_cmd = "xxd -r";
822
822
+
# dump_cmd = "xxd -g 1 -u";
823
823
+
# };
824
824
+
# };
825
825
+
826
826
+
conform-nvim = {
827
827
+
enable = true;
828
828
+
settings.default_format_opts = {
829
829
+
lsp_format = "prefer";
830
830
+
};
831
831
+
# Taken from https://github.com/stevearc/conform.nvim/blob/master/doc/recipes.md#format-command
832
832
+
luaConfig.post = ''
833
833
+
vim.api.nvim_create_user_command("Format", function(args)
834
834
+
local range = nil
835
835
+
if args.count ~= -1 then
836
836
+
local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1]
837
837
+
range = {
838
838
+
start = { args.line1, 0 },
839
839
+
["end"] = { args.line2, end_line:len() },
840
840
+
}
841
841
+
end
842
842
+
require("conform").format({ async = true, lsp_format = "fallback", range = range })
843
843
+
end, { range = true })
844
844
+
'';
845
845
+
};
846
846
+
847
847
+
lspconfig.enable = true;
848
848
+
849
849
+
lspsaga = {
850
850
+
enable = true;
851
851
+
settings = {
852
852
+
symbol_in_winbar.enable = false;
853
853
+
implement.enable = false;
854
854
+
lightbulb.enable = false;
855
855
+
ui = {
856
856
+
code_action = "";
857
857
+
actionfix = "";
858
858
+
};
859
859
+
hover = {
860
860
+
openCmd = "!xdg-open";
861
861
+
openLink = "<leader>o";
862
862
+
maxWidth = 0.5;
863
863
+
maxHeight = 0.4;
864
864
+
};
865
865
+
rename.autoSave = true;
866
866
+
finder = {
867
867
+
keys.close = "<ESC>";
868
868
+
};
869
869
+
codeAction.keys.quit = "<ESC>";
870
870
+
};
871
871
+
};
872
872
+
873
873
+
crates.enable = true;
874
874
+
875
875
+
numbertoggle.enable = true;
876
876
+
877
877
+
# rustaceanvim.enable = true;
878
878
+
vim-css-color.enable = true;
879
879
+
};
880
880
+
881
881
+
lsp = {
882
882
+
inlayHints.enable = true;
883
883
+
884
884
+
servers = {
885
885
+
clangd.enable = true;
886
886
+
astro.enable = true;
887
887
+
hls = {
888
888
+
enable = true;
889
889
+
# ghcPackage = pkgs.haskell.compiler.ghc912;
890
890
+
package = pkgs.haskell.packages.ghc912.haskell-language-server;
891
891
+
};
892
892
+
sqls.enable = true;
893
893
+
mdx_analyzer = {
894
894
+
enable = true;
895
895
+
package = pkgs.mdx-language-server;
896
896
+
};
897
897
+
# denols.enable = true;
898
898
+
ts_ls.enable = true;
899
899
+
html.enable = true;
900
900
+
marksman.enable = true;
901
901
+
cssls.enable = true;
902
902
+
tailwindcss.enable = true; # Disabled until it doesn't build nodejs from source, bad tailwind
903
903
+
jsonls.enable = true;
904
904
+
yamlls.enable = true;
905
905
+
ruff.enable = true;
906
906
+
csharp_ls.enable = true;
907
907
+
svelte.enable = true;
908
908
+
nil_ls.enable = true;
909
909
+
bashls.enable = true;
910
910
+
nushell.enable = true;
911
911
+
taplo.enable = true;
912
912
+
typos_lsp.enable = true;
913
913
+
rust_analyzer = {
914
914
+
enable = true;
915
915
+
package = pkgs.rust-analyzer-nightly;
916
916
+
packageFallback = true;
917
917
+
};
918
918
+
lemminx.enable = true;
919
919
+
eslint.enable = true;
920
920
+
tinymist.enable = true;
921
921
+
just.enable = true;
922
922
+
};
923
923
+
};
924
924
+
};
925
925
+
};
926
926
+
}
+14
homeModules/pfp.nix
···
1
1
+
{ config, lib, ... }:
2
2
+
{
3
3
+
options.cow.pfp = {
4
4
+
enable = lib.mkEnableOption "Enable setting profile picture";
5
5
+
file = lib.mkOption {
6
6
+
type = lib.types.string;
7
7
+
description = "Path to Profile Picture File (PNG, 1:1 Aspect)";
8
8
+
};
9
9
+
};
10
10
+
11
11
+
config = lib.mkIf config.cow.pfp.enable {
12
12
+
home.file.".face".source = config.cow.pfp.file;
13
13
+
};
14
14
+
}
+133
homeModules/starship.nix
···
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
...
5
5
+
}:
6
6
+
{
7
7
+
options.cow.starship.enable = lib.mkEnableOption "Starship + Customizations";
8
8
+
9
9
+
config = lib.mkIf config.cow.starship.enable {
10
10
+
programs.starship = {
11
11
+
enable = true;
12
12
+
settings = {
13
13
+
add_newline = false;
14
14
+
character = {
15
15
+
disabled = false;
16
16
+
error_symbol = "[](bold red bg:crust)";
17
17
+
format = "[ $symbol ](bg:crust)";
18
18
+
success_symbol = "[](bold green bg:crust)";
19
19
+
};
20
20
+
cmd_duration = {
21
21
+
disabled = false;
22
22
+
format = "[ $duration ]($style)";
23
23
+
min_time = 2000;
24
24
+
style = "bg:crust blue";
25
25
+
};
26
26
+
directory = {
27
27
+
format = "[ ($read_only )$path ]($style)";
28
28
+
home_symbol = "";
29
29
+
read_only = "";
30
30
+
style = "bold green bg:crust";
31
31
+
truncate_to_repo = true;
32
32
+
truncation_length = 10;
33
33
+
};
34
34
+
format = "[░▒▓](crust)[ $os$hostname[](bg:crust #999999)$shell$username[](bg:crust #999999)$directory([](bg:crust #999999)$git_branch$git_commit$git_state)([](bg:crust #999999)$nodejs$python$rust$nix_shell)](bg:crust)[ ](crust)";
35
35
+
git_branch = {
36
36
+
format = "[ $symbol ($branch )]($style)";
37
37
+
style = "bg:crust green";
38
38
+
symbol = "";
39
39
+
};
40
40
+
git_state = {
41
41
+
format = "\\([$state( $progress_current/$progress_total)]($style)\\)";
42
42
+
merge = "";
43
43
+
rebase = "";
44
44
+
revert = "";
45
45
+
style = "bg:crust green yellow";
46
46
+
};
47
47
+
git_status = {
48
48
+
conflicted = "";
49
49
+
format = "[$all_status $ahead_behind ]($style)";
50
50
+
modified = "";
51
51
+
style = "bg:crust green";
52
52
+
};
53
53
+
hostname = {
54
54
+
format = "[$hostname( $ssh_symbol) ]($style)";
55
55
+
ssh_only = false;
56
56
+
ssh_symbol = "";
57
57
+
style = "bold blue bg:crust";
58
58
+
};
59
59
+
line_break = {
60
60
+
disabled = true;
61
61
+
};
62
62
+
nix_shell = {
63
63
+
format = "[ $state ](bold blue bg:crust) ";
64
64
+
impure_msg = "[ impure](bold red bg:crust)";
65
65
+
pure_msg = "[](bold green bg:crust)";
66
66
+
style = "bg:crust green";
67
67
+
unknown_msg = "[ unknown](bold yellow bg:crust)";
68
68
+
};
69
69
+
nodejs = {
70
70
+
format = "[ $symbol ($version) ]($style)";
71
71
+
not_capable_style = "bg:crust green bold red";
72
72
+
style = "bg:crust green";
73
73
+
symbol = "";
74
74
+
};
75
75
+
os = {
76
76
+
disabled = false;
77
77
+
format = "[$symbol ]($style)";
78
78
+
style = "bg:crust bold lightcrust";
79
79
+
symbols = {
80
80
+
Android = "";
81
81
+
Debian = "";
82
82
+
Linux = "";
83
83
+
Macos = "";
84
84
+
Manjaro = "";
85
85
+
NixOS = "";
86
86
+
Raspbian = "";
87
87
+
Ubuntu = "";
88
88
+
Windows = "";
89
89
+
};
90
90
+
};
91
91
+
python = {
92
92
+
format = "[ $symbol ($version) ]($style)";
93
93
+
style = "bg:crust green";
94
94
+
symbol = "";
95
95
+
};
96
96
+
right_format = "[ ](crust)\n($character$status[](bg:crust #999999))\n($cmd_duration[](bg:crust #999999))$time[▓▒░](crust)\n";
97
97
+
rust = {
98
98
+
format = "[ $symbol ($version) ]($style)";
99
99
+
style = "bg:crust green";
100
100
+
symbol = "";
101
101
+
};
102
102
+
shell = {
103
103
+
bash_indicator = "";
104
104
+
disabled = false;
105
105
+
fish_indicator = "";
106
106
+
format = "[ $indicator ]($style)";
107
107
+
nu_indicator = "";
108
108
+
powershell_indicator = "";
109
109
+
style = "bg:crust blue";
110
110
+
unknown_indicator = "";
111
111
+
};
112
112
+
status = {
113
113
+
disabled = false;
114
114
+
format = "[$status ]($style)";
115
115
+
style = "bg:crust red";
116
116
+
};
117
117
+
time = {
118
118
+
disabled = false;
119
119
+
format = "[ $time ]($style)";
120
120
+
style = "bg:crust bold blue";
121
121
+
time_format = "%a %b %d %I:%M %p ";
122
122
+
use_12hr = true;
123
123
+
};
124
124
+
username = {
125
125
+
format = "[$user ]($style)";
126
126
+
show_always = true;
127
127
+
style_root = "bold red bg:crust";
128
128
+
style_user = "blue bg:crust";
129
129
+
};
130
130
+
};
131
131
+
};
132
132
+
};
133
133
+
}
+144
homeModules/yazi.nix
···
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
6
6
+
}:
7
7
+
{
8
8
+
options.cow.yazi.enable = lib.mkEnableOption "Yazi + Customizations";
9
9
+
10
10
+
config = lib.mkIf config.cow.yazi.enable {
11
11
+
home.packages = with pkgs; [
12
12
+
mediainfo
13
13
+
exiftool
14
14
+
];
15
15
+
16
16
+
programs.yazi = {
17
17
+
enable = true;
18
18
+
enableBashIntegration = true;
19
19
+
enableNushellIntegration = true;
20
20
+
21
21
+
settings = {
22
22
+
open.prepend_rules = [
23
23
+
{
24
24
+
mime = "video/*";
25
25
+
use = "open";
26
26
+
}
27
27
+
{
28
28
+
mime = "audio/*";
29
29
+
use = "open";
30
30
+
}
31
31
+
];
32
32
+
};
33
33
+
34
34
+
keymap.mgr.prepend_keymap = [
35
35
+
{
36
36
+
run = "plugin mount";
37
37
+
on = [ "M" ];
38
38
+
desc = "Disk Mounting";
39
39
+
}
40
40
+
{
41
41
+
run = "plugin chmod";
42
42
+
on = [
43
43
+
"c"
44
44
+
"m"
45
45
+
];
46
46
+
desc = "Run Chmod On Selected";
47
47
+
}
48
48
+
];
49
49
+
50
50
+
plugins = {
51
51
+
inherit (pkgs.yaziPlugins)
52
52
+
ouch
53
53
+
mount
54
54
+
chmod
55
55
+
bypass
56
56
+
mediainfo
57
57
+
wl-clipboard
58
58
+
yatline
59
59
+
yatline-catppuccin
60
60
+
;
61
61
+
};
62
62
+
63
63
+
initLua = ''
64
64
+
local catppuccin_theme = require("yatline-catppuccin"):setup("mocha")
65
65
+
66
66
+
require("yatline"):setup({
67
67
+
theme = catppuccin_theme,
68
68
+
section_separator = { open = "", close = "" },
69
69
+
part_separator = { open = "", close = "" },
70
70
+
inverse_separator = { open = "", close = "" },
71
71
+
72
72
+
tab_width = 20,
73
73
+
tab_use_inverse = false,
74
74
+
75
75
+
selected = { icon = "", fg = "yellow" },
76
76
+
copied = { icon = "", fg = "green" },
77
77
+
cut = { icon = "", fg = "red" },
78
78
+
79
79
+
total = { icon = "", fg = "yellow" },
80
80
+
succ = { icon = "", fg = "green" },
81
81
+
fail = { icon = "", fg = "red" },
82
82
+
found = { icon = "", fg = "blue" },
83
83
+
processed = { icon = "", fg = "green" },
84
84
+
85
85
+
show_background = true,
86
86
+
87
87
+
display_header_line = true,
88
88
+
display_status_line = true,
89
89
+
90
90
+
component_positions = { "header", "tab", "status" },
91
91
+
92
92
+
header_line = {
93
93
+
left = {
94
94
+
section_a = {
95
95
+
{type = "line", custom = false, name = "tabs", params = {"left"}},
96
96
+
},
97
97
+
section_b = {
98
98
+
},
99
99
+
section_c = {
100
100
+
}
101
101
+
},
102
102
+
right = {
103
103
+
section_a = {
104
104
+
{type = "string", custom = false, name = "date", params = {"%A, %d %B %Y"}},
105
105
+
},
106
106
+
section_b = {
107
107
+
{type = "string", custom = false, name = "date", params = {"%X"}},
108
108
+
},
109
109
+
section_c = {
110
110
+
}
111
111
+
}
112
112
+
},
113
113
+
114
114
+
status_line = {
115
115
+
left = {
116
116
+
section_a = {
117
117
+
{type = "string", custom = false, name = "tab_mode"},
118
118
+
},
119
119
+
section_b = {
120
120
+
{type = "string", custom = false, name = "hovered_size"},
121
121
+
},
122
122
+
section_c = {
123
123
+
{type = "string", custom = false, name = "hovered_path"},
124
124
+
{type = "coloreds", custom = false, name = "count"},
125
125
+
}
126
126
+
},
127
127
+
right = {
128
128
+
section_a = {
129
129
+
{type = "string", custom = false, name = "cursor_position"},
130
130
+
},
131
131
+
section_b = {
132
132
+
{type = "string", custom = false, name = "cursor_percentage"},
133
133
+
},
134
134
+
section_c = {
135
135
+
{type = "string", custom = false, name = "hovered_file_extension", params = {true}},
136
136
+
{type = "coloreds", custom = false, name = "permissions"},
137
137
+
}
138
138
+
}
139
139
+
},
140
140
+
})
141
141
+
'';
142
142
+
};
143
143
+
};
144
144
+
}
-13
lib.nix
···
1
1
-
{
2
2
-
outputs,
3
3
-
lib,
4
4
-
...
5
5
-
}: let
6
6
-
roleEnabled = selected: role: builtins.all (r: builtins.elem r selected) (lib.splitString "+" role);
7
7
-
in {
8
8
-
applyRoles = roleList: let
9
9
-
filteredRoles = lib.filterAttrs (n: _v: roleEnabled roleList n) outputs.nixosModules;
10
10
-
in {
11
11
-
imports = builtins.attrValues filteredRoles;
12
12
-
};
13
13
-
}
nixosModules/base/base.nix
oldNixosModules/base/base.nix
nixosModules/base/boot.nix
oldNixosModules/base/boot.nix
-1
nixosModules/base/nix.nix
oldNixosModules/base/nix.nix
···
7
7
environment.systemPackages = with pkgs; [
8
8
nh
9
9
nix-output-monitor
10
10
-
comma-with-db
11
10
];
12
11
13
12
nix = {
-84
nixosModules/base/nushell.nix
···
1
1
-
{
2
2
-
pkgs,
3
3
-
lib,
4
4
-
config,
5
5
-
...
6
6
-
}: let
7
7
-
init-starship = pkgs.runCommand "starship-init" {} ''
8
8
-
${pkgs.starship}/bin/starship init nu > $out
9
9
-
'';
10
10
-
shellAliases = {
11
11
-
cd = "z";
12
12
-
sw = "zi";
13
13
-
py = "python";
14
14
-
cat = "bat";
15
15
-
pcat = "prettybat";
16
16
-
pbat = "prettybat";
17
17
-
dog = "doggo";
18
18
-
man = "__batman";
19
19
-
bgrep = "batgrep";
20
20
-
"🥺" = "sudo";
21
21
-
};
22
22
-
configFile.text = ''
23
23
-
let fish_completer = {|spans|
24
24
-
${pkgs.fish}/bin/fish --command $'complete "--do-complete=($spans | str join " ")"'
25
25
-
| $"value(char tab)description(char newline)" + $in
26
26
-
| from tsv --flexible --no-infer
27
27
-
}
28
28
-
let zoxide_completer = {|spans|
29
29
-
let query = $spans | skip 1
30
30
-
let z_results = $query | zoxide query -l ...$in | lines | where {|x| $x != $env.PWD}
31
31
-
let l_results = fish_completer $spans
32
32
-
$l_results | append $z_results
33
33
-
}
34
34
-
let multiple_completers = {|spans|
35
35
-
# if the current command is an alias, get it's expansion
36
36
-
let expanded_alias = (scope aliases | where name == $spans.0 | get -o 0 | get -o expansion)
37
37
-
38
38
-
# overwrite
39
39
-
40
40
-
let spans = (if $expanded_alias != null {
41
41
-
# put the first word of the expanded alias first in the span
42
42
-
$spans | skip 1 | prepend ($expanded_alias | split row " ")
43
43
-
} else { $spans })
44
44
-
45
45
-
match $spans.0 {
46
46
-
z => $zoxide_completer
47
47
-
zi => $zoxide_completer
48
48
-
__zoxide_z => $zoxide_completer
49
49
-
__zoxide_zi => $zoxide_completer
50
50
-
_ => $fish_completer
51
51
-
} | do $in $spans
52
52
-
}
53
53
-
54
54
-
let command_not_found = ${lib.fileContents ../../res/command_not_found.nu}
55
55
-
56
56
-
def --env __batman [...rest:string] {
57
57
-
BAT_THEME="Monokai Extended" batman ...$rest
58
58
-
}
59
59
-
60
60
-
$env.config = {
61
61
-
show_banner: false
62
62
-
completions: {
63
63
-
external: {
64
64
-
enable: true
65
65
-
completer: $multiple_completers
66
66
-
}
67
67
-
}
68
68
-
hooks: {
69
69
-
command_not_found: $command_not_found
70
70
-
}
71
71
-
}
72
72
-
73
73
-
source ${init-starship}
74
74
-
'';
75
75
-
in {
76
76
-
home-manager.users.bean.programs.nushell = {
77
77
-
enable = true;
78
78
-
inherit configFile shellAliases;
79
79
-
};
80
80
-
home-manager.users.root.programs.nushell = {
81
81
-
enable = true;
82
82
-
inherit configFile shellAliases;
83
83
-
};
84
84
-
}
-1
nixosModules/base/personal.nix
oldNixosModules/base/personal.nix
···
24
24
};
25
25
26
26
home-manager.users.bean = {
27
27
-
imports = [inputs.nix-index-db.homeModules.nix-index];
28
27
home = {
29
28
username = "bean";
30
29
homeDirectory = "/home/bean";
+1
-2
nixosModules/base/shell.nix
oldNixosModules/base/shell.nix
···
53
53
ripgrep.enable = true;
54
54
bat = {
55
55
enable = true;
56
56
-
extraPackages = with pkgs.bat-extras; [batman batgrep batwatch];
56
56
+
extraPackages = with pkgs.bat-extras; [batman];
57
57
};
58
58
};
59
59
···
62
62
ripgrep.enable = true;
63
63
command-not-found.enable = false;
64
64
bat.enable = true;
65
65
-
nix-index.enable = true;
66
65
};
67
66
}
-134
nixosModules/base/starship.nix
···
1
1
-
{...}: let
2
2
-
settings = {
3
3
-
add_newline = false;
4
4
-
character = {
5
5
-
disabled = false;
6
6
-
error_symbol = "[](bold red bg:crust)";
7
7
-
format = "[ $symbol ](bg:crust)";
8
8
-
success_symbol = "[](bold green bg:crust)";
9
9
-
};
10
10
-
cmd_duration = {
11
11
-
disabled = false;
12
12
-
format = "[ $duration ]($style)";
13
13
-
min_time = 2000;
14
14
-
style = "bg:crust blue";
15
15
-
};
16
16
-
directory = {
17
17
-
format = "[ ($read_only )$path ]($style)";
18
18
-
home_symbol = "";
19
19
-
read_only = "";
20
20
-
style = "bold green bg:crust";
21
21
-
truncate_to_repo = true;
22
22
-
truncation_length = 10;
23
23
-
};
24
24
-
format = "[░▒▓](crust)[ $os$hostname[](bg:crust #999999)$shell$username[](bg:crust #999999)$directory([](bg:crust #999999)$git_branch$git_commit$git_state)([](bg:crust #999999)$nodejs$python$rust$nix_shell)](bg:crust)[ ](crust)";
25
25
-
git_branch = {
26
26
-
format = "[ $symbol ($branch )]($style)";
27
27
-
style = "bg:crust green";
28
28
-
symbol = "";
29
29
-
};
30
30
-
git_state = {
31
31
-
format = "\\([$state( $progress_current/$progress_total)]($style)\\)";
32
32
-
merge = "";
33
33
-
rebase = "";
34
34
-
revert = "";
35
35
-
style = "bg:crust green yellow";
36
36
-
};
37
37
-
git_status = {
38
38
-
conflicted = "";
39
39
-
format = "[$all_status $ahead_behind ]($style)";
40
40
-
modified = "";
41
41
-
style = "bg:crust green";
42
42
-
};
43
43
-
hostname = {
44
44
-
format = "[$hostname( $ssh_symbol) ]($style)";
45
45
-
ssh_only = false;
46
46
-
ssh_symbol = "";
47
47
-
style = "bold blue bg:crust";
48
48
-
};
49
49
-
line_break = {disabled = true;};
50
50
-
nix_shell = {
51
51
-
format = "[ $state ](bold blue bg:crust) ";
52
52
-
impure_msg = "[ impure](bold red bg:crust)";
53
53
-
pure_msg = "[](bold green bg:crust)";
54
54
-
style = "bg:crust green";
55
55
-
unknown_msg = "[ unknown](bold yellow bg:crust)";
56
56
-
};
57
57
-
nodejs = {
58
58
-
format = "[ $symbol ($version) ]($style)";
59
59
-
not_capable_style = "bg:crust green bold red";
60
60
-
style = "bg:crust green";
61
61
-
symbol = "";
62
62
-
};
63
63
-
os = {
64
64
-
disabled = false;
65
65
-
format = "[$symbol ]($style)";
66
66
-
style = "bg:crust bold lightcrust";
67
67
-
symbols = {
68
68
-
Android = "";
69
69
-
Debian = "";
70
70
-
Linux = "";
71
71
-
Macos = "";
72
72
-
Manjaro = "";
73
73
-
NixOS = "";
74
74
-
Raspbian = "";
75
75
-
Ubuntu = "";
76
76
-
Windows = "";
77
77
-
};
78
78
-
};
79
79
-
python = {
80
80
-
format = "[ $symbol ($version) ]($style)";
81
81
-
style = "bg:crust green";
82
82
-
symbol = "";
83
83
-
};
84
84
-
right_format = "[ ](crust)\n($character$status[](bg:crust #999999))\n($cmd_duration[](bg:crust #999999))$time[▓▒░](crust)\n";
85
85
-
rust = {
86
86
-
format = "[ $symbol ($version) ]($style)";
87
87
-
style = "bg:crust green";
88
88
-
symbol = "";
89
89
-
};
90
90
-
shell = {
91
91
-
bash_indicator = "";
92
92
-
disabled = false;
93
93
-
fish_indicator = "";
94
94
-
format = "[ $indicator ]($style)";
95
95
-
nu_indicator = "";
96
96
-
powershell_indicator = "";
97
97
-
style = "bg:crust blue";
98
98
-
unknown_indicator = "";
99
99
-
};
100
100
-
status = {
101
101
-
disabled = false;
102
102
-
format = "[$status ]($style)";
103
103
-
style = "bg:crust red";
104
104
-
};
105
105
-
time = {
106
106
-
disabled = false;
107
107
-
format = "[ $time ]($style)";
108
108
-
style = "bg:crust bold blue";
109
109
-
time_format = "%a %b %d %I:%M %p ";
110
110
-
use_12hr = true;
111
111
-
};
112
112
-
username = {
113
113
-
format = "[$user ]($style)";
114
114
-
show_always = true;
115
115
-
style_root = "bold red bg:crust";
116
116
-
style_user = "blue bg:crust";
117
117
-
};
118
118
-
};
119
119
-
in {
120
120
-
programs.starship = {
121
121
-
enable = true;
122
122
-
inherit settings;
123
123
-
};
124
124
-
125
125
-
home-manager.users.bean.programs.starship = {
126
126
-
enable = true;
127
127
-
inherit settings;
128
128
-
};
129
129
-
130
130
-
home-manager.users.root.programs.starship = {
131
131
-
enable = true;
132
132
-
inherit settings;
133
133
-
};
134
134
-
}
nixosModules/base/theming.nix
oldNixosModules/base/theming.nix
-136
nixosModules/base/yazi.nix
···
1
1
-
{pkgs, ...}: {
2
2
-
environment.systemPackages = with pkgs; [
3
3
-
yazi
4
4
-
mediainfo
5
5
-
exiftool
6
6
-
];
7
7
-
8
8
-
home-manager.users.bean.programs.yazi = {
9
9
-
enable = true;
10
10
-
enableBashIntegration = true;
11
11
-
enableNushellIntegration = true;
12
12
-
13
13
-
settings = {
14
14
-
open.prepend_rules = [
15
15
-
{
16
16
-
mime = "video/*";
17
17
-
use = "open";
18
18
-
}
19
19
-
{
20
20
-
mime = "audio/*";
21
21
-
use = "open";
22
22
-
}
23
23
-
];
24
24
-
};
25
25
-
26
26
-
keymap.mgr.prepend_keymap = [
27
27
-
{
28
28
-
run = "plugin mount";
29
29
-
on = ["M"];
30
30
-
desc = "Disk Mounting";
31
31
-
}
32
32
-
{
33
33
-
run = "plugin chmod";
34
34
-
on = [
35
35
-
"c"
36
36
-
"m"
37
37
-
];
38
38
-
desc = "Run Chmod On Selected";
39
39
-
}
40
40
-
];
41
41
-
42
42
-
plugins = {
43
43
-
inherit
44
44
-
(pkgs.yaziPlugins)
45
45
-
ouch
46
46
-
mount
47
47
-
chmod
48
48
-
bypass
49
49
-
mediainfo
50
50
-
wl-clipboard
51
51
-
yatline
52
52
-
yatline-catppuccin
53
53
-
;
54
54
-
};
55
55
-
56
56
-
initLua = ''
57
57
-
local catppuccin_theme = require("yatline-catppuccin"):setup("mocha")
58
58
-
59
59
-
require("yatline"):setup({
60
60
-
theme = catppuccin_theme,
61
61
-
section_separator = { open = "", close = "" },
62
62
-
part_separator = { open = "", close = "" },
63
63
-
inverse_separator = { open = "", close = "" },
64
64
-
65
65
-
tab_width = 20,
66
66
-
tab_use_inverse = false,
67
67
-
68
68
-
selected = { icon = "", fg = "yellow" },
69
69
-
copied = { icon = "", fg = "green" },
70
70
-
cut = { icon = "", fg = "red" },
71
71
-
72
72
-
total = { icon = "", fg = "yellow" },
73
73
-
succ = { icon = "", fg = "green" },
74
74
-
fail = { icon = "", fg = "red" },
75
75
-
found = { icon = "", fg = "blue" },
76
76
-
processed = { icon = "", fg = "green" },
77
77
-
78
78
-
show_background = true,
79
79
-
80
80
-
display_header_line = true,
81
81
-
display_status_line = true,
82
82
-
83
83
-
component_positions = { "header", "tab", "status" },
84
84
-
85
85
-
header_line = {
86
86
-
left = {
87
87
-
section_a = {
88
88
-
{type = "line", custom = false, name = "tabs", params = {"left"}},
89
89
-
},
90
90
-
section_b = {
91
91
-
},
92
92
-
section_c = {
93
93
-
}
94
94
-
},
95
95
-
right = {
96
96
-
section_a = {
97
97
-
{type = "string", custom = false, name = "date", params = {"%A, %d %B %Y"}},
98
98
-
},
99
99
-
section_b = {
100
100
-
{type = "string", custom = false, name = "date", params = {"%X"}},
101
101
-
},
102
102
-
section_c = {
103
103
-
}
104
104
-
}
105
105
-
},
106
106
-
107
107
-
status_line = {
108
108
-
left = {
109
109
-
section_a = {
110
110
-
{type = "string", custom = false, name = "tab_mode"},
111
111
-
},
112
112
-
section_b = {
113
113
-
{type = "string", custom = false, name = "hovered_size"},
114
114
-
},
115
115
-
section_c = {
116
116
-
{type = "string", custom = false, name = "hovered_path"},
117
117
-
{type = "coloreds", custom = false, name = "count"},
118
118
-
}
119
119
-
},
120
120
-
right = {
121
121
-
section_a = {
122
122
-
{type = "string", custom = false, name = "cursor_position"},
123
123
-
},
124
124
-
section_b = {
125
125
-
{type = "string", custom = false, name = "cursor_percentage"},
126
126
-
},
127
127
-
section_c = {
128
128
-
{type = "string", custom = false, name = "hovered_file_extension", params = {true}},
129
129
-
{type = "coloreds", custom = false, name = "permissions"},
130
130
-
}
131
131
-
}
132
132
-
},
133
133
-
})
134
134
-
'';
135
135
-
};
136
136
-
}
-11
nixosModules/black-mesa-cache.nix
···
1
1
-
{...}: {
2
2
-
nix.settings = {
3
3
-
substituters = [
4
4
-
"http://black-mesa:5000"
5
5
-
"https://cache.nixos.org"
6
6
-
];
7
7
-
trusted-public-keys = [
8
8
-
"black-mesa:tAX++uOKyqP70gnwx5zHBMiZ0kee8WberjlPZmDuyxw="
9
9
-
];
10
10
-
};
11
11
-
}
nixosModules/default.nix
oldNixosModules/default.nix
nixosModules/dev+graphics/code.nix
oldNixosModules/dev+graphics/code.nix
nixosModules/dev+graphics/misc.nix
oldNixosModules/dev+graphics/misc.nix
nixosModules/dev+graphics/nvim.nix
oldNixosModules/dev+graphics/nvim.nix
-7
nixosModules/dev/android.nix
···
1
1
-
{pkgs, ...}: {
2
2
-
users.users.bean.extraGroups = ["kvm" "adbusers"];
3
3
-
programs.adb.enable = true;
4
4
-
services.udev.packages = [
5
5
-
pkgs.android-udev-rules
6
6
-
];
7
7
-
}
nixosModules/dev/dotnet.nix
oldNixosModules/dev/dotnet.nix
nixosModules/dev/git.nix
oldNixosModules/dev/git.nix
nixosModules/dev/haskell.nix
oldNixosModules/dev/haskell.nix
nixosModules/dev/js.nix
oldNixosModules/dev/js.nix
nixosModules/dev/misc.nix
oldNixosModules/dev/misc.nix
nixosModules/dev/nix.nix
oldNixosModules/dev/nix.nix
nixosModules/dev/nvim.nix
oldNixosModules/dev/nvim.nix
nixosModules/dev/python.nix
oldNixosModules/dev/python.nix
nixosModules/dev/rust.nix
oldNixosModules/dev/rust.nix
nixosModules/flatpak.nix
oldNixosModules/flatpak.nix
nixosModules/fun+graphics.nix
oldNixosModules/fun+graphics.nix
nixosModules/fun.nix
oldNixosModules/fun.nix
nixosModules/games+graphics.nix
oldNixosModules/games+graphics.nix
nixosModules/graphics/apps.nix
oldNixosModules/graphics/apps.nix
nixosModules/graphics/audio.nix
oldNixosModules/graphics/audio.nix
nixosModules/graphics/firefox.nix
oldNixosModules/graphics/firefox.nix
nixosModules/graphics/fonts.nix
oldNixosModules/graphics/fonts.nix
nixosModules/graphics/greeter.nix
oldNixosModules/graphics/greeter.nix
nixosModules/graphics/hypr.nix
oldNixosModules/graphics/hypr.nix
nixosModules/graphics/lock.nix
oldNixosModules/graphics/lock.nix
+5
nixosModules/graphics/news.nix
oldNixosModules/graphics/news.nix
···
306
306
tags = ["personal-blog"];
307
307
}
308
308
{
309
309
+
title = "Ben Romer";
310
310
+
url = "https://www.cyborgcentral.net/feed";
311
311
+
tags = ["personal-blog"];
312
312
+
}
313
313
+
{
309
314
title = "HiDeoo";
310
315
url = "https://hideoo.dev/notes/rss.xml";
311
316
tags = ["personal-blog"];
nixosModules/graphics/printing.nix
oldNixosModules/graphics/printing.nix
nixosModules/graphics/qmplay2.nix
oldNixosModules/graphics/qmplay2.nix
nixosModules/graphics/shell.nix
oldNixosModules/graphics/shell.nix
nixosModules/graphics/swaync.nix
oldNixosModules/graphics/swaync.nix
nixosModules/graphics/theming.nix
oldNixosModules/graphics/theming.nix
nixosModules/graphics/waybar.nix
oldNixosModules/graphics/waybar.nix
nixosModules/graphics/wezterm.nix
oldNixosModules/graphics/wezterm.nix
nixosModules/graphics/xdg.nix
oldNixosModules/graphics/xdg.nix
nixosModules/hypervisor+graphics.nix
oldNixosModules/hypervisor+graphics.nix
nixosModules/hypervisor.nix
oldNixosModules/hypervisor.nix
nixosModules/imperm+secureboot.nix
oldNixosModules/imperm+secureboot.nix
-1
nixosModules/imperm.nix
oldNixosModules/imperm.nix
···
64
64
"Trash"
65
65
])
66
66
++ (preConf [
67
67
-
"gh"
68
67
"kdeconnect"
69
68
"keepassxc"
70
69
"syncthing"
nixosModules/latest-linux.nix
oldNixosModules/latest-linux.nix
nixosModules/mc-server.nix
oldNixosModules/mc-server.nix
+8
-1
nixosModules/music.nix
oldNixosModules/music.nix
···
159
159
password: None,
160
160
theme: Some("catppuccin"),
161
161
cache_dir: None,
162
162
+
lyrics_dir: "${config.home-manager.users.bean.services.mpd.musicDirectory}",
162
163
on_song_change: None,
163
164
volume_step: 5,
164
165
max_fps: 30,
···
302
303
(size: "50%", borders: "TOP", pane: Pane(Cava)),
303
304
],
304
305
)),
305
305
-
(size: "40%", borders: "LEFT", pane: Pane(AlbumArt)),
306
306
+
(size: "40%", borders: "LEFT", pane: Split(
307
307
+
direction: Vertical,
308
308
+
panes: [
309
309
+
(size: "70%", pane: Pane(AlbumArt)),
310
310
+
(size: "30%", borders: "TOP", pane: Pane(Lyrics)),
311
311
+
],
312
312
+
)),
306
313
],
307
314
),
308
315
),
nixosModules/networking.nix
oldNixosModules/networking.nix
nixosModules/normalboot.nix
oldNixosModules/normalboot.nix
nixosModules/podman.nix
oldNixosModules/podman.nix
nixosModules/secureboot.nix
oldNixosModules/secureboot.nix
nixosModules/ssh.nix
oldNixosModules/ssh.nix
nixosModules/sync.nix
oldNixosModules/sync.nix
nixosModules/vm.nix
oldNixosModules/vm.nix
+4
oldNixosModules/dev/android.nix
···
1
1
+
{...}: {
2
2
+
users.users.bean.extraGroups = ["kvm" "adbusers"];
3
3
+
programs.adb.enable = true;
4
4
+
}
+5
res/nushellCompletions/carapace.nu
···
1
1
+
{|spans: list<string>|
2
2
+
__carapace__ $spans.0 nushell ...$spans
3
3
+
| from json
4
4
+
| if ($in | default [] | where value =~ '^-.*ERR$' | is-empty) { $in } else { null }
5
5
+
}
+13
res/nushellCompletions/fish.nu
···
1
1
+
{|spans|
2
2
+
__fish__ --command $"complete '--do-complete=($spans | str replace --all "'" "\\'" | str join ' ')'"
3
3
+
| from tsv --flexible --noheaders --no-infer
4
4
+
| rename value description
5
5
+
| update value {|row|
6
6
+
let value = $row.value
7
7
+
let need_quote = ['\' ',' '[' ']' '(' ')' ' ' '\t' "'" '"' "`"] | any {$in in $value}
8
8
+
if ($need_quote and ($value | path exists)) {
9
9
+
let expanded_path = if ($value starts-with ~) {$value | path expand --no-symlink} else {$value}
10
10
+
$'"($expanded_path | str replace --all "\"" "\\\"")"'
11
11
+
} else {$value}
12
12
+
}
13
13
+
}
systemConfigs/aperture.nix
oldSystemConfigs/aperture.nix
systemConfigs/black-mesa.nix
oldSystemConfigs/black-mesa.nix
systemConfigs/installer.nix
oldSystemConfigs/installer.nix
systemConfigs/mann-co.nix
oldSystemConfigs/mann-co.nix
systemConfigs/test.nix
oldSystemConfigs/test.nix