Compare commits
12 Commits
e8f35bf283
...
73aab2452e
| Author | SHA1 | Date | |
|---|---|---|---|
| 73aab2452e | |||
| 109fdb4672 | |||
| 6281f9ea6f | |||
| edfb269308 | |||
| eed84ec64c | |||
| ae7d017d2b | |||
| e17b21ab69 | |||
| 59d29c6cea | |||
| 29792a1307 | |||
| b86df062df | |||
| b02be43aa0 | |||
| 6d19db6577 |
@@ -16,7 +16,7 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
workspace = [
|
workspace = [
|
||||||
"special:youtube, on-created-empty:uwsm app -- firefox -P YouTube --name youtube"
|
"special:youtube, on-created-empty:uwsm app -- env TRIDACTYL_NEWTAB=https://youtube.com firefox -P YouTube --name youtube"
|
||||||
];
|
];
|
||||||
|
|
||||||
windowrulev2 = [
|
windowrulev2 = [
|
||||||
@@ -38,6 +38,9 @@
|
|||||||
bind J tabnext
|
bind J tabnext
|
||||||
bind K tabprev
|
bind K tabprev
|
||||||
unbind <C-e>
|
unbind <C-e>
|
||||||
|
|
||||||
|
" Set newtab from environment variable if available (provided by native messenger)
|
||||||
|
js tri.native.run("printenv TRIDACTYL_NEWTAB").then(r => { if (r.stdout.trim()) tri.config.set("newtab", r.stdout.trim()) })
|
||||||
'';
|
'';
|
||||||
|
|
||||||
programs.firefox = {
|
programs.firefox = {
|
||||||
@@ -49,7 +52,12 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
profiles = {
|
profiles = {
|
||||||
youtube = import ./profiles/youtube.nix {inherit pkgs myConfig;};
|
youtube = import ./profiles/web-app.nix {
|
||||||
|
inherit pkgs myConfig;
|
||||||
|
id = 1;
|
||||||
|
name = "YouTube";
|
||||||
|
url = "https://youtube.com";
|
||||||
|
};
|
||||||
hakase = {
|
hakase = {
|
||||||
search.force = true;
|
search.force = true;
|
||||||
isDefault = true;
|
isDefault = true;
|
||||||
|
|||||||
@@ -0,0 +1,173 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
myConfig,
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
url,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
inherit id name;
|
||||||
|
search.force = true;
|
||||||
|
search.default = "ddg";
|
||||||
|
extensions.force = true;
|
||||||
|
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||||
|
ublock-origin
|
||||||
|
bitwarden
|
||||||
|
tridactyl
|
||||||
|
new-tab-override
|
||||||
|
];
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
# --- New Tab Override ---
|
||||||
|
"extensions.newtaboverride@agenedia.com.url" = url;
|
||||||
|
"extensions.newtaboverride@agenedia.com.type" = 1; # URL mode
|
||||||
|
|
||||||
|
# --- Privacy & Hardening ---
|
||||||
|
"browser.contentblocking.category" = "strict";
|
||||||
|
"privacy.trackingprotection.enabled" = true;
|
||||||
|
"privacy.resistFingerprinting" = true; # Note: Spoofs timezone and caps FPS to 60
|
||||||
|
"geo.enabled" = false;
|
||||||
|
"media.peerconnection.enabled" = false; # Prevents WebRTC IP leaks
|
||||||
|
"network.dns.disablePrefetch" = true;
|
||||||
|
"network.prefetch-next" = false;
|
||||||
|
|
||||||
|
# --- NixOS / Hyprland Integration ---
|
||||||
|
"widget.use-xdg-desktop-portal.file-picker" = 1; # Use native file picker
|
||||||
|
|
||||||
|
# --- UI & Behavior ---
|
||||||
|
"browser.compactmode.show" = true;
|
||||||
|
"browser.tabs.closeWindowWithLastTab" = false;
|
||||||
|
"extensions.pocket.enabled" = false;
|
||||||
|
"extensions.screenshots.disabled" = true;
|
||||||
|
"browser.topsites.contile.enabled" = false;
|
||||||
|
"browser.formfill.enable" = false;
|
||||||
|
"browser.search.suggest.enabled" = false;
|
||||||
|
"browser.search.suggest.enabled.private" = false;
|
||||||
|
"browser.urlbar.suggest.searches" = false;
|
||||||
|
"browser.urlbar.showSearchSuggestionsFirst" = false;
|
||||||
|
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
|
||||||
|
"browser.newtabpage.activity-stream.feeds.snippets" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includeDownloads" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includeVisited" = false;
|
||||||
|
"browser.newtabpage.activity-stream.showSponsored" = false;
|
||||||
|
"browser.newtabpage.activity-stream.system.showSponsored" = false;
|
||||||
|
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
||||||
|
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
||||||
|
"extensions.autoDisableScopes" = 0; # Enable extensions by default
|
||||||
|
|
||||||
|
# --- Homepage & Navigation ---
|
||||||
|
"browser.startup.page" = 1; # Always open the homepage
|
||||||
|
"browser.startup.homepage" = url;
|
||||||
|
"browser.newtab.url" = url; # Try to set newtab to homepage
|
||||||
|
"browser.sessionstore.resume_from_crash" = false; # Always start fresh
|
||||||
|
"browser.sessionstore.max_tabs_undo" = 0; # Disable undo close tab
|
||||||
|
|
||||||
|
# --- DNS over HTTPS (Quad9) ---
|
||||||
|
"network.trr.mode" = 2; # Use DoH with system fallback
|
||||||
|
"network.trr.uri" = "https://dns.quad9.net/dns-query";
|
||||||
|
};
|
||||||
|
|
||||||
|
userChrome = ''
|
||||||
|
/* --- Autohide Entire Toolbox (Tabs + Address Bar) --- */
|
||||||
|
/* Adapted from MrOtherGuy's autohide_main_toolbar.css */
|
||||||
|
|
||||||
|
:root{
|
||||||
|
/* Height of Tabs + Nav Bar approx 80px */
|
||||||
|
--uc-navbar-transform: -85px;
|
||||||
|
--uc-autohide-toolbar-delay: 0.1s;
|
||||||
|
--uc-autohide-toolbar-duration: 200ms;
|
||||||
|
}
|
||||||
|
:root[uidensity="compact"]{ --uc-navbar-transform: -70px }
|
||||||
|
|
||||||
|
#navigator-toolbox > div{ display: contents; }
|
||||||
|
|
||||||
|
/* Apply transform to TabsToolbar AND Nav-bar */
|
||||||
|
:root[sessionrestored] :where(#nav-bar,#PersonalToolbar,#TabsToolbar,#tab-notification-deck,.global-notificationbox,#notifications-toolbar){
|
||||||
|
transform: translateY(var(--uc-navbar-transform))
|
||||||
|
}
|
||||||
|
|
||||||
|
:root:is([customizing],[chromehidden*="toolbar"]) :where(#nav-bar,#PersonalToolbar,#TabsToolbar,#tab-notification-deck,.global-notificationbox,#notifications-toolbar){
|
||||||
|
transform: none !important;
|
||||||
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide styles for Nav-Bar AND TabsToolbar */
|
||||||
|
:where(#nav-bar,#TabsToolbar):not([customizing]){
|
||||||
|
opacity: 0;
|
||||||
|
transition: transform var(--uc-autohide-toolbar-duration) ease var(--uc-autohide-toolbar-delay), opacity var(--uc-autohide-toolbar-duration) ease var(--uc-autohide-toolbar-delay) !important;
|
||||||
|
position: relative;
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#navigator-toolbox,
|
||||||
|
#sidebar-box,
|
||||||
|
#sidebar-main,
|
||||||
|
#sidebar-splitter,
|
||||||
|
#tabbrowser-tabbox{
|
||||||
|
z-index: auto !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show when toolbox is focused or hovered */
|
||||||
|
#navigator-toolbox:focus-within > .browser-toolbar,
|
||||||
|
.browser-titlebar:hover ~ :is(#nav-bar,#PersonalToolbar,#TabsToolbar),
|
||||||
|
#nav-bar:hover,
|
||||||
|
#TabsToolbar:hover,
|
||||||
|
#nav-bar:hover + #PersonalToolbar{
|
||||||
|
transform: translateY(0);
|
||||||
|
opacity: 1;
|
||||||
|
transition-duration: var(--uc-autohide-toolbar-duration), var(--uc-autohide-toolbar-duration) !important;
|
||||||
|
transition-delay: 0s !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure popups still work (URL bar) */
|
||||||
|
:root[sessionrestored] #urlbar[popover]{
|
||||||
|
opacity: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
transition: transform var(--uc-autohide-toolbar-duration) ease var(--uc-autohide-toolbar-delay), opacity var(--uc-autohide-toolbar-duration) ease var(--uc-autohide-toolbar-delay);
|
||||||
|
transform: translateY(var(--uc-navbar-transform));
|
||||||
|
}
|
||||||
|
#mainPopupSet:has(> [panelopen]:not(#ask-chat-shortcuts,#selection-shortcut-action-panel,#chat-shortcuts-options-panel,#tab-preview-panel)) ~ toolbox #urlbar[popover],
|
||||||
|
.browser-titlebar:is(:hover,:focus-within) ~ #nav-bar #urlbar[popover],
|
||||||
|
#nav-bar:is(:hover,:focus-within) #urlbar[popover],
|
||||||
|
#urlbar-container > #urlbar[popover]:is([focused],[open]){
|
||||||
|
opacity: 1;
|
||||||
|
pointer-events: auto;
|
||||||
|
transition-delay: 0ms;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
:where(:root[sessionrestored]) #urlbar-container > #urlbar[popover]:is([focused],[open]){
|
||||||
|
transition-duration: 100ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- CRITICAL FIX: Trigger Zone --- */
|
||||||
|
/* Since we hide EVERYTHING, we need a hitbox at the top of the screen */
|
||||||
|
#navigator-toolbox::after {
|
||||||
|
content: "";
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 20px; /* Generous hit target */
|
||||||
|
z-index: 10000;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* When hitbox is hovered, reveal bars */
|
||||||
|
#navigator-toolbox:hover :where(#nav-bar,#PersonalToolbar,#TabsToolbar) {
|
||||||
|
transform: translateY(0) !important;
|
||||||
|
opacity: 1 !important;
|
||||||
|
transition-delay: 0s !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Move up the content view to fill the gap */
|
||||||
|
:root[sessionrestored]:not([chromehidden~="toolbar"]) > body > #browser{
|
||||||
|
margin-top: var(--uc-navbar-transform);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fix Titlebar and Bookmarks */
|
||||||
|
#titlebar { appearance: none !important; }
|
||||||
|
#PersonalToolbar { visibility: collapse !important; }
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -60,61 +60,44 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
userChrome = ''
|
userChrome = ''
|
||||||
/* --- Floating Autohide Toolbox (Tabs Only) --- */
|
/* Hide the Navigation Bar by default */
|
||||||
|
#nav-bar {
|
||||||
/* Take toolbox out of the document flow so web content is 100% height */
|
height: 0px !important;
|
||||||
#navigator-toolbox {
|
min-height: 0px !important;
|
||||||
position: fixed !important;
|
overflow: hidden !important;
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
z-index: 9999 !important;
|
|
||||||
background-color: var(--toolbar-bgcolor, #1c1b22) !important;
|
|
||||||
|
|
||||||
/* Start hidden */
|
|
||||||
transform: translateY(-100%) !important;
|
|
||||||
opacity: 0 !important;
|
opacity: 0 !important;
|
||||||
transition: transform 0.2s ease, opacity 0.2s ease !important;
|
transition: height 0.3s ease, opacity 0.3s ease !important;
|
||||||
|
z-index: 100 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Trigger zone */
|
/* Show the Navigation Bar on hover over the navigator toolbox */
|
||||||
#navigator-toolbox::after {
|
#navigator-toolbox:hover #nav-bar,
|
||||||
content: "";
|
#nav-bar:focus-within {
|
||||||
position: absolute;
|
height: 40px !important; /* Adjust based on your density settings */
|
||||||
top: 100%;
|
min-height: 40px !important;
|
||||||
left: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 10px;
|
|
||||||
z-index: 10000 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Reveal when hovering */
|
|
||||||
#navigator-toolbox:hover {
|
|
||||||
transform: translateY(0) !important;
|
|
||||||
opacity: 1 !important;
|
opacity: 1 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --- Hide specific bars --- */
|
/* Auto-hide Tabs Toolbar */
|
||||||
|
#TabsToolbar {
|
||||||
/* Hide Navigation Bar (Address Bar) COMPLETELY */
|
|
||||||
#nav-bar {
|
|
||||||
visibility: collapse !important;
|
|
||||||
height: 0px !important;
|
height: 0px !important;
|
||||||
min-height: 0px !important;
|
min-height: 0px !important;
|
||||||
padding: 0 !important;
|
overflow: hidden !important;
|
||||||
margin: 0 !important;
|
opacity: 0 !important;
|
||||||
|
transition: height 0.3s ease, opacity 0.3s ease !important;
|
||||||
|
z-index: 100 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show Tabs Toolbar on hover over the navigator toolbox */
|
||||||
|
#navigator-toolbox:hover #TabsToolbar {
|
||||||
|
height: 30px !important; /* Adjust based on your tab height preference */
|
||||||
|
min-height: 30px !important;
|
||||||
|
opacity: 1 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hide Bookmarks Toolbar */
|
/* Hide Bookmarks Toolbar */
|
||||||
#PersonalToolbar { visibility: collapse !important; }
|
#PersonalToolbar {
|
||||||
|
visibility: collapse !important;
|
||||||
/* Hide Titlebar */
|
|
||||||
#titlebar { appearance: none !important; }
|
|
||||||
|
|
||||||
/* Ensure TabsToolbar looks okay on its own */
|
|
||||||
#TabsToolbar {
|
|
||||||
border: none !important;
|
|
||||||
background: transparent !important;
|
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [imv];
|
||||||
|
|
||||||
|
xdg.mimeApps = {
|
||||||
|
enable = true;
|
||||||
|
defaultApplications = {
|
||||||
|
"image/png" = "imv.desktop";
|
||||||
|
"image/jpeg" = "imv.desktop";
|
||||||
|
"image/gif" = "imv.desktop";
|
||||||
|
"image/webp" = "imv.desktop";
|
||||||
|
"image/bmp" = "imv.desktop";
|
||||||
|
"image/svg+xml" = "imv.desktop";
|
||||||
|
"image/tiff" = "imv.desktop";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland.settings.windowrulev2 = [
|
||||||
|
# --- IMAGE VIEWER (IMV) ---
|
||||||
|
"float, class:^(imv)$"
|
||||||
|
"center, class:^(imv)$"
|
||||||
|
"size 70% 70%, class:^(imv)$"
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
jellyfin-mpv-shim
|
||||||
|
];
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland.settings.windowrulev2 = [
|
||||||
|
# --- JELLYFIN MPV SHIM ---
|
||||||
|
"float, class:^(jellyfin-mpv-shim)$"
|
||||||
|
"center, class:^(jellyfin-mpv-shim)$"
|
||||||
|
"size 70% 70%, class:^(jellyfin-mpv-shim)$"
|
||||||
|
];
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland.settings.exec-once = [
|
||||||
|
"uwsm app -- jellyfin-mpv-shim"
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{pkgs, ...}: {
|
|
||||||
home.packages = with pkgs; [loupe];
|
|
||||||
|
|
||||||
xdg.mimeApps = {
|
|
||||||
enable = true;
|
|
||||||
defaultApplications = {
|
|
||||||
"image/png" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/jpeg" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/gif" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/webp" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/bmp" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/svg+xml" = "org.gnome.Loupe.desktop";
|
|
||||||
"image/tiff" = "org.gnome.Loupe.desktop";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
wayland.windowManager.hyprland.settings.windowrulev2 = [
|
|
||||||
# --- IMAGE VIEWER (Loupe) ---
|
|
||||||
"float, class:^(org\.gnome\.Loupe)$"
|
|
||||||
"center, class:^(org\.gnome\.Loupe)$"
|
|
||||||
"size 70% 70%, class:^(org\.gnome\.Loupe)$"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
+20
-1
@@ -1,5 +1,17 @@
|
|||||||
{pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
home.packages = with pkgs; [mpv];
|
programs.mpv = {
|
||||||
|
enable = true;
|
||||||
|
scripts = with pkgs.mpvScripts; [
|
||||||
|
uosc
|
||||||
|
thumbfast
|
||||||
|
];
|
||||||
|
config = {
|
||||||
|
# uosc provides its own UI
|
||||||
|
osc = "no";
|
||||||
|
osd-bar = "no";
|
||||||
|
border = "no";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
xdg.mimeApps = {
|
xdg.mimeApps = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -12,4 +24,11 @@
|
|||||||
"video/quicktime" = "mpv.desktop";
|
"video/quicktime" = "mpv.desktop";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland.settings.windowrulev2 = [
|
||||||
|
# --- VIDEO PLAYER (mpv) ---
|
||||||
|
"float, class:^(mpv)$"
|
||||||
|
"center, class:^(mpv)$"
|
||||||
|
"size 70% 70%, class:^(mpv)$"
|
||||||
|
];
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
# Omarchy Plymouth Theme Script
|
# Omarchy Plymouth Theme Script
|
||||||
|
|
||||||
Window.SetBackgroundTopColor(0.101, 0.105, 0.149);
|
Window.SetBackgroundTopColor(0.176, 0.067, 0.165);
|
||||||
Window.SetBackgroundBottomColor(0.101, 0.105, 0.149);
|
Window.SetBackgroundBottomColor(0.176, 0.067, 0.165);
|
||||||
|
|
||||||
logo.image = Image("logo.png");
|
logo.image = Image("logo.png");
|
||||||
logo.sprite = Sprite(logo.image);
|
logo.sprite = Sprite(logo.image);
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 54 KiB |
@@ -5,5 +5,6 @@
|
|||||||
../../apps/tickrs
|
../../apps/tickrs
|
||||||
../../apps/claude
|
../../apps/claude
|
||||||
../../apps/delfin
|
../../apps/delfin
|
||||||
|
../../apps/jellyfin-mpv-shim
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
../../apps/yazi
|
../../apps/yazi
|
||||||
../../apps/gemini
|
../../apps/gemini
|
||||||
../../apps/firefox
|
../../apps/firefox
|
||||||
../../apps/loupe
|
../../apps/imv
|
||||||
../../apps/mpv
|
../../apps/mpv
|
||||||
../../apps/mako
|
../../apps/mako
|
||||||
# ../../apps/starship
|
# ../../apps/starship
|
||||||
|
|||||||
Reference in New Issue
Block a user