Compare commits
7 Commits
6327828c90
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| dff6abfb84 | |||
| 65a05f9426 | |||
| 5f930c1f23 | |||
| 7f09d83008 | |||
| 4f90def979 | |||
| e9556df285 | |||
| e8275c583d |
Executable
+120
@@ -0,0 +1,120 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$EUID" -eq 0 ]; then
|
||||||
|
echo "Please run this script as your normal user, not with sudo."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Updating system..."
|
||||||
|
sudo xbps-install -Syu
|
||||||
|
|
||||||
|
echo "==> Installing KDE and desktop essentials..."
|
||||||
|
|
||||||
|
sudo xbps-install -y \
|
||||||
|
kde-plasma \
|
||||||
|
kde-baseapps \
|
||||||
|
NetworkManager \
|
||||||
|
sddm \
|
||||||
|
xorg-minimal \
|
||||||
|
xorg-server-xwayland \
|
||||||
|
mesa-dri \
|
||||||
|
qt6-wayland \
|
||||||
|
kwayland \
|
||||||
|
elogind \
|
||||||
|
pipewire \
|
||||||
|
alsa-pipewire \
|
||||||
|
libspa-bluetooth \
|
||||||
|
bluez \
|
||||||
|
xdg-desktop-portal \
|
||||||
|
xdg-desktop-portal-kde \
|
||||||
|
git \
|
||||||
|
curl \
|
||||||
|
neovim
|
||||||
|
|
||||||
|
echo "==> Disabling conflicting DHCP service..."
|
||||||
|
|
||||||
|
if [ -e /var/service/dhcpcd ]; then
|
||||||
|
sudo sv down dhcpcd || true
|
||||||
|
sudo rm -f /var/service/dhcpcd
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> Enabling system services..."
|
||||||
|
|
||||||
|
enable_service() {
|
||||||
|
service="$1"
|
||||||
|
|
||||||
|
if [ ! -e "/var/service/$service" ]; then
|
||||||
|
sudo ln -s "/etc/sv/$service" "/var/service/$service"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
enable_service dbus
|
||||||
|
enable_service NetworkManager
|
||||||
|
enable_service sddm
|
||||||
|
enable_service bluetoothd
|
||||||
|
|
||||||
|
echo "==> Adding user to required groups..."
|
||||||
|
|
||||||
|
sudo usermod -aG network,audio,video,bluetooth "$USER"
|
||||||
|
|
||||||
|
echo "==> Configuring ALSA for PipeWire..."
|
||||||
|
|
||||||
|
sudo mkdir -p /etc/alsa/conf.d
|
||||||
|
|
||||||
|
sudo ln -sf \
|
||||||
|
/usr/share/alsa/alsa.conf.d/50-pipewire.conf \
|
||||||
|
/etc/alsa/conf.d/50-pipewire.conf
|
||||||
|
|
||||||
|
sudo ln -sf \
|
||||||
|
/usr/share/alsa/alsa.conf.d/99-pipewire-default.conf \
|
||||||
|
/etc/alsa/conf.d/99-pipewire-default.conf
|
||||||
|
|
||||||
|
echo "==> Configuring PipeWire PulseAudio compatibility..."
|
||||||
|
|
||||||
|
sudo mkdir -p /etc/pipewire/pipewire.conf.d
|
||||||
|
|
||||||
|
sudo ln -sf \
|
||||||
|
/usr/share/examples/pipewire/20-pipewire-pulse.conf \
|
||||||
|
/etc/pipewire/pipewire.conf.d/20-pipewire-pulse.conf
|
||||||
|
|
||||||
|
echo "==> Enabling PipeWire desktop autostart..."
|
||||||
|
|
||||||
|
mkdir -p "$HOME/.config/autostart"
|
||||||
|
|
||||||
|
ln -sf \
|
||||||
|
/usr/share/applications/pipewire.desktop \
|
||||||
|
"$HOME/.config/autostart/pipewire.desktop"
|
||||||
|
|
||||||
|
echo "==> Reconfiguring packages..."
|
||||||
|
|
||||||
|
sudo xbps-reconfigure -fa
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "========================================"
|
||||||
|
echo " Void KDE bootstrap complete"
|
||||||
|
echo "========================================"
|
||||||
|
echo
|
||||||
|
echo "Installed:"
|
||||||
|
echo " KDE Plasma"
|
||||||
|
echo " SDDM"
|
||||||
|
echo " Plasma Wayland"
|
||||||
|
echo " NetworkManager"
|
||||||
|
echo " PipeWire + WirePlumber"
|
||||||
|
echo " Bluetooth"
|
||||||
|
echo " XWayland"
|
||||||
|
echo " Neovim"
|
||||||
|
echo
|
||||||
|
echo "Enabled services:"
|
||||||
|
sudo sv status dbus NetworkManager bluetoothd sddm
|
||||||
|
echo
|
||||||
|
echo "NOTE: elogind is installed but intentionally"
|
||||||
|
echo "not enabled as a runit service."
|
||||||
|
echo
|
||||||
|
echo "Reboot, then select 'Plasma (Wayland)' in SDDM."
|
||||||
|
echo
|
||||||
|
echo " sudo reboot"
|
||||||
|
echo
|
||||||
|
|
||||||
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
[general]
|
|
||||||
import = ["~/.config/alacritty/themes/noctalia.toml"]
|
|
||||||
|
|
||||||
[font]
|
|
||||||
size = 13
|
|
||||||
offset = { x = 0, y = 3 }
|
|
||||||
normal = { family = "JetBrainsMono Nerd Font", style = "Regular" }
|
|
||||||
|
|
||||||
[window]
|
|
||||||
# startup_mode = "Maximized"
|
|
||||||
padding.x = 10
|
|
||||||
padding.y = 10
|
|
||||||
|
|
||||||
[cursor]
|
|
||||||
style.shape = "Beam"
|
|
||||||
style.blinking = "Always"
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
[colors.primary]
|
|
||||||
background = '#121212'
|
|
||||||
foreground = '#e8e8e8'
|
|
||||||
|
|
||||||
[colors.cursor]
|
|
||||||
text = '#121212'
|
|
||||||
cursor = '#e8e8e8'
|
|
||||||
|
|
||||||
[colors.vi_mode_cursor]
|
|
||||||
text = '#121212'
|
|
||||||
cursor = '#a9afbd'
|
|
||||||
|
|
||||||
[colors.search.matches]
|
|
||||||
foreground = '#161616'
|
|
||||||
background = '#8b909c'
|
|
||||||
|
|
||||||
[colors.search.focused_match]
|
|
||||||
foreground = '#161616'
|
|
||||||
background = '#a9afbd'
|
|
||||||
|
|
||||||
[colors.footer_bar]
|
|
||||||
foreground = '#161616'
|
|
||||||
background = '#e8e3e3'
|
|
||||||
|
|
||||||
[colors.hints.start]
|
|
||||||
foreground = '#161616'
|
|
||||||
background = '#7d8390'
|
|
||||||
|
|
||||||
[colors.hints.end]
|
|
||||||
foreground = '#161616'
|
|
||||||
background = '#7d8390'
|
|
||||||
|
|
||||||
[colors.selection]
|
|
||||||
text = '#e8e8e8'
|
|
||||||
background = '#2a2a2a'
|
|
||||||
|
|
||||||
|
|
||||||
[colors.normal]
|
|
||||||
black = '#161616'
|
|
||||||
red = '#c77b7b'
|
|
||||||
green = '#9cb89c'
|
|
||||||
yellow = '#c7b98b'
|
|
||||||
blue = '#8b95a9'
|
|
||||||
magenta = '#a99bb0'
|
|
||||||
cyan = '#8fadb0'
|
|
||||||
white = '#b0b0b0'
|
|
||||||
|
|
||||||
|
|
||||||
[colors.bright]
|
|
||||||
black = '#3a3a3a'
|
|
||||||
red = '#d89a9a'
|
|
||||||
green = '#b0ccaf'
|
|
||||||
yellow = '#d8cba0'
|
|
||||||
blue = '#a9afbd'
|
|
||||||
magenta = '#beb0c4'
|
|
||||||
cyan = '#a9c4c7'
|
|
||||||
white = '#f0f0f0'
|
|
||||||
|
|
||||||
|
|
||||||
[colors.dim]
|
|
||||||
black = '#161616'
|
|
||||||
red = '#c77b7b'
|
|
||||||
green = '#9cb89c'
|
|
||||||
yellow = '#c7b98b'
|
|
||||||
blue = '#8b95a9'
|
|
||||||
magenta = '#a99bb0'
|
|
||||||
cyan = '#8fadb0'
|
|
||||||
white = '#b0b0b0'
|
|
||||||
+28
-8
@@ -11,14 +11,11 @@ export GOOGLE_DEFAULT_CLIENT_ID="no"
|
|||||||
export GOOGLE_DEFAULT_CLIENT_SECRET="no"
|
export GOOGLE_DEFAULT_CLIENT_SECRET="no"
|
||||||
|
|
||||||
# Core settings
|
# Core settings
|
||||||
export EDITOR="nvim"
|
export EDITOR="evi"
|
||||||
export VISUAL="nvim"
|
export VISUAL="evi"
|
||||||
export MANPAGER="nvim +Man!"
|
export MANPAGER="evi +Man!"
|
||||||
export BROWSER="firefox"
|
export BROWSER="firefox"
|
||||||
# export TERM=xterm-256color
|
|
||||||
export COLORTERM="truecolor"
|
export COLORTERM="truecolor"
|
||||||
export LANG="en_US.UTF-8"
|
|
||||||
export LC_ALL="en_US.UTF-8"
|
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
export DEBUG=1
|
export DEBUG=1
|
||||||
@@ -78,6 +75,28 @@ fi
|
|||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# ALIASES
|
# ALIASES
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
# Void linux helpers
|
||||||
|
# System update (sync + update all packages)
|
||||||
|
alias void-update='sudo xbps-install -Su'
|
||||||
|
# Remove orphaned dependencies + clean cache
|
||||||
|
alias void-clean='sudo xbps-remove -Oo'
|
||||||
|
# List explicitly installed (manual) packages
|
||||||
|
alias void-installed='xbps-query -m'
|
||||||
|
# List all installed packages
|
||||||
|
alias void-installedall='xbps-query -l'
|
||||||
|
# Show which package owns a file
|
||||||
|
alias void-owns='xbps-query -o'
|
||||||
|
# Remove a package and its unused deps in one go (usage: purge <pkgname>)
|
||||||
|
alias void-purge='sudo xbps-remove -R'
|
||||||
|
# Install a package (usage: install <pkgname>)
|
||||||
|
alias void-install='sudo xbps-install'
|
||||||
|
# Remove a package (usage: remove <pkgname>)
|
||||||
|
alias void-remove='sudo xbps-remove'
|
||||||
|
# Search for a package
|
||||||
|
alias void-search='xbps-query -Rs'
|
||||||
|
# Show info about a package
|
||||||
|
alias void-query='xbps-query -R'
|
||||||
|
|
||||||
# List commands
|
# List commands
|
||||||
alias ls='ls -lh --color=auto --group-directories-first'
|
alias ls='ls -lh --color=auto --group-directories-first'
|
||||||
alias ll='ls -lAh --color=auto --group-directories-first'
|
alias ll='ls -lAh --color=auto --group-directories-first'
|
||||||
@@ -98,14 +117,15 @@ alias free='free -h'
|
|||||||
alias bat='bat --theme="ansi" --paging=never'
|
alias bat='bat --theme="ansi" --paging=never'
|
||||||
|
|
||||||
# Application shortcuts
|
# Application shortcuts
|
||||||
alias vi='nvim'
|
|
||||||
alias :q='exit'
|
alias :q='exit'
|
||||||
alias files='thunar .'
|
alias files='thunar .'
|
||||||
alias fetch='pfetch'
|
alias fetch='pfetch'
|
||||||
|
|
||||||
# Custom shortcuts
|
# Custom shortcuts
|
||||||
|
alias v='evi'
|
||||||
|
alias vi='evi'
|
||||||
alias reload='source ~/.bashrc'
|
alias reload='source ~/.bashrc'
|
||||||
alias dots='cd ~/.dotfiles && nvim'
|
alias dots='cd ~/.dotfiles && evi'
|
||||||
alias doti='bash ~/.dotfiles/install.sh -i'
|
alias doti='bash ~/.dotfiles/install.sh -i'
|
||||||
alias dotl='bash ~/.dotfiles/install.sh -l'
|
alias dotl='bash ~/.dotfiles/install.sh -l'
|
||||||
alias myip='curl ipinfo.io/ip; echo ""'
|
alias myip='curl ipinfo.io/ip; echo ""'
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
let g:netrw_dirhistmax =10
|
||||||
|
let g:netrw_dirhistcnt =1
|
||||||
|
let g:netrw_dirhist_1='/home/jason/Projects/dotfiles'
|
||||||
|
let g:netrw_dirhist_0='/home/jason/Projects/GraveKeeper/src'
|
||||||
|
let g:netrw_dirhist_9='/home/jason/Projects/GraveKeeper'
|
||||||
|
let g:netrw_dirhist_8='/home/jason/.config/kitty/kitty.conf'
|
||||||
|
let g:netrw_dirhist_7='/home/jason/.evi'
|
||||||
|
let g:netrw_dirhist_6='/home/jason/Projects/GraveKeeper'
|
||||||
|
let g:netrw_dirhist_5='/home/jason/.evi'
|
||||||
|
let g:netrw_dirhist_4='/home/jason/.evi/pack'
|
||||||
|
let g:netrw_dirhist_3='/home/jason/.evi'
|
||||||
|
let g:netrw_dirhist_2='/home/jason/.evi/autoload'
|
||||||
@@ -0,0 +1,202 @@
|
|||||||
|
" ============================================================================
|
||||||
|
" EVi Configuration
|
||||||
|
" ============================================================================
|
||||||
|
" General
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
set nocompatible
|
||||||
|
set encoding=utf-8
|
||||||
|
set hidden
|
||||||
|
set history=1000
|
||||||
|
set clipboard=unnamedplus
|
||||||
|
set splitright
|
||||||
|
set splitbelow
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" UI
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
set number
|
||||||
|
set relativenumber
|
||||||
|
set wildmenu
|
||||||
|
set showcmd
|
||||||
|
colorscheme jellybeans
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Transparent UI
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
augroup VimTransparent
|
||||||
|
autocmd!
|
||||||
|
autocmd ColorScheme * highlight Normal ctermbg=NONE guibg=NONE
|
||||||
|
\ | highlight NonText ctermbg=NONE guibg=NONE
|
||||||
|
\ | highlight LineNr ctermbg=NONE guibg=NONE
|
||||||
|
\ | highlight SignColumn ctermbg=NONE guibg=NONE
|
||||||
|
\ | highlight EndOfBuffer ctermbg=NONE guibg=NONE
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Status Line
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
set laststatus=2
|
||||||
|
highlight EviStatus cterm=NONE ctermfg=White ctermbg=236
|
||||||
|
set statusline=%#EviStatus#%f\ %m%r\ %=%{&filetype}\ \ %l:%c\ %p%%
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Editing
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
set tabstop=4
|
||||||
|
set shiftwidth=4
|
||||||
|
set expandtab
|
||||||
|
set smartindent
|
||||||
|
set nowrap
|
||||||
|
set incsearch
|
||||||
|
set hlsearch
|
||||||
|
set ignorecase
|
||||||
|
set smartcase
|
||||||
|
set completeopt=menu,menuone,noselect
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" File Types
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
syntax on
|
||||||
|
filetype plugin indent on
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" fzf
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
if executable('rg')
|
||||||
|
let $FZF_DEFAULT_COMMAND =
|
||||||
|
\ 'rg --files --hidden --follow --glob "!.git/*"'
|
||||||
|
endif
|
||||||
|
|
||||||
|
nnoremap <C-p> :Files<CR>
|
||||||
|
nnoremap <C-o> :Buffers<CR>
|
||||||
|
nnoremap <C-s> :Rg<CR>
|
||||||
|
nnoremap <C-b> :Build<CR>
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Search
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
nnoremap <Esc><Esc> :nohlsearch<CR>
|
||||||
|
nnoremap n nzzzv
|
||||||
|
nnoremap N Nzzzv
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Window Navigation
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
nnoremap <C-h> <C-w>h
|
||||||
|
nnoremap <C-j> <C-w>j
|
||||||
|
nnoremap <C-k> <C-w>k
|
||||||
|
nnoremap <C-l> <C-w>l
|
||||||
|
nnoremap <C-x> <C-w>q
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" LSP - OLS
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
packadd lsp
|
||||||
|
call LspOptionsSet(#{
|
||||||
|
\ autoComplete: v:false,
|
||||||
|
\ autoHighlight: v:false,
|
||||||
|
\ autoHighlightDiags: v:true,
|
||||||
|
\ autoPopulateDiags: v:true,
|
||||||
|
\ semanticHighlight: v:false,
|
||||||
|
\ showSignature: v:false,
|
||||||
|
\ completionInPreview: v:false,
|
||||||
|
\ condensedCompletionMenu: v:true,
|
||||||
|
\ })
|
||||||
|
|
||||||
|
if executable('ols')
|
||||||
|
call LspAddServer([#{
|
||||||
|
\ name: 'ols',
|
||||||
|
\ filetype: ['odin'],
|
||||||
|
\ path: 'ols',
|
||||||
|
\ args: ['--stdio'],
|
||||||
|
\ features: #{
|
||||||
|
\ diagnostic: v:false,
|
||||||
|
\ completion: v:true,
|
||||||
|
\ hover: v:true,
|
||||||
|
\ signatureHelp: v:false,
|
||||||
|
\ documentHighlight: v:true,
|
||||||
|
\ semanticHighlight: v:true,
|
||||||
|
\ },
|
||||||
|
\ }])
|
||||||
|
endif
|
||||||
|
|
||||||
|
command! Action LspCodeAction
|
||||||
|
command! Rename LspRename
|
||||||
|
|
||||||
|
autocmd FileType odin setlocal omnifunc=LspOmniFunc
|
||||||
|
inoremap <C-@> <C-X><C-O>
|
||||||
|
nnoremap K :LspHover<CR>
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Go to Definition
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
function! GotoDefinitionSplit() abort
|
||||||
|
vsplit
|
||||||
|
LspGotoDefinition
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
nnoremap gd :call GotoDefinitionSplit()<CR>
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Diagnostics
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
function! ToggleDiagnostics() abort
|
||||||
|
for l:win in getwininfo()
|
||||||
|
if get(l:win, 'quickfix', 0)
|
||||||
|
execute l:win.winnr .. 'close'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
LspDiag show
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
command! Diagnostics call ToggleDiagnostics()
|
||||||
|
nnoremap <C-i> :Diagnostics<CR>
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Netrw / File Tree
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
let g:netrw_banner = 0
|
||||||
|
let g:netrw_liststyle = 3
|
||||||
|
let g:netrw_browse_split = 0
|
||||||
|
let g:netrw_altv = 1
|
||||||
|
let g:netrw_winsize = 33
|
||||||
|
let g:netrw_keepdir = 0
|
||||||
|
nnoremap <C-e> :Lexplore<CR>
|
||||||
|
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
" Build System
|
||||||
|
" ----------------------------------------------------------------------------
|
||||||
|
function! Build(...) abort
|
||||||
|
" Already in the build terminal → close it.
|
||||||
|
if get(b:, 'build_terminal', 0) && &buftype ==# 'terminal'
|
||||||
|
close
|
||||||
|
echo ''
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !filereadable('build.sh')
|
||||||
|
echohl WarningMsg
|
||||||
|
echo 'No build.sh found in current directory.'
|
||||||
|
echohl None
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
wall
|
||||||
|
|
||||||
|
let l:command = './build.sh'
|
||||||
|
|
||||||
|
if a:0 > 0
|
||||||
|
let l:command .= ' ' .. join(a:000, ' ')
|
||||||
|
endif
|
||||||
|
|
||||||
|
botright vsplit
|
||||||
|
execute 'vertical resize ' .. float2nr(&columns * 0.37)
|
||||||
|
execute 'terminal ++curwin ' .. l:command
|
||||||
|
|
||||||
|
let b:build_terminal = 1
|
||||||
|
tnoremap <buffer> <CR> <Nop>
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
command! -nargs=* Build call Build(<f-args>)
|
||||||
Submodule
+1
Submodule config/evi/pack/downloads/opt/lsp added at 6ab67121fa
Submodule
+1
Submodule config/evi/pack/plugins/start/fzf added at ca4c1b80e3
Submodule
+1
Submodule config/evi/pack/plugins/start/fzf.vim added at d2a59a992a
Submodule
+1
Submodule config/evi/pack/plugins/start/jellybeans added at ef83bf4dc8
+1
Submodule config/evi/pack/plugins/start/vim-polyglot added at f061eddb7c
@@ -0,0 +1,56 @@
|
|||||||
|
# ============================================================================
|
||||||
|
# Kitty Configuration
|
||||||
|
# ============================================================================
|
||||||
|
enable_audio_bell no
|
||||||
|
term xterm-256color
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Font
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
font_family JetBrainsMono Nerd Font
|
||||||
|
font_size 12.0
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Window
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
window_padding_width 10
|
||||||
|
window_padding_height 10
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Cursor
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
cursor_shape beam
|
||||||
|
cursor_blink_interval 0.5
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Layout
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
enabled_layouts splits
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Splits
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Vertical split
|
||||||
|
map ctrl+v launch --location=vsplit --cwd=current
|
||||||
|
|
||||||
|
# Close current kitty split
|
||||||
|
map ctrl+q close_window
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
# Colors
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
foreground #e8e8e8
|
||||||
|
background #121212
|
||||||
|
cursor #D4D4D4
|
||||||
|
cursor_text_color #1F1F1F
|
||||||
|
color0 #1F1F1F
|
||||||
|
color1 #F44747
|
||||||
|
color2 #6A9955
|
||||||
|
color3 #DCDCAA
|
||||||
|
color4 #569CD6
|
||||||
|
color5 #C586C0
|
||||||
|
color6 #56B6C2
|
||||||
|
color7 #D4D4D4
|
||||||
|
color8 #808080
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
require("vim._core.ui2").enable({})
|
|
||||||
map = vim.keymap.set
|
|
||||||
vim.o.termguicolors = true
|
|
||||||
vim.o.showmode = false
|
|
||||||
vim.o.laststatus = 3
|
|
||||||
vim.o.nu = true
|
|
||||||
vim.o.swapfile = false
|
|
||||||
vim.o.winborder = "single"
|
|
||||||
vim.o.winblend = 0
|
|
||||||
vim.o.pumblend = 0
|
|
||||||
vim.o.scrolloff = 20
|
|
||||||
vim.o.shiftwidth = 4
|
|
||||||
vim.o.tabstop = 4
|
|
||||||
vim.o.softtabstop = 4
|
|
||||||
vim.o.ignorecase = true
|
|
||||||
vim.o.smartcase = true
|
|
||||||
vim.o.incsearch = true
|
|
||||||
vim.o.hlsearch = true
|
|
||||||
vim.o.mouse = "a"
|
|
||||||
vim.o.path = "**"
|
|
||||||
vim.o.clipboard = "unnamedplus"
|
|
||||||
vim.o.foldenable = true
|
|
||||||
vim.o.foldmethod = "expr"
|
|
||||||
vim.o.foldlevel = 99
|
|
||||||
vim.o.splitright = true
|
|
||||||
vim.o.splitbelow = true
|
|
||||||
vim.o.signcolumn = "yes"
|
|
||||||
vim.o.completeopt = "menu,menuone,noselect,popup,fuzzy"
|
|
||||||
vim.o.undofile = true
|
|
||||||
vim.o.undodir = vim.fn.stdpath("state") .. "/undo"
|
|
||||||
vim.o.errorformat = "%f(%l:%c) %m,%-G%.%#"
|
|
||||||
-- -----------------------------
|
|
||||||
-- @BINDS
|
|
||||||
-- -----------------------------
|
|
||||||
map("t", "<ESC><ESC>", "<C-\\><C-n>")
|
|
||||||
map({"t", "n"}, "<C-h>", "<C-\\><C-n><C-w><C-h>")
|
|
||||||
map({"t", "n"}, "<C-j>", "<C-\\><C-n><C-w><C-j>")
|
|
||||||
map({"t", "n"}, "<C-k>", "<C-\\><C-n><C-w><C-k>")
|
|
||||||
map({"t", "n"}, "<C-l>", "<C-\\><C-n><C-w><C-l>")
|
|
||||||
map({"i", "n"}, "<C- >", "<C-x><C-o>")
|
|
||||||
map("n", '<Esc>', '<Cmd>noh<CR><Esc>')
|
|
||||||
map("v", "J", ":m '>+1<CR>gv=gv")
|
|
||||||
map("v", "K", ":m '<-2<CR>gv=gv")
|
|
||||||
map("v", "<S-Tab>", "<gv")
|
|
||||||
map("v", "<Tab>" , ">gv")
|
|
||||||
map("n", "<C-p>", ":find ")
|
|
||||||
map("n", "<C-e>", ":Lex<CR>")
|
|
||||||
map("n", "<C-backspace>", ":bd<CR>")
|
|
||||||
map("i", "<C-h>", vim.lsp.buf.signature_help)
|
|
||||||
-- -----------------------------
|
|
||||||
-- @PLUGINS
|
|
||||||
-- -----------------------------
|
|
||||||
require("plugins")
|
|
||||||
require("theme").load()
|
|
||||||
require("theme").watch()
|
|
||||||
-- -----------------------------
|
|
||||||
-- @AUTOCMDS
|
|
||||||
-- -----------------------------
|
|
||||||
-- Terminals should open with insert mode
|
|
||||||
vim.api.nvim_create_autocmd({ "BufEnter", "TermEnter", "WinEnter" }, {
|
|
||||||
pattern = "term://*",
|
|
||||||
callback = function()
|
|
||||||
if vim.bo.buftype == "terminal" then
|
|
||||||
vim.schedule(function()
|
|
||||||
vim.cmd("startinsert")
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
})
|
|
||||||
-- highlights yanked text
|
|
||||||
vim.api.nvim_create_autocmd("TextYankPost", {
|
|
||||||
callback = function()
|
|
||||||
vim.highlight.on_yank({
|
|
||||||
higroup = "IncSearch",
|
|
||||||
timeout = 200,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
-- removes trailing whitespace on save
|
|
||||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
|
||||||
callback = function()
|
|
||||||
local save_cursor = vim.fn.getpos(".")
|
|
||||||
vim.cmd([[%s/\s\+$//e]])
|
|
||||||
vim.fn.setpos(".", save_cursor)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
vim.api.nvim_create_augroup('AutoResizeWindows', { clear = true })
|
|
||||||
vim.api.nvim_create_autocmd('VimResized', {
|
|
||||||
group = 'AutoResizeWindows',
|
|
||||||
callback = function()
|
|
||||||
vim.cmd('wincmd =')
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
@@ -1,311 +0,0 @@
|
|||||||
vim.pack.add({
|
|
||||||
{ src = 'https://github.com/ibhagwan/fzf-lua' },
|
|
||||||
{ src = "https://github.com/saghen/blink.lib" },
|
|
||||||
{ src = "https://github.com/Saghen/blink.cmp" },
|
|
||||||
{ src = 'https://github.com/neovim/nvim-lspconfig' },
|
|
||||||
{ src = 'https://github.com/romus204/tree-sitter-manager.nvim' },
|
|
||||||
{ src = 'https://github.com/lukas-reineke/indent-blankline.nvim' },
|
|
||||||
{ src = 'https://github.com/xiyaowong/transparent.nvim' },
|
|
||||||
{ src = 'https://github.com/nvim-lua/plenary.nvim' },
|
|
||||||
{ src = 'https://github.com/NeogitOrg/neogit' },
|
|
||||||
})
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
-- TREE SITTER MANAGER
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
require("tree-sitter-manager").setup()
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
-- FUZZY FINDERS
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
require("fzf-lua").setup({})
|
|
||||||
map("n", "<C-p>", "<Cmd>FzfLua files<CR>")
|
|
||||||
map("n", "<C-m>", "<Cmd>FzfLua buffers<CR>")
|
|
||||||
map("n", "<C-i>", "<Cmd>FzfLua diagnostics_workspace<CR>")
|
|
||||||
map("n", "<C-f>", "<Cmd>FzfLua live_grep<CR>")
|
|
||||||
map("n", "<C-b>", "<Cmd>FzfLua grep_curbuf<CR>")
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
-- BLINK COMPLETION
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
require("blink.cmp").setup({
|
|
||||||
keymap = {
|
|
||||||
["<Tab>"] = {
|
|
||||||
"select_next",
|
|
||||||
"fallback",
|
|
||||||
},
|
|
||||||
|
|
||||||
["<S-Tab>"] = {
|
|
||||||
"select_prev",
|
|
||||||
"fallback",
|
|
||||||
},
|
|
||||||
|
|
||||||
["<C-n>"] = {
|
|
||||||
"select_next",
|
|
||||||
"fallback",
|
|
||||||
},
|
|
||||||
|
|
||||||
["<C-p>"] = {
|
|
||||||
"select_prev",
|
|
||||||
"fallback",
|
|
||||||
},
|
|
||||||
|
|
||||||
["<CR>"] = {
|
|
||||||
"accept",
|
|
||||||
"fallback",
|
|
||||||
},
|
|
||||||
|
|
||||||
["<C-Space>"] = {
|
|
||||||
"show",
|
|
||||||
"show_documentation",
|
|
||||||
"hide_documentation",
|
|
||||||
},
|
|
||||||
|
|
||||||
["<Esc>"] = {
|
|
||||||
"hide",
|
|
||||||
"fallback",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
appearance = {
|
|
||||||
nerd_font_variant = "normal",
|
|
||||||
},
|
|
||||||
|
|
||||||
completion = {
|
|
||||||
menu = {
|
|
||||||
border = "single",
|
|
||||||
},
|
|
||||||
|
|
||||||
documentation = {
|
|
||||||
auto_show = true,
|
|
||||||
auto_show_delay_ms = 200,
|
|
||||||
|
|
||||||
window = {
|
|
||||||
border = "single",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
ghost_text = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
signature = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
|
|
||||||
sources = {
|
|
||||||
default = {
|
|
||||||
"lsp",
|
|
||||||
"path",
|
|
||||||
"buffer",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
fuzzy = { implementation = "lua", },
|
|
||||||
})
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
-- LSP
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
local capabilities = require("blink.cmp").get_lsp_capabilities()
|
|
||||||
vim.lsp.config("gopls", { capabilities = capabilities, })
|
|
||||||
vim.lsp.config("ols", { capabilities = capabilities, })
|
|
||||||
vim.lsp.enable({ "gopls", "ols", })
|
|
||||||
|
|
||||||
map("n", "gd", vim.lsp.buf.definition)
|
|
||||||
map("n", "gD", vim.lsp.buf.declaration)
|
|
||||||
map("n", "gi", vim.lsp.buf.implementation)
|
|
||||||
map("n", "gr", vim.lsp.buf.references)
|
|
||||||
map("n", "K", vim.lsp.buf.hover)
|
|
||||||
map("i", "<C-h>", vim.lsp.buf.signature_help)
|
|
||||||
map("n", "<leader>rn", vim.lsp.buf.rename)
|
|
||||||
map("n", "<leader>ca", vim.lsp.buf.code_action)
|
|
||||||
map("n", "[d", vim.diagnostic.goto_prev)
|
|
||||||
map("n", "]d", vim.diagnostic.goto_next)
|
|
||||||
map("n", "<leader>d", vim.diagnostic.open_float)
|
|
||||||
map("n", "<leader>q", vim.diagnostic.setloclist)
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
-- INDENT LINES
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
require("ibl").setup({
|
|
||||||
indent = {
|
|
||||||
char = "│",
|
|
||||||
},
|
|
||||||
|
|
||||||
scope = {
|
|
||||||
show_start = false,
|
|
||||||
show_end = false,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
-- NEOGIT
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
require("neogit").setup({
|
|
||||||
kind = "vsplit", -- matches your terminal split habit
|
|
||||||
graph_style = "unicode",
|
|
||||||
commit_editor = { kind = "vsplit" },
|
|
||||||
commit_select_view = { kind = "vsplit" },
|
|
||||||
log_view = { kind = "vsplit" },
|
|
||||||
rebase_editor = { kind = "vsplit" },
|
|
||||||
reflog_view = { kind = "vsplit" },
|
|
||||||
merge_editor = { kind = "vsplit" },
|
|
||||||
tag_editor = { kind = "vsplit" },
|
|
||||||
preview_buffer = { kind = "split" },
|
|
||||||
popup = { kind = "split" },
|
|
||||||
signs = {
|
|
||||||
hunk = { "", "" },
|
|
||||||
item = { ">", "v" },
|
|
||||||
section = { ">", "v" },
|
|
||||||
},
|
|
||||||
integrations = {
|
|
||||||
telescope = false,
|
|
||||||
diffview = false,
|
|
||||||
},
|
|
||||||
|
|
||||||
disable_insert_on_commit = "auto",
|
|
||||||
})
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
-- TERMINAL SYSTEM
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
local term_buf = nil
|
|
||||||
|
|
||||||
local function open_term_split()
|
|
||||||
vim.cmd("botright vsplit")
|
|
||||||
|
|
||||||
local win = vim.api.nvim_get_current_win()
|
|
||||||
|
|
||||||
if term_buf and vim.api.nvim_buf_is_valid(term_buf) then
|
|
||||||
vim.api.nvim_win_set_buf(win, term_buf)
|
|
||||||
else
|
|
||||||
vim.cmd("terminal")
|
|
||||||
term_buf = vim.api.nvim_get_current_buf()
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.api.nvim_win_set_width(win, math.floor(vim.o.columns * 0.37))
|
|
||||||
vim.cmd("startinsert")
|
|
||||||
end
|
|
||||||
|
|
||||||
local function toggle_term()
|
|
||||||
for _, win in ipairs(vim.api.nvim_list_wins()) do
|
|
||||||
if vim.api.nvim_win_get_buf(win) == term_buf then
|
|
||||||
vim.api.nvim_win_close(win, false)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
open_term_split()
|
|
||||||
end
|
|
||||||
|
|
||||||
local function open_term_fullscreen()
|
|
||||||
if term_buf and vim.api.nvim_buf_is_valid(term_buf) then
|
|
||||||
vim.api.nvim_set_current_buf(term_buf)
|
|
||||||
else
|
|
||||||
vim.cmd("terminal")
|
|
||||||
term_buf = vim.api.nvim_get_current_buf()
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.cmd("startinsert")
|
|
||||||
end
|
|
||||||
|
|
||||||
local function prev_non_term_buf()
|
|
||||||
local current = vim.api.nvim_get_current_buf()
|
|
||||||
local buffers = vim.fn.getbufinfo({ buflisted = 1 })
|
|
||||||
local candidates = {}
|
|
||||||
|
|
||||||
for _, buffer in ipairs(buffers) do
|
|
||||||
if buffer.bufnr ~= current and vim.bo[buffer.bufnr].buftype ~= "terminal" then
|
|
||||||
table.insert(candidates, buffer)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if #candidates == 0 then
|
|
||||||
print("No previous non-terminal buffer")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
table.sort(candidates, function(a, b)
|
|
||||||
return a.lastused > b.lastused
|
|
||||||
end)
|
|
||||||
|
|
||||||
vim.api.nvim_set_current_buf(candidates[1].bufnr)
|
|
||||||
end
|
|
||||||
|
|
||||||
function send(command)
|
|
||||||
local terminal_visible = false
|
|
||||||
|
|
||||||
for _, win in ipairs(vim.api.nvim_list_wins()) do
|
|
||||||
if term_buf and vim.api.nvim_win_get_buf(win) == term_buf then
|
|
||||||
terminal_visible = true
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not terminal_visible then
|
|
||||||
open_term_split()
|
|
||||||
end
|
|
||||||
|
|
||||||
local job = vim.b[term_buf].terminal_job_id
|
|
||||||
|
|
||||||
if job then
|
|
||||||
vim.api.nvim_chan_send(job, command .. "\n")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
map("n", "<C-j>", toggle_term, { desc = "Toggle terminal split", })
|
|
||||||
map("n", "<C-o>", open_term_fullscreen, { desc = "Open terminal fullscreen", })
|
|
||||||
map("t", "<C-j>", toggle_term, { desc = "Toggle terminal split", })
|
|
||||||
map("t", "<C-o>", prev_non_term_buf, { desc = "Return to previous buffer", })
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
-- BUILD SYSTEM
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
local function build(args)
|
|
||||||
if vim.fn.filereadable("build.sh") == 0 then
|
|
||||||
vim.notify("No build.sh found in current directory.", vim.log.levels.WARN)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.cmd("wall")
|
|
||||||
|
|
||||||
local command = "./build.sh"
|
|
||||||
|
|
||||||
if #args > 0 then
|
|
||||||
command = command .. " " .. table.concat(args, " ")
|
|
||||||
end
|
|
||||||
|
|
||||||
send("clear && " .. command)
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.api.nvim_create_user_command(
|
|
||||||
"Build",
|
|
||||||
function(opts) build(opts.fargs) end,
|
|
||||||
{
|
|
||||||
nargs = "*",
|
|
||||||
desc = "Run project build.sh",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
map("n", "<C-Space>", function() build({}) end, { desc = "Build project", })
|
|
||||||
map("t", "<C-Space>", function() build({}) end, { desc = "Build project", })
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
-- Setup Alacritty colorscheme from Neovim
|
|
||||||
-- ------------------------------------------------------------
|
|
||||||
local function set_alacritty_colorscheme(name)
|
|
||||||
-- The name of the Alacritty colorscheme placed in the theme directory
|
|
||||||
-- MUST be the same as the name of the colorscheme in Neovim
|
|
||||||
local config_dir = vim.fn.expand("$XDG_CONFIG_HOME/alacritty")
|
|
||||||
local config = config_dir .. "/alacritty.toml"
|
|
||||||
local source = config_dir .. "/themes/" .. name .. ".toml"
|
|
||||||
local dest = config_dir .. "/colorscheme.toml"
|
|
||||||
local cmd = "ln -sf " .. source .. " " .. dest .. " && touch " .. config
|
|
||||||
|
|
||||||
vim.fn.jobstart(cmd, {
|
|
||||||
on_exit = function(_, code, _)
|
|
||||||
if code ~= 0 then
|
|
||||||
vim.notify("Failed to set Alacritty color scheme", vim.log.levels.ERROR)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("ColorScheme", {
|
|
||||||
group = vim.api.nvim_create_augroup("config_alacritty_colorscheme", { clear = true }),
|
|
||||||
callback = function(args)
|
|
||||||
set_alacritty_colorscheme(args.match)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
@@ -1,176 +0,0 @@
|
|||||||
-- lua/theme.lua
|
|
||||||
-- Reads Noctalia's generated Alacritty theme (~/.config/alacritty/themes/noctalia.toml)
|
|
||||||
-- and applies matching highlight groups in Neovim, including Treesitter captures.
|
|
||||||
-- Monotone palette: only keywords, functions, parameters, strings, and comments
|
|
||||||
-- carry a distinct color. Everything else (variables, types, constants,
|
|
||||||
-- punctuation, operators, tags, numbers, booleans) sits in foreground or gray.
|
|
||||||
local M = {}
|
|
||||||
|
|
||||||
local THEME_PATH = vim.fn.expand("~/.config/alacritty/themes/noctalia.toml")
|
|
||||||
|
|
||||||
local function parse_alacritty_colors(path)
|
|
||||||
local f = io.open(path, "r")
|
|
||||||
if not f then return nil end
|
|
||||||
|
|
||||||
local colors = { primary = {}, normal = {}, bright = {} }
|
|
||||||
local section
|
|
||||||
|
|
||||||
for line in f:lines() do
|
|
||||||
local sec = line:match("^%[colors%.(%a+)%]")
|
|
||||||
if sec then
|
|
||||||
-- only track top-level sections we care about (primary, normal, bright);
|
|
||||||
-- nested ones like [colors.search.matches] won't match %a+ and are skipped
|
|
||||||
section = colors[sec] and sec or nil
|
|
||||||
elseif section then
|
|
||||||
local key, val = line:match("^(%a+)%s*=%s*['\"](#%x+)['\"]")
|
|
||||||
if key and val then
|
|
||||||
colors[section][key] = val
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
f:close()
|
|
||||||
return colors
|
|
||||||
end
|
|
||||||
|
|
||||||
function M.load()
|
|
||||||
local c = parse_alacritty_colors(THEME_PATH)
|
|
||||||
if not c or not c.primary.background or not c.primary.foreground then
|
|
||||||
vim.notify("noctalia theme not found or unparsable: " .. THEME_PATH, vim.log.levels.WARN)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local bg, fg = c.primary.background, c.primary.foreground
|
|
||||||
local n, b = c.normal, c.bright
|
|
||||||
local hl = vim.api.nvim_set_hl
|
|
||||||
|
|
||||||
local gray_dim = "#5a5a5a" -- comments, punctuation, gutter — de-emphasized
|
|
||||||
local gray_mid = "#7a7a7a" -- line numbers
|
|
||||||
|
|
||||||
-- The five accent colors — everything else stays monotone
|
|
||||||
local c_keyword = n.magenta
|
|
||||||
local c_function = n.blue
|
|
||||||
local c_parameter = b.white -- subtly brighter than fg, not a hue, keeps "args" scannable
|
|
||||||
local c_string = n.green
|
|
||||||
local c_comment = "#968466"
|
|
||||||
|
|
||||||
-- Base UI
|
|
||||||
hl(0, "Normal", { fg = fg, bg = bg })
|
|
||||||
hl(0, "NormalFloat", { fg = fg, bg = bg })
|
|
||||||
hl(0, "CursorLine", { bg = n.black })
|
|
||||||
hl(0, "Visual", { bg = n.black, fg = fg })
|
|
||||||
hl(0, "Pmenu", { fg = fg, bg = n.black })
|
|
||||||
hl(0, "PmenuSel", { fg = bg, bg = b.white })
|
|
||||||
hl(0, "LineNr", { fg = gray_mid })
|
|
||||||
hl(0, "CursorLineNr", { fg = b.white, bold = true })
|
|
||||||
hl(0, "SignColumn", { bg = bg })
|
|
||||||
hl(0, "VertSplit", { fg = n.black })
|
|
||||||
hl(0, "WinSeparator", { fg = n.black })
|
|
||||||
hl(0, "StatusLine", { fg = fg, bg = n.black })
|
|
||||||
hl(0, "StatusLineNC", { fg = gray_mid, bg = n.black })
|
|
||||||
hl(0, "Search", { fg = "#161616", bg = gray_mid })
|
|
||||||
hl(0, "IncSearch", { fg = "#161616", bg = b.white })
|
|
||||||
|
|
||||||
-- Treesitter capture groups — the five accented categories
|
|
||||||
hl(0, "@comment", { fg = c_comment, italic = true })
|
|
||||||
|
|
||||||
hl(0, "@keyword", { fg = c_keyword })
|
|
||||||
hl(0, "@keyword.function", { fg = c_keyword })
|
|
||||||
hl(0, "@keyword.return", { fg = c_keyword })
|
|
||||||
hl(0, "@conditional", { fg = c_keyword })
|
|
||||||
hl(0, "@repeat", { fg = c_keyword })
|
|
||||||
|
|
||||||
hl(0, "@function", { fg = c_function })
|
|
||||||
hl(0, "@function.builtin", { fg = c_function })
|
|
||||||
hl(0, "@function.call", { fg = c_function })
|
|
||||||
hl(0, "@method", { fg = c_function })
|
|
||||||
hl(0, "@method.call", { fg = c_function })
|
|
||||||
|
|
||||||
hl(0, "@parameter", { fg = c_parameter, italic = true })
|
|
||||||
|
|
||||||
hl(0, "@string", { fg = c_string })
|
|
||||||
hl(0, "@string.escape", { fg = c_string, bold = true })
|
|
||||||
|
|
||||||
-- Everything else — monotone, falls back to fg or gray
|
|
||||||
hl(0, "@variable", { fg = fg })
|
|
||||||
hl(0, "@variable.builtin", { fg = fg })
|
|
||||||
hl(0, "@type", { fg = fg })
|
|
||||||
hl(0, "@type.builtin", { fg = fg })
|
|
||||||
hl(0, "@constructor", { fg = fg })
|
|
||||||
hl(0, "@constant", { fg = fg })
|
|
||||||
hl(0, "@constant.builtin", { fg = fg })
|
|
||||||
hl(0, "@property", { fg = fg })
|
|
||||||
hl(0, "@field", { fg = fg })
|
|
||||||
hl(0, "@number", { fg = fg })
|
|
||||||
hl(0, "@boolean", { fg = fg })
|
|
||||||
hl(0, "@tag", { fg = fg })
|
|
||||||
hl(0, "@tag.attribute", { fg = fg })
|
|
||||||
hl(0, "@operator", { fg = gray_mid })
|
|
||||||
hl(0, "@punctuation.delimiter", { fg = gray_dim })
|
|
||||||
hl(0, "@punctuation.bracket", { fg = gray_dim })
|
|
||||||
|
|
||||||
-- Legacy / non-Treesitter syntax groups (classic :syntax highlighting —
|
|
||||||
-- used by filetypes with no Treesitter parser, or plugins that still
|
|
||||||
-- rely on regex-based syntax files). Mirrors the same monotone scheme.
|
|
||||||
hl(0, "Comment", { fg = c_comment, italic = true })
|
|
||||||
|
|
||||||
hl(0, "Statement", { fg = c_keyword })
|
|
||||||
hl(0, "Keyword", { fg = c_keyword })
|
|
||||||
hl(0, "Conditional", { fg = c_keyword })
|
|
||||||
hl(0, "Repeat", { fg = c_keyword })
|
|
||||||
hl(0, "Label", { fg = c_keyword })
|
|
||||||
hl(0, "Exception", { fg = c_keyword })
|
|
||||||
|
|
||||||
hl(0, "Function", { fg = c_function })
|
|
||||||
|
|
||||||
hl(0, "String", { fg = c_string })
|
|
||||||
hl(0, "Character", { fg = c_string })
|
|
||||||
|
|
||||||
-- Everything else — monotone, no separate hue
|
|
||||||
hl(0, "Identifier", { fg = fg })
|
|
||||||
hl(0, "Constant", { fg = fg })
|
|
||||||
hl(0, "Number", { fg = fg })
|
|
||||||
hl(0, "Boolean", { fg = fg })
|
|
||||||
hl(0, "Float", { fg = fg })
|
|
||||||
hl(0, "Type", { fg = fg })
|
|
||||||
hl(0, "StorageClass", { fg = fg })
|
|
||||||
hl(0, "Structure", { fg = fg })
|
|
||||||
hl(0, "Typedef", { fg = fg })
|
|
||||||
hl(0, "PreProc", { fg = fg })
|
|
||||||
hl(0, "Include", { fg = fg })
|
|
||||||
hl(0, "Define", { fg = fg })
|
|
||||||
hl(0, "Macro", { fg = fg })
|
|
||||||
hl(0, "PreCondit", { fg = fg })
|
|
||||||
hl(0, "Special", { fg = fg })
|
|
||||||
hl(0, "SpecialChar", { fg = fg })
|
|
||||||
hl(0, "SpecialComment", { fg = c_comment, italic = true })
|
|
||||||
hl(0, "Tag", { fg = fg })
|
|
||||||
hl(0, "Debug", { fg = fg })
|
|
||||||
hl(0, "Underlined", { fg = fg, underline = true })
|
|
||||||
hl(0, "Ignore", { fg = gray_dim })
|
|
||||||
|
|
||||||
hl(0, "Operator", { fg = gray_mid })
|
|
||||||
hl(0, "Delimiter", { fg = gray_dim })
|
|
||||||
|
|
||||||
-- Kept distinct: these are signals, not syntax decoration
|
|
||||||
hl(0, "Todo", { fg = n.yellow, bold = true })
|
|
||||||
hl(0, "Error", { fg = n.red, bold = true })
|
|
||||||
|
|
||||||
-- Diagnostics stay colored — functional signal, not syntax decoration
|
|
||||||
hl(0, "DiagnosticError", { fg = n.red })
|
|
||||||
hl(0, "DiagnosticWarn", { fg = n.yellow })
|
|
||||||
hl(0, "DiagnosticInfo", { fg = n.blue })
|
|
||||||
hl(0, "DiagnosticHint", { fg = n.cyan })
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Reapply automatically whenever Noctalia regenerates the Alacritty theme
|
|
||||||
-- (e.g. on a theme switch), without needing to restart Neovim.
|
|
||||||
function M.watch()
|
|
||||||
local w = vim.uv.new_fs_event()
|
|
||||||
if not w then return end
|
|
||||||
w:start(THEME_PATH, {}, vim.schedule_wrap(function()
|
|
||||||
M.load()
|
|
||||||
end))
|
|
||||||
end
|
|
||||||
|
|
||||||
return M
|
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
### Sway Config
|
|
||||||
include ~/.config/sway/noctalia
|
|
||||||
|
|
||||||
set $mod Mod4
|
|
||||||
|
|
||||||
### Applications
|
|
||||||
set $term alacritty
|
|
||||||
set $editor nvim
|
|
||||||
set $filemanager thunar
|
|
||||||
|
|
||||||
### Outputs
|
|
||||||
output HDMI-A-1 scale 1.21
|
|
||||||
|
|
||||||
### Appearance
|
|
||||||
seat seat0 xcursor_theme oreo_white_cursors 28
|
|
||||||
corner_radius 10
|
|
||||||
default_border pixel 4
|
|
||||||
default_floating_border pixel 4
|
|
||||||
gaps inner 8
|
|
||||||
gaps outer 0
|
|
||||||
focus_follows_mouse yes
|
|
||||||
|
|
||||||
### Workspaces
|
|
||||||
workspace 1
|
|
||||||
workspace 2
|
|
||||||
workspace 3
|
|
||||||
workspace 4
|
|
||||||
workspace 5
|
|
||||||
|
|
||||||
### Window behaviour
|
|
||||||
floating_modifier $mod
|
|
||||||
|
|
||||||
### Focus movement
|
|
||||||
bindsym $mod+h focus left
|
|
||||||
bindsym $mod+j focus down
|
|
||||||
bindsym $mod+k focus up
|
|
||||||
bindsym $mod+l focus right
|
|
||||||
|
|
||||||
### Move windows
|
|
||||||
bindsym $mod+Ctrl+h move left
|
|
||||||
bindsym $mod+Ctrl+j move down
|
|
||||||
bindsym $mod+Ctrl+k move up
|
|
||||||
bindsym $mod+Ctrl+l move right
|
|
||||||
|
|
||||||
### Resize
|
|
||||||
mode "resize" {
|
|
||||||
bindsym h resize shrink width 20px
|
|
||||||
bindsym j resize grow height 20px
|
|
||||||
bindsym k resize shrink height 20px
|
|
||||||
bindsym l resize grow width 20px
|
|
||||||
bindsym Return mode "default"
|
|
||||||
bindsym Escape mode "default"
|
|
||||||
}
|
|
||||||
bindsym $mod+Shift+r mode "resize"
|
|
||||||
|
|
||||||
### Split orientation
|
|
||||||
bindsym $mod+v splitv
|
|
||||||
bindsym $mod+b splith
|
|
||||||
|
|
||||||
### Layout
|
|
||||||
bindsym $mod+w layout toggle split
|
|
||||||
bindsym $mod+Shift+space layout default
|
|
||||||
|
|
||||||
### Fullscreen / floating / maximize
|
|
||||||
bindsym $mod+f fullscreen toggle
|
|
||||||
bindsym $mod+Ctrl+space floating toggle
|
|
||||||
bindsym $mod+m fullscreen disable, floating disable
|
|
||||||
|
|
||||||
### Kill window
|
|
||||||
bindsym $mod+q kill
|
|
||||||
|
|
||||||
### Window cycling
|
|
||||||
bindsym $mod+Tab focus next
|
|
||||||
|
|
||||||
### Workspace switching
|
|
||||||
bindsym $mod+1 workspace number 1
|
|
||||||
bindsym $mod+2 workspace number 2
|
|
||||||
bindsym $mod+3 workspace number 3
|
|
||||||
bindsym $mod+4 workspace number 4
|
|
||||||
bindsym $mod+5 workspace number 5
|
|
||||||
|
|
||||||
### Move container to workspace
|
|
||||||
bindsym $mod+Ctrl+1 move container to workspace number 1
|
|
||||||
bindsym $mod+Ctrl+2 move container to workspace number 2
|
|
||||||
bindsym $mod+Ctrl+3 move container to workspace number 3
|
|
||||||
bindsym $mod+Ctrl+4 move container to workspace number 4
|
|
||||||
bindsym $mod+Ctrl+5 move container to workspace number 5
|
|
||||||
|
|
||||||
### Floating rules
|
|
||||||
for_window [app_id="pavucontrol"] floating enable
|
|
||||||
for_window [app_id="blueman-manager"] floating enable
|
|
||||||
for_window [title="Event Tester"] floating enable
|
|
||||||
|
|
||||||
### Launchers / apps
|
|
||||||
set $ipc noctalia msg
|
|
||||||
bindsym $mod+Return exec $term
|
|
||||||
bindsym $mod+e exec $filemanager
|
|
||||||
# bindsym $mod+t exec $term
|
|
||||||
|
|
||||||
# Noctalia Settings
|
|
||||||
bindsym $mod+s exec $ipc settings-toggle
|
|
||||||
|
|
||||||
# Noctalia Panels
|
|
||||||
bindsym $mod+space exec $ipc panel-toggle launcher
|
|
||||||
bindsym $mod+n exec $ipc panel-toggle control-center
|
|
||||||
bindsym $mod+c exec $ipc panel-toggle clipboard
|
|
||||||
bindsym $mod+grave exec $ipc panel-toggle session
|
|
||||||
|
|
||||||
### Screenshot
|
|
||||||
bindsym $mod+Ctrl+p exec grimshot save area
|
|
||||||
|
|
||||||
### Audio keys
|
|
||||||
bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +2%
|
|
||||||
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -2%
|
|
||||||
bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
|
|
||||||
|
|
||||||
### Mouse bindings
|
|
||||||
bindsym --whole-window $mod+Button1 move
|
|
||||||
bindsym --whole-window $mod+Button3 resize
|
|
||||||
|
|
||||||
### Reload
|
|
||||||
bindsym $mod+Ctrl+r reload
|
|
||||||
|
|
||||||
### Startup
|
|
||||||
exec pgrep -x noctalia >/dev/null || noctalia
|
|
||||||
exec pipewire
|
|
||||||
exec snixembed --fork
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
set $primary #a9afbd
|
|
||||||
set $on_primary #121212
|
|
||||||
set $secondary #7d8390
|
|
||||||
set $tertiary #8b909c
|
|
||||||
set $error #c77b7b
|
|
||||||
set $surface #121212
|
|
||||||
set $on_surface #e8e8e8
|
|
||||||
set $on_surface_variant #b0b0b0
|
|
||||||
set $outline #616161
|
|
||||||
|
|
||||||
## Window Colours
|
|
||||||
# class border backgr. text indicator child_border
|
|
||||||
client.focused $primary $surface $on_surface $primary $primary
|
|
||||||
client.focused_inactive $outline $surface $on_surface_variant $outline $outline
|
|
||||||
client.unfocused $outline $surface $on_surface_variant $outline $outline
|
|
||||||
client.urgent $error $surface $on_surface $error $error
|
|
||||||
client.placeholder $surface $surface $on_surface_variant $surface $surface
|
|
||||||
client.background $surface
|
|
||||||
+7
-8
@@ -84,10 +84,9 @@ if [ "$DO_LINKS" = true ]; then
|
|||||||
SKIPPED=0
|
SKIPPED=0
|
||||||
|
|
||||||
link_file "$DOTFILES_DIR/config/bash/bashrc" "$HOME/.bashrc"
|
link_file "$DOTFILES_DIR/config/bash/bashrc" "$HOME/.bashrc"
|
||||||
link_file "$DOTFILES_DIR/config/alacritty" "$HOME/.config/alacritty"
|
|
||||||
link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata"
|
link_file "$DOTFILES_DIR/config/kanata" "$HOME/.config/kanata"
|
||||||
|
link_file "$DOTFILES_DIR/config/alacritty" "$HOME/.config/alacritty"
|
||||||
link_file "$DOTFILES_DIR/config/nvim" "$HOME/.config/nvim"
|
link_file "$DOTFILES_DIR/config/nvim" "$HOME/.config/nvim"
|
||||||
link_file "$DOTFILES_DIR/config/sway" "$HOME/.config/sway"
|
|
||||||
link_file "$DOTFILES_DIR/scripts/bin" "$HOME/.local/bin"
|
link_file "$DOTFILES_DIR/scripts/bin" "$HOME/.local/bin"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
@@ -150,15 +149,15 @@ if [ "$DO_INSTALL" = true ]; then
|
|||||||
# network & download
|
# network & download
|
||||||
wget curl ca-certificates gnupg rsync
|
wget curl ca-certificates gnupg rsync
|
||||||
# core utilities
|
# core utilities
|
||||||
git unzip jq fzf tree direnv make
|
git fd jq fzf ripgrep tree direnv make bat
|
||||||
# modern shell and cli tools
|
ark unzip p7zip tar gzip bzip2 xz kanata
|
||||||
fish-shell alacritty fd ripgrep bat
|
gitu
|
||||||
# build & dev tools
|
# build & dev tools
|
||||||
base-devel valgrind tree-sitter-cli go nodejs
|
alacritty base-devel valgrind tree-sitter-cli go nodejs
|
||||||
# window manager & desktop
|
|
||||||
swayfx kanata
|
|
||||||
# fonts
|
# fonts
|
||||||
noto-fonts-ttf noto-fonts-emoji
|
noto-fonts-ttf noto-fonts-emoji
|
||||||
|
# kde
|
||||||
|
xdg-desktop-portal xdg-desktop-portal-kde
|
||||||
)
|
)
|
||||||
|
|
||||||
MISSING_PACKAGES=()
|
MISSING_PACKAGES=()
|
||||||
|
|||||||
@@ -5,10 +5,11 @@
|
|||||||
# Builds from source - recommended method on Linux
|
# Builds from source - recommended method on Linux
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
set -e
|
set -e
|
||||||
ODIN_DIR="$HOME/odin"
|
ODIN_DIR="$HOME/.odin"
|
||||||
|
|
||||||
echo "Installing Odin build dependencies..."
|
echo "Installing Odin build dependencies..."
|
||||||
sudo xbps-install -Sy llvm18 llvm18-devel clang18 libstdc++-devel
|
sudo xbps-install -Sy llvm18 llvm18-devel clang18 libstdc++-devel git-lfs
|
||||||
|
git lfs install
|
||||||
|
|
||||||
echo "Cloning Odin repository..."
|
echo "Cloning Odin repository..."
|
||||||
git clone https://github.com/odin-lang/Odin "$ODIN_DIR"
|
git clone https://github.com/odin-lang/Odin "$ODIN_DIR"
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
# Golang install recipe
|
# PHP install recipe
|
||||||
# Fetches the void php version
|
# Fetches the void php version and composer package
|
||||||
# then installs composer with php
|
|
||||||
# ---------------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------------
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user