Compare commits

...

4 commits

Author SHA1 Message Date
Jokiller230 Jokiller230@users.noreply.github.com
0a02793571 Chore: Automated dead code cleanup
Some checks failed
Trufflehog: check for exposed secrets / Run trufflehog (push) Has been cancelled
Nix: check for unused code / Run deadnix (push) Has been cancelled
Nix: validate flake / Validate x86_64-linux (push) Has been cancelled
2025-07-18 19:13:08 +00:00
Jo
b08c5c8bce Add Steam, Force Firefox declarative extensions 2025-07-18 21:12:15 +02:00
Jo
9715055e76 Remove youtube-music flake and update discord arrpc config 2025-07-18 21:10:34 +02:00
Jo
5dd5bf894f Add Firefox configuration 2025-07-18 21:10:04 +02:00
11 changed files with 567 additions and 96 deletions

75
flake.lock generated
View file

@ -7,11 +7,11 @@
]
},
"locked": {
"lastModified": 1751463132,
"narHash": "sha256-eKbIZwTsl+Rbkj4coSZETlcTbmVbegN1nCKJ7059p88=",
"lastModified": 1751880463,
"narHash": "sha256-aSQllMKqsTYAUp4yhpspZn0Hj5yIj7Mh4UD5iyk5iMM=",
"owner": "catppuccin",
"repo": "nix",
"rev": "a682f7033678ea093c42c5e361975af5988aa3de",
"rev": "9474347c69e93e392f194dda7a57c641ba4b998e",
"type": "github"
},
"original": {
@ -94,32 +94,11 @@
]
},
"locked": {
"lastModified": 1751549056,
"narHash": "sha256-miKaJ4SFNxhZ/WVDADae2jNd9zka5bV9hKmXspAzvxo=",
"lastModified": 1752093218,
"narHash": "sha256-+3rXu8ewcNDi65/2mKkdSGrivQs5zEZVp5aYszXC0d0=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "1fa73bb2cc39e250eb01e511ae6ac83bfbf9f38c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"youtube-music",
"nixpkgs"
]
},
"locked": {
"lastModified": 1747439237,
"narHash": "sha256-5rCGrnkglKKj4cav1U3HC+SIUNJh08pqOK4spQv9RjA=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "ae755329092c87369b9e9a1510a8cf1ce2b1c708",
"rev": "206ed3c71418b52e176f16f58805c96e84555320",
"type": "github"
},
"original": {
@ -135,11 +114,11 @@
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1751561412,
"narHash": "sha256-f09KaIjEwn/ljsV3BsIIbp5Fh7rYDRdxqAltLsf00IE=",
"lastModified": 1752110958,
"narHash": "sha256-D3isIKaOsq/6KfKC+t0NDNJ7cY3oik2SZDuPXVFP6vw=",
"owner": "kaylorben",
"repo": "nixcord",
"rev": "55990af63fdbc0123a3b7fb18c30de018684ce32",
"rev": "b11cbba03347769b00eaf531cbc518669e8af447",
"type": "github"
},
"original": {
@ -181,11 +160,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1751271578,
"narHash": "sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU+tt4YY=",
"lastModified": 1751984180,
"narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3016b4b15d13f3089db8a41ef937b13a9e33a8df",
"rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0",
"type": "github"
},
"original": {
@ -219,8 +198,7 @@
"home-manager": "home-manager",
"nixcord": "nixcord",
"nixpkgs": "nixpkgs_2",
"sops-nix": "sops-nix",
"youtube-music": "youtube-music"
"sops-nix": "sops-nix"
}
},
"sops-nix": {
@ -228,11 +206,11 @@
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1750119275,
"narHash": "sha256-Rr7Pooz9zQbhdVxux16h7URa6mA80Pb/G07T4lHvh0M=",
"lastModified": 1751606940,
"narHash": "sha256-KrDPXobG7DFKTOteqdSVeL1bMVitDcy7otpVZWDE6MA=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "77c423a03b9b2b79709ea2cb63336312e78b72e2",
"rev": "3633fc4acf03f43b260244d94c71e9e14a2f6e0d",
"type": "github"
},
"original": {
@ -240,27 +218,6 @@
"repo": "sops-nix",
"type": "github"
}
},
"youtube-music": {
"inputs": {
"home-manager": "home-manager_2",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1747498370,
"narHash": "sha256-mJ7fLdL/A4cWHMm0n3/dcQ72Ijm+uTu/snl8iqgtbtc=",
"owner": "h-banii",
"repo": "youtube-music-nix",
"rev": "410071c47bb39a5abb672cd5c1a59bc5f853d908",
"type": "github"
},
"original": {
"owner": "h-banii",
"repo": "youtube-music-nix",
"type": "github"
}
}
},
"root": "root",

