{ config, lib, pkgs, ... }: let cfg = config.ar.home; in { config = lib.mkIf cfg.apps.zed.enable { home.packages = [ cfg.apps.zed.package pkgs.nixd ]; xdg.configFile = { "zed/themes/stylix.json".text = let theme = { "$schema" = "https://zed.dev/schema/themes/v0.1.0.json"; author = "Aly Raffauf"; name = "stylix"; themes = [ { appearance = config.stylix.polarity; name = "Stylix"; style = { background = config.lib.stylix.colors.withHashtag.base01; border = config.lib.stylix.colors.withHashtag.base02; "border.disabled" = null; "border.focused" = null; "border.selected" = null; "border.transparent" = null; "border.variant" = config.lib.stylix.colors.withHashtag.base02; conflict = config.lib.stylix.colors.withHashtag.base0A; "conflict.background" = config.lib.stylix.colors.withHashtag.base00; "conflict.border" = config.lib.stylix.colors.withHashtag.base0A; created = config.lib.stylix.colors.withHashtag.base0B; "created.background" = config.lib.stylix.colors.withHashtag.base00; "created.border" = config.lib.stylix.colors.withHashtag.base0B; deleted = config.lib.stylix.colors.withHashtag.base08; "deleted.background" = config.lib.stylix.colors.withHashtag.base00; "deleted.border" = config.lib.stylix.colors.withHashtag.base08; "drop_target.background" = config.lib.stylix.colors.withHashtag.base02; "editor.active_line.background" = config.lib.stylix.colors.withHashtag.base01; "editor.active_line_number" = config.lib.stylix.colors.withHashtag.base05; "editor.active_wrap_guide" = config.lib.stylix.colors.withHashtag.base03; "editor.background" = config.lib.stylix.colors.withHashtag.base00; "editor.document_highlight.read_background" = config.lib.stylix.colors.withHashtag.base01; "editor.document_highlight.write_background" = config.lib.stylix.colors.withHashtag.base01; "editor.foreground" = config.lib.stylix.colors.withHashtag.base05; "editor.gutter.background" = config.lib.stylix.colors.withHashtag.base00; "editor.highlighted_line.background" = null; "editor.invisible" = null; "editor.line_number" = config.lib.stylix.colors.withHashtag.base03; "editor.subheader.background" = config.lib.stylix.colors.withHashtag.base00; "editor.wrap_guide" = config.lib.stylix.colors.withHashtag.base01; "element.active" = config.lib.stylix.colors.withHashtag.base03; "element.background" = config.lib.stylix.colors.withHashtag.base01; "element.disabled" = null; "element.hover" = config.lib.stylix.colors.withHashtag.base02; "element.selected" = config.lib.stylix.colors.withHashtag.base02; "elevated_surface.background" = config.lib.stylix.colors.withHashtag.base01; error = config.lib.stylix.colors.withHashtag.base08; "error.background" = config.lib.stylix.colors.withHashtag.base00; "error.border" = config.lib.stylix.colors.withHashtag.base08; "ghost_element.active" = null; "ghost_element.background" = null; "ghost_element.disabled" = null; "ghost_element.hover" = config.lib.stylix.colors.withHashtag.base01; "ghost_element.selected" = config.lib.stylix.colors.withHashtag.base02; hidden = config.lib.stylix.colors.withHashtag.base03; "hidden.background" = config.lib.stylix.colors.withHashtag.base00; "hidden.border" = config.lib.stylix.colors.withHashtag.base03; hint = config.lib.stylix.colors.withHashtag.base05; "hint.background" = config.lib.stylix.colors.withHashtag.base00; "hint.border" = config.lib.stylix.colors.withHashtag.base0C; icon = null; "icon.accent" = null; "icon.disabled" = null; "icon.muted" = null; "icon.placeholder" = null; ignored = config.lib.stylix.colors.withHashtag.base03; "ignored.background" = config.lib.stylix.colors.withHashtag.base00; "ignored.border" = config.lib.stylix.colors.withHashtag.base03; info = config.lib.stylix.colors.withHashtag.base0C; "info.background" = config.lib.stylix.colors.withHashtag.base00; "info.border" = config.lib.stylix.colors.withHashtag.base0C; "link_text.hover" = config.lib.stylix.colors.withHashtag.base0C; modified = config.lib.stylix.colors.withHashtag.base0D; "modified.background" = config.lib.stylix.colors.withHashtag.base00; "modified.border" = config.lib.stylix.colors.withHashtag.base0D; "pane.focused_border" = null; "panel.background" = config.lib.stylix.colors.withHashtag.base01; "panel.focused_border" = config.lib.stylix.colors.withHashtag.base02; players = [ { background = null; cursor = config.lib.stylix.colors.withHashtag.base05; selection = config.lib.stylix.colors.withHashtag.base02; } ]; predictive = config.lib.stylix.colors.withHashtag.base03; "predictive.background" = config.lib.stylix.colors.withHashtag.base01; "predictive.border" = config.lib.stylix.colors.withHashtag.base02; renamed = config.lib.stylix.colors.withHashtag.base0A; "renamed.background" = config.lib.stylix.colors.withHashtag.base00; "renamed.border" = config.lib.stylix.colors.withHashtag.base0A; "scrollbar.thumb.border" = config.lib.stylix.colors.withHashtag.base02; "scrollbar.thumb.hover_background" = config.lib.stylix.colors.withHashtag.base03; "scrollbar.track.background" = config.lib.stylix.colors.withHashtag.base00; "scrollbar.track.border" = null; "scrollbar_thumb.background" = config.lib.stylix.colors.withHashtag.base02; "search.match_background" = config.lib.stylix.colors.withHashtag.base02; "status_bar.background" = config.lib.stylix.colors.withHashtag.base00; success = config.lib.stylix.colors.withHashtag.base0B; "success.background" = config.lib.stylix.colors.withHashtag.base00; "success.border" = config.lib.stylix.colors.withHashtag.base0B; "surface.background" = config.lib.stylix.colors.withHashtag.base00; syntax = { attribute = { color = config.lib.stylix.colors.withHashtag.base0D; font_style = null; font_weight = null; }; boolean = { color = config.lib.stylix.colors.withHashtag.base09; font_style = null; font_weight = null; }; comment = { color = config.lib.stylix.colors.withHashtag.base03; font_style = "italic"; font_weight = null; }; "comment.doc" = { color = config.lib.stylix.colors.withHashtag.base03; font_style = "italic"; font_weight = null; }; constant = { color = config.lib.stylix.colors.withHashtag.base09; font_style = null; font_weight = null; }; constructor = { color = config.lib.stylix.colors.withHashtag.base08; font_style = null; font_weight = null; }; emphasis = { color = config.lib.stylix.colors.withHashtag.base08; font_style = "italic"; font_weight = null; }; "emphasis.strong" = { color = config.lib.stylix.colors.withHashtag.base08; font_style = null; font_weight = 700; }; function = { color = config.lib.stylix.colors.withHashtag.base0D; font_style = null; font_weight = null; }; keyword = { color = config.lib.stylix.colors.withHashtag.base09; font_style = null; font_weight = null; }; label = { color = config.lib.stylix.colors.withHashtag.base0A; font_style = null; font_weight = null; }; link_text = { color = config.lib.stylix.colors.withHashtag.base08; font_style = null; font_weight = null; }; link_uri = { color = config.lib.stylix.colors.withHashtag.base08; font_style = null; font_weight = null; }; number = { color = config.lib.stylix.colors.withHashtag.base09; font_style = null; font_weight = null; }; punctuation = { color = config.lib.stylix.colors.withHashtag.base05; font_style = null; font_weight = null; }; "punctuation.bracket" = { color = config.lib.stylix.colors.withHashtag.base05; font_style = null; font_weight = null; }; "punctuation.delimiter" = { color = config.lib.stylix.colors.withHashtag.base05; font_style = null; font_weight = null; }; "punctuation.list_marker" = { color = config.lib.stylix.colors.withHashtag.base05; font_style = null; font_weight = null; }; "punctuation.special" = { color = config.lib.stylix.colors.withHashtag.base05; font_style = null; font_weight = null; }; string = { color = config.lib.stylix.colors.withHashtag.base0B; font_style = null; font_weight = null; }; "string.escape" = { color = config.lib.stylix.colors.withHashtag.base09; font_style = null; font_weight = null; }; "string.regex" = { color = config.lib.stylix.colors.withHashtag.base0B; font_style = null; font_weight = null; }; "string.special" = { color = config.lib.stylix.colors.withHashtag.base0B; font_style = null; font_weight = null; }; "string.special.symbol" = { color = config.lib.stylix.colors.withHashtag.base0B; font_style = null; font_weight = null; }; tag = { color = config.lib.stylix.colors.withHashtag.base08; font_style = null; font_weight = null; }; "text.literal" = { color = config.lib.stylix.colors.withHashtag.base0B; font_style = null; font_weight = null; }; title = { color = config.lib.stylix.colors.withHashtag.base0A; font_style = null; font_weight = null; }; type = { color = config.lib.stylix.colors.withHashtag.base0A; font_style = null; font_weight = null; }; variable = { color = config.lib.stylix.colors.withHashtag.base06; font_style = null; font_weight = null; }; "variable.special" = { color = config.lib.stylix.colors.withHashtag.base08; font_style = "italic"; font_weight = null; }; }; "tab.active_background" = config.lib.stylix.colors.withHashtag.base00; "tab.inactive_background" = config.lib.stylix.colors.withHashtag.base01; "tab_bar.background" = config.lib.stylix.colors.withHashtag.base00; "terminal.ansi.black" = config.lib.stylix.colors.withHashtag.base00; "terminal.ansi.blue" = config.lib.stylix.colors.withHashtag.base0D; "terminal.ansi.bright_black" = config.lib.stylix.colors.withHashtag.base03; "terminal.ansi.bright_blue" = config.lib.stylix.colors.withHashtag.base0D; "terminal.ansi.bright_cyan" = config.lib.stylix.colors.withHashtag.base0C; "terminal.ansi.bright_green" = config.lib.stylix.colors.withHashtag.base0B; "terminal.ansi.bright_magenta" = config.lib.stylix.colors.withHashtag.base09; "terminal.ansi.bright_red" = config.lib.stylix.colors.withHashtag.base08; "terminal.ansi.bright_white" = config.lib.stylix.colors.withHashtag.base0F; "terminal.ansi.bright_yellow" = config.lib.stylix.colors.withHashtag.base0A; "terminal.ansi.cyan" = config.lib.stylix.colors.withHashtag.base0C; "terminal.ansi.dim_black" = null; "terminal.ansi.dim_blue" = null; "terminal.ansi.dim_cyan" = null; "terminal.ansi.dim_green" = null; "terminal.ansi.dim_magenta" = null; "terminal.ansi.dim_red" = null; "terminal.ansi.dim_white" = null; "terminal.ansi.dim_yellow" = null; "terminal.ansi.green" = config.lib.stylix.colors.withHashtag.base0B; "terminal.ansi.magenta" = config.lib.stylix.colors.withHashtag.base09; "terminal.ansi.red" = config.lib.stylix.colors.withHashtag.base08; "terminal.ansi.white" = config.lib.stylix.colors.withHashtag.base05; "terminal.ansi.yellow" = config.lib.stylix.colors.withHashtag.base0A; "terminal.background" = config.lib.stylix.colors.withHashtag.base00; "terminal.bright_foreground" = null; "terminal.dim_foreground" = null; "terminal.foreground" = config.lib.stylix.colors.withHashtag.base05; text = config.lib.stylix.colors.withHashtag.base05; "text.accent" = config.lib.stylix.colors.withHashtag.base0C; "text.disabled" = config.lib.stylix.colors.withHashtag.base02; "text.muted" = config.lib.stylix.colors.withHashtag.base04; "text.placeholder" = config.lib.stylix.colors.withHashtag.base0F; "title_bar.background" = config.lib.stylix.colors.withHashtag.base00; "title_bar.inactive_background" = config.lib.stylix.colors.withHashtag.base01; "toolbar.background" = config.lib.stylix.colors.withHashtag.base00; unreachable = config.lib.stylix.colors.withHashtag.base0A; "unreachable.background" = config.lib.stylix.colors.withHashtag.base00; "unreachable.border" = config.lib.stylix.colors.withHashtag.base0A; warning = config.lib.stylix.colors.withHashtag.base0A; "warning.background" = config.lib.stylix.colors.withHashtag.base00; "warning.border" = config.lib.stylix.colors.withHashtag.base0A; }; } ]; }; in lib.generators.toJSON {} theme; "zed/keymap.json".text = let defaults = [ { "context" = "Workspace"; "bindings" = { "alt-e" = "file_finder::Toggle"; "ctrl-p" = "command_palette::Toggle"; "ctrl-shift-p" = "file_finder::Toggle"; }; } ]; keymaps = defaults ++ cfg.apps.zed.keymaps; in lib.generators.toJSON {} keymaps; "zed/settings.json".text = let defaults = { auto_install_extensions = { adwaita-pastel = true; basher = true; docker-compose = true; dockerfile = true; git-firefly = true; haskell = true; html = true; ini = true; just = true; log = true; make = true; nix = true; ruby = true; }; auto_update = false; autosave.after_delay.milliseconds = 1000; buffer_font_family = config.stylix.fonts.monospace.name; buffer_font_size = config.stylix.fonts.sizes.applications + 2; current_line_highlight = "line"; indent_guides = { enabled = true; background_coloring = "disabled"; coloring = "indent_aware"; line_width = 1; }; languages = { Nix = { formatter.external = { command = lib.getExe pkgs.alejandra; arguments = []; }; tab_size = 2; }; }; preferred_line_length = 80; show_wrap_guides = true; soft_wrap = "preferred_line_length"; tab_bar = { show = true; show_nav_history_buttons = false; }; tabs = { close_position = "right"; git_status = true; }; telemetry = { diagnostics = false; metrics = false; }; terminal.font_size = config.stylix.fonts.sizes.terminal + 2; theme = { dark = "Stylix"; light = "Stylix"; mode = "system"; }; ui_font_family = config.stylix.fonts.sansSerif.name; ui_font_size = config.stylix.fonts.sizes.applications + 4; use_autoclose = false; vim_mode = false; }; settings = defaults // cfg.apps.zed.settings; in lib.generators.toJSON {} settings; }; }; }