diff --git a/flake.nix b/flake.nix index 2fe6d4c..34330c8 100644 --- a/flake.nix +++ b/flake.nix @@ -12,9 +12,7 @@ outputs = inputs@{ self, nixpkgs, home-manager, darwin, nur, ... }: let - system = "aarch64-darwin"; - - pkgs = import nixpkgs { + pkgsfunc = (system: import nixpkgs { inherit system; overlays = [ (import ./overlays) @@ -25,38 +23,51 @@ nur = import nur { inherit pkgs; nurpkgs = pkgs; }; }; }; - }; + }); - nurNoPkgs = import nur { - nurpkgs = pkgs; - pkgs = throw "nixpkgs eval"; - }; - - user-config = { + user-config = (pkgs: { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit nurNoPkgs pkgs; inputs = { inherit (inputs); }; }; + home-manager.extraSpecialArgs = { + inherit pkgs; inputs = { inherit (inputs); }; + nurNoPkgs = import nur { + nurpkgs = pkgs; + pkgs = throw "nixpkgs eval"; + }; + }; home-manager.sharedModules = [ nur.hmModules.nur ]; home-manager.users.willem = ./home; - users.users.willem = { - home = "/Users/willem"; - isHidden = false; - name = "willem"; - shell = pkgs.zshInteractive; - }; - }; + }); in { darwinConfigurations = { - zeus = darwin.lib.darwinSystem { - inherit system pkgs inputs; + zeus = darwin.lib.darwinSystem rec { + inherit inputs; + + system = "aarch64-darwin"; + + pkgs = pkgsfunc system; + modules = [ ./modules/nix.nix ./system/darwin.nix home-manager.darwinModules.home-manager - user-config + (user-config pkgs) ]; }; }; + nixosConfigurations.zeus-utm-vm = (pkgsfunc "aarch64-linux").lib.nixosSystem rec { + inherit inputs; + system = "aarch64-linux"; + + pkgs = pkgsfunc system; + + modules = [ + ./modules/nix.nix + ./system/utm-arm-vm.nix + home-manager.nixosModules.home-manager + (user-config pkgs) + ]; + }; }; } diff --git a/system/common.nix b/system/common.nix new file mode 100644 index 0000000..ce8d1b8 --- /dev/null +++ b/system/common.nix @@ -0,0 +1,39 @@ +{ pkgs, ... }: + +{ + environment.variables.SHELL = "${pkgs.zsh}/bin/zsh"; + environment.variables.LANG = "en_US.UTF-8"; + + nix = { + generateNixPathFromInputs = true; + generateRegistryFromInputs = true; + linkInputs = true; + package = pkgs.nix; + settings.experimental-features = [ "nix-command" "flakes" ]; + settings.trusted-users = [ "root" "willem" ]; + }; + + programs.bash.enable = true; + + programs.nix-index.enable = true; + + programs.zsh.enable = true; + programs.zsh.enableBashCompletion = true; + + programs.zsh.promptInit = '' + autoload -U promptinit && promptinit + setopt PROMPTSUBST + _prompt_nix() { + [ -z "$IN_NIX_SHELL" ] || echo "%F{yellow}%B[''${name:+$name}]%b%f " + } + PS1='%F{red}%B%(?..%? )%b%f%# ' + RPS1='$(_prompt_nix)%F{green}%~%f' + if [ -n "$IN_NIX_SANDBOX" ]; then + PS1+='%F{red}[sandbox]%f ' + fi + ''; + + time.timeZone = "America/Vancouver"; + + users.users.willem.shell = pkgs.zshInteractive; +} diff --git a/system/darwin.nix b/system/darwin.nix index 1cea511..9fe0015 100644 --- a/system/darwin.nix +++ b/system/darwin.nix @@ -1,6 +1,8 @@ { pkgs, ... }: { + imports = [ ./common.nix ]; + environment.etc."nix/user-sandbox.sb".text = '' (version 1) (allow default) @@ -15,8 +17,6 @@ ''; environment.loginShell = "${pkgs.zsh}/bin/zsh -l"; - environment.variables.SHELL = "${pkgs.zsh}/bin/zsh"; - environment.variables.LANG = "en_US.UTF-8"; environment.systemPackages = with pkgs; [ colima coreutils @@ -41,25 +41,9 @@ }; }; - nix = { - extraOptions = '' - experimental-features = nix-command flakes - extra-trusted-users = willem - ''; - generateRegistryFromInputs = true; - generateNixPathFromInputs = true; - linkInputs = true; - package = pkgs.nix; - }; - - programs.bash.enable = true; programs.man.enable = true; - programs.nix-index.enable = true; - - programs.zsh.enable = true; - programs.zsh.enableBashCompletion = true; programs.zsh.enableFzfCompletion = true; programs.zsh.enableFzfGit = true; programs.zsh.enableFzfHistory = true; @@ -76,18 +60,6 @@ exec /usr/bin/sandbox-exec -f /etc/nix/user-sandbox.sb $SHELL -l } ''; - programs.zsh.promptInit = '' - autoload -U promptinit && promptinit - setopt PROMPTSUBST - _prompt_nix() { - [ -z "$IN_NIX_SHELL" ] || echo "%F{yellow}%B[''${name:+$name}]%b%f " - } - PS1='%F{red}%B%(?..%? )%b%f%# ' - RPS1='$(_prompt_nix)%F{green}%~%f' - if [ -n "$IN_NIX_SANDBOX" ]; then - PS1+='%F{red}[sandbox]%f ' - fi - ''; services.nix-daemon.enable = true; @@ -147,4 +119,10 @@ }]; }; }; + + users.users.willem = { + home = "/Users/willem"; + isHidden = false; + name = "willem"; + }; } diff --git a/system/nixos.nix b/system/nixos.nix new file mode 100644 index 0000000..657a2a3 --- /dev/null +++ b/system/nixos.nix @@ -0,0 +1,51 @@ +{ pkgs, ... }: { + imports = [ ./common.nix ]; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.loader.efi.efiSysMountPoint = "/boot/efi"; + + console.keyMap = "colemak"; + + i18n.defaultLocale = "en_US.UTF-8"; + + programs.zsh.loginShellInit = '' + reexec() { + unset __NIX_OS_SET_ENVIRONMENT_DONE + unset __ETC_ZPROFILE_SOURCED __ETC_ZSHENV_SOURCED __ETC_ZSHRC_SOURCED + exec $SHELL -c 'echo >&2 "reexecuting shell: $SHELL" && exec $SHELL -l' + } + ''; + + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + services.printing.enable = true; + + services.pulseaudio.enable = false; + + security.rtkit.enable = true; + + services.xserver = { + enable = true; + + displayManager.gdm.enable = true; + desktopManager.gnome.enable = true; + + layout = "us"; + xkbVariant = "colemak"; + }; + + sound.enable = true; + + system.stateVersion = "22.11"; + + users.users.willem = { + isNormalUser = true; + extraGroups = [ "networkmanager" "wheel" ]; + }; +} diff --git a/system/utm-arm-vm.nix b/system/utm-arm-vm.nix new file mode 100644 index 0000000..00b3414 --- /dev/null +++ b/system/utm-arm-vm.nix @@ -0,0 +1,25 @@ +{ pkgs, ... }: + +{ + imports = [ ./nixos.nix ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "virtio_pci" "usbhid" "usb_storage" "sr_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/10c8feb5-8fbb-490a-b144-dff00e82f3e9"; + fsType = "ext4"; + }; + + fileSystems."/boot/efi" = { + device = "/dev/disk/by-uuid/3D0E-803C"; + fsType = "vfat"; + }; + + networking.useDHCP = true; + + services.spice-vdagentd.enable = true; + + swapDevices = [ ]; +}