diff --git a/.gitignore b/.gitignore index a275df3..17735df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .DS_Store home/.config/lazygit/state.yml neomuttrc.local +result diff --git a/mac_home/.config/aerospace/aerospace.toml b/aerospace/aerospace.toml similarity index 98% rename from mac_home/.config/aerospace/aerospace.toml rename to aerospace/aerospace.toml index 080e1b0..e547b2e 100644 --- a/mac_home/.config/aerospace/aerospace.toml +++ b/aerospace/aerospace.toml @@ -69,7 +69,7 @@ cmd-alt-h = [] # Disable "hide others" # All possible modifiers: cmd, alt, ctrl, shift # All possible commands: https://nikitabobko.github.io/AeroSpace/commands -cmd-enter = 'exec-and-forget open -n /Applications/Alacritty.app' +cmd-enter = 'exec-and-forget open -n /Applications/Ghostty.app' # See: https://nikitabobko.github.io/AeroSpace/commands#layout # alt-slash = 'layout tiles horizontal vertical' diff --git a/home/.config/bat/config b/bat/config similarity index 100% rename from home/.config/bat/config rename to bat/config diff --git a/home/.config/bat/themes/Catppuccin Macchiato.tmTheme b/bat/themes/Catppuccin Macchiato.tmTheme similarity index 100% rename from home/.config/bat/themes/Catppuccin Macchiato.tmTheme rename to bat/themes/Catppuccin Macchiato.tmTheme diff --git a/home/.config/bat/themes/ayu_mirage.tmTheme b/bat/themes/ayu_mirage.tmTheme similarity index 100% rename from home/.config/bat/themes/ayu_mirage.tmTheme rename to bat/themes/ayu_mirage.tmTheme diff --git a/home/.config/confutils/get-battery.sh b/confutils/get-battery.sh similarity index 100% rename from home/.config/confutils/get-battery.sh rename to confutils/get-battery.sh diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..c525362 --- /dev/null +++ b/flake.lock @@ -0,0 +1,277 @@ +{ + "nodes": { + "brew-src": { + "flake": false, + "locked": { + "lastModified": 1731323744, + "narHash": "sha256-SxUQm4cTHcaoPQHoXe26ZV8cZiMWBGow8MjE4L+MckM=", + "owner": "Homebrew", + "repo": "brew", + "rev": "254bf3fe9d8fa2e1b2fb55dbcf535b2d870180c4", + "type": "github" + }, + "original": { + "owner": "Homebrew", + "ref": "4.4.5", + "repo": "brew", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1740347597, + "narHash": "sha256-st5q9egkPGz8TUcVVlIQX7y6G3AzHob+6M963bwVq74=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "12e26a74e5eb1a31e13daaa08858689e25ebd449", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "neovim": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1740326390, + "narHash": "sha256-fAT9H/sPTOyGR/L7HAKgEw270i6t0fYCay0WP39R2ho=", + "owner": "LarssonMartin1998", + "repo": "neovim-flake", + "rev": "03b2f8498cf44ca7ab6436f5a081772f3e378be4", + "type": "github" + }, + "original": { + "owner": "LarssonMartin1998", + "repo": "neovim-flake", + "type": "github" + } + }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1739933872, + "narHash": "sha256-UhuvTR4OrWR+WBaRCZm4YMkvjJhZ1KZo/jRjE41m+Ek=", + "owner": "LnL7", + "repo": "nix-darwin", + "rev": "6ab392f626a19f1122d1955c401286e1b7cf6b53", + "type": "github" + }, + "original": { + "owner": "LnL7", + "ref": "master", + "repo": "nix-darwin", + "type": "github" + } + }, + "nix-darwin_2": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1716329735, + "narHash": "sha256-ap51w+VqG21vuzyQ04WrhI2YbWHd3UGz0e7dc/QQmoA=", + "owner": "LnL7", + "repo": "nix-darwin", + "rev": "eac4f25028c1975a939c8f8fba95c12f8a25e01c", + "type": "github" + }, + "original": { + "owner": "LnL7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nix-homebrew": { + "inputs": { + "brew-src": "brew-src", + "nix-darwin": "nix-darwin_2", + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1736041957, + "narHash": "sha256-Kk/cVtkxwfHNoB6nINUarMLTtyAEvH+ohzxKBptMzzg=", + "owner": "zhaofengli-wip", + "repo": "nix-homebrew", + "rev": "a6d99cc7436fc18c097b3536d9c45c0548c694c8", + "type": "github" + }, + "original": { + "owner": "zhaofengli-wip", + "repo": "nix-homebrew", + "type": "github" + } + }, + "nixos-wsl": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1740046902, + "narHash": "sha256-Xbhz8eEqBmNpvqaGFbF5JopmfNJccWUr8eExtU/iGX4=", + "owner": "nix-community", + "repo": "NixOS-WSL", + "rev": "c4f6ae89468939d9fcf1a317c062cf5dd02004ea", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "main", + "repo": "NixOS-WSL", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1740019556, + "narHash": "sha256-vn285HxnnlHLWnv59Og7muqECNMS33mWLM14soFIv2g=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "dad564433178067be1fbdfcce23b546254b6d641", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1687274257, + "narHash": "sha256-TutzPriQcZ8FghDhEolnHcYU2oHIG5XWF+/SUBNnAOE=", + "path": "/nix/store/22qgs3skscd9bmrxv9xv4q5d4wwm5ppx-source", + "rev": "2c9ecd1f0400076a4d6b2193ad468ff0a7e7fdc5", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1716330097, + "narHash": "sha256-8BO3B7e3BiyIDsaKA0tY8O88rClYRTjvAp66y+VBUeU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5710852ba686cc1fd0d3b8e22b3117d43ba374c2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1739624908, + "narHash": "sha256-f84lBmLl4tkDp1ZU5LBTSFzlxXP4926DVW3KnXrke10=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a60651b217d2e529729cbc7d989c19f3941b9250", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1740367490, + "narHash": "sha256-WGaHVAjcrv+Cun7zPlI41SerRtfknGQap281+AakSAw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0196c0175e9191c474c26ab5548db27ef5d34b05", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "neovim": "neovim", + "nix-darwin": "nix-darwin", + "nix-homebrew": "nix-homebrew", + "nixos-wsl": "nixos-wsl", + "nixpkgs": "nixpkgs_5" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..da950d7 --- /dev/null +++ b/flake.nix @@ -0,0 +1,159 @@ +{ + description = "LarssonMartin1998's dotfiles configured with Home Manager"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nix-darwin = { + url = "github:LnL7/nix-darwin/master"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + nixos-wsl.url = "github:nix-community/NixOS-WSL/main"; + neovim.url = "github:LarssonMartin1998/neovim-flake"; + nix-homebrew.url = "github:zhaofengli-wip/nix-homebrew"; + }; + + outputs = + { + self, + nixpkgs, + home-manager, + nix-darwin, + nixos-wsl, + neovim, + nix-homebrew, + ... + }: + let + lib = nixpkgs.lib; + + makeSystemConfig = + { + name, + system, + builder, + extraModules ? [ ], + specialArgs ? { }, + }: + builder { + inherit system; + pkgs = import nixpkgs { + inherit system; + config = { + allowUnfree = true; + }; + }; + modules = [ + { + nix.settings.experimental-features = "nix-command flakes"; + } + ./nix/local_system.nix + ] ++ extraModules; + + specialArgs = specialArgs; + }; + + makeHomeConfig = + { + name, + system, + extraModules ? [ ], + }: + home-manager.lib.homeManagerConfiguration { + pkgs = import nixpkgs { + inherit system; + config = { + allowUnfree = true; + }; + }; + modules = [ + ./nix/pkgs/home.nix + ./nix/local_home.nix + ] ++ extraModules; + + # Pass neovim-flake to all modules + extraSpecialArgs = { + neovim-flake = neovim; + }; + }; + in + { + nixosConfigurations = { + "wsl" = makeSystemConfig { + name = "wsl"; + system = "x86_64-linux"; + builder = lib.nixosSystem; + extraModules = [ ./nix/system/wsl.nix ]; + specialArgs = { + nixos-wsl = nixos-wsl; + }; + }; + + "linux-x86" = makeSystemConfig { + name = "linux-x86"; + system = "x86_64-linux"; + builder = lib.nixosSystem; + extraModules = [ ./nix/system/linux.nix ]; + }; + + "linux-aarch" = makeSystemConfig { + name = "linux-aarch"; + system = "aarch64-linux"; + builder = lib.nixosSystem; + extraModules = [ ./nix/system/linux.nix ]; + }; + }; + + darwinConfigurations."darwin" = makeSystemConfig { + name = "darwin"; + system = "aarch64-darwin"; + builder = nix-darwin.lib.darwinSystem; + extraModules = [ + ./nix/system/darwin.nix + nix-homebrew.darwinModules.nix-homebrew + { + nix-homebrew = { + enable = true; + enableRosetta = true; + }; + } + ]; + specialArgs = { + self = self; + nix-homebrew = nix-homebrew; + }; + }; + + homeConfigurations = { + "wsl" = makeHomeConfig { + name = "wsl"; + system = "x86_64-linux"; + extraModules = [ ./nix/pkgs/wsl.nix ]; + }; + + "linux-x86" = makeHomeConfig { + name = "linux-x86"; + system = "x86_64-linux"; + extraModules = [ ./nix/pkgs/linux.nix ]; + }; + + "linux-aarch" = makeHomeConfig { + name = "linux-aarch"; + system = "aarch64-linux"; + extraModules = [ ./nix/pkgs/linux.nix ]; + }; + + "darwin" = makeHomeConfig { + name = "darwin"; + system = "aarch64-darwin"; + extraModules = [ ./nix/pkgs/darwin.nix ]; + }; + }; + }; +} diff --git a/home/.config/ghostty/config b/ghostty/config similarity index 69% rename from home/.config/ghostty/config rename to ghostty/config index 9751c72..9dd5f43 100644 --- a/home/.config/ghostty/config +++ b/ghostty/config @@ -11,6 +11,8 @@ font-style-bold = Bold font-style-italic = Italic font-style-bold-italic = Bold Italic font-feature = ss01 +font-feature = ss19 +font-feature = ss20 font-feature = -calt scrollback-limit = 100000 @@ -20,16 +22,19 @@ clipboard-paste-protection = false window-decoration = false shell-integration = zsh -background = #1F2430 -# Transparency -background-opacity = 0.95 -background-blur-radius = 20 +theme = Ayu Mirage +background-opacity = 0.90 +background-blur-radius = 7 -bold-is-bright = true -cursor-invert-fg-bg = true -link-url = true -mouse-hide-while-typing = true -window-vsync = true +bold-is-bright = true +cursor-invert-fg-bg = false +link-url = true +mouse-hide-while-typing = true +window-vsync = true +cursor-click-to-move = false +cursor-text = #000000 + +macos-option-as-alt=true keybind = ctrl+comma=unbind keybind = alt+one=unbind @@ -41,3 +46,5 @@ keybind = alt+six=unbind keybind = alt+seven=unbind keybind = alt+eight=unbind keybind = alt+nine=unbind +keybind = alt+left=unbind +keybind = alt+right=unbind diff --git a/home/.config/nvim/lazy-lock.json b/home/.config/nvim/lazy-lock.json deleted file mode 100644 index 5fe2913..0000000 --- a/home/.config/nvim/lazy-lock.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "arrow.nvim": { "branch": "master", "commit": "5438c977e729a29d96bd54c8da3103154e80dbd1" }, - "auto-session": { "branch": "main", "commit": "021b64ed7d4ac68a37be3ad28d8e1cba5bec582c" }, - "blink.cmp": { "branch": "main", "commit": "1cc3b1a908fbcfd15451c4772759549724f38524" }, - "codecompanion.nvim": { "branch": "main", "commit": "e3c528aab52f32513fdb771e3e27d93efe57e12a" }, - "codesnap.nvim": { "branch": "main", "commit": "6400480aa6cc366cbd931146c429aaa64680dab9" }, - "copilot.vim": { "branch": "release", "commit": "87038123804796ca7af20d1b71c3428d858a9124" }, - "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, - "dressing.nvim": { "branch": "master", "commit": "3a45525bb182730fe462325c99395529308f431e" }, - "fzf-lua": { "branch": "main", "commit": "6f7249741168c0751356e3b6c5c1e3bade833b6b" }, - "gitsigns.nvim": { "branch": "main", "commit": "76d88f3b584e1f83b2aa51663a32cc6ee8d97eff" }, - "incline.nvim": { "branch": "main", "commit": "16fc9c073e3ea4175b66ad94375df6d73fc114c0" }, - "indent-blankline.nvim": { "branch": "master", "commit": "7a698a1d7ed755af9f5a88733b23ca246ce2df28" }, - "lazy.nvim": { "branch": "main", "commit": "d8f26efd456190241afd1b0f5235fe6fdba13d4a" }, - "leap.nvim": { "branch": "main", "commit": "c6bfb191f1161fbabace1f36f578a20ac6c7642c" }, - "lspsaga.nvim": { "branch": "main", "commit": "7dae6e92c82964a8889d3cd999dfd4f271e3a873" }, - "lua-utils.nvim": { "branch": "main", "commit": "e565749421f4bbb5d2e85e37c3cef9d56553d8bd" }, - "lualine.nvim": { "branch": "master", "commit": "2a5bae925481f999263d6f5ed8361baef8df4f83" }, - "mason-tool-installer.nvim": { "branch": "main", "commit": "c5e07b8ff54187716334d585db34282e46fa2932" }, - "mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" }, - "mini.diff": { "branch": "main", "commit": "00f072250061ef498f91ed226918c9ec31a416a4" }, - "neogit": { "branch": "master", "commit": "060a625660b2816649d83dbd6c7ab1b4345ea8bc" }, - "neorg": { "branch": "main", "commit": "29993a7bb8279ffa0ba473a3f393daa28c645825" }, - "neovim-ayu": { "branch": "master", "commit": "283badaa983234c90e857c12c1f1c18e1544360a" }, - "noice.nvim": { "branch": "main", "commit": "eaed6cc9c06aa2013b5255349e4f26a6b17ab70f" }, - "nui.nvim": { "branch": "main", "commit": "53e907ffe5eedebdca1cd503b00aa8692068ca46" }, - "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, - "nvim-dap": { "branch": "master", "commit": "99807078c5089ed30e0547aa4b52c5867933f426" }, - "nvim-dap-go": { "branch": "main", "commit": "1bacf2fa7d4dc6a8a4f6cc390f1544e5b34c35a4" }, - "nvim-dap-python": { "branch": "master", "commit": "34282820bb713b9a5fdb120ae8dd85c2b3f49b51" }, - "nvim-dap-repl-highlights": { "branch": "master", "commit": "a7512fc0a0de0c0be8d58983939856dda6f72451" }, - "nvim-dap-ui": { "branch": "master", "commit": "727c032a8f63899baccb42a1c26f27687e62fc5e" }, - "nvim-dap-virtual-text": { "branch": "master", "commit": "df66808cd78b5a97576bbaeee95ed5ca385a9750" }, - "nvim-nio": { "branch": "master", "commit": "a428f309119086dc78dd4b19306d2d67be884eee" }, - "nvim-notify": { "branch": "master", "commit": "a3020c2cf4dfc4c4f390c4a21e84e35e46cf5d17" }, - "nvim-surround": { "branch": "main", "commit": "9f0cb495f25bff32c936062d85046fbda0c43517" }, - "nvim-treesitter": { "branch": "master", "commit": "984214ef8e4ca18d77639663319aabdfba89632f" }, - "nvim-treesitter-context": { "branch": "master", "commit": "d0dd7ce5a9d0be1f28086e818e52fdc5c78975df" }, - "nvim-treesitter-textobjects": { "branch": "master", "commit": "ad8f0a472148c3e0ae9851e26a722ee4e29b1595" }, - "nvim-web-devicons": { "branch": "master", "commit": "aafa5c187a15701a7299a392b907ec15d9a7075f" }, - "pathlib.nvim": { "branch": "main", "commit": "57e5598af6fe253761c1b48e0b59b7cd6699e2c1" }, - "persistent-breakpoints.nvim": { "branch": "main", "commit": "4b199b1dcfd136cac8b0fa9c8dbbdeb81463f7a9" }, - "plenary.nvim": { "branch": "master", "commit": "3707cdb1e43f5cea73afb6037e6494e7ce847a66" }, - "rustaceanvim": { "branch": "master", "commit": "0a1876b970ab946be3f4d341e9d743a5d62d646a" }, - "tiny-inline-diagnostic.nvim": { "branch": "main", "commit": "5922bb3dd691a2a37bd51e20d4a3dc7895221e51" }, - "vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" } -} diff --git a/home/.config/nvim/lua/keymaps.lua b/home/.config/nvim/lua/keymaps.lua deleted file mode 100644 index f3d871e..0000000 --- a/home/.config/nvim/lua/keymaps.lua +++ /dev/null @@ -1,151 +0,0 @@ -local g = vim.g - -g.mapleader = " " -g.maplocalleader = " " - -local move_up = { - cmd = "v:count || mode(1)[0:1] == \"no\" ? \"k\" : \"gk\"", - opts = { - expr = true - } -} - -local move_down = { - cmd = "v:count || mode(1)[0:1] == \"no\" ? \"j\" : \"gj\"", - opts = { - expr = true - } -} - - -local utils = require("utils") - -utils.add_keymaps({ - n = { - -- Using lspsaga for hover doc - ["K"] = { - cmd = "", - }, - -- Using lspsaga finder with gr which does references - ["grr"] = { - cmd = "", - }, - ["gra"] = { - cmd = "", - }, - ["grn"] = { - cmd = "", - }, - ["gri"] = { - cmd = "", - }, - -- Navigation - [""] = { - cmd = "h", - }, - [""] = { - cmd = "j", - }, - [""] = { - cmd = "k", - }, - [""] = { - cmd = "l", - }, - [""] = { - cmd = "h", - }, - [""] = { - cmd = "j", - }, - [""] = { - cmd = "k", - }, - [""] = { - cmd = "l", - }, - - -- Window - [""] = { - cmd = "q", - }, - - -- Disable current highlights - [""] = { - cmd = " noh ", - }, - - -- Copies the entire file - [""] = { - cmd = ":%y+", - opts = { - silent = true - } - }, - - -- Allow moving the cursor through wrapped lines with and - -- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/ - -- empty mode is same as using :map - -- also don't use g[j|k] when in operator pending mode, so it doesn't alter d, y or c behaviour - [""] = move_up, - [""] = move_down, - ["j"] = move_down, - ["k"] = move_up, - -- Maps to remove - [""] = { - cmd = "", - }, - - -- Marks are less frequently used than leaping, also, less relevant with arrow and fzf navigation. - -- Prioritize regular m for leaping, and m for setting marks. - ["m"] = { - cmd = "m", - }, - ["[d"] = { - cmd = function() - vim.diagnostic.jump({ count = -1, float = false }) - end - }, - ["]d"] = { - cmd = function() - vim.diagnostic.jump({ count = 1, float = false }) - end - }, - }, - i = {}, - v = { - [""] = move_up, - [""] = move_down, - ["j"] = move_down, - ["k"] = move_up, - [""] = { - cmd = ">gv", - }, - [""] = { - cmd = "m for setting marks. - ["m"] = { - cmd = "m", - }, - }, - x = { - [""] = move_up, - [""] = move_down, - ["j"] = move_down, - ["k"] = move_up, - ["p"] = { - cmd = "p:let @+=@0:let @\"=@0", - opts = { - silent = true - }, - }, - }, - t = { - [""] = { - cmd = "", - }, - }, -}) diff --git a/home/.config/nvim/lua/plugs/auto_session.lua b/home/.config/nvim/lua/plugs/auto_session.lua deleted file mode 100644 index 488905d..0000000 --- a/home/.config/nvim/lua/plugs/auto_session.lua +++ /dev/null @@ -1,20 +0,0 @@ -return { - "rmagatti/auto-session", - opts = { - log_level = "error", - auto_session_suppress_dirs = { - "/", - "~/", - "~/Projects", - "~/Downloads", - "~/Development", - "~/Dev", - "~/Dev/Git", - "~/.config", - "~/dev/git/.dotfiles", - }, - }, - init = function() - vim.o.sessionoptions = "localoptions" - end -} diff --git a/home/.config/nvim/lua/plugs/codecompanion.lua b/home/.config/nvim/lua/plugs/codecompanion.lua deleted file mode 100644 index 6cad3f4..0000000 --- a/home/.config/nvim/lua/plugs/codecompanion.lua +++ /dev/null @@ -1,56 +0,0 @@ -return { - "olimorris/codecompanion.nvim", - dependencies = { - "nvim-lua/plenary.nvim", - "nvim-treesitter/nvim-treesitter", - -- "hrsh7th/nvim-cmp", - { 'echasnovski/mini.diff', version = false }, - { "stevearc/dressing.nvim", opts = {} }, - }, - config = function() - require("codecompanion").setup({ - strategies = { - chat = { - adapter = "copilot", - }, - inline = { - adapter = "copilot", - }, - agent = { - adapter = "copilot", - }, - }, - adapters = { - copilot = function() return require("codecompanion.adapters").extend("copilot", {}) end, - }, - display = { - diff = { - provider = "mini_diff", - }, - }, - opts = { - log_level = "DEBUG", - }, - }) - - local keymaps = { - n = { - ["ci"] = { cmd = "CodeCompanion" }, - ["cc"] = { cmd = "CodeCompanionChat toggle" }, - ["cm"] = { cmd = "CodeCompanion /commit" }, - }, - v = { - ["ci"] = { cmd = "CodeCompanion" }, - ["ga"] = { cmd = "CodeCompanionAdd" }, - ["ce"] = { cmd = "CodeCompanion /explain" }, - ["cf"] = { cmd = "CodeCompanion /fix" }, - ["ct"] = { cmd = "CodeCompanion /tests" }, - } - } - local utils = require("utils") - utils.add_opts_to_all_mappings(keymaps, { silent = true }) - utils.add_keymaps(keymaps) - - vim.cmd([[cab cc CodeCompanion]]) - end -} diff --git a/home/.config/nvim/lua/plugs/codesnap.lua b/home/.config/nvim/lua/plugs/codesnap.lua deleted file mode 100644 index 0966981..0000000 --- a/home/.config/nvim/lua/plugs/codesnap.lua +++ /dev/null @@ -1,26 +0,0 @@ -return { - "mistricky/codesnap.nvim", - build = "make", - event = "VeryLazy", - lazy = true, - config = function() - require("codesnap").setup({ - mac_window_bar = true, - title = "codesnap.nvim", - code_font_family = "JetBrainsMono Nerd Font", - breadcrumbs_separator = "/", - has_breadcrumbs = true, - bg_theme = "grape", - watermark = "", - }) - - require("utils").add_keymaps({ - v = { - ["cs"] = { - cmd = ":CodeSnap", - opts = { silent = true }, - }, - } - }) - end, -} diff --git a/home/.config/nvim/lua/plugs/copilot.lua b/home/.config/nvim/lua/plugs/copilot.lua deleted file mode 100644 index d3feadd..0000000 --- a/home/.config/nvim/lua/plugs/copilot.lua +++ /dev/null @@ -1,18 +0,0 @@ -return { - "github/copilot.vim", - config = function() - vim.g.copilot_no_tab_map = true - require("utils").add_keymaps({ - i = { - [""] = { - cmd = 'copilot#Accept("\\")', - opts = { - expr = true, - replace_keycodes = false, - silent = true, - } - } - } - }) - end -} diff --git a/home/.config/nvim/lua/plugs/fzf.lua b/home/.config/nvim/lua/plugs/fzf.lua deleted file mode 100644 index 3aa8088..0000000 --- a/home/.config/nvim/lua/plugs/fzf.lua +++ /dev/null @@ -1,71 +0,0 @@ -return { - "ibhagwan/fzf-lua", - dependencies = { "nvim-tree/nvim-web-devicons" }, - opts = { - "telescope", - winopts = { - preview = { - default = "bat" - } - }, - lsp = { - workspace_symbols = { - symbol_kinds = { "Variable", "Function", "Method", "Class", "Struct", "Interface" }, - }, - }, - previewers = { - builtin = { - -- turn off syntax highlighting for files with more than 100KB - -- this avoid hanging when previewing large files (due to treesitter parsing on minified files) - syntax_limit_b = 1024 * 100, -- 100KB - } - } - }, - config = function() - local fzf = require("fzf-lua") - local pickers = { - { - mapping = "o", - action = function() - fzf.files({ - git_icons = false, - }) - end - }, - { - mapping = "a", - action = function() - fzf.live_grep_native({ - git_icons = false, - rg_opts = "--hidden --column --line-number --no-heading --color=always --smart-case", - fzf_opts = { - ['--exact'] = false, -- Disable exact matching - }, - }) - end - }, - { - mapping = "g", - action = function() - fzf.git_bcommits({}) - end - }, - { - mapping = "s", - action = function() - fzf.lsp_live_workspace_symbols({}) - end - } - } - - local keymaps = {} - keymaps.n = {} - for _, picker in ipairs(pickers) do - keymaps.n["t" .. picker.mapping] = { - cmd = picker.action - } - end - - require("utils").add_keymaps(keymaps) - end -} diff --git a/home/.config/nvim/lua/plugs/incline.lua b/home/.config/nvim/lua/plugs/incline.lua deleted file mode 100644 index 7bd5f7f..0000000 --- a/home/.config/nvim/lua/plugs/incline.lua +++ /dev/null @@ -1,101 +0,0 @@ -return { - "b0o/incline.nvim", - dependencies = { - "lewis6991/gitsigns.nvim" - }, - event = "VeryLazy", - lazy = true, - config = function() - local gitsigns = require("gitsigns") - gitsigns.setup({}) - local devicons = require("nvim-web-devicons") - require("incline").setup({ - window = { - padding = 0, - }, - hide = { - cursorline = true, - }, - render = function(props) - local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(props.buf), ":t") - if filename == "" then - filename = "[No Name]" - end - local ft_icon, ft_color = devicons.get_icon_color(filename) - - local function get_git_diff() - local icons = { removed = "", changed = "", added = "" } - local signs = vim.b[props.buf].gitsigns_status_dict - local labels = {} - if signs == nil then - return labels - end - for name, icon in pairs(icons) do - if tonumber(signs[name]) and signs[name] > 0 then - table.insert(labels, { icon .. " " .. signs[name] .. " ", group = "Diff" .. name }) - end - end - if #labels > 0 then - table.insert(labels, { "┊ " }) - end - return labels - end - - local function get_diagnostic_label() - local icons = { error = "", warn = "", info = "", hint = "" } - local label = {} - - for severity, icon in pairs(icons) do - local n = #vim.diagnostic.get(props.buf, - { severity = vim.diagnostic.severity[string.upper(severity)] }) - if n > 0 then - table.insert(label, { icon .. " " .. n .. " ", group = "DiagnosticSign" .. severity }) - end - end - if #label > 0 then - table.insert(label, { "┊ " }) - end - return label - end - - local function get_arrow_label() - local statusline = require("arrow.statusline") - if statusline.is_on_arrow_file(props.buf) == nil then - return "" - end - - return " " .. statusline.text_for_statusline_with_icons(props.buf) - end - - return { - guibg = "#1e2030", - guifg = "#cad3f5", - { " " }, - { get_diagnostic_label() }, - { get_git_diff() }, - { (ft_icon or "") .. " ", guifg = ft_color, guibg = "none" }, - { filename .. " ┊", gui = vim.bo[props.buf].modified and "bold,italic" or "bold" }, - { get_arrow_label() .. "  " .. vim.api.nvim_win_get_number(props.win), group = "DevIconWindows" }, - { " " } - } - end, - - require("utils").add_keymaps({ - n = { - ["gh"] = { - cmd = gitsigns.preview_hunk - }, - ["gb"] = { - cmd = gitsigns.toggle_current_line_blame - }, - ["[g"] = { - cmd = function() gitsigns.nav_hunk("prev") end - }, - ["]g"] = { - cmd = function() gitsigns.nav_hunk("next") end - } - } - }) - }) - end, -} diff --git a/home/.config/nvim/lua/plugs/indent_blankline.lua b/home/.config/nvim/lua/plugs/indent_blankline.lua deleted file mode 100644 index b068bc9..0000000 --- a/home/.config/nvim/lua/plugs/indent_blankline.lua +++ /dev/null @@ -1,11 +0,0 @@ -return { - "lukas-reineke/indent-blankline.nvim", - main = "ibl", - event = "BufRead", - opts = { - debounce = 100, - scope = { - enabled = false - }, - } -} diff --git a/home/.config/nvim/lua/plugs/lspsaga.lua b/home/.config/nvim/lua/plugs/lspsaga.lua deleted file mode 100644 index f5f9578..0000000 --- a/home/.config/nvim/lua/plugs/lspsaga.lua +++ /dev/null @@ -1,65 +0,0 @@ -return { - -- "nvimdev/lspsaga.nvim", - "LarssonMartin1998/lspsaga.nvim", -- Use my own fork until PR's are merged - event = "LspAttach", - lazy = true, - -- dir = "~/dev/git/lspsaga.nvim", - dependencies = { - "nvim-tree/nvim-web-devicons", - }, - after = "nvim-lspconfig", - config = function() - require("lspsaga").setup({ - request_timeout = 750, - symbol_in_winbar = { - enable = false, - }, - implement = { - enable = false, - }, - outline = { - enable = false, - win_width = 52, - }, - ui = { - border = "rounded", - title = false, - }, - code_action = { - extend_gitsigns = true - }, - hover = { - jump_on_first_press = true - }, - }) - - local keymaps = { - n = { - ["K"] = { - cmd = ":Lspsaga hover_doc" - }, - ["rn"] = { - cmd = ":Lspsaga rename" - }, - ["gr"] = { - cmd = ":Lspsaga finder" - }, - ["lt"] = { - cmd = ":Lspsaga peek_type_definition" - }, - ["ld"] = { - cmd = ":Lspsaga peek_definition" - }, - ["ca"] = { - cmd = ":Lspsaga code_action" - }, - ["lc"] = { - cmd = ":Lspsaga incoming_calls" - }, - } - } - local utils = require("utils") - utils.add_opts_to_all_mappings(keymaps, { silent = true }) - utils.add_keymaps(keymaps) - end, -} diff --git a/home/.config/nvim/lua/plugs/lualine.lua b/home/.config/nvim/lua/plugs/lualine.lua deleted file mode 100644 index 62df061..0000000 --- a/home/.config/nvim/lua/plugs/lualine.lua +++ /dev/null @@ -1,51 +0,0 @@ -local wm = require("window_management") - -local function resize_mode() - if wm.is_in_resizing_mode() then - return "▲ Resizing ▼" - else - return "" - end -end - -return { - "nvim-lualine/lualine.nvim", - dependencies = { - "nvim-tree/nvim-web-devicons" - }, - event = "VeryLazy", - lazy = true, - config = function() - require("lualine").setup { - options = { - theme = "ayu", - section_separators = { - left = "", - right = "", - }, - component_separators = { - left = "", - right = "" - }, - icons_enabled = true, - }, - sections = { - lualine_a = { "mode" }, - lualine_b = { "branch", resize_mode }, - lualine_c = { "buffers" }, - lualine_x = { "encoding", "fileformat", "filetype" }, - lualine_y = { "progress" }, - lualine_z = { "location" } - }, - inactive_sections = { - lualine_a = {}, - lualine_b = {}, - lualine_c = {}, - lualine_x = {}, - lualine_y = {}, - lualine_z = {} - }, - tabline = {}, - } - end -} diff --git a/home/.config/nvim/lua/plugs/mason.lua b/home/.config/nvim/lua/plugs/mason.lua deleted file mode 100644 index 71707b7..0000000 --- a/home/.config/nvim/lua/plugs/mason.lua +++ /dev/null @@ -1,36 +0,0 @@ -return { - "williamboman/mason.nvim", - dependencies = { "WhoIsSethDaniel/mason-tool-installer.nvim" }, - config = function() - require("mason").setup({}) - require("mason-tool-installer").setup({ - ensure_installed = { - -- LLVM debugger - "codelldb", - - -- C and C++ - "clangd", - "clang-format", - - -- Rust - "rust-analyzer", - - -- Go - "gopls", - "golangci-lint", - "delve", - - -- Lua - "lua-language-server", - - -- CMake - "cmake-language-server", - "cmakelang", - - -- Python - "debugpy", - "pyright", - }, - }) - end -} diff --git a/home/.config/nvim/lua/plugs/neogit.lua b/home/.config/nvim/lua/plugs/neogit.lua deleted file mode 100644 index 04595f1..0000000 --- a/home/.config/nvim/lua/plugs/neogit.lua +++ /dev/null @@ -1,11 +0,0 @@ -return { - "NeogitOrg/neogit", - dependencies = { - "sindrets/diffview.nvim", - }, - event = "VeryLazy", - lazy = true, - config = function() - require("neogit").setup() - end -} diff --git a/home/.config/nvim/lua/plugs/neorg.lua b/home/.config/nvim/lua/plugs/neorg.lua deleted file mode 100644 index f1e27b2..0000000 --- a/home/.config/nvim/lua/plugs/neorg.lua +++ /dev/null @@ -1,18 +0,0 @@ -return { - "nvim-neorg/neorg", - opts = { - load = { - ["core.defaults"] = {}, - ["core.dirman"] = { - config = { - workspaces = { - my_workspace = "~/.neorg", - }, - }, - }, - ["core.concealer"] = {}, - }, - }, - event = "VeryLazy", - lazy = true, -} diff --git a/home/.config/nvim/lua/plugs/nvim-dap.lua b/home/.config/nvim/lua/plugs/nvim-dap.lua deleted file mode 100644 index ea09c95..0000000 --- a/home/.config/nvim/lua/plugs/nvim-dap.lua +++ /dev/null @@ -1,152 +0,0 @@ -local utils = require("utils") -local inlay_hints_handler = require("inlay_hints_handler") - -local are_stepping_keymaps_active = false -return { - "mfussenegger/nvim-dap", - dependencies = { - "rcarriga/nvim-dap-ui", - - -- Special adapters - "leoluz/nvim-dap-go", - "mfussenegger/nvim-dap-python", - - { "nvim-neotest/nvim-nio", lazy = true }, - "LiadOz/nvim-dap-repl-highlights", - "theHamsta/nvim-dap-virtual-text", - "Weissle/persistent-breakpoints.nvim", - }, - config = function() - local dap = require("dap") - local dapui = require("dapui") - -- Special adapters - require("dap-go").setup() - require("dap-python").setup("python3") - -- Special adapters - - require("dap.ext.vscode").load_launchjs() - require("persistent-breakpoints").setup { - load_breakpoints_event = { "BufReadPost" } - } - - require("nvim-dap-repl-highlights").setup() - require("nvim-dap-virtual-text").setup() - local virtual_text = require("nvim-dap-virtual-text/virtual_text") - local breakpoint_api = require("persistent-breakpoints.api") - - dapui.setup({ - controls = { - enabled = false, - }, - layouts = { - { - elements = { - { - id = "watches", - size = 0.5 - }, - { - id = "stacks", - size = 0.5 - } - }, - position = "bottom", - size = 15 - } - }, - }) - - local stepping_keymaps = { - n = { - ["m"] = { - cmd = function() - dap.step_out() - end - }, - ["n"] = { - cmd = function() - dap.step_over() - end - }, - ["i"] = { - cmd = function() - dap.step_into() - end - }, - } - } - - local function enter_debug_mode() - dapui.open() - if not are_stepping_keymaps_active then - utils.add_temporary_keymaps(stepping_keymaps) - are_stepping_keymaps_active = true - end - - inlay_hints_handler.disable() - end - - local function exit_debug_mode() - dapui.close() - if are_stepping_keymaps_active then - utils.remove_keymaps(stepping_keymaps) - are_stepping_keymaps_active = false - end - - inlay_hints_handler.restore() - virtual_text.clear_virtual_text() - end - - local dap_signs = { - { "DapBreakpoint", { text = "🛑", texthl = "", linehl = "", numhl = "" } }, - { "DapBreakpointRejected", { text = "🔵", texthl = "", linehl = "", numhl = "" } }, - { "DapBreakpointCondition", { text = "🟥", texthl = "", linehl = "", numhl = "" } }, - } - - for _, sign in ipairs(dap_signs) do - vim.fn.sign_define(unpack(sign)) - end - - dap.listeners.after.event_initialized["dapui_config"] = function() - enter_debug_mode() - end - dap.listeners.before.event_terminated["dapui_config"] = function() - exit_debug_mode() - end - dap.listeners.before.event_exited["dapui_config"] = function() - exit_debug_mode() - end - - utils.add_keymaps({ - n = { - ["dr"] = { - cmd = function() - dap.continue() - end - }, - ["bt"] = { - cmd = function() - breakpoint_api.toggle_breakpoint() - end - }, - ["bc"] = { - cmd = function() - breakpoint_api.set_conditional_breakpoint() - end - }, - ["br"] = { -- breakpoint remove - cmd = function() - breakpoint_api.clear_all_breakpoints() - end - }, - ["ds"] = { - cmd = function() - dap.disconnect({ terminateDebuggee = true }) - dap.close() - exit_debug_mode() - end - }, - } - }) - end, -} diff --git a/home/.config/nvim/lua/plugs/tiny-inline-diagnostics.lua b/home/.config/nvim/lua/plugs/tiny-inline-diagnostics.lua deleted file mode 100644 index dfe67dd..0000000 --- a/home/.config/nvim/lua/plugs/tiny-inline-diagnostics.lua +++ /dev/null @@ -1,19 +0,0 @@ -return { - "rachartier/tiny-inline-diagnostic.nvim", - event = "VeryLazy", - priority = 1000, - config = function() - require("tiny-inline-diagnostic").setup() - - vim.diagnostic.config({ - virtual_text = false, - }) - - vim.cmd [[ - highlight DiagnosticUnderlineError gui=undercurl guisp=#ff0000 " Red for error - highlight DiagnosticUnderlineWarn gui=undercurl guisp=#ffaa00 " Yellow/Orange for warning - highlight DiagnosticUnderlineHint gui=undercurl guisp=#00ffff " Cyan for hint - highlight DiagnosticUnderlineInfo gui=undercurl guisp=#0000ff " Blue for info - ]] - end -} diff --git a/home/.config/nvim/lua/utils.lua b/home/.config/nvim/lua/utils.lua deleted file mode 100644 index ff806ba..0000000 --- a/home/.config/nvim/lua/utils.lua +++ /dev/null @@ -1,205 +0,0 @@ -local M = {} - -local overridden_default_keymaps = {} - -local function is_single_keymap_table(map_table) - assert(map_table) - return map_table.n or map_table.t or map_table.i or map_table.v or map_table.x or map_table.o -end - -function M.get_file_names_in_dir(dir, expr, strip_extension) - local path = vim.fn.stdpath("config") .. "/lua/" .. dir - local files_str = vim.fn.globpath(path, expr, true) - local has_line_breaks = vim.fn.match(files_str, [[\n]]) > -1 - local files = has_line_breaks and vim.fn.split(files_str, "\n") or { files_str } - - local should_strip_extension = strip_extension or false - if should_strip_extension then - return vim.tbl_map(function(file) - return vim.fn.fnamemodify(file, ":t:r") - end, files) - else - return files - end -end - -function M.validate_bufnr(bufnr) - vim.validate('bufnr', bufnr, 'number') - return bufnr == 0 and vim.api.nvim_get_current_buf() or bufnr -end - -function M.xpcallmsg(fn, err_msg, err_container) - return xpcall(fn, function(err) - if err_container then - table.insert(err_container, err_msg .. ": " .. err) - else - error(err_msg .. ": " .. err) - end - end) -end - -function M.foreach(t, f) - for _, v in pairs(t) do - f(v) - end -end - -function M.create_user_event_cb(event_name, function_callback, augroup) - assert(event_name and event_name ~= "", "Event name must be provided") - assert(function_callback and type(function_callback) == "function", "Callback must be a valid function") - - local cmd = { - callback = function_callback, - pattern = event_name, - } - - if augroup then - cmd.group = augroup - end - - vim.api.nvim_create_autocmd("User", cmd) -end - -function M.broadcast_event(event_name) - vim.api.nvim_command("doautocmd User " .. event_name) -end - -function M.add_opts_to_all_mappings(mappings, opts) - assert(opts and mappings) - - for _, modes in pairs(mappings) do - for _, mapping in pairs(modes) do - local existing_opts = mapping.opts or {} - mapping.opts = vim.tbl_extend("force", existing_opts, opts) - end - end -end - -local function pass_keymap_tbl_to_fn(maps, fn) - if is_single_keymap_table(maps) then - fn(maps) - else - for _, map_table in pairs(maps) do - fn(map_table) - end - end -end - -local function get_keymaps(mode, buffer) - if buffer then - return vim.api.nvim_buf_get_keymap(buffer, mode) - end - - return vim.api.nvim_get_keymap(mode) -end - -function M.add_temporary_keymaps(maps) - assert(maps) - - pass_keymap_tbl_to_fn(maps, function(map_table) - for mode, entries in pairs(map_table) do - -- We make an assumptino here which is that all the entries are buffers, or not buffers. - -- Meaning, we only check the first entry and trust that the rest are the same. - local result = get_keymaps(mode, (function() - for _, entry in pairs(entries) do - -- nil buffer is treated as a global keymap - return entry.buffer - end - end)()) - - for code, _ in pairs(entries) do - for _, map in ipairs(result) do - if map.lhs == code then - if not overridden_default_keymaps[mode] then - overridden_default_keymaps[mode] = {} - end - - overridden_default_keymaps[mode][code] = { - cmd = map.callback or map.rhs, - opts = { - noremap = map.noremap == 1, - expr = map.expr == 1, - silent = map.silent == 1, - nowait = map.nowait == 1, - script = map.script == 1, - buffer = type(map.buffer) == "number" and map.buffer or nil, - }, - } - end - end - end - end - end) - - M.add_keymaps(maps) -end - -function M.add_keymaps(maps) - assert(maps) - - pass_keymap_tbl_to_fn(maps, function(map_table) - for mode, entries in pairs(map_table) do - for code, info in pairs(entries) do - vim.keymap.set(mode, code, info.cmd, info.opts) - end - end - end) -end - -function M.remove_keymaps(maps) - assert(maps) - - pass_keymap_tbl_to_fn(maps, function(map_table) - for mode, entries in pairs(map_table) do - local overriden_mode = overridden_default_keymaps[mode] - for code, _ in pairs(entries) do - vim.keymap.del(mode, code) - - if overriden_mode and overriden_mode[code] then - vim.keymap.set(mode, code, overriden_mode[code].cmd, overriden_mode[code].opts) - end - end - end - end) -end - -function M.is_buf_filetype(bufnr, filetype) - return vim.api.nvim_buf_get_option(bufnr, "filetype") == filetype -end - -function M.is_buf_buftype(bufnr, filetype) - return vim.api.nvim_buf_get_option(bufnr, "buftype") == filetype -end - -function M.lock_buf_to_window(win_id, bufnr, filetype) - local augroup_id = vim.api.nvim_create_augroup("LockWindow" .. win_id, { clear = true }) - - vim.api.nvim_create_autocmd("BufEnter", { - group = augroup_id, - callback = function() - local current_win = vim.api.nvim_get_current_win() - if current_win ~= win_id then - return - end - - local current_buf = vim.api.nvim_win_get_buf(win_id) - if current_buf == bufnr then - return - end - - if M.is_buf_filetype(current_buf, filetype) then - bufnr = current_buf - return - end - - vim.api.nvim_win_set_buf(win_id, bufnr) - end, - }) -end - -function M.calculate_split_size(term_size, percentage, min_size, max_size) - local calculated_size = math.floor(term_size * percentage) - return math.min(math.max(calculated_size, min_size), max_size) -end - -return M diff --git a/home/.ideavimrc b/ideavim/.ideavimrc similarity index 100% rename from home/.ideavimrc rename to ideavim/.ideavimrc diff --git a/home/.config/neomutt/neomuttrc b/neomutt/neomuttrc similarity index 100% rename from home/.config/neomutt/neomuttrc rename to neomutt/neomuttrc diff --git a/nix/home.nix b/nix/home.nix new file mode 100644 index 0000000..19a9b23 --- /dev/null +++ b/nix/home.nix @@ -0,0 +1,62 @@ +{ pkgs, neovim-flake, ... }: { + programs = { + zsh = { + enable = true; + }; + }; + + home = { + stateVersion = "24.05"; + packages = with pkgs; [ + neovim-flake.packages.${system}.neovim + fzf + bat + git + yazi + tmux + eza + curl + wget + ripgrep + fd + jq + starship + fastfetch + clang + clang-tools + nixfmt-rfc-style + luajit + zoxide + rustup + zig + zls + nil + lldb + gopls + delve + golangci-lint + cmake + cmake-language-server + cmake-format + cmake-lint + python313Packages.debugpy + pyright + lua-language-server + gnumake + ninja + nodejs + ]; + file = { + ".zshrc".source = ../zsh/.zshrc; + ".config/nvim".source = ../nvim; + ".config/yazi".source = ../yazi; + ".config/starship.toml".source = ../starship/starship.toml; + ".tmux.conf".source = ../tmux/.tmux.conf; + ".config/tmux".source = ../tmux; + ".config/bat".source = ../bat; + ".config/ghostty".source = ../ghostty; + ".config/confutils".source = ../confutils; + ".config/wallpapers".source = ../wallpapers; + }; + }; +} diff --git a/nix/local_home.nix b/nix/local_home.nix new file mode 100644 index 0000000..cad7a94 --- /dev/null +++ b/nix/local_home.nix @@ -0,0 +1,12 @@ +{ ... }: +{ + # local_home.nix + # This is a template file that is committed to git with minimal changes. + # In order to use this and remain pure, each machine needs to create a local branch, i.e `machine-wsl` and set these variables + # accordingly, and then commit it. + home = { + # Stub values for demonstration. Override these in local branch. + username = "nixos"; + homeDirectory = "/home/nixos"; + }; +} diff --git a/nix/local_system.nix b/nix/local_system.nix new file mode 100644 index 0000000..6bdfb5f --- /dev/null +++ b/nix/local_system.nix @@ -0,0 +1,8 @@ +{ + ... +}: +{ + system = { + stateVersion = "24.11"; + }; +} diff --git a/nix/pkgs/darwin.nix b/nix/pkgs/darwin.nix new file mode 100644 index 0000000..d5d9079 --- /dev/null +++ b/nix/pkgs/darwin.nix @@ -0,0 +1,13 @@ +{ pkgs, config, ... }: +{ + home = { + packages = with pkgs; [ + gawk + discord + ]; + file = { + ".config/aerospace/aerospace.toml".source = + config.lib.file.mkOutOfStoreSymlink ../../aerospace/aerospace.toml; + }; + }; +} diff --git a/nix/pkgs/home.nix b/nix/pkgs/home.nix new file mode 100644 index 0000000..cda0f05 --- /dev/null +++ b/nix/pkgs/home.nix @@ -0,0 +1,131 @@ +{ + pkgs, + config, + lib, + neovim-flake, + ... +}: +let + dotfiles = [ + [ + ".zshrc" + "zsh/.zshrc" + ] + [ + ".config/nvim" + "nvim" + ] + [ + ".config/yazi" + "yazi" + ] + [ + ".config/starship.toml" + "starship/starship.toml" + ] + [ + ".tmux.conf" + "tmux/.tmux.conf" + ] + [ + ".config/tmux" + "tmux" + ] + [ + ".config/bat" + "bat" + ] + [ + ".config/ghostty" + "ghostty" + ] + [ + ".config/confutils" + "confutils" + ] + [ + ".config/wallpapers" + "wallpapers" + ] + ]; + + codelldb = pkgs.runCommand "codelldb" { } '' + mkdir -p $out/bin + cp ${pkgs.vscode-extensions.vadimcn.vscode-lldb}/share/vscode/extensions/vadimcn.vscode-lldb/adapter/codelldb $out/bin/codelldb + chmod +x $out/bin/codelldb + ''; + + symlinkFiles = builtins.listToAttrs ( + map (file: { + name = builtins.elemAt file 0; + value = { + source = config.lib.file.mkOutOfStoreSymlink "${config.home.homeDirectory}/dev/git/.dotfiles/${builtins.elemAt file 1}"; + }; + + }) dotfiles + ); +in +{ + programs = { + zsh = { + enable = true; + }; + }; + + home = { + stateVersion = "24.05"; + packages = with pkgs; [ + neovim-flake.packages.${system}.neovim + fzf + bat + git + yazi + tmux + eza + curl + wget + ripgrep + fd + jq + starship + fastfetch + nixfmt-rfc-style + luajit + zoxide + dart + go + rustup + zig + zls + nil + gopls + delve + golangci-lint + cmake + cmake-language-server + cmake-format + cmake-lint + python313Packages.debugpy + pyright + lua-language-server + gnumake + ninja + tldr + nerd-fonts.caskaydia-mono + clang + clang-tools + lldb + nodejs + tree-sitter + codelldb + bottom + python311 + pcre + ]; + + file = symlinkFiles; + activation.batCache = lib.hm.dag.entryAfter [ "writeBoundary" ] '' + run ${pkgs.bat}/bin/bat cache --build + ''; + }; +} diff --git a/nix/pkgs/linux.nix b/nix/pkgs/linux.nix new file mode 100644 index 0000000..b22dbc4 --- /dev/null +++ b/nix/pkgs/linux.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: +{ + home = { + packages = with pkgs; [ + wl-clipboard-rs + sway + ]; + file = { + ".config/sway".source = ../sway; + }; + }; +} diff --git a/nix/pkgs/wsl.nix b/nix/pkgs/wsl.nix new file mode 100644 index 0000000..6df1c82 --- /dev/null +++ b/nix/pkgs/wsl.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }: +{ + home = { + packages = with pkgs; [ + wslu + ]; + }; +} diff --git a/nix/system/darwin.nix b/nix/system/darwin.nix new file mode 100644 index 0000000..6a8eed8 --- /dev/null +++ b/nix/system/darwin.nix @@ -0,0 +1,91 @@ +{ + pkgs, + config, + self, + ... +}: +{ + + environment.systemPackages = with pkgs; [ + home-manager + mkalias + ]; + + homebrew = { + enable = true; + casks = [ + "ghostty" + "zen-browser" + "nikitabobko/tap/aerospace" + ]; + brews = [ + "mas" + ]; + masApps = { }; + onActivation.cleanup = "zap"; + onActivation.autoUpdate = true; + onActivation.upgrade = true; + }; + + system = { + configurationRevision = self.rev or self.dirtyRev or null; + defaults = { + dock = { + autohide = true; + persistent-apps = [ ]; + persistent-others = [ ]; + show-recents = false; + static-only = true; + }; + finder = { + _FXShowPosixPathInTitle = true; + _FXSortFoldersFirst = true; + AppleShowAllFiles = true; + AppleShowAllExtensions = true; + ShowPathbar = true; + ShowStatusBar = true; + FXPreferredViewStyle = "clmv"; + }; + loginwindow.GuestEnabled = false; + NSGlobalDomain = { + AppleICUForce24HourTime = true; + AppleInterfaceStyle = "Dark"; + KeyRepeat = 2; + }; + trackpad = { + Clicking = true; + TrackpadThreeFingerDrag = true; + }; + controlcenter = { + BatteryShowPercentage = true; + }; + hitoolbox.AppleFnUsageType = "Show Emoji & Symbols"; + }; + keyboard = { + enableKeyMapping = true; + nonUS.remapTilde = true; + remapCapsLockToEscape = true; + swapLeftCtrlAndFn = true; + }; + activationScripts.applications.text = + let + env = pkgs.buildEnv { + name = "system-applications"; + paths = config.environment.systemPackages; + pathsToLink = "/Applications"; + }; + in + pkgs.lib.mkForce '' + # Set up applications + echo "setting up /Applications..." >&2 + rm -rf /Applications/Nix\ Apps + mkdir -p /Applications/Nix\ Apps + find ${env}/Applications -maxdepth 1 -type l -exec readlink '{}' + | + while read -r src; do + app_name=$(basename "$src") + echo "copying $src" >&2 + ${pkgs.mkalias}/bin/mkalias "$src" "/Applications/Nix Apps/$app_name" + done + ''; + }; +} diff --git a/nix/system/linux.nix b/nix/system/linux.nix new file mode 100644 index 0000000..52c14b8 --- /dev/null +++ b/nix/system/linux.nix @@ -0,0 +1,3 @@ +{ ... }: +{ +} diff --git a/nix/system/wsl.nix b/nix/system/wsl.nix new file mode 100644 index 0000000..f4752eb --- /dev/null +++ b/nix/system/wsl.nix @@ -0,0 +1,22 @@ +{ nixos-wsl, pkgs, ... }: +{ + imports = [ + nixos-wsl.nixosModules.default + ]; + + wsl.enable = true; + + environment.systemPackages = with pkgs; [ + home-manager + ]; + + programs = { + zsh = { + enable = true; + }; + }; + + users.users.nixos = { + shell = pkgs.zsh; + }; +} diff --git a/home/.config/nvim/.luarc.json b/nvim/.luarc.json similarity index 72% rename from home/.config/nvim/.luarc.json rename to nvim/.luarc.json index 1e1765c..f82b794 100644 --- a/home/.config/nvim/.luarc.json +++ b/nvim/.luarc.json @@ -1,5 +1,6 @@ { "diagnostics.globals": [ "vim" + "Snacks" ] -} \ No newline at end of file +} diff --git a/home/.config/nvim/init.lua b/nvim/init.lua similarity index 82% rename from home/.config/nvim/init.lua rename to nvim/init.lua index c7b8971..738893f 100644 --- a/home/.config/nvim/init.lua +++ b/nvim/init.lua @@ -16,7 +16,7 @@ end -- Load keymaps before loading any plugins require("keymaps") --- change and personalize native vim settings +-- Change and personalize native vim settings vim.opt = require("vim_opt") -- Initialize Lazy package manager @@ -40,9 +40,13 @@ require("dap/setup") -- See ":help vim.highlight.on_yank()" setup_yank_highlight() +-- Change built in settings related to diagnostics +require("diagnostics") + --[[ -- Annoyances in Neovim environment: -- 1. codelldb doesn't terminate C++ program after debugging. : Don't know how to fix, have asked for help. -- 2. Sometimes very seldomly the cursor stops rendering, the only fix I found is to restsart Neovim. -- 3. Add PR to lspsaga so you can add keybindings for closing hover_doc, rename, finder, incoming_calls, and code actions using many configurable keybindings. I'm after "" and "q". +-- 4. Remove usage of dap-go, dap-python, and rustaceanvim. These are really just providing DAP/LSP configs which I prefer to have without plugin bloat. However, they require more to setup than your average conf. --]] diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json new file mode 100644 index 0000000..0350f70 --- /dev/null +++ b/nvim/lazy-lock.json @@ -0,0 +1,38 @@ +{ + "arrow.nvim": { "branch": "master", "commit": "5438c977e729a29d96bd54c8da3103154e80dbd1" }, + "auto-session": { "branch": "main", "commit": "9c3f977aafb56bd73ba0d082c4dcbdba5666faf3" }, + "blink.cmp": { "branch": "main", "commit": "18b352d12b35bca148427b607098df14b75a218f" }, + "codecompanion.nvim": { "branch": "main", "commit": "dd81bd9176daba9ea507cd0457f662c0a15c001f" }, + "codesnap.nvim": { "branch": "main", "commit": "6400480aa6cc366cbd931146c429aaa64680dab9" }, + "copilot.vim": { "branch": "release", "commit": "cd7f01009fb7b30e22840cadc4faad88b05c6eef" }, + "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, + "gitsigns.nvim": { "branch": "main", "commit": "4c40357994f386e72be92a46f41fc1664c84c87d" }, + "incline.nvim": { "branch": "main", "commit": "0eb5b7f6fc6636a4e7b2eb2800b7650fd6d164a2" }, + "lazy.nvim": { "branch": "main", "commit": "e5e9bf48211a13d9ee6c1077c88327c49c1ab4a0" }, + "leap.nvim": { "branch": "main", "commit": "8b826a9fc766bffd14288aee01847cb0d6c6c383" }, + "lspsaga.nvim": { "branch": "main", "commit": "4acafaf3455c57c94400e961636d979fb6ddd9fc" }, + "lualine.nvim": { "branch": "master", "commit": "f4f791f67e70d378a754d02da068231d2352e5bc" }, + "markview.nvim": { "branch": "main", "commit": "f1e2a57388b61fff8e9d7519ce05cee27a59a57e" }, + "neogit": { "branch": "master", "commit": "63124cf520ff24d09deb3b850e053908ab0fc66a" }, + "neovim-ayu": { "branch": "master", "commit": "283badaa983234c90e857c12c1f1c18e1544360a" }, + "noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" }, + "nui.nvim": { "branch": "main", "commit": "53e907ffe5eedebdca1cd503b00aa8692068ca46" }, + "nvim-colorizer.lua": { "branch": "master", "commit": "a065833f35a3a7cc3ef137ac88b5381da2ba302e" }, + "nvim-dap": { "branch": "master", "commit": "6e0e8ab4d8ed520076971465a4388dfe54a91d83" }, + "nvim-dap-go": { "branch": "main", "commit": "8763ced35b19c8dc526e04a70ab07c34e11ad064" }, + "nvim-dap-python": { "branch": "master", "commit": "34282820bb713b9a5fdb120ae8dd85c2b3f49b51" }, + "nvim-dap-repl-highlights": { "branch": "master", "commit": "a7512fc0a0de0c0be8d58983939856dda6f72451" }, + "nvim-dap-ui": { "branch": "master", "commit": "bc81f8d3440aede116f821114547a476b082b319" }, + "nvim-dap-virtual-text": { "branch": "master", "commit": "df66808cd78b5a97576bbaeee95ed5ca385a9750" }, + "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, + "nvim-surround": { "branch": "main", "commit": "ae298105122c87bbe0a36b1ad20b06d417c0433e" }, + "nvim-treesitter": { "branch": "master", "commit": "5774e7d3da4f681296a87fcd85d17779ad362a4f" }, + "nvim-treesitter-context": { "branch": "master", "commit": "198720b4016af04c9590f375d714d5bf8afecc1a" }, + "nvim-treesitter-textobjects": { "branch": "master", "commit": "ad8f0a472148c3e0ae9851e26a722ee4e29b1595" }, + "nvim-web-devicons": { "branch": "master", "commit": "1020869742ecb191f260818234517f4a1515cfe8" }, + "persistent-breakpoints.nvim": { "branch": "main", "commit": "4b199b1dcfd136cac8b0fa9c8dbbdeb81463f7a9" }, + "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, + "rustaceanvim": { "branch": "master", "commit": "f03035fa03ccb36cd26d0792c946fbacba1d1a39" }, + "snacks.nvim": { "branch": "main", "commit": "b100c937177536cf2aa634ddd2aa5b8a1dd23ace" }, + "vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" } +} diff --git a/home/.config/nvim/lua/dap/adapters/codelldb.lua b/nvim/lua/dap/adapters/codelldb.lua similarity index 57% rename from home/.config/nvim/lua/dap/adapters/codelldb.lua rename to nvim/lua/dap/adapters/codelldb.lua index d193344..3c6484a 100644 --- a/home/.config/nvim/lua/dap/adapters/codelldb.lua +++ b/nvim/lua/dap/adapters/codelldb.lua @@ -2,7 +2,7 @@ return { type = "server", port = "${port}", executable = { - command = vim.fn.exepath("codelldb"), -- Update with your codelldb binary path + command = vim.fn.exepath("codelldb"), args = { "--port", "${port}" }, }, } diff --git a/home/.config/nvim/lua/dap/adapters/debugpy.lua b/nvim/lua/dap/adapters/debugpy.lua similarity index 100% rename from home/.config/nvim/lua/dap/adapters/debugpy.lua rename to nvim/lua/dap/adapters/debugpy.lua diff --git a/home/.config/nvim/lua/dap/setup.lua b/nvim/lua/dap/setup.lua similarity index 54% rename from home/.config/nvim/lua/dap/setup.lua rename to nvim/lua/dap/setup.lua index 98ceff5..39f0caf 100644 --- a/home/.config/nvim/lua/dap/setup.lua +++ b/nvim/lua/dap/setup.lua @@ -1,32 +1,34 @@ local utils = require("utils") local dap = require("dap") ---[[ -.vscode/launch.json: ----------------------------- -{ - "version": "0.2.0", - "configurations": [ - { - "type": "name_of_adapter", - "request": "launch/attach", - "name": "Friendly name", - "program": "${workspaceFolder}/path/to/executable", - "cwd": "${workspaceFolder}", - "args": [], - "stopOnEntry": false, - "environment": [] - } - ] -} ----------------------------- -]] - local dir_path = "dap/adapters" utils.foreach(utils.get_file_names_in_dir(dir_path, "*.lua", true), function(adapter) dap.adapters[adapter] = require(dir_path .. "/" .. adapter) end) +vim.api.nvim_create_user_command("LaunchTemplate", function() + local template = { + '{', + ' "version": "0.2.0",', + ' "configurations": [', + ' {', + ' "type": "codelldb",', + ' "request": "launch",', + ' "name": "Launch",', + ' "program": "${workspaceFolder}/build/binary",', + ' "cwd": "${workspaceFolder}",', + ' "args": [],', + ' "stopOnEntry": false,', + ' "environment": []', + ' }', + ' ]', + '}', + } + + local bufnr = vim.api.nvim_get_current_buf() + vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, template) +end, {}) + -- Do not define default fallbacks until I have a better way of handling a default selected configuration. -- I never want to be prompted for a configuration, we should have ae serialized active config which is always run unless changed. -- -- Define configurations diff --git a/nvim/lua/diagnostics.lua b/nvim/lua/diagnostics.lua new file mode 100644 index 0000000..754b5eb --- /dev/null +++ b/nvim/lua/diagnostics.lua @@ -0,0 +1,49 @@ +local theme_colors = require("ayu.colors") +theme_colors.generate(true) +-- These are not apart of the Ayu color theme, however, I needed these +-- colors while still fitting in with the rest +local ayu_turquoise = "#5CCFE6" +local ayu_dark_blue = "#3A7BD5" + +local colors = { + info = ayu_dark_blue, + hint = ayu_turquoise, + warning = theme_colors.warning, + error = theme_colors.error, +} + +for _, highlight in ipairs({ + { "DiagnosticUnderlineInfo", { undercurl = true, sp = colors.info } }, + { "DiagnosticUnderlineHint", { undercurl = true, sp = colors.hint } }, + { "DiagnosticUnderlineWarn", { undercurl = true, sp = colors.warning } }, + { "DiagnosticUnderlineError", { undercurl = true, sp = colors.error } }, + { "DiagnosticInfo", { fg = colors.info } }, + { "DiagnosticHint", { fg = colors.hint } }, + { "DiagnosticWarn", { fg = colors.warning } }, + { "DiagnosticError", { fg = colors.error } }, +}) do + vim.api.nvim_set_hl(0, highlight[1], highlight[2]) +end + +local sev = vim.diagnostic.severity +vim.diagnostic.config({ + underline = true, + virtual_text = { + prefix = "●", + }, + update_in_insert = true, + signs = { + text = { + [sev.ERROR] = "", + [sev.WARN] = "", + [sev.INFO] = "", + [sev.HINT] = "", + }, + numhl = { + [sev.WARN] = "WarningMsg", + [sev.ERROR] = "ErrorMsg", + [sev.INFO] = "DiagnosticInfo", + [sev.HINT] = "DiagnosticHint", + }, + }, +}) diff --git a/home/.config/nvim/lua/format_handler.lua b/nvim/lua/format_handler.lua similarity index 68% rename from home/.config/nvim/lua/format_handler.lua rename to nvim/lua/format_handler.lua index 367c77f..fc539af 100644 --- a/home/.config/nvim/lua/format_handler.lua +++ b/nvim/lua/format_handler.lua @@ -26,18 +26,10 @@ function M.setup() vim.api.nvim_command("command! " .. cmd[1] .. " " .. cmd[2]) end - utils.add_keymaps({ - n = { - ["ff"] = { - cmd = function() M.format(true) end - }, - ["fe"] = { - cmd = M.format_enable, - }, - ["fd"] = { - cmd = M.format_disable, - }, - }, + utils.set_keymap_list({ + { "ff", function() M.format() end }, + { "fe", function() M.format_enable() end }, + { "fd", function() M.format_disable() end }, }) end diff --git a/home/.config/nvim/lua/inlay_hints_handler.lua b/nvim/lua/inlay_hints_handler.lua similarity index 100% rename from home/.config/nvim/lua/inlay_hints_handler.lua rename to nvim/lua/inlay_hints_handler.lua diff --git a/nvim/lua/keymaps.lua b/nvim/lua/keymaps.lua new file mode 100644 index 0000000..236ec9a --- /dev/null +++ b/nvim/lua/keymaps.lua @@ -0,0 +1,98 @@ +local utils = require("utils") +local g = vim.g + +g.mapleader = " " +g.maplocalleader = " " + +local move_up = { "v:count || mode(1)[0:1] == \"no\" ? \"k\" : \"gk\"", { expr = true } } +local move_down = { "v:count || mode(1)[0:1] == \"no\" ? \"j\" : \"gj\"", { expr = true } } + +utils.foreach({ + { + "n", + { + -- Using lspsaga for hover doc + { "K", "", }, + -- Using lspsaga finder with gr which does references + { "grr", "", }, + { "gra", "", }, + { "grn", "", }, + { "gri", "", }, + -- Navigation + { "", "h", }, + { "", "j", }, + { "", "k", }, + { "", "l", }, + { "", "h", }, + { "", "j", }, + { "", "k", }, + { "", "l", }, + + -- Window + { "", "q", }, + + -- Disable current highlights + { "", " noh ", }, + + -- Copies the entire file + { "", ":%y+", { silent = true } }, + + -- Allow moving the cursor through wrapped lines with and + -- http://www.reddit.com/r/vim/comments/2k4cbr/problem_with_gj_and_gk/ + -- empty mode is same as using :map + -- also don't use g[j|k] when in operator pending mode, + -- so it doesn't alter d, y or c behaviour + { "", move_up[1], move_up[2], }, + { "", move_down[1], move_down[2], }, + { "j", move_down[1], move_down[2], }, + { "k", move_up[1], move_up[2], }, + -- Maps to remove + { "", "", }, + + -- Marks are less frequently used than leaping, also, less relevant with arrow and fzf navigation. + -- Prioritize regular m for leaping, and m for setting marks. + { "m", "m", }, + { "[d", function() + vim.diagnostic.jump({ count = -1, float = false }) + end }, + { "]d", function() + vim.diagnostic.jump({ count = 1, float = false }) + end }, + } + }, + { + "v", + { + { "", move_up[1], move_up[2], }, + { "", move_down[1], move_down[2], }, + { "j", move_down[1], move_down[2], }, + { "k", move_up[1], move_up[2], }, + { "", ">gv", }, + { "", "m for setting marks. + { "m", "m", }, + }, + }, + { + "x", + { + { "", move_up[1], move_up[2], }, + { "", move_down[1], move_down[2], }, + { "j", move_down[1], move_down[2], }, + { "k", move_up[1], move_up[2], }, + { "p", "p:let @+=@0:let @\"=@0", { silent = true }, }, + } + }, + { + "t", + { + { "", "", }, + } + }, +}, function(mode_mapping) + local mode = mode_mapping[1] + local mappings = mode_mapping[2] + utils.set_keymap_list(mappings, mode) +end) diff --git a/home/.config/nvim/lua/lazy_init.lua b/nvim/lua/lazy_init.lua similarity index 100% rename from home/.config/nvim/lua/lazy_init.lua rename to nvim/lua/lazy_init.lua diff --git a/nvim/lua/leap_keymap_handler.lua b/nvim/lua/leap_keymap_handler.lua new file mode 100644 index 0000000..609d77f --- /dev/null +++ b/nvim/lua/leap_keymap_handler.lua @@ -0,0 +1,33 @@ +local M = {} + +local function leap_across_windows() + require("leap").leap({ + target_windows = require("leap.user").get_focusable_windows() + }) +end + +local function leap_in_current_buffer() + require("leap").leap({ + target_windows = { vim.api.nvim_get_current_win() } + }) +end + +local function normal_mode_leap() + if _G["snacks_zen_mode"] then + leap_in_current_buffer() + else + leap_across_windows() + end +end + +function M.set_leap_keymapping() + require("utils").foreach({ + { "n", "m", normal_mode_leap }, + { "v", "m", leap_in_current_buffer }, + { "o", "m", leap_in_current_buffer } + }, function(mapping) + vim.keymap.set(mapping[1], mapping[2], mapping[3]) + end) +end + +return M diff --git a/home/.config/nvim/lua/lsp/servers/clangd.lua b/nvim/lua/lsp/servers/clangd.lua similarity index 61% rename from home/.config/nvim/lua/lsp/servers/clangd.lua rename to nvim/lua/lsp/servers/clangd.lua index 45d55ce..f242c06 100644 --- a/home/.config/nvim/lua/lsp/servers/clangd.lua +++ b/nvim/lua/lsp/servers/clangd.lua @@ -1,21 +1,23 @@ local utils = require("utils") -- https://clangd.llvm.org/extensions.html#switch-between-sourceheader -local function switch_source_header(bufnr) - bufnr = utils.validate_bufnr(bufnr) +local function switch_source_header() + local bufnr = utils.validate_bufnr(0) local clangd_client = vim.lsp.get_clients({ bufnr = bufnr, name = "clangd" })[1] - local params = { uri = vim.uri_from_bufnr(bufnr) } if clangd_client then - clangd_client.request("textDocument/switchSourceHeader", params, function(err, result) - if err then - error(tostring(err)) - end - if not result then - print "Corresponding file cannot be determined" - return - end - vim.api.nvim_command("drop " .. vim.uri_to_fname(result)) - end, bufnr) + clangd_client.request( + "textDocument/switchSourceHeader", + { uri = vim.uri_from_bufnr(bufnr) }, + function(err, result) + if err then + error(tostring(err)) + end + if not result then + print "Corresponding file cannot be determined" + return + end + vim.api.nvim_command("drop " .. vim.uri_to_fname(result)) + end, bufnr) else print "method textDocument/switchSourceHeader is not supported by any servers active on the current buffer" end @@ -44,19 +46,9 @@ return { "compile_flags.txt", "configure.ac", }, - on_attach = function(_, bufnr) - local lsp_maps = { - { - "ko", - function() switch_source_header(0) end, - }, - } - - local keymaps = { n = {} } - for i, _ in ipairs(lsp_maps) do - local binding, cmd = unpack(lsp_maps[i]) - keymaps.n[binding] = { cmd = cmd, opts = { buffer = bufnr } } - end - utils.add_keymaps(keymaps) + on_attach = function() + utils.set_keymap_list({ + { "ko", switch_source_header, }, + }) end, } diff --git a/home/.config/nvim/lua/lsp/servers/cmake.lua b/nvim/lua/lsp/servers/cmake.lua similarity index 100% rename from home/.config/nvim/lua/lsp/servers/cmake.lua rename to nvim/lua/lsp/servers/cmake.lua diff --git a/nvim/lua/lsp/servers/dartls.lua b/nvim/lua/lsp/servers/dartls.lua new file mode 100644 index 0000000..3032515 --- /dev/null +++ b/nvim/lua/lsp/servers/dartls.lua @@ -0,0 +1,18 @@ +return { + cmd = { "dart", "language-server", "--protocol=lsp" }, + filetypes = { "dart" }, + root_markers = { "pubspec.yaml" }, + init_options = { + onlyAnalyzeProjectsWithOpenFiles = true, + suggestFromUnimportedLibraries = true, + closingLabels = true, + outline = true, + flutterOutline = true, + }, + settings = { + dart = { + completeFunctionCalls = true, + showTodos = true, + }, + }, +} diff --git a/home/.config/nvim/lua/lsp/servers/gopls.lua b/nvim/lua/lsp/servers/gopls.lua similarity index 89% rename from home/.config/nvim/lua/lsp/servers/gopls.lua rename to nvim/lua/lsp/servers/gopls.lua index d59bc8e..f20cc50 100644 --- a/home/.config/nvim/lua/lsp/servers/gopls.lua +++ b/nvim/lua/lsp/servers/gopls.lua @@ -5,11 +5,6 @@ return { filetypes = { "go", "gomod", "gowork", "gotmpl" }, settings = { gopls = { - ["ui.inlayhints.hints"] = { - compositeLiteralFields = true, - constantValues = true, - parameterNames = true, - }, analyses = { unusedparams = true, }, diff --git a/home/.config/nvim/lua/lsp/servers/lua_ls.lua b/nvim/lua/lsp/servers/lua_ls.lua similarity index 84% rename from home/.config/nvim/lua/lsp/servers/lua_ls.lua rename to nvim/lua/lsp/servers/lua_ls.lua index e86b233..780383e 100644 --- a/home/.config/nvim/lua/lsp/servers/lua_ls.lua +++ b/nvim/lua/lsp/servers/lua_ls.lua @@ -11,6 +11,12 @@ return { "selene.yml", ".git" }, + settings = { + Lua = { + maxPreload = 100000, + preloadFileSize = 10000, + }, + }, on_init = function(client) local path = vim.tbl_get(client, "workspace_folders", 1, "name") if not path then @@ -23,6 +29,9 @@ return { runtime = { version = "LuaJIT" }, + diagnostics = { + globals = { "vim", "Snacks" }, + }, -- Make the server aware of Neovim runtime files workspace = { checkThirdParty = false, diff --git a/nvim/lua/lsp/servers/nil.lua b/nvim/lua/lsp/servers/nil.lua new file mode 100644 index 0000000..7bead9f --- /dev/null +++ b/nvim/lua/lsp/servers/nil.lua @@ -0,0 +1,20 @@ +return { + cmd = { "nil" }, + filetypes = { "nix" }, + root_markers = { + "flake.nix", + ".git" + }, + settings = { + ["nil"] = { + formatting = { + command = { "nixfmt" }, + }, + }, + }, + on_attach = function(_, bufnr) + vim.bo[bufnr].tabstop = 2 + vim.bo[bufnr].shiftwidth = 2 + vim.bo[bufnr].softtabstop = 2 + end +} diff --git a/home/.config/nvim/lua/lsp/servers/pyright.lua b/nvim/lua/lsp/servers/pyright.lua similarity index 100% rename from home/.config/nvim/lua/lsp/servers/pyright.lua rename to nvim/lua/lsp/servers/pyright.lua diff --git a/nvim/lua/lsp/servers/zls.lua b/nvim/lua/lsp/servers/zls.lua new file mode 100644 index 0000000..cce39b7 --- /dev/null +++ b/nvim/lua/lsp/servers/zls.lua @@ -0,0 +1,10 @@ +return { + cmd = { "zls" }, + on_new_config = function(new_config, new_root_dir) + if vim.fn.filereadable(vim.fs.joinpath(new_root_dir, "zls.json")) ~= 0 then + new_config.cmd = { "zls", "--config-path", "zls.json" } + end + end, + filetypes = { "zig", "zir" }, + root_markers = {"zls.json", "build.zig", ".git"}, +} diff --git a/home/.config/nvim/lua/lsp/setup.lua b/nvim/lua/lsp/setup.lua similarity index 72% rename from home/.config/nvim/lua/lsp/setup.lua rename to nvim/lua/lsp/setup.lua index 68d7467..9192cfc 100644 --- a/home/.config/nvim/lua/lsp/setup.lua +++ b/nvim/lua/lsp/setup.lua @@ -24,42 +24,15 @@ local function global_on_attach(client, bufnr) }) end - utils.add_keymaps({ - n = { - ["gd"] = { - cmd = function() - vim.lsp.buf.definition() - end, - opts = { - noremap = true, - silent = true, - buffer = bufnr - } - }, - ["gD"] = { - cmd = function() - vim.lsp.buf.declaration() - end, - opts = { - noremap = true, - silent = true, - buffer = bufnr - } - }, - } + utils.set_keymap_list({ + { "gd", function() vim.lsp.buf.definition({ reuse_win = true, }) end, { noremap = true, buffer = bufnr } }, + { "gD", function() vim.lsp.buf.declaration({ reuse_win = true, }) end, { noremap = true, buffer = bufnr } }, }) end local global_capabilities = require("blink.cmp").get_lsp_capabilities() global_capabilities.offsetEncoding = { "utf-16" } -vim.diagnostic.config({ - underline = true, -- Underline diagnostic errors - virtual_text = false, -- Disable inline text messages - signs = true, -- Show icons in the sign column - update_in_insert = true, -- Update diagnostics during insert mode -}) - vim.lsp.config("*", { capabilities = global_capabilities, handlers = { diff --git a/home/.config/nvim/lua/lualine_extension_lspsaga.lua b/nvim/lua/lualine_extension_lspsaga.lua similarity index 100% rename from home/.config/nvim/lua/lualine_extension_lspsaga.lua rename to nvim/lua/lualine_extension_lspsaga.lua diff --git a/home/.config/nvim/lua/plugs/arrow.lua b/nvim/lua/plugs/arrow.lua similarity index 100% rename from home/.config/nvim/lua/plugs/arrow.lua rename to nvim/lua/plugs/arrow.lua diff --git a/home/.config/nvim/lua/plugs/ayu.lua b/nvim/lua/plugs/ayu.lua similarity index 94% rename from home/.config/nvim/lua/plugs/ayu.lua rename to nvim/lua/plugs/ayu.lua index ca7edb6..aca05ec 100644 --- a/home/.config/nvim/lua/plugs/ayu.lua +++ b/nvim/lua/plugs/ayu.lua @@ -26,11 +26,9 @@ end return { "Shatur/neovim-ayu", config = function() - local is_mirage = true - local ayu = require("ayu") local colors = require("ayu.colors") - colors.generate(is_mirage) + colors.generate(true) local overrides = { global_variable = { @@ -56,8 +54,8 @@ return { } ayu.setup({ - mirage = is_mirage, -- Set to `true` to use `mirage` variant instead of `dark` for dark background. - terminal = false, -- Set to `false` to let terminal manage its own colors. + mirage = true, + terminal = false, overrides = { -- TRANSPARENCY Normal = { bg = "none" }, diff --git a/home/.config/nvim/lua/plugs/blink.lua b/nvim/lua/plugs/blink.lua similarity index 74% rename from home/.config/nvim/lua/plugs/blink.lua rename to nvim/lua/plugs/blink.lua index 0b73641..2fb01f8 100644 --- a/home/.config/nvim/lua/plugs/blink.lua +++ b/nvim/lua/plugs/blink.lua @@ -6,11 +6,6 @@ return { ---@type blink.cmp.Config opts = { keymap = { preset = "super-tab" }, - - -- highlight = { - -- use_nvim_cmp_as_default = true, - -- }, - -- nerd_font_variant = "mono", }, -- allows extending the enabled_providers array elsewhere in your config -- without having to redefining it diff --git a/nvim/lua/plugs/codecompanion.lua b/nvim/lua/plugs/codecompanion.lua new file mode 100644 index 0000000..8966ae2 --- /dev/null +++ b/nvim/lua/plugs/codecompanion.lua @@ -0,0 +1,39 @@ +return { + "olimorris/codecompanion.nvim", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-treesitter/nvim-treesitter", + }, + opts = { + strategies = { + chat = { + adapter = "copilot", + }, + inline = { + adapter = "copilot", + }, + agent = { + adapter = "copilot", + }, + }, + adapters = { + copilot = function() return require("codecompanion.adapters").extend("copilot", {}) end, + }, + display = { + diff = { + provider = "mini_diff", + }, + }, + opts = { + log_level = "DEBUG", + }, + }, + keys = { + { "ci", "CodeCompanion" }, + { "cc", "CodeCompanionChat toggle" }, + { "ce", "CodeCompanion /explain", mode = "v" }, + }, + init = function() + vim.cmd([[cab cc CodeCompanion]]) + end +} diff --git a/nvim/lua/plugs/codesnap.lua b/nvim/lua/plugs/codesnap.lua new file mode 100644 index 0000000..042e834 --- /dev/null +++ b/nvim/lua/plugs/codesnap.lua @@ -0,0 +1,18 @@ +return { + "mistricky/codesnap.nvim", + build = "make", + event = "VeryLazy", + lazy = true, + opts = { + mac_window_bar = true, + title = "codesnap.nvim", + code_font_family = "JetBrainsMono Nerd Font", + breadcrumbs_separator = "/", + has_breadcrumbs = true, + bg_theme = "grape", + watermark = "", + }, + keys = { + { "cs", ":CodeSnap", mode = "v", silent = true, noremap = true }, + }, +} diff --git a/home/.config/nvim/lua/plugs/colorizer.lua b/nvim/lua/plugs/colorizer.lua similarity index 100% rename from home/.config/nvim/lua/plugs/colorizer.lua rename to nvim/lua/plugs/colorizer.lua diff --git a/nvim/lua/plugs/copilot.lua b/nvim/lua/plugs/copilot.lua new file mode 100644 index 0000000..01d381a --- /dev/null +++ b/nvim/lua/plugs/copilot.lua @@ -0,0 +1,18 @@ +return { + "github/copilot.vim", + event = "InsertEnter", + init = function() + vim.g.copilot_no_tab_map = true + end, + keys = { + { + "", + 'copilot#Accept("\\")', + mode = "i", + expr = true, + replace_keycodes = false, + silent = true, + desc = "Copilot Accept with ", + }, + }, +} diff --git a/home/.config/nvim/lua/plugs/devicons.lua b/nvim/lua/plugs/devicons.lua similarity index 100% rename from home/.config/nvim/lua/plugs/devicons.lua rename to nvim/lua/plugs/devicons.lua diff --git a/nvim/lua/plugs/incline.lua b/nvim/lua/plugs/incline.lua new file mode 100644 index 0000000..081dfa0 --- /dev/null +++ b/nvim/lua/plugs/incline.lua @@ -0,0 +1,86 @@ +return { + "b0o/incline.nvim", + dependencies = { + { + "lewis6991/gitsigns.nvim", + opts = {}, + keys = { + { "[g", function() require("gitsigns").nav_hunk("prev") end, }, + { "]g", function() require("gitsigns").nav_hunk("next") end, }, + } + } + }, + event = "VeryLazy", + lazy = true, + opts = { + window = { + padding = 0, + }, + hide = { + cursorline = true, + }, + render = function(props) + local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(props.buf), ":t") + if filename == "" then + filename = "[No Name]" + end + local ft_icon, ft_color = require("nvim-web-devicons").get_icon_color(filename) + + local function get_git_diff() + local icons = { removed = "", changed = "", added = "" } + local signs = vim.b[props.buf].gitsigns_status_dict + local labels = {} + if signs == nil then + return labels + end + for name, icon in pairs(icons) do + if tonumber(signs[name]) and signs[name] > 0 then + table.insert(labels, { icon .. " " .. signs[name] .. " ", group = "Diff" .. name }) + end + end + if #labels > 0 then + table.insert(labels, { "┊ " }) + end + return labels + end + + local function get_diagnostic_label() + local icons = { error = "", warn = "", info = "", hint = "" } + local label = {} + + for severity, icon in pairs(icons) do + local n = #vim.diagnostic.get(props.buf, + { severity = vim.diagnostic.severity[string.upper(severity)] }) + if n > 0 then + table.insert(label, { icon .. " " .. n .. " ", group = "DiagnosticSign" .. severity }) + end + end + if #label > 0 then + table.insert(label, { "┊ " }) + end + return label + end + + local function get_arrow_label() + local statusline = require("arrow.statusline") + if statusline.is_on_arrow_file(props.buf) == nil then + return "" + end + + return " " .. statusline.text_for_statusline_with_icons(props.buf) + end + + return { + guibg = "#1e2030", + guifg = "#cad3f5", + { " " }, + { get_diagnostic_label() }, + { get_git_diff() }, + { (ft_icon or "") .. " ", guifg = ft_color, guibg = "none" }, + { filename .. " ┊", gui = vim.bo[props.buf].modified and "bold,italic" or "bold" }, + { get_arrow_label() .. "  " .. vim.api.nvim_win_get_number(props.win), group = "DevIconWindows" }, + { " " } + } + end, + }, +} diff --git a/home/.config/nvim/lua/plugs/leap.lua b/nvim/lua/plugs/leap.lua similarity index 65% rename from home/.config/nvim/lua/plugs/leap.lua rename to nvim/lua/plugs/leap.lua index 1fe86c4..2ec7a66 100644 --- a/home/.config/nvim/lua/plugs/leap.lua +++ b/nvim/lua/plugs/leap.lua @@ -19,7 +19,8 @@ return { }, event = "VeryLazy", lazy = true, - config = function() + opts = {}, + init = function() local leap = require("leap") -- Disable auto jumping to the first match @@ -54,41 +55,6 @@ return { utils.create_user_event_cb(cmd.event_name, cmd.cb, leap_augroup_name) end - local leap_user = require("leap.user") - local function leap_across_windows() - leap.leap({ - target_windows = leap_user.get_focusable_windows() - }) - end - - local function leap_in_current_buffer() - leap.leap({ - target_windows = { vim.api.nvim_get_current_win() } - }) - end - - utils.add_keymaps({ - n = { - ["m"] = { - cmd = function() - leap_across_windows() - end, - }, - }, - v = { - ["m"] = { - cmd = function() - leap_in_current_buffer() - end, - } - }, - o = { - ["m"] = { - cmd = function() - leap_in_current_buffer() - end, - } - } - }) + require("leap_keymap_handler").set_leap_keymapping() end, } diff --git a/nvim/lua/plugs/lspsaga.lua b/nvim/lua/plugs/lspsaga.lua new file mode 100644 index 0000000..54e23bb --- /dev/null +++ b/nvim/lua/plugs/lspsaga.lua @@ -0,0 +1,42 @@ +return { + -- "nvimdev/lspsaga.nvim", + "LarssonMartin1998/lspsaga.nvim", -- Use my own fork until PR's are merged + event = "LspAttach", + lazy = true, + -- dir = "~/dev/git/lspsaga.nvim", + dependencies = { + "nvim-tree/nvim-web-devicons", + }, + opts = { + request_timeout = 750, + symbol_in_winbar = { + enable = false, + }, + implement = { + enable = false, + }, + outline = { + enable = false, + win_width = 52, + }, + ui = { + border = "rounded", + title = false, + }, + code_action = { + extend_gitsigns = true + }, + hover = { + jump_on_first_press = true + }, + }, + keys = { + { "K", ":Lspsaga hover_doc", silent = true, }, + { "rn", ":Lspsaga rename", silent = true, }, + { "gr", ":Lspsaga finder", silent = true, }, + { "lt", ":Lspsaga peek_type_definition", silent = true, }, + { "ld", ":Lspsaga peek_definition", silent = true, }, + { "ca", ":Lspsaga code_action", silent = true, }, + { "lc", ":Lspsaga incoming_calls", silent = true, }, + }, +} diff --git a/nvim/lua/plugs/lualine.lua b/nvim/lua/plugs/lualine.lua new file mode 100644 index 0000000..eec34b5 --- /dev/null +++ b/nvim/lua/plugs/lualine.lua @@ -0,0 +1,56 @@ +local function resize_mode() + if require("window_management").is_in_resizing_mode() then + return "▲ Resizing ▼" + else + return "" + end +end + +return { + "nvim-lualine/lualine.nvim", + dependencies = { + "nvim-tree/nvim-web-devicons" + }, + event = "VeryLazy", + lazy = true, + opts = { + options = { + theme = "ayu", + section_separators = { + left = "", + right = "", + }, + component_separators = { + left = "", + right = "" + }, + icons_enabled = true, + }, + sections = { + lualine_a = { "mode" }, + lualine_b = { + "branch", + { + "diagnostics", + sources = { "nvim_lsp" }, + sections = { "error", "warn", "info", "hint" }, + update_in_insert = false, + }, + resize_mode, + }, + lualine_c = { "buffers" }, + lualine_x = { "encoding", "fileformat", "filetype" }, + lualine_y = { "progress" }, + lualine_z = { "location" } + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = {}, + lualine_x = {}, + lualine_y = {}, + lualine_z = {} + }, + tabline = {}, + } +} diff --git a/nvim/lua/plugs/markview.lua b/nvim/lua/plugs/markview.lua new file mode 100644 index 0000000..85129d0 --- /dev/null +++ b/nvim/lua/plugs/markview.lua @@ -0,0 +1,4 @@ +return { + "OXY2DEV/markview.nvim", + lazy = false +} diff --git a/nvim/lua/plugs/neogit.lua b/nvim/lua/plugs/neogit.lua new file mode 100644 index 0000000..e510511 --- /dev/null +++ b/nvim/lua/plugs/neogit.lua @@ -0,0 +1,21 @@ +return { + "NeogitOrg/neogit", + dependencies = { + { + "sindrets/diffview.nvim", + opts = { + view = { + merge_tool = { + layout = "diff1_plain", + }, + }, + }, + } + }, + event = "VeryLazy", + lazy = true, + opts = {}, + keys = { + { "g", function() require("neogit").open({ kind = "vsplit" }) end } + }, +} diff --git a/home/.config/nvim/lua/plugs/noice.lua b/nvim/lua/plugs/noice.lua similarity index 68% rename from home/.config/nvim/lua/plugs/noice.lua rename to nvim/lua/plugs/noice.lua index abd847c..f31c47b 100644 --- a/home/.config/nvim/lua/plugs/noice.lua +++ b/nvim/lua/plugs/noice.lua @@ -4,23 +4,12 @@ return { lazy = true, dependencies = { { "MunifTanjim/nui.nvim", lazy = true }, - { - "rcarriga/nvim-notify", - opts = { - background_colour = "#24273a", - fps = 1, - render = "compact", - stages = "static" - } - } }, opts = { lsp = { - -- override markdown rendering so that **cmp** and other plugins use **Treesitter** override = { ["vim.lsp.util.convert_input_to_markdown_lines"] = true, ["vim.lsp.util.stylize_markdown"] = true, - -- ["cmp.entry.get_documentation"] = true, -- requires hrsh7th/nvim-cmp }, }, presets = { diff --git a/nvim/lua/plugs/nvim-dap.lua b/nvim/lua/plugs/nvim-dap.lua new file mode 100644 index 0000000..3d56742 --- /dev/null +++ b/nvim/lua/plugs/nvim-dap.lua @@ -0,0 +1,96 @@ +local utils = require("utils") +local inlay_hints_handler = require("inlay_hints_handler") + +local is_debug_mode_active = false +return { + "mfussenegger/nvim-dap", + dependencies = { + { "igorlfs/nvim-dap-view", opts = {} }, + -- Special adapters + { "leoluz/nvim-dap-go", opts = {} }, + { "mfussenegger/nvim-dap-python", }, + + { "nvim-neotest/nvim-nio", lazy = true }, + { "LiadOz/nvim-dap-repl-highlights", opts = {} }, + { "theHamsta/nvim-dap-virtual-text", opts = {} }, + { "Weissle/persistent-breakpoints.nvim", opts = { load_breakpoints_event = { "BufReadPost" } } }, + }, + config = function() + local dap = require("dap") + + require("dap-python").setup("python3") + require("dap.ext.vscode").load_launchjs() + local virtual_text = require("nvim-dap-virtual-text/virtual_text") + local breakpoint_api = require("persistent-breakpoints.api") + + local stepping_keymaps = { + { "m", function() dap.step_out() end }, + { "n", function() dap.step_over() end }, + { "i", function() dap.step_into() end }, + } + + local dap_signs = { + { "DapBreakpoint", { text = "🛑", texthl = "", linehl = "", numhl = "" } }, + { "DapBreakpointRejected", { text = "🔵", texthl = "", linehl = "", numhl = "" } }, + { "DapBreakpointCondition", { text = "🟥", texthl = "", linehl = "", numhl = "" } }, + } + + for _, sign in ipairs(dap_signs) do + vim.fn.sign_define(unpack(sign)) + end + + local function enter_debug_mode() + if is_debug_mode_active then + return + end + + utils.set_keymap_list(stepping_keymaps) + is_debug_mode_active = true + + inlay_hints_handler.disable() + require("dap-view").open() + end + + local function exit_debug_mode() + if not is_debug_mode_active then + return + end + + utils.del_keymap_list(stepping_keymaps) + is_debug_mode_active = false + require("leap_keymap_handler").set_leap_keymapping() + + inlay_hints_handler.restore() + virtual_text.clear_virtual_text() + require("dap-view").close() + end + + for _, request in ipairs({ + { "attach", enter_debug_mode }, + { "launch", enter_debug_mode }, + }) do + dap.listeners.before[request[1]]["dapview"] = request[2] + end + + for _, event in ipairs({ + { "event_terminated", exit_debug_mode }, + { "event_exited", exit_debug_mode }, + }) do + dap.listeners.after[event[1]]["dapview"] = event[2] + end + + local function dap_stop() + dap.terminate() + dap.close() + exit_debug_mode() + end + + utils.set_keymap_list({ + { "dr", dap.continue }, + { "bt", breakpoint_api.toggle_breakpoint }, + { "bc", breakpoint_api.set_conditional_breakpoint }, + { "br", breakpoint_api.clear_all_breakpoints }, + { "ds", dap_stop }, + }) + end, +} diff --git a/nvim/lua/plugs/persistence.lua b/nvim/lua/plugs/persistence.lua new file mode 100644 index 0000000..1ccfd38 --- /dev/null +++ b/nvim/lua/plugs/persistence.lua @@ -0,0 +1,5 @@ +return { + "folke/persistence.nvim", + event = "BufReadPre", -- this will only start session saving when an actual file was opened + opts = {} +} diff --git a/home/.config/nvim/lua/plugs/plenary.lua b/nvim/lua/plugs/plenary.lua similarity index 71% rename from home/.config/nvim/lua/plugs/plenary.lua rename to nvim/lua/plugs/plenary.lua index 0c63989..6781ca7 100644 --- a/home/.config/nvim/lua/plugs/plenary.lua +++ b/nvim/lua/plugs/plenary.lua @@ -1,4 +1,5 @@ return { "nvim-lua/plenary.nvim", + branch = "master", lazy = true, } diff --git a/home/.config/nvim/lua/plugs/rustaceanvim.lua b/nvim/lua/plugs/rustaceanvim.lua similarity index 54% rename from home/.config/nvim/lua/plugs/rustaceanvim.lua rename to nvim/lua/plugs/rustaceanvim.lua index c3de664..9dc473c 100644 --- a/home/.config/nvim/lua/plugs/rustaceanvim.lua +++ b/nvim/lua/plugs/rustaceanvim.lua @@ -30,29 +30,9 @@ return { }) end - utils.add_keymaps({ - n = { - ["gd"] = { - cmd = function() - vim.lsp.buf.definition() - end, - opts = { - noremap = true, - silent = true, - buffer = bufnr, - } - }, - ["gD"] = { - cmd = function() - vim.lsp.buf.declaration() - end, - opts = { - noremap = true, - silent = true, - buffer = bufnr, - } - }, - } + utils.set_keymap_list({ + { "gd", function() vim.lsp.buf.definition({ reuse_win = true, }) end, { noremap = true, buffer = bufnr } }, + { "gD", function() vim.lsp.buf.declaration({ reuse_win = true, }) end, { noremap = true, buffer = bufnr } }, }) end, } diff --git a/nvim/lua/plugs/snacks.lua b/nvim/lua/plugs/snacks.lua new file mode 100644 index 0000000..a430aa4 --- /dev/null +++ b/nvim/lua/plugs/snacks.lua @@ -0,0 +1,87 @@ +return { + "folke/snacks.nvim", + priority = 1000, + lazy = false, + opts = { + gitbrowse = { + enabled = true, + what = "repo", + }, + picker = { enabled = true, }, + dashboard = { + enabled = true, + preset = { + keys = { + { icon = " ", key = "f", desc = "Find File", action = ":lua Snacks.dashboard.pick('files')" }, + { icon = " ", key = "n", desc = "New File", action = ":ene | startinsert" }, + { icon = " ", key = "g", desc = "Find Text", action = ":lua Snacks.dashboard.pick('live_grep')" }, + { icon = " ", key = "c", desc = "Config", action = ":lua Snacks.dashboard.pick('files', {cwd = vim.fn.stdpath('config')})" }, + { icon = " ", key = "s", desc = "Restore Session", section = "session" }, + { icon = "󰒲 ", key = "L", desc = "Lazy", action = ":Lazy", enabled = package.loaded.lazy ~= nil }, + { icon = " ", key = "q", desc = "Quit", action = ":qa" }, + }, + }, + }, + debug = { enabled = true, }, + indent = { + enabled = true, + animate = { + enabled = false, + }, + }, + input = { enabled = true, }, + notifier = { enabled = true, }, + quickfile = { enabled = true, }, + scroll = { + enabled = true, + animate = { + duration = { step = 7, total = 250 }, + easing = "outCirc", + }, + animate_repeat = { + delay = 100, + duration = { step = 3, total = 50 }, + easing = "outCirc", + }, + }, + words = { + enabled = true, + debounce = 100, + }, + zen = { + enabled = true, + toggles = { dim = false, }, + on_open = function() + _G["snacks_zen_mode"] = true + end, + on_close = function() + _G["snacks_zen_mode"] = false + end, + }, + }, + keys = { + { "gB", function() Snacks.gitbrowse() end, }, + + { "z", function() Snacks.zen() end, }, + + { "to", function() Snacks.picker.smart() end, }, + { "ta", function() Snacks.picker.grep() end, }, + { "tg", function() Snacks.picker.git_log_file() end, }, + { "ts", function() Snacks.picker.lsp_workspace_symbols() end, }, + { "tn", function() Snacks.picker.notifications() end }, + }, + init = function() + vim.api.nvim_create_autocmd("User", { + pattern = "VeryLazy", + callback = function() + _G.inspect = function(...) + Snacks.debug.inspect(...) + end + _G.backtrace = function() + Snacks.debug.backtrace() + end + vim.print = _G.inspect + end, + }) + end +} diff --git a/home/.config/nvim/lua/plugs/surround.lua b/nvim/lua/plugs/surround.lua similarity index 100% rename from home/.config/nvim/lua/plugs/surround.lua rename to nvim/lua/plugs/surround.lua diff --git a/home/.config/nvim/lua/plugs/treesitter.lua b/nvim/lua/plugs/treesitter.lua similarity index 98% rename from home/.config/nvim/lua/plugs/treesitter.lua rename to nvim/lua/plugs/treesitter.lua index dbed89d..1ca9ac1 100644 --- a/home/.config/nvim/lua/plugs/treesitter.lua +++ b/nvim/lua/plugs/treesitter.lua @@ -47,6 +47,8 @@ return { "dap_repl", "muttrc", "python", + "latex", + "typst", }, sync_install = false, -- This can be updated to a list of languages instead of defaulting to true diff --git a/home/.config/nvim/lua/terminal.lua b/nvim/lua/terminal.lua similarity index 75% rename from home/.config/nvim/lua/terminal.lua rename to nvim/lua/terminal.lua index fd522f9..c95e852 100644 --- a/home/.config/nvim/lua/terminal.lua +++ b/nvim/lua/terminal.lua @@ -1,10 +1,8 @@ -local utils = require("utils") -local wm = require("window_management") - local terminal_window = nil local terminal_bufnr = nil local function open_terminal_window() + local utils = require("utils") if terminal_bufnr and vim.api.nvim_buf_is_valid(terminal_bufnr) and utils.is_buf_buftype(terminal_bufnr, "terminal") then vim.cmd("botright split") terminal_window = vim.api.nvim_get_current_win() @@ -23,27 +21,22 @@ local function toggle_terminal() return end + local utils = require("utils") open_terminal_window() - local term_height = vim.api.nvim_get_option("lines") + local term_height = vim.api.nvim_get_option_value("lines", {}) local height_percentage = 0.225 local min_height = 15 local max_height = 25 local height = utils.calculate_split_size(term_height, height_percentage, min_height, max_height) vim.api.nvim_win_set_height(terminal_window, height) - vim.api.nvim_win_set_option(terminal_window, "winfixheight", true) + vim.api.nvim_set_option_value("winfixheight", true, { win = terminal_window }) utils.lock_buf_to_window(terminal_window, terminal_bufnr, "terminal") vim.api.nvim_command("startinsert") end -utils.add_keymaps({ - n = { - ["h"] = { - cmd = function() - toggle_terminal() - wm.autosize_windows() - end, - } - } -}) +vim.keymap.set("n", "h", function() + toggle_terminal() + require("window_management").autosize_windows() +end) diff --git a/nvim/lua/utils.lua b/nvim/lua/utils.lua new file mode 100644 index 0000000..8b221c7 --- /dev/null +++ b/nvim/lua/utils.lua @@ -0,0 +1,124 @@ +local M = {} + +function M.set_keymap_list(keymap_list, mode) + mode = mode or "n" + M.foreach(keymap_list, function(mapping) + vim.keymap.set(mode, mapping[1], mapping[2], mapping[3] or {}) + end) +end + +function M.del_keymap_list(keymap_list, mode) + mode = mode or "n" + M.foreach(keymap_list, function(mapping) + vim.keymap.del(mode, mapping[1]) + end) +end + +function M.get_file_names_in_dir(dir, expr, strip_extension) + local path = vim.fn.stdpath("config") .. "/lua/" .. dir + local files_str = vim.fn.globpath(path, expr, true) + local has_line_breaks = vim.fn.match(files_str, [[\n]]) > -1 + local files = has_line_breaks and vim.fn.split(files_str, "\n") or { files_str } + + local should_strip_extension = strip_extension or false + if should_strip_extension then + return vim.tbl_map(function(file) + return vim.fn.fnamemodify(file, ":t:r") + end, files) + else + return files + end +end + +function M.validate_bufnr(bufnr) + vim.validate('bufnr', bufnr, 'number') + return bufnr == 0 and vim.api.nvim_get_current_buf() or bufnr +end + +function M.xpcallmsg(fn, err_msg, err_container) + return xpcall(fn, function(err) + if err_container then + table.insert(err_container, err_msg .. ": " .. err) + else + error(err_msg .. ": " .. err) + end + end) +end + +function M.foreach(t, f) + for _, v in pairs(t) do + f(v) + end +end + +function M.create_user_event_cb(event_name, function_callback, augroup) + assert(event_name and event_name ~= "", "Event name must be provided") + assert(function_callback and type(function_callback) == "function", "Callback must be a valid function") + + local cmd = { + callback = function_callback, + pattern = event_name, + } + + if augroup then + cmd.group = augroup + end + + vim.api.nvim_create_autocmd("User", cmd) +end + +function M.broadcast_event(event_name) + vim.api.nvim_command("doautocmd User " .. event_name) +end + +function M.add_opts_to_all_mappings(mappings, opts) + assert(opts and mappings) + + for _, modes in pairs(mappings) do + for _, mapping in pairs(modes) do + local existing_opts = mapping.opts or {} + mapping.opts = vim.tbl_extend("force", existing_opts, opts) + end + end +end + +function M.is_buf_filetype(bufnr, filetype) + return vim.api.nvim_get_option_value("filetype", { buf = bufnr }) == filetype +end + +function M.is_buf_buftype(bufnr, buftype) + return vim.api.nvim_get_option_value("buftype", { buf = bufnr }) == buftype +end + +function M.lock_buf_to_window(win_id, bufnr, filetype) + local augroup_id = vim.api.nvim_create_augroup("LockWindow" .. win_id, { clear = true }) + + vim.api.nvim_create_autocmd("BufEnter", { + group = augroup_id, + callback = function() + local current_win = vim.api.nvim_get_current_win() + if current_win ~= win_id then + return + end + + local current_buf = vim.api.nvim_win_get_buf(win_id) + if current_buf == bufnr then + return + end + + if M.is_buf_filetype(current_buf, filetype) then + bufnr = current_buf + return + end + + vim.api.nvim_win_set_buf(win_id, bufnr) + end, + }) +end + +function M.calculate_split_size(term_size, percentage, min_size, max_size) + local calculated_size = math.floor(term_size * percentage) + return math.min(math.max(calculated_size, min_size), max_size) +end + +return M diff --git a/home/.config/nvim/lua/vim_opt.lua b/nvim/lua/vim_opt.lua similarity index 94% rename from home/.config/nvim/lua/vim_opt.lua rename to nvim/lua/vim_opt.lua index 56440a7..b434698 100644 --- a/home/.config/nvim/lua/vim_opt.lua +++ b/nvim/lua/vim_opt.lua @@ -66,8 +66,9 @@ opt.termsync = true opt.scrolloff = 4 -- Whitespaces --- opt.listchars = { tab = "→\"", trail = "·", nbsp = "␣" } --- opt.list = true opt.list = false +-- Sessions +opt.sessionoptions = { "buffers", "curdir", "winsize", "winpos", "skiprtp" } + return opt diff --git a/home/.config/nvim/lua/window_management.lua b/nvim/lua/window_management.lua similarity index 74% rename from home/.config/nvim/lua/window_management.lua rename to nvim/lua/window_management.lua index 5df5400..e64525c 100644 --- a/home/.config/nvim/lua/window_management.lua +++ b/nvim/lua/window_management.lua @@ -26,7 +26,7 @@ local function window_has_valid_buffer(window) return false end - local buf_type = vim.api.nvim_buf_get_option(buf, "buftype") + local buf_type = vim.api.nvim_get_option_value("buftype", { buf = buf }) if buf_type ~= "" then return false end @@ -189,75 +189,35 @@ end function M.setup() local resizing_mode_keymaps = { - n = { - [""] = { - cmd = function() resize_window(vim.api.nvim_get_current_win(), "h") end - }, - [""] = { - cmd = function() resize_window(vim.api.nvim_get_current_win(), "j") end - }, - [""] = { - cmd = function() resize_window(vim.api.nvim_get_current_win(), "k") end - }, - [""] = { - cmd = function() resize_window(vim.api.nvim_get_current_win(), "l") end - }, - [""] = { - cmd = function() exit_resizing_mode() end - }, - [""] = { - cmd = function() exit_resizing_mode() end - }, - ["="] = { - cmd = function() M.autosize_windows() end - }, - } + { "", function() resize_window(vim.api.nvim_get_current_win(), "h") end }, + { "", function() resize_window(vim.api.nvim_get_current_win(), "j") end }, + { "", function() resize_window(vim.api.nvim_get_current_win(), "k") end }, + { "", function() resize_window(vim.api.nvim_get_current_win(), "l") end }, + { "", function() exit_resizing_mode() end }, + { "", function() exit_resizing_mode() end }, + { "=", function() M.autosize_windows() end }, } local enter_resizing_mode_keymaps = { - n = { - [""] = { - cmd = function() enter_resizing_mode() end - } - }, + { "", function() enter_resizing_mode() end } } local window_shifting_keymaps = { - n = { - [""] = { - cmd = function() - swap_window("h") - end - }, - [""] = { - cmd = function() - swap_window("j") - end - }, - [""] = { - cmd = function() - swap_window("k") - end - }, - [""] = { - cmd = function() - swap_window("l") - end - }, - }, + { "", function() swap_window("h") end }, + { "", function() swap_window("j") end }, + { "", function() swap_window("k") end }, + { "", function() swap_window("l") end }, } - utils.add_keymaps({ - window_shifting_keymaps, - enter_resizing_mode_keymaps - }) + utils.set_keymap_list(window_shifting_keymaps) + utils.set_keymap_list(enter_resizing_mode_keymaps) local function on_resize_mode_enter() - utils.remove_keymaps(enter_resizing_mode_keymaps) - utils.add_keymaps(resizing_mode_keymaps) + utils.del_keymap_list(enter_resizing_mode_keymaps) + utils.set_keymap_list(resizing_mode_keymaps) end local function on_resize_mode_exit() - utils.remove_keymaps(resizing_mode_keymaps) - utils.add_keymaps(enter_resizing_mode_keymaps) + utils.del_keymap_list(resizing_mode_keymaps) + utils.set_keymap_list(enter_resizing_mode_keymaps) end local window_management_augroup = "WindowManagementEvents" diff --git a/home/.config/starship.toml b/starship/starship.toml similarity index 100% rename from home/.config/starship.toml rename to starship/starship.toml diff --git a/linux_home/.config/sway/ayu_mirage b/sway/ayu_mirage similarity index 100% rename from linux_home/.config/sway/ayu_mirage rename to sway/ayu_mirage diff --git a/linux_home/.config/sway/catppuccin_macchiato b/sway/catppuccin_macchiato similarity index 100% rename from linux_home/.config/sway/catppuccin_macchiato rename to sway/catppuccin_macchiato diff --git a/linux_home/.config/sway/config b/sway/config similarity index 100% rename from linux_home/.config/sway/config rename to sway/config diff --git a/linux_home/.config/sway/dim_inactive.windows.py b/sway/dim_inactive.windows.py similarity index 100% rename from linux_home/.config/sway/dim_inactive.windows.py rename to sway/dim_inactive.windows.py diff --git a/linux_home/.config/sway/idle.sh b/sway/idle.sh similarity index 100% rename from linux_home/.config/sway/idle.sh rename to sway/idle.sh diff --git a/linux_home/.config/sway/status.sh b/sway/status.sh similarity index 100% rename from linux_home/.config/sway/status.sh rename to sway/status.sh diff --git a/linux_home/.config/sway/toggle_keyboard_layout.sh b/sway/toggle_keyboard_layout.sh similarity index 100% rename from linux_home/.config/sway/toggle_keyboard_layout.sh rename to sway/toggle_keyboard_layout.sh diff --git a/home/.tmux.conf b/tmux/.tmux.conf similarity index 88% rename from home/.tmux.conf rename to tmux/.tmux.conf index 3f590ef..da44145 100644 --- a/home/.tmux.conf +++ b/tmux/.tmux.conf @@ -6,6 +6,10 @@ bind-key -n M-Left select-pane -L bind-key -n M-Down select-pane -D bind-key -n M-Up select-pane -U bind-key -n M-Right select-pane -R +bind-key -n M-h select-pane -L +bind-key -n M-j select-pane -D +bind-key -n M-k select-pane -U +bind-key -n M-l select-pane -R # Resize mode set -g @tmux_resize_mode 0 @@ -20,18 +24,22 @@ bind-key -n Up if -F "#{==:#{@tmux_resize_mode},1}" "resize-pane -U" "send-keys bind-key -n Down if -F "#{==:#{@tmux_resize_mode},1}" "resize-pane -D" "send-keys Down" bind-key -n Left if -F "#{==:#{@tmux_resize_mode},1}" "resize-pane -L" "send-keys Left" bind-key -n Right if -F "#{==:#{@tmux_resize_mode},1}" "resize-pane -R" "send-keys Right" +bind-key -n k if -F "#{==:#{@tmux_resize_mode},1}" "resize-pane -U" "send-keys k" +bind-key -n j if -F "#{==:#{@tmux_resize_mode},1}" "resize-pane -D" "send-keys j" +bind-key -n h if -F "#{==:#{@tmux_resize_mode},1}" "resize-pane -L" "send-keys h" +bind-key -n l if -F "#{==:#{@tmux_resize_mode},1}" "resize-pane -R" "send-keys l" bind-key -n M-p display-message "#{@tmux_resize_mode}" bind-key -n M-d run-shell "~/.config/tmux/tmux-fuzzy-find-session.sh" # Split window, change keybindings to match vim concept of splits -bind-key -n M-v split-window -h -bind-key -n M-h split-window -v +bind-key -n M-V split-window -h -c "#{pane_current_path}" +bind-key -n M-H split-window -v -c "#{pane_current_path}" bind-key -n M-q kill-pane bind-key -n M-f resize-pane -Z bind-key -n M-s command-prompt -p "New session: " "run-shell '~/.config/tmux/tmux-create-session.sh '%%''" -bind-key -n M-w new-window +bind-key -n M-w new-window -c "#{pane_current_path}" bind-key -n M-r command-prompt -p "Rename window:" "rename-window '%%'" bind-key -n M-R command-prompt -p "Rename session:" "rename-session '%%'" @@ -118,7 +126,7 @@ setw -g window-status-format "#[bg=#171B24,fg=#CCCAC2] #[bold]#I #[default] #[fg setw -g window-status-current-format "#[bg=#757B84,fg=#EFEDE7] #[bold]#I #[default] #[fg=#FFAD66]#W #[default]" # Set the right status: Battery, date and time, session name -set -g status-right "#($HOME/.config/tmux/tmux-status-right.sh) | #S#[default]" +set -g status-right "#($HOME/.config/tmux/tmux-status-right.sh)" set -g status-bg "#171B24" set -g status-style bold diff --git a/home/.config/tmux/tmux-create-session.sh b/tmux/tmux-create-session.sh similarity index 88% rename from home/.config/tmux/tmux-create-session.sh rename to tmux/tmux-create-session.sh index 19265b7..eb06e79 100755 --- a/home/.config/tmux/tmux-create-session.sh +++ b/tmux/tmux-create-session.sh @@ -1,5 +1,3 @@ -#!/bin/zsh - session_name=$1 tmux new-session -d -s $session_name tmux switch-client -t $session_name diff --git a/home/.config/tmux/tmux-fuzzy-find-session.sh b/tmux/tmux-fuzzy-find-session.sh similarity index 99% rename from home/.config/tmux/tmux-fuzzy-find-session.sh rename to tmux/tmux-fuzzy-find-session.sh index 3851bad..0744dc5 100755 --- a/home/.config/tmux/tmux-fuzzy-find-session.sh +++ b/tmux/tmux-fuzzy-find-session.sh @@ -1,5 +1,3 @@ -#!/bin/zsh - # Run fzf-tmux in the background and serialize the input ( current_session=$(tmux display-message -p '#S') diff --git a/home/.config/tmux/tmux-move-pane.sh b/tmux/tmux-move-pane.sh similarity index 97% rename from home/.config/tmux/tmux-move-pane.sh rename to tmux/tmux-move-pane.sh index 8115fbf..d83dd82 100755 --- a/home/.config/tmux/tmux-move-pane.sh +++ b/tmux/tmux-move-pane.sh @@ -1,5 +1,3 @@ -#!/bin/zsh - source_pane=$(tmux display-message -p '#{pane_id}') target_window=$1 diff --git a/home/.config/tmux/tmux-rename-window.sh b/tmux/tmux-rename-window.sh similarity index 98% rename from home/.config/tmux/tmux-rename-window.sh rename to tmux/tmux-rename-window.sh index 437e930..c675173 100755 --- a/home/.config/tmux/tmux-rename-window.sh +++ b/tmux/tmux-rename-window.sh @@ -1,4 +1,3 @@ -#!/bin/zsh # program blacklist # program=$( # ps -o comm= -t "$(tmux display-message -p '#{pane_tty}')" 2>/dev/null \ diff --git a/home/.config/tmux/tmux-set-resize-mode.sh b/tmux/tmux-set-resize-mode.sh similarity index 96% rename from home/.config/tmux/tmux-set-resize-mode.sh rename to tmux/tmux-set-resize-mode.sh index 388e7b7..529d666 100755 --- a/home/.config/tmux/tmux-set-resize-mode.sh +++ b/tmux/tmux-set-resize-mode.sh @@ -1,5 +1,3 @@ -#!/bin/zsh - desired_state=$1 current_state=$(tmux show-environment -g @resize_mode 2>/dev/null | cut -d '=' -f 2) diff --git a/home/.config/tmux/tmux-status-right.sh b/tmux/tmux-status-right.sh similarity index 72% rename from home/.config/tmux/tmux-status-right.sh rename to tmux/tmux-status-right.sh index b8eed96..cf6c7ad 100755 --- a/home/.config/tmux/tmux-status-right.sh +++ b/tmux/tmux-status-right.sh @@ -9,7 +9,11 @@ battery_result=$($HOME/.config/confutils/get-battery.sh) space=" " session=$(format_for_tmux "#S") -battery=$(format_for_tmux "$battery_result") calendar=$(format_for_tmux " $(date +"%a %b %d")") -echo $session$space$battery$space$calendar +if [ -n "$battery_result" ]; then + battery=$(format_for_tmux "$battery_result") + echo $session$space$battery$space$calendar +else + echo $session$space$calendar +fi diff --git a/home/.config/wallpapers/Clearday.jpg b/wallpapers/Clearday.jpg similarity index 100% rename from home/.config/wallpapers/Clearday.jpg rename to wallpapers/Clearday.jpg diff --git a/home/.config/wallpapers/Cloudsday.jpg b/wallpapers/Cloudsday.jpg similarity index 100% rename from home/.config/wallpapers/Cloudsday.jpg rename to wallpapers/Cloudsday.jpg diff --git a/home/.config/wallpapers/catppuccin/astronout.png b/wallpapers/catppuccin/astronout.png similarity index 100% rename from home/.config/wallpapers/catppuccin/astronout.png rename to wallpapers/catppuccin/astronout.png diff --git a/home/.config/wallpapers/catppuccin/cloudsnight.jpg b/wallpapers/catppuccin/cloudsnight.jpg similarity index 100% rename from home/.config/wallpapers/catppuccin/cloudsnight.jpg rename to wallpapers/catppuccin/cloudsnight.jpg diff --git a/home/.config/wallpapers/catppuccin/dino_landscape.jpg b/wallpapers/catppuccin/dino_landscape.jpg similarity index 100% rename from home/.config/wallpapers/catppuccin/dino_landscape.jpg rename to wallpapers/catppuccin/dino_landscape.jpg diff --git a/home/.config/wallpapers/catppuccin/home_water.jpeg b/wallpapers/catppuccin/home_water.jpeg similarity index 100% rename from home/.config/wallpapers/catppuccin/home_water.jpeg rename to wallpapers/catppuccin/home_water.jpeg diff --git a/home/.config/wallpapers/catppuccin/lonely-fish.png b/wallpapers/catppuccin/lonely-fish.png similarity index 100% rename from home/.config/wallpapers/catppuccin/lonely-fish.png rename to wallpapers/catppuccin/lonely-fish.png diff --git a/home/.config/wallpapers/catppuccin/samurai_water.webp b/wallpapers/catppuccin/samurai_water.webp similarity index 100% rename from home/.config/wallpapers/catppuccin/samurai_water.webp rename to wallpapers/catppuccin/samurai_water.webp diff --git a/home/.config/wallpapers/tokyonight/Rainnight.jpg b/wallpapers/tokyonight/Rainnight.jpg similarity index 100% rename from home/.config/wallpapers/tokyonight/Rainnight.jpg rename to wallpapers/tokyonight/Rainnight.jpg diff --git a/home/.config/yazi/yazi.toml b/yazi/yazi.toml similarity index 100% rename from home/.config/yazi/yazi.toml rename to yazi/yazi.toml diff --git a/home/.zshrc b/zsh/.zshrc similarity index 100% rename from home/.zshrc rename to zsh/.zshrc