From d4f9083772ea6ddc6ee808b8359caf7dba500f05 Mon Sep 17 00:00:00 2001 From: Daniel Heras Quesada Date: Mon, 2 Nov 2026 13:08:50 +0100 Subject: [PATCH] feat: base config --- .gram/settings.jsonc | 3 + keymap.jsonc | 121 ++++++++++++ settings.jsonc | 366 ++++++++++++++++++++++++++++++++++++ snippets/html.json | 10 + snippets/javascript.json | 15 ++ snippets/plaintext.json | 12 ++ snippets/typescript.json | 28 +++ tasks.jsonc | 48 +++++ tasks/assets/emoji_list.txt | 27 +++ tasks/build-migrate.sh | 3 + tasks/commit-stradi.sh | 11 ++ 11 files changed, 644 insertions(+) create mode 100644 .gram/settings.jsonc create mode 100644 keymap.jsonc create mode 100644 settings.jsonc create mode 100644 snippets/html.json create mode 100644 snippets/javascript.json create mode 100644 snippets/plaintext.json create mode 100644 snippets/typescript.json create mode 100644 tasks.jsonc create mode 100644 tasks/assets/emoji_list.txt create mode 100644 tasks/build-migrate.sh create mode 100644 tasks/commit-stradi.sh diff --git a/.gram/settings.jsonc b/.gram/settings.jsonc new file mode 100644 index 0000000..7759c11 --- /dev/null +++ b/.gram/settings.jsonc @@ -0,0 +1,3 @@ +{ + "show_wrap_guides": true +} diff --git a/keymap.jsonc b/keymap.jsonc new file mode 100644 index 0000000..ca42e3f --- /dev/null +++ b/keymap.jsonc @@ -0,0 +1,121 @@ +// ╭────────────────────────────────╮ +// │- Gram editor keys -│ +// │- author: Daniel Heras Quesada -│ +// ╰────────────────────────────────╯ +[ + { + "context": "Workspace || Editor || OutlinePanel || ProjectPanel || GitPanel || Terminal", + "bindings": { + "ctrl-h": "workspace::ActivatePaneLeft", + "ctrl-l": "workspace::ActivatePaneRight", + "ctrl-k": "workspace::ActivatePaneUp", + "ctrl-j": "workspace::ActivatePaneDown", + "ctrl-shift-f": "project_search::SearchInNew", + "ctrl-shift-x": "task::Rerun", + + "ctrl-e": "project_panel::ToggleFocus", + "ctrl-a": "outline_panel::ToggleFocus", + "ctrl-g": "git_panel::ToggleFocus", + + "ctrl-p": "projects::OpenRecent", + "ctrl-x": "task::Spawn", + "ctrl-z": "workspace::ToggleBottomDock", + "ctrl-m": "workspace::ToggleCenteredLayout", + }, + }, + { + "context": "Editor", + "bindings": { + "ctrl-t": "workspace::NewFile", + "ctrl-w": "pane::CloseActiveItem", + "ctrl-W": "pane::CloseOtherItems", + + "ctrl-shift-l": "pane::SplitRight", + "ctrl-shift-j": "pane::SplitDown", + "ctrl-shift-h": "pane::SplitLeft", + "ctrl-shift-k": "pane::SplitUp", + }, + }, + { + "context": "Editor && vim_mode == insert", + "bindings": { + // "j k": [ + // "workspace::SendKeystrokes", + // "escape" + // ] + }, + }, + { + "context": "OutlinePanel", + "bindings": { + "ctrl-a": "outline_panel::Toggle", + }, + }, + { + "context": "ProjectPanel", + "bindings": { + "ctrl-e": "project_panel::Toggle", + "f12": "project_panel::Rename", + "shift-enter": "workspace::OpenWithSystem", + }, + }, + { + "context": "GitPanel", + "bindings": { + "ctrl-g": "git_panel::Toggle", + }, + }, + { + "context": "ProjectPanel && not_editing", + "bindings": { + "d": "project_panel::Delete", + "c": "project_panel::Copy", + "r": "project_panel::Rename", + "x": "project_panel::Cut", + "Y": "workspace::CopyPath", + "y": "project_panel::Copy", + "p": "project_panel::Paste", + "a": "project_panel::NewFile", + "A": "project_panel::NewDirectory", + "/": "project_panel::NewSearchInDirectory", + "g h": "git::FileHistory", + }, + }, + { + "context": "Editor && (showing_code_actions || showing_completions)", + "bindings": { + "up": "editor::ContextMenuPrevious", + "down": "editor::ContextMenuNext", + "pageup": "editor::ContextMenuFirst", + "pagedown": "editor::ContextMenuLast", + "tab": "editor::ContextMenuNext", + "shift-tab": "editor::ContextMenuPrevious", + }, + }, + { + "context": "Editor && vim_mode == normal", + "bindings": { + "shift-tab": "pane::ActivatePreviousItem", + "tab": "pane::ActivateNextItem", + + "space a": "outline::Toggle", + "space r": "editor::Rename", + "space x": "pane::CloseActiveItem", + "space X": "pane::CloseAllItems", + "space g g": "git_panel::Toggle", + "space g h": "editor::ToggleSelectedDiffHunks", + "space g b": "git::Blame", + "space f a": "pane::DeploySearch", + "space f w": "project_symbols::Toggle", + "space f f": "file_finder::Toggle", + "space space": "editor::FindAllReferences", + }, + }, + { + "context": "Terminal", + "bindings": { + "ctrl-t": "workspace::NewTerminal", + "ctrl-w": "pane::CloseActiveItem", + }, + }, +] diff --git a/settings.jsonc b/settings.jsonc new file mode 100644 index 0000000..c618604 --- /dev/null +++ b/settings.jsonc @@ -0,0 +1,366 @@ +// ╭────────────────────────────────╮ +// │- Gram editor settings -│ +// │- author: Daniel Heras Quesada -│ +// ╰────────────────────────────────╯ +{ + // ╭─────────╮ + // │ General │ + // ╰─────────╯ + "dap": { + "JavaScript": { + "enable_auto_updates": true, + "ignore_system_version": false, + "allow_binary_download": true + } + }, + "lsp": { + "tailwindcss-language-server": { + "binary": { + "enable_auto_updates": true, + "allow_binary_download": true, + "ignore_system_version": false + }, + "enable_lsp_tasks": true + }, + "astro-language-server": { + "binary": { + "enable_auto_updates": true, + "ignore_system_version": false, + "allow_binary_download": true + }, + "enable_lsp_tasks": true + }, + "typescript-language-server": { + "binary": { + "enable_auto_updates": false, + "ignore_system_version": false, + "allow_binary_download": false + }, + "enable_lsp_tasks": true + }, + "json-language-server": { + "binary": { + "enable_auto_updates": true, + "ignore_system_version": true, + "allow_binary_download": true + }, + "enable_lsp_tasks": true + } + }, + "node": { + "allow_npm_install": true, + "allow_prettier_download": true, + "allow_binary_download": true + }, + "active_pane_modifiers": { + "border_size": 0.0, + }, + "text_rendering_mode": "platform_default", + "prettier": { + "allowed": true, + }, + "tasks": { + "prefer_lsp": true, + }, + "icon_theme": "Gram (Default)", + "proxy": "", + "use_system_window_tabs": true, + "window_decorations": "server", + "status_bar": { + "active_encoding_button": "enabled", + "line_endings_button": true, + }, + "git_panel": { + "dock": "left", + }, + "base_keymap": "VSCode", + "restore_on_startup": "last_session", + // ╭─────────╮ + // │ Styling │ + // ╰─────────╯ + "theme": "Ayu Mirage", + "unnecessary_code_fade": 0.2, + // ╭──────╮ + // │ Font │ + // ╰──────╯ + "ui_font_size": 9.0, + "ui_font_family": "JetBrainsMono Nerd Font", + "buffer_font_size": 9.0, + "buffer_font_family": "JetBrainsMono Nerd Font", + "buffer_font_weight": 400, + "buffer_line_height": "comfortable", + // ╭────────╮ + // │ Editor │ + // ╰────────╯ + "always_treat_brackets_as_autoclosed": false, + "autosave": "off", + "autoscroll_on_clicks": true, + "confirm_quit": false, + "current_line_highlight": "all", + "cursor_blink": true, + "cursor_shape": "bar", + "tab_size": 4, // May cause errors on colaborative projects wrongly configured + "git": { + "git_gutter": "tracked_files", + "inline_blame": { + "enabled": true, + "show_commit_summary": true, + }, + }, + "hard_tabs": true, + "hover_popover_enabled": false, + "hover_popover_delay": 0, + "indent_guides": { + "enabled": true, + "line_width": 1, + "active_line_width": 2, + "coloring": "fixed", + "background_coloring": "disabled", + }, + "inlay_hints": { + "enabled": false, + "show_type_hints": true, + "show_parameter_hints": true, + "show_other_hints": true, + "show_background": false, + "edit_debounce_ms": 700, + "scroll_debounce_ms": 50, + }, + "selection_highlight": true, + "show_wrap_guides": true, + "show_completions_on_input": true, + "show_whitespaces": "selection", + "wrap_guides": [80], + "relative_line_numbers": "enabled", + "scrollbar": { + "show": "auto", + "cursors": true, + "git_diff": true, + "search_results": true, + "selected_text": true, + "selected_symbol": true, + "diagnostics": "all", + "axes": { + "horizontal": false, + "vertical": true, + }, + }, + "vim_mode": true, + "soft_wrap": "editor_width", + // ╭────────╮ + // │ Layout │ + // ╰────────╯ + "centered_layout": { + "left_padding": 0.35, + "right_padding": 0.35, + }, + "diagnostics": { + "button": true, + "include_warnings": true, + "inline": { + "enabled": true, + "update_debounce_ms": 150, + "padding": 4, + "min_column": 0, + "max_severity": null, + }, + }, + "title_bar": { + "show_branch_icon": true, + "show": false, + "show_user_picture": false, + "show_onboarding_banner": false, + "show_menus": true, + "show_project_items": true, + "show_branch_name": true, + }, + "minimap": { + "show": "never", + "thumb": "always", + "thumb_border": "left_open", + "current_line_highlight": "all", + }, + "outline_panel": { + "button": true, + "default_width": 240, + "dock": "left", + "file_icons": true, + "folder_icons": true, + "git_status": true, + "indent_size": 20, + "auto_reveal_entries": true, + "auto_fold_dirs": true, + "indent_guides": { + "show": "never", + }, + "scrollbar": { + "show": null, + }, + }, + "preview_tabs": { + "enable_preview_multibuffer_from_code_navigation": false, + "enabled": true, + "enable_preview_from_file_finder": false, + "enable_keep_preview_on_code_navigation": false, + }, + "project_panel": { + "button": true, + "default_width": 240, + "dock": "left", + "entry_spacing": "comfortable", + "file_icons": true, + "folder_icons": true, + "git_status": true, + "indent_size": 20, + "auto_reveal_entries": true, + "auto_fold_dirs": true, + "scrollbar": { + "show": null, + }, + "indent_guides": { + "show": "never", + }, + }, + // "proxy": "http://127.0.0.1:10809", + "search": { + "whole_word": false, + "case_sensitive": false, + "include_ignored": false, + "button": true, + "regex": true, + }, + "tab_bar": { + "show": true, + "show_nav_history_buttons": false, + "show_tab_bar_buttons": "on_pane_focus", + }, + "tabs": { + "show_diagnostics": "all", + "close_position": "right", + "file_icons": true, + "git_status": true, + "activate_on_close": "neighbour", + "show_close_button": "hover", + }, + "toolbar": { + "breadcrumbs": true, + "quick_actions": true, + }, + "terminal": { + "alternate_scroll": "off", + "blinking": "terminal_controlled", + "copy_on_select": false, + "dock": "bottom", + "detect_venv": { + "on": { + "directories": [".env", "env", ".venv", "venv"], + "activate_script": "default", + }, + }, + "env": { + "ZED": "1", + "EXAMPLE": "test:dqnid", + "BLUEPRINTS_PATHS": "./.blueprints", + }, + // "font_family": null, + "font_features": null, + "font_size": 9.0, + "line_height": "comfortable", + "option_as_meta": true, + "button": true, + "shell": "system", + "scrollbar": { + "show": "never", + }, + "working_directory": "current_project_directory", + }, + // ╭─────╮ + // │ LSP │ + // ╰─────╯ + "format_on_save": "on", + "formatter": "auto", + "ensure_final_newline_on_save": true, + "enable_language_server": true, + "use_autoclose": true, + "languages": { + "JSONC": { + // "formatter": "prettier", + "format_on_save": "on", + "preferred_line_length": 85, + "formatter": { + "external": { + "command": "prettier", + "arguments": ["--stdin-filepath", "{buffer_path}"], + }, + }, + "code_actions_on_format": { + "source.organizeImports": true, + }, + }, + "Astro": { + "formatter": { + "external": { + "command": "prettier", + "arguments": ["--stdin-filepath", "{buffer_path}"], + }, + }, + "tab_size": 4, + }, + "HTML": { + "tab_size": 2, + }, + "JSON": { + "tab_size": 4, + }, + "JavaScript": { + // "formatter": "prettier", + "format_on_save": "on", + "tab_size": 2, + "preferred_line_length": 65, + "code_actions_on_format": { + "source.organizeImports": true, + }, + }, + "TypeScript": { + // "formatter": "prettier", + "format_on_save": "on", + "preferred_line_length": 65, + "language_servers": ["typescript-language-server", "!vtsls"], + "code_actions_on_format": { + "source.organizeImports": true, + }, + }, + "TSX": { + // "formatter": "prettier", + "format_on_save": "on", + "preferred_line_length": 85, + "language_servers": ["typescript-language-server", "!vtsls"], + // "formatter": { + // "external": { + // "command": "prettier", + // "arguments": ["--stdin-filepath", "{buffer_path}"] + // } + // }, + "code_actions_on_format": { + "source.organizeImports": true, + }, + }, + }, + "file_types": { + "C++": ["c"], + "TOML": ["MyLockFile"], + "Dockerfile": ["Dockerfile*"], + }, + "file_scan_exclusions": [ + "**/.git", + "**/.svn", + "**/.hg", + "**/.jj", + "**/CVS", + "**/.DS_Store", + "**/Thumbs.db", + "**/.classpath", + "**/.settings", + ], + "file_scan_inclusions": [".env*"], +} diff --git a/snippets/html.json b/snippets/html.json new file mode 100644 index 0000000..fa81832 --- /dev/null +++ b/snippets/html.json @@ -0,0 +1,10 @@ +{ + "Print base": { + "prefix": "!html5", + "body": [ + "\n\n\t\n\t\t\n\t\t\n\t\t\n\t\n\t\n\t\t
\n\t\t\n\t\n\n", + "$0" + ], + "description": "Creates an html5 template" + } +} diff --git a/snippets/javascript.json b/snippets/javascript.json new file mode 100644 index 0000000..84bf0e0 --- /dev/null +++ b/snippets/javascript.json @@ -0,0 +1,15 @@ +{ + "Log to console": { + "prefix": "console", + "body": ["console.info(\"__${1:Place}!\")", "$0"], + "description": "Logs to console" + }, + "Create Docstring": { + "prefix": "docstring jsdoc", + "body": [ + "/**\n* ${1:Description}\n* @param {${2:Type}} ${3:Name}\n* @returns {${4:Type}} ${5:Name}\n*/", + "$0" + ], + "description": "Creates a new JSDoc string" + } +} diff --git a/snippets/plaintext.json b/snippets/plaintext.json new file mode 100644 index 0000000..3fd9ac0 --- /dev/null +++ b/snippets/plaintext.json @@ -0,0 +1,12 @@ +{ + // Each snippet must have a name and body, but the prefix and description are optional. + // The prefix is used to trigger the snippet, but when omitted then the name is used. + // Use placeholders like $1, $2 or ${1:defaultValue} to define tab stops. + // The $0 determines the final cursor position. + // Placeholders with the same value are linked. + "Log to console": { + "prefix": "log", + "body": ["console.info(\"Hello, ${1:World}!\")", "$0"], + "description": "Logs to console" + } +} diff --git a/snippets/typescript.json b/snippets/typescript.json new file mode 100644 index 0000000..dc089f6 --- /dev/null +++ b/snippets/typescript.json @@ -0,0 +1,28 @@ +{ + "Log to console": { + "prefix": "console log", + "body": ["console.info(\"__${1:Place}\", {${2:Value}})", "$0"], + "description": "Logs to console" + }, + "Defines a function": { + "prefix": "function", + "body": ["function ${1:Name}(${2:args}) {\n\t${3}\n}", "$0"], + "description": "Defines a function" + }, + "Defienes a JSX component": { + "prefix": "jsx component", + "body": [ + "export function ${1:Name}(${2:args}): React.FC<${3}> {\n\t${4}\n}", + "$0" + ], + "description": "Defines a JSX component" + }, + "Create Docstring": { + "prefix": "docstring jsdoc", + "body": [ + "/**\n* ${1:Description}\n* @param {${2:Type}} ${3:Name}\n* @returns {${4:Type}} ${5:Name}\n*/", + "$0" + ], + "description": "Creates a new JSDoc string" + } +} diff --git a/tasks.jsonc b/tasks.jsonc new file mode 100644 index 0000000..ac594fd --- /dev/null +++ b/tasks.jsonc @@ -0,0 +1,48 @@ +// ╭────────────────────────────────╮ +// │- Zed editor tasks -│ +// │- author: Daniel Heras Quesada -│ +// ╰────────────────────────────────╯ +[ + { + "label": "Build migrate", + "command": "bash ~/.config/zed/tasks/build-migrate.sh", + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always", + "hide": "never", + "shell": "system" + }, + { + "label": "Commit Stradi", + "command": "bash ~/.config/zed/tasks/commit-stradi.sh", + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "always", + "hide": "always", + "shell": "system" + }, + { + "label": "Lazygit", + "command": "lazygit", + "use_new_terminal": false, + "allow_concurrent_runs": false + }, + { + "label": "Blueprints", + "command": "~/Packages/code-templates/code_templates", + "use_new_terminal": true, + "allow_concurrent_runs": false, + "reveal": "always", + "hide": "never", + "shell": "system" + } + // { + // "label": "📝 Preview document", + // "command": "bash ~/.config/zed/tasks/preview-doc.sh '$ZED_FILE'", + // "use_new_terminal": true, + // "allow_concurrent_runs": false, + // "reveal": "always", + // "hide": "never", + // "shell": "system" + // } +] diff --git a/tasks/assets/emoji_list.txt b/tasks/assets/emoji_list.txt new file mode 100644 index 0000000..4ac52bc --- /dev/null +++ b/tasks/assets/emoji_list.txt @@ -0,0 +1,27 @@ +:broom: │ 🧹 │ clean, cleanup, remove +:recycle: │ ♻️ │ recycle, actor +:wrench: │ 🔧 │ adjustment, rection, adapter +:gear: │ ⚙️ │ adjustment +:control_knobs: │ 🎛 │ config, adjustment +:bug: │ 🐛 │ bug +:zap: │ ⚡️ │ speeded +:bar_chart: │ 📊 │ analytics, chart +:chart_with_upwards_trend: │ 📈 │ analytics, chart, upwards +:package: │ 📦 │ package, wrap, ture +:fire: │ 🔥 │ fire, fix +:sparkles: │ ✨ │ new, feature +:nail_care: │ 💅 │ styles, prettify +:art: │ 🎨 │ styles, colors +:lipstick: │ 💄 │ styles, prettify +:white_check_mark: │ ✅ │ check, done +:test_tube: │ 🧪 │ test, testing +:pencil: │ 📝 │ docs +:warning: │ ⚠️ │ warning +:no_entry_sign: │ 🚫 │ cancel +:rotating_light: │ 🚨 │ alert, ect +:mag_right: │ 🔎 │ search +:old_key: │ 🗝 │ dentials +:rocket: │ 🚀 │ shipping +:stopwatch: │ ⏱ │ speed, performance +:wheelchair: │ ♿️ │ accessibility, a11y +:globe_with_meridians: | 🌐 | intl, i18n, i10n, tradus, lang diff --git a/tasks/build-migrate.sh b/tasks/build-migrate.sh new file mode 100644 index 0000000..ca2efd0 --- /dev/null +++ b/tasks/build-migrate.sh @@ -0,0 +1,3 @@ +[ '$(basename "$PWD")' != 'code' ] && cd code +npm run build-migrate +date +"%T" diff --git a/tasks/commit-stradi.sh b/tasks/commit-stradi.sh new file mode 100644 index 0000000..36cac8b --- /dev/null +++ b/tasks/commit-stradi.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +emoji="$(cat ~/.config/gram/tasks/assets/emoji_list.txt | fzf | awk -F' ' '{print $3}')" + +branch="$(git branch --show-current | awk -F'/' '{print $2}')" + +message="[$branch] $emoji " + +echo -n $message | pbcopy + +echo "$message copied to clipboard"