View file

@ -41,11 +41,6 @@
nixcord = {
url = "github:kaylorben/nixcord";
};
youtube-music = {
url = "github:h-banii/youtube-music-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =

View file

@ -1,5 +1,6 @@
{
lib,
pkgs,
config,
...
}:
@ -10,6 +11,8 @@ in
# Enable arRPC for discord Rich Presence stuffs
services.arrpc.enable = true;
home.packages = with pkgs; [ arrpc ];
programs.nixcord = {
enable = true;
vesktop.enable = true;

View file

@ -0,0 +1,19 @@
{ lib, config, ... }:
let
inherit (lib) mkIf;
in
{
programs.firefox = mkIf config.programs.firefox.enable {
# Required settings for Onebar
profiles.default.settings = {
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
};
};
home.file.".mozilla/firefox/default/chrome/userChrome.css".text =
mkIf config.programs.firefox.enable ''
@import "onebar/onebar.css";
'';
home.file.".mozilla/firefox/default/chrome/onebar/onebar.css".source = ./onebar.css;
}

View file

@ -0,0 +1,514 @@
/* 1.8.3
- Fixed for Firefox 137!
- Fixed https truncate (fix #29)
*/
:root {
--urlbar-collapsed-width: 200px;
--urlbar-open-width: 300px; /* Only when disable-centering-of-URLbar is enabled */
}
#navigator-toolbox {
display: flex;
flex-wrap: wrap;
flex-direction: row;
position: relative !important;
}
/* Hide flexible spaces */
toolbarspring,
[id^="wrapper-customizableui-special-spring"] {
display: none !important;
}
/* Tabs */
#titlebar {
width: 0;
flex-grow: 1;
overflow: hidden;
}
#toolbar-menubar[inactive="true"] { /* Prevent duplicate window controls */
display: none !important;
}
#TabsToolbar {
display: flex !important;
align-items: center;
z-index: 1;
padding-left: var(--tab-block-margin) !important;
}
#TabsToolbar-customization-target {
display: flex !important;
margin-block: auto !important;
align-items: center;
}
#tabbrowser-tabs {
overflow: hidden !important;
width: 0 !important;
flex: 1 !important;
}
.tabbrowser-tab {
min-height: calc(var(--tab-min-height) - 2px) !important;
}
.tab-background { /* Just thought it looked nicer */
margin-block: calc(2px + var(--tab-block-margin)) !important;
box-shadow: none !important;
transition: background-color .2s;
}
@media -moz-pref("onebar.hide-all-tabs-button") {
@media not (max-width: 700px) {
#alltabs-button {
display: none !important;
}
}
}
/* Navigation buttons */
@media -moz-pref("onebar.conditional-navigation-buttons") {
:root:not([customizing]) #back-button[disabled],
:root:not([customizing]) #forward-button[disabled] {
display: none !important;
}
}
@media not -moz-pref("onebar.disable-hiding-navigation-buttons") {
#urlbar-container ~ :is(#back-button, #forward-button) {
display: none !important;
}
/* In the customize menu */
:is(#wrapper-back-button, #wrapper-forward-button) {
opacity: 1 !important;
}
#wrapper-urlbar-container ~ :is(#wrapper-back-button, #wrapper-forward-button) {
opacity: .5 !important;
}
/* Add note in customize menu for nav buttons */
#customization-header::after {
content: "To hide the back & forward buttons, drag them to the right of the URL bar";
background-color: blue;
color: white;
border-radius: 4px;
padding: .4em .7em;
margin-top: 1em;
display: block;
width: max-content;
}
}
:root[customizing] .urlbar-input-box {
visibility: visible !important;
}
:root[customizing] .urlbar-input-box::before {
content: "https://";
margin-block: auto;
}
:root[customizing] #urlbar-input {
display: none !important;
}
:root[customizing] .customization-target {
padding-inline: 20px;
}
:root[customizing] #nav-bar-customization-target {
border-right: 1px dashed var(--border-color-deemphasized);
}
:root[customizing] #nav-bar-customization-target,
:root[customizing] #tabbrowser-tabs {
border-left: 1px dashed var(--border-color-deemphasized);
}
/* Single Tab Styling */
@media not -moz-pref("onebar.disable-single-tab") {
.tabbrowser-tab:only-of-type {
width: max-content !important;
max-width: 80% !important;
flex: unset !important;
margin-inline-end: auto !important;
--toolbar-bgcolor: transparent !important;
--tab-selected-bgimage: transparent !important;
}
.tabbrowser-tab:only-of-type .tab-text {
font-weight: 600 !important;
}
.tabbrowser-tab:only-of-type .tab-close-button,
#tabbrowser-tabs:not([closebuttons="activetab"]) ~ #alltabs-button {
display: none !important;
}
.tabbrowser-tab:only-of-type .tab-background {
opacity: 0;
}
}
/* Match button sizes to toolbar buttons */
#TabsToolbar {
--toolbarbutton-inner-padding: 8px !important;
}
#TabsToolbar toolbarbutton {
margin: 0 !important;
}
#alltabs-button {
order: -1;
}
.titlebar-buttonbox-container {
order: -100 !important;
}
/* Toolbar */
#nav-bar {
background: none !important;
}
#urlbar-container {
width: var(--urlbar-collapsed-width) !important;
flex: 1 !important;
z-index: 10;
justify-content: flex-end;
transition: background-color .2s, width .2s, min-width .2s;
}
#urlbar:not([breakout-extend]) {
min-width: max-content !important;
}
@media not -moz-pref("onebar.disable-centering-of-URLbar") {
#urlbar {
position: relative !important;
top: unset !important;
margin-block: auto !important;
}
#urlbar[breakout-extend] {
position: absolute !important;
inset-inline: 20vw !important;
width: unset !important;
align-self: flex-start !important;
}
}
@media -moz-pref("onebar.disable-centering-of-URLbar") {
#urlbar[breakout-extend] .urlbar-input-box {
width: 400px !important;
}
#urlbar-container:focus-within, #urlbar-container:hover {
width: var(--urlbar-open-width) !important;
}
@media (max-width: 700px) {
#urlbar[breakout-extend] {
width: unset !important;
}
}
}
@media -moz-pref("onebar.collapse-URLbar") {
:root:not([customizing]) #urlbar-container:has(#urlbar:not([focused])) {
justify-content: flex-end;
width: var(--urlbar-collapsed-width) !important;
--urlbar-collapsed-width: calc(
var(--urlbar-min-height) - 2px + 2 * var(--urlbar-container-padding)
);
#urlbar {
min-width: var(--urlbar-collapsed-width) !important;
width: max-content !important;
max-width: 2000px;
transition: max-width .2s;
}
#urlbar-background::before {
content: "";
position: absolute;
inset: 0;
background: var(--toolbar-bgcolor);
border-radius: var(--toolbarbutton-border-radius);
opacity: 0;
z-index: -1;
transition: opacity .2s;
}
&:not(:hover) {
#urlbar {
max-width: var(--urlbar-collapsed-width);
}
}
&:hover #urlbar-background::before {
opacity: 1;
}
.urlbar-input-box {
position: absolute !important;
opacity: 0;
pointer-events: none;
}
.identity-box-button {
padding-inline: var(--urlbar-icon-padding) !important;
}
#identity-icon-box,
#tracking-protection-icon-container {
max-width: unset !important;
opacity: 1 !important;
padding-inline: var(--urlbar-icon-padding) !important;
order: 3;
}
@media (max-width: 700px) {
& {
flex: unset !important;
width: auto !important;
margin-inline-start: auto !important;
}
}
}
}
#urlbar-input-container {
display: flex !important;
}
.urlbar-input-container > :not(.urlbar-input-box) {
order: 2;
margin: 0 !important;
}
.urlbar-input-box {
flex-grow: 1 !important;
padding-left: .5em !important;
width: 100px !important;
min-width: 50px !important;
transition: width .2s;
}
#urlbar-input:not(:focus-within) {
mask: linear-gradient(to right, black calc(100% - 20px), transparent);
}
#urlbar-background {
transition: border .2s;
}
#urlbar:hover:not([focused="true"]) > #urlbar-background {
--toolbar-field-border-color: var(--toolbar-field-focus-border-color)
}
/* Truncate https:// when collapsed */
@media (not -moz-pref("onebar.disable-https-truncate")) and (not -moz-pref("browser.urlbar.trimHttps")) {
#urlbar-input {
transition: margin .1s;
}
.verifiedDomain ~ .urlbar-input-box:not(:focus-within) #urlbar-input {
--https-size: 5ch;
margin-left: calc(0ch - var(--https-size)) !important;
mask: linear-gradient(to right, transparent var(--https-size), black calc(var(--https-size) + 1ch) calc(100% - 3ch), transparent) !important;
}
}
/* Hide unimportant buttons until hover */
:root {
--in-transition: font-size .2s, padding .2s, margin .2s, max-width .2s, opacity .2s .15s;
--out-transition: font-size .2s, padding .2s, margin .2s, max-width .2s, opacity .07s;
}
#urlbar-container:hover .urlbar-input-container > box:not(#page-action-buttons):not(.urlbar-input-box),
#urlbar-container:hover #page-action-buttons > *,
#urlbar-container:hover #userContext-label {
transition: var(--in-transition) !important;
max-width: 200px;
}
@media -moz-pref("onebar.disable-autohide-of-URLbar-icons") {
#urlbar-container {
width: var(--urlbar-open-width) !important;
}
}
@media not -moz-pref("onebar.disable-autohide-of-URLbar-icons") {
#urlbar-container:not(:hover) :where(
toolbarbutton,
#userContext-label,
#star-button-box,
.verifiedDomain,
#tracking-protection-icon-container,
#pageAction-urlbar-_testpilot-containers,
#pageActionButton,
) {
font-size: 0 !important;
max-width: 0 !important;
padding-inline: 0 !important;
margin-inline: 0 !important;
opacity: 0 !important;
transition: var(--out-transition) !important;
}
@media -moz-pref("onebar.hide-all-URLbar-icons") {
#urlbar-container:not(:hover) :where(#page-action-buttons, #identity-box) > * {
font-size: 0 !important;
max-width: 0 !important;
padding-inline: 0 !important;
margin-inline: 0 !important;
opacity: 0 !important;
transition: var(--out-transition) !important;
}
}
}
#urlbar-container #urlbar[focused="true"] .urlbar-input-container > box,
#urlbar-container #urlbar[focused="true"] #page-action-buttons > * {
font-size: 0 !important;
max-width: 0 !important;
padding-inline: 0 !important;
margin-inline: 0 !important;
opacity: 0 !important;
transition: var(--out-transition) !important;
}
/* Other Buttons */
.toolbarbutton-icon {
transition: background-color .1s;
}
#nav-bar #search-container {
min-width: 32px !important;
transition: min-width .2s;
}
.titlebar-spacer,
#identity-icon-label {
display: none;
}
@media -moz-pref("onebar.hide-unified-extensions-button") {
#unified-extensions-button, #unified-extensions-button > .toolbarbutton-icon {
width: 0px !important;
padding: 0px !important;
}
}
/* Wrap other toolbars to bottom */
#nav-bar ~ * {
width: 100vw !important;
}
/* Linux fixes, credits: https://github.com/ranmaru22/firefox-vertical-tabs/pull/39 */
@media (-moz-gtk-csd-available) {
/* window control padding values (these don't change the size of the actual buttons, only the padding for the navbar) */
:root[customtitlebar] {
/* default button/padding size based on adw-gtk3 theme */
--uc-win-ctrl-btn-width: 38px;
--uc-win-ctrl-padding: 12px;
}
:root[customtitlebar][lwtheme] {
/* seperate values for when using a theme, based on the Firefox defaults */
--uc-win-ctrl-btn-width: 30px;
--uc-win-ctrl-padding: 12px;
}
/* setting the padding value for all button combinations */
@media (-moz-gtk-csd-minimize-button),
(-moz-gtk-csd-maximize-button),
(-moz-gtk-csd-close-button) {
#navigator-toolbox {
--uc-navbar-padding: calc(var(--uc-win-ctrl-btn-width) * 1);
}
}
@media (-moz-gtk-csd-minimize-button) and (-moz-gtk-csd-maximize-button),
(-moz-gtk-csd-minimize-button) and (-moz-gtk-csd-close-button),
(-moz-gtk-csd-maximize-button) and (-moz-gtk-csd-close-button) {
#navigator-toolbox {
--uc-navbar-padding: calc(var(--uc-win-ctrl-btn-width) * 2);
}
}
@media (-moz-gtk-csd-minimize-button) and (-moz-gtk-csd-maximize-button) and (-moz-gtk-csd-close-button) {
#navigator-toolbox {
--uc-navbar-padding: calc(var(--uc-win-ctrl-btn-width) * 3);
}
}
/* only applies padding/positioning if there is 1 or more buttons */
@media (-moz-gtk-csd-minimize-button),
(-moz-gtk-csd-maximize-button),
(-moz-gtk-csd-close-button) {
.titlebar-buttonbox-container {
left: 0;
position: absolute;
display: block;
z-index: 101;
}
@media (-moz-gtk-csd-reversed-placement) {
#TabsToolbar {
padding-left: calc(var(--uc-navbar-padding, 0) + var(--uc-win-ctrl-padding)) !important;
}
}
/* window controls on the right */
@media not (-moz-gtk-csd-reversed-placement) {
#nav-bar {
padding-right: calc(var(--uc-navbar-padding, 0) + var(--uc-win-ctrl-padding)) !important;
}
.titlebar-buttonbox-container {
right: 0;
left: unset;
}
}
.toolbar-items {
max-width: calc(100vw - (
var(--uc-navbar-padding, 0) + var(--uc-win-ctrl-padding)
));
}
}
}
/* MacOS fixes */
@media (-moz-platform: macos) {
.titlebar-buttonbox-container {
margin-right: 10px;
}
}
/* Windows OS fixes */
@media (-moz-platform: windows-win10), (-moz-platform: windows) {
/* Unsure if same attribute changed on windows,
would like confirmation or someone to fix */
:root[tabsintitlebar], :root[customtitlebar] {
--uc-window-control-width: 137px;
--uc-win-ctrl-padding: 12px;
}
#nav-bar {
padding-right: calc(var(--uc-window-control-width) + var(--uc-win-ctrl-padding)) !important;
}
.titlebar-buttonbox-container {
top: 0 !important;
right: 0 !important;
height: calc(var(--tab-min-height) + var(--toolbarbutton-inner-padding) + var(--toolbarbutton-outer-padding));
position: absolute !important;
z-index: 101 !important;
max-height: 100%;
}
.toolbar-items {
max-width: calc(100vw - var(--uc-window-control-width)) !important;
}
/* Hide window buttons in fullscreen */
#navigator-toolbox[style*="margin-top: -"] .titlebar-buttonbox-container,
[inDOMFullscreen="true"] .titlebar-buttonbox-container {
transform: translateY(-100px)
}
}
/* Small window */
@media (max-width: 700px) {
#nav-bar {
width: 0 !important;
flex-grow: 999;
--toolbarbutton-outer-padding: 0px;
--toolbar-start-end-padding: 0px;
}
#TabsToolbar {
min-width: unset !important;
}
#tabbrowser-tabs {
display: none !important;
}
#urlbar[breakout-extend] {
inset-inline: 15px !important;
z-index: 102 !important;
}
}

