commit f3589154322977ecb738f90d2516d331c4bf3356 Author: botalex Date: Mon Aug 11 15:17:54 2025 +0200 neovim diff --git a/configuration.nix b/configuration.nix new file mode 100755 index 0000000..6d4a5d8 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,209 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ + config, + pkgs, + lib, + inputs, + ... +}: + +{ + imports = [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "nixos"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "Europe/Copenhagen"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_DK.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "da_DK.UTF-8"; + LC_IDENTIFICATION = "da_DK.UTF-8"; + LC_MEASUREMENT = "da_DK.UTF-8"; + LC_MONETARY = "da_DK.UTF-8"; + LC_NAME = "da_DK.UTF-8"; + LC_NUMERIC = "da_DK.UTF-8"; + LC_PAPER = "da_DK.UTF-8"; + LC_TELEPHONE = "da_DK.UTF-8"; + LC_TIME = "da_DK.UTF-8"; + }; + + # dont worry about it + nix = { + channel.enable = false; + registry = lib.mapAttrs (_: flake: { inherit flake; }) inputs; + nixPath = lib.mapAttrsToList (n: _: "${n}=flake:${n}") inputs; + settings = { + nix-path = lib.mapAttrsToList (n: _: "${n}=flake:${n}") inputs; + flake-registry = ""; # optional, ensures flakes are truly self-contained + experimental-features = [ + "nix-command" + "flakes" + "pipe-operators" + ]; + }; + }; + + services.openssh = { + enable = true; + }; + + programs.neovim = { + enable = true; + viAlias = true; + vimAlias = true; + # extraPackages = with pkgs ; [ + # ripgrep fd fzf git unzip gcc + # ]; + }; + + home-manager = { + extraSpecialArgs = { inherit inputs; }; + users = { + "botserver" = import ./home.nix; + }; + }; + + # environment.etc."/nvim".source = builtins.fetchGit { + # url = "https://github.com/MagicBOTAlex/NVimConfigs.git"; + # ref = "master"; + # }; + + # Enable the X11 windowing system. + services.xserver.enable = true; + + # Enable the XFCE Desktop Environment. + services.xserver.displayManager.lightdm.enable = true; + services.xserver.desktopManager.xfce.enable = true; + + # Configure keymap in X11 + services.xserver.xkb = { + layout = "dk"; + variant = ""; + }; + + # Configure console keymap + console.keyMap = "dk-latin1"; + + # Enable CUPS to print documents. + services.printing.enable = true; + + # Enable sound with pipewire. + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + #jack.enable = true; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + +# Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.botserver = { + isNormalUser = true; + description = "botserver"; + extraGroups = [ + "networkmanager" + "wheel" + ]; + packages = with pkgs; [ + # thunderbird + ]; + + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAhiPhFbCi64NduuV794omgS8mctBLXtqxbaEJyUo6lg botalex@DESKTOPSKTOP-ENDVV0V" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFhTExbc9m4dCK6676wGiA8zPjE0l/9Fz2yf0IKvUvg snorre@archlinux" + ]; + }; + + # Enable automatic login for the user. + services.displayManager.autoLogin.enable = true; + services.displayManager.autoLogin.user = "botserver"; + + # Install firefox. + programs.firefox.enable = true; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + # environment.systemPackages = with pkgs; [ + # vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + # wget + # ]; + environment.systemPackages = with pkgs; [ + neovim + wget + iproute2 + curl + fastfetch + ]; + + programs.git = { + enable = true; + config = { + user = { + name = "botalex"; + email = "zhen@deprived.dev"; + }; + }; + }; + + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "25.05"; # Did you read the comment? + +} diff --git a/flake.lock b/flake.lock new file mode 100755 index 0000000..b288a71 --- /dev/null +++ b/flake.lock @@ -0,0 +1,48 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1754886238, + "narHash": "sha256-LTQomWOwG70lZR+78ZYSZ9sYELWNq3HJ7/tdHzfif/s=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "0d492b89d1993579e63b9dbdaed17fd7824834da", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1754725699, + "narHash": "sha256-iAcj9T/Y+3DBy2J0N+yF9XQQQ8IEb5swLFzs23CdP88=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "85dbfc7aaf52ecb755f87e577ddbe6dbbdbc1054", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100755 index 0000000..b5833bc --- /dev/null +++ b/flake.nix @@ -0,0 +1,29 @@ +{ + inputs = { + # get pinned version of nixpkgs. update with `nix flake update nixpkgs` or `nix flake update` for all inputs + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + + # home manager + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + }; + outputs = + { self, nixpkgs, ... }@inputs: + { + # configuration name matches hostname, so this system is chosen by default + nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { + # pass along all the inputs and stuff to the system function + specialArgs = { inherit inputs; }; + modules = [ + # import configuration + ./configuration.nix + + # home manager part 2 + inputs.home-manager.nixosModules.default + ]; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100755 index 0000000..7c65a5d --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,55 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ + config, + lib, + pkgs, + modulesPath, + ... +}: + +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "usbhid" + "usb_storage" + "sd_mod" + ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/5b969590-9593-4037-ba97-91bb0a832e35"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/1DC7-70A2"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" + ]; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.eno1.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..cdb2d32 --- /dev/null +++ b/home.nix @@ -0,0 +1,18 @@ +{ + pkgs, + lib, + ... +}: +{ + imports = [ ./modules/nvim.nix ]; + + # packages only for this user + home.packages = [ ]; + + # env variables for this user + home.sessionVariables = { + EDITOR = "nvim"; # use nvim as editor + }; + + home.stateVersion = "25.11"; +} diff --git a/modules/nvim.nix b/modules/nvim.nix new file mode 100644 index 0000000..1155b37 --- /dev/null +++ b/modules/nvim.nix @@ -0,0 +1,106 @@ +{ + config, + lib, + pkgs, + ... +}: + +with lib; +let + build-dependent-pkgs = with pkgs; [ + acl + attr + bzip2 + curl + libsodium + libssh + libxml2 + openssl + stdenv.cc.cc + systemd + util-linux + xz + zlib + zstd + glib + libcxx + ]; + + makePkgConfigPath = x: makeSearchPathOutput "dev" "lib/pkgconfig" x; + makeIncludePath = x: makeSearchPathOutput "dev" "include" x; + + nvim-depends-library = pkgs.buildEnv { + name = "nvim-depends-library"; + paths = map lib.getLib build-dependent-pkgs; + extraPrefix = "/lib/nvim-depends"; + pathsToLink = [ "/lib" ]; + ignoreCollisions = true; + }; + nvim-depends-include = pkgs.buildEnv { + name = "nvim-depends-include"; + paths = splitString ":" (makeIncludePath build-dependent-pkgs); + extraPrefix = "/lib/nvim-depends/include"; + ignoreCollisions = true; + }; + nvim-depends-pkgconfig = pkgs.buildEnv { + name = "nvim-depends-pkgconfig"; + paths = splitString ":" (makePkgConfigPath build-dependent-pkgs); + extraPrefix = "/lib/nvim-depends/pkgconfig"; + ignoreCollisions = true; + }; + buildEnv = [ + "CPATH=${config.home.profileDirectory}/lib/nvim-depends/include" + "CPLUS_INCLUDE_PATH=${config.home.profileDirectory}/lib/nvim-depends/include/c++/v1" + "LD_LIBRARY_PATH=${config.home.profileDirectory}/lib/nvim-depends/lib" + "LIBRARY_PATH=${config.home.profileDirectory}/lib/nvim-depends/lib" + "NIX_LD_LIBRARY_PATH=${config.home.profileDirectory}/lib/nvim-depends/lib" + "PKG_CONFIG_PATH=${config.home.profileDirectory}/lib/nvim-depends/pkgconfig" + ]; +in +{ + home.packages = with pkgs; [ + patchelf + nvim-depends-include + nvim-depends-library + nvim-depends-pkgconfig + ripgrep + ]; + home.extraOutputsToInstall = ["nvim-depends"]; + home.shellAliases.nvim = + (concatStringsSep " " buildEnv) + + " SQLITE_CLIB_PATH=${pkgs.sqlite.out}/lib/libsqlite3.so " + + "nvim"; + + programs.neovim = { + enable = true; + package = pkgs.neovim-unwrapped; + + withNodeJs = true; + withPython3 = true; + withRuby = true; + + extraPackages = with pkgs; [ + doq + sqlite + cargo + clang + cmake + gcc + gnumake + ninja + pkg-config + yarn + texlivePackages.latex + tree-sitter + ]; + + extraLuaPackages = ls: with ls; [ luarocks ]; + }; + + xdg.configFile."nvim".source = pkgs.fetchFromGitHub { + owner = "MagicBOTAlex"; + repo = "NVimConfigs"; + rev = "2927ce8e62e47b0b542ae18623cb6dbee6c32add"; + hash = "sha256-f45NJYaiBLAQ9RmjzEPzI6LBrlj/vdA+ONkdRAzAIjQ="; + }; +}