My NixOS

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