Compare commits

...

8 Commits

Author SHA1 Message Date
cc938db477 use hyprlock as lockscreen 2026-03-14 22:06:39 +01:00
b372f990c3 hm update 2026-03-14 16:53:49 +01:00
5c02123317 os update 2026-03-14 16:42:09 +01:00
fd8cb9c0c8 use plymouth for boot screen 2026-03-14 16:33:42 +01:00
e58d5a7a18 refactor into modules 2026-03-10 23:22:08 +01:00
1b9d24ce15 refactor into modules 2026-03-10 22:39:50 +01:00
5f16717f9b hm update 2026-03-10 11:59:39 +01:00
f5ad771953 os update 2026-03-10 11:56:27 +01:00
49 changed files with 817 additions and 731 deletions

1
.gitignore vendored
View File

@@ -22,7 +22,6 @@ gqrx/
gtk-*.0/
htop/
inkscape/
hypr/
lazygit/
libreoffice/
libvirt/

View File

@@ -1 +1 @@
/nix/store/fx1yq3cxgk9bq588csvpl56i4030c6fj-home-manager-files/.config/Kvantum/Base16Kvantum
/nix/store/p19lx2ymg13qw3abnkc5x1v3hj8r6zix-home-manager-files/.config/Kvantum/Base16Kvantum

View File

@@ -1 +1 @@
/nix/store/fx1yq3cxgk9bq588csvpl56i4030c6fj-home-manager-files/.config/Kvantum/kvantum.kvconfig
/nix/store/p19lx2ymg13qw3abnkc5x1v3hj8r6zix-home-manager-files/.config/Kvantum/kvantum.kvconfig

View File

@@ -1 +1 @@
/nix/store/fx1yq3cxgk9bq588csvpl56i4030c6fj-home-manager-files/.config/autostart/stylix-activate-gnome.desktop
/nix/store/p19lx2ymg13qw3abnkc5x1v3hj8r6zix-home-manager-files/.config/autostart/stylix-activate-gnome.desktop

View File

@@ -1 +1 @@
/nix/store/fx1yq3cxgk9bq588csvpl56i4030c6fj-home-manager-files/.config/autostart/stylix-activate-kde.desktop
/nix/store/p19lx2ymg13qw3abnkc5x1v3hj8r6zix-home-manager-files/.config/autostart/stylix-activate-kde.desktop

View File

@@ -97,11 +97,11 @@
]
},
"locked": {
"lastModified": 1772983984,
"narHash": "sha256-IcpFi8DLx0NvVuiDT2vsPH4b78QH9mNDtGofBW1pUDo=",
"lastModified": 1773451839,
"narHash": "sha256-a7yGiEC2Nh4z7b5aR9sTPDnFOt7ykYQ3yU/MEdhKUWA=",
"owner": "sadjow",
"repo": "claude-code-nix",
"rev": "acc49fb45863d92670817d184b2e2aed8e8c9fd1",
"rev": "e64e47c888e3eb19d8c58c91046310582634271c",
"type": "github"
},
"original": {
@@ -118,11 +118,11 @@
]
},
"locked": {
"lastModified": 1773004139,
"narHash": "sha256-K1wp5XjvUiSa4nwdavMaudCCLbr/4eZOKteF1Md4fM0=",
"lastModified": 1773189244,
"narHash": "sha256-ctI2WntyGzjz7tCcGcG+l+ryV6fJsDvAySPtJH7ia+4=",
"owner": "sadjow",
"repo": "codex-cli-nix",
"rev": "66895d1bf70a994e66eb5fdc48b2810ef75a1bd2",
"rev": "60da592dbbfceec9adb8b84ea49e88b6663976ae",
"type": "github"
},
"original": {
@@ -264,11 +264,11 @@
]
},
"locked": {
"lastModified": 1772985285,
"narHash": "sha256-wEEmvfqJcl9J0wyMgMrj1TixOgInBW/6tLPhWGoZE3s=",
"lastModified": 1773422513,
"narHash": "sha256-MPjR48roW7CUMU6lu0+qQGqj92Kuh3paIulMWFZy+NQ=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5be5d8245cbc7bc0c09fbb5f38f23f223c543f85",
"rev": "ef12a9a2b0f77c8fa3dda1e7e494fca668909056",
"type": "github"
},
"original": {
@@ -285,11 +285,11 @@
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1772873838,
"narHash": "sha256-pFh7J2fBqsZvZrD26zfOj30qTM8+7PLZsNSLX+VOcUA=",
"lastModified": 1773171230,
"narHash": "sha256-ZiGGjRL2H67GcL6BvZV99khW++aHpJ2NA4n71qZiJ9A=",
"owner": "niri-wm",
"repo": "niri",
"rev": "5393902dd22e9d540438ee178775f1e488eea724",
"rev": "4a7e443b6c816e4f673f6e25cc0a5aa37697d667",
"type": "github"
},
"original": {
@@ -301,11 +301,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1772773019,
"narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=",
"lastModified": 1773389992,
"narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "aca4d95fce4914b3892661bcb80b8087293536c6",
"rev": "c06b4ae3d6599a672a6210b7021d699c351eebda",
"type": "github"
},
"original": {
@@ -339,11 +339,11 @@
"noctalia-qs": "noctalia-qs"
},
"locked": {
"lastModified": 1773058465,
"narHash": "sha256-i4fKQGI3z86KzYbx1ZThAAMhJsmYT40yJC5xvhmKyQA=",
"lastModified": 1773498808,
"narHash": "sha256-YnSRPOQC+fwSE3aA2C1rt9zaI4i3S4LTYY/3fqmRM4s=",
"owner": "noctalia-dev",
"repo": "noctalia-shell",
"rev": "9536553dc5a6df38470b2a178d88f2c44a69cd2a",
"rev": "793771cd770431443d71e30ceede201048435a04",
"type": "github"
},
"original": {
@@ -357,14 +357,15 @@
"nixpkgs": [
"noctalia",
"nixpkgs"
]
],
"systems": "systems_4"
},
"locked": {
"lastModified": 1772673824,
"narHash": "sha256-TLHXPoELZA6VeuzC1Zpx+MnSsYzrJs+DSieMgfjAOJc=",
"lastModified": 1773175685,
"narHash": "sha256-YOkWzVq7opym1ovJvSCvqpG6OCDGJwPo/EPeRxcGay4=",
"owner": "noctalia-dev",
"repo": "noctalia-qs",
"rev": "f8531192cd09b9ea2e78d18e9cfc9d3dba498690",
"rev": "6b9eceefde3d47ca83c544b54bcdd358be4cbd2f",
"type": "github"
},
"original": {
@@ -405,11 +406,11 @@
]
},
"locked": {
"lastModified": 1772925576,
"narHash": "sha256-mMoiXABDtkSJxCYDrkhJ/TrrJf5M46oUfIlJvv2gkZ0=",
"lastModified": 1773480707,
"narHash": "sha256-VkuO1LWpK7tS/YDmxJSDeONEwt1RFLPfOucQJwKnsV0=",
"owner": "outfoxxed",
"repo": "quickshell",
"rev": "15a84097653593dd15fad59a56befc2b7bdc270d",
"rev": "1b2519d9f3d963e575b8a1ef08fab47c7af0d1b3",
"type": "github"
},
"original": {
@@ -461,11 +462,11 @@
]
},
"locked": {
"lastModified": 1773025773,
"narHash": "sha256-Wik8+xApNfldpUFjPmJkPdg0RrvUPSWGIZis+A/0N1w=",
"lastModified": 1773457417,
"narHash": "sha256-waABTSxPdbxml4BhcabHhyQF02Qnj27qRU4ard0mTQo=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "3c06fdbbd36ff60386a1e590ee0cd52dcd1892bf",
"rev": "055977c30249484010750e03074c744dcdaa0d23",
"type": "github"
},
"original": {
@@ -487,7 +488,7 @@
"nixpkgs"
],
"nur": "nur",
"systems": "systems_4",
"systems": "systems_5",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
@@ -554,6 +555,21 @@
}
},
"systems_4": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",

