{inputs, pkgs, pkgs-unstable, theme, ...}: {

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

  stylix  = {
    enable = true;
    autoEnable = true;
    opacity = {
      desktop = 0.7;
      popups = 0.7;
      applications = 1.0;
      terminal = 1.0;
    };
    targets = {
      plymouth.enable = false;
    };
    cursor = {
      size = 24;
    };
    fonts = {
      sizes = {
        desktop = 12;
        popups = 12;
        terminal = 12;
        applications = 12;
      };
      serif = {
        package = pkgs.hack-font;
        name = "Hack Nerd Font Regular";
      };
      sansSerif = {
        package = pkgs.hack-font;
        name = "Hack Nerd Font Regular";
      };
      monospace = {
        package = pkgs.hack-font;
        name = "Hack Nerd Font Mono Regular";
      };
      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;
    # package = inputs.hyprland.packages.${pkgs.system}.hyprland;
    # 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-unstable.rofi-wayland-unwrapped         # App Launcher
    pkgs-unstable.rofi-rbw-wayland     # Front-end for Bitwarden with Rofi
  ];

  # 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 = false;
  };
}