From db0d3170e9cd96a8c7ddab43ccebb507f745417a Mon Sep 17 00:00:00 2001 From: Sokhibjon Orzikulov Date: Mon, 1 Jul 2024 22:52:58 +0500 Subject: [PATCH] added homeManagerModules to instances itself --- flake.nix | 4 + modules/home/default.nix | 13 + modules/home/git/default.nix | 69 ++++ modules/home/helix/default.nix | 60 ++++ modules/home/neovim/default.nix | 149 +++++++++ modules/home/neovim/readme.md | 228 +++++++++++++ modules/home/neovim/user/init.lua | 458 ++++++++++++++++++++++++++ modules/home/neovim/user/mappings.lua | 68 ++++ modules/home/nixpkgs/default.nix | 33 ++ modules/home/packages/default.nix | 32 ++ modules/home/packages/global.nix | 55 ++++ modules/home/packages/linux.nix | 5 + modules/home/packages/osx.nix | 6 + modules/home/terminal/default.nix | 54 +++ modules/home/topgrade/default.nix | 30 ++ modules/home/zsh/default.nix | 205 ++++++++++++ modules/home/zsh/starship.nix | 10 + modules/home/zsh/zoxide.nix | 7 + 18 files changed, 1486 insertions(+) create mode 100644 modules/home/default.nix create mode 100644 modules/home/git/default.nix create mode 100644 modules/home/helix/default.nix create mode 100644 modules/home/neovim/default.nix create mode 100644 modules/home/neovim/readme.md create mode 100644 modules/home/neovim/user/init.lua create mode 100644 modules/home/neovim/user/mappings.lua create mode 100644 modules/home/nixpkgs/default.nix create mode 100644 modules/home/packages/default.nix create mode 100644 modules/home/packages/global.nix create mode 100644 modules/home/packages/linux.nix create mode 100644 modules/home/packages/osx.nix create mode 100644 modules/home/terminal/default.nix create mode 100644 modules/home/topgrade/default.nix create mode 100644 modules/home/zsh/default.nix create mode 100644 modules/home/zsh/starship.nix create mode 100644 modules/home/zsh/zoxide.nix diff --git a/flake.nix b/flake.nix index 14f7a9c..78d374b 100644 --- a/flake.nix +++ b/flake.nix @@ -126,6 +126,10 @@ # These are usually stuff you would upstream services to global serverModules = import ./modules/server; + # Reusable home-manager modules you might want to export + # These are usually stuff you would upstream into home-manager + homeManagerModules = import ./modules/home; + # NixOS configuration entrypoint # Available through 'nixos-rebuild --flake .#your-hostname' nixosConfigurations = { diff --git a/modules/home/default.nix b/modules/home/default.nix new file mode 100644 index 0000000..dcea36b --- /dev/null +++ b/modules/home/default.nix @@ -0,0 +1,13 @@ +# Add your reusable home-manager modules to this directory, on their own file (https://nixos.wiki/wiki/Module). +# These should be stuff you would like to share with others, not your personal configurations. +{ + # List your module files here + git = import ./git; + zsh = import ./zsh; + helix = import ./helix; + neovim = import ./neovim; + nixpkgs = import ./nixpkgs; + terminal = import ./terminal; + topgrade = import ./topgrade; + packages = import ./packages; +} diff --git a/modules/home/git/default.nix b/modules/home/git/default.nix new file mode 100644 index 0000000..9709521 --- /dev/null +++ b/modules/home/git/default.nix @@ -0,0 +1,69 @@ +{ + config, + pkgs, + lib, + ... +}: let + isMacOS = pkgs.stdenv.hostPlatform.system == "aarch64-darwin" || pkgs.stdenv.hostPlatform.system == "x86_64-darwin"; +in { + options = { + git = { + isMacOS = lib.mkOption { + type = lib.types.bool; + default = isMacOS; + description = "Install MacOS specific agent."; + }; + }; + }; + + config = { + # Git Configurations + programs.git = { + enable = true; + lfs.enable = true; + + # User credentials + userName = "Sokhibjon Orzikulov"; + userEmail = "sakhib@orzklv.uz"; + + extraConfig = { + http.sslVerify = false; + }; + + # GPG Signing + signing = { + signByDefault = true; + key = "00D27BC687070683FBB9137C3C35D3AF0DA1D6A8"; + }; + + # Aliases + aliases = { + ch = "checkout"; + }; + + # Git ignores + ignores = [ + ".idea" + ".DS_Store" + ]; + }; + + home.file.".gnupg/gpg-agent.conf".text = + if config.git.isMacOS + then '' + pinentry-program ${pkgs.pinentry_mac}/Applications/pinentry-mac.app/Contents/MacOS/pinentry-mac + '' + else '' + pinentry-program ${pkgs.kwalletcli}/bin/pinentry-kwallet + ''; + + home.file.".gnupg/gpg.conf".text = + if config.git.isMacOS + then '' + no-tty + use-agent + '' + else '' + ''; + }; +} diff --git a/modules/home/helix/default.nix b/modules/home/helix/default.nix new file mode 100644 index 0000000..580aa18 --- /dev/null +++ b/modules/home/helix/default.nix @@ -0,0 +1,60 @@ +{pkgs, ...}: { + config = { + programs.helix = { + enable = true; + + settings = { + theme = "autumn_night"; + + editor = { + line-number = "relative"; + + cursor-shape = { + insert = "bar"; + normal = "block"; + select = "underline"; + }; + + file-picker = { + hidden = false; + git-ignore = true; + git-global = true; + }; + + statusline = { + left = ["mode" "spinner"]; + + center = ["file-name"]; + + right = [ + "diagnostics" + "selections" + "position" + "file-encoding" + "file-line-ending" + "file-type" + ]; + + separator = "│"; + + mode = { + normal = "SLAVE"; + insert = "MASTER"; + select = "DUNGEON"; + }; + }; + }; + + keys.normal = { + # Easy window movement + "C-left" = "jump_view_left"; + "C-right" = "jump_view_right"; + "C-up" = "jump_view_up"; + "C-down" = "jump_view_down"; + + "C-r" = ":reload"; + }; + }; + }; + }; +} diff --git a/modules/home/neovim/default.nix b/modules/home/neovim/default.nix new file mode 100644 index 0000000..59c6f71 --- /dev/null +++ b/modules/home/neovim/default.nix @@ -0,0 +1,149 @@ +{ + inputs, + pkgs, + ... +}: { + imports = []; + + xdg.configFile = { + # astronvim's config + "nvim".source = inputs.astronvim; + + # my custom astronvim config, astronvim will load it after base config + # https://github.com/AstroNvim/AstroNvim/blob/v3.32.0/lua/astronvim/bootstrap.lua#L15-L16 + "astronvim/lua/user".source = ./user; + }; + + nixpkgs.config = { + programs.npm.npmrc = '' + prefix = ''${HOME}/.npm-global + ''; + }; + + programs = { + neovim = { + enable = true; + + defaultEditor = true; + viAlias = true; + vimAlias = true; + + # currently we use lazy.nvim as neovim's package manager, so comment this one. + # plugins = with pkgs.vimPlugins; [ + # # search all the plugins using https://search.nixos.org/packages + # ]; + + # Extra packages only available to nvim(won't pollute the global home environment) + extraPackages = with pkgs; + [ + #-- c/c++ + cmake + cmake-language-server + gnumake + checkmake + gcc # c/c++ compiler, required by nvim-treesitter! + llvmPackages.clang-unwrapped # c/c++ tools with clang-tools such as clangd + lldb + + #-- python + python3Packages.black # python formatter + python3Packages.ruff-lsp + (python3.withPackages ( + ps: + with ps; [ + pynvim # Python client and plugin host for Nvim + + ipython + pandas + requests + pyquery + pyyaml + ] + )) + + #-- rust + rust-analyzer + cargo # rust package manager + rustfmt + + #-- zig + zls + + #-- nix + nil + # nixd + statix # Lints and suggestions for the nix programming language + deadnix # Find and remove unused code in .nix source files + alejandra # Nix Code Formatter + + #-- golang + go + gomodifytags + iferr # generate error handling code for go + impl # generate function implementation for go + gotools # contains tools like: godoc, goimports, etc. + gopls # go language server + delve # go debugger + + # -- java + jdk17 + gradle + maven + spring-boot-cli + + #-- lua + stylua + lua-language-server + + #-- bash + nodePackages.bash-language-server + shellcheck + shfmt + + #-- javascript/typescript --# + nodePackages.nodejs + nodePackages.typescript + nodePackages.typescript-language-server + # HTML/CSS/JSON/ESLint language servers extracted from vscode + nodePackages.vscode-langservers-extracted + nodePackages."@tailwindcss/language-server" + + #-- CloudNative + nodePackages.dockerfile-language-server-nodejs + emmet-ls + jsonnet + jsonnet-language-server + hadolint # Dockerfile linter + + #-- Others + taplo # TOML language server / formatter / validator + nodePackages.yaml-language-server + sqlfluff # SQL linter + actionlint # GitHub Actions linter + buf # protoc plugin for linting and formatting + proselint # English prose linter + guile # scheme language + + #-- Misc + tree-sitter # common language parser/highlighter + nodePackages.prettier # common code formatter + marksman # language server for markdown + glow # markdown previewer + fzf + + #-- Optional Requirements: + gdu # disk usage analyzer, required by AstroNvim + ripgrep # fast search tool, required by AstroNvim's 'fw'( is space key) + ] + ++ ( + if pkgs.stdenv.isDarwin + then [] + else [ + #-- verilog / systemverilog + verible + gdb + ] + ); + }; + }; +} diff --git a/modules/home/neovim/readme.md b/modules/home/neovim/readme.md new file mode 100644 index 0000000..73d728f --- /dev/null +++ b/modules/home/neovim/readme.md @@ -0,0 +1,228 @@ +# AstroNvim Configuration and Shortcuts + +My Neovim config based on [AstroNvim](https://github.com/AstroNvim/AstroNvim). +For more details, visit the [AstroNvim website](https://astronvim.com/). + +This document outlines neovim's configuration structure and various shortcuts/commands for efficient usage. + +## Configuration Structure + +| Description | Standard Location | My Location | +| ------------------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------- | +| Neovim's config | `~/.config/nvim` | AstroNvim's github repository, referenced as a flake input in this flake. | +| AstroNvim's user configuration | `$XDG_CONFIG_HOME/astronvim/lua/user` | [./astronvim_user/](./astronvim_user/) | +| Plugins installation directory (lazy.nvim) | `~/.local/share/nvim/` | The same as standard location, generated and managed by lazy.nvim. | +| LSP servers, DAP servers, linters, and formatters | `~/.local/share/nvim/mason/`(by mason.nvim) | [./default.nix](./default.nix), installed by nix. | + +## Update/Clean Plugins + +Note that lazy.nvim will not automatically update plugins, so you need to update them manually. + +```bash +:Lazy update +``` + +Remove all unused plugins: + +```bash +:Lazy clean +``` + +## Screenshots + +![](/_img/astronvim_2023-07-13_00-39.webp) +![](/_img/hyprland_2023-07-29_2.webp) + +## Visual Modes + +| Action | Shortcut | +| ------------------------ | ---------------------------------------- | +| Toggle visual mode | `v` | +| Toggle visual block mode | ` + v` (select a block vertically) | + +## Incremental Selection + +Provided by nvim-treesitter. + +| Action | Shortcut | +| ----------------- | -------------- | +| init selection | `` | +| node incremental | `` | +| scope incremental | `` | +| node decremental | `Backspace` | + +## Search and Jump + +Provided by [flash.nvim](https://github.com/folke/flash.nvim), it's a intelligent search and jump plugin. + +1. It enhaces the default search and jump behavior of neovim.(search with prefix `/`) + +| Action | Shortcut | +| ----------------- | ------------------------------------------------------------------------------------------------------------- | +| Search | `/`(normal search), `s`(disable all code highlight, only highlight matches) | +| Treesitter Search | `yR`,`dR`, `cR`, `vR`, `ctrl+v+R`(arround your matches, all the surrounding Treesitter nodes will be labeled) | +| Remote Flash | `yr`, `dr`, `cr`, (arround your matches, all the surrounding Treesitter nodes will be labeled) | + +## Text Manipulation + +- Add at the end of multiple lines: `:normal A` + + - Execublock: `:A` + + - visual block mode(ctrl + v) + - Append text at the end of each line in the selected block + - If position exceeds line end, neovim adds spaces automatically + +- Delete the last char of multivle lines: `:normal $x` + + - Execute `$x` on each line + - visual mode(v) + - `$` moves cursor to the end of line + - `x` deletes the character under the cursor + +- Delete the last word of multiple lines: `:normal $bD` + - Execute `$bD` on each line + - visual mode(v) + - `$` moves cursor to the end of line + - `b` moves cursor to the beginning of the last word + - `D` deletes from cursor to the end of line + +## Commands & Shortcuts + +| Action | Shortcut | +| ----------------------------- | -------------- | +| Learn Neovim's Basics | `:Tutor` | +| Open file explorer | ` + e` | +| Focus Neotree to current file | ` + o` | +| Floating Terminal | ` + tf` | +| Horizontal Split Terminal | ` + th` | +| Vertical Split Terminal | ` + tv` | +| Open IPython REPL | ` + tp` | +| Toggle line wrap | ` + uw` | +| Show line diagnostics | `gl` | +| Show function/variable info | `K` | +| Go to definition | `gd` | +| References of a symbol | `gr` | + +## Window Navigation + +- Switch between windows: ` + h/j/k/l` +- Resize windows: ` + Up/Down/Left/Right` + - Note: On macOS, conflicts with system shortcuts + - Disable in System Preferences -> Keyboard -> Shortcuts -> Mission Control + +## Splitting and Buffers + +| Action | Shortcut | +| --------------------- | ------------- | +| Horizontal Split | `\` | +| Vertical Split | `\|` | +| Next Buffer (Tab) | `]b` | +| Previous Buffer (Tab) | `[b` | +| Close Buffer | ` + c` | + +## Editing and Formatting + +| Action | Shortcut | +| ----------------------------------------------------- | -------------- | +| Toggle buffer auto formatting | ` + uf` | +| Format Document | ` + lf` | +| Code Actions | ` + la` | +| Rename | ` + lr` | +| Opening LSP symbols | ` + lS` | +| Comment Line(support multiple lines) | ` + /` | +| Open filepath/URL at cursor(neovim's builtin command) | `gx` | +| Find files by name (fzf) | ` + ff` | +| Grep string in files (ripgrep) | ` + fw` | + +## Sessions + +| Action | Shortcut | +| ------------------------------ | -------------- | +| Save Session | ` + Ss` | +| Last Session | ` + Sl` | +| Delete Session | ` + Sd` | +| Search Session | ` + Sf` | +| Load Current Directory Session | ` + S.` | + +## Debugging + +Press ` + D` to view available bindings and options. + +## Find and Replace + +| Action | Command | +| ------------------------ | ----------------------------------- | +| Replace in selected area | `:s/old/new/g` | +| Replace in current line | Same as above | +| Replace in whole file | `:% s/old/new/g` | +| Replace with regex | `:% s@\vhttp://(\w+)@https://\1@gc` | + +1. `\v` means means that in the regex pattern after it can be used without backslash escaping(similar to python's raw string). +2. `\1` means the first matched group in the pattern. + +## Replace in the specific lines + +| Action | Command | +| ----------------------------------------- | -------------------------------------- | +| From the 10th line to the end of the file | `:10,$ s/old/new/g` or `:10,$ s@^@#@g` | +| From the 10th line to the 20th line | `:10,20 s/old/new/g` | + +The postfix(flags) in the above commands: + +1. `g` means replace all the matched strings in the current line/file. +2. `c` means ask for confirmation before replacing. +3. `i` means ignore case. + +## Search and Replace Globally + +| Description | Shortcut | +| ------------------------------------------------------------ | ---------------------------------------------------------------- | +| Open spectre.nvim search and replace panel | ` + ss` | +| Search and replace in command line(need install `sad` first) | `find -name "*.nix" \| sad '' '' \| delta` | + +## Surrounding Characters + +Provided by mini.surround plugin. + +- Prefix `gz` + +| Action | Shortcut | Description | +| ------------------------------ | -------- | ----------------------------------------------- | +| Add surrounding characters | `gzaiw'` | Add `'` around the word under cursor | +| Delete surrounding characters | `gzd'` | Delete `'` around the word under cursor | +| Replace surrounding characters | `gzr'"` | Replace `'` by `"` around the word under cursor | +| Highlight surrounding | `gzh'` | Highlight `'` around the word under cursor | + +## Text Manipulation + +| Action | | +| -------------------------------------- | ------------- | +| Join Selection of Lines With Space | `:join` | +| Join without spaces | `:join!` | +| Join with LSP intelligence(treesj) | ` + j` | +| Split Line into Multiple Lines(treesj) | ` + s` | + +## Convert Text Case + +| Action | | +| -------------------- | --- | +| Toggle text's case | `~` | +| Convert to uppercase | `U` | +| Convert to lowercase | `u` | + +## Miscellaneous + +| Action | | +| ---------------------------- | -------------------------------------------- | +| Save selected text to a file | `:w filename` (Will show `:'<,'>w filename`) | +| Show all Yank History | `: + yh` | +| Show undo history | `: + uh` | + +## Additional Resources + +For more detailed information and advanced usage, refer to: + +1. [AstroNvim walkthrough](https://astronvim.com/Basic%20Usage/walkthrough) +2. [./astronvim_user/mapping.lua](./astronvim_user/mappings.lua) +3. All the plugins' documentations \ No newline at end of file diff --git a/modules/home/neovim/user/init.lua b/modules/home/neovim/user/init.lua new file mode 100644 index 0000000..c8ad282 --- /dev/null +++ b/modules/home/neovim/user/init.lua @@ -0,0 +1,458 @@ +return { + colorscheme = "oxocarbon", + + options = { + opt = { + relativenumber = true, -- Show relative numberline + signcolumn = "auto", -- Show sign column when used only + spell = false, -- Spell checking + swapfile = false, -- Swapfile + smartindent = false, -- fix https://github.com/ryan4yin/nix-config/issues/4 + }, + }, + + plugins = { + "AstroNvim/astrocommunity", + -- colorscheme - oxocarbon + { import = "astrocommunity.colorscheme.oxocarbon-nvim" }, + -- Highly experimental plugin that completely replaces + -- the UI for messages, cmdline and the popupmenu. + { import = "astrocommunity.utility.noice-nvim" }, + -- Fully featured & enhanced replacement for copilot.vim + -- work with both auto completion in cmp and copilot + { import = "astrocommunity.motion.leap-nvim" }, + { import = "astrocommunity.motion.flit-nvim" }, + { import = "astrocommunity.scrolling.nvim-scrollbar" }, + { import = "astrocommunity.editing-support.todo-comments-nvim" }, + -- Language Support + ---- Frontend & NodeJS + { import = "astrocommunity.pack.typescript-all-in-one" }, + { import = "astrocommunity.pack.tailwindcss" }, + { import = "astrocommunity.pack.html-css" }, + { import = "astrocommunity.pack.prisma" }, + { import = "astrocommunity.pack.vue" }, + ---- Configuration Language + { import = "astrocommunity.pack.markdown" }, + { import = "astrocommunity.pack.json" }, + { import = "astrocommunity.pack.yaml" }, + { import = "astrocommunity.pack.toml" }, + ---- Backend + { import = "astrocommunity.pack.lua" }, + { import = "astrocommunity.pack.go" }, + { import = "astrocommunity.pack.rust" }, + { import = "astrocommunity.pack.python" }, + { import = "astrocommunity.pack.java" }, + { import = "astrocommunity.pack.nix" }, -- manually add config for nix, comment this one. + { import = "astrocommunity.pack.proto" }, + ---- Operation & Cloud Native + { import = "astrocommunity.pack.terraform" }, + { import = "astrocommunity.pack.bash" }, + { import = "astrocommunity.pack.cmake" }, + { import = "astrocommunity.pack.cpp" }, + { import = "astrocommunity.pack.docker" }, + -- Motion + { import = "astrocommunity.motion.mini-surround" }, + -- https://github.com/echasnovski/mini.ai + { import = "astrocommunity.motion.mini-ai" }, + { import = "astrocommunity.motion.flash-nvim" }, + { "folke/flash.nvim", vscode = false }, + -- Lua implementation of CamelCaseMotion, with extra consideration of punctuation. + { import = "astrocommunity.motion.nvim-spider" }, + -- AI Assistant + { import = "astrocommunity.completion.copilot-lua-cmp" }, + -- Custom copilot-lua to enable filtypes: markdown + { + "zbirenbaum/copilot.lua", + opts = function(_, opts) + opts.filetypes = { + yaml = true, + markdown = true, + } + end, + }, + + { + "0x00-ketsu/autosave.nvim", + -- lazy-loading on events + event = { "InsertLeave", "TextChanged" }, + opts = function(_, opts) + opts.prompt_style = "notify" -- or stdout + end, + }, + + -- markdown preview + { + "0x00-ketsu/markdown-preview.nvim", + ft = { "md", "markdown", "mkd", "mkdn", "mdwn", "mdown", "mdtxt", "mdtext", "rmd", "wiki" }, + config = function() + require("markdown-preview").setup({ + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the setup section below + }) + end, + }, + + -- clipboard manager + { + "gbprod/yanky.nvim", + opts = function() + local mapping = require("yanky.telescope.mapping") + local mappings = mapping.get_defaults() + mappings.i[""] = nil + return { + highlight = { timer = 200 }, + picker = { + telescope = { + use_default_mappings = false, + mappings = mappings, + }, + }, + } + end, + keys = { + { + "y", + "(YankyYank)", + mode = { "n", "x" }, + desc = "Yank text", + }, + { + "p", + "(YankyPutAfter)", + mode = { "n", "x" }, + desc = "Put yanked text after cursor", + }, + { + "P", + "(YankyPutBefore)", + mode = { "n", "x" }, + desc = "Put yanked text before cursor", + }, + { + "gp", + "(YankyGPutAfter)", + mode = { "n", "x" }, + desc = "Put yanked text after selection", + }, + { + "gP", + "(YankyGPutBefore)", + mode = { "n", "x" }, + desc = "Put yanked text before selection", + }, + { "[y", "(YankyCycleForward)", desc = "Cycle forward through yank history" }, + { "]y", "(YankyCycleBackward)", desc = "Cycle backward through yank history" }, + { "]p", "(YankyPutIndentAfterLinewise)", desc = "Put indented after cursor (linewise)" }, + { "[p", "(YankyPutIndentBeforeLinewise)", desc = "Put indented before cursor (linewise)" }, + { "]P", "(YankyPutIndentAfterLinewise)", desc = "Put indented after cursor (linewise)" }, + { "[P", "(YankyPutIndentBeforeLinewise)", desc = "Put indented before cursor (linewise)" }, + { ">p", "(YankyPutIndentAfterShiftRight)", desc = "Put and indent right" }, + { "(YankyPutIndentAfterShiftLeft)", desc = "Put and indent left" }, + { ">P", "(YankyPutIndentBeforeShiftRight)", desc = "Put before and indent right" }, + { "(YankyPutIndentBeforeShiftLeft)", desc = "Put before and indent left" }, + { "=p", "(YankyPutAfterFilter)", desc = "Put after applying a filter" }, + { "=P", "(YankyPutBeforeFilter)", desc = "Put before applying a filter" }, + }, + }, + + -- Enhanced matchparen.vim plugin for Neovim to highlight the outer pair. + { + "utilyre/sentiment.nvim", + version = "*", + event = "VeryLazy", -- keep for lazy loading + opts = { + -- config + }, + init = function() + -- `matchparen.vim` needs to be disabled manually in case of lazy loading + vim.g.loaded_matchparen = 1 + end, + }, + + -- joining blocks of code into oneline, or splitting one line into multiple lines. + { + "Wansmer/treesj", + keys = { "m", "j", "s" }, + dependencies = { "nvim-treesitter/nvim-treesitter" }, + config = function() + require("treesj").setup({ --[[ your config ]] + }) + end, + }, + + -- File explorer(Custom configs) + { + "nvim-neo-tree/neo-tree.nvim", + opts = { + filesystem = { + filtered_items = { + visible = true, -- visible by default + hide_dotfiles = false, + hide_gitignored = false, + }, + }, + }, + }, + -- The plugin offers the alibity to refactor code. + { + "ThePrimeagen/refactoring.nvim", + dependencies = { + { "nvim-lua/plenary.nvim" }, + { "nvim-treesitter/nvim-treesitter" }, + }, + }, + -- The plugin offers the abilibty to search and replace. + { + "nvim-pack/nvim-spectre", + dependencies = { + { "nvim-lua/plenary.nvim" }, + }, + }, + + -- full signature help, docs and completion for the nvim lua API. + { "folke/neodev.nvim", opts = {} }, + + { "RRethy/vim-illuminate", config = function() end }, + + -- Language Parser for syntax highlighting / indentation / folding / Incremental selection + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + local utils = require("astronvim.utils") + opts.incremental_selection = { + enable = true, + keymaps = { + init_selection = "", -- Ctrl + Space + node_incremental = "", + scope_incremental = "", -- Alt + Space + node_decremental = "", -- Backspace + }, + } + opts.ensure_installed = utils.list_insert_unique(opts.ensure_installed, { + -- neovim + "vim", + "lua", + -- operation & cloud native + "dockerfile", + "hcl", + "jsonnet", + "regex", + "terraform", + "nix", + }) + end, + }, + + -- implementation/definition preview + { + "rmagatti/goto-preview", + config = function() + require("goto-preview").setup({}) + end, + }, + + -- Undo tree + { "debugloop/telescope-undo.nvim" }, + + -- Install lsp, formmatter and others via home manager instead of Mason.nvim + -- LSP installations + { + "williamboman/mason-lspconfig.nvim", + -- overwrite ensure_installed to install lsp via home manager(except emmet_ls) + opts = function(_, opts) + opts.ensure_installed = { + "emmet_ls", -- not exist in nixpkgs, so install it via mason + } + end, + }, + -- Formatters/Linter installation + { + "jay-babu/mason-null-ls.nvim", + -- ensure_installed nothing + opts = function(_, opts) + opts.ensure_installed = nil + opts.automatic_installation = false + end, + }, + { + "jose-elias-alvarez/null-ls.nvim", + opts = function(_, opts) + local null_ls = require("null-ls") + local code_actions = null_ls.builtins.code_actions + local diagnostics = null_ls.builtins.diagnostics + local formatting = null_ls.builtins.formatting + local hover = null_ls.builtins.hover + local completion = null_ls.builtins.completion + -- https://github.com/jose-elias-alvarez/null-ls.nvim/blob/main/doc/BUILTINS.md + if type(opts.sources) == "table" then + vim.list_extend(opts.sources, { + -- Common Code Actions + code_actions.gitsigns, + -- common refactoring actions based off the Refactoring book by Martin Fowler + code_actions.refactoring, + code_actions.gomodifytags, -- Go - modify struct field tags + code_actions.impl, -- Go - generate interface method stubs + code_actions.shellcheck, + code_actions.proselint, -- English prose linter + code_actions.statix, -- Lints and suggestions for Nix. + + -- Diagnostic + diagnostics.actionlint, -- GitHub Actions workflow syntax checking + diagnostics.buf, -- check text in current buffer + diagnostics.checkmake, -- check Makefiles + diagnostics.deadnix, -- Scan Nix files for dead code. + + -- Formatting + formatting.prettier, -- js/ts/vue/css/html/json/... formatter + diagnostics.hadolint, -- Dockerfile linter + formatting.black, -- Python formatter + formatting.ruff, -- extremely fast Python linter + formatting.goimports, -- Go formatter + formatting.shfmt, -- Shell formatter + formatting.rustfmt, -- Rust formatter + formatting.taplo, -- TOML formatteautoindentr + formatting.terraform_fmt, -- Terraform formatter + formatting.stylua, -- Lua formatter + formatting.alejandra, -- Nix formatter + formatting.sqlfluff.with({ -- SQL formatter + extra_args = { "--dialect", "postgres" }, -- change to your dialect + }), + formatting.nginx_beautifier, -- Nginx formatter + null_ls.builtins.formatting.verible_verilog_format, -- Verilog formatter + }) + end + end, + }, + -- Debugger installation + { + "jay-babu/mason-nvim-dap.nvim", + -- overrides `require("mason-nvim-dap").setup(...)` + opts = function(_, opts) + opts.ensure_installed = nil + opts.automatic_installation = false + end, + }, + + { + "nvim-telescope/telescope.nvim", + branch = "0.1.x", + dependencies = { "nvim-lua/plenary.nvim" }, + init = function() + -- 1. Disable highlighting for certain filetypes + -- 2. Ignore files larger than a certain filesize + local previewers = require("telescope.previewers") + + local _bad = { ".*%.csv", ".*%.min.js" } -- Put all filetypes that slow you down in this array + local filesize_threshold = 300 * 1024 -- 300KB + local bad_files = function(filepath) + for _, v in ipairs(_bad) do + if filepath:match(v) then + return false + end + end + return true + end + + local new_maker = function(filepath, bufnr, opts) + opts = opts or {} + if opts.use_ft_detect == nil then + opts.use_ft_detect = true + end + + -- 1. Check if the file is in the bad_files array, and if so, don't highlight it + opts.use_ft_detect = opts.use_ft_detect == false and false or bad_files(filepath) + + -- 2. Check the file size, and ignore it if it's too big(preview nothing). + filepath = vim.fn.expand(filepath) + vim.loop.fs_stat(filepath, function(_, stat) + if not stat then + return + end + if stat.size > filesize_threshold then + return + else + previewers.buffer_previewer_maker(filepath, bufnr, opts) + end + end) + end + + require("telescope").setup({ + defaults = { + buffer_previewer_maker = new_maker, + }, + }) + end, + }, + }, + + -- Configure require("lazy").setup() options + lazy = { + defaults = { lazy = true }, + performance = { + rtp = { + -- customize default disabled vim plugins + disabled_plugins = {}, + }, + }, + }, + + -- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md + lsp = { + config = { + -- the offset_enconding of clangd will confilicts whit null-ls + -- so we need to manually set it to utf-8 + clangd = { + capabilities = { + offsetEncoding = "utf-8", + }, + }, + }, + -- enable servers that installed by home-manager instead of mason + servers = { + ---- Frontend & NodeJS + "tsserver", -- typescript/javascript language server + "tailwindcss", -- tailwindcss language server + "html", -- html language server + "cssls", -- css language server + "prismals", -- prisma language server + "volar", -- vue language server + ---- Configuration Language + "marksman", -- markdown ls + "jsonls", -- json language server + "yamlls", -- yaml language server + "taplo", -- toml language server + ---- Backend + "lua_ls", -- lua + "gopls", -- go + "rust_analyzer", -- rust + "pyright", -- python + "ruff_lsp", -- extremely fast Python linter and code transformation + "jdtls", -- java + "nil_ls", -- nix language server + "bufls", -- protocol buffer language server + "zls", -- zig language server + ---- HDL + "verible", -- verilog language server + ---- Operation & Cloud Nativautoindente + "bashls", -- bash + "cmake", -- cmake language server + "clangd", -- c/c++ + "dockerls", -- dockerfile + "jsonnet_ls", -- jsonnet language server + "terraformls", -- terraform hcl + }, + formatting = { + disabled = {}, + format_on_save = { + enabled = true, + allow_filetypes = { + "go", + "jsonnet", + "rust", + "terraform", + }, + }, + }, + }, + } diff --git a/modules/home/neovim/user/mappings.lua b/modules/home/neovim/user/mappings.lua new file mode 100644 index 0000000..e84ff00 --- /dev/null +++ b/modules/home/neovim/user/mappings.lua @@ -0,0 +1,68 @@ +-- Mapping data with "desc" stored directly by vim.keymap.set(). +-- +-- Please use this mappings table to set keyboard mapping since this is the +-- lower level configuration and more robust one. (which-key will +-- automatically pick-up stored data by this setting.) +local utils = require "astronvim.utils" + +require("telescope").load_extension("refactoring") +require("telescope").load_extension("yank_history") +require("telescope").load_extension("undo") + +return { + -- normal mode + n = { + -- second key is the lefthand side of the map + -- mappings seen under group name "Buffer" + ["bn"] = { "tabnew", desc = "New tab" }, + -- quick save + [""] = { ":w!", desc = "Save File" }, -- change description but the same command + + -- Terminal + -- NOTE: https://neovim.io/doc/user/builtin.html#jobstart() + -- 1. If {cmd} is a List it runs directly (no 'shell') + -- 2. If {cmd} is a String it runs in the 'shell' + ["tp"] = { function() utils.toggle_term_cmd({ cmd = "ipython" }) end, desc = "ToggleTerm python" }, + + -- search and replace globally + ['ss'] = {'lua require("spectre").toggle()', desc = "Toggle Spectre" }, + ['sw'] = {'lua require("spectre").open_visual({select_word=true})', desc = "Search current word" }, + ['sp'] ={'lua require("spectre").open_file_search({select_word=true})', desc = "Search on current file" }, + + -- refactoring + ["ri"] = { function() require('refactoring').refactor('Inline Variable') end, desc = "Inverse of extract variable" }, + ["rb"] = { function() require('refactoring').refactor('Extract Block') end, desc = "Extract Block" }, + ["rbf"] = { function() require('refactoring').refactor('Extract Block To File') end, desc = "Extract Block To File" }, + ["rr"] = { function() require('telescope').extensions.refactoring.refactors() end, desc = "Prompt for a refactor to apply" }, + ["rp"] = { function() require('refactoring').debug.printf({below = false}) end, desc = "Insert print statement to mark the calling of a function" }, + ["rv"] = { function() require('refactoring').debug.print_var() end, desc = "Insert print statement to print a variable" }, + ["rc"] = { function() require('refactoring').debug.cleanup({}) end, desc = "Cleanup of all generated print statements" }, + + -- yank_history + ["yh"] = { function() require("telescope").extensions.yank_history.yank_history() end, desc = "Preview Yank History" }, + + -- undo history + ["uh"] = {"Telescope undo", desc="Telescope undo" }, + + -- implementation/definition preview + ["gpd"] = { "lua require('goto-preview').goto_preview_definition()", desc="goto_preview_definition" }, + ["gpt"] = { "lua require('goto-preview').goto_preview_type_definition()", desc="goto_preview_type_definition" }, + ["gpi"] = { "lua require('goto-preview').goto_preview_implementation()", desc="goto_preview_implementation" }, + ["gP" ] = { "lua require('goto-preview').close_all_win()", desc="close_all_win" }, + ["gpr"] = { "lua require('goto-preview').goto_preview_references()", desc="goto_preview_references" }, + }, + -- Visual mode + v = { + -- search and replace globally + ['sw'] = {'lua require("spectre").open_visual()', desc = "Search current word" }, + }, + -- visual mode(what's the difference between v and x???) + x = { + -- refactoring + ["ri"] = { function() require('refactoring').refactor('Inline Variable') end, desc = "Inverse of extract variable" }, + ["re"] = { function() require('refactoring').refactor('Extract Function') end, desc = "Extracts the selected code to a separate function" }, + ["rf"] = { function() require('refactoring').refactor('Extract Function To File') end, desc = "Extract Function To File" }, + ["rv"] = { function() require('refactoring').refactor('Extract Variable') end, desc = "Extracts occurrences of a selected expression to its own variable" }, + ["rr"] = { function() require('telescope').extensions.refactoring.refactors() end, desc = "Prompt for a refactor to apply" }, + }, +} \ No newline at end of file diff --git a/modules/home/nixpkgs/default.nix b/modules/home/nixpkgs/default.nix new file mode 100644 index 0000000..b9bc5cd --- /dev/null +++ b/modules/home/nixpkgs/default.nix @@ -0,0 +1,33 @@ +{outputs, ...}: { + config = { + nixpkgs = { + # You can add overlays here + overlays = [ + # Add overlays your own flake exports (from overlays and pkgs dir): + outputs.overlays.additions + outputs.overlays.modifications + outputs.overlays.unstable-packages + + # You can also add overlays exported from other flakes: + # neovim-nightly-overlay.overlays.default + + # Or define it inline, for example: + # (final: prev: { + # hi = final.hello.overrideAttrs (oldAttrs: { + # patches = [ ./change-hello-to-hi.patch ]; + # }); + # }) + ]; + + # Configure your nixpkgs instance + config = { + # Wallahi, forgive me RMS... + allowUnfree = true; + # Workaround for https://github.com/nix-community/home-manager/issues/2942 + allowUnfreePredicate = _: true; + # Let the system use fucked up programs + allowBroken = true; + }; + }; + }; +} diff --git a/modules/home/packages/default.nix b/modules/home/packages/default.nix new file mode 100644 index 0000000..dab6390 --- /dev/null +++ b/modules/home/packages/default.nix @@ -0,0 +1,32 @@ +{ + config, + pkgs, + lib, + ... +}: let + # Package sets for different targets + macos = import ./osx.nix {inherit pkgs;}; + linux = import ./linux.nix {inherit pkgs;}; + globals = import ./global.nix {inherit pkgs;}; + + # Check if the target is MacOS + isMacOS = pkgs.stdenv.hostPlatform.system == "aarch64-darwin" || pkgs.stdenv.hostPlatform.system == "x86_64-darwin"; +in { + options = { + packages = { + isMacOS = lib.mkOption { + type = lib.types.bool; + default = isMacOS; + description = "Is installed packages are MacOS targetted."; + }; + }; + }; + + config = { + # Packages to be installed on my machine + home.packages = + if config.packages.isMacOS + then globals ++ macos + else globals ++ linux; + }; +} diff --git a/modules/home/packages/global.nix b/modules/home/packages/global.nix new file mode 100644 index 0000000..d8d92a8 --- /dev/null +++ b/modules/home/packages/global.nix @@ -0,0 +1,55 @@ +{pkgs, ...}: [ + # Downloader + pkgs.aria + + # Developer Mode + pkgs.gh + pkgs.jq + pkgs.wget + pkgs.zola + pkgs.gitui + pkgs.zellij + pkgs.netcat + pkgs.direnv + pkgs.git-lfs + pkgs.gitoxide + pkgs.cargo-update + + # Environment + pkgs.fd + pkgs.bat + pkgs.btop + pkgs.eza + pkgs.figlet + pkgs.gping + pkgs.hyperfine + pkgs.lolcat + pkgs.fastfetch + pkgs.onefetch + pkgs.procs + pkgs.ripgrep + pkgs.tealdeer + pkgs.topgrade + + # Tech + pkgs.rustup + + # For Prismlauncher + pkgs.jdk17 + + # Media encode & decode + pkgs.ffmpeg + pkgs.libheif + + # Anime + pkgs.crunchy-cli + + # GPG Signing + pkgs.gnupg + + # Selfmade programs + pkgs.fp + pkgs.devcc + pkgs.ghloc + pkgs.google +] diff --git a/modules/home/packages/linux.nix b/modules/home/packages/linux.nix new file mode 100644 index 0000000..f9cf105 --- /dev/null +++ b/modules/home/packages/linux.nix @@ -0,0 +1,5 @@ +{pkgs, ...}: [ + # Add new packages here + pkgs.docker-compose + pkgs.pinentry +] diff --git a/modules/home/packages/osx.nix b/modules/home/packages/osx.nix new file mode 100644 index 0000000..6b8c142 --- /dev/null +++ b/modules/home/packages/osx.nix @@ -0,0 +1,6 @@ +{pkgs, ...}: [ + # Add new packages here + pkgs.mas + pkgs.pinentry_mac + pkgs.brewster +] diff --git a/modules/home/terminal/default.nix b/modules/home/terminal/default.nix new file mode 100644 index 0000000..c5f546a --- /dev/null +++ b/modules/home/terminal/default.nix @@ -0,0 +1,54 @@ +{pkgs, ...}: { + config = { + programs.alacritty = { + enable = true; + settings = { + window = { + padding.x = 10; + padding.y = 10; + decorations = "Full"; + }; + + font = { + size = 12.0; + + normal.family = "JetBrainsMono NF"; + bold.family = "JetBrainsMono NF"; + italic.family = "JetBrainsMono NF"; + }; + + colors = { + # Default colors + primary = { + background = "0x090909"; + foreground = "0xeceef0"; + }; + + # Normal colors + normal = { + black = "0x546d79"; + red = "0xfe5151"; + green = "0x69efad"; + yellow = "0xffd640"; + blue = "0x40c3fe"; + magenta = "0xfe3f80"; + cyan = "0x64fcda"; + white = "0xfffefe"; + }; + + # Bright colors + bright = { + black = "0xb0bdc4"; + red = "0xfe897f"; + green = "0xb9f5c9"; + yellow = "0xffe47e"; + blue = "0x80d7fe"; + magenta = "0xfe7faa"; + cyan = "0xa7fdeb"; + white = "0xfffefe"; + }; + }; + }; + }; + }; +} diff --git a/modules/home/topgrade/default.nix b/modules/home/topgrade/default.nix new file mode 100644 index 0000000..9117f10 --- /dev/null +++ b/modules/home/topgrade/default.nix @@ -0,0 +1,30 @@ +{pkgs, ...}: { + config = { + programs.topgrade = { + enable = true; + settings = { + misc = { + disable = [ + "bun" + "node" + "pnpm" + "yarn" + "cargo" + "vscode" + ]; + no_retry = true; + assume_yes = true; + no_self_update = true; + }; + commands = {}; + linux = { + nix_arguments = "--flake github:orzklv/nix"; + home_manager_arguments = ["--flake" "github:orzklv/nix"]; + }; + brew = { + autoremove = true; + }; + }; + }; + }; +} diff --git a/modules/home/zsh/default.nix b/modules/home/zsh/default.nix new file mode 100644 index 0000000..8296de3 --- /dev/null +++ b/modules/home/zsh/default.nix @@ -0,0 +1,205 @@ +{pkgs, ...}: { + imports = [ + ./zoxide.nix + ./starship.nix + ]; + + # I use zsh, but bash and fish work just as well here. This will setup + # the shell to use home-manager properly on startup, neat! + programs.zsh = { + # Install zsh + enable = true; + + # ZSH Autosuggestions + # The option `programs.zsh.enableAutosuggestions' defined in config + # has been renamed to `programs.zsh.autosuggestion.enable'. + autosuggestion.enable = true; + + # ZSH Completions + enableCompletion = true; + + # ZSH Syntax Highlighting + syntaxHighlighting.enable = true; + + shellAliases = { + # General aliases + down = "cd ~/Downloads"; + ".." = "cd .."; + "...." = "cd ../.."; + "celar" = "clear"; + ":q" = "exit"; + neofetch = "neofetch --source ~/.config/neofetch/logo.ascii"; + ssh-hosts = "grep -P \"^Host ([^*]+)$\" $HOME/.ssh/config | sed 's/Host //'"; + + # Polite motherfucker! + # Do you speak it?! + please = "sudo"; + move = "mv"; + copy = "cp"; + remove = "rm"; + list = "ls"; + edit = "hx"; + + # Made with Rust + top = "btop"; + cat = "bat"; + ls = "eza"; + sl = "eza"; + ps = "procs"; + grep = "rg"; + search = "rg"; + look = "fd"; + find = "fd"; + ping = "gping"; + time = "hyperfine"; + korgi = "cargo"; + + # Refresh + refresh = "source ~/.zshrc"; + clean = "nix store gc && nix-collect-garbage -d"; + + # Zellij + hack = "zellij"; + + # Others (Developer) + ports = "sudo lsof -PiTCP -sTCP:LISTEN"; + rit = "gitui"; + dotenv = "eval export $(cat .env)"; + xclip = "xclip -selection c"; + speedtest = "curl -o /dev/null cachefly.cachefly.net/100mb.test"; + dockfm = "docker ps --all --format \"NAME: {{.Names}}\nSTATUS: {{.Status}}\nPORTS: {{.Ports}}\n\""; + + # Updating system + update = "nix store gc && topgrade"; + + nix-shell = "nix-shell --run zsh"; + nix-develop = "nix develop -c \"$SHELL\""; + }; + + # Extra manually typed configs + initExtra = '' + # Global settings + setopt AUTO_CD + setopt BEEP + setopt HIST_BEEP + setopt HIST_EXPIRE_DUPS_FIRST + setopt HIST_FIND_NO_DUPS + setopt HIST_IGNORE_ALL_DUPS + setopt HIST_IGNORE_DUPS + setopt HIST_REDUCE_BLANKS + setopt HIST_SAVE_NO_DUPS + setopt HIST_VERIFY + setopt INC_APPEND_HISTORY + setopt INTERACTIVE_COMMENTS + setopt MAGIC_EQUAL_SUBST + setopt NO_NO_MATCH + setopt NOTIFY + setopt NUMERIC_GLOB_SORT + setopt PROMPT_SUBST + setopt SHARE_HISTORY + + # Key bindings + bindkey -e + bindkey '^U' backward-kill-line + bindkey '^[[2~' overwrite-mode + bindkey '^[[3~' delete-char + bindkey '^[[H' beginning-of-line + bindkey '^[[1~' beginning-of-line + bindkey '^[[F' end-of-line + bindkey '^[[4~' end-of-line + bindkey '^[[1;5C' forward-word + bindkey '^[[1;5D' backward-word + bindkey '^[[3;5~' kill-word + bindkey '^[[5~' beginning-of-buffer-or-history + bindkey '^[[6~' end-of-buffer-or-history + bindkey '^[[Z' undo + bindkey ' ' magic-space + + # History files + HISTFILE=~/.zsh_history + HIST_STAMPS=mm/dd/yyyy + HISTSIZE=5000 + SAVEHIST=5000 + ZLE_RPROMPT_INDENT=0 + WORDCHARS=''${WORDCHARS//\/} + PROMPT_EOL_MARK= + TIMEFMT=$'\nreal\t%E\nuser\t%U\nsys\t%S\ncpu\t%P' + + # Zsh Autosuggestions Configs + ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=gray" + + # Zsh Completions Configs + zstyle ':completion:*:*:*:*:*' menu select + zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' + zstyle ':completion:*' list-colors "''${(s.:.)LS_COLORS}" + zstyle ':completion:*' auto-description 'specify: %d' + zstyle ':completion:*' completer _expand _complete + zstyle ':completion:*' format 'Completing %d' + zstyle ':completion:*' group-name ' ' + zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s + zstyle ':completion:*' rehash true + zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s + zstyle ':completion:*' use-compctl false + zstyle ':completion:*' verbose true + zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd' + typeset -gA ZSH_HIGHLIGHT_STYLES + ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) + ZSH_HIGHLIGHT_STYLES[default]=none + ZSH_HIGHLIGHT_STYLES[unknown-token]=fg=white,underline + ZSH_HIGHLIGHT_STYLES[reserved-word]=fg=cyan,bold + ZSH_HIGHLIGHT_STYLES[suffix-alias]=fg=green,underline + ZSH_HIGHLIGHT_STYLES[global-alias]=fg=green,bold + ZSH_HIGHLIGHT_STYLES[precommand]=fg=green,underline + ZSH_HIGHLIGHT_STYLES[commandseparator]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[autodirectory]=fg=green,underline + ZSH_HIGHLIGHT_STYLES[path]=bold + ZSH_HIGHLIGHT_STYLES[path_pathseparator]= + ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]= + ZSH_HIGHLIGHT_STYLES[globbing]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[history-expansion]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[command-substitution]=none + ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[process-substitution]=none + ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[single-hyphen-option]=fg=green + ZSH_HIGHLIGHT_STYLES[double-hyphen-option]=fg=green + ZSH_HIGHLIGHT_STYLES[back-quoted-argument]=none + ZSH_HIGHLIGHT_STYLES[back-quoted-argument-delimiter]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[single-quoted-argument]=fg=yellow + ZSH_HIGHLIGHT_STYLES[double-quoted-argument]=fg=yellow + ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]=fg=yellow + ZSH_HIGHLIGHT_STYLES[rc-quote]=fg=magenta + ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[assign]=none + ZSH_HIGHLIGHT_STYLES[redirection]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[comment]=fg=black,bold + ZSH_HIGHLIGHT_STYLES[named-fd]=none + ZSH_HIGHLIGHT_STYLES[numeric-fd]=none + ZSH_HIGHLIGHT_STYLES[arg0]=fg=cyan + ZSH_HIGHLIGHT_STYLES[bracket-error]=fg=red,bold + ZSH_HIGHLIGHT_STYLES[bracket-level-1]=fg=blue,bold + ZSH_HIGHLIGHT_STYLES[bracket-level-2]=fg=green,bold + ZSH_HIGHLIGHT_STYLES[bracket-level-3]=fg=magenta,bold + ZSH_HIGHLIGHT_STYLES[bracket-level-4]=fg=yellow,bold + ZSH_HIGHLIGHT_STYLES[bracket-level-5]=fg=cyan,bold + ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]=standout + + # Extra Aliases + if [[ "$(uname)" == "Linux" && -f /etc/nixos/configuration.nix ]]; then + alias open="xdg-open" + fi + + # Cargo + export PATH="$HOME/.cargo/bin:$PATH" + + # Golang's Trash + export GOPATH="$HOME/.go" + export PATH="$PATH:$HOME/.go/bin" + + # Extra services + # here... + ''; + }; +} diff --git a/modules/home/zsh/starship.nix b/modules/home/zsh/starship.nix new file mode 100644 index 0000000..a025c62 --- /dev/null +++ b/modules/home/zsh/starship.nix @@ -0,0 +1,10 @@ +{pkgs, ...}: { + # Prettier terminal prompt + programs.starship = { + enable = true; + enableZshIntegration = true; + settings = { + battery.disabled = true; + }; + }; +} diff --git a/modules/home/zsh/zoxide.nix b/modules/home/zsh/zoxide.nix new file mode 100644 index 0000000..7191075 --- /dev/null +++ b/modules/home/zsh/zoxide.nix @@ -0,0 +1,7 @@ +{pkgs, ...}: { + # Zpxide path integration + programs.zoxide = { + enable = true; + enableZshIntegration = true; + }; +}