Compare commits

...

2 Commits

Author SHA1 Message Date
571fb2ff99 chore: blame ignore 2204b12fad 2026-04-13 23:04:46 +02:00
2204b12fad chore: run lint & format 2026-04-13 23:04:16 +02:00
23 changed files with 497 additions and 389 deletions

View File

@@ -1,6 +1,7 @@
# nix fmt & statix # nix fmt & statix
f011c8d71ba09bd94ab04b8d771858b90a03fbf9 f011c8d71ba09bd94ab04b8d771858b90a03fbf9
3aff25b4486a143cd6282f8845c16216598e1c7e 3aff25b4486a143cd6282f8845c16216598e1c7e
2204b12fadf27886058e6945806ce93a547f5278
# host rename # host rename
cfe4c43887a41e52be4e6472474c0fc3788f86e8 cfe4c43887a41e52be4e6472474c0fc3788f86e8

View File

@@ -1,6 +1,11 @@
{ {
nixos = nixos =
{ config, lib, inputs, ... }: {
config,
lib,
inputs,
...
}:
let let
cfg = config.features.bootloader; cfg = config.features.bootloader;
in in
@@ -19,22 +24,24 @@
}; };
}; };
config = lib.mkIf cfg.enable (lib.mkMerge [ config = lib.mkIf cfg.enable (
{ lib.mkMerge [
boot.loader.efi.canTouchEfiVariables = true; {
} boot.loader.efi.canTouchEfiVariables = true;
}
(lib.mkIf (cfg.mode == "systemd-boot") { (lib.mkIf (cfg.mode == "systemd-boot") {
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
}) })
(lib.mkIf (cfg.mode == "lanzaboote") { (lib.mkIf (cfg.mode == "lanzaboote") {
boot.loader.systemd-boot.enable = lib.mkForce false; boot.loader.systemd-boot.enable = lib.mkForce false;
boot.lanzaboote = { boot.lanzaboote = {
enable = true; enable = true;
pkiBundle = "/var/lib/sbctl"; pkiBundle = "/var/lib/sbctl";
}; };
}) })
]); ]
);
}; };
} }

View File

@@ -6,7 +6,12 @@
}; };
home = home =
{ pkgs, lib, osConfig, ... }: {
pkgs,
lib,
osConfig,
...
}:
let let
cfg = osConfig.features.claude; cfg = osConfig.features.claude;
in in

View File

@@ -1,6 +1,12 @@
{ {
nixos = nixos =
{ config, lib, pkgs, inputs, ... }: {
config,
lib,
pkgs,
inputs,
...
}:
let let
cfg = config.features.desktop; cfg = config.features.desktop;
in in
@@ -49,98 +55,105 @@
}; };
}; };
config = lib.mkIf cfg.enable (lib.mkMerge [ config = lib.mkIf cfg.enable (
# base desktop lib.mkMerge [
{ # base desktop
security.polkit.enable = true; {
services.dbus.enable = true; security.polkit.enable = true;
services.playerctld.enable = true; services.dbus.enable = true;
services.playerctld.enable = true;
xdg.portal = { xdg.portal = {
enable = true; enable = true;
xdgOpenUsePortal = true; xdgOpenUsePortal = true;
extraPortals = with pkgs; [ extraPortals = with pkgs; [
xdg-desktop-portal-wlr xdg-desktop-portal-wlr
xdg-desktop-portal-gtk xdg-desktop-portal-gtk
];
};
fonts.packages = with pkgs; [
font-awesome
nerd-fonts.jetbrains-mono
]; ];
};
fonts.packages = with pkgs; [ stylix = {
font-awesome enable = true;
nerd-fonts.jetbrains-mono inherit (cfg.theme) polarity;
]; image = cfg.theme.wallpaper;
base16Scheme = "${pkgs.base16-schemes}/share/themes/${cfg.theme.scheme}.yaml";
};
}
stylix = { # audio
enable = true; (lib.mkIf cfg.audio.enable {
polarity = cfg.theme.polarity; services.pipewire = {
image = cfg.theme.wallpaper; enable = true;
base16Scheme = "${pkgs.base16-schemes}/share/themes/${cfg.theme.scheme}.yaml"; pulse.enable = true;
}; };
} environment.systemPackages = with pkgs; [
pavucontrol
easyeffects
];
})
# audio # bluetooth
(lib.mkIf cfg.audio.enable { (lib.mkIf cfg.bluetooth.enable {
services.pipewire = { hardware.bluetooth.enable = true;
enable = true; services.blueman.enable = true;
pulse.enable = true; })
};
environment.systemPackages = with pkgs; [
pavucontrol
easyeffects
];
})
# bluetooth # apps
(lib.mkIf cfg.bluetooth.enable { (lib.mkIf cfg.apps.enable {
hardware.bluetooth.enable = true; programs.thunderbird.enable = true;
services.blueman.enable = true;
})
# apps environment.systemPackages = with pkgs; [
(lib.mkIf cfg.apps.enable { ghostty
programs.thunderbird.enable = true; google-chrome
zathura
calibre
bolt-launcher
libnotify
bibata-cursors
vesktop
rocketchat-desktop
telegram-desktop
slack
jellyfin-media-player
cider-2
mpv
ffmpeg
wf-recorder
wl-mirror
protonmail-bridge
ledger-live-desktop
];
environment.systemPackages = with pkgs; [ xdg.mime.defaultApplications = {
ghostty "application/pdf" = "org.pwmt.zathura.desktop";
google-chrome };
zathura
calibre
bolt-launcher
libnotify
bibata-cursors
vesktop
rocketchat-desktop
telegram-desktop
slack
jellyfin-media-player
cider-2
mpv
ffmpeg
wf-recorder
wl-mirror
protonmail-bridge
ledger-live-desktop
];
xdg.mime.defaultApplications = { # kindle udev rules for calibre
"application/pdf" = "org.pwmt.zathura.desktop"; features.udev.kindle.enable = lib.mkDefault true;
}; })
# kindle udev rules for calibre # internal CA
features.udev.kindle.enable = lib.mkDefault true; (lib.mkIf cfg.internalCA.enable {
}) security.pki.certificateFiles = [
inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system}.ca-matheo-si
# internal CA ];
(lib.mkIf cfg.internalCA.enable { })
security.pki.certificateFiles = [ ]
inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system}.ca-matheo-si );
];
})
]);
}; };
home = home =
{ lib, inputs, osConfig, ... }: {
lib,
inputs,
osConfig,
...
}:
let let
cfg = osConfig.features.desktop; cfg = osConfig.features.desktop;
in in

View File

@@ -6,7 +6,13 @@
}; };
home = home =
{ pkgs, lib, inputs, osConfig, ... }: {
pkgs,
lib,
inputs,
osConfig,
...
}:
let let
cfg = osConfig.features.dev; cfg = osConfig.features.dev;
packages = inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system}; packages = inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system};

View File

@@ -1,6 +1,11 @@
{ {
nixos = nixos =
{ config, lib, inputs, ... }: {
config,
lib,
inputs,
...
}:
let let
cfg = config.features.direnv; cfg = config.features.direnv;
in in

View File

@@ -1,6 +1,11 @@
{ {
nixos = nixos =
{ config, lib, user, ... }: {
config,
lib,
user,
...
}:
let let
cfg = config.features.docker; cfg = config.features.docker;
in in

View File

@@ -1,6 +1,11 @@
{ {
nixos = nixos =
{ config, lib, userKeys, ... }: {
config,
lib,
userKeys,
...
}:
let let
cfg = config.features.filedrop; cfg = config.features.filedrop;
in in

View File

@@ -1,6 +1,11 @@
{ {
nixos = nixos =
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
cfg = config.features.gaming; cfg = config.features.gaming;
in in

View File

@@ -6,7 +6,13 @@
}; };
home = home =
{ pkgs, lib, inputs, osConfig, ... }: {
pkgs,
lib,
inputs,
osConfig,
...
}:
let let
cfg = osConfig.features.git; cfg = osConfig.features.git;
packages = inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system}; packages = inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system};

View File

@@ -1,6 +1,11 @@
{ {
nixos = nixos =
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
cfg = config.features.gnupg; cfg = config.features.gnupg;
in in
@@ -14,23 +19,25 @@
}; };
}; };
config = lib.mkIf cfg.enable (lib.mkMerge [ config = lib.mkIf cfg.enable (
{ lib.mkMerge [
programs.gnupg.agent = { {
enable = true; programs.gnupg.agent = {
enableSSHSupport = true; enable = true;
enableExtraSocket = true; enableSSHSupport = true;
}; enableExtraSocket = true;
} };
}
(lib.mkIf cfg.yubikey.enable { (lib.mkIf cfg.yubikey.enable {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
yubikey-personalization yubikey-personalization
yubikey-manager yubikey-manager
]; ];
services.pcscd.enable = true; services.pcscd.enable = true;
}) })
]); ]
);
}; };
} }

View File

@@ -26,54 +26,56 @@
cfg = osConfig.features.neovim; cfg = osConfig.features.neovim;
in in
{ {
config = lib.mkIf cfg.enable (lib.mkMerge [ config = lib.mkIf cfg.enable (
(lib.optionalAttrs (options ? stylix) { lib.mkMerge [
# disable stylix neovim target when stylix is present (lib.optionalAttrs (options ? stylix) {
stylix.targets.neovim.enable = false; # disable stylix neovim target when stylix is present
}) stylix.targets.neovim.enable = false;
{ })
xdg.configFile."nvim" = lib.mkIf (cfg.dotfiles != null) { {
source = cfg.dotfiles; xdg.configFile."nvim" = lib.mkIf (cfg.dotfiles != null) {
}; source = cfg.dotfiles;
};
programs.neovim = { programs.neovim = {
enable = true; enable = true;
vimAlias = true; vimAlias = true;
defaultEditor = true; defaultEditor = true;
package = inputs.neovim-nightly-overlay.packages.${pkgs.stdenv.hostPlatform.system}.default; package = inputs.neovim-nightly-overlay.packages.${pkgs.stdenv.hostPlatform.system}.default;
extraPackages = with pkgs; [ extraPackages = with pkgs; [
gcc gcc
luajit luajit
nodejs_22 nodejs_22
tree-sitter tree-sitter
gnumake gnumake
osc osc
fd fd
ripgrep ripgrep
bat bat
delta delta
pyright pyright
typescript-language-server typescript-language-server
lua-language-server lua-language-server
gopls gopls
nil nil
nixd nixd
nixpkgs-fmt nixpkgs-fmt
stylua stylua
]; ];
extraWrapperArgs = [ extraWrapperArgs = [
"--suffix" "--suffix"
"LD_LIBRARY_PATH" "LD_LIBRARY_PATH"
":" ":"
"${lib.makeLibraryPath [ pkgs.stdenv.cc.cc.lib ]}" "${lib.makeLibraryPath [ pkgs.stdenv.cc.cc.lib ]}"
]; ];
}; };
} }
]); ]
);
}; };
} }

View File

@@ -41,29 +41,27 @@
]; ];
download-buffer-size = 2 * 1024 * 1024 * 1024; download-buffer-size = 2 * 1024 * 1024 * 1024;
warn-dirty = false; warn-dirty = false;
substituters = substituters = [
[ "https://cache.nixos.org"
"https://cache.nixos.org" "https://nix-community.cachix.org?priority=45"
"https://nix-community.cachix.org?priority=45" ]
] ++ lib.optional cfg.towerCache.enable "http://tower:5000?priority=50";
++ lib.optional cfg.towerCache.enable "http://tower:5000?priority=50"; trusted-public-keys = [
trusted-public-keys = "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
[ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" ]
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ++ lib.optional cfg.towerCache.enable "matej.nix-1:TdbemLVYblvAxqJcwb3mVKmmr3cfzXbMcZHE5ILnZDE=";
]
++ lib.optional cfg.towerCache.enable "matej.nix-1:TdbemLVYblvAxqJcwb3mVKmmr3cfzXbMcZHE5ILnZDE=";
}; };
gc = { gc = {
automatic = true; automatic = true;
dates = cfg.gc.dates; inherit (cfg.gc) dates;
options = "--delete-older-than ${cfg.gc.olderThan}"; options = "--delete-older-than ${cfg.gc.olderThan}";
}; };
optimise = { optimise = {
automatic = true; automatic = true;
dates = cfg.optimise.dates; inherit (cfg.optimise) dates;
}; };
}; };
}; };

View File

@@ -1,6 +1,11 @@
{ {
nixos = nixos =
{ config, lib, user, ... }: {
config,
lib,
user,
...
}:
let let
cfg = config.features.onepassword; cfg = config.features.onepassword;
in in

View File

@@ -1,6 +1,11 @@
{ {
nixos = nixos =
{ config, lib, user, ... }: {
config,
lib,
user,
...
}:
let let
cfg = config.features.remote-base; cfg = config.features.remote-base;
in in

View File

@@ -6,7 +6,12 @@
}; };
home = home =
{ pkgs, lib, osConfig, ... }: {
pkgs,
lib,
osConfig,
...
}:
let let
cfg = osConfig.features.shell; cfg = osConfig.features.shell;
in in

View File

@@ -1,6 +1,11 @@
{ {
nixos = nixos =
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
cfg = config.features.sway; cfg = config.features.sway;
desktopCfg = config.features.desktop; desktopCfg = config.features.desktop;
@@ -15,77 +20,79 @@
}; };
}; };
config = lib.mkIf cfg.enable (lib.mkMerge [ config = lib.mkIf cfg.enable (
{ lib.mkMerge [
# soft dependency {
features.desktop.enable = lib.mkDefault true; # soft dependency
features.desktop.enable = lib.mkDefault true;
# hard dependency # hard dependency
assertions = [ assertions = [
{ {
assertion = desktopCfg.enable; assertion = desktopCfg.enable;
message = "features.sway requires features.desktop"; message = "features.sway requires features.desktop";
} }
];
programs.sway = {
enable = true;
package = pkgs.swayfx;
wrapperFeatures.gtk = true;
extraSessionCommands = ''
# fix for java awt apps not rendering
export _JAVA_AWT_WM_NONREPARENTING=1
'';
};
environment.systemPackages = with pkgs; [
waybar
mako
wob
playerctl
brightnessctl
foot
grim
pulseaudio
swayidle
swaylock-effects
jq
slurp
wl-clipboard
pamixer
wlsunset
satty
wayland-pipewire-idle-inhibit
fuzzel
cliphist
zenity
];
}
# greeter
(lib.mkIf cfg.greeter.enable {
programs.regreet = {
enable = true;
cageArgs = [
"-s"
"-m"
"last"
]; ];
font = {
name = lib.mkForce "JetBrainsMono Nerd Font"; programs.sway = {
size = lib.mkForce 14; enable = true;
package = pkgs.swayfx;
wrapperFeatures.gtk = true;
extraSessionCommands = ''
# fix for java awt apps not rendering
export _JAVA_AWT_WM_NONREPARENTING=1
'';
}; };
settings = {
background = { environment.systemPackages = with pkgs; [
path = lib.mkForce (toString desktopCfg.theme.wallpaper); waybar
fit = lib.mkForce "Cover"; mako
wob
playerctl
brightnessctl
foot
grim
pulseaudio
swayidle
swaylock-effects
jq
slurp
wl-clipboard
pamixer
wlsunset
satty
wayland-pipewire-idle-inhibit
fuzzel
cliphist
zenity
];
}
# greeter
(lib.mkIf cfg.greeter.enable {
programs.regreet = {
enable = true;
cageArgs = [
"-s"
"-m"
"last"
];
font = {
name = lib.mkForce "JetBrainsMono Nerd Font";
size = lib.mkForce 14;
}; };
GTK = { settings = {
application_prefer_dark_theme = lib.mkForce true; background = {
path = lib.mkForce (toString desktopCfg.theme.wallpaper);
fit = lib.mkForce "Cover";
};
GTK = {
application_prefer_dark_theme = lib.mkForce true;
};
}; };
}; };
}; })
}) ]
]); );
}; };
} }

View File

@@ -1,6 +1,11 @@
{ {
nixos = nixos =
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
cfg = config.features.udev; cfg = config.features.udev;
in in
@@ -24,29 +29,31 @@
}; };
}; };
config = lib.mkIf cfg.enable (lib.mkMerge [ config = lib.mkIf cfg.enable (
(lib.mkIf cfg.kindle.enable { lib.mkMerge [
# NOTE:(@janezicmatej) uses services.udev.packages instead of extraRules (lib.mkIf cfg.kindle.enable {
# because extraRules writes to 99-local.rules which is too late for uaccess # NOTE:(@janezicmatej) uses services.udev.packages instead of extraRules
services.udev.packages = [ # because extraRules writes to 99-local.rules which is too late for uaccess
pkgs.libmtp services.udev.packages = [
(pkgs.writeTextFile { pkgs.libmtp
name = "kindle-udev-rules"; (pkgs.writeTextFile {
text = '' name = "kindle-udev-rules";
ACTION!="remove", SUBSYSTEM=="usb", ATTRS{idVendor}=="1949", TAG+="uaccess" text = ''
''; ACTION!="remove", SUBSYSTEM=="usb", ATTRS{idVendor}=="1949", TAG+="uaccess"
destination = "/etc/udev/rules.d/70-kindle.rules"; '';
}) destination = "/etc/udev/rules.d/70-kindle.rules";
]; })
}) ];
})
(lib.mkIf cfg.ledger.enable { (lib.mkIf cfg.ledger.enable {
hardware.ledger.enable = true; hardware.ledger.enable = true;
}) })
(lib.mkIf cfg.keyboard-zsa.enable { (lib.mkIf cfg.keyboard-zsa.enable {
hardware.keyboard.zsa.enable = true; hardware.keyboard.zsa.enable = true;
}) })
]); ]
);
}; };
} }

