This commit is contained in:
parent
ce19d6a62c
commit
624ab42f73
26 changed files with 493 additions and 163 deletions
|
|
@ -1,5 +1,4 @@
|
|||
clipmenud &
|
||||
flameshot &
|
||||
easyeffects --gapplication-service &
|
||||
|
||||
# vim: ft=sh
|
||||
|
|
|
|||
|
|
@ -56,7 +56,8 @@ bindings = [
|
|||
{key = "Slash", mods = "Control", chars = "\u001f"},
|
||||
{key = "Space", mods = "Control", chars = "\u0000"},
|
||||
{key = "Back", mods = "Control", chars = "\u001b\u007f"},
|
||||
{key = "M", mods = "Control", chars = "\u0100"}
|
||||
{key = "M", mods = "Control", chars = "\u0100"},
|
||||
{key = "х", mods = "Control", chars = "\u001b"},
|
||||
]
|
||||
|
||||
[general]
|
||||
|
|
|
|||
|
|
@ -1,41 +1,43 @@
|
|||
{
|
||||
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
||||
"LuaSnip": { "branch": "master", "commit": "33b06d72d220aa56a7ce80a0dd6f06c70cd82b9d" },
|
||||
"LuaSnip": { "branch": "master", "commit": "c1851d5c519611dfc451b6582961b2602e0af89b" },
|
||||
"Navigator.nvim": { "branch": "master", "commit": "91d86506ac2a039504d5205d32a1d4bc7aa57072" },
|
||||
"bufferline.nvim": { "branch": "main", "commit": "261a72b90d6db4ed8014f7bda976bcdc9dd7ce76" },
|
||||
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
||||
"cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" },
|
||||
"fidget.nvim": { "branch": "main", "commit": "e2a175c2abe2d4f65357da1c98c59a5cfb2b543f" },
|
||||
"indent-blankline.nvim": { "branch": "master", "commit": "259357fa4097e232730341fa60988087d189193a" },
|
||||
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
|
||||
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
|
||||
"cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" },
|
||||
"fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" },
|
||||
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
|
||||
"iptables": { "branch": "master", "commit": "0d18b1e468f547dd7e2c494d42bc134a1e0eac7e" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "656cf4309396b7b8b62984e923bf8d8a0013f7d7" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
|
||||
"lspkind.nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" },
|
||||
"lualine.nvim": { "branch": "master", "commit": "2a5bae925481f999263d6f5ed8361baef8df4f83" },
|
||||
"mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" },
|
||||
"lualine.nvim": { "branch": "master", "commit": "15884cee63a8c205334ab13ab1c891cd4d27101a" },
|
||||
"mason.nvim": { "branch": "main", "commit": "7c7318e8bae7e3536ef6b9e86b9e38e74f2e125e" },
|
||||
"multilayout.nvim": { "branch": "main", "commit": "613ec4ace9097a4464a558777aaf6a15b3d8bd78" },
|
||||
"neodev.nvim": { "branch": "main", "commit": "46aa467dca16cf3dfe27098042402066d2ae242d" },
|
||||
"nvim-autopairs": { "branch": "master", "commit": "b464658e9b880f463b9f7e6ccddd93fb0013f559" },
|
||||
"nvim-cmp": { "branch": "main", "commit": "ca4d3330d386e76967e53b85953c170658255ecb" },
|
||||
"nvim-autopairs": { "branch": "master", "commit": "4d74e75913832866aa7de35e4202463ddf6efd1b" },
|
||||
"nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" },
|
||||
"nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" },
|
||||
"nvim-lastplace": { "branch": "main", "commit": "0bb6103c506315044872e0f84b1f736c4172bb20" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "47f236c058f0511702286a21ba53bbf42abbd8a8" },
|
||||
"nvim-notify": { "branch": "master", "commit": "fbef5d32be8466dd76544a257d3f3dce20082a07" },
|
||||
"nvim-surround": { "branch": "main", "commit": "9f0cb495f25bff32c936062d85046fbda0c43517" },
|
||||
"nvim-tree.lua": { "branch": "master", "commit": "375e38673b5c61debd8074ced01cfd4f3b7ce1e9" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "894cb3cebbad0535fb4e319ada5d875dbc48d8b9" },
|
||||
"nvim-treesitter-context": { "branch": "master", "commit": "b9e30333ece125297cfc5d652465cbc9a23b4916" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "ad8f0a472148c3e0ae9851e26a722ee4e29b1595" },
|
||||
"nvim-web-devicons": { "branch": "master", "commit": "87c34abe5d1dc7c1c0a95aaaf888059c614c68ac" },
|
||||
"onedark.nvim": { "branch": "master", "commit": "67a74c275d1116d575ab25485d1bfa6b2a9c38a6" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "61e5109c8cf24807e4ae29813a3a82b31821dd45" },
|
||||
"nvim-notify": { "branch": "master", "commit": "b5825cf9ee881dd8e43309c93374ed5b87b7a896" },
|
||||
"nvim-surround": { "branch": "main", "commit": "0e62500b98f4513feaaf7425c135472457ea5b7d" },
|
||||
"nvim-tree.lua": { "branch": "master", "commit": "e7d1b7dadc62fe2eccc17d814354b0a5688621ce" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "28d480e0624b259095e56f353ec911f9f2a0f404" },
|
||||
"nvim-treesitter-context": { "branch": "master", "commit": "5c48b8ba1b0b7b25feb6e34e7eb293ea893aedc4" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "0e3be38005e9673d044e994b1e4b123adb040179" },
|
||||
"nvim-web-devicons": { "branch": "master", "commit": "f1420728f59843eb2ef084406b3d0201a0a0932d" },
|
||||
"onedark.nvim": { "branch": "master", "commit": "11de4da47f3e69cb70c3ae9816bd8af166cbe121" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
|
||||
"quickfix-reflector.vim": { "branch": "master", "commit": "6a6a9e28e1713b9e9db99eec1e6672e5666c01b9" },
|
||||
"telescope-emoji.nvim": { "branch": "master", "commit": "86248d97be84a1ce83f0541500ef9edc99ea2aa1" },
|
||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" },
|
||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
|
||||
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
|
||||
"todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" },
|
||||
"trouble.nvim": { "branch": "main", "commit": "46cf952fc115f4c2b98d4e208ed1e2dce08c9bf6" },
|
||||
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
|
||||
"trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" },
|
||||
"vim-bbcode": { "branch": "master", "commit": "6fb28c6deae5844ee2bf0b97ef2fea04bd3d4eac" },
|
||||
"vim-caddyfile": { "branch": "master", "commit": "24fe0720551883e407cb70ae1d7c03f162d1d5a0" },
|
||||
"vim-fugitive": { "branch": "master", "commit": "320b18fba2a4f2fe3c8225c778c687e0d2620384" },
|
||||
"vim-fugitive": { "branch": "master", "commit": "4a745ea72fa93bb15dd077109afbb3d1809383f2" },
|
||||
"vim-nftables": { "branch": "master", "commit": "26f8a506c6f3e41f1e4a8d6aa94c9a79a666bbff" },
|
||||
"vim-peekaboo": { "branch": "master", "commit": "cc4469c204099c73dd7534531fa8ba271f704831" },
|
||||
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,3 +34,5 @@ vim.o.timeoutlen = 300
|
|||
|
||||
vim.o.splitbelow = true
|
||||
vim.o.splitright = true
|
||||
|
||||
vim.diagnostic.config({ virtual_text = true })
|
||||
|
|
|
|||
|
|
@ -1,23 +1,24 @@
|
|||
local servers = {
|
||||
ansiblels = {},
|
||||
bashls = {},
|
||||
cmake = {},
|
||||
clangd = {},
|
||||
cmake = {},
|
||||
eslint = {},
|
||||
gopls = {},
|
||||
hls = {},
|
||||
jdtls = {},
|
||||
jsonls = {},
|
||||
kotlin_language_server = {},
|
||||
lua_ls = require('lsp.lua_ls'),
|
||||
pyright = {},
|
||||
ruby_lsp = {},
|
||||
rust_analyzer = {},
|
||||
svls = {},
|
||||
ts_ls = {},
|
||||
yamlls = require('lsp.yamlls'),
|
||||
jsonls = {},
|
||||
svls = {}
|
||||
}
|
||||
|
||||
vim.lsp.set_log_level("debug")
|
||||
vim.lsp.set_log_level('info')
|
||||
|
||||
local on_attach = function(_, bufnr)
|
||||
local nmap = function(keys, func)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ return {
|
|||
'isobit/vim-caddyfile',
|
||||
'rcarriga/nvim-notify',
|
||||
'stefandtw/quickfix-reflector.vim',
|
||||
'nfnty/vim-nftables',
|
||||
'tpope/vim-fugitive',
|
||||
'junegunn/vim-peekaboo',
|
||||
'tpope/vim-sleuth',
|
||||
|
|
@ -15,4 +16,33 @@ return {
|
|||
-- { 'wakatime/vim-wakatime', event = 'VeryLazy' },
|
||||
{ 'williamboman/mason.nvim', opts = {} },
|
||||
'Winseven4lyf/vim-bbcode',
|
||||
|
||||
|
||||
{ 'mrsobakin/multilayout.nvim' , opts = {
|
||||
layouts = {
|
||||
ru = {
|
||||
-- Names of this layout, as `libukb` reports.
|
||||
names = { "Russian" },
|
||||
from = [[ёйцукенгшщзхъфывапролджэячсмитьбю.Ё"№;:?ЙЦУКЕНГШЩЗХЪ/ФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,]],
|
||||
to = [[`qwertyuiop[]asdfghjkl;'zxcvbnm,./~@#$^&QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?]],
|
||||
}
|
||||
},
|
||||
aliases = {
|
||||
-- Maximum length of default commands aliases.
|
||||
-- Increasing this value leads to longer startup times.
|
||||
max_length = 2,
|
||||
-- Extra commands that you want to alias.
|
||||
-- They are aliased regardless of `max_length`.
|
||||
extra = { "sort" },
|
||||
},
|
||||
-- Whether to use `libukb`. If this is set to false, `langmap`
|
||||
-- won't automatically switch when your layout does.
|
||||
use_libukb = true,
|
||||
-- Path to the `libukb.so`. If `nil`, ukb will be automatically
|
||||
-- downloaded, builded and installed in the neovim data directory.
|
||||
libukb_path = nil,
|
||||
-- Function of type `callback(layout: string)`. Called whenever
|
||||
-- current keyboard layout changes.
|
||||
callback = nil,
|
||||
}}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,12 +43,15 @@ GNUPGHOME='~/.local/share/gnupg'
|
|||
GOPATH="${HOME}/.local/share/go"
|
||||
GPG_TTY="$(tty)"
|
||||
JAVA_HOME="/usr/lib/jvm/java-23-openjdk"
|
||||
LESS="--wheel-lines 3 --mouse"
|
||||
LESS="-x4 --wheel-lines 3 --mouse"
|
||||
MANPAGER="sh -c 'col -bx | bat -l man -p --theme Monokai\ Extended'"
|
||||
MANROFFOPT="-c"
|
||||
MTR_OPTIONS="-t"
|
||||
SSH_ASKPASS="${HOME}/.local/bin/scripts/pinentry-askpass"
|
||||
SUDO_ASKPASS="${HOME}/.local/bin/scripts/dmenu-askpass"
|
||||
GRADLE_USER_HOME="${HOME}/.local/share/gradle"
|
||||
DOCKER_CONFIG="${HOME}/.local/share/docker"
|
||||
COMPOSE_BAKE=true
|
||||
GIT_DISCOVERY_ACROSS_FILESYSTEM=1
|
||||
|
||||
set +a
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
. ~/.config/zsh/modes.sh
|
||||
|
||||
fpath=($HOME/.local/share/completions $fpath)
|
||||
|
||||
# ls colors
|
||||
eval "$(dircolors -b)"
|
||||
|
||||
|
|
@ -51,7 +53,8 @@ PS1="%B%{$fg[red]%}[%{$fg[yellow]%}%n%{$fg[green]%}@%{$fg[blue]%}%M %{$fg[magent
|
|||
|
||||
|
||||
# ls aliases
|
||||
alias ls="lsd --color=auto"
|
||||
alias ls="/usr/bin/lsd --color=always --icon=always"
|
||||
alias lsd='/usr/bin/ls'
|
||||
alias l="ls -lh"
|
||||
alias la="ls -lah"
|
||||
alias ll="ls -lh"
|
||||
|
|
@ -77,25 +80,28 @@ alias ..............="cd ../../../../../../../../../../../../../"
|
|||
alias ...............="cd ../../../../../../../../../../../../../../"
|
||||
|
||||
# aliases
|
||||
alias rz="exec zsh"
|
||||
alias venv="source src_venv"
|
||||
alias ex="source src_example"
|
||||
alias ap="source src_add_path"
|
||||
alias info="pinfo "
|
||||
alias bat="bat "
|
||||
alias img="nsxiv "
|
||||
alias xclip="xclip -selection clipboard"
|
||||
alias d="diff --color -u "
|
||||
alias rgf="rg --files | rg "
|
||||
alias 7z="7zz" # for whatever reason 7z provides 7zz binary in debian
|
||||
alias wt="watch --color -d -cn 0.1 "
|
||||
alias .e="set -a && source .env && set +a"
|
||||
alias vimu="vim -u /dev/null"
|
||||
alias sudo='sudo ' # allow aliases with sudo
|
||||
alias rz='exec zsh'
|
||||
alias venv='source src_venv'
|
||||
alias ex='source src_example'
|
||||
alias ap='source src_add_path'
|
||||
alias info='pinfo'
|
||||
alias bat='bat '
|
||||
alias img='nsxiv'
|
||||
alias xclip='xclip -selection clipboard'
|
||||
alias xxclip='head -c-1 | xclip -selection clipboard'
|
||||
alias rgf='rg --files | rg'
|
||||
alias wt='watch --color -d -cn 0.1 '
|
||||
alias .e='set -a && source .env && set +a'
|
||||
alias vimu='vim -u /dev/null'
|
||||
alias reswap="sudo bash -c 'echo Working...; swapoff /swapfile && sudo swapon /swapfile'"
|
||||
alias make="make -j$(nproc)"
|
||||
alias py="python3"
|
||||
alias neofetch="fastfetch"
|
||||
alias open="xdg-open"
|
||||
alias py='python3'
|
||||
alias neofetch='fastfetch'
|
||||
alias open='xdg-open'
|
||||
alias m.='if mount | grep -q "$(pwd)"; then umount -l .; cd .; else mount .; cd .; fi'
|
||||
alias rs='stow -R .'
|
||||
alias sst='ssh -t'
|
||||
|
||||
# function aliases
|
||||
bl() { brightnessctl set "$1"% > /dev/null; }
|
||||
|
|
@ -103,15 +109,17 @@ nosw() { alacritty --class 'noswallow' -e "$@"; }; compdef _command nosw
|
|||
t() { taskell "${1:-${HOME}/.taskell.md}"; }
|
||||
vims() { filepath="$(type "$1" | rev | cut -d ' ' -f 1 | rev)"; [ $? -eq 0 ] && vim "${filepath}"; }; compdef _command vims
|
||||
tl() { tree -C "$@" | bat }; compdef _tree tl
|
||||
diff() { /usr/bin/diff --color -u "$@" | delta; }; compdef _files di
|
||||
|
||||
# compdef
|
||||
compdef -a '_git; _git-commit' gdc # todo
|
||||
compdef '_files -g "*.md"' md
|
||||
compdef _ollama ollama
|
||||
|
||||
# git aliases
|
||||
gl() { git log --decorate "$@" | bat }; compdef '_git; _git-log' gl
|
||||
gus() { git branch --set-upstream-to="${1:?}/${2:?}" "${2:?}"}; compdef '_git; _git-push' gus
|
||||
gpo() { git push --set-upstream origin ${1:-$(git rev-parse --abbrev-ref HEAD)}}
|
||||
gpo() { git push --set-upstream origin "$(git rev-parse --abbrev-ref HEAD)" "$@"}
|
||||
alias ga="git add"
|
||||
alias gb="git branch"
|
||||
alias gc="git commit"
|
||||
|
|
@ -120,6 +128,8 @@ alias gck="git checkout"
|
|||
alias gcl="git clone"
|
||||
alias gcls="git clone --depth=1"
|
||||
alias gcm="git commit --allow-empty-message -m ''"
|
||||
alias gcd='git commit --no-gpg-sign'
|
||||
alias gcmd="git commit --allow-empty-message -m '' --no-gpg-sign"
|
||||
alias gcn="git clean"
|
||||
alias gcp="git cherry-pick"
|
||||
alias gd="git diff"
|
||||
|
|
@ -137,6 +147,8 @@ alias grjs="git rebase --cancel"
|
|||
alias grm="git remote"
|
||||
alias grs="git restore --staged"
|
||||
alias grt="git reset"
|
||||
alias gsm='git submodule'
|
||||
alias grc='git rm --cached'
|
||||
alias gs="git status"
|
||||
alias gsc="git switch -c"
|
||||
alias gsh="git show"
|
||||
|
|
@ -146,9 +158,18 @@ alias gt="git tag"
|
|||
alias gus="git fetch --unshallow"
|
||||
|
||||
# docker aliases
|
||||
alias dc="docker compose"
|
||||
alias docker!="DOCKER_HOST=ssh://docker /usr/bin/docker"
|
||||
alias dc!="docker! compose"
|
||||
alias d='docker'
|
||||
alias dc='docker compose'
|
||||
alias d!='/usr/bin/docker'
|
||||
alias dc!='d! compose'
|
||||
|
||||
alias dj='dc up -d --force-recreate'
|
||||
alias djl='dc up -d --force-recreate && dl'
|
||||
alias dl='dc logs -f'
|
||||
alias dk='dc down'
|
||||
alias dv='d volume'
|
||||
alias di='d image'
|
||||
alias dr='d run --rm -it'
|
||||
|
||||
# tmux stuff
|
||||
tn() { tmux new-session -s "${1-"$(basename "$(pwd)")"}" }
|
||||
|
|
@ -158,4 +179,6 @@ alias ta="tmux a -t"
|
|||
stty -ixon
|
||||
|
||||
# print tasks on startup
|
||||
cat ~/.taskell.md | grep -v '>.*'
|
||||
_ZSH_TODO_FILE="${HOME}/todo.md"
|
||||
[ -f "$_ZSH_TODO_FILE" ] && { bat --color=always -p "$_ZSH_TODO_FILE" | grep -v '>.*'; }
|
||||
unset _ZSH_TODO_FILE
|
||||
|
|
|
|||
|
|
@ -10,9 +10,9 @@ cpp_mode::find_exec() {
|
|||
}
|
||||
|
||||
ct() {
|
||||
eval "$(cpp_mode::find_exec "tests")"
|
||||
"$(cpp_mode::find_exec "tests")"
|
||||
}
|
||||
|
||||
cr() {
|
||||
eval "$(cpp_mode::find_exec)"
|
||||
"$(cpp_mode::find_exec)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
[core]
|
||||
pager = delta
|
||||
pager = delta --tabs 4
|
||||
[user]
|
||||
email = me@wzray.com
|
||||
name = Arthur K.
|
||||
|
|
@ -17,3 +17,6 @@
|
|||
tool = nvimdiff
|
||||
[diff]
|
||||
colorMoved = default
|
||||
[safe]
|
||||
directory = /home/wzray/Services/cpu
|
||||
directory = /home/wzray/Services/cpu/*
|
||||
|
|
|
|||
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -1,2 +1,2 @@
|
|||
.zcompdump
|
||||
.zcompdump*
|
||||
/.fonts/.uuid
|
||||
|
|
|
|||
34
.local/bin/scripts/bin
Executable file
34
.local/bin/scripts/bin
Executable file
|
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
|
||||
URL="https://bin.wzray.com"
|
||||
SILENT=0
|
||||
declare -a files
|
||||
|
||||
while [ "$#" -gt 0 ]; do
|
||||
case "$1" in
|
||||
"-s") SILENT=1;;
|
||||
*) files+=("$1");;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ "$#" -gt 0 ]; then
|
||||
r="$(curl -X PUT --data-binary "@$1" "$URL" 2>/dev/null)"
|
||||
ext="$(basename -- "$1")"
|
||||
ext=".${ext##*.}"
|
||||
[ "$ext" = ".$1" ] && ext=
|
||||
else
|
||||
if [ "$SILENT" = 1 ]; then
|
||||
TMP_FILENAME="$(mktemp)"
|
||||
cat > "$TMP_FILENAME"
|
||||
r="$(curl -X PUT --data-binary "@$TMP_FILENAME" "$URL" 2>/dev/null)"
|
||||
cat < "$TMP_FILENAME"
|
||||
else
|
||||
r="$(curl -X PUT --data-binary @- "$URL" 2>/dev/null)"
|
||||
fi
|
||||
fi
|
||||
|
||||
r="$(tr -d $'\n' <<< "$r")"
|
||||
xclip -selection clipboard <<< "$r$ext"
|
||||
echo "$r$ext"
|
||||
[ -n "$TMP_FILENAME" ] && rm "$TMP_FILENAME"
|
||||
16
.local/bin/scripts/docker
Executable file
16
.local/bin/scripts/docker
Executable file
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/bash
|
||||
|
||||
declare -A CONTEXTS=(
|
||||
["cpu"]=hicpu
|
||||
["gpu"]=higpu
|
||||
)
|
||||
|
||||
WORKDIR="$(pwd)"
|
||||
[[ "$WORKDIR" = "$HOME/Services"* ]] && {
|
||||
_ctx="$(cut -d'/' -f1 <<<"${WORKDIR#"${HOME}/Services/"}")"
|
||||
[ -n "$_ctx" ] && _ctx="${CONTEXTS["$_ctx"]}" && \
|
||||
[ -n "$_ctx" ] && ctx="--context=$_ctx"
|
||||
}
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
/usr/bin/docker $ctx "$@"
|
||||
|
|
@ -8,6 +8,10 @@ elif [[ "$url" =~ ^[a-zA-Z0-9_-]+@([a-zA-Z0-9_.-]+):(.*) ]]; then
|
|||
url="https://${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"
|
||||
url="${url%.git}"
|
||||
xdg-open "$url"
|
||||
elif [[ "$url" =~ ^ssh://[a-zA-Z0-9_-]+@([a-zA-Z0-9_.-]+)/(.*) ]]; then
|
||||
url="https://${BASH_REMATCH[1]}/${BASH_REMATCH[2]}"
|
||||
url="${url%.git}"
|
||||
xdg-open "$url"
|
||||
else
|
||||
echo "TODO: $url"
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -1,39 +1,146 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
from typing import Literal
|
||||
import requests
|
||||
import time
|
||||
import threading
|
||||
import time
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from typing import Literal
|
||||
|
||||
import requests
|
||||
|
||||
state: Literal["loading", "done", "fail"] = "loading"
|
||||
|
||||
def die(r: str):
|
||||
print(r, file=sys.stderr)
|
||||
exit(1)
|
||||
|
||||
def strip_equal(msg: str, substring: str, n_max: int) -> str:
|
||||
if n_max <= 0 or msg[0] != substring or msg[-1] != substring:
|
||||
return msg
|
||||
return strip_equal(msg[1:-1], substring, n_max - 1)
|
||||
|
||||
def cleanup_string(s: str) -> str:
|
||||
return strip_equal(s.replace('\n','').strip(), '`', 4)
|
||||
with open(f"{os.environ['HOME']}/.secrets/openrouter.nike.secret") as f:
|
||||
KEY=f.readline().strip()
|
||||
if not KEY:
|
||||
die("Missing key!")
|
||||
HEADERS = {'Authorization': f'Bearer {KEY}'}
|
||||
|
||||
def spin(text: str):
|
||||
interval = 80
|
||||
spinner = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]
|
||||
i = 0
|
||||
while state == "loading":
|
||||
i = (i + 1) % len(spinner)
|
||||
print(f"\r{spinner[i]} {text}", end=' ')
|
||||
time.sleep(interval / 1000)
|
||||
symbol = "✔️" if state == "done" else "❌"
|
||||
print(f"\r{symbol} {text}")
|
||||
with subprocess.Popen(["git", "diff", "--staged"], stdout=subprocess.PIPE) as ps:
|
||||
ps.wait()
|
||||
DIFF = ps.stdout and ps.stdout.read().decode('utf-8').strip()
|
||||
if not DIFF or DIFF == "":
|
||||
die("Nothing to commit!")
|
||||
|
||||
URL = 'http://higpu:11434/api/chat'
|
||||
MODEL = 'gemma3:4b'
|
||||
|
||||
SAMPLES = [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/meson.build b/meson.build\nindex 5ee43f7..bae848d 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -1,5 +1,5 @@\n project('ukb', 'c',\n- version: '0.1.0',\n+ version: '0.2.1',\n default_options: ['warning_level=2', 'optimization=2'],\n )"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "chore: bump version to `0.2.1`"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml\nindex fa4f919..9fadc0d 100644\n--- a/.github/workflows/workflow.yml\n+++ b/.github/workflows/workflow.yml\n@@ -19,7 +19,7 @@ jobs:\n libjson-c-dev libx11-dev \\\n zip\n \n- - name: Build (Linux)\n+ - name: Build (`linux-x86_64`)\n run: |\n meson setup build.linux \\\n --prefix=/ \\\n@@ -29,7 +29,7 @@ jobs:\n meson compile -C build.linux\n meson install -C build.linux --destdir=install\n \n- - name: Build (Windows)\n+ - name: Build (`windows-x86_64`)\n run: |\n cat > mingw-cross.txt <<EOF\n [binaries]\n@@ -59,16 +59,17 @@ jobs:\n \n - name: Package artifacts\n env:\n- ARTIFACT_SUFFIX: ${{ startsWith(github.ref, 'refs/tags/v') && format('-{0}', github.ref_name) || '' }}\n+ VERSION_SUFFIX: ${{ startsWith(github.ref, 'refs/tags/v') && format('-{0}', github.ref_name) || '' }}\n run: |\n mkdir artifacts\n+ BASE=\"ukb$VERSION_SUFFIX\"\n \n- NAME=\"ukb-linux$ARTIFACT_SUFFIX\"\n+ NAME=\"$BASE-linux-x86_64\"\n cd build.linux/install\n tar czf \"../../artifacts/$NAME.tar.gz\" *\n cd ../..\n \n- NAME=\"ukb-windows$ARTIFACT_SUFFIX\"\n+ NAME=\"$BASE-windows-x86_64\"\n cd build.win/install\n zip -r \"../../artifacts/$NAME.zip\" *\n cd ../.."
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "feat: include arch in artifacts names"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/src/main.c b/src/main.c\nindex 2d87a78..0f64564 100644\n--- a/src/main.c\n+++ b/src/main.c\n@@ -11,6 +11,7 @@\n \n static struct {\n bool silent;\n+ bool list;\n const char* backend;\n } args;\n \n@@ -20,6 +21,7 @@ static const char* usage =\n \" -h show this help page\\n\"\n \" -s be silent and don't print anything to stderr\\n\"\n \" -b manually specify backend that should be used\\n\"\n+ \" -l list all registered backends and their availability\\n\"\n \" it will be used even if it is reported as unavailable\\n\"\n \"\";\n \n@@ -28,9 +30,10 @@ void parse_args(int argc, char **argv) {\n int opt;\n \n args.silent = false;\n+ args.list = false;\n args.backend = NULL;\n \n- while ((opt = getopt(argc, argv, \"shb:\")) != -1) {\n+ while ((opt = getopt(argc, argv, \"shb:l\")) != -1) {\n switch (opt) {\n case 's':\n args.silent = true;\n@@ -40,6 +43,10 @@ void parse_args(int argc, char **argv) {\n args.backend = optarg;\n break;\n \n+ case 'l':\n+ args.list = true;\n+ break;\n+\n case '?':\n fatal(\"Invalid option or missing argument\");\n break;\n@@ -54,6 +61,22 @@ void parse_args(int argc, char **argv) {\n }\n \n \n+void list_backends() {\n+ printf(\"Registered backends:\\n\\n\");\n+\n+ for (size_t i = 0; i < ukb_backends_number; ++i) {\n+ const ukb_backend_t *b = ukb_backends[i];\n+ if (ukb_backend_can_use(b)) {\n+ printf(\" * %s [available]\\n\", ukb_backend_name(b));\n+ } else {\n+ printf(\" * %s\\n\", ukb_backend_name(b));\n+ }\n+ }\n+\n+ printf(\"\\n\");\n+}\n+\n+\n void cb_print(const char* layout) {\n printf(\"%s\\n\", layout);\n fflush(stdout);\n@@ -62,6 +85,11 @@ void cb_print(const char* layout) {\n int main(int argc, char **argv) {\n parse_args(argc, argv);\n \n+ if (args.list) {\n+ list_backends();\n+ return 0;\n+ }\n+\n const ukb_backend_t *b;\n \n if (args.backend) {"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "feat: add list (`-l`) option to ukb"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml\nindex 4a6e5bc..fa4f919 100644\n--- a/.github/workflows/workflow.yml\n+++ b/.github/workflows/workflow.yml\n@@ -21,7 +21,11 @@ jobs:\n \n - name: Build (Linux)\n run: |\n- meson setup build.linux\n+ meson setup build.linux \\\n+ --prefix=/ \\\n+ --libdir=/lib \\\n+ --buildtype=release \\\n+ --strip\n meson compile -C build.linux\n meson install -C build.linux --destdir=install\n \n@@ -33,7 +37,7 @@ jobs:\n cpp = 'x86_64-w64-mingw32-g++'\n ar = 'x86_64-w64-mingw32-ar'\n strip = 'x86_64-w64-mingw32-strip'\n- pkgconfig = 'x86_64-w64-mingw32-pkg-config'\n+ pkg-config = 'x86_64-w64-mingw32-pkg-config'\n exe_wrapper = ''\n \n [host_machine]\n@@ -46,7 +50,10 @@ jobs:\n prefix = '/'\n EOF\n \n- meson setup build.win --cross-file mingw-cross.txt\n+ meson setup build.win \\\n+ --cross-file mingw-cross.txt \\\n+ --buildtype=release \\\n+ --strip\n meson compile -C build.win\n meson install -C build.win --destdir=install\n \ndiff --git a/meson.build b/meson.build\nindex 898c3e0..5ee43f7 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -30,18 +30,17 @@ endif\n \n install_headers('include/ukb.h', subdir: 'ukb')\n \n-libukb_kwargs = {\n- 'include_directories': inc,\n- 'dependencies': deps,\n- 'c_args': ['-DUKB_BACKENDS_INTERNAL'],\n- 'install': true,\n-}\n-libukb_a = static_library('ukb', lib_src, kwargs: libukb_kwargs)\n-libukb_so = shared_library('ukb', lib_src, kwargs: libukb_kwargs)\n+libukb = both_libraries('ukb', lib_src,\n+ include_directories: inc,\n+ dependencies: deps,\n+ c_args: ['-DUKB_BACKENDS_INTERNAL'],\n+ install: true,\n+ install_dir: get_option('libdir'),\n+)\n \n \n executable('ukb', 'src/main.c',\n include_directories: inc,\n- link_with: libukb_a,\n+ link_with: libukb.get_static_lib(),\n install: true,\n )"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "feat: unify artifact structure, enable release mode"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/src/backends/sway.c b/src/backends/sway.c\nindex 229b8bb..c7e8978 100644\n--- a/src/backends/sway.c\n+++ b/src/backends/sway.c\n@@ -37,22 +37,22 @@ typedef union header {\n \n \n static int sway_ipc_open(const char *socket_path) {\n-\tint socketfd;\n-\tif ((socketfd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {\n+ int socketfd;\n+ if ((socketfd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {\n return -1;\n-\t}\n+ }\n \n-\tstruct sockaddr_un addr = {\n+ struct sockaddr_un addr = {\n .sun_family = AF_UNIX,\n .sun_path = {0},\n };\n-\tstrncpy(addr.sun_path, socket_path, sizeof(addr.sun_path) - 1);\n+ strncpy(addr.sun_path, socket_path, sizeof(addr.sun_path) - 1);\n \n-\tif (connect(socketfd, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) == -1) {\n+ if (connect(socketfd, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) == -1) {\n return -1;\n-\t}\n+ }\n \n-\treturn socketfd;\n+ return socketfd;\n }\n \n static bool sway_ipc_send(int fd, uint32_t type, uint32_t length, const char *data) {"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "style: fix indentation (tabs & spaces mixing)"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml\nnew file mode 100644\nindex 0000000..4a6e5bc\n--- /dev/null\n+++ b/.github/workflows/workflow.yml\n@@ -0,0 +1,81 @@\n+name: Build\n+\n+on: [push]\n+\n+jobs:\n+ build:\n+ runs-on: ubuntu-latest\n+ permissions:\n+ contents: write\n+ steps:\n+ - uses: actions/checkout@v4\n+\n+ - name: Install dependencies\n+ run: |\n+ sudo apt update\n+ sudo apt install -y \\\n+ mingw-w64 build-essential pkg-config \\\n+ ninja-build meson \\\n+ libjson-c-dev libx11-dev \\\n+ zip\n+\n+ - name: Build (Linux)\n+ run: |\n+ meson setup build.linux\n+ meson compile -C build.linux\n+ meson install -C build.linux --destdir=install\n+\n+ - name: Build (Windows)\n+ run: |\n+ cat > mingw-cross.txt <<EOF\n+ [binaries]\n+ c = 'x86_64-w64-mingw32-gcc'\n+ cpp = 'x86_64-w64-mingw32-g++'\n+ ar = 'x86_64-w64-mingw32-ar'\n+ strip = 'x86_64-w64-mingw32-strip'\n+ pkgconfig = 'x86_64-w64-mingw32-pkg-config'\n+ exe_wrapper = ''\n+\n+ [host_machine]\n+ system = 'windows'\n+ cpu_family = 'x86_64'\n+ cpu = 'x86_64'\n+ endian = 'little'\n+\n+ [built-in options]\n+ prefix = '/'\n+ EOF\n+\n+ meson setup build.win --cross-file mingw-cross.txt\n+ meson compile -C build.win\n+ meson install -C build.win --destdir=install\n+\n+ - name: Package artifacts\n+ env:\n+ ARTIFACT_SUFFIX: ${{ startsWith(github.ref, 'refs/tags/v') && format('-{0}', github.ref_name) || '' }}\n+ run: |\n+ mkdir artifacts\n+\n+ NAME=\"ukb-linux$ARTIFACT_SUFFIX\"\n+ cd build.linux/install\n+ tar czf \"../../artifacts/$NAME.tar.gz\" *\n+ cd ../..\n+\n+ NAME=\"ukb-windows$ARTIFACT_SUFFIX\"\n+ cd build.win/install\n+ zip -r \"../../artifacts/$NAME.zip\" *\n+ cd ../..\n+\n+ - name: Upload artifacts\n+ if: ${{ !startsWith(github.ref, 'refs/tags/v') }}\n+ uses: actions/upload-artifact@v4\n+ with:\n+ name: artifacts\n+ path: artifacts/*\n+\n+ - name: Create Release\n+ if: ${{ startsWith(github.ref, 'refs/tags/v') }}\n+ uses: ncipollo/release-action@v1.16.0\n+ with:\n+ generateReleaseNotes: true\n+ artifacts: \"artifacts/*\"\ndiff --git a/.gitignore b/.gitignore\nindex 276e9cd..2fa41b4 100644\n--- a/.gitignore\n+++ b/.gitignore\n@@ -4,3 +4,5 @@\n ukb\n .cache/\n compile_commands.json\n+build*/\n+artifacts/"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "feat: add cicd"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/meson.build b/meson.build\nindex 229d3fd..898c3e0 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -11,7 +11,7 @@ deps = []\n platform = host_machine.system()\n \n if platform == 'linux'\n- add_project_arguments('-DPLATFORM=LINUX', language: ['c'])\n+ add_project_arguments('-DPLATFORM_LINUX', language: ['c'])\n lib_src += files(\n 'src/backends/sway.c',\n 'src/backends/xorg.c',\n@@ -20,6 +20,9 @@ if platform == 'linux'\n dependency('json-c', required: true),\n dependency('x11', required: true),\n ]\n+elif platform == 'windows'\n+ add_project_arguments('-DPLATFORM_WINDOWS', language: ['c'])\n+ lib_src += files('src/backends/windows.c')\n else\n error('unknown platform: ' + platform)\n endif\ndiff --git a/src/backends/windows.c b/src/backends/windows.c\nnew file mode 100644\nindex 0000000..491af84\n--- /dev/null\n+++ b/src/backends/windows.c\n@@ -0,0 +1,67 @@\n+#include <stdio.h>\n+#include <stdbool.h>\n+#include <windows.h>\n+\n+#include \"ukb.h\"\n+#include \"../utils.h\"\n+\n+\n+#define POLL_DELAY 1\n+\n+\n+static HKL prev_layout = NULL;\n+static char current_layout[128] = {0};\n+\n+\n+static bool hkl_to_name(HKL hkl, char* dst, size_t n) {\n+ LANGID langid = LOWORD((DWORD_PTR)hkl);\n+ LCID lcid = MAKELCID(langid, SORT_DEFAULT);\n+\n+ char name[LOCALE_NAME_MAX_LENGTH];\n+\n+ if (GetLocaleInfoA(lcid, LOCALE_SENGLANGUAGE, name, LOCALE_NAME_MAX_LENGTH)) {\n+ strncpy(dst, name, n);\n+ return true;\n+ } else {\n+ return false;\n+ }\n+}\n+\n+static HKL poll_layout_switch() {\n+ while(1) {\n+ HWND hwnd = GetForegroundWindow();\n+ DWORD thread_id = GetWindowThreadProcessId(hwnd, NULL);\n+ HKL new_layout = GetKeyboardLayout(thread_id);\n+\n+ if (prev_layout != new_layout) {\n+ prev_layout = new_layout;\n+ return new_layout;\n+ }\n+\n+ Sleep(POLL_DELAY);\n+ }\n+}\n+\n+/********************************* BACKEND ***********************************/\n+\n+static bool windows_can_use(void) {\n+ return true;\n+}\n+\n+static ukb_err_t windows_listen(ukb_layout_cb_t cb) {\n+ while (1) {\n+ HKL layout = poll_layout_switch();\n+ if (!hkl_to_name(layout, current_layout, sizeof(current_layout) - 1)) {\n+ UKB_ERR(\"Unknown layout.\");\n+ }\n+ cb(current_layout);\n+ }\n+\n+ UKB_OK();\n+}\n+\n+const ukb_backend_t ukb_backend_windows = {\n+ .name = \"windows\",\n+ .can_use = windows_can_use,\n+ .listen = windows_listen,\n+};\ndiff --git a/src/ukb.c b/src/ukb.c\nindex ec55ec8..74ed7df 100644\n--- a/src/ukb.c\n+++ b/src/ukb.c\n@@ -11,9 +11,16 @@\n \n /********************************* BACKENDS **********************************/\n \n+#if defined PLATFORM_LINUX\n #define UKB_BACKENDS(M) \\\n M(ukb_backend_sway) \\\n M(ukb_backend_xorg)\n+#elif defined PLATFORM_WINDOWS\n+#define UKB_BACKENDS(M) \\\n+ M(ukb_backend_windows)\n+#else\n+#error \"No platform is set.\"\n+#endif\n \n /*****************************************************************************/"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "feat(windows): add new backend"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/Makefile b/Makefile\ndeleted file mode 100644\nindex 9a8818d..0000000\n--- a/Makefile\n+++ /dev/null\n@@ -1,52 +0,0 @@\n-CC = gcc\n-AR = ar\n-\n-DEPS = json-c x11\n-\n-CFLAGS = -Iinclude -Wall -O2 $(shell pkg-config --cflags $(DEPS))\n-LDFLAGS = $(shell pkg-config --libs $(DEPS))\n-\n-LIB_SRC = src/ukb.c $(wildcard src/backends/*.c)\n-LIB_OBJ = $(LIB_SRC:.c=.o)\n-\n-BIN_SRC = src/main.c\n-BIN_OBJ = $(BIN_SRC:.c=.o)\n-\n-PREFIX ?= /usr/local\n-BIN_DIR = $(PREFIX)/bin\n-LIB_DIR = $(PREFIX)/lib\n-INCLUDE_DIR = $(PREFIX)/include/libukb\n-\n-all: libukb.a libukb.so ukb\n-\n-$(LIB_OBJ): %.o: %.c\n-\t$(CC) $(CFLAGS) -fPIC -DUKB_BACKENDS_INTERNAL -c $< -o $@\n-\n-$(BIN_OBJ): %.o: %.c\n-\t$(CC) $(CFLAGS) -c $< -o $@\n-\n-libukb.so: $(LIB_OBJ)\n-\t$(CC) -shared -o $@ $^ $(LDFLAGS)\n-\n-libukb.a: $(LIB_OBJ)\n-\t$(AR) rcs $@ $^\n-\n-ukb: $(BIN_OBJ) libukb.a\n-\t$(CC) $(BIN_OBJ) -L. -l:libukb.a -o $@ $(LDFLAGS)\n-\n-.PHONY: install\n-install: all\n-\tinstall -d $(BIN_DIR) $(LIB_DIR) $(INCLUDE_DIR)\n-\tinstall -m 0755 ukb $(BIN_DIR)/\n-\tinstall -m 0644 libukb.a libukb.so $(LIB_DIR)/\n-\tinstall -m 0644 include/*.h $(INCLUDE_DIR)/\n-\n-.PHONY: uninstall\n-uninstall:\n-\trm -f $(BIN_DIR)/ukb\n-\trm -f $(LIB_DIR)/libukb.a $(LIB_DIR)/libukb.so\n-\trm -rf $(INCLUDE_DIR)\n-\n-.PHONY: clean\n-clean:\n-\trm -f $(LIB_OBJ) $(BIN_OBJ) ukb libukb.so libukb.a\ndiff --git a/meson.build b/meson.build\nnew file mode 100644\nindex 0000000..229d3fd\n--- /dev/null\n+++ b/meson.build\n@@ -0,0 +1,44 @@\n+project('ukb', 'c',\n+ version: '0.1.0',\n+ default_options: ['warning_level=2', 'optimization=2'],\n+)\n+\n+\n+inc = include_directories('include')\n+lib_src = files('src/ukb.c')\n+deps = []\n+\n+platform = host_machine.system()\n+\n+if platform == 'linux'\n+ add_project_arguments('-DPLATFORM=LINUX', language: ['c'])\n+ lib_src += files(\n+ 'src/backends/sway.c',\n+ 'src/backends/xorg.c',\n+ )\n+ deps += [\n+ dependency('json-c', required: true),\n+ dependency('x11', required: true),\n+ ]\n+else\n+ error('unknown platform: ' + platform)\n+endif\n+\n+\n+install_headers('include/ukb.h', subdir: 'ukb')\n+\n+libukb_kwargs = {\n+ 'include_directories': inc,\n+ 'dependencies': deps,\n+ 'c_args': ['-DUKB_BACKENDS_INTERNAL'],\n+ 'install': true,\n+}\n+libukb_a = static_library('ukb', lib_src, kwargs: libukb_kwargs)\n+libukb_so = shared_library('ukb', lib_src, kwargs: libukb_kwargs)\n+\n+\n+executable('ukb', 'src/main.c',\n+ include_directories: inc,\n+ link_with: libukb_a,\n+ install: true,\n+)"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "feat: transition to meson build system"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/src/backends/sway.c b/src/backends/sway.c\nindex a7dfd9c..229b8bb 100644\n--- a/src/backends/sway.c\n+++ b/src/backends/sway.c\n@@ -80,7 +80,7 @@ static bool sway_ipc_recv(int fd, header_t *h, char **data) {\n left -= n;\n }\n \n- *data = (char*)malloc(h->fields.length);\n+ *data = (char*)calloc(1, h->fields.length + 1);\n left = h->fields.length;\n dst = (uint8_t*)*data;"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "fix(sway): buffer overflow"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/src/backends/xorg.c b/src/backends/xorg.c\nindex 00f6ae8..d74c696 100644\n--- a/src/backends/xorg.c\n+++ b/src/backends/xorg.c\n@@ -89,6 +89,27 @@ static int xorg_open_display() {\n /********************************* BACKEND ***********************************/\n \n static bool xorg_can_use(void) {\n+ // xkblib is pretty much useless when running under xwayland,\n+ // so we'll try to detect xwayland with some simple heuristics.\n+\n+ const char* session = getenv(\"XDG_SESSION_TYPE\");\n+ if (session) {\n+ if (strcmp(session, \"wayland\") == 0) {\n+ return false;\n+ }\n+\n+ if (strcmp(session, \"x11\") != 0) {\n+ // require an additional check if session is neither wayland nor x11\n+ session = NULL;\n+ }\n+ }\n+\n+ if (!session) {\n+ if (getenv(\"WAYLAND_DISPLAY\") != NULL) {\n+ return false;\n+ }\n+ }\n+\n int reason_return = xorg_open_display();\n XCloseDisplay(x_display);\n return reason_return == XkbOD_Success;"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "feat(xorg): detect xwayland"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/src/backends/xorg.c b/src/backends/xorg.c\nindex 86820df..00f6ae8 100644\n--- a/src/backends/xorg.c\n+++ b/src/backends/xorg.c\n@@ -59,7 +59,7 @@ static ukb_err_t xorg_wait_event() {\n \n XEvent event;\n int iret = XNextEvent(x_display, &event);\n- if (!iret) {\n+ if (iret) {\n UKB_ERR(\"XNextEvent failed\");\n }"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "fix: erroneous error on XNextEvent (#2)"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/src/backends/xorg.c b/src/backends/xorg.c\nindex dfb5459..86820df 100644\n--- a/src/backends/xorg.c\n+++ b/src/backends/xorg.c\n@@ -54,7 +54,7 @@ static ukb_err_t update_current_layout() {\n static ukb_err_t xorg_wait_event() {\n Bool bret = XkbSelectEventDetails(x_display, XkbUseCoreKbd, XkbStateNotify, XkbAllStateComponentsMask, XkbGroupStateMask);\n if (!bret) {\n- UKB_ERR(\"XkbSelectEventDetails failed\")\n+ UKB_ERR(\"XkbSelectEventDetails failed\");\n }\n \n XEvent event;\ndiff --git a/src/utils.h b/src/utils.h\nindex fee5425..f15f4d4 100644\n--- a/src/utils.h\n+++ b/src/utils.h\n@@ -2,10 +2,10 @@\n \n #define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))\n \n-#define UKB_OK() return (ukb_err_t) { .msg = NULL };\n-#define UKB_ERR(m) return (ukb_err_t) { .msg = m };\n+#define UKB_OK() return (ukb_err_t) { .msg = NULL }\n+#define UKB_ERR(m) return (ukb_err_t) { .msg = m }\n #define UKB_PROPAGATE(expr) \\\n- { \\\n+ do { \\\n ukb_err_t err = expr; \\\n if (err.msg != NULL) return err; \\\n- };\n+ } while (0)"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "fix: require semicolons for util macros"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": "\ndiff --git a/Makefile b/Makefile\nindex 702edec..9a8818d 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -1,7 +1,7 @@\n CC = gcc\n AR = ar\n \n-DEPS = json-c\n+DEPS = json-c x11\n \n CFLAGS = -Iinclude -Wall -O2 $(shell pkg-config --cflags $(DEPS))\n LDFLAGS = $(shell pkg-config --libs $(DEPS))\ndiff --git a/src/backends/xorg.c b/src/backends/xorg.c\nindex aebd709..dfb5459 100644\n--- a/src/backends/xorg.c\n+++ b/src/backends/xorg.c\n@@ -32,7 +32,7 @@ static ukb_err_t update_current_layout() {\n }\n \n int num_groups = desc_ptr->ctrls->num_groups;\n- if (xkbState.group >= num_groups) {\n+ if (xkb_state.group >= num_groups) {\n UKB_ERR(\"Group index out of range.\");\n }"
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "fix: x11 linking and incorrect variable name"
|
||||
}
|
||||
]
|
||||
|
||||
SAMPLES = []
|
||||
|
||||
# globals
|
||||
|
||||
PROMPT="""You are an assistant that helps user to write semantic commit messages. You will be presented with git diff of the code. Write a single short, concise and meaningful message to describe changes that were made. You can only write a single commit message for the entire diff. The single message that you write has to include ALL the changes, that exist in the diff. You can't skip anything. Git commit messages are LIMITED TO 72 CHARACTERS. YOUR MESSAGE COULD NOT BE LONGER THAN 72 CHARACTERS.
|
||||
|
||||
|
|
@ -60,71 +167,106 @@ Bear in mind that the `short description` of your commit becomes a globally-uniq
|
|||
|
||||
Use the "`" (backtick) symbol when referring to certain parts of code in your commit message."""
|
||||
|
||||
with open(f"{os.environ['HOME']}/.secrets/openai.secret") as f:
|
||||
KEY=f.readline().strip()
|
||||
REQUEST = {
|
||||
"model": MODEL,
|
||||
"messages": [
|
||||
{
|
||||
"role": "system",
|
||||
"content": PROMPT
|
||||
},
|
||||
*SAMPLES,
|
||||
{
|
||||
"role": "user",
|
||||
"content": DIFF
|
||||
},
|
||||
],
|
||||
"stream": False,
|
||||
"options": {
|
||||
"temperature": 1,
|
||||
"num_ctx": 117000,
|
||||
}
|
||||
}
|
||||
|
||||
ps = subprocess.Popen(["git", "diff", "--staged"], stdout = subprocess.PIPE)
|
||||
DIFF = ps.stdout and ps.stdout.read().decode('utf-8').strip()
|
||||
if not DIFF or DIFF == "":
|
||||
die("Nothing to commit!")
|
||||
|
||||
# arguemnt parsing
|
||||
|
||||
N: int = 5
|
||||
N: int = 1
|
||||
argv = iter(sys.argv[1:])
|
||||
for arg in argv:
|
||||
if arg == "-n":
|
||||
N = int(next(argv))
|
||||
|
||||
thread = threading.Thread(target = spin, args = ['Generating...'])
|
||||
thread.start()
|
||||
|
||||
r = requests.post("https://api.openai.com/v1/chat/completions", headers={'Authorization': f'Bearer {KEY}'}, json = {
|
||||
"model": "gpt-4o-mini",
|
||||
"messages": [
|
||||
{
|
||||
"role": "system",
|
||||
"content": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": PROMPT,
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": DIFF,
|
||||
}
|
||||
]
|
||||
},
|
||||
],
|
||||
"response_format": {
|
||||
"type": "text"
|
||||
},
|
||||
"temperature": 1,
|
||||
"max_completion_tokens": 72,
|
||||
"n": N,
|
||||
"top_p": 1,
|
||||
"frequency_penalty": 0,
|
||||
"presence_penalty": 0
|
||||
})
|
||||
def strip_equal(msg: str, substring: str, n_max: int) -> str:
|
||||
if n_max <= 0 or msg[0] != substring or msg[-1] != substring:
|
||||
return msg
|
||||
return strip_equal(msg[1:-1], substring, n_max-1)
|
||||
|
||||
|
||||
def cleanup_string(s: str) -> str:
|
||||
return strip_equal(s.replace('\n','').strip(), '`', 4)
|
||||
|
||||
|
||||
class Spinner:
|
||||
_thread: threading.Thread | None = None
|
||||
_state: Literal['loading', 'done', 'fail']
|
||||
total: int = N
|
||||
current = 0
|
||||
|
||||
@classmethod
|
||||
def start(cls, text: str):
|
||||
if cls._thread:
|
||||
return
|
||||
cls._state = 'loading'
|
||||
cls.text = text
|
||||
cls._thread = threading.Thread(target = cls._spin)
|
||||
cls._thread.start()
|
||||
|
||||
@classmethod
|
||||
def stop(cls, state: bool = True):
|
||||
if not cls._thread:
|
||||
return
|
||||
cls._state = 'done' if state else 'fail'
|
||||
cls._thread.join()
|
||||
|
||||
@classmethod
|
||||
def _spin(cls):
|
||||
interval = 80
|
||||
spinner = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]
|
||||
i = 0
|
||||
while cls._state == "loading":
|
||||
i = (i + 1) % len(spinner)
|
||||
print(f"\r{spinner[i]} {cls.text} ({cls.current}/{cls.total})", end=' ')
|
||||
time.sleep(interval / 1000)
|
||||
symbol = "✓" if cls._state == "done" else "⨯"
|
||||
print(f"\r{symbol} {cls.text} ")
|
||||
|
||||
|
||||
def main():
|
||||
Spinner.start('Generating...')
|
||||
|
||||
choices = []
|
||||
futs = []
|
||||
with ThreadPoolExecutor(max_workers=1) as ex:
|
||||
for _ in range(N):
|
||||
futs.append(ex.submit(requests.post, URL, headers=HEADERS, json=REQUEST))
|
||||
|
||||
for fut in futs:
|
||||
r: requests.Response = fut.result()
|
||||
Spinner.current += 1
|
||||
if r.status_code != 200:
|
||||
state = "fail"
|
||||
thread.join()
|
||||
Spinner.stop(False)
|
||||
die(f"status code: {r.status_code}\n{r.text}")
|
||||
choices.append(r.json())
|
||||
|
||||
state = "done"
|
||||
thread.join()
|
||||
Spinner.stop()
|
||||
|
||||
choices = '# ' + '\n# '.join(map(lambda x: cleanup_string(x['message']['content']), r.json()['choices']))
|
||||
choices = '# ' + '\n# '.join(map(lambda x: cleanup_string(x['message']['content']), choices))
|
||||
|
||||
fd = os.memfd_create("file.txt")
|
||||
fd_wrapper = os.fdopen(fd, mode="w+")
|
||||
with os.fdopen(fd, mode="w+") as fd_wrapper:
|
||||
fd_wrapper.write(choices)
|
||||
fd_wrapper.flush()
|
||||
fd_path = f"/proc/{os.getpid()}/fd/{fd}"
|
||||
os.system(f"git commit -v -e -F- < {fd_path}")
|
||||
os.system(f"git commit -v -e -F- < /proc/{os.getpid()}/fd/{fd}")
|
||||
|
||||
try:
|
||||
main()
|
||||
finally:
|
||||
Spinner.stop(False)
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ else
|
|||
else
|
||||
curl "${API_ENDPOINT}${FIELDS_SHORT}" 2>/dev/null | jq -r .query | tr -d $'\n'
|
||||
fi
|
||||
# curl "${API_ENDPOINT}${FIELDS_SHORT}" 2>/dev/null | jq -r .query | tr -d $'\n'
|
||||
fi
|
||||
|
||||
# vim: ft=bash
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
set -e
|
||||
|
||||
[ -z "$1" ] && (echo "No arguments supplied!" ; exit 1)
|
||||
[ -z "$1" ] && { echo "No arguments supplied!" ; exit 1; }
|
||||
|
||||
if [ "$(udisksctl info -b "$1" | grep -c 'MountPoints:\s\{8\}.')" -eq 0 ]; then
|
||||
udisksctl mount -b "$1"
|
||||
|
|
|
|||
9
.local/bin/scripts/ollama
Executable file
9
.local/bin/scripts/ollama
Executable file
|
|
@ -0,0 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
flags="-it"
|
||||
|
||||
if [ ! -t 0 ] || [ ! -t 1 ]; then
|
||||
flags=
|
||||
fi
|
||||
|
||||
docker --context=higpu exec $flags ollama-ollama-1 ollama "$@"
|
||||
14
.local/bin/scripts/tablet
Executable file
14
.local/bin/scripts/tablet
Executable file
|
|
@ -0,0 +1,14 @@
|
|||
#!/bin/bash
|
||||
EXT_MON="$(xrandr | grep -ow "\(DP-[0-9]\) connected" | cut -d " " -f 1)"
|
||||
|
||||
map() {
|
||||
xinput --map-to-output "UGTABLET 6 inch PenTablet Mouse" "$1"
|
||||
xinput --map-to-output "UGTABLET 6 inch PenTablet Pen (0)" "$1"
|
||||
xinput --map-to-output "UGTABLET 6 inch PenTablet Eraser (0)" "$1"
|
||||
}
|
||||
|
||||
if [ -n "$EXT_MON" ]; then
|
||||
map "$EXT_MON"
|
||||
else
|
||||
map 'eDP-1'
|
||||
fi
|
||||
|
|
@ -6,6 +6,19 @@ send_cmd() {
|
|||
cat < $PIPE
|
||||
}
|
||||
|
||||
send_router_cmd() {
|
||||
touch "${HOME}/.local/state/.vpn_loading"
|
||||
pkill -36 dwmblocks
|
||||
ssh router vpn "$1" laptop 2>/dev/null
|
||||
rm "${HOME}/.local/state/.vpn_loading"
|
||||
}
|
||||
|
||||
DEFAULT_LINK="$(resolvectl status | grep 'Default Route: yes' -B10 | grep 'Link' | tail -1 | grep -Eo '\(.*\)' | tr -d '()')"
|
||||
|
||||
if resolvectl domain "$DEFAULT_LINK" | grep -q 'wzray.com'; then
|
||||
IS_LOCAL=1
|
||||
fi
|
||||
|
||||
IFNAME="rix"
|
||||
|
||||
while [ "$#" -gt 0 ]; do
|
||||
|
|
@ -25,6 +38,13 @@ fi
|
|||
|
||||
UP_NAME="$(send_cmd status)"
|
||||
|
||||
if [ -n "$IS_LOCAL" ]; then
|
||||
if [ -n "$UP_NAME" ]; then
|
||||
send_cmd down
|
||||
else
|
||||
send_router_cmd toggle
|
||||
fi
|
||||
else
|
||||
if [ -n "${UP_NAME}" ]; then
|
||||
if [ "${UP_NAME}" != "${IFNAME}" ]; then
|
||||
send_cmd down
|
||||
|
|
@ -35,6 +55,8 @@ if [ -n "${UP_NAME}" ]; then
|
|||
else
|
||||
send_cmd up "$IFNAME"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
pkill -36 dwmblocks
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
# shellcheck disable=SC2034
|
||||
|
||||
die() {
|
||||
[ -n "$oc_pid" ] && kill -s TERM $oc_pid
|
||||
[ -n "$oc_pid" ] && kill -s TERM "$oc_pid"
|
||||
echo "exitting..."
|
||||
rm -f $PIPE
|
||||
exit 0
|
||||
|
|
@ -25,6 +25,13 @@ done
|
|||
|
||||
COMMANDS=("up" "down" "status")
|
||||
|
||||
is_really_up() {
|
||||
[ -n "$oc_pid" ] && if ! kill -0 "$oc_pid"; then
|
||||
oc_pid=
|
||||
up_name=
|
||||
fi
|
||||
}
|
||||
|
||||
in_arr() {
|
||||
declare -n arr="$2"
|
||||
|
||||
|
|
@ -35,14 +42,16 @@ in_arr() {
|
|||
}
|
||||
|
||||
down() {
|
||||
is_really_up
|
||||
[ -z "$oc_pid" ] && return
|
||||
kill -s TERM $oc_pid
|
||||
wait $oc_pid
|
||||
kill -s TERM "$oc_pid"
|
||||
wait "$oc_pid"
|
||||
oc_pid=
|
||||
up_name=
|
||||
}
|
||||
|
||||
up() {
|
||||
is_really_up
|
||||
[ -n "$oc_pid" ] && down
|
||||
openconnect --config "/etc/openconnect/config_$1" &
|
||||
oc_pid="$!"
|
||||
|
|
@ -50,10 +59,7 @@ up() {
|
|||
}
|
||||
|
||||
status() {
|
||||
# if [ -z "$up_name" ]; then
|
||||
# echo "DOWN" > $PIPE
|
||||
# else
|
||||
# fi
|
||||
is_really_up
|
||||
echo "$up_name" > $PIPE
|
||||
}
|
||||
|
||||
|
|
|
|||
2
.local/bin/scripts/win
Executable file
2
.local/bin/scripts/win
Executable file
|
|
@ -0,0 +1,2 @@
|
|||
#!/bin/sh
|
||||
moonlight stream higpu Desktop
|
||||
|
|
@ -33,9 +33,6 @@ else
|
|||
xrandr --addmode eDP-1 "${INT_RES}"
|
||||
xrandr --output eDP-1 --pos 2560x400 --mode "${INT_RES}" --output "${EXT_MON}" --pos 0x0 --mode "2560x1440" --rate 144 --primary
|
||||
change_dpi 96 24
|
||||
xinput --map-to-output "UGTABLET 6 inch PenTablet Mouse" "${EXT_MON}"
|
||||
xinput --map-to-output "UGTABLET 6 inch PenTablet Pen (0)" "${EXT_MON}"
|
||||
xinput --map-to-output "UGTABLET 6 inch PenTablet Eraser (0)" "${EXT_MON}"
|
||||
fi
|
||||
|
||||
exec "${HOME}/.config/X11/autostart"
|
||||
|
|
|
|||
|
|
@ -38,10 +38,10 @@ for battery_path in /sys/class/power_supply/!(AC*); do
|
|||
*) status_symbol="?? " ;;
|
||||
esac
|
||||
|
||||
if [ "$capacity" -eq 100 ]; then
|
||||
status_symbol=" "
|
||||
elif [ -n "${custom_icons[$device_name]}" ]; then
|
||||
if [ -n "${custom_icons[$device_name]}" ]; then
|
||||
status_symbol="${custom_icons["$device_name"]}"
|
||||
elif [ "$capacity" -eq 100 ]; then
|
||||
status_symbol=" "
|
||||
elif [[ "$status" = "Discharging" && "$capacity" -le 20 ]]; then
|
||||
status_symbol="❗"
|
||||
[ -n "$sep" ] && sep="" || sep=" ";
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
[ -f "${HOME}/.local/state/.vpn_loading" ] && {
|
||||
echo 'Loading...'
|
||||
exit 0
|
||||
}
|
||||
|
||||
PIPE="/var/run/vpnd.sock"
|
||||
send_cmd() {
|
||||
|
|
@ -16,4 +20,11 @@ esac
|
|||
|
||||
if [ -n "$IFNAME" ]; then
|
||||
echo " $IFNAME"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
DEFAULT_LINK="$(resolvectl status | grep 'Default Route: yes' -B10 | grep 'Link' | tail -1 | grep -Eo '\(.*\)' | tr -d '()')"
|
||||
|
||||
if resolvectl domain "$DEFAULT_LINK" | grep -q 'wzray.com'; then
|
||||
[ "$(ssh router vpn status laptop 2>/dev/null)" = '1' ] && echo " Local"
|
||||
fi
|
||||
|
|
|
|||
20
.ssh/config
20
.ssh/config
|
|
@ -2,17 +2,27 @@ Host *
|
|||
AddKeysToAgent yes
|
||||
IdentityFile ~/.ssh/id_ed25519
|
||||
|
||||
Host *.zvray.ru *.wzray.com *.vpn.wzray.ru
|
||||
Host *.zvray.ru mx*.wzray.com
|
||||
User root
|
||||
Port 8022
|
||||
|
||||
Host docker
|
||||
User root
|
||||
Hostname 10.161.192.10
|
||||
Host phone
|
||||
User u0_a230
|
||||
Port 8022
|
||||
|
||||
Host 192.168.1.1 10.161.0.1 10.162.0.1 openwrt
|
||||
Host laptop laptop.*.wzray.com
|
||||
|
||||
Host hicpu hicpu.spb.wzray.com
|
||||
User root
|
||||
|
||||
Host git.wzray.com
|
||||
User git
|
||||
Port 2201
|
||||
|
||||
Host 192.168.1.1 10.161.0.1 10.161.0.2 10.162.0.1 openwrt router ap gateway router.*.wzray.com ap.*.wzray.com openwrt.*.wzray.com gateway.*.wzray.com
|
||||
User root
|
||||
UserKnownHostsFile /dev/null
|
||||
IdentityFile /dev/null
|
||||
StrictHostKeyChecking no
|
||||
UpdateHostkeys no
|
||||
PubkeyAcceptedAlgorithms +ssh-rsa
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue