My Nix Infra
nix nixos

Compare changes

Choose any two refs to compare.

+1577 -801
-2
.editorconfig
··· 2 2 3 3 [*] 4 4 indent_style = tab 5 - tab_width = 2 6 - indent_size = 2 7 5 end_of_line = lf 8 6 insert_final_newline = true 9 7 trim_trailing_whitespace = true
+7 -7
Makefile
··· 3 3 4 4 nixos-post: 5 5 $(MAKE) sw 6 - $(MAKE) cp 7 6 bash scripts/init-work.sh 8 7 reboot 9 8 ··· 11 10 bash scripts/cp-config.sh 12 11 13 12 sw: 13 + $(MAKE) cp 14 14 sudo nixos-rebuild switch --flake . --impure 15 15 16 + boot: 17 + $(MAKE) cp 18 + sudo nixos-rebuild boot --flake . --impure 19 + 16 20 debug: 17 21 sudo nixos-rebuild switch --flake . --show-trace --verbose 18 22 19 23 gc: 20 - nix store gc --debug 21 - nix-collect-garbage --delete-old 24 + sudo nix store gc --debug 25 + sudo nix-collect-garbage --delete-old 22 26 23 27 up: 24 28 nix flake update 25 29 26 30 check: 27 31 nix flake check 28 - 29 - arch: 30 - bash scripts/arch-install.sh 31 -
+2 -15
README.md
··· 2 2 3 3 Includes: 4 4 5 - - NixOS config (KDE) 6 - - Arch Linux setup (KDE) 7 - - dotfiles of CLI tools 5 + - NixOS config 6 + - dotfiles 8 7 9 8 Requires: 10 9 ··· 17 16 1. `make nixos hostname=<hostname>` 18 17 19 18 2. `make nixos-post` 20 - 21 - Arch Linux setup: 22 - 23 - 1. Install Arch Linux via archinstall 24 - 25 - 2. `make arch` 26 - 27 - Arch Linux Post Installation: 28 - 29 - - [change default boot order to linux-lts](https://wiki.archlinux.org/title/Systemd-boot#Remember_last_entry) 30 - - add fcitx5 IME 31 - - change IM toggle shortcut to Ctrl+Shift+Space
+12
bin/ez-cmd-dnd
··· 1 + #!/usr/bin/env bash 2 + 3 + if [[ $# -eq 0 ]]; then 4 + makoctl mode -t dnd >/dev/null 5 + pkill -RTMIN+8 waybar 6 + elif [[ "$1" == "waybar" ]]; then 7 + if makoctl mode | grep dnd >/dev/null; then 8 + echo '{"alt": "dnd"}' 9 + else 10 + echo '{"alt": "default"}' 11 + fi 12 + fi
+32
bin/ez-cmd-hwctl
··· 1 + #!/usr/bin/env bash 2 + 3 + usage() { 4 + echo "Usage: $0 <volume|brightness> <up|down|toggle>" 5 + } 6 + 7 + if [[ $# -ne 2 ]]; then 8 + usage 9 + exit 1 10 + fi 11 + 12 + if [[ "$1" == "volume" ]]; then 13 + case "$2" in 14 + "up") wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05+ -l 1.0 ;; 15 + "down") wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.05- ;; 16 + "toggle") wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle ;; 17 + esac 18 + vol="$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | cut -d' ' -f2)" 19 + status="$(wpctl get-volume @DEFAULT_AUDIO_SINK@ | cut -d' ' -f3)" 20 + vol="${vol/./}" # remove dot 21 + vol="${vol#0}" # remove leading 0 22 + notify-send -a 'wp-vol' "Volume: $vol% $status" -h int:value:"$vol" 23 + elif [[ "$1" == "brightness" ]]; then 24 + case "$2" in 25 + "up") brightnessctl set 5%+ ;; 26 + "down") brightnessctl set 5%- ;; 27 + esac 28 + current="$(brightnessctl get)" 29 + max="$(brightnessctl max)" 30 + ratio="$(awk -v c="$current" -v m="$max" 'BEGIN { print(c/m*100) }')" 31 + notify-send -a 'brightnessctl' "Brightness: $ratio%" -h int:value:"$ratio" 32 + fi
+31
bin/ez-cmd-palette
··· 1 + #!/usr/bin/env bash 2 + 3 + menu() { 4 + local _options=("$@") 5 + local noptions=${#_options[@]} 6 + printf -v options "%s\n" "${_options[@]}" 7 + echo -e "${options%[[:space:]]}" | fuzzel --dmenu --line-height=30 -l "$noptions" 8 + } 9 + 10 + options=( 11 + $'\uf023 Lock' 12 + $'\uf186 Sleep' 13 + $'\uf08b Logout' 14 + $'\uf021 Reboot' 15 + $'\uf011 Shutdown' 16 + ) 17 + 18 + if makoctl mode | grep dnd; then 19 + options+=($'\uf0f3 Toggle DND off') 20 + else 21 + options+=($'\U000F0376 Toggle DND on') 22 + fi 23 + 24 + case $(menu "${options[@]}" | tr '[:upper:]' '[:lower:]') in 25 + *lock*) loginctl lock-session ;; 26 + *sleep*) systemctl sleep ;; 27 + *logout*) loginctl terminate-session "$XDG_SESSION_ID" ;; 28 + *reboot*) systemctl reboot ;; 29 + *shutdown*) systemctl poweroff ;; 30 + *dnd*) ez-cmd-dnd ;; 31 + esac
-1
config/environment.d/ssh_askpass.conf
··· 1 - SSH_ASKPASS=/usr/bin/ksshaskpass
+1 -1
config/fish/abbr.fish
··· 26 26 # git shortcuts 27 27 abbr -a gs "git status" 28 28 abbr -a ga "git add" 29 - abbr -a gc "git commit -m" 29 + abbr -a gc "git commit" 30 30 abbr -a gb "git branch" 31 31 abbr -a gd "git diff" 32 32 abbr -a gcl "git clone"
+6 -14
config/fish/config.fish
··· 1 - set -gx EDITOR nvim 2 - set -gx BROWSER firefox 3 1 set -gx DOTFILES_PATH $HOME/.dotfiles 4 2 set -gx XDG_CONFIG_HOME $HOME/.config 5 3 set -gx XDG_CACHE_HOME $HOME/.cache ··· 16 14 17 15 source (dirname (status --current-filename))/abbr.fish 18 16 19 - # mac or linux 20 - switch (uname) 21 - case Linux 22 - echo "> Linux profile $FISH_CONFIG loaded." 23 - case Darwin 24 - echo "> macOS profile $FISH_CONFIG loaded." 25 - end 17 + echo "> Loaded $FISH_CONFIG" 26 18 27 19 if type -q starship 28 - starship init fish | source 20 + starship init fish | source 29 21 end 30 22 31 23 if type -q pnpm 32 - pnpm completion fish | source 24 + pnpm completion fish | source 33 25 end 34 26 35 27 if type -q uv 36 - uv generate-shell-completion fish | source 28 + uv generate-shell-completion fish | source 37 29 end 38 30 39 31 if type -q uvx 40 - uvx --generate-shell-completion fish | source 32 + uvx --generate-shell-completion fish | source 41 33 end 42 34 43 35 if type -q zoxide 44 - zoxide init fish | source 36 + zoxide init fish | source 45 37 end
-4
config/git/cc
··· 4 4 [user] 5 5 name = De-Cheng Yang 6 6 email = dcyang@cs.nctu.edu.tw 7 - signingkey = ~/.ssh/cc.pub 8 - 9 - [gpg] 10 - format = ssh
-7
config/git/codeberg
··· 1 - [user] 2 - name = ydcjeff 3 - email = ydcjeff@noreply.codeberg.org 4 - signingkey = ~/.ssh/codeberg.pub 5 - 6 - [gpg] 7 - format = ssh
+22 -25
config/git/config
··· 1 + [user] 2 + name = jeffydc.xyz 3 + email = vcs@jeffydc.xyz 4 + signingkey = ~/.ssh/vcs-sign-26.pub 5 + 1 6 [commit] 2 7 gpgSign = true 8 + verbose = true 3 9 4 10 [color] 5 11 ui = true ··· 18 24 prune = true 19 25 pruneTags = true 20 26 21 - [includeIf "hasconfig:remote.*.url:https://gitlab.it.cs.nycu.edu.tw/**"] 22 - path = ~/.config/git/cc 23 - 24 - [includeIf "hasconfig:remote.*.url:ssh://git@gitlab.cc.cs.nctu.edu.tw:10022/**"] 25 - path = ~/.config/git/cc 26 - 27 - [includeIf "hasconfig:remote.*.url:https://github.com/**"] 28 - path = ~/.config/git/gh 29 - 30 - [includeIf "hasconfig:remote.*.url:ssh://git@github.com/**"] 31 - path = ~/.config/git/gh 27 + [format] 28 + signOff = true 32 29 33 - [includeIf "hasconfig:remote.*.url:git@github.com:*/**"] 34 - path = ~/.config/git/gh 35 - 36 - [includeIf "hasconfig:remote.*.url:https://gitlab.com/**"] 37 - path = ~/.config/git/gl 38 - 39 - [includeIf "hasconfig:remote.*.url:ssh://git@gitlab.com/**"] 40 - path = ~/.config/git/gl 41 - 42 - [includeIf "hasconfig:remote.*.url:https://codeberg.org/**"] 43 - path = ~/.config/git/codeberg 44 - 45 - [includeIf "hasconfig:remote.*.url:ssh://git@codeberg.org/**"] 46 - path = ~/.config/git/codeberg 30 + [gpg] 31 + format = ssh 47 32 48 33 [init] 49 34 defaultBranch = main ··· 60 45 [push] 61 46 default = simple 62 47 autoSetupRemote = true 48 + 49 + [rerere] 50 + enabled = true 51 + 52 + [tag] 53 + gpgSign = true 54 + 55 + [includeIf "hasconfig:remote.*.url:https://gitlab.it.cs.nycu.edu.tw/**"] 56 + path = ~/.config/git/cc 57 + 58 + [includeIf "hasconfig:remote.*.url:ssh://git@gitlab.cc.cs.nctu.edu.tw:10022/**"] 59 + path = ~/.config/git/cc
-7
config/git/gh
··· 1 - [user] 2 - name = ydcjeff 3 - email = 32727188+ydcjeff@users.noreply.github.com 4 - signingkey = ~/.ssh/gh-sign.pub 5 - 6 - [gpg] 7 - format = ssh
-7
config/git/gl
··· 1 - [user] 2 - name = ydcjeff 3 - email = 4737464-ydcjeff@users.noreply.gitlab.com 4 - signingkey = ~/.ssh/gl.pub 5 - 6 - [gpg] 7 - format = ssh
+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
+50
config/hypr/hyprlock.conf
··· 1 + source = $HOME/.config/hypr/frappe.conf 2 + 3 + $accent = $blue 4 + $accentAlpha = $blueAlpha 5 + $font = Noto Serif CJK JP 6 + 7 + general { 8 + hide_cursor = true 9 + } 10 + 11 + background { 12 + monitor = 13 + path = $HOME/.dotfiles/wallpapers/wallhaven-m3j7q9.png 14 + blur_passes = 3 15 + color = $base 16 + } 17 + 18 + label { 19 + monitor = 20 + text = cmd[update:60000] date +"%F %A %R" 21 + color = $text 22 + font_size = 50 23 + font_family = $font 24 + position = 0, 200 25 + halign = center 26 + valign = center 27 + } 28 + 29 + input-field { 30 + monitor = 31 + size = 300, 60 32 + outline_thickness = 4 33 + dots_size = 0.2 34 + dots_spacing = 0.2 35 + dots_center = true 36 + outer_color = $accent 37 + inner_color = $surface0 38 + font_color = $text 39 + fade_on_empty = false 40 + placeholder_text = <span foreground="##$textAlpha"><i>๓ฐŒพ Logged in as </i><span foreground="##$accentAlpha">$USER</span></span> 41 + hide_input = false 42 + check_color = $accent 43 + fail_color = $red 44 + fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> 45 + capslock_color = $yellow 46 + position = 0, 0 47 + halign = center 48 + valign = center 49 + } 50 +
+22
config/jj/config.toml
··· 1 + #:schema https://jj-vcs.github.io/jj/latest/config-schema.json 2 + 3 + [user] 4 + name = "jeffydc.xyz" 5 + email = "vcs@jeffydc.xyz" 6 + 7 + [signing] 8 + behavior = "own" 9 + backend = "ssh" 10 + key = "~/.ssh/vcs-sign-26.pub" 11 + 12 + [git] 13 + fetch = ["origin", "tangled", "codeberg", "github", "upstream"] 14 + 15 + [ui] 16 + default-command = "log" 17 + 18 + [[--scope]] 19 + --when.repositories = ["~/cc"] 20 + [--scope.user] 21 + name = "De-Cheng Yang" 22 + email = "dcyang@cs.nctu.edu.tw"
+25
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 + 22 + profile all { 23 + output "eDP-1" enable 24 + output $MSI_27 enable 25 + }
+273
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" \ 147 + "timeout" "290" "notify-send -u critical 'Locking in 10s...' -t 10000" \ 148 + "timeout" "300" "pidof hyprlock || loginctl lock-session" \ 149 + "timeout" "330" "niri msg action power-off-monitors" "resume" "niri msg action power-on-monitors" \ 150 + "timeout" "1800" "systemctl sleep" "resume" "niri msg action power-on-monitors" \ 151 + "before-sleep" "(pidof hyprlock || loginctl lock-session); niri msg action power-off-monitors" \ 152 + "after-resume" "niri msg action power-on-monitors" \ 153 + "lock" "pidof hyprlock || hyprlock &" 154 + 155 + binds { 156 + // Mod-Shift-/, which is usually the same as Mod-?, shows a list of important hotkeys. 157 + Mod+Shift+Slash { show-hotkey-overlay; } 158 + 159 + Ctrl+Alt+L repeat=false hotkey-overlay-title="Lock the Screen" { spawn "loginctl" "lock-session"; } 160 + Mod+Return repeat=false hotkey-overlay-title="Open a Terminal" { spawn "ghostty"; } 161 + Mod+Space repeat=false hotkey-overlay-title="Run an Application Launcher" { spawn "fuzzel"; } 162 + Mod+B repeat=false hotkey-overlay-title="Open a Browser" { spawn "firefox"; } 163 + Mod+P repeat=false hotkey-overlay-title="Open Command Palette" { spawn "ez-cmd-palette"; } 164 + 165 + XF86AudioRaiseVolume allow-when-locked=true { spawn "ez-cmd-hwctl" "volume" "up"; } 166 + XF86AudioLowerVolume allow-when-locked=true { spawn "ez-cmd-hwctl" "volume" "down"; } 167 + XF86AudioMute allow-when-locked=true { spawn "ez-cmd-hwctl" "volume" "toggle"; } 168 + XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } 169 + XF86MonBrightnessUp allow-when-locked=true { spawn "ez-cmd-hwctl" "brightness" "up"; } 170 + XF86MonBrightnessDown allow-when-locked=true { spawn "ez-cmd-hwctl" "brightness" "down"; } 171 + 172 + Mod+O repeat=false { toggle-overview; } 173 + Mod+Q repeat=false { close-window; } 174 + 175 + Mod+H { focus-column-left; } 176 + Mod+J { focus-window-down; } 177 + Mod+K { focus-window-up; } 178 + Mod+L { focus-column-right; } 179 + 180 + // Control windows/columns movement 181 + Mod+Ctrl+H { move-column-left; } 182 + Mod+Ctrl+J { move-window-down; } 183 + Mod+Ctrl+K { move-window-up; } 184 + Mod+Ctrl+L { move-column-right; } 185 + 186 + // Shift columns across monitors 187 + Mod+Shift+H { move-column-to-monitor-left; } 188 + Mod+Shift+J { move-column-to-monitor-down; } 189 + Mod+Shift+K { move-column-to-monitor-up; } 190 + Mod+Shift+L { move-column-to-monitor-right; } 191 + 192 + // Rarely use 193 + Mod+Shift+Ctrl+H { focus-monitor-left; } 194 + Mod+Shift+Ctrl+J { focus-monitor-down; } 195 + Mod+Shift+Ctrl+K { focus-monitor-up; } 196 + Mod+Shift+Ctrl+L { focus-monitor-right; } 197 + 198 + Mod+U { focus-workspace-down; } 199 + Mod+I { focus-workspace-up; } 200 + Mod+Shift+U { move-column-to-workspace-down; } 201 + Mod+Shift+I { move-column-to-workspace-up; } 202 + 203 + // You can refer to workspaces by index. However, keep in mind that 204 + // niri is a dynamic workspace system, so these commands are kind of 205 + // "best effort". Trying to refer to a workspace index bigger than 206 + // the current workspace count will instead refer to the bottommost 207 + // (empty) workspace. 208 + // 209 + // For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on 210 + // will all refer to the 3rd workspace. 211 + Mod+1 { focus-workspace 1; } 212 + Mod+2 { focus-workspace 2; } 213 + Mod+3 { focus-workspace 3; } 214 + Mod+4 { focus-workspace 4; } 215 + Mod+5 { focus-workspace 5; } 216 + Mod+6 { focus-workspace 6; } 217 + Mod+7 { focus-workspace 7; } 218 + Mod+8 { focus-workspace 8; } 219 + Mod+9 { focus-workspace 9; } 220 + Mod+Shift+1 { move-column-to-workspace 1; } 221 + Mod+Shift+2 { move-column-to-workspace 2; } 222 + Mod+Shift+3 { move-column-to-workspace 3; } 223 + Mod+Shift+4 { move-column-to-workspace 4; } 224 + Mod+Shift+5 { move-column-to-workspace 5; } 225 + Mod+Shift+6 { move-column-to-workspace 6; } 226 + Mod+Shift+7 { move-column-to-workspace 7; } 227 + Mod+Shift+8 { move-column-to-workspace 8; } 228 + Mod+Shift+9 { move-column-to-workspace 9; } 229 + 230 + // Switches focus between the current and the previous workspace. 231 + Mod+Tab { focus-workspace-previous; } 232 + 233 + // The following binds move the focused window in and out of a column. 234 + // If the window is alone, they will consume it into the nearby column to the side. 235 + // If the window is already in a column, they will expel it out. 236 + Mod+BracketLeft { consume-or-expel-window-left; } 237 + Mod+BracketRight { consume-or-expel-window-right; } 238 + 239 + Mod+R { switch-preset-column-width; } 240 + Mod+Shift+R { switch-preset-window-height; } 241 + Mod+F { maximize-column; } 242 + Mod+C { center-column; } 243 + 244 + Mod+Minus { set-column-width "-10%"; } 245 + Mod+Equal { set-column-width "+10%"; } 246 + Mod+Shift+Minus { set-window-height "-10%"; } 247 + Mod+Shift+Equal { set-window-height "+10%"; } 248 + 249 + // Move the focused window between the floating and the tiling layout. 250 + Mod+V { toggle-window-floating; } 251 + 252 + Print { screenshot; } 253 + Ctrl+Print { screenshot-screen; } 254 + Alt+Print { screenshot-window; } 255 + 256 + // Applications such as remote-desktop clients and software KVM switches may 257 + // request that niri stops processing the keyboard shortcuts defined here 258 + // so they may, for example, forward the key presses as-is to a remote machine. 259 + // It's a good idea to bind an escape hatch to toggle the inhibitor, 260 + // so a buggy application can't hold your session hostage. 261 + // 262 + // The allow-inhibiting=false property can be applied to other binds as well, 263 + // which ensures niri always processes them, even when an inhibitor is active. 264 + Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } 265 + 266 + // The quit action will show a confirmation dialog to avoid accidental exits. 267 + Mod+Shift+E { quit; } 268 + Ctrl+Alt+Delete { quit; } 269 + 270 + // Powers off the monitors. To turn them back on, do any input like 271 + // moving the mouse or pressing any other key. 272 + Mod+Shift+P { power-off-monitors; } 273 + }
+87
config/waybar/config.jsonc
··· 1 + { 2 + "layer": "top", 3 + "position": "top", 4 + "spacing": 16, 5 + "modules-left": ["niri/workspaces"], 6 + "modules-center": ["clock"], 7 + "modules-right": [ 8 + "tray", 9 + "custom/noti", 10 + "backlight", 11 + "battery", 12 + "bluetooth", 13 + "network", 14 + "wireplumber", 15 + ], 16 + "reload_style_on_change": true, 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": "$TERMINAL -e bluetui", 47 + }, 48 + "network": { 49 + // nf-md-ethernet 50 + "format-ethernet": "\udb80\ude00 {ipaddr}/{cidr}", 51 + // nf-md-wifi-strength-4 52 + "format-wifi": "\udb82\udd28 {signalStrength}%", 53 + "format-linked": "{ifname} (No IP)", 54 + // nf-md-wifi_strength_off 55 + "format-disconnected": "\udb82\udd2d", 56 + // nf-md-airplane 57 + "format-disabled": "\udb80\udc1d", 58 + "format-alt": "{ifname}: {ipaddr}/{cidr} via {gwaddr}", 59 + "tooltip-format-wifi": "{essid} ({frequency} GHz)\nDown: {bandwidthDownBytes} Up: {bandwidthUpBytes}", 60 + "tooltip-format-ethernet": "Down: {bandwidthDownBytes} Up: {bandwidthUpBytes}", 61 + "tooltip-format-disconnected": "Disconnected", 62 + "on-click": "$TERMINAL -e nmtui", 63 + }, 64 + "wireplumber": { 65 + // nf-md-volume_high 66 + "format": "\udb81\udd7e {volume}%", 67 + // nf-md-volume_mute 68 + "format-muted": "\udb81\udf5f", 69 + "scroll-step": 5, 70 + "on-click": "pavucontrol", 71 + }, 72 + "tray": { 73 + "icon-size": 16, 74 + "spacing": 16, 75 + }, 76 + "custom/noti": { 77 + "format": "{icon}", 78 + "format-icons": { 79 + "dnd": "\udb80\udc9b", 80 + "default": "\udb80\udc9a", 81 + }, 82 + "on-click": "ez-cmd-dnd", 83 + "exec": "ez-cmd-dnd waybar", 84 + "return-type": "json", 85 + "signal": 8, 86 + }, 87 + }
-67
containers/Containerfile-alpine-php
··· 1 - ARG ALPINE_VERSION 2 - FROM quay.io/toolbx-images/alpine-toolbox:${ALPINE_VERSION} 3 - 4 - # ARG gc after FROM 5 - ARG PHP_VERSION 6 - 7 - RUN apk add \ 8 - fish \ 9 - starship \ 10 - bat \ 11 - fzf \ 12 - curl \ 13 - ca-certificates \ 14 - neovim \ 15 - # php & its family 16 - composer \ 17 - icu-data-full \ 18 - imagemagick-jpeg \ 19 - imagemagick-heic \ 20 - php${PHP_VERSION} \ 21 - php${PHP_VERSION}-phar \ 22 - php${PHP_VERSION}-curl \ 23 - php${PHP_VERSION}-iconv \ 24 - php${PHP_VERSION}-mbstring \ 25 - php${PHP_VERSION}-openssl \ 26 - php${PHP_VERSION}-zip \ 27 - php${PHP_VERSION} \ 28 - php${PHP_VERSION}-dom \ 29 - php${PHP_VERSION}-fileinfo \ 30 - php${PHP_VERSION}-json \ 31 - php${PHP_VERSION}-xml \ 32 - php${PHP_VERSION}-mbstring \ 33 - php${PHP_VERSION}-openssl \ 34 - php${PHP_VERSION}-tokenizer \ 35 - php${PHP_VERSION}-xmlwriter \ 36 - php${PHP_VERSION}-curl \ 37 - php${PHP_VERSION}-simplexml \ 38 - php${PHP_VERSION}-pecl-redis \ 39 - php${PHP_VERSION}-pdo_mysql \ 40 - php${PHP_VERSION}-session \ 41 - php${PHP_VERSION}-iconv \ 42 - php${PHP_VERSION}-sodium \ 43 - php${PHP_VERSION}-pecl-imagick \ 44 - php${PHP_VERSION}-gd \ 45 - php${PHP_VERSION}-ctype \ 46 - php${PHP_VERSION}-pdo \ 47 - php${PHP_VERSION}-xmlreader \ 48 - php${PHP_VERSION}-zlib \ 49 - php${PHP_VERSION}-intl \ 50 - php${PHP_VERSION}-ldap \ 51 - php${PHP_VERSION}-pecl-grpc \ 52 - php${PHP_VERSION}-pecl-xdebug \ 53 - php${PHP_VERSION}-pecl-opentelemetry 54 - 55 - RUN sed -i 's/;zend_extension=xdebug.so/zend_extension=xdebug.so/;s/;xdebug.mode=off/xdebug.mode=coverage/' /etc/php${PHP_VERSION}/conf.d/50_xdebug.ini 56 - ADD containers/csrootca.crt /usr/local/share/ca-certificates/ 57 - RUN update-ca-certificates 58 - 59 - ARG USER 60 - ARG UID 61 - ARG GID 62 - ARG HOME_DIR 63 - ENV HOME=/home/${HOME_DIR} 64 - WORKDIR /home/${HOME_DIR} 65 - RUN groupadd -g ${GID} ${USER} && useradd -G wheel -u ${UID} -g ${GID} -M ${USER} 66 - 67 - RUN composer global require squizlabs/php_codesniffer laravel/pint
-38
containers/csrootca.crt
··· 1 - -----BEGIN CERTIFICATE----- 2 - MIIGfTCCBGWgAwIBAgIJANtNHd4pchD1MA0GCSqGSIb3DQEBDQUAMIHUMQswCQYD 3 - VQQGEwJUVzEPMA0GA1UECAwGVGFpd2FuMRYwFAYDVQQHDA1Ic2luLUNodSBDaXR5 4 - MScwJQYDVQQKDB5OYXRpb25hbCBDaGlhby1UdW5nIFVuaXZlcnNpdHkxJzAlBgNV 5 - BAsMHkRlcGFydG1lbnQgb2YgQ29tcHV0ZXIgU2NpZW5jZTEmMCQGA1UEAwwdTkNU 6 - VSBDUyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxIjAgBgkqhkiG9w0BCQEWE2hlbHBA 7 - Y3MubmN0dS5lZHUudHcwHhcNMTcxMjA2MTc0MzE2WhcNMjcxMjA0MTc0MzE2WjCB 8 - 1DELMAkGA1UEBhMCVFcxDzANBgNVBAgMBlRhaXdhbjEWMBQGA1UEBwwNSHNpbi1D 9 - aHUgQ2l0eTEnMCUGA1UECgweTmF0aW9uYWwgQ2hpYW8tVHVuZyBVbml2ZXJzaXR5 10 - MScwJQYDVQQLDB5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxJjAkBgNV 11 - BAMMHU5DVFUgQ1MgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSIwIAYJKoZIhvcNAQkB 12 - FhNoZWxwQGNzLm5jdHUuZWR1LnR3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC 13 - CgKCAgEAvOZF59xipyzkRVbWTqMCf94ucr4ze6mTtctDnqpFFRfFC0ksXKVFZbhf 14 - /N9dSTw+i8WJQY/RZc5jHNx7E+fnNdURBQniyuiXBTTicoVYp1Uef56CAYbEZDfp 15 - VQmmovcGv8gEuZ4L/CFMwsFFFab2epS7A7u7wk0dnhFBpvC0RigqQIwtlBc/M0WA 16 - a8C9cwBzxpblpa0TY3pMbI3KPxLnflTrlPqCrlcWCuChen3Z1Lzu5C9EgavPJsYU 17 - bmGwOayP4cie59dVYzCrmi6/XHMsfWuJ4vAHVOJqV1JeKbS65MfOVE+UVNKAGaLO 18 - a6RaVcy0M5IAhTGSi+kZeBgVC0c5yoNZ7NHyG1EOOBg6CoNsWW4B8F2780s6ofRG 19 - Ukl2+HGf6nvqgUsU3cyyZ09OFk4gDTPAj24VSG5uAdCUst1aaTxwl2yr1jNHSy3R 20 - pxjGkx7DGWBveRwFl9sTxAyD+k/7eJ+ygJk4D5JxaMsOM334aBwsYoqhzwePL7SC 21 - LXcj92qj4DFasCmQSFUpKkT7YLJvTi16RwGM2qGklSTfxm5jWCI6XXNTkgyPZXZd 22 - 76QnyCkT3w224M/g5MziPFyMrHfYnJl2tX2AKq6qS32uk6UQw1FH4lpxPuLc5F// 23 - yXG4/5j3+apMm3jhFcIQ3vuqZV3kz88HeeuBPbRwajkrhPxS/BcCAwEAAaNQME4w 24 - HQYDVR0OBBYEFNPLn9RQJ0u6prsffVi3a0QGxSgjMB8GA1UdIwQYMBaAFNPLn9RQ 25 - J0u6prsffVi3a0QGxSgjMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIB 26 - AGd5PjBAeWqpAM7kaGrKHY/d+kS1tKPH/c9HJcIsrZGNImKyuJ0KXLhmwIBMrARQ 27 - 9Ly2km8FZEo1LKPd6EYzKzru/xUdY/vz2UO/4aouOyNn6rI9umXaahPKElSN6gka 28 - NIPY7DpGcaCmtMzE13e7wbh9IkqwWPrzRNwaZKybWyWp6/AJCSc6PoqqW0+3plBA 29 - XuCDlM6XJF8duqWcdJKBcdCwdYdrHtb0xcwEG4XF+G04R6uEA0AfCIylvwjOAKN/ 30 - 5AeiYJ+hz837XE3i1CZmsNR5uo1erijVuyMN8DD/9pr2QwYP/4b7nCSDMckTrHez 31 - um7gMtYIoy4OnLvSddjUboRpor/iaE1H/3LK1gvnMbII45EhUdPKIN2/nlfY0g5T 32 - jx9OW2UXl33WlZT7oA1II87CV2H6k72TnH6fDjGFepWPsnJQ+Fk7+zHSbJEIFJzr 33 - 49rK+dahSjt3C9GB7aJu/NOhGA1W8iaWEyYPO/FOfmvJZwMlZgbeN0utWyJ1zsi5 34 - DWaofN3JwjaAD4nJfIbTF1iINJ3NhjIRETTQ31G/AWhV8H8ZCK+4iE+rQ3OuWzYU 35 - vd5u4z/jaVcUnJKukM0e9VAgxEC7A8rRFgko5XjKXrCZgkzbhQWA0uzYvx0ghIMe 36 - x8AH/WxuNFhZq3OmgppgVaGeuOvN7xSEbLACAOekJWp1 37 - -----END CERTIFICATE----- 38 -
+328 -10
flake.lock
··· 1 1 { 2 2 "nodes": { 3 + "base16": { 4 + "inputs": { 5 + "fromYaml": "fromYaml" 6 + }, 7 + "locked": { 8 + "lastModified": 1755819240, 9 + "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=", 10 + "owner": "SenchoPens", 11 + "repo": "base16.nix", 12 + "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6", 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": 1765809053, 25 + "narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=", 26 + "owner": "tomyun", 27 + "repo": "base16-fish", 28 + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", 29 + "type": "github" 30 + }, 31 + "original": { 32 + "owner": "tomyun", 33 + "repo": "base16-fish", 34 + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", 35 + "type": "github" 36 + } 37 + }, 38 + "base16-helix": { 39 + "flake": false, 40 + "locked": { 41 + "lastModified": 1760703920, 42 + "narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", 43 + "owner": "tinted-theming", 44 + "repo": "base16-helix", 45 + "rev": "d646af9b7d14bff08824538164af99d0c521b185", 46 + "type": "github" 47 + }, 48 + "original": { 49 + "owner": "tinted-theming", 50 + "repo": "base16-helix", 51 + "type": "github" 52 + } 53 + }, 54 + "base16-vim": { 55 + "flake": false, 56 + "locked": { 57 + "lastModified": 1732806396, 58 + "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", 59 + "owner": "tinted-theming", 60 + "repo": "base16-vim", 61 + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", 62 + "type": "github" 63 + }, 64 + "original": { 65 + "owner": "tinted-theming", 66 + "repo": "base16-vim", 67 + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", 68 + "type": "github" 69 + } 70 + }, 3 71 "disko": { 4 72 "inputs": { 5 73 "nixpkgs": [ ··· 7 75 ] 8 76 }, 9 77 "locked": { 10 - "lastModified": 1746728054, 11 - "narHash": "sha256-eDoSOhxGEm2PykZFa/x9QG5eTH0MJdiJ9aR00VAofXE=", 78 + "lastModified": 1768923567, 79 + "narHash": "sha256-GVJ0jKsyXLuBzRMXCDY6D5J8wVdwP1DuQmmvYL/Vw/Q=", 12 80 "owner": "nix-community", 13 81 "repo": "disko", 14 - "rev": "ff442f5d1425feb86344c028298548024f21256d", 82 + "rev": "00395d188e3594a1507f214a2f15d4ce5c07cb28", 15 83 "type": "github" 16 84 }, 17 85 "original": { 18 86 "owner": "nix-community", 19 - "ref": "latest", 20 87 "repo": "disko", 21 88 "type": "github" 22 89 } 23 90 }, 91 + "firefox-gnome-theme": { 92 + "flake": false, 93 + "locked": { 94 + "lastModified": 1764873433, 95 + "narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=", 96 + "owner": "rafaelmardojai", 97 + "repo": "firefox-gnome-theme", 98 + "rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92", 99 + "type": "github" 100 + }, 101 + "original": { 102 + "owner": "rafaelmardojai", 103 + "repo": "firefox-gnome-theme", 104 + "type": "github" 105 + } 106 + }, 107 + "flake-parts": { 108 + "inputs": { 109 + "nixpkgs-lib": [ 110 + "stylix", 111 + "nixpkgs" 112 + ] 113 + }, 114 + "locked": { 115 + "lastModified": 1767609335, 116 + "narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=", 117 + "owner": "hercules-ci", 118 + "repo": "flake-parts", 119 + "rev": "250481aafeb741edfe23d29195671c19b36b6dca", 120 + "type": "github" 121 + }, 122 + "original": { 123 + "owner": "hercules-ci", 124 + "repo": "flake-parts", 125 + "type": "github" 126 + } 127 + }, 128 + "fromYaml": { 129 + "flake": false, 130 + "locked": { 131 + "lastModified": 1731966426, 132 + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", 133 + "owner": "SenchoPens", 134 + "repo": "fromYaml", 135 + "rev": "106af9e2f715e2d828df706c386a685698f3223b", 136 + "type": "github" 137 + }, 138 + "original": { 139 + "owner": "SenchoPens", 140 + "repo": "fromYaml", 141 + "type": "github" 142 + } 143 + }, 144 + "gnome-shell": { 145 + "flake": false, 146 + "locked": { 147 + "host": "gitlab.gnome.org", 148 + "lastModified": 1767737596, 149 + "narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=", 150 + "owner": "GNOME", 151 + "repo": "gnome-shell", 152 + "rev": "ef02db02bf0ff342734d525b5767814770d85b49", 153 + "type": "gitlab" 154 + }, 155 + "original": { 156 + "host": "gitlab.gnome.org", 157 + "owner": "GNOME", 158 + "ref": "gnome-49", 159 + "repo": "gnome-shell", 160 + "type": "gitlab" 161 + } 162 + }, 163 + "home-manager": { 164 + "inputs": { 165 + "nixpkgs": [ 166 + "nixpkgs" 167 + ] 168 + }, 169 + "locked": { 170 + "lastModified": 1768949235, 171 + "narHash": "sha256-TtjKgXyg1lMfh374w5uxutd6Vx2P/hU81aEhTxrO2cg=", 172 + "owner": "nix-community", 173 + "repo": "home-manager", 174 + "rev": "75ed713570ca17427119e7e204ab3590cc3bf2a5", 175 + "type": "github" 176 + }, 177 + "original": { 178 + "owner": "nix-community", 179 + "ref": "release-25.11", 180 + "repo": "home-manager", 181 + "type": "github" 182 + } 183 + }, 24 184 "nixpkgs": { 25 185 "locked": { 26 - "lastModified": 1757431588, 27 - "narHash": "sha256-X/O41u3+YNs7uiC2LwVCZuFzfhd1fgu7i91RCFSu3sg=", 28 - "rev": "d179d77c139e0a3f5c416477f7747e9d6b7ec315", 186 + "lastModified": 1769318308, 187 + "narHash": "sha256-O2rv+3nFinYI/bPcldqotnVI+5frRStyCfAXAG/q6bg=", 188 + "rev": "1cd347bf3355fce6c64ab37d3967b4a2cb4b878c", 29 189 "type": "tarball", 30 - "url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.809619.d179d77c139e/nixexprs.tar.xz" 190 + "url": "https://releases.nixos.org/nixos/25.11/nixos-25.11.4657.1cd347bf3355/nixexprs.tar.xz" 31 191 }, 32 192 "original": { 33 193 "type": "tarball", 34 - "url": "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz" 194 + "url": "https://channels.nixos.org/nixos-25.11/nixexprs.tar.xz" 195 + } 196 + }, 197 + "nur": { 198 + "inputs": { 199 + "flake-parts": [ 200 + "stylix", 201 + "flake-parts" 202 + ], 203 + "nixpkgs": [ 204 + "stylix", 205 + "nixpkgs" 206 + ] 207 + }, 208 + "locked": { 209 + "lastModified": 1767886815, 210 + "narHash": "sha256-pB2BBv6X9cVGydEV/9Y8+uGCvuYJAlsprs1v1QHjccA=", 211 + "owner": "nix-community", 212 + "repo": "NUR", 213 + "rev": "4ff84374d77ff62e2e13a46c33bfeb73590f9fef", 214 + "type": "github" 215 + }, 216 + "original": { 217 + "owner": "nix-community", 218 + "repo": "NUR", 219 + "type": "github" 35 220 } 36 221 }, 37 222 "root": { 38 223 "inputs": { 39 224 "disko": "disko", 40 - "nixpkgs": "nixpkgs" 225 + "home-manager": "home-manager", 226 + "nixpkgs": "nixpkgs", 227 + "stylix": "stylix" 228 + } 229 + }, 230 + "stylix": { 231 + "inputs": { 232 + "base16": "base16", 233 + "base16-fish": "base16-fish", 234 + "base16-helix": "base16-helix", 235 + "base16-vim": "base16-vim", 236 + "firefox-gnome-theme": "firefox-gnome-theme", 237 + "flake-parts": "flake-parts", 238 + "gnome-shell": "gnome-shell", 239 + "nixpkgs": [ 240 + "nixpkgs" 241 + ], 242 + "nur": "nur", 243 + "systems": "systems", 244 + "tinted-foot": "tinted-foot", 245 + "tinted-kitty": "tinted-kitty", 246 + "tinted-schemes": "tinted-schemes", 247 + "tinted-tmux": "tinted-tmux", 248 + "tinted-zed": "tinted-zed" 249 + }, 250 + "locked": { 251 + "lastModified": 1769472288, 252 + "narHash": "sha256-RdnbroWsujYh1MaMhDpP5QM+bRIGG6smz987v1fli+U=", 253 + "owner": "nix-community", 254 + "repo": "stylix", 255 + "rev": "c2c4a3ad52c096db1c8dde97d3d21451613f000c", 256 + "type": "github" 257 + }, 258 + "original": { 259 + "owner": "nix-community", 260 + "ref": "release-25.11", 261 + "repo": "stylix", 262 + "type": "github" 263 + } 264 + }, 265 + "systems": { 266 + "locked": { 267 + "lastModified": 1681028828, 268 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 269 + "owner": "nix-systems", 270 + "repo": "default", 271 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 272 + "type": "github" 273 + }, 274 + "original": { 275 + "owner": "nix-systems", 276 + "repo": "default", 277 + "type": "github" 278 + } 279 + }, 280 + "tinted-foot": { 281 + "flake": false, 282 + "locked": { 283 + "lastModified": 1726913040, 284 + "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", 285 + "owner": "tinted-theming", 286 + "repo": "tinted-foot", 287 + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", 288 + "type": "github" 289 + }, 290 + "original": { 291 + "owner": "tinted-theming", 292 + "repo": "tinted-foot", 293 + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", 294 + "type": "github" 295 + } 296 + }, 297 + "tinted-kitty": { 298 + "flake": false, 299 + "locked": { 300 + "lastModified": 1735730497, 301 + "narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=", 302 + "owner": "tinted-theming", 303 + "repo": "tinted-kitty", 304 + "rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa", 305 + "type": "github" 306 + }, 307 + "original": { 308 + "owner": "tinted-theming", 309 + "repo": "tinted-kitty", 310 + "type": "github" 311 + } 312 + }, 313 + "tinted-schemes": { 314 + "flake": false, 315 + "locked": { 316 + "lastModified": 1767817087, 317 + "narHash": "sha256-eGE8OYoK6HzhJt/7bOiNV2cx01IdIrHL7gXgjkHRdNo=", 318 + "owner": "tinted-theming", 319 + "repo": "schemes", 320 + "rev": "bd99656235aab343e3d597bf196df9bc67429507", 321 + "type": "github" 322 + }, 323 + "original": { 324 + "owner": "tinted-theming", 325 + "repo": "schemes", 326 + "type": "github" 327 + } 328 + }, 329 + "tinted-tmux": { 330 + "flake": false, 331 + "locked": { 332 + "lastModified": 1767489635, 333 + "narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=", 334 + "owner": "tinted-theming", 335 + "repo": "tinted-tmux", 336 + "rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184", 337 + "type": "github" 338 + }, 339 + "original": { 340 + "owner": "tinted-theming", 341 + "repo": "tinted-tmux", 342 + "type": "github" 343 + } 344 + }, 345 + "tinted-zed": { 346 + "flake": false, 347 + "locked": { 348 + "lastModified": 1767488740, 349 + "narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=", 350 + "owner": "tinted-theming", 351 + "repo": "base16-zed", 352 + "rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40", 353 + "type": "github" 354 + }, 355 + "original": { 356 + "owner": "tinted-theming", 357 + "repo": "base16-zed", 358 + "type": "github" 41 359 } 42 360 } 43 361 },
+18 -5
flake.nix
··· 2 2 description = "nix, dotfiles, flake, ..."; 3 3 4 4 inputs = { 5 - nixpkgs.url = "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz"; 5 + nixpkgs.url = "https://channels.nixos.org/nixos-25.11/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.11"; 12 + inputs.nixpkgs.follows = "nixpkgs"; 13 + }; 14 + home-manager = { 15 + url = "github:nix-community/home-manager/release-25.11"; 8 16 inputs.nixpkgs.follows = "nixpkgs"; 9 17 }; 10 18 }; 11 19 12 20 outputs = 13 - { nixpkgs, ... }@inputs: 21 + { 22 + nixpkgs, 23 + ... 24 + }@inputs: 14 25 let 15 26 lib = nixpkgs.lib; 16 27 utils = import ./modules/utils.nix { inherit lib inputs; }; ··· 21 32 in 22 33 { 23 34 nixosConfigurations = { 24 - risu = utils.mkSystem ./hosts/risu; 35 + aqua = utils.mkSystem ./hosts/aqua; 25 36 }; 26 37 27 38 formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixfmt-tree); ··· 39 50 opentelemetry 40 51 grpc 41 52 redis 53 + imagick 42 54 ]) 43 55 ); 44 - extraConfig = ''xdebug.mode=coverage''; 56 + extraConfig = "xdebug.mode=coverage"; 45 57 }; 46 58 in 47 59 { ··· 55 67 phpEnv.packages.composer 56 68 kubelogin-oidc 57 69 redis 70 + valkey 58 71 go-jsonnet 59 72 jsonnet-bundler 60 73 yamllint
+20
hosts/aqua/default.nix
··· 1 + { pkgs, ... }: 2 + { 3 + imports = [ 4 + ../../modules/desktop.nix 5 + ./disk-config.nix 6 + ./hardware-configuration.nix 7 + ]; 8 + 9 + boot.loader.systemd-boot = { 10 + enable = true; 11 + configurationLimit = 10; 12 + consoleMode = "max"; 13 + }; 14 + boot.loader.efi.canTouchEfiVariables = true; 15 + 16 + networking.hostName = "aqua"; 17 + 18 + # my custom options / configs 19 + my.desktop.enableTDE = true; 20 + }
+109
hosts/aqua/disk-config.nix
··· 1 + _: 2 + let 3 + passwordFile = "/tmp/key"; 4 + # https://wiki.archlinux.org/title/Dm-crypt/Device_encryption#Encryption_options_for_LUKS_mode 5 + extraFormatArgs = [ 6 + "--type luks2" 7 + "--cipher aes-xts-plain64" 8 + "--hash sha512" 9 + "--key-size 512" 10 + "--pbkdf argon2id" 11 + "--use-urandom" 12 + ]; 13 + in 14 + { 15 + disko.devices = { 16 + disk = { 17 + nvme1n1 = { 18 + type = "disk"; 19 + device = "/dev/nvme1n1"; 20 + content = { 21 + type = "gpt"; 22 + partitions = { 23 + esp = { 24 + name = "esp"; 25 + size = "512M"; 26 + type = "EF00"; 27 + content = { 28 + type = "filesystem"; 29 + format = "vfat"; 30 + mountpoint = "/boot"; 31 + # https://github.com/nix-community/disko/issues/527 32 + mountOptions = [ "umask=0077" ]; 33 + }; 34 + }; 35 + swap = { 36 + size = "32G"; 37 + content = { 38 + type = "luks"; 39 + name = "swap"; 40 + settings.allowDiscards = true; 41 + inherit passwordFile; 42 + inherit extraFormatArgs; 43 + content = { 44 + type = "swap"; 45 + resumeDevice = true; 46 + discardPolicy = "both"; 47 + }; 48 + }; 49 + }; 50 + luks = { 51 + size = "100%"; 52 + content = { 53 + type = "luks"; 54 + name = "root"; 55 + settings.allowDiscards = true; 56 + inherit passwordFile; 57 + inherit extraFormatArgs; 58 + content = { 59 + type = "btrfs"; 60 + extraArgs = [ "--force" ]; 61 + subvolumes = { 62 + root = { 63 + mountpoint = "/"; 64 + }; 65 + nix = { 66 + mountpoint = "/nix"; 67 + mountOptions = [ 68 + "compress=zstd" 69 + "noatime" 70 + ]; 71 + }; 72 + }; 73 + }; 74 + }; 75 + }; 76 + }; 77 + }; 78 + }; 79 + nvme0n1 = { 80 + type = "disk"; 81 + device = "/dev/nvme0n1"; 82 + content = { 83 + type = "gpt"; 84 + partitions = { 85 + luks = { 86 + size = "100%"; 87 + content = { 88 + type = "luks"; 89 + name = "home"; 90 + settings.allowDiscards = true; 91 + inherit passwordFile; 92 + inherit extraFormatArgs; 93 + content = { 94 + type = "btrfs"; 95 + extraArgs = [ "--force" ]; 96 + subvolumes = { 97 + home = { 98 + mountpoint = "/home"; 99 + }; 100 + }; 101 + }; 102 + }; 103 + }; 104 + }; 105 + }; 106 + }; 107 + }; 108 + }; 109 + }
+41
hosts/aqua/hardware-configuration.nix
··· 1 + # Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™ 2 + # and may be overwritten by future invocations. Please make changes 3 + # to /etc/nixos/configuration.nix instead. 4 + { 5 + config, 6 + lib, 7 + pkgs, 8 + modulesPath, 9 + ... 10 + }: 11 + 12 + { 13 + imports = [ 14 + (modulesPath + "/installer/scan/not-detected.nix") 15 + ]; 16 + 17 + boot.initrd.availableKernelModules = [ 18 + "xhci_pci" 19 + "thunderbolt" 20 + "vmd" 21 + "ahci" 22 + "nvme" 23 + "usbhid" 24 + "usb_storage" 25 + "sd_mod" 26 + ]; 27 + boot.initrd.kernelModules = [ ]; 28 + boot.kernelModules = [ "kvm-intel" ]; 29 + boot.extraModulePackages = [ ]; 30 + 31 + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 32 + # (the default) this is the recommended approach. When using systemd-networkd it's 33 + # still possible to use this option, but it's recommended to use it in conjunction 34 + # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 35 + networking.useDHCP = lib.mkDefault true; 36 + # networking.interfaces.enp42s0.useDHCP = lib.mkDefault true; 37 + # networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true; 38 + 39 + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 40 + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 41 + }
-20
hosts/risu/default.nix
··· 1 - { pkgs, ... }: 2 - { 3 - imports = [ 4 - ../../modules/nixos.nix 5 - ./disk-config.nix 6 - ./hardware-configuration.nix 7 - ]; 8 - 9 - boot.loader.systemd-boot = { 10 - enable = true; 11 - configurationLimit = 10; 12 - consoleMode = "max"; 13 - }; 14 - boot.loader.efi.canTouchEfiVariables = true; 15 - 16 - networking.hostName = "risu"; 17 - 18 - # my custom options / configs 19 - my.desktop.enableKDE = true; 20 - }
-109
hosts/risu/disk-config.nix
··· 1 - _: 2 - let 3 - passwordFile = "/tmp/key"; 4 - # https://wiki.archlinux.org/title/Dm-crypt/Device_encryption#Encryption_options_for_LUKS_mode 5 - extraFormatArgs = [ 6 - "--type luks2" 7 - "--cipher aes-xts-plain64" 8 - "--hash sha512" 9 - "--key-size 512" 10 - "--pbkdf argon2id" 11 - "--use-urandom" 12 - ]; 13 - in 14 - { 15 - disko.devices = { 16 - disk = { 17 - nvme1n1 = { 18 - type = "disk"; 19 - device = "/dev/nvme1n1"; 20 - content = { 21 - type = "gpt"; 22 - partitions = { 23 - esp = { 24 - name = "esp"; 25 - size = "512M"; 26 - type = "EF00"; 27 - content = { 28 - type = "filesystem"; 29 - format = "vfat"; 30 - mountpoint = "/boot"; 31 - # https://github.com/nix-community/disko/issues/527 32 - mountOptions = [ "umask=0077" ]; 33 - }; 34 - }; 35 - swap = { 36 - size = "32G"; 37 - content = { 38 - type = "luks"; 39 - name = "swap"; 40 - settings.allowDiscards = true; 41 - inherit passwordFile; 42 - inherit extraFormatArgs; 43 - content = { 44 - type = "swap"; 45 - resumeDevice = true; 46 - discardPolicy = "both"; 47 - }; 48 - }; 49 - }; 50 - luks = { 51 - size = "100%"; 52 - content = { 53 - type = "luks"; 54 - name = "root"; 55 - settings.allowDiscards = true; 56 - inherit passwordFile; 57 - inherit extraFormatArgs; 58 - content = { 59 - type = "btrfs"; 60 - extraArgs = [ "--force" ]; 61 - subvolumes = { 62 - root = { 63 - mountpoint = "/"; 64 - }; 65 - nix = { 66 - mountpoint = "/nix"; 67 - mountOptions = [ 68 - "compress=zstd" 69 - "noatime" 70 - ]; 71 - }; 72 - }; 73 - }; 74 - }; 75 - }; 76 - }; 77 - }; 78 - }; 79 - nvme0n1 = { 80 - type = "disk"; 81 - device = "/dev/nvme0n1"; 82 - content = { 83 - type = "gpt"; 84 - partitions = { 85 - luks = { 86 - size = "100%"; 87 - content = { 88 - type = "luks"; 89 - name = "home"; 90 - settings.allowDiscards = true; 91 - inherit passwordFile; 92 - inherit extraFormatArgs; 93 - content = { 94 - type = "btrfs"; 95 - extraArgs = [ "--force" ]; 96 - subvolumes = { 97 - home = { 98 - mountpoint = "/home"; 99 - }; 100 - }; 101 - }; 102 - }; 103 - }; 104 - }; 105 - }; 106 - }; 107 - }; 108 - }; 109 - }
-41
hosts/risu/hardware-configuration.nix
··· 1 - # Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™ 2 - # and may be overwritten by future invocations. Please make changes 3 - # to /etc/nixos/configuration.nix instead. 4 - { 5 - config, 6 - lib, 7 - pkgs, 8 - modulesPath, 9 - ... 10 - }: 11 - 12 - { 13 - imports = [ 14 - (modulesPath + "/installer/scan/not-detected.nix") 15 - ]; 16 - 17 - boot.initrd.availableKernelModules = [ 18 - "xhci_pci" 19 - "thunderbolt" 20 - "vmd" 21 - "ahci" 22 - "nvme" 23 - "usbhid" 24 - "usb_storage" 25 - "sd_mod" 26 - ]; 27 - boot.initrd.kernelModules = [ ]; 28 - boot.kernelModules = [ "kvm-intel" ]; 29 - boot.extraModulePackages = [ ]; 30 - 31 - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 32 - # (the default) this is the recommended approach. When using systemd-networkd it's 33 - # still possible to use this option, but it's recommended to use it in conjunction 34 - # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 35 - networking.useDHCP = lib.mkDefault true; 36 - # networking.interfaces.enp42s0.useDHCP = lib.mkDefault true; 37 - # networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true; 38 - 39 - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 40 - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 41 - }
+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 {
+264 -4
modules/desktop.nix
··· 9 9 my = config.my; 10 10 in 11 11 { 12 + imports = [ 13 + ./config.nix 14 + ./hm.nix 15 + ./nixos.nix 16 + ]; 17 + 12 18 config = ( 13 19 let 14 20 kdeConfig = { 15 - services.desktopManager.plasma6 = { 16 - enable = true; 17 - }; 21 + services.desktopManager.plasma6.enable = true; 18 22 services.orca.enable = false; 19 - 20 23 environment.plasma6.excludePackages = with pkgs.kdePackages; [ 21 24 elisa 22 25 okular ··· 29 32 discover 30 33 ]; 31 34 }; 35 + 36 + tdeConfig = { 37 + environment.systemPackages = with pkgs; [ 38 + bluetui 39 + brightnessctl 40 + (catppuccin-sddm.override { 41 + flavor = "frappe"; 42 + }) 43 + (flameshot.override { enableWlrSupport = true; }) 44 + fuzzel 45 + grim 46 + hyprlock 47 + kanshi 48 + libnotify 49 + pavucontrol 50 + swaybg 51 + swayidle 52 + xwayland-satellite 53 + (pkgs.writeShellApplication { 54 + name = "ez-cmd-palette"; 55 + text = builtins.readFile ../bin/ez-cmd-palette; 56 + }) 57 + (pkgs.writeShellApplication { 58 + name = "ez-cmd-hwctl"; 59 + text = builtins.readFile ../bin/ez-cmd-hwctl; 60 + }) 61 + (pkgs.writeShellApplication { 62 + name = "ez-cmd-dnd"; 63 + text = builtins.readFile ../bin/ez-cmd-dnd; 64 + }) 65 + adwaita-icon-theme 66 + kdePackages.breeze-icons 67 + ]; 68 + programs.niri.enable = true; 69 + stylix = { 70 + enable = true; 71 + base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-frappe.yaml"; 72 + fonts = { 73 + monospace = { 74 + package = pkgs.nerd-fonts.jetbrains-mono; 75 + name = "JetBrainsMono Nerd Font"; 76 + }; 77 + serif = { 78 + package = pkgs.noto-fonts; 79 + name = "Noto Serif"; 80 + }; 81 + sansSerif = config.stylix.fonts.monospace; 82 + emoji = { 83 + package = pkgs.noto-fonts-color-emoji; 84 + name = "Noto Color Emoji"; 85 + }; 86 + sizes = { 87 + popups = config.stylix.fonts.sizes.applications; 88 + }; 89 + }; 90 + cursor = { 91 + name = "catppuccin-frappe-dark-cursors"; 92 + package = pkgs.catppuccin-cursors.frappeDark; 93 + size = 24; 94 + }; 95 + icons = { 96 + enable = true; 97 + package = pkgs.adwaita-icon-theme; 98 + light = "Adwaita"; 99 + dark = "Adwaita Dark"; 100 + }; 101 + }; 102 + services.displayManager.sddm.theme = "catppuccin-frappe-mauve"; 103 + systemd.packages = with pkgs; [ mako ]; 104 + systemd.user.services.mako.wantedBy = [ "graphical-session.target" ]; 105 + }; 32 106 in 33 107 lib.mkMerge [ 108 + { 109 + environment.variables = { 110 + EDITOR = "nvim"; 111 + TERMINAL = "ghostty"; 112 + BROWSER = "firefox"; 113 + }; 114 + environment.systemPackages = with pkgs; [ 115 + (discord.override { 116 + commandLineArgs = builtins.concatStringsSep " " [ 117 + "--ozone-platform=wayland" 118 + "--ozone-platform-hint=wayland" 119 + "--enable-features=TouchpadOverscrollHistoryNavigation" 120 + "--enable-features=WaylandWindowDecorations" 121 + "--enable-features=WebRTCPipeWireCapturer" 122 + ]; 123 + }) 124 + ghostty 125 + mpv 126 + sublime-merge 127 + telegram-desktop 128 + (vscode.override { 129 + commandLineArgs = builtins.concatStringsSep " " [ 130 + "--ozone-platform=wayland" 131 + ]; 132 + }) 133 + # xdg 134 + xdg-utils 135 + xdg-user-dirs 136 + ]; 137 + 138 + fonts = { 139 + enableDefaultPackages = true; 140 + fontDir.enable = true; 141 + 142 + packages = with pkgs; [ 143 + material-design-icons 144 + font-awesome 145 + 146 + noto-fonts 147 + noto-fonts-cjk-serif 148 + noto-fonts-cjk-sans 149 + noto-fonts-color-emoji 150 + 151 + # source-sans 152 + # source-serif 153 + # source-han-sans 154 + # source-han-serif 155 + 156 + jetbrains-mono 157 + nerd-fonts.symbols-only 158 + nerd-fonts.jetbrains-mono 159 + ]; 160 + 161 + fontconfig.defaultFonts = { 162 + serif = [ 163 + "Noto Serif" 164 + "Noto Serif CJK JP" 165 + "Noto Serif CJK TC" 166 + "Noto Serif CJK SC" 167 + "Noto Color Emoji" 168 + ]; 169 + sansSerif = [ 170 + "JetBrainsMono Nerd Font" 171 + "JetBrainsMono" 172 + "Noto Sans" 173 + "Noto Sans CJK JP" 174 + "Noto Sans CJK TC" 175 + "Noto Sans CJK SC" 176 + "Noto Color Emoji" 177 + ]; 178 + monospace = [ 179 + "JetBrainsMono Nerd Font" 180 + "JetBrainsMono" 181 + "Noto Color Emoji" 182 + ]; 183 + emoji = [ "Noto Color Emoji" ]; 184 + }; 185 + }; 186 + 187 + # Bluetooth 188 + hardware.bluetooth = { 189 + enable = true; 190 + powerOnBoot = false; 191 + }; 192 + 193 + i18n.inputMethod = { 194 + enable = true; 195 + type = "fcitx5"; 196 + fcitx5 = { 197 + addons = with pkgs; [ 198 + fcitx5-rime 199 + fcitx5-gtk 200 + kdePackages.fcitx5-qt 201 + ]; 202 + waylandFrontend = true; 203 + }; 204 + }; 205 + 206 + # Linux FHS 207 + # https://github.com/Mic92/nix-ld 208 + programs.nix-ld.enable = true; 209 + programs.ssh = { 210 + enableAskPassword = true; 211 + startAgent = true; 212 + extraConfig = "AddKeysToAgent yes"; 213 + }; 214 + programs.gnupg.agent.enable = true; 215 + programs.firefox.enable = true; 216 + programs.chromium = { 217 + enable = true; 218 + extensions = [ 219 + "nngceckbapebfimnlniiiahkandclblb" # Bitwarden 220 + "nhdogjmejiglipccpnnnanhbledajbpd" # Vue devtools 221 + "ophjlpahpchlmihnnnihgmmeilfjmjjc" # LINE 222 + ]; 223 + extraOpts = { 224 + "DnsOverHttpsMode" = "automatic"; 225 + }; 226 + }; 227 + programs.direnv.enable = true; 228 + 229 + services.displayManager.sddm = { 230 + enable = true; 231 + wayland.enable = true; 232 + package = pkgs.kdePackages.sddm; 233 + }; 234 + services.gnome.gcr-ssh-agent.enable = false; 235 + # Enable sound with pipewire. 236 + security.rtkit.enable = true; 237 + services.pulseaudio.enable = false; 238 + services.pipewire = { 239 + enable = true; 240 + alsa.enable = true; 241 + alsa.support32Bit = true; 242 + pulse.enable = true; 243 + # If you want to use JACK applications, uncomment this 244 + # jack.enable = true; 245 + 246 + # use the example session manager (no others are packaged yet so this is enabled by default, 247 + # no need to redefine it in your config for now) 248 + # media-session.enable = true; 249 + }; 250 + security.pki.certificates = [ 251 + # csrootca 252 + '' 253 + -----BEGIN CERTIFICATE----- 254 + MIIGfTCCBGWgAwIBAgIJANtNHd4pchD1MA0GCSqGSIb3DQEBDQUAMIHUMQswCQYD 255 + VQQGEwJUVzEPMA0GA1UECAwGVGFpd2FuMRYwFAYDVQQHDA1Ic2luLUNodSBDaXR5 256 + MScwJQYDVQQKDB5OYXRpb25hbCBDaGlhby1UdW5nIFVuaXZlcnNpdHkxJzAlBgNV 257 + BAsMHkRlcGFydG1lbnQgb2YgQ29tcHV0ZXIgU2NpZW5jZTEmMCQGA1UEAwwdTkNU 258 + VSBDUyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxIjAgBgkqhkiG9w0BCQEWE2hlbHBA 259 + Y3MubmN0dS5lZHUudHcwHhcNMTcxMjA2MTc0MzE2WhcNMjcxMjA0MTc0MzE2WjCB 260 + 1DELMAkGA1UEBhMCVFcxDzANBgNVBAgMBlRhaXdhbjEWMBQGA1UEBwwNSHNpbi1D 261 + aHUgQ2l0eTEnMCUGA1UECgweTmF0aW9uYWwgQ2hpYW8tVHVuZyBVbml2ZXJzaXR5 262 + MScwJQYDVQQLDB5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxJjAkBgNV 263 + BAMMHU5DVFUgQ1MgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSIwIAYJKoZIhvcNAQkB 264 + FhNoZWxwQGNzLm5jdHUuZWR1LnR3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC 265 + CgKCAgEAvOZF59xipyzkRVbWTqMCf94ucr4ze6mTtctDnqpFFRfFC0ksXKVFZbhf 266 + /N9dSTw+i8WJQY/RZc5jHNx7E+fnNdURBQniyuiXBTTicoVYp1Uef56CAYbEZDfp 267 + VQmmovcGv8gEuZ4L/CFMwsFFFab2epS7A7u7wk0dnhFBpvC0RigqQIwtlBc/M0WA 268 + a8C9cwBzxpblpa0TY3pMbI3KPxLnflTrlPqCrlcWCuChen3Z1Lzu5C9EgavPJsYU 269 + bmGwOayP4cie59dVYzCrmi6/XHMsfWuJ4vAHVOJqV1JeKbS65MfOVE+UVNKAGaLO 270 + a6RaVcy0M5IAhTGSi+kZeBgVC0c5yoNZ7NHyG1EOOBg6CoNsWW4B8F2780s6ofRG 271 + Ukl2+HGf6nvqgUsU3cyyZ09OFk4gDTPAj24VSG5uAdCUst1aaTxwl2yr1jNHSy3R 272 + pxjGkx7DGWBveRwFl9sTxAyD+k/7eJ+ygJk4D5JxaMsOM334aBwsYoqhzwePL7SC 273 + LXcj92qj4DFasCmQSFUpKkT7YLJvTi16RwGM2qGklSTfxm5jWCI6XXNTkgyPZXZd 274 + 76QnyCkT3w224M/g5MziPFyMrHfYnJl2tX2AKq6qS32uk6UQw1FH4lpxPuLc5F// 275 + yXG4/5j3+apMm3jhFcIQ3vuqZV3kz88HeeuBPbRwajkrhPxS/BcCAwEAAaNQME4w 276 + HQYDVR0OBBYEFNPLn9RQJ0u6prsffVi3a0QGxSgjMB8GA1UdIwQYMBaAFNPLn9RQ 277 + J0u6prsffVi3a0QGxSgjMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIB 278 + AGd5PjBAeWqpAM7kaGrKHY/d+kS1tKPH/c9HJcIsrZGNImKyuJ0KXLhmwIBMrARQ 279 + 9Ly2km8FZEo1LKPd6EYzKzru/xUdY/vz2UO/4aouOyNn6rI9umXaahPKElSN6gka 280 + NIPY7DpGcaCmtMzE13e7wbh9IkqwWPrzRNwaZKybWyWp6/AJCSc6PoqqW0+3plBA 281 + XuCDlM6XJF8duqWcdJKBcdCwdYdrHtb0xcwEG4XF+G04R6uEA0AfCIylvwjOAKN/ 282 + 5AeiYJ+hz837XE3i1CZmsNR5uo1erijVuyMN8DD/9pr2QwYP/4b7nCSDMckTrHez 283 + um7gMtYIoy4OnLvSddjUboRpor/iaE1H/3LK1gvnMbII45EhUdPKIN2/nlfY0g5T 284 + jx9OW2UXl33WlZT7oA1II87CV2H6k72TnH6fDjGFepWPsnJQ+Fk7+zHSbJEIFJzr 285 + 49rK+dahSjt3C9GB7aJu/NOhGA1W8iaWEyYPO/FOfmvJZwMlZgbeN0utWyJ1zsi5 286 + DWaofN3JwjaAD4nJfIbTF1iINJ3NhjIRETTQ31G/AWhV8H8ZCK+4iE+rQ3OuWzYU 287 + vd5u4z/jaVcUnJKukM0e9VAgxEC7A8rRFgko5XjKXrCZgkzbhQWA0uzYvx0ghIMe 288 + x8AH/WxuNFhZq3OmgppgVaGeuOvN7xSEbLACAOekJWp1 289 + -----END CERTIFICATE----- 290 + '' 291 + ]; 292 + } 34 293 (lib.mkIf my.desktop.enableKDE kdeConfig) 294 + (lib.mkIf my.desktop.enableTDE tdeConfig) 35 295 ] 36 296 ); 37 297 }
+114
modules/hm.nix
··· 1 + { 2 + config, 3 + lib, 4 + pkgs, 5 + ... 6 + }: 7 + let 8 + my = config.my; 9 + in 10 + { 11 + config = ( 12 + let 13 + commonHM = { 14 + home-manager.backupFileExtension = "backup"; 15 + home-manager.useGlobalPkgs = true; 16 + home-manager.useUserPackages = true; 17 + home-manager.sharedModules = [ 18 + { 19 + stylix.targets = { 20 + fcitx5.enable = true; 21 + }; 22 + } 23 + ]; 24 + home-manager.users.${my.username} = { 25 + home.stateVersion = "25.05"; 26 + programs.bat.enable = true; 27 + programs.btop.enable = true; 28 + programs.fzf.enable = true; 29 + programs.firefox.enable = true; 30 + programs.chromium = { 31 + enable = true; 32 + package = pkgs.brave; 33 + commandLineArgs = [ 34 + "--ozone-platform=wayland" 35 + "--ozone-platform-hint=wayland" 36 + "--enable-features=TouchpadOverscrollHistoryNavigation" 37 + "--enable-features=WaylandWindowDecorations" 38 + "--enable-features=WebRTCPipeWireCapturer" 39 + ]; 40 + }; 41 + }; 42 + }; 43 + 44 + tdeHM = { 45 + home-manager.sharedModules = [ 46 + { 47 + stylix.targets = { 48 + waybar = { 49 + enableLeftBackColors = true; 50 + enableRightBackColors = true; 51 + }; 52 + }; 53 + } 54 + ]; 55 + home-manager.users.${my.username} = { 56 + programs.waybar = { 57 + enable = true; 58 + systemd.enable = true; 59 + style = '' 60 + .modules-left { 61 + padding-left: 16px; 62 + } 63 + .modules-right { 64 + padding-right: 32px; 65 + } 66 + ''; 67 + }; 68 + programs.fuzzel = { 69 + enable = true; 70 + settings = { 71 + main = { 72 + horizontal-pad = 32; 73 + vertical-pad = 24; 74 + }; 75 + border = { 76 + width = 2; 77 + }; 78 + }; 79 + }; 80 + services.kanshi.enable = true; 81 + services.mako = { 82 + enable = true; 83 + settings = { 84 + padding = 16; 85 + border-radius = 4; 86 + default-timeout = 5000; 87 + "mode=dnd" = { 88 + invisible = 1; 89 + }; 90 + "app-name=wp-vol" = { 91 + layer = "overlay"; 92 + history = 0; 93 + anchor = "center"; 94 + group-by = "app-name"; 95 + format = "<b>%s</b>\\n%b"; 96 + }; 97 + "app-name=brightnessctl" = { 98 + layer = "overlay"; 99 + history = 0; 100 + anchor = "center"; 101 + group-by = "app-name"; 102 + format = "<b>%s</b>\\n%b"; 103 + }; 104 + }; 105 + }; 106 + }; 107 + }; 108 + in 109 + lib.mkMerge [ 110 + commonHM 111 + (lib.mkIf my.desktop.enableTDE tdeHM) 112 + ] 113 + ); 114 + }
+19 -191
modules/nixos.nix
··· 8 8 my = config.my; 9 9 in 10 10 { 11 - imports = [ 12 - ./config.nix 13 - ./desktop.nix 14 - ]; 15 - 16 - # Linux FHS 17 - # https://github.com/Mic92/nix-ld 18 - programs.nix-ld = { 19 - enable = true; 11 + boot.tmp.useTmpfs = true; 12 + systemd.services.nix-daemon = { 13 + environment.TMPDIR = "/var/tmp"; 20 14 }; 21 - programs.ssh = { 22 - enableAskPassword = true; 23 - startAgent = true; 24 - extraConfig = "AddKeysToAgent yes"; 25 - }; 26 - programs.gnupg.agent.enable = true; 27 15 28 - # fonts 29 - fonts = { 30 - enableDefaultPackages = true; 31 - fontDir.enable = true; 16 + # https://discourse.nixos.org/t/slow-build-at-building-man-cache/52365/3 17 + documentation.man.generateCaches = false; 32 18 33 - packages = with pkgs; [ 34 - font-awesome 19 + environment.systemPackages = import ./pkgs.nix { inherit pkgs; }; 35 20 36 - noto-fonts 37 - noto-fonts-cjk-serif 38 - noto-fonts-cjk-sans 39 - noto-fonts-color-emoji 40 - 41 - # source-sans 42 - # source-serif 43 - # source-han-sans 44 - # source-han-serif 45 - 46 - jetbrains-mono 47 - ]; 48 - 49 - fontconfig.defaultFonts = { 50 - serif = [ 51 - "Noto Serif" 52 - # "Source Han Serif SC" 53 - # "Source Han Serif TC" 54 - "Noto Color Emoji" 55 - ]; 56 - sansSerif = [ 57 - "Noto Sans" 58 - # "Source Han Sans SC" 59 - # "Source Han Sans TC" 60 - "Noto Color Emoji" 61 - ]; 62 - monospace = [ 63 - "JetBrainsMono" 64 - "Noto Color Emoji" 65 - ]; 66 - emoji = [ "Noto Color Emoji" ]; 67 - }; 68 - }; 69 - 70 - # gui apps 71 - environment.systemPackages = 72 - with pkgs; 73 - [ 74 - brave 75 - discord 76 - ghostty 77 - mpv 78 - sublime-merge 79 - telegram-desktop 80 - vscode 81 - # xdg 82 - xdg-utils 83 - xdg-user-dirs 84 - ] 85 - ++ import ./pkgs.nix { inherit pkgs; }; 86 - programs.firefox = { 87 - enable = true; 88 - preferences = { 89 - "apz.overscroll.enabled" = false; 90 - }; 91 - }; 92 - programs.chromium = { 93 - enable = true; 94 - extensions = [ 95 - "nngceckbapebfimnlniiiahkandclblb" # Bitwarden 96 - "nhdogjmejiglipccpnnnanhbledajbpd" # Vue devtools 97 - "ophjlpahpchlmihnnnihgmmeilfjmjjc" # LINE 98 - ]; 99 - extraOpts = { 100 - "DnsOverHttpsMode" = "automatic"; 101 - }; 102 - }; 21 + hardware.enableAllFirmware = true; 103 22 104 23 # locale 105 24 time.timeZone = "Asia/Taipei"; 106 - i18n.inputMethod = { 107 - enable = true; 108 - type = "fcitx5"; 109 - fcitx5 = { 110 - addons = with pkgs; [ 111 - fcitx5-rime 112 - fcitx5-gtk 113 - ]; 114 - waylandFrontend = true; 115 - }; 116 - }; 117 25 i18n.defaultLocale = "en_US.UTF-8"; 118 26 i18n.extraLocaleSettings = { 119 27 LC_ADDRESS = "en_US.UTF-8"; ··· 127 35 LC_TIME = "ja_JP.UTF-8"; 128 36 }; 129 37 130 - # nix settings 38 + networking = { 39 + networkmanager.enable = true; 40 + # networkmanager.insertNameservers = [ "1.1.1.1" ]; 41 + }; 42 + 131 43 nixpkgs.config.allowUnfree = true; 132 44 nix = { 133 45 settings = { ··· 142 54 channel.enable = false; 143 55 }; 144 56 145 - # virtualisation 146 57 virtualisation.podman = { 147 58 enable = true; 148 59 dockerCompat = false; 149 60 autoPrune = { 150 - enable = false; 61 + enable = true; 151 62 dates = "weekly"; 152 63 }; 153 64 }; 154 65 virtualisation.docker = { 155 66 enable = true; 156 67 autoPrune = { 157 - enable = false; 68 + enable = true; 158 69 dates = "weekly"; 159 70 }; 160 71 }; ··· 170 81 mutableUsers = true; 171 82 groups.${my.username} = { }; 172 83 users.${my.username} = { 173 - home = "/home/${my.username}"; 84 + home = "${my.home}"; 174 85 name = "${my.username}"; 175 86 description = "${my.username}"; 176 87 isNormalUser = true; ··· 178 89 initialHashedPassword = "$y$j9T$O7VoQkhQTjxjK598z6hMG1$aSZFDwnZng.WpV6ulvT.Dt0qul5cnZAolnHnT8N9mZ4"; 179 90 extraGroups = [ 180 91 "${my.username}" 92 + "docker" 181 93 "networkmanager" 182 94 "wheel" 95 + "input" 183 96 ]; 184 97 }; 185 - }; 186 - 187 - boot.tmp.useTmpfs = true; 188 - systemd.services.nix-daemon = { 189 - environment.TMPDIR = "/var/tmp"; 190 98 }; 191 99 192 100 services.power-profiles-daemon.enable = false; 193 101 services.tlp.enable = true; 194 - 195 - services.displayManager.sddm = { 196 - enable = true; 197 - wayland.enable = true; 198 - }; 199 - 200 - services.xserver = { 201 - enable = false; 202 - }; 203 - 204 - services.printing.enable = false; 205 - 206 - # Enable sound with pipewire. 207 - security.rtkit.enable = true; 208 - services.pulseaudio.enable = false; 209 - services.pipewire = { 210 - enable = true; 211 - alsa.enable = true; 212 - alsa.support32Bit = true; 213 - pulse.enable = true; 214 - # If you want to use JACK applications, uncomment this 215 - # jack.enable = true; 216 - 217 - # use the example session manager (no others are packaged yet so this is enabled by default, 218 - # no need to redefine it in your config for now) 219 - # media-session.enable = true; 220 - }; 221 - 102 + services.xserver.enable = lib.mkForce false; 103 + services.printing.enable = lib.mkForce false; 222 104 # Fuse filesystem that returns symlinks to executables based on the PATH of 223 105 # the requesting process. This is useful to execute shebangs on NixOS that 224 106 # assume hard coded locations in locations like /bin or /usr/bin etc. 225 107 services.envfs.enable = true; 226 - 227 - # Bluetooth 228 - hardware.bluetooth.enable = true; 229 - 230 - networking = { 231 - networkmanager.enable = true; 232 - networkmanager.insertNameservers = [ "1.1.1.1" ]; 233 - }; 234 - 235 - # https://discourse.nixos.org/t/slow-build-at-building-man-cache/52365/3 236 - documentation.man.generateCaches = false; 237 - 238 - security.pki.certificates = [ 239 - # csrootca 240 - '' 241 - -----BEGIN CERTIFICATE----- 242 - MIIGfTCCBGWgAwIBAgIJANtNHd4pchD1MA0GCSqGSIb3DQEBDQUAMIHUMQswCQYD 243 - VQQGEwJUVzEPMA0GA1UECAwGVGFpd2FuMRYwFAYDVQQHDA1Ic2luLUNodSBDaXR5 244 - MScwJQYDVQQKDB5OYXRpb25hbCBDaGlhby1UdW5nIFVuaXZlcnNpdHkxJzAlBgNV 245 - BAsMHkRlcGFydG1lbnQgb2YgQ29tcHV0ZXIgU2NpZW5jZTEmMCQGA1UEAwwdTkNU 246 - VSBDUyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxIjAgBgkqhkiG9w0BCQEWE2hlbHBA 247 - Y3MubmN0dS5lZHUudHcwHhcNMTcxMjA2MTc0MzE2WhcNMjcxMjA0MTc0MzE2WjCB 248 - 1DELMAkGA1UEBhMCVFcxDzANBgNVBAgMBlRhaXdhbjEWMBQGA1UEBwwNSHNpbi1D 249 - aHUgQ2l0eTEnMCUGA1UECgweTmF0aW9uYWwgQ2hpYW8tVHVuZyBVbml2ZXJzaXR5 250 - MScwJQYDVQQLDB5EZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UxJjAkBgNV 251 - BAMMHU5DVFUgQ1MgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSIwIAYJKoZIhvcNAQkB 252 - FhNoZWxwQGNzLm5jdHUuZWR1LnR3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC 253 - CgKCAgEAvOZF59xipyzkRVbWTqMCf94ucr4ze6mTtctDnqpFFRfFC0ksXKVFZbhf 254 - /N9dSTw+i8WJQY/RZc5jHNx7E+fnNdURBQniyuiXBTTicoVYp1Uef56CAYbEZDfp 255 - VQmmovcGv8gEuZ4L/CFMwsFFFab2epS7A7u7wk0dnhFBpvC0RigqQIwtlBc/M0WA 256 - a8C9cwBzxpblpa0TY3pMbI3KPxLnflTrlPqCrlcWCuChen3Z1Lzu5C9EgavPJsYU 257 - bmGwOayP4cie59dVYzCrmi6/XHMsfWuJ4vAHVOJqV1JeKbS65MfOVE+UVNKAGaLO 258 - a6RaVcy0M5IAhTGSi+kZeBgVC0c5yoNZ7NHyG1EOOBg6CoNsWW4B8F2780s6ofRG 259 - Ukl2+HGf6nvqgUsU3cyyZ09OFk4gDTPAj24VSG5uAdCUst1aaTxwl2yr1jNHSy3R 260 - pxjGkx7DGWBveRwFl9sTxAyD+k/7eJ+ygJk4D5JxaMsOM334aBwsYoqhzwePL7SC 261 - LXcj92qj4DFasCmQSFUpKkT7YLJvTi16RwGM2qGklSTfxm5jWCI6XXNTkgyPZXZd 262 - 76QnyCkT3w224M/g5MziPFyMrHfYnJl2tX2AKq6qS32uk6UQw1FH4lpxPuLc5F// 263 - yXG4/5j3+apMm3jhFcIQ3vuqZV3kz88HeeuBPbRwajkrhPxS/BcCAwEAAaNQME4w 264 - HQYDVR0OBBYEFNPLn9RQJ0u6prsffVi3a0QGxSgjMB8GA1UdIwQYMBaAFNPLn9RQ 265 - J0u6prsffVi3a0QGxSgjMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQENBQADggIB 266 - AGd5PjBAeWqpAM7kaGrKHY/d+kS1tKPH/c9HJcIsrZGNImKyuJ0KXLhmwIBMrARQ 267 - 9Ly2km8FZEo1LKPd6EYzKzru/xUdY/vz2UO/4aouOyNn6rI9umXaahPKElSN6gka 268 - NIPY7DpGcaCmtMzE13e7wbh9IkqwWPrzRNwaZKybWyWp6/AJCSc6PoqqW0+3plBA 269 - XuCDlM6XJF8duqWcdJKBcdCwdYdrHtb0xcwEG4XF+G04R6uEA0AfCIylvwjOAKN/ 270 - 5AeiYJ+hz837XE3i1CZmsNR5uo1erijVuyMN8DD/9pr2QwYP/4b7nCSDMckTrHez 271 - um7gMtYIoy4OnLvSddjUboRpor/iaE1H/3LK1gvnMbII45EhUdPKIN2/nlfY0g5T 272 - jx9OW2UXl33WlZT7oA1II87CV2H6k72TnH6fDjGFepWPsnJQ+Fk7+zHSbJEIFJzr 273 - 49rK+dahSjt3C9GB7aJu/NOhGA1W8iaWEyYPO/FOfmvJZwMlZgbeN0utWyJ1zsi5 274 - DWaofN3JwjaAD4nJfIbTF1iINJ3NhjIRETTQ31G/AWhV8H8ZCK+4iE+rQ3OuWzYU 275 - vd5u4z/jaVcUnJKukM0e9VAgxEC7A8rRFgko5XjKXrCZgkzbhQWA0uzYvx0ghIMe 276 - x8AH/WxuNFhZq3OmgppgVaGeuOvN7xSEbLACAOekJWp1 277 - -----END CERTIFICATE----- 278 - '' 279 - ]; 280 108 281 109 # This value determines the NixOS release from which the default 282 110 # settings for stateful data, like file locations and database versions
+9 -3
modules/pkgs.nix
··· 7 7 # common QoL devtools 8 8 bat 9 9 coreutils 10 + envsubst 10 11 fastfetch 11 12 fd # find alternative 12 13 fish ··· 25 26 texinfo 26 27 zoxide 27 28 shellcheck 29 + yazi 28 30 29 31 # network tools 30 32 dnsutils ··· 33 35 wget 34 36 tcpdump 35 37 traceroute 38 + whois 36 39 37 40 # process monitoring 38 41 btop 39 42 40 43 # vcs 41 44 git 45 + jujutsu 42 46 delta 43 - github-cli 44 - glab 45 47 lazygit 46 48 47 49 # text processing ··· 53 55 gnutar 54 56 55 57 # encryption and security 56 - age 58 + # age 57 59 gnupg 58 60 59 61 # vpn ··· 63 65 podman-tui 64 66 toolbox 65 67 distrobox 68 + lazydocker 66 69 67 70 # nix 68 71 nixfmt-tree ··· 71 74 kubectl 72 75 k9s 73 76 k0sctl 77 + 78 + # typesetting 79 + typst 74 80 75 81 nodejs_24 76 82 pnpm
+2
modules/utils.nix
··· 13 13 specialArgs = { inherit inputs; }; 14 14 modules = [ 15 15 inputs.disko.nixosModules.disko 16 + inputs.stylix.nixosModules.stylix 17 + inputs.home-manager.nixosModules.home-manager 16 18 config 17 19 ]; 18 20 };
-97
scripts/arch-install.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - set -e 4 - 5 - SCRIPT_DIR=$(dirname "$(realpath "$0")") 6 - 7 - if ! command -v paru &> /dev/null; then 8 - sudo pacman -S --needed base-devel git 9 - git clone https://aur.archlinux.org/paru-bin.git /tmp/paru 10 - cd /tmp/paru 11 - makepkg -si --noconfirm 12 - rm -rf /tmp/paru 13 - fi 14 - 15 - has() { 16 - command -v "$1" &>/dev/null 17 - } 18 - 19 - pkgs=( 20 - # kde plasma ofc 21 - plasma 22 - dolphin 23 - ark 24 - gwenview 25 - mpv 26 - sddm 27 - kimageformats 28 - kwalletmanager 29 - power-profiles-daemon 30 - qt6-imageformats 31 - libappindicator-gtk3 32 - 33 - # arch related 34 - intel-ucode 35 - amd-ucode 36 - reflector 37 - archlinux-contrib 38 - pacman-contrib 39 - 40 - # terminal 41 - ghostty 42 - 43 - # editors 44 - visual-studio-code-bin 45 - 46 - # browsers 47 - firefox 48 - brave-bin 49 - 50 - # fonts 51 - noto-fonts 52 - noto-fonts-cjk 53 - noto-fonts-emoji 54 - noto-fonts-extra 55 - ttf-jetbrains-mono 56 - ttf-font-awesome 57 - 58 - # virtualization 59 - virtualbox 60 - virtualbox-guest-iso 61 - virtualbox-host-dkms 62 - virtualbox-host-modules-lts 63 - 64 - # IME 65 - fcitx5-im 66 - fcitx5-rime 67 - 68 - discord 69 - telegram-desktop 70 - ) 71 - 72 - paru -Syu --noconfirm --needed "${pkgs[@]}" 73 - 74 - # nix 75 - if ! has nix; then 76 - curl -L https://nixos.org/nix/install | sh -s -- --no-daemon 77 - fi 78 - 79 - sudo systemctl enable sddm 80 - sudo systemctl enable systemd-resolved.service 81 - sudo systemctl restart systemd-resolved.service 82 - sudo systemctl enable bluetooth.service 83 - sudo systemctl restart bluetooth.service 84 - sudo systemctl enable reflector.timer 85 - sudo systemctl restart reflector.timer 86 - sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf 87 - 88 - bash "$SCRIPT_DIR/cp-config.sh" 89 - bash "$SCRIPT_DIR/init-work.sh" 90 - bash "$SCRIPT_DIR/kde-config.sh" 91 - 92 - chsh -s "$(which fish)" 93 - 94 - read -rp "reboot? (y/n): " reply 95 - if [[ $reply = "y" ]]; then 96 - reboot 97 - fi
-126
scripts/kde-config.sh
··· 1 - #!/usr/bin/env bash 2 - 3 - set -e 4 - 5 - backup() { 6 - cp "$1" "$1-$(date -Iseconds)".bak 7 - } 8 - 9 - kwc() { 10 - file=$1 11 - group=$2 12 - key=$3 13 - value=$4 14 - type={$5:-""} 15 - touch "$file" 16 - backup "$file" 17 - kwriteconfig6 \ 18 - --file "$file" \ 19 - --group "$group" \ 20 - --key "$key" \ 21 - --type "$type" \ 22 - "$value" 23 - } 24 - 25 - echo "highlight changed settings" 26 - kwc "$HOME"/.config/systemsettingsrc \ 27 - systemsettings_sidebar_mode \ 28 - HighlightNonDefaultSettings \ 29 - true \ 30 - bool 31 - 32 - echo "set fcitx5 IME" 33 - kwc "$HOME"/.config/kwinrc \ 34 - Wayland \ 35 - 'InputMethod[$e]' \ 36 - '/usr/share/applications/org.fcitx.Fcitx5.desktop' 37 - kwc "$HOME"/.config/kwinrc \ 38 - Wayland \ 39 - 'VirtualKeyboardEnabled' \ 40 - true \ 41 - bool 42 - 43 - echo "set kwin shortcuts" 44 - kwc "$HOME"/.config/kglobalshortcutsrc \ 45 - kwin \ 46 - 'Window Close' \ 47 - 'Ctrl+Q,Alt+F4,Close Window' 48 - kwc "$HOME"/.config/kglobalshortcutsrc \ 49 - kwin \ 50 - 'Window Maximize' \ 51 - 'Meta+F,Meta+PgUp,Maximize Window' 52 - kwc "$HOME"/.config/kglobalshortcutsrc \ 53 - kwin \ 54 - 'Window Quick Tile Bottom' \ 55 - 'Meta+J,Meta+Down,Quick Tile Window to the Bottom' 56 - kwc "$HOME"/.config/kglobalshortcutsrc \ 57 - kwin \ 58 - 'Window Quick Tile Left' \ 59 - 'Meta+H,Meta+Left,Quick Tile Window to the Left' 60 - kwc "$HOME"/.config/kglobalshortcutsrc \ 61 - kwin \ 62 - 'Window Quick Tile Right' \ 63 - 'Meta+L,Meta+Right,Quick Tile Window to the Right' 64 - kwc "$HOME"/.config/kglobalshortcutsrc \ 65 - kwin \ 66 - 'Window Quick Tile Top' \ 67 - 'Meta+K,Meta+Up,Quick Tile Window to the Top' 68 - 69 - kwc "$HOME"/.config/kglobalshortcutsrc \ 70 - kwin \ 71 - 'Switch Window Down' \ 72 - 'Meta+Alt+J,Meta+Alt+Down,Switch to Window Below' 73 - kwc "$HOME"/.config/kglobalshortcutsrc \ 74 - kwin \ 75 - 'Switch Window Left' \ 76 - 'Meta+Alt+H,Meta+Alt+Left,Switch Window to the Left' 77 - 78 - kwc "$HOME"/.config/kglobalshortcutsrc \ 79 - kwin \ 80 - 'Window One Desktop Down' \ 81 - 'Meta+Ctrl+Shift+J,Meta+Ctrl+Shift+Down,Window One Desktop Down' 82 - kwc "$HOME"/.config/kglobalshortcutsrc \ 83 - kwin \ 84 - 'Window One Desktop Up' \ 85 - 'Meta+Ctrl+Shift+K,Meta+Ctrl+Shift+Up,Window One Desktop Up' 86 - kwc "$HOME"/.config/kglobalshortcutsrc \ 87 - kwin \ 88 - 'Window One Desktop to the Left' \ 89 - 'Meta+Ctrl+Shift+H,Meta+Ctrl+Shift+Left,Window One Desktop to the Left' 90 - kwc "$HOME"/.config/kglobalshortcutsrc \ 91 - kwin \ 92 - 'Window One Desktop to the Right' \ 93 - 'Meta+Ctrl+Shift+L,Meta+Ctrl+Shift+Right,Window One Desktop to the Right' 94 - 95 - kwc "$HOME"/.config/kglobalshortcutsrc \ 96 - ksmserver \ 97 - 'Lock Session' \ 98 - 'Ctrl+Alt+L,Meta+L Screensaver,Lock Session' 99 - 100 - echo "disable file indexing" 101 - kwc "$HOME"/.config/baloofilerc \ 102 - 'Basic Settings' \ 103 - 'Indexing-Enabled' \ 104 - false \ 105 - bool 106 - kwc "$HOME"/.config/krunnerrc \ 107 - 'Plugins' \ 108 - 'baloosearchEnabled' \ 109 - false \ 110 - bool 111 - 112 - echo "set default apps" 113 - kwc "$HOME"/.config/kdeglobals \ 114 - 'General' \ 115 - 'TerminalApplication' \ 116 - 'ghostty' 117 - kwc "$HOME"/.config/kdeglobals \ 118 - 'General' \ 119 - 'TerminalService' \ 120 - 'com.mitchellh.ghostty.desktop' 121 - 122 - echo "set LC_TIME to JP" 123 - kwc "$HOME"/.config/plasma-localerc \ 124 - 'Formats' \ 125 - 'LC_TIME' \ 126 - 'ja_JP.UTF-8'
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.