{ config, pkgs, lib, ... }: let inherit (lib) mkIf mkOption mkEnableOption types mdDoc lists ; cfg = config.custom.hyprdesktop; python = pkgs.python313.withPackages ( python-pkgs: with python-pkgs; [ beautifulsoup4 types-beautifulsoup4 requests python-lsp-server ruff rdflib ] ); 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 mullvad # 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 (pass-nodmenu.withExtensions (exts: [ exts.pass-otp ])) rsync rclone nushell ffmpeg imagemagick yt-dlp pkgs.nur.repos.sorre.lightnovel-crawler # Developer stuff git gitui scheme-manpages guile gcc rustup just gnumake uv web-ext nodejs_23 bun python (llama-cpp.override { openclSupport = true; vulkanSupport = true; }) # TUI/GUI programs thunderbird # email client aerc # email client nsxiv # image viewer signal-desktop whatsapp-for-linux qbittorrent # bittorrent client zathura # document reader foliate nyxt zed-editor bitwarden discord element-desktop gimp libreoffice-qt6-fresh kdePackages.kdenlive blender haruna anki calibre koboldcpp # 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.file.guile-init = { target = ".guile"; text = '' (use-modules (ice-9 readline)) (activate-readline) ''; }; 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; services.emacs.enable = true; programs.mpv.enable = true; programs.git.enable = true; programs.jujutsu.enable = true; programs.foot.enable = true; programs.waybar.enable = true; programs.firefox.enable = true; programs.tofi.enable = true; programs.aerc.enable = true; programs.gallery-dl.enable = true; programs.fish.enable = true; programs.eza.enable = true; programs.zoxide.enable = true; programs.senpai.enable = true; programs.direnv.enable = true; programs.direnv.nix-direnv.enable = true; programs.helix = { enable = true; defaultEditor = 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"; }; }; }; }