From f11a6ab86e30c3efbb673b1fa3328f7a34361c15 Mon Sep 17 00:00:00 2001 From: blacknull Date: Thu, 10 Oct 2024 11:01:59 -0500 Subject: [PATCH] Major rework in progress --- README.md | 8 ++ flake.lock | 57 ++++----- flake.nix | 99 ++++++++++++---- home/impermanence/default.nix | 28 +++++ home/impermanence/flake.nix | 10 ++ home/packages/default.nix | 85 ++++++++++++++ home/packages/external/default.nix | 15 +++ home/packages/external/flake.nix | 9 +- home/packages/flake.nix | 94 +-------------- home/packages/scripts/default.nix | 104 +++++++++++++++++ home/packages/scripts/flake.nix | 108 ++---------------- home/programs/flake.nix | 2 +- home/programs/hyprland/flake.nix | 2 + system/configuration/default.nix | 12 ++ system/configuration/generic/default.nix | 1 + system/configuration/homebox/default.nix | 1 + system/configuration/laptop/default.nix | 77 +++++++++++++ .../laptop/hardware-configuration.nix | 39 +++++++ system/disko/default.nix | 36 ++++++ system/disko/disko.nix | 72 ++++++++++++ system/disko/disko_bonus.nix | 43 +++++++ system/disko/flake.nix | 19 +++ system/disko/impermanent.nix | 29 +++++ system/flake.nix | 6 + system/impermanence/default.nix | 29 +++++ system/impermanence/flake.nix | 10 ++ 26 files changed, 742 insertions(+), 253 deletions(-) create mode 100644 README.md create mode 100644 home/impermanence/default.nix create mode 100644 home/impermanence/flake.nix create mode 100644 home/packages/default.nix create mode 100644 home/packages/external/default.nix create mode 100644 home/packages/scripts/default.nix create mode 100644 system/configuration/default.nix create mode 100644 system/configuration/generic/default.nix create mode 100644 system/configuration/homebox/default.nix create mode 100644 system/configuration/laptop/default.nix create mode 100644 system/configuration/laptop/hardware-configuration.nix create mode 100644 system/disko/default.nix create mode 100644 system/disko/disko.nix create mode 100644 system/disko/disko_bonus.nix create mode 100644 system/disko/flake.nix create mode 100644 system/disko/impermanent.nix create mode 100644 system/impermanence/default.nix create mode 100644 system/impermanence/flake.nix diff --git a/README.md b/README.md new file mode 100644 index 0000000..58f65a2 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# NixOS System Configs + +This is a repo for all of my nixos system configurations and isos + +# Goal: +>- to define configs for all my nixos machines +>- to create a **100% reproduceable** system that can be deployed **offline** and **unattended** + diff --git a/flake.lock b/flake.lock index 94bceda..92c3ffa 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ "locked": { "lastModified": 1, "narHash": "sha256-hU9uZ4UrSrBntg9vhwQUzn7nC3UTeIV1iC5uprGhj+Y=", - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/ags", + "path": "/nix/store/yx9hd0zzj8k0jijpk9zp6g4g331jaisg-source/ags", "type": "path" }, "original": { - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/ags", + "path": "/nix/store/yx9hd0zzj8k0jijpk9zp6g4g331jaisg-source/ags", "type": "path" } }, @@ -522,11 +522,11 @@ "locked": { "lastModified": 1, "narHash": "sha256-PoIwfLB8FwRvchRfLuR5Zt1Xez/G35ivu7y3ne4BrVo=", - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/hyprland", + "path": "/nix/store/yx9hd0zzj8k0jijpk9zp6g4g331jaisg-source/hyprland", "type": "path" }, "original": { - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/hyprland", + "path": "/nix/store/yx9hd0zzj8k0jijpk9zp6g4g331jaisg-source/hyprland", "type": "path" } }, @@ -961,12 +961,12 @@ }, "locked": { "lastModified": 1, - "narHash": "sha256-pJxmKMNEj17fTvgM/URTMtX3AByFnif+0bjAueedzhw=", - "path": "/nix/store/gmp80achy4a0wv7xhybr65dvc4sm744g-source/home", + "narHash": "sha256-MJ7qeRlZKHt+WoFCOYpFgNgRrBb/tD1cglGLG4Z5jLg=", + "path": "/nix/store/21nf0p8ql9xkf5n5xw8p3qwy7dpp0zd7-source/home", "type": "path" }, "original": { - "path": "/nix/store/gmp80achy4a0wv7xhybr65dvc4sm744g-source/home", + "path": "/nix/store/21nf0p8ql9xkf5n5xw8p3qwy7dpp0zd7-source/home", "type": "path" } }, @@ -1217,14 +1217,17 @@ "nixvim": "nixvim_2" }, "locked": { - "lastModified": 1, + "lastModified": 1727986301, "narHash": "sha256-z7+Wa2JaaJyyGCiiEE6Ta5m7f98ZWVRQ6HV+Seu2tEM=", - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/nixvim", - "type": "path" + "ref": "refs/heads/master", + "rev": "e6cb7d523142dc038c816fe5be57c19cf7a8d5f3", + "revCount": 1, + "type": "git", + "url": "file:///home/nathan/Projects/Nixvim" }, "original": { - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/nixvim", - "type": "path" + "type": "git", + "url": "file:///home/nathan/Projects/Nixvim" } }, "nixvim_2": { @@ -1300,11 +1303,11 @@ "locked": { "lastModified": 1, "narHash": "sha256-c/j1wAoDhJC3sxfp1mX1p3FfQdksPp20wnRXQPxwT+g=", - "path": "/nix/store/dhn1damhdzzk9kvrd185llvb8lj7p0m9-source/packages", + "path": "/nix/store/nz05qzah5l5ch4cb4gl1vbc4qyh1grna-source/packages", "type": "path" }, "original": { - "path": "/nix/store/dhn1damhdzzk9kvrd185llvb8lj7p0m9-source/packages", + "path": "/nix/store/nz05qzah5l5ch4cb4gl1vbc4qyh1grna-source/packages", "type": "path" } }, @@ -1334,12 +1337,12 @@ }, "locked": { "lastModified": 1, - "narHash": "sha256-lIWkTRmFS1h/L9rM+lZX/AHv/aET4tw8GExvv6EEh5I=", - "path": "/nix/store/dhn1damhdzzk9kvrd185llvb8lj7p0m9-source/programs", + "narHash": "sha256-7zc0u56+lt5YSb1qOMyLKh2b0B0vvUGm2K6mDVt761U=", + "path": "/nix/store/nz05qzah5l5ch4cb4gl1vbc4qyh1grna-source/programs", "type": "path" }, "original": { - "path": "/nix/store/dhn1damhdzzk9kvrd185llvb8lj7p0m9-source/programs", + "path": "/nix/store/nz05qzah5l5ch4cb4gl1vbc4qyh1grna-source/programs", "type": "path" } }, @@ -1369,11 +1372,11 @@ "locked": { "lastModified": 1, "narHash": "sha256-EVhBDAt1miiP7BA3SooJNTCm0pESsl4VlRYCDSMutFY=", - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/pywal", + "path": "/nix/store/yx9hd0zzj8k0jijpk9zp6g4g331jaisg-source/pywal", "type": "path" }, "original": { - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/pywal", + "path": "/nix/store/yx9hd0zzj8k0jijpk9zp6g4g331jaisg-source/pywal", "type": "path" } }, @@ -1397,11 +1400,11 @@ "locked": { "lastModified": 1, "narHash": "sha256-W1pO/5h94bemSfBkgwMcjnRJAySAtzd5RMTWKcmLkOI=", - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/rofi", + "path": "/nix/store/yx9hd0zzj8k0jijpk9zp6g4g331jaisg-source/rofi", "type": "path" }, "original": { - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/rofi", + "path": "/nix/store/yx9hd0zzj8k0jijpk9zp6g4g331jaisg-source/rofi", "type": "path" } }, @@ -1482,11 +1485,11 @@ "locked": { "lastModified": 1, "narHash": "sha256-cuHsChgkjeeNyQiP8xebtVcqixs7dJLV59Q9BKIVXqI=", - "path": "/nix/store/dhn1damhdzzk9kvrd185llvb8lj7p0m9-source/services", + "path": "/nix/store/nz05qzah5l5ch4cb4gl1vbc4qyh1grna-source/services", "type": "path" }, "original": { - "path": "/nix/store/dhn1damhdzzk9kvrd185llvb8lj7p0m9-source/services", + "path": "/nix/store/nz05qzah5l5ch4cb4gl1vbc4qyh1grna-source/services", "type": "path" } }, @@ -1515,11 +1518,11 @@ "locked": { "lastModified": 1, "narHash": "sha256-M8gn3JNWaujqDckXceQofrr/295Qt2puwAcxkR7p3DI=", - "path": "/nix/store/gmp80achy4a0wv7xhybr65dvc4sm744g-source/system", + "path": "/nix/store/21nf0p8ql9xkf5n5xw8p3qwy7dpp0zd7-source/system", "type": "path" }, "original": { - "path": "/nix/store/gmp80achy4a0wv7xhybr65dvc4sm744g-source/system", + "path": "/nix/store/21nf0p8ql9xkf5n5xw8p3qwy7dpp0zd7-source/system", "type": "path" } }, @@ -1596,11 +1599,11 @@ "locked": { "lastModified": 1, "narHash": "sha256-2h0M0hXa3L6rQJ2hmDadiZBYJcoxRqFdlXD7tK0LFrM=", - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/terminal", + "path": "/nix/store/yx9hd0zzj8k0jijpk9zp6g4g331jaisg-source/terminal", "type": "path" }, "original": { - "path": "/nix/store/h730mcqnqwjlpl3hrwdqrfyq26k9m5k1-source/terminal", + "path": "/nix/store/yx9hd0zzj8k0jijpk9zp6g4g331jaisg-source/terminal", "type": "path" } }, diff --git a/flake.nix b/flake.nix index 7f3084e..648dddf 100644 --- a/flake.nix +++ b/flake.nix @@ -5,44 +5,93 @@ nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; - home-manager.url = "github:nix-community/home-manager/release-24.05"; - home-manager.inputs.nixpkgs.follows = "nixpkgs"; + home-manager = { + url = "github:nix-community/home-manager/release-24.05"; + inputs.nixpkgs.follows = "nixpkgs"; + }; - nathan.url = "./home"; + nathan.url = "./home"; system.url = "./system"; + system.inputs.disko.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = { self, nixpkgs, ... }@inputs: - let - system = "x86_64-linux"; - in { - inputs.home-manager.useGlobalPkgs = true; + outputs = { self, nixpkgs, ... }@core_inputs: let + system = "x86_64-linux"; + iso_system = "x86_64-linux"; + + host = "laptop"; + username = "nathan"; + + devices = { + main = "/dev/nvme0n1"; + bonus = null; + }; + + in rec { + inputs.home-manager.useGlobalPkgs = true; - nixosConfigurations.laptop = nixpkgs.lib.nixosSystem { + nixosConfigurations.${host} = nixpkgs.lib.nixosSystem { - inherit system; - specialArgs = { inherit inputs; }; + inherit system; + specialArgs = { + core_inputs = (core_inputs // { inherit host username; }); + inherit devices; + }; - modules = [ - inputs.system.nixosModule - inputs.home-manager.nixosModules.home-manager - ]; + modules = [ + inputs.system.nixosModule + inputs.home-manager.nixosModules.home-manager - }; + ({ lib, ... }: { + sysconfig.${host}.enable = true; + disko.enable = lib.mkForce false; + }) + ]; - homeConfigurations."nathan" = inputs.home-manager.lib.homeManagerConfiguration { - pkgs = import nixpkgs { - inherit system; - config.allowUnfree = true; - }; - extraSpecialArgs = { inherit inputs; }; + }; - modules = [ inputs.nathan.homeManagerModule ]; - }; + nixosConfigurations.iso = nixpkgs.lib.nixosSystem { + inherit iso_system; - }; + specialArgs = { + core_inputs = (core_inputs // { inherit host username; }); + devices = (devices // { + bonus = { + disk1 = "/dev/nvme1n1"; + }; + }); + }; + modules = [ + + ({ pkgs, modulesPath, ... }: { + imports = [ + (modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix") + ]; + + nixpkgs.hostPlatform = iso_system; + }) + + #inputs.system.nixosModule + #inputs.home-manager.nixosModules.home-manager + ]; + + }; + + packages.${iso_system}.default = nixosConfigurations.iso.config.system.build.isoImage; + + homeConfigurations."nathan" = inputs.home-manager.lib.homeManagerConfiguration { + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + }; + extraSpecialArgs = { inherit inputs; }; + + modules = [ inputs.nathan.homeManagerModule ]; + }; + + }; } diff --git a/home/impermanence/default.nix b/home/impermanence/default.nix new file mode 100644 index 0000000..6e3a1bc --- /dev/null +++ b/home/impermanence/default.nix @@ -0,0 +1,28 @@ +{ config, lib, self, ... }: { + + imports = [ + self.inputs.impermanence.nixosModules.home-manager.impermanence + ]; + + config = lib.mkIf config.disko.impermanent { + + home.persistence."/persist/home" = { + + directories = [ + "Documents" + "Music" + "Pictures" + "Videos" + ".ssh" + ".config" + ".local" + + ]; + files = [ + ".cache/bg" + ".cache/bga" + ]; + allowOther = true; + }; + }; +} diff --git a/home/impermanence/flake.nix b/home/impermanence/flake.nix new file mode 100644 index 0000000..0d22541 --- /dev/null +++ b/home/impermanence/flake.nix @@ -0,0 +1,10 @@ +{ + description = "nix impermanence home config"; + + inputs.impermanence.url = "github:nix-community/impermanence"; + + outputs = { self, ... }: { + hmModule = import ./. { inherit self; }; + }; + +} diff --git a/home/packages/default.nix b/home/packages/default.nix new file mode 100644 index 0000000..f5ec4ab --- /dev/null +++ b/home/packages/default.nix @@ -0,0 +1,85 @@ +{ pkgs, pkgs-us, self, ... }: { + + imports = [ + self.inputs.scripts.hmModule + self.inputs.external.hmModule + ]; + + nixpkgs.config.allowUnfree = true; + + home.packages = with pkgs; let + pypkgs = ps: with ps; [ + numpy + pandas + torch + torchvision + torchaudio + transformers + datasets + pyaudio + faster-whisper + pyusb + ]; + + in [ + + cava + gcc + android-tools + + (pkgs.python311.withPackages pypkgs) + + brightnessctl + libdbusmenu-gtk3 + zulu + lmms + killall + youtube-music + #unfree { + geogebra + #} + blueberry + wl-clipboard + firefox-wayland + swaylock-effects + + neofetch + pkgs-us.mpv + (ncmpcpp.override { visualizerSupport = true; clockSupport = true; }) + playerctl + mpc-cli + xfce.thunar + vlc + zip + unzip + pavucontrol + yewtube + ytmdl + ffmpeg_5 + lxqt.lxqt-policykit + rpi-imager + rsync + grim + slurp + tigervnc + keepassxc + httplz + + #school? + #pkgs-us.digital + + #3D modeling/printing + kicad + blender + freecad + cura + + #productivity + libreoffice + super-productivity + + #games + prismlauncher + ]; + +} diff --git a/home/packages/external/default.nix b/home/packages/external/default.nix new file mode 100644 index 0000000..e34490f --- /dev/null +++ b/home/packages/external/default.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, self, ... }: { + + options = { + externalPackages.enable = lib.options.mkOption { + type = lib.types.bool; + default = false; + }; + }; + + config = lib.mkIf config.externalPackages.enable { + home.packages = [ + self.packages.${pkgs.system}.digital + ]; + }; +} diff --git a/home/packages/external/flake.nix b/home/packages/external/flake.nix index cb4b092..40f0528 100644 --- a/home/packages/external/flake.nix +++ b/home/packages/external/flake.nix @@ -14,7 +14,7 @@ outputs = { self, ... }@inputs: let system = "x86_64-linux"; _pkgs = import inputs.nixpkgs { inherit system; }; - in rec { + in { packages.${system}.digital = _pkgs.stdenv.mkDerivation { @@ -34,12 +34,7 @@ }; - hmModule = { config, lib, pkgs, ... }: { + hmModule = import ./. { inherit self; }; - home.packages = [ - packages.${pkgs.system}.digital - ]; - - }; }; } diff --git a/home/packages/flake.nix b/home/packages/flake.nix index 09d47e1..f9ccdff 100644 --- a/home/packages/flake.nix +++ b/home/packages/flake.nix @@ -2,7 +2,6 @@ description = "Nathan user packages"; inputs = { - nixpkgs-old.url = "github:nixos/nixpkgs/nixos-23.11"; nixpkgs-us.url = "github:nixos/nixpkgs/nixos-unstable"; scripts.url = "./scripts"; @@ -14,103 +13,14 @@ outputs = { self, ... }@inputs: let system = "x86_64-linux"; - pkgs-old = import inputs.nixpkgs-old { - inherit system; - config.allowUnfree = true; - }; - pkgs-us = import inputs.nixpkgs-us { inherit system; config.allowUnfree = true; }; - in { + in { - hmModule = { config, lib, pkgs, ... }: { - - imports = [ - inputs.scripts.hmModule - inputs.external.hmModule - ]; - - nixpkgs.config.allowUnfree = true; - - home.packages = with pkgs; let - pypkgs = ps: with ps; [ - numpy - pandas - torch - torchvision - torchaudio - transformers - datasets - pyaudio - faster-whisper - pyusb - ]; - - in [ - - cava - gcc - android-tools - - (pkgs.python311.withPackages pypkgs) - - brightnessctl - libdbusmenu-gtk3 - zulu - lmms - killall - youtube-music - #unfree { - geogebra - #} - blueberry - wl-clipboard - firefox-wayland - swaylock-effects - - neofetch - pkgs-us.mpv - (ncmpcpp.override { visualizerSupport = true; clockSupport = true; }) - playerctl - mpc-cli - xfce.thunar - vlc - zip - unzip - pavucontrol - yewtube - ytmdl - ffmpeg_5 - lxqt.lxqt-policykit - rpi-imager - rsync - grim - slurp - tigervnc - keepassxc - httplz - - #school? - #pkgs-us.digital - - #3D modeling/printing - kicad - blender - freecad - cura - - #productivity - libreoffice - super-productivity - - #games - prismlauncher - ]; + hmModule = import ./. { inherit pkgs-us self; }; }; - - }; } diff --git a/home/packages/scripts/default.nix b/home/packages/scripts/default.nix new file mode 100644 index 0000000..9578a58 --- /dev/null +++ b/home/packages/scripts/default.nix @@ -0,0 +1,104 @@ +{ config, lib, pkgs, ... }: { + + options = { + homeScripts.enable = lib.options.mkOption { + type = lib.types.bool; + default = true; + }; + }; + + config = lib.mkIf config.homeScripts.enable { + home.packages = [ + + #scripts + (pkgs.writeShellScriptBin "_systemRebuild" '' + sudo nix flake lock /home/nathan/Projects/System --update-input nathan --update-input root --update-input system + ${pkgs.nh}/bin/nh os switch --ask /home/nathan/Projects/System + echo //////Enter to close////// + read + '') + (pkgs.writeShellScriptBin "_homeRebuild" '' + sudo nix flake lock /home/nathan/Projects/System --update-input nathan + ${pkgs.nh}/bin/nh home switch --ask /home/nathan/Projects/System + echo //////Enter to close////// + read + '') + (pkgs.writeShellScriptBin "addCoverArtMP3" '' + if [[ $# != 2 ]] + then echo "usage: addCoverArtMP3 song.mp3 image.jpg" + exit + fi + mv $1 copyof$1 + ffmpeg -i copyof$1 -i $2 -map_metadata 0 -map 0 -map 1 -acodec copy $1 + '') + + (pkgs.writeShellScriptBin "randWallpaper" '' + file=$(ls /home/nathan/Pictures/Wallpaper/ | shuf -n 1) + setWallpaper /home/nathan/Pictures/Wallpaper/$file + '') + + (pkgs.writeShellScriptBin "setWallpaper" '' + img=''$(realpath ''${1:-~/.cache/bg}) + p=''$(ps -e | grep mpvpaper | sed -n -e "s/ *//" -e "s/ /\n/" -e "1 P") + ${pkgs.mpvpaper}/bin/mpvpaper -f -o "loop" '*' $img && \ + changeColors $img $2 && \ + sleep 0.4 && \ + kill $p + '') + + (pkgs.writeShellScriptBin "changeColors" '' + + if [[ $(ls ~/.cache/ | grep bga) != bga ]]; then + echo 100 > ~/.cache/bga + fi + + alpha=''${2:-`cat ~/.cache/bga`} + + img=''$(realpath ''${1:-~/.cache/bg}) + + if [[ $alpha -lt 0 ]]; then + $alpha=0 + fi + + if [[ $alpha -gt 100 ]]; then + $alpha=100 + fi + + wal -i $img -a $alpha --cols16 -n + + echo $alpha > ~/.cache/bga + + rm ~/.cache/bg + ln -s $img ~/.cache/bg + + sleep 0.4 + + pywalfox update & + + themecord > ~/.cache/_.txt && rm ~/.cache/_.txt + + [[ $(pidof cava) != "" ]] && pkill -USR1 cava & + + for i in $(ls /run/user/1000 | grep nvim); do nvr -s --servername /run/user/1000/$i --remote-send 'colorscheme pywal'; done + + pkill -USR1 kitty + '') + + (pkgs.writeShellScriptBin "onSystemStart" '' + ags & + pypr & + setWallpaper & + lxqt-policykit-agent & + nmcli device wifi connect EagleNet password '~?C#@ZiH' & + hyprctl setcursor Bibata-Modern-Classic 16 & + '') + + (pkgs.writeShellScriptBin "colorPrefix" '' + exec -a "$0" "$@" & + sleep 0.4 && changeColors & + '') + + ]; + }; +} + diff --git a/home/packages/scripts/flake.nix b/home/packages/scripts/flake.nix index 8de5fb2..58fbf5f 100644 --- a/home/packages/scripts/flake.nix +++ b/home/packages/scripts/flake.nix @@ -1,106 +1,12 @@ { - description = "Nathan user scripts"; + description = "Nathan user scripts"; - inputs = { - }; - - outputs = { self, ... }: { - - hmModule = { config, lib, pkgs, ... }: { - - home.packages = [ - - #scripts - (pkgs.writeShellScriptBin "_systemRebuild" '' - sudo nix flake lock /home/nathan/Projects/System --update-input nathan --update-input root --update-input system - ${pkgs.nh}/bin/nh os switch --ask /home/nathan/Projects/System - echo //////Enter to close////// - read - '') - (pkgs.writeShellScriptBin "_homeRebuild" '' - sudo nix flake lock /home/nathan/Projects/System --update-input nathan - ${pkgs.nh}/bin/nh home switch --ask /home/nathan/Projects/System - echo //////Enter to close////// - read - '') - (pkgs.writeShellScriptBin "addCoverArtMP3" '' - if [[ $# != 2 ]] - then echo "usage: addCoverArtMP3 song.mp3 image.jpg" - exit - fi - mv $1 copyof$1 - ffmpeg -i copyof$1 -i $2 -map_metadata 0 -map 0 -map 1 -acodec copy $1 - '') - - (pkgs.writeShellScriptBin "randWallpaper" '' - file=$(ls /home/nathan/Pictures/Wallpaper/ | shuf -n 1) - setWallpaper /home/nathan/Pictures/Wallpaper/$file - '') - - (pkgs.writeShellScriptBin "setWallpaper" '' - - img=''$(realpath ''${1:-~/.cache/bg}) - p=''$(ps -e | grep mpvpaper | sed -n -e "s/ *//" -e "s/ /\n/" -e "1 P") - ${pkgs.mpvpaper}/bin/mpvpaper -f -o "loop" '*' $img && \ - changeColors $img $2 && \ - sleep 0.4 && \ - kill $p - '') - - (pkgs.writeShellScriptBin "changeColors" '' - - if [[ $(ls ~/.cache/ | grep bga) != bga ]]; then - echo 100 > ~/.cache/bga - fi - - alpha=''${2:-`cat ~/.cache/bga`} - - img=''$(realpath ''${1:-~/.cache/bg}) - - if [[ $alpha -lt 0 ]]; then - $alpha=0 - fi - - if [[ $alpha -gt 100 ]]; then - $alpha=100 - fi - - wal -i $img -a $alpha --cols16 -n - - echo $alpha > ~/.cache/bga - - rm ~/.cache/bg - ln -s $img ~/.cache/bg - - sleep 0.4 - - pywalfox update & - - themecord > ~/.cache/_.txt && rm ~/.cache/_.txt - - [[ $(pidof cava) != "" ]] && pkill -USR1 cava & - - for i in $(ls /run/user/1000 | grep nvim); do nvr -s --servername /run/user/1000/$i --remote-send 'colorscheme pywal'; done - - pkill -USR1 kitty - '') - - (pkgs.writeShellScriptBin "onSystemStart" '' - ags & - pypr & - setWallpaper & - lxqt-policykit-agent & - nmcli device wifi connect EagleNet password '~?C#@ZiH' & - hyprctl setcursor Bibata-Modern-Classic 16 & - '') - - (pkgs.writeShellScriptBin "colorPrefix" '' - exec -a "$0" "$@" & - sleep 0.4 && changeColors & - '') - - ]; + inputs = { }; - }; + outputs = { self, ... }: { + + hmModule = import ./.; + + }; } diff --git a/home/programs/flake.nix b/home/programs/flake.nix index 6424217..197aa7d 100644 --- a/home/programs/flake.nix +++ b/home/programs/flake.nix @@ -33,7 +33,7 @@ inputs.nixvim.packages.${pkgs.system}.default ]; - home.sessionVarriables.EDITOR = "nvim"; + home.sessionVariables.EDITOR = "nvim"; }; diff --git a/home/programs/hyprland/flake.nix b/home/programs/hyprland/flake.nix index 1a3bfd0..3a7e9c0 100644 --- a/home/programs/hyprland/flake.nix +++ b/home/programs/hyprland/flake.nix @@ -319,7 +319,9 @@ bind = $mainMod SHIFT, E, exec, colorPrefix pypr toggle free bind = CTRL SHIFT, Home, exec, ssh -i ~/.ssh/key nathan@69.150.99.129 -fL 5900:localhost:5900 sleep 10; vncviewer localhost:5900 -fullscreen +bind = CTRL SHIFT, End, exec, ssh -i ~/.ssh/key nathan@173.242.244.284 -fL 5900:localhost:5900 sleep 10; vncviewer localhost:5900 -fullscreen bind = CTRL SHIFT, Home, submap, clean +bind = CTRL SHIFT, End, submap, clean bind = $mainMod CTRL, Home, submap, clean diff --git a/system/configuration/default.nix b/system/configuration/default.nix new file mode 100644 index 0000000..dc43ff2 --- /dev/null +++ b/system/configuration/default.nix @@ -0,0 +1,12 @@ +{ config, lib, pkgs, ... }: { + + imports = [ + ./generic + ./laptop + ./homebox + ]; + + sysconfig.laptop.enable = lib.mkDefault false; + sysconfig.homebox.enable = lib.mkDefault false; + sysconfig.generic.enable = lib.mkDefault true; +} diff --git a/system/configuration/generic/default.nix b/system/configuration/generic/default.nix new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/system/configuration/generic/default.nix @@ -0,0 +1 @@ +{} diff --git a/system/configuration/homebox/default.nix b/system/configuration/homebox/default.nix new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/system/configuration/homebox/default.nix @@ -0,0 +1 @@ +{} diff --git a/system/configuration/laptop/default.nix b/system/configuration/laptop/default.nix new file mode 100644 index 0000000..ab2f757 --- /dev/null +++ b/system/configuration/laptop/default.nix @@ -0,0 +1,77 @@ +# 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, lib, pkgs, core_inputs, ... }: + +{ + + options = { + sysconfig.laptop.enable = lib.mkEnableOption "uses laptop config"; + }; + + config = lib.mkIf config.sysconfig.laptop.enable { + + assertions = [ + { + assertion = !config.sysconfig.homebox.enable; + message = "sysconfig laptop conflicts with homebox"; + } + ]; + + imports = []; + + boot = { + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + kernelParams = [ "snd-intel-dspcfg.dsp_driver=1" ]; + }; + + hardware = { + opengl = { + enable = true; + driSupport = true; + extraPackages = with pkgs; [ + nvidia-vaapi-driver + ]; + }; + + nvidia = { + modesetting.enable = true; + open = false; #suspend fails with open drivers + nvidiaSettings = true; + package = config.boot.kernelPackages.nvidiaPackages.beta; + prime = { + intelBusId = "PCI:0:2:0"; + nvidiaBusId = "PCI:1:0:0"; +# #sync.enable = true; + offload = { + enable = true; + enableOffloadCmd = true; + }; + }; + }; + + bluetooth.enable = true; + + pulseaudio.enable = false; + }; + + networking = { + hostName = "laptop"; + nameservers = [ "1.1.1.1#one.one.one.one" "1.0.0.1#one.one.one.one" ]; + networkmanager.enable = true; + }; + + services = { + xserver = { + enable = true; + videoDrivers = [ "nvidia" ]; + }; + + displayManager.enable = true; + }; + }; +} diff --git a/system/configuration/laptop/hardware-configuration.nix b/system/configuration/laptop/hardware-configuration.nix new file mode 100644 index 0000000..3edf5cb --- /dev/null +++ b/system/configuration/laptop/hardware-configuration.nix @@ -0,0 +1,39 @@ +# 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 = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" "sdhci_pci" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/78c0964d-c09e-4e31-8a73-eb719d79917a"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/AE5E-AC86"; + 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.eno1.useDHCP = lib.mkDefault true; + # networking.interfaces.wlo1.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/system/disko/default.nix b/system/disko/default.nix new file mode 100644 index 0000000..bdf96d4 --- /dev/null +++ b/system/disko/default.nix @@ -0,0 +1,36 @@ +{ config, lib, devices, ... }: { + + options = { + disko = { + enable = lib.options.mkOption { + default = false; + type = lib.types.bool; + }; + impermanent = lib.options.mkOption { + default = false; + type = lib.types.bool; + }; + }; + }; + + config = lib.mkIf config.disko.enable (lib.mkMerge [ + + { + imports = [ + ./disko.nix { device = devices.main; } + ]; + } + + (lib.mkIf (devices.bonus != null) { + imports = [ + (./disko_bonus.nix { devices = devices.bonus; }) + ]; + }) + + (lib.mkIf config.disko.impermanent { + imports = [ + ./impermanent.nix + ]; + }) + ]); +} diff --git a/system/disko/disko.nix b/system/disko/disko.nix new file mode 100644 index 0000000..9f134d4 --- /dev/null +++ b/system/disko/disko.nix @@ -0,0 +1,72 @@ +{ device ? throw "Set this to your device e.g. /dev/sda", ... }: { + + disko.devices = { + disk.main = { + inherit device; + type = "disk"; + content = { + type = "gpt"; + partitions = { + boot = { + name = "boot"; + size = "1M"; + type = "EF02"; + }; + esp = { + name = "ESP"; + size = "500M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + }; + }; + swap = { + size = "4G"; + content = { + type = "swap"; + resumeDevice = true; + }; + }; + root = { + name = "root"; + size = "100%"; + content = { + type = "lvm_pv"; + vg = "root_vg"; + }; + }; + }; + }; + }; + + lvm_vg = { + root_vg = { + type = "lvm_vg"; + lvs = { + root = { + size = "100%FREE"; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; + subvolumes = { + "/root" = { + mountpoint = "/"; + }; + "/persist" = { + mountOptions = [ "subvol=persist" "noatime" ]; + mountpoint = "/persist"; + }; + "/nix" = { + mountOptions = [ "subvol=nix" "noatime" ]; + mountpoint = "/nix"; + }; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/system/disko/disko_bonus.nix b/system/disko/disko_bonus.nix new file mode 100644 index 0000000..83e5297 --- /dev/null +++ b/system/disko/disko_bonus.nix @@ -0,0 +1,43 @@ +{ devices ? throw "Set this to an attribute set of your devices e.g. { disk1 = \"/dev/sda\"; }", ... }: { + + disko.devices = builtins.mapAttrs (name: device: { + disk.${name} = { + inherit device; + type = "disk"; + content = { + type = "gpt"; + partitions = { + ${name} = { + name = "${name}"; + size = "100%"; + content = { + type = "lvm_pv"; + vg = "$name_vg"; + }; + }; + }; + }; + }; + + lvm_vg = { + "${name}_vg" = { + type = "lvm_vg"; + lvs = { + ${name} = { + size = "100%FREE"; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; + subvolumes = { + "/${name}" = { + mountOptions = [ "subvol=${name}" "noatime" ]; + mountpoint = "/${name}"; + }; + }; + }; + }; + }; + }; + }; + }) devices; +} diff --git a/system/disko/flake.nix b/system/disko/flake.nix new file mode 100644 index 0000000..ec251aa --- /dev/null +++ b/system/disko/flake.nix @@ -0,0 +1,19 @@ +{ + description = "disko config"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; + disko.url = "github:nix-community/disko"; + disko.inputs.nixpkgs.follows = "nixpkgs"; + }; + + outputs = { ... }@inputs: { + + module = { config, lib, pkgs, devices, ... }: { + imports = [ + (./default.nix { inherit devices; }) + inputs.disko.nixosModules.default + ]; + }; + }; +} diff --git a/system/disko/impermanent.nix b/system/disko/impermanent.nix new file mode 100644 index 0000000..2c6ca32 --- /dev/null +++ b/system/disko/impermanent.nix @@ -0,0 +1,29 @@ +{ config, lib, ... }: { + + boot.initrd.postDeviceCommands = lib.mkAfter '' + mkdir /btrfs_tmp + mount /dev/root_vg/root /btrfs_tmp + if [[ -e /btrfs_tmp/root ]]; then + mkdir -p /btrfs_tmp/old_roots + timestamp=$(date --date="@$(stat -c %Y /btrfs_tmp/root)" "+%Y-%m-%d_%H:%M:%S") + mv /btrfs_tmp/root "btrfs_tmp/old_roots/$timestamp" + fi + + deleteSubvolumeRecursively() { + IFS=$'\n' + for i in $(btrfs subvolume list -o "$1" | cut -f 9- -d ' '); do + deleteSubvolumeRecursively "/btrfs_tmp/$i" + done; + btrfs subvolume delete $1 + } + + for i in $(find /btrfs_tmp/old_roots -maxdepth 1 -mtime +30); do + deleteSubvolumeRecursively "$i" + done + + btrfs subvolume create /btrfs_tmp/root + umount /btrfs_tmp + ''; + + config.initialPasswords = lib.mkForce true; +} diff --git a/system/flake.nix b/system/flake.nix index 01ffe31..353fb5f 100755 --- a/system/flake.nix +++ b/system/flake.nix @@ -11,6 +11,10 @@ prgms.url = "./programs"; + disko.url = "./disko"; + + impermanence.url = "./impermanence"; + }; outputs = { self, ... }@inputs: { @@ -18,6 +22,8 @@ nixosModule = { config, lib, pkgs, core_inputs, ... }: { imports = [ ./configuration/configuration.nix + inputs.disko.module + inputs.impermanence.module inputs.sddm.module inputs.srvcs.module inputs.pckgs.module diff --git a/system/impermanence/default.nix b/system/impermanence/default.nix new file mode 100644 index 0000000..d38bc90 --- /dev/null +++ b/system/impermanence/default.nix @@ -0,0 +1,29 @@ +{ config, lib, self, ... }: { + + options = {}; + + config = lib.mkIf config.disko.impermanent { + imports = [ + self.inputs.impermanence.nixosModules.impermanence + ]; + + fileSystems."/persist".neededForBoot = true; + environment.persistence."/persist/system" = { + hideMounts = true; + directories = [ + "/etc/nixos" + "/etc/shadow" + "/var/log" + "/var/lib/bluetooth" + "/var/lib/nixos" + "/var/lib/systemd/coredump" + "/etc/NetworkManager/system-connections" + ]; + files = [ + "/etc/machine-id" + ]; + }; + + programs.fuse.userAllowOther = true; + }; +} diff --git a/system/impermanence/flake.nix b/system/impermanence/flake.nix new file mode 100644 index 0000000..302d65e --- /dev/null +++ b/system/impermanence/flake.nix @@ -0,0 +1,10 @@ +{ + description = "nix impermanence config"; + + inputs.impermanence.url = "github:nix-community/impermanence"; + + outputs = { self, ... }: { + + module = import ./. { inherit self; }; + }; +}