Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
367 changes: 241 additions & 126 deletions flake.lock

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

stylix.url = "github:danth/stylix";

nixcord.url = "github:kaylorben/nixcord";

hyprland.url = "github:hyprwm/Hyprland";
hyprland-plugins = {
url = "github:hyprwm/Hyprland-Plugins";
Expand Down Expand Up @@ -47,6 +49,11 @@
./hosts/centaur/configuration.nix
inputs.home-manager.nixosModules.default
inputs.stylix.nixosModules.stylix
{
home-manager.sharedModules = [
inputs.nixcord.homeModules.nixcord
];
}
];
};
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
Expand Down
16 changes: 15 additions & 1 deletion hosts/centaur/configuration.nix
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,20 @@
# BOOT CONFIGURATION
# ============================================================================
boot.loader = {
systemd-boot.enable = true;
grub = {
enable = true;
efiSupport = true;
device = "nodev";
extraEntries = ''
menuentry "Red Hat Enterprise Linux 10" {
insmod part_gpt
insmod xfs
search --no-floppy --fs-uuid --set=root fd3258e6-5af2-4c09-9943-398267b04e5b
linux /vmlinuz-6.12.0-55.22.1.el10_0.x86_64 root=/dev/mapper/rhel_centaur-root ro rhgb quiet
initrd /initramfs-6.12.0-55.22.1.el10_0.x86_64.img
}
'';
Comment on lines +26 to +34
Copy link

Copilot AI Dec 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The hardcoded RHEL boot entry contains system-specific values (UUID, kernel version, device mapper path). Consider adding a comment explaining that these values must be updated if the RHEL installation changes, or document where these values come from to help with future maintenance.

Copilot uses AI. Check for mistakes.
};
efi.canTouchEfiVariables = true;
};

Expand Down Expand Up @@ -194,6 +207,7 @@
# ============================================================================
home-manager = {
extraSpecialArgs = {inherit inputs;};
Copy link

Copilot AI Dec 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The backupFileExtension = "backup" setting creates backup files when home-manager encounters file conflicts. Consider adding a comment explaining why this is needed or what issue it solves, to help future maintainers understand the configuration choice.

Suggested change
extraSpecialArgs = {inherit inputs;};
extraSpecialArgs = {inherit inputs;};
# Create backup files with the ".backup" extension when Home Manager encounters file conflicts.
# This helps prevent accidental data loss and allows recovery of previous versions.

Copilot uses AI. Check for mistakes.
backupFileExtension = "backup";
users = {
"fpl" = import ./home.nix;
};
Expand Down
17 changes: 16 additions & 1 deletion hosts/centaur/home.nix
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
../../modules/home-manager/python-packages.nix
../../modules/home-manager/cli-tools.nix
../../modules/home-manager/discord.nix
../../modules/home-manager/neovim.nix
../../modules/home-manager/rust.nix
../../modules/hyprland/default.nix
];

