BROKEN: Expanding desktop option

This commit is contained in:
Jurn Wubben 2025-05-24 00:03:47 +02:00
parent ebf027263f
commit 73dd477f9e
44 changed files with 272 additions and 296 deletions

View file

@ -4,8 +4,10 @@
...
}: {
environment.defaultPackages = [
pkgs.git # We need git for flakes
pkgs.neovim
inputs.agenix.packages.${pkgs.system}.default
pkgs.rsync
]; # Still have to be able to edit configs.
environment.sessionVariables = {EDITOR = "nvim";};
}

View file

@ -7,5 +7,6 @@
./programs
./server
./services
./desktop
];
}

View file

@ -0,0 +1,18 @@
{lib, ...}: let
mkEO = lib.mkEnableOption;
in {
imports = [
./greetd.nix
./hyprland.nix
./pipewire.nix
./plasma6.nix
./polkit.nix
./xdg.nix
];
options.niksos.desktop = {
enable = mkEO "enable desktop related programs.";
hyprland = mkEO "enable hyprland related programs.";
kde = mkEO "enable kde specialisation.";
};
}

View file

@ -2,8 +2,10 @@
config,
lib,
...
}: {
config = lib.mkIf config.niksos.desktop {
}: let
cfg = config.niksos.desktop.enable && config.niksos.desktop.hyprland.enable;
in {
config = lib.mkIf cfg {
# greetd display manager
services.greetd = let
session = {

View file

@ -0,0 +1,16 @@
{
config,
pkgs,
lib,
...
}: let
cfg = config.niksos.desktop.enable && config.niksos.desktop.hyprland.enable;
in {
config = lib.mkIf cfg {
programs.hyprland = {
enable = true;
withUWSM = true;
};
environment.sessionVariables.NIXOS_OZONE_WL = "1"; # Makes electron apps use wayland.
};
}

View file

@ -3,8 +3,10 @@
lib,
pkgs,
...
}: {
config = lib.mkIf config.niksos.desktop {
}: let
cfg = config.niksos.desktop.enable;
in {
config = lib.mkIf cfg {
security.rtkit.enable = true;
services.pipewire = {

View file

@ -0,0 +1,33 @@
{
lib,
pkgs,
config,
...
}: let
cfg = config.niksos.desktop.enable && config.niksos.desktop.kde.enable;
in {
config = lib.mkIf cfg {
niksos.desktop.hyprland = lib.mkForce false;
specialisation.de.configuration = {
services = {
greetd = let
session = {
command = "${pkgs.kdePackages.plasma-workspace}/bin/startplasma-wayland";
user = "jsw";
};
in {
enable = true;
settings = {
terminal.vt = 1;
default_session = session;
initial_session = session;
};
};
desktopManager.plasma6.enable = true;
};
home-manager.users.jsw.stylix.autoEnable = false;
};
};
}

22
system/desktop/polkit.nix Normal file
View file

@ -0,0 +1,22 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.niksos.desktop.enable && config.niksos.desktop.hyprland.enable;
in {
systemd.user.services.polkit-gnome-authentication-agent-1 = lib.mkIf cfg {
description = "polkit-gnome-authentication-agent-1";
wantedBy = ["graphical-session.target"];
wants = ["graphical-session.target"];
after = ["graphical-session.target"];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
}

View file

@ -3,8 +3,10 @@
config,
lib,
...
}: {
xdg.portal = lib.mkIf config.niksos.desktop {
}: let
cfg = config.niksos.desktop.enable && config.niksos.desktop.hyprland.enable;
in {
xdg.portal = lib.mkIf cfg {
enable = true;
xdgOpenUsePortal = true;
config = {

View file

@ -9,13 +9,14 @@
uwsm = lib.getExe pkgs.uwsm;
foot = lib.getExe pkgs.foot;
in {
options.niksos.fingerprint = mkEnableOption "fingerprint support.";
#NOTE: Also check home/wayland/hyprland/settings + home/wayland/hyprland/binds
options.niksos.fingerprint = mkEnableOption "fingerprint support.";
config = mkIf fingerprint {
services.fprintd.enable = true;
home-manager.users.jsw.wayland.windowManager.hyprland.settings = mkIf desktop {
bind = [
home-manager.users.jsw.wayland.windowManager.hyprland.settings = mkIf desktop.hyprland {
bind = mkIf fingerprint [
", XF86PowerOff, exec, ${uwsm} app -- pgrep fprintd-verify && exit 0 || ${foot} -a 'foot-fprintd' sh -c 'fprintd-verify && systemctl sleep'"
];
windowrule = [

View file

@ -3,14 +3,13 @@
pkgs,
lib,
...
}: let
}: let
inherit (lib) optionals mkEnableOption mkDefault;
graphics = config.niksos.graphics;
enable = graphics.enable;
nvidia = graphics.enable && graphics.nvidia;
intel = graphics.enable && graphics.intel;
in {
options.niksos.graphics = {
enable = mkEnableOption "core graphics";

View file

@ -3,9 +3,9 @@
imports = [
./avahi.nix
./tailscale.nix
./wireguard.nix
];
#FIXME:
networking = {
# use quad9 with DNS over TLS
nameservers = ["9.9.9.9#dns.quad9.net"];

View file

@ -1,72 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib) mkIf optionals;
inherit (config.networking) hostName;
iptables = lib.getExe' pkgs.iptables "iptables";
port = 53;
server = "lapserv";
serverCfg = {
externalInterface = "eth0";
privateKeyFile = config.age.secrets.wg-lapserv-private.path;
publicKey = "aM+OrvByr63RxKsU9hu0A1lKJr8fPHifHDhBekkHR0c=";
publicIp = "80.242.224.170";
ip = "10.100.0.1";
};
deviceConfig = {
laptop = {
publicKey = config.age.secrets.wg-laptop-private.path;
privateKeyFile = "1su1FfHuEYIvJLaZPwpN86kmH19d/NH/zuh9DjIOyQI=";
ip = "10.100.0.2";
};
};
isServer = server == config.networking.hostName;
currentConfig =
if isServer
then serverCfg
else deviceConfig.${hostName};
in {
networking.nat = mkIf isServer {
enable = true;
inherit (serverCfg) externalInterface;
internalInterfaces = ["wg0"];
};
networking.firewall.allowedUDPPorts = [port];
networking.wireguard.interfaces.wg0 = {
inherit (currentConfig) privateKeyFile;
listenPort = port;
ips = ["${currentConfig.ip}/24"];
peers =
[]
++ (optionals isServer (builtins.concatMap (x: {
inherit (x) publicKey;
allowedIPs = ["${x.ip}/32"];
})
(builtins.attrValues
deviceConfig)))
++ (optionals (!isServer) [
{
inherit (serverCfg) publicKey;
allowedIPs = ["0.0.0.0/0"];
endpoint = "${serverCfg.publicIp}:${builtins.toString port}";
persistentKeepalive = 25;
}
]);
postSetup = mkIf isServer ''
${iptables} -t nat -A POSTROUTING -s 10.100.0.0/24 -o ${serverCfg.externalInterface} -j MASQUERADE
'';
postShutdown = mkIf isServer ''
${iptables} -t nat -D POSTROUTING -s 10.100.0.0/24 -o ${serverCfg.externalInterface} -j MASQUERADE
'';
};
}

View file

@ -9,9 +9,11 @@
./nh.nix
./nixpkgs.nix
./substituters.nix
./nix-index.nix
];
# Really annoying message when command not found
programs.command-not-found.enable = false;
# we need git for flakes
environment.systemPackages = [pkgs.git];

View file

@ -1,7 +0,0 @@
{
programs.command-not-found.enable = false;
programs.nix-index = {
enable = true;
enableFishIntegration = true;
};
}

View file

@ -3,10 +3,6 @@
./fish.nix
./games.nix
./home-manager.nix
./hyprland.nix
./neovim.nix
./plasma6.nix
./polkit.nix
./xdg.nix
];
}

View file

@ -3,65 +3,66 @@
pkgs,
lib,
...
}: {
}: let
cfg = config.niksos.games && config.niksos.desktop.enable;
in {
options.niksos.games = lib.mkEnableOption "gaming related stuff.";
config = lib.mkIf config.niksos.games {
# nixpkgs.overlays = [
# (final: prev: let
# version = "1.4.2";
# hash = "sha256-xe0qlbtt06CUK8bXyaGDtCcHOXpSnkbuvcxaDJjeS/c=";
# npmHash = "sha256-/+NhlQydGS6+2jEjpbwycwKplVo/++wcdPiBNY3R3FI=";
# cargoHash = "sha256-VwzGbm34t7mg9ndmTkht6Ho32NQ+6uxuPTKi3+VrhYo=";
# in {
# gale = prev.gale.overrideAttrs (new: old: {
# src = prev.fetchFromGitHub {
# inherit version hash;
# owner = "Kesomannen";
# repo = "gale";
# rev = "1.4.2";
# };
# npmDeps = prev.fetchNpmDeps {
# hash = npmHash;
# name = "${new.pname}-${new.version}-npm-deps";
# inherit (new) src;
# };
# cargoDeps = prev.rustPlatform.fetchCargoVendor {
# inherit
# (new)
# pname
# version
# src
# cargoRoot
# ;
# hash = cargoHash;
# };
# });
# })
# ];
users.users.jsw.packages = [pkgs.gale];
config = lib.mkIf cfg {
# nixpkgs.overlays = [
# (final: prev: let
# version = "1.4.2";
# hash = "sha256-xe0qlbtt06CUK8bXyaGDtCcHOXpSnkbuvcxaDJjeS/c=";
# npmHash = "sha256-/+NhlQydGS6+2jEjpbwycwKplVo/++wcdPiBNY3R3FI=";
# cargoHash = "sha256-VwzGbm34t7mg9ndmTkht6Ho32NQ+6uxuPTKi3+VrhYo=";
# in {
# gale = prev.gale.overrideAttrs (new: old: {
# src = prev.fetchFromGitHub {
# inherit version hash;
# owner = "Kesomannen";
# repo = "gale";
# rev = "1.4.2";
# };
# npmDeps = prev.fetchNpmDeps {
# hash = npmHash;
# name = "${new.pname}-${new.version}-npm-deps";
# inherit (new) src;
# };
# cargoDeps = prev.rustPlatform.fetchCargoVendor {
# inherit
# (new)
# pname
# version
# src
# cargoRoot
# ;
# hash = cargoHash;
# };
# });
# })
# ];
programs = {
gamescope = {
enable = true;
capSysNice = true;
args = [
"--rt"
"--expose-wayland"
];
programs = {
gamescope = {
enable = true;
capSysNice = true;
args = [
"--rt"
"--expose-wayland"
];
};
steam = {
enable = true;
extraCompatPackages = [
pkgs.proton-ge-bin
];
gamescopeSession.enable = true;
};
};
steam = {
enable = true;
extraCompatPackages = [
pkgs.proton-ge-bin
];
gamescopeSession.enable = true;
environment.variables = {
"STEAM_FORCE_DESKTOP_UI_SCALING" = "1.5"; #FIXME:.
};
};
environment.variables = {
"STEAM_FORCE_DESKTOP_UI_SCALING" = "1.5"; #FIXME:.
};
};
}

View file

@ -1,13 +1,13 @@
{
inputs,
specialArgs,
lib,
config,
...
}: {
imports = [
inputs.hm.nixosModules.default
];
home-manager = {
}: let
cfg = config.niksos.desktop.enable;
in {
home-manager = lib.mkIf cfg {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = specialArgs;
@ -16,5 +16,5 @@
users.jsw = import ../../home;
};
programs.dconf.enable = true; # else gtk-managed stuff won't work
programs.dconf.enable = cfg; # else gtk-managed stuff won't work
}

View file

@ -1,19 +0,0 @@
{
config,
pkgs,
lib,
...
}: {
options.niksos.desktop = lib.mkEnableOption "desktop related stuff.";
config = lib.mkIf config.niksos.desktop {
programs.hyprland = {
enable = true;
withUWSM = true;
};
environment.systemPackages = [
#FIXME: migrated to home-manager
pkgs.kitty # This is the default config's terminal and also my main one.
];
environment.sessionVariables.NIXOS_OZONE_WL = "1"; # Makes electron apps use wayland.
};
}

View file

@ -1,4 +1,5 @@
{lib, ...}: {
options.niksos.neovim = lib.mkEnableOption "the neovim editor";
# The actual config resides in NixOS/home/programs/neovim.
# NOTE: This is for the customisation of the neovim editor, which uses a lot of disk space. Barebones version will be installed anyhow.
}

View file

@ -1,33 +0,0 @@
{
lib,
pkgs,
config,
...
}: {
options.niksos.kde = lib.mkEnableOption "a kde specialisation. Will enable desktop settings.";
config.specialisation.de.configuration = lib.mkIf config.niksos.kde {
niksos.desktop = lib.mkForce true;
services = {
greetd = let
session = {
command = "${pkgs.kdePackages.plasma-workspace}/bin/startplasma-wayland";
user = "jsw";
};
in {
settings = lib.mkForce {
terminal.vt = 1;
default_session = session;
initial_session = session;
};
};
desktopManager.plasma6.enable = true;
};
home-manager.users.jsw = {
stylix.autoEnable = false;
};
};
}

View file

@ -1,22 +0,0 @@
{
config,
lib,
pkgs,
...
}: {
systemd = {
user.services.polkit-gnome-authentication-agent-1 = lib.mkIf config.niksos.desktop {
description = "polkit-gnome-authentication-agent-1";
wantedBy = ["graphical-session.target"];
wants = ["graphical-session.target"];
after = ["graphical-session.target"];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
Restart = "on-failure";
RestartSec = 1;
TimeoutStopSec = 10;
};
};
};
}

View file

@ -49,7 +49,7 @@ in {
ExecStart = "${bash} -c 'cd ${dataDir} && deno run -A ${programDir}/src/main.ts'";
User = "dcbot";
Group = "dcbot";
Restart = "always";
Restart = "always";
};
};

View file

@ -1,8 +1,6 @@
{
imports = [
./greetd.nix
./kanata.nix
./pipewire.nix
./power.nix
./ssh.nix
];