Compare commits

..

9 Commits

Author SHA1 Message Date
Jay 3c9e020e8e [feat] add tmux conf link 2021-01-18 22:11:59 +08:00
Jay adb1f36c83 [feat] add link script 2021-01-16 11:14:32 +08:00
Jay 034c3500e3 [feat] update config 2021-01-16 11:06:20 +08:00
soundcube 263f59ca76 [feat] change rust lsp setting 2020-09-19 21:10:42 +08:00
Jay 35b35ea6af add git config 2020-09-15 11:55:18 +08:00
Jay 3b7049704f [feat] change file explorer from nerdtree to defx 2020-09-04 17:53:38 +08:00
Jay 6364bb0d8c add ssh config 2020-08-01 11:59:49 +08:00
Jay 6b18c0f9b7 add tmux config 2020-07-15 15:56:14 +08:00
Jay 5e96ea0563 add vimrc 2020-07-15 15:55:35 +08:00
98 changed files with 493 additions and 4417 deletions
-1
View File
@@ -1 +0,0 @@
home
+24
View File
@@ -0,0 +1,24 @@
# This is Git's per-user configuration file.
[user]
# Please adapt and uncomment the following lines:
name = Jay
email = jay@lawsnote.com
[merge]
tool = vimdiff
[diff]
tool = vimdiff
trustExitCode = true
[difftool]
prompt = false
[alias]
d = difftool
co = checkout
ci = commit
l = log --oneline --graph --all
ls = log --graph --pretty=format:\"%h <%an> %ar %s\" --all
st = status
br = branch
[mergetool]
keepBackup = false
[core]
editor = vim
@@ -3,4 +3,3 @@ Host *
UserKnownHostsFile /dev/null UserKnownHostsFile /dev/null
ForwardAgent yes ForwardAgent yes
Include conf.d/*.conf
+12 -37
View File
@@ -6,14 +6,9 @@ run-shell "tmux setenv -g TMUX_VERSION_29 $(awk 'BEGIN {print (\"'$(tmux -V | se
# ----------------------------- # -----------------------------
# Global settings # Global settings
# ----------------------------- # -----------------------------
# set -g default-terminal xterm-256color set -g default-terminal xterm-256color
set -g default-terminal screen-256color
set-option -ga terminal-overrides ",*256col*:Tc" set-option -ga terminal-overrides ",*256col*:Tc"
set -g allow-passthrough on
set -ga update-environment TERM
set -ga update-environment TERM_PROGRAM
# scrollback buffer n lines # scrollback buffer n lines
set -g history-limit 10000 set -g history-limit 10000
@@ -23,6 +18,9 @@ set -g bell-action any
# start window indexing at 1 window so the <prefix> 1 is easier to reach # start window indexing at 1 window so the <prefix> 1 is easier to reach
set -g base-index 1 set -g base-index 1
# tell tmux to use 256 colour terminal
set -g default-terminal "screen-256color"
# xterm-style function key sequences # xterm-style function key sequences
setw -g xterm-keys on setw -g xterm-keys on
@@ -66,12 +64,12 @@ bind-key C-l select-window -t :+
bind-key -n C-l select-window -t :+ bind-key -n C-l select-window -t :+
# navigate panes # navigate panes
# bind-key j select-pane -t :.- bind-key j select-pane -t :.-
# bind-key C-j select-pane -t :.- bind-key C-j select-pane -t :.-
# bind-key -n C-j select-pane -t :.- bind-key -n C-j select-pane -t :.-
# bind-key k select-pane -t :.+ bind-key k select-pane -t :.+
# bind-key C-k select-pane -t :.+ bind-key C-k select-pane -t :.+
# bind-key -n C-k select-pane -t :.+ bind-key -n C-k select-pane -t :.+
# Copy-mode (vi-mode) # Copy-mode (vi-mode)
# #
@@ -142,24 +140,10 @@ if-shell -b '[ "$TMUX_VERSION_29" = 0 ]' \
if-shell -b '[ "$TMUX_VERSION_29" = 1 ]' \ if-shell -b '[ "$TMUX_VERSION_29" = 1 ]' \
"set -g message-style fg=white,bg=black,bright" "set -g message-style fg=white,bg=black,bright"
set -g @batt_icon_charge_tier8 '🌕'
set -g @batt_icon_charge_tier7 '🌖'
set -g @batt_icon_charge_tier6 '🌖'
set -g @batt_icon_charge_tier5 '🌗'
set -g @batt_icon_charge_tier4 '🌗'
set -g @batt_icon_charge_tier3 '🌘'
set -g @batt_icon_charge_tier2 '🌘'
set -g @batt_icon_charge_tier1 '🌑'
set -g @batt_icon_status_charged '🔋'
set -g @batt_icon_status_charging '⚡'
set -g @batt_icon_status_discharging '👎'
set -g @batt_color_status_primary_charged '#3daee9'
set -g @batt_color_status_primary_charging '#3daee9'
# what to be displayed on the right status # what to be displayed on the right status
set -g status-interval 1 set -g status-interval 1
set -g status-right ' } Batt: #{battery_icon} #{battery_percentage} | #( ~/bin/tmux-right.sh ) | %Y-%m-%d %H:%M:%S' set -g status-right ' } %Y-%m-%d %H:%M:%S'
set -g status-right-length 80 set -g status-right-length 60
# what to be displayed on the left status # what to be displayed on the left status
set -g status-left-length 30 set -g status-left-length 30
@@ -170,12 +154,3 @@ set-option -g status-left "#[fg=green]#(echo $USER)#[default].#[fg=blue]#h#[defa
# ----------------------------- # -----------------------------
if-shell "hash reattach-to-user-namespace 2> /dev/null" 'set-option -g default-command "reattach-to-user-namespace bash"' if-shell "hash reattach-to-user-namespace 2> /dev/null" 'set-option -g default-command "reattach-to-user-namespace bash"'
#-----------------------------
# Plugins
#-----------------------------
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-battery'
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
+424
View File
@@ -0,0 +1,424 @@
filetype off
call plug#begin('~/.vim/Plugged')
Plug 'prabirshrestha/async.vim'
Plug 'prabirshrestha/vim-lsp'
Plug 'prabirshrestha/asyncomplete.vim'
Plug 'prabirshrestha/asyncomplete-lsp.vim'
" autocompleter
Plug 'prabirshrestha/asyncomplete-gocode.vim'
Plug 'runoshun/tscompletejob'
Plug 'prabirshrestha/asyncomplete-tscompletejob.vim'
Plug 'tomasr/molokai'
Plug 'scrooloose/nerdcommenter'
Plug 'vim-scripts/DrawIt'
Plug 'easymotion/vim-easymotion'
Plug 'mattn/emmet-vim'
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
Plug 'pangloss/vim-javascript'
" tagbar
" golang install go get -u github.com/jstemmer/gotags
Plug 'majutsushi/tagbar'
Plug 'w0rp/ale'
Plug 'connorholyday/vim-snazzy'
Plug 'hzchirs/vim-material'
Plug 'kadekillary/Turtles'
Plug 'phanviet/vim-monokai-pro'
Plug 'sickill/vim-monokai'
Plug 'godlygeek/tabular'
Plug 'plasticboy/vim-markdown'
Plug 'ctrlpvim/ctrlp.vim'
" defx file explorer
" require python package pynvim
" install `pip3 install --user pynvim`
Plug 'Shougo/defx.nvim'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
" LSP
" JS/TS require
" npm install -g typescript typescript-language-server
Plug 'ryanolsonx/vim-lsp-javascript'
Plug 'ryanolsonx/vim-lsp-typescript'
Plug 'vim-airline/vim-airline'
Plug 'kien/tabman.vim'
" for git
Plug 'tpope/vim-fugitive'
Plug 'christoomey/vim-conflicted'
" for mark
Plug 'inkarkat/vim-ingo-library'
Plug 'inkarkat/vim-mark'
Plug 'rking/ag.vim'
Plug 'terryma/vim-multiple-cursors'
" temp plugin
Plug 'tpope/vim-surround'
Plug 'buoto/gotests-vim'
Plug 'chr4/nginx.vim'
Plug 'cespare/vim-toml'
Plug 'zah/nim.vim'
Plug 'rust-lang/rust.vim'
Plug 'danilo-augusto/vim-afterglow'
Plug 'vim-scripts/TaskList.vim'
call plug#end()
syntax on
set number
set tabstop=2
set shiftwidth=2
set expandtab
set nofoldenable
set pastetoggle=<F2>
" always show status
set laststatus=2
" show cursor position
set ruler
set cursorline
set cursorcolumn
set hlsearch
" no wrap line
set nowrap
" enable backspace
set backspace=indent,eol,start
set encoding=utf-8
" set font
" set guifont=Hack\ Nerd\ Font:h11
set background=dark
function! AdaptColorscheme()
highlight clear CursorLine
highlight Normal ctermbg=none
highlight LineNr ctermbg=none
highlight Folded ctermbg=none
highlight NonText ctermbg=none
highlight SpecialKey ctermbg=none
highlight VertSplit ctermbg=none
highlight SignColumn ctermbg=none
endfunction
autocmd ColorScheme * call AdaptColorscheme()
" colorscheme turtles
colorscheme afterglow
" define leader key
let mapleader=";"
filetype indent on
" 開啟檔案類型偵測
filetype on
" 根據檔案類型載入plugin
filetype plugin on
autocmd BufWritePost $MYVIMRC source $MYVIMRC
" split window
nmap <leader>sw <c-w>
nmap <leader>sww <c-w>k
nmap <leader>sws <c-w>j
nmap <leader>swa <c-w>h
nmap <leader>swd <c-w>l
nmap <leader>aa gT
nmap <leader>dd gt
" defx settings
call defx#custom#option('_', {
\ 'winwidth': 40,
\ 'split': 'vertical',
\ 'direction': 'topleft',
\ 'buffer_name': '',
\ 'toggle': 1,
\ 'resume': 1,
\ })
nmap <F3> :Defx<CR>
nmap <leader>me :Defx<CR>
autocmd FileType defx call s:defx_my_settings()
function! s:defx_my_settings() abort
" Define mappings
nnoremap <silent><buffer><expr> <CR>
\ defx#is_directory() ?
\ defx#do_action('open_tree', 'toggle') :
\ defx#do_action('drop')
nnoremap <silent><buffer><expr> T
\ defx#do_action('open', 'tabe')
nnoremap <silent><buffer><expr> s
\ defx#do_action('drop', 'vsplit')
nnoremap <silent><buffer><expr> mc
\ defx#do_action('copy')
nnoremap <silent><buffer><expr> mm
\ defx#do_action('move')
nnoremap <silent><buffer><expr> mp
\ defx#do_action('paste')
nnoremap <silent><buffer><expr> P
\ defx#do_action('preview')
nnoremap <silent><buffer><expr> o
\ defx#do_action('open_tree', 'toggle')
nnoremap <silent><buffer><expr> ma
\ defx#do_action('new_file')
nnoremap <silent><buffer><expr> C
\ defx#do_action('toggle_columns',
\ 'mark:indent:icon:filename:type:size:time')
nnoremap <silent><buffer><expr> S
\ defx#do_action('toggle_sort', 'time')
nnoremap <silent><buffer><expr> md
\ defx#do_action('remove')
nnoremap <silent><buffer><expr> mr
\ defx#do_action('rename')
nnoremap <silent><buffer><expr> !
\ defx#do_action('execute_command')
nnoremap <silent><buffer><expr> x
\ defx#do_action('execute_system')
nnoremap <silent><buffer><expr> yy
\ defx#do_action('yank_path')
nnoremap <silent><buffer><expr> .
\ defx#do_action('toggle_ignored_files')
nnoremap <silent><buffer><expr> ;
\ defx#do_action('repeat')
nnoremap <silent><buffer><expr> h
\ defx#do_action('cd', ['..'])
nnoremap <silent><buffer><expr> ~
\ defx#do_action('cd')
nnoremap <silent><buffer><expr> q
\ defx#do_action('quit')
nnoremap <silent><buffer><expr> <Space>
\ defx#do_action('toggle_select') . 'j'
nnoremap <silent><buffer><expr> *
\ defx#do_action('toggle_select_all')
nnoremap <silent><buffer><expr> j
\ line('.') == line('$') ? 'gg' : 'j'
nnoremap <silent><buffer><expr> k
\ line('.') == 1 ? 'G' : 'k'
nnoremap <silent><buffer><expr> r
\ defx#do_action('redraw')
nnoremap <silent><buffer><expr> <C-g>
\ defx#do_action('print')
nnoremap <silent><buffer><expr> cd
\ defx#do_action('change_vim_cwd')
endfunction
" tagbar
nmap <F8> :TagbarToggle<CR>
" NeoComplete
let g:neocomplete#enable_at_startup = 1
let g:airline_powerline_fonts = 1
" <Leader>f{char} to move to {char}
map <Leader>f <Plug>(easymotion-bd-f)
nmap <Leader>f <Plug>(easymotion-overwin-f)
" s{char}{char} to move to {char}{char}
nmap s <Plug>(easymotion-overwin-f2)
" Move to line
map <Leader>L <Plug>(easymotion-bd-jk)
nmap <Leader>L <Plug>(easymotion-overwin-line)
" Move to word
map <Leader>w <Plug>(easymotion-bd-w)
nmap <Leader>w <Plug>(easymotion-overwin-w)
" lint
let g:ale_linters = {
\ 'javascript': ['standard'],
\ 'go': ['gopls'],
\ 'rust': ['analyzer'],
\}
let g:ale_fixers = {'javascript': ['standard']}
let g:ale_lint_on_save = 1
let g:ale_fix_on_save = 1
nmap <leader>= <Plug>(ale_fix)
" NERDCommenter
let g:NERDSpaceDelims=1
let g:NERDDefaultAlign='left'
function! MergeTab()
let bufnums = tabpagebuflist()
hide tabclose
topleft vsplit
for n in bufnums
execute 'sbuffer ' . n
wincmd _
endfor
wincmd t
quit
wincmd =
endfunction
command! MergeTab call MergeTab()
" LSP Settings
" key binding
nmap <silent> <Leader>gd :LspDefinition<CR>
nmap <silent> <Leader>gt :tab split<CR>:LspDefinition<CR>
nmap <silent> <Leader>p :LspHover<CR>
nmap <silent> <Leader>gr :LspReferences<CR>
nmap <silent> <Leader>rr :LspStopServer<CR>
nmap <silent> <Leader>i :LspImplementation<CR>
nmap <silent> <Leader>gs :split \| :LspDefinition <CR>
nmap <silent> <Leader>gv :vsplit \| :LspDefinition <CR>
nmap <silent> <Leader>gf :LspDocumentFormat<CR>
let g:lsp_diagnostics_enabled = 0 " disable diagnostics support
let g:lsp_diagnostics_float_cursor = 0
let g:lsp_diagnostics_echo_cursor = 1
" require node module
" npm i -g dockerfile-language-server-nodejs
if executable('docker-langserver')
au User lsp_setup call lsp#register_server({
\ 'name': 'docker-langserver',
\ 'cmd': {server_info->[&shell, &shellcmdflag, 'docker-langserver --stdio']},
\ 'whitelist': ['dockerfile'],
\ })
endif
" require golang app
" go get -u github.com/sourcegraph/go-langserver
" Setting >>>>
" 'cmd': {server_info->['go-langserver', '-gocodecompletion']},
" 'cmd': {server_info->['gopls', '-mode', 'stdio']},
if executable('gopls')
au User lsp_setup call lsp#register_server({
\ 'name': 'gopls',
\ 'cmd': {server_info->['gopls']},
\ 'whitelist': ['go'],
\ })
autocmd FileType go setlocal omnifunc=lsp#complete
endif
if executable('deno')
au User lsp_setup call lsp#register_server({
\ 'name': 'deno',
\ 'cmd': {server_info->[&shell, &shellcmdflag, 'deno lsp']},
\ 'whitelist': ['typescript', 'typescript.tsx', 'typescriptreact'],
\ })
endif
" rustup update
" rustup component add rls rust-analysis rust-src
" if executable('rls')
" au User lsp_setup call lsp#register_server({
" \ 'name': 'rls',
" \ 'cmd': {server_info->['rustup', 'run', 'stable', 'rls']},
" \ 'workspace_config': {'rust': {'clippy_preference': 'on'}},
" \ 'whitelist': ['rust'],
" \ })
" endif
if executable('rust-analyzer')
au User lsp_setup call lsp#register_server({
\ 'name': 'rust-analyzer',
\ 'cmd': {server_info->['rust-analyzer']},
\ 'workspace_config': {'rust': {'clippy_preference': 'on'}},
\ 'whitelist': ['rust'],
\ })
endif
" auto completer
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<cr>"
" set completeopt+=preview
autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif
let g:asyncomplete_auto_popup = 0
function! s:check_back_space() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~ '\s'
endfunction
inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" :
\ asyncomplete#force_refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
call asyncomplete#register_source(asyncomplete#sources#gocode#get_source_options({
\ 'name': 'gocode',
\ 'whitelist': ['go'],
\ 'completor': function('asyncomplete#sources#gocode#completor'),
\ }))
call asyncomplete#register_source(asyncomplete#sources#tscompletejob#get_source_options({
\ 'name': 'tscompletejob',
\ 'whitelist': ['typescript'],
\ 'completor': function('asyncomplete#sources#tscompletejob#completor'),
\ }))
let g:tagbar_type_go = {
\ 'ctagstype' : 'go',
\ 'kinds' : [
\ 'p:package',
\ 'i:imports:1',
\ 'c:constants',
\ 'v:variables',
\ 't:types',
\ 'n:interfaces',
\ 'w:fields',
\ 'e:embedded',
\ 'm:methods',
\ 'r:constructor',
\ 'f:functions'
\ ],
\ 'sro' : '.',
\ 'kind2scope' : {
\ 't' : 'ctype',
\ 'n' : 'ntype'
\ },
\ 'scope2kind' : {
\ 'ctype' : 't',
\ 'ntype' : 'n'
\ },
\ 'ctagsbin' : 'gotags',
\ 'ctagsargs' : '-sort -silent'
\ }
" vim-go setting
autocmd FileType go nmap tgd <Plug>(go-def-tab)
autocmd FileType go nmap <leader>err <Plug>(go-iferr)
let g:go_fmt_fail_silently = 1
let g:go_fmt_command = "goimports"
let g:go_def_mode = 'godef'
let g:go_decls_includes = "func,type"
let g:go_highlight_types = 1
let g:go_highlight_fields = 1
let g:go_highlight_functions = 1
let g:go_highlight_function_calls = 1
let g:go_highlight_operators = 1
let g:go_highlight_extra_types = 1
" for rust-vim
let g:rust_recommended_style = 0
let g:rustfmt_autosave = 1
let g:syntastic_rust_checkers = ['cargo']
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#show_buffers = 0
let g:airline#extensions#tabline#show_splits = 0
let g:airline#extensions#tabline#show_tabs = 1
let g:airline#extensions#tabline#show_tab_nr = 0
let g:airline#extensions#tabline#show_tab_type = 0
let g:airline#extensions#tabline#close_symbol = '×'
let g:airline#extensions#tabline#show_close_button = 0
let g:multi_cursor_use_default_mapping=0
" Default mapping
let g:multi_cursor_start_word_key = "<C-n>"
let g:multi_cursor_select_all_word_key = '<A-n>'
let g:multi_cursor_start_key = "g<C-n>"
let g:multi_cursor_select_all_key = 'g<A-n>'
let g:multi_cursor_next_key = "<C-n>"
" let g:multi_cursor_prev_key = '<C-p>'
let g:multi_cursor_skip_key = '<C-x>'
let g:multi_cursor_quit_key = '<Esc>'
let g:javascript_plugin_jsdoc = 1
-58
View File
@@ -1,58 +0,0 @@
{{- $email := "" -}}
{{- if hasKey . "email" -}}
{{- $email = .email -}}
{{- else -}}
{{- $email = promptStringOnce . "email" "email address" -}}
{{ end }}
{{- $gitUser := "" -}}
{{- if hasKey . "gitUser" -}}
{{- $gitUser = .gitUser -}}
{{- else -}}
{{- $gitUser = promptStringOnce . "gitUser" "git username" -}}
{{- end -}}
{{- $jsLinter := promptStringOnce . "jsLinter" "js linter" "standard" -}}
{{- if eq $jsLinter "" -}}
{{- $jsLinter = "standard" -}}
{{- end -}}
{{- $jsFixer := promptStringOnce . "jsFixer" "js fixer" "standard" -}}
{{- if eq $jsFixer "" -}}
{{- $jsFixer = "standard" -}}
{{- end -}}
{{- $installGo := promptBoolOnce . "installGo" "install golang bin" true -}}
{{- $installNode := promptBoolOnce . "installNode" "install nodejs bin" true -}}
{{- $installRust := promptBoolOnce . "installRust" "install rust bin" true -}}
{{- $enableTmux := promptBoolOnce . "enableTmux" "install enable tmux autostart" true -}}
{{- $enableSSHAgent := promptBoolOnce . "enableSSHAgent" "install enable ssh agent autostart" true -}}
{{- $enableUI := promptBoolOnce . "enableUI" "install enable ui" true -}}
{{- $systemd := promptBoolOnce . "systemd" "is systemd init" true -}}
[data.settings]
systemd = {{ $systemd }}
[data.ui]
enable = {{ $enableUI }}
[data.shell]
tmux = {{ $enableTmux }}
ssh_agent = {{ $enableSSHAgent }}
[data.gitconfig]
email = {{ $email | quote }}
username = {{ $gitUser | quote }}
[data.nvim]
js_linter = {{ $jsLinter | quote }}
js_fixer = {{ $jsFixer | quote }}
[data.dev]
golang = {{ $installGo }}
nodejs = {{ $installNode }}
rust = {{ $installRust }}
[merge]
command = "nvim"
args = ["-d", "{{ "{{" }} .Destination {{ "}}" }}", "{{ "{{" }} .Source {{ "}}" }}", "{{ "{{" }} .Target {{ "}}" }}"]
-19
View File
@@ -1,19 +0,0 @@
# ignore template
{{- if not .shell.tmux }}
.tmux.conf
{{- end }}
{{- if not .ui.enable }}
.pam_environment
.config/alacrtty/
.config/environment.d/
.config/hypr/
.config/mako/
.config/sway/
.config/swaylock/
.config/systemd/
.config/waybar/
.config/wofi/
.config/xdg-desktop-portal-wlr/
{{- end }}
@@ -1,10 +0,0 @@
#!/bin/bash
if [ -d "$HOME/.zinit/bin" ]; then
exit 0
fi
if ! git clone https://github.com/zdharma-continuum/zinit.git ~/.zinit/bin; then
>&2 echo "clone zinit into ~/.zinit/bin failed"
exit 1
fi
@@ -1,13 +0,0 @@
#!/bin/bash
PATH="$HOME/apps/go/bin:$HOME/apps/node/bin:$PATH"
if command -v npm > /dev/null; then
npm i -g typescript typescript-language-server dockerfile-language-server-nodejs svelte-language-server
fi
if command -v go > /dev/null; then
go install github.com/sourcegraph/go-langserver@latest
go install github.com/cweill/gotests/gotests@latest
fi
@@ -1,5 +0,0 @@
#!/bin/bash
{{ if .shell.tmux }}
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
{{ end }}
@@ -1,24 +0,0 @@
#!/bin/bash
readonly wanted_packages=(
git
svn
zsh
nvim
tmux
curl
wget
)
missing_packages=()
for package in "${wanted_packages[@]}"; do
if ! command -v "${package}" > /dev/null ; then
missing_packages+=("${package}")
fi
done
if [[ ${#missing_packages[@]} -gt 0 ]]; then
>&2 echo "missing packages ${missing_packages[*]}"
exit 1
fi
@@ -1,130 +0,0 @@
#!/bin/bash
set -x
GO_VERSION="1.22.0"
NODE_VERSION="20.5.1"
ARCH="{{ .chezmoi.arch }}"
OSTYPE="{{ .chezmoi.os }}"
if [ ! -d "$HOME/apps" ]; then
if ! mkdir -p "$HOME/apps" ; then
>&2 echo "make directory failed"
exit 1
fi
fi
function install_golang {
#if command -v go ; then
# return 0
#fi
local tmpDir=$(mktemp -d)
local url="https://go.dev/dl/go$GO_VERSION.$OSTYPE-$ARCH.tar.gz"
# download
if ! wget -O "$tmpDir/go.tar.gz" "$url" ; then
rm -rf "$tmpDir"
>&2 echo "download golang binary failed"
return 1
fi
if ! tar zxf "$tmpDir/go.tar.gz" -C "$tmpDir" ;then
rm -rf "$tmpDir"
>&2 echo "untar golang binary failed"
return 1
fi
mv "$tmpDir/go" "$HOME/apps/go-${GO_VERSION}"
if [ -L "$HOME/apps/go" ]; then
#rm -rf `readlink -f "$HOME/apps/go"`
unlink "$HOME/apps/go"
fi
ln -sf "$HOME/apps/go-${GO_VERSION}" "$HOME/apps/go"
rm -rf "$tmpDir"
}
function install_nodejs {
#if command -v node ; then
# return 0
#fi
local tmpDir=$(mktemp -d)
local arch=""
case "$ARCH" in
"amd64")
arch="x64"
;;
"arm64")
arch="arm64"
;;
*)
>&2 echo "arch ($ARCH) not support"
return 1
;;
esac
local url="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-${OSTYPE}-${arch}.tar.xz"
if ! wget -O "$tmpDir/node.tar.xz" "$url" ; then
rm -rf "$tmpDir"
>&2 echo "download nodejs binary failed"
return 1
fi
if ! tar xJf "$tmpDir/node.tar.xz" -C "$tmpDir" ; then
rm -rf "$tmpDir"
>&2 echo "untar nodejs binary failed"
return 1
fi
dirs=$(find "$tmpDir" -type d -mindepth 1 -maxdepth 1 -name 'node*')
mv "$dirs" "$HOME/apps/node-v${NODE_VERSION}"
if [ -L "$HOME/apps/node" ]; then
#rm -rf `readlink -f "$HOME/apps/node"`
unlink "$HOME/apps/node"
fi
ln -sf "$HOME/apps/node-v${NODE_VERSION}" "$HOME/apps/node"
rm -rf "$tmpDir"
}
function install_rust {
if command -v cargo ; then
return 0
fi
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --profile default -y
}
{{ if .dev.golang }}
echo "start install golang ${GO_VERSION}..."
if ! install_golang ; then
>&2 echo "install golang failed"
exit 1
fi
{{ end }}
{{ if .dev.nodejs }}
echo "start install nodejs v${NODE_VERSION}..."
if ! install_nodejs ; then
>&2 echo "install nodejs failed"
exit 1
fi
{{ end }}
{{ if .dev.rust }}
echo "start install rust..."
if ! install_rust ; then
>&2 echo "install rust failed"
exit 1
fi
{{ end }}
@@ -1,30 +0,0 @@
#!/bin/sh -e
# filename format datetime YYYYMMDD-HHMMSS.png
filename=$(date +%Y%m%d-%H%M%S).png
# Get the picture from maim
# flameshot gui -r > $HOME/.cache/src.png &
grim -g "0,0 1920x1200" "$HOME/ramdisk/$filename" &
wait $!
# add shadow, round corner, border and watermark
# convert $HOME/ramdisk/src.png \
# \( +clone -alpha extract \
# -draw 'fill black polygon 0,0 0,8 8,0 fill white circle 8,8 8,0' \
# \( +clone -flip \) -compose Multiply -composite \
# \( +clone -flop \) -compose Multiply -composite \
# \) -alpha off -compose CopyOpacity -composite $HOME/ramdisk/output.png
# convert $HOME/ramdisk/output.png -bordercolor none -border 20 \( +clone -background black -shadow 80x8+15+15 \) \
# +swap -background transparent -layers merge +repage $HOME/ramdisk/des.png
# # composite -gravity South ~/.local/bin/watermark.png $HOME/ramdisk/des.png $HOME/ramdisk/des.png
# # Send the Picture to clipboard
# # xclip -selection clipboard -t image/png -i $HOME/ramdisk/des.png
# wl-copy -t image/png < $HOME/ramdisk/des.png
# # remove the other pictures
# rm $HOME/ramdisk/src.png $HOME/ramdisk/output.png
notify-send "screenshot success"
-13
View File
@@ -1,13 +0,0 @@
#!/bin/bash
muted=$(pactl get-sink-mute @DEFAULT_SINK@ | awk -F ' ' '{print $2}')
if [ $muted == "yes" ]; then
echo "{\"alt\": \"mute\", \"class\": \"muted\", \"tooltip\": \"muted\"}"
exit
fi
VOL=$(pactl get-sink-volume @DEFAULT_SINK@ | grep Volume | awk -F' ' '{print $5}' | sed -e 's/%$//')
echo "{\"percentage\": $VOL, \"tooltip\": \"$VOL%\"}"
-38
View File
@@ -1,38 +0,0 @@
#!/bin/bash
if [ -z "$1" ]; then
echo "請輸入檔案名稱"
exit 1
fi
if [ ! -f "$1" ]; then
echo "file not exists"
exit 1
fi
FILENAME="${1##*/}"
DIRNAME="${FILENAME%.*}"
EXTNAME="${FILENAME##*.}"
echo "$DIRNAME"
mkdir "$DIRNAME"
# gen key
openssl rand 16 > "$DIRNAME/enc.key"
# new key info file
echo "enc.key" > keyinfo
echo "$DIRNAME/enc.key" >> keyinfo
openssl rand 16 -hex >> keyinfo
# convert
ffmpeg -i "$1" -f hls -hls_time 10 -hls_list_size 0 -vn -hls_segment_filename "$DIRNAME/segment%d.ts" -hls_key_info_file keyinfo -hls_playlist_type vod "$DIRNAME/playlist.m3u8"
# move origin file
cp "$1" "$DIRNAME/origin.$EXTNAME"
# clean tmp file
rm keyinfo
-57
View File
@@ -1,57 +0,0 @@
#!/bin/bash
set -ex
if [ -z "$1" ]; then
echo "Usage: $0 <go-version>"
exit 1
fi
# chezmoi will replace the OS and ARCH variables
ARCH="{{ .chezmoi.arch }}"
OS="{{ .chezmoi.os }}"
if [ ! -d "$HOME/apps" ]; then
if ! mkdir -p "$HOME/apps"; then
>&2 echo "Failed to create $HOME/apps"
exit 1
fi
fi
deleteTmpDir() {
if [ -d "$1" ]; then
rm -rf "$1"
fi
}
TMP_DIR=$(mktemp -d)
trap 'deleteTmpDir '"$TMP_DIR"'' EXIT
install_go() {
local url="https://go.dev/dl/go$1.$OS-$ARCH.tar.gz"
if ! wget -O "$TMP_DIR/go.tar.gz" "$url"; then
>&2 echo "Failed to download $url"
return 1
fi
if ! tar zxf "$TMP_DIR/go.tar.gz" -C "$TMP_DIR"; then
>&2 echo "Failed to extract $TMP_DIR/go.tar.gz"
return 1
fi
mv "$TMP_DIR/go" "$HOME/apps/go-$1"
# relink go folder to the new version
if [ -L "$HOME/apps/go" ]; then
unlink "$HOME/apps/go"
fi
ln -s "$HOME/apps/go-$1" "$HOME/apps/go"
return 0
}
install_go "$1"
-87
View File
@@ -1,87 +0,0 @@
#!/bin/bash
set -xe
if [ -z "$1" ]; then
echo "Usage: $0 <node-version>"
exit 1
fi
# chezmoi will replace the OS and ARCH variables
ARCH="{{ .chezmoi.arch }}"
OS="{{ .chezmoi.os }}"
if [ ! -d "$HOME/apps" ]; then
if ! mkdir -p "$HOME/apps"; then
>&2 echo "Failed to create $HOME/apps"
exit 1
fi
fi
deleteTmpDir() {
if [ -d "$1" ]; then
rm -rf "$1"
fi
}
TMP_DIR=$(mktemp -d)
trap 'deleteTmpDir '"$TMP_DIR"'' EXIT
install_nodejs() {
local arch=""
NODE_VERSION=$1
case "$ARCH" in
"amd64")
arch="x64"
;;
"arm64")
arch="arm64"
;;
*)
>&2 echo "arch ($ARCH) not support"
return 1
;;
esac
local url="https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-${OS}-${arch}.tar.xz"
if ! wget -O "$TMP_DIR/node.tar.xz" "$url"; then
>&2 echo "Failed to download $url"
return 1
fi
if ! tar xf "$TMP_DIR/node.tar.xz" -C "$TMP_DIR"; then
>&2 echo "Failed to extract $TMP_DIR/node.tar.xz"
return 1
fi
dirs=$(find "$TMP_DIR" -maxdepth 1 -type d -name "node*")
if [ -z "$dirs" ]; then
>&2 echo "Failed to find node folder"
return 1
fi
mv "$dirs" "$HOME/apps/node-v$NODE_VERSION"
if [ -L "$HOME/apps/node" ]; then
unlink "$HOME/apps/node"
fi
ln -s "$HOME/apps/node-v$NODE_VERSION" "$HOME/apps/node"
return 0
}
install_require_dep() {
PATH="$HOME/apps/go/bin:$HOME/apps/node/bin:$PATH"
if command -v npm > /dev/null; then
npm i -g typescript typescript-language-server dockerfile-language-server-nodejs svelte-language-server
fi
}
install_nodejs "$1"
install_require_dep
-39
View File
@@ -1,39 +0,0 @@
#!/bin/bash
set -xe
set -o pipefail
if [ -z "$1" ]; then
echo "Usage: $0 <src-folder-path>"
exit 1
fi
tmpFolder=$(mktemp -d)
deleteTmpFolder() {
rm -rf $tmpFolder
}
trap deleteTmpFolder EXIT
wd=$(pwd)
encName="lbk-$(date +%Y%m%d)-enc.zip"
# 7z a -tzip -p -mem=AES256 archive.zip file1 file2 directory/
# compress Source.zip without encryption
cd $1
zip -r "$tmpFolder/Source.zip" .
# generate Source.zip md5
md5sum "$tmpFolder/Source.zip" | cut -d' ' -f1 | tee "$tmpFolder/Vendor_Src_MD5.txt"
# compress with encryption
cd $tmpFolder
7z a -tzip -pLb1234567890 -mem=AES256 "$tmpFolder/$encName" Source.zip Vendor_Src_MD5.txt
# copy to pwd folder
cp "$tmpFolder/$encName" $wd
cd $wd
-25
View File
@@ -1,25 +0,0 @@
#!/usr/bin/env bash
set -xe
# usage: pack-magneto2-source <image repo> [output folder]
if [ $# -lt 1 ]; then
echo "Usage: $0 <image repo> [output folder]"
exit 1
fi
IMAGE_REPO=$1
OUTPUT_FOLDER=$(realpath "${2:-.}")
# echo "Packing Magento 2 source code from $IMAGE_REPO to $OUTPUT_FOLDER"
uid=$(id -u)
docker run -it --rm -v "$OUTPUT_FOLDER:/out" -e "HOST_UID=$uid" \
"$IMAGE_REPO" \
bash -c 'cd /app && \
find /app -type f -iname "*test*" -exec rm -f {} \; && \
rm -rf /app/node_modules && \
rm -rf /app/system/modules/swagger/public/swagger-ui/* && \
chown -R $HOST_UID /app && \
tar -cvf /out/magneto2.tar . && \
chown $HOST_UID /out/magneto2.tar'
# vim : set ft=sh :
-27
View File
@@ -1,27 +0,0 @@
#!/bin/sh -e
# Get the picture from maim
# flameshot gui -r > $HOME/.cache/src.png &
grim -g "$(slurp)" $HOME/ramdisk/src.png &
wait $!
# add shadow, round corner, border and watermark
convert $HOME/ramdisk/src.png \
\( +clone -alpha extract \
-draw 'fill black polygon 0,0 0,8 8,0 fill white circle 8,8 8,0' \
\( +clone -flip \) -compose Multiply -composite \
\( +clone -flop \) -compose Multiply -composite \
\) -alpha off -compose CopyOpacity -composite $HOME/ramdisk/output.png
convert $HOME/ramdisk/output.png -bordercolor none -border 20 \( +clone -background black -shadow 80x8+15+15 \) \
+swap -background transparent -layers merge +repage $HOME/ramdisk/des.png
# composite -gravity South ~/.local/bin/watermark.png $HOME/ramdisk/des.png $HOME/ramdisk/des.png
# Send the Picture to clipboard
# xclip -selection clipboard -t image/png -i $HOME/ramdisk/des.png
wl-copy -t image/png < $HOME/ramdisk/des.png
# remove the other pictures
rm $HOME/ramdisk/src.png $HOME/ramdisk/output.png
notify-send "screenshot success"
-27
View File
@@ -1,27 +0,0 @@
#!/bin/sh -e
# Get the picture from maim
# flameshot gui -r > $HOME/.cache/src.png &
grim -g "$(slurp -or)" $HOME/ramdisk/src.png &
wait $!
# add shadow, round corner, border and watermark
convert $HOME/ramdisk/src.png \
\( +clone -alpha extract \
-draw 'fill black polygon 0,0 0,8 8,0 fill white circle 8,8 8,0' \
\( +clone -flip \) -compose Multiply -composite \
\( +clone -flop \) -compose Multiply -composite \
\) -alpha off -compose CopyOpacity -composite $HOME/ramdisk/output.png
convert $HOME/ramdisk/output.png -bordercolor none -border 20 \( +clone -background black -shadow 80x8+15+15 \) \
+swap -background transparent -layers merge +repage $HOME/ramdisk/des.png
# composite -gravity South ~/.local/bin/watermark.png $HOME/ramdisk/des.png $HOME/ramdisk/des.png
# Send the Picture to clipboard
# xclip -selection clipboard -t image/png -i $HOME/ramdisk/des.png
wl-copy -t image/png < $HOME/ramdisk/des.png
# remove the other pictures
rm $HOME/ramdisk/src.png $HOME/ramdisk/output.png
notify-send "screenshot success"
-88
View File
@@ -1,88 +0,0 @@
#!/bin/bash
# 檢查是否為 root user,如果不是則使用 sudo 切換
if [[ $EUID -ne 0 ]]; then
exec sudo "$0" "$@"
exit
fi
# WireGuard 設定檔案資料夾
wg_conf_folder="/etc/wireguard/"
# 列出所有可使用的設定檔案
function list_conf_files() {
echo "可用的 WireGuard 設定檔案:"
ls -1 $wg_conf_folder | grep ".conf$"
}
# 連線到指定的 VPN
function connect() {
local intf=$1
# 切斷其他已連線的 VPN
if [[ $1 == "--disconnect-others" ]] || [[ $1 == "-d" ]] ; then
wg-quick down "$(wg show | grep "interface:" | awk '{print $2}')"
intf=$2
fi
# 確認設定檔案是否存在
if [[ ! -f "$wg_conf_folder/$intf.conf" ]]; then
echo "找不到 $wg_conf_folder/$intf.conf"
exit
fi
# 連線 VPN
wg-quick up "$wg_conf_folder/$intf.conf"
echo "已連線到 $intf"
}
# 斷開指定的 VPN,若未指定則斷開所有 VPN
function disconnect() {
if [[ -n "$1" ]]; then
wg-quick down "$1"
echo "已斷開 $1"
else
wg-quick down "$(wg show | grep "interface:" | awk '{print $2}')"
echo "已斷開所有 VPN"
fi
}
# 列出已連線的 VPN
function list_connections() {
echo "已連線的 VPN"
wg show | grep "interface:" | awk '{print $2}'
}
# 判斷參數是否為空
if [[ -z $1 ]]; then
echo "使用方式:"
echo " $0 list - 列出所有可使用的設定檔案"
echo " $0 connect [-d|--disconnect-others] <config> - 連線到指定的 VPN"
echo " $0 disconnect [interface] - 斷開指定的 VPN,若未指定則斷開所有 VPN"
echo " $0 list-connections - 列出已連線的 VPN"
exit
fi
case "$1" in
list)
list_conf_files
;;
connect)
if [[ -n $2 ]]; then
connect "$2" "$3"
else
echo "請輸入要連線的 VPN 設定檔案名稱"
fi
;;
disconnect)
disconnect "$2"
;;
list-connections)
list_connections
;;
*)
echo "無效的參數:$1"
exit
;;
esac
# vim: set ft=sh :
-87
View File
@@ -1,87 +0,0 @@
[colors.bright]
black = "#6272a4"
blue = "#d6acff"
cyan = "#a4ffff"
green = "#69ff94"
magenta = "#ff92df"
red = "#ff6e6e"
white = "#ffffff"
yellow = "#ffffa5"
[colors.cursor]
cursor = "CellForeground"
text = "CellBackground"
[colors.footer_bar]
background = "#282a36"
foreground = "#f8f8f2"
[colors.hints.end]
background = "#282a36"
foreground = "#f1fa8c"
[colors.hints.start]
background = "#f1fa8c"
foreground = "#282a36"
[colors.line_indicator]
background = "None"
foreground = "None"
[colors.normal]
black = "#21222c"
blue = "#bd93f9"
cyan = "#8be9fd"
green = "#50fa7b"
magenta = "#ff79c6"
red = "#ff5555"
white = "#f8f8f2"
yellow = "#f1fa8c"
[colors.primary]
bright_foreground = "#ffffff"
foreground = "#f8f8f2"
[colors.search.focused_match]
background = "#ffb86c"
foreground = "#44475a"
[colors.search.matches]
background = "#50fa7b"
foreground = "#44475a"
[colors.selection]
background = "#5e68ab"
text = "CellForeground"
[colors.vi_mode_cursor]
cursor = "CellForeground"
text = "CellBackground"
[env]
TERM = "xterm-256color"
[font]
size = 12.0
[font.normal]
family = "Agave Nerd Font"
[font.offset]
x = 0
y = 0
[scrolling]
history = 20000
multiplier = 3
[window]
opacity = 0.85
[window.padding]
x = 5
y = 5
[general]
live_config_reload = true
-9
View File
@@ -1,9 +0,0 @@
# Sway essential session variables
XDG_CURRENT_DESKTOP=sway
XDG_SESSION_DESKTOP=sway
XDG_SESSION_TYPE=wayland
# Toolkits and Compatibility
ELECTRON_OZONE_PLATFORM_HINT=auto
_JAVA_AWT_WM_NONREPARENTING=1
QT_WAYLAND_DISABLE_WINDOWDECORATION=1
@@ -1,16 +0,0 @@
XIM=fcitx
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
GLFW_IM_MODULE=fcitx
SDL_IM_MODULE=fcitx
MOZ_ENABLE_WAYLAND=1
RTC_USE_PIPEWIRE=true
IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext
GDK_BACKEND=wayland,x11
QT_QPA_PLATFORM=wayland;xcb
CLUTTER_BACKEND=wayland
SDL_VIDEODRIVER=wayland
EDITOR=nvim
ELECTRON_OZONE_PLATFORM_HINT=auto
-158
View File
@@ -1,158 +0,0 @@
$bg: #1e1e2e;
$fg: #cdd6f4;
$blue: #89b4fa;
$surface: #313244;
$crust: #11111b;
$yellow: #f9e2af;
* {
font-family: "sans-serif";
font-size: 14px;
}
window {
background-color: transparent;
}
button {
all: unset;
}
.main-container {
background-color: $bg;
color: $fg;
border-radius: 8px;
padding: 2px 5px;
margin: 1px;
}
.ws-focused {
background-color: $blue;
color: $crust;
padding: 0 8px;
border-radius: 6px;
font-weight: bold;
}
.ws-inactive {
color: #cdd6f4;
padding: 0 8px;
border-radius: 6px;
border: 1px solid #ffffff;
}
.ws-inactive:hover {
background-color: $surface;
border-radius: 6px;
}
.date-time {
padding: 0 10px;
}
.date-time:hover {
background-color: $surface;
border-radius: 6px;
}
.battery-widget, .volume-widget, .brightness-widget, .caffeine {
padding: 0 2px;
}
.tray-button {
padding: 0 8px;
border-radius: 6px;
transition: background-color 0.2s;
}
.tray-button:hover {
background-color: $surface;
}
.popup-box {
background-color: $bg;
color: $fg;
padding: 15px;
border: 1px solid $blue;
border-radius: 8px;
}
.vol-bar trough, .br-bar trough {
background-color: $surface;
border-radius: 10px;
min-height: 4px;
}
.vol-bar highlight {
background-color: $blue;
border-radius: 10px;
}
.br-bar highlight {
background-color: $yellow;
border-radius: 10px;
}
.caffeine {
padding: 0 5px;
}
.caffeine-on {
color: $yellow;
font-weight: bold;
}
.caffeine-off {
color: $fg;
opacity: 0.6;
}
.tray-container {
padding-left: 10px;
}
.calendar-box {
background-color: $bg;
color: $fg;
padding: 15px;
border: 1px solid $blue;
border-radius: 12px;
}
calendar {
padding: 5px;
}
.popup-title {
font-size: 16px;
font-weight: bold;
color: $blue;
margin-bottom: 5px;
}
.popup-subtitle {
font-size: 12px;
color: $fg;
opacity: 0.8;
margin-top: 5px;
}
.profile-active {
background-color: $blue;
color: $crust;
padding: 8px 12px;
border-radius: 6px;
font-weight: bold;
}
.profile-inactive {
background-color: $surface;
color: $fg;
padding: 8px 12px;
border-radius: 6px;
}
.profile-inactive:hover {
background-color: lighten($surface, 5%);
border: 1px solid $blue;
}
-124
View File
@@ -1,124 +0,0 @@
(defpoll time :interval "1s" "date '+%Y/%m/%d %H:%M:%S'")
(defpoll inhibit_status :interval "1s" "[ -f /tmp/eww-inhibit.pid ] && echo 'on' || echo 'off'")
(defpoll vol :interval "1s" :initial "0" "bash ~/.config/eww/scripts/volume.sh get")
(defpoll vol_icon :interval "1s" :initial "🔉" "bash ~/.config/eww/scripts/volume.sh icon")
(defpoll br :interval "1s" :initial "50" "bash ~/.config/eww/scripts/brightness.sh get")
(defpoll br_icon :interval "1s" :initial "☀️" "bash ~/.config/eww/scripts/brightness.sh icon")
(defpoll battery :interval "10s" :initial "100" "cat /sys/class/power_supply/BAT*/capacity 2>/dev/null || echo 100")
(defpoll battery_status :interval "10s" :initial "Unknown" "cat /sys/class/power_supply/BAT*/status 2>/dev/null || echo Unknown")
(defpoll power_profile :interval "5s" :initial "balanced" "bash ~/.config/eww/scripts/power-profile.sh get")
(defpoll power_profile_icon :interval "5s" :initial "⚖️" "bash ~/.config/eww/scripts/power-profile.sh icon")
(deflisten workspaces :initial "[]" "bash ~/.config/eww/scripts/get-workspaces.sh")
(defwidget workspaces_widget []
(box :class "workspaces" :orientation "h" :space-evenly false :spacing 5
(for ws in workspaces
(button :onclick "swaymsg workspace ${ws.name}"
:class {ws.focused ? "ws-focused" : "ws-inactive"}
"${ws.name}"))))
(defwidget date_widget []
(box :class "date-time"
(button :onclick "bash ~/.config/eww/scripts/toggle-window.sh calendar"
time)))
(defwidget volume_widget []
(box :class "volume-widget"
(button :onclick "bash ~/.config/eww/scripts/toggle-window.sh volume_popup"
:onrightclick "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
:class "tray-button"
"${vol_icon} ${vol}%")))
(defwidget brightness_widget []
(box :class "brightness-widget"
(button :onclick "bash ~/.config/eww/scripts/toggle-window.sh brightness_popup"
:class "tray-button"
"${br_icon} ${br}%")))
(defwidget caffeine_widget []
(box :class "caffeine"
(button :onclick "bash ~/.config/eww/scripts/toggle-inhibit.sh"
:class "tray-button ${inhibit_status == 'on' ? 'caffeine-on' : 'caffeine-off'}"
{inhibit_status == "on" ? "☕" : "🌙"})))
(defwidget battery_widget []
(box :class "battery-widget"
(button :onclick "bash ~/.config/eww/scripts/toggle-window.sh power_profile_popup"
:tooltip "Battery: ${battery}% (${battery_status})\nPower Profile: ${power_profile}"
:class "tray-button"
"${battery_status == 'Charging' ? '🔌' :
battery >= 80 ? '🔋' :
battery >= 50 ? '🔋' :
battery >= 20 ? '🪫' :
'🪫'} ${battery}% ${power_profile_icon}")))
(defwidget tray_widget []
(box :halign "end" :class "tray-container" :space-evenly false :spacing 10
(battery_widget)
(brightness_widget)
(volume_widget)
(caffeine_widget)
(systray :orientation "h" :spacing 5 :icon-size 20 :prepend-new true)))
(defwidget bar_layout []
(box :class "main-container"
(centerbox :orientation "h"
(workspaces_widget)
(date_widget)
(tray_widget))))
(defwindow bar
:monitor "eDP-1"
:geometry (geometry :x "0%" :y "0%" :width "99%" :height "30px" :anchor "top center")
:stacking "fg"
:exclusive true
:focusable false
(bar_layout))
(defwindow calendar
:monitor "eDP-1"
:geometry (geometry :x "0%" :y "15px" :width "250px" :height "250px" :anchor "top center")
:stacking "fg"
:focusable false
(box :class "calendar-box"
(calendar)))
(defwindow volume_popup
:monitor "eDP-1"
:geometry (geometry :x "15px" :y "15px" :width "300px" :height "60px" :anchor "top right")
:stacking "fg"
:focusable false
(box :class "popup-box" :space-evenly false :spacing 15
(button :onclick "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" vol_icon)
(scale :class "vol-bar" :min 0 :max 101 :value {vol == "" ? 0 : vol} :width 150 :onchange "wpctl set-volume @DEFAULT_AUDIO_SINK@ {}%")
(label :text "${vol}%")))
(defwindow brightness_popup
:monitor "eDP-1"
:geometry (geometry :x "15px" :y "15px" :width "300px" :height "60px" :anchor "top right")
:stacking "fg"
:focusable false
(box :class "popup-box" :space-evenly false :spacing 15
(label :text br_icon)
(scale :class "br-bar" :min 0 :max 101 :value {br == "" ? 0 : br} :width 150 :onchange "brightnessctl s {}%")
(label :text "${br}%")))
(defwindow power_profile_popup
:monitor "eDP-1"
:geometry (geometry :x "15px" :y "15px" :width "300px" :height "180px" :anchor "top right")
:stacking "fg"
:focusable false
(box :class "popup-box" :orientation "v" :space-evenly false :spacing 10
(label :class "popup-title" :text "Power Profile")
(box :orientation "v" :spacing 8
(button :class {power_profile == "power-saver" ? "profile-active" : "profile-inactive"}
:onclick "bash ~/.config/eww/scripts/power-profile.sh set power-saver && bash ~/.config/eww/scripts/toggle-window.sh power_profile_popup"
"🐢 Power Saver")
(button :class {power_profile == "balanced" ? "profile-active" : "profile-inactive"}
:onclick "bash ~/.config/eww/scripts/power-profile.sh set balanced && bash ~/.config/eww/scripts/toggle-window.sh power_profile_popup"
"⚖️ Balanced")
(button :class {power_profile == "performance" ? "profile-active" : "profile-inactive"}
:onclick "bash ~/.config/eww/scripts/power-profile.sh set performance && bash ~/.config/eww/scripts/toggle-window.sh power_profile_popup"
"🚀 Performance"))
(label :class "popup-subtitle" :text "Current: ${power_profile}")))
@@ -1,8 +0,0 @@
#!/bin/bash
if ! eww ping >/dev/null 2>&1; then
eww daemon
fi
eww close-all
eww open bar --screen 'eDP-1'
@@ -1,18 +0,0 @@
#!/bin/bash
# 獲取目前亮度百分比
get_brightness() {
brightnessctl -m | awk -F, '{print substr($4, 0, length($4)-1)}'
}
case $1 in
get)
get_brightness
;;
icon)
BR=$(get_brightness)
if [ "$BR" -gt 66 ]; then echo "☀️";
elif [ "$BR" -gt 33 ]; then echo "🌤️";
else echo "🔅"; fi
;;
esac
@@ -1,13 +0,0 @@
#!/bin/bash
# 需安裝 jq
get_workspaces() {
swaymsg -t get_workspaces | jq -c 'sort_by(.num)'
}
# 初始輸出
get_workspaces
# 監聽事件並更新
swaymsg -t subscribe '["workspace"]' -m | while read -r line; do
get_workspaces
done
@@ -1,15 +0,0 @@
#!/bin/bash
# 定義 PID 檔案路徑
PID_FILE="/tmp/eww-inhibit.pid"
if [ -f "$PID_FILE" ]; then
# 讀取 PID 並殺掉程序
PID=$(cat "$PID_FILE")
kill "$PID" 2>/dev/null
rm "$PID_FILE"
else
# 啟動並記錄 PID
systemd-inhibit --what=idle --mode=block sleep infinity &
echo $! > "$PID_FILE"
fi
@@ -1,24 +0,0 @@
#!/bin/bash
# 目標視窗名稱
TARGET=$1
# 獲取目前所有已開啟的視窗名稱 (提取冒號前文字並去空格)
OPENED_WINDOWS=$(eww active-windows | cut -d: -f1 | tr -d ' ')
# 所有受管理的彈出視窗清單
MANAGED_WINDOWS=("calendar" "volume_popup" "brightness_popup")
# 遍歷目前已開啟的視窗
for win in $OPENED_WINDOWS; do
# 檢查該視窗是否在受管名單內,且不是目標視窗
# 我們不關閉 "bar" 視窗
if [[ " ${MANAGED_WINDOWS[@]} " =~ " ${win} " ]] && [ "$win" != "$TARGET" ]; then
eww close "$win"
fi
done
# 如果有目標視窗,則切換其顯示狀態
if [ -n "$TARGET" ]; then
eww open --toggle "$TARGET"
fi
-21
View File
@@ -1,21 +0,0 @@
#!/bin/bash
# 獲取預設輸出裝置的音量資訊 (輸出範例: Volume: 0.50 [MUTED])
GET_VOL=$(wpctl get-volume @DEFAULT_AUDIO_SINK@)
# 提取數值並轉換為百分比 (0-100)
# 使用 printf %.0f 將小數四捨五入為整數
VOL=$(echo "$GET_VOL" | awk '{print $2 * 100}' | xargs printf "%.0f")
if [ "$1" == "get" ]; then
echo "$VOL"
elif [ "$1" == "icon" ]; then
# 檢查是否含有 [MUTED] 字樣
if echo "$GET_VOL" | grep -q "\[MUTED\]"; then
echo "🔇"
else
if [ "$VOL" -gt 60 ]; then echo "🔊";
elif [ "$VOL" -gt 30 ]; then echo "🔉";
else echo "🔈"; fi
fi
fi
-63
View File
@@ -1,63 +0,0 @@
# This is the configuration file for Ghostty.
#
# This template file has been automatically created at the following
# path since Ghostty couldn't find any existing config files on your system:
#
# /home/jay/.config/ghostty/config
#
# The template does not set any default options, since Ghostty ships
# with sensible defaults for all options. Users should only need to set
# options that they want to change from the default.
#
# Run `ghostty +show-config --default --docs` to view a list of
# all available config options and their default values.
#
# Additionally, each config option is also explained in detail
# on Ghostty's website, at https://ghostty.org/docs/config.
#
# Ghostty can reload the configuration while running by using the menu
# options or the bound key (default: Command + Shift + comma on macOS and
# Control + Shift + comma on other platforms). Not all config options can be
# reloaded while running; some only apply to new windows and others may require
# a full restart to take effect.
# Config syntax crash course
# ==========================
# # The config file consists of simple key-value pairs,
# # separated by equals signs.
font-family = "FiraMono Nerd Font Mono"
font-size = 10
#window-padding-x = 2
#window-padding-y = 2
#
# # Spacing around the equals sign does not matter.
# # All of these are identical:
# key=value
# key= value
# key =value
# key = value
#
# # Any line beginning with a # is a comment. It's not possible to put
# # a comment after a config option, since it would be interpreted as a
# # part of the value. For example, this will have a value of "#123abc":
# background = #123abc
#
# # Empty values are used to reset config keys to default.
# key =
#
# # Some config options have unique syntaxes for their value,
# # which is explained in the docs for that config option.
# # Just for example:
# resize-overlay-duration = 4s 200ms
theme = "moonfly-default"
background-opacity = 0.9
confirm-close-surface = false
app-notifications = no-clipboard-copy,config-reload
keybind = ctrl+,=unbind
-22
View File
@@ -1,22 +0,0 @@
background = #0b0e14
foreground = #bfbdb6
selection-background = #1b3a5b
selection-foreground = #bfbdb6
cursor-color = #bfbdb6
cursor-text = #0b0e14
palette = 0=#1e232b
palette = 1=#ea6c73
palette = 2=#7fd962
palette = 3=#f9af4f
palette = 4=#53bdfa
palette = 5=#cda1fa
palette = 6=#90e1c6
palette = 7=#c7c7c7
palette = 8=#686868
palette = 9=#f07178
palette = 10=#aad94c
palette = 11=#ffb454
palette = 12=#59c2ff
palette = 13=#d2a6ff
palette = 14=#95e6cb
palette = 15=#ffffff
@@ -1,23 +0,0 @@
palette = 0=#51576d
palette = 1=#e78284
palette = 2=#a6d189
palette = 3=#e5c890
palette = 4=#8caaee
palette = 5=#f4b8e4
palette = 6=#81c8be
palette = 7=#a5adce
palette = 8=#626880
palette = 9=#e78284
palette = 10=#a6d189
palette = 11=#e5c890
palette = 12=#8caaee
palette = 13=#f4b8e4
palette = 14=#81c8be
palette = 15=#b5bfe2
background = 303446
foreground = c6d0f5
cursor-color = f2d5cf
cursor-text = 232634
selection-background = 44495d
selection-foreground = c6d0f5
split-divider-color = 414559
@@ -1,23 +0,0 @@
palette = 0=#5c5f77
palette = 1=#d20f39
palette = 2=#40a02b
palette = 3=#df8e1d
palette = 4=#1e66f5
palette = 5=#ea76cb
palette = 6=#179299
palette = 7=#acb0be
palette = 8=#6c6f85
palette = 9=#d20f39
palette = 10=#40a02b
palette = 11=#df8e1d
palette = 12=#1e66f5
palette = 13=#ea76cb
palette = 14=#179299
palette = 15=#bcc0cc
background = eff1f5
foreground = 4c4f69
cursor-color = dc8a78
cursor-text = eff1f5
selection-background = d8dae1
selection-foreground = 4c4f69
split-divider-color = ccd0da
@@ -1,23 +0,0 @@
palette = 0=#494d64
palette = 1=#ed8796
palette = 2=#a6da95
palette = 3=#eed49f
palette = 4=#8aadf4
palette = 5=#f5bde6
palette = 6=#8bd5ca
palette = 7=#a5adcb
palette = 8=#5b6078
palette = 9=#ed8796
palette = 10=#a6da95
palette = 11=#eed49f
palette = 12=#8aadf4
palette = 13=#f5bde6
palette = 14=#8bd5ca
palette = 15=#b8c0e0
background = 24273a
foreground = cad3f5
cursor-color = f4dbd6
cursor-text = 181926
selection-background = 3a3e53
selection-foreground = cad3f5
split-divider-color = 363a4f
@@ -1,23 +0,0 @@
palette = 0=#45475a
palette = 1=#f38ba8
palette = 2=#a6e3a1
palette = 3=#f9e2af
palette = 4=#89b4fa
palette = 5=#f5c2e7
palette = 6=#94e2d5
palette = 7=#a6adc8
palette = 8=#585b70
palette = 9=#f38ba8
palette = 10=#a6e3a1
palette = 11=#f9e2af
palette = 12=#89b4fa
palette = 13=#f5c2e7
palette = 14=#94e2d5
palette = 15=#bac2de
background = 1e1e2e
foreground = cdd6f4
cursor-color = f5e0dc
cursor-text = 11111b
selection-background = 353749
selection-foreground = cdd6f4
split-divider-color = 313244
@@ -1,22 +0,0 @@
background = #080808
foreground = #bdbdbd
selection-background = #b2ceee
selection-foreground = #080808
cursor-color = #9e9e9e
cursor-text = #080808
palette = 0=#323437
palette = 1=#ff5454
palette = 2=#8cc85f
palette = 3=#e3c78a
palette = 4=#80a0ff
palette = 5=#cf87e8
palette = 6=#79dac8
palette = 7=#c6c6c6
palette = 8=#949494
palette = 9=#ff5189
palette = 10=#36c692
palette = 11=#c6c684
palette = 12=#74b2ff
palette = 13=#ae81ff
palette = 14=#85dc85
palette = 15=#e4e4e4
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 MiB

