From 99a16590b3470603fdf0260fad7fa1d43fcd7a6a Mon Sep 17 00:00:00 2001 From: Annika Merris Date: Fri, 17 May 2024 08:04:19 -0400 Subject: [PATCH] Switched To A New/Modified Structure Based heavily on https://github.com/nmasur/dotfiles --- flake.lock | 67 ++---- flake.nix | 28 +-- hosts/default/configuration.nix | 143 ------------- hosts/default/hardware-configuration.nix | 39 ---- hosts/default/home.nix | 76 ------- hosts/kim/annika.nix | 124 ----------- hosts/kim/configuration.nix | 211 ------------------- hosts/kim/default.nix | 77 ++++++- hosts/kim/hardware-configuration.nix | 39 ---- hosts/virt-nix/default.nix | 93 ++++++++ modules/common/applications/default.nix | 10 + modules/common/applications/discord.nix | 25 +++ modules/common/applications/element.nix | 18 ++ modules/common/applications/firefox.nix | 27 +++ modules/common/applications/netbird.nix | 28 +++ modules/common/applications/prusa-slicer.nix | 18 ++ modules/common/default.nix | 40 ++++ modules/common/programming/default.nix | 7 + modules/common/programming/nixpkgs-fmt.nix | 18 ++ modules/common/programming/vscode.nix | 31 +++ modules/common/utilities/default.nix | 6 + modules/common/utilities/git.nix | 28 +++ modules/nixos/default.nix | 6 + modules/nixos/hardware/boot.nix | 28 +++ modules/nixos/hardware/default.nix | 11 + 25 files changed, 495 insertions(+), 703 deletions(-) delete mode 100644 hosts/default/configuration.nix delete mode 100644 hosts/default/hardware-configuration.nix delete mode 100644 hosts/default/home.nix delete mode 100644 hosts/kim/annika.nix delete mode 100644 hosts/kim/configuration.nix delete mode 100644 hosts/kim/hardware-configuration.nix create mode 100644 hosts/virt-nix/default.nix create mode 100644 modules/common/applications/default.nix create mode 100644 modules/common/applications/discord.nix create mode 100644 modules/common/applications/element.nix create mode 100644 modules/common/applications/firefox.nix create mode 100644 modules/common/applications/netbird.nix create mode 100644 modules/common/applications/prusa-slicer.nix create mode 100644 modules/common/default.nix create mode 100644 modules/common/programming/default.nix create mode 100644 modules/common/programming/nixpkgs-fmt.nix create mode 100644 modules/common/programming/vscode.nix create mode 100644 modules/common/utilities/default.nix create mode 100644 modules/common/utilities/git.nix create mode 100644 modules/nixos/default.nix create mode 100644 modules/nixos/hardware/boot.nix create mode 100644 modules/nixos/hardware/default.nix diff --git a/flake.lock b/flake.lock index a59ecbb..692fb92 100644 --- a/flake.lock +++ b/flake.lock @@ -15,22 +15,6 @@ "url": "https://flakehub.com/f/catppuccin/vscode/%2A.tar.gz" } }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, "flake-utils": { "inputs": { "systems": "systems" @@ -71,11 +55,11 @@ ] }, "locked": { - "lastModified": 1715486357, - "narHash": "sha256-4pRuzsHZOW5W4CsXI9uhKtiJeQSUoe1d2M9mWU98HC4=", + "lastModified": 1715930644, + "narHash": "sha256-W9pyM3/vePxrffHtzlJI6lDS3seANQ+Nqp+i58O46LI=", "owner": "nix-community", "repo": "home-manager", - "rev": "44677a1c96810a8e8c4ffaeaad10c842402647c1", + "rev": "e3ad5108f54177e6520535768ddbf1e6af54b59d", "type": "github" }, "original": { @@ -113,11 +97,11 @@ ] }, "locked": { - "lastModified": 1715801730, - "narHash": "sha256-7X/FAfjyQxh8mgpbNPsGoh9Dxi1Q0jF4OOJQBntCUJM=", + "lastModified": 1715885250, + "narHash": "sha256-IUFYAl3158Ig5vySnRBHoPReb2/S97bjodCo6FhzJv4=", "ref": "refs/heads/main", - "rev": "7e8a5498db41de8c67315b4a2a4f82a2072ee73b", - "revCount": 77, + "rev": "53d713eb486f21d653af3ef3528e9a19ecfc45e5", + "revCount": 81, "type": "git", "url": "https://git.lix.systems/lix-project/nixos-module" }, @@ -160,14 +144,18 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 0, + "lastModified": 1715288647, "narHash": "sha256-/vno6oUIZDSLpqS/WOqNTHwVIakrNR7R+UutJVmfohs=", - "path": "/nix/store/hqzz459vrv62vjc470vig5lf5qm7d897-source", - "type": "path" + "owner": "auxolotl", + "repo": "nixpkgs", + "rev": "fb0bb336c1365f5ab5250df84cb1406337f7d9d9", + "type": "github" }, "original": { - "id": "nixpkgs", - "type": "indirect" + "owner": "auxolotl", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs_3": { @@ -193,32 +181,9 @@ "lix": "lix", "lix-module": "lix-module", "nixpkgs": "nixpkgs_2", - "solaar": "solaar", "sops-nix": "sops-nix" } }, - "solaar": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1715441983, - "narHash": "sha256-CWRwtvZtcK8CDQCZhmv4nNp1Qmx3JXEidFQi/JMnX/M=", - "owner": "Svenum", - "repo": "Solaar-Flake", - "rev": "ee38dd45276fcb03174aec5301144514e66f4775", - "type": "github" - }, - "original": { - "owner": "Svenum", - "ref": "latest", - "repo": "Solaar-Flake", - "type": "github" - } - }, "sops-nix": { "inputs": { "nixpkgs": "nixpkgs_3", diff --git a/flake.nix b/flake.nix index 3881518..0ab5745 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "Lix/Auxolotl config flake"; inputs = { - # nixpkgs.url = "github:auxolotl/nixpkgs/nixos-unstable"; + nixpkgs.url = "github:auxolotl/nixpkgs/nixos-unstable"; lix = { url = "git+https://git@git.lix.systems/lix-project/lix?ref=refs/tags/2.90-beta.1"; @@ -27,13 +27,13 @@ url = "https://flakehub.com/f/catppuccin/vscode/*.tar.gz"; }; - solaar = { - url = "github:Svenum/Solaar-Flake/latest"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + # solaar = { + # url = "github:Svenum/Solaar-Flake/latest"; + # inputs.nixpkgs.follows = "nixpkgs"; + # }; }; - outputs = { self, nixpkgs, lix-module, solaar, ... }@inputs: + outputs = { self, nixpkgs, lix-module, ... }@inputs: let system = "x86_64"; globals = rec { @@ -41,18 +41,22 @@ fullName = "Annika Merris"; gitName = fullName; gitEmail = "me@annikamerris.com"; - nixfilesRepo = "ssh://git@forgejo.local.merr.is:2222/annika/nixos2.git"; + # nixfilesRepo = "ssh://git@forgejo.local.merr.is:2222/annika/nixos2.git"; }; - in + in rec { nixosConfigurations = { kim = import ./hosts/kim { - inherit inputs globals overlays; + inherit inputs globals; + }; + virt-nix = import ./hosts/virt-nix { + inherit inputs globals; }; }; - homeConfigurations = { - kim = nixosConfigurations.kim.config.home-manager.users.${globals.user}.home; - }; + homeConfigurations = { + kim = nixosConfigurations.kim.config.home-manager.users.${globals.user}.home; + virt-nix = nixosConfigurations.kim.config.home-manager.users.${globals.user}.home; + }; }; } diff --git a/hosts/default/configuration.nix b/hosts/default/configuration.nix deleted file mode 100644 index 4f05697..0000000 --- a/hosts/default/configuration.nix +++ /dev/null @@ -1,143 +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, inputs, ... }: - -{ - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - inputs.home-manager.nixosModules.default - ]; - - # Bootloader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - networking.hostName = "kim"; # 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 = "America/New_York"; - - # Select internationalisation properties. - i18n.defaultLocale = "en_US.UTF-8"; - - i18n.extraLocaleSettings = { - LC_ADDRESS = "en_US.UTF-8"; - LC_IDENTIFICATION = "en_US.UTF-8"; - LC_MEASUREMENT = "en_US.UTF-8"; - LC_MONETARY = "en_US.UTF-8"; - LC_NAME = "en_US.UTF-8"; - LC_NUMERIC = "en_US.UTF-8"; - LC_PAPER = "en_US.UTF-8"; - LC_TELEPHONE = "en_US.UTF-8"; - LC_TIME = "en_US.UTF-8"; - }; - - nix.settings.experimental-features = [ "nix-command" "flakes" ]; - - # Enable the X11 windowing system. - services.xserver.enable = true; - - # Enable the KDE Plasma Desktop Environment. - services.displayManager.sddm.enable = true; - services.xserver.desktopManager.plasma5.enable = true; - - # Configure keymap in X11 - services.xserver.xkb = { - layout = "us"; - variant = ""; - }; - - # Enable CUPS to print documents. - services.printing.enable = true; - - # Enable sound with pipewire. - sound.enable = true; - hardware.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.annika = { - isNormalUser = true; - description = "Annika Merris"; - extraGroups = [ "networkmanager" "wheel" ]; - packages = with pkgs; [ - kate - # thunderbird - ]; - }; - - home-manager = { - extraSpecialArgs = { inherit inputs; }; - users = { - "annika" = import ./home.nix; - }; - }; - - # 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 - discord - ]; - - # 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 = "23.11"; # Did you read the comment? - -} diff --git a/hosts/default/hardware-configuration.nix b/hosts/default/hardware-configuration.nix deleted file mode 100644 index 3a8c1f1..0000000 --- a/hosts/default/hardware-configuration.nix +++ /dev/null @@ -1,39 +0,0 @@ -# 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/ba4362a3-3a0b-4227-b460-a5a9302f5966"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/DB88-8E65"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - 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.enp6s0.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/default/home.nix b/hosts/default/home.nix deleted file mode 100644 index 785d1db..0000000 --- a/hosts/default/home.nix +++ /dev/null @@ -1,76 +0,0 @@ -{ config, pkgs, ... }: - -{ - # Home Manager needs a bit of information about you and the paths it should - # manage. - home.username = "annika"; - home.homeDirectory = "/home/annika"; - - # This value determines the Home Manager release that your configuration is - # compatible with. This helps avoid breakage when a new Home Manager release - # introduces backwards incompatible changes. - # - # You should not change this value, even if you update Home Manager. If you do - # want to update the value, then make sure to first check the Home Manager - # release notes. - home.stateVersion = "23.11"; # Please read the comment before changing. - - # The home.packages option allows you to install Nix packages into your - # environment. - home.packages = [ - # # Adds the 'hello' command to your environment. It prints a friendly - # # "Hello, world!" when run. - # pkgs.hello - - # # It is sometimes useful to fine-tune packages, for example, by applying - # # overrides. You can do that directly here, just don't forget the - # # parentheses. Maybe you want to install Nerd Fonts with a limited number of - # # fonts? - # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) - - # # You can also create simple shell scripts directly inside your - # # configuration. For example, this adds a command 'my-hello' to your - # # environment: - # (pkgs.writeShellScriptBin "my-hello" '' - # echo "Hello, ${config.home.username}!" - # '') - ]; - - # Home Manager is pretty good at managing dotfiles. The primary way to manage - # plain files is through 'home.file'. - home.file = { - # # Building this configuration will create a copy of 'dotfiles/screenrc' in - # # the Nix store. Activating the configuration will then make '~/.screenrc' a - # # symlink to the Nix store copy. - # ".screenrc".source = dotfiles/screenrc; - - # # You can also set the file content immediately. - # ".gradle/gradle.properties".text = '' - # org.gradle.console=verbose - # org.gradle.daemon.idletimeout=3600000 - # ''; - }; - - # Home Manager can also manage your environment variables through - # 'home.sessionVariables'. These will be explicitly sourced when using a - # shell provided by Home Manager. If you don't want to manage your shell - # through Home Manager then you have to manually source 'hm-session-vars.sh' - # located at either - # - # ~/.nix-profile/etc/profile.d/hm-session-vars.sh - # - # or - # - # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh - # - # or - # - # /etc/profiles/per-user/annika/etc/profile.d/hm-session-vars.sh - # - home.sessionVariables = { - # EDITOR = "emacs"; - }; - - # Let Home Manager install and manage itself. - programs.home-manager.enable = true; -} diff --git a/hosts/kim/annika.nix b/hosts/kim/annika.nix deleted file mode 100644 index b555350..0000000 --- a/hosts/kim/annika.nix +++ /dev/null @@ -1,124 +0,0 @@ -{ config, pkgs, inputs, ... }: - -{ - imports = [ - inputs.sops-nix.homeManagerModules.sops - ]; - - # Let Home Manager install and manage itself. - programs.home-manager.enable = true; - - # Configure secrets stuff - sops = { - defaultSopsFile = ../../secrets/secrets.yaml; - defaultSopsFormat = "yaml"; - age.keyFile = "/home/annika/.config/sops/age/keys.txt"; - }; - - nixpkgs.config.allowUnfree = true; - # Home Manager needs a bit of information about you and the paths it should - # manage. - home.username = "annika"; - home.homeDirectory = "/home/annika"; - - # The home.packages option allows you to install Nix packages into your - # environment. - home.packages = [ - # GUI Apps - pkgs.google-chrome - pkgs.discord - pkgs.prusa-slicer - pkgs.helvum - pkgs.element-desktop - pkgs.netbird-ui - - # Terminal apps - pkgs.tmux - - # Helper stuff - pkgs.nixpkgs-fmt - - # Don't know what to call this - pkgs.spotifyd - ]; - - # Home Manager is pretty good at managing dotfiles. The primary way to manage - # plain files is through 'home.file'. - home.file = { - # # Building this configuration will create a copy of 'dotfiles/screenrc' in - # # the Nix store. Activating the configuration will then make '~/.screenrc' a - # # symlink to the Nix store copy. - # ".screenrc".source = dotfiles/screenrc; - - # # You can also set the file content immediately. - # ".gradle/gradle.properties".text = '' - # org.gradle.console=verbose - # org.gradle.daemon.idletimeout=3600000 - # ''; - }; - - # Home Manager can also manage your environment variables through - # 'home.sessionVariables'. These will be explicitly sourced when using a - # shell provided by Home Manager. If you don't want to manage your shell - # through Home Manager then you have to manually source 'hm-session-vars.sh' - # located at either - # - # ~/.nix-profile/etc/profile.d/hm-session-vars.sh - # - # or - # - # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh - # - # or - # - # /etc/profiles/per-user/annika/etc/profile.d/hm-session-vars.sh - # - home.sessionVariables = { - EDITOR = "vim"; - SUDO_EDITOR = "vim"; - }; - - programs = { - direnv = { - enable = true; - enableBashIntegration = true; - nix-direnv.enable = true; - }; - bash = { - enable = true; - }; - vscode = { - enable = true; - extensions = with pkgs.vscode-extensions; [ - bbenoist.nix - catppuccin.catppuccin-vsc - ]; - }; - firefox = { - enable = true; - policies = { - ExtensionSettings = { - "{446900e4-71c2-419f-a6a7-df9c091e268b}" = { - install_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi"; - installation_mode = "normal_installed"; - default_area = "navbar"; - }; - }; - }; - }; - git = { - enable = true; - userName = "Annika Merris"; - userEmail = "me@annikamerris.com"; - }; - }; - - # This value determines the Home Manager release that your configuration is - # compatible with. This helps avoid breakage when a new Home Manager release - # introduces backwards incompatible changes. - # - # You should not change this value, even if you update Home Manager. If you do - # want to update the value, then make sure to first check the Home Manager - # release notes. - home.stateVersion = "23.11"; # Please read the comment before changing. -} diff --git a/hosts/kim/configuration.nix b/hosts/kim/configuration.nix deleted file mode 100644 index 3777365..0000000 --- a/hosts/kim/configuration.nix +++ /dev/null @@ -1,211 +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, inputs, ... }: - -{ - imports = - [ - # Include the results of the hardware scan. - ./hardware-configuration.nix - inputs.home-manager.nixosModules.default - ]; - - nix.settings.extra-substituters = [ - "https://cache.lix.systems" - ]; - - nix.settings.trusted-public-keys = [ - "cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o=" - ]; - - # Workaround for an issue with docs and Aux - documentation.nixos.enable = false; - - # Bootloader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - - networking.hostName = "kim"; # 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 = "America/New_York"; - - # Select internationalisation properties. - i18n.defaultLocale = "en_US.UTF-8"; - - i18n.extraLocaleSettings = { - LC_ADDRESS = "en_US.UTF-8"; - LC_IDENTIFICATION = "en_US.UTF-8"; - LC_MEASUREMENT = "en_US.UTF-8"; - LC_MONETARY = "en_US.UTF-8"; - LC_NAME = "en_US.UTF-8"; - LC_NUMERIC = "en_US.UTF-8"; - LC_PAPER = "en_US.UTF-8"; - LC_TELEPHONE = "en_US.UTF-8"; - LC_TIME = "en_US.UTF-8"; - }; - - nix.settings.experimental-features = [ "nix-command" "flakes" ]; - - # Enable the X11 windowing system. - services.xserver.enable = true; - - # Enable the KDE Plasma Desktop Environment. - services.displayManager.sddm.enable = true; - services.xserver.desktopManager.plasma5.enable = true; - - # Configure keymap in X11 - services.xserver.xkb = { - layout = "us"; - variant = ""; - }; - - # Enable CUPS to print documents. - services.printing.enable = true; - - # Enable sound with pipewire. - sound.enable = true; - hardware.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.annika = { - isNormalUser = true; - description = "Annika Merris"; - extraGroups = [ "networkmanager" "wheel" ]; - shell = pkgs.bash; - packages = with pkgs; [ - # kate - ]; - }; - - # Configure secrets stuff - sops = { - defaultSopsFile = ../../secrets/secrets.yaml; - defaultSopsFormat = "yaml"; - age.keyFile = "/home/annika/.config/sops/age/keys.txt"; - - secrets."spotifyd/settings/global/password" = { }; - - templates = { - "spotifyd.conf" = { - owner = "annika"; - content = '' - [global] - username = "me@annikamerris.com" - password = "${config.sops.placeholder."spotifyd/settings/global/password"}" - use_mpris = true - device_name = "kim-nix" - device_type = "computer" - ''; - }; - }; - }; - - # Install and setup spotifyd - # sops.templates. - systemd.user.services.spotifyd = { - description = "spotify daemon"; - documentation = [ "https://github.com/Spotifyd/spotifyd" ]; - - wantedBy = [ "default.target" ]; - - serviceConfig = { - ExecStart = - "${pkgs.spotifyd}/bin/spotifyd --no-daemon --config-path ${config.sops.templates."spotifyd.conf".path}"; - Restart = "always"; - RestartSec = 12; - }; - }; - - home-manager = { - extraSpecialArgs = { inherit inputs; }; - users = { - "annika" = import ./annika.nix; - }; - }; - - nixpkgs.overlays = [ inputs.catppuccin-vsc.overlays.default ]; - - # Allow unfree packages - nixpkgs.config.allowUnfree = true; - - # Install firefox. - programs = { - firefox = { - enable = true; - }; - - steam = { - enable = true; - remotePlay.openFirewall = true; - dedicatedServer.openFirewall = true; - }; - }; - - programs.solaar.enable = 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 - git - # logiops - python3 - age # For encryption - sops # For encryption too - ]; - - # List services that you want to enable: - # Enable the OpenSSH daemon. - services.openssh.enable = true; - services.flatpak.enable = true; - services.netbird.enable = true; - services.ratbagd.enable = true; - - hardware.bluetooth.enable = true; - hardware.bluetooth.powerOnBoot = true; - - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - networking.firewall.allowedUDPPorts = [ - 5353 - ]; - # 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 = "23.11"; # Did you read the comment? - -} diff --git a/hosts/kim/default.nix b/hosts/kim/default.nix index 7bdb583..0691510 100644 --- a/hosts/kim/default.nix +++ b/hosts/kim/default.nix @@ -1,17 +1,18 @@ -# Kim -# System configuration for my desktop +# virt-nix +# System configuration for a vm on my desktop -{ inputs, globals, overlays, ... }: +{ inputs, globals, ... }: with inputs; -nixpkgs.lib.nixosSystem { +inputs.nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ globals + lix-module.nixosModules.default home-manager.nixosModules.home-manager - # ../../modules/common - # ../../modules/nixos + ../../modules/common + ../../modules/nixos { # something with overlays, I don't get those yet. @@ -22,10 +23,11 @@ nixpkgs.lib.nixosSystem { boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.kernelModules = [ "amdgpu" ]; boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + # boot.loader.grub.device = "/dev/vda"; services.xserver.videoDrivers = [ "amdgpu" ]; # TODO: I use wayland, do I need this? hardware.enableRedistributableFirmware = true; powerManagement.cpuFreqGovernor = "performance"; - hardware.cpu.amd.updateMicrocode = true; fileSystems."/" = { @@ -42,12 +44,71 @@ nixpkgs.lib.nixosSystem { swapDevices = [ ]; - networking.useDHCP = lib.mkDefault true; + networking.useDHCP = nixpkgs.lib.mkDefault true; + + nixpkgs.hostPlatform = nixpkgs.lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = true; # TODO: identityFile = "/home/${globals.user}/.ssh/id_ed2519"; # TODO: passwordHash = nixpkgs.lib.fileContents ../../password.sha512; # Theming? + + + # TODO: Temporary, remove eventually! + networking.networkmanager.enable = true; + time.timeZone = "America/New_York"; + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + services.xserver.enable = true; + services.displayManager.sddm.enable = true; + services.xserver.desktopManager.plasma5.enable = true; + services.xserver.xkb = { + layout = "us"; + variant = ""; + }; + users.users.annika = { + isNormalUser = true; + description = "Annika Merris"; + extraGroups = [ "networkmanager" "wheel" ]; + }; + nixpkgs.config.allowUnfree = true; + system.stateVersion = "23.11"; + home-manager.backupFileExtension = "backup"; + services.openssh.enable = true; + services.flatpak.enable = true; + services.netbird.enable = true; # TODO: Move this to the netbird configs + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + # Enable sound with pipewire. + sound.enable = true; + hardware.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; + }; + + + gui.enable = true; + # Apps + discord.enable = true; + element.enable = true; + firefox.enable = true; + netbird.enable = true; + prusa-slicer.enable = true; + # Programming Stuff + nixpkgs-fmt.enable = true; + vscode.enable = true; + # Utilities + # git is not optional } ]; } diff --git a/hosts/kim/hardware-configuration.nix b/hosts/kim/hardware-configuration.nix deleted file mode 100644 index ac3f8e2..0000000 --- a/hosts/kim/hardware-configuration.nix +++ /dev/null @@ -1,39 +0,0 @@ -# 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 = [ "amdgpu" ]; - boot.kernelModules = [ "kvm-amd" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = - { device = "/dev/disk/by-uuid/ba4362a3-3a0b-4227-b460-a5a9302f5966"; - fsType = "ext4"; - }; - - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/DB88-8E65"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; - - 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.enp6s0.useDHCP = lib.mkDefault true; - # networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; -} diff --git a/hosts/virt-nix/default.nix b/hosts/virt-nix/default.nix new file mode 100644 index 0000000..cb908f4 --- /dev/null +++ b/hosts/virt-nix/default.nix @@ -0,0 +1,93 @@ +# virt-nix +# System configuration for a vm on my desktop + +{ inputs, globals, ... }: + +with inputs; + +inputs.nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + # specialArgs = {inherit inputs;}; + modules = [ + globals + lix-module.nixosModules.default + home-manager.nixosModules.home-manager + ../../modules/common + ../../modules/nixos + { + # something with overlays, I don't get those yet. + + # Hardware + physical = true; + networking.hostName = "virt-nix"; + + boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + boot.loader.grub.device = "/dev/vda"; + services.xserver.videoDrivers = [ "amdgpu" ]; # TODO: I use wayland, do I need this? + hardware.enableRedistributableFirmware = true; + powerManagement.cpuFreqGovernor = "performance"; + hardware.cpu.amd.updateMicrocode = true; + + fileSystems."/" = + { + device = "/dev/disk/by-uuid/ba78bd44-dd31-4f55-88ce-ab83fbf3eb4e"; + fsType = "ext4"; + }; + + swapDevices = [ ]; + + networking.useDHCP = nixpkgs.lib.mkDefault true; + + # TODO: identityFile = "/home/${globals.user}/.ssh/id_ed2519"; + # TODO: passwordHash = nixpkgs.lib.fileContents ../../password.sha512; + + # Theming? + + + # TODO: Temporary, remove eventually! + networking.networkmanager.enable = true; + time.timeZone = "America/New_York"; + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + services.xserver.enable = true; + services.xserver.displayManager.gdm.enable = true; + services.xserver.desktopManager.gnome.enable = true; + services.xserver.xkb = { + layout = "us"; + variant = ""; + }; + users.users.annika = { + isNormalUser = true; + description = "Annika Merris"; + extraGroups = [ "networkmanager" "wheel" ]; + }; + nixpkgs.config.allowUnfree = true; + system.stateVersion = "23.11"; + home-manager.backupFileExtension = "backup"; + environment.systemPackages = with pkgs; [ + vim + wget + python3 + age + sops + ]; + services.openssh.enable = true; + services.flatpak.enable = true; + services.netbird.enable = true; # TODO: Move this to the netbird configs + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + sound.enable = true; # TODO: Add the rest of the sound stuff... + + gui.enable = true; + discord.enable = true; + firefox.enable = true; + nixpkgs-fmt.enable = true; + vscode.enable = true; + netbird.enable = true; + element.enable = true; + prusa-slicer.enable = true; + } + ]; +} diff --git a/modules/common/applications/default.nix b/modules/common/applications/default.nix new file mode 100644 index 0000000..059edeb --- /dev/null +++ b/modules/common/applications/default.nix @@ -0,0 +1,10 @@ +{ ... }: +{ + imports = [ + ./discord.nix + ./element.nix + ./firefox.nix + ./netbird.nix + ./prusa-slicer.nix + ]; +} diff --git a/modules/common/applications/discord.nix b/modules/common/applications/discord.nix new file mode 100644 index 0000000..bf30798 --- /dev/null +++ b/modules/common/applications/discord.nix @@ -0,0 +1,25 @@ +{ config, pkgs, lib, ... }: +{ + options = { + discord = { + enable = lib.mkEnableOption { + description = "Enable Discord"; + default = false; + }; + }; + }; + config = lib.mkIf (config.gui.enable && config.discord.enable) { + home-manager.users.${config.user} = { + home.packages = [ + pkgs.discord + ]; + xdg.configFile."discord/settings.json".text = '' + { + "OPEN_ON_STARTUP": true, + "MINIMIZE_TO_TRAY": false, + "SKIP_HOST_UPDATE": true + } + ''; + }; + }; +} \ No newline at end of file diff --git a/modules/common/applications/element.nix b/modules/common/applications/element.nix new file mode 100644 index 0000000..a7daff8 --- /dev/null +++ b/modules/common/applications/element.nix @@ -0,0 +1,18 @@ +{ config, pkgs, lib, ...}: +{ + options = { + element = { + enable = lib.mkEnableOption { + description = "Enable Element"; + default = false; + }; + }; + }; + config = lib.mkIf (config.gui.enable && config.element.enable) { + home-manager.users.${config.user} = { + home.packages = [ + pkgs.element-desktop + ]; + }; + }; +} diff --git a/modules/common/applications/firefox.nix b/modules/common/applications/firefox.nix new file mode 100644 index 0000000..3f924d7 --- /dev/null +++ b/modules/common/applications/firefox.nix @@ -0,0 +1,27 @@ +{ config, pkgs, lib, ... }: +{ + options = { + firefox = { + enable = lib.mkEnableOption { + description = "Enable Firefox"; + default = false; + }; + }; + }; + config = lib.mkIf (config.gui.enable && config.firefox.enable) { + home-manager.users.${config.user} = { + programs.firefox = { + enable = true; + policies = { + ExtensionSettings = { + "{446900e4-71c2-419f-a6a7-df9c091e268b}" = { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi"; + installation_mode = "normal_installed"; + default_area = "navbar"; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/common/applications/netbird.nix b/modules/common/applications/netbird.nix new file mode 100644 index 0000000..03afa3b --- /dev/null +++ b/modules/common/applications/netbird.nix @@ -0,0 +1,28 @@ +{ config, pkgs, lib, ... }: +{ + options = { + netbird = { + enable = lib.mkEnableOption { + description = "Enable Netbird"; + default = false; + }; + }; + }; + config = lib.mkIf (config.netbird.enable) + (lib.mkMerge [ + (lib.mkIf (config.gui.enable) { + home-manager.users.${config.user} = { + home.packages = [ + pkgs.netbird-ui + ]; + }; + }) + (lib.mkIf (!config.gui.enable) { + home-manager.users.${config.user} = { + home.packages = [ + pkgs.netbird + ]; + }; + }) + ]); +} diff --git a/modules/common/applications/prusa-slicer.nix b/modules/common/applications/prusa-slicer.nix new file mode 100644 index 0000000..041eff7 --- /dev/null +++ b/modules/common/applications/prusa-slicer.nix @@ -0,0 +1,18 @@ +{ config, pkgs, lib, ... }: +{ + options = { + prusa-slicer = { + enable = lib.mkEnableOption { + description = "Enable Prusa Slicer"; + default = false; + }; + }; + }; + config = lib.mkIf (config.gui.enable && config.prusa-slicer.enable) { + home-manager.users.${config.user} = { + home.packages = [ + pkgs.prusa-slicer + ]; + }; + }; +} diff --git a/modules/common/default.nix b/modules/common/default.nix new file mode 100644 index 0000000..3576588 --- /dev/null +++ b/modules/common/default.nix @@ -0,0 +1,40 @@ +{ config, lib, pkgs, ...}: +{ + imports = [ + ./applications + ./programming + ./utilities + ]; + options = { + user = lib.mkOption { + type = lib.types.str; + description = "Primary user of the system"; + }; + fullName = lib.mkOption { + type = lib.types.str; + description = "Puny Hooman readable name of the user"; + }; + gui = { + enable = lib.mkEnableOption { + description = "Enable graphics."; + default = false; + }; + }; + }; + config = + let + stateVersion = "23.11"; + in + { + environment.systemPackages = with pkgs; [ + vim + wget + curl + python3 + age + sops + ]; + home-manager.users.${config.user}.home.stateVersion = stateVersion; + home-manager.users.root.home.stateVersion = stateVersion; + }; +} diff --git a/modules/common/programming/default.nix b/modules/common/programming/default.nix new file mode 100644 index 0000000..f2e7f24 --- /dev/null +++ b/modules/common/programming/default.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + imports = [ + ./nixpkgs-fmt.nix + ./vscode.nix + ]; +} diff --git a/modules/common/programming/nixpkgs-fmt.nix b/modules/common/programming/nixpkgs-fmt.nix new file mode 100644 index 0000000..de6a172 --- /dev/null +++ b/modules/common/programming/nixpkgs-fmt.nix @@ -0,0 +1,18 @@ +{ config, pkgs, lib, ...}: +{ + options = { + nixpkgs-fmt = { + enable = lib.mkEnableOption { + description = "Enable nixpkgs-fmt"; + default = false; + }; + }; + }; + config = lib.mkIf (config.nixpkgs-fmt.enable) { + home-manager.users.${config.user} = { + home.packages = [ + pkgs.nixpkgs-fmt + ]; + }; + }; +} diff --git a/modules/common/programming/vscode.nix b/modules/common/programming/vscode.nix new file mode 100644 index 0000000..fd65e50 --- /dev/null +++ b/modules/common/programming/vscode.nix @@ -0,0 +1,31 @@ +{ config, pkgs, lib, ... }: +{ + options = { + vscode = { + enable = lib.mkEnableOption { + description = "Enable Visual Studio Code"; + default = false; + }; + }; + }; + config = lib.mkIf (config.gui.enable && config.vscode.enable) { + home-manager.users.${config.user} = { + nixpkgs.config.allowUnfree = true; + programs.vscode = { + enable = true; + extensions = with pkgs.vscode-extensions; [ + bbenoist.nix + catppuccin.catppuccin-vsc + ]; + userSettings = { + "workbench.colorTheme" = "Catppuccin Mocha"; + "editor.tabSize" = 2; + "editor.insertSpaces" = true; + "git.autofetch" = true; + # "git.enableSmartCommit" = true; + "git.confirmSync" = false; + }; + }; + }; + }; +} diff --git a/modules/common/utilities/default.nix b/modules/common/utilities/default.nix new file mode 100644 index 0000000..feab8c5 --- /dev/null +++ b/modules/common/utilities/default.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + imports = [ + ./git.nix + ]; +} \ No newline at end of file diff --git a/modules/common/utilities/git.nix b/modules/common/utilities/git.nix new file mode 100644 index 0000000..e28bd8c --- /dev/null +++ b/modules/common/utilities/git.nix @@ -0,0 +1,28 @@ +{ config, pkgs, lib, ... }: +let + home-packages = config.home-manager.users.${config.user}.home.packages; +in +{ + options = { + gitName = lib.mkOption { + type = lib.types.str; + description = "Name to use for git commits"; + }; + gitEmail = lib.mkOption { + type = lib.types.str; + description = "Email to use for git commits"; + }; + }; + config = { + home-manager.users.root.programs.git = { + enable = true; + }; + home-manager.users.${config.user} = { + programs.git = { + enable = true; + userName = config.gitName; + userEmail = config.gitEmail; + }; + }; + }; +} \ No newline at end of file diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix new file mode 100644 index 0000000..55f22b3 --- /dev/null +++ b/modules/nixos/default.nix @@ -0,0 +1,6 @@ +{ ... }: +{ + imports = [ + ./hardware + ]; +} \ No newline at end of file diff --git a/modules/nixos/hardware/boot.nix b/modules/nixos/hardware/boot.nix new file mode 100644 index 0000000..729e584 --- /dev/null +++ b/modules/nixos/hardware/boot.nix @@ -0,0 +1,28 @@ +{ config, pkgs, lib, ... }: +{ + boot.loader = lib.mkIf (config.physical) { + grub = { + enable = true; + efiSupport = true; + useOSProber = true; + gfxmodeEfi = "1920x1080"; + configurationLimit = 25; + device = "nodev"; + + # Display menu indefinitely if holding shift key + extraConfig = '' + if keystatus --shift; then + set timeout=-1 + else + set timeout=3 + fi + ''; + + }; + + efi.canTouchEfiVariables = true; + }; + + boot.supportedFilesystems = lib.mkIf config.physical [ "ntfs" ]; + boot.kernelPackages = lib.mkDefault pkgs.linuxPackages_latest; +} diff --git a/modules/nixos/hardware/default.nix b/modules/nixos/hardware/default.nix new file mode 100644 index 0000000..f760ee4 --- /dev/null +++ b/modules/nixos/hardware/default.nix @@ -0,0 +1,11 @@ +{ lib, ... }: +{ + imports = [ + ./boot.nix + ]; + + options = { + physical = lib.mkEnableOption "Whether this machine is a physical device."; + server = lib.mkEnableOption "Whether this machine is a server."; + }; +} \ No newline at end of file