Merge remote-tracking branch 'refs/remotes/origin/master'

This commit is contained in:
whoami 2025-04-10 23:21:07 +01:00
commit 5e26e71219
136 changed files with 4129 additions and 1449 deletions

2
.directory Normal file
View file

@ -0,0 +1,2 @@
[Desktop Entry]
Icon=configurator

4
.gitignore vendored
View file

@ -23,8 +23,6 @@ xdg-ninja/
PowerToys/ PowerToys/
# Nushell # Nushell
tools/nushell/ tools/nushell/
# fzf
common/fzfrc
# OS generated files # OS generated files
.DS_Store .DS_Store
@ -41,3 +39,5 @@ lazy-lock.json
*.elc *.elc
common/**/*current* common/**/*current*
default.target.wants

45
.just.d/check.just Normal file
View file

@ -0,0 +1,45 @@
test:
echo "DOTFILES={{DOTFILES}}"
echo "XDG_CONFIG_HOME={{XDG_CONFIG_HOME}}"
echo "XDG_DATA_HOME={{XDG_DATA_HOME}}"
check:
@just check_shell
format:
@just format_shell
[private]
[unix]
check_shell:
shellcheck -x -s sh --severity=error **/*.sh platforms/mac/yabairc
shellcheck -x -s bash --severity=error **/*.bash tools/bash/* **/*.bashrc
[private]
[unix]
format_shell:
shfmt -w -i 2 -ci -bn -p **/*.sh
shfmt -w -i 2 -ci -bn -ln bash **/*.bash platforms/mac/sketchybar/sketchybarrc
# Ignore syntax errors in zsh files
shfmt -w -i 2 -ci -bn -ln bash **/*.zsh tools/zsh/**/* **/zshrc || true
[private]
check_info:
shellcheck -x -s sh **/*.sh platforms/mac/yabairc
shellcheck -x -s bash **/*.bash tools/bash/* scripts/*.{sh,zsh,bash} **/*.bashrc
[private]
init:
git remote add github git@github.com:js0ny/dotfiles.git
git remote add codeberg git@codeberg.org:js0ny/dotfiles.git
[private]
push:
git push github master
git push codeberg master
[private]
pull:
git pull github master

26
.just.d/cmds.just Normal file
View file

@ -0,0 +1,26 @@
# Sudo and coreutils are required
LN := \
if os_family() == "windows" {
"sudo ln -sf"
} else {
"ln -sf"
}
CLIP := \
if os() == "windows" { "clip.exe" } \
else if os() == "linux" { "wl-copy" } \
else if os() == "macos" { "pbcopy" } \
else { "" }
CURL := \
if os() == "windows" { "Invoke-WebRequest" } \
else if os() == "linux" { "curl" } \
else if os() == "macos" { "curl" } \
else { "" }
CURL_OUT := \
if os() == "windows" { "-OutFile" } \
else if os() == "linux" { "-o" } \
else if os() == "macos" { "-o" } \
else { "" }

34
.just.d/common.just Normal file
View file

@ -0,0 +1,34 @@
ideavim:
{{LN}} {{DOTFILES}}/common/ideavimrc {{XDG_CONFIG_HOME}}/ideavim/ideavimrc
git clone https://github.com/MarcoIeni/intellimacs {{join(home_directory(), ".local/share/intellimacs")}} --depth 1
lsd:
-mkdir {{XDG_CONFIG_HOME}}/lsd
{{LN}} {{DOTFILES}}/common/lsd.yaml {{XDG_CONFIG_HOME}}/lsd/config.yaml
[unix]
neovide:
which neovide
-mkdir -p {{XDG_CONFIG_HOME}}/neovide
{{LN}} {{DOTFILES}}/platforms/{{OS}}/neovide.toml {{XDG_CONFIG_HOME}}/neovide/config.toml
[linux]
readline:
mkdir -p {{XDG_CONFIG_HOME}}/readline
{{LN}} {{DOTFILES}}/common/inputrc {{XDG_CONFIG_HOME}}/readline/inputrc
[unix]
vim:
mkdir -p {{XDG_DATA_HOME}}/vim/after
mkdir -p {{XDG_STATE_HOME}}/vim/{backup,swap,undo,view}
mkdir -p {{XDG_CONFIG_HOME}}/vim/
ln -sf {{DOTFILES}}/common/vimrc {{XDG_CONFIG_HOME}}/vim/vimrc
[windows]
vim:
New-Item -ItemType SymbolicLink -Path $HOME/_vimrc -Value {{DOTFILES}}/common/vim.noxdg.vimrc

49
.just.d/linux.just Normal file
View file

@ -0,0 +1,49 @@
[linux]
systemd:
ln -sf {{DOTFILES}}/platforms/{{OS}}/systemd {{XDG_CONFIG_HOME}}/systemd/
[linux]
keyd:
-which keyd || sudo pacman -S keyd --noconfirm || sudo apt install keyd --yes || @just build_keyd
sudo cp {{DOTFILES}}/platforms/linux/keyd/keyd.conf /etc/keyd/default.conf
mkdir -p {{XDG_CONFIG_HOME}}/keyd
{{LN}} {{DOTFILES}}/platforms/linux/keyd/app.conf {{XDG_CONFIG_HOME}}/keyd/app.conf
sudo systemctl enable keyd
[linux]
[private]
build_keyd:
git clone https://github.com/rvaiya/keyd $HOME/.local/build/keyd
cd $HOME/.local/build/keyd && make && sudo make install
[linux]
flatpak:
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
[linux]
swaylock:
mkdir -p {{XDG_CONFIG_HOME}}/swaylock
{{LN}} {{DOTFILES}}/platforms/linux/swaylock {{XDG_CONFIG_HOME}}/swaylock/config
[linux]
dunst:
mkdir -p {{XDG_CONFIG_HOME}}/dunst
{{LN}} {{DOTFILES}}/platforms/linux/dunstrc {{XDG_CONFIG_HOME}}/dunst/dunstrc
[linux]
hypr:
{{LN}} {{DOTFILES}}/platforms/linux/hypr {{XDG_CONFIG_HOME}}/hypr
[linux]
rofi:
{{LN}} {{DOTFILES}}/platforms/linux/rofi {{XDG_CONFIG_HOME}}/rofi
[linux]
hyprland:
@just hypr
@just dunst
@just swaylock
@just rofi

15
.just.d/misc.just Normal file
View file

@ -0,0 +1,15 @@
uv:
uv init {{XDG_DATA_HOME}}/uvenv
cd {{XDG_DATA_HOME}}/uvenv
uv venv
uv add -r {{DOTFILES}}/bootstrap/components/requirements.txt
vivaldi:
{{CURL}} https://github.com/SocietasEvanescentes/Vivaldi/files/12446831/Rose.Pine.Dawn.zip {{CURL_OUT}} "$HOME/Downloads/vivaldi-light.zip" # Rose Pine Dawn
{{CURL}} https://github.com/catppuccin/vivaldi/releases/download/1.0.0-ctpv2/Catppuccin.Mocha.Lavender.zip {{CURL_OUT}} "$HOME/Downloads/vivaldi-dark.zip" # Catppuccino Mocha Lavender
zotero:
{{CURL}} https://github.com/syt2/zotero-addons/releases/download/V1.8.1/zotero-addons.xpi {{CURL_OUT}} "$HOME/Downloads/zotero-addons.xpi"

55
.just.d/tools.just Normal file
View file

@ -0,0 +1,55 @@
[unix]
kitty:
which kitty
{{LN}} {{DOTFILES}}/tools/kitty {{XDG_CONFIG_HOME}}/kitty
neovim:
which nvim
{{LN}} {{DOTFILES}}/tools/nvim {{XDG_CONFIG_HOME}}/nvim
nvim --headless +checkhealth +"w nvim-healthcheck.txt" +qall
nvim:
@just neovim
[linux]
bash:
{{LN}} {{DOTFILES}}/tools/bash {{XDG_CONFIG_HOME}}/bash
sudo cp {{DOTFILES}}/tools/bash/xdg-compat.sh /etc/profile.d/xdg-compat.sh
[unix]
fish:
{{LN}} {{DOTFILES}}/tools/fish {{XDG_CONFIG_HOME}}/fish
{{CURL}} https://raw.githubusercontent.com/SpaceAceMonkey/dotenv-for-fish/refs/heads/main/dotenv.fish {{CURL_OUT}} "{{DOTFILES}}/tools/fish/functions/dotenv.fish"
[unix]
screen:
{{LN}} {{DOTFILES}}/tools/screen {{XDG_CONFIG_HOME}}/screen
thunderbird:
{{CURL}} https://github.com/wshanks/tbkeys/releases/download/v2.4.0/tbkeys.xpi {{CURL_OUT}} "$HOME/Downloads/tbkeys.xpi"
{{CURL}} https://github.com/htyxyt/htyxyt-immersive-translate-Thunderbird/releases/download/thunderbird-v1.14.8/immersive-translate-Thunderbird.v1.14.8.xpi {{CURL_OUT}} "$HOME/Downloads/immersive-translate-Thunderbird.xpi"
cat {{DOTFILES}}/tools/thunderbird/tbkeys.json | {{CLIP}}
wezterm:
which wezterm
{{LN}} {{DOTFILES}}/tools/wezterm {{XDG_CONFIG_HOME}}/wezterm
yazi:
which yazi || cargo install --locked yazi-fm yazi-cli
-ya pack -a llanosrocas/yaziline
-ya pack -a yazi-rs/plugins:git
-ya pack -a Rolv-Apneseth/starship
[unix]
zsh:
-[[ -f /etc/zshenv ]] && sudo cp {{DOTFILES}}/tools/zsh/global.zshenv /etc/zshenv # or /etc/zsh/zshenv
-[[ -f /etc/zsh/zshenv ]] && sudo cp {{DOTFILES}}/tools/zsh/global.zshenv /etc/zsh/zshenv
mkdir -p {{XDG_CONFIG_HOME}}/zsh
{{LN}} {{DOTFILES}}/tools/zsh/zshenv {{XDG_CONFIG_HOME}}/zsh/.zshenv
{{LN}} {{DOTFILES}}/tools/zsh/zshrc {{XDG_CONFIG_HOME}}/zsh/.zshrc
{{LN}} {{DOTFILES}}/tools/zsh/zprofile {{XDG_CONFIG_HOME}}/zsh/.zprofile
test -d {{XDG_CONFIG_HOME}}/zsh/plugins/zsh-autosuggestions || git clone --depth 1 https://github.com/zsh-users/zsh-autosuggestions.git {{XDG_CONFIG_HOME}}/zsh/plugins/zsh-autosuggestions
test -d {{XDG_CONFIG_HOME}}/zsh/plugins/zsh-syntax-highlighting || git clone --depth 1 https://github.com/zsh-users/zsh-syntax-highlighting.git {{XDG_CONFIG_HOME}}/zsh/plugins/zsh-syntax-highlighting
test -d {{XDG_CONFIG_HOME}}/zsh/plugins/zsh-history-substring-search || git clone --depth 1 https://github.com/zsh-users/zsh-history-substring-search.git {{XDG_CONFIG_HOME}}/zsh/plugins/zsh-history-substring-search
test -d {{XDG_CONFIG_HOME}}/zsh/plugins/zsh-completions || git clone --depth 1 https://github.com/zsh-users/zsh-completions.git {{XDG_CONFIG_HOME}}/zsh/plugins/zsh-completions

42
.just.d/vars.just Normal file
View file

@ -0,0 +1,42 @@
OS := \
if os() == "linux" {
if env("WSL_DISTRO_NAME","") != "" {
"wsl"
} else {
"linux"
}
} else if os() == "windows" {
"win"
} else if os() == "macos" {
"mac"
} else { "" }
DOTFILES := join(home_directory(), ".dotfiles")
XDG_CONFIG_HOME := \
if env("XDG_CONFIG_HOME", "") != "" {env("XDG_CONFIG_HOME", "")} \
else {
if os_family() == "windows" {
env("APPDATA")
} else {
join(home_directory(), ".config")
}
}
XDG_DATA_HOME := \
if env("XDG_DATA_HOME", "") != "" {env("XDG_DATA_HOME", "")} \
else {
if os_family() == "windows" {
env("LOCALAPPDATA", "")
} else {
join(home_directory(), ".local/share")
}
}
XDG_STATE_HOME := \
if env("XDG_STATE_HOME", "") != "" {env("XDG_STATE_HOME", "")} \
else {
if os_family() == "windows" {
join(env("LOCALAPPDATA", ""), "state")
} else {
join(home_directory(), ".local/state")
}
}

View file

@ -1,76 +1,15 @@
set shell := ["fish", "-c"] # set shell := ["fish", "-c"]
set shell := ["bash", "-c"]
set windows-shell := ["pwsh", "-c"] set windows-shell := ["pwsh", "-c"]
DOTFILES := join(home_directory(), ".dotfiles") import '.just.d/vars.just'
XDG_CONFIG_HOME := \ import '.just.d/cmds.just'
if env_var("XDG_CONFIG_HOME") != "" {env_var("XDG_CONFIG_HOME")} \ import '.just.d/common.just'
else { import '.just.d/tools.just'
if os_family() == "windows" { import '.just.d/misc.just'
env_var("APPDATA") import '.just.d/linux.just'
} else { import '.just.d/check.just'
join(home_directory(), ".config")
}
}
XDG_DATA_HOME := \ _default:
if env_var("XDG_DATA_HOME") != "" {env_var("XDG_DATA_HOME")} \ @just test
else { @just --list
if os_family() == "windows" {
env_var("LOCALAPPDATA")
} else {
join(home_directory(), ".local/share")
}
}
test:
echo {{DOTFILES}}
echo {{XDG_CONFIG_HOME}}
echo {{XDG_DATA_HOME}}
init:
git remote remove origin
git remote add github git@github.com:js0ny/dotfiles.git
git remote add codeberg git@codeberg.org:js0ny/dotfiles.git
check:
@just check_shell
format:
@just format_shell
push:
git push github master
git push codeberg master
setup:
@just ideavim
ideavim:
ln -sf {{DOTFILES}}/common/ideavimrc $XDG_CONFIG_HOME/ideavim/ideavimrc
git clone https://github.com/MarcoIeni/intellimacs {{join(home_directory(), ".local/share/intellimacs")}}
[private]
pull:
git pull github master
git pull codeberg master
[private]
[unix]
check_shell:
shellcheck -x -s sh --severity=error **/*.sh platforms/mac/yabairc
shellcheck -x -s bash --severity=error **/*.bash tools/bash/* **/*.bashrc
[private]
[unix]
format_shell:
shfmt -w -i 2 -ci -bn -p **/*.sh
shfmt -w -i 2 -ci -bn -ln bash **/*.bash platforms/mac/sketchybar/sketchybarrc
# Ignore syntax errors in zsh files
shfmt -w -i 2 -ci -bn -ln bash **/*.zsh tools/zsh/**/* **/zshrc || true
[private]
check_info:
shellcheck -x -s sh **/*.sh platforms/mac/yabairc
shellcheck -x -s bash **/*.bash tools/bash/* scripts/*.{sh,zsh,bash} **/*.bashrc

View file

@ -68,7 +68,7 @@ if [ $(uname) = "Darwin" ]; then
else else
echo "[INFO] Running on Linux" echo "[INFO] Running on Linux"
linkDots+=( linkDots+=(
["$DOTFILES/common/inputrc"]="$HOME/.inputrc" ["$DOTFILES/common/inputrc"]="$XDG_CONFIG_HOME/readline/inputrc"
) )
# WSL1 : Microsoft # WSL1 : Microsoft
# WSL2 : microsoft # WSL2 : microsoft

View file

