feat: seperate applicatoins

This commit is contained in:
Jet 2026-06-03 19:29:33 -07:00
parent 515f422f03
commit 5bc30053d1
No known key found for this signature in database
9 changed files with 220 additions and 130 deletions

View file

@ -1,4 +1,9 @@
{ lib, pkgs, ... }:
{
hostname,
lib,
pkgs,
...
}:
let
firefoxApplicationId = "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
@ -63,7 +68,7 @@ let
});
in
{
home.packages = [ torBrowser ];
home.packages = lib.optionals (hostname == "framework") [ torBrowser ];
programs.zen-browser = {
enable = true;
@ -179,13 +184,21 @@ in
force = true;
engines = {
"Google Web" = {
urls = [ { template = "https://www.google.com/search?q={searchTerms}&udm=14&pws=0&filter=0&nfpr=1&hl=en&gl=US&safe=active"; } ];
urls = [
{
template = "https://www.google.com/search?q={searchTerms}&udm=14&pws=0&filter=0&nfpr=1&hl=en&gl=US&safe=active";
}
];
definedAliases = [
"@g"
];
};
"Google Basic" = {
urls = [ { template = "https://www.google.com/search?gbv=1&q={searchTerms}&udm=14&pws=0&filter=0&nfpr=1&hl=en&gl=US&safe=active"; } ];
urls = [
{
template = "https://www.google.com/search?gbv=1&q={searchTerms}&udm=14&pws=0&filter=0&nfpr=1&hl=en&gl=US&safe=active";
}
];
definedAliases = [
"@gb"
"@gnj"

View file

@ -18,7 +18,9 @@ let
"-${osConfig.age.secrets."nasa-api-env".path}"
else
"-%h/.config/nasa-api.env";
chatDesktopId = if hostname == "framework-work" then "slack.desktop" else "vesktop.desktop";
isWork = hostname == "framework-work";
isPersonal = hostname == "framework";
chatDesktopId = if isWork then "slack.desktop" else "vesktop.desktop";
favoriteApps = [
"zen-beta.desktop"
"com.mitchellh.ghostty.desktop"
@ -26,13 +28,13 @@ let
"betterbird.desktop"
]
++ (
if hostname == "framework-work" then
[ ]
else
if isPersonal then
[
"signal.desktop"
"zulip.desktop"
]
else
[ ]
);
autoMoveApplications = [
"zen-beta.desktop:1"
@ -41,32 +43,38 @@ let
"betterbird.desktop:4"
]
++ (
if hostname == "framework-work" then
[ ]
else
if isPersonal then
[
"signal.desktop:5"
"zulip.desktop:6"
]
else
[ ]
);
autostartEntries = [
"${homeLib.zenStartup}/share/applications/zen-startup.desktop"
"${homeLib.ghosttyZellijStartup}/share/applications/ghostty-zellij-startup.desktop"
]
++ (
if hostname == "framework-work" then
if isWork then
[
"${pkgs.slack}/share/applications/slack.desktop"
"${homeLib.betterbirdStartup}/share/applications/betterbird-startup.desktop"
]
else
else if isPersonal then
[
"${homeLib.vesktopStartup}/share/applications/vesktop-startup.desktop"
"${homeLib.betterbirdStartup}/share/applications/betterbird-startup.desktop"
"${homeLib.signalStartup}/share/applications/signal-startup.desktop"
"${homeLib.zulipStartup}/share/applications/zulip-startup.desktop"
]
else
[ ]
);
personalEnabledExtensions = pkgs.lib.optionals isPersonal [
"tailscale-gnome-qs@tailscale-qs.github.io"
"evil-bit-toggle@jetpham.github.com"
];
vlcDesktop = "vlc.desktop";
vlcVideoMimeTypes = [
"application/mxf"
@ -121,6 +129,18 @@ let
"x-content/video-svcd"
"x-content/video-vcd"
];
personalMimeDefaults =
pkgs.lib.optionalAttrs isPersonal {
"x-content/image-dcf" = "net.damonlynch.RapidPhotoDownloader.desktop";
}
// pkgs.lib.optionalAttrs isPersonal (
builtins.listToAttrs (
map (mimeType: {
name = mimeType;
value = vlcDesktop;
}) vlcVideoMimeTypes
)
);
in
{
@ -146,7 +166,7 @@ in
autorun-never = false;
autorun-x-content-ignore = [ ];
autorun-x-content-open-folder = [ ];
autorun-x-content-start-app = [ "x-content/image-dcf" ];
autorun-x-content-start-app = pkgs.lib.optionals isPersonal [ "x-content/image-dcf" ];
};
"org/gnome/settings-daemon/plugins/power" = {
sleep-inactive-ac-type = "nothing";
@ -183,14 +203,13 @@ in
"wifiqrcode@glerro.pm.me"
"system-monitor-next@paradoxxx.zero.gmail.com"
"clipboard-indicator@tudmotu.com"
"tailscale-gnome-qs@tailscale-qs.github.io"
"auto-move-windows@gnome-shell-extensions.gcampax.github.com"
"gnome-shell-extension-maximized-by-default@stiggimy.github.com"
"no-titlebar-when-maximized@alec.ninja"
"opencode-token-usage@jetpham.github.com"
"evil-bit-toggle@jetpham.github.com"
"reduced-motion-toggle@jetpham.github.com"
];
]
++ personalEnabledExtensions;
favorite-apps = favoriteApps;
};
"org/gnome/shell/extensions/auto-move-windows" = {
@ -305,7 +324,7 @@ in
Install.WantedBy = [ "timers.target" ];
};
xdg.desktopEntries."net.damonlynch.RapidPhotoDownloader" = {
xdg.desktopEntries."net.damonlynch.RapidPhotoDownloader" = pkgs.lib.mkIf isPersonal {
name = "Rapid Photo Downloader";
genericName = "Photo Downloader";
comment = "Download, rename, and back up photos and videos from cameras and cards";
@ -333,7 +352,6 @@ in
"x-scheme-handler/unknown" = "zen-beta.desktop";
"x-scheme-handler/mailto" = "betterbird.desktop";
"inode/directory" = "org.gnome.Nautilus.desktop";
"x-content/image-dcf" = "net.damonlynch.RapidPhotoDownloader.desktop";
"image/x-canon-cr2" = "gimp.desktop";
"application/zip" = "org.gnome.FileRoller.desktop";
"application/x-tar" = "org.gnome.FileRoller.desktop";
@ -346,11 +364,6 @@ in
"application/x-rar" = "org.gnome.FileRoller.desktop";
"application/x-rar-compressed" = "org.gnome.FileRoller.desktop";
}
// builtins.listToAttrs (
map (mimeType: {
name = mimeType;
value = vlcDesktop;
}) vlcVideoMimeTypes
);
// personalMimeDefaults;
};
}

