feat: merge desktop + desktop-minimal + calibre with sub-options

This commit is contained in:
2026-04-12 21:28:00 +00:00
parent 898751576d
commit e1d136bd2f
3 changed files with 132 additions and 132 deletions

View File

@@ -1,22 +0,0 @@
{
nixos =
{ pkgs, ... }:
{
environment.systemPackages = [ pkgs.calibre ];
# udev rules for kindle and mtp device access
# NOTE:(@janezicmatej) uses services.udev.packages instead of extraRules
# because extraRules writes to 99-local.rules which is too late for uaccess
# see https://github.com/NixOS/nixpkgs/issues/308681
services.udev.packages = [
pkgs.libmtp
(pkgs.writeTextFile {
name = "kindle-udev-rules";
text = ''
ACTION!="remove", SUBSYSTEM=="usb", ATTRS{idVendor}=="1949", TAG+="uaccess"
'';
destination = "/etc/udev/rules.d/70-kindle.rules";
})
];
};
}

View File

@@ -1,45 +0,0 @@
{
nixos =
{ pkgs, inputs, ... }:
{
imports = [ inputs.stylix.nixosModules.stylix ];
# audio
services.pipewire = {
enable = true;
pulse.enable = true;
};
security.polkit.enable = true;
services.dbus.enable = true;
services.playerctld.enable = true;
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
extraPortals = [
pkgs.xdg-desktop-portal-wlr
pkgs.xdg-desktop-portal-gtk
];
};
fonts.packages = with pkgs; [
font-awesome
nerd-fonts.jetbrains-mono
];
# theming
stylix = {
enable = true;
polarity = "dark";
image = "${inputs.assets}/wallpaper.png";
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-medium.yaml";
};
};
home =
{ inputs, ... }:
{
home.file.".assets".source = inputs.assets;
};
}

View File

@@ -1,85 +1,152 @@
{ {
nixos = nixos =
{ pkgs, inputs, ... }: { config, lib, pkgs, inputs, ... }:
let
cfg = config.features.desktop;
in
{ {
imports = [ inputs.stylix.nixosModules.stylix ]; options.features.desktop = {
enable = lib.mkEnableOption "desktop environment";
# audio audio.enable = lib.mkOption {
services.pipewire = { type = lib.types.bool;
enable = true; default = true;
pulse.enable = 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;
};
}; };
# bluetooth config = lib.mkIf cfg.enable (lib.mkMerge [
hardware.bluetooth.enable = true; # base desktop
services.blueman.enable = true; {
security.polkit.enable = true;
services.dbus.enable = true;
services.playerctld.enable = true;
security.polkit.enable = true; xdg.portal = {
services.dbus.enable = true; enable = true;
services.playerctld.enable = true; xdgOpenUsePortal = true;
extraPortals = with pkgs; [
xdg-desktop-portal-wlr
xdg-desktop-portal-gtk
];
};
xdg.portal = { fonts.packages = with pkgs; [
enable = true; font-awesome
xdgOpenUsePortal = true; nerd-fonts.jetbrains-mono
extraPortals = [ ];
pkgs.xdg-desktop-portal-wlr
pkgs.xdg-desktop-portal-gtk
];
};
fonts.packages = with pkgs; [ stylix = {
font-awesome enable = true;
nerd-fonts.jetbrains-mono polarity = cfg.theme.polarity;
]; image = cfg.theme.wallpaper;
base16Scheme = "${pkgs.base16-schemes}/share/themes/${cfg.theme.scheme}.yaml";
};
}
# theming # audio
stylix = { (lib.mkIf cfg.audio.enable {
enable = true; services.pipewire = {
polarity = "dark"; enable = true;
image = "${inputs.assets}/wallpaper.png"; pulse.enable = true;
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-material-dark-medium.yaml"; };
}; environment.systemPackages = with pkgs; [
pavucontrol
easyeffects
];
})
programs.thunderbird.enable = true; # bluetooth
programs._1password.enable = true; (lib.mkIf cfg.bluetooth.enable {
programs._1password-gui.enable = true; hardware.bluetooth.enable = true;
services.blueman.enable = true;
})
environment.systemPackages = with pkgs; [ # apps
easyeffects (lib.mkIf cfg.apps.enable {
ghostty programs.thunderbird.enable = true;
google-chrome
zathura
pavucontrol
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
];
# internal CA environment.systemPackages = with pkgs; [
security.pki.certificateFiles = [ ghostty
inputs.self.outputs.packages.${pkgs.stdenv.hostPlatform.system}.ca-matheo-si 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 = { xdg.mime.defaultApplications = {
"application/pdf" = "org.pwmt.zathura.desktop"; "application/pdf" = "org.pwmt.zathura.desktop";
}; };
# 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 = home =
{ inputs, ... }: { lib, inputs, osConfig, ... }:
let
cfg = osConfig.features.desktop;
in
{ {
home.file.".assets".source = inputs.assets; config = lib.mkIf cfg.enable {
home.file.".assets".source = inputs.assets;
};
}; };
} }