View File

@@ -51,31 +51,16 @@
};
};
outputs = { nixpkgs, nixpkgs-pre-ad01, home-manager, rust-overlay, stylix, niri, codex-cli-nix, claude-code-nix, binaryninja, ... }@inputs:
let
system = "x86_64-linux";
pinnedPkgs = nixpkgs-pre-ad01.legacyPackages.${system};
in {
homeConfigurations.lusia = home-manager.lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.${system};
outputs = inputs: {
homeConfigurations.lusia = inputs.home-manager.lib.homeManagerConfiguration {
pkgs = inputs.nixpkgs.legacyPackages.x86_64-linux;
modules = [
stylix.homeModules.stylix
./noctalia.nix
./home.nix
({ pkgs, ... }: {
nixpkgs.overlays = [
rust-overlay.overlays.default
(final: prev: {
gqrx = pinnedPkgs.gqrx;
krita = pinnedPkgs.krita;
})
];
home.packages = [ pkgs.rustup ];
})
];
modules = [
inputs.stylix.homeModules.stylix
./home.nix
];
extraSpecialArgs = { inherit inputs; };
};
extraSpecialArgs = { inherit inputs; };
};
};
}

View File

@@ -1,255 +1,18 @@
{ config, pkgs, inputs, ... }:
{ ... }:
{
imports = [
./modules/overlays.nix
./modules/packages.nix
./modules/theming.nix
./modules/programs/git.nix
./modules/programs/gpg-agent.nix
./modules/programs/obs-studio.nix
];
home.username = "lusia";
home.homeDirectory = "/home/lusia";
home.stateVersion = "24.11";
nixpkgs.config.allowUnfree = true;
home.packages = with pkgs; [
# Window manager & desktop environment
inputs.niri.packages.${pkgs.stdenv.hostPlatform.system}.niri
swayidle
swww
kanshi
# System utilities & monitoring
btop
htop
fastfetch
dua
nh
dconf
gparted
mission-center
gnome-software
# CLI tools & utilities
ripgrep
fd
jq
entr
mdcat
sshpass
exiftool
# File managers & compression tools
yazi
nautilus
file-roller
p7zip
unzip
zip
unrar
# Media viewers & players
loupe
evince
vlc
mpv
zathura
# SDR
gqrx
gnuradio
gnuradioPackages.lora_sdr
# Media creation & editing
gimp
blender
ffmpeg
yt-dlp
waifu2x-converter-cpp
libheif
upscayl
inkscape
# Office & productivity
libreoffice-fresh
gnome-text-editor
gnome-calculator
obsidian
simple-scan
system-config-printer
# Development tools
neovim
vscode.fhs
lazygit
cargo-cross
cargo-generate
probe-rs-tools
elf2uf2-rs
dbeaver-bin
gnome-boxes
cutecom
inputs.binaryninja.packages.${pkgs.stdenv.hostPlatform.system}.binary-ninja-free-wayland
# AI development tools
inputs.claude-code-nix.packages.${pkgs.stdenv.hostPlatform.system}.default
inputs.codex-cli-nix.packages.${pkgs.stdenv.hostPlatform.system}.default
gemini-cli
# Internet & networking
firefox-bin
filezilla
qbittorrent
tor-browser
nmap
gnome-network-displays
# Privacy & security
gnupg
pinentry-qt
kdePackages.kleopatra
monero-gui
# Python & AI
python314
openai-whisper
# Document processing
tectonic
mermaid-cli
# Theming
pywal
pywalfox-native
morewaita-icon-theme
# Astronomy
stellarium
kstars
# Wrap PrismLauncher to fix Minecraft GLFW Wayland issues
(pkgs.symlinkJoin {
name = "prismlauncher";
paths = [ pkgs.prismlauncher ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/prismlauncher \
--set SDL_VIDEODRIVER "x11"
'';
})
# Wrap Krita to work with XWayland (Krita doesn't support native Wayland)
(pkgs.symlinkJoin {
name = "krita";
paths = [ pkgs.krita ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/krita \
--set DISPLAY ":0" \
--set QT_AUTO_SCREEN_SCALE_FACTOR "0" \
--set QT_SCALE_FACTOR "2" \
--set QT_FONT_DPI "96"
'';
})
];
# Set dark mode and Nautilus preferences
dconf = {
enable = true;
settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
"org/gnome/nautilus/preferences" = {
show-image-thumbnails = "always";
};
};
};
# Set morewaita as the default icon theme
gtk = {
enable = true;
iconTheme = {
name = "MoreWaita";
package = pkgs.morewaita-icon-theme;
};
# Stylix manages theme, commenting out manual config
# theme = {
# name = "Adwaita-dark";
# package = pkgs.gnome-themes-extra;
# };
cursorTheme = {
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
};
# Force dark mode preference for GTK3
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = 1;
};
# Force dark mode preference for GTK4
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = 1;
};
};
home.pointerCursor = {
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
size = 24;
gtk.enable = true;
x11 = {
enable = true;
defaultCursor = "Adwaita";
};
};
# Enable and configure git
programs.git = {
enable = true;
settings = {
user.name = "Lukrecja Pleskaczyńska";
user.email = "lukrecjaaa@proton.me";
credential.helper = "store";
http."https://git.bgs.local:3000/" = {
sslCAInfo = "/home/lusia/VSTech-vpn/bgs-git-ca.crt";
};
};
};
# Configure GPG agent with pinentry
services.gpg-agent = {
enable = true;
pinentry.package = pkgs.pinentry-qt;
enableSshSupport = true;
};
# OBS with plugins
programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
obs-vaapi
];
};
programs.home-manager.enable = true;
# Stylix theming
stylix = {
enable = true;
# Wallpaper required by Stylix (even though we use swww to actually display it)
image = ./wallpaper;
# Use pywal's color scheme instead of extracting from image
# sync-colors.sh will generate colors.yaml here
base16Scheme = ./colors.yaml;
# Use dark mode
polarity = "dark";
targets.qt.enable = true;
};
}