View file

@ -1,4 +1,9 @@
{ homeLib, pkgs, ... }:
{
homeLib,
hostname,
pkgs,
...
}:
let
chromeDevtoolsMcpShell = pkgs.runCommand "chrome-devtools-mcp-shell-path" { } ''
@ -41,12 +46,12 @@ in
mcp.linear = {
type = "remote";
url = "https://mcp.linear.app/mcp";
enabled = true;
enabled = hostname == "framework-work";
};
mcp.heytea = {
type = "remote";
url = "https://mcp.heytea.dev/mcp";
enabled = true;
enabled = hostname == "framework";
};
mcp.cloudflare-api = {
type = "remote";

View file

@ -2,10 +2,14 @@
inputs,
pkgs,
homeLib,
hostname,
...
}:
let
isWork = hostname == "framework-work";
isPersonal = hostname == "framework";
evilBitCtl = pkgs.writeShellApplication {
name = "evil-bitctl";
runtimeInputs = [
@ -118,10 +122,8 @@ let
runHook postInstall
'';
};
in
{
home.packages = with pkgs; [
sharedPackages = with pkgs; [
bat
bun
claude-code
@ -153,10 +155,8 @@ in
typescript-language-server
nil
element-desktop
file-roller
font-manager
foliate
(gimp-with-plugins.override {
plugins = with gimpPlugins; [
gmic
@ -166,26 +166,11 @@ in
google-chrome
handbrake
inkscape
kdePackages.kdenlive
libreoffice
logseq
nufraw-thumbnailer
obs-studio
pavucontrol
prismlauncher
qpwgraph
signal-desktop
slack
vesktop
vlc
zulip
linphone
lmstudio
homeLib.betterbird
darktable
digikam
exiftool
rapid-photo-downloader
brightnessctl
nautilus
playerctl
@ -200,12 +185,43 @@ in
gnomeExtensions.maximized-by-default-actually-reborn
gnomeExtensions.no-titlebar-when-maximized
gnomeExtensions.system-monitor-next
gnomeExtensions.tailscale-qs
gnomeExtensions.wifi-qrcode
evilBitToggleExtension
opencodeTokenUsageExtension
reducedMotionToggleExtension
nerd-fonts.commit-mono
];
workPackages = with pkgs; [
slack
];
personalPackages = with pkgs; [
element-desktop
foliate
kdePackages.kdenlive
logseq
nufraw-thumbnailer
obs-studio
prismlauncher
signal-desktop
vesktop
vlc
zulip
linphone
darktable
digikam
exiftool
rapid-photo-downloader
gnomeExtensions.tailscale-qs
evilBitToggleExtension
];
in
{
home.packages =
sharedPackages
++ pkgs.lib.optionals isWork workPackages
++ pkgs.lib.optionals isPersonal personalPackages;
}

View file

@ -1,6 +1,14 @@
{ config, pkgs, ... }:
{
config,
hostname,
lib,
pkgs,
...
}:
let
isPersonal = hostname == "framework";
configureQbittorrentTailscale = pkgs.writeShellApplication {
name = "configure-qbittorrent-tailscale";
runtimeInputs = [
@ -24,6 +32,7 @@ let
postBuild = ''
rm -f "$out/bin/qbittorrent"
# Enforce qBittorrent's bind settings, then add a systemd interface allowlist.
# RestrictNetworkInterfaces works for transient services, not transient scopes.
cat > "$out/bin/qbittorrent" <<'EOF'
#!${pkgs.runtimeShell}
set -eu
@ -37,7 +46,6 @@ let
exec ${pkgs.systemd}/bin/systemd-run \
--user \
--scope \
--quiet \
--collect \
--property='RestrictNetworkInterfaces=lo tailscale0' \
@ -57,10 +65,27 @@ let
};
in
{
lib.mkIf isPersonal {
home.activation.configureQbittorrentTailscale = config.lib.dag.entryAfter [ "writeBoundary" ] ''
${configureQbittorrentTailscale}/bin/configure-qbittorrent-tailscale
'';
home.file.".local/share/applications/org.qbittorrent.qBittorrent.desktop".text = ''
[Desktop Entry]
Categories=Network;FileTransfer;P2P;Qt;
Exec=${qbittorrentTailscale}/bin/qbittorrent %U
GenericName=BitTorrent client
Comment=Download and share files over BitTorrent
Icon=qbittorrent
MimeType=application/x-bittorrent;x-scheme-handler/magnet;
Name=qBittorrent
Terminal=false
Type=Application
StartupNotify=false
StartupWMClass=qbittorrent
Keywords=bittorrent;torrent;magnet;download;p2p;
SingleMainWindow=true
'';
home.packages = [ qbittorrentTailscale ];
}

View file

@ -57,6 +57,8 @@ let
"${pkgs.wl-clipboard}/bin/wl-paste --type image --watch ${pkgs.cliphist}/bin/cliphist store"
"${pkgs.swayidle}/bin/swayidle -w timeout 300 '${lockCommand}' before-sleep '${lockCommand}'"
];
isWork = hostname == "framework-work";
isPersonal = hostname == "framework";
workStartup = [
"${config.programs.zen-browser.package}/bin/zen-beta"
"${pkgs.ghostty}/bin/ghostty --fullscreen=true -e ${homeLib.zellijPersistentSession}/bin/zellij-persistent-session"
@ -71,7 +73,13 @@ let
"${pkgs.signal-desktop}/bin/signal-desktop --start-fullscreen"
"${pkgs.zulip}/bin/zulip --start-fullscreen"
];
appStartup = if hostname == "framework-work" then workStartup else personalStartup;
appStartup =
if isWork then
workStartup
else if isPersonal then
personalStartup
else
[ ];
in
{