My NixOS

Dynamically fetched the /etc/nixos/configuration.nix file containing 5128 lines hosted on my GitHub repository.

1	# By Abdullah As-Sadeed
2	
3	{
4	  config,
5	  options,
6	  pkgs,
7	  lib,
8	  ...
9	}:
10	let
11	  home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/refs/heads/master.tar.gz";
12	
13	  nix-rice = builtins.fetchTarball "https://github.com/bertof/nix-rice/archive/refs/heads/main.tar.gz";
14	  nix-rice-lib = import (nix-rice + "/lib.nix") {
15	    lib = pkgs.lib;
16	    kitty-themes-src = null;
17	  };
18	
19	  convert_hex_color_code_to_rgba_color_code =
20	    hex_color:
21	    let
22	      color_set = nix-rice-lib.color.hexToRgba hex_color;
23	
24	      red = builtins.floor color_set.r;
25	      green = builtins.floor color_set.g;
26	      blue = builtins.floor color_set.b;
27	      alpha = builtins.floor (color_set.a / 255);
28	    in
29	    "rgba(${toString red}, ${toString green}, ${toString blue}, ${toString alpha})";
30	
31	  android_nixpkgs =
32	    pkgs.callPackage
33	      (import (
34	        builtins.fetchGit {
35	          url = "https://github.com/tadfisher/android-nixpkgs.git";
36	        }
37	      ))
38	      {
39	        channel = "stable";
40	      };
41	  android_sdk = android_nixpkgs.sdk (
42	    sdkPkgs: with sdkPkgs; [
43	      build-tools-35-0-0
44	      build-tools-36-0-0
45	      cmake-3-22-1
46	      cmdline-tools-latest
47	      emulator
48	      ndk-26-3-11579264
49	      ndk-27-0-12077973
50	      ndk-29-0-13599879
51	      platform-tools
52	      platforms-android-30
53	      platforms-android-31
54	      platforms-android-32
55	      platforms-android-33
56	      platforms-android-34
57	      platforms-android-35
58	      platforms-android-36
59	      system-images-android-36-google-apis-playstore-x86-64
60	      tools
61	    ]
62	  );
63	  android_sdk_path = "${android_sdk}/share/android-sdk";
64	
65	  font_preferences = {
66	    package = pkgs.nerd-fonts.noto;
67	
68	    name = {
69	      mono = "NotoMono Nerd Font Mono";
70	      sans_serif = "NotoSans Nerd Font";
71	      serif = "NotoSerif Nerd Font";
72	      emoji = "Noto Color Emoji";
73	    };
74	
75	    size = builtins.floor (design_factor * 0.75); # 12
76	  };
77	
78	  cursor = {
79	    theme = {
80	      name = "Bibata-Modern-Classic";
81	      package = pkgs.bibata-cursors;
82	    };
83	
84	    size = builtins.floor (design_factor * 1.50); # 24
85	  };
86	
87	  fetched_gtk_css_file = builtins.fetchurl {
88	    url = "https://gitlab.gnome.org/GNOME/gtk/-/raw/gtk-3-24/gtk/theme/Adwaita/gtk-contained-dark.css";
89	  };
90	  gtk_css_file = builtins.readFile fetched_gtk_css_file;
91	  gtk_css_lines = builtins.filter (x: builtins.isString x) (builtins.split "\n" gtk_css_file);
92	
93	  gtk_css_color_lines = builtins.filter (
94	    line: builtins.match "^@define-color [^ ]+ [^;]+;" line != null
95	  ) gtk_css_lines;
96	  gtk_color_list = builtins.filter (x: x != null) (
97	    builtins.map (
98	      line:
99	      let
100	        mapping = builtins.match "@define-color ([^ ]+) ([^;]+);" line;
101	      in
102	      if mapping == null then
103	        null
104	      else
105	        {
106	          name = builtins.elemAt mapping 0;
107	          value = builtins.elemAt mapping 1;
108	        }
109	    ) gtk_css_color_lines
110	  );
111	  gtk_color_attributes = builtins.listToAttrs gtk_color_list;
112	
113	  colors = {
114	    hex = {
115	      borders = gtk_color_attributes.borders;
116	      unfocused_borders = gtk_color_attributes.unfocused_borders;
117	
118	      background = gtk_color_attributes.theme_bg_color;
119	      base_background = gtk_color_attributes.theme_base_color;
120	      selected_background = gtk_color_attributes.theme_selected_bg_color;
121	      unfocused_background = gtk_color_attributes.theme_unfocused_bg_color;
122	      unfocused_base_background = gtk_color_attributes.theme_unfocused_base_color;
123	      unfocused_selected_background = gtk_color_attributes.theme_unfocused_selected_bg_color;
124	      insensitive_background = gtk_color_attributes.insensitive_bg_color;
125	      insensitive_base_background = gtk_color_attributes.insensitive_base_color;
126	      content_view_background = gtk_color_attributes.content_view_bg;
127	      text_view_background = gtk_color_attributes.text_view_bg;
128	
129	      foreground = gtk_color_attributes.theme_fg_color;
130	      selected_foreground = gtk_color_attributes.theme_selected_fg_color;
131	      insensitive_foreground = gtk_color_attributes.insensitive_fg_color;
132	      text = gtk_color_attributes.theme_text_color;
133	      unfocused_foreground = gtk_color_attributes.theme_unfocused_fg_color;
134	      unfocused_selected_foreground = gtk_color_attributes.theme_unfocused_selected_fg_color;
135	      unfocused_insensitive_color = gtk_color_attributes.unfocused_insensitive_color;
136	      unfocused_text = gtk_color_attributes.theme_unfocused_text_color;
137	
138	      warning = gtk_color_attributes.warning_color;
139	      error = gtk_color_attributes.error_color;
140	      success = gtk_color_attributes.success_color;
141	    };
142	  };
143	
144	  design_factor = 16;
145	  animation_duration = 200; # ms
146	
147	  wallpaper = builtins.fetchurl {
148	    url = "https://raw.githubusercontent.com/JaKooLit/Wallpaper-Bank/refs/heads/main/wallpapers/Dark_Nature.png";
149	  };
150	
151	  backlight_device = "intel_backlight";
152	
153	  secrets = import ./secrets.nix;
154	in
155	{
156	  imports = [
157	    (import "${home-manager}/nixos")
158	
159	    ./hardware-configuration.nix
160	  ];
161	
162	  boot = {
163	    loader = {
164	      efi.canTouchEfiVariables = true;
165	      timeout = 2;
166	
167	      systemd-boot = {
168	        enable = true;
169	        consoleMode = "max";
170	        configurationLimit = null;
171	
172	        memtest86.enable = true;
173	      };
174	    };
175	
176	    kernel = {
177	      enable = true;
178	
179	      sysctl = {
180	        "net.ipv4.tcp_syncookies" = true;
181	      };
182	    };
183	
184	    kernelPackages = pkgs.linuxKernel.packages.linux_zen;
185	
186	    extraModulePackages = with config.boot.kernelPackages; [
187	      # apfs # Build Failure
188	      # zfs_unstable # Build Failure
189	      acpi_call
190	      cpupower
191	      cryptodev
192	      mm-tools
193	      nullfs
194	      openafs
195	      perf
196	      shufflecake
197	      tmon
198	      turbostat
199	      usbip
200	      vendor-reset
201	    ];
202	
203	    kernelModules = [
204	      "at24"
205	      "ee1004"
206	      "kvm-intel"
207	      "spd5118"
208	    ];
209	
210	    extraModprobeConfig = ''
211	      options kvm_intel nested=1
212	      options kvm report_ignored_msrs=0
213	    '';
214	
215	    kernelParams = [
216	      "boot.shell_on_fail"
217	      "intel_iommu=on"
218	      "iommu=pt"
219	      "kvm.ignore_msrs=1"
220	      "mitigations=auto"
221	      "rd.systemd.show_status=true"
222	      "rd.udev.log_level=err"
223	      "udev.log_level=err"
224	      "udev.log_priority=err"
225	    ];
226	
227	    initrd = {
228	      enable = true;
229	
230	      kernelModules = config.boot.kernelModules;
231	
232	      systemd = {
233	        enable = true;
234	        package = config.systemd.package;
235	      };
236	
237	      network.ssh.enable = true;
238	
239	      verbose = true;
240	    };
241	
242	    consoleLogLevel = 4; # 4 = KERN_WARNING
243	
244	    tmp.cleanOnBoot = true;
245	
246	    plymouth = {
247	      enable = true;
248	
249	      themePackages = [
250	        pkgs.nixos-bgrt-plymouth
251	      ];
252	      theme = "nixos-bgrt";
253	
254	      font = "${pkgs.nerd-fonts.noto}/share/fonts/truetype/NerdFonts/Noto/NotoSansNerdFont-Regular.ttf";
255	
256	      extraConfig = ''
257	        UseFirmwareBackground=true
258	      '';
259	    };
260	  };
261	
262	  time = {
263	    timeZone = "Asia/Dhaka";
264	    hardwareClockInLocalTime = true;
265	  };
266	
267	  system = {
268	    copySystemConfiguration = true;
269	
270	    switch.enable = true;
271	    tools = {
272	      nixos-build-vms.enable = true;
273	      nixos-enter.enable = true;
274	      nixos-generate-config.enable = true;
275	      nixos-install.enable = true;
276	      nixos-option.enable = true;
277	      nixos-rebuild.enable = true;
278	      nixos-version.enable = true;
279	    };
280	
281	    autoUpgrade = {
282	      enable = false;
283	      channel = "https://nixos.org/channels/nixos-unstable";
284	      operation = "boot";
285	      allowReboot = false;
286	    };
287	
288	    # activationScripts = { };
289	    # userActivationScripts = { };
290	
291	    stateVersion = "24.11";
292	  };
293	
294	  nix = {
295	    enable = true;
296	    channel.enable = true;
297	
298	    settings = {
299	      experimental-features = [
300	        "flakes"
301	        "nix-command"
302	        "pipe-operators"
303	      ];
304	
305	      require-sigs = true;
306	      sandbox = true;
307	      auto-optimise-store = true;
308	
309	      cores = 0; # 0 = All
310	      max-jobs = 1;
311	    };
312	
313	    gc = {
314	      automatic = true;
315	      dates = "weekly";
316	      persistent = true;
317	    };
318	  };
319	
320	  nixpkgs = {
321	    hostPlatform = "x86_64-linux";
322	
323	    config = {
324	      allowUnfree = true;
325	      android_sdk.accept_license = true;
326	    };
327	
328	    # overlays = [ ];
329	  };
330	
331	  appstream.enable = true;
332	
333	  i18n = {
334	    defaultLocale = "en_US.UTF-8";
335	    extraLocales = "all";
336	
337	    extraLocaleSettings = {
338	      LC_ADDRESS = config.i18n.defaultLocale;
339	      LC_COLLATE = config.i18n.defaultLocale;
340	      LC_CTYPE = config.i18n.defaultLocale;
341	      LC_IDENTIFICATION = config.i18n.defaultLocale;
342	      LC_MEASUREMENT = config.i18n.defaultLocale;
343	      LC_MESSAGES = config.i18n.defaultLocale;
344	      LC_MONETARY = config.i18n.defaultLocale;
345	      LC_NAME = config.i18n.defaultLocale;
346	      LC_NUMERIC = config.i18n.defaultLocale;
347	      LC_PAPER = config.i18n.defaultLocale;
348	      LC_TELEPHONE = config.i18n.defaultLocale;
349	      LC_TIME = config.i18n.defaultLocale;
350	      LC_ALL = config.i18n.defaultLocale;
351	    };
352	
353	    inputMethod = {
354	      enable = true;
355	      type = "fcitx5";
356	
357	      fcitx5 = {
358	        waylandFrontend = true;
359	
360	        addons = with pkgs; [
361	          fcitx5-gtk
362	          fcitx5-openbangla-keyboard
363	        ];
364	      };
365	    };
366	  };
367	
368	  networking = {
369	    enableIPv6 = true;
370	
371	    domain = "local";
372	    hostName = "Bitscoper-WorkStation";
373	    fqdn = "${config.networking.hostName}.${config.networking.domain}";
374	
375	    wireless = {
376	      dbusControlled = true;
377	      userControlled.enable = true;
378	    };
379	
380	    networkmanager = {
381	      enable = true;
382	      package = (
383	        pkgs.networkmanager.override {
384	          withSystemd = true;
385	        }
386	      );
387	
388	      ethernet.macAddress = "permanent";
389	
390	      wifi = {
391	        backend = "wpa_supplicant";
392	
393	        powersave = false;
394	
395	        scanRandMacAddress = true;
396	        macAddress = "permanent";
397	      };
398	
399	      logLevel = "WARN";
400	    };
401	
402	    firewall = {
403	      enable = false;
404	
405	      allowPing = true;
406	
407	      allowedTCPPorts = [
408	        5900 # VNC
409	      ];
410	      allowedUDPPorts = [
411	        5900 # VNC
412	      ];
413	    };
414	
415	    nameservers = [
416	      "1.1.1.3#one.one.one.one"
417	      "1.0.0.3#one.one.one.one"
418	    ];
419	
420	    timeServers = [
421	      "0.nixos.pool.ntp.org"
422	      "1.nixos.pool.ntp.org"
423	      "2.nixos.pool.ntp.org"
424	      "3.nixos.pool.ntp.org"
425	    ];
426	  };
427	
428	  security = {
429	    allowSimultaneousMultithreading = true;
430	
431	    tpm2.enable = true;
432	
433	    lockKernelModules = false;
434	
435	    pam = {
436	      mount = {
437	        enable = true;
438	
439	        createMountPoints = true;
440	        removeCreatedMountPoints = true;
441	
442	        logoutHup = true;
443	        logoutTerm = false;
444	        logoutKill = false;
445	
446	        logoutWait = 0;
447	      };
448	
449	      services = {
450	        login = {
451	          unixAuth = true;
452	          nodelay = false;
453	
454	          fprintAuth = true;
455	
456	          logFailures = true;
457	
458	          enableGnomeKeyring = true;
459	
460	          gnupg = {
461	            enable = true;
462	            storeOnly = false;
463	            noAutostart = false;
464	          };
465	        };
466	
467	        greetd = {
468	          unixAuth = true;
469	          nodelay = false;
470	
471	          fprintAuth = true;
472	
473	          logFailures = true;
474	
475	          enableGnomeKeyring = true;
476	
477	          gnupg = {
478	            enable = true;
479	            storeOnly = false;
480	            noAutostart = false;
481	          };
482	        };
483	
484	        hyprlock = {
485	          unixAuth = true;
486	          nodelay = false;
487	
488	          fprintAuth = true;
489	
490	          logFailures = true;
491	
492	          enableGnomeKeyring = true;
493	
494	          gnupg = {
495	            enable = true;
496	            storeOnly = false;
497	            noAutostart = false;
498	          };
499	        };
500	
501	        sudo = {
502	          unixAuth = true;
503	          nodelay = false;
504	
505	          fprintAuth = true;
506	
507	          logFailures = true;
508	        };
509	
510	        polkit-1 = {
511	          unixAuth = true;
512	          nodelay = false;
513	
514	          fprintAuth = true;
515	
516	          logFailures = true;
517	        };
518	      };
519	    };
520	
521	    sudo = {
522	      enable = true;
523	      package = (
524	        pkgs.sudo.override {
525	          withInsults = true;
526	        }
527	      );
528	
529	      execWheelOnly = true;
530	      wheelNeedsPassword = true;
531	    };
532	
533	    polkit = {
534	      enable = true;
535	      package = (
536	        pkgs.polkit.override {
537	          useSystemd = true;
538	        }
539	      );
540	    };
541	
542	    soteria = {
543	      enable = true;
544	      package = pkgs.soteria;
545	    };
546	
547	    rtkit.enable = true;
548	
549	    wrappers = {
550	      spice-client-glib-usb-acl-helper.source = "${
551	        (pkgs.spice-gtk.override {
552	          withPolkit = true;
553	        })
554	      }/bin/spice-client-glib-usb-acl-helper";
555	    };
556	
557	    audit = {
558	      enable = false;
559	    };
560	  };
561	
562	  hardware = {
563	    enableAllFirmware = true; # Unfree
564	    enableRedistributableFirmware = true; # Unfree
565	    firmware = with pkgs; [
566	      linux-firmware
567	      sof-firmware
568	    ];
569	
570	    cpu = {
571	      intel = {
572	        updateMicrocode = true;
573	      };
574	    };
575	
576	    graphics = {
577	      enable = true;
578	      enable32Bit = true;
579	
580	      extraPackages = with pkgs; [
581	        intel-media-driver
582	        intel-compute-runtime
583	      ];
584	    };
585	
586	    sensor = {
587	      hddtemp = {
588	        enable = true;
589	        unit = "C";
590	        drives = [
591	          "/dev/disk/by-path/*"
592	        ];
593	      };
594	    };
595	
596	    bluetooth = {
597	      enable = true;
598	      package = (
599	        pkgs.bluez.override {
600	          enableExperimental = true;
601	        }
602	      );
603	
604	      hsphfpd.enable = false; # Conflicts wwth WirePlumber
605	
606	      powerOnBoot = true;
607	
608	      input.General = {
609	        IdleTimeout = 0; # 0 = Disabled
610	        LEAutoSecurity = true;
611	        ClassicBondedOnly = true;
612	        UserspaceHID = true;
613	      };
614	
615	      network.General = {
616	        DisableSecurity = false;
617	      };
618	
619	      settings = {
620	        General = {
621	          MaxControllers = 0; # 0 = Unlimited
622	          ControllerMode = "dual";
623	
624	          Name = config.networking.hostName;
625	
626	          DiscoverableTimeout = 0; # 0 = Disabled
627	          PairableTimeout = 0; # 0 = Disabled
628	          AlwaysPairable = true;
629	          FastConnectable = true;
630	
631	          ReverseServiceDiscovery = true;
632	          NameResolving = true;
633	          RemoteNameRequestRetryDelay = 60; # 1 Minute
634	          RefreshDiscovery = true;
635	          TemporaryTimeout = 0; # 0 = Disabled
636	
637	          SecureConnections = "on";
638	          Privacy = "off";
639	
640	          Experimental = true; # Shows Battery Percentage
641	          KernelExperimental = true;
642	        };
643	
644	        Policy = {
645	          AutoEnable = true;
646	
647	          ResumeDelay = 2; # Seconds
648	          ReconnectAttempts = 7;
649	          ReconnectIntervals = "1, 2, 4, 8, 16, 32, 64";
650	        };
651	
652	        GATT = {
653	          Cache = "always";
654	        };
655	
656	        CSIS = {
657	          Encryption = true;
658	        };
659	
660	        AVRCP = {
661	          VolumeCategory = true;
662	          VolumeWithoutTarget = false;
663	        };
664	
665	        AVDTP = {
666	          SessionMode = "ertm";
667	        };
668	
669	        AdvMon = {
670	          RSSISamplingPeriod = "0x00";
671	        };
672	      };
673	    };
674	
675	    rtl-sdr = {
676	      enable = true;
677	      package = pkgs.rtl-sdr;
678	    };
679	
680	    sane = {
681	      enable = true;
682	      backends-package = (
683	        pkgs.sane-backends.override {
684	          withSystemd = true;
685	        }
686	      );
687	      # extraBackends = with pkgs; [ ];
688	      snapshot = false;
689	
690	      openFirewall = true;
691	    };
692	  };
693	
694	  virtualisation = {
695	    libvirtd = {
696	      enable = true;
697	      package = pkgs.libvirt;
698	
699	      qemu = {
700	        package = (
701	          pkgs.qemu_kvm.override {
702	            guestAgentSupport = true;
703	            alsaSupport = true;
704	            pulseSupport = true;
705	            pipewireSupport = true;
706	            sdlSupport = true;
707	            jackSupport = true;
708	            gtkSupport = true;
709	            vncSupport = true;
710	            smartcardSupport = true;
711	            spiceSupport = true;
712	            usbredirSupport = true;
713	            glusterfsSupport = true;
714	            openGLSupport = true;
715	            rutabagaSupport = true;
716	            virglSupport = true;
717	            libiscsiSupport = true;
718	            smbdSupport = true;
719	            tpmSupport = true;
720	            uringSupport = true;
721	            pluginsSupport = true;
722	            enableDocs = true;
723	            enableTools = true;
724	            enableBlobs = true;
725	          }
726	        );
727	
728	        swtpm = {
729	          enable = true;
730	          package = pkgs.swtpm;
731	        };
732	
733	        ovmf = {
734	          enable = true;
735	          packages = [
736	            (pkgs.OVMFFull.override {
737	              secureBoot = true;
738	              httpSupport = true;
739	              tpmSupport = true;
740	              tlsSupport = true;
741	            }).fd
742	          ];
743	        };
744	
745	        runAsRoot = true;
746	      };
747	    };
748	    spiceUSBRedirection.enable = true;
749	
750	    containers.enable = true;
751	
752	    podman = {
753	      enable = true;
754	      package = pkgs.podman;
755	      dockerCompat = true;
756	
757	      defaultNetwork.settings.dns_enabled = true;
758	    };
759	
760	    oci-containers.backend = "podman";
761	
762	    waydroid = {
763	      enable = true;
764	      package = pkgs.waydroid;
765	    };
766	  };
767	
768	  systemd = {
769	    package = (
770	      pkgs.systemd.override {
771	        withAcl = true;
772	        withCryptsetup = true;
773	        withDocumentation = true;
774	        withLogind = true;
775	        withOpenSSL = true;
776	        withPam = true;
777	        withPolkit = true;
778	      }
779	    );
780	
781	    packages = with pkgs; [
782	      (hardinfo2.override {
783	        printingSupport = true;
784	      })
785	    ];
786	
787	    services = {
788	      hardinfo2_custom = {
789	        description = "Hardinfo2 support for root access";
790	        wantedBy = [ "basic.target" ];
791	
792	        serviceConfig = {
793	          Type = "oneshot";
794	          ExecStart = "${pkgs.hardinfo2}/bin/hwinfo2_fetch_sysdata"; # The ${pkgs.hardinfo2}/lib/systemd/system/hardinfo2.service file intends to run ${pkgs.hardinfo2}/bin/hwinfo2_fetch_sysdata oneshot which calls ${pkgs.hardinfo2}/bin/.hwinfo2_fetch_sysdata-wrapped
795	        };
796	
797	        enable = true;
798	      };
799	    }; # Custom Service Unit File due to Errors
800	
801	  };
802	
803	  services = {
804	    dbus = {
805	      enable = true;
806	      dbusPackage = (
807	        pkgs.dbus.override {
808	          enableSystemd = true;
809	        }
810	      );
811	
812	      implementation = "broker";
813	
814	      # packages = with pkgs; [ ];
815	    };
816	
817	    timesyncd = {
818	      enable = true;
819	
820	      servers = config.networking.timeServers;
821	      fallbackServers = config.networking.timeServers;
822	    };
823	
824	    fwupd = {
825	      enable = true;
826	      package = (
827	        pkgs.fwupd.override {
828	          enableFlashrom = true;
829	        }
830	      );
831	    };
832	
833	    acpid = {
834	      enable = true;
835	
836	      # powerEventCommands = '''';
837	      # acEventCommands = '''';
838	      # lidEventCommands = '''';
839	
840	      logEvents = false;
841	    };
842	
843	    thermald = {
844	      enable = true;
845	      package = pkgs.thermald;
846	
847	      ignoreCpuidCheck = false;
848	
849	      debug = false;
850	    };
851	
852	    power-profiles-daemon = {
853	      enable = true;
854	      package = pkgs.power-profiles-daemon;
855	    };
856	
857	    logind = {
858	      killUserProcesses = true;
859	
860	      lidSwitch = "ignore";
861	      lidSwitchDocked = "ignore";
862	      lidSwitchExternalPower = "ignore";
863	
864	      powerKey = "poweroff";
865	      powerKeyLongPress = "poweroff";
866	
867	      rebootKey = "reboot";
868	      rebootKeyLongPress = "reboot";
869	
870	      suspendKey = "ignore";
871	      suspendKeyLongPress = "ignore";
872	
873	      hibernateKey = "ignore";
874	      hibernateKeyLongPress = "ignore";
875	    };
876	
877	    udev = {
878	      enable = true;
879	      packages = with pkgs; [
880	        android-udev-rules
881	        game-devices-udev-rules
882	        libmtp.out
883	        rtl-sdr
884	      ];
885	    };
886	
887	    libinput = {
888	      enable = true;
889	
890	      mouse = {
891	        leftHanded = false;
892	        disableWhileTyping = false;
893	        tapping = true;
894	        middleEmulation = true;
895	        clickMethod = "buttonareas";
896	        scrollMethod = "twofinger";
897	        naturalScrolling = true;
898	        horizontalScrolling = true;
899	        tappingDragLock = true;
900	        sendEventsMode = "enabled";
901	      };
902	
903	      touchpad = {
904	        leftHanded = false;
905	        disableWhileTyping = false;
906	        tapping = true;
907	        middleEmulation = true;
908	        clickMethod = "buttonareas";
909	        scrollMethod = "twofinger";
910	        naturalScrolling = true;
911	        horizontalScrolling = true;
912	        tappingDragLock = true;
913	        sendEventsMode = "enabled";
914	      };
915	    };
916	
917	    fprintd = {
918	      enable = true;
919	      package = if config.services.fprintd.tod.enable then pkgs.fprintd-tod else pkgs.fprintd;
920	      # tod = {
921	      #   enable = true;
922	      #   driver = ;
923	      # };
924	    };
925	
926	    greetd = {
927	      enable = true;
928	      package = pkgs.greetd;
929	
930	      restart = true;
931	
932	      settings = {
933	        default_session = {
934	          command = "${pkgs.lib.getExe pkgs.tuigreet} --greet-align center --time --greeting Welcome --user-menu --asterisks --asterisks-char \"*\" --cmd \"${pkgs.lib.getExe config.programs.uwsm.package} start hyprland-uwsm.desktop\"";
935	          user = "bitscoper";
936	        };
937	      };
938	    };
939	
940	    gnome = {
941	      gnome-keyring.enable = true;
942	      gcr-ssh-agent.enable = true;
943	    };
944	
945	    gvfs = {
946	      enable = true;
947	      package = (
948	        pkgs.gvfs.override {
949	          udevSupport = true;
950	        }
951	      );
952	    };
953	
954	    udisks2 = {
955	      enable = true;
956	      package = pkgs.udisks2;
957	
958	      mountOnMedia = false;
959	    };
960	
961	    pipewire = {
962	      enable = true;
963	      package = (
964	        pkgs.pipewire.override {
965	          enableSystemd = true;
966	          vulkanSupport = true;
967	          bluezSupport = true;
968	          zeroconfSupport = true;
969	          raopSupport = true;
970	          rocSupport = true;
971	        }
972	      );
973	      systemWide = false;
974	
975	      audio.enable = true;
976	
977	      alsa.enable = true;
978	      alsa.support32Bit = true;
979	      pulse.enable = true;
980	      jack.enable = true;
981	
982	      socketActivation = true;
983	
984	      wireplumber = {
985	        enable = true;
986	        package = (
987	          pkgs.wireplumber.override {
988	            enableDocs = true;
989	          }
990	        );
991	
992	        extraConfig.bluetoothEnhancements = {
993	          "monitor.bluez.properties" = {
994	            "bluez5.enable-hw-volume" = true;
995	
996	            "bluez5.enable-sbc-xq" = true;
997	            "bluez5.enable-msbc" = true;
998	
999	            "bluez5.roles" = [
1000	              "a2dp_sink"
1001	              "a2dp_source"
1002	              "bap_sink"
1003	              "bap_source"
1004	              "hfp_ag"
1005	              "hfp_hf"
1006	              "hsp_ag"
1007	              "hsp_hs"
1008	            ];
1009	
1010	            "bluez5.codecs" = [
1011	              "aac"
1012	              "aptx"
1013	              "aptx_hd"
1014	              "aptx_ll"
1015	              "aptx_ll_duplex"
1016	              "faststream"
1017	              "faststream_duplex"
1018	              "lc3"
1019	              "lc3plus_h3"
1020	              "ldac"
1021	              "opus_05"
1022	              "opus_05_51"
1023	              "opus_05_71"
1024	              "opus_05_duplex"
1025	              "opus_05_pro"
1026	              "sbc"
1027	              "sbc_xq"
1028	            ];
1029	          };
1030	        };
1031	      };
1032	
1033	      raopOpenFirewall = true;
1034	    };
1035	
1036	    pulseaudio.enable = false;
1037	
1038	    phpfpm = {
1039	      phpPackage =
1040	        (pkgs.php.override {
1041	          cgiSupport = true;
1042	          cliSupport = true;
1043	          fpmSupport = true;
1044	          pearSupport = true;
1045	          pharSupport = true;
1046	          phpdbgSupport = true;
1047	          argon2Support = true;
1048	          cgotoSupport = true;
1049	          staticSupport = true;
1050	          ipv6Support = true;
1051	          zendSignalsSupport = true;
1052	          zendMaxExecutionTimersSupport = false;
1053	          systemdSupport = true;
1054	          valgrindSupport = true;
1055	          ztsSupport = true;
1056	        }).buildEnv
1057	          {
1058	            extensions =
1059	              {
1060	                enabled,
1061	                all,
1062	              }:
1063	              enabled
1064	              ++ (with all; [
1065	                bz2
1066	                calendar
1067	                ctype
1068	                curl
1069	                dba
1070	                dom
1071	                exif
1072	                ffi
1073	                fileinfo
1074	                filter
1075	                ftp
1076	                gd
1077	                iconv
1078	                imagick
1079	                imap
1080	                mailparse
1081	                memcached
1082	                mysqli
1083	                mysqlnd
1084	                opcache
1085	                openssl
1086	                pcntl
1087	                pdo
1088	                pdo_mysql
1089	                pdo_pgsql
1090	                pgsql
1091	                posix
1092	                session
1093	                sockets
1094	                sodium
1095	                systemd
1096	                xdebug
1097	                xml
1098	                xmlreader
1099	                xmlwriter
1100	                xsl
1101	                zip
1102	                zlib
1103	              ]);
1104	
1105	            extraConfig = config.services.phpfpm.phpOptions;
1106	          };
1107	
1108	      settings = {
1109	        log_level = "warning";
1110	      };
1111	
1112	      phpOptions = ''
1113	        default_charset = "UTF-8"
1114	        error_reporting = E_ALL
1115	        display_errors = Off
1116	        log_errors = On
1117	        cgi.force_redirect = 1
1118	        expose_php = Off
1119	        file_uploads = On
1120	        session.cookie_lifetime = 0
1121	        session.use_cookies = 1
1122	        session.use_only_cookies = 1
1123	        session.use_strict_mode = 1
1124	        session.cookie_httponly = 1
1125	        session.cookie_secure = 1
1126	        session.cookie_samesite = "Strict"
1127	        session.gc_maxlifetime = 43200
1128	        session.use_trans_sid = O
1129	        session.cache_limiter = nocache
1130	        xdebug.mode=debug
1131	      '';
1132	    };
1133	
1134	    avahi = {
1135	      enable = true;
1136	      package = (
1137	        pkgs.avahi.override {
1138	          gtk3Support = true;
1139	        }
1140	      );
1141	
1142	      ipv4 = true;
1143	      ipv6 = true;
1144	
1145	      nssmdns4 = true;
1146	      nssmdns6 = true;
1147	
1148	      wideArea = false;
1149	
1150	      publish = {
1151	        enable = true;
1152	
1153	        domain = true;
1154	        addresses = true;
1155	        workstation = true;
1156	        hinfo = true;
1157	        userServices = true;
1158	      };
1159	
1160	      domainName = config.networking.domain;
1161	      hostName = config.networking.hostName;
1162	
1163	      openFirewall = true;
1164	    };
1165	
1166	    openssh = {
1167	      enable = true;
1168	      package = (
1169	        pkgs.openssh.override {
1170	          withPAM = true;
1171	          linkOpenssl = true;
1172	          isNixos = true;
1173	        }
1174	      );
1175	
1176	      listenAddresses = [
1177	        {
1178	          addr = "0.0.0.0";
1179	        }
1180	        {
1181	          addr = "::";
1182	        }
1183	      ];
1184	      ports = [
1185	        22
1186	      ];
1187	      allowSFTP = true;
1188	
1189	      banner = config.networking.fqdn;
1190	
1191	      authorizedKeysInHomedir = true;
1192	
1193	      settings = {
1194	        PermitRootLogin = "yes";
1195	        PasswordAuthentication = true;
1196	        X11Forwarding = false;
1197	        StrictModes = true;
1198	        UseDns = true;
1199	        LogLevel = "ERROR";
1200	      };
1201	
1202	      openFirewall = true;
1203	    };
1204	    sshd.enable = true;
1205	
1206	    cockpit = {
1207	      enable = true;
1208	      package = pkgs.cockpit;
1209	
1210	      port = 9090;
1211	      allowed-origins = [
1212	        "*"
1213	      ];
1214	
1215	      settings = {
1216	        WebService = {
1217	          AllowUnencrypted = false;
1218	
1219	          LoginTo = true;
1220	          AllowMultiHost = true;
1221	        };
1222	      };
1223	
1224	      openFirewall = true;
1225	    };
1226	
1227	    blueman.enable = true;
1228	
1229	    printing = {
1230	      enable = true;
1231	      package = (
1232	        pkgs.cups.override {
1233	          enableSystemd = true;
1234	        }
1235	      );
1236	
1237	      drivers = with pkgs; [
1238	        (gutenprint.override {
1239	          cupsSupport = true;
1240	        })
1241	        gutenprintBin
1242	      ];
1243	
1244	      cups-pdf.enable = true;
1245	
1246	      listenAddresses = [
1247	        "*:631"
1248	      ];
1249	
1250	      allowFrom = [
1251	        "all"
1252	      ];
1253	
1254	      browsing = true;
1255	      webInterface = true;
1256	
1257	      defaultShared = true;
1258	      startWhenNeeded = true;
1259	
1260	      extraConf = ''
1261	        DefaultLanguage en
1262	        ServerName ${config.networking.fqdn}
1263	        ServerAlias *
1264	        ServerTokens Full
1265	        ServerAdmin bitscoper@${config.networking.fqdn}
1266	        BrowseLocalProtocols all
1267	        BrowseWebIF On
1268	        HostNameLookups On
1269	        AccessLogLevel config
1270	        AutoPurgeJobs Yes
1271	        PreserveJobHistory Off
1272	        PreserveJobFiles Off
1273	        DirtyCleanInterval 30
1274	        LogTimeFormat standard
1275	      '';
1276	
1277	      logLevel = "warn";
1278	
1279	      openFirewall = true;
1280	    };
1281	    ipp-usb.enable = true;
1282	    system-config-printer.enable = true;
1283	
1284	    saned = {
1285	      enable = true;
1286	    };
1287	
1288	    bind = {
1289	      enable = false;
1290	      package = pkgs.bind;
1291	
1292	      listenOn = [
1293	        "any"
1294	      ];
1295	      ipv4Only = false;
1296	      listenOnIpv6 = [
1297	        "any"
1298	      ];
1299	
1300	      cacheNetworks = [
1301	        "127.0.0.0/24"
1302	        "::1/128"
1303	      ];
1304	
1305	      extraOptions = ''
1306	        recursion no;
1307	      '';
1308	    };
1309	
1310	    memcached = {
1311	      enable = true;
1312	      listen = "*";
1313	      port = 11211;
1314	      enableUnixSocket = false;
1315	      maxMemory = 64; # Megabytes
1316	      maxConnections = 256;
1317	    };
1318	
1319	    postgresql = {
1320	      enable = true;
1321	      package = (
1322	        pkgs.postgresql_17_jit.override {
1323	          # curlSupport = true;
1324	          # pamSupport = true;
1325	          # systemdSupport = true;
1326	          # uringSupport = true;
1327	        }
1328	      );
1329	
1330	      enableTCPIP = true;
1331	
1332	      settings = pkgs.lib.mkForce {
1333	        listen_addresses = "*";
1334	        port = 5432;
1335	        jit = true;
1336	      };
1337	
1338	      authentication = pkgs.lib.mkOverride 10 ''
1339	        local all all md5
1340	        host all all 0.0.0.0/0 md5
1341	        host all all ::/0 md5
1342	        local replication all md5
1343	        host replication all 0.0.0.0/0 md5
1344	        host replication all ::/0 md5
1345	      '';
1346	
1347	      checkConfig = true;
1348	
1349	      initialScript = pkgs.writeText "initScript" ''
1350	        ALTER USER postgres WITH PASSWORD '${secrets.password_1_of_bitscoper}';
1351	      '';
1352	    };
1353	
1354	    mysql = {
1355	      enable = true;
1356	      package = pkgs.mariadb_118;
1357	
1358	      settings = {
1359	        mysqld = {
1360	          bind-address = "*";
1361	          port = 3306;
1362	
1363	          sql_mode = "";
1364	        };
1365	      };
1366	
1367	      initialScript = pkgs.writeText "initScript" ''
1368	        grant all privileges on *.* to 'root'@'%' identified by password '${secrets.hashed_password_1_of_bitscoper}' with grant option;
1369	        DELETE FROM mysql.user WHERE `Host`='localhost' AND `User`='root';
1370	        flush privileges;
1371	      '';
1372	    };
1373	
1374	    postfix = {
1375	      enable = true;
1376	
1377	      enableSmtp = true;
1378	      enableSubmission = true;
1379	      enableSubmissions = true;
1380	
1381	      virtualMapType = "pcre";
1382	      aliasMapType = "pcre";
1383	      enableHeaderChecks = true;
1384	
1385	      setSendmail = true;
1386	
1387	      settings = {
1388	        main = {
1389	          mydomain = config.networking.fqdn;
1390	          myhostname = config.networking.fqdn;
1391	          myorigin = config.networking.fqdn;
1392	        };
1393	      };
1394	    };
1395	
1396	    opendkim = {
1397	      enable = true;
1398	
1399	      domains = "csl:${config.networking.fqdn}";
1400	      selector = "default";
1401	
1402	      # settings = { };
1403	    };
1404	
1405	    dovecot2 = {
1406	      enable = true;
1407	
1408	      enableImap = true;
1409	      enableLmtp = true;
1410	      enablePop3 = false;
1411	      protocols = [
1412	        "imap"
1413	        "lmtp"
1414	      ];
1415	
1416	      enableQuota = true;
1417	      quotaPort = "12340";
1418	
1419	      enableDHE = true;
1420	
1421	      createMailUser = true;
1422	
1423	      enablePAM = true;
1424	      showPAMFailure = true;
1425	
1426	      # pluginSettings = { };
1427	    };
1428	
1429	    icecast = {
1430	      enable = true;
1431	
1432	      hostname = config.networking.fqdn;
1433	      listen = {
1434	        address = "0.0.0.0";
1435	        port = 17101;
1436	      };
1437	
1438	      user = "nobody";
1439	      group = "nogroup";
1440	
1441	      admin = {
1442	        user = "bitscoper";
1443	        password = secrets.password_1_of_bitscoper;
1444	      };
1445	
1446	      extraConf = ''
1447	        <location>${config.networking.fqdn}</location>
1448	        <admin>bitscoper@${config.networking.fqdn}</admin>
1449	        <authentication>
1450	          <source-password>${secrets.password_2_of_bitscoper}</source-password>
1451	          <relay-password>${secrets.password_2_of_bitscoper}</relay-password>
1452	        </authentication>
1453	        <directory>
1454	          <yp-url-timeout>15</yp-url-timeout>
1455	          <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
1456	        </directory>
1457	        <logging>
1458	          <loglevel>2</loglevel>
1459	        </logging>
1460	        <server-id>${config.networking.fqdn}</server-id>
1461	      ''; # <loglevel>2</loglevel> = Warn
1462	
1463	      logDir = "/var/log/icecast/";
1464	    };
1465	
1466	    jellyfin = {
1467	      enable = true;
1468	      package = pkgs.jellyfin;
1469	
1470	      openFirewall = true;
1471	    };
1472	
1473	    ollama = {
1474	      enable = true;
1475	      package = pkgs.ollama;
1476	
1477	      host = "0.0.0.0";
1478	      port = 11434;
1479	      openFirewall = true;
1480	    };
1481	
1482	    tailscale = {
1483	      enable = true;
1484	      package = pkgs.tailscale;
1485	
1486	      disableTaildrop = false;
1487	
1488	      port = 0; # 0 = Automatic
1489	      openFirewall = true;
1490	    };
1491	
1492	    kubernetes = {
1493	      package = pkgs.kubernetes;
1494	    };
1495	
1496	    logrotate = {
1497	      enable = true;
1498	
1499	      checkConfig = true;
1500	      allowNetworking = true;
1501	    };
1502	  };
1503	
1504	  programs = {
1505	    command-not-found.enable = true;
1506	
1507	    nix-ld = {
1508	      enable = true;
1509	      package = pkgs.nix-ld;
1510	
1511	      libraries =
1512	        options.programs.nix-ld.libraries.default
1513	        ++ (with pkgs; [
1514	          glib.out
1515	          llvmPackages.stdenv.cc.cc.lib
1516	          stdenv.cc.cc.lib
1517	        ]);
1518	    };
1519	
1520	    java = {
1521	      enable = true;
1522	      package = (
1523	        pkgs.jdk24.override {
1524	          enableGtk = true;
1525	        }
1526	      );
1527	
1528	      binfmt = true;
1529	    };
1530	
1531	    appimage = {
1532	      enable = true;
1533	      package = (
1534	        pkgs.appimage-run.override {
1535	          extraPkgs =
1536	            pkgs: with pkgs; [
1537	              libepoxy
1538	            ];
1539	        }
1540	      );
1541	
1542	      binfmt = true;
1543	    };
1544	
1545	    uwsm = {
1546	      enable = true;
1547	      package = (
1548	        pkgs.uwsm.override {
1549	          fumonSupport = true;
1550	          uuctlSupport = true;
1551	          uwsmAppSupport = true;
1552	        }
1553	      );
1554	    };
1555	
1556	    hyprland = {
1557	      enable = true;
1558	      package = (
1559	        pkgs.hyprland.override {
1560	          enableXWayland = true;
1561	          wrapRuntimeDeps = true;
1562	        }
1563	      );
1564	      portalPackage = pkgs.xdg-desktop-portal-hyprland;
1565	
1566	      withUWSM = true;
1567	      xwayland.enable = true;
1568	    };
1569	
1570	    xwayland.enable = true;
1571	
1572	    bash = {
1573	      completion = {
1574	        enable = true;
1575	        package = pkgs.bash-completion;
1576	      };
1577	
1578	      enableLsColors = true;
1579	
1580	      undistractMe = {
1581	        enable = true;
1582	        playSound = true;
1583	      };
1584	
1585	      # shellAliases = { };
1586	
1587	      # loginShellInit = '''';
1588	      # shellInit = '''';
1589	
1590	      interactiveShellInit = ''
1591	        PROMPT_COMMAND="history -a"
1592	      '';
1593	    };
1594	
1595	    fish = {
1596	      enable = true;
1597	      package = pkgs.fish;
1598	
1599	      vendor = {
1600	        config.enable = true;
1601	        functions.enable = true;
1602	        completions.enable = true;
1603	      };
1604	
1605	      # shellAbbrs = { };
1606	      # shellAliases = { };
1607	
1608	      # promptInit = '''';
1609	      # loginShellInit = '''';
1610	      # shellInit = '''';
1611	
1612	      interactiveShellInit = ''
1613	        if command -q nix-your-shell
1614	          nix-your-shell fish | source
1615	        end
1616	        function save_history --on-event fish_prompt
1617	          history --save
1618	        end
1619	      '';
1620	    };
1621	
1622	    zoxide = {
1623	      enable = true;
1624	      package = (
1625	        pkgs.zoxide.override {
1626	          withFzf = true;
1627	        }
1628	      );
1629	
1630	      enableBashIntegration = true;
1631	      enableFishIntegration = true;
1632	
1633	      flags = [
1634	        "--cmd cd"
1635	      ];
1636	    };
1637	
1638	    direnv = {
1639	      enable = true;
1640	      package = pkgs.direnv;
1641	
1642	      nix-direnv.enable = true;
1643	      loadInNixShell = true;
1644	
1645	      enableBashIntegration = true;
1646	      enableFishIntegration = true;
1647	
1648	      silent = false;
1649	    };
1650	
1651	    nix-index = {
1652	      package = pkgs.nix-index;
1653	
1654	      enableBashIntegration = true;
1655	      enableFishIntegration = true;
1656	    };
1657	
1658	    gnupg = {
1659	      package = (
1660	        pkgs.gnupg.override {
1661	          guiSupport = true;
1662	          withTpm2Tss = true;
1663	        }
1664	      );
1665	
1666	      agent = {
1667	        enable = true;
1668	
1669	        enableBrowserSocket = true;
1670	        enableExtraSocket = true;
1671	        enableSSHSupport = false;
1672	
1673	        pinentryPackage = (
1674	          pkgs.pinentry-gtk2.override {
1675	            withLibsecret = true;
1676	          }
1677	        );
1678	      };
1679	
1680	      dirmngr.enable = true;
1681	    };
1682	
1683	    ssh = {
1684	      package = (
1685	        pkgs.openssh.override {
1686	          withPAM = true;
1687	          linkOpenssl = true;
1688	          isNixos = true;
1689	        }
1690	      );
1691	
1692	      startAgent = false; # `services.gnome.gcr-ssh-agent.enable' and `programs.ssh.startAgent' cannot both be enabled at the same time.
1693	      agentTimeout = null;
1694	    };
1695	
1696	    git = {
1697	      enable = true;
1698	      package = (
1699	        pkgs.gitFull.override {
1700	          svnSupport = true;
1701	          guiSupport = true;
1702	          withManual = true;
1703	          withpcre2 = true;
1704	          sendEmailSupport = true;
1705	          withLibsecret = true;
1706	          withSsh = true;
1707	        }
1708	      );
1709	
1710	      lfs = {
1711	        enable = true;
1712	        package = pkgs.git-lfs;
1713	
1714	        enablePureSSHTransfer = true;
1715	      };
1716	
1717	      prompt.enable = true;
1718	
1719	      config = {
1720	        init.defaultBranch = "main";
1721	
1722	        credential.helper = "${pkgs.gitFull}/bin/git-credential-libsecret";
1723	
1724	        user = {
1725	          name = "Abdullah As-Sadeed";
1726	          email = "bitscoper@gmail.com";
1727	        };
1728	      };
1729	    };
1730	
1731	    usbtop.enable = true;
1732	
1733	    adb.enable = true;
1734	
1735	    nano = {
1736	      enable = true;
1737	      package = pkgs.nano;
1738	
1739	      syntaxHighlight = true;
1740	
1741	      nanorc = ''
1742	        set linenumbers
1743	        set softwrap
1744	        set indicator
1745	        set autoindent
1746	      '';
1747	    };
1748	
1749	    bat = {
1750	      enable = true;
1751	      package = pkgs.bat;
1752	      extraPackages = with pkgs.bat-extras; [
1753	        batdiff
1754	        batgrep
1755	        batman
1756	        batpipe
1757	        batwatch
1758	        prettybat
1759	      ];
1760	    };
1761	
1762	    gnome-disks.enable = true;
1763	    system-config-printer.enable = true;
1764	    seahorse.enable = true;
1765	
1766	    nm-applet = {
1767	      enable = true;
1768	      indicator = true;
1769	    };
1770	
1771	    nautilus-open-any-terminal = {
1772	      enable = true;
1773	      terminal = "tilix";
1774	    };
1775	
1776	    file-roller.enable = true;
1777	
1778	    firefox = {
1779	      enable = true;
1780	      package = pkgs.firefox-devedition;
1781	      languagePacks = [
1782	        "ar"
1783	        "bn"
1784	        "en-US"
1785	      ];
1786	
1787	      # nativeMessagingHosts = {
1788	      #   packages = with pkgs; [
1789	      #     (pkgs.keepassxc.override {
1790	      #       withKeePassBrowser = true;
1791	      #       withKeePassBrowserPasskeys = true;
1792	      #       withKeePassFDOSecrets = true;
1793	      #       withKeePassKeeShare = true;
1794	      #       withKeePassNetworking = true;
1795	      #       withKeePassSSHAgent = true;
1796	      #       withKeePassYubiKey = true;
1797	      #     })
1798	      #   ];
1799	      # };
1800	
1801	      policies = {
1802	        Extensions = {
1803	          Install = [
1804	            "https://addons.mozilla.org/firefox/downloads/latest/decentraleyes/latest.xpi"
1805	            "https://addons.mozilla.org/firefox/downloads/latest/keepassxc-browser/latest.xpi"
1806	            "https://addons.mozilla.org/firefox/downloads/latest/languagetool/latest.xpi"
1807	            "https://addons.mozilla.org/firefox/downloads/latest/multi-account-containers/latest.xpi"
1808	            "https://addons.mozilla.org/firefox/downloads/latest/search_by_image/latest.xpi"
1809	            "https://addons.mozilla.org/firefox/downloads/latest/simple-mass-downloader/latest.xpi"
1810	            "https://addons.mozilla.org/firefox/downloads/latest/single-file/latest.xpi"
1811	            "https://addons.mozilla.org/firefox/downloads/latest/tab-disguiser/latest.xpi"
1812	            "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"
1813	            "https://addons.mozilla.org/firefox/downloads/latest/zjm-whatfont/latest.xpi"
1814	          ];
1815	
1816	          Locked = [
1817	            "@testpilot-containers" # "Firefox Multi-Account Containers"
1818	            "jid1-BoFifL9Vbdl2zQ@jetpack" # "Decentraleyes"
1819	            "uBlock0@raymondhill.net" # "uBlock Origin"
1820	          ];
1821	        };
1822	      };
1823	
1824	      # autoConfig = '''';
1825	
1826	      preferences = {
1827	        "browser.contentblocking.category" = "strict";
1828	        "browser.search.region" = "BD";
1829	        "browser.search.suggest.enabled.private" = true;
1830	        "dom.security.https_only_mode" = true;
1831	        "privacy.globalprivacycontrol.enabled" = true;
1832	        "security.warn_submit_secure_to_insecure" = true;
1833	        # "privacy.fingerprintingProtection" = true;
1834	        # "privacy.trackingprotection.enabled" = true;
1835	      };
1836	      preferencesStatus = "locked";
1837	    };
1838	
1839	    thunderbird = {
1840	      enable = true;
1841	      package = pkgs.thunderbird-latest;
1842	
1843	      # preferences = { };
1844	    };
1845	
1846	    obs-studio = {
1847	      enable = true;
1848	      package = (
1849	        pkgs.obs-studio.override {
1850	          scriptingSupport = true;
1851	          alsaSupport = true;
1852	          pulseaudioSupport = true;
1853	          browserSupport = true;
1854	          pipewireSupport = true;
1855	          withFdk = true;
1856	          decklinkSupport = true;
1857	        }
1858	      );
1859	
1860	      enableVirtualCamera = true;
1861	
1862	      plugins = with pkgs.obs-studio-plugins; [
1863	        obs-3d-effect
1864	        obs-backgroundremoval
1865	        obs-composite-blur
1866	        obs-gradient-source
1867	        obs-gstreamer
1868	        obs-move-transition
1869	        obs-multi-rtmp
1870	        obs-mute-filter
1871	        obs-pipewire-audio-capture
1872	        obs-scale-to-sound
1873	        obs-source-clone
1874	        obs-source-record
1875	        obs-source-switcher
1876	        obs-text-pthread
1877	        obs-transition-table
1878	        obs-vaapi
1879	        obs-vertical-canvas
1880	        obs-vkcapture
1881	      ];
1882	    };
1883	
1884	    ghidra = {
1885	      enable = true;
1886	      package = pkgs.ghidra;
1887	      gdb = true;
1888	    };
1889	
1890	    wireshark = {
1891	      enable = true;
1892	      package = pkgs.wireshark;
1893	
1894	      dumpcap.enable = true;
1895	      usbmon.enable = true;
1896	    };
1897	
1898	    localsend = {
1899	      enable = true;
1900	      package = pkgs.localsend;
1901	
1902	      openFirewall = true;
1903	    };
1904	
1905	    virt-manager = {
1906	      enable = true;
1907	      package = (
1908	        pkgs.virt-manager.override {
1909	          spiceSupport = true;
1910	        }
1911	      );
1912	    };
1913	
1914	    dconf = {
1915	      enable = true;
1916	      profiles.user.databases = [
1917	        {
1918	          lockAll = true;
1919	
1920	          settings = {
1921	            "org/gnome/desktop/interface" = {
1922	              color-scheme = "prefer-dark";
1923	            };
1924	
1925	            "com/saivert/pwvucontrol" = {
1926	              beep-on-volume-changes = true;
1927	              enable-overamplification = true;
1928	            };
1929	
1930	            "com/gexperts/Tilix" = {
1931	              auto-hide-mouse = false;
1932	              close-with-last-session = false;
1933	              control-scroll-zoom = true;
1934	              enable-wide-handle = true;
1935	              encodings = [
1936	                "UTF-8"
1937	              ];
1938	              focus-follow-mouse = true;
1939	              middle-click-close = false;
1940	              new-instance-mode = "new-window";
1941	              paste-strip-first-char = false;
1942	              paste-strip-trailing-whitespace = false;
1943	              tab-position = "top";
1944	              terminal-title-show-when-single = true;
1945	              terminal-title-style = "normal";
1946	              theme-variant = "dark";
1947	              use-overlay-scrollbar = false;
1948	              window-save-state = false;
1949	              window-style = "normal";
1950	            };
1951	
1952	            "org/gnome/desktop/privacy" = {
1953	              remember-app-usage = false;
1954	              remember-recent-files = false;
1955	              remove-old-temp-files = true;
1956	              remove-old-trash-files = true;
1957	              report-technical-problems = false;
1958	              send-software-usage-stats = false;
1959	              usb-protection = true;
1960	            };
1961	            "org/gtk/gtk4/settings/file-chooser" = {
1962	              sort-directories-first = true;
1963	            };
1964	            "org/gnome/nautilus/preferences" = {
1965	              click-policy = "double";
1966	              recursive-search = "always";
1967	              show-create-link = true;
1968	              show-delete-permanently = true;
1969	              show-directory-item-counts = "always";
1970	              show-image-thumbnails = "always";
1971	              date-time-format = "simple";
1972	            };
1973	            "org/gnome/nautilus/icon-view" = {
1974	              captions = [
1975	                "size"
1976	                "date_modified"
1977	                "none"
1978	              ];
1979	            };
1980	
1981	            "org/gnome/file-roller/ui" = {
1982	              view-sidebar = true;
1983	            };
1984	
1985	            "org/gnome/eog/plugins" = {
1986	              active-plugins = [
1987	                "fullscreen"
1988	                "reload"
1989	                "statusbar-date"
1990	              ];
1991	            };
1992	            "org/gnome/eog/ui" = {
1993	              image-gallery = false;
1994	              sidebar = true;
1995	              statusbar = true;
1996	            };
1997	            "org/gnome/eog/view" = {
1998	              autorotate = true;
1999	              extrapolate = true;
2000	              interpolate = true;
2001	              transparency = "checked";
2002	              use-background-color = false;
2003	            };
2004	            "org/gnome/eog/fullscreen" = {
2005	              loop = false;
2006	              upscale = false;
2007	            };
2008	
2009	            "com/github/huluti/Curtail" = {
2010	              file-attributes = true;
2011	              metadata = false;
2012	              new-file = true;
2013	              recursive = true;
2014	            };
2015	
2016	            "com/github/tenderowl/frog" = {
2017	              telemetry = false;
2018	            };
2019	
2020	            "org/gnome/meld" = {
2021	              enable-space-drawer = true;
2022	              highlight-current-line = true;
2023	              highlight-syntax = true;
2024	              prefer-dark-theme = true;
2025	              show-line-numbers = true;
2026	              show-overview-map = true;
2027	              wrap-mode = "word";
2028	            };
2029	
2030	            "io/gitlab/adhami3310/Converter" = {
2031	              show-less-popular = true;
2032	            };
2033	
2034	            "io/github/amit9838/mousam" = {
2035	              unit = "metric";
2036	              use-24h-clock = false;
2037	              use-gradient-bg = true;
2038	            };
2039	
2040	            "io/missioncenter/MissionCenter" = {
2041	              apps-page-core-count-affects-percentages = true;
2042	              apps-page-merged-process-stats = false;
2043	              apps-page-remember-sorting = false;
2044	              performance-page-network-dynamic-scaling = true;
2045	              performance-smooth-graphs = false;
2046	              window-interface-style = "dark";
2047	            };
2048	
2049	            "org/virt-manager/virt-manager" = {
2050	              xmleditor-enabled = true;
2051	            };
2052	            "org/virt-manager/virt-manager/connections" = {
2053	              autoconnect = [
2054	                "qemu:///system"
2055	              ];
2056	              uris = [
2057	                "qemu:///system"
2058	              ];
2059	            };
2060	            "org/virt-manager/virt-manager/new-vm" = {
2061	              cpu-default = "host-passthrough";
2062	            };
2063	            "org/virt-manager/virt-manager/console" = {
2064	              auto-redirect = false;
2065	              autoconnect = true;
2066	            };
2067	            "org/virt-manager/virt-manager/stats" = {
2068	              enable-cpu-poll = true;
2069	              enable-disk-poll = true;
2070	              enable-memory-poll = true;
2071	              enable-net-poll = true;
2072	            };
2073	            "org/virt-manager/virt-manager/vmlist-fields" = {
2074	              cpu-usage = true;
2075	              disk-usage = true;
2076	              host-cpu-usage = true;
2077	              memory-usage = true;
2078	              network-traffic = true;
2079	            };
2080	            "org/virt-manager/virt-manager/confirm" = {
2081	              delete-storage = true;
2082	              forcepoweroff = true;
2083	              pause = true;
2084	              poweroff = true;
2085	              removedev = true;
2086	              unapplied-dev = true;
2087	            };
2088	          };
2089	        }
2090	      ];
2091	    };
2092	  };
2093	
2094	  fonts = {
2095	    enableDefaultPackages = false;
2096	    packages = with pkgs; [
2097	      corefonts # Unfree
2098	      nerd-fonts.noto
2099	      noto-fonts
2100	      noto-fonts-cjk-sans
2101	      noto-fonts-cjk-serif
2102	      noto-fonts-color-emoji
2103	      noto-fonts-lgc-plus
2104	    ];
2105	
2106	    fontconfig = {
2107	      enable = true;
2108	
2109	      allowBitmaps = true;
2110	      allowType1 = false;
2111	      cache32Bit = true;
2112	
2113	      defaultFonts = {
2114	        monospace = [
2115	          font_preferences.name.mono
2116	        ];
2117	
2118	        sansSerif = [
2119	          font_preferences.name.sans_serif
2120	        ];
2121	
2122	        serif = [
2123	          font_preferences.name.serif
2124	        ];
2125	
2126	        emoji = [
2127	          font_preferences.name.emoji
2128	        ];
2129	      };
2130	
2131	      includeUserConf = true;
2132	    };
2133	  };
2134	
2135	  environment = {
2136	    enableDebugInfo = false;
2137	
2138	    enableAllTerminfo = true;
2139	
2140	    wordlist = {
2141	      enable = true;
2142	      # lists = ;
2143	    };
2144	
2145	    homeBinInPath = true;
2146	    localBinInPath = true;
2147	
2148	    stub-ld.enable = true;
2149	
2150	    variables = {
2151	      ANDROID_SDK_ROOT = android_sdk_path;
2152	      ANDROID_HOME = android_sdk_path;
2153	    };
2154	
2155	    sessionVariables = {
2156	      NIXOS_OZONE_WL = "1";
2157	    };
2158	
2159	    shellAliases = {
2160	      upgrade = "sudo nix-channel --update && sudo nix-env -u --always && sudo nixos-rebuild switch --refresh --install-bootloader --upgrade-all";
2161	
2162	      clean_upgrade = "sudo nix-channel --update && sudo nix-env -u --always && sudo rm -rf /nix/var/nix/gcroots/auto/* && sudo nix-collect-garbage -d && nix-collect-garbage -d && sudo nix-store --gc && sudo nixos-rebuild switch --refresh --install-bootloader --upgrade-all";
2163	    };
2164	
2165	    # extraInit = '''';
2166	    # loginShellInit = '''';
2167	    # shellInit = '''';
2168	    # interactiveShellInit = '''';
2169	
2170	    systemPackages =
2171	      with pkgs;
2172	      [
2173	        # cvehound # Build Failure
2174	        # darktable # Marked Insecure
2175	        # gpredicts # Build Failure
2176	        # reiser4progs # Marked Broken
2177	        # virt-top # Build Failure
2178	        # virt-v2v # Build Failure
2179	        above
2180	        acl
2181	        agi # Cannot find libswt
2182	        aircrack-ng
2183	        alpaca
2184	        android_sdk # Custom
2185	        android-backup-extractor
2186	        android-tools
2187	        apfsprogs
2188	        apkeep
2189	        apkleaks
2190	        arduino-cli
2191	        arduino-ide
2192	        arduino-language-server
2193	        arj
2194	        armitage
2195	        audacity
2196	        autopsy
2197	        avrdude
2198	        baobab
2199	        bash-language-server
2200	        bcachefs-tools
2201	        binary
2202	        binwalk
2203	        bleachbit
2204	        bluez-tools
2205	        brightnessctl
2206	        btop
2207	        btrfs-assistant
2208	        btrfs-progs
2209	        bulk_extractor
2210	        bustle
2211	        butt
2212	        bzip3
2213	        cameractrls-gtk4
2214	        celestia
2215	        certbot-full
2216	        clang
2217	        clang-analyzer
2218	        clang-tools
2219	        clinfo
2220	        cliphist
2221	        cloc
2222	        cmake
2223	        cmake-language-server
2224	        collision
2225	        cpio
2226	        cramfsprogs
2227	        cryptsetup
2228	        ctop
2229	        cups-filters
2230	        cups-printers
2231	        curtail
2232	        cve-bin-tool
2233	        d-spy
2234	        dart
2235	        dbeaver-bin
2236	        dconf-editor
2237	        dconf2nix
2238	        debase
2239	        dig
2240	        dmg2img
2241	        dmidecode
2242	        dnsrecon
2243	        docker-language-server
2244	        dosfstools
2245	        dropwatch
2246	        e2fsprogs
2247	        efibootmgr
2248	        eog
2249	        esptool
2250	        evtest
2251	        evtest-qt
2252	        exfatprogs
2253	        f2fs-tools
2254	        ffmpegthumbnailer
2255	        fh
2256	        file
2257	        fileinfo
2258	        filezilla
2259	        fish-lsp
2260	        flake-checker
2261	        flare-floss
2262	        flightgear
2263	        flutter
2264	        fontfor
2265	        fritzing
2266	        fstl
2267	        gcc15
2268	        gdb
2269	        gimp3-with-plugins
2270	        git-filter-repo
2271	        github-changelog-generator
2272	        gnome-characters
2273	        gnome-clocks
2274	        gnome-decoder
2275	        gnome-font-viewer
2276	        gnome-frog
2277	        gnome-graphs
2278	        gnome-logs
2279	        gnome-nettool
2280	        gnugrep
2281	        gnumake
2282	        gnused
2283	        gnutar
2284	        gource
2285	        gparted
2286	        guestfs-tools
2287	        gzip
2288	        hashcat
2289	        hashcat-utils
2290	        hashes
2291	        hdparm
2292	        hfsprogs
2293	        hieroglyphic
2294	        host
2295	        hw-probe
2296	        hydra-check
2297	        hyprls
2298	        hyprpicker
2299	        i2c-tools
2300	        iaito
2301	        iftop
2302	        indent
2303	        inotify-tools
2304	        input-leap
2305	        jellyfin-media-player
2306	        jfsutils
2307	        jmol
2308	        john
2309	        johnny
2310	        jq
2311	        kernel-hardening-checker
2312	        kernelshark
2313	        keyutils
2314	        killall
2315	        kind
2316	        kmod
2317	        kubectl
2318	        kubectl-graph
2319	        kubectl-tree
2320	        kubectl-view-secret
2321	        kubernetes-helm
2322	        letterpress
2323	        lhasa
2324	        libreoffice-fresh
2325	        linux-exploit-suggester
2326	        linuxConsoleTools
2327	        linuxquota
2328	        logdy
2329	        logtop
2330	        lrzip
2331	        lsb-release
2332	        lshw
2333	        lsof
2334	        lsscsi
2335	        lssecret
2336	        lvm2
2337	        lynis
2338	        lyto
2339	        lz4
2340	        lzip
2341	        lzop
2342	        macchanger
2343	        masscan
2344	        massdns
2345	        mattermost-desktop
2346	        md-lsp
2347	        meld
2348	        metadata-cleaner
2349	        metasploit
2350	        mfcuk
2351	        mfoc
2352	        minikube
2353	        mission-center
2354	        mousam
2355	        mtools
2356	        mtr-gui
2357	        nautilus
2358	        nethogs
2359	        networkmanagerapplet
2360	        nikto
2361	        nilfs-utils
2362	        ninja
2363	        nix-diff
2364	        nix-info
2365	        nix-prefetch-github
2366	        nixd
2367	        nixfmt-rfc-style
2368	        nixpkgs-lint
2369	        nixpkgs-review
2370	        nmap
2371	        ntfs3g
2372	        nuclei
2373	        nvme-cli
2374	        onionshare-gui
2375	        openafs
2376	        openboard
2377	        opendmarc
2378	        openh264
2379	        openssl
2380	        p7zip
2381	        paper-clip
2382	        patchelf
2383	        pciutils
2384	        pdfarranger
2385	        pg_top
2386	        pkg-config
2387	        platformio
2388	        playerctl
2389	        podman-compose
2390	        podman-desktop
2391	        postgres-lsp
2392	        prctl
2393	        profile-cleaner
2394	        progress
2395	        protonvpn-gui
2396	        psmisc
2397	        pwvucontrol
2398	        qalculate-gtk
2399	        qemu-utils
2400	        qpwgraph
2401	        qr-backup
2402	        radare2
2403	        reiserfsprogs
2404	        rpi-imager
2405	        rpmextract
2406	        rpPPPoE
2407	        rtl-sdr-librtlsdr
2408	        rtl-sdr-osmocom
2409	        rzip
2410	        scalpel
2411	        scrcpy
2412	        screen
2413	        sdrangel
2414	        selectdefaultapplication
2415	        serial-studio
2416	        share-preview
2417	        sherlock
2418	        shotcut
2419	        simple-scan
2420	        sipvicious
2421	        sleuthkit
2422	        smartmontools
2423	        sof-tools
2424	        songrec
2425	        soundconverter
2426	        spooftooph
2427	        sslscan
2428	        stegseek
2429	        subfinder
2430	        subtitleedit
2431	        switcheroo
2432	        syshud
2433	        systemd-lsp
2434	        szyszka
2435	        telegram-desktop
2436	        telegraph
2437	        terminal-colors
2438	        terminaltexteffects
2439	        texliveFull
2440	        theharvester
2441	        tilix
2442	        time
2443	        tpm2-tools
2444	        traitor
2445	        tree
2446	        trufflehog
2447	        trustymail
2448	        udftools
2449	        udiskie
2450	        unar
2451	        universal-android-debloater # uad-ng
2452	        unix-privesc-check
2453	        unzip
2454	        upnp-router-control
2455	        usbip-ssh
2456	        usbutils
2457	        util-linux
2458	        video-downloader
2459	        video-trimmer
2460	        virtiofsd
2461	        vulkan-caps-viewer
2462	        vulkan-tools
2463	        wafw00f
2464	        waycheck
2465	        waydroid-helper
2466	        wayland-utils
2467	        waylevel
2468	        wayvnc
2469	        webfontkitgenerator
2470	        wev
2471	        whatfiles
2472	        which
2473	        whois
2474	        wl-clipboard
2475	        wpprobe
2476	        wvkbd # wvkbd-mobintl
2477	        x2goclient
2478	        xdg-user-dirs
2479	        xdg-utils
2480	        xfsdump
2481	        xfsprogs
2482	        xfstests
2483	        xoscope
2484	        xz
2485	        yaml-language-server
2486	        yara-x
2487	        zenity
2488	        zenmap
2489	        zfs
2490	        zip
2491	        zpaq
2492	        zstd
2493	        (coreutils-full.override {
2494	          aclSupport = true;
2495	          withOpenssl = true;
2496	        })
2497	        (curlFull.override {
2498	          brotliSupport = true;
2499	          c-aresSupport = true;
2500	          gsaslSupport = true;
2501	          gssSupport = true;
2502	          http2Support = true;
2503	          http3Support = true;
2504	          websocketSupport = true;
2505	          idnSupport = true;
2506	          opensslSupport = true;
2507	          pslSupport = true;
2508	          rtmpSupport = true;
2509	          scpSupport = true;
2510	          zlibSupport = true;
2511	          zstdSupport = true;
2512	        })
2513	        (ffmpeg-full.override {
2514	          withAlsa = true;
2515	          withAom = true;
2516	          withAribb24 = true;
2517	          withAribcaption = true;
2518	          withAss = true;
2519	          withAvisynth = true;
2520	          withBluray = true;
2521	          withBs2b = true;
2522	          withBzlib = true;
2523	          withCaca = true;
2524	          withCdio = true;
2525	          withCelt = true;
2526	          withChromaprint = true;
2527	          withCodec2 = true;
2528	          withDav1d = true;
2529	          withDavs2 = true;
2530	          withDc1394 = true;
2531	          withDrm = true;
2532	          withDvdnav = true;
2533	          withDvdread = true;
2534	          withFdkAac = true;
2535	          withFlite = true;
2536	          withFontconfig = true;
2537	          withFreetype = true;
2538	          withFrei0r = true;
2539	          withFribidi = true;
2540	          withGme = true;
2541	          withGnutls = true;
2542	          withGsm = true;
2543	          withHarfbuzz = true;
2544	          withIconv = true;
2545	          withIlbc = true;
2546	          withJack = true;
2547	          withJxl = true;
2548	          withKvazaar = true;
2549	          withLadspa = true;
2550	          withLc3 = true;
2551	          withLcevcdec = true;
2552	          withLcms2 = true;
2553	          withLzma = true;
2554	          withModplug = true;
2555	          withMp3lame = true;
2556	          withMysofa = true;
2557	          withOpenal = true;
2558	          withOpencl = true;
2559	          withOpencoreAmrnb = true;
2560	          withOpencoreAmrwb = true;
2561	          withOpengl = true;
2562	          withOpenh264 = true;
2563	          withOpenjpeg = true;
2564	          withOpenmpt = true;
2565	          withOpus = true;
2566	          withPlacebo = true;
2567	          withPulse = true;
2568	          withQrencode = true;
2569	          withQuirc = true;
2570	          withRav1e = true;
2571	          withRist = true;
2572	          withRtmp = true;
2573	          withRubberband = true;
2574	          withSamba = true;
2575	          withSdl2 = true;
2576	          withShaderc = true;
2577	          withShine = true;
2578	          withSnappy = true;
2579	          withSoxr = true;
2580	          withSpeex = true;
2581	          withSrt = true;
2582	          withSsh = true;
2583	          withSvg = true;
2584	          withSvtav1 = true;
2585	          withTheora = true;
2586	          withTwolame = true;
2587	          withUavs3d = true;
2588	          withV4l2 = true;
2589	          withV4l2M2m = true;
2590	          withVaapi = true;
2591	          withVdpau = true;
2592	          withVidStab = true;
2593	          withVmaf = true;
2594	          withVoAmrwbenc = true;
2595	          withVorbis = true;
2596	          withVpx = true;
2597	          withVulkan = true;
2598	          withVvenc = true;
2599	          withWebp = true;
2600	          withX264 = true;
2601	          withX265 = true;
2602	          withXavs = true;
2603	          withXavs2 = true;
2604	          withXevd = true;
2605	          withXeve = true;
2606	          withXml2 = true;
2607	          withXvid = true;
2608	          withZimg = true;
2609	          withZlib = true;
2610	          withZmq = true;
2611	          withZvbi = true;
2612	
2613	          withUnfree = true;
2614	
2615	          withGrayscale = true;
2616	          withSwscaleAlpha = true;
2617	          withMultithread = true;
2618	          withNetwork = true;
2619	        })
2620	        (flameshot.override {
2621	          enableWlrSupport = true;
2622	        })
2623	        (hardinfo2.override {
2624	          printingSupport = true;
2625	        })
2626	        (kicad.override {
2627	          addons = with pkgs.kicadAddons; [
2628	            kikit
2629	            kikit-library
2630	          ];
2631	          stable = true;
2632	          withNgspice = true;
2633	          withScripting = true;
2634	          with3d = false; # Build Failure
2635	          withI18n = true;
2636	        })
2637	        (python313Full.override {
2638	          bluezSupport = true;
2639	          mimetypesSupport = true;
2640	          withReadline = true;
2641	        })
2642	        (qbittorrent.override {
2643	          guiSupport = true;
2644	          trackerSearch = true;
2645	          webuiSupport = false;
2646	        })
2647	        (sdrpp.override {
2648	          airspy_source = true;
2649	          airspyhf_source = true;
2650	          bladerf_source = true;
2651	          file_source = true;
2652	          hackrf_source = true;
2653	          limesdr_source = true;
2654	          plutosdr_source = true;
2655	          rfspace_source = true;
2656	          rtl_sdr_source = true;
2657	          rtl_tcp_source = true;
2658	          sdrplay_source = true;
2659	          soapy_source = true;
2660	          spyserver_source = true;
2661	          usrp_source = true;
2662	
2663	          audio_sink = true;
2664	          network_sink = true;
2665	          portaudio_sink = true;
2666	
2667	          m17_decoder = true;
2668	          meteor_demodulator = true;
2669	
2670	          frequency_manager = true;
2671	          recorder = true;
2672	          rigctl_server = true;
2673	          scanner = true;
2674	        })
2675	        (spice-gtk.override {
2676	          withPolkit = true;
2677	        })
2678	        (tor-browser.override {
2679	          libnotifySupport = true;
2680	          waylandSupport = true;
2681	          mediaSupport = true;
2682	          audioSupport = true;
2683	          pipewireSupport = true;
2684	          pulseaudioSupport = true;
2685	          libvaSupport = true;
2686	        })
2687	        (virt-viewer.override {
2688	          spiceSupport = true;
2689	        })
2690	        (vlc.override {
2691	          chromecastSupport = true;
2692	          jackSupport = true;
2693	          skins2Support = true;
2694	          waylandSupport = true;
2695	        })
2696	        (wget.override {
2697	          withLibpsl = true;
2698	          withOpenssl = true;
2699	        })
2700	        (xyce-parallel.override {
2701	          withMPI = true;
2702	          enableDocs = true;
2703	        })
2704	        config.services.phpfpm.phpPackage
2705	      ]
2706	      ++ (with unixtools; [
2707	        arp
2708	        fdisk
2709	        ifconfig
2710	        netstat
2711	        nettools
2712	        ping
2713	        route
2714	        util-linux
2715	        whereis
2716	      ])
2717	      ++ (with fishPlugins; [
2718	        async-prompt
2719	        autopair
2720	        done
2721	        fish-you-should-use
2722	        sponge
2723	      ])
2724	      ++ (with gst_all_1; [
2725	        (gst-libav.override {
2726	          enableDocumentation = true;
2727	        })
2728	        (gst-plugins-bad.override {
2729	          enableZbar = true;
2730	          faacSupport = true;
2731	          opencvSupport = true;
2732	          ldacbtSupport = true;
2733	          webrtcAudioProcessingSupport = true;
2734	          ajaSupport = true;
2735	          openh264Support = true;
2736	          enableGplPlugins = true;
2737	          bluezSupport = true;
2738	          microdnsSupport = true;
2739	          enableDocumentation = true;
2740	          guiSupport = true;
2741	        })
2742	        (gst-plugins-base.override {
2743	          enableWayland = true;
2744	          enableAlsa = true;
2745	          enableCdparanoia = true;
2746	          enableDocumentation = true;
2747	        })
2748	        (gst-plugins-good.override {
2749	          gtkSupport = true;
2750	          qt6Support = true;
2751	          enableJack = true;
2752	          enableWayland = true;
2753	          enableDocumentation = true;
2754	        })
2755	        (gst-plugins-ugly.override {
2756	          enableGplPlugins = true;
2757	          enableDocumentation = true;
2758	        })
2759	        (gst-vaapi.override {
2760	          enableDocumentation = true;
2761	        })
2762	        (gstreamer.override {
2763	          enableDocumentation = true;
2764	        })
2765	      ])
2766	      ++ (with php84Packages; [
2767	        psysh
2768	      ])
2769	      ++ (with texlivePackages; [
2770	        latexmk
2771	      ])
2772	      ++ (with ghidra-extensions; [
2773	        findcrypt
2774	        ghidra-delinker-extension
2775	        ghidra-golanganalyzerextension
2776	        ghidraninja-ghidra-scripts
2777	        gnudisassembler
2778	        lightkeeper
2779	        machinelearning
2780	        ret-sync
2781	        sleighdevtools
2782	        wasm
2783	      ])
2784	      ++ config.boot.extraModulePackages;
2785	  };
2786	
2787	  xdg = {
2788	    mime = {
2789	      enable = true;
2790	
2791	      addedAssociations = config.xdg.mime.defaultApplications;
2792	
2793	      # removedAssociations = { };
2794	
2795	      # https://www.iana.org/assignments/media-types/media-types.xhtml
2796	      defaultApplications = {
2797	        "inode/directory" = "nautilus.desktop";
2798	
2799	        "text/1d-interleaved-parityfec" = "codium.desktop";
2800	        "text/cache-manifest" = "codium.desktop";
2801	        "text/calendar" = "codium.desktop";
2802	        "text/cql-expression" = "codium.desktop";
2803	        "text/cql-identifier" = "codium.desktop";
2804	        "text/cql" = "codium.desktop";
2805	        "text/css" = "codium.desktop";
2806	        "text/csv-schema" = "codium.desktop";
2807	        "text/csv" = "codium.desktop";
2808	        "text/dns" = "codium.desktop";
2809	        "text/encaprtp" = "codium.desktop";
2810	        "text/enriched" = "codium.desktop";
2811	        "text/example" = "codium.desktop";
2812	        "text/fhirpath" = "codium.desktop";
2813	        "text/flexfec" = "codium.desktop";
2814	        "text/fwdred" = "codium.desktop";
2815	        "text/gff3" = "codium.desktop";
2816	        "text/grammar-ref-list" = "codium.desktop";
2817	        "text/hl7v2" = "codium.desktop";
2818	        "text/html" = "codium.desktop";
2819	        "text/javascript" = "codium.desktop";
2820	        "text/jcr-cnd" = "codium.desktop";
2821	        "text/markdown" = "codium.desktop";
2822	        "text/mizar" = "codium.desktop";
2823	        "text/n3" = "codium.desktop";
2824	        "text/parameters" = "codium.desktop";
2825	        "text/parityfec" = "codium.desktop";
2826	        "text/plain" = "codium.desktop";
2827	        "text/provenance-notation" = "codium.desktop";
2828	        "text/prs.fallenstein.rst" = "codium.desktop";
2829	        "text/prs.lines.tag" = "codium.desktop";
2830	        "text/prs.prop.logic" = "codium.desktop";
2831	        "text/prs.texi" = "codium.desktop";
2832	        "text/raptorfec" = "codium.desktop";
2833	        "text/RED" = "codium.desktop";
2834	        "text/rfc822-headers" = "codium.desktop";
2835	        "text/richtext" = "codium.desktop";
2836	        "text/rtf" = "codium.desktop";
2837	        "text/rtp-enc-aescm128" = "codium.desktop";
2838	        "text/rtploopback" = "codium.desktop";
2839	        "text/rtx" = "codium.desktop";
2840	        "text/SGML" = "codium.desktop";
2841	        "text/shaclc" = "codium.desktop";
2842	        "text/shex" = "codium.desktop";
2843	        "text/spdx" = "codium.desktop";
2844	        "text/strings" = "codium.desktop";
2845	        "text/t140" = "codium.desktop";
2846	        "text/tab-separated-values" = "codium.desktop";
2847	        "text/troff" = "codium.desktop";
2848	        "text/turtle" = "codium.desktop";
2849	        "text/ulpfec" = "codium.desktop";
2850	        "text/uri-list" = "codium.desktop";
2851	        "text/vcard" = "codium.desktop";
2852	        "text/vnd.a" = "codium.desktop";
2853	        "text/vnd.abc" = "codium.desktop";
2854	        "text/vnd.ascii-art" = "codium.desktop";
2855	        "text/vnd.curl" = "codium.desktop";
2856	        "text/vnd.debian.copyright" = "codium.desktop";
2857	        "text/vnd.DMClientScript" = "codium.desktop";
2858	        "text/vnd.dvb.subtitle" = "codium.desktop";
2859	        "text/vnd.esmertec.theme-descriptor" = "codium.desktop";
2860	        "text/vnd.exchangeable" = "codium.desktop";
2861	        "text/vnd.familysearch.gedcom" = "codium.desktop";
2862	        "text/vnd.ficlab.flt" = "codium.desktop";
2863	        "text/vnd.fly" = "codium.desktop";
2864	        "text/vnd.fmi.flexstor" = "codium.desktop";
2865	        "text/vnd.gml" = "codium.desktop";
2866	        "text/vnd.graphviz" = "codium.desktop";
2867	        "text/vnd.hans" = "codium.desktop";
2868	        "text/vnd.hgl" = "codium.desktop";
2869	        "text/vnd.in3d.3dml" = "codium.desktop";
2870	        "text/vnd.in3d.spot" = "codium.desktop";
2871	        "text/vnd.IPTC.NewsML" = "codium.desktop";
2872	        "text/vnd.IPTC.NITF" = "codium.desktop";
2873	        "text/vnd.latex-z" = "codium.desktop";
2874	        "text/vnd.motorola.reflex" = "codium.desktop";
2875	        "text/vnd.ms-mediapackage" = "codium.desktop";
2876	        "text/vnd.net2phone.commcenter.command" = "codium.desktop";
2877	        "text/vnd.radisys.msml-basic-layout" = "codium.desktop";
2878	        "text/vnd.senx.warpscript" = "codium.desktop";
2879	        "text/vnd.sosi" = "codium.desktop";
2880	        "text/vnd.sun.j2me.app-descriptor" = "codium.desktop";
2881	        "text/vnd.trolltech.linguist" = "codium.desktop";
2882	        "text/vnd.typst" = "codium.desktop";
2883	        "text/vnd.vcf" = "codium.desktop";
2884	        "text/vnd.wap.si" = "codium.desktop";
2885	        "text/vnd.wap.sl" = "codium.desktop";
2886	        "text/vnd.wap.wml" = "codium.desktop";
2887	        "text/vnd.wap.wmlscript" = "codium.desktop";
2888	        "text/vnd.zoo.kcl" = "codium.desktop";
2889	        "text/vtt" = "codium.desktop";
2890	        "text/wgsl" = "codium.desktop";
2891	        "text/xml-external-parsed-entity" = "codium.desktop";
2892	        "text/xml" = "codium.desktop";
2893	
2894	        "image/aces" = "org.gnome.eog.desktop";
2895	        "image/apng" = "org.gnome.eog.desktop";
2896	        "image/avci" = "org.gnome.eog.desktop";
2897	        "image/avcs" = "org.gnome.eog.desktop";
2898	        "image/avif" = "org.gnome.eog.desktop";
2899	        "image/bmp" = "org.gnome.eog.desktop";
2900	        "image/cgm" = "org.gnome.eog.desktop";
2901	        "image/dicom-rle" = "org.gnome.eog.desktop";
2902	        "image/dpx" = "org.gnome.eog.desktop";
2903	        "image/emf" = "org.gnome.eog.desktop";
2904	        "image/fits" = "org.gnome.eog.desktop";
2905	        "image/g3fax" = "org.gnome.eog.desktop";
2906	        "image/gif" = "org.gnome.eog.desktop";
2907	        "image/heic-sequence" = "org.gnome.eog.desktop";
2908	        "image/heic" = "org.gnome.eog.desktop";
2909	        "image/heif-sequence" = "org.gnome.eog.desktop";
2910	        "image/heif" = "org.gnome.eog.desktop";
2911	        "image/hej2k" = "org.gnome.eog.desktop";
2912	        "image/hsj2" = "org.gnome.eog.desktop";
2913	        "image/ief" = "org.gnome.eog.desktop";
2914	        "image/j2c" = "org.gnome.eog.desktop";
2915	        "image/jaii" = "org.gnome.eog.desktop";
2916	        "image/jais" = "org.gnome.eog.desktop";
2917	        "image/jls" = "org.gnome.eog.desktop";
2918	        "image/jp2" = "org.gnome.eog.desktop";
2919	        "image/jpeg" = "org.gnome.eog.desktop";
2920	        "image/jph" = "org.gnome.eog.desktop";
2921	        "image/jphc" = "org.gnome.eog.desktop";
2922	        "image/jpm" = "org.gnome.eog.desktop";
2923	        "image/jpx" = "org.gnome.eog.desktop";
2924	        "image/jxl" = "org.gnome.eog.desktop";
2925	        "image/jxr" = "org.gnome.eog.desktop";
2926	        "image/jxrA" = "org.gnome.eog.desktop";
2927	        "image/jxrS" = "org.gnome.eog.desktop";
2928	        "image/jxs" = "org.gnome.eog.desktop";
2929	        "image/jxsc" = "org.gnome.eog.desktop";
2930	        "image/jxsi" = "org.gnome.eog.desktop";
2931	        "image/jxss" = "org.gnome.eog.desktop";
2932	        "image/ktx" = "org.gnome.eog.desktop";
2933	        "image/ktx2" = "org.gnome.eog.desktop";
2934	        "image/naplps" = "org.gnome.eog.desktop";
2935	        "image/png" = "org.gnome.eog.desktop";
2936	        "image/prs.btif" = "org.gnome.eog.desktop";
2937	        "image/prs.pti" = "org.gnome.eog.desktop";
2938	        "image/pwg-raster" = "org.gnome.eog.desktop";
2939	        "image/svg+xml" = "org.gnome.eog.desktop";
2940	        "image/t38" = "org.gnome.eog.desktop";
2941	        "image/tiff-fx" = "org.gnome.eog.desktop";
2942	        "image/tiff" = "org.gnome.eog.desktop";
2943	        "image/vnd.adobe.photoshop" = "org.gnome.eog.desktop";
2944	        "image/vnd.airzip.accelerator.azv" = "org.gnome.eog.desktop";
2945	        "image/vnd.cns.inf2" = "org.gnome.eog.desktop";
2946	        "image/vnd.dece.graphic" = "org.gnome.eog.desktop";
2947	        "image/vnd.djvu" = "org.gnome.eog.desktop";
2948	        "image/vnd.dvb.subtitle" = "org.gnome.eog.desktop";
2949	        "image/vnd.dwg" = "org.gnome.eog.desktop";
2950	        "image/vnd.dxf" = "org.gnome.eog.desktop";
2951	        "image/vnd.fastbidsheet" = "org.gnome.eog.desktop";
2952	        "image/vnd.fpx" = "org.gnome.eog.desktop";
2953	        "image/vnd.fst" = "org.gnome.eog.desktop";
2954	        "image/vnd.fujixerox.edmics-mmr" = "org.gnome.eog.desktop";
2955	        "image/vnd.fujixerox.edmics-rlc" = "org.gnome.eog.desktop";
2956	        "image/vnd.globalgraphics.pgb" = "org.gnome.eog.desktop";
2957	        "image/vnd.microsoft.icon" = "org.gnome.eog.desktop";
2958	        "image/vnd.mix" = "org.gnome.eog.desktop";
2959	        "image/vnd.mozilla.apng" = "org.gnome.eog.desktop";
2960	        "image/vnd.ms-modi" = "org.gnome.eog.desktop";
2961	        "image/vnd.net-fpx" = "org.gnome.eog.desktop";
2962	        "image/vnd.pco.b16" = "org.gnome.eog.desktop";
2963	        "image/vnd.radiance" = "org.gnome.eog.desktop";
2964	        "image/vnd.sealed.png" = "org.gnome.eog.desktop";
2965	        "image/vnd.sealedmedia.softseal.gif" = "org.gnome.eog.desktop";
2966	        "image/vnd.sealedmedia.softseal.jpg" = "org.gnome.eog.desktop";
2967	        "image/vnd.svf" = "org.gnome.eog.desktop";
2968	        "image/vnd.tencent.tap" = "org.gnome.eog.desktop";
2969	        "image/vnd.valve.source.texture" = "org.gnome.eog.desktop";
2970	        "image/vnd.wap.wbmp" = "org.gnome.eog.desktop";
2971	        "image/vnd.xiff" = "org.gnome.eog.desktop";
2972	        "image/vnd.zbrush.pcx" = "org.gnome.eog.desktop";
2973	        "image/webp" = "org.gnome.eog.desktop";
2974	        "image/wmf" = "org.gnome.eog.desktop";
2975	
2976	        "audio/1d-interleaved-parityfec" = "vlc.desktop";
2977	        "audio/32kadpcm" = "vlc.desktop";
2978	        "audio/3gpp" = "vlc.desktop";
2979	        "audio/3gpp2" = "vlc.desktop";
2980	        "audio/aac" = "vlc.desktop";
2981	        "audio/ac3" = "vlc.desktop";
2982	        "audio/AMR-WB" = "vlc.desktop";
2983	        "audio/amr-wb+" = "vlc.desktop";
2984	        "audio/AMR" = "vlc.desktop";
2985	        "audio/aptx" = "vlc.desktop";
2986	        "audio/asc" = "vlc.desktop";
2987	        "audio/ATRAC-ADVANCED-LOSSLESS" = "vlc.desktop";
2988	        "audio/ATRAC-X" = "vlc.desktop";
2989	        "audio/ATRAC3" = "vlc.desktop";
2990	        "audio/basic" = "vlc.desktop";
2991	        "audio/BV16" = "vlc.desktop";
2992	        "audio/BV32" = "vlc.desktop";
2993	        "audio/clearmode" = "vlc.desktop";
2994	        "audio/CN" = "vlc.desktop";
2995	        "audio/DAT12" = "vlc.desktop";
2996	        "audio/dls" = "vlc.desktop";
2997	        "audio/dsr-es201108" = "vlc.desktop";
2998	        "audio/dsr-es202050" = "vlc.desktop";
2999	        "audio/dsr-es202211" = "vlc.desktop";
3000	        "audio/dsr-es202212" = "vlc.desktop";
3001	        "audio/DV" = "vlc.desktop";
3002	        "audio/DVI4" = "vlc.desktop";
3003	        "audio/eac3" = "vlc.desktop";
3004	        "audio/encaprtp" = "vlc.desktop";
3005	        "audio/EVRC-QCP" = "vlc.desktop";
3006	        "audio/EVRC" = "vlc.desktop";
3007	        "audio/EVRC0" = "vlc.desktop";
3008	        "audio/EVRC1" = "vlc.desktop";
3009	        "audio/EVRCB" = "vlc.desktop";
3010	        "audio/EVRCB0" = "vlc.desktop";
3011	        "audio/EVRCB1" = "vlc.desktop";
3012	        "audio/EVRCNW" = "vlc.desktop";
3013	        "audio/EVRCNW0" = "vlc.desktop";
3014	        "audio/EVRCNW1" = "vlc.desktop";
3015	        "audio/EVRCWB" = "vlc.desktop";
3016	        "audio/EVRCWB0" = "vlc.desktop";
3017	        "audio/EVRCWB1" = "vlc.desktop";
3018	        "audio/EVS" = "vlc.desktop";
3019	        "audio/flac" = "vlc.desktop";
3020	        "audio/flexfec" = "vlc.desktop";
3021	        "audio/fwdred" = "vlc.desktop";
3022	        "audio/G711-0" = "vlc.desktop";
3023	        "audio/G719" = "vlc.desktop";
3024	        "audio/G722" = "vlc.desktop";
3025	        "audio/G7221" = "vlc.desktop";
3026	        "audio/G723" = "vlc.desktop";
3027	        "audio/G726-16" = "vlc.desktop";
3028	        "audio/G726-24" = "vlc.desktop";
3029	        "audio/G726-32" = "vlc.desktop";
3030	        "audio/G726-40" = "vlc.desktop";
3031	        "audio/G728" = "vlc.desktop";
3032	        "audio/G729" = "vlc.desktop";
3033	        "audio/G7291" = "vlc.desktop";
3034	        "audio/G729D" = "vlc.desktop";
3035	        "audio/G729E" = "vlc.desktop";
3036	        "audio/GSM-EFR" = "vlc.desktop";
3037	        "audio/GSM-HR-08" = "vlc.desktop";
3038	        "audio/GSM" = "vlc.desktop";
3039	        "audio/iLBC" = "vlc.desktop";
3040	        "audio/ip-mr_v2.5" = "vlc.desktop";
3041	        "audio/L16" = "vlc.desktop";
3042	        "audio/L20" = "vlc.desktop";
3043	        "audio/L24" = "vlc.desktop";
3044	        "audio/L8" = "vlc.desktop";
3045	        "audio/LPC" = "vlc.desktop";
3046	        "audio/matroska" = "vlc.desktop";
3047	        "audio/MELP" = "vlc.desktop";
3048	        "audio/MELP1200" = "vlc.desktop";
3049	        "audio/MELP2400" = "vlc.desktop";
3050	        "audio/MELP600" = "vlc.desktop";
3051	        "audio/mhas" = "vlc.desktop";
3052	        "audio/midi-clip" = "vlc.desktop";
3053	        "audio/mobile-xmf" = "vlc.desktop";
3054	        "audio/mp4" = "vlc.desktop";
3055	        "audio/MP4A-LATM" = "vlc.desktop";
3056	        "audio/mpa-robust" = "vlc.desktop";
3057	        "audio/MPA" = "vlc.desktop";
3058	        "audio/mpeg" = "vlc.desktop";
3059	        "audio/mpeg4-generic" = "vlc.desktop";
3060	        "audio/ogg" = "vlc.desktop";
3061	        "audio/opus" = "vlc.desktop";
3062	        "audio/parityfec" = "vlc.desktop";
3063	        "audio/PCMA-WB" = "vlc.desktop";
3064	        "audio/PCMA" = "vlc.desktop";
3065	        "audio/PCMU-WB" = "vlc.desktop";
3066	        "audio/PCMU" = "vlc.desktop";
3067	        "audio/prs.sid" = "vlc.desktop";
3068	        "audio/QCELP" = "vlc.desktop";
3069	        "audio/raptorfec" = "vlc.desktop";
3070	        "audio/RED" = "vlc.desktop";
3071	        "audio/rtp-enc-aescm128" = "vlc.desktop";
3072	        "audio/rtp-midi" = "vlc.desktop";
3073	        "audio/rtploopback" = "vlc.desktop";
3074	        "audio/rtx" = "vlc.desktop";
3075	        "audio/scip" = "vlc.desktop";
3076	        "audio/SMV-QCP" = "vlc.desktop";
3077	        "audio/SMV" = "vlc.desktop";
3078	        "audio/SMV0" = "vlc.desktop";
3079	        "audio/sofa" = "vlc.desktop";
3080	        "audio/sp-midi" = "vlc.desktop";
3081	        "audio/speex" = "vlc.desktop";
3082	        "audio/t140c" = "vlc.desktop";
3083	        "audio/t38" = "vlc.desktop";
3084	        "audio/telephone-event" = "vlc.desktop";
3085	        "audio/TETRA_ACELP_BB" = "vlc.desktop";
3086	        "audio/TETRA_ACELP" = "vlc.desktop";
3087	        "audio/tone" = "vlc.desktop";
3088	        "audio/TSVCIS" = "vlc.desktop";
3089	        "audio/UEMCLIP" = "vlc.desktop";
3090	        "audio/ulpfec" = "vlc.desktop";
3091	        "audio/usac" = "vlc.desktop";
3092	        "audio/VDVI" = "vlc.desktop";
3093	        "audio/VMR-WB" = "vlc.desktop";
3094	        "audio/vnd.3gpp.iufp" = "vlc.desktop";
3095	        "audio/vnd.4SB" = "vlc.desktop";
3096	        "audio/vnd.audiokoz" = "vlc.desktop";
3097	        "audio/vnd.CELP" = "vlc.desktop";
3098	        "audio/vnd.cisco.nse" = "vlc.desktop";
3099	        "audio/vnd.cmles.radio-events" = "vlc.desktop";
3100	        "audio/vnd.cns.anp1" = "vlc.desktop";
3101	        "audio/vnd.cns.inf1" = "vlc.desktop";
3102	        "audio/vnd.dece.audio" = "vlc.desktop";
3103	        "audio/vnd.digital-winds" = "vlc.desktop";
3104	        "audio/vnd.dlna.adts" = "vlc.desktop";
3105	        "audio/vnd.dolby.heaac.1" = "vlc.desktop";
3106	        "audio/vnd.dolby.heaac.2" = "vlc.desktop";
3107	        "audio/vnd.dolby.mlp" = "vlc.desktop";
3108	        "audio/vnd.dolby.mps" = "vlc.desktop";
3109	        "audio/vnd.dolby.pl2" = "vlc.desktop";
3110	        "audio/vnd.dolby.pl2x" = "vlc.desktop";
3111	        "audio/vnd.dolby.pl2z" = "vlc.desktop";
3112	        "audio/vnd.dolby.pulse.1" = "vlc.desktop";
3113	        "audio/vnd.dra" = "vlc.desktop";
3114	        "audio/vnd.dts.hd" = "vlc.desktop";
3115	        "audio/vnd.dts.uhd" = "vlc.desktop";
3116	        "audio/vnd.dts" = "vlc.desktop";
3117	        "audio/vnd.dvb.file" = "vlc.desktop";
3118	        "audio/vnd.everad.plj" = "vlc.desktop";
3119	        "audio/vnd.hns.audio" = "vlc.desktop";
3120	        "audio/vnd.lucent.voice" = "vlc.desktop";
3121	        "audio/vnd.ms-playready.media.pya" = "vlc.desktop";
3122	        "audio/vnd.nokia.mobile-xmf" = "vlc.desktop";
3123	        "audio/vnd.nortel.vbk" = "vlc.desktop";
3124	        "audio/vnd.nuera.ecelp4800" = "vlc.desktop";
3125	        "audio/vnd.nuera.ecelp7470" = "vlc.desktop";
3126	        "audio/vnd.nuera.ecelp9600" = "vlc.desktop";
3127	        "audio/vnd.octel.sbc" = "vlc.desktop";
3128	        "audio/vnd.presonus.multitrack" = "vlc.desktop";
3129	        "audio/vnd.rhetorex.32kadpcm" = "vlc.desktop";
3130	        "audio/vnd.rip" = "vlc.desktop";
3131	        "audio/vnd.sealedmedia.softseal.mpeg" = "vlc.desktop";
3132	        "audio/vnd.vmx.cvsd" = "vlc.desktop";
3133	        "audio/vorbis-config" = "vlc.desktop";
3134	        "audio/vorbis" = "vlc.desktop";
3135	
3136	        "video/1d-interleaved-parityfec" = "vlc.desktop";
3137	        "video/3gpp-tt" = "vlc.desktop";
3138	        "video/3gpp" = "vlc.desktop";
3139	        "video/3gpp2" = "vlc.desktop";
3140	        "video/AV1" = "vlc.desktop";
3141	        "video/BMPEG" = "vlc.desktop";
3142	        "video/BT656" = "vlc.desktop";
3143	        "video/CelB" = "vlc.desktop";
3144	        "video/DV" = "vlc.desktop";
3145	        "video/encaprtp" = "vlc.desktop";
3146	        "video/evc" = "vlc.desktop";
3147	        "video/FFV1" = "vlc.desktop";
3148	        "video/flexfec" = "vlc.desktop";
3149	        "video/H261" = "vlc.desktop";
3150	        "video/H263-1998" = "vlc.desktop";
3151	        "video/H263-2000" = "vlc.desktop";
3152	        "video/H263" = "vlc.desktop";
3153	        "video/H264-RCDO" = "vlc.desktop";
3154	        "video/H264-SVC" = "vlc.desktop";
3155	        "video/H264" = "vlc.desktop";
3156	        "video/H265" = "vlc.desktop";
3157	        "video/H266" = "vlc.desktop";
3158	        "video/iso.segment" = "vlc.desktop";
3159	        "video/JPEG" = "vlc.desktop";
3160	        "video/jpeg2000" = "vlc.desktop";
3161	        "video/jxsv" = "vlc.desktop";
3162	        "video/matroska-3d" = "vlc.desktop";
3163	        "video/matroska" = "vlc.desktop";
3164	        "video/mj2" = "vlc.desktop";
3165	        "video/MP1S" = "vlc.desktop";
3166	        "video/MP2P" = "vlc.desktop";
3167	        "video/MP2T" = "vlc.desktop";
3168	        "video/mp4" = "vlc.desktop";
3169	        "video/MP4V-ES" = "vlc.desktop";
3170	        "video/mpeg" = "vlc.desktop";
3171	        "video/mpeg4-generic" = "vlc.desktop";
3172	        "video/MPV" = "vlc.desktop";
3173	        "video/nv" = "vlc.desktop";
3174	        "video/ogg" = "vlc.desktop";
3175	        "video/parityfec" = "vlc.desktop";
3176	        "video/pointer" = "vlc.desktop";
3177	        "video/quicktime" = "vlc.desktop";
3178	        "video/raptorfec" = "vlc.desktop";
3179	        "video/raw" = "vlc.desktop";
3180	        "video/rtp-enc-aescm128" = "vlc.desktop";
3181	        "video/rtploopback" = "vlc.desktop";
3182	        "video/rtx" = "vlc.desktop";
3183	        "video/scip" = "vlc.desktop";
3184	        "video/smpte291" = "vlc.desktop";
3185	        "video/SMPTE292M" = "vlc.desktop";
3186	        "video/ulpfec" = "vlc.desktop";
3187	        "video/vc1" = "vlc.desktop";
3188	        "video/vc2" = "vlc.desktop";
3189	        "video/vnd.CCTV" = "vlc.desktop";
3190	        "video/vnd.dece.hd" = "vlc.desktop";
3191	        "video/vnd.dece.mobile" = "vlc.desktop";
3192	        "video/vnd.dece.mp4" = "vlc.desktop";
3193	        "video/vnd.dece.pd" = "vlc.desktop";
3194	        "video/vnd.dece.sd" = "vlc.desktop";
3195	        "video/vnd.dece.video" = "vlc.desktop";
3196	        "video/vnd.directv.mpeg-tts" = "vlc.desktop";
3197	        "video/vnd.directv.mpeg" = "vlc.desktop";
3198	        "video/vnd.dlna.mpeg-tts" = "vlc.desktop";
3199	        "video/vnd.dvb.file" = "vlc.desktop";
3200	        "video/vnd.fvt" = "vlc.desktop";
3201	        "video/vnd.hns.video" = "vlc.desktop";
3202	        "video/vnd.iptvforum.1dparityfec-1010" = "vlc.desktop";
3203	        "video/vnd.iptvforum.1dparityfec-2005" = "vlc.desktop";
3204	        "video/vnd.iptvforum.2dparityfec-1010" = "vlc.desktop";
3205	        "video/vnd.iptvforum.2dparityfec-2005" = "vlc.desktop";
3206	        "video/vnd.iptvforum.ttsavc" = "vlc.desktop";
3207	        "video/vnd.iptvforum.ttsmpeg2" = "vlc.desktop";
3208	        "video/vnd.motorola.video" = "vlc.desktop";
3209	        "video/vnd.motorola.videop" = "vlc.desktop";
3210	        "video/vnd.mpegurl" = "vlc.desktop";
3211	        "video/vnd.ms-playready.media.pyv" = "vlc.desktop";
3212	        "video/vnd.nokia.interleaved-multimedia" = "vlc.desktop";
3213	        "video/vnd.nokia.mp4vr" = "vlc.desktop";
3214	        "video/vnd.nokia.videovoip" = "vlc.desktop";
3215	        "video/vnd.objectvideo" = "vlc.desktop";
3216	        "video/vnd.radgamettools.bink" = "vlc.desktop";
3217	        "video/vnd.radgamettools.smacker" = "vlc.desktop";
3218	        "video/vnd.sealed.mpeg1" = "vlc.desktop";
3219	        "video/vnd.sealed.mpeg4" = "vlc.desktop";
3220	        "video/vnd.sealed.swf" = "vlc.desktop";
3221	        "video/vnd.sealedmedia.softseal.mov" = "vlc.desktop";
3222	        "video/vnd.uvvu.mp4" = "vlc.desktop";
3223	        "video/vnd.vivo" = "vlc.desktop";
3224	        "video/vnd.youtube.yt" = "vlc.desktop";
3225	        "video/VP8" = "vlc.desktop";
3226	        "video/VP9" = "vlc.desktop";
3227	        "video/x-matroska" = "vlc.desktop"; # https://mime.wcode.net/mkv
3228	
3229	        "application/vnd.oasis.opendocument.text" = "writer.desktop"; # .odt
3230	        "application/msword" = "writer.desktop"; # .doc
3231	        "application/vnd.openxmlformats-officedocument.wordprocessingml.document" = "writer.desktop"; # .docx
3232	        "application/vnd.openxmlformats-officedocument.wordprocessingml.template" = "writer.desktop"; # .dotx
3233	
3234	        "application/vnd.oasis.opendocument.spreadsheet" = "calc.desktop"; # .ods
3235	        "application/vnd.ms-excel" = "calc.desktop"; # .xls
3236	        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" = "calc.desktop"; # .xlsx
3237	        "application/vnd.openxmlformats-officedocument.spreadsheetml.template" = "calc.desktop"; # .xltx
3238	
3239	        "application/vnd.oasis.opendocument.presentation" = "impress.desktop"; # .odp
3240	        "application/vnd.ms-powerpoint" = "impress.desktop"; # .ppt
3241	        "application/vnd.openxmlformats-officedocument.presentationml.presentation" = "impress.desktop"; # .pptx
3242	        "application/vnd.openxmlformats-officedocument.presentationml.template" = "impress.desktop"; # .potx
3243	
3244	        "application/pdf" = "firefox-devedition.desktop";
3245	
3246	        "font/collection" = "org.gnome.font-viewer.desktop";
3247	        "font/otf" = "org.gnome.font-viewer.desktop";
3248	        "font/sfnt" = "org.gnome.font-viewer.desktop";
3249	        "font/ttf" = "org.gnome.font-viewer.desktop";
3250	        "font/woff" = "org.gnome.font-viewer.desktop";
3251	        "font/woff2" = "org.gnome.font-viewer.desktop";
3252	
3253	        "application/gzip" = "org.gnome.FileRoller.desktop";
3254	        "application/vnd.rar" = "org.gnome.FileRoller.desktop";
3255	        "application/x-7z-compressed" = "org.gnome.FileRoller.desktop";
3256	        "application/x-arj" = "org.gnome.FileRoller.desktop";
3257	        "application/x-bzip2" = "org.gnome.FileRoller.desktop";
3258	        "application/x-gtar" = "org.gnome.FileRoller.desktop";
3259	        "application/x-rar-compressed " = "org.gnome.FileRoller.desktop"; # More common than "application/vnd.rar"
3260	        "application/x-tar" = "org.gnome.FileRoller.desktop";
3261	        "application/zip" = "org.gnome.FileRoller.desktop";
3262	
3263	        "x-scheme-handler/http" = "firefox-devedition.desktop";
3264	        "x-scheme-handler/https" = "firefox-devedition.desktop";
3265	
3266	        "x-scheme-handler/mailto" = "thunderbird.desktop";
3267	      };
3268	    };
3269	
3270	    icons.enable = true;
3271	    sounds.enable = true;
3272	
3273	    menus.enable = true;
3274	    autostart.enable = true;
3275	
3276	    terminal-exec.enable = true;
3277	
3278	    portal = {
3279	      enable = true;
3280	      extraPortals = with pkgs; [
3281	        xdg-desktop-portal-gtk
3282	        xdg-desktop-portal-hyprland
3283	      ];
3284	
3285	      xdgOpenUsePortal = false; # Opening Programs
3286	
3287	      config = {
3288	        common = {
3289	          default = [
3290	            "gtk"
3291	            "hyprland"
3292	          ];
3293	
3294	          "org.freedesktop.impl.portal.Secret" = [
3295	            "gnome-keyring"
3296	          ];
3297	        };
3298	      };
3299	    };
3300	  };
3301	
3302	  qt = {
3303	    enable = true;
3304	
3305	    platformTheme = "gnome";
3306	    style = "adwaita-dark";
3307	  };
3308	
3309	  documentation = {
3310	    enable = true;
3311	    dev.enable = true;
3312	    doc.enable = true;
3313	    info.enable = true;
3314	
3315	    man = {
3316	      enable = true;
3317	
3318	      man-db = {
3319	        enable = true;
3320	        package = pkgs.man-db;
3321	      };
3322	
3323	      generateCaches = true;
3324	    };
3325	
3326	    nixos = {
3327	      enable = true;
3328	      includeAllModules = true;
3329	      options.warningsAreErrors = false;
3330	    };
3331	  };
3332	
3333	  users = {
3334	    groups = {
3335	      hardinfo2 = { };
3336	    };
3337	
3338	    enforceIdUniqueness = true;
3339	    mutableUsers = true;
3340	
3341	    defaultUserShell = pkgs.fish;
3342	
3343	    motd = "Welcome";
3344	
3345	    users.bitscoper = {
3346	      isNormalUser = true;
3347	
3348	      name = "bitscoper";
3349	      description = "Abdullah As-Sadeed"; # Full Name
3350	
3351	      extraGroups = [
3352	        "adbusers"
3353	        "audio"
3354	        "dialout"
3355	        "hardinfo2"
3356	        "input"
3357	        "jellyfin"
3358	        "kvm"
3359	        "libvirtd"
3360	        "lp"
3361	        "networkmanager"
3362	        "plugdev"
3363	        "podman"
3364	        "qemu-libvirtd"
3365	        "scanner"
3366	        "seat"
3367	        "tty"
3368	        "uucp"
3369	        "video"
3370	        "wheel"
3371	        "wireshark"
3372	      ];
3373	
3374	      useDefaultShell = true;
3375	    };
3376	  };
3377	
3378	  home-manager = {
3379	    useGlobalPkgs = true;
3380	    useUserPackages = true;
3381	
3382	    backupFileExtension = "old";
3383	
3384	    sharedModules = [
3385	      {
3386	        home = {
3387	          enableNixpkgsReleaseCheck = true;
3388	
3389	          shell = {
3390	            enableShellIntegration = true;
3391	            enableBashIntegration = true;
3392	            enableFishIntegration = true;
3393	          };
3394	
3395	          pointerCursor = {
3396	            name = cursor.theme.name;
3397	            package = cursor.theme.package;
3398	            size = cursor.size;
3399	
3400	            hyprcursor = {
3401	              enable = true;
3402	              size = cursor.size;
3403	            };
3404	
3405	            gtk.enable = true;
3406	          };
3407	
3408	          preferXdgDirectories = true;
3409	
3410	          # sessionSearchVariables = { };
3411	
3412	          enableDebugInfo = false;
3413	
3414	          stateVersion = "24.11";
3415	        };
3416	
3417	        wayland.windowManager.hyprland = {
3418	          enable = true;
3419	          package = (
3420	            pkgs.hyprland.override {
3421	              enableXWayland = true;
3422	              wrapRuntimeDeps = true;
3423	            }
3424	          );
3425	
3426	          systemd = {
3427	            enable = false;
3428	            enableXdgAutostart = true;
3429	
3430	            variables = [
3431	              "--all"
3432	            ];
3433	          };
3434	
3435	          plugins = with pkgs.hyprlandPlugins; [
3436	            hyprexpo
3437	          ];
3438	
3439	          xwayland.enable = true;
3440	
3441	          sourceFirst = true;
3442	
3443	          settings = {
3444	            env = [
3445	              "XCURSOR_SIZE, ${toString cursor.size}"
3446	            ];
3447	
3448	            monitor = [
3449	              # Name, Resolution, Position, Scale, Transform-Parameter, Transform
3450	              ", highres, auto, 1, transform, 0"
3451	              "eDP-1, highres, auto, 1, transform, 0"
3452	              "HDMI-A-1, highres, auto, 1, transform, 0"
3453	            ];
3454	
3455	            exec-once = [
3456	              "setfacl --modify user:jellyfin:--x ~"
3457	              "adb start-server"
3458	
3459	              "uwsm app -- wl-paste --type text --watch cliphist store"
3460	              "uwsm app -- wl-paste --type image --watch cliphist store"
3461	              "uwsm app -- syshud"
3462	              "uwsm app -- udiskie --tray --appindicator --automount --notify --file-manager nautilus"
3463	
3464	              "rm -rf ~/.local/share/applications/waydroid.*"
3465	            ];
3466	
3467	            bind = [
3468	              "SUPER, L, exec, loginctl lock-session"
3469	              "SUPER CTRL, L, exec, uwsm stop"
3470	              "SUPER CTRL, P, exec, systemctl poweroff"
3471	              "SUPER CTRL, R, exec, systemctl reboot"
3472	
3473	              "SUPER, O, hyprexpo:expo, toggle"
3474	
3475	              "SUPER, 1, workspace, 1"
3476	              "SUPER, 2, workspace, 2"
3477	              "SUPER, 3, workspace, 3"
3478	              "SUPER, 4, workspace, 4"
3479	              "SUPER, 5, workspace, 5"
3480	              "SUPER, 6, workspace, 6"
3481	              "SUPER, 7, workspace, 7"
3482	              "SUPER, 8, workspace, 8"
3483	              "SUPER, 9, workspace, 9"
3484	              "SUPER, 0, workspace, 10"
3485	              "SUPER, mouse_down, workspace, e+1"
3486	              "SUPER, mouse_up, workspace, e-1"
3487	              "SUPER, S, togglespecialworkspace, magic"
3488	
3489	              "SUPER, left, movefocus, l"
3490	              "SUPER, right, movefocus, r"
3491	              "SUPER, up, movefocus, u"
3492	              "SUPER, down, movefocus, d"
3493	
3494	              "SUPER SHIFT, T, togglesplit,"
3495	              "SUPER SHIFT, F, togglefloating,"
3496	              ", F11, fullscreen, 0"
3497	              "SUPER, Q, killactive,"
3498	
3499	              "SUPER SHIFT, 1, movetoworkspace, 1"
3500	              "SUPER SHIFT, 2, movetoworkspace, 2"
3501	              "SUPER SHIFT, 3, movetoworkspace, 3"
3502	              "SUPER SHIFT, 4, movetoworkspace, 4"
3503	              "SUPER SHIFT, 5, movetoworkspace, 5"
3504	              "SUPER SHIFT, 6, movetoworkspace, 6"
3505	              "SUPER SHIFT, 7, movetoworkspace, 7"
3506	              "SUPER SHIFT, 8, movetoworkspace, 8"
3507	              "SUPER SHIFT, 9, movetoworkspace, 9"
3508	              "SUPER SHIFT, 0, movetoworkspace, 10"
3509	              "SUPER SHIFT, S, movetoworkspace, special:magic"
3510	
3511	              "SUPER SHIFT ALT, 1, movetoworkspacesilent, 1"
3512	              "SUPER SHIFT ALT, 2, movetoworkspacesilent, 2"
3513	              "SUPER SHIFT ALT, 3, movetoworkspacesilent, 3"
3514	              "SUPER SHIFT ALT, 4, movetoworkspacesilent, 4"
3515	              "SUPER SHIFT ALT, 5, movetoworkspacesilent, 5"
3516	              "SUPER SHIFT ALT, 6, movetoworkspacesilent, 6"
3517	              "SUPER SHIFT ALT, 7, movetoworkspacesilent, 7"
3518	              "SUPER SHIFT ALT, 8, movetoworkspacesilent, 8"
3519	              "SUPER SHIFT ALT, 9, movetoworkspacesilent, 9"
3520	              "SUPER SHIFT ALT, 0, movetoworkspacesilent, 10"
3521	              "SUPER SHIFT ALT, S, movetoworkspacesilent, special:magic"
3522	
3523	              "SUPER, C, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy"
3524	
3525	              ", PRINT, exec, uwsm app -- flameshot gui"
3526	
3527	              "SUPER, A, exec, uwsm app -- wofi --show drun --disable-history | xargs -r uwsm app --"
3528	              "SUPER, R, exec, uwsm app -- wofi --show run --disable-history | xargs -r uwsm app --"
3529	
3530	              "SUPER, T, exec, uwsm app -- tilix"
3531	
3532	              ", XF86Explorer, exec, uwsm app -- nautilus"
3533	              "SUPER, F, exec, uwsm app -- nautilus"
3534	
3535	              "SUPER, U, exec, uwsm app -- missioncenter"
3536	
3537	              "SUPER, W, exec, uwsm app -- firefox-devedition"
3538	              "SUPER ALT, W, exec, uwsm app -- firefox-devedition --private-window"
3539	
3540	              ", XF86Mail, exec, uwsm app -- thunderbird"
3541	              "SUPER, M, exec, uwsm app -- thunderbird"
3542	
3543	              "SUPER, E, exec, uwsm app -- codium"
3544	              "SUPER, D, exec, uwsm app -- dbeaver"
3545	
3546	              "SUPER, V, exec, uwsm app -- vlc"
3547	            ];
3548	
3549	            bindm = [
3550	              "SUPER, mouse:272, movewindow"
3551	              "SUPER, mouse:273, resizewindow"
3552	            ]; # Mouse
3553	
3554	            bindl = [
3555	              ", XF86AudioPlay, exec, playerctl play-pause"
3556	              ", XF86AudioPause, exec, playerctl play-pause"
3557	              ", XF86AudioStop, exec, playerctl stop"
3558	
3559	              ", XF86AudioPrev, exec, playerctl previous"
3560	              ", XF86AudioNext, exec, playerctl next"
3561	            ]; # Will also work when locked
3562	
3563	            bindel = [
3564	              ", XF86MonBrightnessUp, exec, brightnessctl s 1%+"
3565	              ", XF86MonBrightnessDown, exec, brightnessctl s 1%-"
3566	
3567	              ", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+"
3568	              ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-"
3569	              ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
3570	              ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
3571	            ]; # Repeat and will work when locked
3572	
3573	            general = {
3574	              allow_tearing = false;
3575	
3576	              gaps_workspaces = 0;
3577	
3578	              layout = "dwindle";
3579	
3580	              gaps_in = 2;
3581	              gaps_out = "2, 0, 0, 0"; # Top, Right, Bottom, Left
3582	
3583	              no_border_on_floating = false;
3584	
3585	              border_size = 0;
3586	
3587	              no_focus_fallback = false;
3588	
3589	              resize_on_border = true;
3590	              hover_icon_on_border = true;
3591	
3592	              snap = {
3593	                enabled = true;
3594	                border_overlap = false;
3595	              };
3596	            };
3597	
3598	            ecosystem = {
3599	              no_update_news = false;
3600	            };
3601	
3602	            misc = {
3603	              disable_autoreload = false;
3604	
3605	              allow_session_lock_restore = true;
3606	
3607	              key_press_enables_dpms = true;
3608	              mouse_move_enables_dpms = true;
3609	
3610	              vfr = true;
3611	              vrr = 1;
3612	
3613	              mouse_move_focuses_monitor = true;
3614	
3615	              disable_hyprland_logo = true;
3616	              force_default_wallpaper = 1;
3617	              disable_splash_rendering = true;
3618	
3619	              font_family = font_preferences.name.sans_serif;
3620	
3621	              close_special_on_empty = true;
3622	
3623	              animate_mouse_windowdragging = false;
3624	              animate_manual_resizes = false;
3625	
3626	              exit_window_retains_fullscreen = false;
3627	
3628	              layers_hog_keyboard_focus = true;
3629	
3630	              focus_on_activate = false;
3631	
3632	              middle_click_paste = true;
3633	            };
3634	
3635	            dwindle = {
3636	              pseudotile = false;
3637	
3638	              use_active_for_splits = true;
3639	              force_split = 0; # Follows Mouse
3640	              smart_split = false;
3641	              preserve_split = true;
3642	
3643	              smart_resizing = true;
3644	            };
3645	
3646	            xwayland = {
3647	              enabled = true;
3648	              force_zero_scaling = true;
3649	              use_nearest_neighbor = true;
3650	            };
3651	
3652	            windowrule = [
3653	              "suppressevent maximize, class:.*"
3654	              "nofocus, class:^$, title:^$, xwayland:1, floating:1, fullscreen:0, pinned:0"
3655	              "bordercolor rgba(ff0000ff), xwayland:1" # TODO: Test and Adjust
3656	            ];
3657	
3658	            input = {
3659	              kb_layout = "us";
3660	
3661	              numlock_by_default = false;
3662	
3663	              follow_mouse = 1;
3664	              focus_on_close = 1;
3665	
3666	              left_handed = false;
3667	              natural_scroll = false;
3668	
3669	              touchpad = {
3670	                natural_scroll = true;
3671	
3672	                tap-to-click = true;
3673	                tap-and-drag = true;
3674	                drag_lock = true;
3675	
3676	                disable_while_typing = true;
3677	              };
3678	
3679	              touchdevice = {
3680	                enabled = true;
3681	              };
3682	
3683	              tablet = {
3684	                left_handed = false;
3685	              };
3686	            };
3687	
3688	            cursor = {
3689	              no_hardware_cursors = false;
3690	
3691	              enable_hyprcursor = true;
3692	              sync_gsettings_theme = true;
3693	
3694	              persistent_warps = true;
3695	
3696	              no_warps = false;
3697	
3698	              hide_on_key_press = false;
3699	              hide_on_touch = true;
3700	            };
3701	
3702	            binds = {
3703	              disable_keybind_grabbing = true;
3704	              pass_mouse_when_bound = false;
3705	
3706	              window_direction_monitor_fallback = true;
3707	            };
3708	
3709	            gestures = {
3710	              # Touchpad
3711	              workspace_swipe = true;
3712	              workspace_swipe_invert = true;
3713	
3714	              # Touchscreen
3715	              workspace_swipe_touch = false;
3716	              workspace_swipe_touch_invert = false;
3717	
3718	              workspace_swipe_create_new = true;
3719	              workspace_swipe_forever = true;
3720	            };
3721	
3722	            decoration = {
3723	              dim_special = 0.25;
3724	
3725	              rounding = builtins.floor (design_factor * 0.50); # 8
3726	
3727	              active_opacity = 1.0;
3728	              fullscreen_opacity = 1.0;
3729	              inactive_opacity = 1.0;
3730	
3731	              dim_inactive = false;
3732	              dim_strength = 0.0;
3733	
3734	              blur.enabled = false;
3735	              shadow.enabled = false;
3736	            };
3737	
3738	            animations = {
3739	              enabled = true;
3740	              first_launch_animation = true;
3741	
3742	              bezier = [
3743	                "linear, 0, 0, 1, 1" # https://www.cssportal.com/css-cubic-bezier-generator/#0,0,1,1
3744	              ];
3745	
3746	              animation = [
3747	                "global, 1, 1.0, linear"
3748	                "border, 1, 1.0, linear"
3749	                "windows, 1, 1.0, linear"
3750	                "windowsIn, 1, 1.0, linear"
3751	                "windowsOut, 1, 1.0, linear"
3752	                "fadeIn, 1, 1.0, linear"
3753	                "fadeOut, 1, 1.0, linear"
3754	                "fade, 1, 1.0, linear"
3755	                "layers, 1, 1.0, linear"
3756	                "layersIn, 1, 1.0, linear"
3757	                "layersOut, 1, 1.0, linear"
3758	                "fadeLayersIn, 1, 1.0, linear"
3759	                "fadeLayersOut, 1, 1.0, linear"
3760	                "workspaces, 1, 1.0, linear"
3761	                "workspacesIn, 1, 1.0, linear"
3762	                "workspacesOut, 1, 1.0, linear"
3763	              ];
3764	              # Name, On/Off, Speed, Bezier
3765	            };
3766	
3767	            plugin = {
3768	              hyprexpo = {
3769	                skip_empty = true;
3770	                workspace_method = "center current";
3771	
3772	                columns = 3;
3773	                gap_size = 4;
3774	                bg_col = convert_hex_color_code_to_rgba_color_code colors.hex.background;
3775	
3776	                enable_gesture = true;
3777	                gesture_fingers = 3;
3778	                gesture_positive = false;
3779	                gesture_distance = 200;
3780	              };
3781	            };
3782	          };
3783	        };
3784	
3785	        xdg = {
3786	          mime.enable = true;
3787	
3788	          mimeApps = {
3789	            enable = true;
3790	
3791	            associations = {
3792	              added = config.xdg.mime.addedAssociations;
3793	
3794	              removed = config.xdg.mime.removedAssociations;
3795	            };
3796	
3797	            defaultApplications = config.xdg.mime.defaultApplications;
3798	          };
3799	
3800	          configFile = {
3801	            "mimeapps.list".force = true;
3802	          };
3803	        };
3804	
3805	        gtk = {
3806	          enable = true;
3807	
3808	          theme = {
3809	            name = "Adwaita-dark";
3810	            package = pkgs.gnome-themes-extra;
3811	          };
3812	
3813	          iconTheme = {
3814	            name = "Papirus-Dark";
3815	            package = (
3816	              pkgs.papirus-icon-theme.override {
3817	                color = "black";
3818	              }
3819	            );
3820	          };
3821	
3822	          cursorTheme = {
3823	            name = cursor.theme.name;
3824	            package = cursor.theme.package;
3825	            size = cursor.size;
3826	          };
3827	
3828	          font = {
3829	            name = font_preferences.name.sans_serif;
3830	            package = font_preferences.package;
3831	            size = font_preferences.size;
3832	          };
3833	        };
3834	
3835	        qt = {
3836	          enable = true;
3837	
3838	          platformTheme.name = "adwaita";
3839	          style.name = "adwaita-dark";
3840	        };
3841	
3842	        services = {
3843	          swaync = {
3844	            enable = true;
3845	            package = pkgs.swaynotificationcenter;
3846	
3847	            settings = {
3848	              "\$schema" = "${pkgs.swaynotificationcenter}/etc/xdg/swaync/configSchema.json";
3849	              cssPriority = "application";
3850	
3851	              layer-shell = true;
3852	              layer-shell-cover-screen = true;
3853	              fit-to-screen = false;
3854	
3855	              control-center-layer = "overlay";
3856	              control-center-exclusive-zone = true;
3857	              control-center-positionX = "right";
3858	              control-center-positionY = "top";
3859	              control-center-margin-top = builtins.floor (design_factor * 0.50); # 8
3860	              control-center-margin-right = builtins.floor (design_factor * 0.50); # 8
3861	              control-center-margin-bottom = builtins.floor (design_factor * 0.50); # 8
3862	              control-center-margin-left = builtins.floor (design_factor * 0.50); # 8
3863	
3864	              layer = "overlay";
3865	              positionX = "right";
3866	              positionY = "top";
3867	
3868	              text-empty = "No Notifications";
3869	              widgets = [
3870	                "title"
3871	                "notifications"
3872	                "mpris"
3873	                "dnd"
3874	              ];
3875	              widget-config = {
3876	                title = {
3877	                  text = "Notifications";
3878	
3879	                  clear-all-button = true;
3880	                  button-text = "Clear";
3881	                };
3882	
3883	                mpris = {
3884	                  image-radius = design_factor;
3885	                  blur = true;
3886	                };
3887	
3888	                dnd = {
3889	                  text = "Do Not Disturb";
3890	                };
3891	              };
3892	
3893	              image-visibility = "when-available";
3894	              relative-timestamps = true;
3895	              notification-inline-replies = true;
3896	              notification-2fa-action = true;
3897	              transition-time = animation_duration;
3898	
3899	              timeout = 8;
3900	              timeout-critical = 0; # 0 = Disable
3901	              timeout-low = 4;
3902	
3903	              keyboard-shortcuts = true;
3904	              hide-on-action = true;
3905	              hide-on-clear = true;
3906	              script-fail-notify = true;
3907	            };
3908	
3909	            style = ''
3910	              .blank-window {
3911	                background: transparent;
3912	              }
3913	
3914	              .control-center {
3915	                border-radius: ${toString design_factor}px;
3916	                background-color: ${colors.hex.borders};
3917	                font-size: ${toString font_preferences.size}px;
3918	                color: ${colors.hex.foreground};
3919	              }
3920	
3921	              .widget-title,
3922	              .widget-dnd  {
3923	                font-size: ${toString (font_preferences.size * 1.5)}px;
3924	                color: ${colors.hex.foreground};
3925	              }
3926	
3927	              .widget-title > button {
3928	                border-radius: ${toString design_factor}px;
3929	              }
3930	
3931	              .notification-row .notification-background .notification {
3932	                border-radius: ${toString design_factor}px;
3933	              }
3934	
3935	              .notification-row .notification-background .notification .notification-default-action {
3936	                border-radius: ${toString design_factor}px;
3937	              }
3938	
3939	              .notification-row .notification-background .notification .notification-default-action .notification-content {
3940	                border-radius: ${toString design_factor}px;
3941	              }
3942	
3943	              .notification-row .notification-background .notification .notification-default-action .notification-content .body-image {
3944	                border-radius: ${toString design_factor}px;
3945	              }
3946	
3947	              .notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-entry {
3948	                border-radius: ${toString design_factor}px;
3949	              }
3950	
3951	              .notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button {
3952	                border-radius: ${toString design_factor}px;
3953	              }
3954	
3955	              .widget-mpris .widget-mpris-player {
3956	                border-radius: ${toString design_factor}px;
3957	              }
3958	
3959	              .widget-mpris .widget-mpris-player .widget-mpris-album-art {
3960	                border-radius: ${toString design_factor}px;
3961	              }
3962	
3963	              .widget-dnd > switch {
3964	                border-radius: ${toString design_factor}px;
3965	              }
3966	
3967	              .widget-dnd > switch slider {
3968	                border-radius: ${toString design_factor}px;
3969	              }
3970	            '';
3971	          };
3972	
3973	          hypridle = {
3974	            enable = true;
3975	            package = pkgs.hypridle;
3976	
3977	            settings = {
3978	              general = {
3979	                ignore_systemd_inhibit = false;
3980	                ignore_wayland_inhibit = false;
3981	                ignore_dbus_inhibit = false;
3982	
3983	                lock_cmd = "pidof hyprlock || hyprlock --immediate";
3984	              };
3985	
3986	              listener = [
3987	                {
3988	                  ignore_inhibit = false;
3989	
3990	                  timeout = 300; # 5 Minutes
3991	                  on-timeout = "loginctl lock-session";
3992	                }
3993	              ];
3994	            };
3995	          };
3996	
3997	          hyprpaper = {
3998	            enable = true;
3999	            package = pkgs.hyprpaper;
4000	
4001	            settings = {
4002	              ipc = "on";
4003	
4004	              splash = false;
4005	
4006	              preload = [
4007	                wallpaper
4008	              ];
4009	
4010	              wallpaper = [
4011	                ", ${wallpaper}"
4012	              ];
4013	            };
4014	          };
4015	        };
4016	
4017	        programs = {
4018	          nix-your-shell = {
4019	            enable = true;
4020	            package = pkgs.nix-your-shell;
4021	
4022	            enableFishIntegration = true;
4023	          };
4024	
4025	          dircolors = {
4026	            enable = true;
4027	            package = (
4028	              pkgs.coreutils-full.override {
4029	                aclSupport = true;
4030	                withOpenssl = true;
4031	              }
4032	            );
4033	
4034	            enableBashIntegration = true;
4035	            enableFishIntegration = true;
4036	          };
4037	
4038	          kubecolor = {
4039	            enable = true;
4040	            package = pkgs.kubecolor;
4041	
4042	            enableAlias = true;
4043	
4044	            settings = {
4045	              kubectl = pkgs.lib.getExe pkgs.kubectl;
4046	              preset = "dark";
4047	            };
4048	          };
4049	
4050	          hyprlock = {
4051	            enable = true;
4052	            package = pkgs.hyprlock;
4053	
4054	            sourceFirst = true;
4055	
4056	            settings = {
4057	              general = {
4058	                immediate_render = true;
4059	                fractional_scaling = 2; # 2 = Automatic
4060	
4061	                text_trim = false;
4062	                hide_cursor = false;
4063	
4064	                ignore_empty_input = true;
4065	                fail_timeout = 2000; # ms
4066	              };
4067	
4068	              auth = {
4069	                pam = {
4070	                  enabled = true;
4071	                  module = "hyprlock";
4072	                };
4073	
4074	                fingerprint = {
4075	                  enabled = true;
4076	
4077	                  ready_message = "Scan Fingerprint";
4078	                  present_message = "Scanning Fingerprint";
4079	
4080	                  retry_delay = 250; # ms
4081	                };
4082	              };
4083	
4084	              background = [
4085	                {
4086	                  monitor = ""; # "" = All
4087	                  path = wallpaper;
4088	                }
4089	              ];
4090	
4091	              label = [
4092	                {
4093	                  monitor = ""; # "" = All
4094	                  halign = "center";
4095	                  valign = "top";
4096	                  position = "0, -128";
4097	
4098	                  text_align = "center";
4099	                  font_family = font_preferences.name.sans_serif;
4100	                  color = convert_hex_color_code_to_rgba_color_code colors.hex.foreground;
4101	                  font_size = design_factor * 4;
4102	                  text = "$TIME12";
4103	                }
4104	
4105	                {
4106	                  monitor = ""; # "" = All
4107	                  halign = "center";
4108	                  valign = "center";
4109	                  position = "0, 0";
4110	
4111	                  text_align = "center";
4112	                  font_family = font_preferences.name.sans_serif;
4113	                  color = convert_hex_color_code_to_rgba_color_code colors.hex.foreground;
4114	                  font_size = design_factor;
4115	                  text = "$DESC"; # Full Name
4116	                }
4117	              ];
4118	
4119	              input-field = [
4120	                {
4121	                  monitor = ""; # "" = All
4122	                  halign = "center";
4123	                  valign = "bottom";
4124	                  position = "0, 128";
4125	
4126	                  size = "256, 48";
4127	                  rounding = design_factor;
4128	                  outline_thickness = 1;
4129	                  outer_color = convert_hex_color_code_to_rgba_color_code colors.hex.background;
4130	                  shadow_passes = 0;
4131	                  hide_input = false;
4132	                  inner_color = convert_hex_color_code_to_rgba_color_code colors.hex.background;
4133	                  font_family = font_preferences.name.sans_serif;
4134	                  font_color = convert_hex_color_code_to_rgba_color_code colors.hex.foreground;
4135	                  placeholder_text = "Enter Password";
4136	                  dots_center = true;
4137	                  dots_rounding = -1;
4138	
4139	                  fade_on_empty = true;
4140	
4141	                  invert_numlock = false;
4142	                  capslock_color = convert_hex_color_code_to_rgba_color_code colors.hex.warning;
4143	                  numlock_color = convert_hex_color_code_to_rgba_color_code colors.hex.warning;
4144	                  bothlock_color = convert_hex_color_code_to_rgba_color_code colors.hex.warning;
4145	
4146	                  check_color = convert_hex_color_code_to_rgba_color_code colors.hex.success;
4147	                  fail_color = convert_hex_color_code_to_rgba_color_code colors.hex.error;
4148	                  fail_text = "$FAIL <b>($ATTEMPTS)</b>";
4149	                }
4150	              ];
4151	            };
4152	          };
4153	
4154	          waybar = {
4155	            enable = true;
4156	            package = (
4157	              pkgs.waybar.override {
4158	                enableManpages = true;
4159	                evdevSupport = true;
4160	                gpsSupport = true;
4161	                inputSupport = true;
4162	                jackSupport = true;
4163	                mprisSupport = true;
4164	                pipewireSupport = true;
4165	                pulseSupport = true;
4166	                rfkillSupport = true;
4167	                sndioSupport = true;
4168	                systemdSupport = true;
4169	                traySupport = true;
4170	                udevSupport = true;
4171	                wireplumberSupport = true;
4172	                withMediaPlayer = true;
4173	              }
4174	            );
4175	
4176	            systemd.enable = true;
4177	
4178	            settings = {
4179	              top_bar = {
4180	                start_hidden = false;
4181	                reload_style_on_change = true;
4182	                position = "top";
4183	                exclusive = true;
4184	                layer = "top";
4185	                passthrough = false;
4186	                fixed-center = true;
4187	                spacing = 4;
4188	
4189	                modules-left = [
4190	                  "group/backlight-and-ppd-and-idle-inhibitor"
4191	                  "group/pulseaudio-and-bluetooth"
4192	                  "group/hardware-statistics"
4193	                  "network"
4194	                  "privacy"
4195	                ];
4196	
4197	                modules-center = [
4198	                  "clock"
4199	                ];
4200	
4201	                modules-right = [
4202	                  "group/swaync-and-systemd"
4203	                  "tray"
4204	                  "group/workspaces-and-taskbar"
4205	                ];
4206	
4207	                clock = {
4208	                  timezone = config.time.timeZone;
4209	                  locale = "en_US";
4210	                  interval = 1;
4211	
4212	                  format = "{:%I:%M %p}";
4213	                  format-alt = "{:%A, %B %d, %Y}";
4214	
4215	                  tooltip = true;
4216	                  tooltip-format = "<tt><small>{calendar}</small></tt>";
4217	
4218	                  calendar = {
4219	                    mode = "year";
4220	                    mode-mon-col = 3;
4221	                    weeks-pos = "right";
4222	
4223	                    format = {
4224	                      months = "<b>{}</b>";
4225	                      days = "{}";
4226	                      weekdays = "<b>{}</b>";
4227	                      weeks = "<i>{:%U}</i>";
4228	                      today = "<u>{}</u>";
4229	                    };
4230	                  };
4231	                };
4232	
4233	                "group/backlight-and-ppd-and-idle-inhibitor" = {
4234	                  modules = [
4235	                    "backlight"
4236	                    "power-profiles-daemon"
4237	                    "idle_inhibitor"
4238	                  ];
4239	                  drawer = {
4240	                    click-to-reveal = false;
4241	                    transition-left-to-right = true;
4242	                    transition-duration = animation_duration;
4243	                  };
4244	                  "orientation" = "inherit";
4245	                };
4246	
4247	                backlight = {
4248	                  device = backlight_device;
4249	                  interval = 1;
4250	
4251	                  format = "{percent}% {icon}";
4252	                  format-icons = [
4253	                    ""
4254	                    ""
4255	                    ""
4256	                    ""
4257	                    ""
4258	                    ""
4259	                    ""
4260	                    ""
4261	                    ""
4262	                  ];
4263	
4264	                  tooltip = true;
4265	                  tooltip-format = "{percent}% {icon}";
4266	
4267	                  on-scroll-up = "brightnessctl s +1%";
4268	                  on-scroll-down = "brightnessctl s 1%-";
4269	                  reverse-scrolling = false;
4270	                  reverse-mouse-scrolling = false;
4271	                  scroll-step = 1.0;
4272	                };
4273	
4274	                power-profiles-daemon = {
4275	                  format = "{icon}";
4276	                  format-icons = {
4277	                    performance = "";
4278	                    balanced = "";
4279	                    power-saver = "";
4280	                  };
4281	
4282	                  tooltip = true;
4283	                  tooltip-format = "Driver: {driver}\nProfile: {profile}";
4284	                };
4285	
4286	                idle_inhibitor = {
4287	                  start-activated = false;
4288	
4289	                  format = "{icon}";
4290	                  format-icons = {
4291	                    activated = "";
4292	                    deactivated = "";
4293	                  };
4294	
4295	                  tooltip = true;
4296	                  tooltip-format-activated = "{status}";
4297	                  tooltip-format-deactivated = "{status}";
4298	                };
4299	
4300	                "group/pulseaudio-and-bluetooth" = {
4301	                  modules = [
4302	                    "pulseaudio"
4303	                    "bluetooth"
4304	                  ];
4305	                  drawer = {
4306	                    click-to-reveal = false;
4307	                    transition-left-to-right = true;
4308	                    transition-duration = animation_duration;
4309	                  };
4310	                  "orientation" = "inherit";
4311	                };
4312	
4313	                pulseaudio = {
4314	                  format = "{volume}% {icon} {format_source}";
4315	                  format-muted = "{icon} {format_source}";
4316	
4317	                  format-bluetooth = "{volume}% {icon} 󰂱 {format_source}";
4318	                  format-bluetooth-muted = "{icon} 󰂱 {format_source}";
4319	
4320	                  format-source = " {volume}% ";
4321	                  format-source-muted = "";
4322	
4323	                  format-icons = {
4324	                    default = [
4325	                      ""
4326	                      ""
4327	                      ""
4328	                    ];
4329	                    default-muted = "";
4330	
4331	                    speaker = "󰓃";
4332	                    speaker-muted = "󰓄";
4333	
4334	                    headphone = "󰋋";
4335	                    headphone-muted = "󰟎";
4336	
4337	                    headset = "󰋎";
4338	                    headset-muted = "󰋐";
4339	
4340	                    hands-free = "󰏳";
4341	                    hands-free-muted = "󰗿";
4342	
4343	                    phone = "";
4344	                    phone-muted = "";
4345	
4346	                    portable = "";
4347	                    portable-muted = "";
4348	
4349	                    hdmi = "󰽟";
4350	                    hdmi-muted = "󰽠";
4351	
4352	                    hifi = "󰴸";
4353	                    hifi-muted = "󰓄";
4354	
4355	                    car = "󰄋";
4356	                    car-muted = "󰸜";
4357	                  };
4358	
4359	                  tooltip = true;
4360	                  tooltip-format = "{desc}";
4361	
4362	                  scroll-step = 1.0;
4363	                  reverse-scrolling = false;
4364	                  reverse-mouse-scrolling = false;
4365	                  max-volume = 100;
4366	                  on-scroll-up = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+";
4367	                  on-scroll-down = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-";
4368	
4369	                  on-click = "uwsm app -- pwvucontrol";
4370	                };
4371	
4372	                bluetooth = {
4373	                  format = "{status} {icon}";
4374	                  format-disabled = "Disabled {icon}";
4375	                  format-off = "Off {icon}";
4376	                  format-on = "On {icon}";
4377	                  format-connected = "{device_alias} {icon}";
4378	                  format-connected-battery = "{device_alias} 󰂱 ({device_battery_percentage}%)";
4379	                  format-icons = {
4380	                    no-controller = "󰂲";
4381	                    disabled = "󰂲";
4382	                    off = "󰂲";
4383	                    on = "󰂯";
4384	                    connected = "󰂱";
4385	                  };
4386	
4387	                  tooltip = true;
4388	                  tooltip-format = "Status: {status}\nController Address: {controller_address} ({controller_address_type})\nController Alias: {controller_alias}";
4389	                  tooltip-format-disabled = "Status: Disabled";
4390	                  tooltip-format-off = "Status: Off";
4391	                  tooltip-format-on = "Status: On\nController Address: {controller_address} ({controller_address_type})\nController Alias: {controller_alias}";
4392	                  tooltip-format-connected = "Status: Connected\nController Address: {controller_address} ({controller_address_type})\nController Alias: {controller_alias}\nConnected Devices ({num_connections}): {device_enumerate}";
4393	                  tooltip-format-connected-battery = "Status: Connected\nController Address: {controller_address} ({controller_address_type})\nController Alias: {controller_alias}\nConnected Devices ({num_connections}): {device_enumerate}";
4394	                  tooltip-format-enumerate-connected = "\n\tAddress: {device_address} ({device_address_type})\n\tAlias: {device_alias}";
4395	                  tooltip-format-enumerate-connected-battery = "\n\tAddress: {device_address} ({device_address_type})\n\tAlias: {device_alias}\n\tBattery: {device_battery_percentage}%";
4396	
4397	                  on-click = "uwsm app -- blueman-manager";
4398	                };
4399	
4400	                "group/hardware-statistics" = {
4401	                  modules = [
4402	                    "battery"
4403	                    "cpu"
4404	                    "memory"
4405	                    "disk"
4406	                  ];
4407	                  drawer = {
4408	                    click-to-reveal = false;
4409	                    transition-left-to-right = true;
4410	                    transition-duration = animation_duration;
4411	                  };
4412	                  "orientation" = "inherit";
4413	                };
4414	
4415	                battery = {
4416	                  bat = "BAT0";
4417	                  adapter = "AC0";
4418	                  design-capacity = false;
4419	                  weighted-average = true;
4420	                  interval = 1;
4421	
4422	                  full-at = 100;
4423	                  states = {
4424	                    warning = 25;
4425	                    critical = 10;
4426	                  };
4427	
4428	                  format = "{capacity}% {icon}";
4429	                  format-plugged = "{capacity}% ";
4430	                  format-charging = "{capacity}% ";
4431	                  format-full = "{capacity}% {icon}";
4432	                  format-alt = "{time} {icon}";
4433	                  format-time = "{H} h {m} min";
4434	                  format-icons = [
4435	                    ""
4436	                    ""
4437	                    ""
4438	                    ""
4439	                    ""
4440	                  ];
4441	
4442	                  tooltip = true;
4443	                  tooltip-format = "Capacity: {capacity}%\nPower: {power} W\n{timeTo}\nCycles: {cycles}\nHealth: {health}%";
4444	                };
4445	
4446	                cpu = {
4447	                  interval = 1;
4448	
4449	                  format = "{usage}% ";
4450	
4451	                  tooltip = true;
4452	
4453	                  on-click = "uwsm app -- missioncenter";
4454	                };
4455	
4456	                memory = {
4457	                  interval = 1;
4458	
4459	                  format = "{percentage}% ";
4460	
4461	                  tooltip = true;
4462	                  tooltip-format = "Used RAM: {used} GiB ({percentage}%)\nUsed Swap: {swapUsed} GiB ({swapPercentage}%)\nAvailable RAM: {avail} GiB\nAvailable Swap: {swapAvail} GiB";
4463	
4464	                  on-click = "uwsm app -- missioncenter";
4465	                };
4466	
4467	                disk = {
4468	                  path = "/";
4469	                  unit = "GB";
4470	                  interval = 1;
4471	
4472	                  format = "{percentage_used}% 󰋊";
4473	
4474	                  tooltip = true;
4475	                  tooltip-format = "Total: {specific_total} GB\nUsed: {specific_used} GB ({percentage_used}%)\nFree: {specific_free} GB ({percentage_free}%)";
4476	
4477	                  on-click = "uwsm app -- missioncenter";
4478	                };
4479	
4480	                network = {
4481	                  interval = 1;
4482	
4483	                  format = "{bandwidthUpBytes} {bandwidthDownBytes}";
4484	                  format-disconnected = "Disconnected 󱘖";
4485	                  format-linked = "No IP 󰀦";
4486	                  format-ethernet = "{bandwidthUpBytes}   {bandwidthDownBytes}";
4487	                  format-wifi = "{bandwidthUpBytes}   {bandwidthDownBytes}";
4488	
4489	                  tooltip = true;
4490	                  tooltip-format = "Interface: {ifname}\nGateway: {gwaddr}\nSubnet Mask: {netmask}\nCIDR Notation: {cidr}\nIP Address: {ipaddr}\nUp Speed: {bandwidthUpBytes}\nDown Speed: {bandwidthDownBytes}\nTotal Speed: {bandwidthTotalBytes}";
4491	                  tooltip-format-disconnected = "Disconnected";
4492	                  tooltip-format-ethernet = "Interface: {ifname}\nGateway: {gwaddr}\nSubnet Mask: {netmask}\nCIDR Notation= {cidr}\nIP Address: {ipaddr}\nUp Speed: {bandwidthUpBytes}\nDown Speed: {bandwidthDownBytes}\nTotal Speed: {bandwidthTotalBytes}";
4493	                  tooltip-format-wifi = "Interface: {ifname}\nESSID: {essid}\nFrequency: {frequency} GHz\nStrength: {signaldBm} dBm ({signalStrength}%)\nGateway: {gwaddr}\nSubnet Mask: {netmask}\nCIDR Notation: {cidr}\nIP Address: {ipaddr}\nUp Speed: {bandwidthUpBytes}\nDown Speed: {bandwidthDownBytes}\nTotal Speed: {bandwidthTotalBytes}";
4494	
4495	                  on-click = "uwsm app -- nm-connection-editor";
4496	                };
4497	
4498	                privacy = {
4499	                  icon-size = font_preferences.size;
4500	                  icon-spacing = builtins.floor (design_factor * 0.50); # 8
4501	                  transition-duration = 200;
4502	
4503	                  modules = [
4504	                    {
4505	                      type = "screenshare";
4506	                      tooltip = true;
4507	                      tooltip-icon-size = font_preferences.size;
4508	                    }
4509	                    {
4510	                      type = "audio-in";
4511	                      tooltip = true;
4512	                      tooltip-icon-size = font_preferences.size;
4513	                    }
4514	                  ];
4515	                };
4516	
4517	                "group/swaync-and-systemd" = {
4518	                  modules = [
4519	                    "custom/swaync"
4520	                    "systemd-failed-units"
4521	                  ];
4522	                  drawer = {
4523	                    click-to-reveal = false;
4524	                    transition-left-to-right = false;
4525	                    transition-duration = animation_duration;
4526	                  };
4527	                  "orientation" = "inherit";
4528	                };
4529	
4530	                "custom/swaync" = {
4531	                  format = "{} {icon}";
4532	                  format-icons = {
4533	                    notification = "<span foreground=\"${colors.hex.warning}\"><sup></sup></span>";
4534	                    none = "";
4535	
4536	                    inhibited-notification = "<span foreground=\"${colors.hex.warning}\"><sup></sup></span>";
4537	                    inhibited-none = "";
4538	
4539	                    dnd-notification = "<span foreground=\"${colors.hex.warning}\"><sup></sup></span>";
4540	                    dnd-none = "";
4541	
4542	                    dnd-inhibited-notification = "<span foreground=\"${colors.hex.warning}\"><sup></sup></span>";
4543	                    dnd-inhibited-none = "";
4544	                  };
4545	
4546	                  tooltip = false;
4547	
4548	                  return-type = "json";
4549	                  exec-if = "which swaync-client";
4550	                  exec = "uwsm app -- swaync-client -swb";
4551	                  on-click = "swaync-client -t -sw";
4552	                  on-click-right = "swaync-client -d -sw";
4553	                  escape = true;
4554	                };
4555	
4556	                systemd-failed-units = {
4557	                  system = true;
4558	                  user = true;
4559	
4560	                  hide-on-ok = false;
4561	
4562	                  format = "{nr_failed_system}, {nr_failed_user} ";
4563	                  format-ok = "";
4564	                };
4565	
4566	                tray = {
4567	                  show-passive-items = true;
4568	                  reverse-direction = false;
4569	                  icon-size = font_preferences.size;
4570	                  spacing = 4;
4571	                };
4572	
4573	                "group/workspaces-and-taskbar" = {
4574	                  modules = [
4575	                    "hyprland/workspaces"
4576	                    "wlr/taskbar"
4577	                  ];
4578	                  drawer = {
4579	                    click-to-reveal = false;
4580	                    transition-left-to-right = false;
4581	                    transition-duration = animation_duration;
4582	                  };
4583	                  "orientation" = "inherit";
4584	                };
4585	
4586	                "hyprland/workspaces" = {
4587	                  all-outputs = false;
4588	                  show-special = true;
4589	                  special-visible-only = false;
4590	                  active-only = false;
4591	                  format = "{name}";
4592	                  move-to-monitor = false;
4593	                };
4594	
4595	                "wlr/taskbar" = {
4596	                  all-outputs = false;
4597	                  active-first = false;
4598	                  sort-by-app-id = false;
4599	                  format = "{icon}";
4600	                  icon-size = font_preferences.size;
4601	                  markup = true;
4602	
4603	                  tooltip = true;
4604	                  tooltip-format = "Title: {title}\nName: {name}\nID: {app_id}\nState: {state}";
4605	
4606	                  on-click = "activate";
4607	                };
4608	              };
4609	            };
4610	
4611	            style = ''
4612	              * {
4613	                font-family: ${font_preferences.name.sans_serif};
4614	                font-size: ${toString font_preferences.size};
4615	              }
4616	
4617	              window#waybar {
4618	                border: none;
4619	                background-color: transparent;
4620	              }
4621	
4622	              .modules-right > widget:last-child > #workspaces {
4623	                margin-right: 0;
4624	              }
4625	
4626	              .modules-left > widget:first-child > #workspaces {
4627	                margin-left: 0;
4628	              }
4629	
4630	              #power-profiles-daemon,
4631	              #idle_inhibitor,
4632	              #backlight,
4633	              #pulseaudio,
4634	              #bluetooth,
4635	              #network,
4636	              #clock,
4637	              #custom-swaync,
4638	              #privacy,
4639	              #systemd-failed-units,
4640	              #disk,
4641	              #memory,
4642	              #cpu,
4643	              #battery,
4644	              #window {
4645	                border-radius: ${toString design_factor}px;
4646	                background-color: ${colors.hex.borders};
4647	                padding: 2px 8px;
4648	                color: ${colors.hex.foreground};
4649	              }
4650	
4651	              #power-profiles-daemon.power-saver,
4652	              #power-profiles-daemon.balanced {
4653	                color: ${colors.hex.success};
4654	              }
4655	
4656	              #power-profiles-daemon.performance {
4657	                color: ${colors.hex.foreground};
4658	              }
4659	
4660	              #idle_inhibitor.deactivated {
4661	                color: ${colors.hex.foreground};
4662	              }
4663	
4664	              #idle_inhibitor.activated {
4665	                color: ${colors.hex.success};
4666	              }
4667	
4668	              #pulseaudio.muted,
4669	              #pulseaudio.source-muted {
4670	                color: ${colors.hex.error};
4671	              }
4672	
4673	              #pulseaudio.bluetooth {
4674	                color: ${colors.hex.foreground};
4675	              }
4676	
4677	              #bluetooth.no-controller,
4678	              #bluetooth.disabled,
4679	              #bluetooth.off {
4680	                color: ${colors.hex.error};
4681	              }
4682	
4683	              #bluetooth.on,
4684	              #bluetooth.discoverable,
4685	              #bluetooth.pairable {
4686	                color: ${colors.hex.foreground};
4687	              }
4688	
4689	              #bluetooth.discovering,
4690	              #bluetooth.connected {
4691	                color: ${colors.hex.success};
4692	              }
4693	
4694	              #network.disabled,
4695	              #network.disconnected,
4696	              #network.linked {
4697	                color: ${colors.hex.error};
4698	              }
4699	
4700	              #network.etherenet,
4701	              #network.wifi {
4702	                color: ${colors.hex.foreground};
4703	              }
4704	
4705	              #custom-swaync {
4706	                font-family: ${font_preferences.name.mono};
4707	              }
4708	
4709	              #privacy-item.audio-in,
4710	              #privacy-item.screenshare {
4711	                color: ${colors.hex.success};
4712	              }
4713	
4714	              #systemd-failed-units.ok {
4715	                color: ${colors.hex.foreground};
4716	              }
4717	
4718	              #systemd-failed-units.degraded {
4719	                color: ${colors.hex.error};
4720	              }
4721	
4722	              #battery.plugged,
4723	              #battery.full {
4724	                color: ${colors.hex.foreground};
4725	              }
4726	
4727	              #battery.charging {
4728	                color: ${colors.hex.success};
4729	              }
4730	
4731	              #battery.warning {
4732	                color: ${colors.hex.warning};
4733	              }
4734	
4735	              #battery.critical {
4736	                color: ${colors.hex.error};
4737	              }
4738	
4739	              #workspaces,
4740	              #taskbar,
4741	              #tray {
4742	                background-color: transparent;
4743	              }
4744	
4745	              button {
4746	                margin: 0px 2px;
4747	                border-radius: ${toString design_factor}px;
4748	                background-color: ${colors.hex.borders};
4749	                padding: 0px;
4750	                color: ${colors.hex.foreground};
4751	              }
4752	
4753	              button * {
4754	                padding: 0px 4px;
4755	              }
4756	
4757	              button.active {
4758	                background-color: ${colors.hex.background};
4759	              }
4760	
4761	              #window label {
4762	                padding: 0px 4px;
4763	                font-size: ${toString font_preferences.size};
4764	              }
4765	
4766	              #tray > widget {
4767	                border-radius: ${toString design_factor}px;
4768	                background-color: ${colors.hex.borders};
4769	                color: ${colors.hex.foreground};
4770	              }
4771	
4772	              #tray image {
4773	                padding: 0px 8px;
4774	              }
4775	
4776	              #tray > .passive {
4777	                -gtk-icon-effect: dim;
4778	              }
4779	
4780	              #tray > .active {
4781	                background-color: ${colors.hex.borders};
4782	              }
4783	
4784	              #tray > .needs-attention {
4785	                background-color: ${colors.hex.success};
4786	                -gtk-icon-effect: highlight;
4787	              }
4788	
4789	              #tray > widget:hover {
4790	                background-color: ${colors.hex.background};
4791	              }
4792	            '';
4793	          };
4794	
4795	          gradle = {
4796	            enable = true;
4797	            package = pkgs.gradle;
4798	          };
4799	
4800	          matplotlib = {
4801	            enable = true;
4802	
4803	            config = {
4804	              axes = {
4805	                grid = true;
4806	              };
4807	            };
4808	          };
4809	
4810	          keepassxc = {
4811	            enable = true;
4812	            package = (
4813	              pkgs.keepassxc.override {
4814	                withKeePassBrowser = true;
4815	                withKeePassBrowserPasskeys = true;
4816	                withKeePassFDOSecrets = true;
4817	                withKeePassKeeShare = true;
4818	                withKeePassNetworking = true;
4819	                withKeePassSSHAgent = true;
4820	                withKeePassYubiKey = true;
4821	              }
4822	            );
4823	
4824	            # settings = { };
4825	          };
4826	
4827	          gh = {
4828	            enable = true;
4829	            package = pkgs.gh;
4830	            extensions = with pkgs; [
4831	              gh-contribs
4832	              gh-notify
4833	              gh-skyline
4834	            ];
4835	
4836	            gitCredentialHelper = {
4837	              enable = true;
4838	
4839	              hosts = [
4840	                "https://github.com"
4841	                "https://gist.github.com"
4842	              ];
4843	            };
4844	
4845	            settings = {
4846	              git_protocol = "https";
4847	
4848	              editor = "nano";
4849	
4850	              # aliases = { };
4851	            };
4852	          };
4853	
4854	          awscli = {
4855	            enable = true;
4856	            package = pkgs.awscli2;
4857	
4858	            settings = {
4859	              default = {
4860	                output = "json";
4861	              };
4862	            };
4863	
4864	            # credentials = { };
4865	          };
4866	
4867	          wofi = {
4868	            enable = true;
4869	            package = pkgs.wofi;
4870	
4871	            settings = {
4872	              normal_window = false;
4873	              layer = "overlay";
4874	              location = "center";
4875	
4876	              gtk_dark = true;
4877	              columns = 2;
4878	              dynamic_lines = false;
4879	              # lines = 9; # 9 -1 = 8 # Seems Broken
4880	              height = "50%";
4881	              hide_scroll = false;
4882	
4883	              hide_search = false;
4884	              prompt = "Search";
4885	              show_all = true;
4886	              allow_markup = true;
4887	              allow_images = true;
4888	              image_size = 32;
4889	              no_actions = true;
4890	
4891	              insensitive = true;
4892	
4893	              single_click = true;
4894	              term = "tilix";
4895	            };
4896	
4897	            style = ''
4898	              window {
4899	                border-radius: ${toString design_factor}px;
4900	              }
4901	
4902	              #outer-box {
4903	                padding: 16px;
4904	              }
4905	
4906	              #inner-box {
4907	                margin-top: 16px;
4908	              }
4909	
4910	              #entry {
4911	                margin-top: 4px;
4912	                margin-bottom: 4px;
4913	              }
4914	
4915	              #img {
4916	                margin-right: 4px;
4917	              }
4918	            '';
4919	          };
4920	
4921	          vscode = {
4922	            enable = true;
4923	            package = pkgs.vscodium;
4924	            mutableExtensionsDir = false;
4925	
4926	            profiles = {
4927	              default = {
4928	                extensions =
4929	                  with pkgs.vscode-extensions;
4930	                  [
4931	                    aaron-bond.better-comments
4932	                    adpyke.codesnap
4933	                    albymor.increment-selection
4934	                    alefragnani.bookmarks
4935	                    alexisvt.flutter-snippets
4936	                    antfu.slidev
4937	                    anweber.vscode-httpyac
4938	                    arrterian.nix-env-selector
4939	                    bierner.color-info
4940	                    bierner.comment-tagged-templates
4941	                    bierner.docs-view
4942	                    bierner.emojisense
4943	                    bierner.github-markdown-preview
4944	                    bierner.markdown-checkbox
4945	                    bierner.markdown-emoji
4946	                    bierner.markdown-footnotes
4947	                    bierner.markdown-mermaid
4948	                    bierner.markdown-preview-github-styles
4949	                    bmalehorn.vscode-fish
4950	                    bradgashler.htmltagwrap
4951	                    chanhx.crabviz
4952	                    christian-kohler.path-intellisense
4953	                    codezombiech.gitignore
4954	                    coolbear.systemd-unit-file
4955	                    cweijan.vscode-database-client2
4956	                    dart-code.dart-code
4957	                    dart-code.flutter
4958	                    davidanson.vscode-markdownlint
4959	                    dendron.adjust-heading-level
4960	                    dotenv.dotenv-vscode
4961	                    ecmel.vscode-html-css
4962	                    edonet.vscode-command-runner
4963	                    esbenp.prettier-vscode
4964	                    ethansk.restore-terminals
4965	                    fabiospampinato.vscode-open-in-github
4966	                    firefox-devtools.vscode-firefox-debug
4967	                    formulahendry.auto-close-tag
4968	                    formulahendry.auto-rename-tag
4969	                    formulahendry.code-runner
4970	                    foxundermoon.shell-format
4971	                    github.vscode-github-actions
4972	                    github.vscode-pull-request-github
4973	                    grapecity.gc-excelviewer
4974	                    gruntfuggly.todo-tree
4975	                    hars.cppsnippets
4976	                    hbenl.vscode-test-explorer
4977	                    hediet.vscode-drawio
4978	                    ibm.output-colorizer
4979	                    iciclesoft.workspacesort
4980	                    iliazeus.vscode-ansi
4981	                    james-yu.latex-workshop
4982	                    jbockle.jbockle-format-files
4983	                    jellyedwards.gitsweep
4984	                    jkillian.custom-local-formatters
4985	                    jnoortheen.nix-ide
4986	                    jock.svg
4987	                    llvm-vs-code-extensions.vscode-clangd
4988	                    lokalise.i18n-ally
4989	                    mads-hartmann.bash-ide-vscode
4990	                    mechatroner.rainbow-csv
4991	                    meganrogge.template-string-converter
4992	                    mishkinf.goto-next-previous-member
4993	                    mkhl.direnv
4994	                    moshfeu.compare-folders
4995	                    ms-azuretools.vscode-containers
4996	                    ms-azuretools.vscode-docker
4997	                    ms-kubernetes-tools.vscode-kubernetes-tools
4998	                    ms-python.black-formatter
4999	                    ms-python.debugpy
5000	                    ms-python.isort
5001	                    ms-python.python
5002	                    ms-toolsai.datawrangler
5003	                    ms-toolsai.jupyter
5004	                    ms-toolsai.jupyter-keymap
5005	                    ms-toolsai.jupyter-renderers
5006	                    ms-toolsai.vscode-jupyter-cell-tags
5007	                    ms-toolsai.vscode-jupyter-slideshow
5008	                    ms-vscode.anycode
5009	                    ms-vscode.cmake-tools
5010	                    ms-vscode.hexeditor
5011	                    ms-vscode.live-server
5012	                    ms-vscode.makefile-tools
5013	                    ms-vscode.test-adapter-converter
5014	                    njpwerner.autodocstring
5015	                    oderwat.indent-rainbow
5016	                    piousdeer.adwaita-theme
5017	                    platformio.platformio-vscode-ide
5018	                    quicktype.quicktype
5019	                    redhat.vscode-xml
5020	                    redhat.vscode-yaml
5021	                    rioj7.commandonallfiles
5022	                    rubymaniac.vscode-paste-and-indent
5023	                    ryu1kn.partial-diff
5024	                    sanaajani.taskrunnercode
5025	                    shardulm94.trailing-spaces
5026	                    slevesque.vscode-multiclip
5027	                    spywhere.guides
5028	                    stylelint.vscode-stylelint
5029	                    tailscale.vscode-tailscale
5030	                    tamasfe.even-better-toml
5031	                    timonwong.shellcheck
5032	                    usernamehw.errorlens
5033	                    vincaslt.highlight-matching-tag
5034	                    visualstudioexptteam.intellicode-api-usage-examples
5035	                    visualstudioexptteam.vscodeintellicode
5036	                    vscjava.vscode-gradle
5037	                    vscode-icons-team.vscode-icons
5038	                    vspacecode.whichkey
5039	                    wmaurer.change-case
5040	                    xdebug.php-debug
5041	                    zainchen.json
5042	                  ]
5043	                  ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
5044	                    {
5045	                      name = "unique-lines";
5046	                      publisher = "bibhasdn";
5047	                      version = "1.0.0";
5048	                      sha256 = "W0ZpZ6+vjkfNfOtekx5NWOFTyxfWAiB0XYcIwHabFPQ=";
5049	                    }
5050	                    {
5051	                      name = "vscode-sort";
5052	                      publisher = "henriiik";
5053	                      version = "0.2.5";
5054	                      sha256 = "pvlSlWJTnLB9IbcVsz5HypT6NM9Ujb7UYs2kohwWVWk=";
5055	                    }
5056	                    {
5057	                      name = "vscode-sort-json";
5058	                      publisher = "richie5um2";
5059	                      version = "1.20.0";
5060	                      sha256 = "Jobx5Pf4SYQVR2I4207RSSP9I85qtVY6/2Nvs/Vvi/0=";
5061	                    }
5062	                    {
5063	                      name = "pubspec-assist";
5064	                      publisher = "jeroen-meijer";
5065	                      version = "2.3.2";
5066	                      sha256 = "+Mkcbeq7b+vkuf2/LYT10mj46sULixLNKGpCEk1Eu/0=";
5067	                    }
5068	                    {
5069	                      name = "arb-editor";
5070	                      publisher = "Google";
5071	                      version = "0.2.1";
5072	                      sha256 = "uHdQeW9ZXYg6+VnD6cb5CU10/xV5hCtxt5K+j0qb7as=";
5073	                    }
5074	                    {
5075	                      name = "vscode-serial-monitor";
5076	                      publisher = "ms-vscode";
5077	                      version = "0.13.250815001";
5078	                      sha256 = "Fw4n3U3qIdl65qTG1ra/YXgF0zk1NgaV/vFaq/xxZKs=";
5079	                    }
5080	                    {
5081	                      name = "vscode-print";
5082	                      publisher = "pdconsec";
5083	                      version = "1.6.0";
5084	                      sha256 = "Z35K9rwp8lXpIWnCineF1Bsoxy2GwXMgVg/avCS2/h8=";
5085	                    }
5086	                  ];
5087	
5088	                enableUpdateCheck = true;
5089	                enableExtensionUpdateCheck = true;
5090	
5091	                # userSettings = { };
5092	              };
5093	            };
5094	          };
5095	
5096	          yt-dlp = {
5097	            enable = true;
5098	            package = (
5099	              pkgs.yt-dlp.override {
5100	                atomicparsleySupport = true;
5101	                ffmpegSupport = true;
5102	                rtmpSupport = true;
5103	                withAlias = true;
5104	              }
5105	            );
5106	
5107	            settings = {
5108	              no-embed-thumbnail = true;
5109	            };
5110	          };
5111	        };
5112	      }
5113	    ];
5114	
5115	    users.root = { };
5116	    users.bitscoper = { };
5117	
5118	    verbose = true;
5119	  };
5120	}
5121	
5122	# FIXME: 05ac-033e-Gamepad > Rumble
5123	# FIXME: Cockpit > Login
5124	# FIXME: ELAN7001 SPI Fingerprint Sensor
5125	# FIXME: MariaDB > Login
5126	# FIXME: Unified Greeter and Lockscreen Themes
5127	# FIXME: Wofi > Window > Border Radius > Transperant Background
5128