Added fish + foot configs to desktop

This commit is contained in:
2026-02-14 20:11:36 +08:00
parent e0821c9ed2
commit 86495e561a
5 changed files with 739 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
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'
if type -q fzf
fzf --fish | source
end
if type -q starship
starship init fish | source
end
end

View File

@@ -0,0 +1,5 @@
[main]
font=Hack Nerd Font:size=10
[colors]
background=101010

View File

@@ -0,0 +1,578 @@
-- 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", "<Esc>", "<cmd>nohlsearch<CR><Esc>", { 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("v", ">", ">gv")
vim.keymap.set("n", "<C-s>", function()
vim.lsp.buf.format({ timeout_ms = 2000 })
vim.cmd("w")
end, { desc = "Format + Write" })
vim.keymap.set("i", "<C-s>", function()
vim.cmd("stopinsert")
vim.lsp.buf.format({ timeout_ms = 2000 })
vim.cmd("w")
end, { desc = "Format + Write" })
vim.keymap.set("n", "<C-h>", "<C-w>h", { desc = "Window left" })
vim.keymap.set("n", "<C-j>", "<C-w>j", { desc = "Window down" })
vim.keymap.set("n", "<C-k>", "<C-w>k", { desc = "Window up" })
vim.keymap.set("n", "<C-l>", "<C-w>l", { desc = "Window right" })
vim.keymap.set("t", "<C-h>", [[<C-\><C-n><C-w>h]], { desc = "Terminal window left" })
vim.keymap.set("t", "<C-j>", [[<C-\><C-n><C-w>j]], { desc = "Terminal window down" })
vim.keymap.set("t", "<C-k>", [[<C-\><C-n><C-w>k]], { desc = "Terminal window up" })
vim.keymap.set("t", "<C-l>", [[<C-\><C-n><C-w>l]], { desc = "Terminal window right" })
vim.keymap.set("n", "<leader>bb", "<cmd>buffers<CR>", { desc = "List buffers" })
vim.keymap.set("n", "<leader>bl", "<cmd>b#<CR>", { desc = "Last buffer" })
vim.keymap.set("n", "<leader>bd", "<cmd>bdelete<CR>", { desc = "Delete buffer" })
vim.keymap.set("n", "<leader>bD", "<cmd>bdelete!<CR>", { desc = "Force delete buffer" })
vim.keymap.set("n", "<leader>bw", "<cmd>bwipeout<CR>", { desc = "Wipe buffer" })
vim.keymap.set("n", "<leader>bo", "<cmd>%bdelete|edit#|bdelete#<CR>", { desc = "Delete other buffers" })
vim.keymap.set("n", "<leader>ba", "<cmd>%bdelete<CR>", { desc = "Delete all buffers" })
vim.keymap.set('n', 'H', ':bprevious<CR>', { silent = true })
vim.keymap.set('n', 'L', ':bnext<CR>', { silent = true })
vim.keymap.set('t', '<Esc>', '<C-\\><C-n>', { 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",
["<C-space>"] = { "show", "show_documentation", "hide_documentation" },
["<C-e>"] = { "hide" },
["<C-up>"] = { "scroll_documentation_up" },
["<C-down>"] = { "scroll_documentation_down" },
["<CR>"] = { "accept", "fallback" },
["<Tab>"] = { "select_next", "fallback" },
["<S-Tab>"] = { "select_prev", "fallback" },
["<C-n>"] = { "select_next", "fallback" },
["<C-p>"] = { "select_prev", "fallback" },
["<C-j>"] = { "snippet_forward", "fallback" },
["<C-k>"] = { "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", "<leader>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" }, "<leader>aa", function() require("opencode").ask("@this: ", { submit = true }) end,
{ desc = "AI Ask" })
vim.keymap.set({ "n", "x" }, "<leader>as", function() require("opencode").select() end,
{ desc = "AI Select action" })
vim.keymap.set({ "n", "x" }, "<leader>at", function() require("opencode").toggle() end,
{ desc = "AI Toggle panel" })
vim.keymap.set({ "n", "x" }, "<leader>ar", function() return require("opencode").operator("@this ") end,
{ desc = "AI Add range", expr = true })
vim.keymap.set("n", "<leader>al", function() return require("opencode").operator("@this ") .. "_" end,
{ desc = "AI Add line", expr = true })
vim.keymap.set("n", "<leader>au", function() require("opencode").command("session.half.page.up") end,
{ desc = "AI Scroll up" })
vim.keymap.set("n", "<leader>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", "<M-CR>", 'copilot#Accept("\\<CR>")', {
expr = true,
replace_keycodes = false,
silent = true
})
vim.keymap.set("i", "<M-'>", 'copilot#AcceptWord()', { expr = true, silent = true })
vim.keymap.set("i", "<M-;>", 'copilot#AcceptLine()', { expr = true, silent = true })
vim.keymap.set("n", "<leader>ac", "<cmd>Copilot toggle<CR>", { 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 = {
{
"<leader>e",
function()
vim.cmd("Neotree position=right toggle")
end,
desc = "Neo-tree (right)",
},
},
},
{
"stevearc/oil.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
opts = {},
keys = {
{ "<leader>E", "<cmd>Oil<CR>", 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 = {
{ "<leader>ff", function() require("fzf-lua").files() end, desc = "Find files" },
{ "<leader>fb", function() require("fzf-lua").buffers() end, desc = "Find buffers" },
{ "<leader>fo", function() require("fzf-lua").oldfiles() end, desc = "Find recent files" },
{ "<leader>ft", function() require("fzf-lua").live_grep() end, desc = "Find text in project" },
{ "<leader>fs", function() require("fzf-lua").lsp_document_symbols() end, desc = "Find document symbols" },
{ "<M-/>", function() require("fzf-lua").grep_curbuf() end, desc = "Find text in buffer" },
{ "<leader>/", function() require("fzf-lua").grep_curbuf() end, desc = "Find text in buffer" },
{ "<leader>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 = {
{ "<leader>gg", "<cmd>LazyGit<cr>", 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 = '<Tab>', -- key to trigger tabout, set to an empty string to disable
backwards_tabkey = '<S-Tab>', -- 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 <S-Tab>)
default_tab = '<C-t>', -- shift default action (only at the beginning of a line, otherwise <TAB> is used)
default_shift_tab = '<C-d>', -- 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 = {
{ "<leader><leader>", function() require("snipe").open_buffer_menu() end, desc = "Open Snipe buffer menu" }
},
opts = {}
},
{
"folke/which-key.nvim",
event = "VeryLazy",
opts = {
preset = "helix"
},
keys = {
{
"<leader>?",
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 = {
{ "<c-h>", "<cmd><C-U>TmuxNavigateLeft<cr>" },
{ "<c-j>", "<cmd><C-U>TmuxNavigateDown<cr>" },
{ "<c-k>", "<cmd><C-U>TmuxNavigateUp<cr>" },
{ "<c-l>", "<cmd><C-U>TmuxNavigateRight<cr>" },
{ "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>" },
},
}
})
-- 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", "<leader>ca", vim.lsp.buf.code_action, { desc = "Code Action" })
vim.keymap.set("v", "<leader>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", "<C-k>", vim.lsp.buf.signature_help, { desc = "Signature help" })
vim.keymap.set("n", "<leader>cs", vim.lsp.buf.document_symbol, { desc = "Document symbols" })
vim.keymap.set("n", "<leader>cS", vim.lsp.buf.workspace_symbol, { desc = "Workspace symbols" })
vim.keymap.set("n", "<leader>cf", function()
vim.lsp.buf.format({ async = true })
end, { desc = "Format buffer" })
vim.keymap.set("n", "<leader>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" },
})

View File

@@ -0,0 +1,116 @@
### 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"
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
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
exec_always swaybg -c $b00
bar {
colors {
focused_workspace $b01 $b01 $b05
}
font pango:Hack Nerd Font 10
position bottom
status_command ~/.config/sway/status.sh
}
input type:keyboard {
xkb_layout "us"
}
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+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%+
bindsym Print exec grim -g "$(slurp)" - | wl-copy
bindsym $mod+Print exec grim - | wl-copy

View File

@@ -0,0 +1,9 @@
#!/bin/sh
while :; do
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 " ${temp}C | ${datetime}"
sleep 1
done