View File

@@ -0,0 +1,18 @@
{ pkgs, inputs, ... }:
let
system = pkgs.stdenv.hostPlatform.system;
pinnedPkgs = inputs.nixpkgs-pre-ad01.legacyPackages.${system};
in {
nixpkgs.config.allowUnfree = true;
nixpkgs.overlays = [
inputs.rust-overlay.overlays.default
(final: prev: {
gqrx = pinnedPkgs.gqrx;
krita = pinnedPkgs.krita;
})
];
home.packages = [ pkgs.rustup ];
}

View File

@@ -0,0 +1,145 @@
{ pkgs, inputs, ... }:
let
system = pkgs.stdenv.hostPlatform.system;
in {
home.packages = with pkgs; [
# Window manager & desktop environment
inputs.niri.packages.${system}.niri
inputs.noctalia.packages.${system}.default
inputs.quickshell.packages.${system}.default
swayidle
swww
kanshi
hyprlock
# System utilities & monitoring
btop
htop
fastfetch
dua
nh
dconf
gparted
mission-center
gnome-software
# CLI tools & utilities
ripgrep
fd
jq
entr
mdcat
sshpass
exiftool
# File managers & compression tools
yazi
nautilus
file-roller
p7zip
unzip
zip
unrar
# Media viewers & players
loupe
evince
vlc
mpv
zathura
# SDR
gqrx
gnuradio
gnuradioPackages.lora_sdr
# Media creation & editing
gimp
blender
ffmpeg
yt-dlp
waifu2x-converter-cpp
libheif
upscayl
inkscape
# Office & productivity
libreoffice-fresh
gnome-text-editor
gnome-calculator
obsidian
simple-scan
system-config-printer
# Development tools
neovim
vscode.fhs
lazygit
cargo-cross
cargo-generate
probe-rs-tools
elf2uf2-rs
dbeaver-bin
gnome-boxes
cutecom
inputs.binaryninja.packages.${system}.binary-ninja-free-wayland
helix
# AI development tools
inputs.claude-code-nix.packages.${system}.default
inputs.codex-cli-nix.packages.${system}.default
gemini-cli
# Internet & networking
firefox-bin
filezilla
qbittorrent
tor-browser
nmap
gnome-network-displays
# Privacy & security
gnupg
pinentry-qt
kdePackages.kleopatra
monero-gui
# Python & AI
python314
openai-whisper
# Document processing
tectonic
mermaid-cli
# Astronomy
stellarium
kstars
# Wrap PrismLauncher to fix Minecraft GLFW Wayland issues
(pkgs.symlinkJoin {
name = "prismlauncher";
paths = [ pkgs.prismlauncher ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/prismlauncher \
--set SDL_VIDEODRIVER "x11"
'';
})
# Wrap Krita to work with XWayland (Krita doesn't support native Wayland)
(pkgs.symlinkJoin {
name = "krita";
paths = [ pkgs.krita ];
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/krita \
--set DISPLAY ":0" \
--set QT_AUTO_SCREEN_SCALE_FACTOR "0" \
--set QT_SCALE_FACTOR "2" \
--set QT_FONT_DPI "96"
'';
})
];
}

View File

@@ -0,0 +1,15 @@
{ ... }:
{
programs.git = {
enable = true;
settings = {
user.name = "Lukrecja Pleskaczyńska";
user.email = "lukrecjaaa@proton.me";
credential.helper = "store";
http."https://git.bgs.local:3000/" = {
sslCAInfo = "/home/lusia/VSTech-vpn/bgs-git-ca.crt";
};
};
};
}

View File

@@ -0,0 +1,9 @@
{ pkgs, ... }:
{
services.gpg-agent = {
enable = true;
pinentry.package = pkgs.pinentry-qt;
enableSshSupport = true;
};
}

View File

@@ -0,0 +1,13 @@
{ pkgs, ... }:
{
programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-backgroundremoval
obs-pipewire-audio-capture
obs-vaapi
];
};
}

View File

@@ -0,0 +1,62 @@
{ pkgs, ... }:
{
stylix = {
enable = true;
image = ../wallpaper;
base16Scheme = ../colors.yaml;
polarity = "dark";
targets.qt.enable = true;
};
dconf = {
enable = true;
settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
"org/gnome/nautilus/preferences" = {
show-image-thumbnails = "always";
};
};
};
gtk = {
enable = true;
iconTheme = {
name = "MoreWaita";
package = pkgs.morewaita-icon-theme;
};
cursorTheme = {
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
};
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = 1;
};
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = 1;
};
};
home.pointerCursor = {
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
size = 24;
gtk.enable = true;
x11 = {
enable = true;
defaultCursor = "Adwaita";
};
};
home.packages = with pkgs; [
pywal
pywalfox-native
morewaita-icon-theme
];
}

View File

@@ -1,18 +0,0 @@
{ pkgs, inputs, ... }:
{
# import the home manager module
#imports = [
# inputs.noctalia.homeModules.default
#];
# Install the package
home.packages = [
inputs.noctalia.packages.${pkgs.stdenv.hostPlatform.system}.default
inputs.quickshell.packages.${pkgs.stdenv.hostPlatform.system}.default
];
# configure options
#programs.noctalia-shell = {
# enable = true;
#};
}

73
hypr/hyprlock.conf Normal file
View File

@@ -0,0 +1,73 @@
$font = Monospace
general {
hide_cursor = false
}
animations {
enabled = true
bezier = linear, 1, 1, 0, 0
animation = fadeIn, 1, 5, linear
animation = fadeOut, 1, 5, linear
animation = inputFieldDots, 1, 2, linear
}
background {
monitor =
path = screenshot
blur_passes = 4
}
source = $HOME/.cache/wal/colors-hyprland.conf
input-field {
monitor =
size = 20%, 5%
outline_thickness = 3
inner_color = rgba(0, 0, 0, 0.0) # no fill
outer_color = $color1 $color2 45deg
check_color = $color3 $color4 120deg
fail_color = $color5 $color6 40deg
font_color = $color15
fade_on_empty = false
rounding = 32
font_family = $font
placeholder_text = unlock me :3
fail_text = wrong you fucking idiot >:3
dots_text_format = ❤
dots_size = 0.5
dots_spacing = 0.3
position = 0, -20
halign = center
valign = center
}
# TIME
label {
monitor =
text = $TIME
font_size = 90
font_family = $font
position = 0, 165
halign = center
valign = center
}
# DATE
label {
monitor =
text = cmd[update:60000] date +"%A, %d %B %Y"
font_size = 25
font_family = $font
position = 0, 75
halign = center
valign = center
}

View File

@@ -164,7 +164,7 @@ binds {
}
// Utility shortcuts
Mod+L {
spawn "noctalia-shell" "ipc" "call" "lockScreen" "lock"
spawn "hyprlock"
}
// Mod-Shift-/, which is usually the same as Mod-?,
// shows a list of important hotkeys.

View File

