{ config, lib, pkgs, inputs, ... }: let cfg = config.modules.global; binaryninja = pkgs.callPackage ../packages/binaryninja.nix { inherit pkgs; }; ida = pkgs.callPackage ../packages/ida.nix { inherit pkgs; }; scheme = config.modules.scheme; in { imports = [ ./default.nix ]; options.modules.global = with lib.options; { notNixOS = mkOption { type = lib.types.bool; default = false; description = "Whether nix is running outside of NixOS."; }; wayland = mkEnableOption "Wayland"; extraPackages = mkOption { type = with lib.types; listOf package; description = "List of extra packages to install"; example = [ pkgs.cowsay pkgs.lolcat ]; default = [ ]; }; menu = mkOption { type = lib.types.submodule { package = lib.types.package; dmenu = lib.mkOption { type = lib.types.pathInStore; description = "derivation that will behave like dmenu"; example = pkgs.dmenu; default = pkgs.fuzzel; }; }; }; }; config = { modules = rec { global = { wayland = lib.mkDefault true; }; firefox.enable = true; sway = { wrapWithNixGL = cfg.notNixOS; }; qutebrowser = { wrapWithNixGL = cfg.notNixOS; }; email.enable = true; aerc.enable = true; zsh.enable = true; tmux.enable = true; fzf.enable = true; git.enable = true; lazygit.enable = true; fuzzel.enable = true; zathura.enable = true; weechat.enable = true; }; nixGL = lib.mkIf cfg.notNixOS { packages = inputs.nixgl.packages; defaultWrapper = "mesa"; }; programs = { home-manager.enable = true; direnv = { enable = true; enableZshIntegration = true; enableBashIntegration = true; silent = true; }; }; fonts.fontconfig = { enable = true; defaultFonts = { monospace = [ "AdwaitaMono Nerd Font Mono" "NotoMono Nerd Font Mono" ]; sansSerif = [ "Adwaita Sans" "Noto Sans" ]; serif = [ "Noto Serif" ]; emoji = [ "Noto Color Emoji" ]; }; }; dconf = { enable = true; settings = { "org/gnome/desktop/interface" = { color-scheme = "${if scheme.light then "prefer-light" else "prefer-dark"}"; }; "org/gnome/shell" = { disable-user-extensions = false; enabled-extensions = with pkgs.gnomeExtensions; [ blur-my-shell.extensionUuid ]; }; }; }; gtk = { enable = true; gtk3.extraConfig.gtk-application-prefer-dark-theme = if scheme.light then 0 else 1; gtk4.extraConfig.gtk-application-prefer-dark-theme = if scheme.light then 0 else 1; theme = { name = "${if scheme.light then "Adwaita" else "Adwaita-dark"}"; package = pkgs.gnome-themes-extra; }; # iconTheme = { # name = "Adwaita-dark"; # package = pkgs.adwaita-icon-theme; # }; }; qt = { enable = true; platformTheme.name = "adwaita"; style = { package = pkgs.adwaita-qt; name = "${if scheme.light then "adwaita" else "adwaita-dark"}"; }; }; targets.genericLinux.enable = cfg.notNixOS; home = { username = "stefan"; homeDirectory = "/home/stefan"; stateVersion = "24.11"; shell.enableZshIntegration = true; sessionPath = [ "$HOME/.local/opt/binaryninja/bin" "$HOME/scripts" ]; packages = with pkgs; [ eza fanwood jq ripgrep elan dmenu binaryninja ida tamzen roboto roboto-serif cozette inter adwaita-fonts noto-fonts noto-fonts-cjk-sans noto-fonts-cjk-serif noto-fonts-color-emoji material-icons # (callPackage ida-pro { # runfile = /nix/store/s9gq70w56355yrg33054g97zscr3r64i-ida-pro_91_x64linux.run; # }) ] ++ (builtins.filter lib.attrsets.isDerivation (builtins.attrValues pkgs.nerd-fonts)) ++ (lib.optional cfg.notNixOS nixgl.auto.nixGLDefault) ++ (lib.optionals cfg.wayland [ wl-clipboard #... ]) ++ cfg.extraPackages; }; }; }