@ -10,6 +10,31 @@ XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
BROWSER_FLAG=$DOTFILES/platforms/linux/chromium-flags.conf BROWSER_FLAG=$DOTFILES/platforms/linux/chromium-flags.conf
ELECTRON_FLAG=$DOTFILES/platforms/linux/electron-flags.conf ELECTRON_FLAG=$DOTFILES/platforms/linux/electron-flags.conf
parse_args() {
while [[ $# -gt 0 ]]; do
case "$1" in
# --debug|-d)
# export LOG_LEVEL="DEBUG"
# log_debug "Debug mode enabled"
# shift
# ;;
--force|-f)
FORCE_FILE="true"
echo "Force update enabled"
shift
;;
*)
echo "Unknown argument: $1"
echo "Usage: chromium-flags.sh [--debug|-d] [--force|-f]"
exit 1
;;
esac
done
}
parse_args "$@"
# Browser Flags # Browser Flags
browser_flags_path=( browser_flags_path=(
@ -24,23 +49,23 @@ browser_flags_path=(
electron_flags_path=( electron_flags_path=(
"$XDG_CONFIG_HOME/electron-flags.conf" # General "$XDG_CONFIG_HOME/electron-flags.conf" # General
"$XDG_CONFIG_HOME/code-flags.conf" # VSCode "$XDG_CONFIG_HOME/code-flags.conf" # VSCode
"$XDG_CONFIG_HOME/qq-electron-flags.conf" # Slack "$XDG_CONFIG_HOME/qq-electron-flags.conf" # QQ
) )
for path in "${browser_flags_path[@]}"; do for path in "${browser_flags_path[@]}"; do
if [ -f "$path" ]; then if [ -f "$path" ] && [ "$FORCE_FILE" != "true" ]; then
echo "[INFO] Found Browser Flags: $path" echo "[INFO] Found Browser Flags: $path"
else else
echo "[INFO] Creating Browser Flags: $path" echo "[INFO] Creating Browser Flags: $path"
ln -s "$BROWSER_FLAG" "$path" ln -sf "$BROWSER_FLAG" "$path"
fi fi
done done
for path in "${electron_flags_path[@]}"; do for path in "${electron_flags_path[@]}"; do
if [ -f "$path" ]; then if [ -f "$path" ] && [ "$FORCE_FILE" != "true" ]; then
echo "[INFO] Found Electron Flags: $path" echo "[INFO] Found Electron Flags: $path"
else else
echo "[INFO] Creating Electron Flags: $path" echo "[INFO] Creating Electron Flags: $path"
ln -s "$ELECTRON_FLAG" "$path" ln -sf "$ELECTRON_FLAG" "$path"
fi fi
done done

View file

@ -0,0 +1,71 @@
#!/usr/bin/env bash
# vim:ft=bash
# chromium-flags.sh
# Set Chromium & Electron Flags
echo "[INFO] Set Chromium & Electron Flags"
DOTFILES="${DOTFILES:-$HOME/.dotfiles}"
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
BROWSER_FLAG=$DOTFILES/platforms/linux/chromium-flags.hypr.conf
ELECTRON_FLAG=$DOTFILES/platforms/linux/electron-flags.hypr.conf
parse_args() {
while [[ $# -gt 0 ]]; do
case "$1" in
# --debug|-d)
# export LOG_LEVEL="DEBUG"
# log_debug "Debug mode enabled"
# shift
# ;;
--force|-f)
FORCE_FILE="true"
echo "Force update enabled"
shift
;;
*)
echo "Unknown argument: $1"
echo "Usage: chromium-flags.sh [--debug|-d] [--force|-f]"
exit 1
;;
esac
done
}
parse_args "$@"
# Browser Flags
browser_flags_path=(
"$XDG_CONFIG_HOME/chromium-flags.conf" # Chromium
"$XDG_CONFIG_HOME/chrome-flags.conf" # Google Chrome
"$XDG_CONFIG_HOME/thorium-flags.conf" # Thorium
"$XDG_CONFIG_HOME/vivaldi-flags.conf" # Vivaldi
"$XDG_CONFIG_HOME/vivaldi-stable.conf" # Vivaldi
)
electron_flags_path=(
"$XDG_CONFIG_HOME/electron-flags.conf" # General
"$XDG_CONFIG_HOME/code-flags.conf" # VSCode
"$XDG_CONFIG_HOME/qq-electron-flags.conf" # QQ
)
for path in "${browser_flags_path[@]}"; do
if [ -f "$path" ] && [ "$FORCE_FILE" != "true" ]; then
echo "[INFO] Found Browser Flags: $path"
else
echo "[INFO] Creating Browser Flags: $path"
ln -sf "$BROWSER_FLAG" "$path"
fi
done
for path in "${electron_flags_path[@]}"; do
if [ -f "$path" ] && [ "$FORCE_FILE" != "true" ]; then
echo "[INFO] Found Electron Flags: $path"
else
echo "[INFO] Creating Electron Flags: $path"
ln -sf "$ELECTRON_FLAG" "$path"
fi
done

10
common/fzfrc Normal file
View file

@ -0,0 +1,10 @@
# --preview 'bat --color=always --style=numbers {}'
# --bind alt-n:preview-down,alt-e:preview-up
# --bind ctrl-e:up
# --bind alt-p:toggle-preview
# --color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8
# --color=fg:#cdd6f4,header:#f38ba8,info:#f5c2e7,pointer:#f5e0dc
# --color=marker:#b4befe,fg+:#cdd6f4,prompt:#f5c2e7,hl+:#f38ba8
# --color=selected-bg:#45475a
# --color=border:#313244,label:#cdd6f4
#

60
common/vimrc+qwerty.vimrc Normal file
View file

@ -0,0 +1,60 @@
" $XDG_CONFIG_HOME/vim/vimrc
" This is a minimal setup of vimrc
" ln -sf $DOTFILES/.config/vim/vimrc $XDG_CONFIG_HOME/vim/vimrc
" Colemak Keys
" Arrow remap
nnoremap J 5j
nnoremap K 5k
vnoremap H ^
xnoremap H ^
onoremap H ^
vnoremap L $
xnoremap L $
onoremap L $
" Normal minimal setup
noremap Y y$
set expandtab
set tabstop=4
set shiftwidth=4
set autoindent
set smartindent
set wrap
set scrolloff=3
set hlsearch
set incsearch
set ignorecase
set smartcase
set number
set relativenumber
set laststatus=2
set showcmd
set statusline=%<%f\ %h%m%r\ %=\ [%l,%v]\ [%p%%]\ [\ %Y]\ [󱑉\ %{strftime('%H:%M:%S')}]
" XDG Directory Specifications
" Reference to https://jorenar.com/blog/vim-xdg
if empty($XDG_CACHE_HOME) | let $XDG_CACHE_HOME = $HOME."/.cache" | endif
if empty($XDG_CONFIG_HOME) | let $XDG_CONFIG_HOME = $HOME."/.config" | endif
if empty($XDG_DATA_HOME) | let $XDG_DATA_HOME = $HOME."/.local/share" | endif
if empty($XDG_STATE_HOME) | let $XDG_STATE_HOME = $HOME."/.local/state" | endif
set viminfo+=n$XDG_STATE_HOME/vim/viminfo
set packpath^=$XDG_DATA_HOME/vim
set packpath+=$XDG_DATA_HOME/vim/after
set backupdir=$XDG_STATE_HOME/vim/backup
set directory=$XDG_STATE_HOME/vim/swap
set undodir=$XDG_STATE_HOME/vim/undo
set viewdir=$XDG_STATE_HOME/vim/view
" set shada+=n$XDG_STATE_HOME/vim/shada
" Leader
let mapleader = "\<Space>"
nnoremap <leader><leader> :FZF<CR>
" Misc
syntax on

View file

@ -0,0 +1,5 @@
--UseOzonePlatform=wayland
--ozone-platform=wayland
--password-store=kwallet6
--enable-wayland-ime
--force-device-scale-factor=1.75

495
platforms/linux/dunstrc Normal file
View file

@ -0,0 +1,495 @@
# See dunst(5) for all configuration options
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 0
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = none
### Geometry ###
# The width of the window, excluding the frame.
# dynamic width from 0 to 300
# width = (0, 300)
# constant width of 300
width = 300
# The height of a single notification, excluding the frame.
# dynamic height from 0 to 300
height = (0, 300)
# constant height of 300
# height = 300
# NOTE: Dunst from version 1.11 and older don't support dynamic height
# and the given value is treated as the maximum height
# Position the notification in the top right corner
origin = top-right
# Offset from the origin
# NOTE: Dunst from version 1.11 and older use this alternative notation
# offset = 10x50
offset = (10, 50)
# Scale factor. It is auto-detected if value is 0.
scale = 2
# Maximum number of notification (0 means no limit)
notification_limit = 20
### Progress bar ###
# Turn on the progress bar. It appears when a progress hint is passed with
# for example dunstify -h int:value:12
progress_bar = true
# Set the progress bar height. This includes the frame, so make sure
# it's at least twice as big as the frame width.
progress_bar_height = 10
# Set the frame width of the progress bar
progress_bar_frame_width = 1
# Set the minimum width for the progress bar
progress_bar_min_width = 150
# Set the maximum width for the progress bar
progress_bar_max_width = 300
# Corner radius for the progress bar. 0 disables rounded corners.
progress_bar_corner_radius = 0
# Define which corners to round when drawing the progress bar. If progress_bar_corner_radius
# is set to 0 this option will be ignored.
progress_bar_corners = all
# Corner radius for the icon image.
icon_corner_radius = 0
# Define which corners to round when drawing the icon image. If icon_corner_radius
# is set to 0 this option will be ignored.
icon_corners = all
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
transparency = 0
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
# If gap_size is greater than 0, this setting will be ignored.
separator_height = 2
# Padding between text and separator.
padding = 8
# Horizontal padding.
horizontal_padding = 8
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 3
# Defines color of the frame around the notification window.
frame_color = "#89b4fa"
highlight = "#89b4fa"
# Size of gap to display between notifications - requires a compositor.
# If value is greater than 0, separator_height will be ignored and a border
# of size frame_width will be drawn around each notification instead.
# Click events on gaps do not currently propagate to applications below.
gap_size = 0
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort type.
# possible values are:
# * id: sort by id
# * urgency_ascending: sort by urgency (low then normal then critical)
# * urgency_descending: sort by urgency (critical then normal then low)
# * update: sort by update (most recent always at the top)
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
# idle_threshold = 120
### Text ###
font = Maple Mono NF CN 8
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "<b>%s</b>\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Recursive icon lookup. You can set a single theme, instead of having to
# define all lookup paths.
enable_recursive_icon_lookup = true
# Set icon theme (only used for recursive icon lookup)
icon_theme = "Papirus-Dark, Papirus, breeze, Adwaita"
# You can also set multiple icon themes, with the leftmost one being used first.
# icon_theme = "Adwaita, breeze"
# Align icons left/right/top/off
icon_position = left
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 32
# Scale larger icons down to this size, set to 0 to disable
max_icon_size = 128
# Paths to default icons (only necessary when not using recursive icon lookup)
icon_path = /home/js0ny/.local/share/icons/ePapirus/16x16/:/usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
dmenu = /usr/bin/dmenu -p dunst:
# Browser for opening urls in context menu.
browser = /usr/bin/xdg-open
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst (X11 only)
title = Dunst
# Define the class of the windows spawned by dunst (X11 only)
class = Dunst
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 0
# Define which corners to round when drawing the window. If the corner radius
# is set to 0 this option will be ignored.
#
# Comma-separated list of the corners. The accepted corner values are bottom-right,
# bottom-left, top-right, top-left, top, bottom, left, right or all.
corners = all
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Wayland ###
# These settings are Wayland-specific. They have no effect when using X11
# Uncomment this if you want to let notifications appear under fullscreen
# applications (default: overlay)
# layer = top
# Set this to true to use X11 output on Wayland.
force_xwayland = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: Invoke the action determined by the action_name rule. If there is no
# such action, open the context menu.
# * open_url: If the notification has exactly one url, open it. If there are multiple
# ones, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
# * context: Open context menu for the notification.
# * context_all: Open context menu for all notifications.
# These values can be strung together for each mouse event, and
# will be executed in sequence.
mouse_left_click = close_current
mouse_middle_click = do_action, close_current
mouse_right_click = close_all
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
background = "#1e1e2e"
foreground = "#cdd6f4"
timeout = 10
# Icon for notifications with low urgency
default_icon = dialog-information
[urgency_normal]
background = "#1e1e2e"
foreground = "#cdd6f4"
timeout = 10
override_pause_level = 30
# Icon for notifications with normal urgency
default_icon = dialog-information
[urgency_critical]
background = "#1e1e2e"
foreground = "#cdd6f4"
frame_color = "#fab387"
timeout = 0
override_pause_level = 60
# Icon for notifications with critical urgency
default_icon = dialog-warning
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# icon_position
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
# hide_text
# override_pause_level
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# You can also allow a notification to appear even when paused. Notification will appear whenever notification's override_pause_level >= dunst's paused level.
# This can be used to set partial pause modes, where more urgent notifications get through, but less urgent stay paused. To do that, you can override the following in the rules:
# override_pause_level = X
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

View file

@ -0,0 +1,5 @@
--enable-features=WaylandWindowDecorations
--enable-features=UseOzonePlatform
--ozone-platform-hint=auto
--enable-wayland-ime
--force-device-scale-factor=1.75

1
platforms/linux/hypr/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.sass-cache

View file

@ -0,0 +1,19 @@
general {
lock_cmd = notify-send "lock!" # dbus/sysd lock command (loginctl lock-session)
unlock_cmd = notify-send "unlock!" # same as above, but unlock
before_sleep_cmd = notify-send "Zzz" # command ran before sleep
after_sleep_cmd = notify-send "Awake!" # command ran after sleep
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
ignore_systemd_inhibit = false # whether to ignore systemd-inhibit --what=idle inhibitors
}
listener {
timeout = 600 # in seconds
on-timeout = swaylock # command to run when timeout has passed
on-resume = notify-send "Welcome back!" # command to run when activity is detected after timeout has fired.
}
listener {
timeout = 1800 # 30min
on-timeout = systemctl suspend # suspend pc
}

View file

@ -14,7 +14,15 @@
# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. # OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
# ####################################################################################### # #######################################################################################
source=~/.config/hypr/dark.conf $mainMod = SUPER # Sets "Windows" key as main modifier
$terminal = kitty
$fileManager = dolphin
$menu = rofi
$iconTheme = Papirus
source=~/.config/hypr/hyprland/dark.conf
source=~/.config/hypr/hyprland/+colemak.conf
source=~/.config/hypr/hyprland/rules.conf
autogenerated = 0 # remove this line to remove the warning autogenerated = 0 # remove this line to remove the warning
@ -25,11 +33,6 @@ autogenerated = 0 # remove this line to remove the warning
# Please note not all available settings / options are set here. # Please note not all available settings / options are set here.
# For a full list, see the wiki # 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
#
xwayland { xwayland {
force_zero_scaling = true force_zero_scaling = true
} }
@ -44,7 +47,7 @@ xwayland {
# monitor=,preferred,auto,auto # monitor=,preferred,auto,auto
# Format: # Format:
# MONITOR_NAME,RESOLUTION@REFRESH_RATE,OFFSET_XxOFFSET_Y,SCALE # MONITOR_NAME,RESOLUTION@REFRESH_RATE,OFFSET_XxOFFSET_Y,SCALE
monitor=DP-2,3840x2160@59,0x0,1.666667 monitor=DP-2,3840x2160@60,0x0,1.667
################### ###################
@ -54,9 +57,6 @@ monitor=DP-2,3840x2160@59,0x0,1.666667
# See https://wiki.hyprland.org/Configuring/Keywords/ # See https://wiki.hyprland.org/Configuring/Keywords/
# Set programs that you use # Set programs that you use
$terminal = wezterm-gui
$fileManager = dolphin
$menu = wofi
################# #################
@ -68,13 +68,14 @@ $menu = wofi
# exec-once = $terminal # exec-once = $terminal
# exec-once = nm-applet & # exec-once = nm-applet &
# exec-once = waybar & hyprpaper & mako & systemctl --user start hyprpolkitagent & fcitx5 & albert
# Top Bar # Top Bar
exec-once = waybar & exec-once = waybar &
# Notifications # Notifications
exec-once = mako & exec-once = dunst &
# exec-once = hyprpanel &
# wallpapers # wallpapers
exec-once = hyprpaper & exec-once = swww-daemon &
exec-once = hypridle &
# Authentication agent # Authentication agent
exec-once = systemctl --user start hyprpolkitagent exec-once = systemctl --user start hyprpolkitagent
# Input Method # Input Method
@ -86,9 +87,6 @@ exec-once = wl-paste --watch cliphist store
exec-once = blueman-applet & exec-once = blueman-applet &
# Time Tracker # Time Tracker
exec-once = aw-qt & exec-once = aw-qt &
# https://github.com/hyprwm/Hyprland/discussions/5867
exec = gsettings set org.gnome.desktop.interface gtk-theme "Breeze-Dark" # for GTK3 apps
exec = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" # for GTK4 apps
@ -103,11 +101,9 @@ exec = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" #
env = HYPRCURSOR_SIZE,24 env = HYPRCURSOR_SIZE,24
env = QT_QPA_PLATFORMTHEME,qt6ct # for Qt apps env = QT_QPA_PLATFORMTHEME,qt6ct # for Qt apps
# https://discuss.kde.org/t/the-themes-i-use-with-qt6ct-are-not-applied-in-discover/17118
env = QT_QUICK_CONTROLS_STYLE,org.kde.desktop env = QT_QUICK_CONTROLS_STYLE,org.kde.desktop
env = LC_CTYPE,zh_CN.UTF-8 env = LC_CTYPE,en_GB.UTF-8
env = LC_ALL,zh_CN.UTF-8
##################### #####################
@ -124,9 +120,8 @@ general {
border_size = 3 border_size = 3
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
# col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg col.active_border = $lavender $pink 45deg
col.active_border = $mauve col.inactive_border = $overlay1
col.inactive_border = $overlay2
# Set to true enable resizing windows by clicking and dragging on borders and gaps # Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = true resize_on_border = true
@ -144,8 +139,8 @@ decoration {
rounding = 10 rounding = 10
# Change transparency of focused and unfocused windows # Change transparency of focused and unfocused windows
active_opacity = 1.0 active_opacity = 0.97
inactive_opacity = 1.0 inactive_opacity = 0.90
shadow { shadow {
enabled = true enabled = true
@ -231,7 +226,7 @@ input {
kb_layout = us kb_layout = us
kb_variant = kb_variant =
kb_model = kb_model =
kb_options = caps:escape kb_options =
kb_rules = kb_rules =
follow_mouse = 1 follow_mouse = 1
@ -264,14 +259,22 @@ device {
$mainMod = SUPER # Sets "Windows" key as main modifier $mainMod = SUPER # Sets "Windows" key as main modifier
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more # Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
## Open Applications
bind = $mainMod, R, exec, $terminal bind = $mainMod, R, exec, $terminal
bind = $mainMod, Q, killactive, bind = $mainMod, Q, killactive,
bind = $mainMod, M, exit, # bind = $mainMod, M, exit
bind = $mainMod, F, exec, $fileManager bind = $mainMod SHIFT, F, exec, hyprctl --batch "dispatch togglefloating ; dispatch resizeactive exact 1440 810 ; dispatch centerwindow 1;"
bind = $mainMod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy
bind = $mainMod SHIFT, V, togglefloating
## Launcher
bind = $mainMod, W, exec, $menu -show window -icon-theme $iconTheme -show-icons
bind = $mainMod, V, exec, cliphist list | $menu -dmenu | cliphist decode | wl-copy
bind = $mainMod, D, exec, $HOME/.local/scripts/picker/sdcv.sh
bind = alt, space, exec, $menu -show drun -icon-theme $iconTheme -show-icons
bind = $mainMod, SLASH, exec, $HOME/.local/scripts/picker/baloo.sh
bind = $mainMod, space, exec, $menu
bind = $mainMod, P, pseudo, # dwindle bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, X, togglesplit, # dwindle bind = $mainMod, X, togglesplit, # dwindle
@ -280,12 +283,12 @@ bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d bind = $mainMod, down, movefocus, d
bind = $mainMod, h, movefocus, l
bind = $mainMod, i, movefocus, r
bind = $mainMod, e, movefocus, u
bind = $mainMod, n, movefocus, d
bind = $mainMod, c, exec, grimblast copy area bind = $mainMod SHIFT, l, exec, swaylock
bind = $mainMod, c, exec, grimblast copysave area $HOME/Pictures/Screenshots/"$(date +%Y%m%d-%H%M%S)"
bind = $mainMod SHIFT, c, exec, notify-send "Color: $(hyprpicker)"
# Switch workspaces with mainMod + [0-9] # Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1 bind = $mainMod, 1, workspace, 1
@ -312,8 +315,8 @@ bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10 bind = $mainMod SHIFT, 0, movetoworkspace, 10
# Example special workspace (scratchpad) # Example special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, magic bind = $mainMod, GRAVE, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic bind = $mainMod SHIFT, GRAVE, movetoworkspace, special:magic
# Scroll through existing workspaces with mainMod + scroll # Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1 bind = $mainMod, mouse_down, workspace, e+1
@ -337,21 +340,3 @@ bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous 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 v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# Ignore maximize requests from apps. You'll probably like this.
windowrulev2 = suppressevent maximize, class:.*
# Fix some dragging issues with XWayland
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0

View file

@ -0,0 +1,10 @@
bind = $mainMod, H, movefocus, l
bind = $mainMod, I, movefocus, r
bind = $mainMod, E, movefocus, u
bind = $mainMod, N, movefocus, d
bind = $mainMod SHIFT, H, swapwindow, l
bind = $mainMod SHIFT, I, swapwindow, r
bind = $mainMod SHIFT, E, swapwindow, u
bind = $mainMod SHIFT, N, swapwindow, d
bind = $mainMod, F, exec, $fileManager

View file

@ -0,0 +1,11 @@
bind = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d
bind = $mainMod SHIFT, H, swapwindow, l
bind = $mainMod SHIFT, L, swapwindow, r
bind = $mainMod SHIFT, K, swapwindow, u
bind = $mainMod SHIFT, J, swapwindow, d
bind = $mainMod, E, exec, $fileManager

View file

@ -76,3 +76,9 @@ $mantleAlpha = 181825
$crust = rgb(11111b) $crust = rgb(11111b)
$crustAlpha = 11111b $crustAlpha = 11111b
# https://github.com/hyprwm/Hyprland/discussions/5867
exec = gsettings set org.gnome.desktop.interface gtk-theme "BreezeDark" # for GTK3 apps
exec = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" # for GTK4 apps
exec = kwriteconfig5 --group "General" --key "ColorScheme" "BreezeDark"
exec = hyprsunset -t 6000 &

View file

@ -0,0 +1,78 @@
##############################
### 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 v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
# Ignore maximize requests from apps. You'll probably like this.
windowrulev2 = suppressevent maximize, class:.*
# Fix some dragging issues with XWayland
windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
windowrulev2 = float, class:qt6ct
windowrulev2 = float, size 2560 1440, class:^(org.kde.gwenview)$
windowrulev2 = float, size 50%, center, class:^(org.kde.konsole)$
windowrulev2 = float, class:^(steam)$
# Browser Extension Popup
windowrulev2 = float, title:^(Bitwarden - )(.*)$
# Picture-in-Picture
windowrulev2 = float, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
windowrulev2 = keepaspectratio, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
windowrulev2 = move 73% 72%, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
windowrulev2 = size 25%, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
windowrulev2 = float, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
windowrulev2 = pin, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
windowrulev2 = float, title:^(画中画)(.*)$
windowrulev2 = keepaspectratio, title:^(画中画)(.*)$
windowrulev2 = move 73% 72%, title:^(画中画)(.*)$
windowrulev2 = size 25%, title:^(画中画)(.*)$
windowrulev2 = float, title:^(画中画)(.*)$
windowrulev2 = pin, title:^(画中画)(.*)$
# Dialog windows float+center these windows.
windowrulev2 = center, title:^(Open File)(.*)$
windowrulev2 = center, title:^(打开文件)(.*)$
windowrulev2 = center, title:^(Select a File)(.*)$
windowrulev2 = center, title:^(选择文件)(.*)$
windowrulev2 = center, title:^(Choose wallpaper)(.*)$
windowrulev2 = center, title:^(Open Folder)(.*)$
windowrulev2 = center, title:^(Save As)(.*)$
windowrulev2 = center, title:^(保存)(.*)$
windowrulev2 = center, title:^(Library)(.*)$
windowrulev2 = center, title:^(File Upload)(.*)$
windowrulev2 = float, title:^(Open File)(.*)$
windowrulev2 = center, title:^(打开文件)(.*)$
windowrulev2 = float, title:^(Select a File)(.*)$
windowrulev2 = center, title:^(选择文件)(.*)$
windowrulev2 = float, title:^(Choose wallpaper)(.*)$
windowrulev2 = float, title:^(Open Folder)(.*)$
windowrulev2 = float, title:^(Save As)(.*)$
windowrulev2 = center, title:^(保存)(.*)$
windowrulev2 = float, title:^(Library)(.*)$
windowrulev2 = float, title:^(File Upload)(.*)$
# Centering pictures preview windows
# Telegram
windowrulev2 = center, title:^(Media viewer)(.*)$
windowrulev2 = float, title:^(Media viewer)(.*)$
windowrulev2 = size 50%, title:^(Media viewer)(.*)$
# WeChat
windowrulev2 = center, title:^(预览)(.*)$
windowrulev2 = float, title:^(预览)(.*)$
windowrulev2 = size 50%, title:^(预览)(.*)$
# QQ
windowrulev2 = center, title:^(图片查看器)(.*)$
windowrulev2 = float, title:^(图片查看器)(.*)$
windowrulev2 = size 50%, title:^(图片查看器)(.*)$

View file

@ -0,0 +1,69 @@
# BACKGROUND
background {
monitor =
path = ~/.config/hypr/walls/1.png
# blur_passes = 0
# contrast = 1
# brightness = 1
# vibrancy = 0.2
# vibrancy_darkness = 0.2
}
# GENERAL
general {
no_fade_in = false
no_fade_out = false
hide_cursor = true
grace = 0
disable_loading_bar = true
ignore_empty_input = true
}
# INPUT FIELD
input-field {
monitor =
size = 250, 60
outline_thickness = 2
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
dots_spacing = 0.35 # Scale of dots' absolute size, 0.0 - 1.0
dots_center = true
outer_color = rgba(0, 0, 0, 0)
inner_color = rgba(0, 0, 0, 0.2)
font_color = rgb(205, 214, 244)
fade_on_empty = false
rounding = -1
placeholder_text = <span foreground="##cdd6f4">Password</span>
hide_input = false
position = 0, -200
halign = center
valign = center
check_color = rgb(108, 112, 134)
fail_color = rgb(243, 139, 168) # if authentication failed, changes outer_color and fail message color
fail_text = <b>$ATTEMPTS</b> # can be set to empty
fail_timeout = 2000 # milliseconds before fail_text and fail_color disappears
fail_transition = 300 # transition time in ms between normal outer_color and fail_color
}
# DATE
label {
monitor =
text = cmd[update:1000] date +"%A, %B %d"
color = rgb(205, 214, 244)
font_size = 22
font_family = JetBrains Mono
position = 0, 300
halign = center
valign = center
}
# TIME
label {
monitor =
text = cmd[update:1000] date +"%-I:%M"
color = rgb(205, 214, 244)
font_size = 95
font_family = JetBrains Mono Extrabold
position = 0, 200
halign = center
valign = center
}

View file

@ -9,4 +9,5 @@
# ln -sf $DOTFILES/platforms/linux/hypr $XDG_CONFIG_HOME/hypr # ln -sf $DOTFILES/platforms/linux/hypr $XDG_CONFIG_HOME/hypr
preload = ~/Pictures/Wallpaper/current.jpg preload = ~/Pictures/Wallpaper/current.jpg
wallpaper = DP-2, ~/Pictures/Wallpaper/current.jpg preload = ~/Pictures/Wallpaper/current.png
wallpaper = DP-2, ~/Pictures/Wallpaper/current.png

View file

@ -1,5 +0,0 @@
[ElisaFileIndexer]
RootPath[$e]=$HOME/Music
[Views]
InitialFilesViewPath=/mnt/d/Media/Music

View file

@ -1,13 +1,23 @@
[ActivityManager] [ActivityManager]
_k_friendly_name=Activity Manager _k_friendly_name=活动管理器
switch-to-activity-32e1f2d2-08d1-4a8b-886a-0a062f999068=none,none,Switch to activity "Default" switch-to-activity-32e1f2d2-08d1-4a8b-886a-0a062f999068=none,none,Switch to activity "Default"
switch-to-activity-e1ebfdac-0f52-47a5-9e7a-d9eb5cc26845=none,none,切换到活动“默认”
[Clementine]
_k_friendly_name=Clementine
next_album=Shift+Media Next,none,Next album
next_track=none,none,下一个曲目
play_pause=none,none,播放/暂停
prev_track=none,none,上一个曲目
stop=none,none,停止
[KDE Keyboard Layout Switcher] [KDE Keyboard Layout Switcher]
Switch keyboard layout to English (Colemak)=none,none,Switch keyboard layout to English (Colemak) Switch keyboard layout to English (Colemak)=none,none,Switch keyboard layout to English (Colemak)
Switch keyboard layout to English (US)=none,none,Switch keyboard layout to English (US) Switch keyboard layout to English (US)=none,none,Switch keyboard layout to English (US)
Switch to Last-Used Keyboard Layout=Meta+Alt+L,Meta+Alt+L,Switch to Last-Used Keyboard Layout Switch keyboard layout to 英语(美国)=none,none,切换键盘布局为 英语(美国)
Switch to Next Keyboard Layout=Meta+Alt+K,Meta+Alt+K,Switch to Next Keyboard Layout Switch to Last-Used Keyboard Layout=Meta+Alt+L,Meta+Alt+L,切换到上次使用过的键盘布局
_k_friendly_name=Keyboard Layout Switcher Switch to Next Keyboard Layout=Meta+Alt+K,Meta+Alt+K,切换到下一个键盘布局
_k_friendly_name=键盘布局切换器
[Strawberry] [Strawberry]
_k_friendly_name=Strawberry _k_friendly_name=Strawberry
@ -17,54 +27,59 @@ prev_track=none,none,Previous track
stop=none,none,Stop stop=none,none,Stop
[kaccess] [kaccess]
Toggle Screen Reader On and Off=Meta+Alt+S,Meta+Alt+S,Toggle Screen Reader On and Off Toggle Screen Reader On and Off=Meta+Alt+S,Meta+Alt+S,切换屏幕阅读器开关
_k_friendly_name=Accessibility _k_friendly_name=无障碍辅助
[kcm_touchpad] [kcm_touchpad]
Disable Touchpad=Touchpad Off,Touchpad Off, Disable Touchpad=Touchpad Off,Touchpad Off,
Enable Touchpad=Touchpad On,Touchpad On, Enable Touchpad=Touchpad On,Touchpad On,
Toggle Touchpad=Touchpad Toggle\tMeta+Ctrl+Zenkaku Hankaku,Touchpad Toggle\tTouchpad Toggle\tMeta+Ctrl+Touchpad Toggle\tMeta+Ctrl+Zenkaku Hankaku, Toggle Touchpad=Touchpad Toggle\tMeta+Ctrl+Zenkaku Hankaku,Touchpad Toggle\tTouchpad Toggle\tMeta+Ctrl+Touchpad Toggle\tMeta+Ctrl+Zenkaku Hankaku,
_k_friendly_name=Touchpad _k_friendly_name=触摸板
[kmix] [kmix]
_k_friendly_name=KMix _k_friendly_name=音量
decrease_microphone_volume=Microphone Volume Down,Microphone Volume Down,Decrease Microphone Volume decrease_microphone_volume=Microphone Volume Down,Microphone Volume Down,降低麦克风音量
decrease_volume=Volume Down,Volume Down,Decrease Volume decrease_volume=Volume Down,Volume Down,降低音量
decrease_volume_small=Shift+Volume Down,Shift+Volume Down,Decrease Volume by 1% decrease_volume_small=Shift+Volume Down,Shift+Volume Down,音量降低 1%
increase_microphone_volume=Microphone Volume Up,Microphone Volume Up,Increase Microphone Volume increase_microphone_volume=Microphone Volume Up,Microphone Volume Up,提高麦克风音量
increase_volume=Volume Up,Volume Up,Increase Volume increase_volume=Volume Up,Volume Up,提高音量
increase_volume_small=Shift+Volume Up,Shift+Volume Up,Increase Volume by 1% increase_volume_small=Shift+Volume Up,Shift+Volume Up,音量提高 1%
mic_mute=Microphone Mute\tMeta+Volume Mute,Microphone Mute\tMeta+Volume Mute,Mute Microphone mic_mute=Microphone Mute\tMeta+Volume Mute,Microphone Mute\tMeta+Volume Mute,麦克风静音
mute=Volume Mute,Volume Mute,Mute mute=Volume Mute,Volume Mute,静音
[krusader] [krusader]
_k_friendly_name=Krusader _k_friendly_name=Krusader
bring_main_window_to_top=Meta+K,Meta+K,Bring Main Window to Top bring_main_window_to_top=none,Meta+K,Bring Main Window to Top
[ksmserver] [ksmserver]
Halt Without Confirmation=none,,Shut Down Without Confirmation Halt Without Confirmation=none,,关机 (无需确认)
Lock Session=Meta+L\tScreensaver,Meta+L\tScreensaver,Lock Session Lock Session=Meta+L\tScreensaver,Meta+L\tScreensaver,锁定会话
Log Out=Ctrl+Alt+Del,Ctrl+Alt+Del,Show Logout Screen Log Out=Ctrl+Alt+Del,Ctrl+Alt+Del,显示注销屏幕
Log Out Without Confirmation=none,,Log Out Without Confirmation Log Out Without Confirmation=none,,注销 (无需确认)
LogOut=none,,Log Out LogOut=none,,注销
Reboot=none,,Reboot Reboot=none,,重启
Reboot Without Confirmation=none,,Reboot Without Confirmation Reboot Without Confirmation=none,,重启 (无需确认)
Shut Down=none,,Shut Down Shut Down=none,,关机
_k_friendly_name=Session Management _k_friendly_name=会话管理
[ktorrent]
_k_friendly_name=KTorrent
queue_suspend=Alt+Shift+P,Alt+Shift+P,暂停种子
show_kt=Alt+Shift+T,Alt+Shift+T,显示/隐藏 KTorrent
[kwin] [kwin]
Activate Window Demanding Attention=Meta+Ctrl+A,Meta+Ctrl+A,Activate Window Demanding Attention Activate Window Demanding Attention=Meta+Ctrl+A,Meta+Ctrl+A,激活请求注意的窗口
Cycle Overview=none,none,Cycle through Overview and Grid View Cycle Overview=none,none,循环显示桌面概览和网格视图
Cycle Overview Opposite=none,none,Cycle through Grid View and Overview Cycle Overview Opposite=none,none,循环显示网格视图和桌面概览
Decrease Opacity=none,,Decrease Opacity of Active Window by 5% Decrease Opacity=none,,降低活动窗口不透明度 5%
Edit Tiles=Meta+T,Meta+T,Toggle Tiles Editor Edit Tiles=Meta+T,Meta+T,磁贴编辑器开关
Expose=Ctrl+F9,Ctrl+F9,Toggle Present Windows (Current desktop) Expose=Ctrl+F9,Ctrl+F9,显示/隐藏窗口平铺 (当前桌面)
ExposeAll=Ctrl+F10\tLaunch (C),Ctrl+F10\tLaunch (C),Toggle Present Windows (All desktops) ExposeAll=Ctrl+F10\tLaunch (C),Ctrl+F10\tLaunch (C),显示/隐藏窗口平铺 (全部桌面)
ExposeClass=Ctrl+F7,Ctrl+F7,Toggle Present Windows (Window class) ExposeClass=Ctrl+F7,Ctrl+F7,显示/隐藏窗口平铺 (窗口类)
ExposeClassCurrentDesktop=none,none,Toggle Present Windows (Window class on current desktop) ExposeClassCurrentDesktop=none,none,显示/隐藏窗口平铺 (当前桌面的窗口类)
Grid View=Meta+G,Meta+G,Toggle Grid View Grid View=Meta+G,Meta+G,切换网格视图
Increase Opacity=none,,Increase Opacity of Active Window by 5% Increase Opacity=none,,提高活动窗口不透明度 5%
Kill Window=Meta+Ctrl+Esc,Meta+Ctrl+Esc,Kill Window Kill Window=Meta+Ctrl+Esc,Meta+Ctrl+Esc,强制终止窗口
KrohnkiteBTreeLayout=Meta+X,none,Krohnkite: BTree Layout KrohnkiteBTreeLayout=Meta+X,none,Krohnkite: BTree Layout
KrohnkiteColumnsLayout=none,none,Krohnkite: Columns Layout KrohnkiteColumnsLayout=none,none,Krohnkite: Columns Layout
KrohnkiteDecrease=none,none,Krohnkite: Decrease KrohnkiteDecrease=none,none,Krohnkite: Decrease
@ -99,210 +114,212 @@ KrohnkiteTileLayout=none,none,Krohnkite: Tile Layout
KrohnkiteToggleFloat=Meta+Shift+F,none,Krohnkite: Toggle Float KrohnkiteToggleFloat=Meta+Shift+F,none,Krohnkite: Toggle Float
KrohnkiteTreeColumnLayout=none,none,Krohnkite: Tree Column Layout KrohnkiteTreeColumnLayout=none,none,Krohnkite: Tree Column Layout
KrohnkitegrowWidth=Meta+Ctrl+I,none,Krohnkite: Grow Width KrohnkitegrowWidth=Meta+Ctrl+I,none,Krohnkite: Grow Width
Move Tablet to Next Output=none,none,Move the tablet to the next output Move Tablet to Next Output=none,none,移动数位板到下一个输出设备
MoveMouseToCenter=Meta+F6,Meta+F6,Move Mouse to Centre MoveMouseToCenter=Meta+F6,Meta+F6,移动鼠标到中央
MoveMouseToFocus=Meta+F5,Meta+F5,Move Mouse to Focus MoveMouseToFocus=Meta+F5,Meta+F5,移动鼠标到焦点
MoveZoomDown=none,none,Move Zoomed Area Downwards MoveZoomDown=none,none,将缩放区域向下移动
MoveZoomLeft=none,none,Move Zoomed Area to Left MoveZoomLeft=none,none,将缩放区域向左移动
MoveZoomRight=none,none,Move Zoomed Area to Right MoveZoomRight=none,none,将缩放区域向右移动
MoveZoomUp=none,none,Move Zoomed Area Upwards MoveZoomUp=none,none,将缩放区域向上移动
Overview=Meta+W\tMeta+Tab,Meta+W,Toggle Overview Overview=Meta+W\tMeta+Tab,Meta+W,显示/隐藏桌面总览
Setup Window Shortcut=none,,Setup Window Shortcut Setup Window Shortcut=none,,设置窗口快捷键
Show Desktop=Meta+D,Meta+D,Peek at Desktop Show Desktop=Meta+D,Meta+D,暂时显示桌面
Switch One Desktop Down=Meta+Ctrl+Down,Meta+Ctrl+Down,Switch One Desktop Down Switch One Desktop Down=Meta+Ctrl+Down,Meta+Ctrl+Down,切换到下方桌面
Switch One Desktop Up=Meta+Ctrl+Up,Meta+Ctrl+Up,Switch One Desktop Up Switch One Desktop Up=Meta+Ctrl+Up,Meta+Ctrl+Up,切换到上方桌面
Switch One Desktop to the Left=Meta+Ctrl+Left,Meta+Ctrl+Left,Switch One Desktop to the Left Switch One Desktop to the Left=Meta+Ctrl+Left,Meta+Ctrl+Left,切换到左侧桌面
Switch One Desktop to the Right=Meta+Ctrl+Right,Meta+Ctrl+Right,Switch One Desktop to the Right Switch One Desktop to the Right=Meta+Ctrl+Right,Meta+Ctrl+Right,切换到右侧桌面
Switch Window Down=Meta+Alt+Down,Meta+Alt+Down,Switch to Window Below Switch Window Down=Meta+Alt+Down,Meta+Alt+Down,切换到下面的窗口
Switch Window Left=Meta+Alt+Left,Meta+Alt+Left,Switch to Window to the Left Switch Window Left=Meta+Alt+Left,Meta+Alt+Left,切换到左侧的窗口
Switch Window Right=Meta+Alt+Right,Meta+Alt+Right,Switch to Window to the Right Switch Window Right=Meta+Alt+Right,Meta+Alt+Right,切换到右侧的窗口
Switch Window Up=Meta+Alt+Up,Meta+Alt+Up,Switch to Window Above Switch Window Up=Meta+Alt+Up,Meta+Alt+Up,切换到上面的窗口
Switch to Desktop 1=Meta+1,Ctrl+F1,Switch to Desktop 1 Switch to Desktop 1=Meta+1,Ctrl+F1,切换到桌面 1
Switch to Desktop 10=none,,Switch to Desktop 10 Switch to Desktop 10=none,,切换到桌面 10
Switch to Desktop 11=none,,Switch to Desktop 11 Switch to Desktop 11=none,,切换到桌面 11
Switch to Desktop 12=none,,Switch to Desktop 12 Switch to Desktop 12=none,,切换到桌面 12
Switch to Desktop 13=none,,Switch to Desktop 13 Switch to Desktop 13=none,,切换到桌面 13
Switch to Desktop 14=none,,Switch to Desktop 14 Switch to Desktop 14=none,,切换到桌面 14
Switch to Desktop 15=none,,Switch to Desktop 15 Switch to Desktop 15=none,,切换到桌面 15
Switch to Desktop 16=none,,Switch to Desktop 16 Switch to Desktop 16=none,,切换到桌面 16
Switch to Desktop 17=none,,Switch to Desktop 17 Switch to Desktop 17=none,,切换到桌面 17
Switch to Desktop 18=none,,Switch to Desktop 18 Switch to Desktop 18=none,,切换到桌面 18
Switch to Desktop 19=none,,Switch to Desktop 19 Switch to Desktop 19=none,,切换到桌面 19
Switch to Desktop 2=Meta+2,Ctrl+F2,Switch to Desktop 2 Switch to Desktop 2=Meta+2,Ctrl+F2,切换到桌面 2
Switch to Desktop 20=none,,Switch to Desktop 20 Switch to Desktop 20=none,,切换到桌面 20
Switch to Desktop 3=Meta+3,Ctrl+F3,Switch to Desktop 3 Switch to Desktop 3=Meta+3,Ctrl+F3,切换到桌面 3
Switch to Desktop 4=Meta+4,Ctrl+F4,Switch to Desktop 4 Switch to Desktop 4=Meta+4,Ctrl+F4,切换到桌面 4
Switch to Desktop 5=Meta+5,,Switch to Desktop 5 Switch to Desktop 5=Meta+5,,切换到桌面 5
Switch to Desktop 6=Meta+6,,Switch to Desktop 6 Switch to Desktop 6=Meta+6,,切换到桌面 6
Switch to Desktop 7=Meta+7,,Switch to Desktop 7 Switch to Desktop 7=Meta+7,,切换到桌面 7
Switch to Desktop 8=Meta+8,,Switch to Desktop 8 Switch to Desktop 8=Meta+8,,切换到桌面 8
Switch to Desktop 9=Meta+9,,Switch to Desktop 9 Switch to Desktop 9=Meta+9,,切换到桌面 9
Switch to Next Desktop=none,,Switch to Next Desktop Switch to Next Desktop=none,,切换到下一桌面
Switch to Next Screen=none,,Switch to Next Screen Switch to Next Screen=none,,切换到下一屏幕
Switch to Previous Desktop=none,,Switch to Previous Desktop Switch to Previous Desktop=none,,切换到上一桌面
Switch to Previous Screen=none,,Switch to Previous Screen Switch to Previous Screen=none,,切换到上一屏幕
Switch to Screen 0=none,,Switch to Screen 0 Switch to Screen 0=none,,切换到屏幕 0
Switch to Screen 1=none,,Switch to Screen 1 Switch to Screen 1=none,,切换到屏幕 1
Switch to Screen 2=none,,Switch to Screen 2 Switch to Screen 2=none,,切换到屏幕 2
Switch to Screen 3=none,,Switch to Screen 3 Switch to Screen 3=none,,切换到屏幕 3
Switch to Screen 4=none,,Switch to Screen 4 Switch to Screen 4=none,,切换到屏幕 4
Switch to Screen 5=none,,Switch to Screen 5 Switch to Screen 5=none,,切换到屏幕 5
Switch to Screen 6=none,,Switch to Screen 6 Switch to Screen 6=none,,切换到屏幕 6
Switch to Screen 7=none,,Switch to Screen 7 Switch to Screen 7=none,,切换到屏幕 7
Switch to Screen Above=none,,Switch to Screen Above Switch to Screen Above=none,,切换到上方屏幕
Switch to Screen Below=none,,Switch to Screen Below Switch to Screen Below=none,,切换到下方屏幕
Switch to Screen to the Left=none,,Switch to Screen to the Left Switch to Screen to the Left=none,,切换到左侧屏幕
Switch to Screen to the Right=none,,Switch to Screen to the Right Switch to Screen to the Right=none,,切换到右侧屏幕
Toggle Night Color=none,none,Suspend/Resume Night Light Toggle Night Color=none,none,暂停/继续夜间色温
Toggle Window Raise/Lower=none,,Toggle Window Raise/Lower Toggle Window Raise/Lower=none,,提升/降低窗口
Walk Through Windows=Alt+Tab,Alt+Tab,Walk Through Windows Walk Through Windows=Alt+Tab,Alt+Tab,遍历窗口
Walk Through Windows (Reverse)=Alt+Shift+Tab,Alt+Shift+Tab,Walk Through Windows (Reverse) Walk Through Windows (Reverse)=Alt+Shift+Tab,Alt+Shift+Tab,遍历窗口 (反向)
Walk Through Windows Alternative=none,,Walk Through Windows Alternative Walk Through Windows Alternative=none,,遍历窗口交替
Walk Through Windows Alternative (Reverse)=none,,Walk Through Windows Alternative (Reverse) Walk Through Windows Alternative (Reverse)=none,,遍历窗口交替 (反向)
Walk Through Windows of Current Application=Alt+`,Alt+`,Walk Through Windows of Current Application Walk Through Windows of Current Application=Alt+`,Alt+`,遍历当前应用程序窗口
Walk Through Windows of Current Application (Reverse)=Alt+~,Alt+~,Walk Through Windows of Current Application (Reverse) Walk Through Windows of Current Application (Reverse)=Alt+~,Alt+~,遍历当前应用程序窗口 (反向)
Walk Through Windows of Current Application Alternative=none,,Walk Through Windows of Current Application Alternative Walk Through Windows of Current Application Alternative=none,,遍历当前应用程序窗口交替
Walk Through Windows of Current Application Alternative (Reverse)=none,,Walk Through Windows of Current Application Alternative (Reverse) Walk Through Windows of Current Application Alternative (Reverse)=none,,遍历当前应用程序窗口交替 (反向)
Window Above Other Windows=none,,Keep Window Above Others Window Above Other Windows=none,,窗口置顶
Window Below Other Windows=none,,Keep Window Below Others Window Below Other Windows=none,,窗口置底
Window Close=Alt+F4\tMeta+Q,Alt+F4,Close Window Window Close=Alt+F4\tMeta+Q,Alt+F4,关闭窗口
Window Custom Quick Tile Bottom=none,,Custom Quick Tile Window to the Bottom Window Custom Quick Tile Bottom=none,,自定义快速铺放窗口到下方
Window Custom Quick Tile Left=none,,Custom Quick Tile Window to the Left Window Custom Quick Tile Left=none,,自定义快速铺放窗口到左侧
Window Custom Quick Tile Right=none,,Custom Quick Tile Window to the Right Window Custom Quick Tile Right=none,,自定义快速铺放窗口到右侧
Window Custom Quick Tile Top=none,,Custom Quick Tile Window to the Top Window Custom Quick Tile Top=none,,自定义快速铺放窗口到上方
Window Fullscreen=none,,Make Window Fullscreen Window Fullscreen=Meta+F11,,全屏显示窗口
Window Grow Horizontal=none,,Expand Window Horizontally Window Grow Horizontal=none,,水平扩展窗口
Window Grow Vertical=none,,Expand Window Vertically Window Grow Vertical=none,,垂直扩展窗口
Window Lower=none,,Lower Window Window Lower=none,,降低窗口
Window Maximize=Meta+PgUp,Meta+PgUp,Maximise Window Window Maximize=Meta+PgUp,Meta+PgUp,最大化窗口
Window Maximize Horizontal=none,,Maximise Window Horizontally Window Maximize Horizontal=none,,水平最大化窗口
Window Maximize Vertical=none,,Maximise Window Vertically Window Maximize Vertical=none,,垂直最大化窗口
Window Minimize=Meta+PgDown,Meta+PgDown,Minimise Window Window Minimize=Meta+PgDown\tMeta+M,Meta+PgDown,最小化窗口
Window Move=none,,Move Window Window Move=none,,移动窗口
Window Move Center=none,,Move Window to the Centre Window Move Center=none,,移动窗口到中央
Window No Border=none,,Toggle Window Titlebar and Frame Window No Border=none,,显示/隐藏窗口标题栏和框架
Window On All Desktops=none,,Keep Window on All Desktops Window On All Desktops=none,,在所有桌面上显示窗口
Window One Desktop Down=Meta+Ctrl+Shift+Down,Meta+Ctrl+Shift+Down,Window One Desktop Down Window One Desktop Down=Meta+Ctrl+Shift+Down,Meta+Ctrl+Shift+Down,窗口下移一个桌面
Window One Desktop Up=Meta+Ctrl+Shift+Up,Meta+Ctrl+Shift+Up,Window One Desktop Up Window One Desktop Up=Meta+Ctrl+Shift+Up,Meta+Ctrl+Shift+Up,窗口上移一个桌面
Window One Desktop to the Left=Meta+Ctrl+Shift+Left,Meta+Ctrl+Shift+Left,Window One Desktop to the Left Window One Desktop to the Left=Meta+Ctrl+Shift+Left,Meta+Ctrl+Shift+Left,窗口左移一个桌面
Window One Desktop to the Right=Meta+Ctrl+Shift+Right,Meta+Ctrl+Shift+Right,Window One Desktop to the Right Window One Desktop to the Right=Meta+Ctrl+Shift+Right,Meta+Ctrl+Shift+Right,窗口右移一个桌面
Window One Screen Down=none,,Move Window One Screen Down Window One Screen Down=none,,移动窗口到下方屏幕
Window One Screen Up=none,,Move Window One Screen Up Window One Screen Up=none,,移动窗口到上方屏幕
Window One Screen to the Left=none,,Move Window One Screen to the Left Window One Screen to the Left=none,,移动窗口到左侧屏幕
Window One Screen to the Right=none,,Move Window One Screen to the Right Window One Screen to the Right=none,,移动窗口到右侧屏幕
Window Operations Menu=Alt+F3,Alt+F3,Window Operations Menu Window Operations Menu=Alt+F3,Alt+F3,窗口操作菜单
Window Pack Down=none,,Move Window Down Window Pack Down=none,,下移窗口
Window Pack Left=none,,Move Window Left Window Pack Left=none,,左移窗口
Window Pack Right=none,,Move Window Right Window Pack Right=none,,右移窗口
Window Pack Up=none,,Move Window Up Window Pack Up=none,,上移窗口
Window Quick Tile Bottom=Meta+Down,Meta+Down,Quick Tile Window to the Bottom Window Quick Tile Bottom=Meta+Down,Meta+Down,快速铺放窗口到下方
Window Quick Tile Bottom Left=none,,Quick Tile Window to the Bottom Left Window Quick Tile Bottom Left=none,,快速铺放窗口到左下方
Window Quick Tile Bottom Right=none,,Quick Tile Window to the Bottom Right Window Quick Tile Bottom Right=none,,快速铺放窗口到右下方
Window Quick Tile Left=Meta+Left,Meta+Left,Quick Tile Window to the Left Window Quick Tile Left=Meta+Left,Meta+Left,快速铺放窗口到左侧
Window Quick Tile Right=Meta+Right,Meta+Right,Quick Tile Window to the Right Window Quick Tile Right=Meta+Right,Meta+Right,快速铺放窗口到右侧
Window Quick Tile Top=Meta+Up,Meta+Up,Quick Tile Window to the Top Window Quick Tile Top=Meta+Up,Meta+Up,快速铺放窗口到上方
Window Quick Tile Top Left=none,,Quick Tile Window to the Top Left Window Quick Tile Top Left=none,,快速铺放窗口到左上方
Window Quick Tile Top Right=none,,Quick Tile Window to the Top Right Window Quick Tile Top Right=none,,快速铺放窗口到右上方
Window Raise=none,,Raise Window Window Raise=none,,提升窗口
Window Resize=none,,Resize Window Window Resize=none,,调整窗口大小
Window Shade=none,,Shade Window Window Shade=none,,折叠窗口
Window Shrink Horizontal=none,,Shrink Window Horizontally Window Shrink Horizontal=none,,水平缩小窗口
Window Shrink Vertical=none,,Shrink Window Vertically Window Shrink Vertical=none,,垂直缩小窗口
Window to Desktop 1=Meta+!,,Window to Desktop 1 Window to Desktop 1=Meta+!,,窗口移动到桌面 1
Window to Desktop 10=none,,Window to Desktop 10 Window to Desktop 10=none,,窗口移动到桌面 10
Window to Desktop 11=none,,Window to Desktop 11 Window to Desktop 11=none,,窗口移动到桌面 11
Window to Desktop 12=none,,Window to Desktop 12 Window to Desktop 12=none,,窗口移动到桌面 12
Window to Desktop 13=none,,Window to Desktop 13 Window to Desktop 13=none,,窗口移动到桌面 13
Window to Desktop 14=none,,Window to Desktop 14 Window to Desktop 14=none,,窗口移动到桌面 14
Window to Desktop 15=none,,Window to Desktop 15 Window to Desktop 15=none,,窗口移动到桌面 15
Window to Desktop 16=none,,Window to Desktop 16 Window to Desktop 16=none,,窗口移动到桌面 16
Window to Desktop 17=none,,Window to Desktop 17 Window to Desktop 17=none,,窗口移动到桌面 17
Window to Desktop 18=none,,Window to Desktop 18 Window to Desktop 18=none,,窗口移动到桌面 18
Window to Desktop 19=none,,Window to Desktop 19 Window to Desktop 19=none,,窗口移动到桌面 19
Window to Desktop 2=Meta+@,,Window to Desktop 2 Window to Desktop 2=Meta+@,,窗口移动到桌面 2
Window to Desktop 20=none,,Window to Desktop 20 Window to Desktop 20=none,,窗口移动到桌面 20
Window to Desktop 3=Meta+#,,Window to Desktop 3 Window to Desktop 3=Meta+#,,窗口移动到桌面 3
Window to Desktop 4=Meta+$,,Window to Desktop 4 Window to Desktop 4=Meta+$,,窗口移动到桌面 4
Window to Desktop 5=Meta+%,,Window to Desktop 5 Window to Desktop 5=Meta+%,,窗口移动到桌面 5
Window to Desktop 6=Meta+^,,Window to Desktop 6 Window to Desktop 6=Meta+^,,窗口移动到桌面 6
Window to Desktop 7=Meta+&,,Window to Desktop 7 Window to Desktop 7=Meta+&,,窗口移动到桌面 7
Window to Desktop 8=Meta+*,,Window to Desktop 8 Window to Desktop 8=Meta+*,,窗口移动到桌面 8
Window to Desktop 9=none,,Window to Desktop 9 Window to Desktop 9=Meta+(,,窗口移动到桌面 9
Window to Next Desktop=none,,Window to Next Desktop Window to Next Desktop=none,,窗口移动到下一桌面
Window to Next Screen=Meta+Shift+Right,Meta+Shift+Right,Move Window to Next Screen Window to Next Screen=Meta+Shift+Right,Meta+Shift+Right,移动窗口到下一屏幕
Window to Previous Desktop=none,,Window to Previous Desktop Window to Previous Desktop=none,,窗口移动到上一桌面
Window to Previous Screen=Meta+Shift+Left,Meta+Shift+Left,Move Window to Previous Screen Window to Previous Screen=Meta+Shift+Left,Meta+Shift+Left,移动窗口到上一屏幕
Window to Screen 0=none,,Move Window to Screen 0 Window to Screen 0=none,,移动窗口到屏幕 0
Window to Screen 1=none,,Move Window to Screen 1 Window to Screen 1=none,,移动窗口到屏幕 1
Window to Screen 2=none,,Move Window to Screen 2 Window to Screen 2=none,,移动窗口到屏幕 2
Window to Screen 3=none,,Move Window to Screen 3 Window to Screen 3=none,,移动窗口到屏幕 3
Window to Screen 4=none,,Move Window to Screen 4 Window to Screen 4=none,,移动窗口到屏幕 4
Window to Screen 5=none,,Move Window to Screen 5 Window to Screen 5=none,,移动窗口到屏幕 5
Window to Screen 6=none,,Move Window to Screen 6 Window to Screen 6=none,,移动窗口到屏幕 6
Window to Screen 7=none,,Move Window to Screen 7 Window to Screen 7=none,,移动窗口到屏幕 7
_k_friendly_name=KWin _k_friendly_name=KWin
disableInputCapture=Meta+Shift+Esc,Meta+Shift+Esc,Disable Active Input Capture disableInputCapture=Meta+Shift+Esc,Meta+Shift+Esc,禁用活动输入捕获
view_actual_size=Meta+0,Meta+0,Zoom to Actual Size view_actual_size=Meta+0,Meta+0,缩放为实际大小(A)
view_zoom_in=Meta++\tMeta+=,Meta++\tMeta+=,Zoom In view_zoom_in=Meta++\tMeta+=,Meta++\tMeta+=,放大(I)
view_zoom_out=Meta+-,Meta+-,Zoom Out view_zoom_out=Meta+-,Meta+-,缩小(O)
[mediacontrol] [mediacontrol]
_k_friendly_name=Media Controller _k_friendly_name=媒体控制器
mediavolumedown=none,,Media volume down mediavolumedown=none,,媒体音量降低
mediavolumeup=none,,Media volume up mediavolumeup=none,,媒体音量提高
nextmedia=Media Next,Media Next,Media playback next nextmedia=Media Next,Media Next,播放下一首媒体
pausemedia=Media Pause,Media Pause,Pause media playback pausemedia=Media Pause,Media Pause,暂停媒体播放
playmedia=none,,Play media playback playmedia=none,,播放媒体
playpausemedia=Media Play,Media Play,Play/Pause media playback playpausemedia=Media Play,Media Play,播放/暂停媒体播放
previousmedia=Media Previous,Media Previous,Media playback previous previousmedia=Media Previous,Media Previous,播放上一首媒体
stopmedia=Media Stop,Media Stop,Stop media playback stopmedia=Media Stop,Media Stop,停止媒体播放
[org_kde_powerdevil] [org_kde_powerdevil]
Decrease Keyboard Brightness=Keyboard Brightness Down,Keyboard Brightness Down,Decrease Keyboard Brightness Decrease Keyboard Brightness=Keyboard Brightness Down,Keyboard Brightness Down,降低键盘亮度
Decrease Screen Brightness=Monitor Brightness Down,Monitor Brightness Down,Decrease Screen Brightness Decrease Screen Brightness=Monitor Brightness Down,Monitor Brightness Down,降低屏幕亮度
Decrease Screen Brightness Small=Shift+Monitor Brightness Down,Shift+Monitor Brightness Down,Decrease Screen Brightness by 1% Decrease Screen Brightness Small=Shift+Monitor Brightness Down,Shift+Monitor Brightness Down,降低屏幕亮度 1%
Hibernate=Hibernate,Hibernate,Hibernate Hibernate=Hibernate,Hibernate,休眠
Increase Keyboard Brightness=Keyboard Brightness Up,Keyboard Brightness Up,Increase Keyboard Brightness Increase Keyboard Brightness=Keyboard Brightness Up,Keyboard Brightness Up,提高键盘亮度
Increase Screen Brightness=Monitor Brightness Up,Monitor Brightness Up,Increase Screen Brightness Increase Screen Brightness=Monitor Brightness Up,Monitor Brightness Up,提高屏幕亮度
Increase Screen Brightness Small=Shift+Monitor Brightness Up,Shift+Monitor Brightness Up,Increase Screen Brightness by 1% Increase Screen Brightness Small=Shift+Monitor Brightness Up,Shift+Monitor Brightness Up,提高屏幕亮度 1%
PowerDown=Power Down,Power Down,Power Down PowerDown=Power Down,Power Down,断电
PowerOff=Power Off,Power Off,Power Off PowerOff=Power Off,Power Off,关机
Sleep=Sleep,Sleep,Suspend Sleep=Sleep,Sleep,挂起
Toggle Keyboard Backlight=Keyboard Light On/Off,Keyboard Light On/Off,Toggle Keyboard Backlight Toggle Keyboard Backlight=Keyboard Light On/Off,Keyboard Light On/Off,开关键盘背光
Turn Off Screen=none,none,Turn Off Screen Turn Off Screen=none,none,关闭屏幕
_k_friendly_name=Power Management _k_friendly_name=电源管理
powerProfile=Battery\tMeta+B,Battery\tMeta+B,Switch Power Profile powerProfile=Battery\tMeta+B,Battery\tMeta+B,切换电源管理方案
[plasmashell] [plasmashell]
_k_friendly_name=plasmashell _k_friendly_name=plasmashell
activate application launcher=Meta\tAlt+F1,Meta\tAlt+F1,Activate Application Launcher activate application launcher=Meta\tAlt+F1,Meta\tAlt+F1,激活应用程序启动器
activate task manager entry 1=none,Meta+1,Activate Task Manager Entry 1 activate task manager entry 1=none,Meta+1,激活任务管理器条目 1
activate task manager entry 10=none,,Activate Task Manager Entry 10 activate task manager entry 10=none,,激活任务管理器条目 10
activate task manager entry 2=none,Meta+2,Activate Task Manager Entry 2 activate task manager entry 2=none,Meta+2,激活任务管理器条目 2
activate task manager entry 3=none,Meta+3,Activate Task Manager Entry 3 activate task manager entry 3=none,Meta+3,激活任务管理器条目 3
activate task manager entry 4=none,Meta+4,Activate Task Manager Entry 4 activate task manager entry 4=none,Meta+4,激活任务管理器条目 4
activate task manager entry 5=none,Meta+5,Activate Task Manager Entry 5 activate task manager entry 5=none,Meta+5,激活任务管理器条目 5
activate task manager entry 6=none,Meta+6,Activate Task Manager Entry 6 activate task manager entry 6=none,Meta+6,激活任务管理器条目 6
activate task manager entry 7=none,Meta+7,Activate Task Manager Entry 7 activate task manager entry 7=none,Meta+7,激活任务管理器条目 7
activate task manager entry 8=none,Meta+8,Activate Task Manager Entry 8 activate task manager entry 8=none,Meta+8,激活任务管理器条目 8
activate task manager entry 9=none,Meta+9,Activate Task Manager Entry 9 activate task manager entry 9=none,Meta+9,激活任务管理器条目 9
activate widget 115=none,none,激活 应用程序启动器 挂件
activate widget 120=none,none,激活 数字时钟 挂件
activate widget 3=none,none,Activate Application Launcher Widget activate widget 3=none,none,Activate Application Launcher Widget
clear-history=none,,Clear Clipboard History clear-history=none,,清除剪贴板历史(L)
clipboard_action=Meta+Ctrl+X,Meta+Ctrl+X,Automatic Action Popup Menu clipboard_action=Meta+Ctrl+X,Meta+Ctrl+X,自动弹出操作菜单
cycle-panels=Meta+Alt+P,Meta+Alt+P,Move keyboard focus between panels cycle-panels=Meta+Alt+P,Meta+Alt+P,在面板之间移动键盘焦点
cycleNextAction=none,,Next History Item cycleNextAction=none,,下一条历史记录
cyclePrevAction=none,,Previous History Item cyclePrevAction=none,,上一条历史记录
manage activities=none,Meta+Q,Show Activity Switcher manage activities=none,Meta+Q,显示活动切换器
next activity=Meta+A,none,Walk through activities next activity=Meta+A,none,遍历活动
previous activity=Meta+Shift+A,none,Walk through activities (Reverse) previous activity=Meta+Shift+A,none,遍历活动 (反向)
repeat_action=none,,Manually Invoke Action on Current Clipboard repeat_action=none,,在当前剪贴板上手动执行操作
show dashboard=Ctrl+F12,Ctrl+F12,Show Desktop show dashboard=Ctrl+F12,Ctrl+F12,显示桌面
show-barcode=none,,Show Barcode show-barcode=none,,显示条形码(S)
show-on-mouse-pos=Meta+V,Meta+V,Show Clipboard Items at Mouse Position show-on-mouse-pos=Meta+V,Meta+V,在鼠标位置显示剪贴板项目
stop current activity=Meta+S,Meta+S,Stop Current Activity stop current activity=Meta+S,Meta+S,停止当前活动
switch to next activity=none,,Switch to Next Activity switch to next activity=none,,切换到下一个活动
switch to previous activity=none,,Switch to Previous Activity switch to previous activity=none,,切换到上一个活动
toggle do not disturb=none,,Toggle do not disturb toggle do not disturb=none,,切换勿扰模式
[services][kitty.desktop] [services][kitty.desktop]
_launch=Meta+R _launch=Meta+R
@ -314,8 +331,7 @@ _launch=Meta+F
_launch=none _launch=none
[services][org.kde.krunner.desktop] [services][org.kde.krunner.desktop]
RunClipboard=Alt+Shift+F2\tAlt+Space _launch=Alt+F2\tMeta+K\tSearch\tAlt+Space
_launch=Alt+F2\tSearch
[services][org.kde.kscreen.desktop] [services][org.kde.kscreen.desktop]
ShowOSD=Display ShowOSD=Display
@ -336,5 +352,5 @@ Toggle touch tool=Meta+Ctrl+T,Meta+Ctrl+T,Enable/Disable the Touch Tool
_k_friendly_name=Wacom Tablet _k_friendly_name=Wacom Tablet
[yakuake] [yakuake]
_k_friendly_name=Yakuake _k_friendly_name=Yakuake 下拉式终端
toggle-window-state=Meta+`,F12,Open/Retract Yakuake toggle-window-state=Meta+`,F12,展开/折叠 Yakuake 窗口

View file

@ -0,0 +1,19 @@
[org-telegram-desktop]
alt.n = macro(C-tab)
alt.e = C-S-tab
[wechat]
alt.n = A-down
alt.e = A-up
[qq]
alt.n = C-down
alt.e = C-up
alt.h = C-left
alt.i = enter
[zotero]
alt.n = pagedown
alt.e = pageup

View file

@ -0,0 +1,26 @@
# $XDG_CONFIG_HOME/neovide/config.toml
# ln -sf $DOTFILES/mac/neovide.toml $XDG_CONFIG_HOME/neovide/config.toml
# New-Item -ItemType SymbolicLink -Path $Env:XDG_CONFIG_HOME/neovide/config.toml -Value $DOTFILES\mac\neovide.toml (Mac)
# https://neovide.dev/config-file.html?highlight=toml#config-file
# 设置为 fork 默认后台运行,不会占用终端
fork = true
# frame = "full"
idle = true
maximized = false
# neovim-bin = "/opt/homebrew/bin/nvim"
frame = "transparent"
no-multigrid = false
srgb = false
tabs = true
theme = "auto"
title-hidden = true
vsync = true
wsl = false
[font]
normal = [
"Maple Mono NF CN",
"Iosevka Nerd Font",
"霞鹜文楷等宽",
] # Will use the bundled Fira Code Nerd Font by default
size = 14.0

View file

@ -0,0 +1,29 @@
* {
rosewater: #f5e0dc;
flamingo: #f2cdcd;
pink: #f5c2e7;
mauve: #cba6f7;
red: #f38ba8;
maroon: #eba0ac;
peach: #fab387;
yellow: #f9e2af;
green: #a6e3a1;
teal: #94e2d5;
sky: #89dceb;
sapphire: #74c7ec;
blue: #89b4fa;
lavender: #b4befe;
text: #cdd6f4;
subtext1: #bac2de;
subtext0: #a6adc8;
overlay2: #9399b2;
overlay1: #7f849c;
overlay0: #6c7086;
surface2: #585b70;
surface1: #45475a;
surface0: #313244;
base: #1e1e2e;
mantle: #181825;
crust: #11111b;
accent: @lavender;
}

View file

@ -0,0 +1,172 @@
@import "catppuccin-mocha"
* {
selected-active-foreground: @background;
lightfg: @text;
separatorcolor: @foreground;
urgent-foreground: @red;
alternate-urgent-background: @lightbg;
lightbg: @mantle;
background-color: transparent;
border-color: @foreground;
normal-background: @background;
selected-urgent-background: @red;
alternate-active-background: @lightbg;
spacing: 2;
alternate-normal-foreground: @foreground;
urgent-background: @background;
selected-normal-foreground: @lightbg;
active-foreground: @blue;
background: @base;
selected-active-background: @blue;
active-background: @background;
selected-normal-background: @pink;
alternate-normal-background: @lightbg;
foreground: @text;
selected-urgent-foreground: @background;
normal-foreground: @foreground;
alternate-urgent-foreground: @red;
alternate-active-foreground: @blue;
}
element {
padding: 1px ;
cursor: pointer;
spacing: 5px ;
border: 0;
}
element normal.normal {
background-color: @normal-background;
text-color: @normal-foreground;
}
element normal.urgent {
background-color: @urgent-background;
text-color: @urgent-foreground;
}
element normal.active {
background-color: @active-background;
text-color: @active-foreground;
}
element selected.normal {
background-color: @selected-normal-background;
text-color: @selected-normal-foreground;
}
element selected.urgent {
background-color: @selected-urgent-background;
text-color: @selected-urgent-foreground;
}
element selected.active {
background-color: @selected-active-background;
text-color: @selected-active-foreground;
}
element alternate.normal {
background-color: @alternate-normal-background;
text-color: @alternate-normal-foreground;
}
element alternate.urgent {
background-color: @alternate-urgent-background;
text-color: @alternate-urgent-foreground;
}
element alternate.active {
background-color: @alternate-active-background;
text-color: @alternate-active-foreground;
}
element-text {
background-color: transparent;
cursor: inherit;
highlight: inherit;
text-color: inherit;
}
element-icon {
background-color: transparent;
size: 1.0000em ;
cursor: inherit;
text-color: inherit;
}
window {
location: center;
border-radius: 10px;
padding: 5;
background-color: @background;
border: 1;
}
mainbox {
padding: 0;
border: 0;
}
message {
padding: 1px ;
border-color: @separatorcolor;
border: 2px dash 0px 0px ;
}
textbox {
text-color: @foreground;
}
listview {
padding: 2px 0px 0px ;
scrollbar: true;
border-color: @separatorcolor;
spacing: 2px ;
fixed-height: 0;
border: 2px dash 0px 0px ;
}
scrollbar {
width: 4px ;
padding: 0;
handle-width: 8px ;
border: 0;
handle-color: @normal-foreground;
}
sidebar {
border-color: @separatorcolor;
border: 2px dash 0px 0px ;
}
button {
cursor: pointer;
spacing: 0;
text-color: @normal-foreground;
}
button selected {
background-color: @selected-normal-background;
text-color: @selected-normal-foreground;
}
num-filtered-rows {
expand: false;
text-color: Gray;
}
num-rows {
expand: false;
text-color: Gray;
}
textbox-num-sep {
expand: false;
str: "/";
text-color: Gray;
}
inputbar {
padding: 1px ;
spacing: 0px ;
text-color: @normal-foreground;
children: [ "prompt","textbox-prompt-colon","entry","num-filtered-rows","textbox-num-sep","num-rows","case-indicator" ];
}
case-indicator {
spacing: 0;
text-color: @normal-foreground;
}
entry {
text-color: @normal-foreground;
cursor: text;
spacing: 0;
placeholder-color: Gray;
placeholder: "搜索...";
}
prompt {
spacing: 0;
text-color: @accent;
}
textbox-prompt-colon {
margin: 0px 0.3000em 0.0000em 0.0000em ;
expand: false;
str: ">";
text-color: inherit;
}

View file

@ -0,0 +1,37 @@
* {
bg: #faf4ed;
cur: #fffaf3;
fgd: #575279;
cmt: #9893a5;
cya: #56949f;
grn: #286983;
ora: #d7827e;
pur: #907aa9;
red: #b4637a;
yel: #ea9d34;
alt-fgd: #faf4ed;
font: "Cartograph CF 12";
foreground: @fgd;
background: @bg;
active-background: @grn;
active-foreground: @alt-fgd;
urgent-background: @red;
urgent-foreground: @alt-fgd;
selected-background: @active-background;
selected-foreground: @active-foreground;
selected-urgent-background: @urgent-background;
selected-urgent-foreground: @urgent-foreground;
selected-active-background: @active-background;
selected-active-foreground: @active-foreground;
separatorcolor: @active-background;
bordercolor: @ora;
}

6
platforms/linux/swaylock Normal file
View file

@ -0,0 +1,6 @@
image=~/Pictures/Wallpaper/lock.png
ignore-empty-password
show-failed-attempts
show-keyboard-layout

View file

@ -0,0 +1,13 @@
[Unit]
Description=Emacs text editor
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/
[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
Environment=SSH_AUTH_SOCK=%t/keyring/ssh
Restart=on-failure
[Install]
WantedBy=default.target

View file

@ -0,0 +1,13 @@
[Unit]
Description=Keyd Application Specific Mapping
Documentation=man:keyd-application-mapper(1) https://github.com/rvaiya/keyd
[Service]
Type=forking
ExecStart=/usr/bin/keyd-application-mapper -d
ExecStop=pkill keyd-applicatio
Restart=on-failure
[Install]
WantedBy=default.target

View file

@ -0,0 +1,9 @@
# $DOTFILES/platforms/linux/user-dirs.dirs
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"

View file

@ -0,0 +1 @@
zh_CN

View file

@ -1,37 +0,0 @@
{
"include": "~/.config/waybar/modules",
"name": "main-bar",
"id": "main-bar",
"layer": "top",
"mode": "dock",
"exclusive": true,
"passthrough": false,
"position": "top",
"output": "DP-2",
"height": 32,
"width": "",
"spacing": 6,
"margin": 0,
"margin-top": 0,
"margin-bottom": 0,
"margin-left": 0,
"margin-right": 0,
"fixed-center": true,
"ipc": true,
"modules-left": [
"custom/menu",
"hyprland/workspaces"
],
// "modules-center": [
// "hyprland/window",
// "mpd"
// ],
"modules-right": [
"tray",
"pulseaudio",
"custom/weather",
"battery",
"clock",
"custom/power"
]
}

View file

@ -0,0 +1,35 @@
// -*- mode: jsonc -*-
{
// "layer": "top", // Waybar at top layer
// "position": "bottom", // Waybar position (top|bottom|left|right)
"include": [
"~/.config/waybar/modules/hyprland-workspace.jsonc",
"~/.config/waybar/modules/misc.jsonc"
],
"height": 30, // Waybar height (to be removed for auto height)
// "width": 1280, // Waybar width
"spacing": 4, // Gaps between modules (4px)
// Choose the order of the modules
"modules-left": [
"hyprland/workspaces",
"sway/mode",
"sway/scratchpad"
],
// "modules-center": [
// "hyprland/window"
// ],
"modules-right": [
"tray",
// "idle_inhibitor",
"pulseaudio",
"network",
// "power-profiles-daemon",
"cpu",
"memory",
"temperature",
"backlight",
// "hyprland/language",
"battery",
"clock"
],
}

View file

@ -1,149 +0,0 @@
// Waybar modules configuration
{
// waybar-backlight
"backlight": {
"interval": 2,
"align": 0,
"rotate": 0,
//"device": "amdgpu_bl0",
"format": "{icon} {percent}%",
"format-icons": [
"",
"",
"",
""
],
// Commands to execute on events
"on-click": "",
"on-click-middle": "",
"on-click-right": "",
"on-update": "",
"on-scroll-up": "light -A 5%",
"on-scroll-down": "light -U 5%",
"smooth-scrolling-threshold": 1
},
"hyprland/workspaces": {
"format": "{icon} {windows}",
"format-window-separator": " ",
"window-rewrite-default": "",
"window-rewrite": {
"title<.*youtube.*>": "",
"class<firefox>": "",
"class<.*wezterm>": "",
"class<kitty>": "",
"class<wofi>": "󱓞",
"class<firefox> title<.*github.*>": "",
"class<Vivaldi.*>": "󰰬",
"obsidian": "󱓩",
"foot": "",
"Cider": "",
"class<org.kde.dolphin>": "",
"code": "󰨞",
"class<.*telegram.*>": "",
"discord": "",
"neovide": "",
"class<org.kde.okular>": "",
"class<.*wechat.*>": "",
"QQ": "",
"class<Tor Browser>": "",
"Zotero": "",
"class<ticktick>": "",
"class<net.ankiweb.Anki>": "",
}
},
// waybar-battery
"battery": {
"interval": 60,
"align": 0,
"rotate": 0,
//"bat": "BAT1",
//"adapter": "ACAD",
"full-at": 100,
"design-capacity": false,
"states": {
"good": 95,
"warning": 30,
"critical": 15
},
"format": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-full": "{icon} Full",
//"format-good": "",
"format-alt": "{icon} {time}",
"format-icons": [
"",
"",
"",
"",
""
],
"format-time": "{H}h {M}min",
"tooltip": true
},
// waybar-clock
"clock": {
"interval": 1,
"align": 0,
"rotate": 0,
"tooltip-format": "<big>{:%B %Y}</big>\n<tt><small>{calendar}</small></tt>",
"format": " {:%H:%M:%S}",
"format-alt": " {:%a %b %d, %G}"
},
// waybar-cpu
"cpu": {
"interval": 5,
"format": " {usage}%"
},
// waybar-custom
"custom/menu": {
"format": "󰣇 ",
"tooltip": false,
"on-click": "wofi"
},
"custom/power": {
"format": "⏻",
"tooltip": false,
"on-click": "wlogout"
},
// weather-custom
"custom/weather": {
"format": "{}",
"format-alt": "{alt}: {}",
"format-alt-click": "click-right",
"interval": 1800,
"return-type": "json",
"exec": "~/.config/hypr/scripts/weather.sh",
"exec-if": "ping wttr.in -c1"
},
// waybar-tray
"tray": {
"icon-size": 16,
"spacing": 10
},
"pulseaudio": {
"format": "{volume}% {icon}",
"format-bluetooth": "{volume}% {icon}",
"format-muted": "",
"format-icons": {
"alsa_output.pci-0000_00_1f.3.analog-stereo": "",
"alsa_output.pci-0000_00_1f.3.analog-stereo-muted": "",
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"phone-muted": "",
"portable": "",
"car": "",
"default": [
"",
""
]
},
"scroll-step": 1,
"on-click": "pavucontrol",
"ignored-sinks": [
"Easy Effects Sink"
]
}
}

View file

@ -0,0 +1,123 @@
{
"hyprland/workspaces": {
"disable-scroll": true,
"all-outputs": true,
"warp-on-scroll": false,
"sort-by-number": true,
"show-special": false,
"on-click": "activate",
"on-scroll-up": "hyprctl dispatch workspace e+1",
"on-scroll-down": "hyprctl dispatch workspace e-1",
"persistent-workspaces": {
"*": 5
},
"format-icons": {
"1": "一",
"2": "二",
"3": "三",
"4": "四",
"5": "五",
"6": "六",
"7": "七",
"8": "八",
"9": "九",
"10": "十",
"active": "",
"default": "",
},
"format": "{icon} {windows}",
"format-window-separator": " ",
"window-rewrite-default": " ",
"window-rewrite": {
"title<.*amazon.*>": " ",
"title<.*reddit.*>": " ",
"class<firefox|org.mozilla.firefox|librewolf|floorp|mercury-browser|[Cc]achy-browser>": " ",
"class<zen>": "󰰷 ",
"class<Vivaldi-stable>": "󰰬 ",
"class<waterfox|waterfox-bin>": " ",
"class<microsoft-edge>": " ",
"class<Chromium|Thorium|[Cc]hrome>": " ",
"class<brave-browser>": "🦁 ",
"class<tor browser>": " ",
"class<firefox-developer-edition>": "🦊 ",
"class<kitty|konsole>": " ",
"class<kitty-dropterm>": " ",
"class<com.mitchellh.ghostty>": " ",
"class<org.wezfurlong.wezterm>": " ",
"class<[Tt]hunderbird|[Tt]hunderbird-esr>": " ",
"class<eu.betterbird.Betterbird>": " ",
"title<.*gmail.*>": "󰊫 ",
"class<[Tt]elegram-desktop|org.telegram.desktop|io.github.tdesktop_x64.TDesktop>": " ",
"class<discord|[Ww]ebcord|Vesktop>": " ",
"title<.*whatsapp.*>": " ",
"title<.*zapzap.*>": " ",
"title<.*messenger.*>": " ",
"title<.*facebook.*>": " ",
"title<.*reddit.*>": " ",
"title<.*ChatGPT.*>": "󰚩 ",
"title<.*deepseek.*>": "󰚩 ",
"title<.*qwen.*>": "󰚩 ",
"class<subl>": "󰅳 ",
"class<slack>": " ",
"class<mpv>": " ",
"class<celluloid|Zoom>": " ",
"class<Cider>": "󰎆 ",
"title<.*Picture-in-Picture.*>": " ",
"title<.*youtube.*>": " ",
"class<vlc>": "󰕼 ",
"title<.*cmus.*>": " ",
"class<[Ss]potify>": " ",
"class<virt-manager>": " ",
"class<.virt-manager-wrapped>": " ",
"class<virtualbox manager>": "💽 ",
"title<virtualbox>": "💽 ",
"class<remmina>": "🖥️ ",
"class<Code|code-url-handler|code-oss|codium|codium-url-handler|VSCodium>": "󰨞 ",
"class<dev.zed.Zed>": "󰵁",
"class<codeblocks>": "󰅩 ",
"title<.*github.*>": " ",
"class<mousepad>": " ",
"class<libreoffice-writer>": " ",
"class<libreoffice-startcenter>": "󰏆 ",
"class<libreoffice-calc>": " ",
// "title<.*nvim ~.*>": " ",
"title<.*vim.*>": " ",
"title<.*nvim.*>": " ",
"class<neovide>": " ",
"class<emacs>": " ",
"class<CherryStudio>": "🍒",
"title<.*figma.*>": " ",
"title<.*jira.*>": " ",
"class<jetbrains-idea>": " ",
"class<obsidian>": " ",
"class<Zotero>": "󱉟 ",
"class<com.obsproject.Studio>": " ",
"class<polkit-gnome-authentication-agent-1>": "󰒃 ",
"class<nwg-look>": " ",
"class<[Pp]avucontrol|org.pulseaudio.pavucontrol>": "󱡫 ",
"class<steam>": " ",
"class<thunar|nemo|dolphin>": "󰝰 ",
"class<Gparted>":"",
"class<gimp>": " ",
"class<emulator>": "📱 ",
"class<android-studio>": " ",
"class<org.pipewire.Helvum>": "󰓃",
"class<localsend>":"",
"class<PrusaSlicer|UltiMaker-Cura|OrcaSlicer>": "󰹛",
}
}
}

View file

@ -0,0 +1,187 @@
{
"keyboard-state": {
"numlock": true,
"capslock": true,
"format": "{name} {icon}",
"format-icons": {
"locked": "",
"unlocked": ""
}
},
"sway/mode": {
"format": "<span style=\"italic\">{}</span>"
},
"sway/scratchpad": {
"format": "{icon} {count}",
"show-empty": false,
"format-icons": [
"",
""
],
"tooltip": true,
"tooltip-format": "{app}: {title}"
},
"mpd": {
"format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ",
"format-disconnected": "Disconnected ",
"format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ",
"unknown-tag": "N/A",
"interval": 5,
"consume-icons": {
"on": " "
},
"random-icons": {
"off": "<span color=\"#f53c3c\"></span> ",
"on": " "
},
"repeat-icons": {
"on": " "
},
"single-icons": {
"on": "1 "
},
"state-icons": {
"paused": "",
"playing": ""
},
"tooltip-format": "MPD (connected)",
"tooltip-format-disconnected": "MPD (disconnected)"
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "",
"deactivated": ""
}
},
"tray": {
// "icon-size": 21,
"spacing": 10
},
"clock": {
// "timezone": "America/New_York",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"format-alt": "{:%Y-%m-%d}"
},
"cpu": {
"format": "{usage}% ",
"tooltip": false
},
"memory": {
"format": "{}% "
},
"temperature": {
// "thermal-zone": 2,
// "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
"critical-threshold": 80,
// "format-critical": "{temperatureC}°C {icon}",
"format": "{temperatureC}°C {icon}",
"format-icons": [
"",
"",
""
]
},
"backlight": {
// "device": "acpi_video1",
"format": "{percent}% {icon}",
"format-icons": [
"🌑",
"🌘",
"🌗",
"🌖",
"🌕"
]
},
"battery": {
"states": {
// "good": 95,
"warning": 30,
"critical": 15
},
"format": "{capacity}% {icon}",
"format-full": "{capacity}% {icon}",
"format-charging": "{capacity}% ",
"format-plugged": "{capacity}% ",
"format-alt": "{time} {icon}",
// "format-good": "", // An empty format will hide the module
// "format-full": "",
"format-icons": [
"",
"",
"",
"",
""
]
},
"battery#bat2": {
"bat": "BAT2"
},
"power-profiles-daemon": {
"format": "{icon}",
"tooltip-format": "Power profile: {profile}\nDriver: {driver}",
"tooltip": true,
"format-icons": {
"default": "",
"performance": "",
"balanced": "",
"power-saver": ""
}
},
"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}"
},
"pulseaudio": {
// "scroll-step": 1, // %, can be a float
"format": "{volume}% {icon} {format_source}",
"format-bluetooth": "{volume}% {icon} {format_source}",
"format-bluetooth-muted": " {icon} {format_source}",
"format-muted": " {format_source}",
"format-source": "{volume}% ",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": [
"",
"",
""
]
},
"on-click": "pavucontrol"
},
"custom/media": {
"format": "{icon} {}",
"return-type": "json",
"max-length": 40,
"format-icons": {
"spotify": "",
"default": "🎜"
},
"escape": true,
"exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder
// "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name
},
"custom/power": {
"format": "⏻ ",
"tooltip": false,
"menu": "on-click",
"menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder
"menu-actions": {
"shutdown": "shutdown",
"reboot": "reboot",
"suspend": "systemctl suspend",
"hibernate": "systemctl hibernate"
}
}
}

View file

@ -1,184 +1,354 @@
/** ********** Fonts ********** **/ @define-color rosewater #f5e0dc;
@define-color flamingo #f2cdcd;
@define-color pink #f5c2e7;
@define-color mauve #cba6f7;
@define-color red #f38ba8;
@define-color maroon #eba0ac;
@define-color peach #fab387;
@define-color yellow #f9e2af;
@define-color green #a6e3a1;
@define-color teal #94e2d5;
@define-color sky #89dceb;
@define-color sapphire #74c7ec;
@define-color blue #89b4fa;
@define-color lavender #b4befe;
@define-color text #cdd6f4;
@define-color subtext1 #bac2de;
@define-color subtext0 #a6adc8;
@define-color overlay2 #9399b2;
@define-color overlay1 #7f849c;
@define-color overlay0 #6c7086;
@define-color surface2 #585b70;
@define-color surface1 #45475a;
@define-color surface0 #313244;
@define-color base #1e1e2e;
@define-color mantle #181825;
@define-color crust #11111b;*
* { * {
font-family: "JetBrains Mono", "Iosevka Nerd Font", archcraft, sans-serif; font-family: 'Maple Mono NF SC', 'Noto Sans Mono', 'Font Awesome 6 Free', 'Font Awesome 6 Brands', monospace;
font-size: 12px; font-size: 13px;
} }
/** ********** Waybar Window ********** **/
window#waybar { window#waybar {
background-color: #1e1e2e; /* background-color: rgba(43, 48, 59, 0.5); */
color: #1e1e2e; /* border-bottom: 3px solid rgba(100, 114, 125, 0.5); */
border-bottom: 2px solid #313244; background-color: @base;
color: @text;
transition-property: background-color; transition-property: background-color;
transition-duration: .5s; transition-duration: .5s;
} }
window#waybar.hidden { window#waybar.hidden {
opacity: 0.5; opacity: 0.2;
} }
/** ********** Backlight ********** **/ /*
#backlight { window#waybar.empty {
background-color: #cba6f7; background-color: transparent;
}
window#waybar.solo {
background-color: #FFFFFF;
}
*/
window#waybar.termite {
background-color: #3F3F3F;
}
window#waybar.chromium {
background-color: #000000;
border: none;
}
button {
/* Use box-shadow instead of border so the text isn't offset */
box-shadow: inset 0 -3px transparent;
/* Avoid rounded borders under each button name */
border: none;
border-radius: 0;
}
/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
button:hover {
background: inherit;
box-shadow: inset 0 -3px #ffffff;
}
/* you can set a style on hover for any module like this */
#pulseaudio:hover {
background-color: @lavender;
}
#workspaces button {
padding: 0 5px;
background-color: transparent;
color: #ffffff;
}
#workspaces button:hover {
background: rgba(0, 0, 0, 0.2);
}
#workspaces button.focused {
background-color: #64727D;
box-shadow: inset 0 -3px #ffffff;
}
#workspaces button.urgent {
background-color: #eb4d4b;
}
#mode {
background-color: #64727D;
box-shadow: inset 0 -3px #ffffff;
}
#clock,
#battery,
#cpu,
#memory,
#disk,
#temperature,
#backlight,
#network,
#pulseaudio,
#wireplumber,
#custom-media,
#tray,
#mode,
#idle_inhibitor,
#scratchpad,
#power-profiles-daemon,
#mpd {
padding: 0 10px;
color: #ffffff;
}
#window,
#workspaces {
margin: 0 4px;
}
/* If workspaces is the leftmost module, omit left margin */
.modules-left > widget:first-child > #workspaces {
margin-left: 0;
}
/* If workspaces is the rightmost module, omit right margin */
.modules-right > widget:last-child > #workspaces {
margin-right: 0;
}
#clock {
background-color: #64727D;
} }
/** ********** Battery ********** **/
#battery { #battery {
background-color: #f9e2af; background-color: #ffffff;
color: #000000;
} }
#battery.charging { #battery.charging, #battery.plugged {
} color: #ffffff;
background-color: #26A65B;
#battery.plugged {
} }
@keyframes blink { @keyframes blink {
to { to {
background-color: #ffffff;
color: #000000; color: #000000;
} }
} }
/* Using steps() instead of linear as a timing function to limit cpu usage */
#battery.critical:not(.charging) { #battery.critical:not(.charging) {
background-color: #f38ba8; background-color: #f53c3c;
color: #f38ba8; color: #ffffff;
animation-name: blink; animation-name: blink;
animation-duration: 0.5s; animation-duration: 0.5s;
animation-timing-function: linear; animation-timing-function: steps(12);
animation-iteration-count: infinite; animation-iteration-count: infinite;
animation-direction: alternate; animation-direction: alternate;
} }
/** ********** Clock ********** **/ #power-profiles-daemon {
#clock { padding-right: 15px;
background-color: #a6e3a1; }
#power-profiles-daemon.performance {
background-color: #f53c3c;
color: #ffffff;
}
#power-profiles-daemon.balanced {
background-color: #2980b9;
color: #ffffff;
}
#power-profiles-daemon.power-saver {
background-color: #2ecc71;
color: #000000;
}
label:focus {
background-color: #000000;
} }
/** ********** CPU ********** **/
#cpu { #cpu {
background-color: #89dceb; background-color: @green;
color: #000000;
} }
/** ********** Memory ********** **/
#memory { #memory {
background-color: #eba0ac; background-color: @mauve;
} }
/** ********** Disk ********** **/
#disk { #disk {
background-color: #b4befe; background-color: #964B00;
} }
/** ********** Tray ********** **/ #backlight {
#tray { background-color: #90b1b1;
background-color: #cdd6f4;
} }
#network {
background-color: @blue;
}
#network.disconnected {
background-color: #f53c3c;
}
#pulseaudio {
background-color: @yellow;
color: #000000;
}
#pulseaudio.muted {
background-color: #90b1b1;
color: #2a5c45;
}
#wireplumber {
background-color: #fff0f5;
color: #000000;
}
#wireplumber.muted {
background-color: #f53c3c;
}
#custom-media {
background-color: #66cc99;
color: #2a5c45;
min-width: 100px;
}
#custom-media.custom-spotify {
background-color: #66cc99;
}
#custom-media.custom-vlc {
background-color: #ffa000;
}
#temperature {
background-color: @peach;
}
#temperature.critical {
background-color: #eb4d4b;
}
#tray {
background-color: @blue;
}
#tray > .passive { #tray > .passive {
-gtk-icon-effect: dim; -gtk-icon-effect: dim;
} }
#tray > .needs-attention { #tray > .needs-attention {
-gtk-icon-effect: highlight; -gtk-icon-effect: highlight;
} background-color: #eb4d4b;
#tray > .active { }
#idle_inhibitor {
background-color: #2d3436;
}
#idle_inhibitor.activated {
background-color: #ecf0f1;
color: #2d3436;
} }
/** ********** MPD ********** **/
#mpd { #mpd {
background-color: #94e2d5; background-color: #66cc99;
color: #2a5c45;
} }
#mpd.disconnected { #mpd.disconnected {
background-color: #f38ba8; background-color: #f53c3c;
} }
#mpd.stopped { #mpd.stopped {
background-color: #f5c2e7; background-color: #90b1b1;
}
#mpd.playing {
background-color: #74c7ec;
} }
#mpd.paused { #mpd.paused {
background-color: #51a37a;
} }
/** ********** Pulseaudio ********** **/ #language {
#pulseaudio { background: #00b093;
background-color: #fab387; color: #740864;
padding: 0 5px;
margin: 0 5px;
min-width: 16px;
} }
#pulseaudio.bluetooth { #keyboard-state {
background-color: #f5c2e7; background: #97e1ad;
} color: #000000;
#pulseaudio.muted { padding: 0 0px;
background-color: #313244; margin: 0 5px;
color: #cdd6f4; min-width: 16px;
} }
/** ********** Network ********** **/ #keyboard-state > label {
#network { padding: 0 5px;
background-color: #89b4fa;
} }
#network.disconnected,#network.disabled { #keyboard-state > label.locked {
background-color: #313244; background: rgba(0, 0, 0, 0.2);
color: #cdd6f4;
}
#network.linked {
}
#network.ethernet {
}
#network.wifi {
} }
/** ********** Custom ********** **/ #scratchpad {
#custom-menu, #custom-power, #custom-weather, #custom-updater { background: rgba(0, 0, 0, 0.2);
border-radius: 4px;
margin: 6px 0px;
padding: 2px 8px;
} }
#custom-menu { #scratchpad.empty {
background-color: #f5c2e7; background-color: transparent;
margin-left: 6px;
padding: 2px 6px;
font-size: 16px;
} }
#custom-power { #privacy {
background-color: #f38ba8; padding: 0;
margin-right: 6px;
padding: 2px 8px;
font-size: 16px;
} }
#custom-updater { #privacy-item {
background-color: #e6ed7b; padding: 0 5px;
margin-right: 6px; color: white;
padding: 2px 8px;
font-size: 12px;
} }
#custom-weather { #privacy-item.screenshare {
background-color: #cba6f7; background-color: #cf5700;
margin-right: 6px;
padding: 2px 8px;
font-size: 12px;
} }
/** Common style **/ #privacy-item.audio-in {
#backlight, background-color: #1ca000;
#battery, }
#clock,
#cpu, #privacy-item.audio-out {
#disk, background-color: #0069d4;
#mode,
#memory,
#mpd,
#tray,
#pulseaudio,
#network {
border-radius: 4px;
margin: 6px 0px;
padding: 2px 8px;
} }

