bitscoper.dev

My NixOS

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

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