]> gitweb.ps.run Git - flake_thinkpad/blobdiff - configuration.nix
add kde plasma
[flake_thinkpad] / configuration.nix
index 6636ca4babf99cfebdb6c3c40726734a485e9c17..4a277d1c877f46687a85973cd79545608d6bc4cb 100644 (file)
@@ -20,6 +20,8 @@ in
     [ # Include the results of the hardware scan.
       ./hardware-configuration.nix
       inputs.home-manager.nixosModules.default
+      inputs.extra-container.nixosModules.default
+      inputs.microvm.nixosModules.host
     ];
 
   # Bootloader.
@@ -33,13 +35,25 @@ in
   boot.initrd.kernelModules = [ "amdgpu" ];
   boot.consoleLogLevel = 0;
   boot.kernelPackages = pkgs.linuxPackages_latest;
-  boot.kernelParams = [ "quiet" "udev.log_level=0" "amdgpu.runpm=0" ]; 
-
-  networking.hostName = "nixos"; # Define your hostname.
+  boot.kernelParams = [ "quiet" "udev.log_level=0" "amdgpu.runpm=0" ];
+
+  # incus admin init --minimal
+  # incus image list images:
+  # incus launch images:ubuntu/noble <name>
+  # incus exec <name> -- /bin/bash
+  # incus exec <name> -- adduser --shell /bin/bash --ingroup sudo ps
+  # incus exec <name> -- su - ps -c 'tmux new-session -A -s main'
+  virtualisation.incus.enable = true;
+  virtualisation.incus.ui.enable = true;
+  networking.nftables.enable = true;
+  networking.firewall.trustedInterfaces = [ "incusbr0" ];
+
+  networking.hostName = "thinkpad"; # Define your hostname.
   # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant.
 
   nix.settings.experimental-features = [ "nix-command" "flakes" ];
-  nix.package = pkgs.nixVersions.nix_2_28;
+  nix.settings.download-buffer-size = 500000000;
+  nix.settings.trusted-users = ["root" "ps"];
 
   # Configure network proxy if necessary
   # networking.proxy.default = "http://user:password@proxy:port/";
@@ -69,27 +83,58 @@ in
   programs.dconf.enable = true;
   programs.steam.enable = true;
 