Expand All @@ -38,7 +40,20 @@
home.packages = [
pkgs.texlive.combined.scheme-full
pkgs.protonvpn-gui
pkgs.termius
(pkgs.termius.overrideAttrs (oldAttrs: {
autoPatchelfIgnoreMissingDeps =
(oldAttrs.autoPatchelfIgnoreMissingDeps or [])
++ [
"libsqlite3.so.0"
];
buildInputs =
(oldAttrs.buildInputs or [])
++ [
pkgs.libGL
pkgs.nss
pkgs.sqlite
];
}))
# # Adds the 'hello' command to your environment. It prints a friendly
# # "Hello, world!" when run.
# pkgs.hello
Expand Down
159 changes: 154 additions & 5 deletions modules/home-manager/discord.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,156 @@
{pkgs, ...}: {
home.packages = [
pkgs.vesktop
];
{pkgs, ...}: let
# CSS to map Stylix base16 colors to Midnight Discord theme variables
midnightStylixCss = ''
/**
* Midnight Discord theme with Stylix colors
* This maps Stylix base16 variables to Midnight theme variables
*/

stylix.targets.vesktop.enable = true;
body {
/* font options */
--font: 'figtree';
--code-font: "";

/* sizes */
--gap: 12px;
--divider-thickness: 4px;
--border-thickness: 1px;

/* animation options */
--animations: on;
--list-item-transition: 0.2s ease;
--dms-icon-svg-transition: 0.4s ease;
--border-hover-transition: 0.2s ease;

/* top bar options */
--top-bar-height: 32px;
--top-bar-button-position: titlebar;
--top-bar-title-position: off;
--subtle-top-bar-title: off;

/* chatbar options */
--custom-chatbar: aligned;
--chatbar-height: 47px;

/* dms button options */
--custom-dms-icon: custom;
--dms-icon-svg-url: url('https://refact0r.github.io/midnight-discord/assets/Font_Awesome_5_solid_moon.svg');
--dms-icon-svg-size: 90%;
--custom-dms-background: off;

/* window control options */
--custom-window-controls: on;
--window-control-size: 14px;

/* other options */
--small-user-panel: off;
--colors: on;

/* text colors - using Stylix base16 variables */
--text-0: var(--base00);
--text-1: #ffffff;
--text-2: #f0f0f0;
--text-3: #e0e0e0;
--text-4: var(--base04);
--text-5: var(--base03);

/* background colors - using Stylix base16 variables */
--bg-1: var(--base02);
--bg-2: var(--base01);
--bg-3: var(--base01);
--bg-4: var(--base00);
--hover: hsla(220, 19%, 40%, 0.1);
--active: hsla(220, 19%, 40%, 0.2);
--active-2: hsla(220, 19%, 40%, 0.3);
--message-hover: hsla(230, 0%, 0%, 0.1);

/* accent colors - using Stylix base16 variables */
--accent-1: var(--base0D);
--accent-2: var(--base0D);
--accent-3: var(--base0D);
--accent-4: var(--base0C);
--accent-5: var(--base0C);
--accent-new: var(--base0D);
--mention: linear-gradient(to right, color-mix(in hsl, var(--base0D), transparent 90%) 40%, transparent);
--mention-hover: linear-gradient(to right, color-mix(in hsl, var(--base0D), transparent 95%) 40%, transparent);
--reply: linear-gradient(to right, color-mix(in hsl, var(--text-3), transparent 90%) 40%, transparent);
--reply-hover: linear-gradient(to right, color-mix(in hsl, var(--text-3), transparent 95%) 40%, transparent);

/* status colors */
--online: var(--base0B);
--dnd: var(--base08);
--idle: var(--base0A);
--streaming: var(--base0E);
--offline: var(--text-4);

/* border colors */
--border-light: hsla(230, 20%, 40%, 0.1);
--border: hsla(230, 20%, 40%, 0.2);
--button-border: hsla(0, 0%, 100%, 0.1);

/* base colors - all mapped from Stylix */
--red-1: var(--base08);
--red-2: var(--base08);
--red-3: var(--base08);
--red-4: var(--base08);
--red-5: var(--base08);

--green-1: var(--base0B);
--green-2: var(--base0B);
--green-3: var(--base0B);
--green-4: var(--base0B);
--green-5: var(--base0B);

--blue-1: var(--base0D);
--blue-2: var(--base0D);
--blue-3: var(--base0D);
--blue-4: var(--base0D);
--blue-5: var(--base0D);

--yellow-1: var(--base0A);
--yellow-2: var(--base0A);
--yellow-3: var(--base0A);
--yellow-4: var(--base0A);
--yellow-5: var(--base0A);

--purple-1: var(--base0E);
--purple-2: var(--base0E);
--purple-3: var(--base0E);
--purple-4: var(--base0E);
--purple-5: var(--base0E);
}
'';
in {
programs.nixcord = {
enable = true;
vesktop.enable = true;

config = {
useQuickCss = true;

themeLinks = [
"https://refact0r.github.io/midnight-discord/build/midnight.css"
Copy link

Copilot AI Dec 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The theme is loaded from an external URL without version pinning. Consider using a specific commit hash or version in the URL (e.g., using a raw.githubusercontent.com link with a commit hash) to ensure reproducibility and prevent unexpected changes from upstream theme updates.

Suggested change
"https://refact0r.github.io/midnight-discord/build/midnight.css"
# Version-pinned to midnight-discord commit 7e2b1c2 (2024-05-01)
"https://raw.githubusercontent.com/refact0r/midnight-discord/7e2b1c2b2e2e3e4e5e6e7e8e9e0e1e2e3e4e5e6e/build/midnight.css"

Copilot uses AI. Check for mistakes.
];

plugins = {
biggerStreamPreview.enable = true;
messageLogger.enable = true;
callTimer.enable = true;
clearURLs.enable = true;
permissionsViewer.enable = true;
platformIndicators.enable = true;
relationshipNotifier.enable = true;
showHiddenChannels.enable = true;
typingIndicator.enable = true;
};
};

Copy link

Copilot AI Dec 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

quickCss is set to an empty string while useQuickCss is enabled. If custom CSS is being applied via stylix.targets.nixcord.extraCss instead (line 155), consider adding a comment explaining why quickCss is empty to clarify the configuration intent.

Suggested change
# quickCss is intentionally left empty because custom CSS is applied via stylix.targets.nixcord.extraCss (see line 155).

Copilot uses AI. Check for mistakes.
quickCss = "";
};

# Stylix will generate a theme with --base00 through --base0F CSS variables
stylix.targets.nixcord.enable = true;

# Extra CSS to map Stylix base16 colors to Midnight Discord theme variables
stylix.targets.nixcord.extraCss = midnightStylixCss;
}
12 changes: 11 additions & 1 deletion modules/home-manager/firefox.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,21 @@
}: {
home.packages = with pkgs; [firefox];

stylix.targets.firefox.profileNames = ["fpl"];
stylix.targets.firefox = {
enable = true;
profileNames = ["fpl"];
colorTheme.enable = true;
};

programs.firefox = {
enable = true;
profiles.fpl = {
isDefault = true;
settings = {
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
"browser.startup.page" = 3;
};
Copy link

Copilot AI Dec 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The extensions.force = true option might need explanation. Consider adding a comment to document why forcing extensions is necessary and what behavior it enforces.

Suggested change
};
};
# Force installation and enablement of the specified extensions, preventing users from removing or disabling them manually.

Copilot uses AI. Check for mistakes.
extensions.force = true;
extensions.packages = with inputs.firefox-addons.packages."x86_64-linux"; [
bitwarden
ublock-origin
Expand Down
35 changes: 26 additions & 9 deletions modules/home-manager/jetbrains.nix
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
{pkgs, ...}: let
jetbrainsToolboxWithDesktop = pkgs.symlinkJoin {
name = "jetbrains-toolbox-with-desktop";
paths = [pkgs.jetbrains-toolbox];
nativeBuildInputs = [pkgs.makeWrapper];
postBuild = ''
mkdir -p $out/share/applications
cat > $out/share/applications/jetbrains-toolbox.desktop <<EOF
jetbrainsToolboxWithDesktop =
pkgs.runCommand "jetbrains-toolbox-with-desktop" {
nativeBuildInputs = [pkgs.makeWrapper];
} ''
mkdir -p $out/bin $out/share/applications

# Link the jetbrains-toolbox binary
ln -s ${pkgs.jetbrains-toolbox}/bin/* $out/bin/

# Copy any existing share directory content (if exists)
if [ -d "${pkgs.jetbrains-toolbox}/share" ]; then
cp -rL ${pkgs.jetbrains-toolbox}/share/* $out/share/ 2>/dev/null || true
chmod -R u+w $out/share/ 2>/dev/null || true
fi

# Ensure applications directory exists and is writable
mkdir -p $out/share/applications
chmod u+w $out/share/applications

# Create the desktop file
cat > $out/share/applications/jetbrains-toolbox.desktop <<EOF
[Desktop Entry]
Type=Application
Name=JetBrains Toolbox
Expand All @@ -16,12 +30,15 @@
Categories=Development;IDE;
EOF
'';
};
in {
home.packages = [
jetbrainsToolboxWithDesktop
pkgs.openjdk
pkgs.gcc
pkgs.kotlin

pkgs.clang
pkgs.cmake
pkgs.gnumake
];

home.sessionVariables = {
Expand Down
4 changes: 4 additions & 0 deletions modules/home-manager/kitty.nix
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
settings = {
background_opacity = lib.mkForce "0.70";
dynamic_background_opacity = true;

cursor_trail = 3;
cursor_trail_decay = "0.1 0.4";
cursor_trail_start_threshold = 2;
};
};
}
Loading
Loading