My Nix Infra
nix nixos
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

wip: tde with niri & family

ydcjeff 28831261 3d8884db

+1040 -26
+2 -1
Makefile
··· 2 2 bash scripts/nixos-install.sh $(hostname) 3 3 4 4 nixos-post: 5 - $(MAKE) sw 6 5 $(MAKE) cp 6 + $(MAKE) sw 7 7 bash scripts/init-work.sh 8 8 reboot 9 9 ··· 11 11 bash scripts/cp-config.sh 12 12 13 13 sw: 14 + $(MAKE) cp 14 15 sudo nixos-rebuild switch --flake . --impure 15 16 16 17 debug:
+77
config/hypr/frappe.conf
··· 1 + $rosewater = rgb(f2d5cf) 2 + $rosewaterAlpha = f2d5cf 3 + 4 + $flamingo = rgb(eebebe) 5 + $flamingoAlpha = eebebe 6 + 7 + $pink = rgb(f4b8e4) 8 + $pinkAlpha = f4b8e4 9 + 10 + $mauve = rgb(ca9ee6) 11 + $mauveAlpha = ca9ee6 12 + 13 + $red = rgb(e78284) 14 + $redAlpha = e78284 15 + 16 + $maroon = rgb(ea999c) 17 + $maroonAlpha = ea999c 18 + 19 + $peach = rgb(ef9f76) 20 + $peachAlpha = ef9f76 21 + 22 + $yellow = rgb(e5c890) 23 + $yellowAlpha = e5c890 24 + 25 + $green = rgb(a6d189) 26 + $greenAlpha = a6d189 27 + 28 + $teal = rgb(81c8be) 29 + $tealAlpha = 81c8be 30 + 31 + $sky = rgb(99d1db) 32 + $skyAlpha = 99d1db 33 + 34 + $sapphire = rgb(85c1dc) 35 + $sapphireAlpha = 85c1dc 36 + 37 + $blue = rgb(8caaee) 38 + $blueAlpha = 8caaee 39 + 40 + $lavender = rgb(babbf1) 41 + $lavenderAlpha = babbf1 42 + 43 + $text = rgb(c6d0f5) 44 + $textAlpha = c6d0f5 45 + 46 + $subtext1 = rgb(b5bfe2) 47 + $subtext1Alpha = b5bfe2 48 + 49 + $subtext0 = rgb(a5adce) 50 + $subtext0Alpha = a5adce 51 + 52 + $overlay2 = rgb(949cbb) 53 + $overlay2Alpha = 949cbb 54 + 55 + $overlay1 = rgb(838ba7) 56 + $overlay1Alpha = 838ba7 57 + 58 + $overlay0 = rgb(737994) 59 + $overlay0Alpha = 737994 60 + 61 + $surface2 = rgb(626880) 62 + $surface2Alpha = 626880 63 + 64 + $surface1 = rgb(51576d) 65 + $surface1Alpha = 51576d 66 + 67 + $surface0 = rgb(414559) 68 + $surface0Alpha = 414559 69 + 70 + $base = rgb(303446) 71 + $baseAlpha = 303446 72 + 73 + $mantle = rgb(292c3c) 74 + $mantleAlpha = 292c3c 75 + 76 + $crust = rgb(232634) 77 + $crustAlpha = 232634
+90
config/hypr/hyprlock.conf
··· 1 + source = $HOME/.config/hypr/frappe.conf 2 + 3 + $accent = $mauve 4 + $accentAlpha = $mauveAlpha 5 + $font = JetBrainsMono Nerd Font 6 + 7 + # GENERAL 8 + general { 9 + hide_cursor = true 10 + } 11 + 12 + # BACKGROUND 13 + background { 14 + monitor = 15 + path = $HOME/.dotfiles/wallpapers/wallhaven-m3j7q9.png 16 + blur_passes = 3 17 + color = $base 18 + } 19 + 20 + # LAYOUT 21 + label { 22 + monitor = 23 + text = Layout: $LAYOUT 24 + color = $text 25 + font_size = 25 26 + font_family = $font 27 + position = 30, -30 28 + halign = left 29 + valign = top 30 + } 31 + 32 + # TIME 33 + label { 34 + monitor = 35 + text = $TIME 36 + color = $text 37 + font_size = 90 38 + font_family = $font 39 + position = -30, 0 40 + halign = right 41 + valign = top 42 + } 43 + 44 + # DATE 45 + label { 46 + monitor = 47 + text = cmd[update:43200000] date +"%A, %d %B %Y" 48 + color = $text 49 + font_size = 25 50 + font_family = $font 51 + position = -30, -150 52 + halign = right 53 + valign = top 54 + } 55 + 56 + # FINGERPRINT 57 + { 58 + monitor = ""; 59 + text = "$FPRINTPROMPT"; 60 + color = "$text"; 61 + font_size = 14; 62 + font_family = $font; 63 + position = "0, -107"; 64 + halign = "center"; 65 + valign = "center"; 66 + } 67 + 68 + # INPUT FIELD 69 + input-field { 70 + monitor = 71 + size = 300, 60 72 + outline_thickness = 4 73 + dots_size = 0.2 74 + dots_spacing = 0.2 75 + dots_center = true 76 + outer_color = $accent 77 + inner_color = $surface0 78 + font_color = $text 79 + fade_on_empty = false 80 + placeholder_text = <span foreground="##$textAlpha"><i>󰌾 Logged in as </i><span foreground="##$accentAlpha">$USER</span></span> 81 + hide_input = false 82 + check_color = $accent 83 + fail_color = $red 84 + fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> 85 + capslock_color = $yellow 86 + position = 0, 0 87 + halign = center 88 + valign = center 89 + } 90 +
+21
config/kanshi/config
··· 1 + output "Microstep MSI MP273Q E2 PB6H385300118" { 2 + mode 2560x1440@60.00Hz 3 + position 1920,0 4 + alias $MSI_27 5 + } 6 + 7 + output "eDP-1" { 8 + mode 1920x1080@60.00Hz 9 + position 0,0 10 + scale 1.0 11 + } 12 + 13 + profile monitors-only { 14 + output "eDP-1" disable 15 + output $MSI_27 enable 16 + } 17 + 18 + profile laptop-only { 19 + output "eDP-1" enable 20 + } 21 +
+265
config/niri/config.kdl
··· 1 + // This config is in the KDL format: https://kdl.dev 2 + // "/-" comments out the following node. 3 + // Check the wiki for a full description of the configuration: 4 + // https://yalter.github.io/niri/Configuration:-Introduction 5 + 6 + input { 7 + keyboard { 8 + numlock 9 + } 10 + 11 + touchpad { 12 + tap 13 + dwt 14 + natural-scroll 15 + } 16 + 17 + focus-follows-mouse 18 + disable-power-key-handling 19 + } 20 + 21 + // You can configure outputs by their name, which you can find 22 + // by running `niri msg outputs` while inside a niri instance. 23 + // The built-in laptop monitor is usually called "eDP-1". 24 + // Find more information on the wiki: 25 + // https://yalter.github.io/niri/Configuration:-Outputs 26 + // Remember to uncomment the node by removing "/-"! 27 + /-output "eDP-1" { 28 + // Uncomment this line to disable this output. 29 + // off 30 + 31 + // Resolution and, optionally, refresh rate of the output. 32 + // The format is "<width>x<height>" or "<width>x<height>@<refresh rate>". 33 + // If the refresh rate is omitted, niri will pick the highest refresh rate 34 + // for the resolution. 35 + // If the mode is omitted altogether or is invalid, niri will pick one automatically. 36 + // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes. 37 + mode "1920x1080@120.030" 38 + 39 + // You can use integer or fractional scale, for example use 1.5 for 150% scale. 40 + scale 2 41 + 42 + // Transform allows to rotate the output counter-clockwise, valid values are: 43 + // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270. 44 + transform "normal" 45 + 46 + // Position of the output in the global coordinate space. 47 + // This affects directional monitor actions like "focus-monitor-left", and cursor movement. 48 + // The cursor can only move between directly adjacent outputs. 49 + // Output scale and rotation has to be taken into account for positioning: 50 + // outputs are sized in logical, or scaled, pixels. 51 + // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080, 52 + // so to put another output directly adjacent to it on the right, set its x to 1920. 53 + // If the position is unset or results in an overlap, the output is instead placed 54 + // automatically. 55 + position x=1280 y=0 56 + } 57 + 58 + // Disable workspace shadows in the overview. 59 + overview { 60 + workspace-shadow { 61 + off 62 + } 63 + } 64 + 65 + layout { 66 + // Set gaps around windows in logical pixels. 67 + gaps 12 68 + 69 + // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. 70 + preset-column-widths { 71 + proportion 0.33333 72 + proportion 0.5 73 + proportion 0.66667 74 + proportion 1.0 75 + } 76 + 77 + // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between. 78 + preset-window-heights { 79 + proportion 0.33333 80 + proportion 0.5 81 + proportion 0.66667 82 + proportion 1.0 83 + } 84 + 85 + // You can change the default width of the new windows. 86 + default-column-width { proportion 0.5; } 87 + 88 + focus-ring { 89 + // How many logical pixels the ring extends out from the windows. 90 + width 2 91 + 92 + // Color of the ring on the active monitor. 93 + active-color "#7fc8ff" 94 + 95 + // Color of the ring on inactive monitors. 96 + // 97 + // The focus ring only draws around the active window, so the only place 98 + // where you can see its inactive-color is on other monitors. 99 + inactive-color "#505050" 100 + } 101 + } 102 + 103 + hotkey-overlay { 104 + // Uncomment this line to disable the "Important Hotkeys" pop-up at startup. 105 + skip-at-startup 106 + } 107 + 108 + // Uncomment this line to ask the clients to omit their client-side decorations if possible. 109 + // If the client will specifically ask for CSD, the request will be honored. 110 + // Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. 111 + // This option will also fix border/focus ring drawing behind some semitransparent windows. 112 + // After enabling or disabling this, you need to restart the apps for this to take effect. 113 + prefer-no-csd 114 + 115 + // You can change the path where screenshots are saved. 116 + // A ~ at the front will be expanded to the home directory. 117 + // The path is formatted with strftime(3) to give you the screenshot date and time. 118 + screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png" 119 + 120 + // Window rules let you adjust behavior for individual windows. 121 + // Find more information on the wiki: 122 + // https://yalter.github.io/niri/Configuration:-Window-Rules 123 + 124 + // Open the Firefox picture-in-picture player as floating by default. 125 + window-rule { 126 + // This app-id regular expression will work for both: 127 + // - host Firefox (app-id is "firefox") 128 + // - Flatpak Firefox (app-id is "org.mozilla.firefox") 129 + match app-id=r#"firefox$"# title="^Picture-in-Picture$" 130 + open-floating true 131 + } 132 + 133 + // Example: block out two password managers from screen capture. 134 + // (This example rule is commented out with a "/-" in front.) 135 + /-window-rule { 136 + match app-id=r#"^org\.keepassxc\.KeePassXC$"# 137 + match app-id=r#"^org\.gnome\.World\.Secrets$"# 138 + 139 + block-out-from "screen-capture" 140 + 141 + // Use this instead if you want them visible on third-party screenshot tools. 142 + // block-out-from "screencast" 143 + } 144 + 145 + spawn-sh-at-startup "swaybg -m fill -i $(ls -d ~/.dotfiles/wallpapers/* | shuf | head -n 1)" 146 + spawn-at-startup "swayidle" "-w" "timeout" "600" "'hyprlock'" "timeout" "660" "'niri msg action power-off-monitors'" "before-sleep" "'hyprlock'" 147 + 148 + binds { 149 + // Mod-Shift-/, which is usually the same as Mod-?, shows a list of important hotkeys. 150 + Mod+Shift+Slash { show-hotkey-overlay; } 151 + 152 + Mod+Return repeat=false hotkey-overlay-title="Open a Terminal" { spawn "ghostty"; } 153 + Mod+Space repeat=false hotkey-overlay-title="Run an Application Launcher" { spawn "fuzzel"; } 154 + Mod+B repeat=false hotkey-overlay-title="Open Browser" { spawn "firefox"; } 155 + Ctrl+Alt+L repeat=false hotkey-overlay-title="Lock the Screen" { spawn "hyprlock"; } 156 + 157 + XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05+" "-l" "1.0"; } 158 + XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.05-"; } 159 + XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } 160 + XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } 161 + XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "set" "5%+"; } 162 + XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "set" "5%-"; } 163 + 164 + Mod+O repeat=false { toggle-overview; } 165 + Mod+Q repeat=false { close-window; } 166 + 167 + Mod+H { focus-column-left; } 168 + Mod+J { focus-window-down; } 169 + Mod+K { focus-window-up; } 170 + Mod+L { focus-column-right; } 171 + 172 + // Control windows/columns movement 173 + Mod+Ctrl+H { move-column-left; } 174 + Mod+Ctrl+J { move-window-down; } 175 + Mod+Ctrl+K { move-window-up; } 176 + Mod+Ctrl+L { move-column-right; } 177 + 178 + // Shift columns across monitors 179 + Mod+Shift+H { move-column-to-monitor-left; } 180 + Mod+Shift+J { move-column-to-monitor-down; } 181 + Mod+Shift+K { move-column-to-monitor-up; } 182 + Mod+Shift+L { move-column-to-monitor-right; } 183 + 184 + // Rarely use 185 + Mod+Shift+Ctrl+H { focus-monitor-left; } 186 + Mod+Shift+Ctrl+J { focus-monitor-down; } 187 + Mod+Shift+Ctrl+K { focus-monitor-up; } 188 + Mod+Shift+Ctrl+L { focus-monitor-right; } 189 + 190 + Mod+U { focus-workspace-down; } 191 + Mod+I { focus-workspace-up; } 192 + Mod+Shift+U { move-column-to-workspace-down; } 193 + Mod+Shift+I { move-column-to-workspace-up; } 194 + 195 + // You can refer to workspaces by index. However, keep in mind that 196 + // niri is a dynamic workspace system, so these commands are kind of 197 + // "best effort". Trying to refer to a workspace index bigger than 198 + // the current workspace count will instead refer to the bottommost 199 + // (empty) workspace. 200 + // 201 + // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on 202 + // will all refer to the 3rd workspace. 203 + Mod+1 { focus-workspace 1; } 204 + Mod+2 { focus-workspace 2; } 205 + Mod+3 { focus-workspace 3; } 206 + Mod+4 { focus-workspace 4; } 207 + Mod+5 { focus-workspace 5; } 208 + Mod+6 { focus-workspace 6; } 209 + Mod+7 { focus-workspace 7; } 210 + Mod+8 { focus-workspace 8; } 211 + Mod+9 { focus-workspace 9; } 212 + Mod+Shift+1 { move-column-to-workspace 1; } 213 + Mod+Shift+2 { move-column-to-workspace 2; } 214 + Mod+Shift+3 { move-column-to-workspace 3; } 215 + Mod+Shift+4 { move-column-to-workspace 4; } 216 + Mod+Shift+5 { move-column-to-workspace 5; } 217 + Mod+Shift+6 { move-column-to-workspace 6; } 218 + Mod+Shift+7 { move-column-to-workspace 7; } 219 + Mod+Shift+8 { move-column-to-workspace 8; } 220 + Mod+Shift+9 { move-column-to-workspace 9; } 221 + 222 + // Switches focus between the current and the previous workspace. 223 + Mod+Tab { focus-workspace-previous; } 224 + 225 + // The following binds move the focused window in and out of a column. 226 + // If the window is alone, they will consume it into the nearby column to the side. 227 + // If the window is already in a column, they will expel it out. 228 + Mod+BracketLeft { consume-or-expel-window-left; } 229 + Mod+BracketRight { consume-or-expel-window-right; } 230 + 231 + Mod+R { switch-preset-column-width; } 232 + Mod+Shift+R { switch-preset-window-height; } 233 + Mod+F { maximize-column; } 234 + Mod+C { center-column; } 235 + 236 + Mod+Minus { set-column-width "-10%"; } 237 + Mod+Equal { set-column-width "+10%"; } 238 + Mod+Shift+Minus { set-window-height "-10%"; } 239 + Mod+Shift+Equal { set-window-height "+10%"; } 240 + 241 + // Move the focused window between the floating and the tiling layout. 242 + Mod+V { toggle-window-floating; } 243 + 244 + Print { screenshot; } 245 + Ctrl+Print { screenshot-screen; } 246 + Alt+Print { screenshot-window; } 247 + 248 + // Applications such as remote-desktop clients and software KVM switches may 249 + // request that niri stops processing the keyboard shortcuts defined here 250 + // so they may, for example, forward the key presses as-is to a remote machine. 251 + // It's a good idea to bind an escape hatch to toggle the inhibitor, 252 + // so a buggy application can't hold your session hostage. 253 + // 254 + // The allow-inhibiting=false property can be applied to other binds as well, 255 + // which ensures niri always processes them, even when an inhibitor is active. 256 + Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } 257 + 258 + // The quit action will show a confirmation dialog to avoid accidental exits. 259 + Mod+Shift+E { quit; } 260 + Ctrl+Alt+Delete { quit; } 261 + 262 + // Powers off the monitors. To turn them back on, do any input like 263 + // moving the mouse or pressing any other key. 264 + Mod+Shift+P { power-off-monitors; } 265 + }
+95
config/waybar/config.jsonc
··· 1 + { 2 + "layer": "top", 3 + "position": "top", 4 + "modules-left": ["niri/workspaces"], 5 + "modules-center": ["clock"], 6 + "modules-right": [ 7 + "group/misc", 8 + "backlight", 9 + "battery", 10 + "bluetooth", 11 + "network", 12 + "pulseaudio", 13 + "tray", 14 + ], 15 + "reload_style_on_change": true, 16 + "niri/workspaces": {}, 17 + "clock": { 18 + "format": "{:L%F %H:%M}", 19 + "tooltip": false, 20 + }, 21 + "backlight": { 22 + "format": "\udb80\udcdf {percent}%", 23 + }, 24 + "battery": { 25 + "states": { 26 + "warning": 30, 27 + "critical": 15, 28 + }, 29 + "format": "{icon} {capacity}%", 30 + "format-icons": { 31 + // nf-md-battery_charging 32 + "charging": ["\udb80\udc84"], 33 + // nf-md-battery 34 + "default": ["\udb80\udc79"], 35 + }, 36 + }, 37 + "bluetooth": { 38 + // nf-md-bluetooth 39 + "format-on": "\udb80\udcaf", 40 + // nf-md-bluetooth_off 41 + "format-off": "\udb80\udcb2", 42 + // nf-md-bluetooth_connect 43 + "format-connected": "\udb80\udcb1", 44 + // nf-md-airplane 45 + "format-disabled": "\udb80\udc1d", 46 + "on-click": "exec setsid $TERMINAL -e bluetui", 47 + }, 48 + "cpu": { 49 + // nf-md-cpu-64-bit 50 + "format": "\udb83\udee0 {usage}%", 51 + }, 52 + "network": { 53 + // nf-md-ethernet 54 + "format-ethernet": "\udb80\ude00 {ipaddr}/{cidr}", 55 + // nf-md-wifi-strength-4 56 + "format-wifi": "\udb82\udd28 {signalStrength}%", 57 + "format-linked": "{ifname} (No IP)", 58 + // nf-md-wifi_strength_off 59 + "format-disconnected": "\udb82\udd2d", 60 + // nf-md-airplane 61 + "format-disabled": "\udb80\udc1d", 62 + "format-alt": "{ifname}: {ipaddr}/{cidr} via {gwaddr}", 63 + "tooltip-format-wifi": "{essid} ({frequency} GHz)\nDown: {bandwidthDownBytes} Up: {bandwidthUpBytes}", 64 + "tooltip-format-ethernet": "Down: {bandwidthDownBytes} Up: {bandwidthUpBytes}", 65 + "tooltip-format-disconnected": "Disconnected", 66 + "on-click": "exec setsid $TERMINAL -e nmtui", 67 + }, 68 + "pulseaudio": { 69 + // nf-md-volume_high 70 + "format": "\udb81\udd7e {volume}%", 71 + // nf-md-volume_mute 72 + "format-muted": "\udb81\udf5f", 73 + "scroll-step": 5, 74 + }, 75 + "privacy": { 76 + "icon-size": 14, 77 + }, 78 + "keyboard-state": { 79 + "numlock": true, 80 + "capslock": true, 81 + "format": "{name} {icon}", 82 + "format-icons": { 83 + // nf-md-lock 84 + "locked": "\udb80\udf3e", 85 + "unlocked": "", 86 + }, 87 + }, 88 + "group/misc": { 89 + "orientation": "inherit", 90 + "modules": ["cpu", "keyboard-state", "cava", "privacy"], 91 + "drawer": { 92 + "transition-duration": 600, 93 + }, 94 + }, 95 + }
+369 -9
flake.lock
··· 1 1 { 2 2 "nodes": { 3 + "base16": { 4 + "inputs": { 5 + "fromYaml": "fromYaml" 6 + }, 7 + "locked": { 8 + "lastModified": 1746562888, 9 + "narHash": "sha256-YgNJQyB5dQiwavdDFBMNKk1wyS77AtdgDk/VtU6wEaI=", 10 + "owner": "SenchoPens", 11 + "repo": "base16.nix", 12 + "rev": "806a1777a5db2a1ef9d5d6f493ef2381047f2b89", 13 + "type": "github" 14 + }, 15 + "original": { 16 + "owner": "SenchoPens", 17 + "repo": "base16.nix", 18 + "type": "github" 19 + } 20 + }, 21 + "base16-fish": { 22 + "flake": false, 23 + "locked": { 24 + "lastModified": 1622559957, 25 + "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", 26 + "owner": "tomyun", 27 + "repo": "base16-fish", 28 + "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", 29 + "type": "github" 30 + }, 31 + "original": { 32 + "owner": "tomyun", 33 + "repo": "base16-fish", 34 + "type": "github" 35 + } 36 + }, 37 + "base16-helix": { 38 + "flake": false, 39 + "locked": { 40 + "lastModified": 1748408240, 41 + "narHash": "sha256-9M2b1rMyMzJK0eusea0x3lyh3mu5nMeEDSc4RZkGm+g=", 42 + "owner": "tinted-theming", 43 + "repo": "base16-helix", 44 + "rev": "6c711ab1a9db6f51e2f6887cc3345530b33e152e", 45 + "type": "github" 46 + }, 47 + "original": { 48 + "owner": "tinted-theming", 49 + "repo": "base16-helix", 50 + "type": "github" 51 + } 52 + }, 53 + "base16-vim": { 54 + "flake": false, 55 + "locked": { 56 + "lastModified": 1732806396, 57 + "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", 58 + "owner": "tinted-theming", 59 + "repo": "base16-vim", 60 + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", 61 + "type": "github" 62 + }, 63 + "original": { 64 + "owner": "tinted-theming", 65 + "repo": "base16-vim", 66 + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", 67 + "type": "github" 68 + } 69 + }, 70 + "catppuccin": { 71 + "inputs": { 72 + "nixpkgs": [ 73 + "nixpkgs" 74 + ] 75 + }, 76 + "locked": { 77 + "lastModified": 1754766435, 78 + "narHash": "sha256-DT8CQoqV2haX+Fo16WXAt9gKCSXOZH9ZfnV++Br+qcM=", 79 + "owner": "catppuccin", 80 + "repo": "nix", 81 + "rev": "e339d6d822fa81c39d1ab89694b4ee2cfc830c9a", 82 + "type": "github" 83 + }, 84 + "original": { 85 + "owner": "catppuccin", 86 + "ref": "release-25.05", 87 + "repo": "nix", 88 + "type": "github" 89 + } 90 + }, 3 91 "disko": { 4 92 "inputs": { 5 93 "nixpkgs": [ ··· 7 95 ] 8 96 }, 9 97 "locked": { 10 - "lastModified": 1746728054, 11 - "narHash": "sha256-eDoSOhxGEm2PykZFa/x9QG5eTH0MJdiJ9aR00VAofXE=", 98 + "lastModified": 1758160037, 99 + "narHash": "sha256-fXelTdjdILspZ1IUU9aICB1+PXwSFiF8j+7ujwo1VpQ=", 12 100 "owner": "nix-community", 13 101 "repo": "disko", 14 - "rev": "ff442f5d1425feb86344c028298548024f21256d", 102 + "rev": "4f554162fff88e77655073d352eec0cea71103a2", 15 103 "type": "github" 16 104 }, 17 105 "original": { 18 106 "owner": "nix-community", 19 - "ref": "latest", 20 107 "repo": "disko", 21 108 "type": "github" 22 109 } 23 110 }, 111 + "firefox-gnome-theme": { 112 + "flake": false, 113 + "locked": { 114 + "lastModified": 1748383148, 115 + "narHash": "sha256-pGvD/RGuuPf/4oogsfeRaeMm6ipUIznI2QSILKjKzeA=", 116 + "owner": "rafaelmardojai", 117 + "repo": "firefox-gnome-theme", 118 + "rev": "4eb2714fbed2b80e234312611a947d6cb7d70caf", 119 + "type": "github" 120 + }, 121 + "original": { 122 + "owner": "rafaelmardojai", 123 + "repo": "firefox-gnome-theme", 124 + "type": "github" 125 + } 126 + }, 127 + "flake-parts": { 128 + "inputs": { 129 + "nixpkgs-lib": [ 130 + "stylix", 131 + "nixpkgs" 132 + ] 133 + }, 134 + "locked": { 135 + "lastModified": 1749398372, 136 + "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", 137 + "owner": "hercules-ci", 138 + "repo": "flake-parts", 139 + "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", 140 + "type": "github" 141 + }, 142 + "original": { 143 + "owner": "hercules-ci", 144 + "repo": "flake-parts", 145 + "type": "github" 146 + } 147 + }, 148 + "fromYaml": { 149 + "flake": false, 150 + "locked": { 151 + "lastModified": 1731966426, 152 + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", 153 + "owner": "SenchoPens", 154 + "repo": "fromYaml", 155 + "rev": "106af9e2f715e2d828df706c386a685698f3223b", 156 + "type": "github" 157 + }, 158 + "original": { 159 + "owner": "SenchoPens", 160 + "repo": "fromYaml", 161 + "type": "github" 162 + } 163 + }, 164 + "gnome-shell": { 165 + "flake": false, 166 + "locked": { 167 + "lastModified": 1744584021, 168 + "narHash": "sha256-0RJ4mJzf+klKF4Fuoc8VN8dpQQtZnKksFmR2jhWE1Ew=", 169 + "owner": "GNOME", 170 + "repo": "gnome-shell", 171 + "rev": "52c517c8f6c199a1d6f5118fae500ef69ea845ae", 172 + "type": "github" 173 + }, 174 + "original": { 175 + "owner": "GNOME", 176 + "ref": "48.1", 177 + "repo": "gnome-shell", 178 + "type": "github" 179 + } 180 + }, 181 + "home-manager": { 182 + "inputs": { 183 + "nixpkgs": [ 184 + "nixpkgs" 185 + ] 186 + }, 187 + "locked": { 188 + "lastModified": 1758313341, 189 + "narHash": "sha256-SsI6INUzWwPcRKRaxvi50RttnD9rcC4EjV+67TOEfrQ=", 190 + "owner": "nix-community", 191 + "repo": "home-manager", 192 + "rev": "6f656618ebc71ca82d93d306a8aecb2c5f6f2ab2", 193 + "type": "github" 194 + }, 195 + "original": { 196 + "owner": "nix-community", 197 + "ref": "release-25.05", 198 + "repo": "home-manager", 199 + "type": "github" 200 + } 201 + }, 24 202 "nixpkgs": { 25 203 "locked": { 26 - "lastModified": 1757431588, 27 - "narHash": "sha256-X/O41u3+YNs7uiC2LwVCZuFzfhd1fgu7i91RCFSu3sg=", 28 - "rev": "d179d77c139e0a3f5c416477f7747e9d6b7ec315", 204 + "lastModified": 1758135664, 205 + "narHash": "sha256-AYOqNVRaBbpK31I8PjKERYgcdjbeYVd1sxRhaKY+CLQ=", 206 + "rev": "e9b7f2ff62b35f711568b1f0866243c7c302028d", 29 207 "type": "tarball", 30 - "url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.809619.d179d77c139e/nixexprs.tar.xz" 208 + "url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.809980.e9b7f2ff62b3/nixexprs.tar.xz" 31 209 }, 32 210 "original": { 33 211 "type": "tarball", 34 212 "url": "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz" 35 213 } 36 214 }, 215 + "nur": { 216 + "inputs": { 217 + "flake-parts": [ 218 + "stylix", 219 + "flake-parts" 220 + ], 221 + "nixpkgs": [ 222 + "stylix", 223 + "nixpkgs" 224 + ], 225 + "treefmt-nix": "treefmt-nix" 226 + }, 227 + "locked": { 228 + "lastModified": 1751320053, 229 + "narHash": "sha256-3m6RMw0FbbaUUa01PNaMLoO7D99aBClmY5ed9V3vz+0=", 230 + "owner": "nix-community", 231 + "repo": "NUR", 232 + "rev": "cbde1735782f9c2bb2c63d5e05fba171a14a4670", 233 + "type": "github" 234 + }, 235 + "original": { 236 + "owner": "nix-community", 237 + "repo": "NUR", 238 + "type": "github" 239 + } 240 + }, 37 241 "root": { 38 242 "inputs": { 243 + "catppuccin": "catppuccin", 39 244 "disko": "disko", 40 - "nixpkgs": "nixpkgs" 245 + "home-manager": "home-manager", 246 + "nixpkgs": "nixpkgs", 247 + "stylix": "stylix" 248 + } 249 + }, 250 + "stylix": { 251 + "inputs": { 252 + "base16": "base16", 253 + "base16-fish": "base16-fish", 254 + "base16-helix": "base16-helix", 255 + "base16-vim": "base16-vim", 256 + "firefox-gnome-theme": "firefox-gnome-theme", 257 + "flake-parts": "flake-parts", 258 + "gnome-shell": "gnome-shell", 259 + "nixpkgs": [ 260 + "nixpkgs" 261 + ], 262 + "nur": "nur", 263 + "systems": "systems", 264 + "tinted-foot": "tinted-foot", 265 + "tinted-kitty": "tinted-kitty", 266 + "tinted-schemes": "tinted-schemes", 267 + "tinted-tmux": "tinted-tmux", 268 + "tinted-zed": "tinted-zed" 269 + }, 270 + "locked": { 271 + "lastModified": 1757957798, 272 + "narHash": "sha256-FT4O5imFJ+FUIGhYj/aFwEEgyvLhuyJ2my8f6mCLtTY=", 273 + "owner": "nix-community", 274 + "repo": "stylix", 275 + "rev": "e6fc25cd12e8f461e402cf34649cc73ad93c7bdd", 276 + "type": "github" 277 + }, 278 + "original": { 279 + "owner": "nix-community", 280 + "ref": "release-25.05", 281 + "repo": "stylix", 282 + "type": "github" 283 + } 284 + }, 285 + "systems": { 286 + "locked": { 287 + "lastModified": 1681028828, 288 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 289 + "owner": "nix-systems", 290 + "repo": "default", 291 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 292 + "type": "github" 293 + }, 294 + "original": { 295 + "owner": "nix-systems", 296 + "repo": "default", 297 + "type": "github" 298 + } 299 + }, 300 + "tinted-foot": { 301 + "flake": false, 302 + "locked": { 303 + "lastModified": 1726913040, 304 + "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", 305 + "owner": "tinted-theming", 306 + "repo": "tinted-foot", 307 + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", 308 + "type": "github" 309 + }, 310 + "original": { 311 + "owner": "tinted-theming", 312 + "repo": "tinted-foot", 313 + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", 314 + "type": "github" 315 + } 316 + }, 317 + "tinted-kitty": { 318 + "flake": false, 319 + "locked": { 320 + "lastModified": 1735730497, 321 + "narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=", 322 + "owner": "tinted-theming", 323 + "repo": "tinted-kitty", 324 + "rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa", 325 + "type": "github" 326 + }, 327 + "original": { 328 + "owner": "tinted-theming", 329 + "repo": "tinted-kitty", 330 + "type": "github" 331 + } 332 + }, 333 + "tinted-schemes": { 334 + "flake": false, 335 + "locked": { 336 + "lastModified": 1750770351, 337 + "narHash": "sha256-LI+BnRoFNRa2ffbe3dcuIRYAUcGklBx0+EcFxlHj0SY=", 338 + "owner": "tinted-theming", 339 + "repo": "schemes", 340 + "rev": "5a775c6ffd6e6125947b393872cde95867d85a2a", 341 + "type": "github" 342 + }, 343 + "original": { 344 + "owner": "tinted-theming", 345 + "repo": "schemes", 346 + "type": "github" 347 + } 348 + }, 349 + "tinted-tmux": { 350 + "flake": false, 351 + "locked": { 352 + "lastModified": 1751159871, 353 + "narHash": "sha256-UOHBN1fgHIEzvPmdNMHaDvdRMgLmEJh2hNmDrp3d3LE=", 354 + "owner": "tinted-theming", 355 + "repo": "tinted-tmux", 356 + "rev": "bded5e24407cec9d01bd47a317d15b9223a1546c", 357 + "type": "github" 358 + }, 359 + "original": { 360 + "owner": "tinted-theming", 361 + "repo": "tinted-tmux", 362 + "type": "github" 363 + } 364 + }, 365 + "tinted-zed": { 366 + "flake": false, 367 + "locked": { 368 + "lastModified": 1751158968, 369 + "narHash": "sha256-ksOyv7D3SRRtebpXxgpG4TK8gZSKFc4TIZpR+C98jX8=", 370 + "owner": "tinted-theming", 371 + "repo": "base16-zed", 372 + "rev": "86a470d94204f7652b906ab0d378e4231a5b3384", 373 + "type": "github" 374 + }, 375 + "original": { 376 + "owner": "tinted-theming", 377 + "repo": "base16-zed", 378 + "type": "github" 379 + } 380 + }, 381 + "treefmt-nix": { 382 + "inputs": { 383 + "nixpkgs": [ 384 + "stylix", 385 + "nur", 386 + "nixpkgs" 387 + ] 388 + }, 389 + "locked": { 390 + "lastModified": 1733222881, 391 + "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=", 392 + "owner": "numtide", 393 + "repo": "treefmt-nix", 394 + "rev": "49717b5af6f80172275d47a418c9719a31a78b53", 395 + "type": "github" 396 + }, 397 + "original": { 398 + "owner": "numtide", 399 + "repo": "treefmt-nix", 400 + "type": "github" 41 401 } 42 402 } 43 403 },
+17 -2
flake.nix
··· 4 4 inputs = { 5 5 nixpkgs.url = "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz"; 6 6 disko = { 7 - url = "github:nix-community/disko/latest"; 7 + url = "github:nix-community/disko"; 8 + inputs.nixpkgs.follows = "nixpkgs"; 9 + }; 10 + stylix = { 11 + url = "github:nix-community/stylix/release-25.05"; 12 + inputs.nixpkgs.follows = "nixpkgs"; 13 + }; 14 + catppuccin = { 15 + url = "github:catppuccin/nix/release-25.05"; 16 + inputs.nixpkgs.follows = "nixpkgs"; 17 + }; 18 + home-manager = { 19 + url = "github:nix-community/home-manager/release-25.05"; 8 20 inputs.nixpkgs.follows = "nixpkgs"; 9 21 }; 10 22 }; 11 23 12 24 outputs = 13 - { nixpkgs, ... }@inputs: 25 + { 26 + nixpkgs, 27 + ... 28 + }@inputs: 14 29 let 15 30 lib = nixpkgs.lib; 16 31 utils = import ./modules/utils.nix { inherit lib inputs; };
+1 -1
hosts/risu/default.nix
··· 16 16 networking.hostName = "risu"; 17 17 18 18 # my custom options / configs 19 - my.desktop.enableKDE = true; 19 + my.desktop.enableTDE = true; 20 20 }
+6
modules/config.nix
··· 11 11 default = "ydcjeff"; 12 12 description = "username"; 13 13 }; 14 + home = lib.mkOption { 15 + type = lib.types.str; 16 + default = "/home/${config.my.username}"; 17 + description = "home directory"; 18 + }; 14 19 shell = lib.mkOption { 15 20 type = lib.types.package; 16 21 default = pkgs.fish; ··· 19 24 }; 20 25 desktop = { 21 26 enableKDE = lib.mkEnableOption "enable KDE"; 27 + enableTDE = lib.mkEnableOption "enable Tiling DE"; 22 28 }; 23 29 pkgs = { 24 30 use = lib.mkOption {
+72
modules/desktop.nix
··· 2 2 config, 3 3 lib, 4 4 pkgs, 5 + catppuccin, 5 6 ... 6 7 }@inputs: 7 8 with inputs; ··· 29 30 discover 30 31 ]; 31 32 }; 33 + 34 + tdeConfig = { 35 + stylix = { 36 + enable = true; 37 + base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-frappe.yaml"; 38 + fonts = { 39 + monospace = { 40 + package = pkgs.nerd-fonts.jetbrains-mono; 41 + name = "JetBrainsMono Nerd Font"; 42 + }; 43 + serif = config.stylix.fonts.monospace; 44 + sansSerif = config.stylix.fonts.monospace; 45 + emoji = config.stylix.fonts.monospace; 46 + }; 47 + }; 48 + programs.niri.enable = true; 49 + programs.waybar.enable = true; 50 + # https://github.com/nixos/nixpkgs/issues/425797 51 + systemd.user.services.waybar.path = [ 52 + (builtins.getEnv "PATH") 53 + ]; 54 + systemd.user.services.waybar.environment = config.environment.variables; 55 + environment.systemPackages = with pkgs; [ 56 + bluetui 57 + swaybg 58 + swayidle 59 + hyprlock 60 + kanshi 61 + grim 62 + (flameshot.override { enableWlrSupport = true; }) 63 + fuzzel 64 + brightnessctl 65 + libnotify 66 + xwayland-satellite 67 + ]; 68 + systemd.packages = with pkgs; [ 69 + mako 70 + ]; 71 + systemd.user.services.mako.wantedBy = [ "graphical-session.target" ]; 72 + home-manager = { 73 + backupFileExtension = "bak"; 74 + useGlobalPkgs = true; 75 + useUserPackages = true; 76 + users.${my.username} = { 77 + home = { 78 + stateVersion = "25.05"; 79 + }; 80 + programs.waybar.enable = true; 81 + services.kanshi.enable = true; 82 + services.mako = { 83 + enable = true; 84 + settings = { 85 + padding = 12; 86 + border-radius = 4; 87 + default-timeout = 5000; 88 + "mode=do-not-disturb" = { 89 + invisible = 1; 90 + }; 91 + }; 92 + }; 93 + programs.bat.enable = true; 94 + programs.btop.enable = true; 95 + # programs.hyprlock.enable = true; 96 + programs.firefox.enable = true; 97 + programs.fuzzel.enable = true; 98 + programs.chromium.enable = true; 99 + programs.chromium.package = pkgs.brave; 100 + }; 101 + }; 102 + }; 32 103 in 33 104 lib.mkMerge [ 34 105 (lib.mkIf my.desktop.enableKDE kdeConfig) 106 + (lib.mkIf my.desktop.enableTDE tdeConfig) 35 107 ] 36 108 ); 37 109 }
+14 -11
modules/nixos.nix
··· 25 25 }; 26 26 programs.gnupg.agent.enable = true; 27 27 28 + environment.variables = { 29 + EDITOR = "vim"; 30 + TERMINAL = "ghostty"; 31 + BROWSER = "firefox"; 32 + }; 33 + 28 34 # fonts 29 35 fonts = { 30 36 enableDefaultPackages = true; ··· 38 44 noto-fonts-cjk-sans 39 45 noto-fonts-color-emoji 40 46 41 - # source-sans 42 - # source-serif 43 - # source-han-sans 44 - # source-han-serif 45 - 46 47 jetbrains-mono 48 + nerd-fonts.jetbrains-mono 47 49 ]; 48 50 49 51 fontconfig.defaultFonts = { 50 52 serif = [ 51 53 "Noto Serif" 52 - # "Source Han Serif SC" 53 - # "Source Han Serif TC" 54 54 "Noto Color Emoji" 55 55 ]; 56 56 sansSerif = [ 57 57 "Noto Sans" 58 - # "Source Han Sans SC" 59 - # "Source Han Sans TC" 60 58 "Noto Color Emoji" 61 59 ]; 62 60 monospace = [ 61 + "JetBrainsMono Nerd Font" 63 62 "JetBrainsMono" 64 63 "Noto Color Emoji" 65 64 ]; ··· 170 169 mutableUsers = true; 171 170 groups.${my.username} = { }; 172 171 users.${my.username} = { 173 - home = "/home/${my.username}"; 172 + home = "${my.home}"; 174 173 name = "${my.username}"; 175 174 description = "${my.username}"; 176 175 isNormalUser = true; ··· 180 179 "${my.username}" 181 180 "networkmanager" 182 181 "wheel" 182 + "input" 183 183 ]; 184 184 }; 185 185 }; ··· 225 225 services.envfs.enable = true; 226 226 227 227 # Bluetooth 228 - hardware.bluetooth.enable = true; 228 + hardware.bluetooth = { 229 + enable = true; 230 + powerOnBoot = false; 231 + }; 229 232 230 233 networking = { 231 234 networkmanager.enable = true;
+2 -2
modules/pkgs.nix
··· 40 40 # vcs 41 41 git 42 42 delta 43 - github-cli 43 + # github-cli 44 44 glab 45 45 lazygit 46 46 ··· 53 53 gnutar 54 54 55 55 # encryption and security 56 - age 56 + # age 57 57 gnupg 58 58 59 59 # vpn
+9
modules/utils.nix
··· 13 13 specialArgs = { inherit inputs; }; 14 14 modules = [ 15 15 inputs.disko.nixosModules.disko 16 + inputs.catppuccin.nixosModules.catppuccin 17 + inputs.stylix.nixosModules.stylix 18 + inputs.home-manager.nixosModules.home-manager 19 + { 20 + home-manager.backupFileExtension = "bak"; 21 + home-manager.users.ydcjeff = { 22 + imports = [ inputs.catppuccin.homeModules.catppuccin ]; 23 + }; 24 + } 16 25 config 17 26 ]; 18 27 };
wallpapers/wallhaven-m3j7q9.png

This is a binary file and will not be displayed.

wallpapers/wallhaven-qzgkzd.png

This is a binary file and will not be displayed.

wallpapers/wallhaven-r2gvwj.jpg

This is a binary file and will not be displayed.

wallpapers/wallhaven-x8ed23.jpg

This is a binary file and will not be displayed.

wallpapers/wallhaven-xl2mov.jpg

This is a binary file and will not be displayed.