-2
.github/CODEOWNERS
-2
.github/CODEOWNERS
-32
.github/workflows/checks.yml
-32
.github/workflows/checks.yml
···
1
-
name: checks
2
-
3
-
on:
4
-
push:
5
-
branches:
6
-
- main
7
-
pull_request:
8
-
branches:
9
-
- main
10
-
11
-
jobs:
12
-
nix:
13
-
runs-on: ubuntu-latest
14
-
steps:
15
-
- uses: actions/checkout@v6
16
-
- uses: wimpysworld/nothing-but-nix@main
17
-
- name: install nix
18
-
uses: cachix/install-nix-action@v31
19
-
- name: formatting
20
-
run: |
21
-
nix fmt
22
-
if [ -n "$(git status --porcelain)" ]; then
23
-
git --no-pager diff
24
-
exit 1
25
-
fi
26
-
- name: flake check
27
-
run: nix flake check
28
-
misc:
29
-
runs-on: ubuntu-latest
30
-
steps:
31
-
- name: commit message
32
-
uses: adamperkowski/commits@main
-49
.github/workflows/update.yml
-49
.github/workflows/update.yml
···
1
-
name: update
2
-
3
-
on:
4
-
schedule:
5
-
- cron: '0 0 * * 0'
6
-
workflow_dispatch:
7
-
8
-
permissions:
9
-
contents: write
10
-
pull-requests: write
11
-
12
-
jobs:
13
-
nix:
14
-
runs-on: ubuntu-latest
15
-
steps:
16
-
- uses: actions/checkout@v6
17
-
- name: install nix
18
-
uses: cachix/install-nix-action@v31
19
-
- name: flake inputs
20
-
run: nix flake update
21
-
- name: create pull request
22
-
uses: peter-evans/create-pull-request@v7
23
-
with:
24
-
commit-message: 'flake: update inputs'
25
-
committer: 'github-actions[bot] <github-actions[bot]@users.noreply.github.com>'
26
-
author: 'github-actions[bot] <github-actions[bot]@users.noreply.github.com>'
27
-
branch: 'flake/update-inputs'
28
-
title: 'flake: update inputs'
29
-
reviewers: adamperkowski
30
-
assignees: adamperkowski
31
-
actions:
32
-
runs-on: ubuntu-latest
33
-
steps:
34
-
- uses: actions/checkout@v6
35
-
- name: update actions
36
-
uses: saadmk11/github-actions-version-updater@v0.9.0
37
-
with:
38
-
token: 'aaaaaaaaaa'
39
-
skip_pull_request: true
40
-
- name: create pull request
41
-
uses: peter-evans/create-pull-request@v7
42
-
with:
43
-
commit-message: 'ci: update github actions'
44
-
committer: 'github-actions[bot] <github-actions[bot]@users.noreply.github.com>'
45
-
author: 'github-actions[bot] <github-actions[bot]@users.noreply.github.com>'
46
-
branch: 'ci/update-github-actions'
47
-
title: 'ci: update github actions'
48
-
reviewers: adamperkowski
49
-
assignees: adamperkowski
+15
.woodpecker/checks.yml
+15
.woodpecker/checks.yml
···
1
+
when:
2
+
- event: [push, pull_request]
3
+
branch: main
4
+
5
+
steps:
6
+
- name: commit message
7
+
image: codeberg.org/koibtw/commits:latest
8
+
commands:
9
+
- check-commit-message "$(git log -1 --pretty=%B)"
10
+
- name: formatting
11
+
image: nixos/nix
12
+
commands:
13
+
- echo 'experimental-features = flakes nix-command' >> /etc/nix/nix.conf
14
+
- nix fmt --inputs-from .
15
+
- nix shell --inputs-from . nixpkgs#git -c git diff --exit-code
+3
-3
README.md
+3
-3
README.md
···
1
1
<div>
2
2
3
-
<a href="https://adamperkowski.dev" target="_blank">
3
+
<a href="https://koi.rip" target="_blank">
4
4
<img
5
5
width="88"
6
6
height="31"
7
-
src="https://adamperkowski.dev/img/badges/mimi-the-car.gif"
7
+
src="https://koi.rip/img/badges/mimi-the-car.gif"
8
8
alt="mimi the car (my website)"
9
9
align="right">
10
10
</a>
···
20
20
<img
21
21
width="496"
22
22
height="32"
23
-
src="https://adamperkowski.dev/img/mimi-banner.gif"
23
+
src="https://koi.rip/img/mimi-banner.gif"
24
24
alt="mimi banner"
25
25
align="center">
26
26
doc/preview.webp
doc/preview.webp
This is a binary file and will not be displayed.
-84
external/config/fastfetch/config.jsonc
-84
external/config/fastfetch/config.jsonc
···
1
-
// Copyright (c) 2024-present nnyyxxxx, Adam Perkowski
2
-
3
-
{
4
-
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
5
-
"display": {
6
-
"color": "#b4befe",
7
-
"separator": " :",
8
-
9
-
"key": {
10
-
"width": 17,
11
-
"paddingLeft": 2,
12
-
"type": "both"
13
-
}
14
-
},
15
-
16
-
"logo": {
17
-
"source": "auto",
18
-
"color": {
19
-
"1": "#b4befe",
20
-
"2": "#cba6f7"
21
-
},
22
-
"padding": {
23
-
"top": 1,
24
-
"left": 2,
25
-
"right": 2
26
-
}
27
-
},
28
-
29
-
"modules": [
30
-
"break",
31
-
"break",
32
-
{
33
-
"type": "custom",
34
-
"format": "\u001b[0;38;2;180;190;254mแโ ^. .^โ ๎ปญ โ^. .^ โแ\u001b[0m"
35
-
},
36
-
{
37
-
"type": "custom",
38
-
"format": "\u001b[0;38;2;203;166;247mโญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ\u001b[0m"
39
-
},
40
-
{
41
-
"type": "users",
42
-
"key": "user ",
43
-
"keyIcon": "๏ฝ ",
44
-
"format": "{name}"
45
-
},
46
-
{
47
-
"type": "command",
48
-
"shell": "/bin/sh",
49
-
"text": "hostname",
50
-
"key": "hostname",
51
-
"keyIcon": "๏ณ ",
52
-
"format": "{result}"
53
-
},
54
-
{
55
-
"type": "uptime",
56
-
"key": "uptime ",
57
-
"keyIcon": "๏พ ",
58
-
"format": "{days}d {hours}h {minutes}m"
59
-
},
60
-
{
61
-
"type": "os",
62
-
"key": "distro ",
63
-
"keyIcon": "๎ทฉ ",
64
-
"format": "{name} {version-id}"
65
-
},
66
-
{
67
-
"type": "kernel",
68
-
"key": "kernel ",
69
-
"keyIcon": "๏ "
70
-
},
71
-
{
72
-
"type": "command",
73
-
"shell": "/bin/sh",
74
-
"text": "kitget -V | cut -d ' ' -f2",
75
-
"key": "kitget ",
76
-
"keyIcon": "๓ฐ ",
77
-
"format": "{result}"
78
-
},
79
-
{
80
-
"type": "custom",
81
-
"format": "\u001b[0;38;2;203;166;247mโฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ\u001b[0m"
82
-
}
83
-
]
84
-
}
-184
external/config/hypr/hyprland.conf
-184
external/config/hypr/hyprland.conf
···
1
-
monitor = HDMI-A-1, 1920x1080, 0x0, 1
2
-
3
-
env = LIBVA_DRIVER_NAME,nvidia
4
-
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
5
-
6
-
exec-once = hyprctl setcursor 'catppuccin-mocha-dark-cursors' 24
7
-
exec-once = hyprpaper &
8
-
exec-once = waybar &
9
-
exec-once = [workspace 10 silent] vesktop
10
-
11
-
env = XCURSOR_THEME,catppuccin-mocha-dark-cursors
12
-
env = HYPRCURSOR_THEME,catppuccin-mocha-dark-cursors
13
-
env = XCURSOR_SIZE,24
14
-
env = HYPRCURSOR_SIZE,24
15
-
16
-
###################
17
-
### PERMISSIONS ###
18
-
###################
19
-
20
-
# See https://wiki.hyprland.org/Configuring/Permissions/
21
-
# Please note permission changes here require a Hyprland restart and are not applied on-the-fly
22
-
# for security reasons
23
-
24
-
# ecosystem {
25
-
# enforce_permissions = 1
26
-
# }
27
-
28
-
# permission = /usr/(bin|local/bin)/grim, screencopy, allow
29
-
# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
30
-
# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
31
-
32
-
general {
33
-
gaps_in = 5
34
-
gaps_out = 5
35
-
36
-
border_size = 2
37
-
38
-
col.active_border = rgb(b4befe)
39
-
col.inactive_border = rgb(313244)
40
-
41
-
resize_on_border = false
42
-
43
-
allow_tearing = false
44
-
45
-
layout = master
46
-
}
47
-
48
-
decoration {
49
-
active_opacity = 1.0
50
-
inactive_opacity = 1.0
51
-
52
-
shadow {
53
-
enabled = false
54
-
}
55
-
56
-
blur {
57
-
enabled = false
58
-
}
59
-
}
60
-
61
-
animations {
62
-
enabled = yes, please :)
63
-
64
-
bezier = easeOutQuint,0.23,1,0.32,1
65
-
bezier = easeInOutCubic,0.65,0.05,0.36,1
66
-
bezier = linear,0,0,1,1
67
-
bezier = almostLinear,0.5,0.5,0.75,1.0
68
-
bezier = quick,0.15,0,0.1,1
69
-
70
-
animation = global, 1, 10, default
71
-
animation = border, 1, 5.39, easeOutQuint
72
-
animation = windows, 1, 4.79, easeOutQuint
73
-
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
74
-
animation = windowsOut, 1, 1.49, linear, popin 87%
75
-
animation = fadeIn, 1, 1.73, almostLinear
76
-
animation = fadeOut, 1, 1.46, almostLinear
77
-
animation = fade, 1, 3.03, quick
78
-
animation = layers, 1, 3.81, easeOutQuint
79
-
animation = layersIn, 1, 4, easeOutQuint, fade
80
-
animation = layersOut, 1, 1.5, linear, fade
81
-
animation = fadeLayersIn, 1, 1.79, almostLinear
82
-
animation = fadeLayersOut, 1, 1.39, almostLinear
83
-
animation = workspaces, 1, 1.94, almostLinear, fade
84
-
animation = workspacesIn, 1, 1.21, almostLinear, fade
85
-
animation = workspacesOut, 1, 1.94, almostLinear, fade
86
-
}
87
-
88
-
master {
89
-
new_status = slave
90
-
}
91
-
92
-
misc {
93
-
disable_hyprland_logo = true
94
-
}
95
-
96
-
input {
97
-
kb_layout = pl
98
-
99
-
follow_mouse = 1
100
-
101
-
accel_profile = flat
102
-
force_no_accel = true
103
-
sensitivity = 0
104
-
105
-
repeat_delay = 180
106
-
repeat_rate = 60
107
-
108
-
touchpad {
109
-
natural_scroll = false
110
-
}
111
-
}
112
-
113
-
cursor {
114
-
no_warps = true
115
-
}
116
-
117
-
gestures {
118
-
workspace_swipe = true
119
-
}
120
-
121
-
xwayland {
122
-
force_zero_scaling = true
123
-
}
124
-
125
-
opengl {
126
-
nvidia_anti_flicker = true
127
-
}
128
-
129
-
$mainMod = SUPER
130
-
131
-
bind = $mainMod, RETURN, exec, kitty
132
-
bind = $mainMod SHIFT, C, killactive,
133
-
bind = $mainMod SHIFT, Q, exit,
134
-
bind = $mainMod, SPACE, togglefloating,
135
-
bind = $mainMod SHIFT, RETURN, exec, rofi -show drun
136
-
bind = $mainMod, F, fullscreen
137
-
138
-
bind = $mainMod, H, movefocus, l
139
-
bind = $mainMod, L, movefocus, r
140
-
bind = $mainMod, K, movefocus, u
141
-
bind = $mainMod, J, movefocus, d
142
-
143
-
bind = $mainMod, 1, workspace, 1
144
-
bind = $mainMod, 2, workspace, 2
145
-
bind = $mainMod, 3, workspace, 3
146
-
bind = $mainMod, 4, workspace, 4
147
-
bind = $mainMod, 5, workspace, 5
148
-
bind = $mainMod, 6, workspace, 6
149
-
bind = $mainMod, 7, workspace, 7
150
-
bind = $mainMod, 8, workspace, 8
151
-
bind = $mainMod, 9, workspace, 9
152
-
bind = $mainMod, 0, workspace, 10
153
-
154
-
bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1
155
-
bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2
156
-
bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3
157
-
bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4
158
-
bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5
159
-
bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6
160
-
bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7
161
-
bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8
162
-
bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9
163
-
bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10
164
-
165
-
bindm = $mainMod, mouse:272, movewindow
166
-
bindm = $mainMod, mouse:273, resizewindow
167
-
168
-
bind = ,Print, exec, grim -g "$(slurp)" - | wl-copy
169
-
170
-
bindl = , XF86AudioNext, exec, playerctl next
171
-
bindl = , XF86AudioPause, exec, playerctl play-pause
172
-
bindl = , XF86AudioPlay, exec, playerctl play-pause
173
-
bindl = , XF86AudioPrev, exec, playerctl previous
174
-
175
-
windowrule = workspacesilent 10, class:vesktop
176
-
windowrule = workspacesilent 9, class:spotify
177
-
178
-
windowrule = suppressevent maximize, class:.*
179
-
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
180
-
181
-
windowrulev2 = size 800 450, title:(Picture-in-Picture|Discord Popout)
182
-
windowrulev2 = move 1120 630, title:(Picture-in-Picture|Discord Popout)
183
-
windowrulev2 = float, title:(Picture-in-Picture|Discord Popout)
184
-
windowrulev2 = pin, title:^(Picture-in-Picture|Discord Popout)
-2
external/config/hypr/hyprpaper.conf
-2
external/config/hypr/hyprpaper.conf
+58
external/config/quickshell/Modules/Bar/Bar.qml
+58
external/config/quickshell/Modules/Bar/Bar.qml
···
1
+
import QtQuick
2
+
import QtQuick.Layouts
3
+
import Quickshell
4
+
5
+
PanelWindow {
6
+
anchors {
7
+
top: true
8
+
left: true
9
+
right: true
10
+
}
11
+
12
+
implicitHeight: 30
13
+
color: colBase
14
+
15
+
Workspaces {
16
+
anchors {
17
+
verticalCenter: parent.verticalCenter
18
+
left: parent.left
19
+
leftMargin: 10
20
+
}
21
+
}
22
+
23
+
Music {
24
+
anchors.centerIn: parent
25
+
}
26
+
27
+
RowLayout {
28
+
anchors {
29
+
verticalCenter: parent.verticalCenter
30
+
right: parent.right
31
+
rightMargin: 10
32
+
}
33
+
34
+
Txt {
35
+
id: timeTxt
36
+
text: Qt.formatDateTime(new Date(), "hh:mm AP")
37
+
38
+
Timer {
39
+
interval: 10000
40
+
running: true
41
+
repeat: true
42
+
onTriggered: timeTxt.text = Qt.formatDateTime(new Date(), "hh:mm AP")
43
+
}
44
+
}
45
+
Spacer {}
46
+
Txt {
47
+
id: dateTxt
48
+
text: Qt.formatDateTime(new Date(), "yyyy-MM-dd")
49
+
50
+
Timer {
51
+
interval: 600000
52
+
running: true
53
+
repeat: true
54
+
onTriggered: dateTxt.text = Qt.formatDateTime(new Date(), "yyyy-MM-dd")
55
+
}
56
+
}
57
+
}
58
+
}
+45
external/config/quickshell/Modules/Bar/Music.qml
+45
external/config/quickshell/Modules/Bar/Music.qml
···
1
+
import QtQuick
2
+
import QtQuick.Layouts
3
+
import Quickshell.Io
4
+
5
+
RowLayout {
6
+
Txt {
7
+
id: musicArtistTxt
8
+
}
9
+
Txt {
10
+
text: if (musicArtistTxt.text !== "" && musicTitleTxt.text !== "") {
11
+
" ๓ฐ ";
12
+
} else {
13
+
"๎ปญ";
14
+
}
15
+
color: colOverlay
16
+
}
17
+
Txt {
18
+
id: musicTitleTxt
19
+
}
20
+
21
+
Process {
22
+
id: musicProc
23
+
running: true
24
+
command: ["playerctl", "metadata", "--format", "{{ artist }} || {{ title }}"]
25
+
stdout: StdioCollector {
26
+
onStreamFinished: {
27
+
let parts = this.text.trim().split(" || ");
28
+
if (parts.length === 2) {
29
+
musicArtistTxt.text = parts[0];
30
+
musicTitleTxt.text = parts[1];
31
+
} else {
32
+
musicArtistTxt.text = "";
33
+
musicTitleTxt.text = "";
34
+
}
35
+
}
36
+
}
37
+
}
38
+
39
+
Timer {
40
+
interval: 5000
41
+
running: true
42
+
repeat: true
43
+
onTriggered: musicProc.running = true
44
+
}
45
+
}
+9
external/config/quickshell/Modules/Bar/Spacer.qml
+9
external/config/quickshell/Modules/Bar/Spacer.qml
+7
external/config/quickshell/Modules/Bar/Txt.qml
+7
external/config/quickshell/Modules/Bar/Txt.qml
+17
external/config/quickshell/Modules/Bar/Workspaces.qml
+17
external/config/quickshell/Modules/Bar/Workspaces.qml
+15
external/config/quickshell/Services/Niri/Niri.qml
+15
external/config/quickshell/Services/Niri/Niri.qml
···
1
+
import Quickshell
2
+
import Quickshell.Io
3
+
4
+
import "niri.mjs" as Niri
5
+
6
+
Process {
7
+
id: niriEventStream
8
+
running: true
9
+
command: ["niri", "msg", "--json", "event-stream"]
10
+
stdout: SplitParser {
11
+
onRead: data => {
12
+
Niri.handleEvent(data, root);
13
+
}
14
+
}
15
+
}
+7
external/config/quickshell/Services/Niri/niri.mjs
+7
external/config/quickshell/Services/Niri/niri.mjs
+31
external/config/quickshell/shell.qml
+31
external/config/quickshell/shell.qml
···
1
+
import QtQuick
2
+
import Quickshell
3
+
4
+
import "Modules/Bar"
5
+
import "Services/Niri"
6
+
7
+
ShellRoot {
8
+
id: root
9
+
10
+
property color colBase: "#1e1e2e"
11
+
property color colText: "#cdd6f4"
12
+
property color colOverlay: "#6c7086"
13
+
property color colAccent: "#b4befe"
14
+
property color colSecond: "#cba6f7"
15
+
16
+
property string fontFamily: "Maple Mono NF"
17
+
property int fontSize: 14
18
+
19
+
property int wmWSC
20
+
property int wmWSA
21
+
22
+
LazyLoader {
23
+
active: true
24
+
component: Niri {}
25
+
}
26
+
27
+
LazyLoader {
28
+
active: true
29
+
component: Bar {}
30
+
}
31
+
}
-17
external/scripts/ff.sh
-17
external/scripts/ff.sh
···
1
-
#! /usr/bin/env bash
2
-
3
-
set -eo pipefail
4
-
5
-
if [[ -n $FF_SKIP ]]; then
6
-
FF_SKIP=
7
-
exit 0
8
-
fi
9
-
10
-
kitget_output="$(mktemp --suffix=-kitget.png)"
11
-
12
-
if [[ -n $FF_NO_KITGET ]] || ! kitget --square -o "$kitget_output" &>/dev/null; then
13
-
fastfetch --logo nixos_small --logo-padding-top 3 "$@"
14
-
else
15
-
fastfetch --kitty "$kitget_output" "$@"
16
-
rm -f "$kitget_output"
17
-
fi
+1
-1
external/zsh/functions.zsh
+1
-1
external/zsh/functions.zsh
+2
external/zsh/prompt.zsh
+2
external/zsh/prompt.zsh
+105
-64
flake.lock
+105
-64
flake.lock
···
29
29
},
30
30
"anvim": {
31
31
"inputs": {
32
+
"neovim-nightly": "neovim-nightly",
32
33
"nixpkgs": [
33
34
"nixpkgs"
34
35
]
35
36
},
36
37
"locked": {
37
-
"lastModified": 1764513266,
38
-
"narHash": "sha256-Ry3v336Fzvmkh+WRb16+nJ1iaImT2N9Z3oJTus4vFjQ=",
39
-
"owner": "adamperkowski",
40
-
"repo": "anvim",
41
-
"rev": "4fe81e137bb94be36708c841d2e764431dd990e5",
42
-
"type": "github"
38
+
"lastModified": 1767835245,
39
+
"narHash": "sha256-U2JarlML426gEC7cjWErNMpeF2+/XkW2HX5D6VOARu8=",
40
+
"rev": "0e89ca2859ae7d24b6d8f3311895e995313007b1",
41
+
"type": "tarball",
42
+
"url": "https://codeberg.org/api/v1/repos/koibtw/anvim/archive/0e89ca2859ae7d24b6d8f3311895e995313007b1.tar.gz?rev=0e89ca2859ae7d24b6d8f3311895e995313007b1"
43
+
},
44
+
"original": {
45
+
"type": "tarball",
46
+
"url": "https://codeberg.org/koibtw/anvim/archive/main.tar.gz"
47
+
}
48
+
},
49
+
"cuteff": {
50
+
"inputs": {
51
+
"nixpkgs": [
52
+
"nixpkgs"
53
+
]
54
+
},
55
+
"locked": {
56
+
"lastModified": 1766788905,
57
+
"narHash": "sha256-rOQZos+yJSiHg+G4iB9lXO+u7PPFYgkV/65b6yPS2w0=",
58
+
"rev": "71c9288c5d981f981bb6a42e5bc17a14dc2e9eb8",
59
+
"type": "tarball",
60
+
"url": "https://codeberg.org/api/v1/repos/koibtw/cuteff/archive/71c9288c5d981f981bb6a42e5bc17a14dc2e9eb8.tar.gz?rev=71c9288c5d981f981bb6a42e5bc17a14dc2e9eb8"
43
61
},
44
62
"original": {
45
-
"owner": "adamperkowski",
46
-
"repo": "anvim",
47
-
"type": "github"
63
+
"type": "tarball",
64
+
"url": "https://codeberg.org/koibtw/cuteff/archive/main.tar.gz"
48
65
}
49
66
},
50
67
"darwin": {
···
69
86
"type": "github"
70
87
}
71
88
},
89
+
"flake-parts": {
90
+
"inputs": {
91
+
"nixpkgs-lib": [
92
+
"anvim",
93
+
"neovim-nightly",
94
+
"nixpkgs"
95
+
]
96
+
},
97
+
"locked": {
98
+
"lastModified": 1765835352,
99
+
"narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=",
100
+
"owner": "hercules-ci",
101
+
"repo": "flake-parts",
102
+
"rev": "a34fae9c08a15ad73f295041fec82323541400a9",
103
+
"type": "github"
104
+
},
105
+
"original": {
106
+
"owner": "hercules-ci",
107
+
"repo": "flake-parts",
108
+
"type": "github"
109
+
}
110
+
},
72
111
"flake-utils": {
73
112
"inputs": {
74
113
"systems": "systems"
···
94
133
]
95
134
},
96
135
"locked": {
97
-
"lastModified": 1764536451,
98
-
"narHash": "sha256-BgtcUkBfItu9/yU14IgUaj4rYOanTOUZjUfBP20/ZB4=",
136
+
"lastModified": 1767619900,
137
+
"narHash": "sha256-KpoCBPvwHz3gAQtIUkohE2InRBFK3r0/FM6z5SPWfvM=",
99
138
"owner": "nix-community",
100
139
"repo": "home-manager",
101
-
"rev": "3fdd076e08049a9c7a83149b270440d9787d2df5",
140
+
"rev": "6bd04da47cfb48dfd15eabf08364b78ad894f5b2",
102
141
"type": "github"
103
142
},
104
143
"original": {
···
131
170
"type": "github"
132
171
}
133
172
},
173
+
"neovim-nightly": {
174
+
"inputs": {
175
+
"flake-parts": "flake-parts",
176
+
"neovim-src": "neovim-src",
177
+
"nixpkgs": [
178
+
"anvim",
179
+
"nixpkgs"
180
+
]
181
+
},
182
+
"locked": {
183
+
"lastModified": 1767225850,
184
+
"narHash": "sha256-gmoKSWO4DM/VnlskS9UmQnXyZTm0xcl4cDx3e/CJZeY=",
185
+
"owner": "nix-community",
186
+
"repo": "neovim-nightly-overlay",
187
+
"rev": "dfbb35b3cf396ead65028b7023f07f51927f86e3",
188
+
"type": "github"
189
+
},
190
+
"original": {
191
+
"owner": "nix-community",
192
+
"repo": "neovim-nightly-overlay",
193
+
"type": "github"
194
+
}
195
+
},
196
+
"neovim-src": {
197
+
"flake": false,
198
+
"locked": {
199
+
"lastModified": 1767222005,
200
+
"narHash": "sha256-SewYGH53QWyiHBNCxJuyESu/D7v0tXi2oq3NREI/AeA=",
201
+
"owner": "neovim",
202
+
"repo": "neovim",
203
+
"rev": "170992c8d218f28dcffd967ecc2bae3fb3c46545",
204
+
"type": "github"
205
+
},
206
+
"original": {
207
+
"owner": "neovim",
208
+
"repo": "neovim",
209
+
"type": "github"
210
+
}
211
+
},
134
212
"niri": {
135
213
"inputs": {
136
214
"niri-stable": "niri-stable",
137
215
"niri-unstable": "niri-unstable",
138
216
"nixpkgs": [
139
-
"nixpkgs-unstable"
217
+
"nixpkgs"
140
218
],
141
219
"nixpkgs-stable": [
142
220
"nixpkgs"
···
145
223
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
146
224
},
147
225
"locked": {
148
-
"lastModified": 1764488513,
149
-
"narHash": "sha256-xBUnv+ndZxRbY9mYSPEP0afaZRUVXDFcJx0WMD4ypfs=",
226
+
"lastModified": 1767544157,
227
+
"narHash": "sha256-DVTMOUd4uHkDcZXWAqOS+Pa0M9a27G1Ya3B7SFG6BQs=",
150
228
"owner": "sodiboo",
151
229
"repo": "niri-flake",
152
-
"rev": "9e3bbd170669d10846bae68d23dabef11832f8f2",
230
+
"rev": "d0e2c4bebf9d0b879410736f7abce628976bfb92",
153
231
"type": "github"
154
232
},
155
233
"original": {
···
178
256
"niri-unstable": {
179
257
"flake": false,
180
258
"locked": {
181
-
"lastModified": 1764485473,
182
-
"narHash": "sha256-RlGEcuZFB/IdvYLrYsf0RpgvNtCMyIuBLt3lS+GZvP8=",
259
+
"lastModified": 1767530622,
260
+
"narHash": "sha256-ywnL1cc0A6fni7m859ImiBYA8DlXXJ+5OXIlcBqJ2B0=",
183
261
"owner": "YaLTeR",
184
262
"repo": "niri",
185
-
"rev": "311ca6b5da19f5acd7d3e481620de57240ce8f7c",
263
+
"rev": "54c2e2ab476629d17fdba861895f58e7cdac32ab",
186
264
"type": "github"
187
265
},
188
266
"original": {
···
207
285
"type": "github"
208
286
}
209
287
},
210
-
"nixpkgs-unstable": {
211
-
"locked": {
212
-
"lastModified": 1764527385,
213
-
"narHash": "sha256-gpwyCnyi2or0InBXe+4I9YeED3Uly3EGH58qvVnchBY=",
214
-
"rev": "23258e03aaa49b3a68597e3e50eb0cbce7e42e9d",
215
-
"type": "tarball",
216
-
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre904683.23258e03aaa4/nixexprs.tar.xz?lastModified=1764527385&rev=23258e03aaa49b3a68597e3e50eb0cbce7e42e9d"
217
-
},
218
-
"original": {
219
-
"type": "tarball",
220
-
"url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"
221
-
}
222
-
},
223
288
"nixpkgs_2": {
224
289
"locked": {
225
-
"lastModified": 1764494334,
226
-
"narHash": "sha256-MtiuWNmHyb23Fuv2ggpZpp+48/pr2C4lEhLejAeO9rE=",
227
-
"rev": "d542db745310b6929708d9abea513f3ff19b1341",
290
+
"lastModified": 1767480499,
291
+
"narHash": "sha256-EFkzO1bnguFRUEeNvdkkGEU/P35obLVp+36NuaIQSr8=",
292
+
"rev": "30a3c519afcf3f99e2c6df3b359aec5692054d92",
228
293
"type": "tarball",
229
-
"url": "https://releases.nixos.org/nixos/25.11/nixos-25.11.612.d542db745310/nixexprs.tar.xz?lastModified=1764494334&rev=d542db745310b6929708d9abea513f3ff19b1341"
294
+
"url": "https://releases.nixos.org/nixos/25.11/nixos-25.11.3202.30a3c519afcf/nixexprs.tar.xz?lastModified=1767480499&rev=30a3c519afcf3f99e2c6df3b359aec5692054d92"
230
295
},
231
296
"original": {
232
297
"type": "tarball",
···
237
302
"inputs": {
238
303
"agenix": "agenix",
239
304
"anvim": "anvim",
305
+
"cuteff": "cuteff",
240
306
"home-manager": "home-manager",
241
307
"iamb": "iamb",
242
308
"niri": "niri",
243
309
"nixpkgs": "nixpkgs_2",
244
-
"nixpkgs-unstable": "nixpkgs-unstable",
245
-
"spicetify-nix": "spicetify-nix",
246
310
"systems": "systems_2"
247
311
}
248
312
},
···
264
328
"type": "github"
265
329
}
266
330
},
267
-
"spicetify-nix": {
268
-
"inputs": {
269
-
"nixpkgs": [
270
-
"nixpkgs"
271
-
],
272
-
"systems": [
273
-
"systems"
274
-
]
275
-
},
276
-
"locked": {
277
-
"lastModified": 1763985453,
278
-
"narHash": "sha256-vUqODgLIjeyHN7DP8dVx7oH9yB/L8qcxpN//4EmMQcM=",
279
-
"owner": "Gerg-L",
280
-
"repo": "spicetify-nix",
281
-
"rev": "89cd40c646ec5b12e5c20c0e18f082e7629d4819",
282
-
"type": "github"
283
-
},
284
-
"original": {
285
-
"owner": "Gerg-L",
286
-
"repo": "spicetify-nix",
287
-
"type": "github"
288
-
}
289
-
},
290
331
"systems": {
291
332
"locked": {
292
333
"lastModified": 1681028828,
···
337
378
"xwayland-satellite-unstable": {
338
379
"flake": false,
339
380
"locked": {
340
-
"lastModified": 1764366786,
341
-
"narHash": "sha256-yVCJ4Qe/JkdKDu0DddFdAQgDQVeF12nxH7zv3jtooV4=",
381
+
"lastModified": 1766429945,
382
+
"narHash": "sha256-9Kv4gWagx/u4RfZJzBMAoagW9ava5waxd+XoTkzqF7E=",
342
383
"owner": "Supreeeme",
343
384
"repo": "xwayland-satellite",
344
-
"rev": "b362a3873710a42f7ac2d8ba03772d8290733934",
385
+
"rev": "0dde7ca1d3a8e8c5082533d76084e2aa02bef70e",
345
386
"type": "github"
346
387
},
347
388
"original": {
+9
-10
flake.nix
+9
-10
flake.nix
···
3
3
4
4
inputs = {
5
5
nixpkgs.url = "https://channels.nixos.org/nixos-25.11/nixexprs.tar.xz";
6
-
nixpkgs-unstable.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
6
+
# nixpkgs-unstable.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
7
7
systems.url = "github:nix-systems/default";
8
8
9
9
home-manager = {
···
12
12
};
13
13
14
14
anvim = {
15
-
url = "github:adamperkowski/anvim";
15
+
url = "https://codeberg.org/koibtw/anvim/archive/main.tar.gz";
16
+
inputs.nixpkgs.follows = "nixpkgs";
17
+
};
18
+
19
+
cuteff = {
20
+
url = "https://codeberg.org/koibtw/cuteff/archive/main.tar.gz";
16
21
inputs.nixpkgs.follows = "nixpkgs";
17
22
};
18
23
19
24
niri = {
20
25
url = "github:sodiboo/niri-flake";
21
-
inputs.nixpkgs.follows = "nixpkgs-unstable";
26
+
# inputs.nixpkgs.follows = "nixpkgs-unstable";
27
+
inputs.nixpkgs.follows = "nixpkgs";
22
28
inputs.nixpkgs-stable.follows = "nixpkgs";
23
29
};
24
30
25
31
iamb = {
26
32
url = "github:ulyssa/iamb/v0.0.11-alpha.1";
27
33
inputs.nixpkgs.follows = "nixpkgs";
28
-
};
29
-
30
-
spicetify-nix = {
31
-
url = "github:Gerg-L/spicetify-nix";
32
-
inputs.nixpkgs.follows = "nixpkgs";
33
-
inputs.systems.follows = "systems";
34
34
};
35
35
36
36
agenix = {
···
59
59
};
60
60
61
61
mkDesktopHost = name: mkHost name [ ./modules/desktop ];
62
-
mkServerHost = name: mkHost name;
63
62
in
64
63
{
65
64
nixosConfigurations = {
+29
formatter.nix
+29
formatter.nix
···
3
3
pkgs.treefmt.withConfig {
4
4
runtimeInputs = with pkgs; [
5
5
nixfmt-rfc-style
6
+
js-beautify
6
7
shfmt
8
+
kdePackages.qtdeclarative
7
9
];
8
10
9
11
settings = {
···
16
18
includes = [ "*.nix" ];
17
19
};
18
20
21
+
js-beautify = {
22
+
command = "js-beautify";
23
+
options = [
24
+
"--replace"
25
+
"--editorconfig"
26
+
"--jslint-happy"
27
+
"--max-preserve-newlines"
28
+
"2"
29
+
];
30
+
includes = [
31
+
"*.js"
32
+
"*.mjs"
33
+
"*.css"
34
+
];
35
+
};
36
+
19
37
shfmt = {
20
38
command = "shfmt";
21
39
options = [ "-w" ];
···
24
42
"*.bash"
25
43
# "*.zsh" # https://github.com/mvdan/sh/issues/120
26
44
];
45
+
};
46
+
47
+
qmlformat = {
48
+
command = "qmlformat";
49
+
options = [
50
+
"--inplace"
51
+
"--sort-imports"
52
+
"--indent-width"
53
+
"2"
54
+
];
55
+
includes = [ "*.qml" ];
27
56
};
28
57
};
29
58
};
-17
home/adam.nix
-17
home/adam.nix
···
1
-
{
2
-
home = {
3
-
username = "adam";
4
-
homeDirectory = "/home/adam";
5
-
stateVersion = "25.11";
6
-
};
7
-
8
-
imports = [
9
-
./modules/external.nix
10
-
./modules/xdg.nix
11
-
./modules/age.nix
12
-
./modules/theme.nix
13
-
./modules/packages.nix
14
-
./modules/wallpaper.nix
15
-
./modules/programs
16
-
];
17
-
}
+17
home/koi.nix
+17
home/koi.nix
···
1
+
{
2
+
home = {
3
+
username = "koi";
4
+
homeDirectory = "/home/koi";
5
+
stateVersion = "25.11";
6
+
};
7
+
8
+
imports = [
9
+
./modules/external.nix
10
+
./modules/xdg.nix
11
+
./modules/age.nix
12
+
./modules/theme.nix
13
+
./modules/packages.nix
14
+
./modules/wallpaper.nix
15
+
./modules/programs
16
+
];
17
+
}
+3
-2
home/modules/packages.nix
+3
-2
home/modules/packages.nix
···
3
3
{
4
4
home.packages = with pkgs; [
5
5
nix-output-monitor
6
+
jellyfin-mpv-shim
6
7
jellyfin-tui
7
8
prettyping
8
-
fastfetch
9
9
playerctl
10
10
lsd
11
11
jq
12
12
gh
13
+
codeberg-cli
13
14
14
15
signal-desktop
15
16
16
17
noto-fonts
17
18
noto-fonts-cjk-sans
18
19
noto-fonts-color-emoji
19
-
nerd-fonts.fira-code
20
+
maple-mono.NF
20
21
21
22
wl-clipboard
22
23
+3
-1
home/modules/programs/chromium.nix
+3
-1
home/modules/programs/chromium.nix
···
4
4
programs.chromium = {
5
5
enable = true;
6
6
extensions = [
7
-
"fgmjlmbojbkmdpofahffgcpkhkngfpef" # Startpage
7
+
"jegbdohdgebjljoljfeinojeobdabpjo" # Redirector
8
8
"bgnkhhnnamicmpeenaelnjfhikgbkllg" # AdGuard AdBlocker
9
+
"nngceckbapebfimnlniiiahkandclblb" # Bitwarden Password Manager
10
+
"hkgfoiooedgoejojocmhlaklaeopbecg" # Picture-in-Picture Extension (by Google)
9
11
"bkkmolkhemgaeaeggcmfbghljjjoofoh" # Catppuccin Chrome Theme - Mocha
10
12
"lnjaiaapbakfhlbjenjkhffcdpoompki" # Catppuccin for Web File Explorer Icons
11
13
"kaalofacklcidaampbokdplbklpeldpj" # Wide GitHub
+43
home/modules/programs/cuteff.nix
+43
home/modules/programs/cuteff.nix
···
1
+
{ inputs, ... }:
2
+
3
+
{
4
+
imports = [ inputs.cuteff.homeManagerModules.default ];
5
+
programs.cuteff = {
6
+
enable = true;
7
+
settings = {
8
+
padding = 2;
9
+
paddingTop = 1;
10
+
paddingBottom = 1;
11
+
12
+
colors = {
13
+
"1" = "180;190;254";
14
+
"2" = "203;166;247";
15
+
};
16
+
17
+
headerCats = true;
18
+
19
+
modules = [
20
+
{
21
+
name = "๏ฝ user";
22
+
stat = "username";
23
+
}
24
+
{
25
+
name = "๏ณ host";
26
+
stat = "hostname";
27
+
}
28
+
{
29
+
name = "๏พ uptime";
30
+
stat = "uptime";
31
+
}
32
+
{
33
+
name = "๎ทฉ distro";
34
+
stat = "distro";
35
+
}
36
+
{
37
+
name = "๏ kernel";
38
+
stat = "kernel";
39
+
}
40
+
];
41
+
};
42
+
};
43
+
}
+4
-2
home/modules/programs/default.nix
+4
-2
home/modules/programs/default.nix
···
1
1
{
2
2
imports = [
3
3
./git.nix
4
+
./fzf.nix
4
5
./zsh.nix
5
6
./iamb.nix
6
7
./direnv.nix
7
8
./zoxide.nix
8
9
./neovim.nix
10
+
./cuteff.nix
9
11
./jellyfin-rpc.nix
10
12
11
13
./niri.nix
12
14
13
15
./swww.nix
14
16
./rofi.nix
15
-
./kitty.nix
17
+
./foot.nix
16
18
./dunst.nix
17
-
./waybar.nix
19
+
./quickshell.nix
18
20
19
21
./vesktop.nix
20
22
./chromium.nix
+1
-1
home/modules/programs/dunst.nix
+1
-1
home/modules/programs/dunst.nix
+26
home/modules/programs/foot.nix
+26
home/modules/programs/foot.nix
···
1
+
{ pkgs, ... }:
2
+
3
+
let
4
+
catppuccin = pkgs.fetchurl {
5
+
url = "https://raw.githubusercontent.com/catppuccin/foot/8d263e0e6b58a6b9ea507f71e4dbf6870aaf8507/themes/catppuccin-mocha.ini";
6
+
hash = "sha256-rVWISDKhJfH1mbEkFEQ6JSq3fFmZk86EJgKS694LbOs=";
7
+
};
8
+
in
9
+
{
10
+
programs.foot = {
11
+
enable = true;
12
+
server.enable = true;
13
+
settings = {
14
+
main = {
15
+
include = builtins.toString catppuccin;
16
+
font = "Maple Mono NF:pixelsize=15";
17
+
dpi-aware = "yes";
18
+
};
19
+
cursor = {
20
+
style = "beam";
21
+
blink = "yes";
22
+
};
23
+
colors.cursor = "11111b b4befe";
24
+
};
25
+
};
26
+
}
+30
home/modules/programs/fzf.nix
+30
home/modules/programs/fzf.nix
···
1
+
{
2
+
programs.fzf = {
3
+
enable = true;
4
+
enableZshIntegration = true;
5
+
6
+
colors = {
7
+
bg = "#1e1e2e";
8
+
"bg+" = "#313244";
9
+
selected-bg = "#45475a";
10
+
fg = "#cdd6f4";
11
+
"fg+" = "#cdd6f4";
12
+
label = "#cdd6f4";
13
+
hl = "#cba6f7";
14
+
"hl+" = "#cba6f7";
15
+
header = "#f38ba8";
16
+
info = "#b4befe";
17
+
prompt = "#b4befe";
18
+
border = "#6c7086";
19
+
marker = "#a6adc8";
20
+
pointer = "#a6adc8";
21
+
spinner = "#a6adc8";
22
+
};
23
+
24
+
defaultOptions = [
25
+
"--height=30%"
26
+
"--info=inline"
27
+
"--layout=reverse"
28
+
];
29
+
};
30
+
}
+10
home/modules/programs/git.nix
+10
home/modules/programs/git.nix
···
51
51
remoteBranch = "magenta";
52
52
};
53
53
54
+
commit.template = "~/.gitmessage";
54
55
init.defaultBranch = "main";
55
56
};
56
57
};
···
61
62
};
62
63
};
63
64
65
+
home.file.".gitmessage".text = ''
66
+
67
+
68
+
# remember to set commit author to pr author when merging
69
+
# Reviewed-on:
70
+
# Reviewed-by: koi <me@koi.rip>
71
+
# Signed-off-by: koi <me@koi.rip>
72
+
# Co-authored-by: user <user@users.noreply.github.com>
73
+
'';
64
74
}
+11
-2
home/modules/programs/iamb.nix
+11
-2
home/modules/programs/iamb.nix
···
6
6
package = inputs.iamb.packages.${pkgs.stdenv.system}.default;
7
7
8
8
settings = {
9
-
profiles.user.user_id = "@adam:matrix.system72.dev";
9
+
profiles.user.user_id = "@koi:system72.dev";
10
10
dirs.downloads = "/tmp/downloads";
11
11
settings = {
12
+
user_gutter_width = 20;
12
13
username_display = "displayname";
14
+
typing_notice_send = false;
13
15
notifications.enabled = true;
14
-
image_preview.protocol.type = "kitty";
16
+
image_preview.protocol.type = "sixel";
17
+
layout.style = "restore";
18
+
sort.rooms = [
19
+
"favorite"
20
+
"recent"
21
+
"unread"
22
+
"name"
23
+
];
15
24
};
16
25
};
17
26
};
-18
home/modules/programs/kitty.nix
-18
home/modules/programs/kitty.nix
···
1
-
{
2
-
programs.kitty = {
3
-
enable = true;
4
-
themeFile = "Catppuccin-Mocha";
5
-
font.name = "Fira Code Nerd Font";
6
-
shellIntegration.enableZshIntegration = true;
7
-
shellIntegration.mode = "no-rc no-cursor";
8
-
settings = {
9
-
cursor = "#b4befe";
10
-
cursor_shape = "beam";
11
-
cursor_shape_unfocused = "hollow";
12
-
cursor_trail = 1;
13
-
cursor_trail_decay = "0.05 0.2";
14
-
cursor_trail_start_threshold = 2;
15
-
enable_audio_bell = false;
16
-
};
17
-
};
18
-
}
-6
home/modules/programs/neovim.nix
-6
home/modules/programs/neovim.nix
+2
-8
home/modules/programs/niri.nix
+2
-8
home/modules/programs/niri.nix
···
11
11
programs.niri.settings = {
12
12
spawn-at-startup = [
13
13
{ argv = [ "swww img ~/.wallpaper.jpg" ]; }
14
-
{ argv = [ "waybar" ]; }
15
-
{ argv = [ "sleep 2; vesktop" ]; }
16
14
];
17
15
18
16
screenshot-path = "~/screenshots/%Y-%m-%d_%H-%M-%S.png";
···
128
126
open-maximized = true;
129
127
}
130
128
{
131
-
matches = [ { app-id = "^steam"; } ];
132
-
open-on-workspace = "3";
133
-
open-maximized = true;
134
-
}
135
-
{
136
129
matches = [ { title = "^(Picture in picture|Picture-in-Picture|Discord Popout)"; } ];
137
130
default-column-width.fixed = 800;
138
131
default-window-height.fixed = 450;
139
132
open-floating = true;
133
+
open-focused = false;
140
134
default-floating-position = {
141
135
x = 0;
142
136
y = 0;
···
164
158
binds = {
165
159
"mod+shift+slash".action.show-hotkey-overlay = [ ];
166
160
167
-
"mod+return".action.spawn = [ "kitty" ];
161
+
"mod+return".action.spawn = [ "footclient" ];
168
162
"mod+shift+return".action.spawn = [
169
163
"rofi"
170
164
"-show"
+6
home/modules/programs/quickshell.nix
+6
home/modules/programs/quickshell.nix
+3
-3
home/modules/programs/rofi.nix
+3
-3
home/modules/programs/rofi.nix
···
3
3
let
4
4
catppuccinMocha = pkgs.fetchurl {
5
5
url = "https://raw.githubusercontent.com/catppuccin/rofi/71fb15577ccb091df2f4fc1f65710edbc61b5a53/themes/catppuccin-mocha.rasi";
6
-
sha256 = "0ikn0yc2b9cyzk4xga8mcq1j7xk2idik4wzpsibrphy8qr2pla4b";
6
+
hash = "sha256-iyh6RcbIw5tX1PdzMmOLYvYjA2YVqdfJ/J6lJZgHdkY=";
7
7
};
8
8
catppuccinConfig = pkgs.fetchurl {
9
9
url = "https://raw.githubusercontent.com/catppuccin/rofi/71fb15577ccb091df2f4fc1f65710edbc61b5a53/catppuccin-default.rasi";
10
-
sha256 = "1f3r6yarrykj8cxvi5hblzlr5n8zbncifnxps9xl5gl32w6ysq5z";
10
+
hash = "sha256-v2DtDReDvkJ70rdbF5ldH9mS6acLlrg7Q3L6nJU3ebg=";
11
11
};
12
12
in
13
13
{
14
14
programs.rofi = {
15
15
enable = true;
16
-
font = "FiraCode Nerd Font 14";
16
+
font = "Maple Mono NF 14";
17
17
18
18
# cool hack lmao
19
19
theme = ''
+1
-4
home/modules/programs/vesktop.nix
+1
-4
home/modules/programs/vesktop.nix
···
9
9
};
10
10
vencord.settings = {
11
11
useQuickCss = true;
12
-
themeLinks = [
13
-
"https://catppuccin.github.io/discord/dist/catppuccin-mocha-lavender.theme.css"
14
-
"https://raw.githubusercontent.com/mwittrien/BetterDiscordAddons/master/Themes/SettingsModal/SettingsModal.theme.css"
15
-
];
12
+
themeLinks = [ "https://catppuccin.github.io/discord/dist/catppuccin-mocha-lavender.theme.css" ];
16
13
plugins = {
17
14
AlwaysExpandRoles.enabled = true;
18
15
AlwaysTrust = {
-180
home/modules/programs/waybar.nix
-180
home/modules/programs/waybar.nix
···
1
-
{ pkgs, ... }:
2
-
3
-
let
4
-
catppuccin = pkgs.fetchurl {
5
-
url = "https://raw.githubusercontent.com/catppuccin/waybar/refs/tags/v1.1/themes/mocha.css";
6
-
sha256 = "puMFl8zIKOiYhE6wzqnffXOHn/VnKmpVDzrMJMk+3Rc=";
7
-
};
8
-
in
9
-
{
10
-
programs.waybar = {
11
-
enable = true;
12
-
13
-
settings = {
14
-
mainBar = {
15
-
layer = "top";
16
-
position = "top";
17
-
width = 1920;
18
-
19
-
modules-left = [
20
-
"hyprland/workspaces"
21
-
"niri/workspaces"
22
-
];
23
-
modules-center = [ "custom/music" ];
24
-
modules-right = [
25
-
"tray"
26
-
"battery"
27
-
"clock"
28
-
];
29
-
30
-
"hyprland/workspaces" = {
31
-
disable-scroll = true;
32
-
sort-by-name = true;
33
-
format = " {icon} ";
34
-
format-icons = {
35
-
"default" = "๎ฎด";
36
-
"9" = "๓ฐ";
37
-
"10" = "๏ฟ";
38
-
};
39
-
};
40
-
41
-
"niri/workspaces" = {
42
-
disable-scroll = true;
43
-
sort-by-name = true;
44
-
persistent-only = true;
45
-
persistent-workspaces = {
46
-
"1" = [ ];
47
-
"2" = [ ];
48
-
"3" = [ ];
49
-
"4" = [ ];
50
-
};
51
-
format = "{icon}";
52
-
format-icons = {
53
-
"default" = " ๎ฎด ";
54
-
"social" = " ๏ฟ ";
55
-
"5" = "";
56
-
};
57
-
};
58
-
59
-
"custom/music" = {
60
-
escape = true;
61
-
interval = 10;
62
-
tooltop = false;
63
-
exec = "playerctl metadata --format '{{ artist }} ๏ {{ title }}'";
64
-
on-click = "playerctl play-pause";
65
-
max-length = 100;
66
-
};
67
-
68
-
tray = {
69
-
icon-size = 18;
70
-
spacing = 10;
71
-
};
72
-
73
-
battery = {
74
-
states = {
75
-
warning = 30;
76
-
critical = 15;
77
-
};
78
-
format = "{icon}";
79
-
format-charging = "๓ฐ";
80
-
format-plugged = "๓ฑข";
81
-
format-alt = "{icon}";
82
-
format-icons = [
83
-
"๓ฐบ"
84
-
"๓ฐป"
85
-
"๓ฐผ"
86
-
"๓ฐฝ"
87
-
"๓ฐพ"
88
-
"๓ฐฟ"
89
-
"๓ฐ"
90
-
"๓ฐ"
91
-
"๓ฐ"
92
-
"๓ฐน"
93
-
];
94
-
};
95
-
96
-
clock = {
97
-
timezone = "Europe/Warsaw";
98
-
format = "{:%H:%M}";
99
-
tooltip-format = "<big>{:%B %d}</big>\n<tt><small>{calendar}</small></tt>";
100
-
};
101
-
};
102
-
};
103
-
104
-
style = ''
105
-
@import "${catppuccin}";
106
-
107
-
* {
108
-
font-family: 'Fira Code Nerd Font', monospace;
109
-
font-size: 14px;
110
-
border: none;
111
-
border-radius: 0;
112
-
min-height: 0;
113
-
}
114
-
115
-
#waybar {
116
-
background: transparent;
117
-
color: @lavender;
118
-
}
119
-
120
-
#workspaces {
121
-
background-color: @base;
122
-
border: 2px solid @lavender;
123
-
}
124
-
125
-
#workspaces button {
126
-
padding: 5px;
127
-
margin: 0;
128
-
color: @lavender;
129
-
}
130
-
131
-
#workspaces button#niri-workspace-5 {
132
-
font-size: 0px;
133
-
border: none;
134
-
padding: 0px;
135
-
margin: 0px;
136
-
min-width: 0px;
137
-
min-height: 0px;
138
-
}
139
-
140
-
#workspaces button.active {
141
-
color: @mauve;
142
-
}
143
-
144
-
#custom-music,
145
-
#tray,
146
-
#clock,
147
-
#battery {
148
-
border: 2px solid @lavender;
149
-
background-color: @base;
150
-
padding: 0 5px;
151
-
}
152
-
153
-
#tray {
154
-
border-right: none;
155
-
}
156
-
157
-
#clock {
158
-
border-left: none;
159
-
}
160
-
161
-
#battery {
162
-
border-left: none;
163
-
border-right: none;
164
-
color: @teal;
165
-
}
166
-
167
-
#battery.charging {
168
-
color: @teal;
169
-
}
170
-
171
-
#battery.warning:not(.charging) {
172
-
color: @red;
173
-
}
174
-
175
-
#custom-music {
176
-
color: @mauve;
177
-
}
178
-
'';
179
-
};
180
-
}
+13
-13
home/modules/programs/zsh.nix
+13
-13
home/modules/programs/zsh.nix
···
1
-
{ pkgs, config, ... }:
1
+
{ pkgs, ... }:
2
2
3
+
let
4
+
external = ../../../external/zsh;
5
+
in
3
6
{
4
7
programs.zsh = {
5
8
enable = true;
···
31
34
mkdirenv = "echo -e 'if has nix; then\\n use flake\\nfi' >> .envrc && direnv allow";
32
35
33
36
nixb = "nom build";
34
-
nixs = "nom shell";
35
-
nixdev = "nom develop -c $SHELL";
37
+
nixs = "FF_SKIP=1 nom shell";
38
+
nixdev = "FF_SKIP=1 nom develop -c \"$SHELL\"";
36
39
37
40
diff = "diff --color=auto";
38
41
grep = "grep --color=auto";
···
54
57
gpull = "git pull origin";
55
58
gmain = "if ! git checkout --track origin/main; then if ! git checkout main; then git checkout master; fi; fi";
56
59
};
57
-
58
-
envExtra = ''
59
-
export DOTFILES="${config.home.homeDirectory}/dotfiles"
60
-
'';
61
60
62
61
initContent = ''
62
+
${builtins.readFile (external + "/keymap.zsh")}
63
+
${builtins.readFile (external + "/prompt.zsh")}
64
+
${builtins.readFile (external + "/functions.zsh")}
65
+
63
66
export GPG_TTY=$(tty)
67
+
source <(fzf --zsh)
64
68
65
-
. "$DOTFILES/external/zsh/keymap.zsh"
66
-
. "$DOTFILES/external/zsh/prompt.zsh"
67
-
. "$DOTFILES/external/zsh/functions.zsh"
68
-
69
-
ff
69
+
cuteff
70
70
'';
71
71
72
72
profileExtra = ''
73
-
. "$DOTFILES/external/zsh/profile.zsh"
73
+
${builtins.readFile (external + "/profile.zsh")}
74
74
'';
75
75
};
76
76
}
+2
-2
home/modules/wallpaper.nix
+2
-2
home/modules/wallpaper.nix
···
3
3
{
4
4
home.file.".wallpaper.jpg" = {
5
5
source = pkgs.fetchurl {
6
-
url = "https://raw.githubusercontent.com/orangci/walls-catppuccin-mocha/master/oversized-cat.jpg";
7
-
sha256 = "0c9fkhixpzh6hvwbqvfrfsi7c5p1lwnaql6ri1kkdjahay1h0spl";
6
+
url = "https://raw.githubusercontent.com/orangci/walls-catppuccin-mocha/7bfdf10d16ad3a689f9f0cf3a0930da3d1a245a8/oversized-cat.jpg";
7
+
hash = "sha256-9GoAg1dQyTZniNlQrCyn4RZ2onbZbbz4hgb+2yOcLjE=";
8
8
};
9
9
};
10
10
}
+1
modules/base/boot.nix
+1
modules/base/boot.nix
+43
-1
modules/base/networking.nix
+43
-1
modules/base/networking.nix
···
1
1
{
2
2
networking = {
3
3
networkmanager.enable = true;
4
-
firewall.enable = true;
4
+
firewall = {
5
+
enable = true;
6
+
extraCommands = ''
7
+
set -euo pipefail
8
+
9
+
ensure_rule() {
10
+
if ! iptables -C INPUT "$@" 2>/dev/null; then
11
+
iptables -I INPUT 1 "$@"
12
+
fi
13
+
}
14
+
ensure_rule6() {
15
+
if ! ip6tables -C INPUT "$@" 2>/dev/null; then
16
+
ip6tables -I INPUT 1 "$@"
17
+
fi
18
+
}
19
+
20
+
v4blocklist=(
21
+
'66.132.159.0/24'
22
+
'162.142.125.0/24'
23
+
'167.94.138.0/24'
24
+
'167.94.145.0/24'
25
+
'167.94.146.0/24'
26
+
'167.248.133.0/24'
27
+
'199.45.154.0/24'
28
+
'199.45.155.0/24'
29
+
'206.168.34.0/24'
30
+
'206.168.35.0/24'
31
+
)
32
+
v6blocklist=(
33
+
'2602:80d:1000:b0cc:e::/80'
34
+
'2620:96:e000:b0cc:e::/80'
35
+
'2602:80d:1003::/112'
36
+
'2602:80d:1004::/112'
37
+
)
38
+
39
+
for ip in "''${v4blocklist[@]}"; do
40
+
ensure_rule -s "$ip" -j DROP
41
+
done
42
+
for ip in "''${v6blocklist[@]}"; do
43
+
ensure_rule6 -s "$ip" -j DROP
44
+
done
45
+
'';
46
+
};
5
47
};
6
48
}
+1
-1
modules/base/nix.nix
+1
-1
modules/base/nix.nix
+9
-9
modules/base/nixpkgs.nix
+9
-9
modules/base/nixpkgs.nix
···
1
-
{ inputs, ... }:
1
+
# { inputs, ... }:
2
2
3
3
{
4
4
nixpkgs = {
5
5
config.allowUnfree = true;
6
-
overlays = [
7
-
(_: prev: {
8
-
unstable = import inputs.nixpkgs-unstable {
9
-
system = prev.stdenv.hostPlatform.system;
10
-
config = prev.config;
11
-
};
12
-
})
13
-
];
6
+
# overlays = [
7
+
# (_: prev: {
8
+
# unstable = import inputs.nixpkgs-unstable {
9
+
# system = prev.stdenv.hostPlatform.system;
10
+
# config = prev.config;
11
+
# };
12
+
# })
13
+
# ];
14
14
};
15
15
}
+6
-1
modules/base/services/openssh.nix
+6
-1
modules/base/services/openssh.nix
···
3
3
enable = true;
4
4
openFirewall = true;
5
5
settings = {
6
+
LogLevel = "ERROR"; # haxerz OUT
7
+
PubkeyAuthentication = true;
6
8
PasswordAuthentication = false;
9
+
KbdInteractiveAuthentication = false;
10
+
X11Forwarding = false;
11
+
PermitTunnel = "no";
7
12
PermitRootLogin = "no";
8
-
PubkeyAuthentication = true;
13
+
AllowTcpForwarding = "no";
9
14
};
10
15
};
11
16
}
+1
-54
modules/base/system.nix
+1
-54
modules/base/system.nix
···
1
-
{ pkgs, ... }:
2
-
3
-
{
4
-
system = {
5
-
replaceDependencies.replacements = with pkgs; [
6
-
{
7
-
oldDependency = coreutils-full;
8
-
newDependency = symlinkJoin {
9
-
name =
10
-
"coreuutils-full"
11
-
+ builtins.concatStringsSep "" (
12
-
builtins.genList (_: "_") (builtins.stringLength coreutils-full.version)
13
-
);
14
-
paths = [ uutils-coreutils-noprefix ];
15
-
};
16
-
}
17
-
{
18
-
oldDependency = coreutils;
19
-
newDependency = symlinkJoin {
20
-
name =
21
-
"coreuutils"
22
-
+ builtins.concatStringsSep "" (
23
-
builtins.genList (_: "_") (builtins.stringLength coreutils.version)
24
-
);
25
-
paths = [ uutils-coreutils-noprefix ];
26
-
};
27
-
}
28
-
{
29
-
oldDependency = findutils;
30
-
newDependency = symlinkJoin {
31
-
name =
32
-
"finduutils"
33
-
+ builtins.concatStringsSep "" (
34
-
builtins.genList (_: "_") (builtins.stringLength findutils.version)
35
-
);
36
-
paths = [ uutils-findutils ];
37
-
};
38
-
}
39
-
{
40
-
oldDependency = diffutils;
41
-
newDependency = symlinkJoin {
42
-
name =
43
-
"diffuutils"
44
-
+ builtins.concatStringsSep "" (
45
-
builtins.genList (_: "_") (builtins.stringLength diffutils.version)
46
-
);
47
-
paths = [ uutils-diffutils ];
48
-
};
49
-
}
50
-
];
51
-
52
-
stateVersion = "25.11";
53
-
};
54
-
}
1
+
{ system.stateVersion = "25.11"; }
-14
modules/base/users/adam.nix
-14
modules/base/users/adam.nix
···
1
-
{
2
-
users.users.adam = {
3
-
isNormalUser = true;
4
-
hashedPassword = "$y$j9T$kpXvXU/Ftx9qI9LKssnpY/$mGPO35iEUCb8/.bdYA/Zys3MuIaNSlrnUY2S6wCoFD8";
5
-
ignoreShellProgramCheck = true;
6
-
extraGroups = [
7
-
"wheel"
8
-
"jellyfin"
9
-
];
10
-
openssh.authorizedKeys.keys = [
11
-
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID9feAlrIVPuVS28tz54/m7pZkjHHL5aVhV2qwBPPceT adam"
12
-
];
13
-
};
14
-
}
+1
-1
modules/base/users/default.nix
+1
-1
modules/base/users/default.nix
+16
modules/base/users/koi.nix
+16
modules/base/users/koi.nix
···
1
+
{
2
+
users.users.koi = {
3
+
isNormalUser = true;
4
+
hashedPassword = "$y$j9T$kpXvXU/Ftx9qI9LKssnpY/$mGPO35iEUCb8/.bdYA/Zys3MuIaNSlrnUY2S6wCoFD8";
5
+
ignoreShellProgramCheck = true;
6
+
extraGroups = [
7
+
"wheel"
8
+
"jellyfin"
9
+
];
10
+
openssh.authorizedKeys.keys = [
11
+
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID9feAlrIVPuVS28tz54/m7pZkjHHL5aVhV2qwBPPceT koi"
12
+
];
13
+
};
14
+
15
+
systemd.tmpfiles.rules = [ "d /tmp/downloads 2700 koi users -" ];
16
+
}
+1
-1
modules/base/users/root.nix
+1
-1
modules/base/users/root.nix
+1
-1
modules/desktop/default.nix
+1
-1
modules/desktop/default.nix
+1
-1
modules/home.nix
+1
-1
modules/home.nix
+6
-6
secrets/secrets.nix
+6
-6
secrets/secrets.nix
···
1
1
let
2
-
adam = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID9feAlrIVPuVS28tz54/m7pZkjHHL5aVhV2qwBPPceT";
3
-
seber = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIXT/a7M/lYUEkWmRz+aTko8GPi0SVvabNx2NxflVpi3";
2
+
koi = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID9feAlrIVPuVS28tz54/m7pZkjHHL5aVhV2qwBPPceT";
3
+
seber = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBAp82e57ij5x+Ei1Tjwxuex0fil5vV9wfEfNYgC5dFQ";
4
4
in
5
5
{
6
-
"chromium.sh.age".publicKeys = [ adam ];
7
-
"cloudflared.pem.age".publicKeys = [ adam ];
8
-
"jellyfin-rpc.json.age".publicKeys = [ adam ];
9
-
"wakatime.cfg.age".publicKeys = [ adam ];
6
+
"chromium.sh.age".publicKeys = [ koi ];
7
+
"cloudflared.pem.age".publicKeys = [ koi ];
8
+
"jellyfin-rpc.json.age".publicKeys = [ koi ];
10
9
10
+
"vaultwarden.env.age".publicKeys = [ seber ];
11
11
"ssl-adamperkowski.cert.pem.age".publicKeys = [ seber ];
12
12
"ssl-adamperkowski.key.pem.age".publicKeys = [ seber ];
13
13
}
secrets/ssl-adamperkowski.cert.pem.age
secrets/ssl-adamperkowski.cert.pem.age
This is a binary file and will not be displayed.
secrets/ssl-adamperkowski.key.pem.age
secrets/ssl-adamperkowski.key.pem.age
This is a binary file and will not be displayed.
secrets/vaultwarden.env.age
secrets/vaultwarden.env.age
This is a binary file and will not be displayed.
-5
secrets/wakatime.cfg.age
-5
secrets/wakatime.cfg.age
···
1
-
age-encryption.org/v1
2
-
-> ssh-ed25519 IU0gwQ tiPC/5hn2voHevystFJAlzr4Wd5k5pQzBLUQgkGA0DQ
3
-
uz/ertXNfuDu9+TA+7RS7YyfeyJu2sPXOHvMLHuKxSg
4
-
--- g2buoSZZ7FczgKkr6EnyBUQaqo0gdtXiH5OCZ56JxYM
5
-
ืฟ(๏ฟฝ )๏ฟฝ๏ฟฝn9*๏ฟฝ๏ฟฝ๏ฟฝ:V๏ฟฝ
๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝo$๏ฟฝ๏ฟฝE,๏ฟฝ฿๏ฟฝ:๏ฟฝ๏ฟฝ2R๏ฟฝv๏ฟฝ\g๏ฟฝ,๏ฟฝ๏ฟฝ๏ฟฝu1๏ฟฝ๏ฟฝ๏ฟฝJ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ)แปU๏ฟฝ๏ฟฝ๏ฟฝ-๏ฟฝ๏ฟฝ#๏ฟฝ ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝk5๏ฟฝ๏ฟฝ^๏ฟฝ%๏ฟฝF๏ฟฝ'u๏ฟฝ๏ฟฝ๏ฟฝ@๏ฟฝU๏ฟฝ๏ฟฝ๏ฟฝY(๏ฟฝ๏ฟฝR/B๏ฟฝyj๏ฟฝ๏ฟฝ^๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝฦฝ4y๏ฟฝ๏ฟฝ๏ฟฝV๏ฟฝl5๏ฟฝ๏ฟฝ๏ฟฝุชC๏ฟฝอr๏ฟฝสG๏ฟฝZ๏ฟฝ~ ๏ฟฝm๏ฟฝ}1vsZ๏ฟฝa๏ฟฝ๏ฟฝ๏ฟฝ+๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ/๏ฟฝ๏ฟฝrK๏ฟฝ๏ฟฝA*๏ฟฝ๏ฟฝ[๏ฟฝ๏ฟฝ,๏ฟฝ{๏ฟฝ8๏ฟฝF๏ฟฝ๏ฟฝ
+23
-11
systems/miku/default.nix
+23
-11
systems/miku/default.nix
···
1
-
{ pkgs, inputs, ... }:
1
+
{
2
+
config,
3
+
pkgs,
4
+
inputs,
5
+
...
6
+
}:
2
7
3
8
{
4
9
imports = [
···
12
17
13
18
time.timeZone = "Europe/Warsaw";
14
19
i18n.defaultLocale = "en_US.UTF-8";
15
-
16
-
hardware.graphics.enable = true;
17
20
18
21
services.xserver = {
19
22
xkb = {
···
24
27
videoDrivers = [ "nvidia" ];
25
28
};
26
29
27
-
hardware.nvidia = {
28
-
modesetting.enable = true;
29
-
powerManagement.enable = true;
30
-
open = true;
31
-
nvidiaSettings = false;
30
+
hardware = {
31
+
graphics = {
32
+
enable = true;
33
+
enable32Bit = true;
34
+
};
35
+
36
+
nvidia = {
37
+
modesetting.enable = true;
38
+
powerManagement.enable = true;
39
+
open = true;
40
+
nvidiaSettings = false;
41
+
};
32
42
};
33
43
34
44
programs.steam = {
···
41
51
42
52
services.jellyfin = {
43
53
enable = true;
44
-
package = pkgs.jellyfin;
45
54
openFirewall = true;
46
55
};
47
56
48
-
environment.systemPackages = with pkgs; [ cloudflared ];
57
+
environment.systemPackages = with pkgs; [
58
+
cloudflared
59
+
prismlauncher
60
+
];
49
61
50
62
age = {
51
-
identityPaths = [ "/home/adam/.ssh/id_ed25519" ];
63
+
identityPaths = [ "${config.users.users.koi.home}/.ssh/id_ed25519" ];
52
64
53
65
secrets.cloudflared = {
54
66
file = ../../secrets/cloudflared.pem.age;
-6
systems/modules/systemd-boot.nix
-6
systems/modules/systemd-boot.nix
+30
-39
systems/seber/default.nix
+30
-39
systems/seber/default.nix
···
4
4
imports = [
5
5
./hardware.nix
6
6
inputs.agenix.nixosModules.default
7
+
./services
7
8
];
8
9
9
10
boot.loader.grub = {
···
11
12
device = "/dev/vda";
12
13
};
13
14
14
-
networking.hostName = "seber";
15
+
networking = {
16
+
hostName = "seber";
17
+
firewall.allowedTCPPorts = [
18
+
80
19
+
443
20
+
];
21
+
};
15
22
16
23
time.timeZone = "UTC";
17
24
i18n.defaultLocale = "en_US.UTF-8";
18
25
19
26
environment.systemPackages = with pkgs; [
27
+
linuxquota
20
28
git
21
29
vim
22
30
htop
23
31
];
24
32
25
-
networking.firewall.allowedTCPPorts = [
26
-
80
27
-
443
28
-
];
33
+
services.nginx.enable = true;
34
+
35
+
system.activationScripts.quotas = {
36
+
deps = [ ];
37
+
text = ''
38
+
echo
39
+
${pkgs.linuxquota}/bin/quotacheck -aumv || true
40
+
${pkgs.linuxquota}/bin/quotaon -auv || true
41
+
for user in $(getent passwd | grep /var/ebil.club | cut -d: -f1); do
42
+
echo "setting quota for $user"
43
+
${pkgs.linuxquota}/bin/setquota -u $user 8M 10M 0 0 / || true
44
+
done
45
+
echo
46
+
'';
47
+
};
29
48
30
49
age = {
31
-
identityPaths = [ "/home/adam/.ssh/id_ed25519" ];
50
+
identityPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
32
51
secrets = {
52
+
vaultwarden-env = {
53
+
file = ../../secrets/vaultwarden.env.age;
54
+
mode = "0400";
55
+
owner = "vaultwarden";
56
+
};
33
57
ssl-adamperkowski-cert = {
34
58
file = ../../secrets/ssl-adamperkowski.cert.pem.age;
35
59
mode = "0440";
···
40
64
mode = "0440";
41
65
group = "nginx";
42
66
};
43
-
};
44
-
};
45
-
46
-
services.nginx = {
47
-
enable = true;
48
-
virtualHosts = {
49
-
"adam.qpon" = {
50
-
locations."/" = {
51
-
proxyPass = "http://127.0.0.1:8000";
52
-
extraConfig = ''
53
-
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
54
-
proxy_set_header X-Forwarded-Proto $scheme;
55
-
proxy_set_header Host $host;
56
-
'';
57
-
};
58
-
59
-
onlySSL = true;
60
-
sslCertificate = "/run/agenix/ssl-adamperkowski-cert";
61
-
sslCertificateKey = "/run/agenix/ssl-adamperkowski-key";
62
-
};
63
-
};
64
-
};
65
-
66
-
systemd.services.website = {
67
-
description = "my site :3";
68
-
after = [ "network.target" ];
69
-
wantedBy = [ "multi-user.target" ];
70
-
71
-
serviceConfig = {
72
-
ExecStart = "/var/website/website/bin/website";
73
-
WorkingDirectory = "/var/website";
74
-
Restart = "on-failure";
75
-
RestartSec = 10;
76
67
};
77
68
};
78
69
}
+4
systems/seber/hardware.nix
+4
systems/seber/hardware.nix
+9
systems/seber/services/default.nix
+9
systems/seber/services/default.nix
+122
systems/seber/services/ebil-club.nix
+122
systems/seber/services/ebil-club.nix
···
1
+
{ lib, pkgs, ... }:
2
+
3
+
let
4
+
tls = {
5
+
forceSSL = true;
6
+
sslCertificate = "/run/agenix/ssl-adamperkowski-cert";
7
+
sslCertificateKey = "/run/agenix/ssl-adamperkowski-key";
8
+
};
9
+
10
+
mkSite =
11
+
{
12
+
name,
13
+
sshPubkey,
14
+
canonical ? null,
15
+
}:
16
+
let
17
+
defaultHost = "${name}.ebil.club";
18
+
servedHost = if canonical != null then canonical else defaultHost;
19
+
20
+
home = "/var/ebil.club/${name}";
21
+
rootDir = "${home}/${defaultHost}";
22
+
in
23
+
{
24
+
services.nginx.virtualHosts = {
25
+
"${servedHost}" = (
26
+
{
27
+
locations = {
28
+
"/" = {
29
+
root = rootDir;
30
+
index = "index.html";
31
+
extraConfig = "try_files $uri $uri/ =404;";
32
+
};
33
+
"= /" = {
34
+
extraConfig = ''
35
+
if ($http_user_agent ~* "curl") {
36
+
return 302 /index.txt;
37
+
}
38
+
'';
39
+
};
40
+
"/index.txt" = {
41
+
root = rootDir;
42
+
extraConfig = "try_files /index.txt @curl_fallback;";
43
+
};
44
+
"@curl_fallback".return =
45
+
"200 'hi! this site is best viewed in a web browser :3 if u still want to curl it, try setting a different user-agent header'";
46
+
};
47
+
extraConfig = "error_page 404 /404.html;";
48
+
}
49
+
// tls
50
+
);
51
+
}
52
+
// lib.optionalAttrs (canonical != null) {
53
+
"${defaultHost}" = (
54
+
{
55
+
locations."/".return = "307 https://${canonical}$request_uri";
56
+
}
57
+
// tls
58
+
);
59
+
};
60
+
61
+
users = {
62
+
groups."${name}" = { };
63
+
users."${name}" = {
64
+
inherit home;
65
+
createHome = false;
66
+
isNormalUser = true;
67
+
hashedPassword = "!";
68
+
group = name;
69
+
openssh.authorizedKeys.keys = [
70
+
''command="${pkgs.rrsync}/bin/rrsync ~/${defaultHost}",restrict,no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ${sshPubkey}''
71
+
];
72
+
};
73
+
};
74
+
75
+
systemd.tmpfiles.rules = [
76
+
"d ${home} 0750 ${name} nginx -"
77
+
"d ${home}/${defaultHost} 2750 ${name} nginx -"
78
+
];
79
+
};
80
+
in
81
+
{
82
+
imports = [
83
+
(mkSite {
84
+
name = "seba";
85
+
sshPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN7xlBanf8BNQXosqGT5QroBntpFUsy3g12fO/fPE414";
86
+
})
87
+
(mkSite {
88
+
name = "kolpix";
89
+
sshPubkey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDY0nHqaw1FriPBnK/hsdVGO69RGu6k/FAYNtUmYCEUS3MN0+loQWRwV2zk0KlWwIP/sMtWH/QjX5oNGpSt9Oj9jmfjgdPkQcl+4B/u93V6wK6Xl+5FufkXbtzENakPQVLX4INyZ9gViuRE4eguPFeRYSckcboxfeqlM24OUT7gvtn4r3z6c0Yx8qit/GVn1F7/ozi0lrSGknEVFUr3ewoQZWm7rpd9SjbTutqLtX6quEQzn6GG/wNxUodnIPwflGgBlfzej2SekuzLvnE1VfaaBvzOZei4VdvY7JrbKN+zlkmuKtEaZB7fkwOxegHsFRxLjSzLasI84wbWt38KTlDxPLjWPq62rJZOnI1XILCUamt9fSTraDfYeHeTCjrlKKctX0l4fvMLG4ZE1wHsELShisZuN4dPb1BqTgEL3s7n60kXG4TTUbo/frXocVf7PX1QINfnWkUPXT4fWkhYV0XALqBpnXs9XJXbk7dCWoWIuwm8+R2svcGvdiIrVGMy9cCP4bIqNzZ7NlOAvIysgmnLcv5GsTv7YfBXrJFnBXScsacqJaH3BLVg+zVYXKvokjZJ0mEa260aMqJDS7lK+xbnBhwH3B+tOAaR7ZoB0c1j2JyFOjTLL9K1uw0dRyQB4b0ZWQ08ByNi1rYT/FHBHU/Jl1rocEUgwmUDFNFufIMwZQ==";
90
+
})
91
+
(mkSite {
92
+
name = "robin";
93
+
sshPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDeSHaoF0Qs1G8JO/enOo2vxzkvvOqAMZPG2DX7TgG8u";
94
+
canonical = "robinwobin.dev";
95
+
})
96
+
];
97
+
98
+
services.nginx.virtualHosts = {
99
+
"_" = {
100
+
locations."/".return = "307 https://ebil.club";
101
+
default = true;
102
+
}
103
+
// tls;
104
+
105
+
"ebil.club" = {
106
+
locations = {
107
+
"/" = {
108
+
root = "/var/ebil.club/ebil.club";
109
+
index = "index.html";
110
+
extraConfig = "try_files $uri $uri/ =404;";
111
+
};
112
+
};
113
+
extraConfig = "error_page 404 /404.html;";
114
+
}
115
+
// tls;
116
+
};
117
+
118
+
systemd.tmpfiles.rules = [
119
+
"d /var/ebil.club 0755 root root -"
120
+
"d /var/ebil.club/ebil.club 2750 koi nginx -"
121
+
];
122
+
}
+44
systems/seber/services/lebel.nix
+44
systems/seber/services/lebel.nix
···
1
+
{ pkgs, ... }:
2
+
3
+
{
4
+
environment.systemPackages = [ pkgs.nodejs ];
5
+
6
+
systemd.services.lebel = {
7
+
description = "lebel";
8
+
after = [ "network.target" ];
9
+
wantedBy = [ "multi-user.target" ];
10
+
11
+
serviceConfig = {
12
+
User = "koi";
13
+
Group = "users";
14
+
ExecStart = "${pkgs.nodejs}/bin/node --env-file /var/lebel/.env /var/lebel/build/main.js";
15
+
WorkingDirectory = "/var/lebel";
16
+
Restart = "on-failure";
17
+
RestartSec = 10;
18
+
};
19
+
};
20
+
21
+
services.nginx.virtualHosts."lebel.ebil.club" = {
22
+
locations = {
23
+
"= /".return = "301 https://ebil.club";
24
+
"/" = {
25
+
proxyPass = "http://127.0.0.1:14831";
26
+
extraConfig = ''
27
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
28
+
proxy_set_header X-Forwarded-Proto $scheme;
29
+
proxy_set_header X-Real-IP $remote_addr;
30
+
proxy_set_header Host $host;
31
+
32
+
proxy_http_version 1.1;
33
+
proxy_set_header Upgrade $http_upgrade;
34
+
proxy_set_header Connection "upgrade";
35
+
'';
36
+
};
37
+
};
38
+
forceSSL = true;
39
+
sslCertificate = "/run/agenix/ssl-adamperkowski-cert";
40
+
sslCertificateKey = "/run/agenix/ssl-adamperkowski-key";
41
+
};
42
+
43
+
systemd.tmpfiles.rules = [ "d /var/lebel 2750 koi users -" ];
44
+
}
+20
systems/seber/services/mimi.nix
+20
systems/seber/services/mimi.nix
···
1
+
{
2
+
systemd.services.mimi = {
3
+
description = "mimi tne discord bot";
4
+
after = [ "network.target" ];
5
+
wantedBy = [ "multi-user.target" ];
6
+
7
+
script = ''
8
+
export $(cat .env | xargs)
9
+
./mimi/bin/mimi
10
+
'';
11
+
12
+
serviceConfig = {
13
+
WorkingDirectory = "/var/mimi";
14
+
Restart = "on-failure";
15
+
RestartSec = 60;
16
+
};
17
+
};
18
+
19
+
systemd.tmpfiles.rules = [ "d /var/mimi 2750 koi users -" ];
20
+
}
+29
systems/seber/services/vaultwarden.nix
+29
systems/seber/services/vaultwarden.nix
···
1
+
{
2
+
services.vaultwarden = {
3
+
enable = true;
4
+
environmentFile = "/run/agenix/vaultwarden-env";
5
+
config = {
6
+
DOMAIN = "https://vault.adamperkowski.dev";
7
+
SIGNUPS_ALLOWED = false;
8
+
ROCKET_ADDRESS = "127.0.0.1";
9
+
ROCKET_PORT = 8222;
10
+
ROCKET_LOG = "critical";
11
+
LOG_LEVEL = "warn";
12
+
};
13
+
};
14
+
15
+
services.nginx.virtualHosts."vault.adamperkowski.dev" = {
16
+
locations."/" = {
17
+
proxyPass = "http://127.0.0.1:8222";
18
+
extraConfig = ''
19
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
20
+
proxy_set_header X-Forwarded-Proto $scheme;
21
+
proxy_set_header Host $host;
22
+
'';
23
+
};
24
+
forceSSL = true;
25
+
sslCertificate = "/run/agenix/ssl-adamperkowski-cert";
26
+
sslCertificateKey = "/run/agenix/ssl-adamperkowski-key";
27
+
};
28
+
29
+
}
+30
systems/seber/services/website.nix
+30
systems/seber/services/website.nix
···
1
+
{
2
+
systemd.services.website = {
3
+
description = "my site :3";
4
+
after = [ "network.target" ];
5
+
wantedBy = [ "multi-user.target" ];
6
+
7
+
serviceConfig = {
8
+
ExecStart = "/var/website/website/bin/website";
9
+
WorkingDirectory = "/var/website";
10
+
Restart = "on-failure";
11
+
RestartSec = 10;
12
+
};
13
+
};
14
+
15
+
services.nginx.virtualHosts."koi.rip" = {
16
+
locations."/" = {
17
+
proxyPass = "http://127.0.0.1:8000";
18
+
extraConfig = ''
19
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
20
+
proxy_set_header X-Forwarded-Proto $scheme;
21
+
proxy_set_header Host $host;
22
+
'';
23
+
};
24
+
forceSSL = true;
25
+
sslCertificate = "/run/agenix/ssl-adamperkowski-cert";
26
+
sslCertificateKey = "/run/agenix/ssl-adamperkowski-key";
27
+
};
28
+
29
+
systemd.tmpfiles.rules = [ "d /var/website 2750 koi users -" ];
30
+
}