diff --git a/.gitignore b/.gitignore index f2ccda5..f295f42 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,2 @@ result -result-* -localnotes.md -*.qcow2 \ No newline at end of file +result-* \ No newline at end of file diff --git a/README.md b/README.md index e2a9b9e..2ec089f 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## Overview -This repository manages **multiple NixOS systems** using a shared modular configuration. +This repository maanges **multiple NixOS systems** using a shared modular configuration. It's designed to be **secure, composable, and automated** using modern Nix tooling. - **Laptop ("neon")**: Portable KVM/Swiss-Army Knife diff --git a/flake.lock b/flake.lock index 0bc246f..87bf043 100644 --- a/flake.lock +++ b/flake.lock @@ -135,22 +135,6 @@ "type": "github" } }, - "flake-compat_2": { - "flake": false, - "locked": { - "lastModified": 1751685974, - "narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=", - "ref": "refs/heads/main", - "rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1", - "revCount": 92, - "type": "git", - "url": "https://git.lix.systems/lix-project/flake-compat.git" - }, - "original": { - "type": "git", - "url": "https://git.lix.systems/lix-project/flake-compat.git" - } - }, "flake-parts": { "inputs": { "nixpkgs-lib": [ @@ -173,27 +157,6 @@ } }, "flake-parts_2": { - "inputs": { - "nixpkgs-lib": [ - "nvf", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1760948891, - "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, - "flake-parts_3": { "inputs": { "nixpkgs-lib": [ "stylix", @@ -276,11 +239,11 @@ ] }, "locked": { - "lastModified": 1762964643, - "narHash": "sha256-RYHN8O/Aja59XDji6WSJZPkJpYVUfpSkyH+PEupBJqM=", + "lastModified": 1762787259, + "narHash": "sha256-t2U/GLLXHa2+kJkwnFNRVc2fEJ/lUfyZXBE5iKzJdcs=", "owner": "nix-community", "repo": "home-manager", - "rev": "827f2a23373a774a8805f84ca5344654c31f354b", + "rev": "37a3d97f2873e0f68711117c34d04b7c7ead8f4e", "type": "github" }, "original": { @@ -315,28 +278,13 @@ "type": "github" } }, - "mnw": { - "locked": { - "lastModified": 1758834834, - "narHash": "sha256-Y7IvY4F8vajZyp3WGf+KaiIVwondEkMFkt92Cr9NZmg=", - "owner": "Gerg-L", - "repo": "mnw", - "rev": "cfbc7d1cc832e318d0863a5fc91d940a96034001", - "type": "github" - }, - "original": { - "owner": "Gerg-L", - "repo": "mnw", - "type": "github" - } - }, "nixos-hardware": { "locked": { - "lastModified": 1762847253, - "narHash": "sha256-BWWnUUT01lPwCWUvS0p6Px5UOBFeXJ8jR+ZdLX8IbrU=", + "lastModified": 1762463231, + "narHash": "sha256-hv1mG5j5PTbnWbtHHomzTus77pIxsc4x8VrMjc7+/YE=", "owner": "nixos", "repo": "nixos-hardware", - "rev": "899dc449bc6428b9ee6b3b8f771ca2b0ef945ab9", + "rev": "52113c4f5cfd1e823001310e56d9c8d0699a6226", "type": "github" }, "original": { @@ -347,11 +295,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1762977756, - "narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=", + "lastModified": 1762596750, + "narHash": "sha256-rXXuz51Bq7DHBlfIjN7jO8Bu3du5TV+3DSADBX7/9YQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55", + "rev": "b6a8526db03f735b89dd5ff348f53f752e7ddc8e", "type": "github" }, "original": { @@ -386,30 +334,6 @@ "type": "github" } }, - "nvf": { - "inputs": { - "flake-compat": "flake-compat_2", - "flake-parts": "flake-parts_2", - "mnw": "mnw", - "nixpkgs": [ - "nixpkgs" - ], - "systems": "systems" - }, - "locked": { - "lastModified": 1762622004, - "narHash": "sha256-NpzzgaoMK8aRHnndHWbYNKLcZN0r1y6icCoJvGoBsoE=", - "owner": "notashelf", - "repo": "nvf", - "rev": "09470524a214ed26633ddc2b6ec0c9bf31a8b909", - "type": "github" - }, - "original": { - "owner": "notashelf", - "repo": "nvf", - "type": "github" - } - }, "pre-commit-hooks-nix": { "inputs": { "flake-compat": [ @@ -443,7 +367,6 @@ "lanzaboote": "lanzaboote", "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs", - "nvf": "nvf", "sops-nix": "sops-nix", "stylix": "stylix" } @@ -476,11 +399,11 @@ ] }, "locked": { - "lastModified": 1763069729, - "narHash": "sha256-A91a+K0Q9wfdPLwL06e/kbHeAWSzPYy2EGdTDsyfb+s=", + "lastModified": 1762659808, + "narHash": "sha256-2Kv2mANf+FRisqhpfeZ8j9firBxb23ZvEXwdcunbpGI=", "owner": "Mic92", "repo": "sops-nix", - "rev": "a2bcd1c25c1d29e22756ccae094032ab4ada2268", + "rev": "524312bc62e3f34bd9231a2f66622663d3355133", "type": "github" }, "original": { @@ -496,13 +419,13 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_3", + "flake-parts": "flake-parts_2", "gnome-shell": "gnome-shell", "nixpkgs": [ "nixpkgs" ], "nur": "nur", - "systems": "systems_2", + "systems": "systems", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", "tinted-schemes": "tinted-schemes", @@ -538,21 +461,6 @@ "type": "github" } }, - "systems_2": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "tinted-foot": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 9af0fff..1bfd0d4 100644 --- a/flake.nix +++ b/flake.nix @@ -13,96 +13,73 @@ disko.inputs.nixpkgs.follows = "nixpkgs"; stylix.url = "github:nix-community/stylix"; stylix.inputs.nixpkgs.follows = "nixpkgs"; - - #obsidian-nvim.url = "github:epwalsh/obsidian.nvim"; - nvf = { - url = "github:notashelf/nvf"; - inputs.nixpkgs.follows = "nixpkgs"; - #inputs.obsidian-nvim.follows = "obsidian-nvim"; - }; }; # https://nix.dev/tutorials/nix-language.html#named-attribute-set-argument - outputs = - inputs@{ - self, - nixpkgs, - nixos-hardware, - home-manager, - sops-nix, - lanzaboote, - disko, - stylix, - nvf, - ... - }: - let - zwLib = import ./lib { - inherit nixpkgs home-manager inputs; - }; - mkSystem = zwLib.mkSystem; - mkHome = zwLib.mkHome; - mkHomeConfigs = zwLib.mkHomeConfigs; - - # NOTE: Currently these are exclusively user-profiles which use home-manager. - # Their home-manager specific declarations are at ../users/${username}/home.nix - system = "x86_64-linux"; # TODO: Improve this from only static x86 to dynamic. - homeUserProfiles = { - jml = mkHome { - inherit system; # inputs; - username = "jml"; - extraModules = [ nvf.homeManagerModules.default ]; - }; - }; - in - { - lib = { - mkSystem = mkSystem; - }; - # NOTE: Run `nix flake show` to see what this flake has to offer. - # TODO: Enable automated formatting with something like numtide/treefmt-nix - nixosConfigurations = { - neon = mkSystem { - hostname = "neon"; - users = [ "jml" ]; - }; - lithium = mkSystem { - hostname = "lithium"; - # extraModules = [ inputs.sops-nix.nixosModules.sops ]; - users = [ - "jml" - "breakglass" - ]; - }; - titanium = mkSystem { - hostname = "titanium"; - users = [ - "jml" - ]; - homeUsers = { - jml = homeUserProfiles.jml.module; - }; - #extraModules = [ (import ./overlays) ]; - # NOTE: If I'm using a home-manager configuration on a given host, - # I also need to include the relevant modules. - # TODO: Can I instead self-reference the homeConfigurations in this flake? - extraModules = [ - stylix.nixosModules.stylix - ]; - }; - # `nix build .#nixosConfigurations.installIso.config.system.build.isoImage` - # https://github.com/nix-community/nixos-generators - installIso = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ - "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix" - ]; - specialArgs = { inherit inputs; }; - }; - }; - - # For Debugging: `home-manager build --flake .` or `nix build .#homeConfigurations."jml".activationPackage` - # `home-manager switch --flake .#jml` - # https://nix-community.github.io/home-manager/options.xhtml - homeConfigurations = mkHomeConfigs homeUserProfiles; + outputs = inputs@{self, nixpkgs, nixos-hardware, home-manager, sops-nix, lanzaboote, disko, stylix, ...}: + let + mkSystem = (import ./lib { + inherit nixpkgs home-manager inputs; + }).mkSystem; + in + { + lib = { + mkSystem = mkSystem; }; + # NOTE: Run `nix flake show` to see what this flake has to offer. + # TODO: Enable automated formatting with something like numtide/treefmt-nix + nixosConfigurations = { + neon = mkSystem { + hostname = "neon"; + users = [ "jml" ]; + }; + lithium = mkSystem { + hostname = "lithium"; + # extraModules = [ inputs.sops-nix.nixosModules.sops ]; + users = [ + "jml" + "breakglass" + ]; + }; + titanium = mkSystem { + hostname = "titanium"; + users = [ + "jml" + ]; + extraModules = [ + #(import ./overlays) + #stylix.nixosModules.stylix + { nixpkgs.config.allowUnfree = true; } + lanzaboote.nixosModules.lanzaboote + disko.nixosModules.disko + ./hosts/titanium/disko.nix + ({ pkgs, lib, ... }: { + environment.systemPackages = [ pkgs.sbctl ]; + boot.loader.systemd-boot.enable = lib.mkForce false; + boot.lanzaboote.enable = true; + boot.lanzaboote.pkiBundle = "/var/lib/sbctl"; + }) + ]; + }; + cobalt = mkSystem { + hostname = "cobalt"; + users = [ "jml" ]; + }; + # `nix build .#nixosConfigurations.installIso.config.system.build.isoImage` + # https://github.com/nix-community/nixos-generators + installIso = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + "${nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix" + ]; + specialArgs = {inherit inputs;}; + }; + }; + homeConfigurations = { + "jml" = home-manager.lib.homeManagerConfiguration { + modules = [ + ./users/jml/home.nix + ]; + }; + }; + }; } diff --git a/hosts/lithium/services/kanidm.nix b/hosts/lithium/services/kanidm.nix index b8b96de..066652f 100644 --- a/hosts/lithium/services/kanidm.nix +++ b/hosts/lithium/services/kanidm.nix @@ -44,7 +44,7 @@ in }; services.kanidm = { - package = pkgs.kanidmWithSecretProvisioning_1_7; + package = pkgs.kanidmWithSecretProvisioning; enableServer = true; serverSettings = { # NOTE: Required to start the server: https://kanidm.github.io/kanidm/stable/server_configuration.html diff --git a/hosts/neon/default.nix b/hosts/neon/default.nix index bfe9f0c..6d3d3e0 100644 --- a/hosts/neon/default.nix +++ b/hosts/neon/default.nix @@ -3,7 +3,7 @@ imports = [ ../../modules/nixos/base.nix ../../modules/nixos/audio.nix - ../../modules/nixos/desktop + ../../modules/nixos/desktop.nix # https://github.com/NixOS/nixos-hardware/blob/master/README.md#using-nix-flakes-support inputs.nixos-hardware.nixosModules.gpd-pocket-3 # override from nixos-hardware diff --git a/hosts/titanium/configuration.nix b/hosts/titanium/configuration.nix index 45987c6..acc06b8 100644 --- a/hosts/titanium/configuration.nix +++ b/hosts/titanium/configuration.nix @@ -6,12 +6,9 @@ environment.systemPackages = with pkgs; [ sbctl # Secure-Boot helix nil # nice for editing '.nix' - (discord.override { withVencord = true; }) + discord signal-desktop obs-studio - halloy # IRC - gimp3 - nyxt # browser ]; # Hardware Specific programs... #programs.ryzen-monitor-ng.enable = true; diff --git a/hosts/titanium/game-emulation.nix b/hosts/titanium/game-emulation.nix index e0ba3d2..b970492 100644 --- a/hosts/titanium/game-emulation.nix +++ b/hosts/titanium/game-emulation.nix @@ -15,8 +15,8 @@ let mupen64plus # Nintendo 64 - Maybe simple64 some day. dolphin # GameCube mgba # GameBoy / Color / Advance - #melonds # Nintendo DS - #citra # Nintendo 3DS + melonds # Nintendo DS + citra # Nintendo 3DS # Sony diff --git a/hosts/titanium/hardware.nix b/hosts/titanium/hardware.nix index a11bb78..4204ed2 100644 --- a/hosts/titanium/hardware.nix +++ b/hosts/titanium/hardware.nix @@ -13,7 +13,6 @@ boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; - # boot.blacklistedKernelModules = [ "nouveau" ]; boot.extraModulePackages = [ ]; fileSystems."/" = diff --git a/hosts/titanium/meetings.nix b/hosts/titanium/meetings.nix deleted file mode 100644 index ed827ec..0000000 --- a/hosts/titanium/meetings.nix +++ /dev/null @@ -1,4 +0,0 @@ -{ ... }: -{ - programs.zoom-us.enable = true; -} diff --git a/hosts/titanium/nvidia.nix b/hosts/titanium/nvidia.nix index af7717f..66b3fa2 100644 --- a/hosts/titanium/nvidia.nix +++ b/hosts/titanium/nvidia.nix @@ -14,12 +14,9 @@ # https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/nvidia-x11/generic.nix#L65 nixpkgs.config.nvidia.acceptLicense = true; hardware.nvidia = { - # TODO: Consider legacy drivers. - # https://discourse.nixos.org/t/cant-use-nvidia-offload-mode/27791/8 package = config.boot.kernelPackages.nvidiaPackages.latest; modesetting.enable = true; - # Open Source Drivers: https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus - open = false; + open = true; nvidiaSettings = true; powerManagement.enable = false; powerManagement.finegrained = false; diff --git a/lib/default.nix b/lib/default.nix index f3d2ac9..65ee05a 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,113 +1,68 @@ -{ - nixpkgs, - home-manager, - inputs, - ... -}: +{ nixpkgs, home-manager, inputs, ... }: let allOverlays = import (../overlays) { inherit nixpkgs; }; - getPkgs = - system: - import nixpkgs { +in +{ + # It's not really that I care about whether a system is a desktop system or + # a server system, but moreso that I care about whether a system is headless or not. + # I also care about things like if it's darwin, or wsl. + # TODO: Expand this to actually make use of extraSpecialArgs and pass special + # args to the relevant places. + mkSystem = { + hostname, + system ? "x86_64-linux", + users ? [], + extraModules ? [], + extraSpecialArgs ? {} + }: + let + pkgs_with_overlays = import nixpkgs { inherit system; overlays = allOverlays; }; -in -{ - mkSystem = - { - hostname, - system ? "x86_64-linux", - users ? [ ], - extraModules ? [ ], - homeUsers ? { }, - extraSpecialArgs ? { }, - }: - let - pkgs_with_overlays = import nixpkgs { - inherit system; - overlays = allOverlays; - }; - hostModule = import ../hosts/${hostname} { - inherit inputs; + hostModule = import ../hosts/${hostname} { + inherit inputs; + pkgs = pkgs_with_overlays; + }; + userModules = map (name: + import ../users/${name} { pkgs = pkgs_with_overlays; - }; - userModules = map ( - name: - import ../users/${name} { - pkgs = pkgs_with_overlays; - lib = nixpkgs.lib; - } - ) users; + lib = nixpkgs.lib; + } + ) users; - formattedHomeUsers = nixpkgs.lib.mapAttrs (username: moduleList: { - imports = moduleList; - }) homeUsers; - in + homeUserNames = builtins.filter (name: + builtins.pathExists ../users/${name}/home.nix + ) users; + + homeUsers = nixpkgs.lib.listToAttrs (map (name: { + name = name; + value = import ../users/${name}/home.nix { + username = name; + pkgs = pkgs_with_overlays; + lib = nixpkgs.lib; + }; + }) homeUserNames); + in nixpkgs.lib.nixosSystem { inherit system; - modules = [ - hostModule - ] - ++ userModules - ++ extraModules - ++ ( - if homeUsers != { } then - [ - home-manager.nixosModules.home-manager - { - #home-manager.useGlobalPkgs = true; # NOTE: Incompatible with nixpkgs.{config,overlays} - home-manager.useUserPackages = true; - home-manager.backupFileExtension = "hm-bak"; - - # Directly inject the module lists? (isn't this the problem?) - home-manager.users = formattedHomeUsers; - home-manager.extraSpecialArgs = { inherit inputs; }; - } - ] - else - [ ] - ); + # pkgs = import inputs.nixpkgs { + # inherit system; + # overlays = allOverlays; + # config = { allowUnfree = true; nvidia.acceptLicense = true; }; + # }; + modules = [ hostModule ] + ++ userModules + ++ extraModules + ++ (if homeUserNames != [] then [ + home-manager.nixosModules.home-manager + { + home-manager.backupFileExtension = "hm-bak"; + home-manager.users = homeUsers; + } + ] else []); specialArgs = { inherit inputs hostname; - } - // extraSpecialArgs; + } // extraSpecialArgs; }; - - getUserHomeModule = - username: pkgs: inputs: - import ../users/${username}/home.nix { - inherit username pkgs inputs; - lib = nixpkgs.lib; - }; - - /** - This function returns an attribute set { module, config }. - */ - mkHome = - { - username, - system ? "x86_64-linux", - extraModules ? [ ], - }: - let - pkgs_with_overlays = getPkgs system; - moduleList = [ - (import ../users/${username}/home.nix { - inherit inputs username; - pkgs = pkgs_with_overlays; - lib = nixpkgs.lib; - }) - ] - ++ extraModules; - in - { - module = moduleList; - config = home-manager.lib.homeManagerConfiguration { - pkgs = pkgs_with_overlays; - modules = moduleList; - }; - }; - - mkHomeConfigs = userProfiles: nixpkgs.lib.mapAttrs (username: profile: profile.config) userProfiles; } diff --git a/modules/nixos/gaming.nix b/modules/nixos/gaming.nix index 1e86c7e..69dcd1b 100644 --- a/modules/nixos/gaming.nix +++ b/modules/nixos/gaming.nix @@ -5,12 +5,11 @@ zw.gaming.enable = lib.mkEnableOption "Enable Gaming"; }; - # https://wiki.nixos.org/wiki/Category:Gaming config = lib.mkIf config.zw.gaming.enable { environment.systemPackages = with pkgs; [ mangohud protonup-qt - lutris # TODO: Having an issue after flake update + # lutris # TODO: Having an issue after flake update bottles heroic ]; @@ -21,11 +20,5 @@ protontricks.enable = true; gamescopeSession.enable = true; }; - - programs.gamemode.enable = true; - programs.gamescope = { - enable = true; - capSysNice = true; - }; }; } diff --git a/users/jml/default.nix b/users/jml/default.nix index 69afa40..592e6ba 100644 --- a/users/jml/default.nix +++ b/users/jml/default.nix @@ -1,9 +1,6 @@ { pkgs, lib, ... }: { programs.fish.enable = true; - environment.systemPackages = [ - pkgs.home-manager - ]; users.users.jml = { shell = pkgs.fish; home = diff --git a/users/jml/home.nix b/users/jml/home.nix index f056c62..a26b392 100644 --- a/users/jml/home.nix +++ b/users/jml/home.nix @@ -1,10 +1,4 @@ -{ - username, - pkgs, - lib, - inputs, - ... -}: +{ username, pkgs, lib, ... }: { nixpkgs.config.allowUnfree = true; # The following line is needed if I start using hyprland Home Manager Module @@ -16,8 +10,8 @@ sessionVariables = { EDITOR = "hx"; }; - - homeDirectory = + + homeDirectory = if pkgs.stdenv.isLinux then lib.mkDefault "/home/${username}" else if pkgs.stdenv.isDarwin then @@ -25,26 +19,24 @@ else abort "Unsupported OS"; }; - home.packages = - with pkgs; - [ ] - # linux only - # TODO: Add a test for linux + desktop environment - ++ (lib.optionals pkgs.stdenv.isLinux [ - cfspeedtest - helix - nil - ]) - # linux + desktop manager - #++ (lib.optionals (pkgs.stdenv.isLinux && osConfig.services.desktopManager.enabled != null) - #[ - # firefox - #]) - # darwin only - ++ (lib.optionals pkgs.stdenv.isDarwin [ - cfspeedtest - ripgrep - ]); + home.packages = with pkgs; [ ] + # linux only + # TODO: Add a test for linux + desktop environment + ++ (lib.optionals pkgs.stdenv.isLinux [ + cfspeedtest + helix + nil + ]) + # linux + desktop manager + #++ (lib.optionals (pkgs.stdenv.isLinux && osConfig.services.desktopManager.enabled != null) + #[ + # firefox + #]) + # darwin only + ++ (lib.optionals pkgs.stdenv.isDarwin [ + cfspeedtest + ripgrep + ]); programs = { fish.enable = true; @@ -108,7 +100,7 @@ Cryptomining = true; Fingerprinting = true; }; - + Homepage.StartPage = "previous-session"; FirefoxHome = { Search = true; @@ -141,12 +133,12 @@ id = 0; name = "default"; isDefault = true; - settings = { + settings = { "widget.disable-workspace-management" = true; }; search = { force = true; - default = "ddg"; # DuckDuckGo + default = "ddg"; # DuckDuckGo }; }; }; @@ -155,7 +147,6 @@ # TODO: figure out how to get config.programs..enable style # internal references inside this file. # There's some quirks with how this is used in lib/default.nix - # TODO: Use mergiraf for conflict resolution in jj too. programs.jujutsu = { enable = true; #enableFishIntegration = true; @@ -167,8 +158,6 @@ }; }; - # TODO: Configure Mergiraf - # https://mergiraf.org/introduction.html programs.git = { enable = true; settings = { @@ -202,7 +191,6 @@ init.defaultBranch = "main"; log.decorate = "full"; log.date = "iso"; - # NOTE: Initially diff3 was for me, now it's for me and mergiraf automation. merge.conflictStyle = "diff3"; }; # Cribbed from: https://github.com/gitattributes/gitattributes @@ -316,212 +304,9 @@ ''; }; - # TODO: Implement support for at least - # Nix, Python, Rust, Golang - # TODO: Sort out why TF, `.nix` files tabs are cooked in neovim rn. - # It corrects things on document save, but this line for example started with an 8-long tabstop - programs.nvf = { - enable = true; - # When using the Home-Manager Module for nvf, the settings go into the following attribute set. - # https://notashelf.github.io/nvf/index.xhtml#sec-hm-flakes - settings.vim = { - viAlias = true; - vimAlias = true; - - # TODO: For some reason spellcheck is having a very difficult time getting - # a wordlist. - #spellcheck = { - # enable = true; - # programmingWordlist.enable = true; - #}; - - lsp = { - enable = true; - formatOnSave = true; - lspkind.enable = false; - lightbulb.enable = true; - lspsaga.enable = false; - trouble.enable = true; - lspSignature.enable = false; - otter-nvim.enable = true; - nvim-docs-view.enable = true; - }; - - languages = { - enableDAP = true; - enableExtraDiagnostics = true; - enableFormat = true; - enableTreesitter = true; - - nix = { - enable = true; - lsp.enable = true; - lsp.server = "nixd"; - extraDiagnostics.enable = true; - format.enable = true; - format.type = "nixfmt"; - treesitter.enable = true; - }; - markdown.enable = true; - typst.enable = true; - - assembly.enable = true; - bash.enable = true; - clang.enable = true; - - python.enable = true; - rust = { - enable = true; - # TODO: null_ls is now deprecated. - # https://github.com/NotAShelf/nvf/issues/1175 - # https://github.com/NotAShelf/nvf/blob/main/.github/CONTRIBUTING.md - crates.enable = true; - }; - go.enable = true; - zig.enable = true; - - ts.enable = true; - html.enable = true; - css.enable = true; - sql.enable = true; - }; - - visuals = { - nvim-scrollbar.enable = true; # Configurable Visual Scrollbar (Can pair with Cursor, ALE, Diagnostics, Gitsigns, and hlslens) - nvim-web-devicons.enable = true; # Nerdfont Icons for use by other plugins - nvim-cursorline.enable = true; # Highlight Words & Lines on the cursor - cinnamon-nvim.enable = true; # Smooth Scrolling for any movement command. - fidget-nvim.enable = true; # UI for Notifications & LSP Progress Messages - - highlight-undo.enable = true; # Highlight changed text after any non-insert actions - indent-blankline.enable = true; # Indentation Guides - }; - - statusline = { - lualine = { - # Fancy Status Line - enable = true; - theme = "catppuccin"; - }; - }; - - theme = { - enable = true; - name = "catppuccin"; - style = "mocha"; - transparent = false; - }; - - autopairs.nvim-autopairs.enable = true; # Pair up ", {, (, etc. - # blink-cmp is a compiled rust binary while nvim-cmp is a pure lua plugin... - autocomplete.blink-cmp.enable = true; - # Code Snippets Engine /w support for Lua, VSCode, and SnipMate snippets. - snippets.luasnip.enable = true; - - filetree.neo-tree.enable = true; # Filesystem tree sidebar... - tabline.nvimBufferline.enable = true; # Shows buffers as tabs at the top. - treesitter.context.enable = true; - binds = { - whichKey.enable = true; # Shows your available keybindings in a popup - cheatsheet.enable = true; # Searchable in-editor cheatsheet that uses Telescope - }; - telescope.enable = true; # Fuzzy Finder, central to many other plugins. - - git = { - enable = true; - gitsigns.enable = true; # Git Info in Buffers + Gutters - gitsigns.codeActions.enable = false; - neogit.enable = true; # Interactive Git - }; - - # TODO: Consider switching to `minimap-nvim` for rust-based minimap. - # codewindow may be tightly integrated with treesitter though... - minimap.codewindow.enable = true; - dashboard.alpha.enable = true; # Greeter - notify.nvim-notify.enable = true; # Fancy Configurable Notification Manager - projects.project-nvim.enable = true; - - utility = { - ccc.enable = true; # Color Picker - diffview-nvim.enable = true; - icon-picker.enable = true; - surround.enable = true; # Change Surrounding Delimiter pairs `ysiw)` - leetcode-nvim.enable = true; # Allow solving LeetCode problems directly inside neovim - multicursors.enable = true; # Edit with multiple cursors simultaneously - smart-splits.enable = true; # Split-Pane Management - undotree.enable = true; # Undo history visualizer - nvim-biscuits.enable = true; # Shows the start of a code block from the bottom - - motion = { - # NOTE: https://github.com/smoka7/hop.nvim - hop.enable = true; # EasyMotion like, allowing you to jump anywhere in the document with as few keystrokes as possible - leap.enable = true; # Jump to anywhere visible - # TODO: I sort of hate how precognition injects itself in virtual - # lines, but I do like that it can be used to give a reminder. - precognition.enable = false; # Helps with discovering motions to navigate your current buffer - }; - images.img-clip.enable = true; - }; - - # TODO: Get Obsidian Working. - notes = { - # obsidian.enable = true; # neovim fails to build with this enabled. - mind-nvim.enable = true; - todo-comments.enable = true; - }; - - terminal = { - toggleterm = { - enable = true; - lazygit.enable = true; - }; - }; - - ui = { - borders.enable = true; - noice.enable = true; - colorizer.enable = true; - modes-nvim.enable = false; # this looks terrible with catppuccin - illuminate.enable = true; - breadcrumbs = { - enable = true; - navbuddy.enable = true; - }; - smartcolumn = { - enable = true; - setupOpts.custom_colorcolumn = { - nix = "110"; - ruby = "120"; - java = "130"; - go = [ - "90" - "130" - ]; - }; - }; - fastaction.enable = true; - }; - - assistant = { - chatgpt.enable = false; - copilot = { - enable = false; - cmp.enable = true; - }; - codecompanion-nvim.enable = false; - # avante-nvim.enable = true; - }; - - session.nvim-session-manager.enable = true; # Save sessions to reopen later - gestures.gesture-nvim.enable = false; # mouse gesture support? - comments.comment-nvim.enable = true; # Fancy commenting - presence.neocord.enable = true; # Discord Rich Presence - }; - }; - programs.vscode = { enable = true; - mutableExtensionsDir = true; # mutually exclusive to programs.vscode.profiles + mutableExtensionsDir = true; # mutually exclusive to programs.vscode.profiles profiles.default.userSettings = { "[nix]"."editor.tabSize" = 2; };