{ config, lib, ... }: let palette = (import ./_kanagawa-palette.nix).palette; hex = lib.removePrefix "#"; wallpaper = ./assets/green-leaves.png; cursor = { name = "phinger-cursors-light"; size = 24; }; in { flake.modules.nixos.theme = { pkgs, ... }: { home-manager.sharedModules = [ config.flake.modules.homeManager.theme ]; environment.systemPackages = [ pkgs.phinger-cursors ]; }; flake.modules.homeManager.theme = { pkgs, ... }: let version = "unstable-2025-10-23"; src = pkgs.fetchFromGitHub { owner = "Fausto-Korpsvart"; repo = "Kanagawa-GKT-Theme"; rev = "55ca4ba249eba21f861b9866b71ab41bb8930318"; hash = "sha256-UdMoMx2DoovcxSp/zBZ3PRv/Qpj+prd0uPm1gmdak2E="; }; kanagawaGtkTheme = pkgs.stdenvNoCC.mkDerivation { pname = "kanagawa-gtk-theme"; inherit src version; nativeBuildInputs = [ pkgs.sassc ]; installPhase = '' runHook preInstall mkdir -p "$out/share/themes" bash ./themes/install.sh \ --dest "$out/share/themes" \ --name Kanagawa \ --color dark rm -r "$out/share/themes/Kanagawa-Dark/gtk-2.0" runHook postInstall ''; }; in { home.pointerCursor = cursor // { enable = true; package = pkgs.phinger-cursors; dotIcons.enable = false; gtk.enable = true; }; gtk = { enable = true; theme = { name = "Kanagawa-Dark"; package = kanagawaGtkTheme; }; gtk4.theme = null; iconTheme = { name = "Kanagawa"; package = pkgs.kanagawa-icon-theme.overrideAttrs (_: { inherit src version; }); }; }; qt = { enable = true; platformTheme.name = "gtk3"; }; xdg.systemDirs.data = [ "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}" "${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}" ]; }; flake.modules.nixos.limine = { config, pkgs, ... }: let terminalPalette = palette.terminal; mkPalette = colors: lib.concatStringsSep ";" (map hex colors); in { boot.loader.limine.style = { wallpapers = [ pkgs.nixos-artwork.wallpapers.simple-dark-gray-bootloader.gnomeFilePath ]; wallpaperStyle = "stretched"; backdrop = hex palette.secondaryBackground; graphicalTerminal = { # TT is transparency: let the boot wallpaper show through the terminal. background = "FF${hex palette.background}"; foreground = hex palette.foreground; brightForeground = hex palette.selectionForeground; brightBackground = hex palette.selectionBackground; palette = mkPalette [ terminalPalette.color0 terminalPalette.color1 terminalPalette.color2 terminalPalette.color3 terminalPalette.color4 terminalPalette.color5 terminalPalette.color6 terminalPalette.color7 ]; brightPalette = mkPalette [ terminalPalette.color8 terminalPalette.color9 terminalPalette.color10 terminalPalette.color11 terminalPalette.color12 terminalPalette.color13 terminalPalette.color14 terminalPalette.color15 ]; font = { scale = "2x2"; spacing = 1; }; margin = 64; marginGradient = 0; }; interface = { branding = config.networking.hostName; brandingColor = hex palette.accents.blue; }; }; }; flake.modules.nixos.noctalia-greeter = { pkgs, ... }: { services.displayManager.noctalia-greeter = { cursorTheme = { package = pkgs.phinger-cursors; name = cursor.name; }; settings = { appearance = { scheme = "Synced"; password_style = "default"; hide_logo = true; power_buttons_position = "bottom-right"; scheme_selector_position = "hidden"; theme_mode = "dark"; corner_radius_scale = 1.0; font_family = "Lexend"; palette = { primary = palette.terminal.color2; on_primary = palette.background; secondary = palette.terminal.color3; on_secondary = palette.background; tertiary = palette.terminal.color4; on_tertiary = palette.background; error = palette.terminal.color1; on_error = palette.background; surface = palette.background; on_surface = palette.selectionForeground; surface_variant = "#2A2A37"; on_surface_variant = "#717C7C"; outline = "#363646"; shadow = palette.background; hover = palette.terminal.color4; on_hover = palette.background; }; wallpaper = { path = toString wallpaper; fill_mode = "crop"; fill_color = palette.background; }; }; cursor.size = cursor.size; }; }; }; flake.modules.nixos.plymouth = { pkgs, ... }: { boot.plymouth = { theme = "spinner_alt"; themePackages = [ pkgs.adi1090x-plymouth-themes ]; }; }; flake.modules.homeManager.terminal-kitty = { programs.kitty = { settings = { bold_font = "postscript_name=JetBrainsMono-Bold"; bold_italic_font = "postscript_name=JetBrainsMono-BoldItalic"; }; font = { name = "JetBrains Mono"; size = 11; }; extraConfig = '' # Nerd Fonts v3.4.0 symbol_map U+e000-U+e00a,U+e0a0-U+e0a2,U+e0a3,U+e0b0-U+e0b3,U+e0b4-U+e0c8,U+e0ca,U+e0cc-U+e0d7,U+e200-U+e2a9,U+e300-U+e3e3,U+e5fa-U+e6b7,U+e700-U+e8ef,U+ea60-U+ec1e,U+ed00-U+efce,U+f000-U+f2ff,U+f300-U+f381,U+f400-U+f533,U+f0001-U+f1af0 Symbols Nerd Font Mono ## name: Kanagawa Wave ## license: MIT ## author: Tommaso Laurenzi ## upstream: https://github.com/rebelot/kanagawa.nvim/ background ${palette.background} foreground ${palette.foreground} selection_background ${palette.selectionBackground} selection_foreground ${palette.selectionForeground} url_color ${palette.url} cursor ${palette.cursor} active_tab_background ${palette.background} active_tab_foreground ${palette.selectionForeground} inactive_tab_background ${palette.background} inactive_tab_foreground ${palette.muted} color0 ${palette.terminal.color0} color1 ${palette.terminal.color1} color2 ${palette.terminal.color2} color3 ${palette.terminal.color3} color4 ${palette.terminal.color4} color5 ${palette.terminal.color5} color6 ${palette.terminal.color6} color7 ${palette.terminal.color7} color8 ${palette.terminal.color8} color9 ${palette.terminal.color9} color10 ${palette.terminal.color10} color11 ${palette.terminal.color11} color12 ${palette.terminal.color12} color13 ${palette.terminal.color13} color14 ${palette.terminal.color14} color15 ${palette.terminal.color15} color16 ${palette.terminal.color16} color17 ${palette.terminal.color17} ''; }; }; flake.modules.homeManager.niri = { dconf.settings."org/gnome/desktop/interface".color-scheme = "prefer-dark"; wayland.windowManager.niri.settings.layout.border = { active-color = palette.accents.blue; inactive-color = palette.subtleBorder; urgent-color = palette.accents.red; }; }; flake.modules.homeManager.ai = { xdg.configFile."herdr/config.toml".text = lib.mkAfter '' [theme] name = "kanagawa" auto_switch = false ''; }; flake.modules.homeManager.noctalia = { programs.noctalia.settings = { shell.font_family = "Lexend"; theme = { builtin = "Kanagawa"; community_palette = "Kanagawa Paper"; wallpaper_scheme = "m3-content"; }; wallpaper = { default.path = toString wallpaper; last.path = toString wallpaper; }; }; }; flake.modules.homeManager.neovim = { pkgs, ... }: { wrappers.neovim.specs.theme = { data = pkgs.vimPlugins.kanagawa-nvim; before = [ "INIT_MAIN" ]; config = '' require("kanagawa").setup({ dimInactive = true, colors = { theme = { all = { ui = { bg_gutter = "none" }, }, }, }, }) vim.cmd.colorscheme("kanagawa-wave") ''; }; }; flake.modules.homeManager.walker = { programs.walker.themes.constellation.style = lib.mkAfter '' @define-color window_bg_color ${palette.background}; @define-color accent_bg_color ${palette.selectionBackground}; @define-color theme_fg_color ${palette.foreground}; @define-color error_bg_color ${palette.terminal.color1}; @define-color error_fg_color ${palette.foreground}; ''; }; }