diff --git a/flake.lock b/flake.lock index 09e4903..4dcf308 100755 --- a/flake.lock +++ b/flake.lock @@ -227,12 +227,36 @@ "type": "github" } }, + "plasma-manager": { + "inputs": { + "home-manager": [ + "home-manager" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1767662275, + "narHash": "sha256-d5Q1GmQ+sW1Bt8cgDE0vOihzLaswsm8cSdg8124EqXE=", + "owner": "nix-community", + "repo": "plasma-manager", + "rev": "51816be33a1ff0d4b22427de83222d5bfa96d30e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "plasma-manager", + "type": "github" + } + }, "root": { "inputs": { "home-manager": "home-manager", "impermanence": "impermanence", "llm-agents": "llm-agents", - "nixpkgs": "nixpkgs_3" + "nixpkgs": "nixpkgs_3", + "plasma-manager": "plasma-manager" } }, "systems": { @@ -274,4 +298,4 @@ }, "root": "root", "version": 7 -} +} \ No newline at end of file diff --git a/flake.nix b/flake.nix index 55e26a8..31ec8af 100755 --- a/flake.nix +++ b/flake.nix @@ -12,6 +12,11 @@ inputs.nixpkgs.follows = "nixpkgs"; }; impermanence.url = "github:nix-community/impermanence"; + plasma-manager = { + url = "github:nix-community/plasma-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; llm-agents.url = "github:Qumulo/llm-agents"; # nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.6.0"; }; @@ -22,7 +27,6 @@ nixpkgs, home-manager, impermanence, - llm-agents, # nix-flatpak, }@inputs: let @@ -45,6 +49,7 @@ home-manager.useUserPackages = true; home-manager.users.laythe = import ./machines/homepc/home.nix; + home-manager.sharedModules = [ plasma-manager.homeModules.plasma-manager ]; } ]; }; @@ -60,7 +65,8 @@ home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.laythe = import ./machines/homepc/home.nix; + home-manager.users.laythe = import ./machines/workstation/home.nix; + home-manager.sharedModules = [ plasma-manager.homeModules.plasma-manager ]; } ]; }; diff --git a/global/eraseyourdarlings.nix b/global/eraseyourdarlings.nix index 1c37167..e0b9c13 100755 --- a/global/eraseyourdarlings.nix +++ b/global/eraseyourdarlings.nix @@ -61,6 +61,7 @@ "Documents" "Videos" "nixos-configv3" + ".config/cura" { directory = ".local/share/Steam"; mode = "0777"; @@ -92,5 +93,5 @@ ]; }; }; - users.users.laythe.hashedPasswordFile="/persistent/etc/passwdfile"; + users.users.laythe.hashedPasswordFile = "/persistent/etc/passwdfile"; } diff --git a/machines/workstation/configuration.nix b/machines/workstation/configuration.nix index 6ad7bc3..9cd45b9 100755 --- a/machines/workstation/configuration.nix +++ b/machines/workstation/configuration.nix @@ -87,10 +87,9 @@ # List packages installed in system profile. # You can use https://search.nixos.org/ to find more packages (and options). - # 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 - # ]; + environment.systemPackages = with pkgs; [ + cura-appimage # I want cura but not kicad so i dont pull in fabrication + ]; # Some programs need SUID wrappers, can be configured further or are # started in user sessions. diff --git a/machines/workstation/hardware-configuration.nix b/machines/workstation/hardware-configuration.nix index b6f2738..c037622 100755 --- a/machines/workstation/hardware-configuration.nix +++ b/machines/workstation/hardware-configuration.nix @@ -19,40 +19,53 @@ "btrfs" ]; boot.initrd.kernelModules = [ "btrfs" ]; - boot.kernelModules = [ "kvm-intel" "btrfs" ]; + boot.kernelModules = [ + "kvm-intel" + "btrfs" + ]; boot.extraModulePackages = [ ]; boot.supportedFilesystems = [ "btrfs" ]; fileSystems."/" = { device = "/dev/disk/by-label/BUTTER"; fsType = "btrfs"; - options = [ "compress=zstd" "subvol=root" ]; + options = [ + "compress=zstd" + "subvol=root" + ]; }; - fileSystems."/home" = { - device = "/dev/disk/by-label/BUTTER"; - fsType = "btrfs"; - options = [ "compress=zstd" "subvol=home" ]; - }; + # fileSystems."/home" = { + # device = "/dev/disk/by-label/BUTTER"; + # fsType = "btrfs"; + # options = [ "compress=zstd" "subvol=home" ]; + # }; fileSystems."/nix" = { # device = "/dev/disk/by-uuid/3c89fa92-1d43-4c48-b228-e2725fa70ee9"; device = "/dev/disk/by-label/BUTTER"; fsType = "btrfs"; - options = [ "compress=zstd" "noatime" "subvol=nix" ]; + options = [ + "compress=zstd" + "noatime" + "subvol=nix" + ]; }; -# fileSystems."/swap" = { -# device = "/dev/disk/by-label/BUTTER"; -# fsType = "btrfs"; -# options = [ "noatime" "subvol=swap" ]; -# }; + # fileSystems."/swap" = { + # device = "/dev/disk/by-label/BUTTER"; + # fsType = "btrfs"; + # options = [ "noatime" "subvol=swap" ]; + # }; fileSystems."/persistent" = { device = "/dev/disk/by-label/BUTTER"; fsType = "btrfs"; neededForBoot = true; - options = [ "compress=zstd" "subvol=persist" ]; + options = [ + "compress=zstd" + "subvol=persist" + ]; }; fileSystems."/boot" = { @@ -64,17 +77,56 @@ ]; }; -# fileSystems = { -# "/".options = [ "compress=zstd" ]; -# "/home".options = [ "compress=zstd" ]; -# "/persist".options = [ "compress=zstd" ]; -# "/nix".options = [ "compress=zstd" "noatime" ]; -# "/swap".options = [ "noatime" ]; -# }; + # fileSystems = { + # "/".options = [ "compress=zstd" ]; + # "/home".options = [ "compress=zstd" ]; + # "/persist".options = [ "compress=zstd" ]; + # "/nix".options = [ "compress=zstd" "noatime" ]; + # "/swap".options = [ "noatime" ]; + # }; -# swapDevices = [ -# { device = "/swap/swapfile"; } -# ]; + # swapDevices = [ + # { device = "/swap/swapfile"; } + # ]; + + # Enable OpenGL + hardware.graphics = { + enable = true; + }; + + # Load nvidia driver for Xorg and Wayland + services.xserver.videoDrivers = [ "nvidia" ]; + + hardware.nvidia = { + + # Modesetting is required. + modesetting.enable = true; + + # Nvidia power management. Experimental, and can cause sleep/suspend to fail. + # Enable this if you have graphical corruption issues or application crashes after waking + # up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead + # of just the bare essentials. + powerManagement.enable = false; + + # Fine-grained power management. Turns off GPU when not in use. + # Experimental and only works on modern Nvidia GPUs (Turing or newer). + powerManagement.finegrained = false; + + # Use the NVidia open source kernel module (not to be confused with the + # independent third-party "nouveau" open source driver). + # Support is limited to the Turing and later architectures. Full list of + # supported GPUs is at: + # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus + # Only available from driver 515.43.04+ + open = false; + + # Enable the Nvidia settings menu, + # accessible via `nvidia-settings`. + nvidiaSettings = true; + + # Optionally, you may need to select the appropriate driver version for your specific GPU. + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; diff --git a/machines/workstation/home.nix b/machines/workstation/home.nix index b9f3cc3..7428e0d 100755 --- a/machines/workstation/home.nix +++ b/machines/workstation/home.nix @@ -1,4 +1,11 @@ -{config, pkgs, lib, inputs, outputs, ...}: +{ + config, + pkgs, + lib, + inputs, + outputs, + ... +}: { # These both are probably always going to be the same, but I'll keep them local just in case:tm: home.username = "laythe"; @@ -6,9 +13,10 @@ imports = [ ../../home/default.nix + ../../modules/kde/home.nix ]; - home.stateVersion = "25.11"; + home.stateVersion = "24.11"; programs.home-manager.enable = true; } diff --git a/modules/development/default.nix b/modules/development/default.nix index 0a95718..13c90a9 100755 --- a/modules/development/default.nix +++ b/modules/development/default.nix @@ -1,8 +1,24 @@ { pkgs, ... }: { environment.systemPackages = with pkgs; [ - vscode antigravity # Free Gemini 3 credits was too good of an offer to not take up, even if it requires selling my soul. chromium ]; + + home-manager.sharedModules = [ + ( + { pkgs, ... }: + { + programs.vscode = { + enable = true; + extensions = with pkgs.vscode-extensions; [ + jnoortheen.nix-ide + ]; + userSettings = { + "editor.formatOnSave" = true; + }; + }; + } + ) + ]; } diff --git a/modules/kde/default.nix b/modules/kde/default.nix index 1dbf4be..25868fb 100755 --- a/modules/kde/default.nix +++ b/modules/kde/default.nix @@ -8,9 +8,22 @@ programs.kdeconnect.enable = true; environment.systemPackages = with pkgs; [ - firefox # Odd spot, but my choice of browser is determined by environment. kdePackages.kate kdePackages.filelight # kdePackages.kdeconnect-kde ]; + + programs.firefox = { + enable = true; + policies.ExtensionSettings = { + "*".installation_mode = "blocked"; # blocks all addons except the ones specified below + # uBlock Origin: + "uBlock0@raymondhill.net" = { + install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; + installation_mode = "force_installed"; + }; + }; + }; + + services.automatic-timezoned.enable = true; } diff --git a/modules/kde/home.nix b/modules/kde/home.nix new file mode 100755 index 0000000..ca43f87 --- /dev/null +++ b/modules/kde/home.nix @@ -0,0 +1,97 @@ +{ pkgs, ... }: +{ + programs.plasma = { + enable = true; + workspace = { + lookAndFeel = "org.kde.breezedark.desktop"; + }; + panels = [ + # Windows-like panel at the bottom + { + location = "bottom"; + widgets = [ + # We can configure the widgets by adding the name and config + # attributes. For example to add the the kickoff widget and set the + # icon to "nix-snowflake-white" use the below configuration. This will + # add the "icon" key to the "General" group for the widget in + # ~/.config/plasma-org.kde.plasma.desktop-appletsrc. + { + name = "org.kde.plasma.kickoff"; + config = { + General = { + icon = "nix-snowflake-white"; + alphaSort = true; + }; + }; + } + # Or you can configure the widgets by adding the widget-specific options for it. + # See modules/widgets for supported widgets and options for these widgets. + # For example: + # { + # kickoff = { + # sortAlphabetically = true; + # icon = "nix-snowflake-white"; + # }; + # } + # Adding configuration to the widgets can also for example be used to + # pin apps to the task-manager, which this example illustrates by + # pinning dolphin and konsole to the task-manager by default with widget-specific options. + # { + # iconTasks = { + # launchers = [ + # "applications:org.kde.dolphin.desktop" + # "applications:org.kde.konsole.desktop" + # ]; + # }; + # } + # Or you can do it manually, for example: + { + name = "org.kde.plasma.icontasks"; + config = { + General = { + launchers = [ + "applications:org.kde.dolphin.desktop" + "applications:org.kde.konsole.desktop" + ]; + }; + }; + } + # If no configuration is needed, specifying only the name of the + # widget will add them with the default configuration. + "org.kde.plasma.marginsseparator" + # If you need configuration for your widget, instead of specifying the + # the keys and values directly using the config attribute as shown + # above, plasma-manager also provides some higher-level interfaces for + # configuring the widgets. See modules/widgets for supported widgets + # and options for these widgets. The widgets below shows two examples + # of usage, one where we add a digital clock, setting 12h time and + # first day of the week to Sunday and another adding a systray with + # some modifications in which entries to show. + { + digitalClock = { + calendar.firstDayOfWeek = "monday"; + time.format = "12h"; + }; + } + { + systemTray.items = { + # We explicitly show bluetooth and battery + shown = [ + "org.kde.plasma.battery" + "org.kde.plasma.networkmanagement" + "org.kde.plasma.volume" + ]; + # And explicitly hide networkmanagement and volume + hidden = [ + # "org.kde.plasma.networkmanagement" + # "org.kde.plasma.volume" + "org.kde.plasma.bluetooth" + ]; + }; + } + ]; + hiding = "none"; + } + ]; + }; +}