diff --git a/configuration-vmgaming.nix b/configuration-vmgaming.nix index 3c01ace..bb4319f 100644 --- a/configuration-vmgaming.nix +++ b/configuration-vmgaming.nix @@ -5,37 +5,27 @@ ... }: { imports = [ - ./hosts/vmgaming/configuration.nix + ./hosts/vmgaming - ./modules/nixos/base.nix - ./modules/nixos/desktop-i3.nix - ./modules/nixos/parsec.nix + ./modules/common/base.nix + ./modules/common/desktop-i3.nix + ./modules/common/parsec.nix + ./modules/common/users.nix - ./modules/laptop/users.nix ./modules/laptop/gaming.nix ]; networking.hostName = "VMGaming"; networking.useDHCP = lib.mkDefault true; - # Proxmox VM: boot in UEFI mode without touching host EFI variables. - boot.loader.grub = { - enable = true; - efiSupport = true; - efiInstallAsRemovable = true; - device = "nodev"; - }; - boot.loader.efi.canTouchEfiVariables = false; - boot.blacklistedKernelModules = ["nouveau"]; - services.spice-vdagentd.enable = true; - services.qemuGuest.enable = true; + # services.spice-vdagentd.enable = true; # Gaming VM guest optimizations programs.gamemode.enable = true; programs.gamescope.enable = true; - security.rtkit.enable = true; + # security.rtkit.enable = true; services.pipewire = { enable = true; @@ -45,26 +35,9 @@ }; services.pulseaudio.enable = false; - hardware.graphics = { - enable = true; - enable32Bit = true; - }; - - # NVIDIA passthrough guest defaults. - # If you pass through an AMD GPU instead, replace with: - services.xserver.videoDrivers = ["nvidia"]; - - hardware.nvidia = { - modesetting.enable = true; - #powerManagement.enable = false; - open = false; - #nvidiaSettings = true; - package = config.boot.kernelPackages.nvidiaPackages.stable; - }; - - services.xserver.deviceSection = '' - Option "AllowEmptyInitialConfiguration" - ''; + # services.xserver.deviceSection = '' + # Option "AllowEmptyInitialConfiguration" + # ''; powerManagement.cpuFreqGovernor = lib.mkDefault "performance"; diff --git a/configuration.nix b/configuration.nix index 2910a86..53c9af8 100644 --- a/configuration.nix +++ b/configuration.nix @@ -8,17 +8,17 @@ ./hosts/laptop/configuration.nix # NixOS base modules - ./modules/nixos/base.nix - ./modules/nixos/yubikey.nix - ./modules/nixos/desktop-i3.nix - ./modules/nixos/net.nix - ./modules/nixos/wireless-networks.nix - ./modules/nixos/parsec.nix + ./modules/common/base.nix + ./modules/common/yubikey.nix + ./modules/common/desktop-i3.nix + ./modules/common/net.nix + ./modules/common/parsec.nix + ./modules/common/users.nix + ./modules/common/obs.nix # Laptop-specific modules ./modules/laptop/default.nix ./modules/laptop/fingerprint.nix - ./modules/laptop/users.nix ./modules/laptop/home-manager.nix ./modules/laptop/bluetooth.nix ./modules/laptop/zwift.nix @@ -62,4 +62,12 @@ custom.bluetooth.powerOnBoot = true; custom.zwift.enable = true; + + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + services.pulseaudio.enable = false; } diff --git a/devshells.nix b/devshells.nix new file mode 100644 index 0000000..17bd44a --- /dev/null +++ b/devshells.nix @@ -0,0 +1,72 @@ +{pkgs}: let + latexDevExtension = with pkgs.vscode-extensions; [ + james-yu.latex-workshop + eamodio.gitlens + jebbs.plantuml + ]; + + extensionJsonFile = pkgs.writeTextFile { + name = "vscode-exentsions-json"; + destination = "/share/vscode/extension/extension.json"; + text = pkgs.vscode-utils.toExtensionJson latexDevExtension; + }; + + seededExtension = pkgs.buildEnv { + name = "vscode-tex-seeded-extensions"; + paths = latexDevExtension ++ [extensionJsonFile]; + }; + + vscodeIsolated = pkgs.writeShellScriptBin "code" '' + set -euo pipefail + + VSCODE_TEX_HOME="''${XDG_CACHE_HOME:-$HOME/.cache}/vscode-tex-shell" + USER_DATA_DIR="$VSCODE_TEX_HOME/user-data" + EXT_DIR="$VSCODE_TEX_HOME/extensions" + + mkdir -p "$USER_DATA_DIR" "$EXT_DIR" + + for ext in ${seededExtension}/share/vscode/extensions/*; do + name="$(basename "$ext")" + if [ ! -e "$EXT_DIR/$name" ]; then + ln -s "$ext" "$EXT_DIR/$name" + fi + done + + exec ${pkgs.vscode}/bin/code \ + --user-data-dir "$USER_DATA_DIR" \ + --extensions-dir "$EXT_DIR" \ + "$@" + ''; +in { + default = pkgs.mkShell { + packages = [ + vscodeIsolated + # pkgs.latexmk + (pkgs.texliveBasic.withPackages + ( + ps: [ + ps.beamer + ps.preprint + ps.tikz-ext + ps.latexmk + ps.microtype + ps.mathtools + ps.thmtools + ps.enumitem + ps.csquotes + ps.cleveref + ps.algorithm2e + ps.ifoddpage + ps.relsize + ps.amsfonts + ps.amsmath + ps.geometry + ps.hyperref + ps.lm + ps.xcolor + ps.datetime2 + ] + )) + ]; + }; +} diff --git a/dotconfig/i3/config b/dotconfig/i3/config index f480589..ed360fa 100644 --- a/dotconfig/i3/config +++ b/dotconfig/i3/config @@ -1,130 +1,76 @@ -# This file has been auto-generated by i3-config-wizard(1). -# It will not be overwritten, so edit it as you like. -# -# Should you change your keyboard layout some time, delete -# this file and re-run i3-config-wizard(1). -# - # i3 config file (v4) -# -# Please see https://i3wm.org/docs/userguide.html for a complete reference! +# Reference: https://i3wm.org/docs/userguide.html + +############################ +# Appearance and globals +############################ +set $mod Mod4 +set $refresh_i3status killall -SIGUSR1 i3status gaps inner 10 gaps outer 12 default_border pixel 0 default_floating_border pixel 0 - -set $mod Mod4 - -# Font for window titles. Will also be used by the bar unless a different font -# is used in the bar {} block below. font pango:monospace 8 -# https://thomashunter.name/i3-configurator/ # class border bground text indicator child_border client.focused #2F4A36 #2F4A36 #FFFFFF #2F4A36 #2F4A36 client.focused_inactive #52805E #52805E #FFFFFF #484E50 #5F676A client.unfocused #0A100B #0A100B #888888 #292D2E #222222 client.urgent #2F343A #900000 #FFFFFF #900000 #900000 client.placeholder #000000 #0C0C0C #FFFFFF #000000 #0C0C0C - client.background #FFFFFF -# This font is widely installed, provides lots of unicode glyphs, right-to-left -# text rendering and scalability on retina/hidpi displays (thanks to pango). -#font pango:DejaVu Sans Mono 8 - -# Start XDG autostart .desktop files using dex. See also -# https://wiki.archlinux.org/index.php/XDG_Autostart +############################ +# Startup +############################ exec --no-startup-id dex --autostart --environment i3 +# exec_always --no-startup-id /home/alice/.config/i3/autostart.sh -# The combination of xss-lock, nm-applet and pactl is a popular choice, so -# they are included here as an example. Modify as you see fit. - -# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the -# screen before suspend. Use loginctl lock-session to lock your screen. -exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork - -# NetworkManager is the most popular way to manage wireless networks on Linux, -# and nm-applet is a desktop environment-independent system tray GUI for it. -# exec --no-startup-id nm-applet - -# Use pactl to adjust volume in PulseAudio. -set $refresh_i3status killall -SIGUSR1 i3status +############################ +# Audio +############################ bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status -# Use Mouse+$mod to drag floating windows to their wanted position +############################ +# Core behavior +############################ floating_modifier $mod -# start a terminal -# bindsym $mod+Return exec i3-sensible-terminal - -# kill focused window bindsym $mod+Shift+Q kill - -# start dmenu (a program launcher) bindsym $mod+d exec --no-startup-id rofi -show drun -show-icons -# A more modern dmenu replacement is rofi: -# bindcode $mod+40 exec "rofi -modi drun,run -show drun" -# There also is i3-dmenu-desktop which only displays applications shipping a -# .desktop file. It is a wrapper around dmenu, so you need that installed. -# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop +bindsym $mod+Return exec alacritty +bindsym $mod+Tab exec rofi -show combi -show-icons -# change focus -# bindsym $mod+j focus left -# bindsym $mod+k focus down -# bindsym $mod+l focus up -# bindsym $mod+m focus right - -# alternatively, you can use the cursor keys: +# Focus bindsym $mod+Left focus left bindsym $mod+Down focus down bindsym $mod+Up focus up bindsym $mod+Right focus right -# move focused window -# bindsym $mod+Shift+j move left -# bindsym $mod+Shift+k move down -# bindsym $mod+Shift+l move up -# bindsym $mod+Shift+M move right - -# alternatively, you can use the cursor keys: +# Move windows bindsym $mod+Shift+Left move left bindsym $mod+Shift+Down move down bindsym $mod+Shift+Up move up bindsym $mod+Shift+Right move right -# split in horizontal orientation +# Layout bindsym $mod+h split h - -# split in vertical orientation bindsym $mod+v split v - -# enter fullscreen mode for the focused container bindsym $mod+f fullscreen toggle - -# change container layout (stacked, tabbed, toggle split) bindsym $mod+s layout stacking bindsym $mod+z layout tabbed bindsym $mod+e layout toggle split - -# toggle tiling / floating bindsym $mod+Shift+space floating toggle - -# change focus between tiling / floating windows bindsym $mod+space focus mode_toggle - -# focus the parent container bindsym $mod+q focus parent -# focus the child container -#bindsym $mod+d focus child - -# Define names for default workspaces for which we configure key bindings later on. -# We use variables to avoid repeating the names in multiple places. +############################ +# Workspaces (AZERTY row) +############################ set $ws1 "1" set $ws2 "2" set $ws3 "3" @@ -136,7 +82,6 @@ set $ws8 "8" set $ws9 "9" set $ws10 "10" -# switch to workspace bindsym $mod+ampersand workspace number $ws1 bindsym $mod+eacute workspace number $ws2 bindsym $mod+quotedbl workspace number $ws3 @@ -148,7 +93,6 @@ bindsym $mod+underscore workspace number $ws8 bindsym $mod+ccedilla workspace number $ws9 bindsym $mod+agrave workspace number $ws10 -# move focused container to workspace bindsym $mod+Shift+1 move container to workspace number $ws1 bindsym $mod+Shift+eacute move container to workspace number $ws2 bindsym $mod+Shift+3 move container to workspace number $ws3 @@ -160,33 +104,25 @@ bindsym $mod+Shift+8 move container to workspace number $ws8 bindsym $mod+Shift+ccedilla move container to workspace number $ws9 bindsym $mod+Shift+agrave move container to workspace number $ws10 -# reload the configuration file +bindsym $mod+p move workspace to output left + +############################ +# Session controls +############################ bindsym $mod+Shift+c reload -# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) bindsym $mod+Shift+r restart -# exit i3 (logs you out of your X session) bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" +bindsym $mod+Shift+l exec --no-startup-id i3lock -n -c 000000 -# resize window (you can also use the mouse for that) +############################ +# Resize mode +############################ mode "resize" { - # These bindings trigger as soon as you enter the resize mode - - # Pressing left will shrink the window’s width. - # Pressing right will grow the window’s width. - # Pressing up will shrink the window’s height. - # Pressing down will grow the window’s height. - # bindsym j resize shrink width 10 px or 10 ppt - # bindsym k resize grow height 10 px or 10 ppt - # bindsym l resize shrink height 10 px or 10 ppt - # bindsym m resize grow width 10 px or 10 ppt - - # same bindings, but for the arrow keys bindsym Left resize shrink width 10 px or 10 ppt bindsym Down resize grow height 10 px or 10 ppt bindsym Up resize shrink height 10 px or 10 ppt bindsym Right resize grow width 10 px or 10 ppt - # back to normal: Enter or Escape or $mod+r bindsym Return mode "default" bindsym Escape mode "default" bindsym $mod+r mode "default" @@ -194,41 +130,7 @@ mode "resize" { bindsym $mod+r mode "resize" -# Start i3bar to display a workspace bar (plus the system information i3status -# finds out, if available) -# bar { -# status_command /home/alice/.config/polybar/start.sh -# } -# exec --no-startup-id tint2 - -# custom -exec_always --no-startup-id /home/alice/.config/i3/autostart.sh -exec_always --no-startup-id /home/alice/.config/polybar/start.sh -exec_always --no-startup-id picom -# exec_always --no-startup-id eww open frame -# exec_alwaysé --no-startup-id betterlockscreen -u /home/alice/.config/betterlockscreen -u /home/alice/wallpaper/ -l dimb - -bindsym $mod+Shift+l exec --no-startup-id i3lock -c 000000 - -bindsym $mod+Return exec alacritty - -bindsym $mod+Tab exec rofi -show combi -show-icons - -bindsym $mod+p move workspace to output left - -# bindsym $mod+m exec autorandr right_h -# bindsym $mod+Shift+m exec autorandr right_v -# bindsym $mod+k exec autorandr left_h -# bindsym $mod+Shift+k exec autorandr left_v -# bindsym $mod+l exec autorandr laptop -# bindsym $mod+o exec autorandr duplicate - -## Screenshots -# bindsym Print exec --no-startup-id maim "/home/$USER/Pictures/$(date)" -# bindsym $mod+Print exec --no-startup-id maim --window $(xdotool getactivewindow) "/home/$USER/Pictures/$(date)" -# bindsym Shift+Print exec --no-startup-id maim --select "/home/$USER/Pictures/$(date)" - -## Clipboard Screenshots -# bindsym Ctrl+Print exec --no-startup-id maim | xclip -selection clipboard -t image/png -# bindsym Ctrl+$mod+Print exec --no-startup-id maim --window $(xdotool getactivewindow) | xclip -selection clipboard -t image/png +############################ +# Screenshots +############################ bindsym $mod+Shift+Print exec --no-startup-id maim --select | xclip -selection clipboard -t image/png \ No newline at end of file diff --git a/dotconfig/picom/picom.conf b/dotconfig/picom/picom.conf deleted file mode 100644 index 5d107e6..0000000 --- a/dotconfig/picom/picom.conf +++ /dev/null @@ -1,40 +0,0 @@ -# Picom configuration file - -# Backend -backend = "glx"; -vsync = true; -use-damage = true; - -# Shadows -shadow = true; -shadow-radius = 10; -shadow-offset-x = -5; -shadow-offset-y = -5; -shadow-opacity = 0.8; - -# Opacity -frame-opacity = 1.0; - -# Fading -fading = true; -fade-in-step = 0.03; -fade-out-step = 0.03; -fade-delta = 10; - -corner-radius = 20; - -# regles par application -rules: ({ - match = "class_g = 'Alacritty'"; - opacity = 0.8; -}, { - match = "class_g = 'i3-frame'"; - corner-radius = 0; -} , { - match = "class_g = 'Polybar'"; - corner-radius = 0; -} , { - match = "class_g = 'Eww'"; - corner-radius = 0; -} -); \ No newline at end of file diff --git a/dotconfig/polybar/config.ini.model b/dotconfig/polybar/config.ini.model index a6747aa..2775980 100644 --- a/dotconfig/polybar/config.ini.model +++ b/dotconfig/polybar/config.ini.model @@ -69,7 +69,7 @@ offset-y = 40 background = ${color.background} modules-left = net-wireless modules-center = fs-system -modules-right = volume +modules-right = defaultaudio volume radius-top = 0 ; ========================= @@ -218,10 +218,16 @@ format-muted = label-muted = VOL mute label-muted-foreground = ${color.foreground-dim} +[module/defaultaudio] +type = custom/script +exec = wpctl inspect @DEFAULT_AUDIO_SINK@ 2>/dev/null | awk -F'"' '/^[[:space:]]*device\.api = "bluez5"/ { bt=1 } /^[[:space:]]*media\.name = "/ { name=$2 } END { print (bt && name) ? name : "local" }' +interval = 3 +label = %output% + [module/tray] type = internal/tray format-margin = 2 -tray-spacing = 0 +tray-spacing = 2 [module/ping-amaury] type = custom/script diff --git a/flake.lock b/flake.lock index bf0be7c..160a601 100644 --- a/flake.lock +++ b/flake.lock @@ -65,11 +65,11 @@ ] }, "locked": { - "lastModified": 1775104157, - "narHash": "sha256-rm/7k0D2J9SP30pyZ2C1HqarDncZDN6KAUI0gzgg4TA=", + "lastModified": 1775622785, + "narHash": "sha256-/yFxO+7oS1SymDfJ2iVO7K5vJKcYfe9XGIJ+quLqz0Q=", "owner": "nix-community", "repo": "home-manager", - "rev": "41e6e2ab37763c09db4e639033392cf40900440a", + "rev": "527e47b78fe67213072f706bf933a9705a8c4974", "type": "github" }, "original": { @@ -102,11 +102,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1775036866, - "narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=", + "lastModified": 1775423009, + "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6201e203d09599479a3b3450ed24fa81537ebc4e", + "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9", "type": "github" }, "original": { @@ -141,11 +141,11 @@ "poetry2nix": "poetry2nix" }, "locked": { - "lastModified": 1774890105, - "narHash": "sha256-nrbMvz/M3Yidq9oag9A4E2yctUn+S07GN2zf1JLsRA0=", + "lastModified": 1775547505, + "narHash": "sha256-DqQN57mJqoFSfgvC/VY+x2nLGN3gpAPZuQ4EqCuiPP0=", "owner": "FirelightFlagboy", "repo": "parsec-cloud-nix", - "rev": "7f1f18378e63ad82d138c756a75e721d08d9a6a2", + "rev": "ccd1531532d2aeaed550d973719ac3272ca3439b", "type": "github" }, "original": { @@ -213,11 +213,11 @@ ] }, "locked": { - "lastModified": 1774910634, - "narHash": "sha256-B+rZDPyktGEjOMt8PcHKYmgmKoF+GaNAFJhguktXAo0=", + "lastModified": 1775619836, + "narHash": "sha256-VcC/+MMMldwQKcST2y/QTndGLusSxjeUvYwFwzZKKko=", "owner": "Mic92", "repo": "sops-nix", - "rev": "19bf3d8678fbbfbc173beaa0b5b37d37938db301", + "rev": "de5f2d596eb896a5728afcd15f823f59cb9ecfdb", "type": "github" }, "original": { @@ -298,11 +298,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1774885989, - "narHash": "sha256-BhBjT/jts56x+6GArrYHhGzg4TM7et+wAKknvJvGfK0=", + "lastModified": 1775591480, + "narHash": "sha256-kgyMN5eOJwsOxnSszJ9709vKvp7vvSQ/t1AI8mJ11Sk=", "owner": "netbrain", "repo": "zwift", - "rev": "2ed245f8f481e60709f9aa719e246ab5d61facd2", + "rev": "f425356bdef3b5d0625dec6d860b23dc1efdef17", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 1eba1f7..3d4eac5 100644 --- a/flake.nix +++ b/flake.nix @@ -29,13 +29,16 @@ }: let customConfig = import ./config.nix; in - flake-utils.lib.eachDefaultSystem (system: let - pkgs = import nixpkgs { - inherit system; - config.allowUnfree = true; - }; - in { - }) + flake-utils.lib.eachDefaultSystem ( + system: let + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; + }; + in { + devShells = import ./devshells.nix {inherit pkgs;}; + } + ) // { nixosConfigurations.laptop = nixpkgs.lib.nixosSystem { modules = [ @@ -43,16 +46,11 @@ home-manager.nixosModules.home-manager zwift.nixosModules.zwift ./configuration.nix - ({ - pkgs, - lib, - ... - }: { - }) ]; specialArgs = { inherit customConfig; + inherit self; parsec-cloud-nix = parsec-cloud-nix; }; }; @@ -64,6 +62,7 @@ specialArgs = { inherit customConfig; + inherit self; parsec-cloud-nix = parsec-cloud-nix; }; }; diff --git a/hosts/laptop/configuration.nix b/hosts/laptop/configuration.nix index e3f93c2..cc1e654 100644 --- a/hosts/laptop/configuration.nix +++ b/hosts/laptop/configuration.nix @@ -4,7 +4,6 @@ { config, lib, - pkgs, modulesPath, ... }: { diff --git a/hosts/vmgaming/configuration.nix b/hosts/vmgaming/configuration.nix index b7eb3bc..3c9f896 100644 --- a/hosts/vmgaming/configuration.nix +++ b/hosts/vmgaming/configuration.nix @@ -3,13 +3,8 @@ { config, lib, - modulesPath, ... }: { - imports = [ - (modulesPath + "/profiles/qemu-guest.nix") - ]; - boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sr_mod"]; boot.initrd.kernelModules = []; boot.kernelModules = []; @@ -36,7 +31,6 @@ swapDevices = []; networking.useDHCP = lib.mkDefault true; - services.qemuGuest.enable = true; hardware.xone.enable = true; diff --git a/hosts/vmgaming/default.nix b/hosts/vmgaming/default.nix new file mode 100644 index 0000000..9922156 --- /dev/null +++ b/hosts/vmgaming/default.nix @@ -0,0 +1,7 @@ +{...}: { + imports = [ + ./configuration.nix + ./proxmox.nix + ./nvidia.nix + ]; +} diff --git a/hosts/vmgaming/nvidia.nix b/hosts/vmgaming/nvidia.nix new file mode 100644 index 0000000..d369570 --- /dev/null +++ b/hosts/vmgaming/nvidia.nix @@ -0,0 +1,14 @@ +{config, ...}: { + services.xserver.videoDrivers = ["nvidia"]; + + hardware.graphics = { + enable = true; + }; + + hardware.nvidia = { + modesetting.enable = true; + open = false; + package = config.boot.kernelPackages.nvidiaPackages.stable; + nvidiaSettings = true; + }; +} diff --git a/hosts/vmgaming/proxmox.nix b/hosts/vmgaming/proxmox.nix new file mode 100644 index 0000000..6ef894c --- /dev/null +++ b/hosts/vmgaming/proxmox.nix @@ -0,0 +1,16 @@ +{modulesPath, ...}: { + imports = [ + (modulesPath + "/profiles/qemu-guest.nix") + ]; + + services.qemuGuest.enable = true; + + boot.loader.grub = { + enable = true; + efiSupport = true; + efiInstallAsRemovable = true; + devices = ["nodev"]; + }; + + boot.loader.efi.canTouchEfiVariables = false; +} diff --git a/modules/nixos/base.nix b/modules/common/base.nix similarity index 92% rename from modules/nixos/base.nix rename to modules/common/base.nix index 31ac57b..35f86ae 100644 --- a/modules/nixos/base.nix +++ b/modules/common/base.nix @@ -5,6 +5,7 @@ { pkgs, customConfig, + self, ... }: { nix.settings = { @@ -18,11 +19,13 @@ ]; }; + nix.registry.tex.flake = self; + programs.nh = { enable = true; clean.enable = true; clean.extraArgs = "--keep-since 4d --keep 3"; - flake = builtins.toString customConfig.configFlakePath; + flake = toString customConfig.configFlakePath; }; nixpkgs.config.allowUnfree = true; @@ -48,6 +51,8 @@ unzip scream + nixd + alejandra ]; fonts.packages = with pkgs; [ diff --git a/modules/nixos/desktop-i3.nix b/modules/common/desktop-i3.nix similarity index 76% rename from modules/nixos/desktop-i3.nix rename to modules/common/desktop-i3.nix index 0fe19fd..4a30d76 100644 --- a/modules/nixos/desktop-i3.nix +++ b/modules/common/desktop-i3.nix @@ -9,23 +9,70 @@ feh --bg-fill --no-xinerama Downloads/fire1.png ''; in { - services.xserver.enable = true; - services.xserver.windowManager.i3.enable = true; - services.xserver.autorun = true; + services.xserver = { + enable = true; + windowManager.i3.enable = true; + autorun = true; + }; + + services.displayManager.defaultSession = "none+i3"; + + programs.i3lock.enable = true; + programs.xss-lock = { + enable = true; + lockerCommand = "${pkgs.i3lock}/bin/i3lock --nofork -c 000000"; + extraOptions = ["--transfer-sleep-lock"]; + }; + + services.logind.settings.Login = { + IdleAction = "suspend"; + IdleActionSec = "15min"; + + HandleLidSwitch = "suspend"; + }; + + services.picom = { + enable = true; + + backend = "glx"; + vSync = true; + + shadow = true; + shadowOpacity = 0.8; + shadowOffsets = [(-5) (-5)]; + + fade = true; + fadeDelta = 10; + fadeSteps = [0.03 0.03]; + + opacityRules = [ + "80:class_g = 'Alacritty'" + ]; + + settings = { + use-damage = true; + + shadow-radius = 10; + + frame-opacity = 1.0; + corner-radius = 20; + + rounded-corners-exclude = [ + "class_g = 'i3-frame'" + "class_g = 'Polybar'" + ]; + }; + }; environment.systemPackages = with pkgs; [ alacritty - tint2 - awesome maim xclip dunst - xss-lock dex rofi polybarFull oh-my-posh - picom playerctl zscroll feh diff --git a/modules/nixos/net.nix b/modules/common/net.nix similarity index 98% rename from modules/nixos/net.nix rename to modules/common/net.nix index 6c5c28e..ad0540d 100644 --- a/modules/nixos/net.nix +++ b/modules/common/net.nix @@ -20,8 +20,6 @@ minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3' refresh_delay = 72 ''; - - userHome = "/home/${customConfig.username}"; in { networking.nftables.enable = true; networking.firewall = { diff --git a/modules/common/obs.nix b/modules/common/obs.nix new file mode 100644 index 0000000..bff7250 --- /dev/null +++ b/modules/common/obs.nix @@ -0,0 +1,11 @@ +{pkgs, ...}: { + programs.obs-studio = { + enable = true; + + enableVirtualCamera = true; + + plugins = with pkgs.obs-studio-plugins; [ + obs-pipewire-audio-capture + ]; + }; +} diff --git a/modules/nixos/parsec.nix b/modules/common/parsec.nix similarity index 100% rename from modules/nixos/parsec.nix rename to modules/common/parsec.nix diff --git a/modules/laptop/users.nix b/modules/common/users.nix similarity index 98% rename from modules/laptop/users.nix rename to modules/common/users.nix index d02abf7..f1bbc5f 100644 --- a/modules/laptop/users.nix +++ b/modules/common/users.nix @@ -31,8 +31,6 @@ tcpdump pandoc libsecret - nixd - alejandra # Communication slack @@ -49,6 +47,7 @@ prismlauncher # Minecraft launcher # widelands # Strategy game wasistlos # Game + signal-desktop moonlight-qt # Game streaming # System & Cloud diff --git a/modules/nixos/yubikey.nix b/modules/common/yubikey.nix similarity index 97% rename from modules/nixos/yubikey.nix rename to modules/common/yubikey.nix index 046b22a..f8dfd18 100644 --- a/modules/nixos/yubikey.nix +++ b/modules/common/yubikey.nix @@ -1,5 +1,6 @@ # Module: YubiKey Authentication # Description: Enables YubiKey-based PAM auth for login and sudo across systems +# TODO {pkgs, ...}: { security.pam.services = { login.u2fAuth = true; diff --git a/modules/nixos/wireless-networks.nix b/modules/nixos/wireless-networks.nix deleted file mode 100644 index 505505e..0000000 --- a/modules/nixos/wireless-networks.nix +++ /dev/null @@ -1,18 +0,0 @@ -# Module: Wireless Networks Configuration (Encrypted) -# Description: WiFi networks configuration fully encrypted with sops-nix -# Security: Network names, SSIDs, and all configuration stored in encrypted secrets -# Files: ~/.config/secrets/wifi-networks.yaml (encrypted with sops) -# Note: The actual networks are loaded at runtime from the encrypted file -{ - config, - lib, - pkgs, - ... -}: { - # WiFi networks are loaded from encrypted file at runtime - # The file is in wpa_supplicant.conf format and gets included by wpa_supplicant - # This approach keeps network names and configuration completely private - - # Note: If wifi-networks secret doesn't exist yet, this won't cause errors - # You can still use the old method (networking.wireless.networks in Nix) if needed -} diff --git a/secrets/wifi-networks.yaml b/secrets/wifi-networks.yaml index 4d52f7a..baa6440 100644 --- a/secrets/wifi-networks.yaml +++ b/secrets/wifi-networks.yaml @@ -1,4 +1,4 @@ -wifi-networks: ENC[AES256_GCM,data:jcHmQ+iXRW4+OeZlvMJsn7oz5Fn18BtflKwVO3eHFwAESGvXI1OZGdrO0KyH+JMftRQKgQsGsdsLtxCWQgvVUpisgsyw7EV2XnMVMARWFnVfRxX7MOIszhzJGOsrfLxWbaJ08kGYIkSoamKjQCfltdXnafHF74lZbWVI6iU2KyiRgUB9jUxo1spfeHBWRFH57fa9bWHELg/5Wn7B0AAvgdc/foArEGfbkCUdBWCrm2iR2guw/zeCkufcQdw4erhBIOSX2F48rHPcAwZKZrruut5VGqDBHpHf4++OTieA8lSd+s9LL6MecziieGL2LGEhQ9v0fdmwlvGFp6ADOJJwpwAiv0ApxLvm7dVEXbz3AN6mEhy4P2YjhiWsafOt2yBL2Dskm332ctXvGI8GR2o1d8kh/Dqf6KK/hFVdkV49HH2jr8tgive6pBAc9mPEvPfRopwOkk1cbeP9OL/WUBIAkWVMJcpSZla0TIWZidamnH46uBSX8PdsL3RKBnsTf/cC3QZnyLAWWS5pSZ3UVb5vfBZEyooDZNFfpRLAKoisGmZYOPQKGljrx0ijDz63kGgvE26OWEbgDiEgTXvLFVd2mf4czNDDo4QVdA26G/xb85ub5mEZNJLv/o24AMWeQcqivxMn4rdwjjBwypuqILjA/8qx+CKH1u9vCmsVCf6Rl+Sp9awzsulcxDS6Irs1Hu4loVDnzLo1JE7x8GU4CdiyQS/8huTvrpvWkB0aQJo0QoPh7mixP7R3fDIMUf+sB4mwl8bC2Km2ZCKl80b1SstsXOldnvK4KdXyo09LSUPJzeWE8r/qEegfTptuwLuuyUx+IPqB4qdd1cRCYSOkzJ6LGRFeqOzzOPjpucvVQeNzz8y5vskBWDgTj8+3XQ==,iv:gSu1E7qVgwEcc/k1WL49pMRHIiNRfKGS70srW1JWfqI=,tag:lW1TTxSiBv7EDTHDSNztig==,type:str] +wifi-networks: ENC[AES256_GCM,data:ttpUrmiypU54BtQb4eSopI5iLt5OFS3v+WPWD9NiyQGbLcV9ABOr4CbGAbUOZqBAZgBJj4Byh6mdx5rNUiSk3pefJyJsXDEttGeFV+acOaw6fmyL8iFWV/lw5fQgzvWlM1rDJLq9WFwVMaNXrL+j8Gpgv/afOQbTa9WiBRh7pEjpAtR6wgRrGrT4Qby9xeoJYIVummilpP9ktAkXVQ7LtvFi2Xow02MFjzq9X9Yy+HjWE4MUDGTMkD1fAOTUq0UBwD2CoFGFceBLEFH7pwJt0PRJEMEtcsolV4nh1KyvHcCkiTR4C/jaC1ZFLbJdsAYf57paqASnRzJDiaR3EwpHlShTvvYSH0sMRZwaxNPJsP7CoYOfojIbVTUoc2bQWz6f4vow5RQRkMlIZ85ZUF46X3HOc3YdaDEFEeLvybgAbhF4X+LwjANc4iEy1SvU/oX/57U+L/urwtPgXIZvX3MDAM4VOotzK6WOUDVokTie24AZuIeSLrEvUJaurqSvzVc+qIvnt6Oigz7l7pNRnJ1auNUnaooAQdM1gwcFg/6sd6JwMgLN/aGd+bNcAohtPb+YlNdPmlZSvZIsTOSbzd1ouBg/CQSdo4GrtREymcaKI9pAQ55NOJqXQuB1LETBflENf2OiKRt555M2z38Zk0nXrhbldI1jMcxvGy/jKweJlpOqvheLIWKyT08P63tQ/UHIO7DxOL4DMlvNZi+pUG9I0XkiBeWi2J4EJwwP8gYAVjw2SxkJIbz1pzYFcLJfJnowbxpBcaHElDYRC87XfTT7LJapCkK6umDQyBjYInYyYyoJBcOaWJFEKpdA00pIsxNAwVY3D2bbqu5wNJ22KgVVAK8kRrkYha12kJt278BokZFKT910ZVZFEtb6uTycztEsvuHnUTbm8ujk19LwgUD9VYkoDb5JA7OMXF/Xo1DmSMbJkma/ghYQyhcsQt8fwXItTTFnnT6PGsj1,iv:J77cp8CzWyvfKTylOksLqlf7/HyqVjiZ8dQmVc10sqc=,tag:eqE7D/l4Pu1IKDovzNz2fw==,type:str] sops: age: - recipient: age1hhyew9sv8lqqfeza92jkxsdudhsgaef66cxalp06ez2cm9k6aqysc7mlf7 @@ -10,7 +10,7 @@ sops: NENiek9YeUhXNFhuZkZzRnBIYXdGY2cKpfSlzP7uK6VFl71OYfoHBxAwrKfpJSNT QQUngSh6VBrWeJIxoMkJ7O+xSgwZnWc0fnrB+OpoRqy5YVctSmHERg== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-03-21T09:20:19Z" - mac: ENC[AES256_GCM,data:20EScEe1X57+zwxObnNTgnG57acwJGLVjXOlN9rbh1Wq0F5Ve6Z4zmiv9AFz3GBOfE2n1T9Q9GcVV5T8PNreaM8tFATBdCihTebxESq0DPhcinReaMMftH+p/785z5zCCYvBR2QV+vmt24pcOH+h8H6X2LnjL3yo1uYx4PafFDE=,iv:xJ29oD17LqXX8KDStKl0SsTASi/7TrDX8f7pAsapWbI=,tag:S/zXh5d4TLfIH7J33ej4cA==,type:str] + lastmodified: "2026-04-06T08:15:15Z" + mac: ENC[AES256_GCM,data:Y9rEWXkTcDaoBtWhQ6RepnaaPUZujA6oeHhG/YdvhLLo0Nq3Or6F59YXaArwmTcOxjJzUP0eaUphZYuinVZKomMkxeFfm6ms4Tg6VHDzCxpmrwJgvWCjmmy69jrFm75l6D/Q1WeGqijsxuOCitYjgpfIDnfwomx1RPWTWNrs77M=,iv:gBspVAUPd8AexuAqKeMcuMDA9HVTXKkl87wntGUOtz0=,tag:B3yFoxu+Qs84bJQDJ6brKQ==,type:str] unencrypted_suffix: _unencrypted - version: 3.12.1 + version: 3.12.2