New structure:
- home/base/ - Always loaded (shell, cli-tools, secrets)
- home/coding/ - Profile-independent dev tooling (editor, lsp, git, agents)
- home/profiles/ - Freely combinable profiles (gaming, media)
- home/desktop/ - Desktop-only (wm, apps, theme)
- home/server/ - Minimal server stub
Migration sources:
- home/features/cli/ → home/base/{shell,cli-tools,secrets}
- home/features/desktop/hyprland,wayland,rofi → home/desktop/wm/
- home/features/desktop/obsidian,office,webapps,crypto → home/desktop/apps/
- home/features/desktop/fonts,theme,wallpapers → home/desktop/theme/
- gaming.nix split → home/profiles/gaming/{steam,gamescope}
- media.nix split → home/profiles/media/{obs,ffmpeg,yt-dlp,kdenlive,handbrake}
Option namespaces updated:
- features.cli.* → base.shell.* / base.cliTools.* / base.secrets
- features.desktop.* → desktop.wm.* / desktop.apps.* / desktop.theme.*
- features.desktop.gaming → profiles.gaming.*
- features.desktop.media → profiles.media.*
Verified: nix flake check passes (warnings only)
126 lines
3.4 KiB
Nix
126 lines
3.4 KiB
Nix
# Desktop environment aggregator — only loaded when context=desktop.
|
|
# Includes window manager, applications, theming, and desktop session config.
|
|
{
|
|
config,
|
|
pkgs,
|
|
...
|
|
}: {
|
|
imports = [
|
|
./wm
|
|
./apps
|
|
./theme
|
|
];
|
|
|
|
xdg = {
|
|
enable = true;
|
|
configFile."mimeapps.list".force = true;
|
|
mimeApps = {
|
|
enable = true;
|
|
associations.added = {
|
|
"application/zip" = ["org.gnome.FileRoller.desktop"];
|
|
"application/csv" = ["calc.desktop"];
|
|
"application/pdf" = ["okularApplication_pdf.desktop"];
|
|
};
|
|
defaultApplications = {
|
|
"application/zip" = ["org.gnome.FileRoller.desktop"];
|
|
"application/csv" = ["calc.desktop"];
|
|
"application/pdf" = ["okularApplication_pdf.desktop"];
|
|
"application/md" = ["nvim.desktop"];
|
|
"application/text" = ["nvim.desktop"];
|
|
"x-scheme-handler/http" = ["io.github.zen_browser.zen"];
|
|
"x-scheme-handler/https" = ["io.github.zen_browser.zen"];
|
|
};
|
|
};
|
|
userDirs = {
|
|
enable = true;
|
|
createDirectories = true;
|
|
setSessionVariables = true;
|
|
};
|
|
};
|
|
|
|
home.sessionVariables = {
|
|
WEBKIT_DISABLE_COMPOSITING_MODE = "1";
|
|
NIXOS_OZONE_WL = "1";
|
|
TERMINAL = "ghostty";
|
|
QT_QPA_PLATFORM = "wayland";
|
|
XDG_CURRENT_DESKTOP = "Hyprland";
|
|
XDG_SESSION_TYPE = "wayland";
|
|
XDG_SESSION_DESKTOP = "Hyprland";
|
|
};
|
|
|
|
home.sessionPath = [
|
|
"\${XDG_BIN_HOME}"
|
|
"\${HOME}/.cargo/bin"
|
|
"$HOME/.npm-global/bin"
|
|
"$HOME/.cache/.bun/bin"
|
|
];
|
|
|
|
fonts.fontconfig.enable = true;
|
|
|
|
programs.ghostty = {
|
|
enable = true;
|
|
enableFishIntegration = true;
|
|
enableBashIntegration = true;
|
|
settings = {
|
|
font-family = "Fira Code";
|
|
copy-on-select = true;
|
|
foreground = "#${config.colorScheme.palette.base05}";
|
|
background = "#${config.colorScheme.palette.base00}";
|
|
selection-foreground = "#${config.colorScheme.palette.base07}";
|
|
selection-background = "#${config.colorScheme.palette.base02}";
|
|
cursor-color = "#${config.colorScheme.palette.base05}";
|
|
palette = [
|
|
"0=#${config.colorScheme.palette.base01}"
|
|
"1=#${config.colorScheme.palette.base08}"
|
|
"2=#${config.colorScheme.palette.base0B}"
|
|
"3=#${config.colorScheme.palette.base0A}"
|
|
"4=#${config.colorScheme.palette.base0D}"
|
|
"5=#${config.colorScheme.palette.base0E}"
|
|
"6=#${config.colorScheme.palette.base0C}"
|
|
"7=#${config.colorScheme.palette.base05}"
|
|
"8=#${config.colorScheme.palette.base03}"
|
|
"9=#${config.colorScheme.palette.base08}"
|
|
"10=#${config.colorScheme.palette.base0B}"
|
|
"11=#${config.colorScheme.palette.base0A}"
|
|
"12=#${config.colorScheme.palette.base0D}"
|
|
"13=#${config.colorScheme.palette.base0E}"
|
|
"14=#${config.colorScheme.palette.base0C}"
|
|
"15=#${config.colorScheme.palette.base07}"
|
|
];
|
|
};
|
|
};
|
|
|
|
home.pointerCursor = {
|
|
gtk.enable = true;
|
|
package = pkgs.bibata-cursors;
|
|
name = "Bibata-Modern-Ice";
|
|
size = 20;
|
|
};
|
|
|
|
home.packages = with pkgs; [
|
|
appimage-run
|
|
bemoji
|
|
brave
|
|
distrobox
|
|
eigent
|
|
(element-desktop.override {
|
|
commandLineArgs = "--password-store=gnome-libsecret";
|
|
})
|
|
launch-webapp
|
|
file-roller
|
|
hyprpanel
|
|
seahorse
|
|
sushi
|
|
ksnip
|
|
msty-studio
|
|
nwg-look
|
|
rose-pine-hyprcursor
|
|
remmina
|
|
slack
|
|
telegram-desktop
|
|
vivaldi
|
|
vivaldi-ffmpeg-codecs
|
|
vibetyper
|
|
];
|
|
}
|