From 0d4c032616c333d588970c0a418102d0dab32394 Mon Sep 17 00:00:00 2001 From: Senior Matt Date: Wed, 15 Apr 2026 19:15:43 +0500 Subject: [PATCH] niri matugen --- modules/home.nix | 2 +- modules/hosts/laptop/configuration.nix | 33 +--- modules/programs/base.nix | 30 +++ modules/programs/bash.nix | 3 +- modules/programs/fastfetch.nix | 3 +- modules/programs/gaming.nix | 4 + modules/programs/git.nix | 3 +- modules/programs/kitty.nix | 4 +- modules/programs/matugen/matugen.nix | 13 +- .../matugen/templates/niri-colors.kdl | 28 +++ modules/programs/neovim.nix | 4 +- modules/programs/tmux.nix | 3 +- modules/programs/waybar.nix | 181 +++++++++--------- modules/sessions/niri/config.kdl | 23 ++- modules/sessions/niri/niri.nix | 27 ++- modules/theme.nix | 18 +- 16 files changed, 227 insertions(+), 152 deletions(-) create mode 100644 modules/programs/base.nix create mode 100644 modules/programs/matugen/templates/niri-colors.kdl diff --git a/modules/home.nix b/modules/home.nix index b8f0364..aba9a12 100644 --- a/modules/home.nix +++ b/modules/home.nix @@ -11,7 +11,7 @@ extraSpecialArgs = { inherit inputs self; }; backupCommand = "rm"; - users.matthew = { + users.${self.user} = { home.stateVersion = "25.11"; programs.home-manager.enable = true; }; diff --git a/modules/hosts/laptop/configuration.nix b/modules/hosts/laptop/configuration.nix index ce40ad1..8692c91 100644 --- a/modules/hosts/laptop/configuration.nix +++ b/modules/hosts/laptop/configuration.nix @@ -10,15 +10,15 @@ imports = [ self.nixosModules.laptopHardware - self.nixosModules.fastfetch + self.nixosModules.base self.nixosModules.gamedev self.nixosModules.gaming + + self.nixosModules.fastfetch self.nixosModules.home-manager - self.nixosModules.kitty - self.nixosModules.vpn - self.nixosModules.niri + # self.nixosModules.plasma - self.nixosModules.zen-browser + self.nixosModules.niri ]; # Use the systemd-boot EFI boot loader. @@ -72,34 +72,17 @@ }; # Define a user account. Don't forget to set a password with ‘passwd’. - users.users.matthew = { + users.users.${self.user} = { isNormalUser = true; extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. packages = with pkgs; [ tree ]; }; - + + # Allow unfree packages. nixpkgs.config.allowUnfree = true; - # List packages installed in system profile. - # You can use https://search.nixos.org/ to find more packages (and options). - environment.systemPackages = with pkgs; [ - gnome-clocks - kdePackages.okular - kdePackages.partitionmanager - krita - obsidian - telegram-desktop - vesktop - ]; - - # List font packages installed in system profile. - fonts.packages = with pkgs; [ - nerd-fonts.jetbrains-mono - nerd-fonts.terminess-ttf - ]; - fileSystems = { "/".options = [ "compress=zstd" ]; "/home".options = [ "compress=zstd" ]; diff --git a/modules/programs/base.nix b/modules/programs/base.nix new file mode 100644 index 0000000..cf52807 --- /dev/null +++ b/modules/programs/base.nix @@ -0,0 +1,30 @@ +{ self, ... }: +{ + flake.nixosModules.base = { pkgs, ... }: { + imports = [ + self.nixosModules.vpn + self.nixosModules.zen-browser + ]; + + # List packages installed in system profile. + environment.systemPackages = with pkgs; [ + gnome-clocks + kdePackages.okular + kdePackages.partitionmanager + krita + obsidian + telegram-desktop + vesktop + ]; + + # List font packages installed in system profile. + fonts.packages = with pkgs; [ + ibm-plex + nerd-fonts.jetbrains-mono + ]; + }; + + flake = { + user = "matthew"; + }; +} diff --git a/modules/programs/bash.nix b/modules/programs/bash.nix index 3a97026..5cfd1bf 100644 --- a/modules/programs/bash.nix +++ b/modules/programs/bash.nix @@ -1,6 +1,7 @@ +{ self, ... }: { flake.nixosModules.bash = { - home-manager.users.matthew.imports = [ + home-manager.users.${self.user}.imports = [ { programs.bash = { enable = true; diff --git a/modules/programs/fastfetch.nix b/modules/programs/fastfetch.nix index d1cf9e9..05310b2 100644 --- a/modules/programs/fastfetch.nix +++ b/modules/programs/fastfetch.nix @@ -1,6 +1,7 @@ +{ self, ... }: { flake.nixosModules.fastfetch = { - home-manager.users.matthew.imports = [ + home-manager.users.${self.user}.imports = [ { programs.fastfetch = { enable = true; diff --git a/modules/programs/gaming.nix b/modules/programs/gaming.nix index 874413b..c43bc18 100644 --- a/modules/programs/gaming.nix +++ b/modules/programs/gaming.nix @@ -1,6 +1,10 @@ { flake.nixosModules.gaming = { pkgs, ... }: { + environment.systemPackages = with pkgs; [ + prismlauncher + ]; + programs.steam.enable = true; programs.gamescope.enable = true; }; diff --git a/modules/programs/git.nix b/modules/programs/git.nix index 6ed4346..78b2688 100644 --- a/modules/programs/git.nix +++ b/modules/programs/git.nix @@ -1,6 +1,7 @@ +{ self, ... }: { flake.nixosModules.git = { - home-manager.users.matthew.imports = [ + home-manager.users.${self.user}.imports = [ { programs.git = { enable = true; diff --git a/modules/programs/kitty.nix b/modules/programs/kitty.nix index 9ed1612..c08bd3f 100644 --- a/modules/programs/kitty.nix +++ b/modules/programs/kitty.nix @@ -1,12 +1,12 @@ { self, ... }: { flake.nixosModules.kitty = { - home-manager.users.matthew.imports = [ + home-manager.users.${self.user}.imports = [ { programs.kitty = { enable = true; font = { - name = "${self.font}Mono"; + name = "${self.font.mono}"; size = 13; }; settings = { diff --git a/modules/programs/matugen/matugen.nix b/modules/programs/matugen/matugen.nix index f354b45..665f4e9 100644 --- a/modules/programs/matugen/matugen.nix +++ b/modules/programs/matugen/matugen.nix @@ -6,11 +6,11 @@ self.nixosModules.bash ]; - home-manager.users.matthew.imports = [ + home-manager.users.${self.user}.imports = [ { home.activation = { matugen = '' - ${pkgs.matugen}/bin/matugen image /home/matthew/Pictures/iriza-katou.jpg --source-color-index 0 + ${pkgs.matugen}/bin/matugen image ${self.wallpaper} --source-color-index 0 ''; }; @@ -37,6 +37,11 @@ input_path = '${builtins.toString ./templates/Matugen.colors}' output_path = '~/.local/share/color-schemes/Matugen.colors' + [templates.niri] + input_path = '${builtins.toString ./templates/niri-colors.kdl}' + output_path = '~/.config/niri/colors.kdl' + # post_hook = 'niri msg action load-config-file' + [templates.qt5ct] input_path = '${builtins.toString ./templates/qtct-colors.conf}' output_path = '~/.config/qt5ct/colors/matugen.conf' @@ -57,14 +62,14 @@ qt5ctSettings = { Appearance = { - color_scheme_path = "/home/matthew/.config/qt5ct/colors/matugen.conf"; + color_scheme_path = "/home/${self.user}/.config/qt5ct/colors/matugen.conf"; custom_palette = true; }; }; qt6ctSettings = { Appearance = { - color_scheme_path = "/home/matthew/.config/qt5ct/colors/matugen.conf"; + color_scheme_path = "/home/${self.user}/.config/qt5ct/colors/matugen.conf"; custom_palette = true; }; }; diff --git a/modules/programs/matugen/templates/niri-colors.kdl b/modules/programs/matugen/templates/niri-colors.kdl new file mode 100644 index 0000000..68a54ae --- /dev/null +++ b/modules/programs/matugen/templates/niri-colors.kdl @@ -0,0 +1,28 @@ +layout { + focus-ring { + active-color "{{colors.primary.default.hex}}" + inactive-color "{{colors.outline.default.hex}}" + urgent-color "{{colors.error.default.hex}}" + } + + border { + active-color "{{colors.primary.default.hex}}" + inactive-color "{{colors.outline.default.hex}}" + urgent-color "{{colors.error.default.hex}}" + } + + shadow { + color "{{colors.shadow.default.hex}}70" + } + + tab-indicator { + active-color "{{colors.primary.default.hex}}" + inactive-color "{{colors.outline.default.hex}}" + urgent-color "{{colors.error.default.hex}}" + } + + insert-hint { + color "{{colors.primary.default.hex}}80" + } +} + diff --git a/modules/programs/neovim.nix b/modules/programs/neovim.nix index 1631dc8..ef9148c 100644 --- a/modules/programs/neovim.nix +++ b/modules/programs/neovim.nix @@ -1,7 +1,7 @@ -{ inputs, ... }: +{ self, inputs, ... }: { flake.nixosModules.neovim = { - home-manager.users.matthew.imports = [ + home-manager.users.${self.user}.imports = [ { imports = [ inputs.nvf.homeManagerModules.default ]; diff --git a/modules/programs/tmux.nix b/modules/programs/tmux.nix index 5f2c595..bdbc9ad 100644 --- a/modules/programs/tmux.nix +++ b/modules/programs/tmux.nix @@ -1,6 +1,7 @@ +{ self, ... }: { flake.nixosModules.tmux = { pkgs, ... }: { - home-manager.users.matthew.imports = [ + home-manager.users.${self.user}.imports = [ { programs.tmux = { enable = true; diff --git a/modules/programs/waybar.nix b/modules/programs/waybar.nix index 27355b8..5b7f6b5 100644 --- a/modules/programs/waybar.nix +++ b/modules/programs/waybar.nix @@ -11,7 +11,7 @@ font-awesome ]; - home-manager.users.matthew.imports = [ + home-manager.users.${self.user}.imports = [ { programs.waybar = { enable = true; @@ -94,112 +94,111 @@ }; style = /*css*/ '' - @import "/home/matthew/.cache/wal/colors-waybar.css"; + @import "/home/${self.user}/.cache/wal/colors-waybar.css"; + * { + /* `otf-font-awesome` is required to be installed for icons */ + font-family: ${self.font.propo}, JetBrainsMonoNerdFontPropo; + font-size: 13pt; + transition-property: background-color; + transition-duration: .25s; + } - * { - /* `otf-font-awesome` is required to be installed for icons */ - font-family: FontAwesome, ${self.font}Propo; - font-size: 13pt; - transition-property: background-color; - transition-duration: .25s; - } + window#waybar { + background-color: @background; + color: @cursor; + } - window#waybar { - background-color: @background; - color: @cursor; - } + button { + /* Use box-shadow instead of border so the text isn't offset */ + box-shadow: inset 0 -3px transparent; + /* Avoid rounded borders under each button name */ - button { - /* Use box-shadow instead of border so the text isn't offset */ - box-shadow: inset 0 -3px transparent; - /* Avoid rounded borders under each button name */ + border: none; + border-radius: ${self.border.small}; + margin: 2 2; + } - border: none; - border-radius: 4; - margin: 2 2; - } + #workspaces button { + padding: 0 5px; + background-color: transparent; + } - #workspaces button { - padding: 0 5px; - background-color: transparent; - } + #workspaces button:hover { + background: @color1; + } - #workspaces button:hover { - background: @color1; - } + #workspaces button.focused, #workspaces button.active { + background-color: @color8; + color: @background; + /* box-shadow: inset 0 -3px @color3; */ + } - #workspaces button.focused, #workspaces button.active { - background-color: @color8; - color: @background; - /* box-shadow: inset 0 -3px @color3; */ - } + #workspaces button.urgent { + background-color: @color4; + } - #workspaces button.urgent { - background-color: @color4; - } + #language, + #tray, + #bluetooth, + #wireplumber, + #network, + #backlight, + #clock, + #battery, + #custom-power { + margin: 2 2; + padding: 0 10; + color: @cursor; + border-radius: ${self.border.small}; + } - #language, - #tray, - #bluetooth, - #wireplumber, - #network, - #backlight, - #clock, - #battery, - #custom-power { - margin: 2 2; - padding: 0 10; - color: @cursor; - border-radius: 4; - } + #battery, + #bluetooth, + #wireplumber, + #custom-power, + #network { + background-color: @color4; + color: @background; + } - #battery, - #bluetooth, - #wireplumber, - #custom-power, - #network { - background-color: @color4; - color: @background; - } + /* top right bottom left */ + #battery { + padding: 0 5 0 10; + border-radius: ${self.border.small} 0 0 ${self.border.small}; + margin: 2 0 2 2; + } - /* top right bottom left */ - #battery { - padding: 0 5 0 10; - border-radius: 4 0 0 4; - margin: 2 0 2 2; - } + #battery.bat2 { + padding: 0 10 0 5; + border-radius: 0 ${self.border.small} ${self.border.small} 0; + margin: 2 2 2 0; + } - #battery.bat2 { - padding: 0 10 0 5; - border-radius: 0 4 4 0; - margin: 2 2 2 0; - } + #custom-power { + background-color: @color8; + } - #custom-power { - background-color: @color8; - } + #bluetooth:hover, + #wireplumber:hover, + #network:hover, + #custom-power:hover { + background-color: @color3; + } - #bluetooth:hover, - #wireplumber:hover, - #network:hover, - #custom-power:hover { - background-color: @color3; - } + #window, + #workspaces { + margin: 0 4px; + } - #window, - #workspaces { - margin: 0 4px; - } + /* If workspaces is the leftmost module, omit left margin */ + .modules-left > widget:first-child > #workspaces { + margin-left: 0; + } - /* If workspaces is the leftmost module, omit left margin */ - .modules-left > widget:first-child > #workspaces { - margin-left: 0; - } - - /* If workspaces is the rightmost module, omit right margin */ - .modules-right > widget:last-child > #workspaces { - margin-right: 0; - } + /* If workspaces is the rightmost module, omit right margin */ + .modules-right > widget:last-child > #workspaces { + margin-right: 0; + } ''; }; } diff --git a/modules/sessions/niri/config.kdl b/modules/sessions/niri/config.kdl index 9a865e6..563266a 100644 --- a/modules/sessions/niri/config.kdl +++ b/modules/sessions/niri/config.kdl @@ -3,6 +3,9 @@ // Check the wiki for a full description of the configuration: // https://yalter.github.io/niri/Configuration:-Introduction +include "./colors.kdl" +include "./config-nix.kdl" + // Input device configuration. // Find the full list of options on the wiki: // https://yalter.github.io/niri/Configuration:-Input @@ -22,8 +25,8 @@ input { // localectl set-x11-keymap. } - repeat-delay 250 - repeat-rate 25 + repeat-delay 250 + repeat-rate 25 // Enable numlock on startup, omitting this setting disables it. // numlock @@ -174,13 +177,12 @@ layout { // Color of the ring on the active monitor. // active-color "#7fc8ff" - active-color "#4c7f54" // Color of the ring on inactive monitors. // // The focus ring only draws around the active window, so the only place // where you can see its inactive-color is on other monitors. - inactive-color "#505050" + // inactive-color "#505050" // You can also use gradients. They take precedence over solid colors. // Gradients are rendered the same as CSS linear-gradient(angle, from, to). @@ -205,11 +207,11 @@ layout { off width 2 - active-color "#ffc87f" - inactive-color "#505050" + // active-color "#ffc87f" + // inactive-color "#505050" // Color of the border around windows that request your attention. - urgent-color "#9b0000" + // urgent-color "#9b0000" // Gradients can use a few different interpolation color spaces. // For example, this is a pastel rainbow gradient via in="oklch longer hue". @@ -253,7 +255,7 @@ layout { offset x=0 y=5 // You can also change the shadow color and opacity. - color "#0007" + // color "#0007" } // Struts shrink the area occupied by windows, similarly to layer-shell panels. @@ -275,9 +277,6 @@ layout { // See the binds section below for more spawn examples. // This line starts waybar, a commonly used bar for Wayland compositors. -// spawn-sh-at-startup "wal -i /home/matthew/Pictures/iriza-katou.jpg --cols16 --saturate 0.15" -// spawn-sh-at-startup "matugen image /home/matthew/Pictures/iriza-katou.jpg --source-color-index 0"; -spawn-sh-at-startup "swaybg -i /home/matthew/Pictures/iriza-katou.jpg" // Wallpaper utility. spawn-at-startup "waybar" // Bar. spawn-at-startup "dunst" // Notification daemon. spawn-sh-at-startup "wlsunset -l 43.2 -L 76.9 -t 5000" // Night light utility. @@ -363,7 +362,7 @@ window-rule { // Example: enable rounded corners for all windows. // (This example rule is commented out with a "/-" in front.) window-rule { - geometry-corner-radius 8 + // geometry-corner-radius 0 clip-to-geometry true } diff --git a/modules/sessions/niri/niri.nix b/modules/sessions/niri/niri.nix index 14b0540..4a6ec94 100644 --- a/modules/sessions/niri/niri.nix +++ b/modules/sessions/niri/niri.nix @@ -3,8 +3,9 @@ flake.nixosModules.niri = { pkgs, lib, config, ... }: { imports = [ - self.nixosModules.waybar + self.nixosModules.kitty self.nixosModules.matugen + self.nixosModules.waybar ]; programs.niri.enable = true; @@ -47,17 +48,17 @@ xwayland-satellite ]; - home-manager.users.matthew.imports = [ + home-manager.users.${self.user}.imports = [ { home.activation = { pywal = '' - ${pkgs.pywal}/bin/wal -i /home/matthew/Pictures/iriza-katou.jpg --saturate 0.25 + ${pkgs.pywal}/bin/wal -i ${self.wallpaper} --saturate 0.25 ''; }; programs.rofi = { enable = true; - font = "${self.font}Mono 18"; + font = "${self.font.mono} 18"; extraConfig = { kb-row-up = "Up,Control+k,Shift+Tab,Shift+ISO_Left_Tab"; kb-row-down = "Down,Control+j"; @@ -87,6 +88,14 @@ # Symlink config file. xdg.configFile."niri/config.kdl".source = ./config.kdl; + # Write custom config file. + xdg.configFile."niri/config-nix.kdl".text = /* kdl */ '' + spawn-sh-at-startup "swaybg -i ${self.wallpaper}" // Wallpaper utility. + window-rule { + geometry-corner-radius ${self.border.main} + } + ''; + # Set default applications. xdg.mimeApps = { enable = true; @@ -124,7 +133,7 @@ size = 24; }; font = { - name = "${self.font}Mono"; + name = "${self.font.mono}"; size = 13; }; }; @@ -136,15 +145,15 @@ qt5ctSettings = { Fonts = { - fixed = "\"${self.font}Mono,13\""; - general = "\"${self.font}Mono,13\""; + fixed = "\"${self.font.mono},13\""; + general = "\"${self.font.mono},13\""; }; }; qt6ctSettings = { Fonts = { - fixed = "\"${self.font}Mono,13\""; - general = "\"${self.font}Mono,13\""; + fixed = "\"${self.font.mono},13\""; + general = "\"${self.font.mono},13\""; }; }; }; diff --git a/modules/theme.nix b/modules/theme.nix index 2655c5f..fee81af 100644 --- a/modules/theme.nix +++ b/modules/theme.nix @@ -1,8 +1,22 @@ +{ self, ... }: let - font = "JetBrainsMonoNerdFont"; - # font = "TerminessNerdFont"; + wallpaper = "/home/${self.user}/Pictures/iriza-katou.jpg"; + + font = { + mono = "JetBrainsMonoNerdFontMono"; + propo = "JetBrainsMonoNerdFontPropo"; + # mono = "IBM Plex Mono"; + # propo = "IBM Plex Mono"; + }; + + border = { + main = "0"; + small = "0"; + }; in { flake = { inherit font; + inherit wallpaper; + inherit border; }; }