diff --git a/.config/btop/btop.conf b/.config/btop/btop.conf new file mode 100644 index 0000000..8e5212f --- /dev/null +++ b/.config/btop/btop.conf @@ -0,0 +1,248 @@ +#? Config file for btop v. 1.4.0 + +#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. +#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" +color_theme = "/usr/share/btop/themes/gruvbox_dark.theme" + +#* If the theme set background should be shown, set to False if you want terminal background transparency. +theme_background = False + +#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. +truecolor = True + +#* Set to true to force tty mode regardless if a real tty has been detected or not. +#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. +force_tty = False + +#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. +#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. +#* Use whitespace " " as separator between different presets. +#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" +presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" + +#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. +#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. +vim_keys = False + +#* Rounded corners on boxes, is ignored if TTY mode is ON. +rounded_corners = True + +#* Default symbols to use for graph creation, "braille", "block" or "tty". +#* "braille" offers the highest resolution but might not be included in all fonts. +#* "block" has half the resolution of braille but uses more common characters. +#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. +#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. +graph_symbol = "braille" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_cpu = "default" + +# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty". +graph_symbol_gpu = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_mem = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_net = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_proc = "default" + +#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace. +shown_boxes = "cpu mem net proc" + +#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. +update_ms = 100 + +#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", +#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. +proc_sorting = "cpu lazy" + +#* Reverse sorting order, True or False. +proc_reversed = False + +#* Show processes as a tree. +proc_tree = False + +#* Use the cpu graph colors in the process list. +proc_colors = True + +#* Use a darkening gradient in the process list. +proc_gradient = True + +#* If process cpu usage should be of the core it's running on or usage of the total available cpu power. +proc_per_core = False + +#* Show process memory as bytes instead of percent. +proc_mem_bytes = True + +#* Show cpu graph for each process. +proc_cpu_graphs = True + +#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) +proc_info_smaps = False + +#* Show proc box on left side of screen instead of right. +proc_left = False + +#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). +proc_filter_kernel = False + +#* In tree-view, always accumulate child process resources in the parent process. +proc_aggregate = False + +#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_upper = "Auto" + +#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_lower = "Auto" + +#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off". +show_gpu_info = "Auto" + +#* Toggles if the lower CPU graph should be inverted. +cpu_invert_lower = True + +#* Set to True to completely disable the lower CPU graph. +cpu_single_graph = False + +#* Show cpu box at bottom of screen instead of top. +cpu_bottom = False + +#* Shows the system uptime in the CPU box. +show_uptime = True + +#* Show cpu temperature. +check_temp = True + +#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. +cpu_sensor = "Auto" + +#* Show temperatures for cpu cores also if check_temp is True and sensors has been found. +show_coretemp = True + +#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. +#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. +#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. +#* Example: "4:0 5:1 6:3" +cpu_core_map = "" + +#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". +temp_scale = "celsius" + +#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. +base_10_sizes = False + +#* Show CPU frequency. +show_cpu_freq = True + +#* Draw a clock at top of screen, formatting according to strftime, empty string to disable. +#* Special formatting: /host = hostname | /user = username | /uptime = system uptime +clock_format = "%X" + +#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. +background_update = True + +#* Custom cpu model name, empty string to disable. +custom_cpu_name = "" + +#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". +#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user". +disks_filter = "" + +#* Show graphs instead of meters for memory values. +mem_graphs = True + +#* Show mem box below net box instead of above. +mem_below_net = False + +#* Count ZFS ARC in cached and available memory. +zfs_arc_cached = True + +#* If swap memory should be shown in memory box. +show_swap = True + +#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. +swap_disk = True + +#* If mem box should be split to also show disks info. +show_disks = True + +#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. +only_physical = True + +#* Read disks list from /etc/fstab. This also disables only_physical. +use_fstab = True + +#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) +zfs_hide_datasets = False + +#* Set to true to show available disk space for privileged users. +disk_free_priv = False + +#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. +show_io_stat = True + +#* Toggles io mode for disks, showing big graphs for disk read/write speeds. +io_mode = False + +#* Set to True to show combined read/write io graphs in io mode. +io_graph_combined = False + +#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". +#* Example: "/mnt/media:100 /:20 /boot:1". +io_graph_speeds = "" + +#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. +net_download = 100 + +net_upload = 100 + +#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. +net_auto = True + +#* Sync the auto scaling for download and upload to whichever currently has the highest scale. +net_sync = True + +#* Starts with the Network Interface specified here. +net_iface = "" + +#* Show battery stats in top right if battery is present. +show_battery = True + +#* Which battery to use if multiple are present. "Auto" for auto detection. +selected_battery = "Auto" + +#* Show power stats of battery next to charge indicator. +show_battery_watts = True + +#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". +#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. +log_level = "WARNING" + +#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards. +nvml_measure_pcie_speeds = True + +#* Horizontally mirror the GPU graph. +gpu_mirror_graph = True + +#* Custom gpu0 model name, empty string to disable. +custom_gpu_name0 = "" + +#* Custom gpu1 model name, empty string to disable. +custom_gpu_name1 = "" + +#* Custom gpu2 model name, empty string to disable. +custom_gpu_name2 = "" + +#* Custom gpu3 model name, empty string to disable. +custom_gpu_name3 = "" + +#* Custom gpu4 model name, empty string to disable. +custom_gpu_name4 = "" + +#* Custom gpu5 model name, empty string to disable. +custom_gpu_name5 = "" diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf new file mode 100644 index 0000000..a53ea02 --- /dev/null +++ b/.config/hypr/hyprland.conf @@ -0,0 +1,231 @@ +# monitor=,preferred,auto,auto +monitor = HDMI-A-1, 1920x1080@75, 1920x0, 1 +monitor = eDP-1, disable + +exec-once = sleep 1 && waybar +exec-once = sleep 2 && nm-applet +exec-once = sleep 2 && hyprpaper +exec-once = sleep 3 && /opt/Mullvad\ VPN/mullvad-vpn +exec-once = sleep 3 && hyprctl keyword input:touchdevice:enabled false +exec-once = wl-paste --type text --watch cliphist store # Stores only text data +exec-once = wl-paste --type image --watch cliphist store # Stores only image data + +env = XCURSOR_SIZE,24 +env = HYPRCURSOR_SIZE,24 +env = PATH, $HOME/.cargo/bin/:$HOME/.local/bin/:$PATH +env = XDG_CURRENT_SESSION, Hyprland + +render:explicit_sync = true + + +$terminal = wezterm start --always-new-process +$fileManager = flatpak run org.kde.dolphin +$active_menu = rofi -show +$menu = rofi -show drun -show-icons +$menu_unsafe = mullvad-exclude rofi -show drun -show-icons +$clipboard = cliphist list | rofi -dmenu -show-icons | cliphist decode | wl-copy +$screenshot = grim "$HOME/Pictures/Screenshots/$(date '+%y%m%d_%H-%M-%S').png" | grim - | wl-copy +$screenshot_with_area_selector = grim -g "$(slurp)" - | wl-copy +$browser = flatpak run app.zen_browser.zen +$browser_unsafe = mullvad-exclude flatpak run io.github.ungoogled_software.ungoogled_chromium --incognito + +$mainMod = SUPER +$my_trigger = Alt + + + +bind = $my_trigger, T, exec, $terminal +bind = $my_trigger, Q, exec, $fileManager +bind = Alt, F1, exec, $active_menu +bind = Alt, F2, exec, $menu +bind = Alt SHIFT, F2, exec, $menu_unsafe +bind = Alt, F3, exec, $clipboard +bind = , Print, exec, $screenshot +bind = $my_trigger, F, exec, $browser +bind = $my_trigger SHIFT, F, exec, $browser_unsafe +bind = Shift, Print, exec, $screenshot_with_area_selector + +$codeberg = /var/lib/flatpak/exports/bin/app.zen_browser.zen --no-remote --class dev.heppen.webapps.Codeberg2172 --name dev.heppen.webapps.Codeberg2172 --profile "/home/tahinli/.var/app/dev.heppen.webapps/data/quick-webapps/profiles/app.zen_browser.zen/Codeberg2172" --new-window https://codeberg.org +$whatsapp = /var/lib/flatpak/exports/bin/app.zen_browser.zen --no-remote --class dev.heppen.webapps.WhatsApp5679 --name dev.heppen.webapps.WhatsApp5679 --profile "/home/tahinli/.var/app/dev.heppen.webapps/data/quick-webapps/profiles/app.zen_browser.zen/WhatsApp5679" --new-window https://web.whatsapp.com +$discord = flatpak run dev.vencord.Vesktop +$youtube = flatpak run io.freetubeapp.FreeTube +$deezer = /var/lib/flatpak/exports/bin/io.github.ungoogled_software.ungoogled_chromium --app=https://deezer.com --class=dev.heppen.webapps.Deezer7429 --name=dev.heppen.webapps.Deezer7429 --user-data-dir="/home/tahinli/.var/app/dev.heppen.webapps/data/quick-webapps/profiles/io.github.ungoogled_software.ungoogled_chromium/Deezer7429" +$mail = /var/lib/flatpak/exports/bin/app.zen_browser.zen --no-remote --class dev.heppen.webapps.Proton1470 --name dev.heppen.webapps.Proton1470 --profile "/home/tahinli/.var/app/dev.heppen.webapps/data/quick-webapps/profiles/app.zen_browser.zen/Proton1470" --new-window https://mail.proton.me + +workspace = 101, on-created-empty: $codeberg +workspace = 102, on-created-empty: $dev +workspace = 201, on-created-empty: $whatsapp +workspace = 202, on-created-empty: $discord +workspace = 203, on-created-empty: $deezer +workspace = 204, on-created-empty: $youtube +workspace = 205, on-created-empty: $mail + +bind = $my_trigger, G, workspace, 101 +bind = $my_trigger, E, workspace, 102 +bind = $my_trigger, W, workspace, 201 +bind = $my_trigger, D, workspace, 202 +bind = $my_trigger, S, workspace, 203 +bind = $my_trigger, Y, workspace, 204 +bind = $my_trigger, P, workspace, 205 + +bind = Alt, F4, killactive, +bind = $mainMod $my_trigger, F4, exit, +bind = $mainMod, H, exec, pkill -SIGUSR1 waybar +binds { + allow_workspace_cycles = true +} +bindr = $mainMod, Tab, bringactivetotop +binde = $mainMod, Tab, cyclenext +bind = Alt, Tab, workspace, previous +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod, F, togglefloating, +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +bindle = $mainMod SHIFT, right, resizeactive, 30 0 +bindle = $mainMod SHIFT, left, resizeactive, -30 0 +bindle = $mainMod SHIFT, up, resizeactive, 0 -30 +bindle = $mainMod SHIFT, down, resizeactive, 0 30 + +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindel = ,XF86MonBrightnessUp, exec, brightnessctl s 10%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl s 10%- + +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPause, exec, playerctl play-pause +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioPrev, exec, playerctl previous + +windowrulev2 = suppressevent maximize, class:.* +windowrulev2 = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 + +general { + gaps_in = 3 + gaps_out = 10 + + border_size = 2 + + col.active_border = rgba(FFAA93FF) rgba(0053DFEE) rgba(5500FFAA) rgba(FFAFFAAA) 0deg + col.inactive_border = rgba(595959aa) + + resize_on_border = true + + allow_tearing = true + + layout = dwindle +} + +decoration { + rounding = 0 + + active_opacity = 1.0 + inactive_opacity = 1.0 + + drop_shadow = true + shadow_range = 100 + shadow_render_power = 10 + col.shadow = rgba(1a1a1aee) + + blur { + enabled = true + size = 3 + passes = 1 + + vibrancy = 0.1696 + } + + windowrulev2 = opacity 0.8, class:kitty + windowrulev2 = opacity 0.8, class:wezterm + windowrulev2 = opacity 0.8, class:yazi + windowrulev2 = tile, class:dev.heppen.webapps +} + +animations { + enabled = false + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this +} + +master { + new_status = master +} + +misc { + force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( +} + +input { + kb_layout = tr + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 0 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + + touchpad { + natural_scroll = true + } +} + +gestures { + workspace_swipe = false +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} diff --git a/.config/hypr/hyprpaper.conf b/.config/hypr/hyprpaper.conf new file mode 100644 index 0000000..14264ec --- /dev/null +++ b/.config/hypr/hyprpaper.conf @@ -0,0 +1,5 @@ +$location = ~/Pictures/michael-niessl-KraoHdRYrRE-unsplash.jpg +preload = $location +wallpaper = eDP-1,$location +wallpaper = HDMI-A-1,$location +splash = false diff --git a/.config/nvim/.luarc.json b/.config/nvim/.luarc.json new file mode 100644 index 0000000..1e1765c --- /dev/null +++ b/.config/nvim/.luarc.json @@ -0,0 +1,5 @@ +{ + "diagnostics.globals": [ + "vim" + ] +} \ No newline at end of file diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..80c284c --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,3 @@ +require("options") +require("configs.lazy") +require("keymaps") diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json new file mode 100644 index 0000000..f2b0984 --- /dev/null +++ b/.config/nvim/lazy-lock.json @@ -0,0 +1,24 @@ +{ + "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" }, + "blink.cmp": { "branch": "main", "commit": "18b352d12b35bca148427b607098df14b75a218f" }, + "catppuccin": { "branch": "main", "commit": "d72341852556e2dfe19f779cc682c16dd58548fc" }, + "crates.nvim": { "branch": "main", "commit": "85356807f3a0e9a3f7015586f3a010170d338686" }, + "fzf-lua": { "branch": "main", "commit": "e6afa1aa22893280720cde1cdd0b0b188d5815af" }, + "lazy.nvim": { "branch": "main", "commit": "e5e9bf48211a13d9ee6c1077c88327c49c1ab4a0" }, + "lualine.nvim": { "branch": "master", "commit": "f4f791f67e70d378a754d02da068231d2352e5bc" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, + "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, + "nvim-autopairs": { "branch": "master", "commit": "68f0e5c3dab23261a945272032ee6700af86227a" }, + "nvim-dap": { "branch": "master", "commit": "52302f02fea3a490e55475de52fa4deb8af2eb11" }, + "nvim-dap-python": { "branch": "master", "commit": "34282820bb713b9a5fdb120ae8dd85c2b3f49b51" }, + "nvim-dap-ui": { "branch": "master", "commit": "bc81f8d3440aede116f821114547a476b082b319" }, + "nvim-dap-virtual-text": { "branch": "master", "commit": "df66808cd78b5a97576bbaeee95ed5ca385a9750" }, + "nvim-highlight-colors": { "branch": "main", "commit": "a770df5fbd98abbb0fc1a95d9a3f2bb1e51e3e2c" }, + "nvim-lspconfig": { "branch": "master", "commit": "1110787f1b464888c59a044c48c5119d14078044" }, + "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, + "nvim-treesitter": { "branch": "master", "commit": "36bbf518420918e965d11dad3d3f194803c47731" }, + "nvim-web-devicons": { "branch": "master", "commit": "1020869742ecb191f260818234517f4a1515cfe8" }, + "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, + "rustaceanvim": { "branch": "master", "commit": "f03035fa03ccb36cd26d0792c946fbacba1d1a39" }, + "yazi.nvim": { "branch": "main", "commit": "98db02660a0f853f0bbf051c14f613aff44e5fd8" } +} diff --git a/.config/nvim/lua/configs/lazy.lua b/.config/nvim/lua/configs/lazy.lua new file mode 100644 index 0000000..aa0ceb4 --- /dev/null +++ b/.config/nvim/lua/configs/lazy.lua @@ -0,0 +1,31 @@ +-- Bootstrap lazy.nvim +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +-- Make sure to setup `mapleader` and `maplocalleader` before +-- loading lazy.nvim so that mappings are correct. +-- This is also a good place to setup other settings (vim.opt) +vim.g.mapleader = " " +vim.g.maplocalleader = "\\" + +-- Setup lazy.nvim +require("lazy").setup({ + spec = { + { import = "plugins" }, + }, + -- automatically check for plugin updates + checker = { enabled = true, notify = false }, +}) diff --git a/.config/nvim/lua/keymaps.lua b/.config/nvim/lua/keymaps.lua new file mode 100644 index 0000000..318823c --- /dev/null +++ b/.config/nvim/lua/keymaps.lua @@ -0,0 +1,35 @@ +local format_and_save = function() + vim.lsp.buf.format() + vim.cmd.update() +end + +vim.keymap.set("n", "", require("fzf-lua").live_grep_native, {}) +vim.keymap.set("n", "", require("fzf-lua").buffers, {}) +vim.keymap.set("n", "", require("fzf-lua").lsp_definitions, {}) +vim.keymap.set("n", "\"m", require("fzf-lua").manpages, {}) +vim.keymap.set("n", "z.", require("fzf-lua").spell_suggest, {}) +vim.keymap.set("n", ".", require("fzf-lua").lsp_code_actions, { + noremap = true, silent = true, +}) +vim.keymap.set("n", ",", function() vim.diagnostic.open_float() end, {}) +vim.keymap.set("n", "\"r", function() vim.lsp.buf.rename() end, {}) +vim.keymap.set("n", ";", require("fzf-lua").diagnostics_workspace, {}) + + +vim.keymap.set({ "n", "i", "v" }, "", format_and_save) +vim.keymap.set({ "n", "v" }, "", "Yazi", { noremap = true, silent = true, }) +vim.keymap.set("t", "e", "", { noremap = true }) + +vim.keymap.set("n", "", function() require("dap").continue() end) +vim.keymap.set("n", "", function() require("dap").step_over() end) +vim.keymap.set("n", "", function() require("dap").step_into() end) +vim.keymap.set("n", "", function() require("dap").step_out() end) +vim.keymap.set("n", "\"db", function() require("dap").toggle_breakpoint() end) +vim.keymap.set("n", "\"dl", function() require("dap").run_last() end) +vim.keymap.set({ "n", "v" }, "\"dh", function() + require("dap.ui.widgets").hover() +end) + +vim.keymap.set("n", "cv", require("crates").show_versions_popup, {}) +vim.keymap.set("n", "cf", require("crates").show_features_popup, {}) +vim.keymap.set("n", "cd", require("crates").show_dependencies_popup, {}) diff --git a/.config/nvim/lua/options.lua b/.config/nvim/lua/options.lua new file mode 100644 index 0000000..9ee82f3 --- /dev/null +++ b/.config/nvim/lua/options.lua @@ -0,0 +1,20 @@ +vim.opt.clipboard = "unnamedplus" +vim.opt.mouse = 'a' + +vim.opt.tabstop = 4 +vim.opt.softtabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.expandtab = true + +vim.opt.number = true +vim.opt.relativenumber = false +vim.opt.cursorline = true + +vim.opt.spelllang = "en_gb" +vim.opt.spell = true + +vim.lsp.inlay_hint.enable() + +vim.g.loaded_netrwPlugin = 0 + +vim.opt.termguicolors = true diff --git a/.config/nvim/lua/plugins/blink.lua b/.config/nvim/lua/plugins/blink.lua new file mode 100644 index 0000000..5ce4d48 --- /dev/null +++ b/.config/nvim/lua/plugins/blink.lua @@ -0,0 +1,39 @@ +return { + "saghen/blink.cmp", + version = '*', + opts = { + keymap = { + [""] = { "accept", "fallback" }, + [""] = { "scroll_documentation_up", "fallback" }, + [""] = { "scroll_documentation_down", "fallback" }, + }, + appearance = { + nerd_font_variant = "normal" + }, + completion = { + ghost_text = { + enabled = true, + }, + list = { + selection = { + preselect = false, + auto_insert = false, + }, + }, + documentation = { + auto_show = true, + auto_show_delay_ms = 1000, + }, + menu = { + draw = { + treesitter = { + "lsp" + }, + }, + }, + }, + signature = { + enabled = true, + } + }, +} diff --git a/.config/nvim/lua/plugins/comment.lua b/.config/nvim/lua/plugins/comment.lua new file mode 100644 index 0000000..d085022 --- /dev/null +++ b/.config/nvim/lua/plugins/comment.lua @@ -0,0 +1,6 @@ +return { + "numToStr/Comment.nvim", + opts = { + -- add any options here + } +} diff --git a/.config/nvim/lua/plugins/crates.lua b/.config/nvim/lua/plugins/crates.lua new file mode 100644 index 0000000..7e1c0c2 --- /dev/null +++ b/.config/nvim/lua/plugins/crates.lua @@ -0,0 +1,8 @@ +return { + "saecki/crates.nvim", + event = { "BufRead Cargo.toml" }, + tag = "stable", + config = function() + require("crates").setup() + end, +} diff --git a/.config/nvim/lua/plugins/fzf-lua.lua b/.config/nvim/lua/plugins/fzf-lua.lua new file mode 100644 index 0000000..d2f8bc2 --- /dev/null +++ b/.config/nvim/lua/plugins/fzf-lua.lua @@ -0,0 +1,26 @@ +return { + "ibhagwan/fzf-lua", + dependencies = { "nvim-tree/nvim-web-devicons" }, + opts = { + "skim", + fzf_opts = { + ["--wrap"] = true, + + } + }, + config = function() + require("fzf-lua").setup({ + diagnostics = { + multiline = true, + fzf_opts = { + ["--wrap"] = true, + }, + }, + winopts = { + preview = { + layout = "vertical", + } + } + }) + end +} diff --git a/.config/nvim/lua/plugins/lualine.lua b/.config/nvim/lua/plugins/lualine.lua new file mode 100644 index 0000000..f217155 --- /dev/null +++ b/.config/nvim/lua/plugins/lualine.lua @@ -0,0 +1,14 @@ +return { + "nvim-lualine/lualine.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + require("lualine").setup({ + options = { + theme = "auto" + -- theme = "horizon" + -- theme = "OceanicNext" + -- theme = "ayu_dark" + } + }) + end, +} diff --git a/.config/nvim/lua/plugins/mason-lspconfig.lua b/.config/nvim/lua/plugins/mason-lspconfig.lua new file mode 100644 index 0000000..e63f08a --- /dev/null +++ b/.config/nvim/lua/plugins/mason-lspconfig.lua @@ -0,0 +1,15 @@ +return { + "williamboman/mason-lspconfig.nvim", + config = function() + require("mason").setup() + require("mason-lspconfig").setup({ + ensure_installed = { + "lua_ls", + "clangd", + "ruff", + "pyright", + "cssls", + }, + }) + end, +} diff --git a/.config/nvim/lua/plugins/mason.lua b/.config/nvim/lua/plugins/mason.lua new file mode 100644 index 0000000..55f207b --- /dev/null +++ b/.config/nvim/lua/plugins/mason.lua @@ -0,0 +1,6 @@ +return { + "williamboman/mason.nvim", + config = function() + require("mason").setup() + end, +} diff --git a/.config/nvim/lua/plugins/nvim-autopairs.lua b/.config/nvim/lua/plugins/nvim-autopairs.lua new file mode 100644 index 0000000..7a4a0ac --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-autopairs.lua @@ -0,0 +1,8 @@ +return { + "windwp/nvim-autopairs", + event = "InsertEnter", + config = true + + -- use opts = {} for passing setup options + -- this is equivalent to setup({}) function +} diff --git a/.config/nvim/lua/plugins/nvim-dap-python.lua b/.config/nvim/lua/plugins/nvim-dap-python.lua new file mode 100644 index 0000000..dae1ffa --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-dap-python.lua @@ -0,0 +1,6 @@ +return { + "mfussenegger/nvim-dap-python", + config = function() + require("dap-python").setup("python") + end +} diff --git a/.config/nvim/lua/plugins/nvim-dap-ui.lua b/.config/nvim/lua/plugins/nvim-dap-ui.lua new file mode 100644 index 0000000..064b2ae --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-dap-ui.lua @@ -0,0 +1,21 @@ +return { + "rcarriga/nvim-dap-ui", + dependencies = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio" }, + config = function() + require("dapui").setup() + + local dap, dapui = require("dap"), require("dapui") + dap.listeners.before.attach.dapui_config = function() + dapui.open() + end + dap.listeners.before.launch.dapui_config = function() + dapui.open() + end + dap.listeners.before.event_terminated.dapui_config = function() + dapui.close() + end + dap.listeners.before.event_exited.dapui_config = function() + dapui.close() + end + end +} diff --git a/.config/nvim/lua/plugins/nvim-dap-virtual-text.lua b/.config/nvim/lua/plugins/nvim-dap-virtual-text.lua new file mode 100644 index 0000000..ec66681 --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-dap-virtual-text.lua @@ -0,0 +1,10 @@ +return { + "theHamsta/nvim-dap-virtual-text", + config = function() + require("nvim-dap-virtual-text").setup({ + all_references = true, + only_first_definition = false, + highlight_new_as_changed = true, + }) + end +} diff --git a/.config/nvim/lua/plugins/nvim-dap.lua b/.config/nvim/lua/plugins/nvim-dap.lua new file mode 100644 index 0000000..d033c49 --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-dap.lua @@ -0,0 +1,51 @@ +return { + "mfussenegger/nvim-dap", + config = function() + local dap = require("dap") + dap.adapters.gdb = { + type = "executable", + command = "gdb", + args = { "--interpreter=dap", "--eval-command", "set print pretty on" } + } + + local gdb = { + { + name = "Launch", + type = "gdb", + request = "launch", + program = function() + return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') + end, + cwd = "${workspaceFolder}", + stopAtBeginningOfMainSubprogram = false, + }, + { + name = "Select and attach to process", + type = "gdb", + request = "attach", + program = function() + return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') + end, + pid = function() + local name = vim.fn.input('Executable name (filter): ') + return require("dap.utils").pick_process({ filter = name }) + end, + cwd = '${workspaceFolder}' + }, + { + name = 'Attach to gdbserver :1234', + type = 'gdb', + request = 'attach', + target = 'localhost:1234', + program = function() + return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') + end, + cwd = '${workspaceFolder}' + }, + } + + dap.configurations.c = gdb + dap.configurations.asm = gdb + dap.configurations.cpp = gdb + end +} diff --git a/.config/nvim/lua/plugins/nvim-highlight-colors.lua b/.config/nvim/lua/plugins/nvim-highlight-colors.lua new file mode 100644 index 0000000..e2184bd --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-highlight-colors.lua @@ -0,0 +1,6 @@ +return { + "brenoprata10/nvim-highlight-colors", + config = function() + require("nvim-highlight-colors").setup({}) + end +} diff --git a/.config/nvim/lua/plugins/nvim-lspconfig.lua b/.config/nvim/lua/plugins/nvim-lspconfig.lua new file mode 100644 index 0000000..72534bc --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-lspconfig.lua @@ -0,0 +1,40 @@ +return { + "neovim/nvim-lspconfig", + dependencies = { "saghen/blink.cmp" }, + + opts = { + servers = { + lua_ls = {} + } + }, + + config = function() + local capabilities = require("blink.cmp").get_lsp_capabilities() + local lspconfig = require("lspconfig") + + lspconfig["lua_ls"].setup({ capabilities = capabilities }) + lspconfig["clangd"].setup({ capabilities = capabilities }) + lspconfig["pyright"].setup({ + settings = { + pyright = { + disableOrganizeImpors = true, + }, + python = { + analysis = { + ignore = { "*" } + } + } + }, + capabilities = capabilities + }) + lspconfig["ruff"].setup({ + init_options = { + settings = { + logLevel = "trace", + }, + }, + capabilities = capabilities, + }) + lspconfig["cssls"].setup({ capabilities = capabilities }) + end +} diff --git a/.config/nvim/lua/plugins/nvim-treesitter.lua b/.config/nvim/lua/plugins/nvim-treesitter.lua new file mode 100644 index 0000000..cdb0409 --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-treesitter.lua @@ -0,0 +1,11 @@ +return { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + config = function() + require("nvim-treesitter.configs").setup({ + auto_install = true, + highlight = { enabled = true }, + indent = { enabled = true }, + }) + end, +} diff --git a/.config/nvim/lua/plugins/rustaceanvim.lua b/.config/nvim/lua/plugins/rustaceanvim.lua new file mode 100644 index 0000000..581ffbb --- /dev/null +++ b/.config/nvim/lua/plugins/rustaceanvim.lua @@ -0,0 +1,12 @@ +return { + "mrcjkb/rustaceanvim", + version = "^5", + lazy = false, + config = function() + vim.g.rustaceanvim = { + tools = { + enable_clippy = false, + }, + } + end +} diff --git a/.config/nvim/lua/plugins/theme.lua b/.config/nvim/lua/plugins/theme.lua new file mode 100644 index 0000000..c660080 --- /dev/null +++ b/.config/nvim/lua/plugins/theme.lua @@ -0,0 +1,93 @@ +return { + "catppuccin/nvim", + name = "catppuccin", + priority = 1000, + config = function() + require("catppuccin").setup({ + flavour = "macchiato", + transparent_background = true, + }) + vim.cmd.colorscheme("catppuccin") + end +} + +-- return { +-- "folke/tokyonight.nvim", +-- lazy = false, +-- priority = 1000, +-- config = function() +-- vim.cmd.colorscheme("tokyonight-storm") +-- end, +-- opts = {}, +-- } + +-- return { +-- "ellisonleao/gruvbox.nvim", +-- priority = 1000, +-- config = function() +-- require("gruvbox").setup({ +-- contrast = "hard", +-- transparent_mode = true, +-- }) +-- vim.cmd.colorscheme("gruvbox") +-- end, +-- } + +-- return { +-- "akinsho/horizon.nvim", +-- version = "*", +-- config = function() +-- vim.cmd.colorscheme("horizon") +-- vim.o.background = "dark" +-- end +-- } + +-- return { +-- 'f4z3r/gruvbox-material.nvim', +-- name = 'gruvbox-material', +-- lazy = false, +-- priority = 1000, +-- opts = { +-- contrast = "hard", +-- enable_bold = 1, +-- ui_contrast = "high" +-- }, +-- } + +-- return { +-- "Shatur/neovim-ayu", +-- config = function() +-- require("ayu").setup({ +-- mirage = false, +-- terminal = true, +-- }) +-- vim.cmd.colorscheme("ayu-dark") +-- end +-- } + +-- return { +-- 'ray-x/aurora', +-- init = function() +-- vim.g.aurora_italic = 0 +-- vim.g.aurora_transparent = 1 +-- vim.g.aurora_bold = 1 +-- end, +-- config = function() +-- vim.cmd.colorscheme "aurora" +-- end +-- } + +-- return { +-- "sainnhe/everforest", +-- config = function() +-- vim.g.everforest_transparent_background = 2 +-- vim.g.everforest_float_style = "dim" +-- vim.g.everforest_diagnostic_text_highlight = 1 +-- vim.g.everforest_diagnostic_line_highlight = 1 +-- vim.g.everforest_diagnostic_virtual_text = "highlighted" +-- vim.g.everforest_dim_inactive_windows = 1 +-- vim.g.everforest_ui_contrast = "high" +-- vim.g.everforest_better_performans = 1 +-- vim.cmd.colorscheme("everforest") +-- end +-- } diff --git a/.config/nvim/lua/plugins/yazi.lua b/.config/nvim/lua/plugins/yazi.lua new file mode 100644 index 0000000..caf2e8e --- /dev/null +++ b/.config/nvim/lua/plugins/yazi.lua @@ -0,0 +1,3 @@ +return { + "mikavilpas/yazi.nvim" +} diff --git a/.config/nvim/spell/en.utf-8.add b/.config/nvim/spell/en.utf-8.add new file mode 100644 index 0000000..3d973bf --- /dev/null +++ b/.config/nvim/spell/en.utf-8.add @@ -0,0 +1,23 @@ +Ahmet +Kaan +Gümüş +github +linkedin +tahinli +ahmetkaangumus +Erciyes +com +blockchain +WebSocket +Radioxide +radioxide +tcp +udp +NAT +IPv4 +ReLU +JWT +Postgres +codeberg +org +png diff --git a/.config/nvim/spell/en.utf-8.add.spl b/.config/nvim/spell/en.utf-8.add.spl new file mode 100644 index 0000000..4380d06 Binary files /dev/null and b/.config/nvim/spell/en.utf-8.add.spl differ diff --git a/.config/rofi/config.rasi b/.config/rofi/config.rasi new file mode 100644 index 0000000..32ee50a --- /dev/null +++ b/.config/rofi/config.rasi @@ -0,0 +1,4 @@ +configuration { + font: "fira 18"; +} +@theme "/usr/share/rofi/themes/gruvbox-dark-hard.rasi" diff --git a/.config/waybar/config b/.config/waybar/config new file mode 100644 index 0000000..dd4970a --- /dev/null +++ b/.config/waybar/config @@ -0,0 +1,163 @@ +{ + "layer": "top", + "position": "top", + "height": 24, + "spacing": 16, + "modules-left": ["hyprland/workspaces", "mpris"], + "modules-center": ["clock"], + "modules-right": ["privacy", "cpu", "memory", "wireplumber", "tray", "battery"], + + "cava": { + "framerate": 30, + "autosens": 1, + "sensitivity": 100, + "bars": 14, + "lower_cutoff_freq": 50, + "higher_cutoff_freq": 10000, + "method": "pulse", + "source": "auto", + "stereo": true, + "reverse": false, + "bar_delimiter": 0, + "monstercat": false, + "waves": false, + "noise_reduction": 0.77, + "input_delay": 2, + "format-icons" : ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" ], + "actions": { + "on-click-right": "mode" + } + }, + + "wlr/taskbar": { + "format": "{icon}", + "icon-size": 14, + "icon-theme": "Numix-Circle", + "tooltip-format": "{title}", + "on-click": "activate", + "on-click-middle": "close", + "ignore-list": [ + "Alacritty" + ], + "app_ids-mapping": { + "firefoxdeveloperedition": "firefox-developer-edition" + }, + "rewrite": { + "Firefox Web Browser": "Firefox", + "Foot Server": "Terminal" + } + }, + + "pulseaudio/slider": { + "min": 0, + "max": 100, + "orientation": "horizontal" + }, + + "privacy": { + "icon-spacing": 4, + "icon-size": 18, + "transition-duration": 250, + "modules": [ + { + "type": "screenshare", + "tooltip": true, + "tooltip-icon-size": 24 + }, + { + "type": "audio-out", + "tooltip": true, + "tooltip-icon-size": 24 + }, + { + "type": "audio-in", + "tooltip": true, + "tooltip-icon-size": 24 + } + ] + }, + + "mpris": { + "interval": 1, + "format": " {player_icon} {dynamic}", + "format-paused": "{status_icon} {dynamic}", + "player-icons": { + "default": "▶", + "mpv": "🎵" + }, + "status-icons": { + "paused": "⏸" + }, + // "ignored-players": ["firefox"] + }, + + "wireplumber": { + "format": "{icon} {volume}% ", + "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle", + "format-icons": ["", "", ""], + "on-click-right": "pavucontrol", + "format-muted": "\uf00d {volume}%" + }, + + "hyprland/workspaces": { + "format": "{icon}", + "active-only": true + }, + "hyprland/window": { + "format": "{title}" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "\uf06e", + "deactivated": "\uf070" + } + }, + "network": { + "interface": "enp4s0f4u2u1c2", + "format": "{ifname}", + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ifname} ", + "format-disconnected": "", //An empty format will hide the module. + "format-disconnected": "", + "tooltip-format": "{ifname}", + "tooltip-format-wifi": "{essid} ({signalStrength}%) ", + "tooltip-format-ethernet": "{ifname} ", + "tooltip-format-disconnected": "Disconnected", + "max-length": 50 + }, + "cpu": { + "interval": 1, + "format": "{usage}%" + }, + "memory": { + "interval": 1, + "format": "{used:0.1f}" + }, + + "clock": { + "interval" : 1, + "format": "{:%H:%M:%S | %A, %B %d, %Y }", + "format-alt": "{:%H:%M:%S}", + "tooltip-format": "{calendar}", + "calendar": { + "format": { + "months": "{}", + "today": "{}" + } + } + }, + "pulseaudio": { + "format": "{icon} {volume}%", + "format-icons": { + "default": ["\uf026", "\uf027", "\uf028"] + }, + "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle", + "on-click-right": "pavucontrol", + "format-muted": "\uf00d {volume}%" + }, + "tray": { + "icon-size": 20, + "spacing": 10 + } +} diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..f461e7d --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,37 @@ +#waybar { + color: #FFFFFF; + background-color: #000000; + opacity: 0.7; + border-radius: 10px; + padding:100px; +} + + +#idle_inhibitor.activated { + background-color: #285577; +} + +*{ + font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif; + font-size: 14px; +} + +#pulseaudio-slider slider { + min-height: 0px; + min-width: 0px; + opacity: 0; + background-image: none; + border: none; + box-shadow: none; +} +#pulseaudio-slider trough { + min-height: 10px; + min-width: 80px; + border-radius: 5px; + background-color: black; +} +#pulseaudio-slider highlight { + min-width: 10px; + border-radius: 5px; + background-color: green; +} diff --git a/.wezterm.lua b/.wezterm.lua new file mode 100644 index 0000000..de02d48 --- /dev/null +++ b/.wezterm.lua @@ -0,0 +1,18 @@ +local wezterm = require "wezterm" +local config = wezterm.config_builder() + +config.enable_scroll_bar = true +config.enable_wayland = true +config.enable_tab_bar = true +config.use_fancy_tab_bar = true +config.hide_tab_bar_if_only_one_tab = true + +config.default_cursor_style = "BlinkingUnderline" +config.cursor_blink_rate = 100 +config.cursor_thickness = 2.5 +config.cursor_blink_ease_in = "Constant" +config.cursor_blink_ease_out = "Constant" + +config.warn_about_missing_glyphs = false + +return config diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..db10b26 --- /dev/null +++ b/.zshrc @@ -0,0 +1,252 @@ +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH + +# Path to your Oh My Zsh installation. +export ZSH="$HOME/.oh-my-zsh" +export PYTHON_AUTO_VRUN=true +export PYTHON_VENV_NAME=".venv" + +# Set name of the theme to load --- if set to "random", it will +# load a random theme each time Oh My Zsh is loaded, in which case, +# to know which specific one was loaded, run: echo $RANDOM_THEME +# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes +#ZSH_THEME="darkblood" +#ZSH_THEME="fino-time" +#ZSH_THEME="mikeh" +#ZSH_THEME="rkj-repos" +#ZSH_THEME="amuse" +ZSH_THEME="clean" + + + + + +# Set list of themes to pick from when loading at random +# Setting this variable when ZSH_THEME=random will cause zsh to load +# a theme from this variable instead of looking in $ZSH/themes/ +# If set to an empty array, this variable will have no effect. +# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. +# Case-sensitive completion must be off. _ and - will be interchangeable. +# HYPHEN_INSENSITIVE="true" + +# Uncomment one of the following lines to change the auto-update behavior +# zstyle ':omz:update' mode disabled # disable automatic updates +# zstyle ':omz:update' mode auto # update automatically without asking +# zstyle ':omz:update' mode reminder # just remind me to update when it's time + +# Uncomment the following line to change how often to auto-update (in days). +# zstyle ':omz:update' frequency 13 + +# Uncomment the following line if pasting URLs and other text is messed up. +# DISABLE_MAGIC_FUNCTIONS="true" + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# You can also set it to another string to have that shown instead of the default red dots. +# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" +# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# You can set one of the optional three formats: +# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# or set a custom format using the strftime function format specifications, +# see 'man strftime' for details. +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +# ZSH_CUSTOM=/path/to/new-custom-folder + +# Which plugins would you like to load? +# Standard plugins can be found in $ZSH/plugins/ +# Custom plugins may be added to $ZSH_CUSTOM/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. + + +# DUDE DONT FORGET TO INSTALL via SYSTEM PACKAGE OR AS A PLUGIN +# zsh-syntax-highlighting +# zsh-autosuggestions + +plugins=( + git + rust + python +) + +source $ZSH/oh-my-zsh.sh +export PATH="$HOME/.cargo/bin:$PATH" + +# User configuration + +# export MANPATH="/usr/local/man:$MANPATH" + +# You may need to manually set your language environment +# export LANG=en_US.UTF-8 + +# Preferred editor for local and remote sessions +# if [[ -n $SSH_CONNECTION ]]; then +# export EDITOR='vim' +# else +# export EDITOR='mvim' +# fi + +# Compilation flags +# export ARCHFLAGS="-arch x86_64" + +# Set personal aliases, overriding those provided by Oh My Zsh libs, +# plugins, and themes. Aliases can be placed here, though Oh My Zsh +# users are encouraged to define aliases within a top-level file in +# the $ZSH_CUSTOM folder, with .zsh extension. Examples: +# - $ZSH_CUSTOM/aliases.zsh +# - $ZSH_CUSTOM/macos.zsh +# For a full list of active aliases, run `alias`. +# +# Example aliases +# alias zshconfig="mate ~/.zshrc" +# alias ohmyzsh="mate ~/.oh-my-zsh" +export PATH=$HOME/.local/bin:$PATH +# alias sudo=sudo-rs +alias ls=eza +alias cat=bat + +# ============================================================================= +# +# Utility functions for zoxide. +# + +# pwd based on the value of _ZO_RESOLVE_SYMLINKS. +function __zoxide_pwd() { + \builtin pwd -L +} + +# cd + custom logic based on the value of _ZO_ECHO. +function __zoxide_cd() { + # shellcheck disable=SC2164 + \builtin cd -- "$@" +} + +# ============================================================================= +# +# Hook configuration for zoxide. +# + +# Hook to add new entries to the database. +function __zoxide_hook() { + # shellcheck disable=SC2312 + \command zoxide add -- "$(__zoxide_pwd)" +} + +# Initialize hook. +# shellcheck disable=SC2154 +if [[ ${precmd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]] && [[ ${chpwd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]]; then + chpwd_functions+=(__zoxide_hook) +fi + +# ============================================================================= +# +# When using zoxide with --no-cmd, alias these internal functions as desired. +# + +# Jump to a directory using only keywords. +function __zoxide_z() { + # shellcheck disable=SC2199 + if [[ "$#" -eq 0 ]]; then + __zoxide_cd ~ + elif [[ "$#" -eq 1 ]] && { [[ -d "$1" ]] || [[ "$1" = '-' ]] || [[ "$1" =~ ^[-+][0-9]$ ]]; }; then + __zoxide_cd "$1" + else + \builtin local result + # shellcheck disable=SC2312 + result="$(\command zoxide query --exclude "$(__zoxide_pwd)" -- "$@")" && __zoxide_cd "${result}" + fi +} + +# Jump to a directory using interactive search. +function __zoxide_zi() { + \builtin local result + result="$(\command zoxide query --interactive -- "$@")" && __zoxide_cd "${result}" +} + +# ============================================================================= +# +# Commands for zoxide. Disable these using --no-cmd. +# + +function z() { + __zoxide_z "$@" +} + +function zi() { + __zoxide_zi "$@" +} + +# Completions. +if [[ -o zle ]]; then + __zoxide_result='' + + function __zoxide_z_complete() { + # Only show completions when the cursor is at the end of the line. + # shellcheck disable=SC2154 + [[ "${#words[@]}" -eq "${CURRENT}" ]] || return 0 + + if [[ "${#words[@]}" -eq 2 ]]; then + # Show completions for local directories. + _files -/ + elif [[ "${words[-1]}" == '' ]]; then + # Show completions for Space-Tab. + # shellcheck disable=SC2086 + __zoxide_result="$(\command zoxide query --exclude "$(__zoxide_pwd || \builtin true)" --interactive -- ${words[2,-1]})" || __zoxide_result='' + + # Bind '\e[0n' to helper function. + \builtin bindkey '\e[0n' '__zoxide_z_complete_helper' + # Send '\e[0n' to console input. + \builtin printf '\e[5n' + fi + + # Report that the completion was successful, so that we don't fall back + # to another completion function. + return 0 + } + + function __zoxide_z_complete_helper() { + if [[ -n "${__zoxide_result}" ]]; then + # shellcheck disable=SC2034,SC2296 + BUFFER="z ${(q-)__zoxide_result}" + \builtin zle reset-prompt + \builtin zle accept-line + else + \builtin zle reset-prompt + fi + } + \builtin zle -N __zoxide_z_complete_helper + + [[ "${+functions[compdef]}" -ne 0 ]] && \compdef __zoxide_z_complete z +fi + +# ============================================================================= +# +# To initialize zoxide, add this to your configuration (usually ~/.zshrc): +# +eval "$(zoxide init zsh)" +source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh