268 lines
8.2 KiB
Nix
268 lines
8.2 KiB
Nix
{
|
|
nixos =
|
|
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
inputs,
|
|
...
|
|
}:
|
|
let
|
|
cfg = config.features.desktop;
|
|
in
|
|
{
|
|
options.features.desktop = {
|
|
enable = lib.mkEnableOption "desktop environment";
|
|
|
|
audio.enable = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = true;
|
|
};
|
|
|
|
bluetooth.enable = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = false;
|
|
};
|
|
|
|
apps.enable = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = true;
|
|
};
|
|
|
|
theme = {
|
|
wallpaper = lib.mkOption {
|
|
type = lib.types.path;
|
|
default = "${inputs.assets}/wallpaper.png";
|
|
};
|
|
|
|
scheme = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "gruvbox-material-dark-medium";
|
|
};
|
|
|
|
polarity = lib.mkOption {
|
|
type = lib.types.enum [
|
|
"dark"
|
|
"light"
|
|
];
|
|
default = "dark";
|
|
};
|
|
};
|
|
|
|
internalCA.enable = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = true;
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable (
|
|
lib.mkMerge [
|
|
# base desktop
|
|
{
|
|
security.polkit.enable = true;
|
|
services.dbus.enable = true;
|
|
services.playerctld.enable = true;
|
|
|
|
xdg.portal = {
|
|
enable = true;
|
|
extraPortals = with pkgs; [
|
|
xdg-desktop-portal-wlr
|
|
xdg-desktop-portal-gtk
|
|
];
|
|
};
|
|
|
|
fonts.packages = with pkgs; [
|
|
font-awesome
|
|
nerd-fonts.jetbrains-mono
|
|
];
|
|
|
|
stylix = {
|
|
enable = true;
|
|
inherit (cfg.theme) polarity;
|
|
image = cfg.theme.wallpaper;
|
|
base16Scheme = "${pkgs.base16-schemes}/share/themes/${cfg.theme.scheme}.yaml";
|
|
};
|
|
}
|
|
|
|
# audio
|
|
(lib.mkIf cfg.audio.enable {
|
|
services.pipewire = {
|
|
enable = true;
|
|
pulse.enable = true;
|
|
};
|
|
environment.systemPackages = with pkgs; [
|
|
pavucontrol
|
|
easyeffects
|
|
];
|
|
})
|
|
|
|
# bluetooth
|
|
(lib.mkIf cfg.bluetooth.enable {
|
|
hardware.bluetooth.enable = true;
|
|
services.blueman.enable = true;
|
|
})
|
|
|
|
# apps
|
|
(lib.mkIf cfg.apps.enable {
|
|
programs.thunderbird.enable = true;
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
ghostty
|
|
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
|
|
imv
|
|
yazi
|
|
nemo
|
|
file-roller
|
|
libreoffice-still
|
|
];
|
|
|
|
# kindle udev rules for calibre
|
|
features.udev.kindle.enable = lib.mkDefault true;
|
|
})
|
|
|
|
# internal CA
|
|
(lib.mkIf cfg.internalCA.enable {
|
|
security.pki.certificateFiles = [
|
|
inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system}.ca-matheo-si
|
|
];
|
|
})
|
|
]
|
|
);
|
|
};
|
|
|
|
home =
|
|
{
|
|
lib,
|
|
inputs,
|
|
osConfig,
|
|
...
|
|
}:
|
|
let
|
|
cfg = osConfig.features.desktop;
|
|
in
|
|
{
|
|
config = lib.mkIf cfg.enable (
|
|
lib.mkMerge [
|
|
{
|
|
home.file.".assets".source = inputs.assets;
|
|
}
|
|
|
|
(lib.mkIf cfg.apps.enable {
|
|
# TODO:(@janezicmatej) consider moving nvim desktop entry to neovim feature
|
|
xdg.desktopEntries.nvim = {
|
|
name = "Neovim";
|
|
exec = "ghostty -e nvim %F";
|
|
terminal = false;
|
|
mimeType = [
|
|
"text/plain"
|
|
"application/json"
|
|
"text/markdown"
|
|
];
|
|
};
|
|
|
|
xdg.mimeApps = {
|
|
enable = true;
|
|
defaultApplications = {
|
|
# text
|
|
"text/plain" = "nvim.desktop";
|
|
"application/json" = "nvim.desktop";
|
|
"text/markdown" = "nvim.desktop";
|
|
|
|
# web
|
|
"text/html" = "google-chrome.desktop";
|
|
"application/xhtml+xml" = "google-chrome.desktop";
|
|
"x-scheme-handler/http" = "google-chrome.desktop";
|
|
"x-scheme-handler/https" = "google-chrome.desktop";
|
|
"x-scheme-handler/ftp" = "google-chrome.desktop";
|
|
"x-scheme-handler/about" = "google-chrome.desktop";
|
|
"x-scheme-handler/unknown" = "google-chrome.desktop";
|
|
|
|
# mail and calendar
|
|
"x-scheme-handler/mailto" = "thunderbird.desktop";
|
|
"message/rfc822" = "thunderbird.desktop";
|
|
"text/calendar" = "thunderbird.desktop";
|
|
|
|
# documents
|
|
"application/pdf" = "org.pwmt.zathura.desktop";
|
|
"application/postscript" = "org.pwmt.zathura.desktop";
|
|
"image/vnd.djvu" = "org.pwmt.zathura.desktop";
|
|
"application/epub+zip" = "org.pwmt.zathura.desktop";
|
|
|
|
# office
|
|
"application/msword" = "libreoffice-writer.desktop";
|
|
"application/vnd.ms-excel" = "libreoffice-calc.desktop";
|
|
"application/vnd.ms-powerpoint" = "libreoffice-impress.desktop";
|
|
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" =
|
|
"libreoffice-writer.desktop";
|
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" = "libreoffice-calc.desktop";
|
|
"application/vnd.openxmlformats-officedocument.presentationml.presentation" =
|
|
"libreoffice-impress.desktop";
|
|
"application/vnd.oasis.opendocument.text" = "libreoffice-writer.desktop";
|
|
"application/vnd.oasis.opendocument.spreadsheet" = "libreoffice-calc.desktop";
|
|
"application/vnd.oasis.opendocument.presentation" = "libreoffice-impress.desktop";
|
|
"text/csv" = "libreoffice-calc.desktop";
|
|
|
|
# images
|
|
"image/png" = "imv-dir.desktop";
|
|
"image/jpeg" = "imv-dir.desktop";
|
|
"image/gif" = "imv-dir.desktop";
|
|
"image/webp" = "imv-dir.desktop";
|
|
"image/tiff" = "imv-dir.desktop";
|
|
"image/bmp" = "imv-dir.desktop";
|
|
"image/svg+xml" = "google-chrome.desktop";
|
|
|
|
# video
|
|
"video/mp4" = "mpv.desktop";
|
|
"video/x-matroska" = "mpv.desktop";
|
|
"video/webm" = "mpv.desktop";
|
|
"video/quicktime" = "mpv.desktop";
|
|
"video/x-msvideo" = "mpv.desktop";
|
|
|
|
# audio
|
|
"audio/mpeg" = "mpv.desktop";
|
|
"audio/flac" = "mpv.desktop";
|
|
"audio/ogg" = "mpv.desktop";
|
|
"audio/wav" = "mpv.desktop";
|
|
"audio/aac" = "mpv.desktop";
|
|
|
|
# archives
|
|
"application/zip" = "org.gnome.FileRoller.desktop";
|
|
"application/x-tar" = "org.gnome.FileRoller.desktop";
|
|
"application/gzip" = "org.gnome.FileRoller.desktop";
|
|
"application/x-rar-compressed" = "org.gnome.FileRoller.desktop";
|
|
"application/x-7z-compressed" = "org.gnome.FileRoller.desktop";
|
|
"application/x-bzip2" = "org.gnome.FileRoller.desktop";
|
|
"application/x-xz" = "org.gnome.FileRoller.desktop";
|
|
|
|
# file manager
|
|
"inode/directory" = "nemo.desktop";
|
|
|
|
# app deep links
|
|
"x-scheme-handler/tg" = "org.telegram.desktop.desktop";
|
|
"x-scheme-handler/discord" = "vesktop.desktop";
|
|
"x-scheme-handler/slack" = "slack.desktop";
|
|
};
|
|
};
|
|
})
|
|
]
|
|
);
|
|
};
|
|
}
|