+  # Containers
+  containers = {
+    im = {
+      ephemeral = true;
+      # privateNetwork = true;
+      localAddress = "10.23.45.2";
+      hostAddress = "10.23.45.1";
+
+      bindMounts."/per".hostPath = "/var/lib/nixos-containers/im";
+      bindMounts."/per".isReadOnly = false;
+
+      extraFlags = [
+        "--property='MemoryMax=60M'"
+        "--property='MemoryHigh=50M'"
+        "--property='CPUQuota=4%'"
+      ];
+
+      config = { config, pkgs, ... }: {
+        imports = [ inputs.impermanence.nixosModules.impermanence ];
+
+        environment.persistence."/per" = {
+          directories = [
+            "/var/log"
+            "/var/lib"
+            { directory = "/home/ps"; user = "ps"; group = "users"; mode = "0750"; }
+          ];
+          files = [];
+        };
+        environment.systemPackages = with pkgs; [ helix python312 deno ];
+
+        users.users.ps = { isNormalUser = true; };
+
+        networking.firewall.allowedTCPPorts = [ 80 8080 ];
+
+        system.stateVersion = "25.05";
+      };
+    };
+  };
+  networking.nat.enable = true;
+  networking.nat.internalInterfaces = ["ve-+"];
+  networking.nat.externalInterface = "eth0";
+  networking.networkmanager.unmanaged = [ "interface-name:ve-*" ];
+
   # Services
   services = {
-
+    displayManager = {
+      defaultSession = "xfce+i3";
+    };
     xserver = {
       enable = true;
       
-      # Enable the GNOME Desktop Environment.
-      # displayManager.gdm.enable = true;
-      # desktopManager.gnome.enable = true;
-      
-      # displayManager.sddm.enable = true;
-      # desktopManager.budgie.enable = true;
-
-      # desktopManager.deepin.enable = true;
-      # displayManager.lightdm.enable = true;
-
-      # displayManager.gdm.enable = true;
-      # desktopManager.plasma5.enable = true;
-
       displayManager = {
-        defaultSession = "xfce+i3";
         lightdm = {
           enable = true;
           greeters.gtk = {
@@ -114,12 +159,14 @@ in
         xterm.enable = false;
         xfce = {
           enable = true;
-          noDesktop = true;
+          noDesktop = true;
           enableXfwm = false;
         };
+       plasma6.enable = true;
       };
       windowManager.i3.enable = true;
       windowManager.awesome.enable = true;
+      windowManager.herbstluftwm.enable = true;
 
       xkb = {
         layout = "de";
@@ -132,6 +179,18 @@ in
     };
   };
 
+  systemd.user.services.plasma-i3wm = {
+    wantedBy = [ "plasma-workspace-x11.target" ];
+    description = "Launch Plasma with i3wm.";
+    environment = lib.mkForce {};
+    serviceConfig = {
+      ExecStart = "${pkgs.i3}/bin/i3";
+      Restart = "on-failure";
+    };
+  };
+  systemd.user.services.plasma-workspace-x11.after = [ "plasma-i3wm.target" ];
+  systemd.user.services.plasma-kwin_x11.enable = false;
+
   services.autorandr = {
     enable = true;
     matchEdid = true;
@@ -148,24 +207,68 @@ in
     dataDir = "/home/ps/sync";
     configDir = "/home/ps/.config/syncthing";
   };
+  
+  # services.auto-cpufreq.enable = true;
+  services.auto-cpufreq.settings = {
+    battery = {
+       governor = "powersave";
+       turbo = "never";
+    };
+    charger = {
+       governor = "performance";
+       turbo = "auto";
+    };
+  };
+
+  # services.tlp = {
+  #   enable = true;
+  #   settings = {
+  #     CPU_SCALING_GOVERNOR_ON_AC = "performance";
+  #     CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
+  #
+  #     CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance";
+  #     CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
+  #
+  #     PLATFORM_PROFILE_ON_AC = "balanced";
+  #     PLATFORM_PROFILE_ON_BAT = "low-power";
+  #
+  #     CPU_BOOST_ON_AC = "1";
+  #     CPU_BOOST_ON_BAT = "0";
+  #
+  #     AMDGPU_ABM_LEVEL_ON_AC = "0";
+  #     AMDGPU_ABM_LEVEL_ON_BAT = "3";
+  #
+  #     CPU_MIN_PERF_ON_AC = 0;
+  #     CPU_MAX_PERF_ON_AC = 100;
+  #     CPU_MIN_PERF_ON_BAT = 0;
+  #     CPU_MAX_PERF_ON_BAT = 20;
+  #
+  #     # START_CHARGE_THRESH_BAT0 = 40; # 40 and below it starts to charge
+  #     STOP_CHARGE_THRESH_BAT0 = 90; # 85 and above it stops charging
+  #   };
+  # };
 
   services.udev.extraRules = ''
     KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{serial}=="*vial:f64c2b3c*", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl"
   '';
 
   # OpenGL
-  # hardware.graphics.enable = true;
   hardware = {
     graphics = {
         enable = true;
         enable32Bit = true;
+       extraPackages = with pkgs; [
+         rocmPackages.clr.icd
+         mesa.opencl
+         amf
+       ];
     };
 
     amdgpu.amdvlk = {
         enable = true;
         support32Bit.enable = true;
     };
-};
+  };
 
   # services.logind = {
   #   extraConfig = "HandlePowerKey=suspend";
@@ -179,13 +282,21 @@ in
   services.printing.enable = true;
   services.printing.drivers = [ pkgs.gutenprint ];
 
+  # Enable scanners
+  hardware.sane.enable = true;
+  hardware.sane.extraBackends = [ pkgs.hplipWithPlugin pkgs.sane-airscan ];
+  services.avahi.enable = true;
+  services.avahi.nssmdns4 = true;
+  services.avahi.reflector = true;
+  services.udev.packages = [ pkgs.sane-airscan ];
+
   # Enable Bluetooth
   hardware.bluetooth.enable = true;
   hardware.bluetooth.powerOnBoot = false;
-  services.blueman.enable = true;
+  services.blueman.enable = true;
 
   # Enable sound with pipewire.
-  hardware.pulseaudio.enable = false;
+  services.pulseaudio.enable = false;
   security.rtkit.enable = true;
   services.pipewire = {
     enable = true;
@@ -215,15 +326,15 @@ in
       isNormalUser = true;
       description = "Patrick";
       shell = pkgs.bash;
-      extraGroups = [ "networkmanager" "wheel" "dialout" "jackaudio" ];
-    };
-    sshd = {
-      isSystemUser = true;
-      packages = [
-        pkgs.python3
-      ];
-      group = "ssh";
+      extraGroups = [ "networkmanager" "wheel" "dialout" "jackaudio" "lp" "incus-admin" ];
     };
+    # sshd = {
+    #   isSystemUser = true;
+    #   packages = [
+    #     pkgs.python3
+    #   ];
+    #   group = "ssh";
+    # };
     chirp = {
       isSystemUser = true;
       packages = [
@@ -244,10 +355,9 @@ in
       inherit inputs;
       inherit wallpaper;
     };
-    # users = {
-    #   "ps" = import ./home.nix;
-    # };
-    users.ps.imports = [ ./home.nix ];
+    users = {
+      "ps" = import ./home.nix;
+    };
   };
 
   # Enable automatic login for the user.
@@ -262,25 +372,39 @@ in
   # Allow unfree packages
   nixpkgs.config.allowUnfree = true;
 
+
+  environment.variables = {
+    RUSTICL_ENABLE = "radeonsi";
+  };
   # List packages installed in system profile. To search, run:
   # $ nix search wget
   environment.systemPackages = with pkgs; [
-    args.inputs.nixpkgs-unstable.legacyPackages.${pkgs.system}.zig
-    args.inputs.nixpkgs-unstable.legacyPackages.${pkgs.system}.zls
+    args.inputs.zls.inputs.zig-overlay.packages.${pkgs.system}.master
+    args.inputs.zls.packages.${pkgs.system}.zls
     args.inputs.psch-flakes.packages.${pkgs.system}.resetmsmice
+    args.inputs.nixpkgs-unstable.legacyPackages.${pkgs.system}.zuban
     vim wget file git kitty i3 gdb
     mosh
     cmake
+    entr
+    asciinema asciinema-agg
+    shellify
 
     scrcpy
 
     xsel
+    xcwd
+
+    pinta
+    mupdf
+    davinci-resolve
 
     pavucontrol
     syncthingtray
     # xfce plugins
+    xfce.xfce4-panel
     xfce.xfce4-pulseaudio-plugin
-      # xfce.xfce4-verve-plugin
+    # xfce.xfce4-verve-plugin
     xfce.xfce4-notes-plugin
     # xfce.xfce4-timer-plugin
     # xfce.xfce4-windowck-plugin
@@ -308,28 +432,28 @@ in
 
   # Enable the OpenSSH daemon.
   services.openssh = {
-    enable = false;
+    enable = true;
     ports = [ 22 ];
-    settings = {
-      PasswordAuthentication = false;
-      PermitRootLogin = "no";
-    };
-    authorizedKeysCommand =
-      let keys = pkgs.writers.writePython3Bin "keys" {} ''
-          import sys
-
-          args = sys.argv
-
-          print(args)
-        '';
-      in
-        "${keys}/bin/keys";
-    authorizedKeysCommandUser = "ps";
+    settings = {
+      PasswordAuthentication = false;
+      PermitRootLogin = "no";
+    };
+    authorizedKeysCommand =
+      let keys = pkgs.writers.writePython3Bin "keys" {} ''
+          import sys
+    #
+          args = sys.argv
+    #
+          print(args)
+        '';
+      in
+        "${keys}/bin/keys";
+    authorizedKeysCommandUser = "ps";
   };
 
   # Open ports in the firewall.
-  networking.firewall.allowedTCPPorts = [ 22 1234 5900 6011 6021 6022 8080 53317 ];
-  networking.firewall.allowedUDPPorts = [ 5901 53317 ];
+  networking.firewall.allowedTCPPorts = [ 22 1234 5900 6011 6021 6022 8080 53317 7236 7250 ];
+  networking.firewall.allowedUDPPorts = [ 5901 53317 7236 5353 ];
   # Or disable the firewall altogether.
   # networking.firewall.enable = false;