View file

@ -8,12 +8,31 @@ Works for Windows, Linux and MacOS.
** Setup ** Setup
*** GNU/Linux and macOS
*** From Scratch (Linux/MacOS)
#+begin_src shell #+begin_src shell
curl https://raw.githubusercontent.com/js0ny/dotfiles/refs/heads/master/bootstrap/setup.sh -o setup.sh && chmod u+x setup.sh && ./setup.sh curl https://raw.githubusercontent.com/js0ny/dotfiles/refs/heads/master/bootstrap/setup.sh -o setup.sh && chmod u+x setup.sh && ./setup.sh
#+end_src #+end_src
*** Via =just= script
Make sure you have =just= installed
#+begin_src shell
which just
#+end_src
Then run
#+begin_src shell
just
#+end_src
This will list all available tasks.
All the just scripts are in =Justfile= and under =.just.d/= directory.
** Structure ** Structure
#+begin_src shell #+begin_src shell

View file

@ -5,6 +5,8 @@
# ln -sf $DOTFILES/tools/bash/bashrc ~/.bashrc # ln -sf $DOTFILES/tools/bash/bashrc ~/.bashrc
export DOTFILES=$HOME/.dotfiles export DOTFILES=$HOME/.dotfiles
# Force to choose English font name
export LC_CTYPE=en_GB.UTF-8
if [ -n "$WSL_DISTRO_NAME" ]; then if [ -n "$WSL_DISTRO_NAME" ]; then
alias clip="clip.exe" alias clip="clip.exe"

