From 436ad3f6c4b800d9920dc2a0b582e92deee17e7f Mon Sep 17 00:00:00 2001 From: Ashelyn Rose Date: Thu, 9 Mar 2023 12:11:15 -0700 Subject: [PATCH] Parameterized user config --- .gitignore | 1 + common.nix | 94 ++++++++++ configuration.nix | 168 ------------------ hosts/nyx/configuration.nix | 31 ++++ .../nyx/hardware-configuration.nix | 0 hostwinds-grub.nix | 6 + 6 files changed, 132 insertions(+), 168 deletions(-) create mode 100644 .gitignore create mode 100644 common.nix delete mode 100644 configuration.nix create mode 100644 hosts/nyx/configuration.nix rename hardware-configuration.nix => hosts/nyx/hardware-configuration.nix (100%) create mode 100644 hostwinds-grub.nix diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1cd791b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +result/ diff --git a/common.nix b/common.nix new file mode 100644 index 0000000..57cdd35 --- /dev/null +++ b/common.nix @@ -0,0 +1,94 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.ashe.common; +in { + #options.ashe = mkOption + options.ashe.common = { + timezone = mkOption { type = types.str; default = "America/Denver"; }; + locale = mkOption { type = types.str; default = "en_US.UTF-8"; }; + x11 = mkEnableOption "x11"; + shell = mkPackageOption pkgs "zsh" { }; + user = mkOption { type = types.str; default = "ashe"; }; + userFullName = mkOption { type = types.str; default = "Ashelyn"; }; + ports = mkOption { type = types.listOf types.port; default = [ 22 80 443 ]; }; + password= mkOption { type = types.str; default = ""; }; + userPackages= mkOption { type = types.listOf types.package; default = [ ]; }; + }; + + config = { + time.timeZone = cfg.timezone; + i18n.defaultLocale = cfg.locale; + services.xserver.enable = cfg.x11; + + users.defaultUserShell = cfg.shell; + + environment.systemPackages = with pkgs; [ + neovim + git + vim + wget + ]; + + services.openssh = { + enable = true; + passwordAuthentication = true; + permitRootLogin = "no"; + }; + + networking.firewall.allowedTCPPorts = cfg.ports; + + users.users.${cfg.user} = { + uid = 1000; + isNormalUser = true; + home = "/home/${cfg.user}"; + description = cfg.userFullName; + extraGroups = [ "wheel" ]; + hashedPassword = cfg.password; + packages = cfg.userPackages; + }; + + home-manager.users.${cfg.user} = { + home.stateVersion = "22.05"; + + programs.zsh = { + enable = true; + + zplug = { + enable = true; + plugins = [ + { name = "zsh-users/zsh-autosuggestions"; } + { name = "romkatv/powerlevel10k"; tags = [ as:theme depth:1 ]; } + ]; + }; + + initExtraFirst = + '' + # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. + if [[ -r "''${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" ]]; then + source "''${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" + fi + + alias vim=nvim + ''; + + initExtra = + '' + # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. + [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh + ''; + }; + }; + + + # 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 = "22.11"; # Did you read the comment? + }; +} diff --git a/configuration.nix b/configuration.nix deleted file mode 100644 index 88e2cd9..0000000 --- a/configuration.nix +++ /dev/null @@ -1,168 +0,0 @@ -# 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, ... }: -let - home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/master.tar.gz"; -in -{ - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - (import "${home-manager}/nixos") - ]; - - # Use the GRUB 2 boot loader. - boot.loader.grub.enable = true; - boot.loader.grub.version = 2; - # boot.loader.grub.efiSupport = true; - # boot.loader.grub.efiInstallAsRemovable = true; - # boot.loader.efi.efiSysMountPoint = "/boot/efi"; - # Define on which hard drive you want to install Grub. - boot.loader.grub.device = "/dev/vda"; # or "nodev" for efi only - - networking.hostName = "nyx"; # Define your hostname. - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - networking.networkmanager.enable = false; # Easiest to use and most distros use this by default. - networking.interfaces.ens3.ipv4.addresses = [ { - address = "104.168.211.198"; - prefixLength = 16; - } ]; - - networking.defaultGateway = "104.168.218.1"; - networking.nameservers = [ "8.8.8.8" ]; - - # Set your time zone. - time.timeZone = "America/Denver"; - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. - # i18n.defaultLocale = "en_US.UTF-8"; - # console = { - # font = "Lat2-Terminus16"; - # keyMap = "us"; - # useXkbConfig = true; # use xkbOptions in tty. - # }; - - # Enable the X11 windowing system. - # services.xserver.enable = true; - - - - - # Configure keymap in X11 - # services.xserver.layout = "us"; - # services.xserver.xkbOptions = { - # "eurosign:e"; - # "caps:escape" # map caps to escape. - # }; - - # Enable CUPS to print documents. - # services.printing.enable = true; - - # Enable sound. - # sound.enable = true; - # hardware.pulseaudio.enable = true; - - # Enable touchpad support (enabled default in most desktopManager). - # services.xserver.libinput.enable = true; - - users.defaultUserShell = pkgs.zsh; - # Define a user account. Don't forget to set a password with ‘passwd’. - users.users.rose = { - uid = 1000; - isNormalUser = true; - home = "/home/rose"; - description = "Ashelyn Rose"; - extraGroups = [ "wheel" ]; - hashedPassword = "[REDACTED]"; - packages = with pkgs; [ - neovim - neofetch - ]; - }; - - home-manager.users.rose = { - home.stateVersion = "22.05"; - - programs.zsh = { - enable = true; - - zplug = { - enable = true; - plugins = [ - { name = "zsh-users/zsh-autosuggestions"; } - { name = "romkatv/powerlevel10k"; tags = [ as:theme depth:1 ]; } - ]; - }; - - initExtraFirst = - '' - # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. - if [[ -r "''${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" ]]; then - source "''${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-''${(%):-%n}.zsh" - fi - - alias vim=nvim - ''; - - initExtra = - '' - # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. - [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh - ''; - }; - }; - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; [ - neovim - git - vim - wget - ]; - - # 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; - passwordAuthentication = true; - permitRootLogin = "no"; - }; - - # Open ports in the firewall. - networking.firewall.allowedTCPPorts = [ 22 80 443 ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # Copy the NixOS configuration file and link it from the resulting system - # (/run/current-system/configuration.nix). This is useful in case you - # accidentally delete configuration.nix. - # system.copySystemConfiguration = true; - - # 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 = "22.11"; # Did you read the comment? - -} - diff --git a/hosts/nyx/configuration.nix b/hosts/nyx/configuration.nix new file mode 100644 index 0000000..d50df59 --- /dev/null +++ b/hosts/nyx/configuration.nix @@ -0,0 +1,31 @@ +{ config, pkgs, ...}: +let + home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/master.tar.gz"; +in { + imports = [ + ./hardware-configuration.nix + (import "${home-manager}/nixos") + ../../common.nix + ../../hostwinds-grub.nix + ]; + + ashe.common.user = "rose"; + ashe.common.userFullName = "Ashelyn Rose"; + ashe.common.password = "[REDACTED]"; + ashe.common.userPackages = with pkgs; [ + neofetch + ]; + + + networking.hostName = "nyx"; # Define your hostname. + networking.wireless.enable = false; + networking.networkmanager.enable = false; + + networking.interfaces.ens3.ipv4.addresses = [ { + address = "104.168.211.198"; + prefixLength = 16; + } ]; + + networking.defaultGateway = "104.168.218.1"; + networking.nameservers = [ "8.8.8.8" ]; +} diff --git a/hardware-configuration.nix b/hosts/nyx/hardware-configuration.nix similarity index 100% rename from hardware-configuration.nix rename to hosts/nyx/hardware-configuration.nix diff --git a/hostwinds-grub.nix b/hostwinds-grub.nix new file mode 100644 index 0000000..ce98bbd --- /dev/null +++ b/hostwinds-grub.nix @@ -0,0 +1,6 @@ +{ config, pkgs, ...}: +{ + boot.loader.grub.enable = true; + boot.loader.grub.version = 2; + boot.loader.grub.device = "/dev/vda"; +}