View file

@ -1,31 +1,7 @@
{
lib,
config,
osConfig,
namespace,
...
}:
let
inherit (lib) mkIf;
in
{
programs.youtube-music = {
enable = false;
options = {
tray = true;
trayClickPlayPause = true;
resumeOnStart = false;
themes = [
(mkIf config.catppuccin.enable ./catppuccin-${config.catppuccin.flavor}.css)
];
language = osConfig.${namespace}.system.locale.keymap;
autoUpdates = false;
};
plugins = {
discord.enabled = true;
};
};
}

View file

@ -6,6 +6,7 @@
{
imports = [
./apps/discord
./apps/firefox
./apps/youtube-music
];

View file

@ -34,6 +34,10 @@ in
}
) { } cfg.extensions;
};
profiles.default = {
extensions.force = true;
};
};
};
}

View file

@ -98,7 +98,7 @@ in
}
{
main = "jo-dev.com";
sans = ["*.jo-dev.com"];
sans = [ "*.jo-dev.com" ];
}
];
};

View file

@ -99,7 +99,6 @@ in
inputs.sops-nix.homeManagerModules.sops
inputs.catppuccin.homeModules.default
inputs.nixcord.homeModules.nixcord
inputs.youtube-music.homeManagerModules.default
] ++ homeModules;
home.stateVersion = lib.mkDefault osConfig.system.stateVersion;

View file

@ -9,6 +9,9 @@
sops.defaultSopsFile = ./secrets/users.yaml;
sops.age.keyFile = "/var/lib/sops-nix/key.txt";
programs.steam.enable = true;
programs.steam.remotePlay.openFirewall = true;
puzzlevision = {
users.jo = {
enable = true;
@ -36,12 +39,12 @@
'';
# Configure 8GB SWAP partition
swapDevices = [
{
device = "/swapfile";
size = 8 * 1024;
}
];
# swapDevices = [
# {
# device = "/swapfile";
# size = 8 * 1024;
# }
# ];
boot = {
# Configure additional kernel modules.