My NixOS

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

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