This commit is contained in:
2026-07-12 08:17:35 +03:30
commit 6ae76a758f
48 changed files with 4250 additions and 0 deletions
@@ -0,0 +1,15 @@
[window]
dimensions = { columns = 100, lines = 25 }
dynamic_title = true
opacity = 0.98
[font]
normal = { family = "Iosevka Nerd Font Propo", style = "Regular" }
size = 13.0
[cursor]
style = { shape = "Underline", blinking = "Off" }
[colors]
primary = { background = "#000000", foreground = "#e0e0e0" }
cursor = { cursor = "#e0e0e0", text = "#121212" }
selection = { background = "#e0e0e0", text = "#121212" }
normal = { black = "#121212", red = "#d32f2f", green = "#4caf50", yellow = "#ffeb3b", blue = "#2196f3", magenta = "#9c27b0", cyan = "#00bcd4", white = "#e0e0e0" }
bright = { black = "#757575", red = "#f44336", green = "#8bc34a", yellow = "#ffc107", blue = "#3f51b5", magenta = "#673ab7", cyan = "#009688", white = "#ffffff" }
@@ -0,0 +1,14 @@
general {
lock_cmd = pidof hyprlock || hyprlock
}
listener {
timeout = 300
on-timeout = hyprlock
}
listener {
timeout = 600
on-timeout = hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
+217
View File
@@ -0,0 +1,217 @@
#monitor=DP-1,1920x1080@75,auto,1
monitor=HDMI-A-1,1920x1080@100.00,auto,1
hide_on_fullscreen = true
$terminal = footclient
$menu = rofi -show drun -config /home/coast/.config/rofi/config.rasi
$webBrowser = firefox-bin
$discordApp = vesktop-bin --proxy-server="socks5://127.0.0.1:65000"
$restartWaybar = pkill waybar; waybar&disown
$fileManager = pcmanfm
exec-once = hyprctl setcursor Adwaita 24 &
exec-once = wbg /home/coast/Pictures/walls/wallhaven-yq5dmg_1920x1080.png &
exec-once = hypridle &
exec-once = hyprpm reload -n;
exec-once = dbus-update-activation-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=Hyprland
exec-once = gnome-keyring-daemon --start --components=secrets
exec-once = waybar &
exec-once = mpd ~/.mpdconf &
exec-once = mpc add /;
exec-once = foot --server;
exec-once = flatpak override --env=GTK_THEME=Catppuccin-B-MB-Dark --user;
env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24
general {
gaps_in = 5
gaps_out = 15
border_size = 2
col.active_border = rgba(6c6c9dee) rgba(1e1e2eee) 45deg
col.inactive_border = rgba(1e1e2eaa)
resize_on_border = false
allow_tearing = false
layout = master
}
decoration {
rounding = 10
active_opacity = 1.0
inactive_opacity = 1.0
shadow {
enabled = true
range = 4
render_power = 3
color = rgba(1a1a1aee)
}
blur {
enabled = true
size = 3
passes = 1
vibrancy = 0.1696
new_optimizations = true
}
}
animations {
enabled = yes
bezier = shot, 0.2, 1, 0.3, 1
bezier = swipe, 0.6, 0, 0.4, 1
bezier = bounce, 0.1, 1.1, 0.3, 1
animation = windows, 1, 3, bounce, popin 80%
animation = windowsIn, 1, 3, bounce, popin 80%
animation = windowsOut, 1, 2, shot, popin 80%
animation = border, 1, 2, default
animation = fade, 1, 2, default
animation = layers, 1, 4, swipe, slide top
animation = layersIn, 1, 4, swipe, slide top
animation = layersOut, 1, 2, swipe, slide top
animation = workspaces, 1, 3, swipe, slide
}
master {
new_status = slave
}
misc {
force_default_wallpaper = 0
disable_hyprland_logo = true
}
input {
kb_layout = us
follow_mouse = 1
sensitivity = 0
}
$mainMod = SUPER
bind = $mainMod, Return, exec, $terminal
bind = $mainMod, S, killactive,
bind = $mainMod, M, exec, killall eww; eww daemon && eww open bar
bind = $mainMod SHIFT, Q, exit
bind = $mainMod, Space, togglefloating
bind = $mainMod, Space, resizeactive, exact 1000 800
bind = $mainMod, Space, centerwindow
bind = $mainMod, R, exec, $menu
bind = $mainMod, H, movefocus, l
bind = $mainMod, L, movefocus, r
bind = $mainMod, K, movefocus, u
bind = $mainMod, J, movefocus, d
bind = $mainMod SHIFT, H, movewindow, l
bind = $mainMod SHIFT, L, movewindow, r
bind = $mainMod SHIFT, K, movewindow, u
bind = $mainMod SHIFT, J, movewindow, d
binde = $mainMod ALT, H, resizeactive, -30 0
binde = $mainMod ALT, L, resizeactive, 30 0
binde = $mainMod ALT, K, resizeactive, 0 -30
binde = $mainMod ALT, J, resizeactive, 0 30
binde = $mainMod, left, moveactive, -40 0
binde = $mainMod, right, moveactive, 40 0
binde = $mainMod, up, moveactive, 0 -40
binde = $mainMod, down, moveactive, 0 40
binde = $mainMod SHIFT, left, resizeactive, -40 0
binde = $mainMod SHIFT, right, resizeactive, 40 0
binde = $mainMod SHIFT, up, resizeactive, 0 -40
binde = $mainMod SHIFT, down, resizeactive, 0 40
bind = $mainMod, Backslash, centerwindow,
workspace = 2, monitor:HDMI-A-1
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod, C, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, exec, grim -g "$(slurp)" - | wl-copy
bind = $mainMod CONTROL, L, exec, hyprlock
bind = $mainMod SHIFT, B, exec, $webBrowser
bind = $mainMod SHIFT, V, exec, $discordApp
bind = $mainMod, F, exec, $fileManager
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow
bind = $mainMod SHIFT, P, exec, $restartWaybar
plugin {
hyprbars {
enabled = true
bar_height = 25
bar_color = rgba(1e1e2eaa)
bar_blur = true
bar_title_enabled = true
bar_text_font = "JetBrainsMono Nerd Font"
bar_text_size = 12
bar_text_align = center
col.text = rgba(ffffffdd)
bar_buttons_alignment = left
bar_padding = 10
bar_button_padding = 6
icon_on_hover = false
hyprbars-button = rgb(ff5f57), 14, , hyprctl dispatch killactive
hyprbars-button = rgb(febb2e), 14, , hyprctl dispatch togglefloating
hyprbars-button = rgb(28c840), 14, , hyprctl dispatch fullscreen 1
on_double_click = hyprctl dispatch fullscreen 1
}
hyprexpo {
columns = 3
gap_size = 5
bg_col = rgba(1e1e2eaa)
workspace_method = center current
gesture_distance = 300
}
}
bind = $mainMod, e, hyprexpo:expo, toggle
bind = $mainMod ALT, up, exec, /home/coast/.local/bin/mpc-shuf.sh shuf
bind = $mainMod ALT, down, exec, /home/coast/.local/bin/mpc-shuf.sh shufno
bind = $mainMod ALT, right, exec, /home/coast/.local/bin/mpc-shuf.sh next
bind = $mainMod ALT, left, exec, /home/coast/.local/bin/mpc-shuf.sh prev
bind = $mainMod SHIFT, R, exec, /home/coast/.local/bin/mpc-shuf.sh search
bind = $mainMod CONTROL, R, exec, /home/coast/.local/bin/mpc-shuf.sh album
bind = $mainMod ALT, R, exec, /home/coast/.local/bin/mpc-shuf.sh artist
bind = $mainMod, slash, exec, /home/coast/.local/bin/mpc-shuf.sh info
bind = $mainMod, comma, exec, mpc volume -5
bind = $mainMod, period, exec, mpc volume +5
bind = $mainMod, bracketright, exec, /home/coast/.local/bin/mpc-shuf.sh toggle
bind = $mainMod CONTROL, up, exec, mpc stop; mpc add /; notify-send "Reset MPC!"
xwayland {
enabled = true
}
@@ -0,0 +1,35 @@
background {
monitor =
path = screenshot
blur_passes = 3
blur_size = 12
dim = 0.4
}
input-field {
monitor =
size = 350, 60
position = 0, -100
rounding = 0
border_width = 2
font = "JetBrainsMono Nerd Font"
font_size = 22
font_color = rgb(245, 224, 220)
inner_color = rgb(30, 24, 36)
outer_color = rgb(58, 52, 70)
border_color = rgb(252, 205, 205)
placeholder_text = "Password..."
fade_on_empty = true
}
label {
monitor =
text = $TIME
font = "JetBrainsMono Nerd Font"
font_size = 64
position = 0, 100
color = rgb(245, 224, 220)
}
+3
View File
@@ -0,0 +1,3 @@
preload = ~/Pictures/Wallpapers/flowers.png
wallpaper = HDMI-A-1,~/Pictures/Wallpapers/flowers.png
wallpaper = eDP-1,~/Pictures/Wallpapers/flowers.png
+266
View File
@@ -0,0 +1,266 @@
spawn-at-startup "waybar"
spawn-at-startup "awww-daemon"
spawn-at-startup "awww" "img" "/home/coast/Wallpapers/nature2art.png"
spawn-sh-at-startup "XDG_DATA_DIRS=/etc/profiles/per-user/coast/share:/run/current-system/sw/share:$HOME/.nix-profile/share:$XDG_DATA_DIRS"
input {
mod-key "Super"
keyboard {
xkb {
options "altwin:swap_alt_win"
}
numlock
repeat-delay 600
repeat-rate 25
}
touchpad {
tap
natural-scroll
}
trackpoint {
}
}
gestures {
hot-corners {
off
}
}
cursor {
xcursor-theme "Adwaita"
xcursor-size 24
}
output "HDMI-A-1" {
mode "1920x1080@100"
scale 1
transform "normal"
}
output "DP-1" {
mode "1920x1080@74.973"
scale 1
transform "normal"
}
output "eDP-1" {
off
scale 1
transform "normal"
position x=1280 y=0
}
layout {
gaps 10
center-focused-column "never"
preset-column-widths {
proportion 0.33333
proportion 0.5
proportion 0.66667
}
default-column-width {
proportion 0.5;
}
focus-ring {
width 2.5
active-color "#0E0F12"
inactive-color "#191724"
}
shadow {
on
softness 30
spread 5
offset x=0 y=5
color "#0007"
}
struts {
}
}
prefer-no-csd
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
window-rule {
match title="Waydroid"
open-fullscreen true
}
window-rule {
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
open-floating true
}
window-rule {
match app-id=r#"waydroid$"#
open-fullscreen true
}
window-rule {
geometry-corner-radius 7
clip-to-geometry true
}
binds {
Mod+Shift+Slash { show-hotkey-overlay; }
Mod+Return hotkey-overlay-title="Open a Terminal: alacritty" { spawn "alacritty"; }
Mod+R hotkey-overlay-title="Run an Application: rofi" {
spawn-sh "XDG_DATA_DIRS=/etc/profiles/per-user/coast/share:/run/current-system/sw/share:$HOME/.nix-profile/share:$XDG_DATA_DIRS rofi -show drun -config ~/.config/rofi/config.rasi"
}
Mod+Shift+Return hotkey-overlay-title="Run an application: rofi (run)" { spawn-sh "rofi -show run -config ~/.config/rofi/config.rasi"; }
Super+Alt+L hotkey-overlay-title="Lock the screen" { spawn "hyprlock"; }
Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+"; }
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
Mod+O repeat=false { toggle-overview; }
Mod+S repeat=false { close-window; }
Mod+Left { focus-column-left; }
Mod+Down { focus-window-down; }
Mod+Up { focus-window-up; }
Mod+Right { focus-column-right; }
Mod+H { focus-column-left; }
Mod+J { focus-window-down; }
Mod+K { focus-window-up; }
Mod+L { focus-column-right; }
Mod+T {
spawn "sh" "-c" "pkill trayer 2>/dev/null; trayer --edge top --align right --widthtype pixel --width 350 --height 32 --padding 6 --transparent true --alpha 0 --tint 0x1e1e1e & pid=$!; sleep 15; kill $pid 2>/dev/null";
}
Mod+Ctrl+Left { move-column-left; }
Mod+Ctrl+Down { move-window-down; }
Mod+Ctrl+Up { move-window-up; }
Mod+Ctrl+Right { move-column-right; }
Mod+Shift+H { move-column-left; }
Mod+Shift+J { move-window-down; }
Mod+Shift+K { move-window-up; }
Mod+Shift+L { move-column-right; }
Mod+Home { focus-column-first; }
Mod+End { focus-column-last; }
Mod+Ctrl+Home { move-column-to-first; }
Mod+Ctrl+End { move-column-to-last; }
Mod+Shift+Left { focus-monitor-left; }
Mod+Shift+Down { focus-monitor-down; }
Mod+Shift+Up { focus-monitor-up; }
Mod+Shift+Right { focus-monitor-right; }
Mod+Ctrl+H { focus-monitor-left; }
Mod+Ctrl+J { focus-monitor-down; }
Mod+Ctrl+K { focus-monitor-up; }
Mod+Ctrl+L { focus-monitor-right; }
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
Mod+Page_Down { focus-workspace-down; }
Mod+Page_Up { focus-workspace-up; }
Mod+N { focus-workspace-down; }
Mod+M { focus-workspace-up; }
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
Mod+Ctrl+M { move-column-to-workspace-down; }
Mod+Ctrl+N { move-column-to-workspace-up; }
Mod+Shift+P hotkey-overlay-title="Restart waybar and eww" { spawn-sh "pkill waybar && waybar & disown && eww kill && eww daemon && eww open-many year month day daytype"; }
Mod+Shift+Page_Down { move-workspace-down; }
Mod+Shift+Page_Up { move-workspace-up; }
Mod+Shift+M { move-workspace-down; }
Mod+Shift+N { move-workspace-up; }
Mod+1 { focus-workspace 1; }
Mod+2 { focus-workspace 2; }
Mod+3 { focus-workspace 3; }
Mod+4 { focus-workspace 4; }
Mod+5 { focus-workspace 5; }
Mod+6 { focus-workspace 6; }
Mod+7 { focus-workspace 7; }
Mod+8 { focus-workspace 8; }
Mod+9 { focus-workspace 9; }
Mod+Shift+1 { move-column-to-workspace 1; }
Mod+Shift+2 { move-column-to-workspace 2; }
Mod+Shift+3 { move-column-to-workspace 3; }
Mod+Shift+4 { move-column-to-workspace 4; }
Mod+Shift+5 { move-column-to-workspace 5; }
Mod+Shift+6 { move-column-to-workspace 6; }
Mod+Shift+7 { move-column-to-workspace 7; }
Mod+Shift+8 { move-column-to-workspace 8; }
Mod+Shift+9 { move-column-to-workspace 9; }
Mod+Shift+F8 { spawn-sh "obs-cmd -w \"obsws://127.0.0.1:4455\" replay save"; }
Mod+BracketLeft { consume-or-expel-window-left; }
Mod+BracketRight { consume-or-expel-window-right; }
Mod+Comma { consume-window-into-column; }
Mod+Period { expel-window-from-column; }
Mod+D { switch-preset-column-width; }
Mod+Shift+R { switch-preset-window-height; }
Mod+Ctrl+R { reset-window-height; }
Mod+W { maximize-column; }
Mod+Shift+W { fullscreen-window; }
Mod+Ctrl+F { expand-column-to-available-width; }
Mod+C { center-column; }
Mod+Ctrl+C { center-visible-columns; }
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
Mod+Shift+Minus { set-window-height "-10%"; }
Mod+Shift+Equal { set-window-height "+10%"; }
Mod+Space { toggle-window-floating; }
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
Mod+Shift+F { toggle-column-tabbed-display; }
Mod+F hotkey-overlay-title="Spawn file manager (caja)" { spawn-sh "XDG_DATA_DIRS=/etc/profiles/per-user/coast/share:/run/current-system/sw/share:$HOME/.nix-profile/share:$XDG_DATA_DIRS caja"; }
Print { screenshot; }
Super+Shift+S { screenshot; }
Control+Alt+S { screenshot-window; }
Ctrl+Print { screenshot-screen; }
Alt+Print { screenshot-window; }
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
Mod+Shift+E { quit; }
Ctrl+Alt+Delete { quit; }
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
Mod+WheelScrollRight { focus-column-right; }
Mod+WheelScrollLeft { focus-column-left; }
Mod+Ctrl+WheelScrollRight { move-column-right; }
Mod+Ctrl+WheelScrollLeft { move-column-left; }
Mod+Shift+WheelScrollDown { focus-column-right; }
Mod+Shift+WheelScrollUp { focus-column-left; }
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
}
+10
View File
@@ -0,0 +1,10 @@
require("plugins/lazy")
require("plugins/lsp")
require("plugins/nvim-tree")
require("plugins/telescope")
require("plugins/treesitter")
require("config")
require("plugins/render-markdown")
--require("status_line").setup()
require("plugins/lualine")
require("plugins/catppuccin")
+39
View File
@@ -0,0 +1,39 @@
{
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
"cmp-cmdline": { "branch": "main", "commit": "d126061b624e0af6c3a556428712dd4d4194ec6d" },
"cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
"cmp-nvim-lua": { "branch": "main", "commit": "e3a22cb071eb9d6508a156306b102c45cd2d573d" },
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
"cmp-spell": { "branch": "master", "commit": "694a4e50809d6d645c1ea29015dad0c293f019d6" },
"cmp-vsnip": { "branch": "main", "commit": "989a8a73c44e926199bfd05fa7a516d51f2d2752" },
"comfy-line-numbers.nvim": { "branch": "main", "commit": "9adedbaf1f410cdaacf4fb2ca8eb44f3d5f6d010" },
"fterm.nvim": { "branch": "master", "commit": "d1320892cc2ebab472935242d9d992a2c9570180" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lsp_signature.nvim": { "branch": "master", "commit": "b7ace9ddb1640ce266012a45a672dfdaedfa5ec6" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"mason.nvim": { "branch": "main", "commit": "16ba83bfc8a25f52bb545134f5bee082b195c460" },
"mini.nvim": { "branch": "main", "commit": "d5e6f5b843f1d813d9c4bfb242b751dc5ab6f8ae" },
"moonfly": { "branch": "master", "commit": "261664f92ed51cf0c077555b2d4b2530307eac17" },
"none-ls-extras.nvim": { "branch": "main", "commit": "27681d797a26f1b4d6119296df42f5204c88a2dc" },
"none-ls.nvim": { "branch": "main", "commit": "01f8e62ea11603e59ad9ff7afcfa94fd183f76d6" },
"nvim": { "branch": "main", "commit": "0303a7208dba448c459767486a38a6ec05c4216b" },
"nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" },
"nvim-cmp": { "branch": "main", "commit": "a1d504892f2bc56c2e79b65c6faded2fd21f3eca" },
"nvim-lspconfig": { "branch": "master", "commit": "229b79051b380377664edc4cbd534930154921a1" },
"nvim-numbertoggle": { "branch": "main", "commit": "c5c0d305aee8532b5515914a08396b9154394c55" },
"nvim-toggler": { "branch": "main", "commit": "467808600882fd6c9e33b9dbc4889b1b80cfd917" },
"nvim-tree.lua": { "branch": "master", "commit": "07f541fcaa4a5ae019598240362449ab7e9812b3" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
"nvim-web-devicons": { "branch": "master", "commit": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c" },
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
"presence.nvim": { "branch": "main", "commit": "87c857a56b7703f976d3a5ef15967d80508df6e6" },
"render-markdown.nvim": { "branch": "main", "commit": "5adf0895310c1904e5abfaad40a2baad7fe44a07" },
"telescope-undo.nvim": { "branch": "main", "commit": "928d0c2dc9606e01e2cc547196f48d2eaecf58e5" },
"telescope.nvim": { "branch": "master", "commit": "d90956833d7c27e73c621a61f20b29fdb7122709" },
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
"twilight.nvim": { "branch": "main", "commit": "664e752f4a219801265cc3fc18782b457b58c1e1" },
"typst-preview.nvim": { "branch": "master", "commit": "325036ee145ca51d9efb145c09ac16bce3bc8b7d" },
"vim-closetag": { "branch": "master", "commit": "d0a562f8bdb107a50595aefe53b1a690460c3822" },
"vim-vsnip": { "branch": "master", "commit": "9bcfabea653abdcdac584283b5097c3f8760abaa" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
}
+89
View File
@@ -0,0 +1,89 @@
local opt = vim.opt
local map = vim.keymap.set
local g = vim.g
--filetypes
vim.cmd("autocmd BufRead,BufNewFile *.m set filetype=objc")
g.mapleader = " "
opt.shiftwidth = 4
opt.tabstop = 4
opt.softtabstop = 4
opt.smarttab = true
opt.smartindent = true
opt.undofile = true
opt.undodir = vim.fn.stdpath("config") .. "/undo"
opt.number = true
opt.relativenumber = true
opt.fillchars = "eob: "
g.loaded_netrw = 1
g.loaded_netrwPlugin = 1
opt.termguicolors = true
opt.spell = false
opt.spelllang = { "en_us" }
opt.shell = "/usr/bin/zsh"
vim.lsp.handlers["textDocument/hover"] = function(err, result, ctx, config)
config = config or {}
config.border = "single"
return vim.lsp.handlers.hover(err, result, ctx, config)
end
vim.diagnostic.config({ float = { border = "single" } })
map("n", "<leader>u", ":Telescope<cr>")
map("n", "<leader>t", ":tabnew<cr>")
map("n", "<A-Right>", ":tabn<cr>")
map("n", "<A-Left>", ":tabp<cr>")
map("n", "<A-q>", ":bw<cr>")
map("n", "<leader>.", vim.diagnostic.open_float)
map("n", "<leader>=", "=")
map("n", "<leader>x", "<cmd>!chmod +x %<CR>")
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup("UserLspConfig", {}),
callback = function(ev)
vim.bo[ev.buf].omnifunc = "v:lua.vim.lsp.omnifunc"
local opts = { buffer = ev.buf }
map("n", "K", function()
vim.lsp.buf.hover({ border = "single" })
end, opts)
map("n", "gi", vim.lsp.buf.implementation, opts)
map("n", "<C-k>", vim.lsp.buf.signature_help, opts)
map("n", "<space>wa", vim.lsp.buf.add_workspace_folder, opts)
map("n", "<space>wr", vim.lsp.buf.remove_workspace_folder, opts)
map("n", "<space>wl", function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, opts)
map("n", "<space>D", vim.lsp.buf.type_definition, opts)
map("n", "<space>rn", vim.lsp.buf.rename, opts)
map({ "n", "v" }, "<space>ca", vim.lsp.buf.code_action, opts)
map("n", "gr", vim.lsp.buf.references, opts)
map("n", "<space>f", function()
vim.lsp.buf.format({ async = true })
end, opts)
end,
})
local builtin = require("telescope.builtin")
map("n", "<leader>ff", builtin.find_files, {})
map("n", "<leader>fg", builtin.live_grep, {})
map("n", "<leader>fb", builtin.buffers, {})
map("n", "<leader>fh", builtin.help_tags, {})
local treeapi = require("nvim-tree.api")
map("n", "<leader>e", treeapi.tree.toggle, {})
map("n", "<A-i>", '<CMD>lua require("FTerm").toggle()<CR>')
map("t", "<A-i>", '<C-\\><C-n><CMD>lua require("FTerm").toggle()<CR>')
@@ -0,0 +1,90 @@
local colors = {
black = "#121212",
white = "#ffffff",
gray = "#7e7e7e",
light_gray = "#d0d0d0",
dark_gray = "#505050",
red = "#ff5c57",
green = "#5af78e",
yellow = "#f3f99d",
blue = "#57c7ff",
purple = "#d183e8",
cyan = "#9aedfe",
}
local highlights = {
Normal = { fg = colors.light_gray, bg = "NONE" },
NormalNC = { fg = colors.light_gray, bg = "NONE" },
SignColumn = { bg = "NONE" },
FoldColumn = { bg = "NONE" },
Comment = { fg = colors.gray, italic = true },
Constant = { fg = colors.blue },
String = { fg = colors.green },
Identifier = { fg = colors.blue },
Function = { fg = colors.purple },
Statement = { fg = colors.yellow },
PreProc = { fg = colors.cyan },
Type = { fg = colors.blue },
Special = { fg = colors.red },
Underlined = { fg = colors.white, underline = true },
Todo = { fg = colors.black, bg = colors.yellow, bold = true },
StatusLine = { fg = colors.white, bg = "NONE" },
StatusLineNC = { fg = colors.light_gray, bg = "NONE" },
NvimTreeNormal = { fg = colors.light_gray, bg = "NONE" },
NvimTreeNormalNC = { fg = colors.light_gray, bg = "NONE" },
NvimTreeWinSeparator = { fg = colors.dark_gray, bg = "NONE" },
NvimTreeFolderName = { fg = colors.blue, bold = true },
NvimTreeOpenedFolderName = { fg = colors.green, bold = true },
NvimTreeRootFolder = { fg = colors.yellow, bold = true, underline = true },
NvimTreeFileIcon = { fg = colors.light_gray },
NvimTreeGitDirty = { fg = colors.red },
NvimTreeGitStaged = { fg = colors.green },
NvimTreeGitNew = { fg = colors.blue },
NvimTreeGitRenamed = { fg = colors.purple },
NvimTreeGitDeleted = { fg = colors.red },
CursorLine = { bg = colors.dark_gray },
}
for group, opts in pairs(highlights) do
vim.api.nvim_set_hl(0, group, opts)
end
local inactive_style = { fg = colors.dark_gray, bg = "NONE" }
require("lualine").setup({
options = {
theme = {
normal = {
a = { fg = colors.black, bg = colors.white, gui = "bold" },
b = { fg = colors.white, bg = colors.dark_gray },
c = { fg = colors.white, bg = "NONE" },
},
inactive = {
a = { fg = colors.dark_gray, bg = "NONE", gui = "bold" },
b = inactive_style,
c = inactive_style,
},
},
},
})
require("nvim-tree").setup({
view = {
width = 30,
side = "left",
},
renderer = {
highlight_git = true,
root_folder_modifier = ":~",
icons = {
show = {
file = true,
folder = true,
git = true,
},
},
},
filters = {
dotfiles = false,
},
})
+17
View File
@@ -0,0 +1,17 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable",
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
local lazy_plugins = require("plugins/lazy/plugins")
require("lazy").setup(lazy_plugins)
require("mason").setup()
+129
View File
@@ -0,0 +1,129 @@
return {
"andweeb/presence.nvim",
"catppuccin/nvim",
"neovim/nvim-lspconfig",
"williamboman/mason.nvim",
{
"nvim-telescope/telescope.nvim",
tag = "0.1.5",
dependencies = { "nvim-lua/plenary.nvim" },
},
{
"nvim-tree/nvim-tree.lua",
dependencies = { "nvim-tree/nvim-web-devicons" },
},
{
"folke/todo-comments.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
opts = {},
},
{
"nvim-lualine/lualine.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
},
{
"nvimtools/none-ls.nvim",
dependencies = {
"nvimtools/none-ls-extras.nvim",
},
},
{
"windwp/nvim-autopairs",
event = "InsertEnter",
},
{
"hrsh7th/nvim-cmp",
dependencies = {
"neovim/nvim-lspconfig",
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-nvim-lua",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"hrsh7th/cmp-cmdline",
"hrsh7th/cmp-vsnip",
"hrsh7th/vim-vsnip",
},
},
{
"ray-x/lsp_signature.nvim",
event = "VeryLazy",
},
{
"nvim-treesitter/nvim-treesitter",
lazy = false,
priority = 1000,
build = ":TSUpdate",
},
"f3fora/cmp-spell",
{
"debugloop/telescope-undo.nvim",
dependencies = {
{
"nvim-telescope/telescope.nvim",
dependencies = { "nvim-lua/plenary.nvim" },
},
},
},
{
"chomosuke/typst-preview.nvim",
lazy = false,
version = "1.*",
opts = {},
},
{
"MeanderingProgrammer/render-markdown.nvim",
dependencies = {
"nvim-treesitter/nvim-treesitter",
"nvim-mini/mini.nvim",
},
opts = {},
},
"sitiom/nvim-numbertoggle",
"mluders/comfy-line-numbers.nvim",
{
"folke/which-key.nvim",
event = "VeryLazy",
init = function()
vim.o.timeout = true
vim.o.timeoutlen = 300
end,
},
{
"folke/twilight.nvim",
opts = {
dimming = {
alpha = 0.35,
color = { "Normal" },
term_bg = "#282828",
inactive = false,
},
context = 15,
treesitter = true,
expand = {
"function",
"method",
"table",
"if_statement",
},
exclude = {
"md",
},
},
},
"nguyenvukhang/nvim-toggler",
"alvan/vim-closetag",
{
"numtostr/fterm.nvim",
border = "double",
dimensions = {
height = 0.9,
width = 0.9,
},
},
{
"bluz71/vim-moonfly-colors",
name = "moonfly",
lazy = false,
priority = 1000,
},
}
+305
View File
@@ -0,0 +1,305 @@
local lsp = require("lspconfig")
local cmp = require("cmp")
vim.lsp.config('*', {
root_markers = { '.git' },
})
vim.diagnostic.config({
virtual_text = true,
severity_sort = true,
float = {
style = 'minimal',
border = 'rounded',
source = 'if_many',
header = '',
prefix = '',
},
signs = {
text = {
[vim.diagnostic.severity.ERROR] = '',
[vim.diagnostic.severity.WARN] = '',
[vim.diagnostic.severity.HINT] = '',
[vim.diagnostic.severity.INFO] = '»',
},
},
})
local orig = vim.lsp.util.open_floating_preview
---@diagnostic disable-next-line: duplicate-set-field
function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...)
opts = opts or {}
opts.border = opts.border or 'rounded'
opts.max_width = opts.max_width or 80
opts.max_height = opts.max_height or 24
opts.wrap = opts.wrap ~= false
return orig(contents, syntax, opts, ...)
end
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('my.lsp', {}),
callback = function(args)
local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
local buf = args.buf
local map = function(mode, lhs, rhs) vim.keymap.set(mode, lhs, rhs, { buffer = buf }) end
map('n', 'K', vim.lsp.buf.hover)
map('n', 'gd', vim.lsp.buf.definition)
map('n', 'gD', vim.lsp.buf.declaration)
map('n', 'gi', vim.lsp.buf.implementation)
map('n', 'go', vim.lsp.buf.type_definition)
map('n', 'gr', vim.lsp.buf.references)
map('n', 'gs', vim.lsp.buf.signature_help)
map('n', 'gl', vim.diagnostic.open_float)
map('n', '<F2>', vim.lsp.buf.rename)
map({ 'n', 'x' }, '<F3>', function() vim.lsp.buf.format({ async = true }) end)
map('n', '<F4>', vim.lsp.buf.code_action)
if client:supports_method('textDocument/documentHighlight') then
local highlight_augroup = vim.api.nvim_create_augroup('my.lsp.highlight', { clear = false })
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
buffer = buf,
group = highlight_augroup,
callback = vim.lsp.buf.document_highlight,
})
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
buffer = buf,
group = highlight_augroup,
callback = vim.lsp.buf.clear_references,
})
end
local excluded_filetypes = { php = true, c = true, cpp = true }
if not client:supports_method('textDocument/willSaveWaitUntil')
and client:supports_method('textDocument/formatting')
and not excluded_filetypes[vim.bo[buf].filetype]
then
vim.api.nvim_create_autocmd('BufWritePre', {
group = vim.api.nvim_create_augroup('my.lsp.format', { clear = false }),
buffer = buf,
callback = function()
vim.lsp.buf.format({ bufnr = buf, id = client.id, timeout_ms = 1000 })
end,
})
end
end,
})
require("nvim-autopairs").setup({})
require("lsp_signature").setup({ hint_enable = false })
cmp.setup({
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
else
fallback()
end
end, { "i", "s" }),
}),
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered()
},
sources = cmp.config.sources({
{ name = "nvim_lsp", keyword_length = 1 },
{ name = "vsnip" },
}, {
{ name = "buffer", keyword_length = 1 },
{ name = "spell" },
}),
})
local caps = require("cmp_nvim_lsp").default_capabilities()
vim.lsp.config['luals'] = {
cmd = { 'lua-language-server' },
filetypes = { 'lua' },
root_markers = { { '.luarc.json', '.luarc.jsonc' }, '.git' },
capabilities = caps,
settings = {
Lua = {
runtime = { version = 'LuaJIT' },
diagnostics = { globals = { 'vim' } },
workspace = {
checkThirdParty = false,
library = vim.list_extend(
vim.api.nvim_get_runtime_file('', true),
{ '/home/tony/repos/oxwm/templates' }
),
},
telemetry = { enable = false },
},
},
}
vim.lsp.config['cssls'] = {
cmd = { 'vscode-css-language-server', '--stdio' },
filetypes = { 'css', 'scss', 'less' },
root_markers = { 'package.json', '.git' },
capabilities = caps,
settings = {
css = { validate = true },
scss = { validate = true },
less = { validate = true },
},
}
vim.lsp.config['phpls'] = {
cmd = { 'intelephense', '--stdio' },
filetypes = { 'php' },
root_markers = { 'composer.json', '.git' },
capabilities = caps,
settings = {
intelephense = {
files = { maxSize = 5000000 },
},
},
}
vim.lsp.config['ts_ls'] = {
cmd = { 'typescript-language-server', '--stdio' },
filetypes = { 'javascript', 'javascriptreact', 'javascript.jsx', 'typescript', 'typescriptreact', 'typescript.tsx' },
root_markers = { 'package.json', 'tsconfig.json', 'jsconfig.json', '.git' },
capabilities = caps,
settings = {
completions = { completeFunctionCalls = true },
},
}
vim.lsp.config['zls'] = {
cmd = { 'zls' },
filetypes = { 'zig', 'zir' },
root_markers = { 'zls.json', 'build.zig', '.git' },
capabilities = caps,
settings = {
zls = {
enable_build_on_save = true,
build_on_save_step = "install",
warn_style = false,
enable_snippets = true,
}
}
}
vim.lsp.config['nil_ls'] = {
cmd = { 'nil' },
filetypes = { 'nix' },
root_markers = { 'flake.nix', 'default.nix', '.git' },
capabilities = caps,
settings = {
['nil'] = {
formatting = {
command = { "nixpkgs-fmt" }
}
}
}
}
vim.lsp.config['rust_analyzer'] = {
cmd = { 'rust-analyzer' },
filetypes = { 'rust' },
root_markers = { 'Cargo.toml', 'rust-project.json', '.git' },
capabilities = caps,
settings = {
['rust-analyzer'] = {
cargo = { allFeatures = true },
formatting = { command = { "rustfmt" } },
},
},
}
vim.lsp.config['clangd'] = {
cmd = { 'clangd', '--background-index', '--clang-tidy' },
filetypes = { 'c', 'cpp', 'objc', 'objcpp' },
root_markers = { 'compile_commands.json', '.clangd', 'configure.ac', 'Makefile', '.git' },
capabilities = caps,
}
vim.lsp.config['c3lsp'] = {
cmd = { 'c3-lsp' },
filetypes = { 'c3' },
root_markers = { 'project.json', '.git' },
capabilities = caps,
}
vim.lsp.config['serve_d'] = {
cmd = { 'serve-d' },
filetypes = { 'd' },
root_markers = { 'dub.sdl', 'dub.json', '.git' },
capabilities = caps,
}
vim.lsp.config['jsonls'] = {
cmd = { 'vscode-json-languageserver', '--stdio' },
filetypes = { 'json', 'jsonc' },
root_markers = { 'package.json', '.git', 'config.jsonc' },
capabilities = caps,
}
vim.lsp.config['hls'] = {
cmd = { 'haskell-language-server-wrapper', '--lsp' },
filetypes = { 'haskell', 'lhaskell' },
root_markers = { 'stack.yaml', 'cabal.project', 'package.yaml', '*.cabal', 'hie.yaml', '.git' },
capabilities = caps,
settings = {
haskell = {
formattingProvider = 'fourmolu',
plugin = { semanticTokens = { globalOn = false } },
},
},
}
vim.lsp.config['gopls'] = {
cmd = { 'gopls' },
filetypes = { 'go', 'gomod', 'gowork', 'gotmpl' },
root_markers = { 'go.mod', 'go.work', '.git' },
capabilities = caps,
settings = {
gopls = {
analyses = { unusedparams = false, ST1003 = false, ST1000 = false },
staticcheck = true,
},
},
}
vim.lsp.config['templ'] = {
cmd = { 'templ', 'lsp' },
filetypes = { 'templ' },
root_markers = { 'go.mod', '.git' },
capabilities = caps,
}
vim.filetype.add({
extension = {
h = 'c',
c3 = 'c3',
d = 'd',
templ = 'templ',
},
})
---@diagnostic disable-next-line: invisible
for name, _ in pairs(vim.lsp.config._configs) do
if name ~= '*' then
vim.lsp.enable(name)
end
end
@@ -0,0 +1,50 @@
local lualine = require("lualine")
lualine.setup({
options = {
icons_enabled = true,
theme = "auto",
component_separators = { left = "|", right = "|" },
section_separators = { left = "", right = "" },
disabled_filetypes = {
statusline = {},
winbar = {},
},
ignore_focus = {},
always_divide_middle = true,
globalstatus = false,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
},
},
sections = {
lualine_a = { "mode" },
lualine_b = {
{ "branch", color = { bg = "NONE" } },
{ "diff", color = { bg = "NONE" } },
{ "diagnostics", color = { bg = "NONE" } }
},
lualine_c = { { "filename", color = { bg = "NONE" } } },
lualine_x = {
{ "encoding", color = { bg = "NONE" } },
{ "fileformat", color = { bg = "NONE" } },
{ "filetype", color = { bg = "NONE" } }
},
lualine_y = {},
lualine_z = { "location" },
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { { "filename", color = { bg = "NONE" } } },
lualine_x = { { "location", color = { bg = "NONE" } } },
lualine_y = {},
lualine_z = {},
},
tabline = {},
winbar = {},
inactive_winbar = {},
extensions = {},
})
@@ -0,0 +1,2 @@
local tree = require("nvim-tree")
tree.setup()
@@ -0,0 +1,139 @@
require("render-markdown").setup({
link = {
-- Turn on / off inline link icon rendering.
enabled = true,
-- Additional modes to render links.
render_modes = false,
-- How to handle footnote links, start with a '^'.
footnote = {
-- Turn on / off footnote rendering.
enabled = true,
-- Replace value with superscript equivalent.
superscript = true,
-- Added before link content.
prefix = "",
-- Added after link content.
suffix = "",
},
-- Inlined with 'image' elements.
image = "󰥶 ",
-- Inlined with 'email_autolink' elements.
email = "󰀓 ",
-- Fallback icon for 'inline_link' and 'uri_autolink' elements.
hyperlink = "󰌹 ",
-- Applies to the inlined icon as a fallback.
highlight = "RenderMarkdownLink",
-- Applies to WikiLink elements.
wiki = {
icon = "󱗖 ",
body = function()
return nil
end,
highlight = "RenderMarkdownWikiLink",
},
-- Define custom destination patterns so icons can quickly inform you of what a link
-- contains. Applies to 'inline_link', 'uri_autolink', and wikilink nodes. When multiple
-- patterns match a link the one with the longer pattern is used.
-- The key is for healthcheck and to allow users to change its values, value type below.
-- | pattern | matched against the destination text |
-- | icon | gets inlined before the link text |
-- | kind | optional determines how pattern is checked |
-- | | pattern | @see :h lua-patterns, is the default if not set |
-- | | suffix | @see :h vim.endswith() |
-- | priority | optional used when multiple match, uses pattern length if empty |
-- | highlight | optional highlight for 'icon', uses fallback highlight if empty |
custom = {
web = { pattern = "^http", icon = "󰖟 " },
github = { pattern = "github%.com", icon = "󰊤 " },
gitlab = { pattern = "gitlab%.com", icon = "󰮠 " },
stackoverflow = { pattern = "stackoverflow%.com", icon = "󰓌 " },
wikipedia = { pattern = "wikipedia%.org", icon = "󰖬 " },
youtube = { pattern = "youtube%.com", icon = "󰗃 " },
},
},
callout = {
-- Callouts are a special instance of a 'block_quote' that start with a 'shortcut_link'.
-- The key is for healthcheck and to allow users to change its values, value type below.
-- | raw | matched against the raw text of a 'shortcut_link', case insensitive |
-- | rendered | replaces the 'raw' value when rendering |
-- | highlight | highlight for the 'rendered' text and quote markers |
-- | quote_icon | optional override for quote.icon value for individual callout |
-- | category | optional metadata useful for filtering |
note = { raw = "[!NOTE]", rendered = "󰋽 Note", highlight = "RenderMarkdownInfo" },
tip = { raw = "[!TIP]", rendered = "󰌶 Tip", highlight = "RenderMarkdownSuccess" },
important = { raw = "[!IMPORTANT]", rendered = "󰅾 Important", highlight = "RenderMarkdownHint" },
warning = { raw = "[!WARNING]", rendered = "󰀪 Warning", highlight = "RenderMarkdownWarn" },
caution = { raw = "[!CAUTION]", rendered = "󰳦 Caution", highlight = "RenderMarkdownError" },
abstract = { raw = "[!ABSTRACT]", rendered = "󰨸 Abstract", highlight = "RenderMarkdownInfo" },
summary = { raw = "[!SUMMARY]", rendered = "󰨸 Summary", highlight = "RenderMarkdownInfo" },
tldr = { raw = "[!TLDR]", rendered = "󰨸 Tldr", highlight = "RenderMarkdownInfo" },
info = { raw = "[!INFO]", rendered = "󰋽 Info", highlight = "RenderMarkdownInfo" },
todo = { raw = "[!TODO]", rendered = "󰗡 Todo", highlight = "RenderMarkdownInfo" },
hint = { raw = "[!HINT]", rendered = "󰌶 Hint", highlight = "RenderMarkdownSuccess" },
success = { raw = "[!SUCCESS]", rendered = "󰄬 Success", highlight = "RenderMarkdownSuccess" },
check = { raw = "[!CHECK]", rendered = "󰄬 Check", highlight = "RenderMarkdownSuccess" },
done = { raw = "[!DONE]", rendered = "󰄬 Done", highlight = "RenderMarkdownSuccess" },
question = { raw = "[!QUESTION]", rendered = "󰘥 Question", highlight = "RenderMarkdownWarn" },
help = { raw = "[!HELP]", rendered = "󰘥 Help", highlight = "RenderMarkdownWarn" },
faq = { raw = "[!FAQ]", rendered = "󰘥 Faq", highlight = "RenderMarkdownWarn" },
attention = { raw = "[!ATTENTION]", rendered = "󰀪 Attention", highlight = "RenderMarkdownWarn" },
failure = { raw = "[!FAILURE]", rendered = "󰅖 Failure", highlight = "RenderMarkdownError" },
fail = { raw = "[!FAIL]", rendered = "󰅖 Fail", highlight = "RenderMarkdownError" },
missing = { raw = "[!MISSING]", rendered = "󰅖 Missing", highlight = "RenderMarkdownError" },
danger = { raw = "[!DANGER]", rendered = "󱐌 Danger", highlight = "RenderMarkdownError" },
error = { raw = "[!ERROR]", rendered = "󱐌 Error", highlight = "RenderMarkdownError" },
bug = { raw = "[!BUG]", rendered = "󰨰 Bug", highlight = "RenderMarkdownError" },
example = { raw = "[!EXAMPLE]", rendered = "󰉹 Example", highlight = "RenderMarkdownHint" },
quote = { raw = "[!QUOTE]", rendered = "󱆨 Quote", highlight = "RenderMarkdownQuote" },
cite = { raw = "[!CITE]", rendered = "󱆨 Cite", highlight = "RenderMarkdownQuote" },
},
checkbox = {
enabled = true,
render_modes = false,
bullet = false,
right_pad = 1,
unchecked = {
icon = "󰄱 ",
highlight = "RenderMarkdownUnchecked",
scope_highlight = nil,
},
checked = {
icon = "󰱒 ",
highlight = "RenderMarkdownChecked",
scope_highlight = nil,
},
custom = {
todo = { raw = "[-]", rendered = "󰥔 ", highlight = "RenderMarkdownTodo", scope_highlight = nil },
},
},
bullet = {
enabled = true,
render_modes = false,
icons = { "", "", "", "" },
ordered_icons = function(ctx)
local value = vim.trim(ctx.value)
local index = tonumber(value:sub(1, #value - 1))
return ("%d."):format(index > 1 and index or ctx.index)
end,
left_pad = 0,
right_pad = 0,
highlight = "RenderMarkdownBullet",
scope_highlight = {},
},
quote = { icon = "" },
anti_conceal = {
enabled = true,
-- Which elements to always show, ignoring anti conceal behavior. Values can either be
-- booleans to fix the behavior or string lists representing modes where anti conceal
-- behavior will be ignored. Valid values are:
-- head_icon, head_background, head_border, code_language, code_background, code_border,
-- dash, bullet, check_icon, check_scope, quote, table_border, callout, link, sign
ignore = {
code_background = true,
sign = true,
},
above = 0,
below = 0,
},
})
@@ -0,0 +1,3 @@
local tel = require("telescope")
tel.setup({})
tel.load_extension("undo")
@@ -0,0 +1,305 @@
local lsp = require("lspconfig")
local cmp = require("cmp")
vim.lsp.config('*', {
root_markers = { '.git' },
})
vim.diagnostic.config({
virtual_text = true,
severity_sort = true,
float = {
style = 'minimal',
border = 'rounded',
source = 'if_many',
header = '',
prefix = '',
},
signs = {
text = {
[vim.diagnostic.severity.ERROR] = '',
[vim.diagnostic.severity.WARN] = '',
[vim.diagnostic.severity.HINT] = '',
[vim.diagnostic.severity.INFO] = '»',
},
},
})
local orig = vim.lsp.util.open_floating_preview
---@diagnostic disable-next-line: duplicate-set-field
function vim.lsp.util.open_floating_preview(contents, syntax, opts, ...)
opts = opts or {}
opts.border = opts.border or 'rounded'
opts.max_width = opts.max_width or 80
opts.max_height = opts.max_height or 24
opts.wrap = opts.wrap ~= false
return orig(contents, syntax, opts, ...)
end
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('my.lsp', {}),
callback = function(args)
local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
local buf = args.buf
local map = function(mode, lhs, rhs) vim.keymap.set(mode, lhs, rhs, { buffer = buf }) end
map('n', 'K', vim.lsp.buf.hover)
map('n', 'gd', vim.lsp.buf.definition)
map('n', 'gD', vim.lsp.buf.declaration)
map('n', 'gi', vim.lsp.buf.implementation)
map('n', 'go', vim.lsp.buf.type_definition)
map('n', 'gr', vim.lsp.buf.references)
map('n', 'gs', vim.lsp.buf.signature_help)
map('n', 'gl', vim.diagnostic.open_float)
map('n', '<F2>', vim.lsp.buf.rename)
map({ 'n', 'x' }, '<F3>', function() vim.lsp.buf.format({ async = true }) end)
map('n', '<F4>', vim.lsp.buf.code_action)
if client:supports_method('textDocument/documentHighlight') then
local highlight_augroup = vim.api.nvim_create_augroup('my.lsp.highlight', { clear = false })
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
buffer = buf,
group = highlight_augroup,
callback = vim.lsp.buf.document_highlight,
})
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
buffer = buf,
group = highlight_augroup,
callback = vim.lsp.buf.clear_references,
})
end
local excluded_filetypes = { php = true, c = true, cpp = true }
if not client:supports_method('textDocument/willSaveWaitUntil')
and client:supports_method('textDocument/formatting')
and not excluded_filetypes[vim.bo[buf].filetype]
then
vim.api.nvim_create_autocmd('BufWritePre', {
group = vim.api.nvim_create_augroup('my.lsp.format', { clear = false }),
buffer = buf,
callback = function()
vim.lsp.buf.format({ bufnr = buf, id = client.id, timeout_ms = 1000 })
end,
})
end
end,
})
require("nvim-autopairs").setup({})
require("lsp_signature").setup({ hint_enable = false })
cmp.setup({
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
else
fallback()
end
end, { "i", "s" }),
}),
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered()
},
sources = cmp.config.sources({
{ name = "nvim_lsp", keyword_length = 1 },
{ name = "vsnip" },
}, {
{ name = "buffer", keyword_length = 1 },
{ name = "spell" },
}),
})
local caps = require("cmp_nvim_lsp").default_capabilities()
vim.lsp.config['luals'] = {
cmd = { 'lua-language-server' },
filetypes = { 'lua' },
root_markers = { { '.luarc.json', '.luarc.jsonc' }, '.git' },
capabilities = caps,
settings = {
Lua = {
runtime = { version = 'LuaJIT' },
diagnostics = { globals = { 'vim' } },
workspace = {
checkThirdParty = false,
library = vim.list_extend(
vim.api.nvim_get_runtime_file('', true),
{ '/home/tony/repos/oxwm/templates' }
),
},
telemetry = { enable = false },
},
},
}
vim.lsp.config['cssls'] = {
cmd = { 'vscode-css-language-server', '--stdio' },
filetypes = { 'css', 'scss', 'less' },
root_markers = { 'package.json', '.git' },
capabilities = caps,
settings = {
css = { validate = true },
scss = { validate = true },
less = { validate = true },
},
}
vim.lsp.config['phpls'] = {
cmd = { 'intelephense', '--stdio' },
filetypes = { 'php' },
root_markers = { 'composer.json', '.git' },
capabilities = caps,
settings = {
intelephense = {
files = { maxSize = 5000000 },
},
},
}
vim.lsp.config['ts_ls'] = {
cmd = { 'typescript-language-server', '--stdio' },
filetypes = { 'javascript', 'javascriptreact', 'javascript.jsx', 'typescript', 'typescriptreact', 'typescript.tsx' },
root_markers = { 'package.json', 'tsconfig.json', 'jsconfig.json', '.git' },
capabilities = caps,
settings = {
completions = { completeFunctionCalls = true },
},
}
vim.lsp.config['zls'] = {
cmd = { 'zls' },
filetypes = { 'zig', 'zir' },
root_markers = { 'zls.json', 'build.zig', '.git' },
capabilities = caps,
settings = {
zls = {
enable_build_on_save = true,
build_on_save_step = "install",
warn_style = false,
enable_snippets = true,
}
}
}
vim.lsp.config['nil_ls'] = {
cmd = { 'nil' },
filetypes = { 'nix' },
root_markers = { 'flake.nix', 'default.nix', '.git' },
capabilities = caps,
settings = {
['nil'] = {
formatting = {
command = { "nixpkgs-fmt" }
}
}
}
}
vim.lsp.config['rust_analyzer'] = {
cmd = { 'rust-analyzer' },
filetypes = { 'rust' },
root_markers = { 'Cargo.toml', 'rust-project.json', '.git' },
capabilities = caps,
settings = {
['rust-analyzer'] = {
cargo = { allFeatures = true },
formatting = { command = { "rustfmt" } },
},
},
}
vim.lsp.config['clangd'] = {
cmd = { 'clangd', '--background-index', '--clang-tidy' },
filetypes = { 'c', 'cpp', 'objc', 'objcpp' },
root_markers = { 'compile_commands.json', '.clangd', 'configure.ac', 'Makefile', '.git' },
capabilities = caps,
}
vim.lsp.config['c3lsp'] = {
cmd = { 'c3-lsp' },
filetypes = { 'c3' },
root_markers = { 'project.json', '.git' },
capabilities = caps,
}
vim.lsp.config['serve_d'] = {
cmd = { 'serve-d' },
filetypes = { 'd' },
root_markers = { 'dub.sdl', 'dub.json', '.git' },
capabilities = caps,
}
vim.lsp.config['jsonls'] = {
cmd = { 'vscode-json-languageserver', '--stdio' },
filetypes = { 'json', 'jsonc' },
root_markers = { 'package.json', '.git', 'config.jsonc' },
capabilities = caps,
}
vim.lsp.config['hls'] = {
cmd = { 'haskell-language-server-wrapper', '--lsp' },
filetypes = { 'haskell', 'lhaskell' },
root_markers = { 'stack.yaml', 'cabal.project', 'package.yaml', '*.cabal', 'hie.yaml', '.git' },
capabilities = caps,
settings = {
haskell = {
formattingProvider = 'fourmolu',
plugin = { semanticTokens = { globalOn = false } },
},
},
}
vim.lsp.config['gopls'] = {
cmd = { 'gopls' },
filetypes = { 'go', 'gomod', 'gowork', 'gotmpl' },
root_markers = { 'go.mod', 'go.work', '.git' },
capabilities = caps,
settings = {
gopls = {
analyses = { unusedparams = false, ST1003 = false, ST1000 = false },
staticcheck = true,
},
},
}
vim.lsp.config['templ'] = {
cmd = { 'templ', 'lsp' },
filetypes = { 'templ' },
root_markers = { 'go.mod', '.git' },
capabilities = caps,
}
vim.filetype.add({
extension = {
h = 'c',
c3 = 'c3',
d = 'd',
templ = 'templ',
},
})
---@diagnostic disable-next-line: invisible
for name, _ in pairs(vim.lsp.config._configs) do
if name ~= '*' then
vim.lsp.enable(name)
end
end
@@ -0,0 +1,2 @@
local wk = require("which-key")
wk.setup({})
+102
View File
@@ -0,0 +1,102 @@
local colors = {
foreground = "#ebdbb2",
pink = "#b16286",
red = "#cc241d",
green = "#98971a",
yellow = "#d79921",
orange = "#d65d0e",
magenta = "#b16286",
cyan = "#458588",
bg_darken = "#1d2021",
dark_text = "#1d2021",
}
local M = {}
function M.setup()
vim.cmd("hi StatusBackground guifg=" .. colors.foreground .. " guibg=" .. colors.bg_darken)
vim.cmd("hi Moden guifg=" .. colors.dark_text .. " guibg=" .. colors.pink .. " gui=bold")
vim.cmd("hi Modei guifg=" .. colors.dark_text .. " guibg=" .. colors.green .. " gui=bold")
vim.cmd("hi Modev guifg=" .. colors.dark_text .. " guibg=" .. colors.yellow .. " gui=bold")
vim.cmd("hi Modet guifg=" .. colors.dark_text .. " guibg=" .. colors.orange .. " gui=bold")
vim.cmd("hi Modec guifg=" .. colors.dark_text .. " guibg=" .. colors.magenta .. " gui=bold")
vim.cmd("hi Moder guifg=" .. colors.dark_text .. " guibg=" .. colors.red .. " gui=bold")
vim.cmd("hi Filetype guifg=" .. colors.cyan .. " guibg=" .. colors.bg_darken .. " gui=bold")
vim.cmd("hi Position guifg=" .. colors.yellow .. " guibg=" .. colors.bg_darken .. " gui=bold")
vim.cmd("hi GitBranch guifg=" .. colors.orange .. " guibg=" .. colors.bg_darken .. " gui=bold")
vim.cmd("hi GitDiff guifg=" .. colors.green .. " guibg=" .. colors.bg_darken)
vim.cmd("hi GitDiffDel guifg=" .. colors.red .. " guibg=" .. colors.bg_darken)
vim.cmd("hi Separator guifg=" .. colors.foreground .. " guibg=" .. colors.bg_darken)
vim.cmd("hi LSPError guifg=" .. colors.red .. " guibg=" .. colors.bg_darken)
vim.cmd("hi LSPWarn guifg=" .. colors.yellow .. " guibg=" .. colors.bg_darken)
vim.cmd("hi LSPInfo guifg=" .. colors.cyan .. " guibg=" .. colors.bg_darken)
vim.cmd("hi LSPOk guifg=" .. colors.green .. " guibg=" .. colors.bg_darken)
vim.o.statusline = table.concat({
"%{%v:lua.themeStatuslineMode()%} ",
"%f ",
"%{%v:lua.themeGitBranch()%} ",
"%{%v:lua.themeGitDiff()%} ",
"%{%v:lua.themeLSP()%} ",
"%=",
"%{%v:lua.themeStatuslineFiletype()%} ",
"%{%v:lua.themeStatuslinePosition()%}",
})
end
function themeStatuslineMode()
local mode = vim.fn.mode()
local mode_highlight = "Mode" .. mode:sub(1, 1)
return string.format("%%#%s# %s %%#StatusBackground#", mode_highlight, mode:upper())
end
function themeStatuslineFiletype()
return string.format("%%#Filetype# %s %%#Separator#│%%#StatusBackground#", vim.bo.filetype)
end
function themeStatuslinePosition()
local row, col = unpack(vim.api.nvim_win_get_cursor(0))
return string.format("%%#Position# %03d:%02d ", row, col)
end
function themeGitBranch()
local branch = vim.fn.systemlist("git rev-parse --abbrev-ref HEAD 2>/dev/null")[1] or ""
if branch ~= "" then
return string.format("%%#GitBranch# %s %%#Separator#│%%#StatusBackground#", branch)
end
return ""
end
function themeGitDiff()
local diff = vim.fn.systemlist("git diff --shortstat 2>/dev/null")[1] or ""
local added, removed = diff:match("(%d+) insertions?"), diff:match("(%d+) deletions?")
added = added or "0"
removed = removed or "0"
if diff ~= "" then
return string.format("%%#GitDiff#+%s %%#GitDiffDel#-%s %%#StatusBackground#", added, removed)
end
return ""
end
function themeLSP()
local errors = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.ERROR })
local warns = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.WARN })
local info = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.INFO })
local hints = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.HINT })
local str = ""
if errors > 0 then
str = str .. string.format("%%#LSPError#E:%d ", errors)
end
if warns > 0 then
str = str .. string.format("%%#LSPWarn#W:%d ", warns)
end
if info > 0 then
str = str .. string.format("%%#LSPInfo#I:%d ", info)
end
if hints > 0 then
str = str .. string.format("%%#LSPOk#H:%d ", hints)
end
return str
end
return M
@@ -0,0 +1,262 @@
# Animations for NORMAL windows.
{
match = "window_type = 'normal'";
animations = (
{
triggers = ["close"];
opacity = {
curve = "cubic-bezier(0,1,1,1)";
duration = 0.6;
start = "window-raw-opacity-before";
end = 0;
};
blur-opacity = "opacity";
shadow-opacity = "opacity";
scale-x = {
curve = "cubic-bezier(0,1.3,1,1)";
duration = 0.6;
start = 1;
end = 0.6;
};
scale-y = "scale-x";
offset-x = "(1 - scale-x) / 2 * window-width";
offset-y = "(1 - scale-y) / 2 * window-height";
shadow-scale-x = "scale-x";
shadow-scale-y = "scale-y";
shadow-offset-x = "offset-x";
shadow-offset-y = "offset-y";
},
# Animación de APERTURA
{
triggers = ["open"];
opacity = {
curve = "cubic-bezier(0,1,1,1)";
duration = 0.5;
start = 0;
end = "window-raw-opacity";
};
blur-opacity = "opacity";
shadow-opacity = "opacity";
scale-x = {
curve = "cubic-bezier(0,1.3,1,1)";
duration = 0.5;
start = 0.6;
end = 1;
};
scale-y = "scale-x";
offset-x = "(1 - scale-x) / 2 * window-width";
offset-y = "(1 - scale-y) / 2 * window-height";
shadow-scale-x = "scale-x";
shadow-scale-y = "scale-y";
shadow-offset-x = "offset-x";
shadow-offset-y = "offset-y";
},
# Animación de GEOMETRÍA (modificada para ambos casos)
{
triggers = ["geometry"];
# Cuando la ventana CRECE (abrir/mover/redimensionar)
scale-x = {
curve = "cubic-bezier(0,0,0,1.28)";
duration = 0.5;
start = "window-width-before / window-width";
end = 1;
};
# Cuando la ventana ENCOGE (cerrar/mover/redimensionar)
scale-x-reverse = {
curve = "cubic-bezier(0,0,0,1.28)";
duration = 0.6;
start = "window-width / window-width-before";
end = 1;
};
scale-y = {
curve = "cubic-bezier(0,0,0,1.28)";
duration = 0.5;
start = "window-height-before / window-height";
end = 1;
};
scale-y-reverse = {
curve = "cubic-bezier(0,0,0,1.28)";
duration = 0.6;
start = "window-height / window-height-before";
end = 1;
};
offset-x = {
curve = "cubic-bezier(0,0,0,1.28)";
duration = 0.5;
start = "window-x-before - window-x";
end = 0;
};
offset-y = {
curve = "cubic-bezier(0,0,0,1.28)";
duration = 0.5;
start = "window-y-before - window-y";
end = 0;
};
shadow-scale-x = "scale-x";
shadow-scale-y = "scale-y";
shadow-offset-x = "offset-x";
shadow-offset-y = "offset-y";
}
)
},
# Animations for Rofi launchers.
{
match = "class_g = 'Rofi'";
animations = (
{
triggers = ["close", "hide"];
preset = "disappear";
duration = 0.05;
scale = 0.5;
},
{
triggers = ["open", "show"];
preset = "appear";
duration = 0.2;
scale = 0.5;
}
)
},
# Animations for Dunst notifications.
{
match = "class_g = 'dunst'";
animations = (
{
triggers = ["close", "hide"];
preset = "fly-out"; #-dunst-close-preset
direction = "up"; #-dunst-close-direction
duration = 0.2;
},
{
triggers = ["open", "show"];
preset = "fly-in"; #-dunst-open-preset
direction = "up"; #-dunst-open-direction
duration = 0.2;
}
)
},
# Animations for Jgmenu.
{
match = "class_g = 'jgmenu'";
animations = (
{
triggers = ["close", "hide"];
preset = "disappear";
duration = 0.08;
scale = 0.5;
},
{
triggers = ["open", "show"];
preset = "appear";
duration = 0.15;
scale = 0.5;
}
)
},
# Animations for Scratchpad.
{
match = "class_g = 'bspwm-scratch'";
animations = (
{
triggers = ["close", "hide"];
preset = "fly-out";
direction = "up";
duration = 0.2;
},
{
triggers = ["open", "show"];
preset = "fly-in";
direction = "up";
duration = 0.2;
}
)
},
# Animations for Eww Profile card.
{
match = "name = 'Eww - launchermenu'";
animations = (
{
triggers = ["close", "hide"];
preset = "slide-out";
direction = "right";
duration = 0.2;
},
{
triggers = ["open", "show"];
preset = "slide-in";
direction = "right";
duration = 0.2;
}
)
},
# Animations for Eww Music player.
{
match = "name = 'Eww - music'";
animations = (
{
triggers = ["close", "hide"];
preset = "slide-out";
direction = "up";
duration = 0.2;
},
{
triggers = ["open", "show"];
preset = "slide-in";
direction = "up";
duration = 0.2;
}
)
},
# Animations for Eww calendar.
{
match = "name = 'Eww - date'";
animations = (
{
triggers = ["close", "hide"];
preset = "fly-out";
direction = "up";
duration = 0.2;
},
{
triggers = ["open", "show"];
preset = "fly-in";
direction = "up";
duration = 0.2;
}
)
},
# Animations for Eww Cheatsheet.
{
match = "name = 'Eww - csheet'";
animations = (
{
triggers = ["close", "hide"];
preset = "disappear";
duration = 0.08;
scale = 0.5;
},
{
triggers = ["open", "show"];
preset = "appear";
duration = 0.15;
scale = 0.5;
}
)
}
+157
View File
@@ -0,0 +1,157 @@
## ----- Shadows ----- ##
#shadow = true;
shadow-radius = 1;
shadow-opacity = .1;
shadow-offset-x = -7;
shadow-offset-y = -7;
shadow-color = "#000000"
## ----- Fading ----- ##
fading = true;
fade-in-step = 0.03;
fade-out-step = 0.03;
fade-delta = 5
no-fading-openclose = false
no-fading-destroyed-argb = false
## ----- Transparency ----- ##
frame-opacity = 1.0;
# inactive-dim-fixed = true
## ----- Corners ----- ##
corner-radius = 0
#################################
# General Settings #
#################################
# Available backends "xrender" "glx" "egl"
backend = "xrender"
dithered-present = false;
vsync = true;
detect-rounded-corners = true;
detect-client-opacity = true;
detect-transient = true;
use-damage = true;
# xrender-sync-fence = false
# transparent-clipping = false
#################################
# Rules #
#################################
blur:
{
method = "dual_kawase";
size = 10;
deviation = 2.5;
}
rules: (
{
blur-background = true;
blur-background-fixed = true;
fade = false;
},
{
match = "window_type = 'dock'";
corner-radius = 0;
shadow = false;
},
{
match = "class_g = 'dwm' || class_g = 'Polybar' || class_g = 'dmenu'";
corner-radius = 0;
blur-background = true;
opacity = 0.80;
shadow = false;
},
{
match = "fullscreen = true";
corner-radius = 0;
},
{
match = "window_type = 'normal'";
fade = true; #-fade-switch
shadow = true; #-shadow-switch
},
{
match = "window_type = 'dialog'";
shadow = true; #-shadow-switch
},
{
match = "window_type = 'tooltip'";
corner-radius = 0;
opacity = 0.90;
},
{
match = "window_type = 'dock'";
corner-radius = 0;
fade = true;
},
{
match = "window_type = 'dropdown_menu' || window_type = 'menu' || window_type = 'popup' || window_type = 'popup_menu'";
corner-radius = 0;
},
{
match = "class_g = 'Alacritty' || class_g = 'kitty' || class_g = 'FloaTerm'";
opacity = 1.0; #-term-opacity-switch
blur-background = true; #-blur-switch
},
{
match = "class_g = 'Polybar' || "
"class_g = 'eww-bar' || "
"class_g = 'Viewnior' || "
"class_g = 'Rofi' || "
"class_g = 'mpv' || "
"class_g = 'bspwm-scratch' || "
"class_g = 'Dunst' || "
"class_g = 'retroarch'";
corner-radius = 0;
},
{
match = "name = 'Notification' || "
"class_g ?= 'Notify-osd' || "
"class_g = 'Dunst' || "
"class_g = 'Polybar' || "
"class_g = 'Eww' || "
"class_g = 'jgmenu' || "
"class_g = 'scratch' || "
"class_g = 'Spotify' || "
"class_g = 'retroarch' || "
"class_g = 'firefox' || "
"class_g = 'Rofi' || "
"class_g = 'Screenkey' || "
"class_g = 'mpv' || "
"class_g = 'Viewnior' || "
"_GTK_FRAME_EXTENTS@";
shadow = false;
},
@include "picom-animations.conf"
)
@@ -0,0 +1,22 @@
const colors = {
bg: "#1a1b26",
bgDark: "#16161a",
fg: "#cdd6f4",
muted: "#444b6a",
cyan: "#d3869b",
purple: "#cba6f7",
red: "#f38ba8",
yellow: "#e0af68",
blue: "#89b4fa",
}
const bar = {
fontFamily: "Iosevka Nerd Font",
fontSize: 14,
height: 44,
}
const notifications = {
timeout: 5000,
}
const wallpaper = {
wallpaper: "file:///home/coast/Wallpapers/nature2art.png"
}
@@ -0,0 +1,124 @@
import Quickshell
import Quickshell.Wayland
import Quickshell.Services.Notifications
import QtQuick
import QtQuick.Layouts
import "config.js" as Config
Scope {
id: root
NotificationServer {
id: server
actionsSupported: true
bodySupported: true
imageSupported: true
onNotification: n => {
n.tracked = true
}
}
PanelWindow {
anchors { top: true; right: true }
margins { top: 56; right: 12 }
implicitWidth: 380
implicitHeight: Math.max(1, column.implicitHeight)
color: "transparent"
exclusionMode: ExclusionMode.Ignore
ColumnLayout {
id: column
width: parent.width
spacing: 10
Repeater {
model: server.trackedNotifications
delegate: Rectangle {
id: card
required property var modelData
Timer {
running: card.modelData.urgency !== NotificationUrgency.Critical
interval: Config.notifications.timeout
repeat: false
onTriggered: card.modelData.dismiss()
}
Layout.fillWidth: true
implicitHeight: layout.implicitHeight + 20
radius: 12
color: Config.colors.bgDark
Rectangle {
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
width: 4
radius: 12
color: card.modelData.urgency === NotificationUrgency.Critical
? Config.colors.red
: Config.colors.purple
}
RowLayout {
id: layout
anchors.fill: parent
anchors.margins: 10
anchors.leftMargin: 18
spacing: 10
Image {
Layout.preferredWidth: 36
Layout.preferredHeight: 36
Layout.alignment: Qt.AlignTop
fillMode: Image.PreserveAspectFit
visible: source.toString() !== ""
source: card.modelData.image || card.modelData.appIcon || ""
}
ColumnLayout {
Layout.fillWidth: true
spacing: 2
Text {
Layout.fillWidth: true
text: card.modelData.summary
color: Config.colors.cyan
font.family: Config.bar.fontFamily
font.pixelSize: Config.bar.fontSize
font.bold: true
elide: Text.ElideRight
}
Text {
Layout.fillWidth: true
visible: text !== ""
text: card.modelData.body
color: Config.colors.fg
font.family: Config.bar.fontFamily
font.pixelSize: Config.bar.fontSize - 1
wrapMode: Text.WordWrap
}
}
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: card.modelData.dismiss()
}
}
}
}
}
}
+61
View File
@@ -0,0 +1,61 @@
* {
highlight: bold italic;
scrollbar: true;
base-bg: #000000;
base-bg-soft: #1a1a1a;
base-bg-alt: #0d0d0d;
base-fg: #f5f5f5;
base-fg-dim: #808080;
accent: #ffffff;
accent-light: #e0e0e0;
accent-dark: #4d4d4d;
border-gray: #333333;
background: @base-bg;
background-color: @background;
foreground: @base-fg;
border-color: @border-gray;
separatorcolor: @border-color;
scrollbar-handle: @border-color;
normal-background: @background;
normal-foreground: @foreground;
alternate-normal-background: @base-bg-soft;
alternate-normal-foreground: @foreground;
selected-normal-background: @accent;
selected-normal-foreground: @base-bg-alt;
active-background: @accent;
active-foreground: @base-bg-alt;
alternate-active-background: @accent;
alternate-active-foreground: @active-foreground;
selected-active-background: @accent-light;
selected-active-foreground: @active-foreground;
urgent-background: @accent-dark;
urgent-foreground: @base-bg-alt;
alternate-urgent-background: @accent-dark;
alternate-urgent-foreground: @urgent-foreground;
selected-urgent-background: @accent-light;
selected-urgent-foreground: @urgent-foreground;
padding: 6px 6px;
}
configuration {
font: "Iosevka Nerd Font Propo 14";
show-icons: true;
terminal: "alacritty";
}
element-icon {
size: 20px;
}
window {
border-radius: 10px;
}
+154
View File
@@ -0,0 +1,154 @@
{
"reload-style-on-change": true,
"layer": "top",
"position": "top",
"output": "HDMI-A-1",
"spacing": 0,
"height": 35,
"border-radius": 25,
"modules-left": ["niri/workspaces"],
"modules-center": [],
"modules-right": ["group/right"],
"group/right": {
"orientation": "inherit",
"modules": [
"clock"
]
},
"custom/active_window": {
"exec": "~/.config/waybar/window.sh",
"return-type": "json",
"markup": true
},
"niri/workspaces": {
"on-click": "activate",
"format": "{icon}",
"format-icons": {
"default": "",
"active": "",
"urgent": "",
"empty": ""
},
"persistent-workspaces": {
"1": [],
"2": [],
"3": [],
"4": [],
"5": [],
"6": [],
"7": [],
"8": []
}
},
"custom/wbmenu": {
"format": "<span size='13500'></span>",
"on-click": "rofi -show drun -config ~/.config/rofi/gruvbox.rasi",
"on-click-right": "xdg-terminal-exec",
"tooltip-format": "Menu\n\nSuper + Return"
},
"cpu": {
"interval": 2,
"format": "{icon} ",
"format-icons": ["󰪞", "󰪟", "󰪠", "󰪡", "󰪢", "󰪣", "󰪤", "󰪥"]
},
"memory": {
"interval": 2,
"format": "{icon}",
"format-icons": ["󰪞", "󰪟", "󰪠", "󰪡", "󰪢", "󰪣", "󰪤", "󰪥"]
},
"clock": {
"format": " {:%I:%M %p • %a, %d/%m} ",
"format-alt": "{:%A, %d %B %Y}",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"
},
"network": {
"format-icons": ["󰤯", "󰤟", "󰤢", "󰤥", "󰤨"],
"format": "{icon}",
"format-wifi": "{icon}",
"format-ethernet": "<span size='11500'>󰌘</span>",
"format-disconnected": "<span size='11500'>󰤮</span>",
"tooltip-format-wifi": "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-ethernet": "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}",
"tooltip-format-disconnected": "Disconnected",
"interval": 3,
"spacing": 1
},
"battery": {
"format": "{capacity}% {icon}",
"format-discharging": "{icon}",
"format-charging": "{icon}",
"format-plugged": "",
"format-icons": {
"charging": ["󰢜", "󰂆", "󰂇", "󰂈", "󰢝", "󰂉", "󰢞", "󰂊", "󰂋", "󰂅"],
"default": ["󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"]
},
"format-full": "󰂅",
"tooltip-format-discharging": "{power:>1.0f}W↓ {capacity}%",
"tooltip-format-charging": "{power:>1.0f}W↑ {capacity}%",
"interval": 5,
"states": {
"warning": 20,
"critical": 10
}
},
"bluetooth": {
"format": "<span size='11500'>󰂯</span>",
"format-disabled": "<span size='11500'>󰂲</span>",
"format-connected": "<span size='11500'></span>",
"format-no-controller": "",
"tooltip-format": "Devices connected: {num_connections}"
},
"pulseaudio": {
"format": "{icon}{volume}%",
"on-click-right": "pamixer -t",
"tooltip-format": "Playing at {volume}%",
"scroll-step": 5,
"format-muted": "",
"format-icons": {
"default": [" ", " ", " "]
}
},
"group/tray-expander": {
"orientation": "inherit",
"drawer": {
"transition-duration": 600,
"children-class": "tray-group-item"
},
"modules": ["custom/expand-icon", "tray"]
},
"custom/expand-icon": {
"format": "",
"tooltip": false
},
"tray": {
"icon-size": 16,
"spacing": 8
},
"custom/separator#blank": {
"format": " ",
"interval": "once",
"tooltip": false
},
"custom/separator#dot": {
"format": " ",
"interval": "once",
"tooltip": false
}
}
+207
View File
@@ -0,0 +1,207 @@
@define-color background #0E0F12;
@define-color foreground #E6DAD1;
@define-color accent #A07A6A;
@define-color muted #6E5A52;
@define-color subtle #15161A;
* {
color: @foreground;
border: none;
border-radius: 0;
min-height: 0;
font-family: 'JetBrainsMono Nerd Font Propo';
font-size: 12px;
}
window#waybar {
background-color: @background;
transition-property: background-color;
transition-duration: .5s;
}
window#waybar > box {
background-color: @background;
border-radius: 32px;
margin: 2px 10px 0px 10px;
}
window#waybar.empty #window {
background: transparent;
background-color: transparent;
border: none;
border-radius: 0;
color: transparent;
padding: 0;
margin: 0;
}
#waybar.empty .modules-center {
opacity: 0;
}
.modules-left {
margin-left: 8px;
}
.modules-right {
margin-right: 8px;
}
#workspaces {
padding: 0px 5px;
margin: 3.5px 3.5px;
border-radius: 11px;
background-color: alpha(@foreground, 0.06);
opacity: 0.95;
}
#workspaces button {
all: initial;
color: @foreground;
padding: 0 6px;
margin: 0 1.5px;
min-width: 9px;
}
#workspaces button.empty {
opacity: 0.45;
}
#workspaces button.active {
border-radius: 18px;
background: alpha(@foreground, 0.14);
opacity: 1;
margin-top: 4px;
margin-bottom: 4px;
margin-left: 5px;
padding-right: 5px;
padding-left: 5px;
}
#workspaces button:hover {
border-radius: 18px;
background: alpha(@foreground, 0.08);
opacity: 1;
}
#workspaces button.urgent {
border-radius: 18px;
background: alpha(#f13333, 0.4);
opacity: 1;
margin-top: 4px;
margin-bottom: 4px;
margin-left: 5px;
padding-right: 5px;
padding-left: 5px;
}
#clock {
font-size: 13px;
font-weight: 700;
}
#battery,
#pulseaudio,
#custom-screenrecording-indicator,
#custom-update {
min-width: 12px;
margin: 0 7.5px;
}
#pulseaudio {
margin-right: 5px;
}
#bluetooth {
margin-right: 12px;
}
#network {
margin-right: 9px;
}
#custom-idle-indicator,
#custom-notification-silencing-indicator {
margin-right: 2px;
min-width: 15px;
}
#custom-update {
font-size: 10px;
}
#custom-screenrecording-indicator {
min-width: 12px;
margin-left: 8.75px;
font-size: 10px;
}
#custom-screenrecording-indicator.active {
color: red;
}
#tray {
background: alpha(@foreground, 0.0);
border-radius: 16px;
padding: 0px 5px;
margin: 3.5px 2px;
margin-right: 4px;
}
#custom-omarchy {
background: alpha(@foreground, 0.08);
border-radius: 99px;
margin-top: 4px;
margin-bottom: 4px;
margin-left: -3px;
margin-right: 5px;
padding-right: 7px;
padding-left: 7px;
}
#cpu, #memory {
font-size: 18px;
padding: 2px 1px;
}
#custom-active_window {
padding: 3px 6px;
border-radius: 14px;
background: alpha(@foreground, 0.06);
font-size: 12px;
}
#group-right1,
#group_right1,
#right1 {
font-weight: 800;
background: transparent;
padding: 0px 5px;
margin: 3.5px 2px;
}
#group-left,
#group_left,
#left,
#group-right,
#group_right,
#right {
font-weight: 800;
background: alpha(@foreground, 0.06);
border-radius: 12px;
padding: 0px 5px;
margin: 3.5px 2px;
}
tooltip {
background: @subtle;
border: 1px solid alpha(@foreground, 0.12);
border-radius: 4px 4px 11px 11px;
}
tooltip label {
color: alpha(@foreground, 0.92);
}
.hidden {
opacity: 0;
}
+77
View File
@@ -0,0 +1,77 @@
#!/usr/bin/env bash
MAX_TITLE_LEN=20
print_status() {
window=$(hyprctl activewindow -j 2>/dev/null)
address=$(jq -r '.address // empty' <<< "$window")
# No active window → show Desktop + Workspace
if [[ -z "$address" || "$address" == "null" ]]; then
ws=$(hyprctl activeworkspace -j | jq -r '.id')
top_line="Desktop"
bottom_line="Workspace $ws"
esc_top=$(sed 's/&/&amp;/g; s/</&lt;/g; s/>/&gt;/g' <<< "$top_line")
esc_bottom=$(sed 's/&/&amp;/g; s/</&lt;/g; s/>/&gt;/g' <<< "$bottom_line")
text="<span size='7500' foreground='#a6adc8' rise='-2000'>$esc_top</span>
<span size='9000' weight='bold' foreground='#ffffff'>$esc_bottom</span>"
jq -nc \
--arg text "$text" \
--arg tooltip "$bottom_line" \
'{ text: $text, class: "custom-window", tooltip: $tooltip }'
return
fi
class=$(jq -r '.class // "Unknown"' <<< "$window")
title=$(jq -r '.title // ""' <<< "$window")
app_class="${class,,}"
# Discord / Vesktop cleanup
if [[ "$app_class" == *discord* || "$app_class" == *vesktop* ]]; then
title=$(sed -E 's/^\([0-9]+\)[[:space:]]*//' <<< "$title")
title=$(sed -E 's/^Discord[[:space:]]*\|[[:space:]]*//' <<< "$title")
fi
# Truncate title
if (( ${#title} > MAX_TITLE_LEN )); then
title="${title:0:$((MAX_TITLE_LEN-3))}..."
fi
esc_top=$(sed 's/&/&amp;/g; s/</&lt;/g; s/>/&gt;/g' <<< "$class")
esc_bottom=$(sed 's/&/&amp;/g; s/</&lt;/g; s/>/&gt;/g' <<< "$title")
text="<span size='7500' foreground='#a6adc8' rise='-2000'>$esc_top</span>
<span size='9000' weight='bold' foreground='#ffffff'>$esc_bottom</span>"
tooltip="$class: $title"
jq -nc \
--arg text "$text" \
--arg tooltip "$tooltip" \
'{ text: $text, class: "custom-window", tooltip: $tooltip }'
}
# Initial output
print_status
last=""
# Update only when state changes
while true; do
current_window=$(hyprctl activewindow -j 2>/dev/null)
current_ws=$(hyprctl activeworkspace -j 2>/dev/null)
current="$current_window$current_ws"
if [[ "$current" != "$last" ]]; then
print_status
last="$current"
fi
sleep 0.5
done
@@ -0,0 +1,8 @@
Config {
font = "xft:Iosevka Nerd Font-14",
bgColor = "#000000",
fgColor = "#ffffff",
position = TopW L 100,
commands = [ Run XMonadLog ],
template = "%XMonadLog%"
}
@@ -0,0 +1,8 @@
Config {
font = "xft:Iosevka Nerd Font-14",
bgColor = "#000000",
fgColor = "#ffffff",
position = Top,
commands = [ Run XMonadLog ],
template = %XMonadLog%
}
@@ -0,0 +1,45 @@
import XMonad
import XMonad.Util.EZConfig (additionalKeysP)
import XMonad.Layout.Spacing
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.StatusBar
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.InsertPosition
import qualified XMonad.StackSet as W
myLayoutHook = avoidStruts $ spacingWithEdge 3 $ layoutHook def
myXmobarPP :: PP
myXmobarPP = def
{
ppCurrent = xmobarColor "#0db9d7" "",
ppHidden = xmobarColor "#a9b1d6" "",
ppHiddenNoWindows = xmobarColor "#444b6a" ""
}
myStatusBar = statusBarPropTo "_XMONAD_LOG" "xmobar -x 1" (pure myXmobarPP)
myManageHook = insertPosition End Newer
myKeys =
[
("M-<Return>", spawn "alacritty"),
("M-r", spawn "rofi -show drun"),
("M-S-r", spawn "xmonad --recompile" >> spawn "xmonad --restart"),
("M-s", kill),
("M-S-s", spawn "/home/coast/.local/bin/screenshot"),
("M-f", withFocused $ \w -> windows $ W.float w (W.RationalRect 0 0 1 1)),
("M-S-f", withFocused (windows . W.sink))
]
main = xmonad $ withEasySB myStatusBar defToggleStrutsKey $ def
{
modMask = mod4Mask,
terminal = "alacritty",
borderWidth = 2,
normalBorderColor = "#444b6a",
focusedBorderColor = "#ad8ee6",
layoutHook = myLayoutHook,
manageHook = myManageHook
}
`additionalKeysP` myKeys
@@ -0,0 +1,46 @@
import XMonad
import XMonad.Util.EZConfig (additionalKeysP)
import XMonad.Layout.Spacing
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.StatusBar
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.ManageHelpers
import qualified XMonad.StackSet as W
myLayoutHook = avoidStruts $ spacingWithEdge 3 $ layoutHook def
myXmobarPP :: PP
myXmobarPP = def
{
ppCurrent = xmobarColor "#0db9d7" "",
ppHidden = xmobarColor "#a9b1d6" "",
ppHiddenNoWindows = xmobarColor "#444b6a" ""
}
myStatusBar = statusBarPropTo "_XMONAD_LOG" "xmobar -x 1" (pure myXmobarPP)
myManageHook = composeAll
[
(return True) --> doF W.shiftMaster
]
myKeys =
[
("M-<Return>", spawn "alacritty"),
("M-r", spawn "rofi -show drun"),
("M-S-r", spawn "xmonad --recompile" >> spawn "xmonad --restart"),
("M-s", kill),
("M-S-s", spawn "/home/coast/.local/bin/screenshot")
]
main = xmonad $ withEasySB myStatusBar defToggleStrutsKey $ def
{
modMask = mod4Mask,
terminal = "alacritty",
borderWidth = 2,
normalBorderColor = "#444b6a",
focusedBorderColor = "#ad8ee6",
layoutHook = myLayoutHook,
manageHook = myManageHook
}
`additionalKeysP` myKeys
@@ -0,0 +1,46 @@
set default-fg "#CDD6F4"
set default-bg "#09090F"
set completion-bg "#09090F"
set completion-fg "#CDD6F4"
set completion-highlight-bg "#09090F"
set completion-highlight-fg "#CDD6F4"
set completion-group-bg "#09090F"
set completion-group-fg "#89B4FA"
set statusbar-fg "#d4be98"
set statusbar-bg "#32302f"
set notification-bg "#09090F"
set notification-fg "#CDD6F4"
set notification-error-bg "#09090F"
set notification-error-fg "#F38BA8"
set notification-warning-bg "#09090F"
set notification-warning-fg "#FAE3B0"
set inputbar-fg "#CDD6F4"
set inputbar-bg "#09090F"
set recolor "true"
set recolor-lightcolor "#09090F"
set recolor-darkcolor "#d4be98"
set index-fg "#CDD6F4"
set index-bg "#09090F"
set index-active-fg "#CDD6F4"
set index-active-bg "#09090F"
set render-loading-bg "#09090F"
set render-loading-fg "#CDD6F4"
set highlight-color "#575268"
set highlight-fg "#F5C2E7"
set highlight-active-color "#F5C2E7"
set guioptions none
+103
View File
@@ -0,0 +1,103 @@
{ config, pkgs, ... }:
let
configs = {
niri = "niri";
alacritty = "alacritty";
rofi = "rofi";
#waybar = "waybar";
nvim = "nvim";
zathura = "zathura";
quickshell = "quickshell";
};
in
{
imports = [
./managed/waybar
./managed/discord
./managed/git
./managed/prismlauncher
./managed/obs-studio
];
home.username = "coast";
home.homeDirectory = "/home/coast";
home.stateVersion = "26.05";
home.enableNixpkgsReleaseCheck = false;
xdg.configFile = builtins.mapAttrs
(key: subpath: {
source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/Configuration/home-configuration/config/${subpath}";
recursive = true;
})
configs;
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
};
gtk.enable = true;
systemd.user.sessionVariables = config.home.sessionVariables;
qt.enable = true;
qt.kvantum.enable = true;
qt.kvantum.themes = [
pkgs.gruvbox-kvantum
pkgs.catppuccin-kvantum
];
home.packages = [
pkgs.python3
pkgs.starship
pkgs.libarchive
pkgs.fastfetch
pkgs.alacritty
pkgs.awww
pkgs.xwayland-satellite
pkgs.telegram-desktop
pkgs.mpv
pkgs.jdk25
pkgs.nil
pkgs.nixpkgs-fmt
pkgs.qbittorrent
pkgs.nautilus
pkgs.caja
pkgs.xray
pkgs.git
pkgs.gnumake
pkgs.clang
pkgs.clang-tools
pkgs.haskell-language-server
pkgs.imagemagick
pkgs.xclip
pkgs.picom
pkgs.dnsutils
pkgs.python3Packages.pip
pkgs.cmake
pkgs.libtool
pkgs.brightnessctl
pkgs.pkg-config
pkgs.lua
pkgs.lua-language-server
pkgs.rust-analyzer
pkgs.rustc
pkgs.cargo
pkgs.rustfmt
pkgs.clippy
pkgs.ffmpeg
pkgs.mumble
pkgs.eog
pkgs.zathura
pkgs.gimp3
pkgs.gamescope
pkgs.xkill
pkgs.trayer
pkgs.quickshell
pkgs.libnotify
pkgs.kdePackages.kdenlive
pkgs.obs-cmd
pkgs.gedit
pkgs.feishin
pkgs.gnome-themes-extra
];
}
@@ -0,0 +1,13 @@
{ pkgs, ... }:
{
home.packages = [ pkgs.vesktop ];
# change the desktop file
xdg.desktopEntries.vesktop.comment = "VESKTOP, a Discord client, running on socks5:2080";
xdg.desktopEntries.vesktop.name = "Vesktop (Modified)";
xdg.desktopEntries.vesktop.genericName = "Discord client";
xdg.desktopEntries.vesktop.exec = "vesktop --proxy-server=\"socks5://127.0.0.1:2080 %U\"";
xdg.desktopEntries.vesktop.icon = "vesktop";
xdg.desktopEntries.vesktop.type = "Application";
xdg.desktopEntries.vesktop.categories = [ "Network" "InstantMessaging" ];
}
@@ -0,0 +1,2 @@
{ pkgs, ... }:
{ }
@@ -0,0 +1,12 @@
{ pkgs, ... }:
{
programs.obs-studio.enable = true;
programs.obs-studio.package = (pkgs.obs-studio.override { cudaSupport = true; });
programs.obs-studio.plugins = [
pkgs.obs-studio-plugins.wlrobs
pkgs.obs-studio-plugins.obs-backgroundremoval
pkgs.obs-studio-plugins.obs-vaapi
pkgs.obs-studio-plugins.obs-gstreamer
pkgs.obs-studio-plugins.obs-vkcapture
];
}
@@ -0,0 +1,31 @@
{ lib, pkgs, ... }:
let
pname = "prismlauncher";
version = "11.0.2-1";
src = pkgs.fetchurl {
url = "https://github.com/Diegiwg/PrismLauncher-Cracked/releases/download/${version}/PrismLauncher-Linux-x86_64.AppImage";
hash = "sha256-P+6s4g8uCqXQx0p5rieJFpuDV7AquGVYrcTs9XWFAsA=";
};
icon = pkgs.fetchurl {
url = "https://upload.wikimedia.org/wikipedia/commons/7/74/Prism_Launcher_logo.svg";
hash = "sha256-AQexWc1uadtsYQpTTwI3BVCJQyfV2AZ/jxNWshyFxnE=";
};
in
{
home.packages = [
(pkgs.appimageTools.wrapType2 {
inherit pname version src;
meta = {
description = "Cracked version of Prism Launcher";
platforms = [ "x86_64-linux" ];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
})
];
home.file.".local/share/icons/hicolor/scalable/apps/prismlauncher.svg".source = icon;
xdg.desktopEntries.prismlauncher.comment = "Cracked version of Prism Launcher";
xdg.desktopEntries.prismlauncher.name = "Prism Launcher (Modified)";
xdg.desktopEntries.prismlauncher.genericName = "Prism Launcher client";
xdg.desktopEntries.prismlauncher.exec = "prismlauncher";
xdg.desktopEntries.prismlauncher.icon = "prismlauncher";
}
@@ -0,0 +1,26 @@
{ pkgs, ... }:
{
programs.waybar.enable = true;
programs.waybar.package = pkgs.waybar;
programs.waybar.systemd.enable = false;
programs.waybar.settings.mainBar.layer = "top";
programs.waybar.settings.mainBar.position = "top";
programs.waybar.settings.mainBar.spacing = "0";
programs.waybar.settings.mainBar.height = 35;
programs.waybar.settings.mainBar.border-radius = 25;
programs.waybar.settings.mainBar.output = [ "HDMI-A-1" ];
programs.waybar.settings.mainBar.modules-left = [ "niri/workspaces" ];
programs.waybar.settings.mainBar.modules-center = [ "niri/window" ];
programs.waybar.settings.mainBar.modules-right = [ "clock" ];
programs.waybar.settings.mainBar."custom/distro-icon".format = "󱄅";
programs.waybar.settings.mainBar."custom/distro-icon".tooltip = "false";
programs.waybar.settings.mainBar."niri/workspaces".disable-scroll = true;
programs.waybar.settings.mainBar."niri/workspaces".all-outputs = false;
programs.waybar.settings.mainBar."niri/workspaces".on-click = "activate";
programs.waybar.settings.mainBar."clock".format = "{:%I:%M %p %a, %d/%m}";
programs.waybar.settings.mainBar."clock".format-alt = "{:%A, %d %B %Y}";
programs.waybar.settings.mainBar."clock".tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
imports = [ ./style.nix ];
}
+101
View File
@@ -0,0 +1,101 @@
{ ... }:
{
programs.waybar.style = ''
* {
font-family: "Iosevka Nerd Font";
font-size: 14px;
}
window#waybar {
background-color: #000000;
margin: 0;
}
#workspaces {
margin: 8px 0 4px 8px;
}
#workspaces button {
color: #89b4fa;
background: #16161a;
margin-right: 6px;
border-radius: 12px;
box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.4);
padding: 4px 12px;
font-weight: bold;
transition: all 0.3s ease;
}
#workspaces button.active {
color: #09090F;
margin-right: 6px;
border-radius: 12px;
background: linear-gradient(135deg, #cba6f7, #f9e2af, #a6e3a1, #89b4fa);
background-size: 200% 200%;
animation: shift 6s ease infinite;
}
@keyframes shift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
#window {
color: #d3869b;
margin: 8px 8px 4px 8px;
border-radius: 12px;
box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.4);
padding: 4px 12px;
font-weight: bold;
}
#cpu,
#network,
#wireplumber,
#battery {
color: #d3869b;
background: #16161a;
margin: 8px 8px 4px 0;
border-radius: 12px;
box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.4);
padding: 4px 12px;
font-weight: bold;
}
#clock {
background: linear-gradient(135deg, #cdd6f4, #f38ba8);
background-size: 200% 200%;
animation: shift 6s ease infinite;
margin: 8px 8px 4px 0;
border-radius: 12px;
padding: 4px 12px;
color: #09090F;
font-weight: bold;
text-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
#taskbar {
background: #16161a;
color: #89b4fa;
margin: 8px 8px 4px 0;
border-radius: 12px;
min-width: 38px;
padding: 3px;
font-weight: bold;
}
#custom-distro-icon {
background: radial-gradient(circle, rgba(203,166,247,1) 0%, rgba(193,168,247,1) 12%, rgba(249,226,175,1) 19%, rgba(189,169,247,1) 20%, rgba(182,171,247,1) 24%, rgba(198,255,194,1) 36%, rgba(177,172,247,1) 37%, rgba(170,173,248,1) 48%, rgba(255,255,255,1) 52%, rgba(166,174,248,1) 52%, rgba(160,175,248,1) 59%, rgba(148,226,213,1) 66%, rgba(155,176,248,1) 67%, rgba(152,177,248,1) 68%, rgba(205,214,244,1) 77%, rgba(148,178,249,1) 78%, rgba(144,179,250,1) 82%, rgba(180,190,254,1) 83%, rgba(141,179,250,1) 90%, rgba(137,180,250,1) 100%);
background-size: 400% 400%;
color: #09090F;
margin: 8px 4px 4px 8px;
border-radius: 12px;
box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.4);
padding: 0;
min-width: 34px;
font-size: 18px;
font-weight: bold;
}
'';
}