Applied formatting

This commit is contained in:
Jan Bulthuis 2024-07-19 14:00:55 +02:00
parent e1b1e7cc38
commit 16de891fc7
69 changed files with 997 additions and 635 deletions

View File

@ -1,11 +1,11 @@
{ ... }: { ... }:
{ {
imports = [ imports = [
# Import modules # Import modules
./modules/default.nix ./modules/default.nix
# Import custom packages # Import custom packages
./pkgs/default.nix ./pkgs/default.nix
]; ];
} }

View File

@ -26,4 +26,4 @@
configuration = ../users/jan.nix; configuration = ../users/jan.nix;
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.base; cfg = config.modules.base;
in { in
{
options.modules.base = { options.modules.base = {
enable = mkEnableOption "base"; enable = mkEnableOption "base";
}; };
@ -32,7 +38,7 @@ in {
programs.dconf.enable = true; programs.dconf.enable = true;
xdg.portal = { xdg.portal = {
enable = true; enable = true;
extraPortals = with pkgs; [ extraPortals = with pkgs; [
xdg-desktop-portal-gtk xdg-desktop-portal-gtk
xdg-desktop-portal-wlr xdg-desktop-portal-wlr
@ -45,4 +51,4 @@ in {
"nvidia-settings" "nvidia-settings"
]; ];
}; };
} }

View File

@ -1,14 +1,18 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.clean-tmp; cfg = config.modules.clean-tmp;
in { in
{
options.modules.clean-tmp = { options.modules.clean-tmp = {
enable = mkEnableOption "clean-tmp"; enable = mkEnableOption "clean-tmp";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable { boot.tmp.cleanOnBoot = true; };
boot.tmp.cleanOnBoot = true; }
};
}

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.silent-boot; cfg = config.modules.silent-boot;
in { in
{
options.modules.silent-boot = { options.modules.silent-boot = {
enable = mkEnableOption "silent-boot"; enable = mkEnableOption "silent-boot";
}; };
@ -11,7 +17,7 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
boot = { boot = {
loader.timeout = 0; loader.timeout = 0;
consoleLogLevel = 0; consoleLogLevel = 0;
initrd.verbose = false; initrd.verbose = false;
initrd.checkJournalingFS = false; initrd.checkJournalingFS = false;
@ -28,4 +34,4 @@ in {
]; ];
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.systemd-boot; cfg = config.modules.systemd-boot;
in { in
{
options.modules.systemd-boot = { options.modules.systemd-boot = {
enable = mkEnableOption "systemd-boot"; enable = mkEnableOption "systemd-boot";
}; };
@ -15,4 +21,4 @@ in {
efi.canTouchEfiVariables = true; efi.canTouchEfiVariables = true;
}; };
}; };
} }

View File

@ -1,16 +1,18 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.brightnessctl; cfg = config.modules.brightnessctl;
in { in
{
options.modules.brightnessctl = { options.modules.brightnessctl = {
enable = mkEnableOption "brightnessctl"; enable = mkEnableOption "brightnessctl";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable { environment.systemPackages = [ pkgs.brightnessctl ]; };
environment.systemPackages = [ }
pkgs.brightnessctl
];
};
}

View File

@ -1,6 +1,12 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; { with lib;
{
imports = [ imports = [
# Import modules # Import modules
./base/default.nix ./base/default.nix

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.fontconfig; cfg = config.modules.fontconfig;
in { in
{
options.modules.fontconfig = { options.modules.fontconfig = {
enable = mkEnableOption "fontconfig"; enable = mkEnableOption "fontconfig";
}; };
@ -12,10 +18,10 @@ in {
fonts.fontconfig.enable = cfg.enable; fonts.fontconfig.enable = cfg.enable;
fonts.enableDefaultPackages = false; fonts.enableDefaultPackages = false;
fonts.fontconfig.defaultFonts = { fonts.fontconfig.defaultFonts = {
serif = mkDefault []; serif = mkDefault [ ];
sansSerif = mkDefault []; sansSerif = mkDefault [ ];
monospace = mkDefault []; monospace = mkDefault [ ];
emoji = mkDefault []; emoji = mkDefault [ ];
}; };
}; };
} }

View File

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
{ {
config = { config = {
@ -6,7 +11,7 @@
# Set up graphics # Set up graphics
hardware.graphics.enable32Bit = true; hardware.graphics.enable32Bit = true;
hardware.graphics.enable = true; hardware.graphics.enable = true;
services.xserver.videoDrivers = ["nvidia"]; services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia = { hardware.nvidia = {
modesetting.enable = true; modesetting.enable = true;
powerManagement.enable = false; powerManagement.enable = false;
@ -24,4 +29,4 @@
}; };
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.greetd; cfg = config.modules.greetd;
in { in
{
options.modules.greetd = { options.modules.greetd = {
enable = mkEnableOption "greetd"; enable = mkEnableOption "greetd";
command = mkOption { command = mkOption {
@ -22,4 +28,4 @@ in {
}; };
}; };
}; };
} }

View File

@ -1,16 +1,22 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.tuigreet; cfg = config.modules.tuigreet;
in { in
options.modules.tuigreet = { {
enable = mkEnableOption "tuigreet"; options.modules.tuigreet = {
enable = mkEnableOption "tuigreet";
greeting = mkOption { greeting = mkOption {
type = types.str; type = types.str;
default = "Hewwo! >_< :3"; default = "Hewwo! >_< :3";
description = "Greeting message to show."; description = "Greeting message to show.";
}; };
command = mkOption { command = mkOption {
type = types.str; type = types.str;
default = "~/.initrc"; default = "~/.initrc";
@ -28,4 +34,4 @@ in {
# Enable silent boot to prevent late log messages from messing up tuigreet # Enable silent boot to prevent late log messages from messing up tuigreet
modules.silent-boot.enable = true; modules.silent-boot.enable = true;
}; };
} }

View File

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
{ {
config = { config = {
@ -6,4 +11,4 @@
i18n.defaultLocale = "en_US.UTF-8"; i18n.defaultLocale = "en_US.UTF-8";
console.keyMap = "us"; console.keyMap = "us";
}; };
} }

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.neovim; cfg = config.modules.neovim;
in { in
{
options.modules.neovim = { options.modules.neovim = {
enable = mkEnableOption "neovim"; enable = mkEnableOption "neovim";
}; };
@ -14,4 +20,4 @@ in {
defaultEditor = true; defaultEditor = true;
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.pipewire; cfg = config.modules.pipewire;
in { in
{
options.modules.pipewire = { options.modules.pipewire = {
enable = mkEnableOption "pipewire"; enable = mkEnableOption "pipewire";
}; };
@ -15,4 +21,4 @@ in {
pulse.enable = true; pulse.enable = true;
}; };
}; };
} }

View File

@ -1,18 +1,24 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.unfree; cfg = config.modules.unfree;
in { in
{
options.modules.unfree = { options.modules.unfree = {
enable = mkEnableOption "unfree"; enable = mkEnableOption "unfree";
allowedPackages = mkOption { allowedPackages = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
default = []; default = [ ];
}; };
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (getName pkg) cfg.allowedPackages; nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (getName pkg) cfg.allowedPackages;
}; };
} }

View File

@ -1,19 +1,24 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
# Nixvim # Nixvim
nixvim = import (builtins.fetchGit { nixvim = import (builtins.fetchGit { url = "https://github.com/nix-community/nixvim"; });
url = "https://github.com/nix-community/nixvim";
});
# Stylix # Stylix
stylix = import (pkgs.fetchFromGitHub { stylix = import (
owner = "danth"; pkgs.fetchFromGitHub {
repo = "stylix"; owner = "danth";
rev = "1ff9d37d27377bfe8994c24a8d6c6c1734ffa116"; repo = "stylix";
sha256 = "0dz8h1ga8lnfvvmvsf6iqvnbvxrvx3qxi0y8s8b72066mqgvy8y5"; rev = "1ff9d37d27377bfe8994c24a8d6c6c1734ffa116";
}); sha256 = "0dz8h1ga8lnfvvmvsf6iqvnbvxrvx3qxi0y8s8b72066mqgvy8y5";
}
);
# User configuration # User configuration
userModule = types.submodule { userModule = types.submodule {
@ -36,7 +41,8 @@ let
}; };
}; };
}; };
in { in
{
imports = [ imports = [
# Import home manager # Import home manager
<home-manager/nixos> <home-manager/nixos>
@ -48,7 +54,7 @@ in {
options = { options = {
machine.users = mkOption { machine.users = mkOption {
type = types.attrsOf userModule; type = types.attrsOf userModule;
default = {}; default = { };
description = "Users configured on this system."; description = "Users configured on this system.";
}; };
}; };

View File

@ -1,6 +1,11 @@
{ input, pkgs, config, ... }: {
input,
pkgs,
config,
...
}:
{ {
imports = [ imports = [
# Import all modules # Import all modules
./desktop/default.nix ./desktop/default.nix

View File

@ -1,11 +1,17 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.waybar; cfg = config.modules.waybar;
theme = config.theming; theme = config.theming;
colors = theme.colors; colors = theme.colors;
in { in
{
options.modules.waybar = { options.modules.waybar = {
enable = mkEnableOption "waybar"; enable = mkEnableOption "waybar";
}; };
@ -22,9 +28,7 @@ in {
mainBar = { mainBar = {
layer = "top"; layer = "top";
spacing = 16; spacing = 16;
modules-left = [ modules-left = [ "river/tags" ];
"river/tags"
];
modules-center = [ modules-center = [
#"river/window" #"river/window"
"mpris" "mpris"
@ -61,14 +65,30 @@ in {
#default = [ "" "" ]; #default = [ "" "" ];
headphone = ""; headphone = "";
headphone-muted = ""; headphone-muted = "";
default = [ "" "" "" ]; default = [
""
""
""
];
}; };
}; };
battery = { battery = {
format = "{icon}{capacity}%"; # Spacing achieved using "Thin Space" format = "{icon}{capacity}%"; # Spacing achieved using "Thin Space"
format-charging = "{capacity}%"; # Spacing achieved using "Thin Space" format-charging = "{capacity}%"; # Spacing achieved using "Thin Space"
#format-icons = [ "󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ]; #format-icons = [ "󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ];
format-icons = [ "" "" "" "" "" "" "" "" "" "" "" ]; format-icons = [
""
""
""
""
""
""
""
""
""
""
""
];
interval = 1; interval = 1;
}; };
clock = { clock = {
@ -117,4 +137,4 @@ in {
''; '';
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{ lib, pkgs, config, ... }: {
lib,
pkgs,
config,
...
}:
with lib; with lib;
let let
cfg = config.modules.desktop; cfg = config.modules.desktop;
in { in
{
imports = [ imports = [
# Import desktop environment modules # Import desktop environment modules
./bar/waybar.nix ./bar/waybar.nix
@ -21,18 +27,23 @@ in {
}; };
config = { config = {
home.packages = optionals cfg.wayland (with pkgs; [ home.packages = optionals cfg.wayland (
pkgs.wl-clipboard with pkgs;
pkgs.wtype [
]); pkgs.wl-clipboard
pkgs.wtype
]
);
home.file.".initrc" = { home.file.".initrc" = {
enable = true; enable = true;
executable = true; executable = true;
text = '' text =
#!${pkgs.bash}/bin/bash ''
#!${pkgs.bash}/bin/bash
'' + cfg.initScript; ''
+ cfg.initScript;
}; };
}; };
} }

View File

@ -1,16 +1,20 @@
{ lib, pkgs, config, ... }: {
lib,
pkgs,
config,
...
}:
with lib; with lib;
let let
cfg = config.modules.waylock; cfg = config.modules.waylock;
in { in
{
options.modules.waylock = { options.modules.waylock = {
enable = mkEnableOption "waylock"; enable = mkEnableOption "waylock";
}; };
config = { config = {
home.packages = mkIf cfg.enable (with pkgs; [ home.packages = mkIf cfg.enable (with pkgs; [ waylock ]);
waylock
]);
}; };
} }

View File

@ -1,8 +1,14 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
cfg = config.modules.river; cfg = config.modules.river;
in { in
{
options.modules.river.enable = lib.mkEnableOption "river"; options.modules.river.enable = lib.mkEnableOption "river";
# osConfig = lib.mkIf cfg.enable { # osConfig = lib.mkIf cfg.enable {
@ -12,7 +18,7 @@ in {
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
# Set desktop type to wayland # Set desktop type to wayland
modules.desktop.wayland = true; modules.desktop.wayland = true;
# TODO: Move elsewhere and make keybindings more configurable # TODO: Move elsewhere and make keybindings more configurable
modules.rofi.enable = true; modules.rofi.enable = true;
@ -40,152 +46,190 @@ in {
enable = true; enable = true;
systemd.enable = false; systemd.enable = false;
xwayland.enable = true; xwayland.enable = true;
settings = let settings =
layout = "rivertile"; let
layoutOptions = "-outer-padding ${toString config.theming.layout.windowPadding} -view-padding ${toString config.theming.layout.windowPadding}"; layout = "rivertile";
modes = ["normal" "locked"]; layoutOptions = "-outer-padding ${toString config.theming.layout.windowPadding} -view-padding ${toString config.theming.layout.windowPadding}";
tags = [1 2 3 4 5 6 7 8 9]; modes = [
waylockOptions = "-init-color 0x${colors.bg} -input-color 0x${colors.focused} -fail-color 0x${colors.bg}"; "normal"
"locked"
];
tags = [
1
2
3
4
5
6
7
8
9
];
waylockOptions = "-init-color 0x${colors.bg} -input-color 0x${colors.focused} -fail-color 0x${colors.bg}";
colors = config.theming.colors; colors = config.theming.colors;
# Quick pow function # Quick pow function
pow2 = power: pow2 = power: if power != 0 then 2 * (pow2 (power - 1)) else 1;
if power != 0
then 2 * (pow2 (power - 1))
else 1;
# Modifiers # Modifiers
main = "Super"; main = "Super";
ssm = "Super+Shift"; ssm = "Super+Shift";
sas = "Super+Alt+Shift"; sas = "Super+Alt+Shift";
sam = "Super+Alt"; sam = "Super+Alt";
scm = "Super+Control"; scm = "Super+Control";
scam = "Super+Control+Alt"; scam = "Super+Control+Alt";
ssc = "Super+Shift+Control"; ssc = "Super+Shift+Control";
in { in
default-layout = "${layout}"; {
set-repeat = "50 300"; default-layout = "${layout}";
xcursor-theme = "BreezeX-RosePine-Linux 24"; set-repeat = "50 300";
keyboard-layout = "-options \"caps:escape\" us"; xcursor-theme = "BreezeX-RosePine-Linux 24";
keyboard-layout = "-options \"caps:escape\" us";
border-width = toString config.theming.layout.borderSize; border-width = toString config.theming.layout.borderSize;
background-color = "0x${colors.bg}"; background-color = "0x${colors.bg}";
border-color-focused = "0x${colors.fg}"; border-color-focused = "0x${colors.fg}";
border-color-unfocused = "0x${colors.unfocused}"; # TODO: Change to use named color; border-color-unfocused = "0x${colors.unfocused}"; # TODO: Change to use named color;
border-color-urgent = "0x${colors.fg}"; border-color-urgent = "0x${colors.fg}";
spawn = [ spawn = [
"\"${layout} ${layoutOptions}\"" "\"${layout} ${layoutOptions}\""
"waybar" "waybar"
]; ];
map = (lib.attrsets.recursiveUpdate ({ map = (
normal = { lib.attrsets.recursiveUpdate
"${main} Q" = "close"; ({
"${ssm} E" = "exit"; normal =
{
"${main} Q" = "close";
"${ssm} E" = "exit";
# Basic utilities # Basic utilities
"${main} X " = "spawn \"waylock -fork-on-lock ${waylockOptions}\""; "${main} X " = "spawn \"waylock -fork-on-lock ${waylockOptions}\"";
"${ssm} Return" = "spawn foot"; "${ssm} Return" = "spawn foot";
"${main} P" = "spawn \"rofi -show drun\""; "${main} P" = "spawn \"rofi -show drun\"";
"${ssm} P" = "spawn rofi-rbw"; "${ssm} P" = "spawn rofi-rbw";
# Window focus # Window focus
"${main} J" = "focus-view next"; "${main} J" = "focus-view next";
"${main} K" = "focus-view previous"; "${main} K" = "focus-view previous";
# Swap windows # Swap windows
"${ssm} J" = "swap next"; "${ssm} J" = "swap next";
"${ssm} K" = "swap previous"; "${ssm} K" = "swap previous";
"${main} Return" = "zoom"; "${main} Return" = "zoom";
# Main ratio # Main ratio
"${main} H" = "send-layout-cmd rivertile 'main-ratio -0.05'"; "${main} H" = "send-layout-cmd rivertile 'main-ratio -0.05'";
"${main} L" = "send-layout-cmd rivertile 'main-ratio +0.05'"; "${main} L" = "send-layout-cmd rivertile 'main-ratio +0.05'";
# Main count # Main count
"${ssm} H" = "send-layout-cmd rivertile 'main-count +1'"; "${ssm} H" = "send-layout-cmd rivertile 'main-count +1'";
"${ssm} L" = "send-layout-cmd rivertile 'main-count -1'"; "${ssm} L" = "send-layout-cmd rivertile 'main-count -1'";
# Tags # Tags
"${main} 0" = "set-focused-tags ${toString (pow2 32 - 1)}"; "${main} 0" = "set-focused-tags ${toString (pow2 32 - 1)}";
"${ssm} 0" = "set-view-tags ${toString (pow2 32 - 1)}"; "${ssm} 0" = "set-view-tags ${toString (pow2 32 - 1)}";
# Orientation # Orientation
"${main} Up" = "send-layout-cmd rivertile \"main-location top\""; "${main} Up" = "send-layout-cmd rivertile \"main-location top\"";
"${main} Right" = "send-layout-cmd rivertile \"main-location right\""; "${main} Right" = "send-layout-cmd rivertile \"main-location right\"";
"${main} Down" = "send-layout-cmd rivertile \"main-location bottom\""; "${main} Down" = "send-layout-cmd rivertile \"main-location bottom\"";
"${main} Left" = "send-layout-cmd rivertile \"main-location left\""; "${main} Left" = "send-layout-cmd rivertile \"main-location left\"";
# Move floating windows # Move floating windows
"${sam} H" = "move left 100"; "${sam} H" = "move left 100";
"${sam} J" = "move down 100"; "${sam} J" = "move down 100";
"${sam} K" = "move up 100"; "${sam} K" = "move up 100";
"${sam} L" = "move right 100"; "${sam} L" = "move right 100";
# Snap floating windows # Snap floating windows
"${scam} H" = "snap left"; "${scam} H" = "snap left";
"${scam} J" = "snap down"; "${scam} J" = "snap down";
"${scam} K" = "snap up"; "${scam} K" = "snap up";
"${scam} L" = "snap right"; "${scam} L" = "snap right";
# Resize floating windows # Resize floating windows
"${sas} H" = "resize horizontal -100"; "${sas} H" = "resize horizontal -100";
"${sas} J" = "resize vertical 100"; "${sas} J" = "resize vertical 100";
"${sas} K" = "resize vertical -100"; "${sas} K" = "resize vertical -100";
"${sas} L" = "resize horizontal 100"; "${sas} L" = "resize horizontal 100";
# Toggle modes # Toggle modes
"${main} Space" = "toggle-float"; "${main} Space" = "toggle-float";
"${main} F" = "toggle-fullscreen"; "${main} F" = "toggle-fullscreen";
} // builtins.listToAttrs (builtins.concatLists (map (tag: [ }
{ name = "${main} ${toString tag}"; value = "set-focused-tags ${toString (pow2 (tag - 1))}"; } // builtins.listToAttrs (
{ name = "${ssm} ${toString tag}"; value = "set-view-tags ${toString (pow2 (tag - 1))}"; } builtins.concatLists (
{ name = "${scm} ${toString tag}"; value = "toggle-focused-tags ${toString (pow2 (tag - 1))}"; } map (tag: [
{ name = "${ssc} ${toString tag}"; value = "toggle-view-tags ${toString (pow2 (tag - 1))}"; } {
]) tags)); name = "${main} ${toString tag}";
}) (builtins.listToAttrs (map (mode: { value = "set-focused-tags ${toString (pow2 (tag - 1))}";
name = "${mode}"; }
value = { {
# Control volume name = "${ssm} ${toString tag}";
"None XF86AudioRaiseVolume" = "spawn \"pulsemixer --change-volume +5\""; value = "set-view-tags ${toString (pow2 (tag - 1))}";
"None XF86AudioLowerVolume" = "spawn \"pulsemixer --change-volume -5\""; }
"None XF86AudioMute" = "spawn \"pulsemixer --toggle-mute\""; {
name = "${scm} ${toString tag}";
value = "toggle-focused-tags ${toString (pow2 (tag - 1))}";
}
{
name = "${ssc} ${toString tag}";
value = "toggle-view-tags ${toString (pow2 (tag - 1))}";
}
]) tags
)
);
})
(
builtins.listToAttrs (
map (mode: {
name = "${mode}";
value = {
# Control volume
"None XF86AudioRaiseVolume" = "spawn \"pulsemixer --change-volume +5\"";
"None XF86AudioLowerVolume" = "spawn \"pulsemixer --change-volume -5\"";
"None XF86AudioMute" = "spawn \"pulsemixer --toggle-mute\"";
# Control brightness # Control brightness
"None XF86MonBrightnessUp" = "spawn \"brightnessctl set +5%\""; "None XF86MonBrightnessUp" = "spawn \"brightnessctl set +5%\"";
"None XF86MonBrightnessDown" = "spawn \"brightnessctl set 5%-\""; "None XF86MonBrightnessDown" = "spawn \"brightnessctl set 5%-\"";
# Control music playback # Control music playback
"None XF86Messenger" = "spawn \"playerctl previous\""; "None XF86Messenger" = "spawn \"playerctl previous\"";
"None XF86Go" = "spawn \"playerctl play-pause\""; "None XF86Go" = "spawn \"playerctl play-pause\"";
"None Cancel" = "spawn \"playerctl next\""; "None Cancel" = "spawn \"playerctl next\"";
};
}) modes
)
)
);
map-pointer = {
normal = {
"${main} BTN_LEFT" = "move-view";
"${main} BTN_RIGHT" = "resize-view";
"${main} BTN_MIDDLE" = "toggle-float";
};
}; };
}) modes))); input = {
map-pointer = { "'*'" = {
normal = { accel-profile = "adaptive";
"${main} BTN_LEFT" = "move-view"; pointer-accel = "0.5";
"${main} BTN_RIGHT" = "resize-view"; scroll-factor = "0.8";
"${main} BTN_MIDDLE" = "toggle-float"; };
"'*Synaptics*'" = {
natural-scroll = "enabled";
};
};
rule-add = {
"-app-id" = {
"'bar'" = "csd";
"'*'" = "ssd";
};
}; };
}; };
input = {
"'*'" = {
accel-profile = "adaptive";
pointer-accel = "0.5";
scroll-factor = "0.8";
};
"'*Synaptics*'" = {
natural-scroll = "enabled";
};
};
rule-add = {
"-app-id" = {
"'bar'" = "csd";
"'*'" = "ssd";
};
};
};
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.discord; cfg = config.modules.discord;
in { in
{
options.modules.discord = { options.modules.discord = {
enable = mkEnableOption "discord"; enable = mkEnableOption "discord";
}; };
@ -11,8 +17,6 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
modules.unfree.allowedPackages = [ "discord" ]; modules.unfree.allowedPackages = [ "discord" ];
home.packages = with pkgs; [ home.packages = with pkgs; [ discord ];
discord
];
}; };
} }

View File

@ -1,14 +1,16 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.feishin; cfg = config.modules.feishin;
in { in
{
options.modules.feishin.enable = mkEnableOption "feishin"; options.modules.feishin.enable = mkEnableOption "feishin";
config = mkIf cfg.enable { config = mkIf cfg.enable { home.packages = with pkgs; [ feishin ]; };
home.packages = with pkgs; [ }
feishin
];
};
}

View File

@ -1,8 +1,14 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
cfg = config.modules.firefox; cfg = config.modules.firefox;
in { in
{
options.modules.firefox.enable = lib.mkEnableOption "firefox"; options.modules.firefox.enable = lib.mkEnableOption "firefox";
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
@ -32,19 +38,19 @@ in {
DisableTelemetry = true; DisableTelemetry = true;
DisplayBookmarksToolbar = "never"; DisplayBookmarksToolbar = "never";
DisplayMenuBar = "never"; DisplayMenuBar = "never";
DNSOverHTTPS = { Enabled = false; }; DNSOverHTTPS = {
Enabled = false;
};
DontCheckDefaultBrowser = true; DontCheckDefaultBrowser = true;
PasswordManagerEnabled = false; PasswordManagerEnabled = false;
TranslateEnabled = true; TranslateEnabled = true;
UseSystemPrintDialog = true; UseSystemPrintDialog = true;
}; };
profiles.nixos = { profiles.nixos = {
search.default = "DuckDuckGo"; search.default = "DuckDuckGo";
extensions = with pkgs.nur.repos.rycee.firefox-addons; [ extensions = with pkgs.nur.repos.rycee.firefox-addons; [ ublock-origin ];
ublock-origin
];
settings = { settings = {
"browser.tabs.inTitlebar" = 0; "browser.tabs.inTitlebar" = 0;
@ -57,4 +63,4 @@ in {
}; };
}; };
}; };
} }

View File

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
@ -15,8 +20,11 @@ let
</alias> </alias>
''; '';
configContent = concatStrings (map (font: aliasConfig config.theming.fonts.pkgs.${font}) config.theming.fonts.installed); configContent = concatStrings (
in { map (font: aliasConfig config.theming.fonts.pkgs.${font}) config.theming.fonts.installed
);
in
{
options.modules.fontconfig = { options.modules.fontconfig = {
enable = mkEnableOption "fontconfig"; enable = mkEnableOption "fontconfig";
}; };
@ -26,18 +34,10 @@ in {
enable = true; enable = true;
defaultFonts = { defaultFonts = {
serif = [ serif = [ config.theming.fonts.serif.name ];
config.theming.fonts.serif.name sansSerif = [ config.theming.fonts.sansSerif.name ];
]; monospace = [ config.theming.fonts.monospace.name ];
sansSerif = [ emoji = [ config.theming.fonts.emoji.name ];
config.theming.fonts.sansSerif.name
];
monospace = [
config.theming.fonts.monospace.name
];
emoji = [
config.theming.fonts.emoji.name
];
}; };
}; };
@ -48,10 +48,10 @@ in {
<?xml version="1.0"?> <?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig> <fontconfig>
${configContent} ${configContent}
</fontconfig> </fontconfig>
''; '';
}; };
}; };
} }

View File

@ -1,25 +1,33 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.foot; cfg = config.modules.foot;
in { in
{
options.modules.foot.enable = mkEnableOption "foot"; options.modules.foot.enable = mkEnableOption "foot";
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.foot = { programs.foot = {
enable = true; enable = true;
settings = { settings = {
main = let main =
font = config.theming.fonts.monospace.name; let
size = toString config.theming.fonts.monospace.recommendedSize; font = config.theming.fonts.monospace.name;
in { size = toString config.theming.fonts.monospace.recommendedSize;
font = mkForce "${font}:style=Regular:size=${size}"; in
font-bold = "${font}:style=Bold:size=${size}"; {
font-italic = "${font}:style=Italic:size=${size}"; font = mkForce "${font}:style=Regular:size=${size}";
font-bold-italic = "${font}:style=Bold Italic:size=${size}"; font-bold = "${font}:style=Bold:size=${size}";
}; font-italic = "${font}:style=Italic:size=${size}";
font-bold-italic = "${font}:style=Bold Italic:size=${size}";
};
}; };
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.nix; cfg = config.modules.nix;
in { in
{
options.modules.nix = { options.modules.nix = {
enable = mkEnableOption "nix"; enable = mkEnableOption "nix";
}; };
@ -18,9 +24,7 @@ in {
# VSCode configuration # VSCode configuration
programs.vscode = { programs.vscode = {
extensions = with pkgs.vscode-extensions; [ extensions = with pkgs.vscode-extensions; [ jnoortheen.nix-ide ];
jnoortheen.nix-ide
];
userSettings = { userSettings = {
"[nix]" = { "[nix]" = {
@ -43,4 +47,4 @@ in {
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.rust; cfg = config.modules.rust;
in { in
{
options.modules.rust = { options.modules.rust = {
enable = mkEnableOption "rust"; enable = mkEnableOption "rust";
}; };
@ -11,21 +17,18 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
# Development packages # Development packages
home.packages = with pkgs; [ home.packages = with pkgs; [
rustc rustc
cargo cargo
rust-analyzer rust-analyzer
rustfmt rustfmt
]; ];
# VSCode configuration # VSCode configuration
programs.vscode = { programs.vscode = {
extensions = with pkgs.vscode-extensions; [ extensions = with pkgs.vscode-extensions; [ rust-lang.rust-analyzer ];
rust-lang.rust-analyzer
];
userSettings = { userSettings = {
"[rust]" = { "[rust]" = { };
};
}; };
}; };
@ -36,4 +39,4 @@ in {
}; };
}; };
}; };
} }

View File

@ -1,11 +1,17 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.mako; cfg = config.modules.mako;
theme = config.theming; theme = config.theming;
colors = theme.colors; colors = theme.colors;
in { in
{
options.modules.mako.enable = mkEnableOption "mako"; options.modules.mako.enable = mkEnableOption "mako";
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -22,4 +28,4 @@ in {
font = "${theme.fonts.monospace.name} ${toString theme.fonts.monospace.recommendedSize}"; font = "${theme.fonts.monospace.name} ${toString theme.fonts.monospace.recommendedSize}";
}; };
}; };
} }

View File

@ -1,11 +1,17 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.neovim; cfg = config.modules.neovim;
theme = config.theming; theme = config.theming;
colors = theme.colors; colors = theme.colors;
in { in
{
options.modules.neovim = { options.modules.neovim = {
enable = mkEnableOption "neovim"; enable = mkEnableOption "neovim";
}; };
@ -17,8 +23,7 @@ in {
viAlias = true; viAlias = true;
vimAlias = true; vimAlias = true;
extraPackages = with pkgs; [ extraPackages = with pkgs; [ ];
];
opts = { opts = {
number = true; number = true;
@ -179,4 +184,4 @@ in {
}; };
programs.neovim.defaultEditor = true; programs.neovim.defaultEditor = true;
}; };
} }

View File

@ -1,16 +1,18 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.obsidian; cfg = config.modules.obsidian;
in { in
{
options.modules.obsidian = { options.modules.obsidian = {
enable = mkEnableOption "obsidian"; enable = mkEnableOption "obsidian";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable { home.packages = with pkgs; [ obsidian ]; };
home.packages = with pkgs; [ }
obsidian
];
};
}

View File

@ -1,10 +1,16 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.qutebrowser; cfg = config.modules.qutebrowser;
theme = config.theming; theme = config.theming;
in { in
{
options.modules.qutebrowser.enable = mkEnableOption "qutebrowser"; options.modules.qutebrowser.enable = mkEnableOption "qutebrowser";
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -19,4 +25,4 @@ in {
''; '';
}; };
}; };
} }

View File

@ -1,11 +1,17 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.rofi; cfg = config.modules.rofi;
theme = config.theming; theme = config.theming;
colors = theme.colors; colors = theme.colors;
in { in
{
options.modules.rofi.enable = mkEnableOption "rofi"; options.modules.rofi.enable = mkEnableOption "rofi";
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -13,41 +19,43 @@ in {
enable = true; enable = true;
package = pkgs.rofi-wayland; package = pkgs.rofi-wayland;
font = "${theme.fonts.monospace.name} ${toString theme.fonts.monospace.recommendedSize}"; font = "${theme.fonts.monospace.name} ${toString theme.fonts.monospace.recommendedSize}";
theme = let theme =
inherit (config.lib.formats.rasi) mkLiteral; let
in { inherit (config.lib.formats.rasi) mkLiteral;
"*" = { in
background-color = mkLiteral "rgba(0, 0, 0, 0%)"; {
border-color = mkLiteral "#${colors.fg}"; "*" = {
text-color = mkLiteral "#${colors.fg}"; background-color = mkLiteral "rgba(0, 0, 0, 0%)";
border-color = mkLiteral "#${colors.fg}";
text-color = mkLiteral "#${colors.fg}";
};
mainbox = {
background-color = mkLiteral "#${colors.bg}";
border = mkLiteral "${toString theme.layout.borderSize}px";
};
element-text = {
highlight = mkLiteral "#${colors.accent}";
};
inputbar = {
children = mkLiteral "[textbox-search, entry]";
};
listview = {
padding = mkLiteral "2px 0px";
};
textbox-search = {
expand = false;
content = "> ";
};
"inputbar, message" = {
padding = mkLiteral "2px";
};
element = {
padding = mkLiteral "0px 2px";
};
"element selected" = {
background-color = mkLiteral "#${colors.unfocused}";
};
}; };
mainbox = {
background-color = mkLiteral "#${colors.bg}";
border = mkLiteral "${toString theme.layout.borderSize}px";
};
element-text = {
highlight = mkLiteral "#${colors.accent}";
};
inputbar = {
children = mkLiteral "[textbox-search, entry]";
};
listview = {
padding = mkLiteral "2px 0px";
};
textbox-search = {
expand = false;
content = "> ";
};
"inputbar, message" = {
padding = mkLiteral "2px";
};
element = {
padding = mkLiteral "0px 2px";
};
"element selected" = {
background-color = mkLiteral "#${colors.unfocused}";
};
};
}; };
}; };
} }

View File

@ -1,17 +1,21 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.rofi-rbw; cfg = config.modules.rofi-rbw;
in { in
{
options.modules.rofi-rbw.enable = mkEnableOption "rofi-rbw"; options.modules.rofi-rbw.enable = mkEnableOption "rofi-rbw";
config = mkIf cfg.enable { config = mkIf cfg.enable {
modules.rofi.enable = true; modules.rofi.enable = true;
home.packages = [ home.packages = [ pkgs.rofi-rbw ];
pkgs.rofi-rbw
];
# TODO: Move to separate module and make configurable # TODO: Move to separate module and make configurable
programs.rbw = { programs.rbw = {
@ -24,4 +28,4 @@ in {
}; };
}; };
}; };
} }

View File

@ -1,12 +1,18 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.bash; cfg = config.modules.bash;
in { in
{
options.modules.bash = { options.modules.bash = {
enable = mkEnableOption "bash"; enable = mkEnableOption "bash";
}; };
config.programs.bash.enable = cfg.enable; config.programs.bash.enable = cfg.enable;
} }

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.fish; cfg = config.modules.fish;
in { in
{
options.modules.fish = { options.modules.fish = {
enable = mkEnableOption "fish"; enable = mkEnableOption "fish";
@ -31,9 +37,18 @@ in {
enable = true; enable = true;
plugins = [ plugins = [
(mkIf cfg.plugins.done { name = "done"; src = pkgs.fishPlugins.done.src; }) (mkIf cfg.plugins.done {
(mkIf cfg.plugins.fzf { name = "fzf"; src = pkgs.fishPlugins.fzf-fish.src; }) name = "done";
(mkIf cfg.plugins.grc { name = "grc"; src = pkgs.fishPlugins.grc.src; }) src = pkgs.fishPlugins.done.src;
})
(mkIf cfg.plugins.fzf {
name = "fzf";
src = pkgs.fishPlugins.fzf-fish.src;
})
(mkIf cfg.plugins.grc {
name = "grc";
src = pkgs.fishPlugins.grc.src;
})
]; ];
}; };
@ -43,4 +58,4 @@ in {
(mkIf cfg.plugins.grc grc) (mkIf cfg.plugins.grc grc)
]; ];
}; };
} }

View File

@ -1,7 +1,13 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; { with lib;
{
options.modules.steam = { options.modules.steam = {
enable = mkEnableOption "steam"; enable = mkEnableOption "steam";
}; };
} }

View File

@ -7,4 +7,4 @@
./steam.nix ./steam.nix
./waylock.nix ./waylock.nix
]; ];
} }

View File

@ -1,10 +1,14 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
enabled = any (user: user.modules.river.enable) (attrValues config.home-manager.users); enabled = any (user: user.modules.river.enable) (attrValues config.home-manager.users);
in { in
config = mkIf enabled { {
programs.river.enable = true; config = mkIf enabled { programs.river.enable = true; };
}; }
}

View File

@ -1,10 +1,14 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
enabled = any (user: user.modules.steam.enable) (attrValues config.home-manager.users); enabled = any (user: user.modules.steam.enable) (attrValues config.home-manager.users);
in { in
config = mkIf enabled { {
programs.steam.enable = true; config = mkIf enabled { programs.steam.enable = true; };
}; }
}

View File

@ -1,10 +1,14 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
enabled = any (user: user.modules.waylock.enable) (attrValues config.home-manager.users); enabled = any (user: user.modules.waylock.enable) (attrValues config.home-manager.users);
in { in
config = mkIf enabled { {
security.pam.services.waylock = {}; config = mkIf enabled { security.pam.services.waylock = { }; };
}; }
}

View File

@ -1,4 +1,9 @@
{ pkgs, lib, config, ... }: {
pkgs,
lib,
config,
...
}:
with lib; with lib;
let let
@ -30,7 +35,7 @@ let
}; };
fallbackFonts = mkOption { fallbackFonts = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
default = []; default = [ ];
description = "Fallback fonts for specified font."; description = "Fallback fonts for specified font.";
}; };
}; };
@ -63,25 +68,35 @@ let
] ++ map (font: font.name) cfg.fonts.extraFonts; ] ++ map (font: font.name) cfg.fonts.extraFonts;
# Flatten dependencies of fonts # Flatten dependencies of fonts
fontPackages = converge (fonts: fontPackages =
listToAttrs (map (font: { converge
name = font; (
value = true; fonts:
}) ( listToAttrs (
flatten (map (font: map
[ font.name ] (font: {
++ cfg.fonts.pkgs.${font.name}.fallbackFonts name = font;
) (attrsToList fonts)) value = true;
)) })
) (listToAttrs (map (font: { (
name = font; flatten (map (font: [ font.name ] ++ cfg.fonts.pkgs.${font.name}.fallbackFonts) (attrsToList fonts))
value = true; )
}) enabledFonts)); )
)
(
listToAttrs (
map (font: {
name = font;
value = true;
}) enabledFonts
)
);
# Convert set of fonts to list of packages # Convert set of fonts to list of packages
fontNameList = map (font: font.name) (attrsToList fontPackages); fontNameList = map (font: font.name) (attrsToList fontPackages);
fontPackageList = map (font: cfg.fonts.pkgs.${font}.package) fontNameList; fontPackageList = map (font: cfg.fonts.pkgs.${font}.package) fontNameList;
in { in
{
imports = [ imports = [
# Import all themes # Import all themes
./themes/gruvbox.nix ./themes/gruvbox.nix
@ -90,123 +105,129 @@ in {
options.modules.theming.enable = mkEnableOption "theming"; options.modules.theming.enable = mkEnableOption "theming";
options.theming = let colors = config.theming.schemeColors; in { options.theming =
darkMode = mkOption { let
type = types.bool; colors = config.theming.schemeColors;
default = false; in
example = true; {
description = "Whether the app should use dark mode."; darkMode = mkOption {
}; type = types.bool;
default = false;
example = true;
description = "Whether the app should use dark mode.";
};
colorScheme = mkOption { colorScheme = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
description = "Base 16 color scheme to use for styling. See stylix documentation for more information."; description = "Base 16 color scheme to use for styling. See stylix documentation for more information.";
}; };
clientSideDecorations = mkOption { clientSideDecorations = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = "Whether to enable client side decorations for windows."; description = "Whether to enable client side decorations for windows.";
}; };
schemeColors = mkOption { schemeColors = mkOption {
type = types.attrsOf types.anything; type = types.attrsOf types.anything;
default = config.lib.stylix.colors; default = config.lib.stylix.colors;
description = "Generated colors from scheme"; description = "Generated colors from scheme";
}; };
colors = { colors = {
bg = mkOption { bg = mkOption {
type = types.str; type = types.str;
default = colors.base00; default = colors.base00;
};
fg = mkOption {
type = types.str;
default = colors.base05;
};
accent = mkOption {
type = types.str;
default = colors.base09;
};
focused = mkOption {
type = types.str;
default = cfg.colors.fg;
};
unfocused = mkOption {
type = types.str;
default = colors.base02;
};
alert = mkOption {
type = types.str;
default = "ffffff"; # TODO: Derive color from theme
};
}; };
fg = mkOption {
type = types.str; layout = {
default = colors.base05; borderRadius = mkOption {
type = types.int;
default = 0;
description = "Border radius of windows.";
};
borderSize = mkOption {
type = types.int;
default = 1;
description = "Size of borders used throughout UI.";
};
windowPadding = mkOption {
type = types.int;
default = 2;
description = "Margin of each window, actual space between windows will be twice this number.";
};
}; };
accent = mkOption {
type = types.str; fonts = {
default = colors.base09; pkgs = mkOption {
}; type = types.attrsOf fontModule;
focused = mkOption { default = builtins.listToAttrs (
type = types.str; map (module: {
default = cfg.colors.fg; name = module.name;
}; value = module;
unfocused = mkOption { }) (map (module: (import module) { inherit lib config pkgs; }) fontModules)
type = types.str; );
default = colors.base02; description = "All available font modules.";
}; };
alert = mkOption {
type = types.str; installed = mkOption {
default = "ffffff"; # TODO: Derive color from theme type = types.listOf types.str;
default = fontNameList;
description = "List of installed fonts.";
};
serif = mkOption {
type = fontModule;
description = "Default serif font";
};
sansSerif = mkOption {
type = fontModule;
description = "Default sansSerif font.";
};
monospace = mkOption {
type = fontModule;
description = "Default monospace font.";
};
emoji = mkOption {
type = fontModule;
description = "Default emoji font.";
};
extraFonts = mkOption {
type = types.listOf fontModule;
default = [ ];
description = "Additional fonts to install.";
};
}; };
}; };
layout = {
borderRadius = mkOption {
type = types.int;
default = 0;
description = "Border radius of windows.";
};
borderSize = mkOption {
type = types.int;
default = 1;
description = "Size of borders used throughout UI.";
};
windowPadding = mkOption {
type = types.int;
default = 2;
description = "Margin of each window, actual space between windows will be twice this number.";
};
};
fonts = {
pkgs = mkOption {
type = types.attrsOf fontModule;
default = builtins.listToAttrs (map (module: {
name = module.name;
value = module;
}) (map (module: (import module) { inherit lib config pkgs; }) fontModules));
description = "All available font modules.";
};
installed = mkOption {
type = types.listOf types.str;
default = fontNameList;
description = "List of installed fonts.";
};
serif = mkOption {
type = fontModule;
description = "Default serif font";
};
sansSerif = mkOption {
type = fontModule;
description = "Default sansSerif font.";
};
monospace = mkOption {
type = fontModule;
description = "Default monospace font.";
};
emoji = mkOption {
type = fontModule;
description = "Default emoji font.";
};
extraFonts = mkOption {
type = types.listOf fontModule;
default = [];
description = "Additional fonts to install.";
};
};
};
config = mkIf config.modules.theming.enable { config = mkIf config.modules.theming.enable {
# Enable fontconfig # Enable fontconfig
modules.fontconfig.enable = true; modules.fontconfig.enable = true;
@ -229,30 +250,32 @@ in {
}; };
# Configure gtk theme # Configure gtk theme
gtk = let gtk =
disableCSD = '' let
headerbar.default-decoration { disableCSD = ''
margin-bottom: 50px; headerbar.default-decoration {
margin-top: -100px; margin-bottom: 50px;
} margin-top: -100px;
}
window.csd, window.csd,
window.csd decoration { window.csd decoration {
box-shadow: none; box-shadow: none;
} }
''; '';
in { in
enable = true; {
enable = true;
theme = { theme = {
name = if cfg.darkMode then "Adwaita-dark" else "Adwaita-light"; name = if cfg.darkMode then "Adwaita-dark" else "Adwaita-light";
package = pkgs.gnome-themes-extra; package = pkgs.gnome-themes-extra;
};
gtk3.extraCss = mkIf (!cfg.clientSideDecorations) disableCSD;
gtk4.extraCss = mkIf (!cfg.clientSideDecorations) disableCSD;
}; };
gtk3.extraCss = mkIf (! cfg.clientSideDecorations) disableCSD;
gtk4.extraCss = mkIf (! cfg.clientSideDecorations) disableCSD;
};
# TODO: This should just straight up not be here # TODO: This should just straight up not be here
programs.direnv = { programs.direnv = {
enable = true; enable = true;
@ -289,10 +312,22 @@ in {
polarity = if cfg.darkMode then "dark" else "light"; polarity = if cfg.darkMode then "dark" else "light";
fonts = { fonts = {
serif = getAttrs [ "name" "package" ] cfg.fonts.serif; serif = getAttrs [
sansSerif = getAttrs [ "name" "package" ] cfg.fonts.sansSerif; "name"
monospace = getAttrs [ "name" "package" ] cfg.fonts.monospace; "package"
emoji = getAttrs [ "name" "package" ] cfg.fonts.emoji; ] cfg.fonts.serif;
sansSerif = getAttrs [
"name"
"package"
] cfg.fonts.sansSerif;
monospace = getAttrs [
"name"
"package"
] cfg.fonts.monospace;
emoji = getAttrs [
"name"
"package"
] cfg.fonts.emoji;
sizes = { sizes = {
applications = mkDefault cfg.fonts.serif.recommendedSize; applications = mkDefault cfg.fonts.serif.recommendedSize;

View File

@ -4,6 +4,5 @@
name = "Cozette Vector"; name = "Cozette Vector";
package = pkgs.cozette; package = pkgs.cozette;
recommendedSize = 9; recommendedSize = 9;
fallbackFonts = [ fallbackFonts = [ ];
]; }
}

View File

@ -4,7 +4,5 @@
name = "Cozette"; name = "Cozette";
package = pkgs.cozette; package = pkgs.cozette;
recommendedSize = 9; recommendedSize = 9;
fallbackFonts = [ fallbackFonts = [ "Cozette Vector" ];
"Cozette Vector" }
];
}

View File

@ -4,5 +4,5 @@
name = "DejaVu Sans"; name = "DejaVu Sans";
package = pkgs.dejavu_fonts; package = pkgs.dejavu_fonts;
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = []; fallbackFonts = [ ];
} }

View File

@ -4,5 +4,5 @@
name = "DejaVu Serif"; name = "DejaVu Serif";
package = pkgs.dejavu_fonts; package = pkgs.dejavu_fonts;
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = []; fallbackFonts = [ ];
} }

View File

@ -9,4 +9,4 @@
"wenquanyi bitmap song" "wenquanyi bitmap song"
"Symbols Nerd Font Mono" "Symbols Nerd Font Mono"
]; ];
} }

View File

@ -4,7 +4,5 @@
name = "Fira Code"; name = "Fira Code";
package = pkgs.fira-code; package = pkgs.fira-code;
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = [ fallbackFonts = [ "Symbols Nerd Font Mono" ];
"Symbols Nerd Font Mono" }
];
}

View File

@ -4,5 +4,5 @@
name = "Symbols Nerd Font Mono"; name = "Symbols Nerd Font Mono";
package = pkgs.nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; }; package = pkgs.nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; };
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = []; fallbackFonts = [ ];
} }

