summaryrefslogtreecommitdiff
path: root/home-configuration
diff options
context:
space:
mode:
authorcoasteen <coasteen@proton.me>2026-07-09 10:46:52 +0330
committercoasteen <coasteen@proton.me>2026-07-09 10:46:52 +0330
commita3008666c6c75ff61b1fc329b4d962a6c367d5f0 (patch)
treea203a54b3c61884ea13957cf18284f6c83f8e64d /home-configuration
init nixHEADmaster
Diffstat (limited to 'home-configuration')
-rw-r--r--home-configuration/config/alacritty/alacritty.toml15
-rw-r--r--home-configuration/config/hypr/hypridle.conf14
-rwxr-xr-xhome-configuration/config/hypr/hyprland.conf217
-rw-r--r--home-configuration/config/hypr/hyprlock.conf35
-rwxr-xr-xhome-configuration/config/hypr/hyprpaper.conf3
-rw-r--r--home-configuration/config/niri/config.kdl266
-rwxr-xr-xhome-configuration/config/nvim/init.lua10
-rwxr-xr-xhome-configuration/config/nvim/lazy-lock.json39
-rwxr-xr-xhome-configuration/config/nvim/lua/config.lua89
-rwxr-xr-xhome-configuration/config/nvim/lua/plugins/catppuccin/init.lua90
-rwxr-xr-xhome-configuration/config/nvim/lua/plugins/lazy/init.lua17
-rwxr-xr-xhome-configuration/config/nvim/lua/plugins/lazy/plugins.lua129
-rwxr-xr-xhome-configuration/config/nvim/lua/plugins/lsp/init.lua305
-rwxr-xr-xhome-configuration/config/nvim/lua/plugins/lualine/init.lua50
-rwxr-xr-xhome-configuration/config/nvim/lua/plugins/nvim-tree/init.lua2
-rwxr-xr-xhome-configuration/config/nvim/lua/plugins/render-markdown/init.lua139
-rwxr-xr-xhome-configuration/config/nvim/lua/plugins/telescope/init.lua3
-rwxr-xr-xhome-configuration/config/nvim/lua/plugins/treesitter/init.lua305
-rwxr-xr-xhome-configuration/config/nvim/lua/plugins/whichkey/init.lua2
-rwxr-xr-xhome-configuration/config/nvim/lua/status_line/init.lua102
-rw-r--r--home-configuration/config/picom/picom-animations.conf262
-rw-r--r--home-configuration/config/picom/picom.conf157
-rw-r--r--home-configuration/config/quickshell/config.js22
-rw-r--r--home-configuration/config/quickshell/shell.qml124
-rwxr-xr-xhome-configuration/config/rofi/config.rasi61
-rwxr-xr-xhome-configuration/config/waybar/config.jsonc154
-rwxr-xr-xhome-configuration/config/waybar/style.css207
-rwxr-xr-xhome-configuration/config/waybar/window.sh77
-rw-r--r--home-configuration/config/xmobar/xmobarrc8
-rw-r--r--home-configuration/config/xmobar/xmobarrc~8
-rw-r--r--home-configuration/config/xmonad/xmonad.hs45
-rw-r--r--home-configuration/config/xmonad/xmonad.hs~46
-rw-r--r--home-configuration/config/zathura/zathurarc46
-rw-r--r--home-configuration/default.nix103
-rw-r--r--home-configuration/managed/discord/default.nix13
-rw-r--r--home-configuration/managed/git/default.nix2
-rw-r--r--home-configuration/managed/obs-studio/default.nix12
-rw-r--r--home-configuration/managed/prismlauncher/default.nix31
-rw-r--r--home-configuration/managed/waybar/default.nix26
-rw-r--r--home-configuration/managed/waybar/style.nix101
40 files changed, 3337 insertions, 0 deletions
diff --git a/home-configuration/config/alacritty/alacritty.toml b/home-configuration/config/alacritty/alacritty.toml
new file mode 100644
index 0000000..e7dcf4d
--- /dev/null
+++ b/home-configuration/config/alacritty/alacritty.toml
@@ -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" }
diff --git a/home-configuration/config/hypr/hypridle.conf b/home-configuration/config/hypr/hypridle.conf
new file mode 100644
index 0000000..8874a43
--- /dev/null
+++ b/home-configuration/config/hypr/hypridle.conf
@@ -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
+}
diff --git a/home-configuration/config/hypr/hyprland.conf b/home-configuration/config/hypr/hyprland.conf
new file mode 100755
index 0000000..8efd6ad
--- /dev/null
+++ b/home-configuration/config/hypr/hyprland.conf
@@ -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
+}
diff --git a/home-configuration/config/hypr/hyprlock.conf b/home-configuration/config/hypr/hyprlock.conf
new file mode 100644
index 0000000..43216c4
--- /dev/null
+++ b/home-configuration/config/hypr/hyprlock.conf
@@ -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)
+}
+
diff --git a/home-configuration/config/hypr/hyprpaper.conf b/home-configuration/config/hypr/hyprpaper.conf
new file mode 100755
index 0000000..9018554
--- /dev/null
+++ b/home-configuration/config/hypr/hyprpaper.conf
@@ -0,0 +1,3 @@
+preload = ~/Pictures/Wallpapers/flowers.png
+wallpaper = HDMI-A-1,~/Pictures/Wallpapers/flowers.png
+wallpaper = eDP-1,~/Pictures/Wallpapers/flowers.png
diff --git a/home-configuration/config/niri/config.kdl b/home-configuration/config/niri/config.kdl
new file mode 100644
index 0000000..62e9793
--- /dev/null
+++ b/home-configuration/config/niri/config.kdl
@@ -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; }
+}
+
+
diff --git a/home-configuration/config/nvim/init.lua b/home-configuration/config/nvim/init.lua
new file mode 100755
index 0000000..ab02259
--- /dev/null
+++ b/home-configuration/config/nvim/init.lua
@@ -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")
diff --git a/home-configuration/config/nvim/lazy-lock.json b/home-configuration/config/nvim/lazy-lock.json
new file mode 100755
index 0000000..e4d83c3
--- /dev/null
+++ b/home-configuration/config/nvim/lazy-lock.json
@@ -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" }
+}
diff --git a/home-configuration/config/nvim/lua/config.lua b/home-configuration/config/nvim/lua/config.lua
new file mode 100755
index 0000000..9835875
--- /dev/null
+++ b/home-configuration/config/nvim/lua/config.lua
@@ -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>')
diff --git a/home-configuration/config/nvim/lua/plugins/catppuccin/init.lua b/home-configuration/config/nvim/lua/plugins/catppuccin/init.lua
new file mode 100755
index 0000000..c497b4d
--- /dev/null
+++ b/home-configuration/config/nvim/lua/plugins/catppuccin/init.lua
@@ -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,
+ },
+})
diff --git a/home-configuration/config/nvim/lua/plugins/lazy/init.lua b/home-configuration/config/nvim/lua/plugins/lazy/init.lua
new file mode 100755
index 0000000..497cf69
--- /dev/null
+++ b/home-configuration/config/nvim/lua/plugins/lazy/init.lua
@@ -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()
diff --git a/home-configuration/config/nvim/lua/plugins/lazy/plugins.lua b/home-configuration/config/nvim/lua/plugins/lazy/plugins.lua
new file mode 100755
index 0000000..75b873a
--- /dev/null
+++ b/home-configuration/config/nvim/lua/plugins/lazy/plugins.lua
@@ -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,
+ },
+}
diff --git a/home-configuration/config/nvim/lua/plugins/lsp/init.lua b/home-configuration/config/nvim/lua/plugins/lsp/init.lua
new file mode 100755
index 0000000..c5245d9
--- /dev/null
+++ b/home-configuration/config/nvim/lua/plugins/lsp/init.lua
@@ -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
diff --git a/home-configuration/config/nvim/lua/plugins/lualine/init.lua b/home-configuration/config/nvim/lua/plugins/lualine/init.lua
new file mode 100755
index 0000000..d23b323
--- /dev/null
+++ b/home-configuration/config/nvim/lua/plugins/lualine/init.lua
@@ -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 = {},
+})
diff --git a/home-configuration/config/nvim/lua/plugins/nvim-tree/init.lua b/home-configuration/config/nvim/lua/plugins/nvim-tree/init.lua
new file mode 100755
index 0000000..c7174f7
--- /dev/null
+++ b/home-configuration/config/nvim/lua/plugins/nvim-tree/init.lua
@@ -0,0 +1,2 @@
+local tree = require("nvim-tree")
+tree.setup() \ No newline at end of file
diff --git a/home-configuration/config/nvim/lua/plugins/render-markdown/init.lua b/home-configuration/config/nvim/lua/plugins/render-markdown/init.lua
new file mode 100755
index 0000000..ab078ce
--- /dev/null
+++ b/home-configuration/config/nvim/lua/plugins/render-markdown/init.lua
@@ -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,
+ },
+})
diff --git a/home-configuration/config/nvim/lua/plugins/telescope/init.lua b/home-configuration/config/nvim/lua/plugins/telescope/init.lua
new file mode 100755
index 0000000..2cb0f77
--- /dev/null
+++ b/home-configuration/config/nvim/lua/plugins/telescope/init.lua
@@ -0,0 +1,3 @@
+local tel = require("telescope")
+tel.setup({})
+tel.load_extension("undo")
diff --git a/home-configuration/config/nvim/lua/plugins/treesitter/init.lua b/home-configuration/config/nvim/lua/plugins/treesitter/init.lua
new file mode 100755
index 0000000..ffc8b17
--- /dev/null
+++ b/home-configuration/config/nvim/lua/plugins/treesitter/init.lua
@@ -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
diff --git a/home-configuration/config/nvim/lua/plugins/whichkey/init.lua b/home-configuration/config/nvim/lua/plugins/whichkey/init.lua
new file mode 100755
index 0000000..e6b9906
--- /dev/null
+++ b/home-configuration/config/nvim/lua/plugins/whichkey/init.lua
@@ -0,0 +1,2 @@
+local wk = require("which-key")
+wk.setup({})
diff --git a/home-configuration/config/nvim/lua/status_line/init.lua b/home-configuration/config/nvim/lua/status_line/init.lua
new file mode 100755
index 0000000..904684b
--- /dev/null
+++ b/home-configuration/config/nvim/lua/status_line/init.lua
@@ -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
diff --git a/home-configuration/config/picom/picom-animations.conf b/home-configuration/config/picom/picom-animations.conf
new file mode 100644
index 0000000..b101824
--- /dev/null
+++ b/home-configuration/config/picom/picom-animations.conf
@@ -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;
+ }
+ )
+ }
diff --git a/home-configuration/config/picom/picom.conf b/home-configuration/config/picom/picom.conf
new file mode 100644
index 0000000..46ecbd6
--- /dev/null
+++ b/home-configuration/config/picom/picom.conf
@@ -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"
+
+)
diff --git a/home-configuration/config/quickshell/config.js b/home-configuration/config/quickshell/config.js
new file mode 100644
index 0000000..0983a40
--- /dev/null
+++ b/home-configuration/config/quickshell/config.js
@@ -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"
+}
diff --git a/home-configuration/config/quickshell/shell.qml b/home-configuration/config/quickshell/shell.qml
new file mode 100644
index 0000000..a1356b1
--- /dev/null
+++ b/home-configuration/config/quickshell/shell.qml
@@ -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()
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/home-configuration/config/rofi/config.rasi b/home-configuration/config/rofi/config.rasi
new file mode 100755
index 0000000..58e885e
--- /dev/null
+++ b/home-configuration/config/rofi/config.rasi
@@ -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;
+}
diff --git a/home-configuration/config/waybar/config.jsonc b/home-configuration/config/waybar/config.jsonc
new file mode 100755
index 0000000..80a4967
--- /dev/null
+++ b/home-configuration/config/waybar/config.jsonc
@@ -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
+ }
+}
diff --git a/home-configuration/config/waybar/style.css b/home-configuration/config/waybar/style.css
new file mode 100755
index 0000000..7f63e4b
--- /dev/null
+++ b/home-configuration/config/waybar/style.css
@@ -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;
+}
diff --git a/home-configuration/config/waybar/window.sh b/home-configuration/config/waybar/window.sh
new file mode 100755
index 0000000..abf1e39
--- /dev/null
+++ b/home-configuration/config/waybar/window.sh
@@ -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
diff --git a/home-configuration/config/xmobar/xmobarrc b/home-configuration/config/xmobar/xmobarrc
new file mode 100644
index 0000000..d9c81ef
--- /dev/null
+++ b/home-configuration/config/xmobar/xmobarrc
@@ -0,0 +1,8 @@
+Config {
+ font = "xft:Iosevka Nerd Font-14",
+ bgColor = "#000000",
+ fgColor = "#ffffff",
+ position = TopW L 100,
+ commands = [ Run XMonadLog ],
+ template = "%XMonadLog%"
+ }
diff --git a/home-configuration/config/xmobar/xmobarrc~ b/home-configuration/config/xmobar/xmobarrc~
new file mode 100644
index 0000000..5b7110a
--- /dev/null
+++ b/home-configuration/config/xmobar/xmobarrc~
@@ -0,0 +1,8 @@
+Config {
+ font = "xft:Iosevka Nerd Font-14",
+ bgColor = "#000000",
+ fgColor = "#ffffff",
+ position = Top,
+ commands = [ Run XMonadLog ],
+ template = %XMonadLog%
+ } \ No newline at end of file
diff --git a/home-configuration/config/xmonad/xmonad.hs b/home-configuration/config/xmonad/xmonad.hs
new file mode 100644
index 0000000..a5db5a8
--- /dev/null
+++ b/home-configuration/config/xmonad/xmonad.hs
@@ -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
diff --git a/home-configuration/config/xmonad/xmonad.hs~ b/home-configuration/config/xmonad/xmonad.hs~
new file mode 100644
index 0000000..e39d3be
--- /dev/null
+++ b/home-configuration/config/xmonad/xmonad.hs~
@@ -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
diff --git a/home-configuration/config/zathura/zathurarc b/home-configuration/config/zathura/zathurarc
new file mode 100644
index 0000000..96ee898
--- /dev/null
+++ b/home-configuration/config/zathura/zathurarc
@@ -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
diff --git a/home-configuration/default.nix b/home-configuration/default.nix
new file mode 100644
index 0000000..0c955db
--- /dev/null
+++ b/home-configuration/default.nix
@@ -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
+ ];
+}
diff --git a/home-configuration/managed/discord/default.nix b/home-configuration/managed/discord/default.nix
new file mode 100644
index 0000000..039724d
--- /dev/null
+++ b/home-configuration/managed/discord/default.nix
@@ -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" ];
+}
diff --git a/home-configuration/managed/git/default.nix b/home-configuration/managed/git/default.nix
new file mode 100644
index 0000000..569e214
--- /dev/null
+++ b/home-configuration/managed/git/default.nix
@@ -0,0 +1,2 @@
+{ pkgs, ... }:
+{ }
diff --git a/home-configuration/managed/obs-studio/default.nix b/home-configuration/managed/obs-studio/default.nix
new file mode 100644
index 0000000..908a24d
--- /dev/null
+++ b/home-configuration/managed/obs-studio/default.nix
@@ -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
+ ];
+}
diff --git a/home-configuration/managed/prismlauncher/default.nix b/home-configuration/managed/prismlauncher/default.nix
new file mode 100644
index 0000000..f31c610
--- /dev/null
+++ b/home-configuration/managed/prismlauncher/default.nix
@@ -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";
+}
diff --git a/home-configuration/managed/waybar/default.nix b/home-configuration/managed/waybar/default.nix
new file mode 100644
index 0000000..e72c78b
--- /dev/null
+++ b/home-configuration/managed/waybar/default.nix
@@ -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 ];
+}
diff --git a/home-configuration/managed/waybar/style.nix b/home-configuration/managed/waybar/style.nix
new file mode 100644
index 0000000..83bff23
--- /dev/null
+++ b/home-configuration/managed/waybar/style.nix
@@ -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;
+ }
+ '';
+}