-324
View File
@@ -1,324 +0,0 @@
# This is an example Hyprland config file.
# Refer to the wiki for more information.
# https://wiki.hyprland.org/Configuring/
# Please note not all available settings / options are set here.
# For a full list, see the wiki
# You can split this configuration into multiple files
# Create your files separately and then link them to this file like this:
# source = ~/.config/hypr/myColors.conf
################
### MONITORS ###
################
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor=,preferred,auto,auto
monitor=eDP-1,preferred,auto,1.2
###################
### MY PROGRAMS ###
###################
# See https://wiki.hyprland.org/Configuring/Keywords/
# Set programs that you use
$terminal = alacritty
$fileManager = dolphin
$menu = wofi --show drun
#################
### AUTOSTART ###
#################
# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:
# exec-once = $terminal
# exec-once = nm-applet &
# exec-once = waybar & hyprpaper & firefox
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
###################
### PERMISSIONS ###
###################
# See https://wiki.hyprland.org/Configuring/Permissions/
# Please note permission changes here require a Hyprland restart and are not applied on-the-fly
# for security reasons
# ecosystem {
# enforce_permissions = 1
# }
# permission = /usr/(bin|local/bin)/grim, screencopy, allow
# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
#####################
### LOOK AND FEEL ###
#####################
# Refer to https://wiki.hyprland.org/Configuring/Variables/
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 5
gaps_out = 20
border_size = 2
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
col.inactive_border = rgba(595959aa)
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false
layout = dwindle
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 10
rounding_power = 2
# Change transparency of focused and unfocused windows
active_opacity = 1.0
inactive_opacity = 1.0
shadow {
enabled = true
range = 4
render_power = 3
color = rgba(1a1a1aee)
}
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur {
enabled = true
size = 3
passes = 1
vibrancy = 0.1696
}
}
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
enabled = yes, please :)
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = easeOutQuint,0.23,1,0.32,1
bezier = easeInOutCubic,0.65,0.05,0.36,1
bezier = linear,0,0,1,1
bezier = almostLinear,0.5,0.5,0.75,1.0
bezier = quick,0.15,0,0.1,1
animation = global, 1, 10, default
animation = border, 1, 5.39, easeOutQuint
animation = windows, 1, 4.79, easeOutQuint
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
animation = windowsOut, 1, 1.49, linear, popin 87%
animation = fadeIn, 1, 1.73, almostLinear
animation = fadeOut, 1, 1.46, almostLinear
animation = fade, 1, 3.03, quick
animation = layers, 1, 3.81, easeOutQuint
animation = layersIn, 1, 4, easeOutQuint, fade
animation = layersOut, 1, 1.5, linear, fade
animation = fadeLayersIn, 1, 1.79, almostLinear
animation = fadeLayersOut, 1, 1.39, almostLinear
animation = workspaces, 1, 1.94, almostLinear, fade
animation = workspacesIn, 1, 1.21, almostLinear, fade
animation = workspacesOut, 1, 1.94, almostLinear, fade
}
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
# "Smart gaps" / "No gaps when only"
# uncomment all if you wish to use that.
# workspace = w[tv1], gapsout:0, gapsin:0
# workspace = f[1], gapsout:0, gapsin:0
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
# windowrule = rounding 0, floating:0, onworkspace:f[1]
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # You probably want this
}
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
new_status = master
}
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
}
#############
### INPUT ###
#############
# https://wiki.hyprland.org/Configuring/Variables/#input
input {
kb_layout = us
kb_variant =
kb_model =
kb_options =
kb_rules =
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
touchpad {
scroll_factor = 0.6
natural_scroll = false
tap-to-click = true
drag_lock = true
}
}
# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
workspace_swipe = false
}
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device {
name = epic-mouse-v1
sensitivity = -0.5
}
###################
### KEYBINDINGS ###
###################
# See https://wiki.hyprland.org/Configuring/Keywords/
$mainMod = SUPER
$altMod = ALT
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $altMod SHIFT, C, exec, ~/bin/screenshot
bind = $altMod SHIFT, M, exec, ~/bin/screenshot-monitor
bind = $mainMod, Return, exec, alacritty
bind = $mainMod SHIFT, Q, killactive,
bind = $mainMod SHIFT, E, exit,
bind = $mainMod SHIFT, SPACE, togglefloating,
bind = $mainMod, D, exec, wofi --show drun
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod SHIFT, J, togglesplit, # dwindle
bind = $mainMod SHIFT, P, exec, ~/.config/wofi/wofi-power.sh
bind = $mainMod SHIFT, X, exec, swaylock -f -i ~/.config/swaylock/bg.png -s fill
bind = $mainMod, F, fullscreen, 1
bind = $mainMod SHIFT, F, fullscreen, 0
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d
# when move focus key released, set active window to top
bindr = $mainMod, left, bringactivetotop
bindr = $mainMod, right, bringactivetotop
bindr = $mainMod, up, bringactivetotop
bindr = $mainMod, down, bringactivetotop
binde = $mainMod SHIFT, left, movewindow, l
binde = $mainMod SHIFT, right, movewindow, r
binde = $mainMod SHIFT, up, movewindow, u
binde = $mainMod SHIFT, down, movewindow, d
# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Example special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
# Laptop multimedia keys for volume and LCD brightness
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
# Requires playerctl
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Example windowrule
# windowrule = float,class:^(kitty)$,title:^(kitty)$
# Ignore maximize requests from apps. You'll probably like this.
windowrule = suppressevent maximize, class:.*
# Fix some dragging issues with XWayland
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
-2
View File
@@ -1,2 +0,0 @@
font=JetBrainsMono Nerd Font 10
default-timeout=5000
-9
View File
@@ -1,9 +0,0 @@
-- HELPERS ----------------------------------------------------
local cmd = vim.cmd -- to execute Vim commands e.g. cmd('pwd')
local fn = vim.fn -- to call Vim functions e.g. fn.bufnr()
local g = vim.g -- a table to access global variables
local scopes = {o = vim.o, b = vim.bo, w = vim.wo}
-- Set CMD ----------------------------------------------------
require("basic")
-- Load Plugins ------------------------------------------------
require("plugins")
-2
View File
@@ -1,2 +0,0 @@
require("basic.setup")
require('basic.mapping')
@@ -1,27 +0,0 @@
-- HELPERS ----------------------------------------------------
local cmd = vim.cmd -- to execute Vim commands e.g. cmd('pwd')
local fn = vim.fn -- to call Vim functions e.g. fn.bufnr()
local g = vim.g -- a table to access global variables
local keymap = vim.keymap -- keymap
local scopes = {o = vim.o, b = vim.bo, w = vim.wo}
g.mapleader = ';'
keymap.set('n', '<leader>sw', '<c-w>')
keymap.set('n', '<leader>sww', '<c-w>k')
keymap.set('n', '<leader>sws', '<c-w>j')
keymap.set('n', '<leader>swa', '<c-w>h')
keymap.set('n', '<leader>swd', '<c-w>l')
keymap.set('n', '<leader><leader>a', 'gT')
keymap.set('n', '<leader><leader>d', 'gt')
keymap.set('n', '<F9>', ':%!jq .<CR>')
keymap.set('n', '<leader>sg', ':lua vim.diagnostic.open_float(0, {scope="line"})<CR>')
if vim.api.nvim_win_get_option(0, "diff") then
keymap.set('n', '<leader>1', ':diffget LOCAL<CR>')
keymap.set('n', '<leader>2', ':diffget REMOTE<CR>')
keymap.set('n', '<leader>3', ':%diffget LOCAL<CR>')
end
-66
View File
@@ -1,66 +0,0 @@
-- HELPERS ----------------------------------------------------
local opt = vim.opt
-- SYNTAX & FILETYPE ------------------------------------------
vim.cmd "syntax on"
vim.cmd "filetype plugin indent on"
-- BASIC SETTINGS ---------------------------------------------
opt.number = true -- 顯示行號
opt.relativenumber = true -- 顯示相對行號
opt.tabstop = 2 -- Tab 寬度
opt.shiftwidth = 2 -- 縮排寬度
opt.expandtab = true -- 將 Tab 轉為空格
opt.foldenable = false -- 預設不折疊
opt.laststatus = 2 -- 始終顯示狀態列
opt.ruler = true -- 顯示游標位置
opt.cursorline = true -- 高亮當前行
opt.cursorcolumn = true -- 高亮當前列
opt.hlsearch = true -- 高亮搜尋結果
opt.wrap = false -- 不自動換行
opt.backspace = { "indent", "eol", "start" }
opt.encoding = "utf-8"
opt.completeopt = { "menu", "menuone", "noselect" }
opt.swapfile = false -- 不產生 swap 檔案
opt.mouse = "" -- 禁用滑鼠
opt.background = "dark"
-- 自動命令 (Auto-commands) -----------------------------------
-- 處理配色方案與背景透明度
vim.api.nvim_create_autocmd("ColorScheme", {
pattern = "*",
callback = function()
vim.cmd([[
highlight clear CursorLine
highlight Normal ctermbg=none
highlight LineNr ctermbg=none
highlight Folded ctermbg=none
highlight NonText ctermbg=none
highlight SpecialKey ctermbg=none
highlight VertSplit ctermbg=none
highlight SignColumn ctermbg=none
]])
end,
})
-- chezmoi 自動套用
vim.api.nvim_create_autocmd("BufWritePost", {
pattern = vim.fn.expand("~/.local/share/chezmoi/*"),
command = [[ ! chezmoi apply --source-path % ]],
})
-- 診斷設定
vim.diagnostic.config({ virtual_text = false, signs = true })
-- 特定語言設定
vim.api.nvim_create_autocmd("FileType", {
pattern = "rust",
callback = function()
vim.opt_local.shiftwidth = 4
vim.opt_local.tabstop = 4
end
})
@@ -1,48 +0,0 @@
return {
"stevearc/aerial.nvim",
keys = {
{'<F8>', '<cmd>AerialToggle<CR>', desc = 'toggle aerial window', mode = 'n'},
},
opts = {
backends = {"lsp", "treesitter"},
-- optionally use on_attach to set keymaps when aerial has attached to a buffer
on_attach = function(bufnr)
-- Jump forwards/backwards with '{' and '}'
vim.keymap.set('n', '{', '<cmd>AerialPrev<CR>', {buffer = bufnr})
vim.keymap.set('n', '}', '<cmd>AerialNext<CR>', {buffer = bufnr})
end,
-- filter_kind = false,
filter_kind = {
"Class",
"Constructor",
"Enum",
"Function",
"Interface",
"Module",
"Method",
"Struct",
"Variable",
"Namespace",
"Package",
"Field",
"Constant",
},
--manage_folds = true,
link_tree_to_folds = false,
-- Show box drawing characters for the tree hierarchy
show_guides = true,
-- Customize the characters used when show_guides = true
guides = {
-- When the child item has a sibling below it
mid_item = "├─",
-- When the child item is the last in the list
last_item = "└─",
-- When there are nested child guides to the right
nested_top = "",
-- Raw indentation
whitespace = " ",
},
}
}
@@ -1,31 +0,0 @@
return {
"w0rp/ale",
lazy = false,
keys = {
{'<leader>=', '<Plug>(ale_fix)', mode = 'n'},
},
config = function ()
local g = vim.g
g.ale_linters = {
javascript = {'{{ if .nvim.js_linter }}{{ .nvim.js_linter }}{{ else }}eslint{{ end }}'},
typescript = {'{{ if .nvim.js_linter }}{{ .nvim.js_linter }}{{ else }}eslint{{ end }}'},
go = {'gopls'},
rust = {'analyzer'},
sh = {'shellcheck'},
zig = {'zls'},
}
g.ale_fixers = {
javascript = {'{{ if .nvim.js_fixer }}{{ .nvim.js_fixer }}{{ else }}eslint{{ end }}'},
typescript = {'{{ if .nvim.js_fixer }}{{ .nvim.js_fixer }}{{ else }}eslint{{ end }}'},
zig = {'zigfmt'},
c = {'clang-format'},
sh = {'shfmt'},
}
g.ale_linters_explicit = 1
g.ale_lint_on_save = 1
g.ale_fix_on_save = 1
end
}
@@ -1,10 +0,0 @@
return {
"akinsho/bufferline.nvim",
version = "v4.*",
opts = {
options = {
mode = 'tabs',
diagnostics = 'nvim_lsp',
},
},
}
@@ -1,81 +0,0 @@
return {
"olimorris/codecompanion.nvim",
opts = {},
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-treesitter/nvim-treesitter",
{
"MeanderingProgrammer/render-markdown.nvim",
ft = { "markdown", "codecompanion" }
},
{
"echasnovski/mini.diff",
config = function()
local diff = require("mini.diff")
diff.setup({
-- Disabled by default
source = diff.gen_source.none(),
})
end,
},
{
"HakonHarnes/img-clip.nvim",
opts = {
filetypes = {
codecompanion = {
prompt_for_file_name = false,
template = "[Image]($FILE_PATH)",
use_absolute_path = true,
},
},
},
},
},
config = function ()
local codecompanion = require("codecompanion")
codecompanion.setup({
ignore_warnings = true,
display = {
action_palette = {
width = 95,
height = 10,
prompt = "Prompt ",
provider = "default",
opts = {
show_default_actions = true,
show_default_prompt_library = true,
title = "CodeCompanion actions",
},
},
},
memory = {
opts = {
chat = { enabled = true, },
},
},
strategies = {
chat = {
adapter = "copilot",
},
inline = {
adapter = "copilot",
},
},
adapters = {
http = {
copilot = function()
return require('codecompanion.adapters').extend('copilot', {
schema = {
model = {
default = 'claude-sonnet-4.5',
-- default = 'claude-haiku-4.5',
},
},
})
end,
}
},
})
end,
}
-42
View File
@@ -1,42 +0,0 @@
return {
"junegunn/fzf.vim",
dependencies = {
"junegunn/fzf",
},
config = function ()
local g = vim.g
local keymap = vim.keymap
g.fzf_action = {
['ctrl-t'] = 'tab split',
['ctrl-x'] = 'split',
['ctrl-v'] = 'vsplit',
}
g.fzf_colors = {
fg = {'fg', 'Normal'},
bg = {'bg', 'Normal'},
hl = {'fg', 'Comment'},
['fg+'] = {'fg', 'CursorLine', 'CursorColumn', 'Normal'},
['bg+'] = {'bg', 'CursorLine', 'CursorColumn'},
['hl+'] = {'fg', 'Statement'},
info = {'fg', 'PreProc'},
prompt = {'fg', 'Conditional'},
pointer = {'fg', 'Exception'},
marker = {'fg', 'Keyword'},
spinner = {'fg', 'Label'},
header = {'fg', 'Comment'},
}
g.fzf_history_dir = '~/.local/share/fzf-history'
keymap.set('n', '<leader>fl', ':Lines ')
keymap.set('n', '<leader>fb', ':BLines ')
keymap.set('n', '<leader>ff', ':Files ')
keymap.set('n', '<leader>fg', ':GFiles ')
keymap.set('n', '<leader>f?', ':GFiles? ')
keymap.set('n', '<leader>ft', ':Tags<cr>')
keymap.set('n', '<leader>fa', ':Ag ')
keymap.set('n', '<leader>fc', ':Commits ')
end
}
-31
View File
@@ -1,31 +0,0 @@
return {
"fatih/vim-go",
lazy = false,
keys = {},
config = function ()
vim.api.nvim_create_autocmd("FileType", {
pattern = 'go',
callback = function ()
vim.keymap.set('n', '<leader>err', '<Plug>(go-iferr)')
end
})
local g = vim.g
g.go_gopls_enabled = 0
g.go_def_mapping_enabled = 0
g.go_code_completion_enabled = 0
g.go_doc_keywordprg_enabled = 0
g.go_fmt_fail_silently = 1
g.go_fmt_command = "goimports"
g.go_def_mode = ''
g.go_info_mode = ''
g.go_decls_includes = "func,type"
g.go_highlight_types = 1
g.go_highlight_fields = 1
g.go_highlight_functions = 1
g.go_highlight_function_calls = 1
g.go_highlight_operators = 1
g.go_highlight_extra_types = 1
end
}
-19
View File
@@ -1,19 +0,0 @@
return {
"phaazon/hop.nvim",
config = function ()
local hop = require('hop')
local keymap = vim.keymap
hop.setup()
keymap.set('', '<leader><leader>f', function ()
hop.hint_char1()
end)
keymap.set('', '<leader><leader>s', function ()
hop.hint_char2()
end)
keymap.set('', '<leader><leader>w', function ()
hop.hint_words()
end)
end
}
@@ -1,11 +0,0 @@
return {
"lukas-reineke/indent-blankline.nvim",
opts = {
show_end_of_line = true,
show_current_context = true,
show_current_context_start = true,
},
config = function ()
vim.opt.list = true
end
}
-18
View File
@@ -1,18 +0,0 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", -- latest stable release
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
require('lazy').setup("plugins.list", {
defaults = {
lazy = false
},
})
-153
View File
@@ -1,153 +0,0 @@
return {
require('plugins.nvim_cmp'),
require('plugins.lsp'),
{
"ray-x/lsp_signature.nvim",
opts = {
hint_enable = true,
},
},
{
"scrooloose/nerdcommenter",
config = function ()
vim.g.NERDSpaceDelims=1
vim.g.NERDDefaultAlign='left'
end
},
"vim-scripts/DrawIt",
-- easymotion alternative
require('plugins.hop'),
require('plugins.ale'),
"mattn/emmet-vim",
require('plugins.go'),
{
"pangloss/vim-javascript",
config = function ()
vim.g.javascript_plugin_jsdoc = 1
end
},
"godlygeek/tabular",
"plasticboy/vim-markdown",
-- fzf
require('plugins.fzf'),
"kyazdani42/nvim-web-devicons",
require('plugins.nvim_tree'),
"kien/tabman.vim",
-- for git
"tpope/vim-fugitive",
"christoomey/vim-conflicted",
"sindrets/diffview.nvim",
-- for mark
"inkarkat/vim-ingo-library",
"inkarkat/vim-mark",
"rking/ag.vim",
{
"terryma/vim-multiple-cursors",
config = function ()
local g = vim.g
g.multi_cursor_use_default_mapping=0
-- Default mapping
g.multi_cursor_start_word_key = "<C-n>"
g.multi_cursor_select_all_word_key = '<A-n>'
g.multi_cursor_start_key = "g<C-n>"
g.multi_cursor_select_all_key = 'g<A-n>'
g.multi_cursor_next_key = "<C-n>"
g.multi_cursor_skip_key = '<C-x>'
g.multi_cursor_quit_key = '<Esc>'
end
},
require('plugins.lualine'),
require('plugins.bufferline'),
--require('plugins.indent_blankline'),
{
"nvim-treesitter/nvim-treesitter",
branch = "main",
},
{
"bluz71/vim-nightfly-colors",
config = function ()
vim.g.nightflyTransparent = true
vim.cmd[[ colorscheme nightfly ]]
end
},
{
"folke/tokyonight.nvim",
branch = "main",
},
"norcalli/nvim-colorizer.lua",
-- code outline
require('plugins.aerial'),
"tpope/vim-surround",
-- "buoto/gotests-vim",
"cespare/vim-toml",
{
"rust-lang/rust.vim",
config = function ()
local g = vim.g
g.rust_recommended_style = 0
g.rustfmt_autosave = 1
g.syntastic_rust_checkers = {'cargo'}
end
},
"vim-scripts/TaskList.vim",
"google/vim-jsonnet",
{
"github/copilot.vim",
keys = {
{'<c-j>', 'copilot#Accept("<CR>")', mode = 'i', silent = true, expr = true, noremap = true, replace_keycodes = false},
},
lazy = false,
init = function ()
vim.g.copilot_no_tab_map = true
end
},
-- temp plugins
"elkowar/yuck.vim",
"towolf/vim-helm",
"evanleck/vim-svelte",
"AndrewRadev/linediff.vim",
-- themes
"tomasr/molokai",
{
"vimwiki/vimwiki",
init = function ()
vim.g.vimwiki_list = {
{
path = '~/vimwiki/',
syntax = 'markdown',
ext = '.md',
custom_wiki2html = "~/bin/wiki2html.sh",
}
}
end
},
-- require('plugins.vim-ai'),
-- ai 助手
-- require('plugins.avante'),
require('plugins.codecompanion'),
}
-60
View File
@@ -1,60 +0,0 @@
return {
"neovim/nvim-lspconfig",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
},
config = function()
local capabilities = require('cmp_nvim_lsp').default_capabilities()
-- 統一處理 LspAttach (當 LSP 連接到緩衝區時觸發)
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
callback = function(ev)
local bufnr = ev.buf
local client = vim.lsp.get_client_by_id(ev.data.client_id)
-- 啟動 lsp_signature
require('lsp_signature').on_attach({}, bufnr)
-- 啟用 omnifunc
vim.bo[bufnr].omnifunc = 'v:lua.vim.lsp.omnifunc'
-- 按鍵對映優化
local opts = { buffer = bufnr, noremap = true, silent = true }
local map = vim.keymap.set
map('n', '<leader>gd', vim.lsp.buf.definition, opts)
map('n', '<leader>gt', '<cmd>tab split<CR><cmd>lua vim.lsp.buf.definition()<CR>', opts)
map('n', '<leader>gv', '<cmd>vsplit<CR><cmd>lua vim.lsp.buf.definition()<CR>', opts)
map('n', 'K', vim.lsp.buf.hover, opts)
map('n', '<leader>gi', vim.lsp.buf.implementation, opts)
map('n', '<C-k>', vim.lsp.buf.signature_help, opts)
map('n', '<leader>D', vim.lsp.buf.type_definition, opts)
map('n', '<leader>rn', vim.lsp.buf.rename, opts)
map('n', '<leader>ca', vim.lsp.buf.code_action, opts)
map('n', '<leader>gr', vim.lsp.buf.references, opts)
map('n', '<leader>ge', vim.diagnostic.open_float, opts) -- 使用現代 API
map('n', '<leader>do', vim.diagnostic.open_float, opts)
map('n', '<leader>d[', vim.diagnostic.goto_prev, opts)
map('n', '<leader>d]', vim.diagnostic.goto_next, opts)
map('n', '<leader>gf', function() vim.lsp.buf.format { async = true } end, opts)
end,
})
-- 伺服器列表
local servers = {
'gopls', 'ts_ls', 'rust_analyzer', 'bashls', 'svelte',
'pylsp', 'zls', 'lua_ls', 'clangd', 'pyright'
}
-- 批量配置伺服器能力
for _, lsp in ipairs(servers) do
vim.lsp.config(lsp, {
capabilities = capabilities,
})
end
-- 批量啟用伺服器
vim.lsp.enable(servers)
end
}
@@ -1,54 +0,0 @@
return {
"nvim-lualine/lualine.nvim",
opts = {
options = {
icons_enabled = true,
theme = 'auto',
component_separators = { left = '', right = ''},
section_separators = { left = '', right = ''},
disabled_filetypes = {
statusline = {},
winbar = {},
},
ignore_focus = {},
always_divide_middle = true,
globalstatus = false,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
}
},
sections = {
lualine_a = {'mode'},
lualine_b = {'branch', 'diff', 'diagnostics'},
lualine_c = {
{
'filename',
file_status = true,
newfile_status = true,
path = 1,
},
},
lualine_x = {
function()
return require('nvim-treesitter').statusline({
})
end,
'encoding', 'fileformat', 'filetype'},
lualine_y = {'progress'},
lualine_z = {'location'}
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {'filename'},
lualine_x = {'location'},
lualine_y = {},
lualine_z = {}
},
winbar = {},
inactive_winbar = {},
extensions = {}
}
}
@@ -1,40 +0,0 @@
return {
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-cmdline",
-- for vsnip users
"hrsh7th/cmp-vsnip",
"hrsh7th/vim-vsnip",
},
opts = function ()
local cmp = require('cmp')
return {
mapping = cmp.mapping.preset.insert({
['<CR>'] = cmp.mapping.confirm({
-- behavior = cmp.ConfirmBehavior.Insert,
select = true,
}),
['<C-e>'] = cmp.mapping.abort(),
-- ['<Tab>'] = cmp.mapping(cmp.mapping.select_next_item(), { 'i', 's' }),
}),
snippet = {
-- REQUIRED - you must specify a snippet engine
expand = function(args)
vim.fn["vsnip#anonymous"](args.body) -- For `vsnip` users.
-- require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
-- vim.fn["UltiSnips#Anon"](args.body) -- For `ultisnips` users.
-- require'snippy'.expand_snippet(args.body) -- For `snippy` users.
end,
},
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
}, {
{name = 'buffer'},
}),
}
end
}
@@ -1,72 +0,0 @@
return {
"nvim-tree/nvim-tree.lua",
keys = {
{"<leader>me", '<cmd>NvimTreeToggle<CR>', desc = 'open / close nvim tree', mode = 'n'},
{"<F3>", '<cmd>NvimTreeToggle<CR>', desc = 'open / close nvim tree', mode = 'n'}
},
opts = {
disable_netrw = false,
hijack_netrw = true,
hijack_unnamed_buffer_when_opening = false,
sort = {
sorter = "name",
},
view = {
width = 40,
side = "left",
preserve_window_proportions = false,
number = false,
relativenumber = false,
signcolumn = "yes",
},
renderer = {
indent_markers = {
enable = false,
icons = {
corner = "",
edge = "",
item = "",
none = " ",
},
},
},
hijack_directories = {
enable = true,
auto_open = true,
},
update_focused_file = {
enable = false,
update_root = false,
ignore_list = {},
},
filters = {
dotfiles = false,
custom = {},
exclude = {},
},
git = {
enable = true,
ignore = true,
timeout = 400,
},
actions = {
use_system_clipboard = true,
change_dir = {
enable = true,
global = false,
},
open_file = {
quit_on_open = true,
resize_window = false,
window_picker = {
enable = true,
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",
exclude = {
filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame" },
buftype = { "nofile", "terminal", "help" },
},
},
},
},
}
}
@@ -1,99 +0,0 @@
return {
"madox2/vim-ai",
config = function ()
vim.g.vim_ai_roles_config_file = '/home/jay/.config/nvim/vim-ai-roles.ini'
local vim_ai_endpoint_url = "http://localhost:11434/v1/chat/completions"
-- local vim_ai_endpoint_url = "http://192.168.88.11:11434/v1/chat/completions"
local vim_ai_model = "gemma3:12b"
local vim_ai_model_large = "deepseek-r1"
local vim_ai_temperature = 0.3
local vim_ai_chat_config = {
engine = "chat",
options = {
model = vim_ai_model,
temperature = vim_ai_temperature,
endpoint_url = vim_ai_endpoint_url,
auth_type = "none",
max_tokens = 0,
request_timeout = 180,
},
ui = {
code_syntax_enabled = 1,
},
}
local vim_ai_edit_config = {
engine = "chat",
options = {
model = vim_ai_model,
temperature = vim_ai_temperature,
endpoint_url = vim_ai_endpoint_url,
auth_type = "none",
max_tokens = 0,
request_timeout = 180,
},
ui = {
paste_mode = 1,
},
}
vim.g.vim_ai_chat = vim_ai_chat_config
vim.g.vim_ai_complete = vim_ai_edit_config
vim.g.vim_ai_edit = vim_ai_edit_config
function git_commit_message_fn(model, intent)
model = model or vim_ai_model
intent = intent or ""
local diff = vim.fn.system('git --no-pager diff --staged')
local initial_prompt = [[
You are a Senior Software Engineer responsible for crafting clear and informative Git commit messages. Your goal is to ensure that every commit message contributes to the maintainability and understandability of the codebase. A well-written commit message allows other developers to quickly grasp the purpose and impact of the changes.
**Here's the structure we'll use for all commit messages:**
1. **Subject Line (Required):**
* Use a conventional prefix: `feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`, `style:`, `perf:`, `build:`
* Keep it concise 50 characters or less.
* Use an imperative verb (e.g., "Add...", "Fix...", "Update...", "Remove...").
2. **Body (Optional, but recommended):**
* Start with a blank line after the subject line.
* Provide a brief explanation (3-4 bullet points) of *why* the change was made, not *what* was changed.
* Keep lines under 72 characters.
* Avoid implementation details.
**Do not include:** Markdown, emojis, or overly detailed code descriptions.
]]
local prompt = [["\n" .. "**Now, generate a Git commit message based on the following changes:**\n```" ]] .. diff .. [[```]]
local range = 0
if not (intent == "")
then
prompt = [[Short Description:\n"]] .. intent .. prompt
end
local config = {
engine = "chat",
options = {
model = model,
initial_prompt = initial_prompt,
endpoint_url = vim_ai_endpoint_url,
auth_type = "none",
temperature = 0.8,
request_timeout = 240,
},
}
vim.api.nvim_call_function("vim_ai#AIRun", { range, config, prompt })
end
vim.api.nvim_create_user_command("GitCommitMessage", function(opts)
git_commit_message_fn(vim_ai_model, opts.args)
end, {nargs = '?'})
vim.api.nvim_create_user_command("GitCommitMessageL", function(opts)
git_commit_message_fn(vim_ai_model_large, opts.args)
end, {nargs = '?'})
end
}
-216
View File
@@ -1,216 +0,0 @@
# vi: ft=dosini
[main]
# Enables context sensitive auto-completion. If this is disabled, all
# possible completions will be listed.
smart_completion = True
# Display the completions in several columns. (More completions will be
# visible.)
wider_completion_menu = False
# Multi-line mode allows breaking up the sql statements into multiple lines. If
# this is set to True, then the end of the statements must have a semi-colon.
# If this is set to False then sql statements can't be split into multiple
# lines. End of line (return) is considered as the end of the statement.
multi_line = True
# If multi_line_mode is set to "psql", in multi-line mode, [Enter] will execute
# the current input if the input ends in a semicolon.
# If multi_line_mode is set to "safe", in multi-line mode, [Enter] will always
# insert a newline, and [Esc] [Enter] or [Alt]-[Enter] must be used to execute
# a command.
multi_line_mode = psql
# Destructive warning mode will alert you before executing a sql statement
# that may cause harm to the database such as "drop table", "drop database",
# "shutdown", "delete", or "update".
# Possible values:
# "all" - warn on data definition statements, server actions such as SHUTDOWN, DELETE or UPDATE
# "moderate" - skip warning on UPDATE statements, except for unconditional updates
# "off" - skip all warnings
destructive_warning = all
# Enables expand mode, which is similar to `\x` in psql.
expand = False
# Enables auto expand mode, which is similar to `\x auto` in psql.
auto_expand = False
# If set to True, table suggestions will include a table alias
generate_aliases = False
# log_file location.
# In Unix/Linux: ~/.config/pgcli/log
# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\log
# %USERPROFILE% is typically C:\Users\{username}
log_file = default
# keyword casing preference. Possible values: "lower", "upper", "auto"
keyword_casing = auto
# casing_file location.
# In Unix/Linux: ~/.config/pgcli/casing
# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\casing
# %USERPROFILE% is typically C:\Users\{username}
casing_file = default
# If generate_casing_file is set to True and there is no file in the above
# location, one will be generated based on usage in SQL/PLPGSQL functions.
generate_casing_file = False
# Casing of column headers based on the casing_file described above
case_column_headers = True
# history_file location.
# In Unix/Linux: ~/.config/pgcli/history
# In Windows: %USERPROFILE%\AppData\Local\dbcli\pgcli\history
# %USERPROFILE% is typically C:\Users\{username}
history_file = default
# Default log level. Possible values: "CRITICAL", "ERROR", "WARNING", "INFO"
# and "DEBUG". "NONE" disables logging.
log_level = INFO
# Order of columns when expanding * to column list
# Possible values: "table_order" and "alphabetic"
asterisk_column_order = table_order
# Whether to qualify with table alias/name when suggesting columns
# Possible values: "always", "never" and "if_more_than_one_table"
qualify_columns = if_more_than_one_table
# When no schema is entered, only suggest objects in search_path
search_path_filter = False
# Default pager.
# By default 'PAGER' environment variable is used
# pager = less -SRXF
# Timing of sql statements and table rendering.
timing = True
# Show/hide the informational toolbar with function keymap at the footer.
show_bottom_toolbar = True
# Table format. Possible values: psql, plain, simple, grid, fancy_grid, pipe,
# ascii, double, github, orgtbl, rst, mediawiki, html, latex, latex_booktabs,
# textile, moinmoin, jira, vertical, tsv, csv.
# Recommended: psql, fancy_grid and grid.
table_format = psql
# Syntax Style. Possible values: manni, igor, xcode, vim, autumn, vs, rrt,
# native, perldoc, borland, tango, emacs, friendly, monokai, paraiso-dark,
# colorful, murphy, bw, pastie, paraiso-light, trac, default, fruity
syntax_style = default
# Keybindings:
# When Vi mode is enabled you can use modal editing features offered by Vi in the REPL.
# When Vi mode is disabled emacs keybindings such as Ctrl-A for home and Ctrl-E
# for end are available in the REPL.
vi = False
# Error handling
# When one of multiple SQL statements causes an error, choose to either
# continue executing the remaining statements, or stopping
# Possible values "STOP" or "RESUME"
on_error = STOP
# Set threshold for row limit. Use 0 to disable limiting.
row_limit = 1000
# Truncate long text fields to this value for tabular display (does not apply to csv).
# Leave unset to disable truncation. Example: "max_field_width = "
# Be aware that formatting might get slow with values larger than 500 and tables with
# lots of records.
max_field_width = 500
# Skip intro on startup and goodbye on exit
less_chatty = False
# Postgres prompt
# \t - Current date and time
# \u - Username
# \h - Short hostname of the server (up to first '.')
# \H - Hostname of the server
# \d - Database name
# \p - Database port
# \i - Postgres PID
# \# - "@" sign if logged in as superuser, '>' in other case
# \n - Newline
# \dsn_alias - name of dsn alias if -D option is used (empty otherwise)
# \x1b[...m - insert ANSI escape sequence
# eg: prompt = '\x1b[35m\u@\x1b[32m\h:\x1b[36m\d>'
prompt = '\u@\h:\d> '
# Number of lines to reserve for the suggestion menu
min_num_menu_lines = 4
# Character used to left pad multi-line queries to match the prompt size.
multiline_continuation_char = ''
# The string used in place of a null value.
null_string = '<null>'
# manage pager on startup
enable_pager = False
# Use keyring to automatically save and load password in a secure manner
keyring = True
# Custom colors for the completion menu, toolbar, etc.
[colors]
completion-menu.completion.current = 'bg:#ffffff #000000'
completion-menu.completion = 'bg:#008888 #ffffff'
completion-menu.meta.completion.current = 'bg:#44aaaa #000000'
completion-menu.meta.completion = 'bg:#448888 #ffffff'
completion-menu.multi-column-meta = 'bg:#aaffff #000000'
scrollbar.arrow = 'bg:#003333'
scrollbar = 'bg:#00aaaa'
selected = '#ffffff bg:#6666aa'
search = '#ffffff bg:#4444aa'
search.current = '#ffffff bg:#44aa44'
bottom-toolbar = 'bg:#222222 #aaaaaa'
bottom-toolbar.off = 'bg:#222222 #888888'
bottom-toolbar.on = 'bg:#222222 #ffffff'
search-toolbar = 'noinherit bold'
search-toolbar.text = 'nobold'
system-toolbar = 'noinherit bold'
arg-toolbar = 'noinherit bold'
arg-toolbar.text = 'nobold'
bottom-toolbar.transaction.valid = 'bg:#222222 #00ff5f bold'
bottom-toolbar.transaction.failed = 'bg:#222222 #ff005f bold'
# These three values can be used to further refine the syntax highlighting.
# They are commented out by default, since they have priority over the theme set
# with the `syntax_style` setting and overriding its behavior can be confusing.
# literal.string = '#ba2121'
# literal.number = '#666666'
# keyword = 'bold #008000'
# style classes for colored table output
output.header = "#00ff5f bold"
output.odd-row = ""
output.even-row = ""
output.null = "#808080"
# Named queries are queries you can execute by name.
[named queries]
# DSN to call by -D option
[alias_dsn]
# example_dsn = postgresql://[user[:password]@][netloc][:port][/dbname]
local = postgresql://postgres:chuxu7ec@localhost
home-lab = postgresql://postgres:pass.ok=1@192.168.200.16
ln-prod = postgresql://postgres:CyMrS127VIx@10.140.0.90
ln-lab = postgresql://postgres:eKZJFdG9L5vaREXN@192.168.88.15:32014
professorx-dev = postgresql://postgres:e8b960296e22@192.168.88.6
k8s-gcp-dev = postgresql://postgres:eKZJFdG9L5vaREXN@10.140.0.51:32008
k8s-log-collector = postgresql://postgres:j88ArUndbrAe@192.168.88.23:5432
lab-pg = postgresql://postgres:f87fa2a74009f9b63acf65762b89b411@192.168.200.71:32750
# Format for number representation
# for decimal "d" - 12345678, ",d" - 12,345,678
# for float "g" - 123456.78, ",g" - 123,456.78
[data_formats]
decimal = ""
float = ""
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

-24
View File
@@ -1,24 +0,0 @@
# vim: ft=swayconfig
### Input configuration
#
# Example configuration:
#
# input "2:14:SynPS/2_Synaptics_TouchPad" {
# dwt enabled
# tap enabled
# natural_scroll enabled
# middle_emulation enabled
# }
input type:touchpad {
drag enabled
drag_lock enabled
tap enabled
scroll_factor 0.6
}
#
# You can get the names of your inputs by running: swaymsg -t get_inputs
# Read `man 5 sway-input` for more information about this section.
-171
View File
@@ -1,171 +0,0 @@
# vim: ft=swayconfig
### Key bindings
#
# Basics:
#
bindsym $alt+Shift+c exec ~/bin/screenshot
bindsym $alt+Shift+m exec ~/bin/screenshot-monitor
# Start a terminal
bindsym $mod+Return exec $term
# Kill focused window
bindsym $mod+Shift+q kill
# Find cursor
bindsym $mod+Shift+f exec ~/.config/sway/scripts/scale-cursor.sh $cursor_theme $cursor_big_size $cursor_size
# Start your launcher
bindsym $mod+d exec $menu
bindsym $alt+space exec $menu
bindsym $mod+Shift+w exec $window_switcher
bindsym $mod+w exec $window_workspace_switcher
bindsym $mod+Shift+v exec ~/.config/wofi/wofi-control-panel.sh
bindsym $mod+Shift+t exec ~/.config/wofi/wofi-totp-menu.sh
# Drag floating windows by holding down $mod and left mouse button.
# Resize them with right mouse button + $mod.
# Despite the name, also works for non-floating windows.
# Change normal to inverse to use left mouse button for resizing and right
# mouse button for dragging.
floating_modifier $mod normal
# Reload the configuration file
bindsym $mod+Shift+c reload
bindsym $mod+Shift+x exec swaylock -f -i ~/.config/sway/bg2.png -s fill
# Exit sway (logs you out of your Wayland session)
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'
bindsym $mod+Shift+p exec ~/.config/wofi/wofi-power.sh
bindsym XF86AudioRaiseVolume exec "pactl set-sink-volume @DEFAULT_SINK@ +5%; pkill -RTMIN+8 waybar"
bindsym XF86AudioLowerVolume exec "pactl set-sink-volume @DEFAULT_SINK@ -5%; pkill -RTMIN+8 waybar"
bindsym XF86AudioMute exec "pactl set-sink-mute @DEFAULT_SINK@ toggle; pkill -RTMIN+8 waybar"
bindsym XF86AudioPlay exec playerctl play-pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
bindsym XF86MonBrightnessUp exec "brightnessctl set 5%+"
bindsym XF86MonBrightnessDown exec "brightnessctl set 5%-"
#
# Moving around:
#
# Move your focus around
bindsym $mod+$left focus left
bindsym $mod+$down focus down
bindsym $mod+$up focus up
bindsym $mod+$right focus right
# Or use $mod+[up|down|left|right]
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# Move the focused window with the same, but add Shift
bindsym $mod+Shift+$left move left
bindsym $mod+Shift+$down move down
bindsym $mod+Shift+$up move up
bindsym $mod+Shift+$right move right
# Ditto, with arrow keys
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
#
# Workspaces:
#
# Switch to workspace
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
# Move focused container to workspace
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
# Note: workspaces can have any name you want, not just numbers.
# We just use 1-10 as the default.
#
# Layout stuff:
#
# You can "split" the current object of your focus with
# $mod+b or $mod+v, for horizontal and vertical splits
# respectively.
bindsym $mod+b splith
bindsym $mod+v splitv
# Switch the current container between different layout styles
bindsym $mod+s layout stacking
bindsym $mod+t layout tabbed
bindsym $mod+e layout toggle split
# Make the current focus fullscreen
bindsym $mod+f fullscreen
# Toggle the current focus between tiling and floating mode
bindsym $mod+Shift+space floating toggle
# Swap focus between the tiling area and the floating area
bindsym $mod+space focus mode_toggle
# Move focus to the parent container
bindsym $mod+a focus parent
#
# Scratchpad:
#
# Sway has a "scratchpad", which is a bag of holding for windows.
# You can send windows there and get them back later.
# Move the currently focused window to the scratchpad
bindsym $mod+Shift+minus move scratchpad
# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+minus scratchpad show
#
# Resizing containers:
#
mode "resize" {
# left will shrink the containers width
# right will grow the containers width
# up will shrink the containers height
# down will grow the containers height
bindsym $left resize shrink width 10px
bindsym $down resize grow height 10px
bindsym $up resize shrink height 10px
bindsym $right resize grow width 10px
# Ditto, with arrow keys
bindsym Left resize shrink width 10px
bindsym Down resize grow height 10px
bindsym Up resize shrink height 10px
bindsym Right resize grow width 10px
# Return to default mode
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"
# show sov
#bindsym --no-repeat $mod+Shift+w exec "echo 1 > /tmp/sovpipe"
#bindsym --release $mod+Shift+w exec "echo 0 > /tmp/sovpipe"
# show bindsym help
bindsym $mod+Ctrl+h exec cat ~/.config/sway/conf.d/keybinding.conf |grep bindsym |grep -v "#"| sed 's/^[[:space:]]*//'| wofi --dmenu
-13
View File
@@ -1,13 +0,0 @@
# vim: ft=swayconfig
output eDP-1 scale 1.3
# set workspace monitor
workspace 1 output eDP-1
workspace 2 output eDP-1
workspace 3 output eDP-1
workspace 4 output HDMI-A-1 DP-1 DP-9 eDP-1
workspace 5 output HDMI-A-1 DP-1 DP-9 eDP-1
workspace 6 output HDMI-A-1 DP-1 DP-9 eDP-1
workspace 7 output HDMI-A-1 DP-1 DP-9 eDP-1
workspace 8 output HDMI-A-1 DP-1 DP-9 eDP-1
workspace 9 output eDP-1
workspace 10 output eDP-1
-113
View File
@@ -1,113 +0,0 @@
# Default config for sway
#
# Copy this to ~/.config/sway/config and edit it to your liking.
#
# Read `man 5 sway` for a complete reference.
font Agave Nerd Font 12
### Variables
#
# Logo key. Use Mod1 for Alt.
set $alt Mod1
set $mod Mod4
# Home row direction keys, like vim
set $left h
set $down j
set $up k
set $right l
# Your preferred terminal emulator
# set $term env WAYLAND_DISPLAY= WINIT_X11_SCALE_FACTOR=1.0 alacritty
# set $term alacritty
set $term ghostty
# set $term env WAYLAND_DISPLAY= WINIT_X11_SCALE_FACTOR=1.0 WINIT_UNIX_BACKEND=x11 alacritty
# Your preferred application launcher
# Note: pass the final command to swaymsg so that the resulting window can be opened
# on the original workspace that the command was run on.
# set $menu dmenu_path | dmenu | xargs swaymsg exec --
set $menu wofi --show drun
set $window_switcher ~/.config/wofi/wofi-window-switch.sh
set $window_workspace_switcher ~/.config/wofi/wofi-current-workspace.sh
set $cursor_theme Sweet-cursors
set $cursor_size 24
set $cursor_big_size 64
### Output configuration
#
# Default wallpaper (more resolutions are available in @datadir@/backgrounds/sway/)
# output * bg @datadir@/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill
output * bg /home/jay/.config/sway/wallpaper.png fill
#
# Example configuration:
#
# output HDMI-A-1 resolution 1920x1080 position 1920,0
#
# You can get the names of your outputs by running: swaymsg -t get_outputs
exec systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE
exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway
# exec systemctl --user restart xdg-desktop-portal xdg-desktop-portal-wlr
# exec_always xdg-desktop-portal -r
# exec_always /usr/libexec/xdg-desktop-portal-wlr
# exec env XDG_CONFIG_HOME=/home/jay/.config gentoo-pipewire-launcher restart &
exec_always kanshi
exec dex -a -e sway -s /etc/xdg/autostart/:~/.config/autostart/
exec mako
exec udiskie -t
exec_always ~/.config/eww/open-main.sh
# for sway overview
#exec_always rm -f /tmp/sovpipe && mkfifo /tmp/sovpipe && tail -f /tmp/sovpipe | sov -t 100
### Idle configuration
#
# Example configuration:
#
exec swayidle -w \
timeout 300 'swaylock -f -i ~/.config/sway/bg2.png -s fill' \
timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \
before-sleep 'swaylock -f -i ~/.config/sway/bg2.png -s fill'
# This will lock your screen after 300 seconds of inactivity, then turn off
# your displays after another 300 seconds, and turn your screens back on when
# resumed. It will also lock your screen before your computer goes to sleep.
#
# Status Bar:
#
# Read `man 5 sway-bar` for more information about this section.
# bar {
# # position top
# # When the status_command prints a new line to stdout, swaybar updates.
# # The default just shows the current date and time.
# # status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done
# # status_command ~/.config/waybar/launch.sh
# swaybar_command waybar
# colors {
# statusline #ffffff
# background #323232
# inactive_workspace #32323200 #32323200 #5c5c5c
# }
# }
seat seat0 {
xcursor_theme Adwaita 24
}
gaps outer 5
gaps inner 5
# default_border pixel 5
for_window [app_id="^.*"] border pixel 4
for_window [class="^.*"] border pixel 4
for_window [workspace=8] floating enable
for_window [workspace=9] floating enable
focus_follows_mouse no
xwayland enable
# include @sysconfdir@/sway/config.d/*
include ~/.config/sway/conf.d/*
@@ -1,6 +0,0 @@
#!/bin/bash
cursorTheme=$(swaymsg -t get_inputs | jq -r '.[] | select(.type == "pointer") | .xcursor_theme' | head -n 1)
echo "Current cursor theme: $cursorTheme"
# swaymsg "seat seat0 xcursor_theme "
@@ -1,15 +0,0 @@
#!/bin/bash
# usage: scale-cursor.sh <cursor-theme> <bigSize> <originalSize>
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <cursor-theme> <bigSize> <originalSize>"
exit 1
fi
CURSOR_THEME="$1"
BIG_SIZE="$2"
ORIGINAL_SIZE="$3"
swaymsg "seat seat0 xcursor_theme $CURSOR_THEME $BIG_SIZE"
sleep 1
swaymsg "seat seat0 xcursor_theme $CURSOR_THEME $ORIGINAL_SIZE"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 332 KiB

@@ -1,5 +0,0 @@
[Unit]
ConditionEnvironment=WAYLAND_DISPLAY
Description=sway.target
Requires=graphical-session.target
-130
View File
@@ -1,130 +0,0 @@
// vim: set ft=jsonc :
{
"layer": "top", // Waybar at top layer
"position": "top", // Waybar position (top|bottom|left|right)
// "height": 30, // Waybar height (to be removed for auto height)
"margin": "3 3 0 3",
// "width": 1280, // Waybar width
// "spacing": 1, // Gaps between modules (4px)
// Choose the order of the modules
// "modules-left": ["wlr/workspaces", "custom/sep", "hyprland/window", "hyprland/submap"],
"modules-left": ["sway/workspaces", "custom/sep", "sway/window", "sway/mode"],
"modules-center": ["clock"],
"modules-right": [
"idle_inhibitor",
"custom/sep",
"network",
"custom/sep",
"bluetooth",
"custom/sep",
"custom/pipewire",
"cpu",
"memory",
"backlight",
"battery",
"custom/sep",
"tray"
],
// Modules configuration
"custom/sep": {
"format": "|",
"interval": "once",
"tooltip": false
},
"wlr/workspaces": {
"format": "{name}",
// "on-click": "activate",
"disable-scroll": true
},
"sway/window": {
"max-length": 100
},
"custom/pipewire": {
"exec": "/home/jay/bin/get-volume.sh",
"interval": 2,
"return-type": "json",
"signal": 8,
"format": "{icon} {percentage}%",
"format-icons": {
"mute": "",
"default": ["", "", ""]
},
"on-click": "pavucontrol"
},
"hyprland/window": {
"max-length": 30
},
"hyprland/submap": {
"format": "{}",
"tooltip": false
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "",
"deactivated": ""
}
},
"tray": {
// "icon-size": 21,
"spacing": 10,
"show-passive-items": true
},
"clock": {
// "timezone": "America/New_York",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"format": "{:%Y-%m-%d %H:%M:%S %a}",
"format-alt": "{:%Y-%m-%d}",
"interval": 1
},
"cpu": {
"format": " {usage}%({load})",
"interval": 2,
"tooltip": false
},
"memory": {
"interval": 10,
"format": " {used}G",
"tooltip-format": "{percentage}% used"
},
"temperature": {
// "thermal-zone": 2,
"hwmon-path": "/sys/class/hwmon/hwmon4/temp1_input",
"critical-threshold": 80,
// "format-critical": "{temperatureC}°C {icon}",
"format": " {temperatureC}°C",
"format-icons": ["", "", ""]
},
"backlight": {
// "device": "acpi_video1",
"format": "{icon} {percent}%",
"format-icons": ["", "", "", "", "", "", "", "", ""]
},
"battery": {
"states": {
// "good": 95,
"warning": 30,
"critical": 15
},
"format": "{icon} {capacity}%",
"format-charging": "󰂄 {capacity}%",
"format-plugged": " {capacity}%",
"format-alt": "{icon} {time}",
// "format-good": "", // An empty format will hide the module
// "format-full": "",
"format-icons": ["", "", "", "", ""]
},
"battery#bat2": {
"bat": "BAT2"
},
"network": {
// "interface": "wlp2*", // (Optional) To force the use of this interface
"format-wifi": "{essid} ({signalStrength}%) ",
"format-ethernet": "{ipaddr}/{cidr} ",
"tooltip-format": "{ifname} via {gwaddr} ",
"format-linked": "{ifname} (No IP) ",
"format-disconnected": "Disconnected ⚠",
"format-alt": "{ifname}: {ipaddr}/{cidr}"
}
}
@@ -1,11 +0,0 @@
#!/bin/bash
CONFIG_FILES="$HOME/.config/waybar/config $HOME/.config/waybar/style.css"
trap "killall waybar" EXIT
while true; do
waybar &
inotifywait -e create,modify $CONFIG_FILES
killall waybar
done
-170
View File
@@ -1,170 +0,0 @@
* {
border: none;
border-radius: 0;
font-family: 'Agave Nerd Font';
font-size: 14px;
}
window#waybar {
background: transparent;
}
window#waybar.hidden {
opacity: 0.1;
}
#custom-sep {
color: #9399b2;
background: rgba(17, 17, 27, 0.9);
}
#workspaces {
padding-left: 5px;
transition: none;
border-radius: 15px 0px 0px 15px;
background: rgba(17, 17, 27, 0.9);
}
#workspaces button {
transition: ease-out;
transition-duration: 0.1s;
color: #6c7086;
background: transparent;
padding-left: 5px;
padding-right: 5px;
}
#workspaces button.persistent {
color: #6c7086;
}
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
#workspaces button:hover {
box-shadow: inherit;
text-shadow: inherit;
transition: ease-in;
transition-duration: 0.1s;
color: #f5c2e7;
}
#workspaces button.active, #workspaces button.focused {
color: #ea76cb;
}
#workspaces button.urgent {
color: #d20f39;
}
#window {
margin-right: 3px;
padding-left: 5px;
padding-right: 10px;
border-radius: 0px 15px 15px 0px;
transition: none;
background: rgba(17, 17, 27, 0.9);
color: #eee;
}
#submap, #mode {
padding-left: 5px;
padding-right: 5px;
margin-right: 3px;
border-radius: 15px 15px 15px 15px;
transition: none;
background: #f38ba8;
color: #313244;
}
#clock {
padding-left: 10px;
padding-right: 5px;
border-radius: 15px 15px 15px 15px;
transition: none;
color: #ffffff;
background: rgba(17, 17, 27, 0.9);
}
#custom-pipewire, #wireplumber {
padding-left: 10px;
padding-right: 5px;
transition: ease-in;
transition-duration: 0.2s;
color: white;
background: rgba(17, 17, 27, 0.9);
}
#custom-pipewire.muted, #wireplumber.muted {
background-color: rgba(17, 17, 27, 0.9);
color: #ffffff;
}
#backlight {
padding-left: 5px;
transition: none;
color: white;
background: rgba(17, 17, 27, 0.9);
}
#idle_inhibitor {
border-radius: 15px 0px 0px 15px;
padding-left: 10px;
padding-right: 10px;
transition: ease-in;
transition-duration: 0.1s;
color: white;
background: rgba(17, 17, 27, 0.9);
}
#idle_inhibitor.activated {
background-color: #ff4879;
}
#cpu,
#memory,
#network,
#bluetooth {
padding-left: 5px;
padding-right: 5px;
transition: none;
color: #ffffff;
background: rgba(17, 17, 27, 0.9);
}
#battery {
padding-left: 10px;
padding-right: 10px;
transition: none;
color: white;
background: rgba(17, 17, 27, 0.9);
}
#battery.charging {
color: #f38ba8;
}
#battery.warning:not(.charging) {
color: #cba6f7;
}
@keyframes blink {
to {
background-color: #11111b;
color: #f38ba8;
}
}
#battery.critical:not(.charging) {
background-color: #f38ba8;
color: #313244;
animation-name: blink;
animation-duration: 0.2s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#tray {
padding-left: 5px;
padding-right: 10px;
border-radius: 0px 15px 15px 0px;
transition: none;
color: #ffffff;
background: rgba(17, 17, 27, 0.9);
}
-14
View File
@@ -1,14 +0,0 @@
width=600
height=400
mode=drun
filter_rate=100
matching=contains
insensitive=true
term=alacritty
allow_images=true
allow_markup=true
dmenu-parse_action=true
drun-display_generic=true
key_down=Tab
key_expand=Right
key_forward=Down
@@ -1,32 +0,0 @@
#!/bin/bash
# 1. 取得目前 focused workspace 的名稱
CURRENT_WS=$(swaymsg -t get_workspaces | jq -r '.[] | select(.focused).name')
# 如果沒抓到 workspace,直接退出
if [ -z "$CURRENT_WS" ]; then
exit 0
fi
# 2. 列出該 workspace 內的所有視窗 (con 與 floating_con)
# 直接從 get_tree 找對應名稱的 workspace 節點並遞迴出視窗資訊
entries=$(swaymsg -t get_tree | jq -r --arg WS "$CURRENT_WS" '
.. |
select(.type? == "workspace" and .name == $WS) |
recurse(.nodes[]?, .floating_nodes[]?) |
select(.type == "con" or .type == "floating_con") |
select(.name != null) |
(.id | tostring) + " [" + (.app_id // .window_properties.class // "Unknown") + "] " + .name')
# 如果沒有視窗,直接結束
if [ -z "$entries" ]; then
exit 0
fi
# 3. 透過 wofi 顯示選單,並取得選擇視窗的 id (第一個欄位)
selected=$(echo "$entries" | wofi --width 600 --height 400 --dmenu --cache-file /dev/null | awk '{print $1}')
# 如果有選擇,則切換焦點到該視窗
if [ -n "$selected" ]; then
swaymsg "[con_id=$selected]" focus
fi
@@ -1,18 +0,0 @@
#!/bin/bash
entries="⇠ Logout\n⏾ Suspend\n⭮ Reboot\n⏻ Shutdown"
selected=$(echo -e $entries|wofi --width 350 --height 250 --dmenu --cache-file /dev/null | awk '{print tolower($2)}')
cmd="{{- if .settings.systemd }}systemctl{{ else }}loginctl{{ end }}"
case $selected in
logout)
swaymsg exit;;
suspend)
exec ${cmd} suspend;;
reboot)
exec ${cmd} reboot;;
shutdown)
exec ${cmd} poweroff -i;;
esac
@@ -1,15 +0,0 @@
#!/bin/bash
entries=$(swaymsg -t get_tree | jq -r -c '
recurse(.nodes[]?) |
recurse(.floating_nodes[]?) |
select(.type=="con"), select(.type=="floating_con") |
(.id | tostring) + " " + (.window_properties.class // .app_id) + ": " + .name')
echo "$entries"
selected=$(echo -e "$entries" | wofi --width 450 --height 350 --dmenu --cache-file /dev/null | awk '{print $1}')
if [ -n "$selected" ]; then
swaymsg "[con_id=$selected]" focus
fi
-62
View File
@@ -1,62 +0,0 @@
window {
margin: 5px;
background-color: #282a36;
opacity: 0.9;
}
#outer-box {
margin: 5px;
border: 2px solid #44475a;
background-color: #282a36;
}
#input {
margin: 5px;
border: 2px solid #6272a4;
background-color: #44475a;
color: #f8f8f2;
font-size: 18px;
}
#inner-box {
margin: 5px;
background-color: #282a36;
}
#scroll {
margin: 5px;
border: 2px solid #6272a4;
background-color: #282a36;
font-size: 16px;
color: #f8f8f2;
}
#scroll label {
margin: 2px 0px;
}
#entry {
margin: 5px;
background-color: #282a36;
}
#entry:selected {
background-color: #44475a;
border: 2px solid #BD93F9;
}
#img {
margin: 5px;
}
#img:selected {
background-color: #44475a;
}
#text {
margin: 5px;
border: none;
color: #f8f8f2;
}
#text:selected {
background-color: #44475a;
}
@@ -1,5 +0,0 @@
[screencast]
output_name=
max_fps=60
chooser_cmd=slurp -f %o -or
chooser_type=simple
-158
View File
@@ -1,158 +0,0 @@
--langmap=javascript:.js.es6.es.jsx.mjs
--javascript-kinds=-mpvC
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*\[/\1/A,Array,Arrays/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*\[/\1/A,Array,Arrays/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*\[/\1/A,Array,Arrays/b
--regex-javascript=/^[ \t]*class[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)/\1/c,Class,Classes/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}\({[ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\3/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}\({[ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)*\([A-Za-z0-9_]\{1,\}\),[ \t]*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\5/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}\({[ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)*\([A-Za-z0-9_]\{1,\}\),[ \t]*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)*\([A-Za-z0-9_]\{1,\}\),[ \t]*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\7/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)/\1/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)/\1/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)/\1/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}function[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)/\1/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}async[ \t]\{1,\}function[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)/\1/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\2/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\2/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\2/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\3/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\3/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\3/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}\({[ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\3/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}\({[ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)*\([A-Za-z0-9_]\{1,\}\),[ \t]*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\5/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}\({[ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)*\([A-Za-z0-9_]\{1,\}\),[ \t]*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)*\([A-Za-z0-9_]\{1,\}\),[ \t]*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\7/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)/\1/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)/\1/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)/\1/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}function[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)/\1/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\2/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\2/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\2/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\3/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\3/E,Export,Exports/b
--regex-javascript=/^[ \t]*export[ \t]\{1,\}default[ \t]\{1,\}const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[^,]\{1,\},[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\3/E,Export,Exports/b
--regex-javascript=/^[ \t]*function[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t(]/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*[(]function[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t(]/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*async[ \t]function[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t(]/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*[(]async[ \t]function[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t(]/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*\(async[ \t]\{1,\}\)*function[^\*][^\*]/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*\(async[ \t]\{1,\}\)*function[^\*][^\*]/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*\(async[ \t]\{1,\}\)*function[^\*][^\*]/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*([^)]*$/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*([^)]*$/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*([^)]*$/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=.\{1,\}=>/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=.\{1,\}=>/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=.\{1,\}=>/\1/f,Function,Functions/b
--regex-javascript=/^[ \t]*function[ \t]*\*[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\1/G,Generator,Generators/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*function\([ \t]*\*\)/\1/G,Generator,Generators/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*function\([ \t]*\*\)/\1/G,Generator,Generators/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*function\([ \t]*\*\)/\1/G,Generator,Generators/b
--regex-javascript=/^[ \t]*\(\*[ \t]\)\([A-Za-z0-9_$]\{1,\}\)[ \t]*(.*)[ \t]*[{]/\2/G,Generator,Generators/b
--regex-javascript=/^[ \t]*import[ \t]\{1,\}\([{][ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\3/I,Import,Imports/b
--regex-javascript=/^[ \t]*import[ \t]\{1,\}\([{][ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)*\([A-Za-z0-9_]\{1,\}\),[ \t]*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\5/I,Import,Imports/b
--regex-javascript=/^[ \t]*import[ \t]\{1,\}\([{][ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)*\([A-Za-z0-9_]\{1,\}\),[ \t]*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)*\([A-Za-z0-9_]\{1,\}\),[ \t]*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\7/I,Import,Imports/b
--regex-javascript=/^[ \t]*import[ \t]\{1,\}type[ \t]\{1,\}\([{][ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\3/I,Import,Imports/b
--regex-javascript=/^[ \t]*import[ \t]\{1,\}typeof[ \t]\{1,\}\([{][ \t]*\)*\([A-Za-z0-9_\*]*[ \t]as[ \t]\)\([A-Za-z0-9_]\{1,\}\)/\3/I,Import,Imports/b
--regex-javascript=/^[ \t]*[A-Za-z0-9_]\{1,\}[ \t]as[ \t]\([A-Za-z0-9_]\{1,\}\)/\1/I,Import,Imports/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)\.\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*function/\2/M,Method,Methods/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)\.\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*(/\2/M,Method,Methods/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)\.\([A-Za-z0-9_$]\{1,\}\)\.\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*function/\3/M,Method,Methods/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)\.\([A-Za-z0-9_$]\{1,\}\)\.\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*(/\3/M,Method,Methods/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*[:=][ \t]*[(]*function[ \t]*(/\1/M,Method,Methods/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*[:=][ \t](\{1,\}/\1/M,Method,Methods/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*[:=][ \t]\{1,\}async[ \t](\{1,\}/\1/M,Method,Methods/b
--regex-javascript=/^[ \t]*static[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*(/\1/M,Method,Methods/b
--regex-javascript=/^[ \t]*async[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*(/\1/M,Method,Methods/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)(.*)[ \t]*[{]/\1/M,Method,Methods/b
--regex-javascript=/^[ \t]*get[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*(/\1/M,Method,Methods/b
--regex-javascript=/^[ \t]*set[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*(/\1/M,Method,Methods/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)\.\([A-Za-z0-9_$]\{1,\}\)[ \t]*[=][ \t]*{/\2/P,Property,Properties/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*:[ \t]*[{"\/\[]/\1/P,Property,Properties/b
--regex-javascript=/^[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*:[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t,]*$/\1/P,Property,Properties/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*[{]/\1/O,Object,Objects/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*[{]/\1/O,Object,Objects/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*[{]/\1/O,Object,Objects/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*styled/\1/S,StyledComponent,StyledComponents/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*styled/\1/S,StyledComponent,StyledComponents/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*styled/\1/S,StyledComponent,StyledComponents/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*createGlobalStyle/\1/S,StyledComponent,StyledComponents/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*createGlobalStyle/\1/S,StyledComponent,StyledComponents/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*createGlobalStyle/\1/S,StyledComponent,StyledComponents/b
--regex-javascript=/\/\/[ \t]*\(FIXME\)[ \t]*:*\(.*\)/\1/T,Tag,Tags/b
--regex-javascript=/\/\/[ \t]*\(TODO\)[ \t]*:*\(.*\)/\1/T,Tag,Tags/b
--regex-javascript=/\/\/[ \t]*\(BUG\)[ \t]*:*\(.*\)/\1/T,Tag,Tags/b
--regex-javascript=/\/\/[ \t]*\(NOBUG\)[ \t]*:*\(.*\)/\1/T,Tag,Tags/b
--regex-javascript=/\/\/[ \t]*\(???\)[ \t]*:*\(.*\)/\1/T,Tag,Tags/b
--regex-javascript=/\/\/[ \t]*\(!!!\)[ \t]*:*\(.*\)/\1/T,Tag,Tags/b
--regex-javascript=/\/\/[ \t]*\(HACK\)[ \t]*:*\(.*\)/\1/T,Tag,Tags/b
--regex-javascript=/\/\/[ \t]*\(XXX\)[ \t]*:*\(.*\)/\1/T,Tag,Tags/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*[0-9\"'\/]/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*[0-9\"'\/]/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*[0-9\"'\/]/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*new/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*new/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*=[ \t]*new/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[,;]/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*[,;]/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\2/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\2/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\3/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)/\3/V,Variable,Variables/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\2/V,Variable,Variables/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\3/V,Variable,Variables/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\4/V,Variable,Variables/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\2/V,Variable,Variables/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\3/V,Variable,Variables/b
--regex-javascript=/^[ \t]*const[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\4/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\2/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\3/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\4/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\2/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\3/V,Variable,Variables/b
--regex-javascript=/^[ \t]*var[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\4/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\2/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\3/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}{[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[^}]*}[ \t]*=/\4/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\2/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\3/V,Variable,Variables/b
--regex-javascript=/^[ \t]*let[ \t]\{1,\}\[[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\)[ \t]*,[ \t]*\([A-Za-z0-9_$]\{1,\}\).*\][ \t]*=/\4/V,Variable,Variables/b
--regex-javascript=/^[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\),$/\1/V,Variable,Variables/b
--regex-javascript=/^[ \t]\{1,\}\([A-Za-z0-9_$]\{1,\}\)$/\1/V,Variable,Variables/b
--langmap=typescript:.ts.tsx
--regex-typescript=/^[ \t]*(export[ \t]+([a-z]+[ \t]+)?)?class[ \t]+([a-zA-Z0-9_$]+)/\3/c,classes/
--regex-typescript=/^[ \t]*(declare[ \t]+)?namespace[ \t]+([a-zA-Z0-9_$]+)/\2/c,modules/
--regex-typescript=/^[ \t]*(export[ \t]+)?module[ \t]+([a-zA-Z0-9_$]+)/\2/n,modules/
--regex-typescript=/^[ \t]*(export[ \t]+)?(default[ \t]+)?(async[ \t]+)?function(\*)?[ \t]+([a-zA-Z0-9_$]+)/\5/f,functions/
--regex-typescript=/^[ \t]*export[ \t]+(var|let|const)[ \t]+([a-zA-Z0-9_$]+)/\2/v,variables/
--regex-typescript=/^[ \t]*(var|let|const)[ \t]+([a-zA-Z0-9_$]+)[ \t]*=[ \t]*function[ \t]*[*]?[ \t]*\(\)/\2/v,varlambdas/
--regex-typescript=/^[ \t]*(export[ \t]+)?(public|protected|private)?[ \t]*(static[ \t]+)?(abstract[ \t]+)?(((get|set|readonly)[ \t]+)|(async[ \t]+[*]*[ \t]*))?(#?[a-zA-Z1-9_$]+)[ \t]*[:(]/\9/m,members/
--regex-typescript=/^[ \t]*(export[ \t]+)?interface[ \t]+([a-zA-Z0-9_$]+)/\2/i,interfaces/
--regex-typescript=/^[ \t]*(export[ \t]+)?type[ \t]+([a-zA-Z0-9_$]+)/\2/t,types/
--regex-typescript=/^[ \t]*(export[ \t]+)?enum[ \t]+([a-zA-Z0-9_$]+)/\2/e,enums/
--regex-typescript=/^[ \t]*import[ \t]+([a-zA-Z0-9_$]+)/\1/I,imports/
-36
View File
@@ -1,36 +0,0 @@
[user]
name = jay
email = jay@lawsnote.com
[merge]
tool = vimdiff
[diff]
tool = vimdiff
trustExitCode = true
[difftool]
prompt = true
[alias]
d = difftool
co = checkout
ci = commit -v
l = log --oneline --graph --all
ls = log --graph --pretty=format:\"%h <%an> %ar %s\" --all
st = status
br = branch
wt = worktree
wta = worktree add
wtr = worktree remove
wtl = worktree list
[mergetool]
keepBackup = false
prompt = true
[mergetool "vimdiff"]
cmd = nvim -d $LOCAL $REMOTE $MERGED -c '$wincmd w' -c 'wincmd J'
[core]
editor = nvim
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
# vim: ft=gitconfig
-18
View File
@@ -1,18 +0,0 @@
XIM=fcitx
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
GLFW_IM_MODULE=fcitx
SDL_IM_MODULE=fcitx
MOZ_ENABLE_WAYLAND=1
RTC_USE_PIPEWIRE=true
IM_MODULE_CLASSNAME=fcitx::QFcitxPlatformInputContext
GDK_BACKEND=wayland,x11
QT_QPA_PLATFORM=wayland;xcb
CLUTTER_BACKEND=wayland
SDL_VIDEODRIVER=wayland
EDITOR=nvim
WINEPREFIX=/home/jay/.wine
-105
View File
@@ -1,105 +0,0 @@
# vim: set ft=zsh :
# `$HOME/bin/start-agent`
SSH_ENV="$HOME/.ssh/agent-environment"
function escapeStr {
if [ -z "$1" ]; then
echo "usage: escapeStr <string>"
return 1
fi
echo $1 | sed -r 's/([\$"])/\\\1/g'
}
function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add;
}
{{ if .shell.ssh_agent }}
# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
{{ end }}
function envf {
if [ ! -f "$1" ]; then
echo "File $1 does not exist"
exit 1
fi
export $(cat $1 | grep -v '^#' | xargs)
}
function ttySize {
echo "-e COLUMNS=$(tput cols) -e LINES=$(tput lines)"
}
export HISTORY_SUBSTRING_SEARCH_PREFIXED=1
export GOPATH="$HOME/go"
export GOROOT="$HOME/apps/go"
export NODE_ROOT="$HOME/apps/node"
export PATH="$GOPATH/bin:$GOROOT/bin:$NODE_ROOT/bin:${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
if [ -f "$HOME/.cargo/env" ]; then
. "$HOME/.cargo/env"
fi
if [ -d "$HOME/bin" ]; then
export PATH="$HOME/bin:$PATH"
fi
if [ -d "$HOME/.local/bin" ]; then
export PATH="$PATH:$HOME/.local/bin"
fi
function ln-image-tags {
if [ -z "$1" ]; then
echo "usage: ln-image-tags <image-name>"
exit 1
fi
curlie -L https://registry.lawsnote.com/v2/$1/tags/list
}
function ln-save-image {
if [ -z "$1" ]; then
echo "usage: ln-save-image <image-name:tag>"
return 1
fi
docker-save --rm -p -o . -i registry.lawsnote.com/$1
}
function save-image {
if [ -z "$1" ]; then
echo "usage: save-image <image-name>"
return 1
fi
tag=$(ln-image-tags "$1" | jq -c -r 'del(.tags[] | select(. == "latest")) | .tags | sort | last') || return 1
ln-save-image "$1:$tag"
}
function minio-size {
if [ -z "$1" ]; then
echo "usage: minio-size <alias or alias/bucket-path>"
return 1
fi
mc ls -r --json $1 | jq -s 'map(.size) | add' | numfmt --to=iec-i --suffix=B --padding=7
}
function zfs-usage {
awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats
}
-54
View File
@@ -1,54 +0,0 @@
# Vim-like keybind as default
bindkey -v
autoload -U edit-command-line
zle -N edit-command-line
bindkey '^[,' autosuggest-accept
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
bindkey -M viins '^X^E' edit-command-line
# Add emacs-like keybind to viins mode
bindkey -M viins '^F' forward-char
bindkey -M viins '^B' backward-char
# bindkey -M viins '^P' up-line-or-history
# bindkey -M viins '^N' down-line-or-history
bindkey -M viins '^A' beginning-of-line
bindkey -M viins '^E' end-of-line
bindkey -M viins '^K' kill-line
bindkey -M viins '^R' history-incremental-pattern-search-backward
# bindkey -M viins '\er' history-incremental-pattern-search-forward
bindkey -M viins '^Y' yank
bindkey -M viins '^W' backward-kill-word
bindkey -M viins '^U' backward-kill-line
bindkey -M viins '^H' backward-delete-char
bindkey -M viins '^?' backward-delete-char
bindkey -M viins '^G' send-break
bindkey -M viins '^D' delete-char-or-list
bindkey -M vicmd '^A' beginning-of-line
bindkey -M vicmd '^E' end-of-line
bindkey -M vicmd '^K' kill-line
# bindkey -M vicmd '^P' up-line-or-history
# bindkey -M vicmd '^N' down-line-or-history
bindkey -M vicmd '^Y' yank
bindkey -M vicmd '^W' backward-kill-word
bindkey -M vicmd '^U' backward-kill-line
bindkey -M vicmd '/' vi-history-search-forward
bindkey -M vicmd '?' vi-history-search-backward
bindkey -M vicmd 'gg' beginning-of-line
bindkey -M vicmd 'G' end-of-line
if is-at-least 5.0.8; then
autoload -Uz surround
zle -N delete-surround surround
zle -N change-surround surround
zle -N add-surround surround
bindkey -a cs change-surround
bindkey -a ds delete-surround
bindkey -a ys add-surround
bindkey -a S add-surround
fi
-13
View File
@@ -1,13 +0,0 @@
alias k="kubectl"
alias nv="nvim"
alias ls="ls --color=auto"
# alias docker="lima nerdctl"
# alias ds="lima sudo nerdctl"
alias wgup="sudo wg-quick up"
alias wgdown="sudo wg-quick down"
alias wgc="wgvpn connect"
alias wgd="wgvpn disconnect"
alias vm-system="virt-viewer -c qemu:///system"
-160
View File
@@ -1,160 +0,0 @@
# Do not print the directory stack after pushd or popd.
#setopt pushd_silent
# Replace 'cd -' with 'cd +'
setopt pushd_minus
# Ignore duplicates to add to pushd
setopt pushd_ignore_dups
# pushd no arg == pushd $HOME
setopt pushd_to_home
# Check spell command
# setopt correct
# Check spell all
# setopt correct_all
# Prohibit overwrite by redirection(> & >>) (Use >! and >>! to bypass.)
# setopt no_clobber
# Deploy {a-c} -> a b c
setopt brace_ccl
# Enable 8bit
setopt print_eight_bit
# sh_word_split
setopt sh_word_split
# Change
#~$ echo 'hoge' \' 'fuga'
# to
#~$ echo 'hoge '' fuga'
setopt rc_quotes
# Case of multi redirection and pipe,
# use 'tee' and 'cat', if needed
# ~$ < file1 # cat
# ~$ < file1 < file2 # cat 2 files
# ~$ < file1 > file3 # copy file1 to file3
# ~$ < file1 > file3 | cat # copy and put to stdout
# ~$ cat file1 > file3 > /dev/stdin # tee
setopt multios
# Automatically delete slash complemented by supplemented by inserting a space.
setopt auto_remove_slash
# No Beep
setopt no_beep
setopt no_list_beep
setopt no_hist_beep
# Expand '=command' as path of command
# e.g.) '=ls' -> '/bin/ls'
setopt equals
# Do not use Ctrl-s/Ctrl-q as flow control
setopt no_flow_control
# Look for a sub-directory in $PATH when the slash is included in the command
setopt path_dirs
# Show exit status if it's except zero.
setopt print_exit_value
# Show expaning and executing in what way
#setopt xtrace
# Confirm when executing 'rm *'
# setopt rm_star_wait
# Let me know immediately when terminating job
setopt notify
# Show process ID
setopt long_list_jobs
# Resume when executing the same name command as suspended process name
setopt auto_resume
# Disable Ctrl-d (Use 'exit', 'logout')
#setopt ignore_eof
# Ignore case when glob
setopt no_case_glob
# Use '*, ~, ^' as regular expression
# Match without pattern
# ex. > rm *~398
# remove * without a file "398". For test, use "echo *~398"
setopt extended_glob
# If the path is directory, add '/' to path tail when generating path by glob
setopt mark_dirs
# Automaticall escape URL when copy and paste
autoload -Uz url-quote-magic
zle -N self-insert url-quote-magic
# Prevent overwrite prompt from output withour cr
setopt no_prompt_cr
# Let me know mail arrival
setopt mail_warning
# Do not record an event that was just recorded again.
setopt hist_ignore_dups
# Delete an old recorded event if a new event is a duplicate.
setopt hist_ignore_all_dups
setopt hist_save_nodups
# Expire a duplicate event first when trimming history.
setopt hist_expire_dups_first
# Do not display a previously found event.
setopt hist_find_no_dups
# Shere history
setopt share_history
# Pack extra blank
setopt hist_reduce_blanks
# Write to the history file immediately, not when the shell exits.
# setopt inc_append_history
# Remove comannd of 'hostory' or 'fc -l' from history list
setopt hist_no_store
# Remove functions from history list
setopt hist_no_functions
# Record start and end time to history file
setopt extended_history
# Ignore the beginning space command to history file
setopt hist_ignore_space
# Append to history file
# setopt append_history
# Edit history file during call history before executing
setopt hist_verify
# Enable history system like a Bash
setopt bang_hist
setopt always_last_prompt
# setopt auto_cd
setopt auto_menu
setopt auto_param_keys
setopt auto_param_slash
setopt auto_pushd
setopt complete_in_word
setopt globdots
setopt interactive_comments
setopt list_types
setopt magic_equal_subst
setopt monitor
-46
View File
@@ -1,46 +0,0 @@
# Important
zstyle ':completion:*:default' menu select=2
# Completing Groping
zstyle ':completion:*:options' description 'yes'
zstyle ':completion:*:descriptions' format '%F{yellow}Completing %B%d%b%f'
zstyle ':completion:*' group-name ''
# Completing misc
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
zstyle ':completion:*' verbose yes
zstyle ':completion:*' completer _expand _complete _match _prefix _approximate _list _history
zstyle ':completion:*:*files' ignored-patterns '*?.o' '*?~' '*\#'
zstyle ':completion:*' use-cache true
zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
# Directory
zstyle ':completion:*:cd:*' ignore-parents parent pwd
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
# default: --
zstyle ':completion:*' list-separator '-->'
zstyle ':completion:*:manuals' separate-sections true
# Menu select
zmodload -i zsh/complist
bindkey -M menuselect '^h' vi-backward-char
bindkey -M menuselect '^j' vi-down-line-or-history
bindkey -M menuselect '^k' vi-up-line-or-history
bindkey -M menuselect '^l' vi-forward-char
#bindkey -M menuselect '^k' accept-and-infer-next-history
autoload -Uz cdr
autoload -Uz history-search-end
autoload -Uz modify-current-argument
autoload -Uz smart-insert-last-word
autoload -Uz terminfo
autoload -Uz vcs_info
autoload -Uz zcalc
autoload -Uz zmv
autoload -Uz run-help-git
autoload -Uz run-help-svk
autoload -Uz run-help-svn
autoload -Uz compinit
compinit
-8
View File
@@ -1,8 +0,0 @@
#!/bin/sh
dir=$(dirname $0)
for i in $(ls $dir/*.zsh);
do
source "$i"
done
-54
View File
@@ -1,54 +0,0 @@
{{ if .shell.tmux }}
export ZSH_TMUX_AUTOSTART=true
export ZSH_TMUX_AUTOSTART_ONCE=true
export ZSH_TMUX_AUTOCONNECT=true
{{ end }}
export HISTFILE="$HOME/.zsh_history"
#export HISTFILESIZE=100000
export HISTSIZE=100000
export SAVEHIST=100
# install zinit
# git clone https://github.com/zdharma-continuum/zinit.git ~/.zinit/bin
source ~/.zinit/bin/zinit.zsh
zinit light zsh-users/zsh-completions
zinit snippet OMZ::lib/async_prompt.zsh
zinit light zsh-users/zsh-autosuggestions
zinit light mattbangert/kubectl-zsh-plugin
zinit light zdharma-continuum/fast-syntax-highlighting
zinit light zsh-users/zsh-history-substring-search
# OhMyZSH Plugs
zinit snippet OMZ::lib/completion.zsh
zinit snippet OMZ::lib/git.zsh
zinit snippet OMZ::lib/theme-and-appearance.zsh
zinit ice as="completion"
zinit snippet OMZP::composer
zinit snippet OMZP::aws
zinit snippet OMZ::plugins/sudo/sudo.plugin.zsh
zinit snippet OMZP::kubectl
zinit ice lucid wait='1'
zinit snippet OMZ::plugins/git/git.plugin.zsh
# Load OMZ extract folder
#zinit ice svn
zinit snippet OMZ::plugins/extract
#zinit ice svn
zinit snippet OMZ::plugins/tmux
# theme
zinit light "otakukaze/zsh-ys-theme"
# auto load other zshfiles
[ -f "$HOME/.zsh/zsh.sh" ] && source "$HOME/.zsh/zsh.sh"
[ -f "$HOME/.zprofile" ] && source "$HOME/.zprofile"
# vim: set ft=zsh:
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
export PATH="/usr/local/opt/openjdk/bin:$PATH"
-30
View File
@@ -1,30 +0,0 @@
#!/bin/sh
# -e: exit on error
# -u: exit on unset variables
set -eu
if ! chezmoi="$(command -v chezmoi)"; then
bin_dir="${HOME}/.local/bin"
chezmoi="${bin_dir}/chezmoi"
echo "Installing chezmoi to '${chezmoi}'" >&2
if command -v curl >/dev/null; then
chezmoi_install_script="$(curl -fsSL get.chezmoi.io)"
elif command -v wget >/dev/null; then
chezmoi_install_script="$(wget -qO- get.chezmoi.io)"
else
echo "To install chezmoi, you must have curl or wget installed." >&2
exit 1
fi
sh -c "${chezmoi_install_script}" -- -b "${bin_dir}"
unset chezmoi_install_script bin_dir
fi
# POSIX way to get script's dir: https://stackoverflow.com/a/29834779/12156188
script_dir="$(cd -P -- "$(dirname -- "$(command -v -- "$0")")" && pwd -P)"
set -- init --apply --source="${script_dir}"
echo "Running 'chezmoi $*'" >&2
# exec: replace current process with chezmoi
exec "$chezmoi" "$@"
Executable
+33
View File
@@ -0,0 +1,33 @@
#!/bin/bash
if [ -f "$HOME/.vimrc" ]; then
# backup old file
mv "$HOME/.vimrc" "$HOME/.vimrc.old"
fi
ln -sf "`pwd`/.vimrc" "$HOME/.vimrc"
if [ -f "$HOME/.gitconfig" ]; then
# backup old file
mv "$HOME/.gitconfig" "$HOME/.gitconfig.old"
fi
ln -sf "`pwd`/.gitconfig" "$HOME/.gitconfig"
if [ -f "$HOME/.tmux.conf" ]; then
# backup old file
mv "$HOME/.tmux.conf" "$HOME/.tmux.conf.old"
fi
ln -sf "`pwd`/.tmux.conf" "$HOME/.tmux.conf"
if [ ! -d "$HOME/.ssh" ]; then
mkdir -p "$HOME/.ssh"
fi
if [ -f "$HOME/.ssh/config" ]; then
# backup old file
mv "$HOME/.ssh/config" "$HOME/.ssh/config.old"
fi
cp "`pwd`/.ssh/config" "$HOME/.ssh/config"
-28
View File
@@ -1,28 +0,0 @@
#!/usr/bin/env sh
set -eu
export XDG_CURRENT_DESKTOP=Hyprland # xdg-desktop-portal
export XDG_SESSION_DESKTOP=Hyprland # systemd
export XDG_SESSION_TYPE=wayland # xdg/systemd
if command -v dbus-update-activation-environment >/dev/null; then
dbus-update-activation-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
fi
# without this, systemd starts xdg-desktop-portal without these environment variables,
# and the xdg-desktop-portal does not start xdg-desktop-portal-wrl as expected
# https://github.com/emersion/xdg-desktop-portal-wlr/issues/39#issuecomment-638752975
systemctl --user import-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
# use systemd-run here, because systemd units inherit variables from ~/.config/environment.d
# shellcheck disable=SC2068
systemd-run --quiet --unit=hypr --user --wait Hyprland $@
systemctl --user stop hypr-session.target
# this teardown makes it easier to switch between compositors
unset DISPLAY SWAYSOCK WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
systemctl --user unset-environment DISPLAY SWAYSOCK WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
if command -v dbus-update-activation-environment >/dev/null; then
dbus-update-activation-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
fi
-39
View File
@@ -1,39 +0,0 @@
#!/usr/bin/env sh
set -eu
export XDG_CURRENT_DESKTOP=sway # xdg-desktop-portal
export XDG_SESSION_DESKTOP=sway # systemd
export XDG_SESSION_TYPE=wayland # xdg/systemd
if [ -d "$HOME/.config/environment.d" ]; then
for f in "$HOME"/.config/environment.d/*.conf; do
[ -f "$f" ] || continue
while IFS= read -r line || [ -n "$line" ]; do
# Skip empty lines and comments
case "$line" in
'' | '#'*) continue ;;
esac
# Export the variable
export "$line"
done <"$f"
done
fi
max_attempts=50
attempt=0
while [ ! -d "/run/user/$(id -u)" ]; do
if [ "$attempt" -ge "$max_attempts" ]; then
echo "Error: XDG_RUNTIME_DIR not available after $max_attempts attempts" >&2
exit 1
fi
sleep 0.2
attempt=$((attempt + 1))
done
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
dbus-run-session sway "$@"
# this teardown makes it easier to switch between compositors
unset DISPLAY SWAYSOCK WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
-28
View File
@@ -1,28 +0,0 @@
#!/usr/bin/env sh
set -eu
export XDG_CURRENT_DESKTOP=sway # xdg-desktop-portal
export XDG_SESSION_DESKTOP=sway # systemd
export XDG_SESSION_TYPE=wayland # xdg/systemd
if command -v dbus-update-activation-environment >/dev/null; then
dbus-update-activation-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
fi
# without this, systemd starts xdg-desktop-portal without these environment variables,
# and the xdg-desktop-portal does not start xdg-desktop-portal-wrl as expected
# https://github.com/emersion/xdg-desktop-portal-wlr/issues/39#issuecomment-638752975
systemctl --user import-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
# use systemd-run here, because systemd units inherit variables from ~/.config/environment.d
# shellcheck disable=SC2068
systemd-run --quiet --unit=sway --user --wait sway $@
systemctl --user stop sway-session.target
# this teardown makes it easier to switch between compositors
unset DISPLAY SWAYSOCK WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
systemctl --user unset-environment DISPLAY SWAYSOCK WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
if command -v dbus-update-activation-environment >/dev/null; then
dbus-update-activation-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE
fi