View File

@ -4,5 +4,5 @@
name = "Noto Color Emoji"; name = "Noto Color Emoji";
package = pkgs.noto-fonts-color-emoji; package = pkgs.noto-fonts-color-emoji;
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = []; fallbackFonts = [ ];
} }

View File

@ -4,5 +4,5 @@
name = "wenquanyi bitmap song"; name = "wenquanyi bitmap song";
package = pkgs.wqy-bitmapsong; package = pkgs.wqy-bitmapsong;
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = []; fallbackFonts = [ ];
} }

View File

@ -4,5 +4,5 @@
name = "WenQuanYi Micro Hei Mono"; name = "WenQuanYi Micro Hei Mono";
package = pkgs.wqy-microhei; package = pkgs.wqy-microhei;
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = []; fallbackFonts = [ ];
} }

View File

@ -4,5 +4,5 @@
name = "WenQuanYi Micro Hei"; name = "WenQuanYi Micro Hei";
package = pkgs.wqy-microhei; package = pkgs.wqy-microhei;
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = []; fallbackFonts = [ ];
} }

View File

@ -4,5 +4,5 @@
name = "WenQuanYi Zen Hei Mono"; name = "WenQuanYi Zen Hei Mono";
package = pkgs.wqy-zenhei; package = pkgs.wqy-zenhei;
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = []; fallbackFonts = [ ];
} }

