My NixOS

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