@@ -1,361 +1,53 @@
{ config, lib, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
imports = [
./hardware-configuration.nix
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.resumeDevice = "/dev/mapper/luksroot";
./modules/boot/bootloader.nix
./modules/boot/kernel.nix
./modules/boot/plymouth.nix
./modules/boot/tpm.nix
boot.extraModprobeConfig = ''
options mt7921_common disable_clc=1
options atkbd reset=1 softrepeat=1
options i8042 nomux=1 reset=1 nopnp=1 kbdreset=1 direct=1 dumbkbd=1
'';
./modules/desktop/fonts.nix
./modules/desktop/greetd.nix
./modules/desktop/xdg.nix
./modules/desktop/xwayland.nix
# Blacklist built-in RTL modules
boot.blacklistedKernelModules = [
"dvb_usb_rtl28xxu"
"rtl2832"
"rtl2830"
./modules/filesystems.nix
./modules/hardware/bluetooth.nix
./modules/hardware/gpu.nix
./modules/hardware/power.nix
./modules/hardware/rtl-sdr.nix
./modules/hardware/scanner.nix
./modules/hardware/tablet.nix
./modules/hardware/udev.nix
./modules/networking/general.nix
./modules/networking/tailscale.nix
./modules/networking/vpn.nix
./modules/packages.nix
./modules/services/flatpak.nix
./modules/services/printing.nix
./modules/services/smb.nix
./modules/services/ssh.nix
./modules/users.nix
./modules/virtualization.nix
./modules/wireshark.nix
];
# Kernel parameters for power saving
boot.kernelParams = [
# CRITICAL FIX: Disable ACPI for i8042 (ASUS BIOS bug workaround)
"i8042.noacpi" # Disable buggy ASUS ACPI keyboard controller
"i8042.reset=1" # Force reset i8042
"i8042.nomux=1" # No multiplexing
"i8042.nopnp=1" # Ignore PnP detection
"atkbd.softrepeat=1" # Software key repeat
"amd_pstate=active" # Use AMD P-State driver for better power management
"amd_pstate.shared_mem=1"
# "pcie_aspm.policy=powersupersave" # Aggressive PCIe power management
"amdgpu.gpu_recovery=1" # Enable automatic GPU recovery
"amdgpu.runpm=0" # Disable runtime PM (major hang cause)
###"amdgpu.dcdebugmask=0x400"
#"amdgpu.dcdebugmask=0x10" # Disable PSR (panel self-refresh)
#"amdgpu.ppfeaturemask=0xf7fff" # Disable GFXOFF
];
# Disable TPM
systemd.tpm2.enable = false;
boot.initrd.systemd.tpm2.enable = false;
# Enable swap file
swapDevices = [{ device = "/swap/swapfile"; }];
# Override btrfs mount options from hardware-configuration.nix
fileSystems."/" = {
options = [ "subvol=@" "compress=zstd" "space_cache=v2" "noatime"
"lazytime" "ssd" "discard=async" ];
};
fileSystems."/home" = {
options = [ "subvol=@home" "compress=zstd" "space_cache=v2" "noatime"
"lazytime" "ssd" "discard=async" ];
};
fileSystems."/var/log" = {
options = [ "subvol=@log" "compress=zstd" "space_cache=v2" "noatime"
"lazytime" "ssd" "discard=async" ];
};
fileSystems."/swap" = {
options = [ "subvol=@swap" "noatime" "ssd" "discard=async" ];
};
# Enable NetworkManager and set network host name
networking.networkmanager.enable = true;
networking.hostName = "lusia-laptop";
# NetworkManager power saving for WiFi
networking.networkmanager.wifi.powersave = true;
# Enable Tailscale
services.tailscale.enable = true;
# Trust the Tailscale interface
networking.firewall.trustedInterfaces = [ "tailscale0" ];
# Disable reverse path filtering for Tailscale, change kernel writeback options
boot.kernel.sysctl = {
"net.ipv4.conf.tailscale0.rp_filter" = 0;
"vm.dirty_ratio" = 10;
"vm.dirty_background_ratio" = 5;
"vm.swappiness" = 10;
};
# Enable resolved
services.resolved.enable = true;
# Set DNS
networking.nameservers = [ "9.9.9.9" ];
# OpenVPN services
# VSTech VPN (with DNS for bgs.local domain)
services.openvpn.servers.vstech = {
config = ''
client
remote 51.83.143.81
proto udp
port 649
dev tun
topology subnet
ca /home/lusia/VSTech-vpn/ca.crt
cert /home/lusia/VSTech-vpn/Klient251.crt
key /home/lusia/VSTech-vpn/Klient251.inline
tls-crypt /home/lusia/VSTech-vpn/ta.key
auth sha512
data-ciphers aes-256-cbc
data-ciphers-fallback aes-256-cbc
key-direction 1
keepalive 10 120
'';
updateResolvConf = false;
# Manually set DNS after connection
up = ''
${pkgs.systemd}/bin/resolvectl dns $dev 10.10.10.1
${pkgs.systemd}/bin/resolvectl domain $dev bgs.local
'';
down = ''
${pkgs.systemd}/bin/resolvectl revert $dev
'';
};
# CAT VPN
services.openvpn.servers.cat = {
config = ''
client
remote 79.133.193.211
proto tcp
port 1194
dev tun
topology subnet
ca /home/lusia/vpn/ca.crt
cert /home/lusia/vpn/client18.crt
key /home/lusia/vpn/client18.key
auth sha256
data-ciphers AES-256-CBC
key-direction 1
'';
updateResolvConf = true;
};
# Enable upower service
services.upower.enable = true;
# Set your time zone.
time.timeZone = "Europe/Warsaw";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
console = {
keyMap = "pl";
};
# Enable fish
programs.fish.enable = true;
# Enable greetd with tuigreet
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd niri-session";
user = "greeter";
};
};
};
# Essential for niri
security.polkit.enable = true;
services.gnome.gnome-keyring.enable = true;
# XDG Portal for file pickers or screen sharing
xdg.portal = {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-gnome ];
config = {
common = {
default = [ "gtk" ];
"org.freedesktop.impl.portal.ScreenCast" = [ "gnome" ];
"org.freedesktop.impl.portal.Screenshot" = [ "gnome" ];
};
};
};
# Enable dconf
programs.dconf.enable = true;
users.groups.plugdev = {};
users.users.lusia = {
isNormalUser = true;
description = "Lukrecja";
extraGroups = [ "wheel" "networkmanager" "docker" "plugdev" "scanner" "lp" "wireshark" "libvirtd" "kvm" "vboxusers" "dialout" ];
initialPassword = "pass";
shell = pkgs.fish;
};
# Import udev rules for probe-rs
services.udev.packages = [
(pkgs.writeTextFile {
name = "probe-rs-udev-rules";
destination = "/etc/udev/rules.d/69-probe-rs.rules";
text = builtins.readFile ./udev-rules/69-probe-rs.rules;
})
];
console.keyMap = "pl";
hardware.enableAllFirmware = true;
services.openssh.enable = true;
security.sudo.enable = true;
# Enable virtualisation
virtualisation.libvirtd.enable = true;
systemd.services.virt-secret-init-encryption.enable = false; # broken on NixOS, hardcodes /usr/bin/sh
# Enable VirtualBox
virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.host.enableExtensionPack = true;
# Enable xwayland
programs.xwayland.enable = true;
# Set a session variable for icon theme
environment.sessionVariables = rec {
QT_QPA_PLATFORMTHEME = "qt5ct";
};
environment.systemPackages = with pkgs; [
git
curl
wget
vim
fish
kitty
#asusctl
powertop # For monitoring power consumption
openvpn
nodejs
gnumake
gcc
cmake
xwayland-satellite
busybox
libdecor
file
cifs-utils
samba
gvfs
];
# Enable Wireshark with proper groups
programs.wireshark.enable = true;
programs.wireshark.package = pkgs.wireshark;
# Fonts
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-cjk-sans
noto-fonts-color-emoji
pkgs.nerd-fonts.fira-code
];
# For SMB shares
services.gvfs.enable = true;
# Printers
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
services.printing = {
enable = true;
drivers = with pkgs; [
cups-filters
cups-browsed
];
};
# Enable Flatpaks
services.flatpak.enable = true;
# Enable Docker
virtualisation.docker.enable = true;
nixpkgs.config.allowUnfree = true;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# Enable Bluetooth (but it will be blocked by default to save power)
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = false; # Don't power on bluetooth at boot
hardware.sane.enable = true;
# Configure epsonds for network scanning
environment.etc."sane.d/epsonds.conf".text = ''
net EPSOND80395.local
'';
# Enable OpenTabletDriver
hardware.opentabletdriver.enable = true;
hardware.uinput.enable = true;
# Enable kernel modules
boot.kernelModules = [ "uinput" "usbmon" "kvm-amd" ];
# Enable PPD for power options
services.power-profiles-daemon.enable = true;
# Enable AMD GPU graphics acceleration
hardware.graphics = {
enable = true;
enable32Bit = true; # For 32-bit applications/games
};
# Enable RTL-SDL module
hardware.rtl-sdr.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix.
# system.copySystemConfiguration = true;
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
# to actually do that.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "24.11"; # Did you read the comment?
system.stateVersion = "24.11";
}

