{ config, pkgs, lib, ... }: let inherit (lib) mkIf mkOption mkEnableOption types mdDoc lists ; cfg = config.custom.hyprdesktop; in { imports = [ ../home/minimal.nix ]; options.custom.hyprdesktop = { enable = mkEnableOption "Enable hyprdesktop"; mainUser = mkOption { type = types.str; example = "alice"; description = mdDoc "Main superuser's username."; }; hasBluetooth = mkOption { type = types.bool; default = false; example = "true"; }; hasBrightnessCtl = mkOption { type = types.bool; default = false; example = "true"; }; hasBattery = mkOption { type = types.bool; default = false; example = "true"; }; enableGaming = mkOption { type = types.bool; default = false; example = "true"; }; enableWindowsCompat = mkOption { type = types.bool; default = false; example = "true"; }; enableGitAnnex = mkOption { type = types.bool; default = true; example = "false"; }; }; config = mkIf cfg.enable { wayland.windowManager.hyprland.enable = true; home.packages = with pkgs; [ wireplumber # session & policy manager for pipewire grim # screenshot utility for wayland slurp # region selection UI for wayland wl-clipboard # clipboard utility sl jaq # json query tool # tools for dealing with all sorts archives atool zip unzip gnutar unrar-wrapper gzip # other random CLI's fzf wget xdg-utils yazi # TUI file manager pandoc rsync rclone nushell ffmpeg imagemagick yt-dlp pkgs.nur.repos.sorre.lightnovel-crawler # TUI/GUI programs thunderbird # email client nsxiv # image viewer signal-desktop whatsapp-for-linux qbittorrent # bittorrent client zathura # document reader foliate nyxt bitwarden discord element-desktop gimp libreoffice-qt6-fresh kdePackages.kdenlive blender haruna anki calibre qutebrowser mullvad-vpn # Other # It seems that not all gtk icon themes contain all icons? At least the # Flat-Remix icon themes don't contain all the icons that Foliate uses, # so I'm bringing in the adwaita icons as a fallback. adwaita-icon-theme ] ++ lists.optionals cfg.hasBluetooth [ overskride ] ++ lists.optionals cfg.enableGaming [ prismlauncher jdk17_headless wineWowPackages.wayland aisleriot heroic ] ++ lists.optionals (cfg.enableWindowsCompat || cfg.enableGaming) [ wineWowPackages.wayland qemu_kvm ] ++ lists.optionals cfg.hasBrightnessCtl [ brightnessctl ] ++ lists.optionals cfg.enableGitAnnex [ git-annex git-remote-gcrypt ]; home.pointerCursor = { gtk.enable = true; package = pkgs.vanilla-dmz; name = "Vanilla-DMZ"; size = 20; }; home.shellAliases = { sl = "sl -awFc5"; }; services.dunst.enable = true; services.wpaperd.enable = true; services.poweralertd.enable = cfg.hasBattery; programs.mpv.enable = true; programs.jujutsu.enable = true; programs.foot.enable = true; programs.waybar.enable = true; programs.librewolf.enable = true; programs.tofi.enable = true; programs.gallery-dl.enable = true; programs.fish.enable = true; programs.eza.enable = true; xdg.portal = { enable = true; extraPortals = [ pkgs.kdePackages.xdg-desktop-portal-kde ]; xdgOpenUsePortal = true; config = { kde = { default = [ "kde" ]; "org.freedesktop.impl.portal.Secret" = [ "kwallet" ]; }; hyprland.default = [ "hyprland" ]; }; }; gtk = { theme = { package = pkgs.flat-remix-gtk; name = "Flat-Remix-GTK-Blue-Darkest"; }; iconTheme = { package = pkgs.flat-remix-icon-theme; name = "Flat-Remix-Blue-Dark"; }; }; }; }