Compare commits
	
		
			2 Commits
		
	
	
		
			47365d05f5
			...
			16de891fc7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 16de891fc7 | ||
|   | e1b1e7cc38 | 
							
								
								
									
										14
									
								
								default.nix
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								default.nix
									
									
									
									
									
								
							| @ -1,11 +1,11 @@ | ||||
| { ... }: | ||||
| 
 | ||||
| { | ||||
|     imports = [ | ||||
|         # Import modules | ||||
|         ./modules/default.nix | ||||
|   imports = [ | ||||
|     # Import modules | ||||
|     ./modules/default.nix | ||||
| 
 | ||||
|         # Import custom packages | ||||
|         ./pkgs/default.nix | ||||
|     ]; | ||||
| } | ||||
|     # Import custom packages | ||||
|     ./pkgs/default.nix | ||||
|   ]; | ||||
| } | ||||
|  | ||||
| @ -26,4 +26,4 @@ | ||||
|       configuration = ../users/jan.nix; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.base; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.base = { | ||||
|     enable = mkEnableOption "base"; | ||||
|   }; | ||||
| @ -15,7 +21,6 @@ in { | ||||
|       wget | ||||
|       curl | ||||
|       dig | ||||
|       nix-tree | ||||
|       procps | ||||
|     ]; | ||||
| 
 | ||||