42
nixos/flake.lock generated
View File

@@ -1,45 +1,12 @@
{
"nodes": {
"home-manager": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1772985285,
"narHash": "sha256-wEEmvfqJcl9J0wyMgMrj1TixOgInBW/6tLPhWGoZE3s=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5be5d8245cbc7bc0c09fbb5f38f23f223c543f85",
"type": "github"
},
"original": {
"id": "home-manager",
"type": "indirect"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1772773019,
"narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "aca4d95fce4914b3892661bcb80b8087293536c6",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1772773019,
"narHash": "sha256-E1bxHxNKfDoQUuvriG71+f+s/NT0qWkImXsYZNFFfCs=",
"lastModified": 1773389992,
"narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "aca4d95fce4914b3892661bcb80b8087293536c6",
"rev": "c06b4ae3d6599a672a6210b7021d699c351eebda",
"type": "github"
},
"original": {
@@ -51,8 +18,7 @@
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs_2"
"nixpkgs": "nixpkgs"
}
}
},

View File

@@ -5,14 +5,10 @@
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
};
outputs = inputs@{ nixpkgs, home-manager, ... }: {
nixosConfigurations = {
lusia-laptop = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
];
};
outputs = inputs: {
nixosConfigurations.lusia-laptop = inputs.nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [ ./configuration.nix ];
};
};
};
}

View File