View file

@ -42,8 +42,11 @@ minimal_path=(
"/usr/local/sbin" "/usr/local/sbin"
"$HOME/.local/bin" "$HOME/.local/bin"
"$HOME/.local/sbin" "$HOME/.local/sbin"
"$HOME/.local/scripts"
) )
export INPUTRC="$XDG_CONFIG_HOME"/readline/inputrc
for p in "${minimal_path[@]}"; do for p in "${minimal_path[@]}"; do
pathadd "$p" pathadd "$p"
done done

View file

@ -8,9 +8,9 @@
# Set XDG Base Directory Path # Set XDG Base Directory Path
export XDG_CONFIG_HOME="$HOME/.config" export XDG_CONFIG_HOME="$HOME/.config"
export XDG_CACHE_HOME="~/.cache" export XDG_CACHE_HOME="$HOME/.cache"
export XDG_DATA_HOME="~/.local/share" export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="~/.local/state" export XDG_STATE_HOME="$HOME/.local/state"
export XDG_RUNTIME_DIR="/run/user/$(id -u)" export XDG_RUNTIME_DIR="/run/user/$(id -u)"
# Source user's XDG-compliant Bash configs # Source user's XDG-compliant Bash configs

View file

@ -341,6 +341,16 @@ mapkey("yY", "yank link without parameter", function () {
Clipboard.write(url.origin + url.pathname); Clipboard.write(url.origin + url.pathname);
}); });
unmap("yma")
unmap("ymc")
unmap("ymv")
map("ym", "yank link as markdown", function () {
const url = new URL(window.location.href);
const title = document.title;
Clipboard.write(`[${title}](${url.origin + url.pathname})`);
});
// #region bilibili.com // #region bilibili.com
mapkey( mapkey(
",n", ",n",

View file

@ -22,20 +22,20 @@
;; accept. For example: ;; accept. For example:
;; ;;
;; https://emacs-china.org/t/doom-emacs/23513/13 ;; https://emacs-china.org/t/doom-emacs/23513/13
(setq doom-font (font-spec :family "Iosevka Nerd Font Propo" :size 14) (setq doom-font (font-spec :family "Sarasa Mono SC Nerd Font" :size 14)
doom-serif-font doom-font doom-serif-font doom-font
doom-symbol-font (font-spec :family "LXGW WenKai Mono") doom-symbol-font (font-spec :family "Sarasa Mono SC Nerd Font")
doom-variable-pitch-font (font-spec :family "LXGW WenKai Mono" :weight 'extra-bold)) doom-variable-pitch-font (font-spec :family "Sarasa Mono SC Nerd Font" :weight 'extra-bold))
;; 如果不把这玩意设置为 nil, 会默认去用 fontset-default 来展示, 配置无效 ;; 如果不把这玩意设置为 nil, 会默认去用 fontset-default 来展示, 配置无效
(setq use-default-font-for-symbols nil) (setq use-default-font-for-symbols nil)
;; Doom 的字体加载顺序问题, 如果不设定这个 hook, 配置会被覆盖失效 ;; Doom 的字体加载顺序问题, 如果不设定这个 hook, 配置会被覆盖失效
(add-hook! 'after-setting-font-hook ;;(add-hook! 'after-setting-font-hook
(set-fontset-font t 'latin (font-spec :family "Iosevka Nerd Font Propo")) ;; (set-fontset-font t 'latin (font-spec :family "Iosevka Nerd Font Propo"))
(set-fontset-font t 'symbol (font-spec :family "Symbola")) ;; (set-fontset-font t 'symbol (font-spec :family "Symbola"))
(set-fontset-font t 'mathematical (font-spec :family "Symbola")) ;; (set-fontset-font t 'mathematical (font-spec :family "Symbola"))
(set-fontset-font t 'emoji (font-spec :family "Symbola"))) ;; (set-fontset-font t 'emoji (font-spec :family "Symbola")))
;; (dolist (charset '(kana han cjk-misc bopomofo)) ;; (dolist (charset '(kana han cjk-misc bopomofo))
;; (set-fontset-font t charset (font-spec :family "LXGW WenKai Mono" :size 16))) ;; (set-fontset-font t charset (font-spec :family "LXGW WenKai Mono" :size 16)))
@ -133,10 +133,12 @@
(if (eq system-type 'gnu/linux) (if (eq system-type 'gnu/linux)
(use-package! rime (use-package! rime
:config :custom
(setq default-input-method "rime") (rime-user-data-dir (expand-file-name "emacs-rime" (getenv "XDG_CONFIG_HOME")))
(add-hook! (org-mode markdown-mode) (activate-input-method default-input-method)) ; (rime-share-data-dir "~/.local/share/fcitx5/rime")
(setq rime-user-data-dir (expand-file-name "emacs-rime" (getenv "XDG_CONFIG_HOME"))) (default-input-method "rime")
;; :config
;; (add-hook! (org-mode markdown-mode) (activate-input-method default-input-method))
)) ))
(load! "calendar.el") (load! "calendar.el")

View file

@ -15,7 +15,7 @@
(save-excursion (insert char ?\u200B))) (save-excursion (insert char ?\u200B)))
;; Directory ;; Directory
(setq org-archive-location "~/OrgFiles/archive/%s_archive::") (setq org-archive-location "~/OrgFiles/.archive/%s_archive::")
(setq org-default-notes-file "~/OrgFiles/tasks/inbox.org") (setq org-default-notes-file "~/OrgFiles/tasks/inbox.org")
;; Initial Visibility ;; Initial Visibility

