diff --git a/common/config/nvim/init.lua b/common/config/nvim/init.lua deleted file mode 100644 index f3b9df7..0000000 --- a/common/config/nvim/init.lua +++ /dev/null @@ -1,578 +0,0 @@ --- Leaders / globals -vim.g.mapleader = " " -vim.g.maplocalleader = " " - --- Options -vim.opt.termguicolors = true -vim.opt.number = true -vim.opt.relativenumber = true -vim.opt.signcolumn = "yes" -vim.opt.cursorline = true -vim.opt.laststatus = 2 - -vim.opt.splitbelow = true -vim.opt.splitright = true - -vim.opt.ignorecase = true -vim.opt.smartcase = true -vim.opt.incsearch = true -vim.opt.hlsearch = true -vim.opt.expandtab = true -vim.opt.tabstop = 2 -vim.opt.shiftwidth = 2 -vim.opt.softtabstop = 2 -vim.opt.smartindent = true -vim.opt.breakindent = true - -vim.opt.undofile = true -vim.opt.swapfile = false -vim.opt.backup = false -vim.opt.confirm = true - -vim.opt.clipboard = "unnamedplus" - -vim.opt.scrolloff = 8 - - --- Keymaps -vim.keymap.set("n", "", "nohlsearch", { desc = "Clear search highlight" }) - -vim.keymap.set("n", "j", "gj", { silent = true }) -vim.keymap.set("n", "k", "gk", { silent = true }) -vim.keymap.set("v", "<", "", ">gv") - -vim.keymap.set("n", "", function() - vim.lsp.buf.format({ timeout_ms = 2000 }) - vim.cmd("w") -end, { desc = "Format + Write" }) - -vim.keymap.set("i", "", function() - vim.cmd("stopinsert") - vim.lsp.buf.format({ timeout_ms = 2000 }) - vim.cmd("w") -end, { desc = "Format + Write" }) - -vim.keymap.set("n", "", "h", { desc = "Window left" }) -vim.keymap.set("n", "", "j", { desc = "Window down" }) -vim.keymap.set("n", "", "k", { desc = "Window up" }) -vim.keymap.set("n", "", "l", { desc = "Window right" }) - -vim.keymap.set("t", "", [[h]], { desc = "Terminal window left" }) -vim.keymap.set("t", "", [[j]], { desc = "Terminal window down" }) -vim.keymap.set("t", "", [[k]], { desc = "Terminal window up" }) -vim.keymap.set("t", "", [[l]], { desc = "Terminal window right" }) - -vim.keymap.set("n", "bb", "buffers", { desc = "List buffers" }) -vim.keymap.set("n", "bl", "b#", { desc = "Last buffer" }) -vim.keymap.set("n", "bd", "bdelete", { desc = "Delete buffer" }) -vim.keymap.set("n", "bD", "bdelete!", { desc = "Force delete buffer" }) -vim.keymap.set("n", "bw", "bwipeout", { desc = "Wipe buffer" }) -vim.keymap.set("n", "bo", "%bdelete|edit#|bdelete#", { desc = "Delete other buffers" }) -vim.keymap.set("n", "ba", "%bdelete", { desc = "Delete all buffers" }) - -vim.keymap.set('n', 'H', ':bprevious', { silent = true }) -vim.keymap.set('n', 'L', ':bnext', { silent = true }) - -vim.keymap.set('t', '', '', { noremap = true, silent = true }) - - --- lazy.nvim bootstrap -local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end -end -vim.opt.rtp:prepend(lazypath) - --- Plugins -require("lazy").setup({ - -- Themes - { - "vague-theme/vague.nvim", - lazy = false, - priority = 1000, - config = function() - vim.cmd("colorscheme koda") - end, - }, - { "rebelot/kanagawa.nvim" }, - { "oskarnurm/koda.nvim" }, - { "datsfilipe/vesper.nvim" }, - { "metalelf0/base16-black-metal-scheme" }, - - -- LSP / Completion - { "neovim/nvim-lspconfig" }, - { - "saghen/blink.cmp", - version = "1.*", - opts = { - keymap = { - preset = "none", - [""] = { "show", "show_documentation", "hide_documentation" }, - [""] = { "hide" }, - - [""] = { "scroll_documentation_up" }, - [""] = { "scroll_documentation_down" }, - - [""] = { "accept", "fallback" }, - - [""] = { "select_next", "fallback" }, - [""] = { "select_prev", "fallback" }, - - [""] = { "select_next", "fallback" }, - [""] = { "select_prev", "fallback" }, - - [""] = { "snippet_forward", "fallback" }, - [""] = { "snippet_backward", "fallback" }, - }, - completion = { - documentation = { - auto_show = true, - }, - list = { - selection = { - auto_insert = false, - preselect = false - } - } - }, - sources = { - default = { "lsp", "path", "buffer", "snippets" }, - }, - snippets = { - preset = "luasnip", - } - }, - }, - { - "L3MON4D3/LuaSnip", - version = "v2.*", - build = "make install_jsregexp", - dependencies = { "rafamadriz/friendly-snippets" }, - config = function() - local luasnip = require("luasnip") - luasnip.config.setup({ - history = true, - updateevents = "TextChanged, TextChangedI", - enable_autosnippets = false, - }) - require("luasnip.loaders.from_vscode").lazy_load() - - local autosnips_enabled = false - - vim.keymap.set("n", "sa", function() - autosnips_enabled = not autosnips_enabled - luasnip.config.set_config({ enable_autosnippets = autosnips_enabled }) - vim.notify("Autosnippets: " .. (autosnips_enabled and "ON" or "OFF")) - end, { desc = "Toggle autosnippets" }) - end, - }, - { - "lervag/vimtex", - lazy = false, - init = function() - vim.g.vimtex_view_method = "zathura" - vim.g.vimtex_quickfix_mode = 0 - end - }, - { - "chomosuke/typst-preview.nvim", - lazy = false, - version = "1.*", - opts = {} - }, - { - "NickvanDyke/opencode.nvim", - config = function() - vim.g.opencode_opts = { - provider = { - enabled = "tmux", - tmux = {} - } - } - vim.o.autoread = true - - vim.keymap.set({ "n", "x" }, "aa", function() require("opencode").ask("@this: ", { submit = true }) end, - { desc = "AI Ask" }) - vim.keymap.set({ "n", "x" }, "as", function() require("opencode").select() end, - { desc = "AI Select action" }) - vim.keymap.set({ "n", "x" }, "at", function() require("opencode").toggle() end, - { desc = "AI Toggle panel" }) - vim.keymap.set({ "n", "x" }, "ar", function() return require("opencode").operator("@this ") end, - { desc = "AI Add range", expr = true }) - vim.keymap.set("n", "al", function() return require("opencode").operator("@this ") .. "_" end, - { desc = "AI Add line", expr = true }) - - vim.keymap.set("n", "au", function() require("opencode").command("session.half.page.up") end, - { desc = "AI Scroll up" }) - vim.keymap.set("n", "ad", function() require("opencode").command("session.half.page.down") end, - { desc = "AI Scroll down" }) - end, - }, - { - "github/copilot.vim", - init = function() - vim.g.copilot_no_tab_map = true - vim.g.copilot_assume_mapped = true - end, - config = function() - vim.keymap.set("i", "", 'copilot#Accept("\\")', { - expr = true, - replace_keycodes = false, - silent = true - }) - - vim.keymap.set("i", "", 'copilot#AcceptWord()', { expr = true, silent = true }) - vim.keymap.set("i", "", 'copilot#AcceptLine()', { expr = true, silent = true }) - vim.keymap.set("n", "ac", "Copilot toggle", { desc = "Toggle Copilot" }) - end - }, - -- File explorer / Search - { - "nvim-neo-tree/neo-tree.nvim", - branch = "v3.x", - dependencies = { - "nvim-lua/plenary.nvim", - "MunifTanjim/nui.nvim", - "nvim-tree/nvim-web-devicons", - }, - lazy = false, - opts = { - window = { - width = 80, - }, - filesystem = { - filtered_items = { - hide_dotfiles = false, - }, - follow_current_file = { - enabled = true, - }, - group_empty_dirs = true, - }, - default_component_configs = { - indent = { - indent_size = 2, - with_markers = true, - }, - }, - }, - keys = { - { - "e", - function() - vim.cmd("Neotree position=right toggle") - end, - desc = "Neo-tree (right)", - }, - }, - }, - { - "stevearc/oil.nvim", - dependencies = { "nvim-tree/nvim-web-devicons" }, - opts = {}, - keys = { - { "E", "Oil", desc = "Oil" }, - }, - }, - { - "ibhagwan/fzf-lua", - dependencies = { "nvim-tree/nvim-web-devicons" }, - opts = function() - local actions = require("fzf-lua.actions") - return { - files = { - actions = { - ["default"] = actions.file_edit, - }, - }, - } - end, - keys = { - { "ff", function() require("fzf-lua").files() end, desc = "Find files" }, - { "fb", function() require("fzf-lua").buffers() end, desc = "Find buffers" }, - { "fo", function() require("fzf-lua").oldfiles() end, desc = "Find recent files" }, - { "ft", function() require("fzf-lua").live_grep() end, desc = "Find text in project" }, - { "fs", function() require("fzf-lua").lsp_document_symbols() end, desc = "Find document symbols" }, - - { "", function() require("fzf-lua").grep_curbuf() end, desc = "Find text in buffer" }, - { "/", function() require("fzf-lua").grep_curbuf() end, desc = "Find text in buffer" }, - - { "fh", function() require("fzf-lua").helptags() end, desc = "Find help tags" }, - }, - }, - - -- Git - { - "tpope/vim-fugitive", - cmd = { "Git", "G" }, - }, - { "lewis6991/gitsigns.nvim" }, - { - "kdheepak/lazygit.nvim", - lazy = true, - cmd = { - "LazyGit", - "LazyGitConfig", - "LazyGitCurrentFile", - "LazyGitFilter", - "LazyGitFilterCurrentFile", - }, - dependencies = { - "nvim-lua/plenary.nvim", - }, - keys = { - { "gg", "LazyGit", desc = "LazyGit" }, - }, - }, - - -- Editing utilities - { "MagicDuck/grug-far.nvim" }, - { - "kylechui/nvim-surround", - event = "VeryLazy", - config = function() - require("nvim-surround").setup({}) - end, - }, - { - "windwp/nvim-autopairs", - event = "insertenter", - config = true - }, - { - 'abecodes/tabout.nvim', - lazy = false, - config = function() - require('tabout').setup { - tabkey = '', -- key to trigger tabout, set to an empty string to disable - backwards_tabkey = '', -- key to trigger backwards tabout, set to an empty string to disable - act_as_tab = true, -- shift content if tab out is not possible - act_as_shift_tab = false, -- reverse shift content if tab out is not possible (if your keyboard/terminal supports ) - default_tab = '', -- shift default action (only at the beginning of a line, otherwise is used) - default_shift_tab = '', -- reverse shift default action, - enable_backwards = true, -- well ... - completion = false, -- if the tabkey is used in a completion pum - tabouts = { - { open = "'", close = "'" }, - { open = '"', close = '"' }, - { open = '`', close = '`' }, - { open = '(', close = ')' }, - { open = '[', close = ']' }, - { open = '{', close = '}' }, - { open = ',', close = ',' } - }, - ignore_beginning = true, --[[ if the cursor is at the beginning of a filled element it will rather tab out than shift the content ]] - exclude = {} -- tabout will ignore these filetypes - } - end, - dependencies = { -- These are optional - "nvim-treesitter/nvim-treesitter", - "L3MON4D3/LuaSnip", - }, - event = 'InsertCharPre', -- Set the event to 'InsertCharPre' for better compatibility - priority = 1000, - }, - - -- Motion / UI - { - "folke/flash.nvim", - event = "VeryLazy", - opts = { - modes = { - treesitter = { - jump = { pos = "start" }, -- or "end" - }, - }, - }, - keys = { - { "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" }, - { "S", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" }, - }, - }, - { - "nvim-treesitter/nvim-treesitter", - lazy = false, - build = ":TSUpdate", - config = function() - require('nvim-treesitter').setup({ - ensure_installed = { "go", "latex", "typst" }, - highlight = { enable = true } - }) - end - }, - { - "wellle/targets.vim", - event = "VeryLazy", - }, - { - 'nvim-lualine/lualine.nvim', - dependencies = { 'nvim-tree/nvim-web-devicons' }, - opts = function() - local function pretty_path() - local name = vim.api.nvim_buf_get_name(0) - if name == '' then return '[No Name]' end - -- Relative to current working directory, nicely normalized - return vim.fn.fnamemodify(name, ':.') - end - - return { - options = { - section_separators = '', - component_separators = '', - globalstatus = true, - }, - - sections = { - lualine_a = { 'mode' }, - lualine_b = { { 'branch', icon = '' }, 'diff' }, - lualine_c = { - { 'diagnostics' }, -- uses vim.diagnostic by default - { 'filename', path = 1, symbols = { modified = ' ●', readonly = ' ' } }, - }, - lualine_x = { 'encoding', 'fileformat', 'filetype', require("opencode").statusline }, - lualine_y = { 'progress' }, - lualine_z = { 'location' }, - }, - - -- Global list (best place for buffers) - tabline = { - lualine_a = { - { - 'buffers', - show_filename_only = true, - show_modified_status = true, - mode = 2, - max_length = vim.o.columns * 8 / 10, - use_mode_colors = true, - buffers_color = { - active = 'lualine_a_normal', - inactive = 'lualine_b_inactive', - } - }, - }, - lualine_z = { 'tabs' }, - }, - } - end - }, - { - "goolord/alpha-nvim", - dependencies = { - "nvim-tree/nvim-web-devicons", - "nvim-lua/plenary.nvim", - }, - config = function() - require("alpha").setup(require("alpha.themes.theta").config) - end - }, - { - "chentoast/marks.nvim", - event = "VeryLazy", - opts = {}, - }, - { - "leath-dub/snipe.nvim", - keys = { - { "", function() require("snipe").open_buffer_menu() end, desc = "Open Snipe buffer menu" } - }, - opts = {} - }, - { - "folke/which-key.nvim", - event = "VeryLazy", - opts = { - preset = "helix" - }, - keys = { - { - "?", - function() - require("which-key").show({ global = false }) - end, - desc = "Buffer Local Keymaps (which-key)", - }, - }, - }, - { - "j-hui/fidget.nvim", - opts = {}, - }, - { - "christoomey/vim-tmux-navigator", - cmd = { - "TmuxNavigateLeft", - "TmuxNavigateDown", - "TmuxNavigateUp", - "TmuxNavigateRight", - "TmuxNavigatePrevious", - "TmuxNavigatorProcessList", - }, - keys = { - { "", "TmuxNavigateLeft" }, - { "", "TmuxNavigateDown" }, - { "", "TmuxNavigateUp" }, - { "", "TmuxNavigateRight" }, - { "", "TmuxNavigatePrevious" }, - }, - } -}) - --- LSP -vim.lsp.config("lua_ls", { - settings = { - Lua = { - diagnostics = { - globals = { "vim" }, - }, - workspace = { - checkThirdParty = false, - }, - }, - }, -}) - -vim.lsp.enable({ - "lua_ls", - "tinymist", - "gopls", -}) - -vim.keymap.set("n", "ca", vim.lsp.buf.code_action, { desc = "Code Action" }) -vim.keymap.set("v", "ca", vim.lsp.buf.code_action, { desc = "Code Action" }) -vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Goto definition" }) -vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Goto declaration" }) -vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Goto implementation" }) -vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "References" }) -vim.keymap.set("n", "gy", vim.lsp.buf.type_definition, { desc = "Goto type definition" }) - -vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover" }) -vim.keymap.set("i", "", vim.lsp.buf.signature_help, { desc = "Signature help" }) - -vim.keymap.set("n", "cs", vim.lsp.buf.document_symbol, { desc = "Document symbols" }) -vim.keymap.set("n", "cS", vim.lsp.buf.workspace_symbol, { desc = "Workspace symbols" }) - -vim.keymap.set("n", "cf", function() - vim.lsp.buf.format({ async = true }) -end, { desc = "Format buffer" }) - -vim.keymap.set("n", "cr", vim.lsp.buf.rename, { desc = "Rename" }) - -vim.diagnostic.config({ - virtual_text = true, - signs = true, - underline = true, - update_in_insert = false, - severity_sort = true, - float = { border = "rounded", source = "if_many" }, -}) diff --git a/common/config/sway/config b/common/config/sway/config deleted file mode 100644 index 52c991d..0000000 --- a/common/config/sway/config +++ /dev/null @@ -1,126 +0,0 @@ -### Variables -set $mod Mod4 -set $left h -set $down j -set $up k -set $right l - -set $term foot -set $menu bemenu-run -b -i --fn "Hack Nerd Font 10" --prompt "Run:" --list "8 up" - -### Vague.nvim palette (no inline comments) -set $b00 #141415 -set $b01 #1c1c24 -set $b02 #2f2f3d -set $b03 #333738 -set $b04 #c3c3d5 -set $b05 #cdcdcd - -set $red #d8647e -set $yellow #f3be7c -set $hint #7e98e8 -set $float #878787 - -### UI: font, borders, gaps, colors -font Hack Nerd Font 10 -default_border pixel 3 -default_floating_border pixel 3 -smart_borders no_gaps -gaps inner 0 -gaps outer 0 - -client.focused $hint $b02 $b05 $hint -client.focused_inactive $b01 $b01 $b04 $b01 -client.unfocused $b01 $b01 $b03 $b01 -client.urgent $red $red $b05 $red -client.placeholder $b01 $b01 $b04 $b01 -client.background $b00 - -for_window [floating] border pixel 2 - -### Output -exec_always swaybg -c $b00 - -### Lock / idle / DPMS / suspend -set $lock swaylock -f -c $b00 - -### Input -input type:keyboard { - xkb_layout "us" -} - -### Workspace behavior -workspace_auto_back_and_forth yes -bindsym $mod+Tab workspace back_and_forth - -### Key bindings -bindsym $mod+Return exec $term -bindsym $mod+q kill -bindsym $mod+Space exec $menu -bindsym $mod+Shift+c reload -bindsym $mod+Shift+e exec swaymsg exit - -bindsym $mod+$left focus left -bindsym $mod+$down focus down -bindsym $mod+$up focus up -bindsym $mod+$right focus right - -bindsym $mod+Shift+$left move left -bindsym $mod+Shift+$down move down -bindsym $mod+Shift+$up move up -bindsym $mod+Shift+$right move right - -bindsym $mod+1 workspace number 1 -bindsym $mod+2 workspace number 2 -bindsym $mod+3 workspace number 3 -bindsym $mod+4 workspace number 4 -bindsym $mod+5 workspace number 5 -bindsym $mod+6 workspace number 6 -bindsym $mod+7 workspace number 7 -bindsym $mod+8 workspace number 8 -bindsym $mod+9 workspace number 9 -bindsym $mod+0 workspace number 10 - -bindsym $mod+Shift+1 move container to workspace number 1 -bindsym $mod+Shift+2 move container to workspace number 2 -bindsym $mod+Shift+3 move container to workspace number 3 -bindsym $mod+Shift+4 move container to workspace number 4 -bindsym $mod+Shift+5 move container to workspace number 5 -bindsym $mod+Shift+6 move container to workspace number 6 -bindsym $mod+Shift+7 move container to workspace number 7 -bindsym $mod+Shift+8 move container to workspace number 8 -bindsym $mod+Shift+9 move container to workspace number 9 -bindsym $mod+Shift+0 move container to workspace number 10 - -bindsym $mod+b splith -bindsym $mod+v splitv - -bindsym $mod+equal fullscreen -bindsym $mod+Shift+f floating toggle -bindsym $mod+f focus mode_toggle - -bindsym $mod+a focus parent - -bindsym $mod+Shift+minus move scratchpad -bindsym $mod+minus scratchpad show - -### Media keys -bindsym --locked XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle -bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% -bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% -bindsym --locked XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle -bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- -bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ - -### Screenshots -bindsym Print exec grim -g "$(slurp)" - | wl-copy -bindsym $mod+Print exec grim - | wl-copy - -bar { - colors { - focused_workspace $b01 $b01 $b05 - } - font pango:Hack Nerd Font 10 - position bottom - status_command ~/.config/sway/status.sh -} diff --git a/common/config/sway/status.sh b/common/config/sway/status.sh deleted file mode 100755 index 4eb4707..0000000 --- a/common/config/sway/status.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -while :; do - capacity=$(cat /sys/class/power_supply/BAT0/capacity 2>/dev/null || echo n/a) - temp=$(awk '{printf "%d", $1/1000}' /sys/class/thermal/thermal_zone0/temp 2>/dev/null || echo n/a) - datetime=$(date +'%a %d %b %T') - - echo "${capacity}% | ${temp}C | ${datetime}" - sleep 1 -done - diff --git a/machines/desktop/config/aichat/config.yaml.example b/machines/desktop/config/aichat/config.yaml.example deleted file mode 100644 index a41bac1..0000000 --- a/machines/desktop/config/aichat/config.yaml.example +++ /dev/null @@ -1,8 +0,0 @@ -# see https://github.com/sigoden/aichat/blob/main/config.example.yaml - -model: openrouter:xiaomi/mimo-v2-flash -clients: -- type: openai-compatible - name: openrouter - api_base: https://openrouter.ai/api/v1 - api_key: diff --git a/machines/desktop/config/aichat/models-override.yaml b/machines/desktop/config/aichat/models-override.yaml deleted file mode 100644 index 9184510..0000000 --- a/machines/desktop/config/aichat/models-override.yaml +++ /dev/null @@ -1,1797 +0,0 @@ -version: 0.30.0 -list: -- provider: openai - models: - - name: gpt-5.2 - type: chat - max_input_tokens: 400000 - input_price: 1.75 - output_price: 14.0 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: gpt-5 - type: chat - max_input_tokens: 400000 - input_price: 1.25 - output_price: 10.0 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: gpt-5-mini - type: chat - max_input_tokens: 400000 - input_price: 0.25 - output_price: 2.0 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: gpt-5-nano - type: chat - max_input_tokens: 400000 - input_price: 0.05 - output_price: 0.4 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: gpt-4.1 - type: chat - max_input_tokens: 1047576 - input_price: 2.0 - output_price: 8.0 - max_output_tokens: 32768 - supports_vision: true - supports_function_calling: true - - name: gpt-4o - type: chat - max_input_tokens: 128000 - input_price: 2.5 - output_price: 10.0 - max_output_tokens: 16384 - supports_vision: true - supports_function_calling: true - - name: gpt-4-turbo - type: chat - max_input_tokens: 128000 - input_price: 10.0 - output_price: 30.0 - max_output_tokens: 4096 - supports_vision: true - supports_function_calling: true - - name: gpt-3.5-turbo - type: chat - max_input_tokens: 16385 - input_price: 0.5 - output_price: 1.5 - max_output_tokens: 4096 - supports_function_calling: true - - name: text-embedding-3-large - type: embedding - input_price: 0.13 - max_tokens_per_chunk: 8191 - default_chunk_size: 2000 - max_batch_size: 100 - - name: text-embedding-3-small - type: embedding - input_price: 0.02 - max_tokens_per_chunk: 8191 - default_chunk_size: 2000 - max_batch_size: 100 -- provider: gemini - models: - - name: gemini-2.5-flash - type: chat - max_input_tokens: 1048576 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 65536 - supports_vision: true - supports_function_calling: true - - name: gemini-2.5-pro - type: chat - max_input_tokens: 1048576 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 65536 - supports_vision: true - supports_function_calling: true - - name: gemini-2.5-flash-lite - type: chat - max_input_tokens: 1000000 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 64000 - supports_vision: true - supports_function_calling: true - - name: gemini-3-pro-preview - type: chat - max_input_tokens: 1048576 - supports_vision: true - supports_function_calling: true - - name: gemini-3-flash-preview - type: chat - max_input_tokens: 1048576 - supports_vision: true - supports_function_calling: true - - name: gemini-2.0-flash - type: chat - max_input_tokens: 1048576 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 8192 - supports_vision: true - supports_function_calling: true - - name: gemini-2.0-flash-lite - type: chat - max_input_tokens: 1048576 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 8192 - supports_vision: true - supports_function_calling: true - - name: gemma-3-27b-it - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 8192 - - name: text-embedding-004 - type: embedding - input_price: 0.0 - max_tokens_per_chunk: 2048 - default_chunk_size: 1500 - max_batch_size: 100 -- provider: claude - models: - - name: claude-sonnet-4-5-20250929 - type: chat - max_input_tokens: 200000 - input_price: 3.0 - output_price: 15.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: claude-sonnet-4-5-20250929:thinking - type: chat - real_name: claude-sonnet-4-5-20250929 - max_input_tokens: 200000 - input_price: 3.0 - output_price: 15.0 - patch: - body: - temperature: null - top_p: null - thinking: - type: enabled - budget_tokens: 16000 - max_output_tokens: 24000 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: claude-haiku-4-5-20251001 - type: chat - max_input_tokens: 200000 - input_price: 1.0 - output_price: 5.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: claude-haiku-4-5-20251001:thinking - type: chat - real_name: claude-haiku-4-5-20251001 - max_input_tokens: 200000 - input_price: 1.0 - output_price: 5.0 - patch: - body: - temperature: null - top_p: null - thinking: - type: enabled - budget_tokens: 16000 - max_output_tokens: 24000 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: claude-opus-4-5-20251101 - type: chat - max_input_tokens: 200000 - input_price: 5.0 - output_price: 25.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: claude-opus-4-5-20251101:thinking - type: chat - real_name: claude-opus-4-5-20251101 - max_input_tokens: 200000 - input_price: 5.0 - output_price: 25.0 - patch: - body: - temperature: null - top_p: null - thinking: - type: enabled - budget_tokens: 16000 - max_output_tokens: 24000 - require_max_tokens: true - supports_vision: true - supports_function_calling: true -- provider: mistral - models: - - name: mistral-large-latest - type: chat - input_price: 0.5 - output_price: 1.5 - max_output_tokens: 262144 - supports_vision: true - supports_function_calling: true - - name: mistral-medium-latest - type: chat - max_input_tokens: 131072 - input_price: 0.4 - output_price: 2.0 - supports_vision: true - supports_function_calling: true - - name: mistral-small-latest - type: chat - max_input_tokens: 32768 - input_price: 0.1 - output_price: 0.3 - supports_vision: true - supports_function_calling: true - - name: magistral-medium-latest - type: chat - max_input_tokens: 131072 - input_price: 2.0 - output_price: 5.0 - - name: magistral-small-latest - type: chat - max_input_tokens: 131072 - input_price: 0.5 - output_price: 1.5 - - name: devstral-medium-latest - type: chat - max_input_tokens: 262144 - input_price: 0.4 - output_price: 2.0 - supports_function_calling: true - - name: devstral-small-latest - type: chat - max_input_tokens: 262144 - input_price: 0.1 - output_price: 0.3 - supports_function_calling: true - - name: codestral-latest - type: chat - max_input_tokens: 262144 - input_price: 0.3 - output_price: 0.9 - supports_function_calling: true - - name: ministral-14b-latest - type: chat - max_input_tokens: 262144 - input_price: 0.2 - output_price: 0.2 - supports_function_calling: true - - name: mistral-embed - type: embedding - max_input_tokens: 8092 - input_price: 0.1 - max_tokens_per_chunk: 8092 - default_chunk_size: 2000 -- provider: ai21 - models: - - name: jamba-large - type: chat - max_input_tokens: 256000 - input_price: 2.0 - output_price: 8.0 - supports_function_calling: true - - name: jamba-mini - type: chat - max_input_tokens: 256000 - input_price: 0.2 - output_price: 0.4 - supports_function_calling: true -- provider: cohere - models: - - name: command-a-03-2025 - type: chat - max_input_tokens: 262144 - input_price: 2.5 - output_price: 10.0 - max_output_tokens: 8192 - supports_function_calling: true - - name: command-a-reasoning-08-2025 - type: chat - max_input_tokens: 262144 - input_price: 2.5 - output_price: 10.0 - max_output_tokens: 32768 - - name: command-a-vision-07-2025 - type: chat - max_input_tokens: 131072 - input_price: 2.5 - output_price: 10.0 - max_output_tokens: 8192 - supports_vision: true - - name: command-r7b-12-2024 - type: chat - max_input_tokens: 131072 - input_price: 0.0375 - output_price: 0.15 - max_output_tokens: 4096 - - name: embed-v4.0 - type: embedding - input_price: 0.12 - max_tokens_per_chunk: 2048 - default_chunk_size: 2000 - max_batch_size: 96 - - name: embed-english-v3.0 - type: embedding - input_price: 0.1 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 96 - - name: embed-multilingual-v3.0 - type: embedding - input_price: 0.1 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 96 - - name: rerank-v3.5 - type: reranker - max_input_tokens: 4096 - - name: rerank-english-v3.0 - type: reranker - max_input_tokens: 4096 - - name: rerank-multilingual-v3.0 - type: reranker - max_input_tokens: 4096 -- provider: xai - models: - - name: grok-4-1-fast-non-reasoning - type: chat - max_input_tokens: 2000000 - input_price: 0.2 - output_price: 0.5 - supports_function_calling: true - - name: grok-4-1-fast-reasoning - type: chat - max_input_tokens: 2000000 - input_price: 0.2 - output_price: 0.5 - supports_function_calling: true - - name: grok-code-fast-1 - type: chat - max_input_tokens: 256000 - input_price: 0.2 - output_price: 1.5 - supports_function_calling: true -- provider: perplexity - models: - - name: sonar-pro - type: chat - max_input_tokens: 200000 - input_price: 3.0 - output_price: 15.0 - - name: sonar - type: chat - max_input_tokens: 128000 - input_price: 1.0 - output_price: 1.0 - - name: sonar-reasoning-pro - type: chat - max_input_tokens: 128000 - input_price: 2.0 - output_price: 8.0 - - name: sonar-deep-research - type: chat - max_input_tokens: 128000 - input_price: 2.0 - output_price: 8.0 -- provider: groq - models: - - name: openai/gpt-oss-120b - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - supports_function_calling: true - - name: openai/gpt-oss-20b - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - supports_function_calling: true - - name: meta-llama/llama-4-maverick-17b-128e-instruct - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - supports_vision: true - supports_function_calling: true - - name: meta-llama/llama-4-scout-17b-16e-instruct - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - supports_vision: true - supports_function_calling: true - - name: llama-3.3-70b-versatile - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - supports_function_calling: true - - name: moonshotai/kimi-k2-instruct-0905 - type: chat - max_input_tokens: 262144 - input_price: 0.0 - output_price: 0.0 - supports_function_calling: true - - name: qwen/qwen3-32b - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - - name: groq/compound - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - - name: groq/compound-mini - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 -- provider: vertexai - models: - - name: gemini-2.5-flash - type: chat - max_input_tokens: 1048576 - input_price: 0.3 - output_price: 2.5 - max_output_tokens: 65536 - supports_vision: true - supports_function_calling: true - - name: gemini-2.5-pro - type: chat - max_input_tokens: 1048576 - input_price: 1.25 - output_price: 10.0 - max_output_tokens: 65536 - supports_vision: true - supports_function_calling: true - - name: gemini-2.5-flash-lite - type: chat - max_input_tokens: 1048576 - input_price: 0.3 - output_price: 0.4 - max_output_tokens: 65536 - supports_vision: true - supports_function_calling: true - - name: gemini-3-pro-preview - type: chat - max_input_tokens: 1048576 - supports_vision: true - supports_function_calling: true - - name: gemini-3-flash-preview - type: chat - max_input_tokens: 1048576 - supports_vision: true - supports_function_calling: true - - name: gemini-2.0-flash-001 - type: chat - max_input_tokens: 1048576 - input_price: 0.15 - output_price: 0.6 - max_output_tokens: 8192 - supports_vision: true - supports_function_calling: true - - name: gemini-2.0-flash-lite-001 - type: chat - max_input_tokens: 1048576 - input_price: 0.075 - output_price: 0.3 - max_output_tokens: 8192 - supports_vision: true - supports_function_calling: true - - name: claude-sonnet-4-5@20250929 - type: chat - max_input_tokens: 200000 - input_price: 3.0 - output_price: 15.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: claude-sonnet-4-5@20250929:thinking - type: chat - real_name: claude-sonnet-4-5@20250929 - max_input_tokens: 200000 - input_price: 3.0 - output_price: 15.0 - patch: - body: - temperature: null - top_p: null - thinking: - type: enabled - budget_tokens: 16000 - max_output_tokens: 24000 - require_max_tokens: true - supports_vision: true - - name: claude-haiku-4-5@20251001 - type: chat - max_input_tokens: 200000 - input_price: 1.0 - output_price: 5.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: claude-haiku-4-5@20251001:thinking - type: chat - real_name: claude-haiku-4-5@20251001 - max_input_tokens: 200000 - input_price: 1.0 - output_price: 5.0 - patch: - body: - temperature: null - top_p: null - thinking: - type: enabled - budget_tokens: 16000 - max_output_tokens: 24000 - require_max_tokens: true - supports_vision: true - - name: claude-opus-4-5@20251101 - type: chat - max_input_tokens: 200000 - input_price: 5.0 - output_price: 25.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: claude-opus-4-5@20251101:thinking - type: chat - real_name: claude-opus-4-5@20251101 - max_input_tokens: 200000 - input_price: 5.0 - output_price: 25.0 - patch: - body: - temperature: null - top_p: null - thinking: - type: enabled - budget_tokens: 16000 - max_output_tokens: 24000 - require_max_tokens: true - supports_vision: true - - name: text-embedding-005 - type: embedding - max_input_tokens: 20000 - input_price: 0.025 - max_tokens_per_chunk: 2048 - default_chunk_size: 1500 - max_batch_size: 5 - - name: text-multilingual-embedding-002 - type: embedding - max_input_tokens: 20000 - input_price: 0.2 - max_tokens_per_chunk: 2048 - default_chunk_size: 1500 - max_batch_size: 5 -- provider: bedrock - models: - - name: us.anthropic.claude-sonnet-4-5-20250929-v1:0 - type: chat - max_input_tokens: 200000 - input_price: 3.0 - output_price: 15.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: us.anthropic.claude-sonnet-4-5-20250929-v1:0:thinking - type: chat - real_name: us.anthropic.claude-sonnet-4-5-20250929-v1:0 - max_input_tokens: 200000 - input_price: 3.0 - output_price: 15.0 - patch: - body: - inferenceConfig: - temperature: null - topP: null - additionalModelRequestFields: - thinking: - type: enabled - budget_tokens: 16000 - max_output_tokens: 24000 - require_max_tokens: true - supports_vision: true - - name: us.anthropic.claude-haiku-4-5-20251001-v1:0 - type: chat - max_input_tokens: 200000 - input_price: 1.0 - output_price: 5.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: us.anthropic.claude-haiku-4-5-20251001-v1:0:thinking - type: chat - real_name: us.anthropic.claude-haiku-4-5-20251001-v1:0 - max_input_tokens: 200000 - input_price: 1.0 - output_price: 5.0 - patch: - body: - inferenceConfig: - temperature: null - topP: null - additionalModelRequestFields: - thinking: - type: enabled - budget_tokens: 16000 - max_output_tokens: 24000 - require_max_tokens: true - supports_vision: true - - name: us.anthropic.claude-opus-4-5-20251101-v1:0 - type: chat - max_input_tokens: 200000 - input_price: 5.0 - output_price: 25.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: us.anthropic.claude-opus-4-5-20251101-v1:0:thinking - type: chat - real_name: us.anthropic.claude-opus-4-5-20251101-v1:0 - max_input_tokens: 200000 - input_price: 5.0 - output_price: 25.0 - patch: - body: - inferenceConfig: - temperature: null - topP: null - additionalModelRequestFields: - thinking: - type: enabled - budget_tokens: 16000 - max_output_tokens: 24000 - require_max_tokens: true - supports_vision: true - - name: us.meta.llama4-maverick-17b-instruct-v1:0 - type: chat - max_input_tokens: 131072 - input_price: 0.24 - output_price: 0.97 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: us.meta.llama4-scout-17b-instruct-v1:0 - type: chat - max_input_tokens: 131072 - input_price: 0.17 - output_price: 0.66 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: us.meta.llama3-3-70b-instruct-v1:0 - type: chat - max_input_tokens: 131072 - input_price: 0.72 - output_price: 0.72 - max_output_tokens: 8192 - require_max_tokens: true - supports_function_calling: true - - name: us.amazon.nova-premier-v1:0 - type: chat - max_input_tokens: 300000 - input_price: 2.5 - output_price: 12.5 - max_output_tokens: 5120 - - name: us.amazon.nova-pro-v1:0 - type: chat - max_input_tokens: 300000 - input_price: 0.8 - output_price: 3.2 - max_output_tokens: 5120 - supports_vision: true - - name: us.amazon.nova-lite-v1:0 - type: chat - max_input_tokens: 300000 - input_price: 0.06 - output_price: 0.24 - max_output_tokens: 5120 - supports_vision: true - - name: us.amazon.nova-micro-v1:0 - type: chat - max_input_tokens: 128000 - input_price: 0.035 - output_price: 0.14 - max_output_tokens: 5120 - - name: cohere.embed-english-v3 - type: embedding - input_price: 0.1 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 96 - - name: cohere.embed-multilingual-v3 - type: embedding - input_price: 0.1 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 96 - - name: us.deepseek.r1-v1:0 - type: chat - max_input_tokens: 128000 - input_price: 1.35 - output_price: 5.4 -- provider: cloudflare - models: - - name: '@cf/meta/llama-4-scout-17b-16e-instruct' - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 2048 - require_max_tokens: true - - name: '@cf/meta/llama-3.3-70b-instruct-fp8-fast' - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 2048 - require_max_tokens: true - - name: '@cf/qwen/qwen3-30b-a3b-fp8' - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 2048 - require_max_tokens: true - - name: '@cf/qwen/qwen2.5-coder-32b-instruct' - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 2048 - require_max_tokens: true - - name: '@cf/google/gemma-3-12b-it' - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 2048 - require_max_tokens: true - - name: '@cf/mistralai/mistral-small-3.1-24b-instruct' - type: chat - max_input_tokens: 131072 - input_price: 0.0 - output_price: 0.0 - max_output_tokens: 2048 - require_max_tokens: true - - name: '@cf/baai/bge-large-en-v1.5' - type: embedding - input_price: 0.0 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 100 -- provider: ernie - models: - - name: ernie-4.5-turbo-128k - type: chat - max_input_tokens: 131072 - input_price: 0.112 - output_price: 0.448 - - name: ernie-4.5-turbo-vl-32k - type: chat - max_input_tokens: 32768 - input_price: 0.42 - output_price: 1.26 - supports_vision: true - - name: ernie-5.0-thinking-preview - type: chat - max_input_tokens: 131072 - input_price: 1.4 - output_price: 5.6 - - name: ernie-x1.1-preview - type: chat - max_input_tokens: 65536 - input_price: 0.14 - output_price: 0.56 - - name: bge-large-zh - type: embedding - input_price: 0.07 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 16 - - name: bge-large-en - type: embedding - input_price: 0.07 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 16 - - name: bce-reranker-base - type: reranker - max_input_tokens: 1024 - input_price: 0.07 -- provider: qianwen - models: - - name: qwen3-max - type: chat - max_input_tokens: 262144 - supports_function_calling: true - - name: qwen-plus - type: chat - max_input_tokens: 131072 - supports_function_calling: true - - name: qwen-flash - type: chat - max_input_tokens: 1000000 - supports_function_calling: true - - name: qwen3-vl-plus - type: chat - max_input_tokens: 262144 - supports_vision: true - - name: qwen3-vl-flash - type: chat - max_input_tokens: 262144 - supports_vision: true - - name: qwen-coder-plus - type: chat - max_input_tokens: 1000000 - - name: qwen-coder-flash - type: chat - max_input_tokens: 1000000 - - name: qwen3-next-80b-a3b-instruct - type: chat - max_input_tokens: 131072 - input_price: 0.14 - output_price: 0.56 - supports_function_calling: true - - name: qwen3-next-80b-a3b-thinking - type: chat - max_input_tokens: 131072 - input_price: 0.14 - output_price: 1.4 - - name: qwen3-235b-a22b-instruct-2507 - type: chat - max_input_tokens: 131072 - input_price: 0.28 - output_price: 1.12 - supports_function_calling: true - - name: qwen3-235b-a22b-thinking-2507 - type: chat - max_input_tokens: 131072 - input_price: 0.28 - output_price: 2.8 - - name: qwen3-30b-a3b-instruct-2507 - type: chat - max_input_tokens: 131072 - input_price: 0.105 - output_price: 0.42 - supports_function_calling: true - - name: qwen3-30b-a3b-thinking-2507 - type: chat - max_input_tokens: 131072 - input_price: 0.105 - output_price: 1.05 - - name: qwen3-vl-32b-instruct - type: chat - max_input_tokens: 131072 - input_price: 0.28 - output_price: 1.12 - supports_vision: true - - name: qwen3-vl-8b-instruct - type: chat - max_input_tokens: 131072 - input_price: 0.07 - output_price: 0.28 - supports_vision: true - - name: qwen3-coder-480b-a35b-instruct - type: chat - max_input_tokens: 262144 - input_price: 1.26 - output_price: 5.04 - - name: qwen3-coder-30b-a3b-instruct - type: chat - max_input_tokens: 262144 - input_price: 0.315 - output_price: 1.26 - - name: deepseek-v3.2-exp - type: chat - max_input_tokens: 131072 - input_price: 0.28 - output_price: 0.42 - - name: text-embedding-v4 - type: embedding - input_price: 0.1 - max_tokens_per_chunk: 8192 - default_chunk_size: 2000 - max_batch_size: 10 - - name: text-embedding-v3 - type: embedding - input_price: 0.1 - max_tokens_per_chunk: 8192 - default_chunk_size: 2000 - max_batch_size: 10 -- provider: hunyuan - models: - - name: hunyuan-2.0-instruct-20251111 - type: chat - max_input_tokens: 131072 - input_price: 0.112 - output_price: 0.28 - supports_function_calling: true - - name: hunyuan-2.0-thinking-20251109 - type: chat - max_input_tokens: 131072 - input_price: 0.14 - output_price: 0.56 - supports_function_calling: true - - name: hunyuan-vision-1.5-instruct - type: chat - max_input_tokens: 24576 - input_price: 0.42 - output_price: 1.26 - supports_vision: true - - name: hunyuan-embedding - type: embedding - input_price: 0.01 - max_tokens_per_chunk: 1024 - default_chunk_size: 1000 - max_batch_size: 100 -- provider: moonshot - models: - - name: kimi-k2.5 - type: chat - max_input_tokens: 262144 - input_price: 0.56 - output_price: 2.94 - supports_vision: true - supports_function_calling: true - - name: kimi-k2-turbo-preview - type: chat - max_input_tokens: 262144 - input_price: 1.12 - output_price: 8.12 - supports_vision: true - supports_function_calling: true - - name: kimi-k2-0905-preview - type: chat - max_input_tokens: 262144 - input_price: 0.56 - output_price: 2.24 - supports_vision: true - supports_function_calling: true - - name: kimi-k2-thinking-turbo - type: chat - max_input_tokens: 262144 - input_price: 1.12 - output_price: 8.12 - supports_vision: true - - name: kimi-k2-thinking - type: chat - max_input_tokens: 262144 - input_price: 0.56 - output_price: 2.24 - supports_vision: true -- provider: deepseek - models: - - name: deepseek-chat - type: chat - max_input_tokens: 64000 - input_price: 0.56 - output_price: 1.68 - max_output_tokens: 8192 - supports_function_calling: true - - name: deepseek-reasoner - type: chat - max_input_tokens: 64000 - input_price: 0.56 - output_price: 1.68 - max_output_tokens: 32768 -- provider: zhipuai - models: - - name: glm-4.7 - type: chat - max_input_tokens: 202752 - input_price: 0.56 - output_price: 2.24 - supports_function_calling: true - - name: glm-4.7:instruct - type: chat - real_name: glm-4.7 - max_input_tokens: 202752 - input_price: 0.56 - output_price: 2.24 - patch: - body: - thinking: - type: disabled - supports_function_calling: true - - name: glm-4.7-flash - type: chat - max_input_tokens: 202752 - input_price: 0.0 - output_price: 0.0 - supports_function_calling: true - - name: glm-4.6v - type: chat - max_input_tokens: 65536 - input_price: 0.28 - output_price: 0.84 - supports_vision: true - - name: glm-4.6v-flash - type: chat - max_input_tokens: 65536 - input_price: 0.0 - output_price: 0.0 - supports_vision: true - - name: embedding-3 - type: embedding - max_input_tokens: 8192 - input_price: 0.07 - max_tokens_per_chunk: 8192 - default_chunk_size: 2000 - - name: rerank - type: reranker - max_input_tokens: 4096 - input_price: 0.112 -- provider: minimax - models: - - name: minimax-m2.1 - type: chat - max_input_tokens: 204800 - input_price: 0.294 - output_price: 1.176 - supports_function_calling: true - - name: minimax-m2.1-lightning - type: chat - max_input_tokens: 204800 - input_price: 0.294 - output_price: 2.352 - supports_function_calling: true -- provider: openrouter - models: - - name: openai/gpt-5.2 - type: chat - max_input_tokens: 400000 - input_price: 1.75 - output_price: 14.0 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: openai/gpt-5 - type: chat - max_input_tokens: 400000 - input_price: 1.25 - output_price: 10.0 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: openai/gpt-5-mini - type: chat - max_input_tokens: 400000 - input_price: 0.25 - output_price: 2.0 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: openai/gpt-5-nano - type: chat - max_input_tokens: 400000 - input_price: 0.05 - output_price: 0.4 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: openai/gpt-4.1 - type: chat - max_input_tokens: 1047576 - input_price: 2.0 - output_price: 8.0 - max_output_tokens: 32768 - supports_vision: true - supports_function_calling: true - - name: openai/gpt-4o - type: chat - max_input_tokens: 128000 - input_price: 2.5 - output_price: 10.0 - supports_vision: true - supports_function_calling: true - - name: openai/gpt-oss-120b - type: chat - max_input_tokens: 131072 - input_price: 0.09 - output_price: 0.45 - supports_function_calling: true - - name: openai/gpt-oss-20b - type: chat - max_input_tokens: 131072 - input_price: 0.04 - output_price: 0.16 - supports_function_calling: true - - name: google/gemini-2.5-flash - type: chat - max_input_tokens: 1048576 - input_price: 0.3 - output_price: 2.5 - supports_vision: true - supports_function_calling: true - - name: google/gemini-2.5-pro - type: chat - max_input_tokens: 1048576 - input_price: 1.25 - output_price: 10.0 - supports_vision: true - supports_function_calling: true - - name: google/gemini-2.5-flash-lite - type: chat - max_input_tokens: 1048576 - input_price: 0.3 - output_price: 0.4 - supports_vision: true - - name: google/gemini-2.0-flash-001 - type: chat - max_input_tokens: 1000000 - input_price: 0.15 - output_price: 0.6 - supports_vision: true - supports_function_calling: true - - name: google/gemini-2.0-flash-lite-001 - type: chat - max_input_tokens: 1048576 - input_price: 0.075 - output_price: 0.3 - supports_vision: true - supports_function_calling: true - - name: google/gemma-3-27b-it - type: chat - max_input_tokens: 131072 - input_price: 0.1 - output_price: 0.2 - - name: anthropic/claude-sonnet-4.5 - type: chat - max_input_tokens: 200000 - input_price: 3.0 - output_price: 15.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: anthropic/claude-haiku-4.5 - type: chat - max_input_tokens: 200000 - input_price: 1.0 - output_price: 5.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: anthropic/claude-opus-4.5 - type: chat - max_input_tokens: 200000 - input_price: 5.0 - output_price: 25.0 - max_output_tokens: 8192 - require_max_tokens: true - supports_vision: true - supports_function_calling: true - - name: meta-llama/llama-4-maverick - type: chat - max_input_tokens: 1048576 - input_price: 0.18 - output_price: 0.6 - supports_vision: true - supports_function_calling: true - - name: meta-llama/llama-4-scout - type: chat - max_input_tokens: 327680 - input_price: 0.08 - output_price: 0.3 - supports_vision: true - supports_function_calling: true - - name: meta-llama/llama-3.3-70b-instruct - type: chat - max_input_tokens: 131072 - input_price: 0.12 - output_price: 0.3 - - name: mistralai/mistral-large-2512 - type: chat - max_input_tokens: 262144 - input_price: 0.5 - output_price: 1.5 - supports_function_calling: true - - name: mistralai/mistral-medium-3.1 - type: chat - max_input_tokens: 131072 - input_price: 0.4 - output_price: 2.0 - supports_vision: true - supports_function_calling: true - - name: mistralai/mistral-small-3.2-24b-instruct - type: chat - max_input_tokens: 131072 - input_price: 0.1 - output_price: 0.3 - supports_vision: true - - name: mistralai/devstral-2512 - type: chat - max_input_tokens: 262144 - input_price: 0.5 - output_price: 0.22 - supports_function_calling: true - - name: mistralai/devstral-small - type: chat - max_input_tokens: 131072 - input_price: 0.07 - output_price: 0.28 - supports_function_calling: true - - name: mistralai/codestral-2508 - type: chat - max_input_tokens: 256000 - input_price: 0.3 - output_price: 0.9 - supports_function_calling: true - - name: mistralai/ministral-14b-2512 - type: chat - max_input_tokens: 262144 - input_price: 0.2 - output_price: 0.2 - supports_function_calling: true - - name: ai21/jamba-large-1.7 - type: chat - max_input_tokens: 256000 - input_price: 2.0 - output_price: 8.0 - supports_function_calling: true - - name: ai21/jamba-mini-1.7 - type: chat - max_input_tokens: 256000 - input_price: 0.2 - output_price: 0.4 - supports_function_calling: true - - name: cohere/command-a - type: chat - max_input_tokens: 256000 - input_price: 2.5 - output_price: 10.0 - supports_function_calling: true - - name: cohere/command-r7b-12-2024 - type: chat - max_input_tokens: 128000 - input_price: 0.0375 - output_price: 0.15 - max_output_tokens: 4096 - - name: deepseek/deepseek-v3.2 - type: chat - max_input_tokens: 163840 - input_price: 0.25 - output_price: 0.38 - - name: qwen/qwen3-max - type: chat - max_input_tokens: 262144 - input_price: 1.2 - output_price: 6.0 - supports_function_calling: true - - name: qwen/qwen-plus - type: chat - max_input_tokens: 131072 - input_price: 0.4 - output_price: 1.2 - max_output_tokens: 8192 - supports_function_calling: true - - name: qwen/qwen3-next-80b-a3b-instruct - type: chat - max_input_tokens: 262144 - input_price: 0.1 - output_price: 0.8 - supports_function_calling: true - - name: qwen/qwen3-next-80b-a3b-thinking - type: chat - max_input_tokens: 262144 - input_price: 0.1 - output_price: 0.8 - - name: qwen/qwen5-235b-a22b-2507 - type: chat - max_input_tokens: 262144 - input_price: 0.12 - output_price: 0.59 - supports_function_calling: true - - name: qwen/qwen3-235b-a22b-thinking-2507 - type: chat - max_input_tokens: 262144 - input_price: 0.118 - output_price: 0.118 - - name: qwen/qwen3-30b-a3b-instruct-2507 - type: chat - max_input_tokens: 131072 - input_price: 0.2 - output_price: 0.8 - - name: qwen/qwen3-30b-a3b-thinking-2507 - type: chat - max_input_tokens: 262144 - input_price: 0.071 - output_price: 0.285 - - name: qwen/qwen3-vl-32b-instruct - type: chat - max_input_tokens: 262144 - input_price: 0.35 - output_price: 1.1 - supports_vision: true - - name: qwen/qwen3-vl-8b-instruct - type: chat - max_input_tokens: 262144 - input_price: 0.08 - output_price: 0.5 - supports_vision: true - - name: qwen/qwen3-coder-plus - type: chat - max_input_tokens: 128000 - input_price: 1.0 - output_price: 5.0 - supports_function_calling: true - - name: qwen/qwen3-coder-flash - type: chat - max_input_tokens: 128000 - input_price: 0.3 - output_price: 1.5 - supports_function_calling: true - - name: qwen/qwen3-coder - type: chat - max_input_tokens: 262144 - input_price: 0.22 - output_price: 0.95 - supports_function_calling: true - - name: qwen/qwen3-coder-30b-a3b-instruct - type: chat - max_input_tokens: 262144 - input_price: 0.052 - output_price: 0.207 - supports_function_calling: true - - name: moonshotai/kimi-k2.5 - type: chat - max_input_tokens: 262144 - input_price: 0.57 - output_price: 2.85 - supports_vision: true - supports_function_calling: true - - name: moonshotai/kimi-k2-0905 - type: chat - max_input_tokens: 262144 - input_price: 0.296 - output_price: 1.185 - supports_vision: true - supports_function_calling: true - - name: moonshotai/kimi-k2-thinking - type: chat - max_input_tokens: 262144 - input_price: 0.45 - output_price: 2.35 - supports_function_calling: true - - name: moonshotai/kimi-dev-72b - type: chat - max_input_tokens: 131072 - input_price: 0.29 - output_price: 1.15 - supports_function_calling: true - - name: x-ai/grok-4.1-fast - type: chat - max_input_tokens: 2000000 - input_price: 0.2 - output_price: 0.5 - supports_function_calling: true - - name: x-ai/grok-code-fast-1 - type: chat - max_input_tokens: 256000 - input_price: 0.2 - output_price: 1.5 - supports_function_calling: true - - name: amazon/nova-premier-v1 - type: chat - max_input_tokens: 1000000 - input_price: 2.5 - output_price: 12.5 - supports_vision: true - - name: amazon/nova-pro-v1 - type: chat - max_input_tokens: 300000 - input_price: 0.8 - output_price: 3.2 - max_output_tokens: 5120 - supports_vision: true - - name: amazon/nova-lite-v1 - type: chat - max_input_tokens: 300000 - input_price: 0.06 - output_price: 0.24 - max_output_tokens: 5120 - supports_vision: true - - name: amazon/nova-micro-v1 - type: chat - max_input_tokens: 128000 - input_price: 0.035 - output_price: 0.14 - max_output_tokens: 5120 - - name: perplexity/sonar-pro - type: chat - max_input_tokens: 200000 - input_price: 3.0 - output_price: 15.0 - - name: perplexity/sonar - type: chat - max_input_tokens: 127072 - input_price: 1.0 - output_price: 1.0 - - name: perplexity/sonar-reasoning-pro - type: chat - max_input_tokens: 128000 - input_price: 2.0 - output_price: 8.0 - patch: - body: - include_reasoning: true - - name: perplexity/sonar-deep-research - type: chat - max_input_tokens: 200000 - input_price: 2.0 - output_price: 8.0 - patch: - body: - include_reasoning: true - - name: minimax/minimax-m2.1 - type: chat - max_input_tokens: 196608 - input_price: 0.12 - output_price: 0.48 - supports_function_calling: true - - name: z-ai/glm-4.7 - type: chat - max_input_tokens: 202752 - input_price: 0.16 - output_price: 0.8 - supports_function_calling: true - - name: z-ai/glm-4.7-flash - type: chat - max_input_tokens: 202752 - input_price: 0.07 - output_price: 0.4 - supports_function_calling: true - - name: z-ai/glm-4.6v - type: chat - max_input_tokens: 131072 - input_price: 0.3 - output_price: 0.9 - supports_vision: true -- provider: github - models: - - name: gpt-5 - type: chat - max_input_tokens: 400000 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: gpt-5-mini - type: chat - max_input_tokens: 400000 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: gpt-5-nano - type: chat - max_input_tokens: 400000 - max_output_tokens: 128000 - supports_vision: true - supports_function_calling: true - - name: gpt-4.1 - type: chat - max_input_tokens: 1047576 - max_output_tokens: 32768 - supports_vision: true - supports_function_calling: true - - name: gpt-4o - type: chat - max_input_tokens: 128000 - max_output_tokens: 16384 - supports_function_calling: true - - name: text-embedding-3-large - type: embedding - max_tokens_per_chunk: 8191 - default_chunk_size: 2000 - max_batch_size: 100 - - name: text-embedding-3-small - type: embedding - max_tokens_per_chunk: 8191 - default_chunk_size: 2000 - max_batch_size: 100 - - name: llama-4-maverick-17b-128e-instruct-fp8 - type: chat - max_input_tokens: 1048576 - supports_vision: true - - name: llama-4-scout-17b-16e-instruct - type: chat - max_input_tokens: 327680 - supports_vision: true - - name: llama-3.3-70b-instruct - type: chat - max_input_tokens: 131072 - - name: mistral-medium-2505 - type: chat - max_input_tokens: 131072 - supports_function_calling: true - - name: mistral-small-2503 - type: chat - max_input_tokens: 131072 - supports_function_calling: true - - name: codestral-2501 - type: chat - max_input_tokens: 256000 - supports_function_calling: true - - name: cohere-embed-v3-english - type: embedding - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 96 - - name: cohere-embed-v3-multilingual - type: embedding - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 96 - - name: deepseek-r1-0528 - type: chat - max_input_tokens: 163840 - - name: deepseek-v3-0324 - type: chat - max_input_tokens: 163840 - - name: mai-ds-r1 - type: chat - max_input_tokens: 163840 - - name: phi-4 - type: chat - max_input_tokens: 16384 - - name: phi-4-mini-instruct - type: chat - max_input_tokens: 131072 - - name: phi-4-reasoning - type: chat - max_input_tokens: 33792 - - name: phi-4-mini-reasoning - type: chat - max_input_tokens: 131072 - - name: grok-3 - type: chat - max_input_tokens: 131072 - - name: grok-3-mini - type: chat - max_input_tokens: 131072 -- provider: deepinfra - models: - - name: openai/gpt-oss-120b - type: chat - max_input_tokens: 131072 - input_price: 0.09 - output_price: 0.45 - supports_function_calling: true - - name: openai/gpt-oss-20b - type: chat - max_input_tokens: 131072 - input_price: 0.04 - output_price: 0.16 - supports_function_calling: true - - name: meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8 - type: chat - max_input_tokens: 1048576 - input_price: 0.18 - output_price: 0.6 - supports_vision: true - - name: meta-llama/Llama-4-Scout-17B-16E-Instruct - type: chat - max_input_tokens: 327680 - input_price: 0.08 - output_price: 0.3 - supports_vision: true - - name: Qwen/Qwen3-Next-80B-A3B-Instruct - type: chat - max_input_tokens: 262144 - input_price: 0.14 - output_price: 1.4 - supports_function_calling: true - - name: Qwen/Qwen3-Next-80B-A3B-Thinking - type: chat - max_input_tokens: 262144 - input_price: 0.14 - output_price: 1.4 - - name: Qwen/Qwen3-235B-A22B-Instruct-2507 - type: chat - max_input_tokens: 131072 - input_price: 0.13 - output_price: 0.6 - supports_function_calling: true - - name: Qwen/Qwen3-235B-A22B-Thinking-2507 - type: chat - max_input_tokens: 131072 - input_price: 0.13 - output_price: 0.6 - - name: Qwen/Qwen3-Coder-480B-A35B-Instruct - type: chat - max_input_tokens: 131072 - input_price: 0.4 - output_price: 1.6 - supports_function_calling: true - - name: Qwen/Qwen3-Coder-30B-A3B-Instruct - type: chat - max_input_tokens: 262144 - input_price: 0.07 - output_price: 0.27 - supports_function_calling: true - - name: Qwen/Qwen3-30B-A3B - type: chat - max_input_tokens: 40960 - input_price: 0.1 - output_price: 0.3 - - name: Qwen/Qwen3-VL-8B-Instruct - type: chat - max_input_tokens: 262144 - input_price: 0.18 - output_price: 0.69 - supports_vision: true - - name: deepseek-ai/DeepSeek-V3.2 - type: chat - max_input_tokens: 163840 - input_price: 0.26 - output_price: 0.39 - supports_function_calling: true - - name: google/gemma-3-27b-it - type: chat - max_input_tokens: 131072 - input_price: 0.1 - output_price: 0.2 - - name: mistralai/Mistral-Small-3.2-24B-Instruct-2506 - type: chat - max_input_tokens: 32768 - input_price: 0.06 - output_price: 0.12 - - name: moonshotai/Kimi-K2.5 - type: chat - max_input_tokens: 262144 - input_price: 0.5 - output_price: 2.8 - supports_function_calling: true - - name: moonshotai/Kimi-K2-Instruct-0905 - type: chat - max_input_tokens: 262144 - input_price: 0.5 - output_price: 2.0 - supports_function_calling: true - - name: moonshotai/Kimi-K2-Thinking - type: chat - max_input_tokens: 262144 - input_price: 0.55 - output_price: 2.5 - supports_function_calling: true - - name: MiniMaxAI/MiniMax-M2.1 - type: chat - max_input_tokens: 262144 - input_price: 0.28 - output_price: 1.2 - supports_function_calling: true - - name: zai-org/GLM-4.7 - type: chat - max_input_tokens: 202752 - input_price: 0.43 - output_price: 1.75 - supports_function_calling: true - - name: zai-org/GLM-4.6V - type: chat - max_input_tokens: 131072 - input_price: 0.3 - output_price: 0.9 - supports_vision: true - - name: BAAI/bge-large-en-v1.5 - type: embedding - input_price: 0.01 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 100 - - name: BAAI/bge-m3 - type: embedding - input_price: 0.01 - max_tokens_per_chunk: 8192 - default_chunk_size: 2000 - max_batch_size: 100 - - name: intfloat/e5-large-v2 - type: embedding - input_price: 0.01 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 100 - - name: intfloat/multilingual-e5-large - type: embedding - input_price: 0.01 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 100 - - name: thenlper/gte-large - type: embedding - input_price: 0.01 - max_tokens_per_chunk: 512 - default_chunk_size: 1000 - max_batch_size: 100 -- provider: jina - models: - - name: jina-embeddings-v3 - type: embedding - input_price: 0.0 - max_tokens_per_chunk: 8192 - default_chunk_size: 2000 - max_batch_size: 100 - - name: jina-clip-v2 - type: embedding - input_price: 0.0 - max_tokens_per_chunk: 8192 - default_chunk_size: 1500 - max_batch_size: 100 - - name: jina-colbert-v2 - type: embedding - input_price: 0.0 - max_tokens_per_chunk: 8192 - default_chunk_size: 1500 - max_batch_size: 100 - - name: jina-reranker-v2-base-multilingual - type: reranker - max_input_tokens: 8192 - input_price: 0.0 - - name: jina-colbert-v2 - type: reranker - max_input_tokens: 8192 - input_price: 0.0 -- provider: voyageai - models: - - name: voyage-3-large - type: embedding - max_input_tokens: 120000 - input_price: 0.18 - max_tokens_per_chunk: 32000 - default_chunk_size: 2000 - max_batch_size: 128 - - name: voyage-3 - type: embedding - max_input_tokens: 320000 - input_price: 0.06 - max_tokens_per_chunk: 32000 - default_chunk_size: 2000 - max_batch_size: 128 - - name: voyage-3-lite - type: embedding - max_input_tokens: 1000000 - input_price: 0.02 - max_tokens_per_chunk: 32000 - default_chunk_size: 1000 - max_batch_size: 128 - - name: rerank-2 - type: reranker - max_input_tokens: 16000 - input_price: 0.05 - - name: rerank-2-lite - type: reranker - max_input_tokens: 8000 - input_price: 0.02 diff --git a/machines/desktop/config/fish/config.fish b/machines/desktop/config/fish/config.fish deleted file mode 100644 index a42813d..0000000 --- a/machines/desktop/config/fish/config.fish +++ /dev/null @@ -1,42 +0,0 @@ -if status is-interactive - zoxide init fish | source - - set -U fish_greeting - - set -gx EDITOR nvim - set -gx VISUAL nvim - - set -gx PAGER less - set -gx LESS "-R --mouse -F -X" - - abbr -a v 'nvim' - abbr -a vi 'nvim' - abbr -a ll 'ls -lah' - abbr -a la 'ls -A' - abbr -a .. 'cd ..' - abbr -a ... 'cd ../..' - - abbr -a cp 'cp -i' - abbr -a mv 'mv -i' - abbr -a rm 'rm -i' - - alias ai="aichat" - alias llm="aichat" - - if type -q fzf - fzf --fish | source - end - - if type -q starship - if test "$TERM" != linux - starship init fish | source - end - end - - if test -z "$WAYLAND_DISPLAY"; and test (tty) = "/dev/tty1" - exec sway - end - -end - - diff --git a/machines/desktop/config/foot/foot.ini b/machines/desktop/config/foot/foot.ini deleted file mode 100644 index f3a05a0..0000000 --- a/machines/desktop/config/foot/foot.ini +++ /dev/null @@ -1,5 +0,0 @@ -[main] -font=Hack Nerd Font:size=10 - -[colors-dark] -background=101010 diff --git a/machines/desktop/config/nvim/init.lua.bak b/machines/desktop/config/nvim/init.lua.bak deleted file mode 100644 index e225ef3..0000000 --- a/machines/desktop/config/nvim/init.lua.bak +++ /dev/null @@ -1,606 +0,0 @@ --- Leaders / globals -vim.g.mapleader = " " -vim.g.maplocalleader = " " - --- Options -vim.opt.termguicolors = true -vim.opt.number = true -vim.opt.relativenumber = true -vim.opt.signcolumn = "yes" -vim.opt.cursorline = true -vim.opt.laststatus = 2 - -vim.opt.splitbelow = true -vim.opt.splitright = true - -vim.opt.ignorecase = true -vim.opt.smartcase = true -vim.opt.incsearch = true -vim.opt.hlsearch = true -vim.opt.expandtab = true -vim.opt.tabstop = 2 -vim.opt.shiftwidth = 2 -vim.opt.softtabstop = 2 -vim.opt.smartindent = true -vim.opt.breakindent = true - -vim.opt.undofile = true -vim.opt.swapfile = false -vim.opt.backup = false -vim.opt.confirm = true - -vim.opt.clipboard = "unnamedplus" - -vim.opt.scrolloff = 8 - - --- Keymaps -vim.keymap.set("n", "", "nohlsearch", { desc = "Clear search highlight" }) - -vim.keymap.set("n", "j", "gj", { silent = true }) -vim.keymap.set("n", "k", "gk", { silent = true }) -vim.keymap.set("v", "<", "", ">gv") - -vim.keymap.set("n", "", function() - vim.lsp.buf.format({ timeout_ms = 2000 }) - vim.cmd("w") -end, { desc = "Format + Write" }) - -vim.keymap.set("i", "", function() - vim.cmd("stopinsert") - vim.lsp.buf.format({ timeout_ms = 2000 }) - vim.cmd("w") -end, { desc = "Format + Write" }) - -vim.keymap.set("n", "", "h", { desc = "Window left" }) -vim.keymap.set("n", "", "j", { desc = "Window down" }) -vim.keymap.set("n", "", "k", { desc = "Window up" }) -vim.keymap.set("n", "", "l", { desc = "Window right" }) - -vim.keymap.set("t", "", [[h]], { desc = "Terminal window left" }) -vim.keymap.set("t", "", [[j]], { desc = "Terminal window down" }) -vim.keymap.set("t", "", [[k]], { desc = "Terminal window up" }) -vim.keymap.set("t", "", [[l]], { desc = "Terminal window right" }) - -vim.keymap.set("n", "bb", "buffers", { desc = "List buffers" }) -vim.keymap.set("n", "bl", "b#", { desc = "Last buffer" }) -vim.keymap.set("n", "bd", "bdelete", { desc = "Delete buffer" }) -vim.keymap.set("n", "bD", "bdelete!", { desc = "Force delete buffer" }) -vim.keymap.set("n", "bw", "bwipeout", { desc = "Wipe buffer" }) -vim.keymap.set("n", "bo", "%bdelete|edit#|bdelete#", { desc = "Delete other buffers" }) -vim.keymap.set("n", "ba", "%bdelete", { desc = "Delete all buffers" }) - -vim.keymap.set('n', 'H', ':bprevious', { silent = true }) -vim.keymap.set('n', 'L', ':bnext', { silent = true }) - -vim.keymap.set('t', '', '', { noremap = true, silent = true }) - - --- lazy.nvim bootstrap -local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = "https://github.com/folke/lazy.nvim.git" - local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) - if vim.v.shell_error ~= 0 then - vim.api.nvim_echo({ - { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, - { out, "WarningMsg" }, - { "\nPress any key to exit..." }, - }, true, {}) - vim.fn.getchar() - os.exit(1) - end -end -vim.opt.rtp:prepend(lazypath) - --- Plugins -require("lazy").setup({ - -- Themes - { - "vague-theme/vague.nvim", - lazy = false, - priority = 1000, - config = function() - vim.cmd("colorscheme koda") - end, - }, - { "rebelot/kanagawa.nvim" }, - { "nendix/zen.nvim"}, - { "oskarnurm/koda.nvim" }, - { "datsfilipe/vesper.nvim" }, - { "metalelf0/base16-black-metal-scheme" }, - - -- LSP / Completion - { "neovim/nvim-lspconfig" }, - { - "saghen/blink.cmp", - version = "1.*", - opts = { - keymap = { - preset = "none", - [""] = { "show", "show_documentation", "hide_documentation" }, - [""] = { "hide" }, - - [""] = { "scroll_documentation_up" }, - [""] = { "scroll_documentation_down" }, - - [""] = { "accept", "fallback" }, - - [""] = { "snippet_forward", "fallback" }, - [""] = { "snippet_backward", "fallback" }, - - [""] = { "select_next", "fallback" }, - [""] = { "select_prev", "fallback" }, - - }, - completion = { - documentation = { - auto_show = true, - }, - list = { - selection = { - auto_insert = false, - preselect = true - } - } - }, - sources = { - default = { "lsp", "path", "buffer", "snippets" }, - }, - snippets = { - preset = "luasnip", - } - }, - }, - { - "L3MON4D3/LuaSnip", - version = "v2.*", - build = "make install_jsregexp", - dependencies = { "rafamadriz/friendly-snippets" }, - config = function() - local luasnip = require("luasnip") - luasnip.config.setup({ - history = true, - update_events = { "TextChanged", "TextChangedI" }, - region_check_events = { "CursorMoved", "CursorHold", "InsertEnter" }, - delete_check_events = { "TextChanged", "InsertLeave" }, - enable_autosnippets = true, - store_selection_keys = "", - }) - - require("luasnip.loaders.from_vscode").lazy_load() - - end, - }, - { - "lervag/vimtex", - lazy = false, - init = function() - vim.g.vimtex_view_method = "zathura" - vim.g.vimtex_quickfix_mode = 0 - end - }, - { - "iurimateus/luasnip-latex-snippets.nvim", - dependencies = { "L3MON4D3/LuaSnip", "lervag/vimtex" }, - config = function() - require('luasnip-latex-snippets').setup({ - use_treesitter = true - }) - end, - }, - { - "chomosuke/typst-preview.nvim", - lazy = false, - version = "1.*", - opts = {} - }, - { - "selimacerbas/markdown-preview.nvim", - dependencies = { "selimacerbas/live-server.nvim" }, - config = function() - require("markdown_preview").setup({ - port = 8421, - open_browser = false, - debounce_ms = 0, - mermaid_renderer = "rust" - }) - end, - }, - { - 'MeanderingProgrammer/render-markdown.nvim', - dependencies = { 'nvim-treesitter/nvim-treesitter', 'nvim-tree/nvim-web-devicons' }, -- if you prefer nvim-web-devicons - ---@module 'render-markdown' - ---@type render.md.UserConfig - opts = {}, - }, - { - "NickvanDyke/opencode.nvim", - config = function() - vim.g.opencode_opts = {} - vim.o.autoread = true - - vim.keymap.set({ "n", "x" }, "aa", function() require("opencode").ask("@this: ", { submit = true }) end, - { desc = "AI Ask" }) - vim.keymap.set({ "n", "x" }, "as", function() require("opencode").select() end, - { desc = "AI Select action" }) - vim.keymap.set({ "n", "x" }, "at", function() require("opencode").toggle() end, - { desc = "AI Toggle panel" }) - vim.keymap.set({ "n", "x" }, "ar", function() return require("opencode").operator("@this ") end, - { desc = "AI Add range", expr = true }) - vim.keymap.set("n", "al", function() return require("opencode").operator("@this ") .. "_" end, - { desc = "AI Add line", expr = true }) - - vim.keymap.set("n", "au", function() require("opencode").command("session.half.page.up") end, - { desc = "AI Scroll up" }) - vim.keymap.set("n", "ad", function() require("opencode").command("session.half.page.down") end, - { desc = "AI Scroll down" }) - end, - }, - { - "github/copilot.vim", - init = function() - vim.g.copilot_no_tab_map = true - vim.g.copilot_assume_mapped = true - end, - config = function() - vim.keymap.set("i", "", 'copilot#Accept("\\")', { - expr = true, - replace_keycodes = false, - silent = true - }) - - vim.keymap.set("i", "", 'copilot#AcceptWord()', { expr = true, silent = true }) - vim.keymap.set("i", "", 'copilot#AcceptLine()', { expr = true, silent = true }) - vim.keymap.set("n", "ac", "Copilot toggle", { desc = "Toggle Copilot" }) - end - }, - -- File explorer / Search - { - "nvim-neo-tree/neo-tree.nvim", - branch = "v3.x", - dependencies = { - "nvim-lua/plenary.nvim", - "MunifTanjim/nui.nvim", - "nvim-tree/nvim-web-devicons", - }, - lazy = false, - opts = { - window = { - width = 80, - }, - filesystem = { - filtered_items = { - hide_dotfiles = false, - }, - follow_current_file = { - enabled = true, - }, - group_empty_dirs = true, - }, - default_component_configs = { - indent = { - indent_size = 2, - with_markers = true, - }, - }, - }, - keys = { - { - "e", - function() - vim.cmd("Neotree position=right toggle") - end, - desc = "Neo-tree (right)", - }, - }, - }, - { - "stevearc/oil.nvim", - dependencies = { "nvim-tree/nvim-web-devicons" }, - opts = {}, - keys = { - { "E", "Oil", desc = "Oil" }, - }, - }, - { - "ibhagwan/fzf-lua", - dependencies = { "nvim-tree/nvim-web-devicons" }, - opts = function() - local actions = require("fzf-lua.actions") - return { - files = { - actions = { - ["default"] = actions.file_edit, - }, - }, - } - end, - keys = { - { "ff", function() require("fzf-lua").files() end, desc = "Find files" }, - { "fb", function() require("fzf-lua").buffers() end, desc = "Find buffers" }, - { "fo", function() require("fzf-lua").oldfiles() end, desc = "Find recent files" }, - { "ft", function() require("fzf-lua").live_grep() end, desc = "Find text in project" }, - { "fs", function() require("fzf-lua").lsp_document_symbols() end, desc = "Find document symbols" }, - - { "", function() require("fzf-lua").grep_curbuf() end, desc = "Find text in buffer" }, - { "/", function() require("fzf-lua").grep_curbuf() end, desc = "Find text in buffer" }, - - { "fh", function() require("fzf-lua").helptags() end, desc = "Find help tags" }, - }, - }, - - -- Git - { - "tpope/vim-fugitive", - cmd = { "Git", "G" }, - }, - { "lewis6991/gitsigns.nvim" }, - { - "kdheepak/lazygit.nvim", - lazy = true, - cmd = { - "LazyGit", - "LazyGitConfig", - "LazyGitCurrentFile", - "LazyGitFilter", - "LazyGitFilterCurrentFile", - }, - dependencies = { - "nvim-lua/plenary.nvim", - }, - keys = { - { "gg", "LazyGit", desc = "LazyGit" }, - }, - }, - - -- Editing utilities - { "MagicDuck/grug-far.nvim" }, - { - "kylechui/nvim-surround", - event = "VeryLazy", - config = function() - require("nvim-surround").setup({}) - end, - }, - { - "windwp/nvim-autopairs", - event = "InsertEnter", - config = true - }, - { - 'abecodes/tabout.nvim', - lazy = false, - config = function() - require('tabout').setup { - tabkey = '', -- key to trigger tabout, set to an empty string to disable - backwards_tabkey = '', -- key to trigger backwards tabout, set to an empty string to disable - act_as_tab = true, -- shift content if tab out is not possible - act_as_shift_tab = false, -- reverse shift content if tab out is not possible (if your keyboard/terminal supports ) - default_tab = '', -- shift default action (only at the beginning of a line, otherwise is used) - default_shift_tab = '', -- reverse shift default action, - enable_backwards = true, -- well ... - completion = false, -- if the tabkey is used in a completion pum - tabouts = { - { open = "'", close = "'" }, - { open = '"', close = '"' }, - { open = '`', close = '`' }, - { open = '(', close = ')' }, - { open = '[', close = ']' }, - { open = '{', close = '}' }, - { open = ',', close = ',' } - }, - ignore_beginning = true, --[[ if the cursor is at the beginning of a filled element it will rather tab out than shift the content ]] - exclude = {} -- tabout will ignore these filetypes - } - end, - dependencies = { -- These are optional - "nvim-treesitter/nvim-treesitter", - "L3MON4D3/LuaSnip", - }, - event = 'InsertCharPre', -- Set the event to 'InsertCharPre' for better compatibility - priority = 1000, - }, - - -- Motion / UI - { - "folke/flash.nvim", - event = "VeryLazy", - opts = { - modes = { - treesitter = { - jump = { pos = "start" }, -- or "end" - }, - }, - }, - keys = { - { "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" }, - { "S", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" }, - }, - }, - { - "nvim-treesitter/nvim-treesitter", - event = { "BufReadPost", "BufNewFile" }, - build = ":TSUpdate", - config = function() - require("nvim-treesitter").setup({ - ensure_installed = { - "markdown", - "markdown_inline", - "go", - "latex", - "typst", - "lua", - }, - highlight = { - enable = true, - }, - }) - end, - }, - { - "wellle/targets.vim", - event = "VeryLazy", - }, - { - 'nvim-lualine/lualine.nvim', - dependencies = { 'nvim-tree/nvim-web-devicons' }, - opts = function() - local function pretty_path() - local name = vim.api.nvim_buf_get_name(0) - if name == '' then return '[No Name]' end - -- Relative to current working directory, nicely normalized - return vim.fn.fnamemodify(name, ':.') - end - - return { - options = { - section_separators = '', - component_separators = '', - globalstatus = true, - }, - - sections = { - lualine_a = { 'mode' }, - lualine_b = { { 'branch', icon = '' }, 'diff' }, - lualine_c = { - { 'diagnostics' }, -- uses vim.diagnostic by default - { 'filename', path = 1, symbols = { modified = ' ●', readonly = ' ' } }, - }, - lualine_x = { 'encoding', 'fileformat', 'filetype', require("opencode").statusline }, - lualine_y = { 'progress' }, - lualine_z = { 'location' }, - }, - - -- Global list (best place for buffers) - tabline = { - lualine_a = { - { - 'buffers', - show_filename_only = true, - show_modified_status = true, - mode = 2, - max_length = vim.o.columns * 8 / 10, - use_mode_colors = true, - buffers_color = { - active = 'lualine_a_normal', - inactive = 'lualine_b_inactive', - } - }, - }, - lualine_z = { 'tabs' }, - }, - } - end - }, - { - "goolord/alpha-nvim", - dependencies = { - "nvim-tree/nvim-web-devicons", - "nvim-lua/plenary.nvim", - }, - config = function() - require("alpha").setup(require("alpha.themes.theta").config) - end - }, - { - "chentoast/marks.nvim", - event = "VeryLazy", - opts = {}, - }, - { - "leath-dub/snipe.nvim", - keys = { - { "", function() require("snipe").open_buffer_menu() end, desc = "Open Snipe buffer menu" } - }, - opts = {} - }, - { - "folke/which-key.nvim", - event = "VeryLazy", - opts = { - preset = "helix" - }, - keys = { - { - "?", - function() - require("which-key").show({ global = false }) - end, - desc = "Buffer Local Keymaps (which-key)", - }, - }, - }, - { - "j-hui/fidget.nvim", - opts = {}, - }, - { - "christoomey/vim-tmux-navigator", - cmd = { - "TmuxNavigateLeft", - "TmuxNavigateDown", - "TmuxNavigateUp", - "TmuxNavigateRight", - "TmuxNavigatePrevious", - "TmuxNavigatorProcessList", - }, - keys = { - { "", "TmuxNavigateLeft" }, - { "", "TmuxNavigateDown" }, - { "", "TmuxNavigateUp" }, - { "", "TmuxNavigateRight" }, - { "", "TmuxNavigatePrevious" }, - }, - } -}) - --- LSP -vim.lsp.config("lua_ls", { - settings = { - Lua = { - diagnostics = { - globals = { "vim" }, - }, - workspace = { - checkThirdParty = false, - }, - }, - }, -}) - -vim.lsp.enable({ - "lua_ls", - "tinymist", - "gopls", -}) - -vim.keymap.set("n", "ca", vim.lsp.buf.code_action, { desc = "Code Action" }) -vim.keymap.set("v", "ca", vim.lsp.buf.code_action, { desc = "Code Action" }) -vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "Goto definition" }) -vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "Goto declaration" }) -vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { desc = "Goto implementation" }) -vim.keymap.set("n", "gr", vim.lsp.buf.references, { desc = "References" }) -vim.keymap.set("n", "gy", vim.lsp.buf.type_definition, { desc = "Goto type definition" }) - -vim.keymap.set("n", "K", vim.lsp.buf.hover, { desc = "Hover" }) -vim.keymap.set("i", "", vim.lsp.buf.signature_help, { desc = "Signature help" }) - -vim.keymap.set("n", "cs", vim.lsp.buf.document_symbol, { desc = "Document symbols" }) -vim.keymap.set("n", "cS", vim.lsp.buf.workspace_symbol, { desc = "Workspace symbols" }) - -vim.keymap.set("n", "cf", function() - vim.lsp.buf.format({ async = true }) -end, { desc = "Format buffer" }) - -vim.keymap.set("n", "cr", vim.lsp.buf.rename, { desc = "Rename" }) - -vim.diagnostic.config({ - virtual_text = true, - signs = true, - underline = true, - update_in_insert = false, - severity_sort = true, - float = { border = "rounded", source = "if_many" }, -}) diff --git a/machines/desktop/config/nvim/init2.lua.bak b/machines/desktop/config/nvim/init2.lua.bak deleted file mode 100644 index 4f166f4..0000000 --- a/machines/desktop/config/nvim/init2.lua.bak +++ /dev/null @@ -1,843 +0,0 @@ --- phill Neovim config (nightly) - -vim.g.mapleader = " " -vim.g.maplocalleader = " " - -local opt = vim.opt -local map = vim.keymap.set - --- ============================================================================ --- Core options --- ============================================================================ - -opt.number = true -opt.relativenumber = true -opt.mouse = "a" -opt.clipboard = "unnamedplus" - -opt.swapfile = false -opt.backup = false -opt.writebackup = false -opt.undofile = true - -opt.ignorecase = true -opt.smartcase = true -opt.incsearch = true -opt.hlsearch = false - -opt.termguicolors = true -opt.signcolumn = "yes" -opt.cursorline = true -opt.splitbelow = true -opt.splitright = true -opt.wrap = false -opt.linebreak = true -opt.breakindent = true -opt.scrolloff = 8 -opt.sidescrolloff = 8 -opt.updatetime = 200 -opt.timeoutlen = 300 -opt.confirm = true -opt.showmode = false -opt.laststatus = 3 -opt.pumheight = 12 --- opt.cmdheight = 0 - -opt.expandtab = true -opt.smartindent = true -opt.shiftround = true -opt.tabstop = 2 -opt.softtabstop = 2 -opt.shiftwidth = 2 - -opt.list = true -opt.listchars = { tab = "» ", trail = "·", nbsp = "␣" } -opt.fillchars = { eob = " " } - -opt.completeopt = { "menu", "menuone", "noselect", "popup", "fuzzy" } -opt.winborder = "single" -opt.pumborder = "single" - -opt.winbar = "%=%m %t %=" -opt.showtabline = 0 - --- ============================================================================ --- Basic keymaps --- ============================================================================ - -map("n", "", "nohlsearch", { silent = true, desc = "Clear search highlight" }) - --- j/k over display lines when no count is given -map({ "n", "x" }, "j", "v:count == 0 ? 'gj' : 'j'", { - expr = true, - silent = true, - desc = "Down (display line)", -}) -map({ "n", "x" }, "k", "v:count == 0 ? 'gk' : 'k'", { - expr = true, - silent = true, - desc = "Up (display line)", -}) - --- Save on Ctrl-s -map("n", "", "update", { silent = true, desc = "Save" }) -map("i", "", "updategi", { silent = true, desc = "Save" }) -map("v", "", "updategv", { silent = true, desc = "Save" }) - --- Window navigation on Ctrl-hjkl -map("n", "", "h", { silent = true, desc = "Window left" }) -map("n", "", "j", { silent = true, desc = "Window down" }) -map("n", "", "k", { silent = true, desc = "Window up" }) -map("n", "", "l", { silent = true, desc = "Window right" }) - -map("t", "", [[h]], { silent = true, desc = "Window left" }) -map("t", "", [[j]], { silent = true, desc = "Window down" }) -map("t", "", [[k]], { silent = true, desc = "Window up" }) -map("t", "", [[l]], { silent = true, desc = "Window right" }) - --- Buffer cycling -map("n", "H", "bprevious", { silent = true, desc = "Previous buffer" }) -map("n", "L", "bnext", { silent = true, desc = "Next buffer" }) - --- ============================================================================ --- Buffer helpers --- ============================================================================ - -local function listed_buffers() - return vim.tbl_filter(function(buf) - return vim.api.nvim_buf_is_valid(buf) and vim.bo[buf].buflisted - end, vim.api.nvim_list_bufs()) -end - -local function delete_buffer(buf, opts) - opts = opts or {} - if not buf or buf == 0 then - buf = vim.api.nvim_get_current_buf() - end - - local cmd = opts.wipe - and (opts.force and "bwipeout!" or "bwipeout") - or (opts.force and "bdelete!" or "bdelete") - - pcall(vim.cmd, cmd .. " " .. buf) -end - -local function delete_other_buffers(force) - local current = vim.api.nvim_get_current_buf() - for _, buf in ipairs(listed_buffers()) do - if buf ~= current then - delete_buffer(buf, { force = force }) - end - end -end - -local function delete_all_buffers(force) - for _, buf in ipairs(listed_buffers()) do - delete_buffer(buf, { force = force }) - end -end - -map("n", "bb", "buffer #", { silent = true, desc = "Last buffer" }) -map("n", "bd", function() delete_buffer(0, { force = false }) end, { desc = "Delete buffer" }) -map("n", "bD", function() delete_buffer(0, { force = true }) end, { desc = "Force delete buffer" }) -map("n", "bw", function() delete_buffer(0, { wipe = true }) end, { desc = "Wipe buffer" }) -map("n", "bo", function() delete_other_buffers(false) end, { desc = "Delete other buffers" }) -map("n", "ba", function() delete_all_buffers(false) end, { desc = "Delete all buffers" }) - --- ============================================================================ --- netrw stays the default file browser --- ============================================================================ - -vim.g.netrw_banner = 1 -vim.g.netrw_liststyle = 3 -vim.g.netrw_winsize = 30 -vim.g.netrw_keepdir = 0 - -map("n", "E", "Ex", { silent = true, desc = "Open netrw" }) - -vim.api.nvim_create_autocmd("VimEnter", { - callback = function() - if vim.fn.argc() == 0 then - vim.cmd("Neotree position=current") - end - end, -}) - --- ============================================================================ --- Built-in package manager (nightly) --- ============================================================================ - --- Optional post-install hooks for plugins that usually need one-time setup. -vim.api.nvim_create_autocmd("PackChanged", { - callback = function(ev) - local data = ev.data or {} - local spec = data.spec or {} - local name = spec.name - local kind = data.kind - - if kind ~= "install" and kind ~= "update" then - return - end - - if name == "nvim-treesitter" then - vim.schedule(function() - pcall(vim.cmd.packadd, "nvim-treesitter") - pcall(function() - require("nvim-treesitter.install").update({ with_sync = true })() - end) - end) - end - - if name == "markdown-preview.nvim" then - vim.schedule(function() - pcall(vim.cmd.packadd, "markdown-preview.nvim") - pcall(function() - vim.fn["mkdp#util#install"]() - end) - end) - end - end, -}) - -vim.pack.add({ - - { src = "https://github.com/nvim-lua/plenary.nvim" }, - { src = "https://github.com/MunifTanjim/nui.nvim" }, - { src = "https://github.com/nvim-tree/nvim-web-devicons" }, - - -- Themes - { src = "https://github.com/oskarnurm/koda.nvim" }, - { src = "https://github.com/vague-theme/vague.nvim" }, - { src = "https://github.com/nendix/zen.nvim" }, - { src = "https://github.com/rebelot/kanagawa.nvim" }, - - -- Editing / syntax / completion - { src = "https://github.com/nvim-treesitter/nvim-treesitter" }, - - { src = "https://github.com/saghen/blink.lib" }, - { src = "https://github.com/saghen/blink.cmp" }, - - { src = "https://github.com/L3MON4D3/LuaSnip" }, - { src = "https://github.com/rafamadriz/friendly-snippets" }, - { src = "https://gitlab.com/repetitivesin/madol.nvim" }, - - -- LSP configs (for vim.lsp.enable) - { src = "https://github.com/neovim/nvim-lspconfig" }, - - -- Navigation / search - { src = "https://github.com/ibhagwan/fzf-lua" }, - { src = "https://github.com/nvim-neo-tree/neo-tree.nvim" }, - { src = "https://github.com/folke/flash.nvim" }, - { src = "https://github.com/leath-dub/snipe.nvim" }, - { src = "https://github.com/folke/which-key.nvim" }, - { src = "https://github.com/mikavilpas/yazi.nvim" }, - { src = "https://github.com/christoomey/vim-tmux-navigator"}, - - -- Git - { src = "https://github.com/tpope/vim-fugitive" }, - { src = "https://github.com/lewis6991/gitsigns.nvim" }, - { src = "https://github.com/kdheepak/lazygit.nvim" }, - - -- Text objects / editing - { src = "https://github.com/kylechui/nvim-surround" }, - { src = "https://github.com/windwp/nvim-autopairs" }, - { src = "https://github.com/abecodes/tabout.nvim" }, - - -- UI - { src = "https://github.com/nvim-lualine/lualine.nvim" }, - { src = "https://github.com/chentoast/marks.nvim" }, - - -- Writing / docs - { src = "https://github.com/chomosuke/typst-preview.nvim" }, - { src = "https://github.com/iamcco/markdown-preview.nvim" }, - { src = "https://github.com/MeanderingProgrammer/render-markdown.nvim" }, - - -- AI - { src = "https://github.com/nickjvandyke/opencode.nvim" }, - { src = "https://github.com/zbirenbaum/copilot.lua" }, - -}, { confirm = false, load = true }) - --- ============================================================================ --- Plugin globals before setup --- ============================================================================ - -vim.g.mkdp_auto_start = 0 -vim.g.mkdp_auto_close = 1 -vim.g.mkdp_filetypes = { "markdown" } - --- Let native LSP own LSP features; opencode still works for its own UI/actions. -vim.g.opencode_opts = { - lsp = { - enabled = false, - }, -} - -vim.o.autoread = true - --- ============================================================================ --- Themes --- ============================================================================ - -require("koda").setup({}) -require("vague").setup({}) -require("kanagawa").setup({ - compile = false, - background = { - dark = "wave", - light = "lotus", - }, -}) -require("zen").setup({}) - -vim.cmd.colorscheme("vague") - --- ============================================================================ --- which-key --- ============================================================================ - -local wk = require("which-key") -wk.setup({ preset = "helix" }) - -wk.add({ - { "b", group = "buffer" }, - { "f", group = "find" }, - { "g", group = "git" }, - { "h", group = "hunks" }, - { "l", group = "lsp" }, - { "m", group = "marks" }, - { "o", group = "opencode" }, - { "t", group = "tree" }, - { "p", group = "preview" }, - { "u", group = "toggles" }, -}) - --- ============================================================================ --- vim-tmux-navigator --- ============================================================================ - -map("n", "", "TmuxNavigateLeft", { silent = true }) -map("n", "", "TmuxNavigateDown", { silent = true }) -map("n", "", "TmuxNavigateUp", { silent = true }) -map("n", "", "TmuxNavigateRight", { silent = true }) - - --- ============================================================================ --- Treesitter --- ============================================================================ - -require("nvim-treesitter.configs").setup({ - ensure_installed = { - "go", - "gomod", - "gowork", - "gosum", - "bash", - "c", - "cpp", - "css", - "diff", - "html", - "javascript", - "json", - "json5", - "latex", - "lua", - "luadoc", - "markdown", - "markdown_inline", - "python", - "query", - "regex", - "rust", - "toml", - "tsx", - "typst", - "typescript", - "vim", - "vimdoc", - "yaml", - }, - auto_install = true, - highlight = { enable = true }, - indent = { enable = true }, -}) - --- ============================================================================ --- LuaSnip --- ============================================================================ - -local ls = require("luasnip") - -ls.config.setup({ - history = true, - update_events = "TextChanged,TextChangedI", - delete_check_events = "TextChanged", - enable_autosnippets = true, -}) - -require("luasnip.loaders.from_vscode").lazy_load() - -require("madol").setup({ - rmarkdown = { - snippets = { - ["greek-tex"] = true, - ["greek-unicode"] = false - } - } -}) - -map({ "i", "s" }, "", function() - if ls.choice_active() then - ls.change_choice(1) - end -end, { desc = "LuaSnip next choice" }) - -map({ "i", "s" }, "", function() - if ls.choice_active() then - ls.change_choice(-1) - end -end, { desc = "LuaSnip previous choice" }) - --- ============================================================================ --- blink.cmp --- ============================================================================ --- - -require("blink.cmp").build():pwait() - -require("blink.cmp").setup({ - snippets = { - preset = "luasnip", - }, - completion = { - menu = { auto_show = true }, - ghost_text = { enabled = false }, - documentation = { - auto_show = true, - auto_show_delay_ms = 200, - }, - list = { - selection = { - preselect = false, - auto_insert = false, - }, - }, - }, - keymap = { - preset = "none", - [""] = { "show", "show_documentation", "hide_documentation" }, - [""] = { "hide" }, - - [""] = { "scroll_documentation_up" }, - [""] = { "scroll_documentation_down" }, - - [""] = { "accept", "fallback" }, - - [""] = { "select_next", "fallback" }, - [""] = { "select_prev", "fallback" }, - - [""] = { "snippet_forward", "fallback" }, - [""] = { "snippet_backward", "fallback" }, - - - }, - sources = { - default = { "lsp", "path", "snippets", "buffer" }, - }, - fuzzy = { - implementation = "rust" - }, -}) - --- ============================================================================ --- Copilot --- Included, but practically "off by default" because auto_trigger = false. --- Toggle it on/off with uc. --- ============================================================================ - -vim.api.nvim_create_autocmd("User", { - pattern = "BlinkCmpMenuOpen", - callback = function() - vim.b.copilot_suggestion_hidden = true - end, -}) - -vim.api.nvim_create_autocmd("User", { - pattern = "BlinkCmpMenuClose", - callback = function() - vim.b.copilot_suggestion_hidden = false - end, -}) - -require("copilot").setup({ - panel = { - enabled = false, - }, - suggestion = { - enabled = true, - auto_trigger = false, - hide_during_completion = true, - keymap = { - accept = "", - next = "", - prev = "", - dismiss = "", - toggle_auto_trigger = false, - }, - }, -}) - -map("n", "ac", function() - require("copilot.suggestion").toggle_auto_trigger() -end, { desc = "Toggle Copilot auto-trigger" }) - -map("n", "ap", function() - require("copilot.panel").toggle() -end, { desc = "Toggle Copilot panel" }) - --- ============================================================================ --- autopairs / tabout / surround --- ============================================================================ - -require("nvim-autopairs").setup({ - check_ts = true, -}) - -require("tabout").setup({ - tabkey = "", - backwards_tabkey = "", - act_as_tab = true, - act_as_shift_tab = true, - default_tab = "", - default_shift_tab = "", - enable_backwards = true, - completion = false, - ignore_beginning = true, - tabouts = { - { open = "'", close = "'" }, - { open = '"', close = '"' }, - { open = "`", close = "`" }, - { open = "(", close = ")" }, - { open = "[", close = "]" }, - { open = "{", close = "}" }, - { open = "$", close = "$" }, - }, -}) - -require("nvim-surround").setup({}) - --- ============================================================================ --- flash.nvim --- ============================================================================ - -require("flash").setup({}) - -map({ "n", "x", "o" }, "s", function() require("flash").jump() end, { desc = "Flash" }) -map({ "n", "x", "o" }, "S", function() require("flash").treesitter() end, { desc = "Flash Treesitter" }) -map("o", "r", function() require("flash").remote() end, { desc = "Remote Flash" }) -map({ "o", "x" }, "R", function() require("flash").treesitter_search() end, { desc = "Treesitter Search" }) -map("c", "", function() require("flash").toggle() end, { desc = "Toggle Flash Search" }) - --- ============================================================================ --- marks.nvim --- ============================================================================ - -require("marks").setup({ - default_mappings = true, - builtin_marks = { ".", "<", ">", "^" }, - cyclic = true, - force_write_shada = false, - refresh_interval = 250, -}) - -map("n", "mb", "MarksListBuf", { silent = true, desc = "Marks in buffer" }) -map("n", "ma", "MarksListAll", { silent = true, desc = "All marks" }) - --- ============================================================================ --- snipe.nvim --- ============================================================================ - -require("snipe").setup({ - ui = { - position = "center", - preselect_current = true, - text_align = "file-first", - }, - hints = { - dictionary = "sadflewcmpghio", - }, - navigate = { - cancel_snipe = "", - close_buffer = "D", - open_vsplit = "V", - open_split = "H", - }, - sort = "last", -}) - -map("n", "", function() require("snipe").open_buffer_menu() end, { desc = "Snipe buffers" }) - --- ============================================================================ --- Markdown / Typst --- ============================================================================ - -require("render-markdown").setup({ - file_types = { "markdown" }, - render_modes = { "n", "c", "t" }, -}) - -require("typst-preview").setup({ - follow_cursor = true, -}) - --- Typst -map("n", "ptp", "TypstPreview", { silent = true, desc = "Typst preview" }) -map("n", "ptP", "TypstPreviewToggle", { silent = true, desc = "Toggle Typst preview" }) - --- Markdown -map("n", "pmp", "MarkdownPreview", { silent = true, desc = "Markdown preview" }) -map("n", "pmr", "RenderMarkdown toggle", { silent = true, desc = "Toggle render-markdown" }) - --- ============================================================================ --- fzf-lua --- ============================================================================ - -require("fzf-lua").setup({ - actions = { - files = { - ["enter"] = require("fzf-lua.actions").file_edit, - } - } -}) - -map("n", "ff", function() require("fzf-lua").files() end, { desc = "Files" }) -map("n", "db", function() require("fzf-lua").buffers() end, { desc = "Buffers" }) -map("n", "bl", function() require("fzf-lua").buffers() end, { desc = "List buffers" }) -map("n", "ft", function() require("fzf-lua").live_grep() end, { desc = "Live grep" }) -map("n", "fs", function() require("fzf-lua").lsp_document_symbols() end, { desc = "Document symbols" }) -map("n", "/", function() require("fzf-lua").grep_curbuf() end, { desc = "Grep current buffer" }) -map("n", "fh", function() require("fzf-lua").help_tags() end, { desc = "Help tags" }) - --- useful extras -map("n", "fr", function() require("fzf-lua").oldfiles() end, { desc = "Recent files" }) -map("n", "fg", function() require("fzf-lua").git_files() end, { desc = "Git files" }) -map("n", "fc", function() require("fzf-lua").commands() end, { desc = "Commands" }) -map("n", "fk", function() require("fzf-lua").keymaps() end, { desc = "Keymaps" }) -map("n", "fd", function() require("fzf-lua").diagnostics_document() end, { desc = "Document diagnostics" }) -map("n", "fD", function() require("fzf-lua").diagnostics_workspace() end, { desc = "Workspace diagnostics" }) -map("n", "fw", function() require("fzf-lua").grep_cword() end, { desc = "Grep word under cursor" }) - --- ============================================================================ --- neo-tree --- netrw remains default; neo-tree is opt-in on n --- ============================================================================ - -require("neo-tree").setup({ - close_if_last_window = true, - enable_git_status = true, - enable_diagnostics = true, - filesystem = { - hijack_netrw_behavior = "disabled", - follow_current_file = { enabled = true }, - use_libuv_file_watcher = true, - }, - window = { - width = 80, - }, -}) - -map("n", "e", "Neotree position=right toggle", { - silent = true, - desc = "Neo-tree", -}) - --- ============================================================================ --- Git --- ============================================================================ - -require("gitsigns").setup({ - signs = { - add = { text = "▎" }, - change = { text = "▎" }, - delete = { text = "" }, - topdelete = { text = "" }, - changedelete = { text = "▎" }, - untracked = { text = "▎" }, - }, - on_attach = function(bufnr) - local gs = package.loaded.gitsigns - - local function bufmap(mode, lhs, rhs, desc) - vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, silent = true, desc = desc }) - end - - bufmap("n", "]h", gs.next_hunk, "Next hunk") - bufmap("n", "[h", gs.prev_hunk, "Prev hunk") - bufmap("n", "hs", gs.stage_hunk, "Stage hunk") - bufmap("n", "hr", gs.reset_hunk, "Reset hunk") - bufmap("n", "hS", gs.stage_buffer, "Stage buffer") - bufmap("n", "hR", gs.reset_buffer, "Reset buffer") - bufmap("n", "hp", gs.preview_hunk, "Preview hunk") - bufmap("n", "hb", function() gs.blame_line({ full = true }) end, "Blame line") - bufmap("n", "hd", gs.diffthis, "Diff this") - bufmap("n", "hQ", gs.setqflist, "Hunks to quickfix") - end, -}) - -map("n", "gg", "LazyGit", { silent = true, desc = "LazyGit" }) -map("n", "gs", "Git", { silent = true, desc = "Git status" }) -map("n", "gb", "Git blame", { silent = true, desc = "Git blame" }) -map("n", "gp", "Git push", { silent = true, desc = "Git push" }) -map("n", "gl", "Git pull", { silent = true, desc = "Git pull" }) -map("n", "gc", "Git commit", { silent = true, desc = "Git commit" }) - --- ============================================================================ --- opencode.nvim --- ============================================================================ - -map({ "n", "x" }, "oa", function() - require("opencode").ask("@this: ", { submit = true }) -end, { desc = "Ask opencode" }) - -map({ "n", "x" }, "os", function() - require("opencode").select() -end, { desc = "Select opencode action" }) - -map({ "n", "t" }, "oo", function() - require("opencode").toggle() -end, { desc = "Toggle opencode" }) - -map({ "n", "x" }, "or", function() - return require("opencode").operator("@this ") -end, { expr = true, desc = "Send range to opencode" }) - -map("n", "ol", function() - return require("opencode").operator("@this ") .. "_" -end, { expr = true, desc = "Send line to opencode" }) - -map("n", "ou", function() - require("opencode").command("session.half.page.up") -end, { desc = "Opencode scroll up" }) - -map("n", "od", function() - require("opencode").command("session.half.page.down") -end, { desc = "Opencode scroll down" }) - --- ============================================================================ --- LSP (native nightly flow) --- No Mason. Install server binaries yourself and keep them on PATH. --- ============================================================================ - -local capabilities = require("blink.cmp").get_lsp_capabilities() - -vim.diagnostic.config({ - underline = true, - severity_sort = true, - update_in_insert = false, - virtual_text = { - spacing = 2, - source = "if_many", - }, - float = { - border = "rounded", - source = "if_many", - }, -}) - --- Global defaults for all enabled servers -vim.lsp.config("*", { - capabilities = capabilities, - root_markers = { ".git" }, -}) - --- Per-server overrides -vim.lsp.config("lua_ls", { - settings = { - Lua = { - diagnostics = { - globals = { "vim" }, - }, - workspace = { - checkThirdParty = false, - }, - telemetry = { - enable = false, - }, - }, - }, -}) - --- Adjust this list to the servers you actually have installed. -local servers = { - "gopls", - "lua_ls", - "tinymist", - "marksman", - "pyright", -} - -for _, server in ipairs(servers) do - vim.lsp.enable(server) -end - -vim.api.nvim_create_autocmd("LspAttach", { - callback = function(ev) - local bufnr = ev.buf - - local function lmap(lhs, rhs, desc, mode) - vim.keymap.set(mode or "n", lhs, rhs, { buffer = bufnr, silent = true, desc = desc }) - end - - lmap("gd", vim.lsp.buf.definition, "Goto definition") - lmap("gD", vim.lsp.buf.declaration, "Goto declaration") - lmap("gi", vim.lsp.buf.implementation, "Goto implementation") - lmap("gt", vim.lsp.buf.type_definition, "Goto type definition") - lmap("gr", function() require("fzf-lua").lsp_references() end, "References") - lmap("K", vim.lsp.buf.hover, "Hover") - lmap("gK", vim.lsp.buf.signature_help, "Signature help") - - lmap("la", vim.lsp.buf.code_action, "Code action", { "n", "x" }) - lmap("lr", vim.lsp.buf.rename, "Rename") - lmap("lf", function() vim.lsp.buf.format({ async = true }) end, "Format") - lmap("ld", vim.diagnostic.open_float, "Line diagnostics") - lmap("ls", function() require("fzf-lua").lsp_document_symbols() end, "Document symbols") - lmap("lS", function() require("fzf-lua").lsp_live_workspace_symbols() end, "Workspace symbols") - - lmap("[d", function() vim.diagnostic.jump({ count = -1, float = true }) end, "Prev diagnostic") - lmap("]d", function() vim.diagnostic.jump({ count = 1, float = true }) end, "Next diagnostic") - end, -}) - --- ============================================================================ --- lualine --- ============================================================================ - -local function opencode_statusline() - local ok, opencode = pcall(require, "opencode") - if ok and opencode.statusline then - return opencode.statusline() - end - return "" -end - -require("lualine").setup({ - options = { - section_separators = "", - component_separators = "", - globalstatus = true, - theme = "auto", - }, - - sections = { - lualine_a = { "mode" }, - lualine_b = { { "branch", icon = "" }, "diff" }, - lualine_c = { - { "diagnostics" }, - { "filename", path = 1, symbols = { modified = " ●", readonly = " " } }, - }, - lualine_x = { "encoding", "fileformat", "filetype", opencode_statusline }, - lualine_y = { "progress" }, - lualine_z = { "location" }, - }, -}) diff --git a/machines/desktop/config/sway/toggle-hdmi.sh b/machines/desktop/config/sway/toggle-hdmi.sh deleted file mode 100755 index 6926984..0000000 --- a/machines/desktop/config/sway/toggle-hdmi.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -set -eu - -OUTPUT="HDMI-A-2" - -active="$(swaymsg -t get_outputs -r \ - | jq -r --arg o "$OUTPUT" '.[] | select(.name==$o) | .active')" - -case "$active" in - true) swaymsg output "$OUTPUT" disable ;; - false) swaymsg output "$OUTPUT" enable ;; - *) - printf 'Output %s not found or jq parse error\n' "$OUTPUT" >&2 - exit 1 - ;; -esac - diff --git a/phillpc/alacritty/alacritty.toml b/phillpc/alacritty/alacritty.toml new file mode 100644 index 0000000..e05a90a --- /dev/null +++ b/phillpc/alacritty/alacritty.toml @@ -0,0 +1,43 @@ +[env] +TERM = "xterm-256color" + +[scrolling] +history = 100000 +multiplier = 3 + +[font] +size = 10 + +[font.normal] +family = "Hack Nerd Font" +style = "Regular" + +[font.bold] +family = "Hack Nerd Font" +style = "Bold" + +[font.italic] +family = "Hack Nerd Font" +style = "Italic" + +[font.bold_italic] +family = "Hack Nerd Font" +style = "Bold Italic" + +[cursor] +style = { shape = "Beam", blinking = "On" } +blink_interval = 500 +unfocused_hollow = true + +[selection] +save_to_clipboard = true + +[mouse] +hide_when_typing = true + +[keyboard] +bindings = [ + { key = "N", mods = "Control|Shift", action = "CreateNewWindow" }, + { key = "V", mods = "Control|Shift", action = "Paste" }, + { key = "C", mods = "Control|Shift", action = "Copy" } +] diff --git a/phillpc/fish/config.fish b/phillpc/fish/config.fish new file mode 100644 index 0000000..2597012 --- /dev/null +++ b/phillpc/fish/config.fish @@ -0,0 +1,77 @@ +# Editor +set -gx EDITOR nvim +set -gx VISUAL nvim + +# Better defaults +set -gx PAGER less +set -gx LESS "-R --use-color -Dd+r -Du+b" + +# XDG paths +set -gx XDG_CONFIG_HOME "$HOME/.config" +set -gx XDG_DATA_HOME "$HOME/.local/share" +set -gx XDG_CACHE_HOME "$HOME/.cache" + +# Local binaries +fish_add_path "$HOME/.local/bin" +fish_add_path "$HOME/.cargo/bin" + +# Wayland-friendly defaults +set -gx MOZ_ENABLE_WAYLAND 1 +set -gx QT_QPA_PLATFORM wayland +set -gx SDL_VIDEODRIVER wayland +set -gx CLUTTER_BACKEND wayland + +# Fish behavior +set fish_greeting + +# Vi-style bindings +fish_vi_key_bindings + +# Useful aliases +alias ls="ls --color=auto" +alias ll="ls -lah" +alias la="ls -A" +alias grep="grep --color=auto" + +alias c="clear" +alias v="nvim" +alias svim="sudoedit" + +alias gs="git status" +alias ga="git add" +alias gc="git commit" +alias gp="git push" +alias gl="git log --oneline --graph --decorate" + +alias pacup="sudo pacman -Syu" +alias pacin="sudo pacman -S" +alias pacrm="sudo pacman -Rns" +alias pacq="pacman -Qs" + +alias ls="eza --icons" +alias ll="eza -lah --icons --git" +alias cat="bat" + +if type -q zoxide + zoxide init fish | source +end + +if type -q fzf + fzf --fish | source +end + +# Safer defaults +alias cp="cp -i" +alias mv="mv -i" +alias rm="rm -i" + +# Starship prompt +if type -q starship + starship init fish | source +end + +if status is-login + and test -z "$WAYLAND_DISPLAY" + and test "$XDG_VTNR" = "1" + exec sway +end diff --git a/machines/desktop/config/fish/fish_variables b/phillpc/fish/fish_variables similarity index 79% rename from machines/desktop/config/fish/fish_variables rename to phillpc/fish/fish_variables index 298ca49..ad10b9b 100644 --- a/machines/desktop/config/fish/fish_variables +++ b/phillpc/fish/fish_variables @@ -1,4 +1,3 @@ # This file contains fish universal variable definitions. # VERSION: 3.0 SETUVAR __fish_initialized:4300 -SETUVAR fish_greeting:\x1d diff --git a/machines/desktop/config/mako/config b/phillpc/mako/config similarity index 100% rename from machines/desktop/config/mako/config rename to phillpc/mako/config diff --git a/machines/desktop/config/nvim/init.lua b/phillpc/nvim/init.lua similarity index 100% rename from machines/desktop/config/nvim/init.lua rename to phillpc/nvim/init.lua diff --git a/phillpc/nvim/nvim-pack-lock.json b/phillpc/nvim/nvim-pack-lock.json new file mode 100644 index 0000000..c70d385 --- /dev/null +++ b/phillpc/nvim/nvim-pack-lock.json @@ -0,0 +1,70 @@ +{ + "plugins": { + "alpha-nvim": { + "rev": "6c6a89d5b068b5251c8bdf0dd57bb921bcfeeb09", + "src": "https://github.com/goolord/alpha-nvim" + }, + "blink.cmp": { + "rev": "3db7326f54b73df4789e0fd6274bedda33975fea", + "src": "https://github.com/saghen/blink.cmp" + }, + "blink.lib": { + "rev": "b127d48bf8e9ac9cf41f6e0fbead317503f76558", + "src": "https://github.com/saghen/blink.lib" + }, + "fzf-lua": { + "rev": "988416cc782dfe28bff3f0da9b8c943b236cd86a", + "src": "https://github.com/ibhagwan/fzf-lua" + }, + "gitsigns.nvim": { + "rev": "25050e4ed39e628282831d4cbecb1850454ce915", + "src": "https://github.com/lewis6991/gitsigns.nvim" + }, + "mini.nvim": { + "rev": "d5e6f5b843f1d813d9c4bfb242b751dc5ab6f8ae", + "src": "https://github.com/echasnovski/mini.nvim" + }, + "neo-tree.nvim": { + "rev": "83e7a2982fd12b9c3d35bc39dd5877cd91a02a61", + "src": "https://github.com/nvim-neo-tree/neo-tree.nvim", + "version": "3.0.0 - 4.0.0" + }, + "nui.nvim": { + "rev": "de740991c12411b663994b2860f1a4fd0937c130", + "src": "https://github.com/MunifTanjim/nui.nvim" + }, + "nvim-lspconfig": { + "rev": "229b79051b380377664edc4cbd534930154921a1", + "src": "https://github.com/neovim/nvim-lspconfig" + }, + "nvim-treesitter": { + "rev": "4916d6592ede8c07973490d9322f187e07dfefac", + "src": "https://github.com/nvim-treesitter/nvim-treesitter", + "version": "'main'" + }, + "nvim-web-devicons": { + "rev": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c", + "src": "https://github.com/nvim-tree/nvim-web-devicons" + }, + "plenary.nvim": { + "rev": "74b06c6c75e4eeb3108ec01852001636d85a932b", + "src": "https://github.com/nvim-lua/plenary.nvim" + }, + "todo-comments.nvim": { + "rev": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668", + "src": "https://github.com/folke/todo-comments.nvim" + }, + "vague.nvim": { + "rev": "8ee15ea4505d64ede559ff1cb112582a6f2ea138", + "src": "https://github.com/vague-theme/vague.nvim" + }, + "vim-tmux-navigator": { + "rev": "e41c431a0c7b7388ae7ba341f01a0d217eb3a432", + "src": "https://github.com/christoomey/vim-tmux-navigator" + }, + "which-key.nvim": { + "rev": "3aab2147e74890957785941f0c1ad87d0a44c15a", + "src": "https://github.com/folke/which-key.nvim" + } + } +} diff --git a/phillpc/starship/starship.toml b/phillpc/starship/starship.toml new file mode 100644 index 0000000..f503019 --- /dev/null +++ b/phillpc/starship/starship.toml @@ -0,0 +1,70 @@ +add_newline = true +command_timeout = 1000 + +format = """ +$username\ +$hostname\ +$directory\ +$git_branch\ +$git_status\ +$python\ +$nodejs\ +$rust\ +$golang\ +$cmd_duration\ +$line_break\ +$character""" + +[character] +success_symbol = "[❯](bold green)" +error_symbol = "[❯](bold red)" +vimcmd_symbol = "[❮](bold blue)" + +[directory] +style = "bold blue" +truncation_length = 3 +truncate_to_repo = true +read_only = " " + +[git_branch] +symbol = " " +style = "bold mauve" +format = "[$symbol$branch]($style) " + +[git_status] +style = "bold yellow" +format = "[$all_status$ahead_behind]($style) " +conflicted = "=${count} " +ahead = "⇡${count} " +behind = "⇣${count} " +diverged = "⇕⇡${ahead_count}⇣${behind_count} " +untracked = "?${count} " +stashed = "\\$${count} " +modified = "!${count} " +staged = "+${count} " +renamed = "»${count} " +deleted = "✘${count} " + +[cmd_duration] +min_time = 500 +format = "took [$duration](bold yellow) " + +[python] +symbol = " " +format = "[$symbol$version]($style) " +style = "bold green" + +[nodejs] +symbol = " " +format = "[$symbol$version]($style) " +style = "bold green" + +[rust] +symbol = " " +format = "[$symbol$version]($style) " +style = "bold red" + +[golang] +symbol = " " +format = "[$symbol$version]($style) " +style = "bold cyan" diff --git a/machines/desktop/config/sway/config b/phillpc/sway/config similarity index 95% rename from machines/desktop/config/sway/config rename to phillpc/sway/config index 4fc45e3..6d65eea 100644 --- a/machines/desktop/config/sway/config +++ b/phillpc/sway/config @@ -5,7 +5,7 @@ set $down j set $up k set $right l -set $term foot +set $term alacritty set $menu bemenu-run -b -i --fn "Hack Nerd Font 10" --prompt "Run:" --list "8 up" set $b00 #141415 @@ -50,17 +50,14 @@ input type:keyboard { } output HDMI-A-1 resolution 2560x1440 pos 0 0 -output HDMI-A-2 resolution 1920x1080 pos -1920 0 workspace 1 output HDMI-A-1 -workspace 4 output HDMI-A-2 workspace_auto_back_and_forth yes bindsym $mod+Tab workspace back_and_forth -bindsym $mod+Shift+m exec ~/.config/sway/toggle-hdmi.sh -output * adaptive_sync off +output * adaptive_sync on ### Key bindings bindsym $mod+Return exec $term diff --git a/machines/desktop/config/tmux/tmux.conf b/phillpc/tmux/tmux.conf similarity index 100% rename from machines/desktop/config/tmux/tmux.conf rename to phillpc/tmux/tmux.conf diff --git a/machines/desktop/config/waybar/config b/phillpc/waybar/config similarity index 100% rename from machines/desktop/config/waybar/config rename to phillpc/waybar/config diff --git a/machines/desktop/config/waybar/style.css b/phillpc/waybar/style.css similarity index 100% rename from machines/desktop/config/waybar/style.css rename to phillpc/waybar/style.css