summaryrefslogtreecommitdiff
path: root/home.nix
diff options
context:
space:
mode:
authorvin <vin@vineetk.net>2025-05-07 17:00:14 -0400
committervin <vin@vineetk.net>2025-05-07 17:44:33 -0400
commit1ccc0f2c368f35d3082e4b7cef5789f40a6e1bfe (patch)
tree3284daaf6c634b58bf553ed79f0641c4b7158292 /home.nix
parent208827b8f8a37fc8bc148c7b0e18791a78cd0cc9 (diff)
run nixfmt
Diffstat (limited to 'home.nix')
-rw-r--r--home.nix1401
1 files changed, 718 insertions, 683 deletions
diff --git a/home.nix b/home.nix
index d901997..334bd42 100644
--- a/home.nix
+++ b/home.nix
@@ -1,48 +1,60 @@
1{ config, lib, pkgs, inputs, hostname, ... }: 1{
2 config,
3 lib,
4 pkgs,
5 inputs,
6 hostname,
7 ...
8}:
2 9
3let 10let
4 colors = import ./colors.nix; 11 colors = import ./colors.nix;
5 12
6 isync-oauth2 = with pkgs; buildEnv { 13 isync-oauth2 =
7 # takens from: 14 with pkgs;
8 # https://github.com/wentasah/nix-conf/raw/master/modules/mail.nix 15 buildEnv {
9 # https://github.com/NixOS/nixpkgs/issues/108480#issuecomment-1115108802 16 # takens from:
10 name = "isync"; 17 # https://github.com/wentasah/nix-conf/raw/master/modules/mail.nix
11 paths = [ pkgs.isync ]; 18 # https://github.com/NixOS/nixpkgs/issues/108480#issuecomment-1115108802
12 pathsToLink = ["/bin"]; 19 name = "isync";
13 nativeBuildInputs = [ makeWrapper ]; 20 paths = [ pkgs.isync ];
14 postBuild = '' 21 pathsToLink = [ "/bin" ];
22 nativeBuildInputs = [ makeWrapper ];
23 postBuild = ''
15 wrapProgram "$out/bin/mbsync" \ 24 wrapProgram "$out/bin/mbsync" \
16 --prefix SASL_PATH : "${cyrus_sasl}/lib/sasl2:${cyrus-sasl-xoauth2}/lib/sasl2" 25 --prefix SASL_PATH : "${cyrus_sasl}/lib/sasl2:${cyrus-sasl-xoauth2}/lib/sasl2"
17 ''; 26 '';
18 };
19
20 uvtools = with pkgs; appimageTools.wrapType2 rec {
21 pname = "UVtools";
22 version = "5.0.6";
23 src = fetchurl {
24 url = "https://github.com/sn4k3/${pname}/releases/download/v${version}/${pname}_linux-x64_v${version}.AppImage";
25 hash = "sha256-T1E2+7YocWbspRrpWoexfLmm7LZSb4Nkw8WSBD6zTHs";
26 }; 27 };
27 extraPkgs = pkgs: [ pkgs.icu ];
28 };
29in {
30 home = {
31 username = "vin";
32 homeDirectory = "/home/vin";
33 stateVersion = "24.05";
34 28
35 packages = with pkgs; [ 29 uvtools =
30 with pkgs;
31 appimageTools.wrapType2 rec {
32 pname = "UVtools";
33 version = "5.0.6";
34 src = fetchurl {
35 url = "https://github.com/sn4k3/${pname}/releases/download/v${version}/${pname}_linux-x64_v${version}.AppImage";
36 hash = "sha256-T1E2+7YocWbspRrpWoexfLmm7LZSb4Nkw8WSBD6zTHs";
37 };
38 extraPkgs = pkgs: [ pkgs.icu ];
39 };
40in
41{
42 home = {
43 username = "vin";
44 homeDirectory = "/home/vin";
45 stateVersion = "24.05";
46
47 packages = with pkgs; [
36 # normal utils 48 # normal utils
37 neofetch 49 neofetch
38 rclone 50 rclone
39 wcalc 51 wcalc
40 52
41 # programming 53 # programming
42 python3 54 python3
43 55
44 # CAD software 56 # CAD software
45 kicad 57 kicad
46 openscad 58 openscad
47 59
48 # document writing and viewing 60 # document writing and viewing
@@ -51,7 +63,7 @@ in {
51 zathura 63 zathura
52 64
53 # messaging 65 # messaging
54 profanity 66 profanity
55 vesktop 67 vesktop
56 68
57 # email 69 # email
@@ -64,19 +76,19 @@ in {
64 amdgpu_top 76 amdgpu_top
65 77
66 # encryption 78 # encryption
67 age 79 age
68 age-plugin-yubikey 80 age-plugin-yubikey
69 oathToolkit 81 oathToolkit
70 yubikey-agent 82 yubikey-agent
71 yubikey-manager 83 yubikey-manager
72 84
73 # system utils 85 # system utils
74 dmenu 86 dmenu
75 file 87 file
76 htop 88 htop
77 mlocate 89 mlocate
78 ncdu 90 ncdu
79 tree 91 tree
80 unzip 92 unzip
81 p7zip 93 p7zip
82 94
@@ -84,8 +96,8 @@ in {
84 scrot 96 scrot
85 sxiv 97 sxiv
86 xclip 98 xclip
87 xdotool 99 xdotool
88 xwallpaper 100 xwallpaper
89 101
90 # wayland and desktop-related 102 # wayland and desktop-related
91 grim 103 grim
@@ -96,36 +108,32 @@ in {
96 # 3d printing 108 # 3d printing
97 prusa-slicer 109 prusa-slicer
98 uvtools 110 uvtools
99 ]; 111 ];
100 112
101 preferXdgDirectories = true; 113 preferXdgDirectories = true;
102 114
103 sessionPath = [ 115 sessionPath = [
104 "$HOME/bin" 116 "$HOME/bin"
105 "$HOME/.local/bin" 117 "$HOME/.local/bin"
106 ]; 118 ];
107 119
108 sessionVariables = { 120 sessionVariables = {
109 EDITOR = "nvim"; 121 EDITOR = "nvim";
110 VISUAL = "nvim"; 122 VISUAL = "nvim";
111 PAGER = "less"; 123 PAGER = "less";
112 LESS = "-iR"; 124 LESS = "-iR";
113 LESSHISTFILE = "/dev/null"; 125 LESSHISTFILE = "/dev/null";
114 BROWSER = "qutebrowser"; 126 BROWSER = "qutebrowser";
115 127
116 GOPROXY = "direct"; 128 GOPROXY = "direct";
117 129
118 AGE_KEY = "$HOME/.ssh/id_ed25519"; 130 AGE_KEY = "$HOME/.ssh/id_ed25519";
119 AGE_PUB = "$AGE_KEY.pub"; 131 AGE_PUB = "$AGE_KEY.pub";
120 KASI_DIR = 132 KASI_DIR = if hostname == "demiurge" then "/data/kasi" else "/home/vin/.kasi";
121 if hostname == "demiurge" then 133 KASI_ENCRYPT = "age -R $AGE_PUB";
122 "/data/kasi" 134 KASI_DECRYPT = "age -d -i $AGE_KEY";
123 else 135 KASI_EXT = "age";
124 "/home/vin/.kasi"; 136 KASI_CLIPBOARD = "wl-copy -o";
125 KASI_ENCRYPT = "age -R $AGE_PUB";
126 KASI_DECRYPT = "age -d -i $AGE_KEY";
127 KASI_EXT = "age";
128 KASI_CLIPBOARD = "wl-copy -o";
129 137
130 # w3m is only used for aerc html preview 138 # w3m is only used for aerc html preview
131 W3M_DIR = "/var/empty"; 139 W3M_DIR = "/var/empty";
@@ -135,8 +143,8 @@ in {
135 143
136 CRAWL_DIR = "$HOME/.local/share/crawl"; 144 CRAWL_DIR = "$HOME/.local/share/crawl";
137 145
138 MOZ_ACCELERATED = 1; 146 MOZ_ACCELERATED = 1;
139 MOZ_WEBRENDER = 1; 147 MOZ_WEBRENDER = 1;
140 148
141 LM_LICENSE_FILE = 149 LM_LICENSE_FILE =
142 if hostname == "demiurge" then 150 if hostname == "demiurge" then
@@ -146,21 +154,21 @@ in {
146 154
147 # broken qt6.9 rendering 155 # broken qt6.9 rendering
148 QTWEBENGINE_FORCE_USE_GBM = 0; 156 QTWEBENGINE_FORCE_USE_GBM = 0;
149 }; 157 };
150 158
151 shellAliases = { 159 shellAliases = {
152 # shortened commands 160 # shortened commands
153 md = "mkdir -p"; 161 md = "mkdir -p";
154 e = "$EDITOR"; 162 e = "$EDITOR";
155 p = "$PAGER"; 163 p = "$PAGER";
156 m = "aerc"; 164 m = "aerc";
157 gc = "git clone"; 165 gc = "git clone";
158 cbc = "wl-copy -c; wl-copy -cp"; 166 cbc = "wl-copy -c; wl-copy -cp";
159 167
160 # default arguments to commands 168 # default arguments to commands
161 ls = "ls -F --color=auto"; 169 ls = "ls -F --color=auto";
162 rsync = "rsync --no-inc-recursive"; 170 rsync = "rsync --no-inc-recursive";
163 mpv = "mpv --save-position-on-quit"; 171 mpv = "mpv --save-position-on-quit";
164 wget = "wget --no-hsts"; 172 wget = "wget --no-hsts";
165 ytdl = "noglob yt-dlp"; 173 ytdl = "noglob yt-dlp";
166 174
@@ -171,27 +179,27 @@ in {
171 nr = "nix run"; 179 nr = "nix run";
172 ns = "nix search"; 180 ns = "nix search";
173 nsh = "nix shell"; 181 nsh = "nix shell";
174 }; 182 };
175 }; 183 };
176 184
177 fonts.fontconfig = { 185 fonts.fontconfig = {
178 enable = true; 186 enable = true;
179 defaultFonts = { 187 defaultFonts = {
180 emoji = []; 188 emoji = [ ];
181 monospace = [ "Comic Code" ]; 189 monospace = [ "Comic Code" ];
182 sansSerif = [ "Cantarell" ]; 190 sansSerif = [ "Cantarell" ];
183 serif = [ "CMU Serif" ]; 191 serif = [ "CMU Serif" ];
184 }; 192 };
185 }; 193 };
186 194
187 gtk = { 195 gtk = {
188 enable = true; 196 enable = true;
189 font.name = "monospace 11"; 197 font.name = "monospace 11";
190 iconTheme.name = "rose-pine"; 198 iconTheme.name = "rose-pine";
191 iconTheme.package = pkgs.rose-pine-icon-theme; 199 iconTheme.package = pkgs.rose-pine-icon-theme;
192 theme.name = "Everblush"; 200 theme.name = "Everblush";
193 theme.package = inputs.everblush-gtk.packages.x86_64-linux.default; 201 theme.package = inputs.everblush-gtk.packages.x86_64-linux.default;
194 }; 202 };
195 203
196 dconf.settings = { 204 dconf.settings = {
197 "org/virt-manager/virt-manager/connections" = { 205 "org/virt-manager/virt-manager/connections" = {
@@ -223,8 +231,13 @@ in {
223 expunge = "both"; 231 expunge = "both";
224 remove = "both"; 232 remove = "both";
225 patterns = [ 233 patterns = [
226 "*" "!Calendar*" "!Contacts*" "!Conversation*" 234 "*"
227 "!Notes*" "!Journal*" "!Tasks*" 235 "!Calendar*"
236 "!Contacts*"
237 "!Conversation*"
238 "!Notes*"
239 "!Journal*"
240 "!Tasks*"
228 ]; 241 ];
229 }; 242 };
230 243
@@ -281,7 +294,7 @@ in {
281 }; 294 };
282 }; 295 };
283 296
284 programs = { 297 programs = {
285 home-manager.enable = true; 298 home-manager.enable = true;
286 299
287 aerc.enable = true; 300 aerc.enable = true;
@@ -300,9 +313,10 @@ in {
300 pad = "10x10"; 313 pad = "10x10";
301 }; 314 };
302 315
303 colors = let 316 colors =
304 rmhash = s: builtins.substring 1 (-1) s; 317 let
305 in 318 rmhash = s: builtins.substring 1 (-1) s;
319 in
306 { 320 {
307 alpha = 0.9; 321 alpha = 0.9;
308 322
@@ -330,41 +344,41 @@ in {
330 }; 344 };
331 }; 345 };
332 346
333 git = { 347 git = {
334 enable = true; 348 enable = true;
335 difftastic = { 349 difftastic = {
336 enable = true; 350 enable = true;
337 background = "dark"; 351 background = "dark";
338 color = "always"; 352 color = "always";
339 display = "side-by-side-show-both"; 353 display = "side-by-side-show-both";
340 }; 354 };
341 extraConfig = { 355 extraConfig = {
342 user = { 356 user = {
343 email = "git@vineetk.net"; 357 email = "git@vineetk.net";
344 name = "vin"; 358 name = "vin";
345 signingkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEvM0xCLziR+ZT/SYE1aZM6dklbw4fEC17TWqbADIZRH kou@demiurge"; 359 signingkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEvM0xCLziR+ZT/SYE1aZM6dklbw4fEC17TWqbADIZRH kou@demiurge";
346 }; 360 };
347 sendemail = { 361 sendemail = {
348 suppresscc = "self"; 362 suppresscc = "self";
349 annotate = true; 363 annotate = true;
350 }; 364 };
351 format.signOff = true; 365 format.signOff = true;
352 pull.rebase = true; 366 pull.rebase = true;
353 init.defaultBranch = "master"; 367 init.defaultBranch = "master";
354 http = { 368 http = {
355 version = "HTTP/1.1"; 369 version = "HTTP/1.1";
356 postBuffer = 524288000; 370 postBuffer = 524288000;
357 }; 371 };
358 commit.gpgsign = false; 372 commit.gpgsign = false;
359 gpg.format = "ssh"; 373 gpg.format = "ssh";
360 "gpg \"ssh\"".allowedSignersFile = "/home/vin/.ssh/allowed_signers"; 374 "gpg \"ssh\"".allowedSignersFile = "/home/vin/.ssh/allowed_signers";
361 }; 375 };
362 ignores = [ 376 ignores = [
363 "*~" 377 "*~"
364 ".*~" 378 ".*~"
365 "*.swp" 379 "*.swp"
366 ]; 380 ];
367 }; 381 };
368 382
369 mbsync = { 383 mbsync = {
370 enable = true; 384 enable = true;
@@ -379,12 +393,18 @@ in {
379 bindings = { 393 bindings = {
380 # I wish there was a more elegant way of setting Anime4K 394 # I wish there was a more elegant way of setting Anime4K
381 395
382 "Ctrl+1" = "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode A (HQ)'"; 396 "Ctrl+1" =
383 "Ctrl+2" = "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode B (HQ)'"; 397 "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode A (HQ)'";
384 "Ctrl+3" = "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode C (HQ)'"; 398 "Ctrl+2" =
385 "Ctrl+4" = "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode A+A (HQ)'"; 399 "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode B (HQ)'";
386 "Ctrl+5" = "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode B+B (HQ)'"; 400 "Ctrl+3" =
387 "Ctrl+6" = "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode C+A (HQ)'"; 401 "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode C (HQ)'";
402 "Ctrl+4" =
403 "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode A+A (HQ)'";
404 "Ctrl+5" =
405 "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode B+B (HQ)'";
406 "Ctrl+6" =
407 "no-osd change-list glsl-shaders set '~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl'; show-text 'Anime4K: Mode C+A (HQ)'";
388 408
389 "Ctrl+0" = "no-osd change-list glsl-shaders clr ''; show-text 'GLSL shaders cleared'"; 409 "Ctrl+0" = "no-osd change-list glsl-shaders clr ''; show-text 'GLSL shaders cleared'";
390 }; 410 };
@@ -406,16 +426,16 @@ in {
406 }; 426 };
407 hooks = { 427 hooks = {
408 postNew = '' 428 postNew = ''
409 notmuch tag +13f0 -- tag:new and to:"*@13f0.net" 429 notmuch tag +13f0 -- tag:new and to:"*@13f0.net"
410 notmuch tag +vineetk -- tag:new and to:"*@vineetk.net" 430 notmuch tag +vineetk -- tag:new and to:"*@vineetk.net"
411 notmuch tag +university -- tag:new and to:***REDACTED_EMAIL*** 431 notmuch tag +university -- tag:new and to:***REDACTED_EMAIL***
412 notmuch tag +openbsd_announce -inbox -- tag:new and to:announce@openbsd.org 432 notmuch tag +openbsd_announce -inbox -- tag:new and to:announce@openbsd.org
413 notmuch tag +openbsd_arm -inbox -- tag:new and to:arm@openbsd.org 433 notmuch tag +openbsd_arm -inbox -- tag:new and to:arm@openbsd.org
414 notmuch tag +openbsd_misc -inbox -- tag:new and to:misc@openbsd.org 434 notmuch tag +openbsd_misc -inbox -- tag:new and to:misc@openbsd.org
415 notmuch tag +opensmtpd_misc -inbox -- tag:new and to:misc@opensmtpd.org 435 notmuch tag +opensmtpd_misc -inbox -- tag:new and to:misc@opensmtpd.org
416 notmuch tag +oss_security -inbox -- tag:new and to:oss-security@lists.openwall.com 436 notmuch tag +oss_security -inbox -- tag:new and to:oss-security@lists.openwall.com
417 notmuch tag +tuhs -inbox -- tag:new and to:tuhs@tuhs.org 437 notmuch tag +tuhs -inbox -- tag:new and to:tuhs@tuhs.org
418 ''; 438 '';
419 preNew = "mbsync -a"; 439 preNew = "mbsync -a";
420 }; 440 };
421 }; 441 };
@@ -437,27 +457,31 @@ in {
437 457
438 plugins = with pkgs.vimPlugins; [ 458 plugins = with pkgs.vimPlugins; [
439 { 459 {
440 plugin = (pkgs.vimUtils.buildVimPlugin { 460 plugin = (
441 name = "everblush-nvim"; 461 pkgs.vimUtils.buildVimPlugin {
442 src = pkgs.fetchFromGitHub { 462 name = "everblush-nvim";
443 owner = "everblush"; 463 src = pkgs.fetchFromGitHub {
444 repo = "nvim"; 464 owner = "everblush";
445 rev = "9a0e695fdd57b340d3ba2b72406e3ca519029f25"; 465 repo = "nvim";
446 hash = "sha256-O6Erp+Tzk5TV5gpgVs73cO6v9vgeUVYpunrtf/7Ppic="; 466 rev = "9a0e695fdd57b340d3ba2b72406e3ca519029f25";
447 }; 467 hash = "sha256-O6Erp+Tzk5TV5gpgVs73cO6v9vgeUVYpunrtf/7Ppic=";
448 }); 468 };
469 }
470 );
449 config = '' 471 config = ''
450 lua << END 472 lua << END
451 require 'everblush'.setup { 473 require 'everblush'.setup {
452 transparent_background = true, 474 transparent_background = true,
453 475
454 override = { 476 override = {
455 LineNr = { fg = '#b3b9b8' }, 477 LineNr = { fg = '#b3b9b8' },
456 }, 478 },
457 } 479 }
458 END 480 END
459 ''; 481 '';
460 } 482 }
483
484 vim-nix
461 ]; 485 ];
462 486
463 viAlias = true; 487 viAlias = true;
@@ -510,49 +534,49 @@ in {
510 }; 534 };
511 535
512 extraConfig = '' 536 extraConfig = ''
513# javascript 537 # javascript
514config.set('content.javascript.enabled', True, 'chrome-devtools://*') 538 config.set('content.javascript.enabled', True, 'chrome-devtools://*')
515config.set('content.javascript.enabled', True, 'devtools://*') 539 config.set('content.javascript.enabled', True, 'devtools://*')
516config.set('content.javascript.enabled', True, 'chrome://*/*') 540 config.set('content.javascript.enabled', True, 'chrome://*/*')
517config.set('content.javascript.enabled', True, 'qute://*/*') 541 config.set('content.javascript.enabled', True, 'qute://*/*')
518 542
519config.set('content.javascript.enabled', True, 'floridapolytechnic.instructure.com') 543 config.set('content.javascript.enabled', True, 'floridapolytechnic.instructure.com')
520config.set('content.javascript.enabled', True, '*.floridapoly.edu') 544 config.set('content.javascript.enabled', True, '*.floridapoly.edu')
521config.set('content.javascript.enabled', True, 'login.microsoftonline.com') 545 config.set('content.javascript.enabled', True, 'login.microsoftonline.com')
522config.set('content.javascript.enabled', True, 'www.microsoft365.com') 546 config.set('content.javascript.enabled', True, 'www.microsoft365.com')
523config.set('content.javascript.enabled', True, 'flpoly-my.sharepoint.com') 547 config.set('content.javascript.enabled', True, 'flpoly-my.sharepoint.com')
524config.set('content.javascript.enabled', True, 'flpoly.sharepoint.com') 548 config.set('content.javascript.enabled', True, 'flpoly.sharepoint.com')
525config.set('content.javascript.enabled', True, 'teams.microsoft.com') 549 config.set('content.javascript.enabled', True, 'teams.microsoft.com')
526config.set('content.javascript.enabled', True, 'ieeexplore.ieee.org') 550 config.set('content.javascript.enabled', True, 'ieeexplore.ieee.org')
527 551
528config.set('content.javascript.enabled', True, 'gitlab.com') 552 config.set('content.javascript.enabled', True, 'gitlab.com')
529config.set('content.javascript.enabled', True, 'cloud.binary.ninja') 553 config.set('content.javascript.enabled', True, 'cloud.binary.ninja')
530config.set('content.javascript.enabled', True, 'console.hetzner.cloud') 554 config.set('content.javascript.enabled', True, 'console.hetzner.cloud')
531config.set('content.javascript.enabled', True, '*.hetzner.com') 555 config.set('content.javascript.enabled', True, '*.hetzner.com')
532config.set('content.javascript.enabled', True, '*.digikey.com') 556 config.set('content.javascript.enabled', True, '*.digikey.com')
533config.set('content.javascript.enabled', True, '*.demiurge.epistemia') 557 config.set('content.javascript.enabled', True, '*.demiurge.epistemia')
534 558
535# Allow locally loaded documents to access remote URLs. 559 # Allow locally loaded documents to access remote URLs.
536config.set('content.local_content_can_access_remote_urls', True, 'file:///home/vin/.local/share/qutebrowser/userscripts/*') 560 config.set('content.local_content_can_access_remote_urls', True, 'file:///home/vin/.local/share/qutebrowser/userscripts/*')
537config.set('content.local_content_can_access_file_urls', False, 'file:///home/vin/.local/share/qutebrowser/userscripts/*') 561 config.set('content.local_content_can_access_file_urls', False, 'file:///home/vin/.local/share/qutebrowser/userscripts/*')
538 562
539# disable dark mode for some sites 563 # disable dark mode for some sites
540config.set('colors.webpage.darkmode.enabled', False, 'flpoly-my.sharepoint.com') 564 config.set('colors.webpage.darkmode.enabled', False, 'flpoly-my.sharepoint.com')
541config.set('colors.webpage.darkmode.enabled', False, 'flpoly.sharepoint.com') 565 config.set('colors.webpage.darkmode.enabled', False, 'flpoly.sharepoint.com')
542config.set('colors.webpage.darkmode.enabled', False, 'teams.microsoft.com') 566 config.set('colors.webpage.darkmode.enabled', False, 'teams.microsoft.com')
543 567
544config.set('colors.webpage.darkmode.enabled', False, 'cloud.binary.ninja') 568 config.set('colors.webpage.darkmode.enabled', False, 'cloud.binary.ninja')
545config.set('colors.webpage.darkmode.enabled', False, 'git.vineetk.net') 569 config.set('colors.webpage.darkmode.enabled', False, 'git.vineetk.net')
546 570
547# prevent accidental exiting 571 # prevent accidental exiting
548config.unbind("<Ctrl+q>", mode="normal") 572 config.unbind("<Ctrl+q>", mode="normal")
549 573
550# source theme from nixos 574 # source theme from nixos
551config.source("theme.py") 575 config.source("theme.py")
552 576
553# source redirectors 577 # source redirectors
554config.source("redirectors.py") 578 config.source("redirectors.py")
555''; 579 '';
556 }; 580 };
557 581
558 tmux = { 582 tmux = {
@@ -564,80 +588,80 @@ config.source("redirectors.py")
564 terminal = "screen-256color"; 588 terminal = "screen-256color";
565 589
566 extraConfig = '' 590 extraConfig = ''
567# status bar 591 # status bar
568set-option -g status-style bg=terminal 592 set-option -g status-style bg=terminal
569set-option -g status-style fg=terminal 593 set-option -g status-style fg=terminal
594
595 set-option -g window-status-format "#[bg=terminal fg=terminal noreverse]#{window_index}:#{window_name}"
596 set-option -g window-status-current-format "#[bg=black fg=terminal]#{window_index}:#{window_name}#{window_flags}"
570 597
571set-option -g window-status-format "#[bg=terminal fg=terminal noreverse]#{window_index}:#{window_name}" 598 set-option -g status-right "%R %b %d %Y"
572set-option -g window-status-current-format "#[bg=black fg=terminal]#{window_index}:#{window_name}#{window_flags}"
573 599
574set-option -g status-right "%R %b %d %Y" 600 # colorscheme stuff
601 set-option -sa terminal-features ',*:RGB'
602 '';
603 };
575 604
576# colorscheme stuff 605 yt-dlp = {
577set-option -sa terminal-features ',*:RGB' 606 enable = true;
578''; 607 settings = {
608 merge-output-format = "mkv";
609 embed-subs = true;
610 embed-metadata = true;
611 embed-thumbnail = true;
612 sub-langs = "en,-livechat";
613 format = "bestvideo[height<=?1440]+bestaudio/best";
614 downloader = "aria2c";
615 downloader-args = "aria2c:'-c -x8 -s8 -k1M'";
616 };
579 }; 617 };
580 618
581 yt-dlp = { 619 zsh = {
582 enable = true; 620 enable = true;
583 settings = { 621 enableCompletion = true;
584 merge-output-format = "mkv"; 622 defaultKeymap = "emacs";
585 embed-subs = true; 623 history = {
586 embed-metadata = true; 624 ignoreDups = true;
587 embed-thumbnail = true; 625 ignoreSpace = true;
588 sub-langs = "en,-livechat"; 626 };
589 format = "bestvideo[height<=?1440]+bestaudio/best"; 627 initContent = ''
590 downloader = "aria2c"; 628 # auto-correct commands
591 downloader-args = "aria2c:'-c -x8 -s8 -k1M'"; 629 setopt correctall
592 }; 630
593 }; 631 # fix meta/ctrl-backspace
594 632 autoload -Uz select-word-style
595 zsh = { 633 select-word-style bash
596 enable = true; 634 '';
597 enableCompletion = true; 635 syntaxHighlighting = {
598 defaultKeymap = "emacs"; 636 enable = true;
599 history = { 637 highlighters = [
600 ignoreDups = true; 638 "main"
601 ignoreSpace = true; 639 "brackets"
602 }; 640 "pattern"
603 initContent = '' 641 ];
604 # auto-correct commands 642 patterns = {
605 setopt correctall 643 "rm -rf *" = "fg=white,bold,bg=red";
606 644 };
607 # fix meta/ctrl-backspace 645 };
608 autoload -Uz select-word-style 646 };
609 select-word-style bash 647 };
610 ''; 648
611 syntaxHighlighting = { 649 services = {
612 enable = true; 650 # batsignal
613 highlighters = [ 651 # borgmatic
614 "main" 652 # dunst?
615 "brackets" 653 # glance?
616 "pattern" 654 # gpg-agent with ssh?
617 ]; 655 # mpd and ncmpcpp?
618 patterns = { 656 # nextcloud-client?
619 "rm -rf *" = "fg=white,bold,bg=red"; 657 # pass-secret-service?
620 }; 658 # plan9port for plumbing?
621 }; 659 # recoll?
622 }; 660 # remmina?
623 }; 661 # screen-locker
624 662 # sxhkd if using bspwm and not i3
625 services = { 663 # unison
626 # batsignal 664 # vdirsyncer
627 # borgmatic
628 # dunst?
629 # glance?
630 # gpg-agent with ssh?
631 # mpd and ncmpcpp?
632 # nextcloud-client?
633 # pass-secret-service?
634 # plan9port for plumbing?
635 # recoll?
636 # remmina?
637 # screen-locker
638 # sxhkd if using bspwm and not i3
639 # unison
640 # vdirsyncer
641 665
642 # parametric equalizer (and other stuff I don't use) in pipewire 666 # parametric equalizer (and other stuff I don't use) in pipewire
643 easyeffects = { 667 easyeffects = {
@@ -864,15 +888,15 @@ set-option -sa terminal-features ',*:RGB'
864 }; 888 };
865 }; 889 };
866 890
867 poweralertd.enable = true; 891 poweralertd.enable = true;
868 892
869 redshift = { 893 redshift = {
870 enable = false; 894 enable = false;
871 dawnTime = "07:00"; 895 dawnTime = "07:00";
872 duskTime = "00:00"; 896 duskTime = "00:00";
873 temperature.day = 6500; 897 temperature.day = 6500;
874 temperature.night = 4500; 898 temperature.night = 4500;
875 }; 899 };
876 900
877 syncthing = { 901 syncthing = {
878 enable = true; 902 enable = true;
@@ -905,474 +929,485 @@ set-option -sa terminal-features ',*:RGB'
905 929
906 folders = { 930 folders = {
907 "bin" = { 931 "bin" = {
908 devices = [ "demiurge" "hastur" ]; 932 devices = [
909 path = 933 "demiurge"
910 if hostname == "demiurge" then 934 "hastur"
911 "/data/bin" 935 ];
912 else 936 path = if hostname == "demiurge" then "/data/bin" else "/home/vin/bin";
913 "/home/vin/bin";
914 }; 937 };
915 938
916 "docs" = { 939 "docs" = {
917 devices = [ "demiurge" "hastur" ]; 940 devices = [
918 path = 941 "demiurge"
919 if hostname == "demiurge" then 942 "hastur"
920 "/data/docs" 943 ];
921 else 944 path = if hostname == "demiurge" then "/data/docs" else "/home/vin/docs";
922 "/home/vin/docs";
923 }; 945 };
924 946
925 "emacs.d" = { 947 "emacs.d" = {
926 devices = [ "demiurge" "hastur" ]; 948 devices = [
949 "demiurge"
950 "hastur"
951 ];
927 path = "/home/vin/.emacs.d"; 952 path = "/home/vin/.emacs.d";
928 }; 953 };
929 954
930 "kasi" = { 955 "kasi" = {
931 devices = [ "demiurge" "hastur" ]; 956 devices = [
932 path = 957 "demiurge"
933 if hostname == "demiurge" then 958 "hastur"
934 "/data/kasi" 959 ];
935 else 960 path = if hostname == "demiurge" then "/data/kasi" else "/home/vin/.kasi";
936 "/home/vin/.kasi";
937 }; 961 };
938 962
939 "lit" = { 963 "lit" = {
940 devices = [ "demiurge" "hastur" ]; 964 devices = [
941 path = 965 "demiurge"
942 if hostname == "demiurge" then 966 "hastur"
943 "/data_wd/lit" 967 ];
944 else 968 path = if hostname == "demiurge" then "/data_wd/lit" else "/home/vin/lit";
945 "/home/vin/lit";
946 }; 969 };
947 970
948 "pics" = { 971 "pics" = {
949 devices = [ "demiurge" "hastur" ]; 972 devices = [
950 path = 973 "demiurge"
951 if hostname == "demiurge" then 974 "hastur"
952 "/data_wd/pics" 975 ];
953 else 976 path = if hostname == "demiurge" then "/data_wd/pics" else "/home/vin/pics";
954 "/home/vin/pics";
955 }; 977 };
956 978
957 "iphone" = { 979 "iphone" = {
958 devices = [ "demiurge" "hastur" "iphonebob" ]; 980 devices = [
959 path = 981 "demiurge"
960 if hostname == "demiurge" then 982 "hastur"
961 "/data_wd/iphone" 983 "iphonebob"
962 else 984 ];
963 "/home/vin/iphone"; 985 path = if hostname == "demiurge" then "/data_wd/iphone" else "/home/vin/iphone";
964 }; 986 };
965 }; 987 };
966 }; 988 };
967 }; 989 };
968 }; 990 };
969 991
970 xdg = { 992 xdg = {
971 enable = true; 993 enable = true;
972 994
973 configFile = { 995 configFile = {
974 "qutebrowser/theme.py".text = '' 996 "qutebrowser/theme.py".text = ''
975# Colors. 997 # Colors.
976bg0 = "${colors.current.primary.background}" 998 bg0 = "${colors.current.primary.background}"
977bg1 = "${colors.current.normal.black}" 999 bg1 = "${colors.current.normal.black}"
978bg2 = "${colors.current.bright.black}" 1000 bg2 = "${colors.current.bright.black}"
979fg0 = "${colors.current.primary.foreground}" 1001 fg0 = "${colors.current.primary.foreground}"
980fg1 = "${colors.current.normal.white}" 1002 fg1 = "${colors.current.normal.white}"
981red = "${colors.current.normal.red}" 1003 red = "${colors.current.normal.red}"
982blue = "${colors.current.normal.blue}" 1004 blue = "${colors.current.normal.blue}"
983green = "${colors.current.normal.green}" 1005 green = "${colors.current.normal.green}"
984yellow = "${colors.current.normal.yellow}" 1006 yellow = "${colors.current.normal.yellow}"
985cyan = "${colors.current.normal.cyan}" 1007 cyan = "${colors.current.normal.cyan}"
986magenta = "${colors.current.normal.magenta}" 1008 magenta = "${colors.current.normal.magenta}"
987 1009
988# --- Applying colors --- # 1010 # --- Applying colors --- #
989 1011
990# Completion menu. 1012 # Completion menu.
991c.colors.completion.category.bg = bg1 1013 c.colors.completion.category.bg = bg1
992c.colors.completion.category.border.top = bg0 1014 c.colors.completion.category.border.top = bg0
993c.colors.completion.category.border.bottom = bg0 1015 c.colors.completion.category.border.bottom = bg0
994c.colors.completion.category.fg = fg0 1016 c.colors.completion.category.fg = fg0
995c.colors.completion.even.bg = bg1 1017 c.colors.completion.even.bg = bg1
996c.colors.completion.odd.bg = bg1 1018 c.colors.completion.odd.bg = bg1
997c.colors.completion.item.selected.bg = bg2 1019 c.colors.completion.item.selected.bg = bg2
998c.colors.completion.item.selected.border.bottom = bg2 1020 c.colors.completion.item.selected.border.bottom = bg2
999c.colors.completion.item.selected.border.top = bg2 1021 c.colors.completion.item.selected.border.top = bg2
1000c.colors.completion.item.selected.fg = blue 1022 c.colors.completion.item.selected.fg = blue
1001c.colors.completion.item.selected.match.fg = blue 1023 c.colors.completion.item.selected.match.fg = blue
1002c.colors.completion.match.fg = red 1024 c.colors.completion.match.fg = red
1003c.colors.completion.odd.bg = bg1 1025 c.colors.completion.odd.bg = bg1
1004c.colors.completion.scrollbar.fg = fg0 1026 c.colors.completion.scrollbar.fg = fg0
1005c.colors.completion.scrollbar.bg = bg1 1027 c.colors.completion.scrollbar.bg = bg1
1006 1028
1007# Statusline. 1029 # Statusline.
1008c.colors.statusbar.caret.bg = bg0 1030 c.colors.statusbar.caret.bg = bg0
1009c.colors.statusbar.caret.fg = magenta 1031 c.colors.statusbar.caret.fg = magenta
1010c.colors.statusbar.caret.selection.bg = bg0 1032 c.colors.statusbar.caret.selection.bg = bg0
1011c.colors.statusbar.caret.selection.fg = red 1033 c.colors.statusbar.caret.selection.fg = red
1012c.colors.statusbar.command.bg = bg0 1034 c.colors.statusbar.command.bg = bg0
1013c.colors.statusbar.command.fg = fg0 1035 c.colors.statusbar.command.fg = fg0
1014c.colors.statusbar.insert.bg = bg0 1036 c.colors.statusbar.insert.bg = bg0
1015c.colors.statusbar.insert.fg = green 1037 c.colors.statusbar.insert.fg = green
1016c.colors.statusbar.normal.bg = bg0 1038 c.colors.statusbar.normal.bg = bg0
1017c.colors.statusbar.normal.fg = fg0 1039 c.colors.statusbar.normal.fg = fg0
1018c.colors.statusbar.passthrough.bg = bg0 1040 c.colors.statusbar.passthrough.bg = bg0
1019c.colors.statusbar.passthrough.fg = blue 1041 c.colors.statusbar.passthrough.fg = blue
1020c.colors.statusbar.private.bg = bg0 1042 c.colors.statusbar.private.bg = bg0
1021c.colors.statusbar.private.fg = fg0 1043 c.colors.statusbar.private.fg = fg0
1022c.colors.statusbar.progress.bg = green 1044 c.colors.statusbar.progress.bg = green
1023c.colors.statusbar.url.error.fg = red 1045 c.colors.statusbar.url.error.fg = red
1024c.colors.statusbar.url.fg = fg0 1046 c.colors.statusbar.url.fg = fg0
1025c.colors.statusbar.url.hover.fg = cyan 1047 c.colors.statusbar.url.hover.fg = cyan
1026c.colors.statusbar.url.success.http.fg = green 1048 c.colors.statusbar.url.success.http.fg = green
1027c.colors.statusbar.url.success.https.fg = green 1049 c.colors.statusbar.url.success.https.fg = green
1028c.colors.statusbar.url.warn.fg = yellow 1050 c.colors.statusbar.url.warn.fg = yellow
1029 1051
1030# Tabline. 1052 # Tabline.
1031c.colors.tabs.bar.bg = bg0 1053 c.colors.tabs.bar.bg = bg0
1032c.colors.tabs.even.bg = bg1 1054 c.colors.tabs.even.bg = bg1
1033c.colors.tabs.even.fg = fg1 1055 c.colors.tabs.even.fg = fg1
1034c.colors.tabs.indicator.error = red 1056 c.colors.tabs.indicator.error = red
1035c.colors.tabs.indicator.start = blue 1057 c.colors.tabs.indicator.start = blue
1036c.colors.tabs.indicator.stop = green 1058 c.colors.tabs.indicator.stop = green
1037c.colors.tabs.indicator.system = "rgb" 1059 c.colors.tabs.indicator.system = "rgb"
1038c.colors.tabs.odd.bg = bg1 1060 c.colors.tabs.odd.bg = bg1
1039c.colors.tabs.odd.fg = fg1 1061 c.colors.tabs.odd.fg = fg1
1040c.colors.tabs.pinned.even.bg = bg2 1062 c.colors.tabs.pinned.even.bg = bg2
1041c.colors.tabs.pinned.even.fg = fg1 1063 c.colors.tabs.pinned.even.fg = fg1
1042c.colors.tabs.pinned.odd.bg = bg2 1064 c.colors.tabs.pinned.odd.bg = bg2
1043c.colors.tabs.pinned.odd.fg = fg1 1065 c.colors.tabs.pinned.odd.fg = fg1
1044c.colors.tabs.pinned.selected.even.bg = bg0 1066 c.colors.tabs.pinned.selected.even.bg = bg0
1045c.colors.tabs.pinned.selected.even.fg = green 1067 c.colors.tabs.pinned.selected.even.fg = green
1046c.colors.tabs.pinned.selected.odd.bg = bg0 1068 c.colors.tabs.pinned.selected.odd.bg = bg0
1047c.colors.tabs.pinned.selected.odd.fg = green 1069 c.colors.tabs.pinned.selected.odd.fg = green
1048c.colors.tabs.pinned.selected.even.bg = bg0 1070 c.colors.tabs.pinned.selected.even.bg = bg0
1049c.colors.tabs.pinned.selected.even.fg = blue 1071 c.colors.tabs.pinned.selected.even.fg = blue
1050c.colors.tabs.selected.odd.bg = bg0 1072 c.colors.tabs.selected.odd.bg = bg0
1051c.colors.tabs.selected.odd.fg = fg0 1073 c.colors.tabs.selected.odd.fg = fg0
1052c.colors.tabs.selected.even.bg = bg0 1074 c.colors.tabs.selected.even.bg = bg0
1053c.colors.tabs.selected.even.fg = fg0 1075 c.colors.tabs.selected.even.fg = fg0
1054 1076
1055# Hints. 1077 # Hints.
1056c.colors.hints.bg = bg2 1078 c.colors.hints.bg = bg2
1057c.colors.hints.fg = fg0 1079 c.colors.hints.fg = fg0
1058c.colors.hints.match.fg = red 1080 c.colors.hints.match.fg = red
1059c.hints.border = "2px solid " + bg1 1081 c.hints.border = "2px solid " + bg1
1060 1082
1061# Messages. 1083 # Messages.
1062c.colors.messages.error.bg = bg1 1084 c.colors.messages.error.bg = bg1
1063c.colors.messages.error.border = bg1 1085 c.colors.messages.error.border = bg1
1064c.colors.messages.error.fg = red 1086 c.colors.messages.error.fg = red
1065c.colors.messages.info.bg = bg1 1087 c.colors.messages.info.bg = bg1
1066c.colors.messages.info.border = bg1 1088 c.colors.messages.info.border = bg1
1067c.colors.messages.info.fg = blue 1089 c.colors.messages.info.fg = blue
1068c.colors.messages.warning.bg = bg1 1090 c.colors.messages.warning.bg = bg1
1069c.colors.messages.warning.border = bg1 1091 c.colors.messages.warning.border = bg1
1070c.colors.messages.warning.fg = yellow 1092 c.colors.messages.warning.fg = yellow
1071 1093
1072# Download bar. 1094 # Download bar.
1073c.colors.downloads.bar.bg = bg0 1095 c.colors.downloads.bar.bg = bg0
1074c.colors.downloads.error.bg = bg2 1096 c.colors.downloads.error.bg = bg2
1075c.colors.downloads.error.fg = red 1097 c.colors.downloads.error.fg = red
1076c.colors.downloads.start.bg = bg2 1098 c.colors.downloads.start.bg = bg2
1077c.colors.downloads.start.fg = blue 1099 c.colors.downloads.start.fg = blue
1078c.colors.downloads.stop.bg = bg2 1100 c.colors.downloads.stop.bg = bg2
1079c.colors.downloads.stop.fg = green 1101 c.colors.downloads.stop.fg = green
1080 1102
1081# Keyhints. 1103 # Keyhints.
1082c.colors.keyhint.bg = bg0 1104 c.colors.keyhint.bg = bg0
1083c.colors.keyhint.fg = fg0 1105 c.colors.keyhint.fg = fg0
1084c.colors.keyhint.suffix.fg = yellow 1106 c.colors.keyhint.suffix.fg = yellow
1085 1107
1086# Default color for about:blank pages (or if the css didn't specify) 1108 # Default color for about:blank pages (or if the css didn't specify)
1087#c.colors.webpage.bg = bg1 1109 #c.colors.webpage.bg = bg1
1088 1110
1089# Context menu. 1111 # Context menu.
1090c.colors.contextmenu.disabled.bg = bg1 1112 c.colors.contextmenu.disabled.bg = bg1
1091c.colors.contextmenu.disabled.fg = fg1 1113 c.colors.contextmenu.disabled.fg = fg1
1092c.colors.contextmenu.menu.bg = bg1 1114 c.colors.contextmenu.menu.bg = bg1
1093c.colors.contextmenu.menu.fg = fg0 1115 c.colors.contextmenu.menu.fg = fg0
1094c.colors.contextmenu.selected.bg = bg2 1116 c.colors.contextmenu.selected.bg = bg2
1095c.colors.contextmenu.selected.fg = blue 1117 c.colors.contextmenu.selected.fg = blue
1096 1118
1097# Prompts. 1119 # Prompts.
1098c.colors.prompts.bg = bg1 1120 c.colors.prompts.bg = bg1
1099c.colors.prompts.border = "2px solid " + bg0 1121 c.colors.prompts.border = "2px solid " + bg0
1100c.colors.prompts.fg = fg0 1122 c.colors.prompts.fg = fg0
1101c.colors.prompts.selected.bg = bg2 1123 c.colors.prompts.selected.bg = bg2
1102c.colors.prompts.selected.fg = blue 1124 c.colors.prompts.selected.fg = blue
1103 ''; 1125 '';
1104 1126
1105 "qutebrowser/redirectors.py".text = '' 1127 "qutebrowser/redirectors.py".text = ''
1106# I don't remember who I took this from. probably in qutebrowser m$hub issues 1128 # I don't remember who I took this from. probably in qutebrowser m$hub issues
1107 1129
1108import operator, re, typing 1130 import operator, re, typing
1109from urllib.parse import urljoin 1131 from urllib.parse import urljoin
1110 1132
1111from qutebrowser.api import interceptor, message 1133 from qutebrowser.api import interceptor, message
1112from PyQt6.QtCore import QUrl 1134 from PyQt6.QtCore import QUrl
1113 1135
1114def _pastebin_redir(url: QUrl) -> bool: 1136 def _pastebin_redir(url: QUrl) -> bool:
1115 p = url.path().strip('/') 1137 p = url.path().strip('/')
1116 if p.isalnum(): 1138 if p.isalnum():
1117 url.setPath(urljoin("/raw/", p)) 1139 url.setPath(urljoin("/raw/", p))
1118 return True 1140 return True
1119 return False 1141 return False
1120 1142
1121# Any return value other than a literal 'False' means we redirected 1143 # Any return value other than a literal 'False' means we redirected
1122REDIRECT_MAP = { 1144 REDIRECT_MAP = {
1123 "new.reddit.com": operator.methodcaller('setHost', 'redlib.demiurge.epistemia'), 1145 "new.reddit.com": operator.methodcaller('setHost', 'redlib.demiurge.epistemia'),
1124 "np.reddit.com": operator.methodcaller('setHost', 'redlib.demiurge.epistemia'), 1146 "np.reddit.com": operator.methodcaller('setHost', 'redlib.demiurge.epistemia'),
1125 "old.reddit.com": operator.methodcaller('setHost', 'redlib.demiurge.epistemia'), 1147 "old.reddit.com": operator.methodcaller('setHost', 'redlib.demiurge.epistemia'),
1126 "reddit.com": operator.methodcaller('setHost', 'redlib.demiurge.epistemia'), 1148 "reddit.com": operator.methodcaller('setHost', 'redlib.demiurge.epistemia'),
1127 "www.reddit.com": operator.methodcaller('setHost', 'redlib.demiurge.epistemia'), 1149 "www.reddit.com": operator.methodcaller('setHost', 'redlib.demiurge.epistemia'),
1128 1150
1129 "www.youtube.com": operator.methodcaller('setHost', 'invidious.demiurge.epistemia'), 1151 "www.youtube.com": operator.methodcaller('setHost', 'invidious.demiurge.epistemia'),
1130 "youtube.com": operator.methodcaller('setHost', 'invidious.demiurge.epistemia'), 1152 "youtube.com": operator.methodcaller('setHost', 'invidious.demiurge.epistemia'),
1131 "youtu.be": operator.methodcaller('setHost', 'invidious.demiurge.epistemia'), 1153 "youtu.be": operator.methodcaller('setHost', 'invidious.demiurge.epistemia'),
1132 1154
1133 "imgur.com": operator.methodcaller('setHost', 'rimgo.bloat.cat'), 1155 "imgur.com": operator.methodcaller('setHost', 'rimgo.bloat.cat'),
1134 "i.imgur.com": operator.methodcaller('setHost', 'rimgo.bloat.cat'), 1156 "i.imgur.com": operator.methodcaller('setHost', 'rimgo.bloat.cat'),
1135 1157
1136 # Causes an infinite loop if the paste does not exist... 1158 # Causes an infinite loop if the paste does not exist...
1137 "pastebin.com": _pastebin_redir, 1159 "pastebin.com": _pastebin_redir,
1138 } # type: typing.Dict[str, typing.Callable[..., typing.Optional[bool]]] 1160 } # type: typing.Dict[str, typing.Callable[..., typing.Optional[bool]]]
1139 1161
1140def int_fn(info: interceptor.Request): 1162 def int_fn(info: interceptor.Request):
1141 """Block the given request if necessary.""" 1163 """Block the given request if necessary."""
1142 if (info.resource_type != interceptor.ResourceType.main_frame or 1164 if (info.resource_type != interceptor.ResourceType.main_frame or
1143 info.request_url.scheme() in {"data", "blob"}): 1165 info.request_url.scheme() in {"data", "blob"}):
1144 return 1166 return
1145 url = info.request_url 1167 url = info.request_url
1146 redir = REDIRECT_MAP.get(url.host()) 1168 redir = REDIRECT_MAP.get(url.host())
1147 if redir is not None and redir(url) is not False: 1169 if redir is not None and redir(url) is not False:
1148 message.info("Redirecting to " + url.toString()) 1170 message.info("Redirecting to " + url.toString())
1149 info.redirect(url) 1171 info.redirect(url)
1150 1172
1151interceptor.register(int_fn) 1173 interceptor.register(int_fn)
1152 ''; 1174 '';
1153 }; 1175 };
1154 1176
1155 mimeApps = { 1177 mimeApps = {
1156 enable = true; 1178 enable = true;
1157 defaultApplications = { 1179 defaultApplications = {
1158 "application/pdf" = [ "zathura.desktop" ]; 1180 "application/pdf" = [ "zathura.desktop" ];
1159 "application/xhtml+xml" = [ "qutebrowser.desktop" "librewolf.desktop" ]; 1181 "application/xhtml+xml" = [
1160 "text/html" = [ "qutebrowser.desktop" "librewolf.desktop" ]; 1182 "qutebrowser.desktop"
1161 "text/xml" = [ "qutebrowser.desktop" "librewolf.desktop" ]; 1183 "librewolf.desktop"
1162 }; 1184 ];
1163 }; 1185 "text/html" = [
1164 1186 "qutebrowser.desktop"
1165 userDirs = { 1187 "librewolf.desktop"
1166 createDirectories = false; 1188 ];
1167 desktop = "$HOME/"; 1189 "text/xml" = [
1168 documents = "$HOME/docs"; 1190 "qutebrowser.desktop"
1169 download = "$HOME/tmp"; 1191 "librewolf.desktop"
1170 music = "$HOME/music"; 1192 ];
1171 pictures = "$HOME/pics"; 1193 };
1172 publicShare = "$HOME/"; 1194 };
1173 templates = "$HOME/"; 1195
1174 videos = "$HOME/"; 1196 userDirs = {
1175 }; 1197 createDirectories = false;
1176 }; 1198 desktop = "$HOME/";
1199 documents = "$HOME/docs";
1200 download = "$HOME/tmp";
1201 music = "$HOME/music";
1202 pictures = "$HOME/pics";
1203 publicShare = "$HOME/";
1204 templates = "$HOME/";
1205 videos = "$HOME/";
1206 };
1207 };
1177 1208
1178 wayland.windowManager.sway = { 1209 wayland.windowManager.sway = {
1179 enable = true; 1210 enable = true;
1180 package = pkgs.swayfx; 1211 package = pkgs.swayfx;
1181 1212
1182 # https://github.com/nix-community/home-manager/issues/5379#issuecomment-2096066969 1213 # https://github.com/nix-community/home-manager/issues/5379#issuecomment-2096066969
1183 checkConfig = false; 1214 checkConfig = false;
1184 1215
1185 config = { 1216 config = {
1186 input."type:pointer".accel_profile = "flat"; 1217 input."type:pointer".accel_profile = "flat";
1187 output."*".background = "~/pics/wp/elite_milky_way_below.png center"; 1218 output."*".background = "~/pics/wp/elite_milky_way_below.png center";
1188 1219
1189 bars = [ { 1220 bars = [
1190 colors = { 1221 {
1191 # background = colors.current.primary.background; 1222 colors = {
1192 background = "#000000"; 1223 # background = colors.current.primary.background;
1193 statusline = colors.current.primary.foreground; 1224 background = "#000000";
1194 focusedWorkspace = { 1225 statusline = colors.current.primary.foreground;
1195 background = colors.current.normal.black; 1226 focusedWorkspace = {
1196 border = colors.current.normal.black; 1227 background = colors.current.normal.black;
1197 text = colors.current.normal.green; 1228 border = colors.current.normal.black;
1198 }; 1229 text = colors.current.normal.green;
1199 activeWorkspace = { 1230 };
1200 background = colors.current.normal.black; 1231 activeWorkspace = {
1201 border = colors.current.normal.black; 1232 background = colors.current.normal.black;
1202 text = colors.current.primary.foreground; 1233 border = colors.current.normal.black;
1203 }; 1234 text = colors.current.primary.foreground;
1204 inactiveWorkspace = { 1235 };
1205 background = colors.current.primary.background; 1236 inactiveWorkspace = {
1206 border = colors.current.primary.background; 1237 background = colors.current.primary.background;
1207 text = colors.current.normal.white; 1238 border = colors.current.primary.background;
1208 }; 1239 text = colors.current.normal.white;
1209 }; 1240 };
1210 command = "${pkgs.sway}/bin/swaybar"; 1241 };
1211 position = "top"; 1242 command = "${pkgs.sway}/bin/swaybar";
1212 statusCommand = "while date +'%Y-%m-%d %X'; do sleep 1; done"; 1243 position = "top";
1213 } ]; 1244 statusCommand = "while date +'%Y-%m-%d %X'; do sleep 1; done";
1214 1245 }
1215 colors = { 1246 ];
1216 focused = { 1247
1217 background = colors.current.primary.background; 1248 colors = {
1218 border = colors.current.primary.background; 1249 focused = {
1219 childBorder = colors.current.primary.background; 1250 background = colors.current.primary.background;
1220 indicator = colors.current.normal.black; 1251 border = colors.current.primary.background;
1221 text = colors.current.normal.green; 1252 childBorder = colors.current.primary.background;
1222 }; 1253 indicator = colors.current.normal.black;
1223 focusedInactive = { 1254 text = colors.current.normal.green;
1224 background = colors.current.primary.background; 1255 };
1225 border = colors.current.primary.background; 1256 focusedInactive = {
1226 childBorder = colors.current.primary.background; 1257 background = colors.current.primary.background;
1227 indicator = colors.current.normal.black; 1258 border = colors.current.primary.background;
1228 text = colors.current.primary.foreground; 1259 childBorder = colors.current.primary.background;
1229 }; 1260 indicator = colors.current.normal.black;
1230 unfocused = { 1261 text = colors.current.primary.foreground;
1231 background = colors.current.normal.black; 1262 };
1232 border = colors.current.normal.black; 1263 unfocused = {
1233 childBorder = colors.current.normal.black; 1264 background = colors.current.normal.black;
1234 indicator = colors.current.primary.background; 1265 border = colors.current.normal.black;
1235 text = colors.current.normal.white; 1266 childBorder = colors.current.normal.black;
1236 }; 1267 indicator = colors.current.primary.background;
1237 }; 1268 text = colors.current.normal.white;
1269 };
1270 };
1238 1271
1239 focus = { 1272 focus = {
1240 mouseWarping = true; 1273 mouseWarping = true;
1241 wrapping = "yes"; 1274 wrapping = "yes";
1242 }; 1275 };
1243 1276
1244 fonts = { 1277 fonts = {
1245 names = [ "monospace" ]; 1278 names = [ "monospace" ];
1246 size = 11.0; 1279 size = 11.0;
1247 }; 1280 };
1248 1281
1249 gaps = { 1282 gaps = {
1250 inner = 15; 1283 inner = 15;
1251 smartGaps = true; 1284 smartGaps = true;
1252 }; 1285 };
1253 1286
1254 keybindings = 1287 keybindings =
1255 let 1288 let
1256 left = "n"; 1289 left = "n";
1257 down = "e"; 1290 down = "e";
1258 up = "o"; 1291 up = "o";
1259 right = "i"; 1292 right = "i";
1260 modifier = config.wayland.windowManager.sway.config.modifier; 1293 modifier = config.wayland.windowManager.sway.config.modifier;
1261 menu = config.wayland.windowManager.sway.config.menu; 1294 menu = config.wayland.windowManager.sway.config.menu;
1262 terminal = config.wayland.windowManager.sway.config.terminal; 1295 terminal = config.wayland.windowManager.sway.config.terminal;
1263 in lib.mkOptionDefault { 1296 in
1264 "${modifier}+Return" = "exec ${terminal}"; 1297 lib.mkOptionDefault {
1265 "${modifier}+p" = "exec ${menu}"; 1298 "${modifier}+Return" = "exec ${terminal}";
1266 "${modifier}+b" = "exec bm t"; 1299 "${modifier}+p" = "exec ${menu}";
1267 "${modifier}+Shift+b" = "exec kasimenu"; 1300 "${modifier}+b" = "exec bm t";
1268 "${modifier}+u" = "exec kasimenu user"; 1301 "${modifier}+Shift+b" = "exec kasimenu";
1269 "${modifier}+Shift+u" = "exec kasimenu email"; 1302 "${modifier}+u" = "exec kasimenu user";
1270 "${modifier}+Shift+t" = "exec kasimenu_totp"; 1303 "${modifier}+Shift+u" = "exec kasimenu email";
1271 1304 "${modifier}+Shift+t" = "exec kasimenu_totp";
1272 "${modifier}+Shift+q" = "kill"; 1305
1273 "${modifier}+Shift+c" = "reload"; 1306 "${modifier}+Shift+q" = "kill";
1274 "Mod1+Mod4+Ctrl+Shift+e" = "exit"; 1307 "${modifier}+Shift+c" = "reload";
1275 1308 "Mod1+Mod4+Ctrl+Shift+e" = "exit";
1276 "${modifier}+${left}" = "focus left;"; 1309
1277 "${modifier}+${down}" = "focus down;"; 1310 "${modifier}+${left}" = "focus left;";
1278 "${modifier}+${up}" = "focus up;"; 1311 "${modifier}+${down}" = "focus down;";
1279 "${modifier}+${right}" = "focus right;"; 1312 "${modifier}+${up}" = "focus up;";
1280 "${modifier}+Shift+${left}" = "move left"; 1313 "${modifier}+${right}" = "focus right;";
1281 "${modifier}+Shift+${down}" = "move down"; 1314 "${modifier}+Shift+${left}" = "move left";
1282 "${modifier}+Shift+${up}" = "move up"; 1315 "${modifier}+Shift+${down}" = "move down";
1283 "${modifier}+Shift+${right}" = "move right"; 1316 "${modifier}+Shift+${up}" = "move up";
1284 1317 "${modifier}+Shift+${right}" = "move right";
1285 # TODO do this programatically 1318
1286 "${modifier}+1" = "workspace number 1"; 1319 # TODO do this programatically
1287 "${modifier}+2" = "workspace number 2"; 1320 "${modifier}+1" = "workspace number 1";
1288 "${modifier}+3" = "workspace number 3"; 1321 "${modifier}+2" = "workspace number 2";
1289 "${modifier}+4" = "workspace number 4"; 1322 "${modifier}+3" = "workspace number 3";
1290 "${modifier}+5" = "workspace number 5"; 1323 "${modifier}+4" = "workspace number 4";
1291 "${modifier}+6" = "workspace number 6"; 1324 "${modifier}+5" = "workspace number 5";
1292 "${modifier}+7" = "workspace number 7"; 1325 "${modifier}+6" = "workspace number 6";
1293 "${modifier}+8" = "workspace number 8"; 1326 "${modifier}+7" = "workspace number 7";
1294 "${modifier}+9" = "workspace number 9"; 1327 "${modifier}+8" = "workspace number 8";
1295 "${modifier}+0" = "workspace number 10"; 1328 "${modifier}+9" = "workspace number 9";
1296 "${modifier}+Shift+1" = "move container to workspace number 1"; 1329 "${modifier}+0" = "workspace number 10";
1297 "${modifier}+Shift+2" = "move container to workspace number 2"; 1330 "${modifier}+Shift+1" = "move container to workspace number 1";
1298 "${modifier}+Shift+3" = "move container to workspace number 3"; 1331 "${modifier}+Shift+2" = "move container to workspace number 2";
1299 "${modifier}+Shift+4" = "move container to workspace number 4"; 1332 "${modifier}+Shift+3" = "move container to workspace number 3";
1300 "${modifier}+Shift+5" = "move container to workspace number 5"; 1333 "${modifier}+Shift+4" = "move container to workspace number 4";
1301 "${modifier}+Shift+6" = "move container to workspace number 6"; 1334 "${modifier}+Shift+5" = "move container to workspace number 5";
1302 "${modifier}+Shift+7" = "move container to workspace number 7"; 1335 "${modifier}+Shift+6" = "move container to workspace number 6";
1303 "${modifier}+Shift+8" = "move container to workspace number 8"; 1336 "${modifier}+Shift+7" = "move container to workspace number 7";
1304 "${modifier}+Shift+9" = "move container to workspace number 9"; 1337 "${modifier}+Shift+8" = "move container to workspace number 8";
1305 "${modifier}+Shift+0" = "move container to workspace number 10"; 1338 "${modifier}+Shift+9" = "move container to workspace number 9";
1306 1339 "${modifier}+Shift+0" = "move container to workspace number 10";
1307 "${modifier}+Ctrl+Shift+b" = "splith"; 1340
1308 "${modifier}+Ctrl+Shift+v" = "splitv"; 1341 "${modifier}+Ctrl+Shift+b" = "splith";
1309 "${modifier}+s" = "layout stacking"; 1342 "${modifier}+Ctrl+Shift+v" = "splitv";
1310 "${modifier}+t" = "layout tabbed"; 1343 "${modifier}+s" = "layout stacking";
1311 "${modifier}+Ctrl+Shift+t" = "layout toggle split"; 1344 "${modifier}+t" = "layout tabbed";
1312 "${modifier}+Shift+f" = "fullscreen"; 1345 "${modifier}+Ctrl+Shift+t" = "layout toggle split";
1313 "${modifier}+Shift+space" = "floating toggle"; 1346 "${modifier}+Shift+f" = "fullscreen";
1314 "${modifier}+space" = "focus mode_toggle"; 1347 "${modifier}+Shift+space" = "floating toggle";
1315 "${modifier}+a" = "focus parent"; 1348 "${modifier}+space" = "focus mode_toggle";
1316 1349 "${modifier}+a" = "focus parent";
1317 "${modifier}+r" = "mode resize"; 1350
1318 }; 1351 "${modifier}+r" = "mode resize";
1319 1352 };
1320 menu = "${pkgs.wmenu}/bin/wmenu-run"; 1353
1321 1354 menu = "${pkgs.wmenu}/bin/wmenu-run";
1322 modes.resize = 1355
1323 let 1356 modes.resize =
1324 left = "n"; 1357 let
1325 down = "e"; 1358 left = "n";
1326 up = "o"; 1359 down = "e";
1327 right = "i"; 1360 up = "o";
1328 in lib.mkOptionDefault { 1361 right = "i";
1329 ${left} = "resize shrink width 10px"; 1362 in
1330 ${down} = "resize grow height 10px"; 1363 lib.mkOptionDefault {
1331 ${up} = "resize shrink width 10px"; 1364 ${left} = "resize shrink width 10px";
1332 ${right} = "resize grow width 10px"; 1365 ${down} = "resize grow height 10px";
1333 Escape = "mode default"; 1366 ${up} = "resize shrink width 10px";
1334 }; 1367 ${right} = "resize grow width 10px";
1335 1368 Escape = "mode default";
1336 modifier = "Mod4"; 1369 };
1337 1370
1338 terminal = "foot"; 1371 modifier = "Mod4";
1339 1372
1340 window = { 1373 terminal = "foot";
1341 border = 0; 1374
1342 titlebar = false; 1375 window = {
1343 }; 1376 border = 0;
1377 titlebar = false;
1378 };
1344 1379
1345 defaultWorkspace = "workspace number 1"; 1380 defaultWorkspace = "workspace number 1";
1346 workspaceAutoBackAndForth = true; 1381 workspaceAutoBackAndForth = true;
1347 }; 1382 };
1348 1383
1349 extraConfig = '' 1384 extraConfig = ''
1350 mouse_warping container 1385 mouse_warping container
1351 1386
1352 blur enable 1387 blur enable
1353 blur_xray disable 1388 blur_xray disable
1354 blur_radius 3 1389 blur_radius 3
1355 blur_passes 5 1390 blur_passes 5
1356 1391
1357 corner_radius 10 1392 corner_radius 10
1358 1393
1359 shadows enable 1394 shadows enable
1360 shadow_blur_radius 10 1395 shadow_blur_radius 10
1361 1396
1362 for_window [class="Emacs"] opacity 0.9 1397 for_window [class="Emacs"] opacity 0.9
1363 for_window [app_id="qutebrowser"] opacity 0.9 1398 for_window [app_id="qutebrowser"] opacity 0.9
1364 for_window [app_id="vesktop"] opacity 0.9 1399 for_window [app_id="vesktop"] opacity 0.9
1365 1400
1366 for_window [title="profanity"] move container to workspace 9 1401 for_window [title="profanity"] move container to workspace 9
1367 for_window [app_id="vesktop"] move container to workspace 10 1402 for_window [app_id="vesktop"] move container to workspace 10
1368 1403
1369 exec ${pkgs.qutebrowser}/bin/qutebrowser 1404 exec ${pkgs.qutebrowser}/bin/qutebrowser
1370 exec ${pkgs.vesktop}/bin/vesktop --use-vulkan --ozone-platform=wayland --enable-features=UseOzonePlatform,Vulkan 1405 exec ${pkgs.vesktop}/bin/vesktop --use-vulkan --ozone-platform=wayland --enable-features=UseOzonePlatform,Vulkan
1371 exec ${config.wayland.windowManager.sway.config.terminal} -T profanity -e ${pkgs.profanity}/bin/profanity 1406 exec ${config.wayland.windowManager.sway.config.terminal} -T profanity -e ${pkgs.profanity}/bin/profanity
1372 1407
1373 # for elite va 1408 # for elite va
1374 bindsym --whole-window BTN_SIDE echo press >/tmp/elite_va.fifo 1409 bindsym --whole-window BTN_SIDE echo press >/tmp/elite_va.fifo
1375 bindsym --whole-window --release BTN_SIDE echo release >/tmp/elite_va.fifo 1410 bindsym --whole-window --release BTN_SIDE echo release >/tmp/elite_va.fifo
1376 ''; 1411 '';
1377 }; 1412 };
1378} 1413}