merge programs.nix with common shared programs

This commit is contained in:
Nate Anderson 2026-02-17 17:12:57 -07:00
parent 241ecaf5ab
commit d6b317ce1c
13 changed files with 140 additions and 189 deletions

View File

@ -363,8 +363,8 @@ binds {
Mod+R { switch-preset-column-width; }
Mod+Shift+R { reset-window-height; }
// Fullscreen - consistent with sway/hyprland
Mod+F { fullscreen-window; }
Mod+Shift+F { maximize-column; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
// Floating toggle
Mod+Space { toggle-window-floating; }

View File

@ -17,15 +17,10 @@ let
in
{
imports = [
../../../shared/modules/apps/firefox/firefox.nix
../../../shared/modules/apps/ghostty.nix
../../../shared/modules/apps/helix.nix
../../../shared/modules/home-manager/programs.nix
../../../shared/modules/home-manager/git-autosync.nix
../../../shared/modules/home-manager/noctalia.nix
../../../shared/modules/home-manager/json2nix.nix
../../../shared/modules/home-manager/style-preview.nix
../niri/niri_home.nix
./programs.nix
];
home.username = userName;
@ -33,19 +28,9 @@ in
programs.home-manager.enable = true;
home.stateVersion = "25.05"; # Please read the comment before changing.
firefoxApp.enable = true;
ghosttyApp.enable = true;
helixApp.enable = true;
stylePreview.enable = true;
json2nix.enable = true;
sharedPrograms.enable = true;
fonts.fontconfig.enable = true;
# enable OpenCode here to generate Stylix theming (using unstable package)
programs.opencode = {
enable = true;
package = unstable.opencode;
};
# Stylix auto-theming - applies to all programs.<name>.enable apps
stylix = {
autoEnable = true;

View File

@ -1,41 +0,0 @@
# Stylix-themed program configurations
# All programs here are managed via programs.<name>.enable for Stylix auto-theming
{ config, pkgs, lib, ... }:
{
programs = {
#
# Terminals
#
# Ghostty config is in shared/modules/apps/ghostty.nix (enable with ghosttyApp.enable = true)
foot = {
enable = true;
# Stylix handles colors and fonts
settings = {
main = {
pad = "4x4";
};
};
};
#
# CLI Tools
#
bat.enable = true;
fzf = {
enable = true;
enableZshIntegration = true;
};
btop.enable = true;
mpv.enable = true;
#
# Launcher
#
wofi.enable = true;
};
}

View File

@ -317,8 +317,8 @@ binds {
Mod+R { switch-preset-column-width; }
Mod+Shift+R { reset-window-height; }
// Fullscreen
Mod+F { fullscreen-window; }
Mod+Shift+F { maximize-column; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
// Floating toggle
Mod+Space { toggle-window-floating; }

View File

@ -14,15 +14,10 @@ let
in
{
imports = [
../../../shared/modules/apps/firefox/firefox.nix
../../../shared/modules/apps/ghostty.nix
../../../shared/modules/apps/helix.nix
../../../shared/modules/home-manager/programs.nix
../../../shared/modules/home-manager/git-autosync.nix
../../../shared/modules/home-manager/noctalia.nix
../../../shared/modules/home-manager/json2nix.nix
../../../shared/modules/home-manager/style-preview.nix
../niri/niri_home.nix
./programs.nix
];
home.username = userName;
@ -30,11 +25,7 @@ in
programs.home-manager.enable = true;
home.stateVersion = "23.11"; # Please read the comment before changing.
firefoxApp.enable = true;
ghosttyApp.enable = true;
helixApp.enable = true;
stylePreview.enable = true;
json2nix.enable = true;
sharedPrograms.enable = true;
fonts.fontconfig.enable = true;
# Stylix auto-theming - applies to all programs.<name>.enable apps

View File

@ -1,41 +0,0 @@
# Stylix-themed program configurations
# All programs here are managed via programs.<name>.enable for Stylix auto-theming
{ config, pkgs, lib, ... }:
{
programs = {
#
# Terminals
#
# Ghostty config is in shared/modules/apps/ghostty.nix (enable with ghosttyApp.enable = true)
foot = {
enable = true;
# Stylix handles colors and fonts
settings = {
main = {
pad = "4x4";
};
};
};
#
# CLI Tools
#
bat.enable = true;
fzf = {
enable = true;
enableZshIntegration = true;
};
btop.enable = true;
mpv.enable = true;
#
# Launcher
#
wofi.enable = true;
};
}

View File

@ -402,8 +402,8 @@ binds {
Mod+R { switch-preset-column-width; }
Mod+Shift+R { reset-window-height; }
// Fullscreen - consistent with sway/hyprland
Mod+F { fullscreen-window; }
Mod+Shift+F { maximize-column; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
// Floating toggle
Mod+Space { toggle-window-floating; }

View File

@ -17,14 +17,9 @@ let
in
{
imports = [
../../../shared/modules/apps/firefox/firefox.nix
../../../shared/modules/apps/ghostty.nix
../../../shared/modules/apps/helix.nix
../../../shared/modules/home-manager/programs.nix
../../../shared/modules/home-manager/git-autosync.nix
../../../shared/modules/home-manager/noctalia.nix
../../../shared/modules/home-manager/json2nix.nix
../../../shared/modules/home-manager/style-preview.nix
../niri/niri_home.nix
../vpn-proxy/vpn-proxy.nix
];
@ -47,20 +42,9 @@ in
};
# Enable shared modules
firefoxApp.enable = true;
ghosttyApp.enable = true;
helixApp.enable = true;
sharedPrograms.enable = true;
stylePreview.enable = true;
json2nix.enable = true;
fonts.fontconfig.enable = true;
# OpenCode with Stylix theming (using unstable package)
programs.opencode = {
enable = true;
package = unstable.opencode;
};
# Enable VPN proxy script
vpnProxy.enable = true;
@ -144,6 +128,7 @@ in
neofetch
unzip
nmap
file
#
# Photo / Video
@ -166,7 +151,6 @@ in
# Other
#
chromium
keepassxc
obs-studio
gnome-disk-utility
hugo

View File

@ -358,8 +358,8 @@ binds {
Mod+R { switch-preset-column-width; }
Mod+Shift+R { reset-window-height; }
// Fullscreen - consistent with sway/hyprland
Mod+F { fullscreen-window; }
Mod+Shift+F { maximize-column; }
Mod+F { maximize-column; }
Mod+Shift+F { fullscreen-window; }
// Floating toggle
Mod+Space { toggle-window-floating; }

View File

@ -7,14 +7,9 @@
in
{
imports = [
../../../shared/modules/apps/firefox/firefox.nix
../../../shared/modules/apps/ghostty.nix
../../../shared/modules/apps/helix.nix
../../../shared/modules/home-manager/programs.nix
../../../shared/modules/home-manager/git-autosync.nix
../../../shared/modules/home-manager/noctalia.nix
../../../shared/modules/home-manager/json2nix.nix
../../../shared/modules/home-manager/style-preview.nix
../niri/niri_home.nix
];
@ -28,20 +23,9 @@
stylix.autoEnable = true;
# Enable shared modules
firefoxApp.enable = true;
ghosttyApp.enable = true;
helixApp.enable = true;
sharedPrograms.enable = true;
stylePreview.enable = true;
json2nix.enable = true;
fonts.fontconfig.enable = true;
# OpenCode with Stylix theming (using unstable package)
programs.opencode = {
enable = true;
package = unstable.opencode;
};
# Git autosync for star-command
services.git-autosync = {
enable = true;

View File

@ -1,21 +0,0 @@
[General]
ConfigVersion=2
[Browser]
CustomProxyLocation=
Enabled=true
[GUI]
ApplicationTheme=dark
TrayIconAppearance=monochrome-light
[KeeShare]
Active="<?xml version=\"1.0\"?><KeeShare><Active/></KeeShare>\n"
Own="<?xml version=\"1.0\"?><KeeShare><PrivateKey>MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8OYI/I2otsVMdam8HqfnEYa6emzV2EzXAST+1A4IOC8ojOJdGbhKbvScu5MwgPAWDRiS0yIr6fjNHpTfHCMqY/K8+UsaubHIAjVVR5SDrBvAroTfts/oIqFcW8ab9DYMPpopaxnXh25gGrmEBb33GzuL2LJ4kXz40BEYjsOSffOM83/RstRhmXaV86nPmtbswyLwSEGsPZZliMIgMEoT/Y2qcjfwRJIRIEWNybmlgrHWAzVj5sr00KQhfTRo6dQG/yBMoElYGNvKSTmQDy7WVR+Mh+rYPKOwb2v8D7UrPDKd1n+GheEBKpvE8mDcSg/vGlXOHirOBdtuk+/xhqAqxAgMBAAECggEAETzLs/WN0+5r4q3sdM1juCY2pC7UTWJtUeqYtilClVUOEiisw0CcXVKMI+wZ0jqSSgHipa3B+zZogtSw0Cj6yNpHQD67aZ45LdoY/ggs+hPSFeTMpu0MZmjoROEk6QLTmwYmSzGRT88DqVpPPEmWFrQRWU3KaSFRzy4JsFtoVz9OYeFw37d9pG8BYeruqE7kx+uzCYWRjQXrjmofFpbxGWhkIUcvbVZ8wUVso4gT4JxAQks6nryL5M9NXefU+x/e1Rkopa5aRG/H0dPMYX/8uV2lsr/AW4+kaMPrKoAsPUhErrrJDwNL2zCmcAzNgsthUo/6yLLKlnk+THAGnruEawKBgQDDG9qpvR+OCQrV1rUiX2JmomkMPKIkAf4xLFNAdOwnPMRnq1mRCn0OJmmPmRF+I5fM/64tFzGK/KD5fxll3ybN+mpA540ho9Gvk89AbILXmp9MQMEh92H5tf4/q1EKgsFjMM0aplg2zupsimyi4LuI6tCBUhWun5X5yxUsbyBW2wKBgQD296WmxLJEQJcHfHN/RYBs9HAKCWZTn8kLgoFgCxTHHTB+i5N9yug78N3LmsYUBYwbshpVewxcv6xrfxQJ/igB+zXAgDAghhvbqw+kAiFo+OapchX+Yvm6LzHdnpOIUEDcVhP/IPyGwCNqL3DYhX0A7Qudk4/g73MStAS5aHucYwKBgG4/RweyvincIitC74dErq2gCAvKFzSRi7jtev1pFCf3xmNuB2ZVruRYAD4MGD5Wjmhf8WO5P11x8uQIVamitqKdZXzXWoAvuUSlGO8mYajCzlCgJoGy78HSfKAthdWSnQQXh04PwLj3oq9CaLCAnHd5d+gbIfVSZ8SGZKh/Ap8RAoGADF8dgjwqPfcKWcqnMoH1y/92uVn9MUU42gXAm2ISuWLB8iTlz5Bhj9ciFTf8ojYg7aY/YXbXiLHlXkEwbMu5j1fZOnpxbr+pF5j7IJkmuU52p5had7LXlbcVhWeTNmnmxeLd/5LUc5+eZoxX19DgETLOuScSNw9nsVEpR2xvfMcCgYEAgR4j9M8Nq088dA5Z3VGGxJ/l3GI+gChogZBRmyG48GuBygMVujJ5Kowqid0a3ImAnvxa8BGvEJlinmAsKmyi1UsmXMCLzOWO+jRNuIRoscFk1m2D3IfG43NnjoOhr9aJZHga8DHd1FXNPTqT74jkePHlDzpGOaHXQUN5CyGNouA=</PrivateKey><PublicKey><Signer>nate</Signer><Key>MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8OYI/I2otsVMdam8HqfnEYa6emzV2EzXAST+1A4IOC8ojOJdGbhKbvScu5MwgPAWDRiS0yIr6fjNHpTfHCMqY/K8+UsaubHIAjVVR5SDrBvAroTfts/oIqFcW8ab9DYMPpopaxnXh25gGrmEBb33GzuL2LJ4kXz40BEYjsOSffOM83/RstRhmXaV86nPmtbswyLwSEGsPZZliMIgMEoT/Y2qcjfwRJIRIEWNybmlgrHWAzVj5sr00KQhfTRo6dQG/yBMoElYGNvKSTmQDy7WVR+Mh+rYPKOwb2v8D7UrPDKd1n+GheEBKpvE8mDcSg/vGlXOHirOBdtuk+/xhqAqxAgMBAAECggEAETzLs/WN0+5r4q3sdM1juCY2pC7UTWJtUeqYtilClVUOEiisw0CcXVKMI+wZ0jqSSgHipa3B+zZogtSw0Cj6yNpHQD67aZ45LdoY/ggs+hPSFeTMpu0MZmjoROEk6QLTmwYmSzGRT88DqVpPPEmWFrQRWU3KaSFRzy4JsFtoVz9OYeFw37d9pG8BYeruqE7kx+uzCYWRjQXrjmofFpbxGWhkIUcvbVZ8wUVso4gT4JxAQks6nryL5M9NXefU+x/e1Rkopa5aRG/H0dPMYX/8uV2lsr/AW4+kaMPrKoAsPUhErrrJDwNL2zCmcAzNgsthUo/6yLLKlnk+THAGnruEawKBgQDDG9qpvR+OCQrV1rUiX2JmomkMPKIkAf4xLFNAdOwnPMRnq1mRCn0OJmmPmRF+I5fM/64tFzGK/KD5fxll3ybN+mpA540ho9Gvk89AbILXmp9MQMEh92H5tf4/q1EKgsFjMM0aplg2zupsimyi4LuI6tCBUhWun5X5yxUsbyBW2wKBgQD296WmxLJEQJcHfHN/RYBs9HAKCWZTn8kLgoFgCxTHHTB+i5N9yug78N3LmsYUBYwbshpVewxcv6xrfxQJ/igB+zXAgDAghhvbqw+kAiFo+OapchX+Yvm6LzHdnpOIUEDcVhP/IPyGwCNqL3DYhX0A7Qudk4/g73MStAS5aHucYwKBgG4/RweyvincIitC74dErq2gCAvKFzSRi7jtev1pFCf3xmNuB2ZVruRYAD4MGD5Wjmhf8WO5P11x8uQIVamitqKdZXzXWoAvuUSlGO8mYajCzlCgJoGy78HSfKAthdWSnQQXh04PwLj3oq9CaLCAnHd5d+gbIfVSZ8SGZKh/Ap8RAoGADF8dgjwqPfcKWcqnMoH1y/92uVn9MUU42gXAm2ISuWLB8iTlz5Bhj9ciFTf8ojYg7aY/YXbXiLHlXkEwbMu5j1fZOnpxbr+pF5j7IJkmuU52p5had7LXlbcVhWeTNmnmxeLd/5LUc5+eZoxX19DgETLOuScSNw9nsVEpR2xvfMcCgYEAgR4j9M8Nq088dA5Z3VGGxJ/l3GI+gChogZBRmyG48GuBygMVujJ5Kowqid0a3ImAnvxa8BGvEJlinmAsKmyi1UsmXMCLzOWO+jRNuIRoscFk1m2D3IfG43NnjoOhr9aJZHga8DHd1FXNPTqT74jkePHlDzpGOaHXQUN5CyGNouA=</Key></PublicKey></KeeShare>\n"
QuietSuccess=true
[PasswordGenerator]
AdditionalChars=
ExcludedChars=
Length=25
SpecialChars=false

View File

@ -161,7 +161,7 @@ in
# Selection
j = "join_selections";
J = "yank"
J = "yank_joined";
C-s = "split_selection_on_newline";
C-minus = "merge_selections";
C-_ = "merge_consecutive_selections";

View File

@ -1,31 +1,87 @@
{config, lib, ...}:
{
inputs,
config,
lib,
...
}:
let
cfg = config.sharedPrograms;
unstable = import inputs.nixpkgs-unstable {
system = "x86_64-linux";
config.allowUnfree = true;
};
in
{
options.sharedPrograms = {
enable = lib.mkEnableOption "enable all basic programs with Stylix auto-theming";
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)";
foot.enable = lib.mkEnableOption "enable foot (terminal emulator)";
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
# When sharedPrograms.enable is true, enable all programs by default
(lib.mkIf cfg.enable {
sharedPrograms.bat.enable = lib.mkDefault true;
sharedPrograms.fzf.enable = lib.mkDefault true;
sharedPrograms.btop.enable = lib.mkDefault true;
sharedPrograms.mpv.enable = lib.mkDefault true;
sharedPrograms.wofi.enable = lib.mkDefault true;
sharedPrograms.foot.enable = lib.mkDefault true;
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;
};
})
# Individual program configurations
# CLI tools
(lib.mkIf cfg.bat.enable {
programs.bat.enable = true;
})
@ -49,15 +105,69 @@ in
programs.wofi.enable = true;
})
(lib.mkIf cfg.foot.enable {
programs.foot = {
(lib.mkIf cfg.keepassxc.enable {
programs.keepassxc = {
enable = true;
autostart = false;
settings = {
main = {
pad = "4x4";
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;
})
];
}