From dc9fbdefe2e794b41f898d2b1723e506c9eee4b9 Mon Sep 17 00:00:00 2001 From: ringofstorms Date: Mon, 1 Apr 2024 10:32:53 -0500 Subject: [PATCH] organization on joe, todo gpdpocket3 --- flake.nix | 130 +++++++++++------- .../components/caps_to_escape_in_tty.nix | 10 ++ .../_common/components/font_jetbrainsmono.nix | 7 + systems/_common/components/gnome_wayland.nix | 18 +++ systems/_common/components/home_manager.nix | 22 +++ systems/_common/components/ssh.nix | 10 ++ systems/_common/components/systemd_boot.nix | 15 ++ systems/_common/components/todo_neovim.nix | 13 ++ systems/_common/configuration.nix | 44 +++--- systems/_common/ragenix.nix | 2 +- systems/joe/configuration.nix | 91 +++--------- users/josh/theme/gnome.nix | 5 +- 12 files changed, 219 insertions(+), 148 deletions(-) create mode 100644 systems/_common/components/caps_to_escape_in_tty.nix create mode 100644 systems/_common/components/font_jetbrainsmono.nix create mode 100644 systems/_common/components/gnome_wayland.nix create mode 100644 systems/_common/components/home_manager.nix create mode 100644 systems/_common/components/ssh.nix create mode 100644 systems/_common/components/systemd_boot.nix create mode 100644 systems/_common/components/todo_neovim.nix diff --git a/flake.nix b/flake.nix index 4665810..b7b0006 100644 --- a/flake.nix +++ b/flake.nix @@ -23,63 +23,97 @@ outputs = { self, nypkgs, nixpkgs, ... } @ inputs: let - nixosSystem = nixpkgs.lib.nixosSystem; - mkMerge = nixpkgs.lib.mkMerge; - - sett = { - user = { - username = "josh"; - git = { - email = "ringofstorms@gmail.com"; - name = "RingOfStorms (Joshua Bell)"; + nixConfigs = [ + { + name = "gpdPocket3"; + opts = { + system = "x86_64-linux"; }; - }; + settings = { + user = { + username = "josh"; + git = { + email = "ringofstorms@gmail.com"; + name = "RingOfStorms (Joshua Bell)"; + }; + }; + }; + } + { + name = "joe"; + opts = { + system = "x86_64-linux"; + }; + settings = { + user = { + username = "josh"; + git = { + email = "ringofstorms@gmail.com"; + name = "RingOfStorms (Joshua Bell)"; + }; + }; + }; + } + ]; + + directories = { flakeDir = ./.; publicsDir = ./publics; secretsDir = ./secrets; systemsDir = ./systems; usersDir = ./users; }; - - ypkgs = nypkgs.legacyPackages.x86_64-linux; - ylib = ypkgs.lib; in { - nixosConfigurations = { - gpdPocket3 = nixosSystem { - system = "x86_64-linux"; - modules = [ ./systems/_common/configuration.nix ./systems/gpdPocket3/configuration.nix ]; - specialArgs = inputs // { - inherit ylib; - settings = sett // { - system = { - # TODO remove these probably not needed anymore with per machine specified here - hostname = "gpdPocket3"; - architecture = "x86_64-linux"; - timeZone = "America/Chicago"; # TODO roaming? - defaultLocale = "en_US.UTF-8"; - }; - }; - }; - }; - joe = nixosSystem { - system = "x86_64-linux"; - modules = [ ./systems/_common/configuration.nix ./systems/joe/configuration.nix ]; - specialArgs = inputs // { - inherit ylib; - settings = sett // { - system = { - # TODO remove these probably not needed anymore with per machine specified here - hostname = "joe"; - architecture = "x86_64-linux"; - # TODO remove? - timeZone = "America/Chicago"; - defaultLocale = "en_US.UTF-8"; - }; - }; - }; - }; - }; + nixosConfigurations = builtins.foldl' + (acc: nixConfig: + acc // { + "${nixConfig.name}" = nixpkgs.lib.nixosSystem + { + modules = [ ./systems/_common/configuration.nix ./systems/${nixConfig.name}/configuration.nix ]; + specialArgs = inputs // { + ylib = nypkgs.legacyPackages.${nixConfig.opts.system}.lib; + settings = directories // nixConfig.settings // { + system = nixConfig.opts // { + hostname = nixConfig.name; + }; + }; + }; + } // nixConfig.opts; + }) + { } + nixConfigs; + + # nixosConfigurations = { + # gpdPocket3 = nixosSystem { + # system = "x86_64-linux"; + # modules = [ ./systems/_common/configuration.nix ./systems/gpdPocket3/configuration.nix ]; + # specialArgs = inputs // { + # inherit ylib; + # settings = directories // { + # system = { + # # TODO remove these probably not needed anymore with per machine specified here + # hostname = "gpdPocket3"; + # architecture = "x86_64-linux"; + # }; + # }; + # }; + # }; + # joe = nixosSystem { + # system = "x86_64-linux"; + # modules = [ ./systems/_common/configuration.nix ./systems/joe/configuration.nix ]; + # specialArgs = inputs // { + # inherit ylib; + # settings = directories // { + # system = { + # # TODO remove these probably not needed anymore with per machine specified here + # hostname = "joe"; + # architecture = "x86_64-linux"; + # }; + # }; + # }; + # }; + # }; # homeConfigurations = { }; }; } diff --git a/systems/_common/components/caps_to_escape_in_tty.nix b/systems/_common/components/caps_to_escape_in_tty.nix new file mode 100644 index 0000000..300a708 --- /dev/null +++ b/systems/_common/components/caps_to_escape_in_tty.nix @@ -0,0 +1,10 @@ +{ pkgs, ... }: +{ + # I want this globally even for root so doing it outside of home manager + services.xserver.xkbOptions = "caps:escape"; + console = { + earlySetup = true; + packages = with pkgs; [ terminus_font ]; + useXkbConfig = true; # use xkb.options in tty. (caps -> escape) + }; +} diff --git a/systems/_common/components/font_jetbrainsmono.nix b/systems/_common/components/font_jetbrainsmono.nix new file mode 100644 index 0000000..ee605d8 --- /dev/null +++ b/systems/_common/components/font_jetbrainsmono.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: +{ + fonts.packages = with pkgs; [ + (nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) + ]; +} + diff --git a/systems/_common/components/gnome_wayland.nix b/systems/_common/components/gnome_wayland.nix new file mode 100644 index 0000000..1845bde --- /dev/null +++ b/systems/_common/components/gnome_wayland.nix @@ -0,0 +1,18 @@ +{ pkgs, ... }: +{ + services.xserver.enable = true; + services.xserver.displayManager.gdm = { + enable = true; + autoSuspend = false; + wayland = true; + }; + services.xserver.desktopManager.gnome.enable = true; + services.gnome.core-utilities.enable = false; + environment.systemPackages = with pkgs; [ + gnome.dconf-editor + gnomeExtensions.workspace-switch-wraparound + # wayland clipboard in terminal + wl-clipboard + ]; +} + diff --git a/systems/_common/components/home_manager.nix b/systems/_common/components/home_manager.nix new file mode 100644 index 0000000..4a60add --- /dev/null +++ b/systems/_common/components/home_manager.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, settings, ylib, ... } @ inputs: +let + home-manager = builtins.fetchTarball { + url = "https://github.com/nix-community/home-manager/archive/release-23.11.tar.gz"; + # to get hash run `nix-prefetch-url --unpack "https://github.com/nix-community/home-manager/archive/release-23.11.tar.gz"` + sha256 = "0g51f2hz13dk953i501fmc6935difhz60741nypaqwz127hy5ldk"; + }; +in +{ + imports = + [ + # home manager import + (import "${home-manager}/nixos") + ]; + # Home manager options + security.polkit.enable = true; + home-manager.useUserPackages = true; + home-manager.useGlobalPkgs = true; + home-manager.extraSpecialArgs = { inherit settings; inherit ylib; inherit (inputs) ragenix; inherit (config) age; }; +} + + diff --git a/systems/_common/components/ssh.nix b/systems/_common/components/ssh.nix new file mode 100644 index 0000000..33ec80b --- /dev/null +++ b/systems/_common/components/ssh.nix @@ -0,0 +1,10 @@ +{ ... }: +{ + # Enable the OpenSSH daemon. + services.openssh.enable = true; + services.openssh.settings.PermitRootLogin = "yes"; + # Open ports in the firewall. + networking.firewall.allowedTCPPorts = [ + 22 # sshd + ]; +} diff --git a/systems/_common/components/systemd_boot.nix b/systems/_common/components/systemd_boot.nix new file mode 100644 index 0000000..ca92bcf --- /dev/null +++ b/systems/_common/components/systemd_boot.nix @@ -0,0 +1,15 @@ +{ ... }: +{ + # Use the systemd-boot EFI boot loader. + boot.loader = { + systemd-boot = { + enable = true; + consoleMode = "keep"; + }; + timeout = 5; + efi = { + canTouchEfiVariables = true; + }; + }; +} + diff --git a/systems/_common/components/todo_neovim.nix b/systems/_common/components/todo_neovim.nix new file mode 100644 index 0000000..faf7d23 --- /dev/null +++ b/systems/_common/components/todo_neovim.nix @@ -0,0 +1,13 @@ +{ pkgs, ... }: +{ + environment.systemPackages = with pkgs; [ + # extras, more for my neovim setup TODO move these into a more isolated place for nvim setup? Should be its own flake probably + cargo + rustc + nodejs_21 + python313 + nodePackages.cspell + # ripgrep (now in common but will be needed in neovim flake) + ]; +} + diff --git a/systems/_common/configuration.nix b/systems/_common/configuration.nix index f01a5f0..648d3f1 100644 --- a/systems/_common/configuration.nix +++ b/systems/_common/configuration.nix @@ -1,48 +1,40 @@ { config, lib, pkgs, settings, ylib, ... } @ inputs: let - home-manager = builtins.fetchTarball { - url = "https://github.com/nix-community/home-manager/archive/release-23.11.tar.gz"; - # to get hash run `nix-prefetch-url --unpack "https://github.com/nix-community/home-manager/archive/release-23.11.tar.gz"` - sha256 = "0g51f2hz13dk953i501fmc6935difhz60741nypaqwz127hy5ldk"; - }; + defaultLocal = "en_US.UTF-8"; in { imports = [ + # Secrets management + ./ragenix.nix # Include the results of the hardware scan. (/${settings.systemsDir}/${settings.system.hostname}/hardware-configuration.nix) - # home manager import - (import "${home-manager}/nixos") - ./ragenix.nix + # Include the specific machine's config. + (/${settings.systemsDir}/${settings.system.hostname}/configuration.nix) ]; # Enable flakes nix.settings.experimental-features = [ "nix-command" "flakes" ]; - # Home manager options - security.polkit.enable = true; - home-manager.useUserPackages = true; - home-manager.useGlobalPkgs = true; - home-manager.extraSpecialArgs = { inherit settings; inherit ylib; inherit (inputs) ragenix; inherit (config) age; }; - # ========== # Common # ========== networking.hostName = settings.system.hostname; - time.timeZone = settings.system.timeZone; + # TODO do I want this dynamic at all? Roaming? + time.timeZone = "America/Chicago"; - # Select internationalisation properties. - i18n.defaultLocale = settings.system.defaultLocale; + # Select internationalization properties. + i18n.defaultLocale = defaultLocal; i18n.extraLocaleSettings = { - LC_ADDRESS = settings.system.defaultLocale; - LC_IDENTIFICATION = settings.system.defaultLocale; - LC_MEASUREMENT = settings.system.defaultLocale; - LC_MONETARY = settings.system.defaultLocale; - LC_NAME = settings.system.defaultLocale; - LC_NUMERIC = settings.system.defaultLocale; - LC_PAPER = settings.system.defaultLocale; - LC_TELEPHONE = settings.system.defaultLocale; - LC_TIME = settings.system.defaultLocale; + LC_ADDRESS = defaultLocal; + LC_IDENTIFICATION = defaultLocal; + LC_MEASUREMENT = defaultLocal; + LC_MONETARY = defaultLocal; + LC_NAME = defaultLocal; + LC_NUMERIC = defaultLocal; + LC_PAPER = defaultLocal; + LC_TELEPHONE = defaultLocal; + LC_TIME = defaultLocal; }; # Some basics diff --git a/systems/_common/ragenix.nix b/systems/_common/ragenix.nix index 84fd326..9da2932 100644 --- a/systems/_common/ragenix.nix +++ b/systems/_common/ragenix.nix @@ -5,7 +5,7 @@ let in { imports = [ ragenix.nixosModules.age ]; - environment.systemPackages = [ ragenix.packages.${settings.system.architecture}.default ]; + environment.systemPackages = [ ragenix.packages.${settings.system.system}.default ]; age = { secrets = diff --git a/systems/joe/configuration.nix b/systems/joe/configuration.nix index 10e9cdd..00c97a0 100644 --- a/systems/joe/configuration.nix +++ b/systems/joe/configuration.nix @@ -2,86 +2,36 @@ { imports = [ + # TODO revisit + (settings.systemsDir + "/_common/components/todo_neovim.nix") + # Common components this machine uses + (settings.systemsDir + "/_common/components/systemd_boot.nix") + (settings.systemsDir + "/_common/components/ssh.nix") + (settings.systemsDir + "/_common/components/caps_to_escape_in_tty.nix") + (settings.systemsDir + "/_common/components/font_jetbrainsmono.nix") + (settings.systemsDir + "/_common/components/home_manager.nix") + (settings.systemsDir + "/_common/components/gnome_wayland.nix") + # Users this machine has (settings.usersDir + "/root/configuration.nix") (settings.usersDir + "/josh/configuration.nix") ]; - # Use the systemd-boot EFI boot loader. - boot.loader = { - systemd-boot = { - enable = true; - consoleMode = "keep"; - }; - timeout = 5; - efi = { - canTouchEfiVariables = true; - }; - }; - - # We want connectivity + # Machine specific configuration + hardware.enableAllFirmware = true; + # Connectivity networking.networkmanager.enable = true; hardware.bluetooth.enable = true; - + environment.shellAliases = { + wifi = "nmtui"; + }; # Enable sound. sound.enable = true; hardware.pulseaudio.enable = true; hardware.pulseaudio.package = pkgs.pulseaudioFull; - hardware.enableAllFirmware = true; + # environment.systemPackages = with pkgs; [ ]; - # I want this globally even for root so doing it outside of home manager - services.xserver.xkbOptions = "caps:escape"; - console = { - earlySetup = true; - packages = with pkgs; [ terminus_font ]; - # We want to be able to read the screen so use a 32 sized font... - # font = "${pkgs.terminus_font}/share/consolefonts/ter-132n.psf.gz"; - useXkbConfig = true; # use xkb.options in tty. (caps -> escape) - }; - - # Enable the OpenSSH daemon. - services.openssh.enable = true; - services.openssh.settings.PermitRootLogin = "yes"; - - # Open ports in the firewall. - networking.firewall.allowedTCPPorts = [ - 22 # sshd - ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - - fonts.packages = with pkgs; [ - (nerdfonts.override { fonts = [ "JetBrainsMono" ]; }) - ]; - - services.xserver.enable = true; - services.xserver.displayManager.gdm = { - enable = true; - autoSuspend = false; - wayland = true; - }; - services.xserver.desktopManager.gnome.enable = true; - services.gnome.core-utilities.enable = false; - - # List packages installed in system profile. To search, run: - # $ nix search wget - nixpkgs.config.allowUnfree = true; - environment.systemPackages = with pkgs; [ - # extras, more for my neovim setup TODO move these into a more isolated place for nvim setup? Should be its own flake probably - cargo - rustc - nodejs_21 - python313 - # ripgrep # now in common - nodePackages.cspell - ]; - - # does for all shells. Can use `programs.zsh.shellAliases` for specific ones - environment.shellAliases = { - wifi = "nmtui"; - }; - - - # nvidia gfx + # nvidia gfx https://nixos.wiki/wiki/Nvidia # ========= # Enable OpenGL hardware.opengl = { @@ -91,9 +41,8 @@ }; # Load nvidia driver for Xorg and Wayland - services.xserver.videoDrivers = ["nvidia"]; + services.xserver.videoDrivers = [ "nvidia" ]; hardware.nvidia = { - # Modesetting is required. modesetting.enable = true; @@ -117,7 +66,7 @@ open = false; # Enable the Nvidia settings menu, - # accessible via `nvidia-settings`. + # accessible via `nvidia-settings`. nvidiaSettings = true; # Optionally, you may need to select the appropriate driver version for your specific GPU. diff --git a/users/josh/theme/gnome.nix b/users/josh/theme/gnome.nix index 4928670..d50a442 100644 --- a/users/josh/theme/gnome.nix +++ b/users/josh/theme/gnome.nix @@ -4,8 +4,8 @@ # use `dconf dump /` before and after and diff the files for easy editing of dconf below # > `dconf dump / > /tmp/dconf_dump_start && watch -n0.5 'dconf dump / > /tmp/dconf_dump_current && diff --color /tmp/dconf_dump_start /tmp/dconf_dump_current -U12'` # OR (Must be logged into user directly, no SU to user will work): `dconf watch /` - gnome.dconf-editor - gnomeExtensions.workspace-switch-wraparound + # gnome.dconf-editor + # gnomeExtensions.workspace-switch-wraparound #gnomeExtensions.forge # probably don't need on this on tiny laptop but may explore this instead of sway for my desktop ]; @@ -16,6 +16,7 @@ favorite-apps = [ # "vivaldi-stable.desktop" "Alacritty.desktop" + # Wezterm is not playing nice with me on gnome wayland :( # "org.wezfurlong.wezterm.desktop" "firefox.desktop" "org.gnome.Nautilus.desktop"