diff --git a/flake.lock b/flake.lock index bce521f..94e0845 100644 --- a/flake.lock +++ b/flake.lock @@ -383,7 +383,7 @@ "inputs": { "flake-compat": "flake-compat", "nixpkgs": [ - "nixpkgs" + "nixpkgs-unstable" ] }, "locked": { @@ -509,7 +509,7 @@ "home-manager": "home-manager_3", "nix-darwin": "nix-darwin", "nixpkgs": [ - "nixpkgs" + "nixpkgs-unstable" ], "pre-commit-hooks": "pre-commit-hooks", "treefmt-nix": "treefmt-nix" diff --git a/flake.nix b/flake.nix index e141d18..5667db7 100644 --- a/flake.nix +++ b/flake.nix @@ -22,114 +22,109 @@ nur = { url = "github:nix-community/NUR"; }; nixos-cosmic = { url = "github:lilyinstarlight/nixos-cosmic"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgs-unstable"; }; nixvim = { url = "github:nix-community/nixvim"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgs-unstable"; }; }; - outputs = { self, - nur, - nixpkgs, - nixos-hardware, - nixos-wsl, - nixpkgs-unstable, - agenix, - home-manager, - home-manager-unstable, - nix-colors, - nixos-cosmic, - nixvim - }@inputs: + outputs = { self, nur, nixpkgs, nixos-hardware, nixos-wsl, nixpkgs-unstable + , agenix, home-manager, home-manager-unstable, nix-colors, nixos-cosmic + , nixvim }@inputs: let inherit (self) outputs; system = "x86_64-linux"; # helper function to create a machine - mkHost = ({modules, specialArgs ? { pkgsVersion = nixpkgs-unstable;}}: nixpkgs-unstable.lib.nixosSystem { - inherit system; - modules = modules ++ [ - ./modules - ({ config, outputs, ... }: { nixpkgs.overlays = with outputs.overlays; [additions modifications unstable-packages nur.overlay]; }) - home-manager-unstable.nixosModules.home-manager - agenix.nixosModules.default - nixos-cosmic.nixosModules.default - ]; - specialArgs = specialArgs // { inherit inputs outputs;}; - }); + mkHost = { modules, specialArgs ? { pkgsVersion = nixpkgs-unstable; } }: + nixpkgs-unstable.lib.nixosSystem { + inherit system; + modules = modules ++ [ + ./modules + ({ outputs, ... }: { + nixpkgs.overlays = with outputs.overlays; [ + additions + modifications + unstable-packages + nur.overlay + ]; + }) + home-manager-unstable.nixosModules.home-manager + agenix.nixosModules.default + nixos-cosmic.nixosModules.default + ]; + specialArgs = specialArgs // { inherit inputs outputs; }; + }; in { - overlays = import ./overlays.nix {inherit inputs;}; + overlays = import ./overlays.nix { inherit inputs; }; - nixosConfigurations.server = mkHost { - modules = [ - ./users/anon - ./modules/collections/server.nix - ./systems/server/configuration.nix - ]; - specialArgs = { - ## Custom variables (e.g. ip, interface, etc) - vars = import ./systems/userdata-default.nix // import ./systems/server/userdata.nix; - pkgsVersion = nixpkgs-unstable; + nixosConfigurations = { + server = mkHost { + modules = [ + ./users/anon + ./modules/collections/server.nix + ./systems/server/configuration.nix + ]; + specialArgs = { + ## Custom variables (e.g. ip, interface, etc) + vars = import ./systems/userdata-default.nix + // import ./systems/server/userdata.nix; + pkgsVersion = nixpkgs-unstable; + }; + }; + "kop-pc" = mkHost { + modules = [ ./users/kopatz ./systems/pc/configuration.nix ]; + }; + "nix-laptop" = mkHost { + specialArgs = { + ## Custom variables (e.g. ip, interface, etc) + vars = import ./systems/userdata-default.nix + // import ./systems/laptop/userdata.nix; + pkgsVersion = nixpkgs-unstable; + inherit nix-colors; + }; + modules = [ + ### User specific ### + ./users/kopatz + ./systems/laptop/configuration.nix + ./modules/collections/laptop.nix + ./modules/ecryptfs.nix + ./modules/services/syncthing.nix + ./modules/fh/scanning.nix + ./modules/support/ntfs.nix + ./modules/thunderbolt.nix + #./modules/vmware-host.nix + #./modules/fh/forensik.nix + #./modules/no-sleep-lid-closed.nix + #./modules/static-ip.nix + #./modules/wake-on-lan.nix + nixos-hardware.nixosModules.dell-xps-15-7590-nvidia + ]; + }; + "mini-pc" = mkHost { + specialArgs = { + vars = import ./systems/userdata-default.nix; + pkgsVersion = nixpkgs-unstable; + }; + modules = [ ./users/anon ./systems/mini-pc/configuration.nix ]; + }; + # build vm -> nixos-rebuild build-vm --flake .#vm + "vm" = mkHost { + specialArgs = { + vars = import ./systems/userdata-default.nix; + pkgsVersion = nixpkgs-unstable; + }; + modules = [ ./users/vm ./systems/vm/configuration.nix ]; + }; + "wsl" = mkHost { + modules = [ + #"${nixpkgs}/nixos/modules/profiles/minimal.nix" + ./users/anon + ./modules/nix/settings.nix + ./systems/wsl/configuration.nix + nixos-wsl.nixosModules.wsl + ]; + }; }; }; - nixosConfigurations."kop-pc" = mkHost { - modules = [ - ./users/kopatz - ./systems/pc/configuration.nix - ]; - }; - nixosConfigurations."nix-laptop" = mkHost { - specialArgs = { - ## Custom variables (e.g. ip, interface, etc) - vars = import ./systems/userdata-default.nix // import ./systems/laptop/userdata.nix; - pkgsVersion = nixpkgs-unstable; - inherit nix-colors; - }; - modules = [ - ### User specific ### - ./users/kopatz - ./systems/laptop/configuration.nix - ./modules/collections/laptop.nix - ./modules/ecryptfs.nix - ./modules/services/syncthing.nix - ./modules/fh/scanning.nix - ./modules/support/ntfs.nix - ./modules/thunderbolt.nix - #./modules/vmware-host.nix - #./modules/fh/forensik.nix - #./modules/no-sleep-lid-closed.nix - #./modules/static-ip.nix - #./modules/wake-on-lan.nix - ]; - }; - nixosConfigurations."mini-pc" = mkHost { - specialArgs = { - vars = import ./systems/userdata-default.nix; - pkgsVersion = nixpkgs-unstable; - }; - modules = [ - ./users/anon - ./systems/mini-pc/configuration.nix - ]; - }; - # build vm -> nixos-rebuild build-vm --flake .#vm - nixosConfigurations."vm" = mkHost { - specialArgs = { - vars = import ./systems/userdata-default.nix; - pkgsVersion = nixpkgs-unstable; - }; - modules = [ - ./users/vm - ./systems/vm/configuration.nix - ]; - }; - nixosConfigurations."wsl" = mkHost { - modules = [ - #"${nixpkgs}/nixos/modules/profiles/minimal.nix" - ./users/anon - ./modules/nix/settings.nix - ./systems/wsl/configuration.nix - ]; - }; - }; } diff --git a/home-manager/nixvim/auto-pairs.nix b/home-manager/nixvim/auto-pairs.nix new file mode 100644 index 0000000..4d94d45 --- /dev/null +++ b/home-manager/nixvim/auto-pairs.nix @@ -0,0 +1,3 @@ +{ + plugins.nvim-autopairs = { enable = true; }; +} diff --git a/home-manager/nixvim/autosave.nix b/home-manager/nixvim/autosave.nix new file mode 100644 index 0000000..b2d375a --- /dev/null +++ b/home-manager/nixvim/autosave.nix @@ -0,0 +1,6 @@ +{ + plugins.auto-save = { + enable = true; + enableAutoSave = true; + }; +} diff --git a/home-manager/nixvim/blankline.nix b/home-manager/nixvim/blankline.nix new file mode 100644 index 0000000..3850939 --- /dev/null +++ b/home-manager/nixvim/blankline.nix @@ -0,0 +1,15 @@ +{ + plugins.indent-blankline = { + enable = true; + settings = { + indent = { + smart_indent_cap = true; + char = " "; + }; + scope = { + enabled = true; + char = "│"; + }; + }; + }; +} diff --git a/home-manager/nixvim/bufferline.nix b/home-manager/nixvim/bufferline.nix new file mode 100644 index 0000000..9039f66 --- /dev/null +++ b/home-manager/nixvim/bufferline.nix @@ -0,0 +1 @@ +{ plugins.bufferline = { enable = true; }; } diff --git a/home-manager/nixvim/cmp.nix b/home-manager/nixvim/cmp.nix new file mode 100644 index 0000000..eee5e6c --- /dev/null +++ b/home-manager/nixvim/cmp.nix @@ -0,0 +1,155 @@ +# # Source: https://github.com/hmajid2301/dotfiles/blob/ab7098387426f73c461950c7c0a4f8fb4c843a2c/home-manager/editors/nvim/plugins/coding/cmp.nix +{ + plugins = { + luasnip.enable = true; + copilot-lua = { + enable = true; + suggestion.enabled = false; + panel.enabled = false; + }; + + cmp-buffer = { enable = true; }; + + cmp-emoji = { enable = true; }; + + cmp-nvim-lsp = { enable = true; }; + + cmp-path = { enable = true; }; + + cmp_luasnip = { enable = true; }; + + cmp = { + enable = true; + + settings = { + snippet.expand = '' + function(args) + require('luasnip').lsp_expand(args.body) + end + ''; + sources = [ + { name = "nvim_lsp"; } + { name = "luasnip"; } + { + name = "buffer"; + option.get_bufnrs.__raw = "vim.api.nvim_list_bufs"; + } + { name = "nvim_lua"; } + { name = "path"; } + { name = "copilot"; } + ]; + + formatting = { + fields = [ "abbr" "kind" "menu" ]; + format = + # lua + '' + function(_, item) + local icons = { + Namespace = "󰌗", + Text = "󰉿", + Method = "󰆧", + Function = "󰆧", + Constructor = "", + Field = "󰜢", + Variable = "󰀫", + Class = "󰠱", + Interface = "", + Module = "", + Property = "󰜢", + Unit = "󰑭", + Value = "󰎠", + Enum = "", + Keyword = "󰌋", + Snippet = "", + Color = "󰏘", + File = "󰈚", + Reference = "󰈇", + Folder = "󰉋", + EnumMember = "", + Constant = "󰏿", + Struct = "󰙅", + Event = "", + Operator = "󰆕", + TypeParameter = "󰊄", + Table = "", + Object = "󰅩", + Tag = "", + Array = "[]", + Boolean = "", + Number = "", + Null = "󰟢", + String = "󰉿", + Calendar = "", + Watch = "󰥔", + Package = "", + Copilot = "", + Codeium = "", + TabNine = "", + } + + local icon = icons[item.kind] or "" + item.kind = string.format("%s %s", icon, item.kind or "") + return item + end + ''; + }; + + window = { + completion = { + winhighlight = + "FloatBorder:CmpBorder,Normal:CmpPmenu,CursorLine:CmpSel,Search:PmenuSel"; + scrollbar = false; + sidePadding = 0; + border = [ "╭" "─" "╮" "│" "╯" "─" "╰" "│" ]; + }; + + settings.documentation = { + border = [ "╭" "─" "╮" "│" "╯" "─" "╰" "│" ]; + winhighlight = + "FloatBorder:CmpBorder,Normal:CmpPmenu,CursorLine:CmpSel,Search:PmenuSel"; + }; + }; + + mapping = { + "" = "cmp.mapping.select_next_item()"; + "" = "cmp.mapping.select_prev_item()"; + "" = "cmp.mapping.select_next_item()"; + "" = "cmp.mapping.select_prev_item()"; + "" = "cmp.mapping.scroll_docs(-4)"; + "" = "cmp.mapping.scroll_docs(4)"; + "" = "cmp.mapping.complete()"; + "" = "cmp.mapping.close()"; + "" = + "cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true })"; + "" = + # lua + '' + function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif require("luasnip").expand_or_jumpable() then + vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-expand-or-jump", true, true, true), "") + else + fallback() + end + end + ''; + "" = + # lua + '' + function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif require("luasnip").jumpable(-1) then + vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-jump-prev", true, true, true), "") + else + fallback() + end + end + ''; + }; + }; + }; + }; +} diff --git a/home-manager/nixvim/config.nix b/home-manager/nixvim/config.nix new file mode 100644 index 0000000..85a40d1 --- /dev/null +++ b/home-manager/nixvim/config.nix @@ -0,0 +1,161 @@ +{lib, pkgs, ...}: +{ + enable = true; + colorschemes.dracula.enable = true; + + globals.mapleader = " "; + opts = { + updatetime = 100; # Faster completion + + number = true; + relativenumber = true; + + autoindent = true; + clipboard = "unnamedplus"; + expandtab = true; + shiftwidth = 2; + smartindent = true; + tabstop = 2; + + ignorecase = true; + incsearch = true; + smartcase = true; + wildmode = "list:longest"; + + swapfile = false; + undofile = true; # Build-in persistent undo + + termguicolors = lib.mkForce pkgs.stdenv.isLinux; + }; + + keymaps = [ + # Global + # Default mode is "" which means normal-visual-op + { + key = "x"; + action = "NvimTreeToggle"; + options.desc = "Toggle NvimTree"; + } + + # File + #{ + # mode = "n"; + # key = "sf"; + # action = "+find/file"; + #} + { + # Format file + key = "fm"; + action = "lua vim.lsp.buf.format()"; + options.desc = "Format the current buffer"; + } + + # Git + { + mode = "n"; + key = "g"; + action = "+git"; + } + { + mode = "n"; + key = "gt"; + action = "+toggles"; + } + { + key = "gtb"; + action = "Gitsigns toggle_current_line_blame"; + options.desc = "Gitsigns current line blame"; + } + { + key = "gtd"; + action = "Gitsigns toggle_deleted"; + options.desc = "Gitsigns deleted"; + } + { + key = "gd"; + action = "Gitsigns diffthis"; + options.desc = "Gitsigns diff this buffer"; + } + { + mode = "n"; + key = "gr"; + action = "+resets"; + } + { + key = "grh"; + action = "Gitsigns reset_hunk"; + options.desc = "Gitsigns reset hunk"; + } + { + key = "grb"; + action = "Gitsigns reset_buffer"; + options.desc = "Gitsigns reset current buffer"; + } + + # Tabs + { + mode = "n"; + key = "t"; + action = "+tab"; + } + { + mode = "n"; + key = "tn"; + action = "tabnew"; + options.desc = "Create new tab"; + } + { + mode = "n"; + key = "td"; + action = "tabclose"; + options.desc = "Close tab"; + } + { + mode = "n"; + key = "tt"; + action = "tabnext"; + options.desc = "Go to the sub-sequent tab"; + } + { + mode = "n"; + key = "tp"; + action = "tabprevious"; + options.desc = "Go to the previous tab"; + } + + # Terminal + { + # Escape terminal mode using ESC + mode = "t"; + key = ""; + action = ""; + options.desc = "Escape terminal mode"; + } + + # Trouble + { + mode = "n"; + key = "d"; + action = "+diagnostics/debug"; + } + { + key = "dt"; + action = "TroubleToggle"; + options.desc = "Toggle trouble"; + } + + # Rust + { + mode = "n"; + key = "r"; + action = "+rust"; + } + { + # Start standalone rust-analyzer (fixes issues when opening files from nvim tree) + mode = "n"; + key = "rs"; + action = "RustStartStandaloneServerForBuffer"; + options.desc = "Start standalone rust-analyzer"; + } + ]; +} diff --git a/home-manager/nixvim/default.nix b/home-manager/nixvim/default.nix new file mode 100644 index 0000000..72d58d4 --- /dev/null +++ b/home-manager/nixvim/default.nix @@ -0,0 +1,30 @@ +{ lib, pkgs, ... }: +let + args = { inherit lib pkgs; }; + + importFile = file: + let config = import file; + in if builtins.isFunction config then config args else config; + configs = map importFile [ + ./auto-pairs.nix + ./autosave.nix + ./blankline.nix + ./bufferline.nix + ./cmp.nix + ./fidget.nix + ./git.nix + ./lightline.nix + ./lsp.nix + ./none-ls.nix + ./nvim-tree.nix + ./telescope.nix + ./toggleterm.nix + ./treesitter.nix + ./trouble.nix + ./which_key.nix + ./wilder.nix + ./config.nix + ]; + merged = + builtins.foldl' (acc: elem: lib.recursiveUpdate acc elem) { } configs; +in { programs.nixvim = merged; } diff --git a/home-manager/nixvim/fidget.nix b/home-manager/nixvim/fidget.nix new file mode 100644 index 0000000..653da0c --- /dev/null +++ b/home-manager/nixvim/fidget.nix @@ -0,0 +1,10 @@ +{ + plugins.fidget = { + enable = true; + progress = { + suppressOnInsert = true; + ignoreDoneAlready = true; + pollRate = 0.5; + }; + }; +} diff --git a/home-manager/nixvim/git.nix b/home-manager/nixvim/git.nix new file mode 100644 index 0000000..e5cbbb7 --- /dev/null +++ b/home-manager/nixvim/git.nix @@ -0,0 +1,9 @@ +{ + plugins.gitsigns = { + enable = true; + settings = { + current_line_blame = true; + trouble = true; + }; + }; +} diff --git a/home-manager/nixvim/lightline.nix b/home-manager/nixvim/lightline.nix new file mode 100644 index 0000000..357a12d --- /dev/null +++ b/home-manager/nixvim/lightline.nix @@ -0,0 +1 @@ +{ plugins.lightline = { enable = true; }; } diff --git a/home-manager/nixvim/lsp.nix b/home-manager/nixvim/lsp.nix new file mode 100644 index 0000000..d99a6ea --- /dev/null +++ b/home-manager/nixvim/lsp.nix @@ -0,0 +1,25 @@ +{ + plugins = { + lsp = { + enable = true; + servers = { + bashls.enable = true; + clangd.enable = true; + gopls.enable = true; + nixd.enable = true; + }; + keymaps.lspBuf = { + "gd" = "definition"; + "gD" = "references"; + "gt" = "type_definition"; + "gi" = "implementation"; + "K" = "hover"; + }; + }; + lsp-lines = { + enable = true; + currentLine = true; + }; + rust-tools.enable = true; + }; +} diff --git a/home-manager/nixvim/none-ls.nix b/home-manager/nixvim/none-ls.nix new file mode 100644 index 0000000..9ca63ec --- /dev/null +++ b/home-manager/nixvim/none-ls.nix @@ -0,0 +1,20 @@ +{ + plugins.none-ls = { + enable = true; + sources = { + diagnostics = { + golangci_lint.enable = true; + statix.enable = true; + }; + formatting = { + fantomas.enable = true; + gofmt.enable = true; + goimports.enable = true; + nixfmt.enable = true; + markdownlint.enable = true; + shellharden.enable = true; + shfmt.enable = true; + }; + }; + }; +} diff --git a/home-manager/nixvim/nvim-tree.nix b/home-manager/nixvim/nvim-tree.nix new file mode 100644 index 0000000..a33c4d4 --- /dev/null +++ b/home-manager/nixvim/nvim-tree.nix @@ -0,0 +1,11 @@ +{ + plugins.nvim-tree = { + enable = true; + openOnSetup = true; + autoReloadOnWrite = true; + tab.sync = { + close = true; + open = true; + }; + }; +} diff --git a/home-manager/nixvim/telescope.nix b/home-manager/nixvim/telescope.nix new file mode 100644 index 0000000..41873fd --- /dev/null +++ b/home-manager/nixvim/telescope.nix @@ -0,0 +1,17 @@ +{ + plugins.telescope = { + enable = true; + keymaps = { + "sg" = "live_grep"; + "sf" = { + action = "find_files"; + options = { desc = "[S]earch [F]iles"; }; + }; + "gf" = { + action = "git_files"; + options = { desc = "Search [G]it [F]iles"; }; + }; + }; + extensions.fzf-native = { enable = true; }; + }; +} diff --git a/home-manager/nixvim/toggleterm.nix b/home-manager/nixvim/toggleterm.nix new file mode 100644 index 0000000..125b000 --- /dev/null +++ b/home-manager/nixvim/toggleterm.nix @@ -0,0 +1,8 @@ +{ + plugins.toggleterm = { + enable = true; + settings = { + open_mapping = "[[]]"; + }; + }; +} diff --git a/home-manager/nixvim/treesitter.nix b/home-manager/nixvim/treesitter.nix new file mode 100644 index 0000000..e8fd6f5 --- /dev/null +++ b/home-manager/nixvim/treesitter.nix @@ -0,0 +1,11 @@ +{ + plugins = { + treesitter = { + enable = true; + nixGrammars = true; + indent = true; + }; + #treesitter-context.enable = true; + rainbow-delimiters.enable = true; + }; +} diff --git a/home-manager/nixvim/trouble.nix b/home-manager/nixvim/trouble.nix new file mode 100644 index 0000000..76f52a2 --- /dev/null +++ b/home-manager/nixvim/trouble.nix @@ -0,0 +1,5 @@ +{ + plugins = { + trouble.enable = true; + }; +} diff --git a/home-manager/nixvim/which_key.nix b/home-manager/nixvim/which_key.nix new file mode 100644 index 0000000..652264f --- /dev/null +++ b/home-manager/nixvim/which_key.nix @@ -0,0 +1,5 @@ +{ + opts = { + timeoutlen = 500; + }; + plugins.which-key = { enable = true; }; } diff --git a/home-manager/nixvim/wilder.nix b/home-manager/nixvim/wilder.nix new file mode 100644 index 0000000..1cca351 --- /dev/null +++ b/home-manager/nixvim/wilder.nix @@ -0,0 +1,6 @@ +{ + plugins.wilder = { + enable = true; + modes = [ ":" "/" "?" ]; + }; +} diff --git a/modules/graphical/shared.nix b/modules/graphical/shared.nix index 2b34b03..f947093 100644 --- a/modules/graphical/shared.nix +++ b/modules/graphical/shared.nix @@ -29,7 +29,7 @@ in networking.firewall = { enable = true; - allowedTCPPorts = [ 53317 ]; #localsend + allowedTCPPorts = [ 25565 53317 ]; #localsend allowedUDPPorts = [ 1194 53317 ]; #openvpn, localsend allowedTCPPortRanges = [ { from = 1714; to = 1764; } # KDE Connect diff --git a/users/kopatz/home.nix b/users/kopatz/home.nix index 58b9720..5eb2dd6 100644 --- a/users/kopatz/home.nix +++ b/users/kopatz/home.nix @@ -21,7 +21,7 @@ #../../home-manager/kde-path.nix ../../home-manager/kitty.nix ../../home-manager/lf.nix - ../../home-manager/nvim.nix + ../../home-manager/nixvim ../../home-manager/rofi.nix ../../home-manager/theme.nix ../../home-manager/zsh.nix