RVV2KSCIXFU4HLXELZV67QDRTKG7OU6FZHFMPYO6HN6ISXPALX6QC 4SBHPC3PZB66O3Y6UU2IZDF5Y5XJCD7WV4QTOVAGUSY5FT3VPZGQC QXSVCQ357NUASIOTO66MRUSBC2LR7WFIWW46OF4UBUIJZVHNKDNQC NC7UU7NY53VETOZLU2DEE34J2DA2SLQXD6LZM3XIHT6SKB6EPKKQC 5PACT4YBGSPNI7A3TV3YUZBSN2JVIM35EMQLDL5RW37TCIUB44AAC ONJIY3TNGUJSQ4HRL2AIMDKYWYFICVZAHRU2GVY7LZ7ULWPY7NWQC Q4YJRVCNJZUR55LSGY73UWTJGXBAXQQEDB24I5Q4HBXT3QNR6TDAC PQFRJ5J2JHDFKDSVDFJK7DTIGSCDXIZITJ54O5DJSPLQOSLRAWIAC 25NNQ2Y4GSN634KW6GJJCXSY7NBK7WVDA5LT4GFOKUD2DVNMTIJAC L6SN5PMKPZ2VPVJAH2G64EU3T6L5XOWVDH7DP7RU4EC2TU377RPAC NLGCV3BRXEQ6DRHZUCKU2F7DLEEYMB2F56NJP7LBPUWJGZ2A7DVAC QGSSRFA57VPLML5JN23BSJRXSYKTIALASQ3NFCVDWAXVZGP7JUKAC OX4Y4L3TFQRGLQNAZRJ4XTA75AIRBH7ZREAMWPXRKDHTUJYODI5QC E5WANV7PYNPZFSJE4AMZABQ76TUNKVZN3M6ZFD5V6CKAFKG444NAC DLYS2ZRMQX7EHH352WIP7OYXL5WRZG2ODQHJR3LEOR3P2QIAAS3AC TS7WMBCXZGCVPYD7XITC3FSRX43GPFEBHBVQRTXKWMDRHLMZICYAC KOKKSLOTQ5PSEOAEG4TGKYDRZVMFMA4XBH6KWYK2HTMD7M5CJAOQC CE6B4WAWIVJWL6YOKBOFJURBDM57MLRTOA6ZYJNW6CLUTKFCCORQC SEUPUO76DSRTO4DFOIGCENEYEV6PE5FK2RRHXFSHH52P7UW4V45QC YGLYNBOJLMAK6AA6FK6EVSV6HXZNLSRG3XR2NHGEZTCUXWQWU57AC USA5NQJAPQIM3Y64IIHREDDOBZWAM6VDI4JTCFFU5X3TENEDILXQC 4KIK3RDHXZRZ3E4OTZ26F6DUDWNKR3ZDH446O4COUNN3WAS2FOTAC YVX32TAPGYVZ255ITOPRIPIZNF62YPIWRXTA7FZF32QP25WWGWHAC R36IZCTWXEBLDR5AT7B4TCAJLFNJTMETHZVT7M73L2BKVTYRTCBQC KSEFLQSN3XGXQP3JMMXSALBN2Y4WSQBGU4UY76UIOB7NUMJ7QOEAC ZWZAFUAL4EJP4R44XYSZG6KJR5XTURDWAL7NOBFKUP6NLRUA6U6QC ADWCOO2XCHI4TMAWVB7JZQGQESEQD3ZYAIBHDMVEVLXMYJFFGPEAC AC36PU6A3WCWD362UV66XAZAIUDXYGW7XYE6M4VYPCUAX2BZ4IBAC 6BF2X5F5G5SMRD6KVPCXRQVKTQVNIHYS6X4W6PHXKFYR2SGJSZXAC QOY7D3GZ3WF7HAMEHAW2CIUB5TDQCFE3YDZEO23R5MFQEBN635WAC I24IYFMOTYSSI3LAZ2PWUZP5LU4ULNPBHZDVIFDMI4WTIBGLEZJQC 5G7WRBMWKG6DMCOHE6WQHTYZACUHO2UPBZRWN72CFH7P45NN5E7QC TGXVRQU53E3KY7XVAXCIZIKSJMHQXMK4QKWZQ7UJHRFEFGZEAAKQC HQ4UTQK5UQXMEUZRYQSCTEKW73UZLJQHPA4YD75FCKBKHS5NMJOAC GB7WCUSTYHJ642OLGSZXO34V3KDZ23WQGTMNYMJ6FMOHDGDR445QC 52JZLFIA4TLBPX2OACDOZ4BKNX3TJ33W5O2ZP7ACKI34N7RBZQVQC QRPPLHLL6YZU3Z35JNJFXHMBY3BX4THHN4AMWDFCUSFHYAHWTRHAC EIFSYSBVD56R2PMNUZGNUQY5G4FT3XIJ2XYXVTWAUBSZ2UVHVA4QC XKLU6AI77S2VQHSCEXGPZVXB6ZZDSJ4WX3ZAKOQ2WYVQLNN3F56AC LFQQPAE4OQEWK4MRAB4VDAWRXRHWKSACGRL3XDGGXC3UMWPW2J3QC HBSVMHMQ2CQFZXFPIECPGNT7DB46YEHSE72BB4XGHKPS4IPNKYLQC IBNPMUOIC6ZWL5D2YK5HNBQ23FSLCKGDD4B7B77VDXHHW4E7FY3AC OMXTKMQWU63DLVBH4PPK3RN6NHLE4E77T7LM6VGHWQZBXLMG5GVQC Y6NY2LPV67XLNG26FLTYIMRLNVBJN3HVHXF6NIOB4Q6X43LE3NMAC FT4V4T6UC4M7I6OYWYJPZIUYQH6YJXIUQIBI7PLD6S3VRI7PVMHAC SCB7IK7YNYAR3WTV2XYGPYCGCUW2GPJSWAA5S2ZGCYSZ5AZKXIDAC XRIQFCB3Y7NWW3ZV45TX5IC6IW6JOPDRIXSTBNFTUVRWEYOFKAGQC ULAK3OU5SJALLFJJ2IWYE5RSFJ2GE6KITFGXAGJQETFUCJIZLSRAC WRZ7ISE3YY7EIZPX3YOQOGZ3R6O3E5XEFB7SV74JC3WBSWZZAEVQC height = config.theme.radius * 8;margin-top = config.theme.margin;margin-left = config.theme.margin;margin-right = config.theme.margin;
height = config.theme.margin.big;margin-top = config.theme.margin.normal;margin-left = config.theme.margin.normal;margin-right = config.theme.margin.normal;
linear-gradient(rgba(${builtins.concatStringsSep ", " (map toString config.theme.withRgb.base00)}, 0.8), rgba(${builtins.concatStringsSep ", " (map toString config.theme.withRgb.base00)}, 0.8)) padding-box,
linear-gradient(rgba(${builtins.concatStringsSep ", " (map toString config.theme.withRgb.base00)}, (toString config.theme.opacity.verylow)), rgba(${builtins.concatStringsSep ", " (map toString config.theme.withRgb.base00)}, (toString config.theme.opacity.verylow)) padding-box,
border: ${toString (config.theme.border / 2)}px solid transparent;border-radius: ${toString (config.theme.radius * 2)}px;
border: ${toString (config.theme.border.small)}px solid transparent;border-radius: ${toString (config.theme.radius.big)}px;
padding: 0 ${toString config.theme.padding}px;border: ${toString (config.theme.border / 2)}px solid transparent;border-radius: ${toString config.theme.radius}px;
padding: 0 ${toString config.theme.padding.normal}px;border: ${toString (config.theme.border.small)}px solid transparent;border-radius: ${toString config.theme.radius.normal}px;
margin-left: ${toString config.theme.margin}px;padding: 0 ${toString config.theme.padding}px;
margin-left: ${toString config.theme.margin.normal}px;padding: 0 ${toString config.theme.padding.normal}px;
^${pkgs.kitty}/bin/kitty --detach --class $class_name --title "Process Monitor" --override remember_window_size=no --override initial_window_width=44c --override initial_window_height=16c --override window_padding_width=${toString (config.theme.padding / 2)} ${pkgs.btop}/bin/btop --config ${btopPopupConfig}
^${pkgs.kitty}/bin/kitty --detach --class $class_name --title "Process Monitor" --override remember_window_size=no --override initial_window_width=44c --override initial_window_height=16c --override window_padding_width=${toString (config.theme.padding.small)} ${pkgs.btop}/bin/btop --config ${btopPopupConfig}
"Mod+Minus".action = set-column-width "-10%";"Mod+Equal".action = set-column-width "+10%";
"Mod+Minus".action = set-column-width "-10%";"Mod+Equal".action = set-column-width "+10%";"Mod+Shift+Minus".action = set-window-height "-10%";"Mod+Shift+Equal".action = set-window-height "+10%";
padding = config.theme.padding;horizontal_padding = config.theme.padding;corner_radius = config.theme.radius * 2;frame_width = config.theme.border;
padding = config.theme.padding.normal;horizontal_padding = config.theme.padding.normal;corner_radius = config.theme.radius.big;frame_width = config.theme.border.normal;
{ pkgs, config, ... }:letinherit (config.theme) is_dark;themes = {alacritty.dark = "gruvbox_material_hard_dark";alacritty.light = "gruvbox_material_hard_light";zellij.dark = "gruvbox-dark";zellij.light = "gruvbox-light";starship.dark = "dark_theme";starship.light = "light_theme";vivid.dark = "gruvbox-dark";vivid.light = "gruvbox-light";nushell.dark = "dark-theme";nushell.light = "light-theme";helix.dark = "gruvbox_dark_hard";helix.light = "gruvbox_light_hard";gtk.dark = {name = "Adwaita-dark";package = pkgs.gnome-themes-extra;};gtk.light = {name = "Adwaita";package = pkgs.gnome-themes-extra;};qt.dark = {name = "adwaita-dark";platformTheme = "adwaita";};qt.light = {name = "adwaita";platformTheme = "adwaita";};icons.dark = {name = "Gruvbox-Plus-Dark";package = pkgs.gruvbox-plus-icons;};icons.light = {name = "Papirus-Light";package = pkgs.papirus-icon-theme;};# Wallpapers are managed by swww - use pick-wallpaper or set-wallpaper commands.# Pywal colors are generated from the current wallpaper when switching themes.};# Helpers.get_theme = program: if is_dark then themes.${program}.dark else themes.${program}.light;in{config.theme = {icons = get_theme "icons";# Program-specific theme names.alacritty = get_theme "alacritty";zellij = get_theme "zellij";starship = get_theme "starship";vivid = get_theme "vivid";nushell = get_theme "nushell";helix = get_theme "helix";gtk = get_theme "gtk";qt = get_theme "qt";# Expose raw theme definitions for flexibility.themes = themes;};}
{ lib, config, ... }:letinherit (lib) mkOption types mkIf enabled;in{imports = lib.collectNix ./.|> lib.remove ./default.nix;# Define theme as a top-level option that all modules can access via config.theme.options.theme = mkOption {type = types.attrs;default = {};description = "Global theme configuration";};config.theme = {# Shared design system.radius = {small = 2;normal = 4;big = 6;verybig = 8;};border = {small = 2;normal = 4;big = 6;};margin = {small = 4;normal = 8;big = 32;};padding = {small = 4;normal = 8;};opacity = {opaque = 1.00;veryhigh = 0.98;high = 0.97;medium = 0.94;low = 0.90;verylow = 0.80;};duration = {s = {short = 0.5;normal = 1.0;long = 1.5;};ms = {short = 150;normal = 200;long = 300;};};};config.home-manager.sharedModules = mkIf config.isDesktopNotWsl [(homeArgs: {programs.pywal = enabled;xdg.desktopEntries.dark-mode = {name = "Dark Mode";exec = ''nu -l -c "tt dark"'';terminal = false;};xdg.desktopEntries.light-mode = {name = "Light Mode";exec = ''nu -l -c "tt light"'';terminal = false;};})];}
themes = {alacritty.dark = "gruvbox_material_hard_dark";alacritty.light = "gruvbox_material_hard_light";zellij.dark = "gruvbox-dark";zellij.light = "gruvbox-light";starship.dark = "dark_theme";starship.light = "light_theme";vivid.dark = "gruvbox-dark";vivid.light = "gruvbox-light";nushell.dark = "dark-theme";nushell.light = "light-theme";helix.dark = "gruvbox_dark_hard";helix.light = "gruvbox_light_hard";
gtk.dark = {name = "Adwaita-dark";package = pkgs.gnome-themes-extra;};gtk.light = {name = "Adwaita";package = pkgs.gnome-themes-extra;};
variant = if is_dark then "dark" else "light";
qt.dark = {name = "adwaita-dark";platformTheme = "adwaita";};qt.light = {name = "adwaita";platformTheme = "adwaita";};icons.dark = {name = "Gruvbox-Plus-Dark";package = pkgs.gruvbox-plus-icons;};icons.light = {name = "Papirus-Light";package = pkgs.papirus-icon-theme;};# Wallpapers are managed by swww - use pick-wallpaper or set-wallpaper commands.# Pywal colors are generated from the current wallpaper when switching themes.};# Helpers.get_theme = program: if is_dark then themes.${program}.dark else themes.${program}.light;variant = if is_dark then "dark" else "light";
# Define theme as a top-level option that all modules can access via config.theme.options.theme = mkOption {type = types.attrs;default = {};description = "Global theme configuration";};# Set the theme values.
# Core theme state.is_dark = is_dark;color_scheme = color_scheme;variant = variant;# Base16 color scheme.inherit colors;
inherit# Core theme state.is_darkcolor_schemevariant# Base16 color scheme.colors;
withHash = lib.mapAttrs (name: value: "#${value}") colors;with0x = lib.mapAttrs (name: value: "0x${value}") colors;withRgb = lib.mapAttrs (name: value: hexToRgb value) colors;# Shared design system.radius = 4;border = 4;margin = 8;padding = 8;# Font configuration.font = {size.small = 12;size.normal = 16;size.big = 20;mono.name = "JetBrainsMono Nerd Font";mono.family = "JetBrainsMono Nerd Font Mono";mono.package = pkgs.nerd-fonts.jetbrains-mono;sans.name = "Lexend";sans.package = pkgs.lexend;};icons = get_theme "icons";# Program-specific theme names.alacritty = get_theme "alacritty";zellij = get_theme "zellij";starship = get_theme "starship";vivid = get_theme "vivid";nushell = get_theme "nushell";helix = get_theme "helix";gtk = get_theme "gtk";qt = get_theme "qt";# Expose raw theme definitions for flexibility.themes = themes;
withHash = lib.mapAttrs (name: value: "#${value}") colors;with0x = lib.mapAttrs (name: value: "0x${value}") colors;withRgb = lib.mapAttrs (name: value: hexToRgb value) colors;
config.home-manager.sharedModules = mkIf config.isDesktopNotWsl [(homeArgs: {programs.pywal = enabled;xdg.desktopEntries.dark-mode = {name = "Dark Mode";exec = ''nu -l -c "tt dark"'';terminal = false;};xdg.desktopEntries.light-mode = {name = "Light Mode";exec = ''nu -l -c "tt light"'';terminal = false;};})];