View file

@ -26,3 +26,5 @@ bookmarks
.cache .cache
eln-cache eln-cache
org-persist org-persist
local.el

View file

@ -44,8 +44,10 @@
(global-evil-leader-mode) (global-evil-leader-mode)
(evil-leader/set-leader "<SPC>") (evil-leader/set-leader "<SPC>")
(evil-leader/set-key (evil-leader/set-key
"b" 'buffer-menu "ft" 'treemacs
"ft" 'treemacs)) "fc" '(dired user-emacs-directory)
"b" 'buffer-menu
))
;; Evil Commentary: Use gc<action> to toggle comments ;; Evil Commentary: Use gc<action> to toggle comments
(use-package evil-commentary (use-package evil-commentary

View file

@ -22,6 +22,10 @@
(org-directory "~/OrgFiles/") (org-directory "~/OrgFiles/")
(org-agenda-files (list (concat org-directory "tasks/"))) (org-agenda-files (list (concat org-directory "tasks/")))
(org-persist-directory (expand-file-name "org-persist" user-emacs-data)) (org-persist-directory (expand-file-name "org-persist" user-emacs-data))
(org-archive-location "~/OrgFiles/.archive/%s_archive::")
(org-default-notes-file "~/OrgFiles/tasks/inbox.org")
(org-startup-folded "show2levels")
(org-log-into-drawer "LOGBOOK")
(org-pretty-entities t) (org-pretty-entities t)
(org-src-fontify-natively t) (org-src-fontify-natively t)
(org-src-tab-acts-natively t) ; Use TAB to indent inside source block (org-src-tab-acts-natively t) ; Use TAB to indent inside source block
@ -94,13 +98,13 @@
;; For CJK users ;; For CJK users
;; Insert zero width space around the emphasis symbols, this might be useful for ;; Insert zero width space around the emphasis symbols, this might be useful for
;; languages that does not rely on space ;; languages that does not rely on space
(defun my/insert-emphasis-with-zws (char) (defun js0ny/insert-emphasis-with-zws (char)
(interactive "c") (interactive "c")
(insert ?\u200B char) (insert ?\u200B char)
(save-excursion (insert char ?\u200B))) (save-excursion (insert char ?\u200B)))
(global-set-key (kbd "C-c b") (lambda () (interactive) (my/insert-emphasis-with-zws ?*))) (global-set-key (kbd "C-c b") (lambda () (interactive) (js0ny/insert-emphasis-with-zws ?*)))
(global-set-key (kbd "C-c i") (lambda () (interactive) (my/insert-emphasis-with-zws ?/))) (global-set-key (kbd "C-c i") (lambda () (interactive) (js0ny/insert-emphasis-with-zws ?/)))
;; Pomodoro for org clock ;; Pomodoro for org clock
(use-package org-pomodoro) (use-package org-pomodoro)
@ -209,7 +213,7 @@
;; Integrate Emacs Timer with System Notifications ;; Integrate Emacs Timer with System Notifications
;; 定义通知函数 ;; 定义通知函数
(defun my/org-clock-notification (title message &optional icon) (defun js0ny/org-clock-notification (title message &optional icon)
"发送一个系统通知" "发送一个系统通知"
(alert message (alert message
:title title :title title
@ -217,7 +221,7 @@
:category 'org-clock)) :category 'org-clock))
;; 添加定时器检查函数 ;; 添加定时器检查函数
(defun my/org-clock-check-timer () (defun js0ny/org-clock-check-timer ()
"检查当前正在运行的 clock 是否到期" "检查当前正在运行的 clock 是否到期"
(when (org-clocking-p) (when (org-clocking-p)
(let* ((clocked-time (org-clock-get-clocked-time)) (let* ((clocked-time (org-clock-get-clocked-time))
@ -226,45 +230,24 @@
"0"))) "0")))
(remaining (- effort clocked-time))) (remaining (- effort clocked-time)))
(when (and (> effort 0) (<= remaining 0)) (when (and (> effort 0) (<= remaining 0))
(my/org-clock-notification (js0ny/org-clock-notification
"Org Clock 提醒" "Org Clock 提醒"
(format "任务 '%s' 的预计时间已到!" (format "任务 '%s' 的预计时间已到!"
(org-clock-get-clock-string))))))) (org-clock-get-clock-string)))))))
;; 设置定时器,每分钟检查一次 ;; 设置定时器,每分钟检查一次
(run-with-timer 0 60 #'my/org-clock-check-timer) (run-with-timer 0 60 #'js0ny/org-clock-check-timer)
;; 在 org-clock-in-hook 中添加检查 ;; 在 org-clock-in-hook 中添加检查
(add-hook 'org-clock-in-hook (add-hook 'org-clock-in-hook
(lambda () (lambda ()
(let ((effort (org-entry-get (point) "Effort"))) (let ((effort (org-entry-get (point) "Effort")))
(when effort (when effort
(my/org-clock-notification (js0ny/org-clock-notification
"开始计时" "开始计时"
(format "开始计时任务: %s\n预计用时: %s" (format "开始计时任务: %s\n预计用时: %s"
(org-get-heading t t t t) (org-get-heading t t t t)
effort)))))) effort))))))
(use-package org-roam
:ensure t
:custom
(org-roam-directory (file-truename (concat org-directory "roam")))
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n g" . org-roam-graph)
("C-c n i" . org-roam-node-insert)
("C-c n c" . org-roam-capture)
;; Dailies
("C-c n j" . org-roam-dailies-capture-today))
:config
;; If you're using a vertical completion framework, you might want a more informative completion interface
(setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
(setq org-roam-db-location (expand-file-name "org-roam.db" user-emacs-data))
(org-roam-db-autosync-mode)
;; If using org-roam-protocol
(require 'org-roam-protocol))
(provide 'init-org) (provide 'init-org)

View file

@ -1,3 +1,4 @@
fish_variables fish_variables
completions completions
functions/br.fish functions/br.fish
functions/dotenv.fish

View file

@ -23,13 +23,14 @@ else
set -gx XDG_RUNTIME_DIR /run/user/(id -u) set -gx XDG_RUNTIME_DIR /run/user/(id -u)
end end
set -gx GHCUP_USE_XDG_DIRS 1
set -gx PAGER "less -R" set -gx PAGER "less -R"
set -gx EDITOR nvim set -gx EDITOR nvim
set -gx VISUAL nvim set -gx VISUAL nvim
# Minimal PATH for early commands # Minimal PATH for early commands
for dir in /usr/local/bin /usr/bin /bin /usr/sbin /sbin "$HOME/.local/bin" for dir in /usr/local/bin /usr/bin /bin /usr/sbin /sbin "$HOME/.local/bin" /opt/share/bin
if test -d "$dir" -a ! -L "$dir" if test -d "$dir" -a ! -L "$dir"
fish_add_path "$dir" fish_add_path "$dir"
end end

View file

@ -141,6 +141,16 @@ if command -v apt > /dev/null
abbr --add aptl "apt list --installed" abbr --add aptl "apt list --installed"
end end
if command -v dnf > /dev/null
abbr --add dnf "sudo dnf"
abbr --add dnfi "sudo dnf install"
abbr --add dnfr "sudo dnf remove"
abbr --add dnfu "sudo dnf update"
abbr --add dnfs "dnf search"
abbr --add dnfl "dnf list --installed"
end
if test "$TERM" = "xterm-ghostty" -o "$TERM" = "xterm-kitty" if test "$TERM" = "xterm-ghostty" -o "$TERM" = "xterm-kitty"
abbr --add icat "kitten icat" abbr --add icat "kitten icat"
else if test "$TERM_PROGRAM" = "WezTerm" else if test "$TERM_PROGRAM" = "WezTerm"

View file

@ -6,6 +6,7 @@
## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf ## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf
## blurb: Soothing pastel theme for the high-spirited! ## blurb: Soothing pastel theme for the high-spirited!
# Accent: Lavender #B4BEFE
# The basic colors # The basic colors
@ -32,16 +33,16 @@ macos_titlebar_color system
# Tab bar colors # Tab bar colors
active_tab_foreground #11111B active_tab_foreground #11111B
active_tab_background #CBA6F7 active_tab_background #B4BEFE
inactive_tab_foreground #CDD6F4 inactive_tab_foreground #CDD6F4
inactive_tab_background #181825 inactive_tab_background #1E1E2E
tab_bar_background #11111B tab_bar_background #181825
# Colors for marks (marked text in the terminal) # Colors for marks (marked text in the terminal)
mark1_foreground #1E1E2E mark1_foreground #1E1E2E
mark1_background #B4BEFE mark1_background #B4BEFE
mark2_foreground #1E1E2E mark2_foreground #1E1E2E
mark2_background #CBA6F7 mark2_background #B4BEFE
mark3_foreground #1E1E2E mark3_foreground #1E1E2E
mark3_background #74C7EC mark3_background #74C7EC

View file

@ -3,10 +3,10 @@
# Fonts {{{ # Fonts {{{
# Family # Family
font_family family="Iosevka Nerd Font" font_family family="Maple Mono NF CN"
bold_font auto bold_font auto
italic_font auto italic_font auto
bold_italic_font auto bold_italic_font auto
# Ligature # Ligature
disable_ligatures never disable_ligatures never
@ -77,3 +77,6 @@ map ctrl+q>shift+I kitten window.py -resize right
map cmd+enter toggle_layout stack map cmd+enter toggle_layout stack
map ctrl+shift+enter toggle_layout stack map ctrl+shift+enter toggle_layout stack
# }}} # }}}
shell fish

View file

@ -16,6 +16,7 @@ else -- Vanilla neovim
end end
require("config.keymaps") require("config.keymaps")
require("config.diagnostics") require("config.diagnostics")
require("config.migration")
-- If current session is spawn by neovide, do: -- If current session is spawn by neovide, do:
if vim.g.neovide then if vim.g.neovide then

15
tools/nvim/lsp/bashls.lua Normal file
View file

@ -0,0 +1,15 @@
-- Bash
--[[ Installation
brew install bash-language-server
npm i -g bash-language-server
dnf install -y nodejs-bash-language-server # Fedora Linux
--]]
return {
cmd = { "bash-language-server", "start" },
filetypes = { "bash", "sh" },
settings = {
bashIde = {
globPattern = vim.env.GLOB_PATTERN or "*@(.sh|.inc|.bash|.command)",
},
},
}

View file

@ -0,0 +1,16 @@
-- Beancount
--[[ Installation:
Dependency:
uv tool install beancount
LSP:
cargo install beancount-language-server
brew install beancount-language-server
--]]
return {
cmd = { "beancount-language-server" },
filetypes = { "beancount" },
settings = {
},
}

30
tools/nvim/lsp/clangd.lua Normal file
View file

@ -0,0 +1,30 @@
-- C/C++
-- Clangd requires compile_commands.json to work and the easiest way to generate it is to use CMake.
-- How to use clangd C/C++ LSP in any project: https://gist.github.com/Strus/042a92a00070a943053006bf46912ae9
return {
cmd = {
"clangd",
"--clang-tidy",
"--header-insertion=iwyu",
"--completion-style=detailed",
"--function-arg-placeholders",
"--fallback-style=none",
},
filetypes = { "c", "cpp" },
root_markers = {
".clangd",
".clang-format",
"compile_commands.json",
"compile_flags.txt",
".git",
},
capabilities = {
textDocument = {
completion = {
editsNearCursor = true,
},
},
offsetEncoding = { "utf-8", "utf-16" },
},
}

19
tools/nvim/lsp/gopls.lua Normal file
View file

@ -0,0 +1,19 @@
-- Golang
--[[ Installation
go install golang.org/x/tools/gopls@latest
brew install gopls
--]]
return {
cmd = { "gopls" },
filetypes = { "go", "gomod", "gowork", "gotmpl" },
root_markers = { "go.work", "go.mod", ".git" },
settings = {
gopls = {
analyses = {
unusedparams = true,
},
staticcheck = true,
-- semanticTokens = true, -- go's semantic token highlight is not accurate so far
},
},
}

18
tools/nvim/lsp/jsonls.lua Normal file
View file

@ -0,0 +1,18 @@
-- JSON
--[[
npm i vscode-json-languageserver
--]]
return {
cmd = { "vscode-json-language-server", "--stdio" },
filetypes = { "json", "jsonc" },
root_markers = { ".git" },
init_options = {
provideFormatter = true,
},
settings = {
-- See setting options
-- https://github.com/microsoft/vscode/tree/main/extensions/json-language-features/server#settings
json = {
},
},
}

37
tools/nvim/lsp/luals.lua Normal file
View file

@ -0,0 +1,37 @@
-- Lua
--[[ Installation
scoop install lua-language-server
brew install lua-language-server
sudo port install lua-language-server
--]]
--[[ Build: Ninja & C++17 Required
git clone https://github.com/LuaLS/lua-language-server --depth 1
cd lua-language-server
./make.sh
--]]
--[[ Note: For building from source, wrapper script is required
Accompanied with a wrapper script
#!/bin/bash
exec "$HOME/.local/build/lua-language-server/bin/lua-language-server" "$@"
--]]
return {
cmd = { "lua-language-server" },
root_markers = {
".luarc.json",
".luarc.jsonc",
".luacheckrc",
".stylua.toml",
"stylua.toml",
"selene.toml",
"selene.yml",
},
filetypes = { "lua" },
settings = {
Lua = {
hint = {
enable = true,
setType = true,
},
},
},
}

View file

@ -0,0 +1,15 @@
-- Markdown PKM
--[[ Installation:
cargo install --locked --git https://github.com/Feel-ix-343/markdown-oxide.git markdown-oxide
--]]
return {
cmd = { "markdown-oxide" },
root_markers = {
".obsidian",
},
filetypes = { "markdown" },
settings = {
Markdown = {
},
},
}

View file

@ -0,0 +1,27 @@
-- Python
--[[ Installation
uv tool install pyright
--]]
return {
cmd = { "pyright-langserver", "--stdio" },
filetypes = { "python" },
root_markers = {
".python_version",
"pyproject.toml",
"setup.py",
"setup.cfg",
"requirements.txt",
"Pipfile",
"pyrightconfig.json",
".git",
},
settings = {
python = {
analysis = {
autoSearchPaths = true,
useLibraryCodeForTypes = true,
diagnosticMode = "openFilesOnly",
},
},
},
}

View file

@ -0,0 +1,33 @@
-- Rust
--[[ Installation
rustup component add rust-src
--]]
return {
cmd = { "rust-analyzer" },
filetypes = { "rust" },
root_dir = function(bufnr, cb)
local root = vim.fs.root(bufnr, { "Cargo.toml" })
if root then
vim.system({ "cargo", "metadata", "--no-depts", "--format-version", "1" }, { cwd = root }, function(obj)
if obj.code ~= 0 then
cb(root)
else
local success, result = pcall(vim.json.decode, obj.stdout)
if success and result.workspace_root then
cb(result.workspace_root)
else
cb(root)
end
end
end)
else
cb(vim.fs.root(bufnr, { "rust-project.json", ".git" }))
end
end,
before_init = function(init_params, config)
-- See https://github.com/rust-lang/rust-analyzer/blob/eb5da56d839ae0a9e9f50774fa3eb78eb0964550/docs/dev/lsp-extensions.md?plain=1#L26
if config.settings and config.settings["rust-analyzer"] then
init_params.initializationOptions = config.settings["rust-analyzer"]
end
end,
}

32
tools/nvim/lsp/taplo.lua Normal file
View file

@ -0,0 +1,32 @@
-- TOML
--[[ Installation
cargo install taplo-cli --locked
brew install taplo
pnpm install -g @taplo/cli
--]]
return {
cmd = { "taplo", "lsp", "stdio" },
filetypes = { "toml" },
root_markers = { ".git" },
settings = {
-- See all the setting options
-- https://github.com/tamasfe/taplo/blob/master/editors/vscode/package.json
evenBetterToml = {
taplo = {
configFile = {
enabled = true,
},
},
schema = {
enabled = true,
catalogs = {
"https://www.schemastore.org/api/json/catalog.json",
},
cache = {
memoryExpiration = 60,
diskExpiration = 600,
},
},
},
},
}

19
tools/nvim/lsp/vimls.lua Normal file
View file

@ -0,0 +1,19 @@
return {
cmd = { "vim-language-server", "--stdio" },
filetypes = { "vim" },
root_markers = { ".git" },
init_options = {
isNeovim = true,
iskeyword = "@,48-57,_,192-255,-#",
vimruntime = "",
runtimepath = "",
diagnostic = { enable = true },
indexes = {
runtimepath = true,
gap = 100,
count = 3,
projectRootPatterns = { "runtime", "nvim", ".git", "autoload", "plugin" },
},
suggest = { fromVimruntime = true, fromRuntimepath = true },
},
}

View file

@ -0,0 +1,9 @@
return {
cmd = { "yaml-language-server", "--stdio" },
filetypes = { "yaml", "yaml.docker-compose", "yaml.gitlab" },
root_markers = { ".git" },
settings = {
yaml = {
},
},
}

View file

@ -1,2 +1,2 @@
-- Change the colorscheme here, use SPACE u i or :Telescope colorscheme to change colorscheme -- Change the colorscheme here, use SPACE u i or :FzfLua colorscheme to change colorscheme
vim.cmd.colorscheme("catppuccin") vim.cmd.colorscheme("catppuccin")

View file

@ -0,0 +1,31 @@
local nvim_version = vim.version()
if nvim_version.minor ~= 11 then
return
end
vim.diagnostic.config({
virtual_lines = true,
})
-- vim.lsp.enable({
-- "clangd",
-- "luals",
-- })
local lsp_configs = {}
for _, v in ipairs(vim.api.nvim_get_runtime_file('lsp/*', true)) do
local name = vim.fn.fnamemodify(v, ':t:r')
lsp_configs[name] = true
end
vim.lsp.enable(vim.tbl_keys(lsp_configs))
-- Delete 0.11 new gr- keymaps
vim.keymap.del({ "n" }, "grn")
vim.keymap.del({ "n", "x" }, "gra")
vim.keymap.del({ "n" }, "gri")

View file

@ -5,27 +5,20 @@ local M = {}
-- Ensure that the following servers are installed and set -- Ensure that the following servers are installed and set
-- Use :Mason to list all available servers -- Use :Mason to list all available servers
M.servers = { M.servers = {
"bashls", -- Bash "bashls", -- Bash
"clangd", -- C/C++ "clangd", -- C/C++
"cssls", -- CSS "gopls", -- Go
-- "cmake", -- CMake "html", -- HTML
"eslint", -- JavaScript "jsonls", -- JSON
"html", -- HTML "lua_ls", -- Lua
"jsonls", -- JSON -- "markdown_oxide", -- Markdown
"lua_ls", -- Lua "pyright", -- Python
"markdown_oxide", -- Markdown "rust_analyzer", -- Rust
"omnisharp", -- C# & F# "taplo", -- TOML
"powershell_es", -- PowerShell "ts_ls", -- TypeScript
"pyright", -- Python "vimls", -- vimscript
"rust_analyzer", -- Rust "yamlls", -- YAML
"svelte", -- Svelte "beancount", -- Beancount
"svlangserver", -- SystemVerilog
"tailwindcss", -- TailwindCSS
"taplo", -- TOML
"ts_ls", -- TypeScript
"vimls", -- vimscript
"yamlls", -- YAML
"beancount", -- Beancount
} }
-- Configuration for each server defines here -- Configuration for each server defines here

View file

@ -42,61 +42,61 @@ vim.api.nvim_create_user_command("Rename", renameCurrentBuffer, {})
local leader_mappings = { local leader_mappings = {
general = { general = {
{ keys = "-", cmd = ":split<CR>", opts = { desc = "Split to down" } }, { keys = "-", cmd = ":split<CR>", opts = { desc = "Split to down" } },
{ keys = "\\", cmd = ":vsplit<CR>", opts = { desc = "Split to right" } }, { keys = "\\", cmd = ":vsplit<CR>", opts = { desc = "Split to right" } },
{ keys = "|", cmd = ":vsplit<CR>", opts = { desc = "Split to right" } }, { keys = "|", cmd = ":vsplit<CR>", opts = { desc = "Split to right" } },
{ keys = "h", cmd = "<C-w>h", opts = { desc = "Left Window" } }, { keys = "h", cmd = "<C-w>h", opts = { desc = "Left Window" } },
{ keys = "n", cmd = "<C-w>j", opts = { desc = "Down Window" } }, { keys = "n", cmd = "<C-w>j", opts = { desc = "Down Window" } },
{ keys = "e", cmd = "<C-w>k", opts = { desc = "Up Window" } }, { keys = "e", cmd = "<C-w>k", opts = { desc = "Up Window" } },
{ keys = "i", cmd = "<C-w>l", opts = { desc = "Right Window" } }, { keys = "i", cmd = "<C-w>l", opts = { desc = "Right Window" } },
{ keys = "<Tab>", cmd = "<Cmd>b#<CR>", opts = { desc = "Switch to last buffer" } }, { keys = "<Tab>", cmd = "<Cmd>b#<CR>", opts = { desc = "Switch to last buffer" } },
{ keys = '"', cmd = ":!wezterm-gui &<CR>", pots = { desc = "Open External Terminal(wezterm)" } }, { keys = '"', cmd = ":!wezterm-gui &<CR>", pots = { desc = "Open External Terminal(wezterm)" } },
}, },
b = { -- +buffer b = { -- +buffer
{ keys = "0", cmd = "<Cmd>b#<CR>", opts = { desc = "Switch to last buffer" } }, { keys = "0", cmd = "<Cmd>b#<CR>", opts = { desc = "Switch to last buffer" } },
{ keys = "1", cmd = ":BufferLineGotoBuffer 1<CR>", opts = { desc = "Switch to Buffer #1" } }, { keys = "1", cmd = ":BufferLineGotoBuffer 1<CR>", opts = { desc = "Switch to Buffer #1" } },
{ keys = "2", cmd = ":BufferLineGotoBuffer 2<CR>", opts = { desc = "Switch to Buffer #2" } }, { keys = "2", cmd = ":BufferLineGotoBuffer 2<CR>", opts = { desc = "Switch to Buffer #2" } },
{ keys = "3", cmd = ":BufferLineGotoBuffer 3<CR>", opts = { desc = "Switch to Buffer #3" } }, { keys = "3", cmd = ":BufferLineGotoBuffer 3<CR>", opts = { desc = "Switch to Buffer #3" } },
{ keys = "4", cmd = ":BufferLineGotoBuffer 4<CR>", opts = { desc = "Switch to Buffer #4" } }, { keys = "4", cmd = ":BufferLineGotoBuffer 4<CR>", opts = { desc = "Switch to Buffer #4" } },
{ keys = "5", cmd = ":BufferLineGotoBuffer 5<CR>", opts = { desc = "Switch to Buffer #5" } }, { keys = "5", cmd = ":BufferLineGotoBuffer 5<CR>", opts = { desc = "Switch to Buffer #5" } },
{ keys = "6", cmd = ":BufferLineGotoBuffer 6<CR>", opts = { desc = "Switch to Buffer #6" } }, { keys = "6", cmd = ":BufferLineGotoBuffer 6<CR>", opts = { desc = "Switch to Buffer #6" } },
{ keys = "7", cmd = ":BufferLineGotoBuffer 7<CR>", opts = { desc = "Switch to Buffer #7" } }, { keys = "7", cmd = ":BufferLineGotoBuffer 7<CR>", opts = { desc = "Switch to Buffer #7" } },
{ keys = "8", cmd = ":BufferLineGotoBuffer 8<CR>", opts = { desc = "Switch to Buffer #8" } }, { keys = "8", cmd = ":BufferLineGotoBuffer 8<CR>", opts = { desc = "Switch to Buffer #8" } },
{ keys = "9", cmd = ":BufferLineGotoBuffer 9<CR>", opts = { desc = "Switch to Buffer #9" } }, { keys = "9", cmd = ":BufferLineGotoBuffer 9<CR>", opts = { desc = "Switch to Buffer #9" } },
{ keys = "b", cmd = ":BufferLinePick<CR>", opts = { desc = "Quick Switch Buffers" } }, { keys = "b", cmd = ":BufferLinePick<CR>", opts = { desc = "Quick Switch Buffers" } },
{ keys = "d", cmd = ":bdelete<CR>", opts = { desc = "Delete Buffer" } }, { keys = "d", cmd = ":bdelete<CR>", opts = { desc = "Delete Buffer" } },
{ keys = "D", cmd = ":BufferLineCloseOthers<CR>", opts = { desc = "Delete Other Buffers" } }, { keys = "D", cmd = ":BufferLineCloseOthers<CR>", opts = { desc = "Delete Other Buffers" } },
{ keys = "xx", cmd = ":BufferLineCloseOthers<CR>", opts = { desc = "Delete Other Buffers" } }, { keys = "xx", cmd = ":BufferLineCloseOthers<CR>", opts = { desc = "Delete Other Buffers" } },
{ keys = "xh", cmd = ":BufferLineCloseLeft<CR>", opts = { desc = "Delete Buffers Left" } }, { keys = "xh", cmd = ":BufferLineCloseLeft<CR>", opts = { desc = "Delete Buffers Left" } },
{ keys = "xi", cmd = ":BufferLineCloseRight<CR>", opts = { desc = "Delete Buffers Right" } }, { keys = "xi", cmd = ":BufferLineCloseRight<CR>", opts = { desc = "Delete Buffers Right" } },
{ keys = "X", cmd = ":BufferLineCloseOthers<CR>", opts = { desc = "Delete Other Buffers" } }, { keys = "X", cmd = ":BufferLineCloseOthers<CR>", opts = { desc = "Delete Other Buffers" } },
{ keys = "h", cmd = ":bprevious<CR>", opts = { desc = "Previous Buffer" } }, { keys = "h", cmd = ":bprevious<CR>", opts = { desc = "Previous Buffer" } },
{ keys = "i", cmd = ":bnext<CR>", opts = { desc = "Next Buffer" } }, { keys = "i", cmd = ":bnext<CR>", opts = { desc = "Next Buffer" } },
{ keys = "H", cmd = ":bfirst<CR>", opts = { desc = "First Buffer" } }, { keys = "H", cmd = ":bfirst<CR>", opts = { desc = "First Buffer" } },
{ keys = "I", cmd = ":blast<CR>", opts = { desc = "Last Buffer" } }, { keys = "I", cmd = ":blast<CR>", opts = { desc = "Last Buffer" } },
{ keys = "0", cmd = ":bfirst<CR>", opts = { desc = "First Buffer" } }, { keys = "0", cmd = ":bfirst<CR>", opts = { desc = "First Buffer" } },
{ keys = "^", cmd = ":bfirst<CR>", opts = { desc = "First Buffer" } }, { keys = "^", cmd = ":bfirst<CR>", opts = { desc = "First Buffer" } },
{ keys = "$", cmd = ":blast<CR>", opts = { desc = "Last Buffer" } }, { keys = "$", cmd = ":blast<CR>", opts = { desc = "Last Buffer" } },
{ keys = "s", cmd = ":new<CR>", opts = { desc = "Scratch buffers" } }, { keys = "s", cmd = ":new<CR>", opts = { desc = "Scratch buffers" } },
{ keys = "t", cmd = ":BufferLineTogglePin<CR>", opts = { desc = "Pin Buffer" } }, { keys = "t", cmd = ":BufferLineTogglePin<CR>", opts = { desc = "Pin Buffer" } },
{ keys = "y", cmd = ":%y+<CR>", opts = { desc = "Copy Buffer to Clipboard" } }, { keys = "y", cmd = ":%y+<CR>", opts = { desc = "Copy Buffer to Clipboard" } },
}, },
c = { -- +code/compile c = { -- +code/compile
{ keys = "R", cmd = vim.lsp.buf.rename, opts = { desc = "Rename symbol under cursor" } }, { keys = "R", cmd = vim.lsp.buf.rename, opts = { desc = "Rename symbol under cursor" } },
{ keys = "f", cmd = formatFx, opts = { desc = "Format buffer" } }, { keys = "f", cmd = formatFx, opts = { desc = "Format buffer" } },
}, },
f = { -- +file/find f = { -- +file/find
{ keys = "n", cmd = ":new<CR>", opts = { desc = "New File" } }, { keys = "n", cmd = ":new<CR>", opts = { desc = "New File" } },
{ keys = "s", cmd = ":write<CR>", opts = { desc = "Save File" } }, { keys = "s", cmd = ":write<CR>", opts = { desc = "Save File" } },
{ keys = "S", cmd = ":wall<CR>", opts = { desc = "Save All Files" } }, { keys = "S", cmd = ":wall<CR>", opts = { desc = "Save All Files" } },
{ keys = "D", cmd = "!trash-rm %<CR>", opts = { desc = "Delete current file" } }, { keys = "D", cmd = "!trash-rm %<CR>", opts = { desc = "Delete current file" } },
{ keys = "t", cmd = ":NvimTreeFindFileToggle<CR>", opts = { desc = "Toggle File Tree" } }, -- { keys = "t", cmd = ":NvimTreeFindFileToggle<CR>", opts = { desc = "Toggle File Tree" } },
{ keys = "o", cmd = ":!open %<CR>", opts = { desc = "Open file in default program" } }, -- { keys = "o", cmd = ":!open %<CR>", opts = { desc = "Open file in default program" } },
{ keys = "R", cmd = renameCurrentBuffer, opts = { desc = "Rename current file" } }, { keys = "R", cmd = renameCurrentBuffer, opts = { desc = "Rename current file" } },
{ keys = "x", cmd = ":Lazy<CR>", opts = { desc = "Open extension view" } }, { keys = "x", cmd = ":Lazy<CR>", opts = { desc = "Open extension view" } },
{ keys = "yy", cmd = ":let @+ = expand('%:p')<CR>", opts = { desc = "Copy file path" } }, { keys = "yy", cmd = ":let @+ = expand('%:p')<CR>", opts = { desc = "Copy file path" } },
{ keys = "yY", cmd = ":let @+ = expand('%')<CR>", opts = { desc = "Copy relative file path" } }, { keys = "yY", cmd = ":let @+ = expand('%')<CR>", opts = { desc = "Copy relative file path" } },
{ keys = "yn", cmd = ":let @+ = expand('%:t')<CR>", opts = { desc = "Copy file name" } }, { keys = "yn", cmd = ":let @+ = expand('%:t')<CR>", opts = { desc = "Copy file name" } },
{ keys = "yN", cmd = ":let @+ = expand('%:t:r')<CR>", opts = { desc = "Copy file name without extension" } }, { keys = "yN", cmd = ":let @+ = expand('%:t:r')<CR>", opts = { desc = "Copy file name without extension" } },
{ keys = "yd", cmd = ":let @+ = expand('%:p:h')<CR>", opts = { desc = "Copy directory path" } }, { keys = "yd", cmd = ":let @+ = expand('%:p:h')<CR>", opts = { desc = "Copy directory path" } },
{ {
@ -118,37 +118,37 @@ local leader_mappings = {
p = { -- +project p = { -- +project
}, },
q = { -- +quit q = { -- +quit
{ keys = "q", cmd = ":q<CR>", opts = { desc = "Quit" } }, { keys = "q", cmd = ":q<CR>", opts = { desc = "Quit" } },
{ keys = "Q", cmd = ":qa!<CR>", opts = { desc = "Force Quit" } }, { keys = "Q", cmd = ":qa!<CR>", opts = { desc = "Force Quit" } },
{ keys = "w", cmd = ":wq<CR>", opts = { desc = "Write and Quit" } }, { keys = "w", cmd = ":wq<CR>", opts = { desc = "Write and Quit" } },
{ keys = "W", cmd = ":wall<CR>:qa!<CR>", opts = { desc = "Write all and Force Quit" } }, { keys = "W", cmd = ":wall<CR>:qa!<CR>", opts = { desc = "Write all and Force Quit" } },
}, },
t = { -- +toggle/test t = { -- +toggle/test
{ keys = "f", cmd = ":NvimTreeToggle", opts = { desc = "Toggle File Explorer" } }, { keys = "f", cmd = ":NvimTreeToggle", opts = { desc = "Toggle File Explorer" } },
{ keys = "F", cmd = ":FormatToggle<CR>", opts = { desc = "Toggle autoformat-on-save" } }, { keys = "F", cmd = ":FormatToggle<CR>", opts = { desc = "Toggle autoformat-on-save" } },
}, },
u = { -- +ui u = { -- +ui
{ keys = " ", cmd = ":set list!", opts = { desc = "Toggle show all symbols" } }, { keys = " ", cmd = ":set list!", opts = { desc = "Toggle show all symbols" } },
}, },
w = { -- +window w = { -- +window
{ keys = "h", cmd = "<C-w>h", opts = { desc = "Left Window" } }, { keys = "h", cmd = "<C-w>h", opts = { desc = "Left Window" } },
{ keys = "n", cmd = "<C-w>j", opts = { desc = "Down Window" } }, { keys = "n", cmd = "<C-w>j", opts = { desc = "Down Window" } },
{ keys = "e", cmd = "<C-w>k", opts = { desc = "Up Window" } }, { keys = "e", cmd = "<C-w>k", opts = { desc = "Up Window" } },
{ keys = "i", cmd = "<C-w>l", opts = { desc = "Right Window" } }, { keys = "i", cmd = "<C-w>l", opts = { desc = "Right Window" } },
{ keys = "H", cmd = "<C-w>H", opts = { desc = "Move Window Left" } }, { keys = "H", cmd = "<C-w>H", opts = { desc = "Move Window Left" } },
{ keys = "N", cmd = "<C-w>J", opts = { desc = "Move Window Down" } }, { keys = "N", cmd = "<C-w>J", opts = { desc = "Move Window Down" } },
{ keys = "E", cmd = "<C-w>K", opts = { desc = "Move Window Up" } }, { keys = "E", cmd = "<C-w>K", opts = { desc = "Move Window Up" } },
{ keys = "I", cmd = "<C-w>L", opts = { desc = "Move Window Right" } }, { keys = "I", cmd = "<C-w>L", opts = { desc = "Move Window Right" } },
{ keys = "-", cmd = ":split<CR>", opts = { desc = "Split to down" } }, { keys = "-", cmd = ":split<CR>", opts = { desc = "Split to down" } },
{ keys = "|", cmd = ":vsplit<CR>", opts = { desc = "Split to right" } }, { keys = "|", cmd = ":vsplit<CR>", opts = { desc = "Split to right" } },
{ keys = "/", cmd = ":vsplit<CR>", opts = { desc = "Split to right" } }, { keys = "/", cmd = ":vsplit<CR>", opts = { desc = "Split to right" } },
{ keys = "d", cmd = "<C-w>c", opts = { desc = "Close Window" } }, { keys = "d", cmd = "<C-w>c", opts = { desc = "Close Window" } },
{ keys = "D", cmd = "<C-w>o", opts = { desc = "Close Other Windows" } }, { keys = "D", cmd = "<C-w>o", opts = { desc = "Close Other Windows" } },
{ keys = "r", cmd = "<C-w>r", opts = { desc = "Rotate Windows" } }, { keys = "r", cmd = "<C-w>r", opts = { desc = "Rotate Windows" } },
{ keys = "R", cmd = "<C-w>R", opts = { desc = "Reverse Rotate Windows" } }, { keys = "R", cmd = "<C-w>R", opts = { desc = "Reverse Rotate Windows" } },
{ keys = "t", cmd = "<C-w>T", opts = { desc = "Move Window to New Tab" } }, { keys = "t", cmd = "<C-w>T", opts = { desc = "Move Window to New Tab" } },
{ keys = "]", cmd = ":resize +5<CR>", opts = { desc = "Increase Window Size" } }, { keys = "]", cmd = ":resize +5<CR>", opts = { desc = "Increase Window Size" } },
{ keys = "[", cmd = ":resize -5<CR>", opts = { desc = "Decrease Window Size" } }, { keys = "[", cmd = ":resize -5<CR>", opts = { desc = "Decrease Window Size" } },
{ keys = "M", cmd = ":resize<CR>:vertical resize<CR>", opts = { desc = "Maximize window size" } }, { keys = "M", cmd = ":resize<CR>:vertical resize<CR>", opts = { desc = "Maximize window size" } },
}, },
} }

View file

@ -7,6 +7,37 @@ local M = {
{ keys = "<leader>,", cmd = vim.lsp.buf.code_action, opts = { desc = "Code Action" } }, { keys = "<leader>,", cmd = vim.lsp.buf.code_action, opts = { desc = "Code Action" } },
{ keys = "ga", cmd = vim.lsp.buf.code_action, opts = { desc = "Code Action" } }, { keys = "ga", cmd = vim.lsp.buf.code_action, opts = { desc = "Code Action" } },
{ keys = "gh", cmd = vim.lsp.buf.hover, opts = { desc = "Show hover" } }, { keys = "gh", cmd = vim.lsp.buf.hover, opts = { desc = "Show hover" } },
-- [c]hange [d]efinition
{ keys = "cd", cmd = vim.lsp.buf.rename, opts = { desc = "Rename symbol under cursor" } },
} }
-- local function smart_split_definition()
-- local width = vim.api.nvim_win_get_width(0)
-- if width > 80 then -- Adjust 80 to your preference
-- vim.api.nvim_command("vsp")
-- else
-- vim.api.nvim_command("sp")
-- end
-- vim.lsp.buf.definition()
-- end
-- vim.keymap.set("n", "<C-w>d", smart_split_definition, { desc = "Go to Definition (Smart Split)" })
local function smart_split(func)
local width = vim.api.nvim_win_get_width(0)
if width > 80 then
vim.api.nvim_command("vsp")
else
vim.api.nvim_command("sp")
end
func()
end
vim.keymap.set("n", "<C-w>d", function()
smart_split(vim.lsp.buf.definition)
end, { desc = "Go to Definition (Smart Split)" })
vim.keymap.set("n", "<C-w>D", function()
smart_split(vim.lsp.buf.declaration)
end, { desc = "Go to Declaration (Smart Split)" })
return M return M

View file

@ -1,10 +1,10 @@
local keymaps_modifier = { local keymaps_modifier = {
-- Use C-w to move between windows -- Use C-w to move between windows
{ keys = "<C-w>h", cmd = "<C-w>h", opts = { desc = "left Window" } }, { keys = "<C-w>h", cmd = "<C-w>h", opts = { desc = "left Window" } },
{ keys = "<C-w>n", cmd = "<C-w>j", opts = { desc = "Down Window" } }, { keys = "<C-w>n", cmd = "<C-w>j", opts = { desc = "Down Window" } },
{ keys = "<C-w>e", cmd = "<C-w>k", opts = { desc = "Up Window" } }, { keys = "<C-w>e", cmd = "<C-w>k", opts = { desc = "Up Window" } },
{ keys = "<C-w>i", cmd = "<C-w>l", opts = { desc = "Right Window" } }, { keys = "<C-w>i", cmd = "<C-w>l", opts = { desc = "Right Window" } },
{ keys = "<A-x>", cmd = "<Cmd>Telescope commands<CR>", opts = { desc = "Commands" } }, { keys = "<A-x>", cmd = "<Cmd>FzfLua commands<CR>", opts = { desc = "Commands" } },
} }
return keymaps_modifier return keymaps_modifier

View file

@ -1,5 +1,7 @@
local M = {} local M = {}
M.event = "BufEnter"
M.global = { M.global = {
{ mode = "n", keys = "<leader>E", cmd = ":NvimTreeToggle<CR>" }, { mode = "n", keys = "<leader>E", cmd = ":NvimTreeToggle<CR>" },
{ mode = "n", keys = "<A-0>", cmd = ":NvimTreeFindFileToggle<CR>" }, { mode = "n", keys = "<A-0>", cmd = ":NvimTreeFindFileToggle<CR>" },

View file

@ -1,8 +1,19 @@
-- https://stackoverflow.com/a/73365602
vim.api.nvim_create_autocmd("TextYankPost", {
group = vim.api.nvim_create_augroup("highlight_yank", {}),
desc = "Hightlight selection on yank",
pattern = "*",
callback = function()
vim.highlight.on_yank({ higroup = "IncSearch", timeout = 500 })
end,
})
return { return {
-- Colorschemes -- Colorschemes
{ {
"catppuccin/nvim", "catppuccin/nvim",
name = "catppuccin", name = "catppuccin",
lazy = true,
opts = { opts = {
flavor = "auto", flavor = "auto",
background = { background = {
@ -10,6 +21,7 @@ return {
dark = "mocha", dark = "mocha",
}, },
integrations = { integrations = {
-- lualine = true,
"lualine", "lualine",
}, },
}, },
@ -20,90 +32,66 @@ return {
opts = { opts = {
variant = "dawn", variant = "dawn",
}, },
cmd = "FzfLua colorschemes",
}, },
{ "olimorris/onedarkpro.nvim", cmd = "Telescope colorscheme" }, { "rebelot/kanagawa.nvim", cmd = "FzfLua colorschemes" },
{ "rebelot/kanagawa.nvim", cmd = "Telescope colorscheme" },
-- Highlight objects under the cursor
{ "RRethy/vim-illuminate" },
{ -- Modern Status Line { -- Modern Status Line
"nvim-lualine/lualine.nvim", "nvim-lualine/lualine.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" }, dependencies = { "nvim-tree/nvim-web-devicons" },
event = "VeryLazy",
config = function() config = function()
require("plugins.mod.lualine") require("plugins.mod.lualine")
end, end,
}, },
{ -- Highlight yanked text -- { -- Breadcrumb
"gbprod/yanky.nvim", -- "Bekaboo/dropbar.nvim",
opts = { -- dependencies = {
highlight = { -- "nvim-telescope/telescope-fzf-native.nvim",
on_put = true, -- build = "make",
on_yank = true, -- },
timer = 500, -- opts = {},
}, -- keys = {
}, -- {
}, -- "<Leader>+",
{ import = "plugins.mod.alpha-nvim" }, -- Dashboard -- function()
{ -- Breadcrumb -- require("dropbar.api").pick()
"Bekaboo/dropbar.nvim", -- end,
dependencies = { -- desc = "Pick symbols in winbar",
"nvim-telescope/telescope-fzf-native.nvim", -- },
build = "make", -- {
}, -- "[;",
opts = {}, -- function()
keys = { -- require("dropbar.api").goto_context_start()
{ -- end,
"<Leader>+", -- desc = "Go to start of current context",
function() -- },
require("dropbar.api").pick() -- {
end, -- "];",
desc = "Pick symbols in winbar", -- function()
}, -- require("dropbar.api").select_next_context()
{ -- end,
"[;", -- desc = "Select next context",
function() -- },
require("dropbar.api").goto_context_start() -- },
end, -- },
desc = "Go to start of current context",
},
{
"];",
function()
require("dropbar.api").select_next_context()
end,
desc = "Select next context",
},
},
},
{ import = "plugins.mod.bufferline" }, -- Buffer Top Bar { import = "plugins.mod.bufferline" }, -- Buffer Top Bar
{ -- Git Blames, Changes { -- Git Blames, Changes
"lewis6991/gitsigns.nvim", "lewis6991/gitsigns.nvim",
opts = { opts = {
current_line_blame = true, current_line_blame = true,
}, },
event = "BufReadPre",
keys = { keys = {
{ "<leader>gb", "<cmd>Gitsigns blame<CR>", desc = "Blame file" }, { "<leader>gb", "<cmd>Gitsigns blame<CR>", desc = "Blame file" },
{ "<leader>gd", "<cmd>Gitsigns diffthis<CR>", desc = "Diff file" }, { "<leader>gd", "<cmd>Gitsigns diffthis<CR>", desc = "Diff file" },
{ "<leader>gB", "<cmd>Gitsigns toggle_current_line_blame<CR>", desc = "Toggle line blame" }, { "<leader>gB", "<cmd>Gitsigns toggle_current_line_blame<CR>", desc = "Toggle line blame" },
}, },
}, },
{ -- Highlight and navigate between TODOs -- { -- Highlight and navigate between TODOs
"folke/todo-comments.nvim", -- "folke/todo-comments.nvim",
opts = {}, -- cmd = { "TodoTelescope" },
dependencies = { "nvim-lua/plenary.nvim" }, -- event = "BufRead",
}, -- opts = {},
{ -- dependencies = { "nvim-lua/plenary.nvim" },
"folke/noice.nvim", -- },
event = "VeryLazy",
opts = {
-- add any options here
},
dependencies = {
-- if you lazy-load any plugin below, make sure to add proper `module="..."` entries
"MunifTanjim/nui.nvim",
-- OPTIONAL:
-- `nvim-notify` is only needed, if you want to use the notification view.
-- If not available, we use `mini` as the fallback
"rcarriga/nvim-notify",
},
},
} }

View file

@ -1,24 +1,11 @@
return { return {
{ import = "plugins.mod.nvim-cmp" }, { import = "plugins.mod.blink-cmp" },
{
"saadparwaiz1/cmp_luasnip",
},
{ {
"L3MON4D3/LuaSnip", "L3MON4D3/LuaSnip",
build = "make install_jsregexp", build = "make install_jsregexp",
event = "InsertEnter", event = "InsertEnter",
config = function() config = function()
require("luasnip.loaders.from_vscode").lazy_load({ paths = "~/.config/lsp-snippets" }) require("luasnip.loaders.from_vscode").lazy_load({ paths = "~/.config/lsp-snippets" })
-- require("luasnip.loaders.from_vscode").lazy_load()
end, end,
-- TODO: Remove this, simply delete this will let nvim-cmp not work
-- dependencies = { "rafamadriz/friendly-snippets" },
},
{
"zbirenbaum/copilot-cmp",
opts = {},
-- config = function()
-- require("copilot_cmp").setup()
-- end,
}, },
} }

View file

@ -2,6 +2,7 @@
return { return {
{ {
"mfussenegger/nvim-dap", "mfussenegger/nvim-dap",
event = "BufReadPre",
config = function() config = function()
local dap = require("dap") local dap = require("dap")
dap.adapters.codelldb = { dap.adapters.codelldb = {
@ -28,10 +29,13 @@ return {
"rcarriga/nvim-dap-ui", "rcarriga/nvim-dap-ui",
opts = {}, opts = {},
dependencies = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio" }, dependencies = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio" },
cmd = "DapNew",
}, },
{ "theHamsta/nvim-dap-virtual-text", opts = {} }, { "theHamsta/nvim-dap-virtual-text", opts = {}, cmd = "DapNew" },
{ {
"mfussenegger/nvim-dap-python", "mfussenegger/nvim-dap-python",
event = "BufReadPost",
ft = "python",
config = function() config = function()
require("dap-python").setup("uv") require("dap-python").setup("uv")
end, end,

View file

@ -1,26 +1,23 @@
return { return {
{ {
"folke/flash.nvim", "folke/flash.nvim",
event = "VeryLazy", event = "BufEnter",
opts = {}, opts = {},
-- stylua: ignore -- stylua: ignore
keys = { keys = {
{ "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" }, { "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" },
{ "S", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" }, { "S", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" },
{ "r", mode = "o", function() require("flash").remote() end, desc = "Remote Flash" }, { "r", mode = "o", function() require("flash").remote() end, desc = "Remote Flash" },
{ "R", mode = { "o", "x" }, function() require("flash").treesitter_search() end, desc = "Treesitter Search" }, { "R", mode = { "o", "x" }, function() require("flash").treesitter_search() end, desc = "Treesitter Search" },
{ "<c-s>", mode = { "c" }, function() require("flash").toggle() end, desc = "Toggle Flash Search" }, { "<c-s>", mode = { "c" }, function() require("flash").toggle() end, desc = "Toggle Flash Search" },
}, },
}, },
{ { import = "plugins.mod.mc" }, -- Multiple-cursors
"js0ny/vim-visual-multi-colemak-hnei",
-- "mg979/vim-visual-multi",
},
{ import = "plugins.mod.autopairs" }, { import = "plugins.mod.autopairs" },
{ {
"kylechui/nvim-surround", "kylechui/nvim-surround",
version = "*", -- Use for stability; omit to use `main` branch for the latest features version = "*", -- Use for stability; omit to use `main` branch for the latest features
event = "VeryLazy", event = "BufEnter",
opts = {}, opts = {},
}, },
{ {

View file

@ -1,50 +1,39 @@
return { return {
{ {
"rmagatti/auto-session", "rmagatti/auto-session",
lazy = false, event = "BufReadPre",
cmd = {
"SessionSearch",
"SessionSave",
},
opts = { opts = {
suppressed_dirs = { "~/", "~/Projects", "~/Downloads", "/" }, suppressed_dirs = { "~/", "~/Projects", "~/Downloads", "/" },
}, },
}, },
{ import = "plugins.mod.nvim-tree" }, -- { import = "plugins.mod.nvim-tree" },
{ import = "plugins.mod.telescope" }, -- { import = "plugins.mod.telescope" },
-- { import = "plugins.mod.fzf" }, { import = "plugins.mod.fzf" },
{
"ahmedkhalf/project.nvim",
opts = {
detection_methods = { "lsp", "pattern" },
patterns = { ".git", "Makefile", "package.json" },
sync_root_with_cwd = true,
silent_chdir = true,
scope_chdir = "global",
},
config = function()
require("telescope").load_extension("projects")
end,
dependencies = { "nvim-telescope/telescope.nvim" },
},
-- { -- {
-- "kdheepak/lazygit.nvim", -- "ahmedkhalf/project.nvim",
-- lazy = true, -- event = "VeryLazy",
-- opts = {
-- detection_methods = { "lsp", "pattern" },
-- patterns = { ".git", "Makefile", "package.json" },
-- sync_root_with_cwd = true,
-- silent_chdir = true,
-- scope_chdir = "global",
-- },
-- config = function()
-- require("telescope").load_extension("projects")
-- end,
-- dependencies = { "nvim-telescope/telescope.nvim" },
-- },
-- {
-- "NeogitOrg/neogit",
-- config = true,
-- cmd = { -- cmd = {
-- "LazyGit", -- "Neogit",
-- "LazyGitConfig",
-- "LazyGitCurrentFile",
-- "LazyGitFilter",
-- "LazyGitFilterCurrentFile",
-- },
-- -- optional for floating window border decoration
-- dependencies = {
-- "nvim-lua/plenary.nvim",
-- },
-- -- setting the keybinding for LazyGit with 'keys' is recommended in
-- -- order to load the plugin when the command is run for the first time
-- keys = {
-- { "<leader>gg", "<cmd>LazyGit<cr>", desc = "LazyGit" },
-- }, -- },
-- }, -- },
{ { import = "plugins.mod.neo-tree" }
"NeogitOrg/neogit",
},
} }

View file

@ -3,17 +3,13 @@ require("plugins.lazy-nvim")
-- Setup lazy.nvim -- Setup lazy.nvim
require("lazy").setup({ require("lazy").setup({
spec = { spec = {
-- import your plugins
{ import = "plugins.appearance" }, { import = "plugins.appearance" },
{ import = "plugins.completion" }, { import = "plugins.completion" },
{ import = "plugins.fileutils" }, { import = "plugins.fileutils" },
{ import = "plugins.lsp" }, { import = "plugins.lang" },
{ import = "plugins.dap" }, { import = "plugins.dap" },
{ import = "plugins.edit" }, { import = "plugins.edit" },
{ import = "plugins.misc" }, { import = "plugins.misc" },
}, },
-- Configure any other settings here. See the documentation for more details. checker = { enabled = false },
-- colorscheme that will be used when installing plugins.
-- automatically check for plugin updates
checker = { enabled = true },
}) })

View file

@ -0,0 +1,13 @@
-- 在 init.lua 或者你的配置文件中添加
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
pattern = "*.bean",
callback = function()
vim.bo.filetype = "beancount"
end,
})
return {
"nathangrigg/vim-beancount",
ft = "beancount",
}

View file

@ -0,0 +1,33 @@
return {
{ import = "plugins.lang.org" },
{ import = "plugins.lang.markdown" },
{ import = "plugins.lang.just" },
{ import = "plugins.lang.typst" },
{ import = "plugins.lang.beancount" },
{ import = "plugins.lang.tex" },
{ import = "plugins.lang.lua" },
{ import = "plugins.lang.treesitter" },
{ import = "plugins.mod.trouble-nvim" },
{
"williamboman/mason.nvim",
cmd = "Mason",
build = ":MasonUpdate",
-- opts_extend = { "ensure_installed" },
opts = {
-- ensure_installed = require("config.servers").servers,
},
},
-- {
-- "williamboman/mason-lspconfig.nvim",
-- event = "BufReadPre",
-- dependencies = {
-- { "williamboman/mason.nvim" },
-- { "neovim/nvim-lspconfig" },
-- },
-- opts = {
-- -- ensure_installed = require("config.servers").servers,
-- -- automatic_installation = false,
-- },
-- },
{ import = "plugins.mod.conform-nvim" },
}

View file

@ -0,0 +1,4 @@
return {
"NoahTheDuke/vim-just",
ft = { "just" },
}

View file

@ -0,0 +1,9 @@
return {
"folke/lazydev.nvim",
ft = "lua", -- only load on lua files
opts = {
library = {
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
},
},
}

View file

@ -0,0 +1,6 @@
return {
{ import = "plugins.lang.markdown.render-markdown" },
-- { import = "plugins.mod.lang.markdown.markview" },
{ import = "plugins.lang.markdown.obsidian-nvim" },
{ "bullets-vim/bullets.vim", ft = "markdown" },
}

View file

@ -1,5 +1,5 @@
return { return {
"epwalsh/obsidian.nvim", "obsidian-nvim/obsidian.nvim",
version = "*", -- recommended, use latest release instead of latest commit version = "*", -- recommended, use latest release instead of latest commit
-- lazy = false, -- lazy = false,
ft = "markdown", ft = "markdown",
@ -38,11 +38,15 @@ return {
-- "BufReadPre path/to/my-vault/*.md", -- "BufReadPre path/to/my-vault/*.md",
-- "BufNewFile path/to/my-vault/*.md", -- "BufNewFile path/to/my-vault/*.md",
-- }, -- },
keys = {
{ "<leader>fo", "<cmd>ObsidianQuickSwitch<CR>", desc = "Obsidian: Quick Switch" },
},
dependencies = { dependencies = {
-- Required. -- Required.
"nvim-lua/plenary.nvim", "nvim-lua/plenary.nvim",
-- see below for full list of optional dependencies 👇 -- see below for full list of optional dependencies 👇
"ibhagwan/fzf-lua",
}, },
opts = { opts = {
workspaces = { workspaces = {
@ -52,12 +56,19 @@ return {
}, },
}, },
completion = { completion = {
nvim_cmp = true, nvim_cmp = false,
blink = true,
min_chars = 2, min_chars = 2,
}, },
ui = { ui = {
enable = false, enable = false,
}, },
daily_notes = {
folder = "_Global/Periodic",
date_format = "%Y-%m-%d",
default_tags = { "daily" },
template = nil,
},
-- see below for full list of options 👇 -- see below for full list of options 👇
attachments = { attachments = {
img_folder = "_Global/Assets", img_folder = "_Global/Assets",
@ -65,5 +76,14 @@ return {
return string.format("%s-", os.time()) return string.format("%s-", os.time())
end, end,
}, },
mappings = {
["<cr>"] = {
action = function()
require("obsidian").util.smart_action()
end,
opts = { buffer = true, expr = true },
},
},
new_notes_location = "current_dir",
}, },
} }

View file

@ -1,7 +1,7 @@
return { return {
{ {
"MeanderingProgrammer/render-markdown.nvim", "MeanderingProgrammer/render-markdown.nvim",
lazy = false, event = "BufRead",
ft = { "markdown", "Avante" }, ft = { "markdown", "Avante" },
opts = { opts = {
file_types = { "markdown", "Avante" }, file_types = { "markdown", "Avante" },
@ -14,14 +14,13 @@ return {
top_pad = 0, top_pad = 0,
bottom_pad = 0, bottom_pad = 0,
}, },
heading = { -- heading = {
sign = false, -- position = "overlay",
position = "inline", -- width = "block",
width = "block", -- left_margin = 0.5,
left_margin = 0.5, -- left_pad = 0.2,
left_pad = 0.2, -- right_pad = 0.2,
right_pad = 0.2, -- },
},
link = { link = {
custom = { custom = {
python = { pattern = "%.py", icon = "" }, python = { pattern = "%.py", icon = "" },

View file

@ -0,0 +1,88 @@
return {
{
"nvim-orgmode/orgmode",
dependencies = {
-- "nvim-telescope/telescope.nvim",
-- "nvim-orgmode/telescope-orgmode.nvim",
"nvim-orgmode/org-bullets.nvim",
"Saghen/blink.cmp",
},
cmd = {
"Org",
},
ft = {
"org",
"orgagenda",
},
keys = {
{ "<leader>A", "<cmd>Org agenda<CR>", desc = "Org Agenda" },
},
event = "BufEnter *.org",
config = function()
require("orgmode").setup({
org_agenda_files = "~/OrgFiles/tasks/*",
org_default_notes_file = "~/OrgFiles/tasks/inbox.org",
org_archive_location = "~/OrgFiles/.archive/%s_archive::",
org_todo_keywords = { "TODO(t)", "NEXT(n)", "WAIT(w)", "|", "DONE(d)", "CANCELLED(c)" },
org_hide_leading_stars = true,
org_hide_emphasis_markers = true,
org_log_into_drawer = "LOGBOOK",
org_highlight_latex_and_related = "native",
org_startup_indented = true,
org_deadline_warning_days = 10,
mappings = {
agenda = {
org_agenda_schedule = "<C-c><C-s>",
org_agenda_deadline = "<C-c><C-d>",
org_agenda_todo = "<C-c><C-t>",
org_agenda_set_tags = "<C-c><C-c>",
org_agenda_earlier = { "[[", "<" },
org_agenda_later = { "]]", ">" },
org_agenda_archive = "$",
},
org = {
org_deadline = "<C-c><C-d>",
org_schedule = "<C-c><C-s>",
org_todo = "<C-c><C-t>",
org_set_tags_command = "<C-c><C-c>",
org_archive_subtree = "<C-c>$",
},
},
})
require("org-bullets").setup()
require("blink.cmp").setup({
sources = {
per_filetype = {
org = { "orgmode" },
},
providers = {
orgmode = {
name = "Orgmode",
module = "orgmode.org.autocompletion.blink",
fallbacks = { "buffer" },
},
},
},
})
-- require("telescope").setup()
-- require("telescope").load_extension("orgmode")
-- vim.keymap.set("n", "<leader>r", require("telescope").extensions.orgmode.refile_heading)
-- vim.keymap.set("n", "<leader>oP", require("telescope").extensions.orgmode.search_headings)
vim.keymap.set("n", "<leader>op", "<cmd>FzfLua files cwd=~/OrgFiles<CR>")
-- vim.keymap.set("n", "<leader>li", require("telescope").extensions.orgmode.insert_link)
end,
},
-- {
-- dir = "~/Source/org-pomodoro.nvim",
-- name = "org-pomodoro.nvim",
-- lazy = false,
-- opts = {},
-- dependencies = {
-- "nvim-orgmode/orgmode",
-- },
-- cmd = {
-- "OrgPomodoro",
-- },
-- },
}

View file

@ -0,0 +1,7 @@
return {
"lervag/vimtex",
ft = { "tex", "bib" },
init = function()
vim.g.vimtex_view_method = "okular"
end,
}

View file

@ -0,0 +1,20 @@
return {
{ "nvim-treesitter/nvim-treesitter-context", lazy = true },
{
"nvim-treesitter/nvim-treesitter",
run = ":TSUpdate",
cmd = {
"TSInstall",
"TSUpdate",
"TSUpdateSync",
},
event = {
"BufReadPre",
},
opts = {
ensure_installed = { "c", "lua", "vim", "vimdoc", "markdown", "markdown_inline" },
highlight = { enable = true },
indent = { enable = true },
},
},
}

View file

@ -0,0 +1,6 @@
return {
'chomosuke/typst-preview.nvim',
ft = { 'typst' },
version = '1.*',
opts = {}, -- lazy.nvim will implicitly calls `setup {}`
}

Some files were not shown because too many files have changed in this diff Show more