From ccecf6f5aa4264488086b1a159d8436cf9a43684 Mon Sep 17 00:00:00 2001 From: ShatteredMINT Date: Thu, 12 Dec 2024 15:09:41 +0100 Subject: [PATCH] initial commit --- .gitignore | 1 + configuration.nix | 156 ++++++++++++++++++++++++++++++++++++++++ flake.lock | 49 +++++++++++++ flake.nix | 32 +++++++++ nvidia.nix | 24 +++++++ plasma.nix | 22 ++++++ users/shatteredmint.nix | 71 ++++++++++++++++++ 7 files changed, 355 insertions(+) create mode 100644 .gitignore create mode 100644 configuration.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 nvidia.nix create mode 100644 plasma.nix create mode 100644 users/shatteredmint.nix diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..577b0a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +hardware-configuration.nix diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..412a8c5 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,156 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page, on +# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). + +{ config, lib, pkgs, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + nixpkgs.config.allowUnfree = true; + + # Use the systemd-boot EFI boot loader. + # changed to grub following the (ZFS tutorial)[https://nixos.wiki/wiki/ZFS] + boot.loader.grub = { + enable = true; + zfsSupport = true; + efiSupport = true; + mirroredBoots = [ + { devices = [ "nodev" ]; path = "/boot"; } + ]; + }; + # leftover from the original config + boot.loader.efi.canTouchEfiVariables = true; + + # mount network shares + fileSystems."/mnt/nas/private" = { + device = "dashboard.omv:/ShatteredMINT"; + fsType = "nfs"; + options = [ "x-systemd.automount" "noauto" ]; + + }; + fileSystems."/mnt/nas/shared" = { + device = "dashboard.omv:/default-nas"; + fsType = "nfs"; + options = [ "x-systemd.automount" "noauto" ]; + + }; + + networking.hostName = "nix-desk"; # Define your hostname. + networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. + # required for ZFS + networking.hostId = "00000001"; + + # Set your time zone. + time.timeZone = "Europe/Berlin"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + i18n.extraLocaleSettings = { + #LC_CTYPE="de_DE.UTF-8"; + LC_NUMERIC="de_DE.UTF-8"; + LC_TIME="de_DE.UTF-8"; + #LC_COLLATE="de_DE.UTF-8"; + LC_MONETARY="de_DE.UTF-8"; + LC_PAPER="de_DE.UTF-8"; + LC_NAME="de_DE.UTF-8"; + LC_ADDRESS="de_DE.UTF-8"; + LC_TELEPHONE="de_DE.UTF-8"; + LC_MEASUREMENT="de_DE.UTF-8"; + LC_IDENTIFICATION="de_DE.UTF-8"; + }; + + console = { + # font = "Lat2-Terminus16"; + keyMap = "de"; + # useXkbConfig = true; # use xkb.options in tty. + }; + + fonts = { + packages = with pkgs; [ + nerdfonts + + # TODO after 25.05 + # change to only install explicit fonts + # nerd-fonts.jetbrains-mono + # nerd-fonts.jetbrains + ]; + + fontconfig = { + defaultFonts = { + monospace = [ "JetBrainsMono" ]; + }; + }; + }; + + programs.zsh.enable = true; + # needed for completions according to https://nix-community.github.io/home-manager/options.xhtml#opt-programs.zsh.enableCompletion + environment.pathsToLink = [ "/share/zsh" ]; + + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable touchpad support (enabled default in most desktopManager). + # services.libinput.enable = true; + + # enable flatpak + services.flatpak.enable = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + wget + htop + ]; + + # allow specific users to affect system configuration + users.groups.nixos-admins = {}; + users.users.root.extraGroups = [ "nixos-admins" ]; + + # 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 option defines the first version of NixOS you have installed on this particular machine, + # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. + # + # Most users should NEVER change this value after the initial install, for any reason, + # even if you've upgraded your system to a new NixOS release. + # + # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, + # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how + # to actually do that. + # + # This value being lower than the current NixOS release does NOT mean your system is + # out of date, out of support, or vulnerable. + # + # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, + # and migrated your data accordingly. + # + # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . + system.stateVersion = "24.11"; # Did you read the comment? + +} + diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..5b09964 --- /dev/null +++ b/flake.lock @@ -0,0 +1,49 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733572789, + "narHash": "sha256-zjO6m5BqxXIyjrnUziAzk4+T4VleqjstNudSqWcpsHI=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "c7ffc9727d115e433fd884a62dc164b587ff651d", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-24.11", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1733808091, + "narHash": "sha256-KWwINTQelKOoQgrXftxoqxmKFZb9pLVfnRvK270nkVk=", + "owner": "NixOs", + "repo": "nixpkgs", + "rev": "a0f3e10d94359665dba45b71b4227b0aeb851f8e", + "type": "github" + }, + "original": { + "owner": "NixOs", + "ref": "nixos-24.11", + "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 100644 index 0000000..b14ba62 --- /dev/null +++ b/flake.nix @@ -0,0 +1,32 @@ +{ + description = "Flake to handle all my infrastructure"; + + inputs = { + nixpkgs.url = "github:NixOs/nixpkgs/nixos-24.11"; + home-manager = { + url = "github:nix-community/home-manager/release-24.11"; + + # follow defined nixpkgs to prevent version mismatch + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = {self, nixpkgs, home-manager, ... }@inputs: + let + lib = nixpkgs.lib; + in { + nixosConfigurations = { + nix-desk = lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = inputs; + modules = [ + ./configuration.nix + ./nvidia.nix + ./plasma.nix + + ./users/shatteredmint.nix + ]; + }; + }; + }; +} diff --git a/nvidia.nix b/nvidia.nix new file mode 100644 index 0000000..d85df48 --- /dev/null +++ b/nvidia.nix @@ -0,0 +1,24 @@ +# configure nvidia graphics drivers +# see https://nixos.wiki/wiki/Nvidia + +{ config, lib, pkgs, ... }: +{ + hardware.graphics.enable = true; + + services.xserver.videoDrivers = ["nvidia"]; + + hardware.nvidia = { + modesetting.enable = true; + + powerManagement.enable = false; + powerManagement.finegrained = false; + + # open-source kernel modules + open = true; + + nvidiaSettings = true; + + # set specific version + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; +} diff --git a/plasma.nix b/plasma.nix new file mode 100644 index 0000000..6d245ee --- /dev/null +++ b/plasma.nix @@ -0,0 +1,22 @@ +{ config, libs, pkgs, ... }: +{ + # install Plasma Desktop + services.xserver.enable = true; # TODO figure out how to use without X11 + services.xserver.xkb.layout = "de"; + services.desktopManager.plasma6.enable = true; + services.displayManager.sddm.wayland.enable = true; + + # remove clutter + environment.plasma6.excludePackages = [ + pkgs.kdePackages.discover + pkgs.kdePackages.elisa + ]; + + + + # Enable sound. + services.pipewire = { + enable = true; + pulse.enable = true; + }; +} diff --git a/users/shatteredmint.nix b/users/shatteredmint.nix new file mode 100644 index 0000000..784bd19 --- /dev/null +++ b/users/shatteredmint.nix @@ -0,0 +1,71 @@ +# home-manager user configuration + +{ config, lib, pkgs, home-manager, ... }: +{ + imports = [home-manager.nixosModules.home-manager]; + + users.users.shatteredmint = { + isNormalUser = true; + extraGroups = [ "wheel" "nixos-admins" ]; + shell = pkgs.zsh; + }; + + + home-manager.users.shatteredmint = { + home.stateVersion = "24.11"; + + home.username = "shatteredmint"; + home.homeDirectory = "/home/shatteredmint"; + + programs.zsh = { + enable = true; + autosuggestion = { + enable = true; + highlight = "fg=white,bg=green,bold"; + }; + defaultKeymap = "viins"; + dotDir = ".config/zsh"; + + history = { + ignoreAllDups = true; + }; + + initExtra = '' + bindkey '^?' backward-delete-char + bindkey '\e[3~' delete-char + autoload -Uz vcs_info + precmd() { vcs_info } + zstyle ':vcs_info:git:*' formats '%b ' + setopt PROMPT_SUBST + PROMPT='%F{green}%*%f %F{blue}%~%f %F{red}''${vcs_info_msg_0_}%f ' + ''; + + }; + + programs.git = { + enable = true; + userEmail = "shatteredmint@gmail.com"; + userName = "ShatteredMINT"; + extraConfig = { + init.defaultBranch = "main"; + }; + }; + + home.packages = with pkgs; [ + thunderbird + firefox + lazygit + veracrypt + keepassxc + yakuake + cargo + zig + clang + nil + ]; + + home.sessionPath = [ + "$HOME/scripts" + ]; + }; +}