View File

@@ -9,23 +9,21 @@ in
sshAuthorizedKeys = sshKeys; sshAuthorizedKeys = sshKeys;
}; };
nixos = nixos = _: {
{ ... }: users.users.matej = {
{ uid = 1000;
users.users.matej = { isNormalUser = true;
uid = 1000; home = "/home/matej";
isNormalUser = true; extraGroups = [ "wheel" ];
home = "/home/matej"; openssh.authorizedKeys.keys = sshKeys;
extraGroups = [ "wheel" ];
openssh.authorizedKeys.keys = sshKeys;
};
users.groups.matej = {
gid = 1000;
members = [ "matej" ];
};
}; };
users.groups.matej = {
gid = 1000;
members = [ "matej" ];
};
};
home = _: { home = _: {
home.stateVersion = "26.05"; home.stateVersion = "26.05";
}; };

View File

@@ -40,76 +40,78 @@
}; };
}; };
config = lib.mkIf cfg.enable (lib.mkMerge [ config = lib.mkIf cfg.enable (
{ lib.mkMerge [
services.qemuGuest.enable = true; {
services.spice-vdagentd.enable = lib.mkIf (!cfg.headless) true; services.qemuGuest.enable = true;
services.spice-vdagentd.enable = lib.mkIf (!cfg.headless) true;
boot.kernelParams = lib.mkIf cfg.headless [ "console=ttyS0,115200" ]; boot.kernelParams = lib.mkIf cfg.headless [ "console=ttyS0,115200" ];
boot.initrd.availableKernelModules = [ boot.initrd.availableKernelModules = [
"9p" "9p"
"9pnet_virtio" "9pnet_virtio"
]; ];
boot.kernelModules = [ boot.kernelModules = [
"9p" "9p"
"9pnet_virtio" "9pnet_virtio"
];
networking = {
useDHCP = true;
firewall.allowedTCPPorts = [ 22 ];
};
security.sudo.wheelNeedsPassword = false;
environment.systemPackages = with pkgs; [
curl
wget
htop
sshfs
];
}
(lib.mkIf cfg.automount.enable {
systemd.services.vm-9p-automount = {
description = "Auto-discover and mount 9p shares";
after = [
"local-fs.target"
"nss-user-lookup.target"
"systemd-modules-load.service"
]; ];
wants = [ "systemd-modules-load.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = pkgs.writeShellScript "vm-9p-automount" ''
BASE="${cfg.automount.basePath}"
PREFIX="${cfg.automount.prefix}"
mkdir -p "$BASE"
chown ${autoUser}:${autoGroup} "$BASE"
for tagfile in $(find /sys/devices -name mount_tag 2>/dev/null); do networking = {
[ -f "$tagfile" ] || continue useDHCP = true;
tag=$(tr -d '\0' < "$tagfile") firewall.allowedTCPPorts = [ 22 ];
case "$tag" in
"$PREFIX"*) ;;
*) continue ;;
esac
name="''${tag#"$PREFIX"}"
target="$BASE/$name"
mkdir -p "$target"
${pkgs.util-linux}/bin/mount -t 9p "$tag" "$target" \
-o trans=virtio,version=9p2000.L || continue
done
'';
}; };
};
}) security.sudo.wheelNeedsPassword = false;
]);
environment.systemPackages = with pkgs; [
curl
wget
htop
sshfs
];
}
(lib.mkIf cfg.automount.enable {
systemd.services.vm-9p-automount = {
description = "Auto-discover and mount 9p shares";
after = [
"local-fs.target"
"nss-user-lookup.target"
"systemd-modules-load.service"
];
wants = [ "systemd-modules-load.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = pkgs.writeShellScript "vm-9p-automount" ''
BASE="${cfg.automount.basePath}"
PREFIX="${cfg.automount.prefix}"
mkdir -p "$BASE"
chown ${autoUser}:${autoGroup} "$BASE"
for tagfile in $(find /sys/devices -name mount_tag 2>/dev/null); do
[ -f "$tagfile" ] || continue
tag=$(tr -d '\0' < "$tagfile")
case "$tag" in
"$PREFIX"*) ;;
*) continue ;;
esac
name="''${tag#"$PREFIX"}"
target="$BASE/$name"
mkdir -p "$target"
${pkgs.util-linux}/bin/mount -t 9p "$tag" "$target" \
-o trans=virtio,version=9p2000.L || continue
done
'';
};
};
})
]
);
}; };
} }

View File

@@ -1,6 +1,12 @@
{ {
nixos = nixos =
{ config, lib, pkgs, user, ... }: {
config,
lib,
pkgs,
user,
...
}:
let let
cfg = config.features.zsh; cfg = config.features.zsh;
in in
@@ -15,22 +21,29 @@
}; };
}; };
config = lib.mkIf cfg.enable (lib.mkMerge [ config = lib.mkIf cfg.enable (
{ lib.mkMerge [
programs.zsh.enable = true; {
environment.etc."zshenv".text = '' programs.zsh.enable = true;
export ZDOTDIR=$HOME/.config/zsh environment.etc."zshenv".text = ''
''; export ZDOTDIR=$HOME/.config/zsh
} '';
}
(lib.mkIf cfg.loginShell.enable { (lib.mkIf cfg.loginShell.enable {
users.users.${user}.shell = pkgs.zsh; users.users.${user}.shell = pkgs.zsh;
}) })
]); ]
);
}; };
home = home =
{ pkgs, lib, osConfig, ... }: {
pkgs,
lib,
osConfig,
...
}:
let let
cfg = osConfig.features.zsh; cfg = osConfig.features.zsh;
in in

View File

@@ -75,9 +75,11 @@
# TODO:(@janezicmatej) replace ssh with virtio-console (hvc0) when qemu 11.0 lands # TODO:(@janezicmatej) replace ssh with virtio-console (hvc0) when qemu 11.0 lands
# https://www.mail-archive.com/qemu-devel@nongnu.org/msg1162844.html # https://www.mail-archive.com/qemu-devel@nongnu.org/msg1162844.html
# accept any ssh key (ephemeral localhost-only vm) # accept any ssh key (ephemeral localhost-only vm)
services.openssh.settings.AuthorizedKeysCommand = let services.openssh.settings.AuthorizedKeysCommand =
acceptKey = pkgs.writeShellScript "ephvm-accept-key" ''echo "$1 $2"''; let
in "${acceptKey} %t %k"; acceptKey = pkgs.writeShellScript "ephvm-accept-key" ''echo "$1 $2"'';
in
"${acceptKey} %t %k";
services.openssh.settings.AuthorizedKeysCommandUser = "nobody"; services.openssh.settings.AuthorizedKeysCommandUser = "nobody";
# writable claude config via 9p # writable claude config via 9p

View File

@@ -79,30 +79,29 @@ let
in in
nixpkgs.lib.nixosSystem { nixpkgs.lib.nixosSystem {
inherit system; inherit system;
modules = modules = [
[ inputs.sops-nix.nixosModules.sops
inputs.sops-nix.nixosModules.sops inputs.stylix.nixosModules.stylix
inputs.stylix.nixosModules.stylix
{ nixpkgs.overlays = overlays; } { nixpkgs.overlays = overlays; }
{ nixpkgs.config.allowUnfree = true; } { nixpkgs.config.allowUnfree = true; }
{ networking.hostName = name; } { networking.hostName = name; }
featureEnableModule featureEnableModule
hostConfig hostConfig
] ]
++ lib.optional (builtins.pathExists hostHWConfig) hostHWConfig ++ lib.optional (builtins.pathExists hostHWConfig) hostHWConfig
++ nixosMods ++ nixosMods
++ lib.optionals hasUser [ ++ lib.optionals hasUser [
inputs.home-manager.nixosModules.home-manager inputs.home-manager.nixosModules.home-manager
{ {
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.backupFileExtension = "backup"; home-manager.backupFileExtension = "backup";
home-manager.users.${user}.imports = homeMods; home-manager.users.${user}.imports = homeMods;
home-manager.extraSpecialArgs = { inherit inputs; }; home-manager.extraSpecialArgs = { inherit inputs; };
} }
]; ];
specialArgs = { specialArgs = {
inherit inputs userKeys user; inherit inputs userKeys user;
}; };