@@ -1,13 +0,0 @@
{ config, pkgs, ... }:
{
home.username = "lusia";
home.homeDirectory = "/home/lusia";
home.stateVersion = "24.11";
programs.kitty = {
enable = true;
};
programs.home-manager.enable = true;
}

View File

@@ -0,0 +1,11 @@
{ ... }:
{
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.resumeDevice = "/dev/mapper/luksroot";
boot.consoleLogLevel = 3;
boot.initrd.systemd.enable = true;
boot.initrd.verbose = false;
boot.loader.timeout = 0;
}

View File

@@ -0,0 +1,29 @@
{ ... }:
{
boot.extraModprobeConfig = ''
options mt7921_common disable_clc=1
options atkbd reset=1 softrepeat=1
options i8042 nomux=1 reset=1 nopnp=1 kbdreset=1 direct=1 dumbkbd=1
'';
boot.kernelParams = [
# CRITICAL FIX: Disable ACPI for i8042 (ASUS BIOS bug workaround)
"i8042.noacpi"
"i8042.reset=1"
"i8042.nomux=1"
"i8042.nopnp=1"
"atkbd.softrepeat=1"
# AMD P-State driver for better power management
"amd_pstate=active"
"amd_pstate.shared_mem=1"
# GPU
"amdgpu.gpu_recovery=1"
"amdgpu.runpm=0"
"quiet"
"udev.log_level=3"
"systemd.show_status=auto"
];
boot.kernelModules = [ "usbmon" ];
}

View File

@@ -0,0 +1,8 @@
{ ... }:
{
boot.plymouth = {
enable = true;
theme = "bgrt";
};
}

View File

@@ -0,0 +1,6 @@
{ ... }:
{
systemd.tpm2.enable = false;
boot.initrd.systemd.tpm2.enable = false;
}

View File

@@ -0,0 +1,10 @@
{ pkgs, ... }:
{
fonts.packages = with pkgs; [
noto-fonts
noto-fonts-cjk-sans
noto-fonts-color-emoji
nerd-fonts.fira-code
];
}

View File

@@ -0,0 +1,13 @@
{ pkgs, ... }:
{
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd niri-session";
user = "greeter";
};
};
};
}

View File

@@ -0,0 +1,22 @@
{ pkgs, ... }:
{
security.polkit.enable = true;
services.gnome.gnome-keyring.enable = true;
programs.dconf.enable = true;
xdg.portal = {
enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-gnome
];
config = {
common = {
default = [ "gtk" ];
"org.freedesktop.impl.portal.ScreenCast" = [ "gnome" ];
"org.freedesktop.impl.portal.Screenshot" = [ "gnome" ];
};
};
};
}

View File

@@ -0,0 +1,9 @@
{ ... }:
{
programs.xwayland.enable = true;
environment.sessionVariables = {
QT_QPA_PLATFORMTHEME = "qt5ct";
};
}

View File

@@ -0,0 +1,27 @@
{ ... }:
{
fileSystems."/" = {
options = [ "subvol=@" "compress=zstd" "space_cache=v2" "noatime" "lazytime" "ssd" "discard=async" ];
};
fileSystems."/home" = {
options = [ "subvol=@home" "compress=zstd" "space_cache=v2" "noatime" "lazytime" "ssd" "discard=async" ];
};
fileSystems."/var/log" = {
options = [ "subvol=@log" "compress=zstd" "space_cache=v2" "noatime" "lazytime" "ssd" "discard=async" ];
};
fileSystems."/swap" = {
options = [ "subvol=@swap" "noatime" "ssd" "discard=async" ];
};
swapDevices = [{ device = "/swap/swapfile"; }];
boot.kernel.sysctl = {
"vm.dirty_ratio" = 10;
"vm.dirty_background_ratio" = 5;
"vm.swappiness" = 10;
};
}

View File

@@ -0,0 +1,6 @@
{ ... }:
{
hardware.bluetooth.enable = true;
hardware.bluetooth.powerOnBoot = false;
}

View File

@@ -0,0 +1,8 @@
{ ... }:
{
hardware.graphics = {
enable = true;
enable32Bit = true;
};
}

View File

@@ -0,0 +1,6 @@
{ ... }:
{
services.upower.enable = true;
services.power-profiles-daemon.enable = true;
}

View File

@@ -0,0 +1,11 @@
{ ... }:
{
hardware.rtl-sdr.enable = true;
boot.blacklistedKernelModules = [
"dvb_usb_rtl28xxu"
"rtl2832"
"rtl2830"
];
}

View File

@@ -0,0 +1,9 @@
{ ... }:
{
hardware.sane.enable = true;
environment.etc."sane.d/epsonds.conf".text = ''
net EPSOND80395.local
'';
}

View File

@@ -0,0 +1,7 @@
{ ... }:
{
hardware.opentabletdriver.enable = true;
hardware.uinput.enable = true;
boot.kernelModules = [ "uinput" ];
}

View File

@@ -0,0 +1,11 @@
{ pkgs, ... }:
{
services.udev.packages = [
(pkgs.writeTextFile {
name = "probe-rs-udev-rules";
destination = "/etc/udev/rules.d/69-probe-rs.rules";
text = builtins.readFile ../../udev-rules/69-probe-rs.rules;
})
];
}

View File

