174 lines
4.4 KiB
Nix
174 lines
4.4 KiB
Nix
{
|
|
inputs,
|
|
config,
|
|
lib,
|
|
...
|
|
}:
|
|
let
|
|
cfg = config.sharedPrograms;
|
|
unstable = import inputs.nixpkgs-unstable {
|
|
system = "x86_64-linux";
|
|
config.allowUnfree = true;
|
|
};
|
|
in
|
|
{
|
|
imports = [
|
|
../apps/firefox/firefox.nix
|
|
../apps/ghostty.nix
|
|
../apps/helix.nix
|
|
./json2nix.nix
|
|
./style-preview.nix
|
|
];
|
|
|
|
options.sharedPrograms = {
|
|
enable = lib.mkEnableOption "enable all shared programs with Stylix auto-theming";
|
|
|
|
# CLI tools
|
|
bat.enable = lib.mkEnableOption "enable bat (cat replacement)";
|
|
fzf.enable = lib.mkEnableOption "enable fzf (fuzzy finder)";
|
|
btop.enable = lib.mkEnableOption "enable btop (system monitor)";
|
|
mpv.enable = lib.mkEnableOption "enable mpv (media player)";
|
|
wofi.enable = lib.mkEnableOption "enable wofi (application launcher)";
|
|
keepassxc.enable = lib.mkEnableOption "enable keepassxc (password manager)";
|
|
opencode.enable = lib.mkEnableOption "enable opencode (AI coding assistant)";
|
|
|
|
# Apps (pass-through to underlying modules)
|
|
firefox.enable = lib.mkEnableOption "enable firefox (web browser)";
|
|
|
|
ghostty = {
|
|
enable = lib.mkEnableOption "enable ghostty (terminal emulator)";
|
|
fontFamily = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = "Maple Mono NF";
|
|
description = "Font family for Ghostty";
|
|
};
|
|
enableLigatures = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = true;
|
|
description = "Enable font ligatures in Ghostty";
|
|
};
|
|
};
|
|
|
|
helix = {
|
|
enable = lib.mkEnableOption "enable helix (text editor)";
|
|
themeOverrides = lib.mkOption {
|
|
type = lib.types.attrsOf lib.types.anything;
|
|
default = { };
|
|
description = "Override minimal theme scopes for helix";
|
|
};
|
|
};
|
|
|
|
stylePreview.enable = lib.mkEnableOption "enable style preview (Stylix color viewer)";
|
|
json2nix.enable = lib.mkEnableOption "enable json2nix (JSON to Nix converter)";
|
|
};
|
|
|
|
config = lib.mkMerge [
|
|
# When sharedPrograms.enable is true, enable all programs by default
|
|
(lib.mkIf cfg.enable {
|
|
sharedPrograms = {
|
|
bat.enable = lib.mkDefault true;
|
|
fzf.enable = lib.mkDefault true;
|
|
btop.enable = lib.mkDefault true;
|
|
mpv.enable = lib.mkDefault true;
|
|
wofi.enable = lib.mkDefault true;
|
|
keepassxc.enable = lib.mkDefault true;
|
|
opencode.enable = lib.mkDefault true;
|
|
firefox.enable = lib.mkDefault true;
|
|
ghostty.enable = lib.mkDefault true;
|
|
helix.enable = lib.mkDefault true;
|
|
stylePreview.enable = lib.mkDefault true;
|
|
json2nix.enable = lib.mkDefault true;
|
|
};
|
|
})
|
|
|
|
# CLI tools
|
|
(lib.mkIf cfg.bat.enable {
|
|
programs.bat.enable = true;
|
|
})
|
|
|
|
(lib.mkIf cfg.fzf.enable {
|
|
programs.fzf = {
|
|
enable = true;
|
|
enableZshIntegration = true;
|
|
};
|
|
})
|
|
|
|
(lib.mkIf cfg.btop.enable {
|
|
programs.btop.enable = true;
|
|
})
|
|
|
|
(lib.mkIf cfg.mpv.enable {
|
|
programs.mpv.enable = true;
|
|
})
|
|
|
|
(lib.mkIf cfg.wofi.enable {
|
|
programs.wofi.enable = true;
|
|
})
|
|
|
|
(lib.mkIf cfg.keepassxc.enable {
|
|
programs.keepassxc = {
|
|
enable = true;
|
|
autostart = false;
|
|
settings = {
|
|
Browser = {
|
|
Enabled = true;
|
|
UpdateBinaryPath = false;
|
|
};
|
|
|
|
PasswordGenerator = {
|
|
Length = 25;
|
|
SpecialChars = false;
|
|
};
|
|
|
|
GUI = {
|
|
AdvancedSettings = true;
|
|
ApplicationTheme = "dark";
|
|
CompactMode = true;
|
|
HidePasswords = true;
|
|
};
|
|
|
|
Security = {
|
|
ClearClipboardTimeout = 20;
|
|
LockDatabaseIdleSeconds = 21600;
|
|
};
|
|
};
|
|
};
|
|
})
|
|
|
|
(lib.mkIf cfg.opencode.enable {
|
|
programs.opencode = {
|
|
enable = true;
|
|
package = unstable.opencode;
|
|
};
|
|
})
|
|
|
|
# Apps — wire to underlying module options
|
|
(lib.mkIf cfg.firefox.enable {
|
|
firefoxApp.enable = true;
|
|
})
|
|
|
|
(lib.mkIf cfg.ghostty.enable {
|
|
ghosttyApp = {
|
|
enable = true;
|
|
fontFamily = cfg.ghostty.fontFamily;
|
|
enableLigatures = cfg.ghostty.enableLigatures;
|
|
};
|
|
})
|
|
|
|
(lib.mkIf cfg.helix.enable {
|
|
helixApp = {
|
|
enable = true;
|
|
themeOverrides = cfg.helix.themeOverrides;
|
|
};
|
|
})
|
|
|
|
(lib.mkIf cfg.stylePreview.enable {
|
|
stylePreview.enable = true;
|
|
})
|
|
|
|
(lib.mkIf cfg.json2nix.enable {
|
|
json2nix.enable = true;
|
|
})
|
|
];
|
|
}
|