From 19a05ca043b49037605e8931a45f0275bee739ba Mon Sep 17 00:00:00 2001 From: "christoph.hollizeck" Date: Fri, 22 Mar 2024 17:22:29 +0100 Subject: [PATCH] add home desktop --- flake.nix | 15 +++- .../x86_64-linux/cholli@yggdrasil/default.nix | 21 +++++ modules/nixos/nix/default.nix | 90 +++++++++++++++++++ systems/x86_64-linux/yggdrasil/default.nix | 47 ++++++++++ systems/x86_64-linux/yggdrasil/hardware.nix | 42 +++++++++ 5 files changed, 213 insertions(+), 2 deletions(-) create mode 100644 homes/x86_64-linux/cholli@yggdrasil/default.nix create mode 100644 modules/nixos/nix/default.nix create mode 100644 systems/x86_64-linux/yggdrasil/default.nix create mode 100644 systems/x86_64-linux/yggdrasil/hardware.nix diff --git a/flake.nix b/flake.nix index 7ad81f3..5a0b244 100644 --- a/flake.nix +++ b/flake.nix @@ -21,11 +21,22 @@ }; }; - outputs = inputs: - inputs.snowfall-lib.mkFlake { + outputs = inputs: let + lib = inputs.snowfall-lib.mkLib { inherit inputs; src = ./.; +snowfall = { + meta = { + name = "wyrdgard"; + title = "Wyrdgard"; + }; + + namespace = "wyrdgard"; + }; + }; + in lib.mkFlake { + channels-config = { allowUnfree = true; }; outputs-builder = channels: { formatter = channels.nixpkgs.nixpkgs-fmt; }; diff --git a/homes/x86_64-linux/cholli@yggdrasil/default.nix b/homes/x86_64-linux/cholli@yggdrasil/default.nix new file mode 100644 index 0000000..22d16fb --- /dev/null +++ b/homes/x86_64-linux/cholli@yggdrasil/default.nix @@ -0,0 +1,21 @@ +{ lib +, pkgs +, config +, ... +}: +# User information gathered by Snowfall Lib is available. +let + name = config.snowfallorg.user.name; + home = config.snowfallorg.user.home.directory; +in +{ + home = { + packages = with pkgs; [ neovim steam discord ]; + + sessionVariables = { EDITOR = "nvim"; }; + + shellAliases = { vimdiff = "nvim -d"; }; + + stateVersion = "23.11"; + }; +} diff --git a/modules/nixos/nix/default.nix b/modules/nixos/nix/default.nix new file mode 100644 index 0000000..eaab964 --- /dev/null +++ b/modules/nixos/nix/default.nix @@ -0,0 +1,90 @@ +{ options +, config +, pkgs +, lib +, inputs +, ... +}: +with lib; +with lib.wyrdgard; let + cfg = config.wyrdgard.nix; + + substituters-submodule = types.submodule ({ name, ... }: { + options = with types; { + key = mkOpt (nullOr str) null "The trusted public key for this substituter."; + }; + }); +in +{ + options.wyrdgard.nix = with types; { + enable = mkBoolOpt true "Whether or not to manage nix configuration."; + package = mkOpt package pkgs.nixUnstable "Which nix package to use."; + + default-substituter = { + url = mkOpt str "https://cache.nixos.org" "The url for the substituter."; + key = mkOpt str "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" "The trusted public key for the substituter."; + }; + + extra-substituters = mkOpt (attrsOf substituters-submodule) { } "Extra substituters to configure."; + }; + + config = mkIf cfg.enable { + assertions = + mapAttrsToList + (name: value: { + assertion = value.key != null; + message = "wyrdgard.nix.extra-substituters.${name}.key must be set"; + }) + cfg.extra-substituters; + + environment.systemPackages = with pkgs; [ + nixfmt + nix-prefetch-git + flake-checker + ]; + + nix = + let + users = + [ "root" config.wyrdgard.user.name ] + ++ optional config.services.hydra.enable "hydra"; + in + { + package = cfg.package; + + settings = + { + experimental-features = "nix-command flakes"; + http-connections = 50; + warn-dirty = false; + log-lines = 50; + sandbox = "relaxed"; + auto-optimise-store = true; + trusted-users = users; + allowed-users = users; + + substituters = + [ cfg.default-substituter.url ] + ++ (mapAttrsToList (name: value: name) cfg.extra-substituters); + trusted-public-keys = + [ cfg.default-substituter.key ] + ++ (mapAttrsToList (name: value: value.key) cfg.extra-substituters); + } + // (lib.optionalAttrs config.wyrdgard.tools.direnv.enable { + keep-outputs = true; + keep-derivations = true; + }); + + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 30d"; + }; + + # flake-utils-plus + generateRegistryFromInputs = true; + generateNixPathFromInputs = true; + linkInputs = true; + }; + }; +} diff --git a/systems/x86_64-linux/yggdrasil/default.nix b/systems/x86_64-linux/yggdrasil/default.nix new file mode 100644 index 0000000..cfdd9c4 --- /dev/null +++ b/systems/x86_64-linux/yggdrasil/default.nix @@ -0,0 +1,47 @@ +{pkgs +, config +, ... +}: { + imports = [ ./hardware.nix ]; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + users.users.cholli = { + isNormalUser = true; + extraGroups = [ "wheel" ]; + }; + + environment.systemPackages = with pkgs; [ + neovim + snowfallorg.flake + git + gitAndTools.gh + kitty + fish + vivaldi + + fd + tree + ripgrep + + nixfmt + ]; + + home-manager.useGlobalPkgs = true; + + networking.networkmanager.enable = true; + + services.xserver = { + enable = true; + displayManager.sddm.enable = true; + desktopManager.plasma5.enable = true; + layout = "us"; + xkbVariant = ""; + }; + + # Configure Home-Manager options from NixOS. + snowfallorg.user.cholli.home.config = { }; + + system.stateVersion = "23.11"; +} diff --git a/systems/x86_64-linux/yggdrasil/hardware.nix b/systems/x86_64-linux/yggdrasil/hardware.nix new file mode 100644 index 0000000..98f60d7 --- /dev/null +++ b/systems/x86_64-linux/yggdrasil/hardware.nix @@ -0,0 +1,42 @@ +# 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" "usb_storage" "usbhid" "sd_mod"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-amd"]; + boot.extraModulePackages = []; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/444a9216-59d1-46e0-9643-0b716a42ba0b"; + fsType = "ext4"; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/8310-585A"; + fsType = "vfat"; + }; + + 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.enp40s0.useDHCP = lib.mkDefault true; + # networking.interfaces.enp42s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +}