diff --git a/.sops.yaml b/.sops.yaml index 99900ba..a439994 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -8,6 +8,7 @@ creation_rules: key_groups: - age: - *dn_server + - *dn_pre7780 - path_regex: system/dev/dn-pre7780/secret.yaml key_groups: - age: diff --git a/flake.lock b/flake.lock index ed91edc..53483ab 100644 --- a/flake.lock +++ b/flake.lock @@ -491,6 +491,24 @@ } }, "flake-parts_4": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_5": { "inputs": { "nixpkgs-lib": [ "nvf", @@ -511,7 +529,7 @@ "type": "github" } }, - "flake-parts_5": { + "flake-parts_6": { "inputs": { "nixpkgs-lib": [ "stylix", @@ -532,6 +550,21 @@ "type": "github" } }, + "flake-root": { + "locked": { + "lastModified": 1723604017, + "narHash": "sha256-rBtQ8gg+Dn4Sx/s+pvjdq3CB2wQNzx9XGFq/JVGCB6k=", + "owner": "srid", + "repo": "flake-root", + "rev": "b759a56851e10cb13f6b8e5698af7b59c44be26e", + "type": "github" + }, + "original": { + "owner": "srid", + "repo": "flake-root", + "type": "github" + } + }, "flake-schemas": { "locked": { "lastModified": 1721999734, @@ -1405,6 +1438,22 @@ "type": "github" } }, + "marks-nvim": { + "flake": false, + "locked": { + "lastModified": 1747179163, + "narHash": "sha256-ho2b2Ulh+GTqY0QvW7zjFOSlF5g/kaxWyOjKWhTFq7c=", + "owner": "chentoast", + "repo": "marks.nvim", + "rev": "f353e8c08c50f39e99a9ed474172df7eddd89b72", + "type": "github" + }, + "original": { + "owner": "chentoast", + "repo": "marks.nvim", + "type": "github" + } + }, "microvm": { "inputs": { "flake-utils": "flake-utils_4", @@ -1563,6 +1612,29 @@ "type": "github" } }, + "nixd": { + "inputs": { + "flake-parts": "flake-parts_4", + "flake-root": "flake-root", + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix_2" + }, + "locked": { + "lastModified": 1756563652, + "narHash": "sha256-0MvTa6l071JAbePgP3qTkNXr1CbeGDmqyDyvVHxetqg=", + "owner": "nix-community", + "repo": "nixd", + "rev": "15a3376f65de9e7984429b975777f3569430b8a6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixd", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1755027561, @@ -1594,6 +1666,18 @@ "type": "github" } }, + "nixpkgs-lib_2": { + "locked": { + "lastModified": 1733096140, + "narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz" + } + }, "nixpkgs-stable": { "locked": { "lastModified": 1730741070, @@ -1795,7 +1879,7 @@ "nvf": { "inputs": { "flake-compat": "flake-compat_8", - "flake-parts": "flake-parts_4", + "flake-parts": "flake-parts_5", "mnw": "mnw", "nixpkgs": [ "nixpkgs" @@ -1903,11 +1987,13 @@ "hyprlock": "hyprlock", "hyprtasking": "hyprtasking", "lanzaboote": "lanzaboote", + "marks-nvim": "marks-nvim", "microvm": "microvm", "neovim-nightly-overlay": "neovim-nightly-overlay", "nix-index-database": "nix-index-database", "nix-minecraft": "nix-minecraft", "nix-tmodloader": "nix-tmodloader", + "nixd": "nixd", "nixpkgs": "nixpkgs_7", "nvf": "nvf", "sops-nix": "sops-nix", @@ -2042,7 +2128,7 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_5", + "flake-parts": "flake-parts_6", "gnome-shell": "gnome-shell", "nixpkgs": [ "nixpkgs" @@ -2371,6 +2457,27 @@ "type": "github" } }, + "treefmt-nix_2": { + "inputs": { + "nixpkgs": [ + "nixd", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1734704479, + "narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, "xdph": { "inputs": { "hyprland-protocols": [ diff --git a/flake.nix b/flake.nix index e40cea7..11710e4 100644 --- a/flake.nix +++ b/flake.nix @@ -117,307 +117,317 @@ url = "github:NotAShelf/nvf"; inputs.nixpkgs.follows = "nixpkgs"; }; + + nixd = { + url = "github:nix-community/nixd"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + marks-nvim = { + url = "github:chentoast/marks.nvim"; + flake = false; + }; }; - outputs = { - self, - nixpkgs, - nix-index-database, - lanzaboote, - home-manager, - ... - } @ inputs: let - system = "x86_64-linux"; - nix-version = "25.05"; + outputs = + { + self, + nixpkgs, + nix-index-database, + lanzaboote, + home-manager, + ... + }@inputs: + let + system = "x86_64-linux"; + nix-version = "25.05"; - pkgs = import nixpkgs { - inherit system; - }; - - inherit (pkgs) lib; - - helper = import ./helper {inherit pkgs lib;}; - - # Declare COMMON modules here - common-settings = { - modules = [ - home-manager.nixosModules.default - nix-index-database.nixosModules.nix-index - inputs.sops-nix.nixosModules.sops - inputs.chaotic.nixosModules.default - inputs.actual-budget-api.nixosModules.default - inputs.stylix.nixosModules.stylix - ]; - args = { - inherit - helper - inputs - system - nix-version - self - ; - }; - }; - - # Declaring All Devices - devices = { - # Home Computer - dn-pre7780 = { - hostname = "dn-pre7780"; - domain = "net.dn"; - username = "danny"; - extra-modules = [ - lanzaboote.nixosModules.lanzaboote - ./system/dev/dn-pre7780 - - # VM - inputs.microvm.nixosModules.host - { - networking.useNetworkd = true; - systemd.network.enable = true; - systemd.network.networks."10-lan" = { - matchConfig.Name = [ - "enp0s31f6" - "vm-*" - ]; - networkConfig = { - Bridge = "br0"; - }; - }; - - systemd.network.netdevs."br0" = { - netdevConfig = { - Name = "br0"; - Kind = "bridge"; - }; - }; - - systemd.network.networks."10-lan-bridge" = { - matchConfig.Name = "br0"; - networkConfig = { - Address = ["192.168.0.5/24"]; - Gateway = "192.168.0.1"; - DNS = ["192.168.0.1"]; - }; - - linkConfig.RequiredForOnline = "routable"; - }; - - microvm.vms = { - vm-1 = { - flake = self; - updateFlake = "git+file:///etc/nixos"; - autostart = false; - }; - vm-2 = { - flake = self; - updateFlake = "git+file:///etc/nixos"; - autostart = false; - }; - }; - } - ]; - overlays = []; + pkgs = import nixpkgs { + inherit system; }; - # Laptop - dn-lap = { - hostname = "dn-lap"; - username = "danny"; - domain = "net.dn"; - extra-modules = [ - lanzaboote.nixosModules.lanzaboote - ./system/dev/dn-lap - ]; - overlays = [ + inherit (pkgs) lib; + + helper = import ./helper { inherit pkgs lib; }; + + # Declare COMMON modules here + common-settings = { + modules = [ + home-manager.nixosModules.default + nix-index-database.nixosModules.nix-index + inputs.sops-nix.nixosModules.sops + inputs.chaotic.nixosModules.default + inputs.actual-budget-api.nixosModules.default + inputs.stylix.nixosModules.stylix ]; + args = { + inherit + helper + inputs + system + nix-version + self + ; + }; }; - # Server - dn-server = { - hostname = "dn-server"; - username = "danny"; - domain = "net.dn"; - extra-modules = [ - inputs.nix-minecraft.nixosModules.minecraft-servers - inputs.nix-tmodloader.nixosModules.tmodloader - ./system/dev/dn-server - ./pkgs/options/dovecot.nix - ]; - overlays = [ - inputs.nix-minecraft.overlay - inputs.nix-tmodloader.overlay - (import ./pkgs/overlays/dovecot.nix) - ]; + # Declaring All Devices + devices = { + # Home Computer + dn-pre7780 = { + hostname = "dn-pre7780"; + domain = "net.dn"; + username = "danny"; + extra-modules = [ + lanzaboote.nixosModules.lanzaboote + ./system/dev/dn-pre7780 + + # VM + inputs.microvm.nixosModules.host + { + networking.useNetworkd = true; + systemd.network.enable = true; + systemd.network.networks."10-lan" = { + matchConfig.Name = [ + "enp0s31f6" + "vm-*" + ]; + networkConfig = { + Bridge = "br0"; + }; + }; + + systemd.network.netdevs."br0" = { + netdevConfig = { + Name = "br0"; + Kind = "bridge"; + }; + }; + + systemd.network.networks."10-lan-bridge" = { + matchConfig.Name = "br0"; + networkConfig = { + Address = [ "192.168.0.5/24" ]; + Gateway = "192.168.0.1"; + DNS = [ "192.168.0.1" ]; + }; + + linkConfig.RequiredForOnline = "routable"; + }; + + microvm.vms = { + vm-1 = { + flake = self; + updateFlake = "git+file:///etc/nixos"; + autostart = false; + }; + vm-2 = { + flake = self; + updateFlake = "git+file:///etc/nixos"; + autostart = false; + }; + }; + } + ]; + overlays = [ ]; + }; + + # Laptop + dn-lap = { + hostname = "dn-lap"; + username = "danny"; + domain = "net.dn"; + extra-modules = [ + lanzaboote.nixosModules.lanzaboote + ./system/dev/dn-lap + ]; + overlays = [ + ]; + }; + + # Server + dn-server = { + hostname = "dn-server"; + username = "danny"; + domain = "net.dn"; + extra-modules = [ + inputs.nix-minecraft.nixosModules.minecraft-servers + inputs.nix-tmodloader.nixosModules.tmodloader + ./system/dev/dn-server + ./pkgs/options/dovecot.nix + ]; + overlays = [ + inputs.nix-minecraft.overlay + inputs.nix-tmodloader.overlay + (import ./pkgs/overlays/dovecot.nix) + ]; + }; }; - }; - in { - nixosConfigurations = - (builtins.mapAttrs ( - dev: conf: let - domain = - if conf.domain != null - then conf.domain - else "local"; + in + { + nixosConfigurations = + (builtins.mapAttrs ( + dev: conf: + let + domain = if conf.domain != null then conf.domain else "local"; inherit (conf) username hostname; in - nixpkgs.lib.nixosSystem { - modules = - [ - { - system.stateVersion = nix-version; - home-manager = { - backupFileExtension = "backup-hm"; - useUserPackages = true; - useGlobalPkgs = true; - extraSpecialArgs = { - inherit - helper - inputs - system - nix-version - devices - username - ; - }; - users."${username}" = lib.mkIf (!((conf ? isVM) && (conf.isVM))) { - imports = [ - inputs.hyprland.homeManagerModules.default - inputs.caelestia-shell.homeManagerModules.default - inputs.zen-browser.homeManagerModules.${system}.default - inputs.nvf.homeManagerModules.default - { - home = { - homeDirectory = "/home/${username}"; - stateVersion = nix-version; - }; - # Let Home Manager install and manage itself. - programs.home-manager.enable = true; - } - ]; - }; - }; - networking = { - inherit domain; - hostName = hostname; - }; - nixpkgs.hostPlatform = system; - nixpkgs.config.allowUnfree = true; - nixpkgs.overlays = (import ./pkgs/overlays) ++ conf.overlays; - } - ] - ++ common-settings.modules - ++ conf.extra-modules; - specialArgs = - { - inherit username; - } - // common-settings.args; + nixpkgs.lib.nixosSystem { + modules = [ + { + system.stateVersion = nix-version; + home-manager = { + backupFileExtension = "backup-hm"; + useUserPackages = true; + useGlobalPkgs = true; + extraSpecialArgs = { + inherit + helper + inputs + system + nix-version + devices + username + ; + }; + users."${username}" = lib.mkIf (!((conf ? isVM) && (conf.isVM))) { + imports = [ + inputs.hyprland.homeManagerModules.default + inputs.caelestia-shell.homeManagerModules.default + inputs.zen-browser.homeManagerModules.${system}.default + inputs.nvf.homeManagerModules.default + { + home = { + homeDirectory = "/home/${username}"; + stateVersion = nix-version; + }; + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + } + ]; + }; + }; + networking = { + inherit domain; + hostName = hostname; + }; + nixpkgs.hostPlatform = system; + nixpkgs.config.allowUnfree = true; + nixpkgs.overlays = (import ./pkgs/overlays) ++ conf.overlays; + } + ] + ++ common-settings.modules + ++ conf.extra-modules; + specialArgs = { + inherit username; } - ) - devices) - // - # VM For k8s - ( - let - vmList = let - kubeMasterIP = "192.168.0.6"; - kubeMasterHostname = "api.kube"; - kubeMasterAPIServerPort = 6443; - kubeApi = "https://${kubeMasterHostname}:${toString kubeMasterAPIServerPort}"; - in { - # master - vm-1 = { - ip = "192.168.0.6"; - mac = "02:00:00:00:00:01"; - extraConfig = { - networking.extraHosts = "${kubeMasterIP} ${kubeMasterHostname}"; - environment.systemPackages = with pkgs; [ - kompose - kubectl - kubernetes - ]; + // common-settings.args; + } + ) devices) + // + # VM For k8s + ( + let + vmList = + let + kubeMasterIP = "192.168.0.6"; + kubeMasterHostname = "api.kube"; + kubeMasterAPIServerPort = 6443; + kubeApi = "https://${kubeMasterHostname}:${toString kubeMasterAPIServerPort}"; + in + { + # master + vm-1 = { + ip = "192.168.0.6"; + mac = "02:00:00:00:00:01"; + extraConfig = { + networking.extraHosts = "${kubeMasterIP} ${kubeMasterHostname}"; + environment.systemPackages = with pkgs; [ + kompose + kubectl + kubernetes + ]; - services.kubernetes = { - roles = [ - "master" - "node" - ]; + services.kubernetes = { + roles = [ + "master" + "node" + ]; - masterAddress = kubeMasterHostname; - apiserverAddress = kubeApi; - easyCerts = true; - apiserver = { - securePort = kubeMasterAPIServerPort; - advertiseAddress = kubeMasterIP; + masterAddress = kubeMasterHostname; + apiserverAddress = kubeApi; + easyCerts = true; + apiserver = { + securePort = kubeMasterAPIServerPort; + advertiseAddress = kubeMasterIP; + }; + + addons.dns.enable = true; + }; + + systemd.services.link-kube-config = { + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${pkgs.writeShellScript "link-kube-config.sh" '' + target="/etc/kubernetes/cluster-admin.kubeconfig" + if [ -e "$target" ]; then + [ ! -d "/root/.kube" ] && mkdir -p "/root/.kube" + ln -sf $target /root/.kube/config + fi + ''}"; + }; + }; + }; }; + # Node + vm-2 = { + ip = "192.168.0.7"; + mac = "02:00:00:00:00:02"; + extraConfig = { + networking.extraHosts = "${kubeMasterIP} ${kubeMasterHostname}"; - addons.dns.enable = true; - }; + environment.systemPackages = with pkgs; [ + kompose + kubectl + kubernetes + ]; - systemd.services.link-kube-config = { - wantedBy = ["multi-user.target"]; - serviceConfig = { - Type = "oneshot"; - ExecStart = "${pkgs.writeShellScript "link-kube-config.sh" '' - target="/etc/kubernetes/cluster-admin.kubeconfig" - if [ -e "$target" ]; then - [ ! -d "/root/.kube" ] && mkdir -p "/root/.kube" - ln -sf $target /root/.kube/config - fi - ''}"; + services.kubernetes = { + roles = [ "node" ]; + masterAddress = kubeMasterHostname; + easyCerts = true; + + kubelet.kubeconfig.server = kubeApi; + apiserverAddress = kubeApi; + addons.dns.enable = true; + }; + }; }; }; - }; - }; - # Node - vm-2 = { - ip = "192.168.0.7"; - mac = "02:00:00:00:00:02"; - extraConfig = { - networking.extraHosts = "${kubeMasterIP} ${kubeMasterHostname}"; - environment.systemPackages = with pkgs; [ - kompose - kubectl - kubernetes + mkMicrovm = name: value: { + hypervisor = "qemu"; + vcpu = 4; + mem = 8192; + interfaces = [ + { + type = "tap"; + id = "${name}"; + mac = value.mac; + } + ]; + shares = [ + { + tag = "ro-store"; + source = "/nix/store"; + mountPoint = "/nix/.ro-store"; + } ]; - - services.kubernetes = { - roles = ["node"]; - masterAddress = kubeMasterHostname; - easyCerts = true; - - kubelet.kubeconfig.server = kubeApi; - apiserverAddress = kubeApi; - addons.dns.enable = true; - }; }; - }; - }; - - mkMicrovm = name: value: { - hypervisor = "qemu"; - vcpu = 4; - mem = 8192; - interfaces = [ - { - type = "tap"; - id = "${name}"; - mac = value.mac; - } - ]; - shares = [ - { - tag = "ro-store"; - source = "/nix/store"; - mountPoint = "/nix/.ro-store"; - } - ]; - }; - in - lib.mapAttrs' ( - name: value: + in + lib.mapAttrs' ( + name: value: lib.nameValuePair name ( nixpkgs.lib.nixosSystem { inherit system; @@ -448,15 +458,15 @@ systemd.network.networks."20-lan" = { matchConfig.Type = "ether"; networkConfig = { - Address = ["${value.ip}/24"]; + Address = [ "${value.ip}/24" ]; Gateway = "192.168.0.1"; - DNS = ["192.168.0.1"]; + DNS = [ "192.168.0.1" ]; DHCP = "no"; }; }; systemd.services.br-netfilter = { - wantedBy = ["multi-user.target"]; + wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStart = "/run/current-system/sw/bin/modprobe br_netfilter"; }; @@ -479,23 +489,22 @@ ]; } ) + ) vmList ) - vmList - ) - // { - vps = nixpkgs.lib.nixosSystem { - inherit system; - specialArgs = common-settings.args; - modules = [ - inputs.disko.nixosModules.disko - ./system/dev/generic - ]; + // { + vps = nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = common-settings.args; + modules = [ + inputs.disko.nixosModules.disko + ./system/dev/generic + ]; + }; }; - }; - packages."${system}" = { - vm-1 = self.nixosConfigurations.vm-1.config.microvm.declaredRunner; - vm-2 = self.nixosConfigurations.vm-2.config.microvm.declaredRunner; + packages."${system}" = { + vm-1 = self.nixosConfigurations.vm-1.config.microvm.declaredRunner; + vm-2 = self.nixosConfigurations.vm-2.config.microvm.declaredRunner; + }; }; - }; } diff --git a/home/user/nvf.nix b/home/user/nvf.nix index 4278a2e..4b4d6b5 100644 --- a/home/user/nvf.nix +++ b/home/user/nvf.nix @@ -2,8 +2,11 @@ pkgs, lib, osConfig, + inputs, + system, ... -}: let +}: +let inherit (lib.generators) mkLuaInline; suda-nvim = pkgs.vimUtils.buildVimPlugin { @@ -15,7 +18,13 @@ hash = "sha256-46sy3rAdOCULVt1RkIoGdweoV3MqQaB33Et9MrxI6Lk="; }; }; -in { + + marks-nvim = pkgs.vimUtils.buildVimPlugin { + name = "marks-nvim"; + src = inputs.marks-nvim; + }; +in +{ programs.nvf = { enable = true; settings = { @@ -69,6 +78,12 @@ in { suda = { package = suda-nvim; }; + marks = { + package = marks-nvim; + setup = '' + require("marks").setup {} + ''; + }; }; keymaps = [ @@ -76,16 +91,16 @@ in { # Explorer { key = "e"; - mode = ["n"]; + mode = [ "n" ]; action = ":Neotree toggle"; silent = true; desc = "Toggle file explorer"; } - # Fzf lua + # === Fzf lua === # { key = ""; silent = true; - mode = ["n"]; + mode = [ "n" ]; action = ":FzfLua files"; nowait = true; unique = true; @@ -93,7 +108,7 @@ in { } { key = "/"; - mode = ["n"]; + mode = [ "n" ]; action = ":FzfLua live_grep"; nowait = true; unique = true; @@ -103,7 +118,7 @@ in { { key = "ss"; silent = true; - mode = ["n"]; + mode = [ "n" ]; action = ":FzfLua lsp_document_symbols"; nowait = true; unique = true; @@ -113,23 +128,37 @@ in { { key = "sS"; silent = true; - mode = ["n"]; + mode = [ "n" ]; action = ":FzfLua lsp_workspace_symbols"; unique = true; nowait = true; desc = "Find symbols (workspace)"; } + # Registers + { + key = ''""''; + mode = [ "n" ]; + action = ":FzfLua registers"; + desc = "Registers"; + } + # Marks + { + key = "''"; + mode = [ "n" ]; + action = ":FzfLua marks"; + desc = "Marks"; + } # === Buffer === # { key = "bo"; - mode = ["n"]; + mode = [ "n" ]; action = ":BufferLineCloseOther"; desc = "Close other buffer"; } { key = "bS"; - mode = ["n"]; + mode = [ "n" ]; action = ":SudaWrite"; desc = "Save file as root"; } @@ -148,48 +177,48 @@ in { } { key = ""; - mode = ["i"]; + mode = [ "i" ]; action = ""; desc = "Shift left"; } { key = "gd"; - mode = ["n"]; + mode = [ "n" ]; action = ":FzfLua lsp_definitions"; nowait = true; desc = "Go to definition"; } { key = "gD"; - mode = ["n"]; + mode = [ "n" ]; action = ":FzfLua lsp_declarations"; nowait = true; desc = "Go to declaration"; } { key = "gi"; - mode = ["n"]; + mode = [ "n" ]; action = ":FzfLua lsp_implementations"; nowait = true; desc = "Go to implementation"; } { key = "gr"; - mode = ["n"]; + mode = [ "n" ]; action = ":FzfLua lsp_references"; nowait = true; desc = "List references"; } { key = "n"; - mode = ["n"]; + mode = [ "n" ]; action = ":NoiceAll"; nowait = true; desc = "Notifications"; } { key = ""; - mode = ["n"]; + mode = [ "n" ]; action = ":noh"; desc = "Clear highlight"; } @@ -197,14 +226,14 @@ in { # === Tab === # { key = ">"; - mode = ["v"]; + mode = [ "v" ]; action = ">gv"; silent = true; desc = "Shift right"; } { key = "<"; - mode = ["v"]; + mode = [ "v" ]; action = "