{inputs, pkgs, system, theme, ...}: {

  imports = [ 
    inputs.stylix.nixosModules.stylix
    ../../../../stylix/themes/${theme}
  ];

  stylix  = {
    image = /etc/nixos/git/wallpapers/${theme}/wallpaper1.png;
    opacity = {
      desktop = 0.7;
      popups = 0.7;
      applications = 1.0;
      terminal = 1.0;
    };
    targets = {
      plymouth.enable = false;
    };
    autoEnable = true;
    fonts = {
      serif = {
        package = pkgs.dejavu_fonts;
        name = "DejaVu Serif";
      };

      sansSerif = {
        package = pkgs.dejavu_fonts;
        name = "DejaVu Sans";
      };

      monospace = {
        package = pkgs.dejavu_fonts;
        name = "DejaVu Sans Mono";
      };

      emoji = {
        package = pkgs.noto-fonts-emoji;
        name = "Noto Color Emoji";
      };
    };
  };
  
  # tuigreet
  services.greetd = {
    enable = true;
    settings = {
      default_session = {
        command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland";
        user = "greeter";
      };
    };
  };

  # Brightness and volume control
  # https://haikarainen.github.io/light/
  programs.light.enable = true;
  # PolKit for the fingerprint reader
  security.polkit.enable = true;
  # https://github.com/NixOS/nixpkgs/issues/143365
  security.pam.services.swaylock = {}; 
  
  # Enabling hyprlnd on NixOS
  programs.hyprland = {
    enable = true;
    # enableNvidiaPatches = true;
    xwayland.enable = true;
  };

  environment.sessionVariables = {
    # If your cursor becomes invisible, set this to 1
    WLR_NO_HARDWARE_CURSORS = "0";
    # Hint electron apps to use wayland
    NIXOS_OZONE_WL = "1";
  };

  # https://www.freedesktop.org/software/systemd/man/logind.conf.html 
  services.logind.extraConfig = ''
    IdleActionSec=900
    IdleAction=suspend-then-hibernate
    HandleLidSwitch=suspend-then-hibernate
    HandleLidSwitchDocked=ignore
    HandleLidSwitchExternalPower=suspend
  '';

  # https://www.systutorials.com/docs/linux/man/5-systemd-sleep.conf/ 
  # HibernateDelaySec is the amount of time the
  # system sleeps before entering hibernate when
  # using suspend-then-hibernate
   systemd.sleep.extraConfig = ''
     AllowSuspend=yes
     AllowHibernation=yes
     AllowSuspendThenHibernate=yes
     HibernateDelaySec=600
   '';

  # XDG portal
  xdg.portal.enable = true;
  xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ];

  # system packages
  environment.systemPackages = [
    pkgs.waybar               # taskbar
    pkgs.libnotify            # Notification libraries
    pkgs.mako                 # Notification daemon
    pkgs.swww                 # Wallpaper daemon
    pkgs.kitty                # Terminal emulator
    pkgs.grim                 # Screenshots
    pkgs.slurp                # Screenshots
    pkgs.wl-clipboard         # Clipboard
    pkgs.font-awesome         # Fonts
    pkgs.libinput-gestures    # Gesture Control
    pkgs.playerctl            # Control sublime-music from waybar?
    pkgs.pavucontrol          # Pulse Audio Volume CONTROL
    pkgs.glib                 # Set GTK theme settings
    pkgs.greetd.tuigreet      # Greeter
    pkgs.swayidle             # Idle management daemon - Automatic lock screen
    pkgs.swayosd              # used for on-screen notifications for things like adjusting backlight, volume, etc
    pkgs.wlogout              # Logout/shutdown/hibernate/lock screen modal UI
    pkgs.ranger               # TUI file manager
    pkgs.xdg-utils            # Utilities for better X/Wayland integration
    pkgs.bitwarden-cli        # Bitwarden for rofi
    pkgs.bitwarden-menu       # Bitwarden for rofi
    pkgs.pulsemixer           # TUI Pipewire  / volume management
    pkgs.calcurse             # TUI Calendar app
    pkgs.udiskie              # Automatic device mounting
    pkgs.cava                 # Audio visualiser
    pkgs.gomuks               # CLI Matrix client 
    pkgs.pyradio              # Internet radio TUI

    # Themes
    pkgs.gruvbox-gtk-theme    # Gruvbox Theme
    pkgs.papirus-icon-theme   # Papirus Icons

    pkgs.rofi-wayland         # App Launcher
    pkgs.rofi-rbw-wayland     # Front-end for Bitwarden with Rofi

    # wayland-packages
    inputs.nixpkgs-wayland.packages.${system}.wayprompt  # from nixpkgs-wayland exclusively - pinentry UI
  ];

  # Enable sound with pipewire.
  sound.enable = true;
  security.rtkit.enable = true;
  services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
    jack.enable = true;
  };
}