@@ -0,0 +1,11 @@
{ ... }:
{
networking.hostName = "lusia-laptop";
networking.networkmanager.enable = true;
networking.networkmanager.wifi.powersave = true;
networking.nameservers = [ "9.9.9.9" ];
services.resolved.enable = true;
}

View File

@@ -0,0 +1,11 @@
{ ... }:
{
services.tailscale.enable = true;
networking.firewall.trustedInterfaces = [ "tailscale0" ];
boot.kernel.sysctl = {
"net.ipv4.conf.tailscale0.rp_filter" = 0;
};
}

View File

@@ -0,0 +1,55 @@
{ pkgs, ... }:
{
# VSTech VPN (with DNS for bgs.local domain)
services.openvpn.servers.vstech = {
config = ''
client
remote 51.83.143.81
proto udp
port 649
dev tun
topology subnet
ca /home/lusia/VSTech-vpn/ca.crt
cert /home/lusia/VSTech-vpn/Klient251.crt
key /home/lusia/VSTech-vpn/Klient251.inline
tls-crypt /home/lusia/VSTech-vpn/ta.key
auth sha512
data-ciphers aes-256-cbc
data-ciphers-fallback aes-256-cbc
key-direction 1
keepalive 10 120
'';
updateResolvConf = false;
up = ''
${pkgs.systemd}/bin/resolvectl dns $dev 10.10.10.1
${pkgs.systemd}/bin/resolvectl domain $dev bgs.local
'';
down = ''
${pkgs.systemd}/bin/resolvectl revert $dev
'';
};
# CAT VPN
services.openvpn.servers.cat = {
config = ''
client
remote 79.133.193.211
proto tcp
port 1194
dev tun
topology subnet
ca /home/lusia/vpn/ca.crt
cert /home/lusia/vpn/client18.crt
key /home/lusia/vpn/client18.key
auth sha256
data-ciphers AES-256-CBC
key-direction 1
'';
updateResolvConf = true;
};
}

View File

@@ -0,0 +1,25 @@
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
git
curl
wget
vim
fish
kitty
powertop
openvpn
nodejs
gnumake
gcc
cmake
xwayland-satellite
busybox
libdecor
file
cifs-utils
samba
gvfs
];
}

View File

@@ -0,0 +1,5 @@
{ ... }:
{
services.flatpak.enable = true;
}

View File

@@ -0,0 +1,17 @@
{ pkgs, ... }:
{
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
services.printing = {
enable = true;
drivers = with pkgs; [
cups-filters
cups-browsed
];
};
}

View File

@@ -0,0 +1,5 @@
{ ... }:
{
services.gvfs.enable = true;
}

View File

@@ -0,0 +1,5 @@
{ ... }:
{
services.openssh.enable = true;
}

16
nixos/modules/users.nix Normal file
View File

@@ -0,0 +1,16 @@
{ pkgs, ... }:
{
users.groups.plugdev = {};
users.users.lusia = {
isNormalUser = true;
description = "Lukrecja";
extraGroups = [ "wheel" "networkmanager" "docker" "plugdev" "scanner" "lp" "wireshark" "libvirtd" "kvm" "vboxusers" "dialout" ];
initialPassword = "pass";
shell = pkgs.fish;
};
programs.fish.enable = true;
security.sudo.enable = true;
}

View File

@@ -0,0 +1,12 @@
{ ... }:
{
virtualisation.libvirtd.enable = true;
virtualisation.virtualbox.host.enable = true;
virtualisation.virtualbox.host.enableExtensionPack = true;
virtualisation.docker.enable = true;
boot.kernelModules = [ "kvm-amd" ];
}

View File

@@ -0,0 +1,6 @@
{ pkgs, ... }:
{
programs.wireshark.enable = true;
programs.wireshark.package = pkgs.wireshark;
}

View File

@@ -8,7 +8,9 @@
"customLaunchPrefixEnabled": false,
"density": "default",
"enableClipPreview": true,
"enableClipboardChips": true,
"enableClipboardHistory": false,
"enableClipboardSmartIcons": true,
"enableSessionSearch": true,
"enableSettingsSearch": true,
"enableWindowsSearch": true,
@@ -23,7 +25,6 @@
"showIconBackground": true,
"sortByMostUsed": true,
"terminalCommand": "kitty -e",
"useApp2Unit": false,
"viewMode": "list"
},
"audio": {
@@ -47,6 +48,7 @@
"contentPadding": 2,
"density": "default",
"displayMode": "always_visible",
"enableExclusionZoneInset": true,
"floating": true,
"fontScale": 1,
"frameRadius": 12,
@@ -276,6 +278,7 @@
"desktopWidgets": {
"enabled": false,
"gridSnap": false,
"gridSnapScale": false,
"monitorWidgets": [
{
"name": "eDP-1",
@@ -560,7 +563,7 @@
"showHeader": true,
"showKeybinds": true
},
"settingsVersion": 57,
"settingsVersion": 58,
"systemMonitor": {
"batteryCriticalThreshold": 5,
"batteryWarningThreshold": 20,
@@ -600,7 +603,8 @@
"scrollbarAlwaysVisible": true,
"settingsPanelMode": "centered",
"settingsPanelSideBarCardStyle": false,
"tooltipsEnabled": true
"tooltipsEnabled": true,
"translucentWidgets": false
},
"wallpaper": {
"automationEnabled": false,