| @ -33,7 +38,7 @@ in { | ||||
|     programs.dconf.enable = true; | ||||
|     xdg.portal = { | ||||
|       enable = true; | ||||
|      | ||||
| 
 | ||||
|       extraPortals = with pkgs; [ | ||||
|         xdg-desktop-portal-gtk | ||||
|         xdg-desktop-portal-wlr | ||||
| @ -46,4 +51,4 @@ in { | ||||
|       "nvidia-settings" | ||||
|     ]; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,14 +1,18 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.clean-tmp; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.clean-tmp = { | ||||
|     enable = mkEnableOption "clean-tmp"; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     boot.tmp.cleanOnBoot = true; | ||||
|   }; | ||||
| } | ||||
|   config = mkIf cfg.enable { boot.tmp.cleanOnBoot = true; }; | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.silent-boot; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.silent-boot = { | ||||
|     enable = mkEnableOption "silent-boot"; | ||||
|   }; | ||||
| @ -11,7 +17,7 @@ in { | ||||
|   config = mkIf cfg.enable { | ||||
|     boot = { | ||||
|       loader.timeout = 0; | ||||
|        | ||||
| 
 | ||||
|       consoleLogLevel = 0; | ||||
|       initrd.verbose = false; | ||||
|       initrd.checkJournalingFS = false; | ||||
| @ -28,4 +34,4 @@ in { | ||||
|       ]; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.systemd-boot; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.systemd-boot = { | ||||
|     enable = mkEnableOption "systemd-boot"; | ||||
|   }; | ||||
| @ -15,4 +21,4 @@ in { | ||||
|       efi.canTouchEfiVariables = true; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,16 +1,18 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.brightnessctl; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.brightnessctl = { | ||||
|     enable = mkEnableOption "brightnessctl"; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     environment.systemPackages = [ | ||||
|         pkgs.brightnessctl | ||||
|     ]; | ||||
|   }; | ||||
| } | ||||
|   config = mkIf cfg.enable { environment.systemPackages = [ pkgs.brightnessctl ]; }; | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,12 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; { | ||||
| with lib; | ||||
| { | ||||
|   imports = [ | ||||
|     # Import modules | ||||
|     ./base/default.nix | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.fontconfig; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.fontconfig = { | ||||
|     enable = mkEnableOption "fontconfig"; | ||||
|   }; | ||||
| @ -12,10 +18,10 @@ in { | ||||
|     fonts.fontconfig.enable = cfg.enable; | ||||
|     fonts.enableDefaultPackages = false; | ||||
|     fonts.fontconfig.defaultFonts = { | ||||
|         serif = mkDefault []; | ||||
|         sansSerif = mkDefault []; | ||||
|         monospace = mkDefault []; | ||||
|         emoji = mkDefault []; | ||||
|       serif = mkDefault [ ]; | ||||
|       sansSerif = mkDefault [ ]; | ||||
|       monospace = mkDefault [ ]; | ||||
|       emoji = mkDefault [ ]; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,9 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| { | ||||
|   config = { | ||||
| @ -6,7 +11,7 @@ | ||||
|     # Set up graphics | ||||
|     hardware.graphics.enable32Bit = true; | ||||
|     hardware.graphics.enable = true; | ||||
|     services.xserver.videoDrivers = ["nvidia"]; | ||||
|     services.xserver.videoDrivers = [ "nvidia" ]; | ||||
|     hardware.nvidia = { | ||||
|       modesetting.enable = true; | ||||
|       powerManagement.enable = false; | ||||
| @ -24,4 +29,4 @@ | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.greetd; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.greetd = { | ||||
|     enable = mkEnableOption "greetd"; | ||||
|     command = mkOption { | ||||
| @ -22,4 +28,4 @@ in { | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,16 +1,22 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.tuigreet; | ||||
| in { | ||||
|   options.modules.tuigreet = {  | ||||
|     enable = mkEnableOption "tuigreet";  | ||||
| in | ||||
| { | ||||
|   options.modules.tuigreet = { | ||||
|     enable = mkEnableOption "tuigreet"; | ||||
|     greeting = mkOption { | ||||
|       type = types.str; | ||||
|       default = "Hewwo! >_< :3"; | ||||
|       description = "Greeting message to show."; | ||||
|     };  | ||||
|     }; | ||||
|     command = mkOption { | ||||
|       type = types.str; | ||||
|       default = "~/.initrc"; | ||||
| @ -28,4 +34,4 @@ in { | ||||
|     # Enable silent boot to prevent late log messages from messing up tuigreet | ||||
|     modules.silent-boot.enable = true; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,9 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| { | ||||
|   config = { | ||||
| @ -6,4 +11,4 @@ | ||||
|     i18n.defaultLocale = "en_US.UTF-8"; | ||||
|     console.keyMap = "us"; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.neovim; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.neovim = { | ||||
|     enable = mkEnableOption "neovim"; | ||||
|   }; | ||||
| @ -14,4 +20,4 @@ in { | ||||
|       defaultEditor = true; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.pipewire; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.pipewire = { | ||||
|     enable = mkEnableOption "pipewire"; | ||||
|   }; | ||||
| @ -15,4 +21,4 @@ in { | ||||
|       pulse.enable = true; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,18 +1,24 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let  | ||||
| let | ||||
|   cfg = config.modules.unfree; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.unfree = { | ||||
|     enable = mkEnableOption "unfree"; | ||||
|     allowedPackages = mkOption { | ||||
|       type = types.listOf types.str; | ||||
|       default = []; | ||||
|       default = [ ]; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (getName pkg) cfg.allowedPackages; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,19 +1,24 @@ | ||||
| { config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   # Nixvim | ||||
|   nixvim = import (builtins.fetchGit { | ||||
|     url = "https://github.com/nix-community/nixvim"; | ||||
|   }); | ||||
|   nixvim = import (builtins.fetchGit { url = "https://github.com/nix-community/nixvim"; }); | ||||
| 
 | ||||
|   # Stylix | ||||
|   stylix = import (pkgs.fetchFromGitHub { | ||||
|     owner = "danth"; | ||||
|     repo = "stylix"; | ||||
|     rev = "1ff9d37d27377bfe8994c24a8d6c6c1734ffa116"; | ||||
|     sha256 = "0dz8h1ga8lnfvvmvsf6iqvnbvxrvx3qxi0y8s8b72066mqgvy8y5"; | ||||
|   }); | ||||
|   stylix = import ( | ||||
|     pkgs.fetchFromGitHub { | ||||
|       owner = "danth"; | ||||
|       repo = "stylix"; | ||||
|       rev = "1ff9d37d27377bfe8994c24a8d6c6c1734ffa116"; | ||||
|       sha256 = "0dz8h1ga8lnfvvmvsf6iqvnbvxrvx3qxi0y8s8b72066mqgvy8y5"; | ||||
|     } | ||||
|   ); | ||||
| 
 | ||||
|   # User configuration | ||||
|   userModule = types.submodule { | ||||
| @ -36,7 +41,8 @@ let | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   imports = [ | ||||
|     # Import home manager | ||||
|     <home-manager/nixos> | ||||
| @ -48,7 +54,7 @@ in { | ||||
|   options = { | ||||
|     machine.users = mkOption { | ||||
|       type = types.attrsOf userModule; | ||||
|       default = {}; | ||||
|       default = { }; | ||||
|       description = "Users configured on this system."; | ||||
|     }; | ||||
|   }; | ||||
|  | ||||
| @ -1,6 +1,11 @@ | ||||
| { input, pkgs, config, ... }: | ||||
| { | ||||
|   input, | ||||
|   pkgs, | ||||
|   config, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| {  | ||||
| { | ||||
|   imports = [ | ||||
|     # Import all modules | ||||
|     ./desktop/default.nix | ||||
| @ -9,6 +14,8 @@ | ||||
|     ./firefox/default.nix | ||||
|     ./fontconfig/default.nix | ||||
|     ./foot/default.nix | ||||
|     ./language/nix.nix | ||||
|     ./language/rust.nix | ||||
|     ./mako/default.nix | ||||
|     ./neovim/default.nix | ||||
|     ./obsidian/default.nix | ||||
|  | ||||
| @ -1,11 +1,17 @@ | ||||
| { lib, config, pkgs, ... }:  | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.waybar; | ||||
|   theme = config.theming; | ||||
|   colors = theme.colors; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.waybar = { | ||||
|     enable = mkEnableOption "waybar"; | ||||
|   }; | ||||
| @ -22,9 +28,7 @@ in { | ||||
|         mainBar = { | ||||
|           layer = "top"; | ||||
|           spacing = 16; | ||||
|           modules-left = [ | ||||
|             "river/tags" | ||||
|           ]; | ||||
|           modules-left = [ "river/tags" ]; | ||||
|           modules-center = [ | ||||
|             #"river/window" | ||||
|             "mpris" | ||||
| @ -61,14 +65,30 @@ in { | ||||
|               #default = [ "" "" ]; | ||||
|               headphone = ""; | ||||
|               headphone-muted = ""; | ||||
|               default = [ "" "" "" ]; | ||||
|               default = [ | ||||
|                 "" | ||||
|                 "" | ||||
|                 "" | ||||
|               ]; | ||||
|             }; | ||||
|           }; | ||||
|           battery = { | ||||
|             format = "{icon} {capacity}%"; # Spacing achieved using "Thin Space" | ||||
|             format-charging = " {capacity}%"; # Spacing achieved using "Thin Space" | ||||
|             #format-icons = [ "" "" "" "" "" "" "" "" "" "" "" ]; | ||||
|             format-icons = [ "" "" "" "" "" "" "" "" "" "" "" ]; | ||||
|             format-icons = [ | ||||
|               "" | ||||
|               "" | ||||
|               "" | ||||
|               "" | ||||
|               "" | ||||
|               "" | ||||
|               "" | ||||
|               "" | ||||
|               "" | ||||
|               "" | ||||
|               "" | ||||
|             ]; | ||||
|             interval = 1; | ||||
|           }; | ||||
|           clock = { | ||||
| @ -117,4 +137,4 @@ in { | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| { lib, pkgs, config, ... }: | ||||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.desktop; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   imports = [ | ||||
|     # Import desktop environment modules | ||||
|     ./bar/waybar.nix | ||||
| @ -21,18 +27,23 @@ in { | ||||
|   }; | ||||
| 
 | ||||
|   config = { | ||||
|     home.packages = optionals cfg.wayland (with pkgs; [ | ||||
|       pkgs.wl-clipboard | ||||
|       pkgs.wtype | ||||
|     ]); | ||||
|     home.packages = optionals cfg.wayland ( | ||||
|       with pkgs; | ||||
|       [ | ||||
|         pkgs.wl-clipboard | ||||
|         pkgs.wtype | ||||
|       ] | ||||
|     ); | ||||
| 
 | ||||
|     home.file.".initrc" = { | ||||
|       enable = true; | ||||
|       executable = true; | ||||
|       text = '' | ||||
|         #!${pkgs.bash}/bin/bash | ||||
|       text = | ||||
|         '' | ||||
|           #!${pkgs.bash}/bin/bash | ||||
| 
 | ||||
|       '' + cfg.initScript; | ||||
|         '' | ||||
|         + cfg.initScript; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | ||||
| @ -1,16 +1,20 @@ | ||||
| { lib, pkgs, config, ... }: | ||||
| { | ||||
|   lib, | ||||
|   pkgs, | ||||
|   config, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.waylock; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.waylock = { | ||||
|     enable = mkEnableOption "waylock"; | ||||
|   }; | ||||
| 
 | ||||
|   config = { | ||||
|     home.packages = mkIf cfg.enable (with pkgs; [ | ||||
|       waylock | ||||
|     ]); | ||||
|     home.packages = mkIf cfg.enable (with pkgs; [ waylock ]); | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,8 +1,14 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.modules.river; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.river.enable = lib.mkEnableOption "river"; | ||||
| 
 | ||||
|   # osConfig = lib.mkIf cfg.enable { | ||||
| @ -13,6 +19,9 @@ in { | ||||
|     # Set desktop type to wayland | ||||
|     modules.desktop.wayland = true; | ||||
| 
 | ||||
|     # TODO: Move elsewhere and make keybindings more configurable | ||||
|     modules.rofi.enable = true; | ||||
| 
 | ||||
|     # Change desktop to execute river | ||||
|     modules.desktop.initScript = '' | ||||
|       river | ||||
| @ -37,152 +46,190 @@ in { | ||||
|       enable = true; | ||||
|       systemd.enable = false; | ||||
|       xwayland.enable = true; | ||||
|       settings = let | ||||
|         layout = "rivertile"; | ||||
|         layoutOptions = "-outer-padding ${toString config.theming.layout.windowPadding} -view-padding ${toString config.theming.layout.windowPadding}"; | ||||
|         modes = ["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}"; | ||||
|       settings = | ||||
|         let | ||||
|           layout = "rivertile"; | ||||
|           layoutOptions = "-outer-padding ${toString config.theming.layout.windowPadding} -view-padding ${toString config.theming.layout.windowPadding}"; | ||||
|           modes = [ | ||||
|             "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 | ||||
|         pow2 = power: | ||||
|           if power != 0 | ||||
|           then 2 * (pow2 (power - 1)) | ||||
|           else 1; | ||||
|           # Quick pow function | ||||
|           pow2 = power: if power != 0 then 2 * (pow2 (power - 1)) else 1; | ||||
| 
 | ||||
|         # Modifiers | ||||
|         main = "Super"; | ||||
|         ssm = "Super+Shift"; | ||||
|         sas = "Super+Alt+Shift"; | ||||
|         sam = "Super+Alt"; | ||||
|         scm = "Super+Control"; | ||||
|         scam = "Super+Control+Alt"; | ||||
|         ssc = "Super+Shift+Control"; | ||||
|       in { | ||||
|         default-layout = "${layout}"; | ||||
|         set-repeat = "50 300"; | ||||
|         xcursor-theme = "BreezeX-RosePine-Linux 24"; | ||||
|         keyboard-layout = "-options \"caps:escape\" us"; | ||||
|           # Modifiers | ||||
|           main = "Super"; | ||||
|           ssm = "Super+Shift"; | ||||
|           sas = "Super+Alt+Shift"; | ||||
|           sam = "Super+Alt"; | ||||
|           scm = "Super+Control"; | ||||
|           scam = "Super+Control+Alt"; | ||||
|           ssc = "Super+Shift+Control"; | ||||
|         in | ||||
|         { | ||||
|           default-layout = "${layout}"; | ||||
|           set-repeat = "50 300"; | ||||
|           xcursor-theme = "BreezeX-RosePine-Linux 24"; | ||||
|           keyboard-layout = "-options \"caps:escape\" us"; | ||||
| 
 | ||||
|         border-width = toString config.theming.layout.borderSize; | ||||
|         background-color = "0x${colors.bg}"; | ||||
|         border-color-focused = "0x${colors.fg}"; | ||||
|         border-color-unfocused = "0x${colors.unfocused}"; # TODO: Change to use named color; | ||||
|         border-color-urgent = "0x${colors.fg}"; | ||||
|           border-width = toString config.theming.layout.borderSize; | ||||
|           background-color = "0x${colors.bg}"; | ||||
|           border-color-focused = "0x${colors.fg}"; | ||||
|           border-color-unfocused = "0x${colors.unfocused}"; # TODO: Change to use named color; | ||||
|           border-color-urgent = "0x${colors.fg}"; | ||||
| 
 | ||||
|         spawn = [ | ||||
|           "\"${layout} ${layoutOptions}\"" | ||||
|           "waybar" | ||||
|         ]; | ||||
|         map = (lib.attrsets.recursiveUpdate ({ | ||||
|           normal = { | ||||
|             "${main} Q" = "close"; | ||||
|             "${ssm} E" = "exit"; | ||||
|           spawn = [ | ||||
|             "\"${layout} ${layoutOptions}\"" | ||||
|             "waybar" | ||||
|           ]; | ||||
|           map = ( | ||||
|             lib.attrsets.recursiveUpdate | ||||
|               ({ | ||||
|                 normal = | ||||
|                   { | ||||
|                     "${main} Q" = "close"; | ||||
|                     "${ssm} E" = "exit"; | ||||
| 
 | ||||
|             # Basic utilities | ||||
|             "${main} X " = "spawn \"waylock -fork-on-lock ${waylockOptions}\""; | ||||
|             "${ssm} Return" = "spawn foot"; | ||||
|             "${main} P" = "spawn \"rofi -show drun\""; | ||||
|             "${ssm} P" = "spawn rofi-rbw"; | ||||
|                     # Basic utilities | ||||
|                     "${main} X " = "spawn \"waylock -fork-on-lock ${waylockOptions}\""; | ||||
|                     "${ssm} Return" = "spawn foot"; | ||||
|                     "${main} P" = "spawn \"rofi -show drun\""; | ||||
|                     "${ssm} P" = "spawn rofi-rbw"; | ||||
| 
 | ||||
|             # Window focus | ||||
|             "${main} J" = "focus-view next"; | ||||
|             "${main} K" = "focus-view previous"; | ||||
|                     # Window focus | ||||
|                     "${main} J" = "focus-view next"; | ||||
|                     "${main} K" = "focus-view previous"; | ||||
| 
 | ||||
|             # Swap windows | ||||
|             "${ssm} J" = "swap next"; | ||||
|             "${ssm} K" = "swap previous"; | ||||
|             "${main} Return" = "zoom"; | ||||
|                     # Swap windows | ||||
|                     "${ssm} J" = "swap next"; | ||||
|                     "${ssm} K" = "swap previous"; | ||||
|                     "${main} Return" = "zoom"; | ||||
| 
 | ||||
|             # Main ratio | ||||
|             "${main} H" = "send-layout-cmd rivertile 'main-ratio -0.05'"; | ||||
|             "${main} L" = "send-layout-cmd rivertile 'main-ratio +0.05'"; | ||||
|                     # Main ratio | ||||
|                     "${main} H" = "send-layout-cmd rivertile 'main-ratio -0.05'"; | ||||
|                     "${main} L" = "send-layout-cmd rivertile 'main-ratio +0.05'"; | ||||
| 
 | ||||
|             # Main count | ||||
|             "${ssm} H" = "send-layout-cmd rivertile 'main-count +1'"; | ||||
|             "${ssm} L" = "send-layout-cmd rivertile 'main-count -1'"; | ||||
|                     # Main count | ||||
|                     "${ssm} H" = "send-layout-cmd rivertile 'main-count +1'"; | ||||
|                     "${ssm} L" = "send-layout-cmd rivertile 'main-count -1'"; | ||||
| 
 | ||||
|             # Tags | ||||
|             "${main} 0" = "set-focused-tags ${toString (pow2 32 - 1)}"; | ||||
|             "${ssm} 0" = "set-view-tags ${toString (pow2 32 - 1)}"; | ||||
|                     # Tags | ||||
|                     "${main} 0" = "set-focused-tags ${toString (pow2 32 - 1)}"; | ||||
|                     "${ssm} 0" = "set-view-tags ${toString (pow2 32 - 1)}"; | ||||
| 
 | ||||
|             # Orientation | ||||
|             "${main} Up" = "send-layout-cmd rivertile \"main-location top\""; | ||||
|             "${main} Right" = "send-layout-cmd rivertile \"main-location right\""; | ||||
|             "${main} Down" = "send-layout-cmd rivertile \"main-location bottom\""; | ||||
|             "${main} Left" = "send-layout-cmd rivertile \"main-location left\""; | ||||
|                     # Orientation | ||||
|                     "${main} Up" = "send-layout-cmd rivertile \"main-location top\""; | ||||
|                     "${main} Right" = "send-layout-cmd rivertile \"main-location right\""; | ||||
|                     "${main} Down" = "send-layout-cmd rivertile \"main-location bottom\""; | ||||
|                     "${main} Left" = "send-layout-cmd rivertile \"main-location left\""; | ||||
| 
 | ||||
|             # Move floating windows | ||||
|             "${sam} H" = "move left 100"; | ||||
|             "${sam} J" = "move down 100"; | ||||
|             "${sam} K" = "move up 100"; | ||||
|             "${sam} L" = "move right 100"; | ||||
|                     # Move floating windows | ||||
|                     "${sam} H" = "move left 100"; | ||||
|                     "${sam} J" = "move down 100"; | ||||
|                     "${sam} K" = "move up 100"; | ||||
|                     "${sam} L" = "move right 100"; | ||||
| 
 | ||||
|             # Snap floating windows | ||||
|             "${scam} H" = "snap left"; | ||||
|             "${scam} J" = "snap down"; | ||||
|             "${scam} K" = "snap up"; | ||||
|             "${scam} L" = "snap right"; | ||||
|                     # Snap floating windows | ||||
|                     "${scam} H" = "snap left"; | ||||
|                     "${scam} J" = "snap down"; | ||||
|                     "${scam} K" = "snap up"; | ||||
|                     "${scam} L" = "snap right"; | ||||
| 
 | ||||
|             # Resize floating windows | ||||
|             "${sas} H" = "resize horizontal -100"; | ||||
|             "${sas} J" = "resize vertical 100"; | ||||
|             "${sas} K" = "resize vertical -100"; | ||||
|             "${sas} L" = "resize horizontal 100"; | ||||
|                     # Resize floating windows | ||||
|                     "${sas} H" = "resize horizontal -100"; | ||||
|                     "${sas} J" = "resize vertical 100"; | ||||
|                     "${sas} K" = "resize vertical -100"; | ||||
|                     "${sas} L" = "resize horizontal 100"; | ||||
| 
 | ||||
|             # Toggle modes | ||||
|             "${main} Space" = "toggle-float"; | ||||
|             "${main} F" = "toggle-fullscreen"; | ||||
|           } // builtins.listToAttrs (builtins.concatLists (map (tag: [ | ||||
|             { name = "${main} ${toString tag}"; value = "set-focused-tags ${toString (pow2 (tag - 1))}"; } | ||||
|             { name = "${ssm} ${toString tag}"; value = "set-view-tags ${toString (pow2 (tag - 1))}"; } | ||||
|             { 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\""; | ||||
|                     # Toggle modes | ||||
|                     "${main} Space" = "toggle-float"; | ||||
|                     "${main} F" = "toggle-fullscreen"; | ||||
|                   } | ||||
|                   // builtins.listToAttrs ( | ||||
|                     builtins.concatLists ( | ||||
|                       map (tag: [ | ||||
|                         { | ||||
|                           name = "${main} ${toString tag}"; | ||||
|                           value = "set-focused-tags ${toString (pow2 (tag - 1))}"; | ||||
|                         } | ||||
|                         { | ||||
|                           name = "${ssm} ${toString tag}"; | ||||
|                           value = "set-view-tags ${toString (pow2 (tag - 1))}"; | ||||
|                         } | ||||
|                         { | ||||
|                           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 | ||||
|             "None XF86MonBrightnessUp" = "spawn \"brightnessctl set +5%\""; | ||||
|             "None XF86MonBrightnessDown" = "spawn \"brightnessctl set 5%-\""; | ||||
|                       # Control brightness | ||||
|                       "None XF86MonBrightnessUp" = "spawn \"brightnessctl set +5%\""; | ||||
|                       "None XF86MonBrightnessDown" = "spawn \"brightnessctl set 5%-\""; | ||||
| 
 | ||||
|             # Control music playback | ||||
|             "None XF86Messenger" = "spawn \"playerctl previous\""; | ||||
|             "None XF86Go" = "spawn \"playerctl play-pause\""; | ||||
|             "None Cancel" = "spawn \"playerctl next\""; | ||||
|                       # Control music playback | ||||
|                       "None XF86Messenger" = "spawn \"playerctl previous\""; | ||||
|                       "None XF86Go" = "spawn \"playerctl play-pause\""; | ||||
|                       "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))); | ||||
|         map-pointer = { | ||||
|           normal = { | ||||
|             "${main} BTN_LEFT" = "move-view"; | ||||
|             "${main} BTN_RIGHT" = "resize-view"; | ||||
|             "${main} BTN_MIDDLE" = "toggle-float"; | ||||
|           input = { | ||||
|             "'*'" = { | ||||
|               accel-profile = "adaptive"; | ||||
|               pointer-accel = "0.5"; | ||||
|               scroll-factor = "0.8"; | ||||
|             }; | ||||
|             "'*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"; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.discord; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.discord = { | ||||
|     enable = mkEnableOption "discord"; | ||||
|   }; | ||||
| @ -11,8 +17,6 @@ in { | ||||
|   config = mkIf cfg.enable { | ||||
|     modules.unfree.allowedPackages = [ "discord" ]; | ||||
| 
 | ||||
|     home.packages = with pkgs; [ | ||||
|       discord | ||||
|     ]; | ||||
|     home.packages = with pkgs; [ discord ]; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,14 +1,16 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.feishin; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.feishin.enable = mkEnableOption "feishin"; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     home.packages = with pkgs; [ | ||||
|       feishin | ||||
|     ]; | ||||
|   }; | ||||
| } | ||||
|   config = mkIf cfg.enable { home.packages = with pkgs; [ feishin ]; }; | ||||
| } | ||||
|  | ||||
| @ -1,8 +1,14 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.modules.firefox; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.firefox.enable = lib.mkEnableOption "firefox"; | ||||
| 
 | ||||
|   config = lib.mkIf cfg.enable { | ||||
| @ -32,19 +38,19 @@ in { | ||||
|         DisableTelemetry = true; | ||||
|         DisplayBookmarksToolbar = "never"; | ||||
|         DisplayMenuBar = "never"; | ||||
|         DNSOverHTTPS = { Enabled = false; }; | ||||
|         DNSOverHTTPS = { | ||||
|           Enabled = false; | ||||
|         }; | ||||
|         DontCheckDefaultBrowser = true; | ||||
|         PasswordManagerEnabled = false; | ||||
|         TranslateEnabled = true; | ||||
|         UseSystemPrintDialog = true; | ||||
|       }; | ||||
|        | ||||
| 
 | ||||
|       profiles.nixos = { | ||||
|         search.default = "DuckDuckGo"; | ||||
| 
 | ||||
|         extensions = with pkgs.nur.repos.rycee.firefox-addons; [ | ||||
|           ublock-origin | ||||
|         ]; | ||||
|         extensions = with pkgs.nur.repos.rycee.firefox-addons; [ ublock-origin ]; | ||||
| 
 | ||||
|         settings = { | ||||
|           "browser.tabs.inTitlebar" = 0; | ||||
| @ -57,4 +63,4 @@ in { | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,9 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
| @ -15,8 +20,11 @@ let | ||||
|     </alias> | ||||
|   ''; | ||||
| 
 | ||||
|   configContent = concatStrings (map (font: aliasConfig config.theming.fonts.pkgs.${font}) config.theming.fonts.installed); | ||||
| in { | ||||
|   configContent = concatStrings ( | ||||
|     map (font: aliasConfig config.theming.fonts.pkgs.${font}) config.theming.fonts.installed | ||||
|   ); | ||||
| in | ||||
| { | ||||
|   options.modules.fontconfig = { | ||||
|     enable = mkEnableOption "fontconfig"; | ||||
|   }; | ||||
| @ -26,18 +34,10 @@ in { | ||||
|       enable = true; | ||||
| 
 | ||||
|       defaultFonts = { | ||||
|         serif = [ | ||||
|           config.theming.fonts.serif.name | ||||
|         ]; | ||||
|         sansSerif = [ | ||||
|           config.theming.fonts.sansSerif.name | ||||
|         ]; | ||||
|         monospace = [ | ||||
|           config.theming.fonts.monospace.name | ||||
|         ]; | ||||
|         emoji = [ | ||||
|           config.theming.fonts.emoji.name | ||||
|         ]; | ||||
|         serif = [ config.theming.fonts.serif.name ]; | ||||
|         sansSerif = [ 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"?> | ||||
|         <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> | ||||
|         <fontconfig> | ||||
|          | ||||
| 
 | ||||
|         ${configContent} | ||||
|         </fontconfig> | ||||
|       '';  | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,25 +1,33 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.foot; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.foot.enable = mkEnableOption "foot"; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     programs.foot = { | ||||
|       enable = true; | ||||
|       settings = { | ||||
|         main = let | ||||
|           font = config.theming.fonts.monospace.name; | ||||
|           size = toString config.theming.fonts.monospace.recommendedSize; | ||||
|         in { | ||||
|           font = mkForce "${font}:style=Regular: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}"; | ||||
|         }; | ||||
|         main = | ||||
|           let | ||||
|             font = config.theming.fonts.monospace.name; | ||||
|             size = toString config.theming.fonts.monospace.recommendedSize; | ||||
|           in | ||||
|           { | ||||
|             font = mkForce "${font}:style=Regular: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}"; | ||||
|           }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
							
								
								
									
										50
									
								
								modules/users/modules/language/nix.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								modules/users/modules/language/nix.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.nix; | ||||
| in | ||||
| { | ||||
|   options.modules.nix = { | ||||
|     enable = mkEnableOption "nix"; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     # Development packages | ||||
|     home.packages = with pkgs; [ | ||||
|       nix-tree | ||||
|       nixfmt-rfc-style | ||||
|       nixd | ||||
|     ]; | ||||
| 
 | ||||
|     # VSCode configuration | ||||
|     programs.vscode = { | ||||
|       extensions = with pkgs.vscode-extensions; [ jnoortheen.nix-ide ]; | ||||
| 
 | ||||
|       userSettings = { | ||||
|         "[nix]" = { | ||||
|           "editor.tabSize" = 2; | ||||
|         }; | ||||
|         "nix.enableLanguageServer" = true; | ||||
|         "nix.serverPath" = "nixd"; | ||||
|         "nix.serverSettings" = { | ||||
|           nixd = { | ||||
|             formatting = { | ||||
|               command = [ "nixfmt" ]; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     # Neovim configuration | ||||
|     programs.nixvim = { | ||||
| 
 | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										42
									
								
								modules/users/modules/language/rust.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								modules/users/modules/language/rust.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.rust; | ||||
| in | ||||
| { | ||||
|   options.modules.rust = { | ||||
|     enable = mkEnableOption "rust"; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     # Development packages | ||||
|     home.packages = with pkgs; [ | ||||
|       rustc | ||||
|       cargo | ||||
|       rust-analyzer | ||||
|       rustfmt | ||||
|     ]; | ||||
| 
 | ||||
|     # VSCode configuration | ||||
|     programs.vscode = { | ||||
|       extensions = with pkgs.vscode-extensions; [ rust-lang.rust-analyzer ]; | ||||
| 
 | ||||
|       userSettings = { | ||||
|         "[rust]" = { }; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     # Neovim configuration | ||||
|     programs.nixvim = { | ||||
|       plugins.rust-tools = { | ||||
|         enable = true; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| @ -1,11 +1,17 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.mako; | ||||
|   theme = config.theming; | ||||
|   colors = theme.colors; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.mako.enable = mkEnableOption "mako"; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
| @ -22,4 +28,4 @@ in { | ||||
|       font = "${theme.fonts.monospace.name} ${toString theme.fonts.monospace.recommendedSize}"; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,11 +1,17 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.neovim; | ||||
|   theme = config.theming; | ||||
|   colors = theme.colors; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.neovim = { | ||||
|     enable = mkEnableOption "neovim"; | ||||
|   }; | ||||
| @ -17,8 +23,7 @@ in { | ||||
|       viAlias = true; | ||||
|       vimAlias = true; | ||||
| 
 | ||||
|       extraPackages = with pkgs; [ | ||||
|       ]; | ||||
|       extraPackages = with pkgs; [ ]; | ||||
| 
 | ||||
|       opts = { | ||||
|         number = true; | ||||
| @ -169,10 +174,6 @@ in { | ||||
|       #  enable = true; | ||||
|       #}; | ||||
| 
 | ||||
|       plugins.rust-tools = { | ||||
|         enable = true; | ||||
|       }; | ||||
| 
 | ||||
|       plugins.vimtex = { | ||||
|         enable = true; | ||||
|         texlivePackage = null; | ||||
| @ -183,4 +184,4 @@ in { | ||||
|     }; | ||||
|     programs.neovim.defaultEditor = true; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,16 +1,18 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.obsidian; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.obsidian = { | ||||
|     enable = mkEnableOption "obsidian"; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     home.packages = with pkgs; [ | ||||
|       obsidian | ||||
|     ]; | ||||
|   }; | ||||
| } | ||||
|   config = mkIf cfg.enable { home.packages = with pkgs; [ obsidian ]; }; | ||||
| } | ||||
|  | ||||
| @ -1,10 +1,16 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.qutebrowser; | ||||
|   theme = config.theming; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.qutebrowser.enable = mkEnableOption "qutebrowser"; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
| @ -19,4 +25,4 @@ in { | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,11 +1,17 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.rofi; | ||||
|   theme = config.theming; | ||||
|   colors = theme.colors; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.rofi.enable = mkEnableOption "rofi"; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
| @ -13,41 +19,43 @@ in { | ||||
|       enable = true; | ||||
|       package = pkgs.rofi-wayland; | ||||
|       font = "${theme.fonts.monospace.name} ${toString theme.fonts.monospace.recommendedSize}"; | ||||
|       theme = let | ||||
|         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}"; | ||||
|       theme = | ||||
|         let | ||||
|           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}"; | ||||
|           }; | ||||
|           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}"; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,17 +1,21 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.rofi-rbw; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.rofi-rbw.enable = mkEnableOption "rofi-rbw"; | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     modules.rofi.enable = true; | ||||
| 
 | ||||
|     home.packages = [ | ||||
|       pkgs.rofi-rbw | ||||
|     ]; | ||||
|     home.packages = [ pkgs.rofi-rbw ]; | ||||
| 
 | ||||
|     # TODO: Move to separate module and make configurable | ||||
|     programs.rbw = { | ||||
| @ -24,4 +28,4 @@ in { | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,12 +1,18 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let  | ||||
| let | ||||
|   cfg = config.modules.bash; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.bash = { | ||||
|     enable = mkEnableOption "bash"; | ||||
|   }; | ||||
| 
 | ||||
|   config.programs.bash.enable = cfg.enable; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let  | ||||
| let | ||||
|   cfg = config.modules.fish; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.fish = { | ||||
|     enable = mkEnableOption "fish"; | ||||
| 
 | ||||
| @ -31,9 +37,18 @@ in { | ||||
|       enable = true; | ||||
| 
 | ||||
|       plugins = [ | ||||
|         (mkIf cfg.plugins.done { name = "done"; 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; }) | ||||
|         (mkIf cfg.plugins.done { | ||||
|           name = "done"; | ||||
|           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) | ||||
|     ]; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,7 +1,13 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; { | ||||
| with lib; | ||||
| { | ||||
|   options.modules.steam = { | ||||
|     enable = mkEnableOption "steam"; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -7,4 +7,4 @@ | ||||
|     ./steam.nix | ||||
|     ./waylock.nix | ||||
|   ]; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,10 +1,14 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   enabled = any (user: user.modules.river.enable) (attrValues config.home-manager.users); | ||||
| in { | ||||
|   config = mkIf enabled { | ||||
|     programs.river.enable = true; | ||||
|   }; | ||||
| } | ||||
| in | ||||
| { | ||||
|   config = mkIf enabled { programs.river.enable = true; }; | ||||
| } | ||||
|  | ||||
| @ -1,10 +1,14 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   enabled = any (user: user.modules.steam.enable) (attrValues config.home-manager.users); | ||||
| in { | ||||
|   config = mkIf enabled { | ||||
|     programs.steam.enable = true; | ||||
|   }; | ||||
| } | ||||
| in | ||||
| { | ||||
|   config = mkIf enabled { programs.steam.enable = true; }; | ||||
| } | ||||
|  | ||||
| @ -1,10 +1,14 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   enabled = any (user: user.modules.waylock.enable) (attrValues config.home-manager.users); | ||||
| in { | ||||
|   config = mkIf enabled { | ||||
|     security.pam.services.waylock = {}; | ||||
|   }; | ||||
| } | ||||
| in | ||||
| { | ||||
|   config = mkIf enabled { security.pam.services.waylock = { }; }; | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,9 @@ | ||||
| { pkgs, lib, config, ... }: | ||||
| { | ||||
|   pkgs, | ||||
|   lib, | ||||
|   config, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
| @ -30,7 +35,7 @@ let | ||||
|       }; | ||||
|       fallbackFonts = mkOption { | ||||
|         type = types.listOf types.str; | ||||
|         default = []; | ||||
|         default = [ ]; | ||||
|         description = "Fallback fonts for specified font."; | ||||
|       }; | ||||
|     }; | ||||
| @ -63,25 +68,35 @@ let | ||||
|   ] ++ map (font: font.name) cfg.fonts.extraFonts; | ||||
| 
 | ||||
|   # Flatten dependencies of fonts | ||||
|   fontPackages = converge (fonts: | ||||
|     listToAttrs (map (font: { | ||||
|       name = font; | ||||
|       value = true; | ||||
|     }) ( | ||||
|       flatten (map (font:  | ||||
|         [ font.name ] | ||||
|         ++ cfg.fonts.pkgs.${font.name}.fallbackFonts | ||||
|       ) (attrsToList fonts)) | ||||
|     )) | ||||
|   ) (listToAttrs (map (font: { | ||||
|     name = font; | ||||
|     value = true; | ||||
|   }) enabledFonts)); | ||||
|   fontPackages = | ||||
|     converge | ||||
|       ( | ||||
|         fonts: | ||||
|         listToAttrs ( | ||||
|           map | ||||
|             (font: { | ||||
|               name = font; | ||||
|               value = true; | ||||
|             }) | ||||
|             ( | ||||
|               flatten (map (font: [ font.name ] ++ cfg.fonts.pkgs.${font.name}.fallbackFonts) (attrsToList fonts)) | ||||
|             ) | ||||
|         ) | ||||
|       ) | ||||
|       ( | ||||
|         listToAttrs ( | ||||
|           map (font: { | ||||
|             name = font; | ||||
|             value = true; | ||||
|           }) enabledFonts | ||||
|         ) | ||||
|       ); | ||||
| 
 | ||||
|   # Convert set of fonts to list of packages | ||||
|   fontNameList = map (font: font.name) (attrsToList fontPackages); | ||||
|   fontPackageList = map (font: cfg.fonts.pkgs.${font}.package) fontNameList; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   imports = [ | ||||
|     # Import all themes | ||||
|     ./themes/gruvbox.nix | ||||
| @ -90,123 +105,129 @@ in { | ||||
| 
 | ||||
|   options.modules.theming.enable = mkEnableOption "theming"; | ||||
| 
 | ||||
|   options.theming = let colors = config.theming.schemeColors; in { | ||||
|     darkMode = mkOption { | ||||
|       type = types.bool; | ||||
|       default = false; | ||||
|       example = true; | ||||
|       description = "Whether the app should use dark mode."; | ||||
|     }; | ||||
|   options.theming = | ||||
|     let | ||||
|       colors = config.theming.schemeColors; | ||||
|     in | ||||
|     { | ||||
|       darkMode = mkOption { | ||||
|         type = types.bool; | ||||
|         default = false; | ||||
|         example = true; | ||||
|         description = "Whether the app should use dark mode."; | ||||
|       }; | ||||
| 
 | ||||
|     colorScheme = mkOption { | ||||
|       type = types.nullOr types.str; | ||||
|       default = null; | ||||
|       description = "Base 16 color scheme to use for styling. See stylix documentation for more information."; | ||||
|     }; | ||||
|       colorScheme = mkOption { | ||||
|         type = types.nullOr types.str; | ||||
|         default = null; | ||||
|         description = "Base 16 color scheme to use for styling. See stylix documentation for more information."; | ||||
|       }; | ||||
| 
 | ||||
|     clientSideDecorations = mkOption { | ||||
|       type = types.bool; | ||||
|       default = false; | ||||
|       description = "Whether to enable client side decorations for windows."; | ||||
|     }; | ||||
|       clientSideDecorations = mkOption { | ||||
|         type = types.bool; | ||||
|         default = false; | ||||
|         description = "Whether to enable client side decorations for windows."; | ||||
|       }; | ||||
| 
 | ||||
|     schemeColors = mkOption { | ||||
|       type = types.attrsOf types.anything; | ||||
|       default = config.lib.stylix.colors; | ||||
|       description = "Generated colors from scheme"; | ||||
|     }; | ||||
|       schemeColors = mkOption { | ||||
|         type = types.attrsOf types.anything; | ||||
|         default = config.lib.stylix.colors; | ||||
|         description = "Generated colors from scheme"; | ||||
|       }; | ||||
| 
 | ||||
|     colors = { | ||||
|       bg = mkOption { | ||||
|         type = types.str; | ||||
|         default = colors.base00; | ||||
|       colors = { | ||||
|         bg = mkOption { | ||||
|           type = types.str; | ||||
|           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; | ||||
|         default = colors.base05; | ||||
| 
 | ||||
|       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."; | ||||
|         }; | ||||
|       }; | ||||
|       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 | ||||
| 
 | ||||
|       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."; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
| 
 | ||||
|     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 { | ||||
|     # Enable fontconfig | ||||
|     modules.fontconfig.enable = true; | ||||
| @ -229,30 +250,32 @@ in { | ||||
|     }; | ||||
| 
 | ||||
|     # Configure gtk theme | ||||
|     gtk = let | ||||
|       disableCSD = '' | ||||
|         headerbar.default-decoration { | ||||
|           margin-bottom: 50px; | ||||
|           margin-top: -100px; | ||||
|         } | ||||
|     gtk = | ||||
|       let | ||||
|         disableCSD = '' | ||||
|           headerbar.default-decoration { | ||||
|             margin-bottom: 50px; | ||||
|             margin-top: -100px; | ||||
|           } | ||||
| 
 | ||||
|         window.csd, | ||||
|         window.csd decoration { | ||||
|           box-shadow: none; | ||||
|         } | ||||
|       ''; | ||||
|     in { | ||||
|       enable = true; | ||||
|           window.csd, | ||||
|           window.csd decoration { | ||||
|             box-shadow: none; | ||||
|           } | ||||
|         ''; | ||||
|       in | ||||
|       { | ||||
|         enable = true; | ||||
| 
 | ||||
|       theme = { | ||||
|         name = if cfg.darkMode then "Adwaita-dark" else "Adwaita-light"; | ||||
|         package = pkgs.gnome-themes-extra; | ||||
|         theme = { | ||||
|           name = if cfg.darkMode then "Adwaita-dark" else "Adwaita-light"; | ||||
|           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 | ||||
|     programs.direnv = { | ||||
|       enable = true; | ||||
| @ -289,10 +312,22 @@ in { | ||||
|       polarity = if cfg.darkMode then "dark" else "light"; | ||||
| 
 | ||||
|       fonts = { | ||||
|         serif = getAttrs [ "name" "package" ] cfg.fonts.serif; | ||||
|         sansSerif = getAttrs [ "name" "package" ] cfg.fonts.sansSerif; | ||||
|         monospace = getAttrs [ "name" "package" ] cfg.fonts.monospace; | ||||
|         emoji = getAttrs [ "name" "package" ] cfg.fonts.emoji; | ||||
|         serif = getAttrs [ | ||||
|           "name" | ||||
|           "package" | ||||
|         ] 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 = { | ||||
|           applications = mkDefault cfg.fonts.serif.recommendedSize; | ||||
|  | ||||
| @ -4,6 +4,5 @@ | ||||
|   name = "Cozette Vector"; | ||||
|   package = pkgs.cozette; | ||||
|   recommendedSize = 9; | ||||
|   fallbackFonts = [ | ||||
|   ]; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -4,7 +4,5 @@ | ||||
|   name = "Cozette"; | ||||
|   package = pkgs.cozette; | ||||
|   recommendedSize = 9; | ||||
|   fallbackFonts = [ | ||||
|     "Cozette Vector" | ||||
|   ]; | ||||
| } | ||||
|   fallbackFonts = [ "Cozette Vector" ]; | ||||
| } | ||||
|  | ||||
| @ -4,5 +4,5 @@ | ||||
|   name = "DejaVu Sans"; | ||||
|   package = pkgs.dejavu_fonts; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = []; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -4,5 +4,5 @@ | ||||
|   name = "DejaVu Serif"; | ||||
|   package = pkgs.dejavu_fonts; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = []; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -9,4 +9,4 @@ | ||||
|     "wenquanyi bitmap song" | ||||
|     "Symbols Nerd Font Mono" | ||||
|   ]; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -4,7 +4,5 @@ | ||||
|   name = "Fira Code"; | ||||
|   package = pkgs.fira-code; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = [ | ||||
|     "Symbols Nerd Font Mono" | ||||
|   ]; | ||||
| } | ||||
|   fallbackFonts = [ "Symbols Nerd Font Mono" ]; | ||||
| } | ||||
|  | ||||
| @ -4,5 +4,5 @@ | ||||
|   name = "Symbols Nerd Font Mono"; | ||||
|   package = pkgs.nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; }; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = []; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -4,5 +4,5 @@ | ||||
|   name = "Noto Color Emoji"; | ||||
|   package = pkgs.noto-fonts-color-emoji; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = []; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -4,5 +4,5 @@ | ||||
|   name = "wenquanyi bitmap song"; | ||||
|   package = pkgs.wqy-bitmapsong; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = []; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -4,5 +4,5 @@ | ||||
|   name = "WenQuanYi Micro Hei Mono"; | ||||
|   package = pkgs.wqy-microhei; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = []; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -4,5 +4,5 @@ | ||||
|   name = "WenQuanYi Micro Hei"; | ||||
|   package = pkgs.wqy-microhei; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = []; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -4,5 +4,5 @@ | ||||
|   name = "WenQuanYi Zen Hei Mono"; | ||||
|   package = pkgs.wqy-zenhei; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = []; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -4,5 +4,5 @@ | ||||
|   name = "WenQuanYi Zen Hei Sharp"; | ||||
|   package = pkgs.wqy-zenhei; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = []; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -4,5 +4,5 @@ | ||||
|   name = "WenQuanYi Zen Hei"; | ||||
|   package = pkgs.wqy-zenhei; | ||||
|   recommendedSize = 12; | ||||
|   fallbackFonts = []; | ||||
| } | ||||
|   fallbackFonts = [ ]; | ||||
| } | ||||
|  | ||||
| @ -1,14 +1,25 @@ | ||||
| { config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.theming.themes.catppuccin; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options = { | ||||
|     theming.themes.catppuccin = { | ||||
|       enable = mkEnableOption "catppuccin"; | ||||
|       flavor = mkOption { | ||||
|         type = types.enum [ "latte" "frappe" "macchiato" "mocha" ]; | ||||
|         type = types.enum [ | ||||
|           "latte" | ||||
|           "frappe" | ||||
|           "macchiato" | ||||
|           "mocha" | ||||
|         ]; | ||||
|         default = "mocha"; | ||||
|         description = "The flavor of catppuccin theme."; | ||||
|       }; | ||||
|  | ||||
| @ -1,16 +1,26 @@ | ||||
| { config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.theming.themes.gruvbox; | ||||
|   mode = if cfg.darkMode then "dark" else "light"; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options = { | ||||
|     theming.themes.gruvbox = { | ||||
|       enable = mkEnableOption "gruvbox-hard"; | ||||
|       darkMode = mkEnableOption "dark mode"; | ||||
|       contrast = mkOption { | ||||
|         type = types.enum [ "hard" "medium" "soft" ]; | ||||
|         type = types.enum [ | ||||
|           "hard" | ||||
|           "medium" | ||||
|           "soft" | ||||
|         ]; | ||||
|         default = "hard"; | ||||
|         description = "The contrast level of the theme."; | ||||
|       }; | ||||
|  | ||||
| @ -1,10 +1,16 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.vscode; | ||||
|   theme = config.theming; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.vscode = { | ||||
|     enable = mkEnableOption "vscode"; | ||||
|     codeFont = mkOption { | ||||
| @ -19,38 +25,31 @@ in { | ||||
| 
 | ||||
|   config = mkIf cfg.enable { | ||||
|     modules.unfree.allowedPackages = [ "vscode" ]; | ||||
|      | ||||
|     theming.fonts.extraFonts = [ | ||||
|       cfg.codeFont | ||||
|     ]; | ||||
| 
 | ||||
|     theming.fonts.extraFonts = [ cfg.codeFont ]; | ||||
| 
 | ||||
|     programs.vscode = { | ||||
|       enable = true; | ||||
| 
 | ||||
|       extensions = with pkgs.vscode-extensions; [ | ||||
|         eamodio.gitlens | ||||
| 
 | ||||
|         # Language support | ||||
|         # TODO: Move to separate language modules | ||||
|         bbenoist.nix | ||||
|         rust-lang.rust-analyzer | ||||
|       ]; | ||||
|       mutableExtensionsDir = false; | ||||
|       extensions = with pkgs.vscode-extensions; [ eamodio.gitlens ]; | ||||
| 
 | ||||
|       userSettings = { | ||||
|         # Font setup | ||||
|         # TODO: Move the conversion factor to theme settings | ||||
|         "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; | ||||
|         "terminal.integrated.fontFamily" = mkForce "'${cfg.codeFont.name}', '${cfg.fallbackFont.name}'"; | ||||
|         "terminal.integrated.fontSize" = mkForce (cfg.codeFont.recommendedSize); # Convert pt to px | ||||
|          | ||||
|         # Autoformatting | ||||
| 
 | ||||
|         # Formatting | ||||
|         "editor.formatOnSave" = true; | ||||
|         "editor.tabSize" = 4; | ||||
| 
 | ||||
|         # Layout | ||||
|         "window.menuBarVisibility" = "hidden"; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.winbox; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.winbox = { | ||||
|     enable = mkEnableOption "winbox"; | ||||
|   }; | ||||
| @ -11,8 +17,6 @@ in { | ||||
|   config = mkIf cfg.enable { | ||||
|     modules.unfree.allowedPackages = [ "winbox" ]; | ||||
| 
 | ||||
|     home.packages = with pkgs; [ | ||||
|       winbox | ||||
|     ]; | ||||
|     home.packages = with pkgs; [ winbox ]; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,8 +1,14 @@ | ||||
| {config, lib, pkgs, ... }: | ||||
| { | ||||
|   config, | ||||
|   lib, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| let | ||||
|   cfg = config.modules.zathura; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.zathura.enable = lib.mkEnableOption "zathura"; | ||||
| 
 | ||||
|   config = lib.mkIf cfg.enable { | ||||
| @ -14,4 +20,4 @@ in { | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.tailscale; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.tailscale = { | ||||
|     enable = mkEnableOption "tailscale"; | ||||
|   }; | ||||
| @ -14,4 +20,4 @@ in { | ||||
|       useRoutingFeatures = "client"; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,9 +1,15 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| let | ||||
|   cfg = config.modules.wpa_supplicant; | ||||
| in { | ||||
| in | ||||
| { | ||||
|   options.modules.wpa_supplicant = { | ||||
|     enable = mkEnableOption "wpa_supplicant"; | ||||
|   }; | ||||
| @ -15,4 +21,4 @@ in { | ||||
|       allowAuxiliaryImperativeNetworks = true; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,9 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| with lib; | ||||
| # let | ||||
| @ -17,8 +22,8 @@ with lib; | ||||
| # } | ||||
| { | ||||
|   nixpkgs.config.packageOverrides = pkgs: rec { | ||||
|     wqy-zenhei = pkgs.callPackage ./fonts/wqy-zenhei.nix {}; | ||||
|     wqy-microhei = pkgs.callPackage ./fonts/wqy-microhei.nix {}; | ||||
|     wqy-bitmapsong = pkgs.callPackage ./fonts/wqy-bitmapsong.nix {}; | ||||
|     wqy-zenhei = pkgs.callPackage ./fonts/wqy-zenhei.nix { }; | ||||
|     wqy-microhei = pkgs.callPackage ./fonts/wqy-microhei.nix { }; | ||||
|     wqy-bitmapsong = pkgs.callPackage ./fonts/wqy-bitmapsong.nix { }; | ||||
|   }; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,9 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| pkgs.stdenv.mkDerivation rec { | ||||
|   pname = "wqy-bitmapsong-pcf"; | ||||
| @ -30,4 +35,4 @@ pkgs.stdenv.mkDerivation rec { | ||||
|   installPhase = '' | ||||
|     install -Dm644 *.otb -t $out/share/fonts/ | ||||
|   ''; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,9 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| pkgs.stdenv.mkDerivation rec { | ||||
|   pname = "wqy-microhei"; | ||||
| @ -6,7 +11,7 @@ pkgs.stdenv.mkDerivation rec { | ||||
| 
 | ||||
|   src = pkgs.fetchurl { | ||||
|     url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz"; | ||||
|       hash = "sha256-KAKsgCOqNqZupudEWFTjoHjTd///QhaTQb0jeHH3IT4="; | ||||
|     hash = "sha256-KAKsgCOqNqZupudEWFTjoHjTd///QhaTQb0jeHH3IT4="; | ||||
|   }; | ||||
| 
 | ||||
|   installPhase = '' | ||||
| @ -16,4 +21,4 @@ pkgs.stdenv.mkDerivation rec { | ||||
| 
 | ||||
|     runHook postInstall | ||||
|   ''; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,9 @@ | ||||
| { lib, config, pkgs, ... }: | ||||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   pkgs, | ||||
|   ... | ||||
| }: | ||||
| 
 | ||||
| pkgs.stdenv.mkDerivation rec { | ||||
|   pname = "wqy-zenhei"; | ||||
| @ -16,4 +21,4 @@ pkgs.stdenv.mkDerivation rec { | ||||
| 
 | ||||
|     runHook postInstall | ||||
|   ''; | ||||
| } | ||||
| } | ||||
|  | ||||
| @ -29,26 +29,33 @@ | ||||
|       discord.enable = true; | ||||
|       qutebrowser.enable = true; | ||||
|       neovim.enable = true; | ||||
|       rofi.enable = true; # TODO: Remove this, should be enabled by other modules that require rofi. | ||||
| 
 | ||||
|       # Programming languages | ||||
|       nix.enable = true; | ||||
|       rust.enable = true; | ||||
| 
 | ||||
|       # Enable unfree | ||||
|       unfree.enable = true; | ||||
|     }; | ||||
| 
 | ||||
|     # Theme configuration | ||||
|     theming = let fontpkgs = config.theming.fonts.pkgs; in { | ||||
|       # Fonts | ||||
|       fonts.serif = fontpkgs."DejaVu Serif"; | ||||
|       fonts.sansSerif = fontpkgs."DejaVu Sans"; | ||||
|       fonts.monospace = fontpkgs."Dina"; | ||||
|       fonts.emoji = fontpkgs."Dina"; | ||||
|       fonts.extraFonts = []; | ||||
|        | ||||
|       # Color scheme | ||||
|       themes.catppuccin = { | ||||
|         enable = true; | ||||
|         flavor = "frappe"; | ||||
|     theming = | ||||
|       let | ||||
|         fontpkgs = config.theming.fonts.pkgs; | ||||
|       in | ||||
|       { | ||||
|         # Fonts | ||||
|         fonts.serif = fontpkgs."DejaVu Serif"; | ||||
|         fonts.sansSerif = fontpkgs."DejaVu Sans"; | ||||
|         fonts.monospace = fontpkgs."Dina"; | ||||
|         fonts.emoji = fontpkgs."Dina"; | ||||
|         fonts.extraFonts = [ ]; | ||||
| 
 | ||||
|         # Color scheme | ||||
|         themes.catppuccin = { | ||||
|           enable = true; | ||||
|           flavor = "frappe"; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user