View File

@ -4,5 +4,5 @@
name = "WenQuanYi Zen Hei Sharp"; name = "WenQuanYi Zen Hei Sharp";
package = pkgs.wqy-zenhei; package = pkgs.wqy-zenhei;
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = []; fallbackFonts = [ ];
} }

View File

@ -4,5 +4,5 @@
name = "WenQuanYi Zen Hei"; name = "WenQuanYi Zen Hei";
package = pkgs.wqy-zenhei; package = pkgs.wqy-zenhei;
recommendedSize = 12; recommendedSize = 12;
fallbackFonts = []; fallbackFonts = [ ];
} }

View File

@ -1,14 +1,25 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.theming.themes.catppuccin; cfg = config.theming.themes.catppuccin;
in { in
{
options = { options = {
theming.themes.catppuccin = { theming.themes.catppuccin = {
enable = mkEnableOption "catppuccin"; enable = mkEnableOption "catppuccin";
flavor = mkOption { flavor = mkOption {
type = types.enum [ "latte" "frappe" "macchiato" "mocha" ]; type = types.enum [
"latte"
"frappe"
"macchiato"
"mocha"
];
default = "mocha"; default = "mocha";
description = "The flavor of catppuccin theme."; description = "The flavor of catppuccin theme.";
}; };

View File

@ -1,16 +1,26 @@
{ config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.theming.themes.gruvbox; cfg = config.theming.themes.gruvbox;
mode = if cfg.darkMode then "dark" else "light"; mode = if cfg.darkMode then "dark" else "light";
in { in
{
options = { options = {
theming.themes.gruvbox = { theming.themes.gruvbox = {
enable = mkEnableOption "gruvbox-hard"; enable = mkEnableOption "gruvbox-hard";
darkMode = mkEnableOption "dark mode"; darkMode = mkEnableOption "dark mode";
contrast = mkOption { contrast = mkOption {
type = types.enum [ "hard" "medium" "soft" ]; type = types.enum [
"hard"
"medium"
"soft"
];
default = "hard"; default = "hard";
description = "The contrast level of the theme."; description = "The contrast level of the theme.";
}; };

View File

@ -1,10 +1,16 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.vscode; cfg = config.modules.vscode;
theme = config.theming; theme = config.theming;
in { in
{
options.modules.vscode = { options.modules.vscode = {
enable = mkEnableOption "vscode"; enable = mkEnableOption "vscode";
codeFont = mkOption { codeFont = mkOption {
@ -19,28 +25,24 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
modules.unfree.allowedPackages = [ "vscode" ]; modules.unfree.allowedPackages = [ "vscode" ];
theming.fonts.extraFonts = [ theming.fonts.extraFonts = [ cfg.codeFont ];
cfg.codeFont
];
programs.vscode = { programs.vscode = {
enable = true; enable = true;
mutableExtensionsDir = false; mutableExtensionsDir = false;
extensions = with pkgs.vscode-extensions; [ extensions = with pkgs.vscode-extensions; [ eamodio.gitlens ];
eamodio.gitlens
];
userSettings = { userSettings = {
# Font setup # Font setup
# TODO: Move the conversion factor to theme settings # TODO: Move the conversion factor to theme settings
"editor.fontFamily" = mkForce "'${cfg.codeFont.name}', '${cfg.fallbackFont.name}'"; "editor.fontFamily" = mkForce "'${cfg.codeFont.name}', '${cfg.fallbackFont.name}'";
"editor.fontSize" = mkForce (cfg.codeFont.recommendedSize); # Convert pt to px "editor.fontSize" = mkForce (cfg.codeFont.recommendedSize); # Convert pt to px
"editor.fontLigatures" = true; "editor.fontLigatures" = true;
"terminal.integrated.fontFamily" = mkForce "'${cfg.codeFont.name}', '${cfg.fallbackFont.name}'"; "terminal.integrated.fontFamily" = mkForce "'${cfg.codeFont.name}', '${cfg.fallbackFont.name}'";
"terminal.integrated.fontSize" = mkForce (cfg.codeFont.recommendedSize); # Convert pt to px "terminal.integrated.fontSize" = mkForce (cfg.codeFont.recommendedSize); # Convert pt to px
# Formatting # Formatting
"editor.formatOnSave" = true; "editor.formatOnSave" = true;
"editor.tabSize" = 4; "editor.tabSize" = 4;
@ -50,4 +52,4 @@ in {
}; };
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.winbox; cfg = config.modules.winbox;
in { in
{
options.modules.winbox = { options.modules.winbox = {
enable = mkEnableOption "winbox"; enable = mkEnableOption "winbox";
}; };
@ -11,8 +17,6 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
modules.unfree.allowedPackages = [ "winbox" ]; modules.unfree.allowedPackages = [ "winbox" ];
home.packages = with pkgs; [ home.packages = with pkgs; [ winbox ];
winbox
];
}; };
} }

View File

@ -1,8 +1,14 @@
{config, lib, pkgs, ... }: {
config,
lib,
pkgs,
...
}:
let let
cfg = config.modules.zathura; cfg = config.modules.zathura;
in { in
{
options.modules.zathura.enable = lib.mkEnableOption "zathura"; options.modules.zathura.enable = lib.mkEnableOption "zathura";
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
@ -14,4 +20,4 @@ in {
}; };
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.tailscale; cfg = config.modules.tailscale;
in { in
{
options.modules.tailscale = { options.modules.tailscale = {
enable = mkEnableOption "tailscale"; enable = mkEnableOption "tailscale";
}; };
@ -14,4 +20,4 @@ in {
useRoutingFeatures = "client"; useRoutingFeatures = "client";
}; };
}; };
} }

View File

@ -1,9 +1,15 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
let let
cfg = config.modules.wpa_supplicant; cfg = config.modules.wpa_supplicant;
in { in
{
options.modules.wpa_supplicant = { options.modules.wpa_supplicant = {
enable = mkEnableOption "wpa_supplicant"; enable = mkEnableOption "wpa_supplicant";
}; };
@ -15,4 +21,4 @@ in {
allowAuxiliaryImperativeNetworks = true; allowAuxiliaryImperativeNetworks = true;
}; };
}; };
} }

View File

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
with lib; with lib;
# let # let
@ -17,8 +22,8 @@ with lib;
# } # }
{ {
nixpkgs.config.packageOverrides = pkgs: rec { nixpkgs.config.packageOverrides = pkgs: rec {
wqy-zenhei = pkgs.callPackage ./fonts/wqy-zenhei.nix {}; wqy-zenhei = pkgs.callPackage ./fonts/wqy-zenhei.nix { };
wqy-microhei = pkgs.callPackage ./fonts/wqy-microhei.nix {}; wqy-microhei = pkgs.callPackage ./fonts/wqy-microhei.nix { };
wqy-bitmapsong = pkgs.callPackage ./fonts/wqy-bitmapsong.nix {}; wqy-bitmapsong = pkgs.callPackage ./fonts/wqy-bitmapsong.nix { };
}; };
} }

View File

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
pkgs.stdenv.mkDerivation rec { pkgs.stdenv.mkDerivation rec {
pname = "wqy-bitmapsong-pcf"; pname = "wqy-bitmapsong-pcf";
@ -30,4 +35,4 @@ pkgs.stdenv.mkDerivation rec {
installPhase = '' installPhase = ''
install -Dm644 *.otb -t $out/share/fonts/ install -Dm644 *.otb -t $out/share/fonts/
''; '';
} }

View File

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
pkgs.stdenv.mkDerivation rec { pkgs.stdenv.mkDerivation rec {
pname = "wqy-microhei"; pname = "wqy-microhei";
@ -6,7 +11,7 @@ pkgs.stdenv.mkDerivation rec {
src = pkgs.fetchurl { src = pkgs.fetchurl {
url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz"; url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz";
hash = "sha256-KAKsgCOqNqZupudEWFTjoHjTd///QhaTQb0jeHH3IT4="; hash = "sha256-KAKsgCOqNqZupudEWFTjoHjTd///QhaTQb0jeHH3IT4=";
}; };
installPhase = '' installPhase = ''
@ -16,4 +21,4 @@ pkgs.stdenv.mkDerivation rec {
runHook postInstall runHook postInstall
''; '';
} }

View File

@ -1,4 +1,9 @@
{ lib, config, pkgs, ... }: {
lib,
config,
pkgs,
...
}:
pkgs.stdenv.mkDerivation rec { pkgs.stdenv.mkDerivation rec {
pname = "wqy-zenhei"; pname = "wqy-zenhei";
@ -16,4 +21,4 @@ pkgs.stdenv.mkDerivation rec {
runHook postInstall runHook postInstall
''; '';
} }

View File

@ -39,19 +39,23 @@
}; };
# Theme configuration # Theme configuration
theming = let fontpkgs = config.theming.fonts.pkgs; in { theming =
# Fonts let
fonts.serif = fontpkgs."DejaVu Serif"; fontpkgs = config.theming.fonts.pkgs;
fonts.sansSerif = fontpkgs."DejaVu Sans"; in
fonts.monospace = fontpkgs."Dina"; {
fonts.emoji = fontpkgs."Dina"; # Fonts
fonts.extraFonts = []; fonts.serif = fontpkgs."DejaVu Serif";
fonts.sansSerif = fontpkgs."DejaVu Sans";
# Color scheme fonts.monospace = fontpkgs."Dina";
themes.catppuccin = { fonts.emoji = fontpkgs."Dina";
enable = true; fonts.extraFonts = [ ];
flavor = "frappe";
# Color scheme
themes.catppuccin = {
enable = true;
flavor = "frappe";
};
}; };
};
}; };
} }