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
Toggleterm bindings
bwc9876.dev
8 months ago
fb3e3f41
af211e01
verified
This commit was signed with the committer's
known signature
.
bwc9876.dev
SSH Key Fingerprint:
SHA256:DanMEP/RNlSC7pAVbnXO6wzQV00rqyKj053tz4uH5gQ=
+341
-351
2 changed files
expand all
collapse all
unified
split
nixosModules
dev
nvim.nix
graphics
floorp.nix
+139
-141
nixosModules/dev/nvim.nix
···
4
config,
5
lib,
6
...
7
-
}:
8
-
{
9
environment.systemPackages = with pkgs; [
10
ripgrep
11
fd
12
];
13
14
home-manager.users.bean = {
15
-
imports = [ inputs.nixvim.homeManagerModules.nixvim ];
16
17
programs.nixvim = {
18
enable = true;
···
63
background = true;
64
};
65
virtual_text = {
66
-
errors = [ "italic" ];
67
-
hints = [ "italic" ];
68
-
information = [ "italic" ];
69
-
warnings = [ "italic" ];
70
-
ok = [ "italic" ];
71
};
72
underlines = {
73
-
errors = [ "underline" ];
74
-
hints = [ "underline" ];
75
-
information = [ "underline" ];
76
-
warnings = [ "underline" ];
77
};
78
};
79
};
···
94
'';
95
96
autoGroups = {
97
-
restore_cursor = { };
98
-
open_neotree = { };
99
};
100
101
opts = {
···
116
autoCmd = [
117
{
118
group = "restore_cursor";
119
-
event = [ "BufReadPost" ];
120
pattern = "*";
121
callback.__raw = ''
122
function()
···
133
}
134
{
135
group = "open_neotree";
136
-
event = [ "BufRead" ];
137
pattern = "*";
138
once = true;
139
callback.__raw = ''
···
161
};
162
};
163
164
-
keymaps =
165
-
let
166
-
prefixMap =
167
-
pre: maps:
168
-
builtins.map (k: {
169
-
action = "<cmd>${k.action}<cr>";
170
-
key = "${pre}${k.key}";
171
-
options = k.options;
172
-
}) maps;
173
-
in
174
lib.lists.flatten (
175
-
builtins.map (g: if builtins.hasAttr "group" g then prefixMap g.prefix g.keys else g) [
0
0
0
176
{
177
group = "Tab Navigation";
178
prefix = "<Tab>";
···
291
key = "<leader><leader>";
292
options.desc = "Telescope Launch";
293
}
0
0
0
0
0
0
0
0
0
0
294
]
295
);
296
297
extraPlugins = with pkgs.vimPlugins; [
298
-
{ plugin = pkgs.nvim-mdx; }
299
-
{ plugin = pkgs.nvim-flatten; }
300
-
{ plugin = tiny-devicons-auto-colors-nvim; }
301
-
{ plugin = nvim-biscuits; }
302
];
303
304
plugins = {
···
370
opts = {
371
position = "center";
372
};
373
-
layout =
374
-
let
375
-
o = {
376
-
position = "center";
377
-
};
378
-
txt = s: {
379
-
type = "text";
380
-
val = s;
381
-
opts = {
382
hl = "Keyword";
383
-
} // o;
384
-
};
385
-
grp = g: {
386
-
type = "group";
387
-
val = g;
388
-
opts.spacing = 1;
389
-
};
390
-
btn =
391
-
{
392
-
val,
393
-
onClick,
394
-
...
395
-
}:
396
-
{
397
-
type = "button";
398
-
inherit val;
399
-
opts = o;
400
-
on_press.__raw = "function() vim.cmd[[${onClick}]] end";
401
-
};
402
-
cmd =
403
-
{
404
-
command,
405
-
width,
406
-
height,
407
-
}:
408
-
{
409
-
type = "terminal";
410
-
inherit command width height;
411
-
opts = o;
412
-
};
413
-
pad = {
414
-
type = "padding";
415
-
val = 2;
416
-
};
417
-
in
418
[
419
pad
420
pad
···
424
(
425
let
426
banner =
427
-
pkgs.runCommand "nvim-banner" { }
428
-
''${pkgs.toilet}/bin/toilet " NIXVIM " -f mono12 -F border > $out'';
429
# bannerText = builtins.readFile banner;
430
in
431
-
cmd {
432
-
command = ''open ${banner} | ${pkgs.lolcat}/bin/lolcat -f -S (random int 1..360)'';
433
-
# Hardcoding to prevent IFD
434
-
width = 83; # (builtins.stringLength (lib.trim (builtins.elemAt (lib.splitString "\n" bannerText) 1))) - 3;
435
-
height = 12; # (builtins.length (lib.splitString "\n" bannerText)) - 1;
436
-
}
437
)
438
(grp [
439
(btn {
···
454
])
455
(txt "::<シ>")
456
])
457
-
++ [ pad ];
458
};
459
460
trouble = {
···
517
start_in_insert = true;
518
insert_mappings = true;
519
terminal_mappings = true;
520
-
# winbar = {
521
-
# enabled = true;
522
-
# # name_formatter.__raw = ''
523
-
# # function(term)
524
-
# # return term:_display_name() .. " (" .. tostring(term.id) .. ")"
525
-
# # end
526
-
# # '';
527
-
# };
528
};
529
};
530
···
586
hover = {
587
enabled = true;
588
delay = 150;
589
-
reveal = [ "close" ];
590
};
591
sort_by = "insert_at_end";
592
diagnostics = "nvim_lsp";
···
601
602
statuscol = {
603
enable = true;
604
-
settings.segments =
605
-
let
606
-
dispCond = {
607
-
__raw = ''
608
-
function(ln)
609
-
return vim.bo.filetype ~= "neo-tree"
610
-
end
611
-
'';
612
-
};
613
-
in
614
-
[
615
-
{
616
-
click = "v:lua.ScSa";
617
-
condition = [
618
-
dispCond
619
-
];
620
-
text = [
621
-
"%s"
622
-
];
623
-
}
624
-
{
625
-
click = "v:lua.ScLa";
626
-
condition = [ dispCond ];
627
-
text = [
628
-
{
629
-
__raw = "require('statuscol.builtin').lnumfunc";
630
-
}
631
-
];
632
-
}
633
-
{
634
-
click = "v:lua.ScFa";
635
-
condition = [
636
-
dispCond
637
-
{
638
-
__raw = "require('statuscol.builtin').not_empty";
639
-
}
640
-
];
641
-
text = [
642
-
{
643
-
__raw = "require('statuscol.builtin').foldfunc";
644
-
}
645
-
" "
646
-
];
647
-
}
648
-
];
649
};
650
651
dropbar = {
···
671
672
options = {
673
theme = "catppuccin";
674
-
disabled_filetypes = [ "neo-tree" ];
675
-
ignore_focus = [ "neo-tree" ];
676
};
677
};
678
};
···
766
cmp = {
767
enable = true;
768
settings = {
769
-
sources = map (name: { inherit name; }) [
770
"nvim_lsp"
771
"nvim_lsp_signature_help"
772
"path"
···
4
config,
5
lib,
6
...
7
+
}: {
0
8
environment.systemPackages = with pkgs; [
9
ripgrep
10
fd
11
];
12
13
home-manager.users.bean = {
14
+
imports = [inputs.nixvim.homeManagerModules.nixvim];
15
16
programs.nixvim = {
17
enable = true;
···
62
background = true;
63
};
64
virtual_text = {
65
+
errors = ["italic"];
66
+
hints = ["italic"];
67
+
information = ["italic"];
68
+
warnings = ["italic"];
69
+
ok = ["italic"];
70
};
71
underlines = {
72
+
errors = ["underline"];
73
+
hints = ["underline"];
74
+
information = ["underline"];
75
+
warnings = ["underline"];
76
};
77
};
78
};
···
93
'';
94
95
autoGroups = {
96
+
restore_cursor = {};
97
+
open_neotree = {};
98
};
99
100
opts = {
···
115
autoCmd = [
116
{
117
group = "restore_cursor";
118
+
event = ["BufReadPost"];
119
pattern = "*";
120
callback.__raw = ''
121
function()
···
132
}
133
{
134
group = "open_neotree";
135
+
event = ["BufRead"];
136
pattern = "*";
137
once = true;
138
callback.__raw = ''
···
160
};
161
};
162
163
+
keymaps = let
164
+
prefixMap = pre: maps:
165
+
builtins.map (k: {
166
+
action = "<cmd>${k.action}<cr>";
167
+
key = "${pre}${k.key}";
168
+
options = k.options;
169
+
})
170
+
maps;
171
+
in
0
172
lib.lists.flatten (
173
+
builtins.map (g:
174
+
if builtins.hasAttr "group" g
175
+
then prefixMap g.prefix g.keys
176
+
else g) [
177
{
178
group = "Tab Navigation";
179
prefix = "<Tab>";
···
292
key = "<leader><leader>";
293
options.desc = "Telescope Launch";
294
}
295
+
{
296
+
action.__raw = "[[<C-\\><C-n><C-w>]]";
297
+
mode = ["t"];
298
+
key = "<C-w>";
299
+
}
300
+
{
301
+
action.__raw = "[[<C-\\><C-n>]]";
302
+
mode = ["t"];
303
+
key = "<esc>";
304
+
}
305
]
306
);
307
308
extraPlugins = with pkgs.vimPlugins; [
309
+
{plugin = pkgs.nvim-mdx;}
310
+
{plugin = pkgs.nvim-flatten;}
311
+
{plugin = tiny-devicons-auto-colors-nvim;}
312
+
{plugin = nvim-biscuits;}
313
];
314
315
plugins = {
···
381
opts = {
382
position = "center";
383
};
384
+
layout = let
385
+
o = {
386
+
position = "center";
387
+
};
388
+
txt = s: {
389
+
type = "text";
390
+
val = s;
391
+
opts =
392
+
{
393
hl = "Keyword";
394
+
}
395
+
// o;
396
+
};
397
+
grp = g: {
398
+
type = "group";
399
+
val = g;
400
+
opts.spacing = 1;
401
+
};
402
+
btn = {
403
+
val,
404
+
onClick,
405
+
...
406
+
}: {
407
+
type = "button";
408
+
inherit val;
409
+
opts = o;
410
+
on_press.__raw = "function() vim.cmd[[${onClick}]] end";
411
+
};
412
+
cmd = {
413
+
command,
414
+
width,
415
+
height,
416
+
}: {
417
+
type = "terminal";
418
+
inherit command width height;
419
+
opts = o;
420
+
};
421
+
pad = {
422
+
type = "padding";
423
+
val = 2;
424
+
};
425
+
in
0
0
0
426
[
427
pad
428
pad
···
432
(
433
let
434
banner =
435
+
pkgs.runCommand "nvim-banner" {}
436
+
''${pkgs.toilet}/bin/toilet " NIXVIM " -f mono12 -F border > $out'';
437
# bannerText = builtins.readFile banner;
438
in
439
+
cmd {
440
+
command = ''open ${banner} | ${pkgs.lolcat}/bin/lolcat -f -S (random int 1..360)'';
441
+
# Hardcoding to prevent IFD
442
+
width = 83; # (builtins.stringLength (lib.trim (builtins.elemAt (lib.splitString "\n" bannerText) 1))) - 3;
443
+
height = 12; # (builtins.length (lib.splitString "\n" bannerText)) - 1;
444
+
}
445
)
446
(grp [
447
(btn {
···
462
])
463
(txt "::<シ>")
464
])
465
+
++ [pad];
466
};
467
468
trouble = {
···
525
start_in_insert = true;
526
insert_mappings = true;
527
terminal_mappings = true;
0
0
0
0
0
0
0
0
528
};
529
};
530
···
586
hover = {
587
enabled = true;
588
delay = 150;
589
+
reveal = ["close"];
590
};
591
sort_by = "insert_at_end";
592
diagnostics = "nvim_lsp";
···
601
602
statuscol = {
603
enable = true;
604
+
settings.segments = let
605
+
dispCond = {
606
+
__raw = ''
607
+
function(ln)
608
+
return vim.bo.filetype ~= "neo-tree"
609
+
end
610
+
'';
611
+
};
612
+
in [
613
+
{
614
+
click = "v:lua.ScSa";
615
+
condition = [
616
+
dispCond
617
+
];
618
+
text = [
619
+
"%s"
620
+
];
621
+
}
622
+
{
623
+
click = "v:lua.ScLa";
624
+
condition = [dispCond];
625
+
text = [
626
+
{
627
+
__raw = "require('statuscol.builtin').lnumfunc";
628
+
}
629
+
];
630
+
}
631
+
{
632
+
click = "v:lua.ScFa";
633
+
condition = [
634
+
dispCond
635
+
{
636
+
__raw = "require('statuscol.builtin').not_empty";
637
+
}
638
+
];
639
+
text = [
640
+
{
641
+
__raw = "require('statuscol.builtin').foldfunc";
642
+
}
643
+
" "
644
+
];
645
+
}
646
+
];
0
0
647
};
648
649
dropbar = {
···
669
670
options = {
671
theme = "catppuccin";
672
+
disabled_filetypes = ["neo-tree"];
673
+
ignore_focus = ["neo-tree"];
674
};
675
};
676
};
···
764
cmp = {
765
enable = true;
766
settings = {
767
+
sources = map (name: {inherit name;}) [
768
"nvim_lsp"
769
"nvim_lsp_signature_help"
770
"path"
+202
-210
nixosModules/graphics/floorp.nix
···
2
lib,
3
pkgs,
4
...
5
-
}:
6
-
{
7
environment.systemPackages = with pkgs; [
8
floorp
9
];
···
51
EmailTracking = true;
52
};
53
54
-
Preferences =
55
-
let
56
-
lock = val: {
57
-
Value = val;
58
-
Status = "locked";
59
-
};
60
-
in
61
-
{
62
-
# General
63
-
"browser.aboutConfig.showWarning" = lock false;
64
-
"media.eme.enabled" = lock true; # Encrypted Media Extensions (DRM)
65
-
"layout.css.prefers-color-scheme.content-override" = lock 0;
66
-
"browser.startup.page" = 3; # Restore previous session
67
-
"toolkit.telemetry.server" = lock "";
68
69
-
# New Tab
70
-
"browser.newtabpage.activity-stream.showSponsored" = lock false;
71
-
"browser.newtabpage.activity-stream.system.showSponsored" = lock false;
72
-
"browser.newtabpage.activity-stream.feeds.section.topstories" = lock false;
73
-
"browser.newtabpage.activity-stream.feeds.topsites" = lock false;
74
-
"browser.newtabpage.activity-stream.showSponsoredTopSites" = lock false;
75
-
"browser.newtabpage.activity-stream.showWeather" = lock false;
76
-
"browser.newtabpage.activity-stream.system.showWeather" = lock false;
77
-
"browser.newtabpage.activity-stream.feeds.weatherfeed" = lock false;
78
-
"browser.newtabpage.activity-stream.feeds.telemetry" = lock false;
79
-
"browser.newtabpage.activity-stream.telemetry" = lock false;
80
-
"browser.newtabpage.activity-stream.telemetry.structuredIngestion.endpoint" = lock "";
81
-
"browser.newtabpage.pinned" = lock [ ];
82
-
"browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.havePinned" = lock "";
83
-
"browser.urlbar.suggest.weather" = lock false;
84
-
"browser.urlbar.quicksuggest.scenario" = lock "offline";
85
-
"browser.urlbar.suggest.quicksuggest.nonsponsored" = lock false;
86
-
"browser.urlbar.suggest.quicksuggest.sponsored" = lock false;
87
88
-
# Devtools
89
-
"devtools.theme" = lock "dark";
90
-
"devtools.dom.enabled" = lock true;
91
-
"devtools.command-button-rulers.enabled" = lock true;
92
-
"devtools.command-button-measure.enabled" = lock true;
93
-
"devtools.command-button-screenshot.enabled" = lock true;
94
-
"devtools.toolbox.host" = lock "right";
95
-
"devtools.webconsole.persistlog" = lock true;
96
-
"devtools.webconsole.timestampMessages" = lock true;
97
98
-
# Privacy
99
-
"dom.private-attribution.submission.enabled" = lock false;
100
-
"privacy.globalprivacycontrol.enabled" = lock true;
101
-
};
102
103
Extensions.Install =
104
map (x: "https://addons.mozilla.org/firefox/downloads/latest/${x}/latest.xpi")
105
-
[
106
-
# Appearance
107
-
"catppuccin-mocha-green"
108
-
"darkreader"
109
-
"material-icons-for-github"
110
-
"refined-github-"
111
112
-
# Security / Privacy
113
-
"privacy-badger17"
114
-
"decentraleyes"
115
-
"canvasblocker"
116
-
"facebook-container"
117
118
-
## Ads / Youtube
119
-
"adnauseam"
120
-
"sponsorblock"
121
-
"youtube-shorts-block"
122
-
"dearrow"
123
124
-
# Information
125
-
"flagfox"
126
-
"awesome-rss"
127
128
-
# Devtools
129
-
"react-devtools"
130
-
"open-graph-preview-and-debug"
131
-
"wave-accessibility-tool"
132
-
"styl-us"
133
134
-
# Misc
135
-
"plasma-integration" # integration with MPRIS & KDE Connect
136
-
"keepassxc-browser" # integration with KeepassXC
137
-
"meowad" # Replace ads on Twitter with :3
138
-
];
139
140
ExtensionSettings."*" = {
141
default_area = "menupanel";
···
145
force = true;
146
default = "ddg@search.mozilla.orgdefault";
147
privateDefault = "ddg@search.mozilla.orgdefault";
148
-
engines =
149
-
let
150
-
mkEngineForceFavicon = aliases: queryUrl: iconUrl: {
151
-
definedAliases = aliases;
152
-
icon = iconUrl;
153
-
urls = [ { template = queryUrl; } ];
154
-
};
155
-
mkEngine =
156
-
aliases: queryUrl: iconExt:
157
-
(mkEngineForceFavicon aliases queryUrl (
158
-
let
159
-
noPath = lib.strings.concatStrings (
160
-
lib.strings.intersperse "/" (lib.lists.take 3 (lib.strings.splitString "/" queryUrl))
161
-
);
162
-
in
163
-
"${noPath}/favicon.${iconExt}"
164
-
));
165
-
in
166
-
{
167
-
# Dev
168
-
"GitHub Repos" =
169
-
mkEngineForceFavicon [ "@gh" "@github" ]
170
-
"https://github.com/search?type=repositories&q={searchTerms}"
171
-
"https://github.githubassets.com/favicons/favicon-dark.svg";
172
-
"SourceGraph" = mkEngine [
173
-
"@sg"
174
-
"@sourcegraph"
175
-
] "https://sourcegraph.com/search?q={searchTerms}" "png";
176
177
-
## Web
178
-
"MDN Web Docs" = mkEngine [
179
-
"@mdn"
180
-
] "https://developer.mozilla.org/en-US/search?q={searchTerms}" "ico";
181
-
"Web.Dev" =
182
-
mkEngineForceFavicon [ "@webdev" "@lighthouse" ] "https://web.dev/s/results?q={searchTerms}"
183
-
"https://www.gstatic.com/devrel-devsite/prod/vc7080045e84cd2ce1faf7f7a3876037748d52d088e5100df2e949d051a784791/web/images/favicon.png";
184
-
"Can I Use" = mkEngineForceFavicon [
185
-
"@ciu"
186
-
"@baseline"
187
-
] "https://caniuse.com/?search={searchTerms}" "https://caniuse.com/img/favicon-128.png";
188
-
"NPM" =
189
-
mkEngineForceFavicon [ "@npm" ] "https://www.npmjs.com/search?q={searchTerms}"
190
-
"https://static-production.npmjs.com/3dc95981de4241b35cd55fe126ab6b2c.png";
191
-
"Iconify" = mkEngine [
192
-
"@iconify"
193
-
"@icons"
194
-
] "https://icon-sets.iconify.design/?query={searchTerms}" "ico";
195
-
"Astro" = mkEngineForceFavicon [
196
-
"@astro"
197
-
] "https://a.stro.cc/{searchTerms}" "https://docs.astro.build/favicon.svg";
198
-
"Porkbun" = mkEngine [ "@porkbun" ] "https://porkbun.com/checkout/search?q={searchTerms}" "ico";
199
-
"Http.Cat" = mkEngine [ "@cat" "@hcat" "@httpcat" ] "https://http.cat/{searchTerms}" "ico";
200
201
-
## Rust
202
-
"Crates.io" = mkEngine [
203
-
"@crates"
204
-
"@cratesio"
205
-
"@cargo"
206
-
] "https://crates.io/search?q={searchTerms}" "ico";
207
-
"Rust Docs" =
208
-
mkEngineForceFavicon [ "@rust" "@rustdocs" "@ruststd" ]
209
-
"https://doc.rust-lang.org/std/index.html?search={searchTerms}"
210
-
"https://doc.rust-lang.org/static.files/favicon-2c020d218678b618.svg";
211
-
"Docsrs" = mkEngine [ "@docsrs" ] "https://docs.rs/releases/search?query={searchTerms}" "ico";
212
213
-
## Python
214
-
"PyPI" = mkEngineForceFavicon [
215
-
"@pypi"
216
-
"@pip"
217
-
] "https://pypi.org/search/?q={searchTerms}" "https://pypi.org/static/images/favicon.35549fe8.ico";
218
219
-
## .NET
220
-
"NuGet" = mkEngine [ "@nuget" ] "https://www.nuget.org/packages?q={searchTerms}" "ico";
221
222
-
## Linux Stuff
223
-
"Kernel Docs" = mkEngine [
224
-
"@lnx"
225
-
"@linux"
226
-
"@kernel"
227
-
] "https://www.kernel.org/doc/html/latest/search.html?q={searchTerms}" "ico";
228
-
"Arch Wiki" = mkEngine [
229
-
"@aw"
230
-
"@arch"
231
-
] "https://wiki.archlinux.org/index.php?title=Special%3ASearch&search={searchTerms}" "ico";
232
-
"Nerd Fonts" =
233
-
mkEngineForceFavicon [ "@nf" "@nerdfonts" ] "https://www.nerdfonts.com/cheat-sheet?q={searchTerms}"
234
-
"https://www.nerdfonts.com/assets/img/favicon.ico";
235
236
-
### Nix
237
-
"Nix Packages" = mkEngine [
238
-
"@nixpkgs"
239
-
] "https://search.nixos.org/packages?channel=unstable&size=500&query={searchTerms}" "png";
240
-
"NixOS Options" = mkEngine [
241
-
"@nixos"
242
-
] "https://search.nixos.org/options?channel=unstable&size=500&query={searchTerms}" "png";
243
-
"NixOS Wiki" = mkEngine [ "@nixwiki" ] "https://nixos.wiki/index.php?search={searchTerms}" "png";
244
-
"Home Manager Options" =
245
-
mkEngineForceFavicon [ "@hm" ]
246
-
"https://home-manager-options.extranix.com/?release=master&query={searchTerms}"
247
-
"https://home-manager-options.extranix.com/images/favicon.png";
248
-
"Noogle" = mkEngine [
249
-
"@noogle"
250
-
"@nixlib"
251
-
] "https://noogle.dev/q?limit=100&term={searchTerms}" "png";
252
-
"SourceGraph Nix" =
253
-
mkEngine [ "@sgn" "@yoink" ]
254
-
"https://sourcegraph.com/search?q=lang:Nix+-repo:NixOS/*+-repo:nix-community/*+{searchTerms}"
255
-
"png";
256
-
"Nixpkgs Issues" =
257
-
mkEngineForceFavicon [ "@nixissues" ]
258
-
"https://github.com/NixOS/nixpkgs/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+{searchTerms}"
259
-
"https://github.githubassets.com/favicons/favicon-dark.svg";
260
-
"NixVim Options" =
261
-
mkEngineForceFavicon [ "@nixvim" ]
262
-
"https://nix-community.github.io/nixvim/search/?option_scope=0&query={searchTerms}"
263
-
"https://nix-community.github.io/nixvim/search/favicon.ico";
264
265
-
# Media
266
-
"youtube" = mkEngine [ "@yt" ] "https://www.youtube.com/results?search_query={searchTerms}" "ico";
267
-
"Spotify" =
268
-
mkEngineForceFavicon [ "@sp" "@spotify" ] "https://open.spotify.com/search/{searchTerms}"
269
-
"https://open.spotifycdn.com/cdn/images/favicon16.1c487bff.png";
270
-
"Netflix" = mkEngine [ "@nfx" ] "https://www.netflix.com/search?q={searchTerms}" "ico";
271
-
"IMDb" = mkEngine [ "@imdb" ] "https://www.imdb.com/find?q={searchTerms}" "ico";
272
273
-
# Misc
274
-
"Firefox Add-ons" = mkEngine [
275
-
"@addons"
276
-
] "https://addons.mozilla.org/en-US/firefox/search/?q={searchTerms}" "ico";
277
-
"Urban Dictionary" = mkEngine [
278
-
"@ud"
279
-
"@urban"
280
-
] "https://www.urbandictionary.com/define.php?term={searchTerms}" "ico";
281
282
-
# Overrides
283
-
"History".metaData.alias = "@h";
284
-
"Bookmarks".metaData.alias = "@b";
285
-
"Tabs".metaData.alias = "@t";
286
-
"bing@search.mozilla.orgdefault".metaData.hidden = true;
287
-
"amazondotcom-us@search.mozilla.orgdefault".metaData.alias = "@amz";
288
-
"google@search.mozilla.orgdefault".metaData.alias = "@g";
289
-
"wikipedia@search.mozilla.orgdefault".metaData.alias = "@w";
290
-
};
291
};
292
};
293
};
···
2
lib,
3
pkgs,
4
...
5
+
}: {
0
6
environment.systemPackages = with pkgs; [
7
floorp
8
];
···
50
EmailTracking = true;
51
};
52
53
+
Preferences = let
54
+
lock = val: {
55
+
Value = val;
56
+
Status = "locked";
57
+
};
58
+
in {
59
+
# General
60
+
"browser.aboutConfig.showWarning" = lock false;
61
+
"media.eme.enabled" = lock true; # Encrypted Media Extensions (DRM)
62
+
"layout.css.prefers-color-scheme.content-override" = lock 0;
63
+
"browser.startup.page" = 3; # Restore previous session
64
+
"toolkit.telemetry.server" = lock "";
0
0
65
66
+
# New Tab
67
+
"browser.newtabpage.activity-stream.showSponsored" = lock false;
68
+
"browser.newtabpage.activity-stream.system.showSponsored" = lock false;
69
+
"browser.newtabpage.activity-stream.feeds.section.topstories" = lock false;
70
+
"browser.newtabpage.activity-stream.feeds.topsites" = lock false;
71
+
"browser.newtabpage.activity-stream.showSponsoredTopSites" = lock false;
72
+
"browser.newtabpage.activity-stream.showWeather" = lock false;
73
+
"browser.newtabpage.activity-stream.system.showWeather" = lock false;
74
+
"browser.newtabpage.activity-stream.feeds.weatherfeed" = lock false;
75
+
"browser.newtabpage.activity-stream.feeds.telemetry" = lock false;
76
+
"browser.newtabpage.activity-stream.telemetry" = lock false;
77
+
"browser.newtabpage.activity-stream.telemetry.structuredIngestion.endpoint" = lock "";
78
+
"browser.newtabpage.pinned" = lock [];
79
+
"browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts.havePinned" = lock "";
80
+
"browser.urlbar.suggest.weather" = lock false;
81
+
"browser.urlbar.quicksuggest.scenario" = lock "offline";
82
+
"browser.urlbar.suggest.quicksuggest.nonsponsored" = lock false;
83
+
"browser.urlbar.suggest.quicksuggest.sponsored" = lock false;
84
85
+
# Devtools
86
+
"devtools.theme" = lock "dark";
87
+
"devtools.dom.enabled" = lock true;
88
+
"devtools.command-button-rulers.enabled" = lock true;
89
+
"devtools.command-button-measure.enabled" = lock true;
90
+
"devtools.command-button-screenshot.enabled" = lock true;
91
+
"devtools.toolbox.host" = lock "right";
92
+
"devtools.webconsole.persistlog" = lock true;
93
+
"devtools.webconsole.timestampMessages" = lock true;
94
95
+
# Privacy
96
+
"dom.private-attribution.submission.enabled" = lock false;
97
+
"privacy.globalprivacycontrol.enabled" = lock true;
98
+
};
99
100
Extensions.Install =
101
map (x: "https://addons.mozilla.org/firefox/downloads/latest/${x}/latest.xpi")
102
+
[
103
+
# Appearance
104
+
"catppuccin-mocha-green"
105
+
"darkreader"
106
+
"material-icons-for-github"
107
+
"refined-github-"
108
109
+
# Security / Privacy
110
+
"privacy-badger17"
111
+
"decentraleyes"
112
+
"canvasblocker"
113
+
"facebook-container"
114
115
+
## Ads / Youtube
116
+
"adnauseam"
117
+
"sponsorblock"
118
+
"youtube-shorts-block"
119
+
"dearrow"
120
121
+
# Information
122
+
"flagfox"
123
+
"awesome-rss"
124
125
+
# Devtools
126
+
"react-devtools"
127
+
"open-graph-preview-and-debug"
128
+
"wave-accessibility-tool"
129
+
"styl-us"
130
131
+
# Misc
132
+
"plasma-integration" # integration with MPRIS & KDE Connect
133
+
"keepassxc-browser" # integration with KeepassXC
134
+
"meowad" # Replace ads on Twitter with :3
135
+
];
136
137
ExtensionSettings."*" = {
138
default_area = "menupanel";
···
142
force = true;
143
default = "ddg@search.mozilla.orgdefault";
144
privateDefault = "ddg@search.mozilla.orgdefault";
145
+
engines = let
146
+
mkEngineForceFavicon = aliases: queryUrl: iconUrl: {
147
+
definedAliases = aliases;
148
+
icon = iconUrl;
149
+
urls = [{template = queryUrl;}];
150
+
};
151
+
mkEngine = aliases: queryUrl: iconExt: (mkEngineForceFavicon aliases queryUrl (
152
+
let
153
+
noPath = lib.strings.concatStrings (
154
+
lib.strings.intersperse "/" (lib.lists.take 3 (lib.strings.splitString "/" queryUrl))
155
+
);
156
+
in "${noPath}/favicon.${iconExt}"
157
+
));
158
+
in {
159
+
# Dev
160
+
"GitHub Repos" =
161
+
mkEngineForceFavicon ["@gh" "@github"]
162
+
"https://github.com/search?type=repositories&q={searchTerms}"
163
+
"https://github.githubassets.com/favicons/favicon-dark.svg";
164
+
"SourceGraph" = mkEngine [
165
+
"@sg"
166
+
"@sourcegraph"
167
+
] "https://sourcegraph.com/search?q={searchTerms}" "png";
0
0
0
0
0
168
169
+
## Web
170
+
"MDN Web Docs" = mkEngine [
171
+
"@mdn"
172
+
] "https://developer.mozilla.org/en-US/search?q={searchTerms}" "ico";
173
+
"Web.Dev" =
174
+
mkEngineForceFavicon ["@webdev" "@lighthouse"] "https://web.dev/s/results?q={searchTerms}"
175
+
"https://www.gstatic.com/devrel-devsite/prod/vc7080045e84cd2ce1faf7f7a3876037748d52d088e5100df2e949d051a784791/web/images/favicon.png";
176
+
"Can I Use" = mkEngineForceFavicon [
177
+
"@ciu"
178
+
"@baseline"
179
+
] "https://caniuse.com/?search={searchTerms}" "https://caniuse.com/img/favicon-128.png";
180
+
"NPM" =
181
+
mkEngineForceFavicon ["@npm"] "https://www.npmjs.com/search?q={searchTerms}"
182
+
"https://static-production.npmjs.com/3dc95981de4241b35cd55fe126ab6b2c.png";
183
+
"Iconify" = mkEngine [
184
+
"@iconify"
185
+
"@icons"
186
+
] "https://icon-sets.iconify.design/?query={searchTerms}" "ico";
187
+
"Astro" = mkEngineForceFavicon [
188
+
"@astro"
189
+
] "https://a.stro.cc/{searchTerms}" "https://docs.astro.build/favicon.svg";
190
+
"Porkbun" = mkEngine ["@porkbun"] "https://porkbun.com/checkout/search?q={searchTerms}" "ico";
191
+
"Http.Cat" = mkEngine ["@cat" "@hcat" "@httpcat"] "https://http.cat/{searchTerms}" "ico";
192
193
+
## Rust
194
+
"Crates.io" = mkEngine [
195
+
"@crates"
196
+
"@cratesio"
197
+
"@cargo"
198
+
] "https://crates.io/search?q={searchTerms}" "ico";
199
+
"Rust Docs" =
200
+
mkEngineForceFavicon ["@rust" "@rustdocs" "@ruststd"]
201
+
"https://doc.rust-lang.org/std/index.html?search={searchTerms}"
202
+
"https://doc.rust-lang.org/static.files/favicon-2c020d218678b618.svg";
203
+
"Docsrs" = mkEngine ["@docsrs"] "https://docs.rs/releases/search?query={searchTerms}" "ico";
204
205
+
## Python
206
+
"PyPI" = mkEngineForceFavicon [
207
+
"@pypi"
208
+
"@pip"
209
+
] "https://pypi.org/search/?q={searchTerms}" "https://pypi.org/static/images/favicon.35549fe8.ico";
210
211
+
## .NET
212
+
"NuGet" = mkEngine ["@nuget"] "https://www.nuget.org/packages?q={searchTerms}" "ico";
213
214
+
## Linux Stuff
215
+
"Kernel Docs" = mkEngine [
216
+
"@lnx"
217
+
"@linux"
218
+
"@kernel"
219
+
] "https://www.kernel.org/doc/html/latest/search.html?q={searchTerms}" "ico";
220
+
"Arch Wiki" = mkEngine [
221
+
"@aw"
222
+
"@arch"
223
+
] "https://wiki.archlinux.org/index.php?title=Special%3ASearch&search={searchTerms}" "ico";
224
+
"Nerd Fonts" =
225
+
mkEngineForceFavicon ["@nf" "@nerdfonts"] "https://www.nerdfonts.com/cheat-sheet?q={searchTerms}"
226
+
"https://www.nerdfonts.com/assets/img/favicon.ico";
227
228
+
### Nix
229
+
"Nix Packages" = mkEngine [
230
+
"@nixpkgs"
231
+
] "https://search.nixos.org/packages?channel=unstable&size=500&query={searchTerms}" "png";
232
+
"NixOS Options" = mkEngine [
233
+
"@nixos"
234
+
] "https://search.nixos.org/options?channel=unstable&size=500&query={searchTerms}" "png";
235
+
"NixOS Wiki" = mkEngine ["@nixwiki"] "https://nixos.wiki/index.php?search={searchTerms}" "png";
236
+
"Home Manager Options" =
237
+
mkEngineForceFavicon ["@hm"]
238
+
"https://home-manager-options.extranix.com/?release=master&query={searchTerms}"
239
+
"https://home-manager-options.extranix.com/images/favicon.png";
240
+
"Noogle" = mkEngine [
241
+
"@noogle"
242
+
"@nixlib"
243
+
] "https://noogle.dev/q?limit=100&term={searchTerms}" "png";
244
+
"SourceGraph Nix" =
245
+
mkEngine ["@sgn" "@yoink"]
246
+
"https://sourcegraph.com/search?q=lang:Nix+-repo:NixOS/*+-repo:nix-community/*+{searchTerms}"
247
+
"png";
248
+
"Nixpkgs Issues" =
249
+
mkEngineForceFavicon ["@nixissues"]
250
+
"https://github.com/NixOS/nixpkgs/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen+{searchTerms}"
251
+
"https://github.githubassets.com/favicons/favicon-dark.svg";
252
+
"NixVim Options" =
253
+
mkEngineForceFavicon ["@nixvim"]
254
+
"https://nix-community.github.io/nixvim/search/?option_scope=0&query={searchTerms}"
255
+
"https://nix-community.github.io/nixvim/search/favicon.ico";
256
257
+
# Media
258
+
"youtube" = mkEngine ["@yt"] "https://www.youtube.com/results?search_query={searchTerms}" "ico";
259
+
"Spotify" =
260
+
mkEngineForceFavicon ["@sp" "@spotify"] "https://open.spotify.com/search/{searchTerms}"
261
+
"https://open.spotifycdn.com/cdn/images/favicon16.1c487bff.png";
262
+
"Netflix" = mkEngine ["@nfx"] "https://www.netflix.com/search?q={searchTerms}" "ico";
263
+
"IMDb" = mkEngine ["@imdb"] "https://www.imdb.com/find?q={searchTerms}" "ico";
264
265
+
# Misc
266
+
"Firefox Add-ons" = mkEngine [
267
+
"@addons"
268
+
] "https://addons.mozilla.org/en-US/firefox/search/?q={searchTerms}" "ico";
269
+
"Urban Dictionary" = mkEngine [
270
+
"@ud"
271
+
"@urban"
272
+
] "https://www.urbandictionary.com/define.php?term={searchTerms}" "ico";
273
274
+
# Overrides
275
+
"History".metaData.alias = "@h";
276
+
"Bookmarks".metaData.alias = "@b";
277
+
"Tabs".metaData.alias = "@t";
278
+
"bing@search.mozilla.orgdefault".metaData.hidden = true;
279
+
"amazondotcom-us@search.mozilla.orgdefault".metaData.alias = "@amz";
280
+
"google@search.mozilla.orgdefault".metaData.alias = "@g";
281
+
"wikipedia@search.mozilla.orgdefault".metaData.alias = "@w";
282
+
};
283
};
284
};
285
};