+2
.github/CODEOWNERS
+2
.github/CODEOWNERS
+27
.github/workflows/nix.yml
+27
.github/workflows/nix.yml
···
1
+
name: Nix Checks
2
+
3
+
on:
4
+
pull_request:
5
+
push:
6
+
7
+
jobs:
8
+
lints:
9
+
name: Lints
10
+
runs-on: ubuntu-latest
11
+
12
+
steps:
13
+
- uses: actions/checkout@v5
14
+
15
+
- name: Install Nix
16
+
uses: cachix/install-nix-action@v31
17
+
18
+
- name: Check Formatting
19
+
run: |
20
+
nix fmt
21
+
if [ -n "$(git status --porcelain)" ]; then
22
+
git --no-pager diff
23
+
exit 1
24
+
fi
25
+
26
+
- name: Check Flake Evaluation
27
+
run: nix flake check
+52
LICENSE
+52
LICENSE
···
1
+
================================================================================
2
+
This project is licensed under The Happy Bunny License or MIT License
3
+
4
+
================================================================================
5
+
The Happy Bunny License (Modified MIT License)
6
+
--------------------------------------------------------------------------------
7
+
Copyright (c) 2025 Adam Perkowski
8
+
9
+
Permission is hereby granted, free of charge, to any person obtaining a copy
10
+
of this software and associated documentation files (the "Software"), to deal
11
+
in the Software without restriction, including without limitation the rights
12
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+
copies of the Software, and to permit persons to whom the Software is
14
+
furnished to do so, subject to the following conditions:
15
+
16
+
The above copyright notice and this permission notice shall be included in
17
+
all copies or substantial portions of the Software.
18
+
19
+
Restrictions:
20
+
By making use of the Software for military purposes, you choose to make a
21
+
Bunny unhappy.
22
+
23
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29
+
THE SOFTWARE.
30
+
31
+
================================================================================
32
+
The MIT License
33
+
--------------------------------------------------------------------------------
34
+
Copyright (c) 2025 Adam Perkowski
35
+
36
+
Permission is hereby granted, free of charge, to any person obtaining a copy
37
+
of this software and associated documentation files (the "Software"), to deal
38
+
in the Software without restriction, including without limitation the rights
39
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
40
+
copies of the Software, and to permit persons to whom the Software is
41
+
furnished to do so, subject to the following conditions:
42
+
43
+
The above copyright notice and this permission notice shall be included in
44
+
all copies or substantial portions of the Software.
45
+
46
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
47
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
48
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
49
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
50
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
51
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
52
+
THE SOFTWARE.
+27
README.md
+27
README.md
···
1
+
<div>
2
+
3
+
<a href="https://adamperkowski.dev" target="_blank">
4
+
<img
5
+
width="88"
6
+
height="31"
7
+
src="https://adamperkowski.dev/img/badges/mimi-the-car.gif"
8
+
alt="mimi the car (my website)"
9
+
align="right">
10
+
</a>
11
+
12
+
<b>my dotfiles</b>
13
+
14
+
</div>
15
+
16
+
<div align="center">
17
+
18
+

19
+
20
+
<img
21
+
width="496"
22
+
height="32"
23
+
src="https://adamperkowski.dev/img/mimi-banner.gif"
24
+
alt="mimi banner"
25
+
align="center">
26
+
27
+
</div>
doc/preview.webp
doc/preview.webp
This is a binary file and will not be displayed.
+93
external/config/fastfetch/config.jsonc
+93
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
+
{
32
+
"type": "custom",
33
+
"format": "\u001b[0;38;2;203;166;247m╭──────────────────────────────────╮\u001b[0m"
34
+
},
35
+
{
36
+
"type": "users",
37
+
"key": "user ",
38
+
"keyIcon": " ",
39
+
"format": "{name}"
40
+
},
41
+
{
42
+
"type": "command",
43
+
"shell": "/bin/sh",
44
+
"text": "hostname",
45
+
"key": "hostname",
46
+
"keyIcon": " ",
47
+
"format": "{result}"
48
+
},
49
+
{
50
+
"type": "os",
51
+
"key": "distro ",
52
+
"keyIcon": " ",
53
+
"format": "{name} {version-id}"
54
+
},
55
+
{
56
+
"type": "kernel",
57
+
"key": "kernel ",
58
+
"keyIcon": " "
59
+
},
60
+
{
61
+
"type": "packages",
62
+
"key": "packages",
63
+
"keyIcon": " "
64
+
},
65
+
{
66
+
"type": "uptime",
67
+
"key": "uptime ",
68
+
"keyIcon": " ",
69
+
"format": "{days}d {hours}h {minutes}m"
70
+
},
71
+
{
72
+
"type": "shell",
73
+
"key": "shell ",
74
+
"keyIcon": " "
75
+
},
76
+
{
77
+
"type": "terminal",
78
+
"key": "terminal",
79
+
"keyIcon": " "
80
+
},
81
+
{
82
+
"type": "wm",
83
+
"key": "wm ",
84
+
"keyIcon": " ",
85
+
"format": "{pretty-name} {version}"
86
+
},
87
+
{
88
+
"type": "custom",
89
+
"format": "\u001b[0;38;2;203;166;247m╰──────────────────────────────────╯\u001b[0m"
90
+
},
91
+
"break"
92
+
]
93
+
}
+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
+38
external/config/lsd/colors.yaml
+38
external/config/lsd/colors.yaml
···
1
+
user: "#cba6f7"
2
+
group: "#b4befe"
3
+
permission:
4
+
read: "#94e2d5"
5
+
write: "#f9e2af"
6
+
exec: "#eba0ac"
7
+
exec-sticky: "#cba6f7"
8
+
no-access: "#a6adc8"
9
+
octal: "#94e2d5"
10
+
acl: "#94e2d5"
11
+
context: "#b4befe"
12
+
date:
13
+
hour-old: "#89b4fa"
14
+
day-old: "#b4befe"
15
+
older: "#cba6f7"
16
+
size:
17
+
none: "#a6adc8"
18
+
small: "#94e2d5"
19
+
medium: "#f9e2af"
20
+
large: "#eba0ac"
21
+
inode:
22
+
valid: "#f5c2e7"
23
+
invalid: "#a6adc8"
24
+
links:
25
+
valid: "#f5c2e7"
26
+
invalid: "#a6adc8"
27
+
tree-edge: "#bac2de"
28
+
git-status:
29
+
default: "#cdd6f4"
30
+
unmodified: "#a6adc8"
31
+
ignored: "#a6adc8"
32
+
new-in-index: "#94e2d5"
33
+
new-in-workdir: "#94e2d5"
34
+
typechange: "#f9e2af"
35
+
deleted: "#eba0ac"
36
+
renamed: "#94e2d5"
37
+
modified: "#f9e2af"
38
+
conflicted: "#eba0ac"
+6
external/config/lsd/config.yaml
+6
external/config/lsd/config.yaml
+25
external/config/nvim/init.lua
+25
external/config/nvim/init.lua
···
1
+
require("keymap")
2
+
3
+
vim.opt.number = true
4
+
5
+
vim.opt.tabstop = 2
6
+
vim.opt.shiftwidth = 2
7
+
vim.opt.expandtab = true
8
+
9
+
vim.g.rustfmt_autosave = 1
10
+
11
+
vim.diagnostic.config {
12
+
signs = false,
13
+
underline = true,
14
+
virtual_text = {
15
+
virt_text_pos = "right_align",
16
+
suffix = " ",
17
+
},
18
+
update_in_insert = true,
19
+
}
20
+
21
+
require("plugconfig")
22
+
23
+
for _, group in ipairs(vim.fn.getcompletion("@lsp", "highlight")) do
24
+
vim.api.nvim_set_hl(0, group, {})
25
+
end
+7
external/config/nvim/lua/keymap/init.lua
+7
external/config/nvim/lua/keymap/init.lua
···
1
+
local opts = { noremap = true, silent = true }
2
+
3
+
vim.keymap.set('n', '<C-p>', "<cmd>_dP<cr>", opts)
4
+
vim.keymap.set('n', '<C-t>', vim.cmd.Ex, opts)
5
+
vim.keymap.set('n', '<F5>', vim.cmd.UndotreeToggle, opts)
6
+
vim.keymap.set('n', 'J', "<cmd>m .+1<cr>", opts)
7
+
vim.keymap.set('n', 'K', "<cmd>m .-2<cr>", opts)
+1
external/config/nvim/lua/plugconfig/autopairs.lua
+1
external/config/nvim/lua/plugconfig/autopairs.lua
···
1
+
require("nvim-autopairs").setup {}
+9
external/config/nvim/lua/plugconfig/catppuccin.lua
+9
external/config/nvim/lua/plugconfig/catppuccin.lua
+18
external/config/nvim/lua/plugconfig/cmp.lua
+18
external/config/nvim/lua/plugconfig/cmp.lua
···
1
+
local cmp = require("cmp")
2
+
3
+
cmp.setup {
4
+
completion = {
5
+
completeopt = "menu,menuone,preview,noselect",
6
+
},
7
+
mapping = cmp.mapping.preset.insert {
8
+
["<Up>"] = cmp.mapping.select_prev_item(),
9
+
["<Down>"] = cmp.mapping.select_next_item(),
10
+
["<Tab>"] = cmp.mapping.confirm { select = false },
11
+
},
12
+
sources = {
13
+
{ name = "jule" },
14
+
{ name = "nvim_lsp" },
15
+
{ name = "buffer" },
16
+
{ name = "path" },
17
+
},
18
+
}
+15
external/config/nvim/lua/plugconfig/copilot.lua
+15
external/config/nvim/lua/plugconfig/copilot.lua
+6
external/config/nvim/lua/plugconfig/cord.lua
+6
external/config/nvim/lua/plugconfig/cord.lua
+50
external/config/nvim/lua/plugconfig/gitsigns.lua
+50
external/config/nvim/lua/plugconfig/gitsigns.lua
···
1
+
require("gitsigns").setup {
2
+
signs = {
3
+
add = { text = "┃" },
4
+
change = { text = "┃" },
5
+
delete = { text = "_" },
6
+
topdelete = { text = "‾" },
7
+
changedelete = { text = "~" },
8
+
untracked = { text = "┆" },
9
+
},
10
+
signs_staged = {
11
+
add = { text = "┃" },
12
+
change = { text = "┃" },
13
+
delete = { text = "_" },
14
+
topdelete = { text = "‾" },
15
+
changedelete = { text = "~" },
16
+
untracked = { text = "┆" },
17
+
},
18
+
signs_staged_enable = true,
19
+
signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
20
+
numhl = false, -- Toggle with `:Gitsigns toggle_numhl`
21
+
linehl = false, -- Toggle with `:Gitsigns toggle_linehl`
22
+
word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
23
+
watch_gitdir = {
24
+
follow_files = true,
25
+
},
26
+
auto_attach = true,
27
+
attach_to_untracked = false,
28
+
current_line_blame = true, -- Toggle with `:Gitsigns toggle_current_line_blame`
29
+
current_line_blame_opts = {
30
+
virt_text = true,
31
+
virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align'
32
+
delay = 1000,
33
+
ignore_whitespace = false,
34
+
virt_text_priority = 100,
35
+
use_focus = true,
36
+
},
37
+
current_line_blame_formatter = "<author>, <author_time:%R> - <summary>",
38
+
sign_priority = 6,
39
+
update_debounce = 100,
40
+
status_formatter = nil, -- Use default
41
+
max_file_length = 40000, -- Disable if file is longer than this (in lines)
42
+
preview_config = {
43
+
-- Options passed to nvim_open_win
44
+
border = "single",
45
+
style = "minimal",
46
+
relative = "cursor",
47
+
row = 0,
48
+
col = 1,
49
+
}
50
+
}
+5
external/config/nvim/lua/plugconfig/ibl.lua
+5
external/config/nvim/lua/plugconfig/ibl.lua
+13
external/config/nvim/lua/plugconfig/init.lua
+13
external/config/nvim/lua/plugconfig/init.lua
···
1
+
require("plugconfig.catppuccin")
2
+
3
+
require("plugconfig.jule")
4
+
5
+
require("plugconfig.cmp")
6
+
require("plugconfig.lsp")
7
+
8
+
require("plugconfig.ibl")
9
+
require("plugconfig.autopairs")
10
+
require("plugconfig.gitsigns")
11
+
require("plugconfig.copilot")
12
+
require("plugconfig.undotree")
13
+
require("plugconfig.cord")
+4
external/config/nvim/lua/plugconfig/jule.lua
+4
external/config/nvim/lua/plugconfig/jule.lua
+51
external/config/nvim/lua/plugconfig/lsp.lua
+51
external/config/nvim/lua/plugconfig/lsp.lua
···
1
+
local lspconfig = require("lspconfig")
2
+
local cmp_nvim_lsp = require("cmp_nvim_lsp")
3
+
local capabilities = cmp_nvim_lsp.default_capabilities()
4
+
5
+
lspconfig.lua_ls.setup {
6
+
capabilities = capabilities,
7
+
8
+
on_init = function(client)
9
+
if client.workspace_folders then
10
+
local path = client.workspace_folders[1].name
11
+
if
12
+
path ~= vim.fn.stdpath("config")
13
+
and (vim.loop.fs_stat(path .. "/.luarc.json") or vim.loop.fs_stat(path .. "/.luarc.jsonc"))
14
+
then
15
+
return
16
+
end
17
+
end
18
+
19
+
client.config.settings.Lua = vim.tbl_deep_extend("force", client.config.settings.Lua, {
20
+
runtime = {
21
+
version = "LuaJIT",
22
+
},
23
+
workspace = {
24
+
checkThirdParty = false,
25
+
library = {
26
+
vim.env.VIMRUNTIME,
27
+
"${3rd}/luv/library",
28
+
"${3rd}/love2d/library",
29
+
},
30
+
},
31
+
})
32
+
end,
33
+
34
+
settings = {
35
+
Lua = {},
36
+
},
37
+
}
38
+
39
+
lspconfig.nixd.setup {
40
+
capabilities = capabilities
41
+
}
42
+
43
+
lspconfig.rust_analyzer.setup {
44
+
capabilities = capabilities
45
+
}
46
+
47
+
lspconfig.bashls.setup {
48
+
filetypes = { "sh", "bash", "zsh" },
49
+
50
+
capabilities = capabilities
51
+
}
+12
external/config/nvim/lua/plugconfig/undotree.lua
+12
external/config/nvim/lua/plugconfig/undotree.lua
···
1
+
vim.g.undotree_SetFocusWhenToggle = true
2
+
3
+
if vim.fn.has("persistent_undo") == 1 then
4
+
local target_path = vim.fn.expand("~/.vim_undo")
5
+
6
+
if vim.fn.isdirectory(target_path) == 0 then
7
+
vim.fn.mkdir(target_path, "p")
8
+
end
9
+
10
+
vim.o.undodir = target_path
11
+
vim.o.undofile = true
12
+
end
+52
external/zsh/functions.zsh
+52
external/zsh/functions.zsh
···
1
+
function shreddir() {
2
+
find "$1" -type f -exec shred -uvz {} \; rm -rf "$1"
3
+
}
4
+
5
+
function nixrs() {
6
+
sudo nixos-rebuild switch --flake ~/dotfiles\#$(hostname)
7
+
}
8
+
9
+
function nixdev() {
10
+
export FF_SKIP=1
11
+
12
+
if [ $(nix flake show | grep 'devShells') ]; then
13
+
nix develop -c zsh
14
+
else
15
+
nix-shell --run zsh
16
+
fi
17
+
}
18
+
19
+
function nixpkgs-build() {
20
+
nix-build -E "with import <nixpkgs> {}; callPackage ./$1 {}"
21
+
}
22
+
23
+
function nixpkgs-review-gha() {
24
+
gh workflow run 'review.yml' -R "$(gh api user --jq '.login')/nixpkgs-review-gha" -f pr="$1"
25
+
}
26
+
27
+
function cd() {
28
+
{ z "$@" 2>/dev/null && lsd -hN; } || { echo "dir \e[91m$*\e[0m not found!! \e[91mSTUPID! BONK!\e[0m :3"; return 1; }
29
+
}
30
+
31
+
function command_not_found_handler() {
32
+
echo "command \e[91m$1\e[0m not found!! \e[91mSTUPID! BONK!\e[0m :3"
33
+
return 127
34
+
}
35
+
36
+
. "$DOTFILES/external/zsh/nix-shell-generate.zsh"
37
+
38
+
function ff() {
39
+
if [ -n "$FF_SKIP" ]; then
40
+
FF_SKIP=
41
+
return
42
+
fi
43
+
44
+
kitget_output="/tmp/$(date +%s)"
45
+
if [ -n "$FF_NO_KITGET" ] || ! $(kitget --square -o "$kitget_output" &> /dev/null); then
46
+
fastfetch --logo nixos_small --logo-padding-top 3 "$@"
47
+
else
48
+
fastfetch --kitty "$kitget_output" "$@"
49
+
fi
50
+
51
+
rm -f "$kitget_output"
52
+
}
+20
external/zsh/keymap.zsh
+20
external/zsh/keymap.zsh
···
1
+
autoload -Uz select-word-style
2
+
select-word-style bash
3
+
4
+
bindkey '^[[1;5D' backward-word
5
+
bindkey '^[[1;5C' forward-word
6
+
7
+
stty -ixon # disable flow control to avoid conflicts
8
+
bindkey '^R' history-incremental-search-backward
9
+
bindkey '^S' history-incremental-search-forward
10
+
11
+
bindkey '^W' backward-kill-word
12
+
bindkey '^D' kill-word
13
+
14
+
bindkey '^U' backward-kill-line
15
+
bindkey '^K' kill-line
16
+
17
+
bindkey '^[[H' beginning-of-line
18
+
bindkey '^[[F' end-of-line
19
+
20
+
bindkey '^[[3~' delete-char
+47
external/zsh/nix-shell-generate.zsh
+47
external/zsh/nix-shell-generate.zsh
···
1
+
# Copyright (c) 2025 Sebaguardian
2
+
3
+
function nix-shell-generate() {
4
+
if [ -z "$filename" ]; then
5
+
filename='shell.nix'
6
+
fi
7
+
8
+
if [ -e "$filename" ]; then
9
+
echo "$filename already exists"
10
+
return 1
11
+
fi
12
+
13
+
touch "$filename"
14
+
{ tee "$filename" << EOF
15
+
{ pkgs ? import <nixpkgs> {} }:
16
+
17
+
let
18
+
mainPkg = if builtins.pathExists ./default.nix then pkgs.callPackage ./default.nix { } else { };
19
+
20
+
pkgInputs =
21
+
with pkgs;
22
+
[
23
+
EOF
24
+
} > /dev/null
25
+
26
+
echo " $@" >> "$filename"
27
+
28
+
{ tee -a "$filename" << EOF
29
+
]
30
+
++ (mainPkg.nativeBuildInputs or [ ]);
31
+
in
32
+
pkgs.mkShell {
33
+
packages = pkgInputs;
34
+
35
+
shellHook = ''
36
+
echo -ne "-----------------------------------\\n "
37
+
38
+
echo -n "\${toString (map (pkg: "• \${pkg.name}\\n") pkgInputs)}"
39
+
40
+
echo "-----------------------------------"
41
+
'';
42
+
}
43
+
EOF
44
+
} > /dev/null
45
+
46
+
echo "$filename generated"
47
+
}
+7
external/zsh/profile.zsh
+7
external/zsh/profile.zsh
+70
external/zsh/prompt.zsh
+70
external/zsh/prompt.zsh
···
1
+
export LS_COLORS=$(/run/current-system/sw/bin/dircolors -b)
2
+
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
3
+
zstyle ':completion:*' menu select
4
+
zstyle ':completion:*' list-dirs-first true
5
+
zstyle ':completion:*' group-name ''
6
+
zstyle ':completion:*:matches' group 'yes'
7
+
8
+
autoload -Uz vcs_info
9
+
10
+
setopt nopromptsubst
11
+
12
+
local accent=$'\e[0;38;2;180;190;254m'
13
+
local dim=$'\e[2m'
14
+
local reset=$'\e[0m'
15
+
local newline=$'\n'
16
+
17
+
zstyle ':vcs_info:*' formats "${dim}%s( ${accent}%b${reset}${dim} )"
18
+
zstyle ':vcs_info:*' actionformats "${dim}%s( ${accent}%b${reset} | ${accent}%a${reset}${dim} )"
19
+
zstyle ':vcs_info:*' enable git
20
+
21
+
function precmd() {
22
+
local last_status=$?
23
+
local last_command=$(fc -ln -1 | awk '{print $1}')
24
+
25
+
vcs_info
26
+
27
+
local cwd="${PWD/#$HOME/~}"
28
+
29
+
if [[ "${cwd:0:1}" == '/' ]]; then
30
+
cwd="${accent}/${${cwd:1}//\//${reset} ${dim}» ${accent}}"
31
+
elif [[ "${cwd:0:2}" == '~/' ]]; then
32
+
cwd="${${cwd:2}//\//${reset} ${dim}» ${accent}}"
33
+
else
34
+
cwd="${${cwd//\//${reset} ${dim}» ${accent}}}"
35
+
fi
36
+
37
+
cwd="${accent}${cwd}${reset}"
38
+
39
+
local baseprompt="${reset}${dim}%n${reset}${accent}@${reset}${dim}%m${reset}:${accent}%l${reset} ${dim}->${reset} ${cwd} ${dim}(${reset}%?${dim})${reset}${newline}"
40
+
41
+
if [[ "$last_command" == 'cat' || "$last_command" == 'head' || "$last_command" == 'tail' || "$last_command" == 'tac' || "$last_command" == 'nc' || "$last_command" == 'ncat' || "$last_command" == 'netcat' || "$last_command" == 'kitget' ]]; then
42
+
baseprompt+='😻'
43
+
elif [[ "$last_command" == 'sudo' ]]; then
44
+
baseprompt+='🙀'
45
+
elif (( last_status == 0 )); then
46
+
baseprompt+='😺'
47
+
else
48
+
baseprompt+='😿'
49
+
fi
50
+
51
+
baseprompt+=' '
52
+
53
+
if [[ -n "$IN_NIX_SHELL" ]]; then
54
+
local nix_shell="${accent} ${reset}"
55
+
fi
56
+
57
+
if [[ -z "$vcs_info_msg_0_" ]]; then
58
+
if [[ -n "$nix_shell" ]]; then
59
+
PROMPT="${nix_shell}${newline}${baseprompt}"
60
+
else
61
+
PROMPT="${baseprompt}"
62
+
fi
63
+
elif [[ -n "$(git diff --cached --name-status 2>/dev/null)" ]]; then
64
+
PROMPT="${vcs_info_msg_0_}${reset} COMMIT ${nix_shell} ${newline}${baseprompt}"
65
+
elif [[ -n "$(git diff --name-status 2>/dev/null)" ]]; then
66
+
PROMPT="${vcs_info_msg_0_}${reset} DIRTY ${nix_shell} ${newline}${baseprompt}"
67
+
else
68
+
PROMPT="${vcs_info_msg_0_} ${nix_shell}${newline}${baseprompt}"
69
+
fi
70
+
}
+164
flake.lock
+164
flake.lock
···
1
+
{
2
+
"nodes": {
3
+
"agenix": {
4
+
"inputs": {
5
+
"darwin": "darwin",
6
+
"home-manager": [
7
+
"home-manager"
8
+
],
9
+
"nixpkgs": [
10
+
"nixpkgs"
11
+
],
12
+
"systems": "systems"
13
+
},
14
+
"locked": {
15
+
"lastModified": 1754433428,
16
+
"narHash": "sha256-NA/FT2hVhKDftbHSwVnoRTFhes62+7dxZbxj5Gxvghs=",
17
+
"owner": "ryantm",
18
+
"repo": "agenix",
19
+
"rev": "9edb1787864c4f59ae5074ad498b6272b3ec308d",
20
+
"type": "github"
21
+
},
22
+
"original": {
23
+
"owner": "ryantm",
24
+
"repo": "agenix",
25
+
"type": "github"
26
+
}
27
+
},
28
+
"darwin": {
29
+
"inputs": {
30
+
"nixpkgs": [
31
+
"agenix",
32
+
"nixpkgs"
33
+
]
34
+
},
35
+
"locked": {
36
+
"lastModified": 1744478979,
37
+
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
38
+
"owner": "lnl7",
39
+
"repo": "nix-darwin",
40
+
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
41
+
"type": "github"
42
+
},
43
+
"original": {
44
+
"owner": "lnl7",
45
+
"ref": "master",
46
+
"repo": "nix-darwin",
47
+
"type": "github"
48
+
}
49
+
},
50
+
"home-manager": {
51
+
"inputs": {
52
+
"nixpkgs": [
53
+
"nixpkgs"
54
+
]
55
+
},
56
+
"locked": {
57
+
"lastModified": 1758463745,
58
+
"narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=",
59
+
"owner": "nix-community",
60
+
"repo": "home-manager",
61
+
"rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3",
62
+
"type": "github"
63
+
},
64
+
"original": {
65
+
"owner": "nix-community",
66
+
"ref": "release-25.05",
67
+
"repo": "home-manager",
68
+
"type": "github"
69
+
}
70
+
},
71
+
"nixpkgs": {
72
+
"locked": {
73
+
"lastModified": 1759735786,
74
+
"narHash": "sha256-a0+h02lyP2KwSNrZz4wLJTu9ikujNsTWIC874Bv7IJ0=",
75
+
"owner": "NixOS",
76
+
"repo": "nixpkgs",
77
+
"rev": "20c4598c84a671783f741e02bf05cbfaf4907cff",
78
+
"type": "github"
79
+
},
80
+
"original": {
81
+
"id": "nixpkgs",
82
+
"ref": "nixos-25.05",
83
+
"type": "indirect"
84
+
}
85
+
},
86
+
"nixpkgs-unstable": {
87
+
"locked": {
88
+
"lastModified": 1760524057,
89
+
"narHash": "sha256-EVAqOteLBFmd7pKkb0+FIUyzTF61VKi7YmvP1tw4nEw=",
90
+
"owner": "NixOS",
91
+
"repo": "nixpkgs",
92
+
"rev": "544961dfcce86422ba200ed9a0b00dd4b1486ec5",
93
+
"type": "github"
94
+
},
95
+
"original": {
96
+
"id": "nixpkgs",
97
+
"ref": "nixos-unstable",
98
+
"type": "indirect"
99
+
}
100
+
},
101
+
"root": {
102
+
"inputs": {
103
+
"agenix": "agenix",
104
+
"home-manager": "home-manager",
105
+
"nixpkgs": "nixpkgs",
106
+
"nixpkgs-unstable": "nixpkgs-unstable",
107
+
"spicetify-nix": "spicetify-nix"
108
+
}
109
+
},
110
+
"spicetify-nix": {
111
+
"inputs": {
112
+
"nixpkgs": [
113
+
"nixpkgs"
114
+
],
115
+
"systems": "systems_2"
116
+
},
117
+
"locked": {
118
+
"lastModified": 1760741187,
119
+
"narHash": "sha256-P2xLbEf0NBKXK9XMdAegHNx2GLhCYyZE2c3M3orCqBA=",
120
+
"owner": "Gerg-L",
121
+
"repo": "spicetify-nix",
122
+
"rev": "d11f7efb931d6bf4db6a1f79fcafa4ca9d6bfad9",
123
+
"type": "github"
124
+
},
125
+
"original": {
126
+
"owner": "Gerg-L",
127
+
"repo": "spicetify-nix",
128
+
"type": "github"
129
+
}
130
+
},
131
+
"systems": {
132
+
"locked": {
133
+
"lastModified": 1681028828,
134
+
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
135
+
"owner": "nix-systems",
136
+
"repo": "default",
137
+
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
138
+
"type": "github"
139
+
},
140
+
"original": {
141
+
"owner": "nix-systems",
142
+
"repo": "default",
143
+
"type": "github"
144
+
}
145
+
},
146
+
"systems_2": {
147
+
"locked": {
148
+
"lastModified": 1681028828,
149
+
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
150
+
"owner": "nix-systems",
151
+
"repo": "default",
152
+
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
153
+
"type": "github"
154
+
},
155
+
"original": {
156
+
"owner": "nix-systems",
157
+
"repo": "default",
158
+
"type": "github"
159
+
}
160
+
}
161
+
},
162
+
"root": "root",
163
+
"version": 7
164
+
}
+57
flake.nix
+57
flake.nix
···
1
+
{
2
+
description = "my nixos dotfiles :3";
3
+
4
+
inputs = {
5
+
nixpkgs.url = "nixpkgs/nixos-25.05";
6
+
nixpkgs-unstable.url = "nixpkgs/nixos-unstable";
7
+
8
+
home-manager = {
9
+
url = "github:nix-community/home-manager/release-25.05";
10
+
inputs.nixpkgs.follows = "nixpkgs";
11
+
};
12
+
13
+
spicetify-nix = {
14
+
url = "github:Gerg-L/spicetify-nix";
15
+
inputs.nixpkgs.follows = "nixpkgs";
16
+
};
17
+
18
+
agenix = {
19
+
url = "github:ryantm/agenix";
20
+
inputs.nixpkgs.follows = "nixpkgs";
21
+
inputs.home-manager.follows = "home-manager";
22
+
};
23
+
};
24
+
25
+
outputs =
26
+
{
27
+
self,
28
+
nixpkgs,
29
+
home-manager,
30
+
...
31
+
}@inputs:
32
+
let
33
+
lib = nixpkgs.lib;
34
+
system = "x86_64-linux";
35
+
36
+
mkHost =
37
+
name:
38
+
lib.nixosSystem {
39
+
specialArgs = { inherit inputs; };
40
+
41
+
modules = [
42
+
./modules/base
43
+
./systems/${name}
44
+
home-manager.nixosModules.home-manager
45
+
./modules/home
46
+
];
47
+
};
48
+
in
49
+
{
50
+
nixosConfigurations = {
51
+
desktop = mkHost "desktop";
52
+
laptop = mkHost "laptop";
53
+
};
54
+
55
+
formatter.${system} = nixpkgs.legacyPackages.${system}.nixfmt-tree;
56
+
};
57
+
}
+47
home/adam.nix
+47
home/adam.nix
···
1
+
{ pkgs, config, ... }:
2
+
3
+
{
4
+
home = {
5
+
username = "adam";
6
+
homeDirectory = "/home/adam";
7
+
stateVersion = "25.05";
8
+
};
9
+
10
+
imports = [
11
+
./modules/age.nix
12
+
./modules/theme.nix
13
+
./modules/dotfiles.nix
14
+
./modules/programs
15
+
];
16
+
17
+
age = {
18
+
identityPaths = [ "${config.home.homeDirectory}/.ssh/id_ed25519" ];
19
+
secrets = {
20
+
chromium = {
21
+
file = ../secrets/chromium.sh.age;
22
+
mode = "0500";
23
+
path = "${config.home.homeDirectory}/.local/bin/chromium";
24
+
};
25
+
};
26
+
};
27
+
28
+
home.packages = with pkgs; [
29
+
prettyping
30
+
fastfetch
31
+
playerctl
32
+
lsd
33
+
jq
34
+
35
+
nerd-fonts.fira-code
36
+
wl-clipboard
37
+
hyprpaper
38
+
hyprcursor
39
+
grim
40
+
slurp
41
+
42
+
nixd
43
+
bash-language-server
44
+
45
+
unstable.kitget
46
+
];
47
+
}
+7
home/modules/age.nix
+7
home/modules/age.nix
+19
home/modules/dotfiles.nix
+19
home/modules/dotfiles.nix
···
1
+
{ config, pkgs, ... }:
2
+
3
+
let
4
+
dotfiles = "${config.home.homeDirectory}/dotfiles/external/config";
5
+
create_symlink = path: config.lib.file.mkOutOfStoreSymlink path;
6
+
7
+
configs = {
8
+
hypr = "hypr";
9
+
nvim = "nvim";
10
+
fastfetch = "fastfetch";
11
+
lsd = "lsd";
12
+
};
13
+
in
14
+
{
15
+
xdg.configFile = builtins.mapAttrs (name: subpath: {
16
+
source = create_symlink "${dotfiles}/${subpath}";
17
+
recursive = true;
18
+
}) configs;
19
+
}
+20
home/modules/programs/chromium.nix
+20
home/modules/programs/chromium.nix
···
1
+
{
2
+
programs.chromium = {
3
+
enable = true;
4
+
extensions = [
5
+
{ id = "bgnkhhnnamicmpeenaelnjfhikgbkllg"; } # AdGuard AdBlocker
6
+
{ id = "bkkmolkhemgaeaeggcmfbghljjjoofoh"; } # Catppuccin Chrome Theme - Mocha
7
+
{ id = "lnjaiaapbakfhlbjenjkhffcdpoompki"; } # Catppuccin for Web File Explorer Icons
8
+
{ id = "eimadpbcbfnmbkopoojfekhnkhdbieeh"; } # Dark Reader
9
+
{ id = "clngdbkpkpeebahjckkjfobafhncgmne"; } # Stylus
10
+
];
11
+
};
12
+
13
+
xdg.mimeApps.defaultApplications = {
14
+
"text/html" = [ "chromium-browser.desktop" ];
15
+
"x-scheme-handler/http" = [ "chromium-browser.desktop" ];
16
+
"x-scheme-handler/https" = [ "chromium-browser.desktop" ];
17
+
};
18
+
19
+
home.sessionVariables.DEFAULT_BROWSER = "chromium";
20
+
}
+17
home/modules/programs/default.nix
+17
home/modules/programs/default.nix
+90
home/modules/programs/element.nix
+90
home/modules/programs/element.nix
···
1
+
{ pkgs, ... }:
2
+
3
+
{
4
+
home.packages = with pkgs; [
5
+
sqlcipher
6
+
];
7
+
8
+
programs.element-desktop = {
9
+
enable = true;
10
+
settings = {
11
+
default_server_config = {
12
+
"m.homeserver" = {
13
+
base_url = "https://matrix.org";
14
+
server_name = "matrix.org";
15
+
};
16
+
"m.identity_server" = {
17
+
base_url = "https://vector.im";
18
+
};
19
+
};
20
+
disable_custom_urls = true;
21
+
disable_guests = true;
22
+
disable_login_language_selector = true;
23
+
disable_3pid_login = false;
24
+
force_verification = true;
25
+
brand = "Element";
26
+
integrations_ui_url = "https://scalar.vector.im/";
27
+
integrations_rest_url = "https://scalar.vector.im/api";
28
+
integrations_widgets_urls = [
29
+
"https://scalar.vector.im/_matrix/integrations/v1"
30
+
"https://scalar.vector.im/api"
31
+
"https://scalar-staging.vector.im/_matrix/integrations/v1"
32
+
"https://scalar-staging.vector.im/api"
33
+
];
34
+
show_labs_settings = true;
35
+
features = { };
36
+
default_federate = true;
37
+
default_theme = "catppuccin";
38
+
room_directory.servers = [ "matrix.org" ];
39
+
setting_defaults.breadcrumbs = true;
40
+
jitsi.preferred_domain = "meet.element.io";
41
+
element_call = {
42
+
url = "https://call.element.io";
43
+
participant_limit = 8;
44
+
brand = "Element Call";
45
+
};
46
+
map_style_url = "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx";
47
+
48
+
custom_themes = [
49
+
{
50
+
name = "catppuccin";
51
+
is_dark = true;
52
+
colors = {
53
+
accent-color = "#b4befe";
54
+
primary-background-color = "#b4befe";
55
+
warning-color = "#eba0ac";
56
+
alert = "#f9e2af";
57
+
sidebar-color = "#11111b";
58
+
roomlist-background-color = "#181825";
59
+
roomlist-text-color = "#cdd6f4";
60
+
roomlist-text-secondary-color = "#9399b2";
61
+
roomlist-highlights-color = "#45475a";
62
+
roomlist-separator-color = "#7f849c";
63
+
timeline-background-color = "#1e1e2e";
64
+
timeline-text-color = "#cdd6f4";
65
+
secondary-content = "#cdd6f4";
66
+
tertiary-content = "#cdd6f4";
67
+
timeline-text-secondary-color = "#a6adc8";
68
+
timeline-highlights-color = "#181825";
69
+
reaction-row-button-selected-bg-color = "#45475a";
70
+
menu-selected-color = "#45475a";
71
+
focus-bg-color = "#585b70";
72
+
room-highlight-color = "#cba6f7";
73
+
togglesw-off-color = "#9399b2";
74
+
other-user-pill-bg-color = "#cba6f7";
75
+
username-colors = [
76
+
"#b4befe"
77
+
"#74c7ec"
78
+
"#89dceb"
79
+
"#94e2d5"
80
+
"#a6e3a1"
81
+
"#fab387"
82
+
"#eba0ac"
83
+
"#cba6f7"
84
+
];
85
+
};
86
+
}
87
+
];
88
+
};
89
+
};
90
+
}
+61
home/modules/programs/git.nix
+61
home/modules/programs/git.nix
···
1
+
{
2
+
programs.git = {
3
+
enable = true;
4
+
signing.signByDefault = true;
5
+
6
+
diff-so-fancy = {
7
+
enable = true;
8
+
markEmptyLines = false;
9
+
};
10
+
11
+
extraConfig = {
12
+
core = {
13
+
compression = 9;
14
+
whitespace = "error";
15
+
preloadindex = true;
16
+
};
17
+
18
+
pull.rebase = true;
19
+
interactive.singleKey = true;
20
+
21
+
rebase = {
22
+
autoStash = true;
23
+
missingCommitsCheck = "warn";
24
+
};
25
+
26
+
status = {
27
+
branch = true;
28
+
showStash = true;
29
+
showUntrackedFiles = "all";
30
+
};
31
+
32
+
log = {
33
+
abbrevCommit = true;
34
+
};
35
+
36
+
diff = {
37
+
context = 3;
38
+
renames = "copies";
39
+
interHunkContext = 10;
40
+
};
41
+
42
+
"color \"diff\"" = {
43
+
commit = "blue";
44
+
meta = "black bold";
45
+
frag = "magenta";
46
+
context = "white";
47
+
whitespace = "yellow reverse";
48
+
old = "red";
49
+
};
50
+
51
+
"color \"decorate\"" = {
52
+
HEAD = "cyan reverse bold";
53
+
branch = "green";
54
+
tag = "yellow";
55
+
remoteBranch = "magenta";
56
+
};
57
+
58
+
init.defaultBranch = "main";
59
+
};
60
+
};
61
+
}
+17
home/modules/programs/kitty.nix
+17
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
+
};
16
+
};
17
+
}
+32
home/modules/programs/neovim.nix
+32
home/modules/programs/neovim.nix
···
1
+
{ pkgs, ... }:
2
+
3
+
{
4
+
programs.neovim = {
5
+
enable = true;
6
+
withNodeJs = true;
7
+
defaultEditor = true;
8
+
plugins = with pkgs.vimPlugins; [
9
+
catppuccin-nvim
10
+
11
+
nvim-lspconfig
12
+
13
+
nvim-cmp
14
+
cmp-nvim-lsp
15
+
cmp-buffer
16
+
cmp-path
17
+
18
+
indent-blankline-nvim
19
+
nvim-autopairs
20
+
undotree
21
+
gitsigns-nvim
22
+
copilot-lua
23
+
nvim-colorizer-lua
24
+
25
+
cord-nvim
26
+
vim-wakatime
27
+
28
+
jule-nvim
29
+
];
30
+
extraPackages = with pkgs; [ lua-language-server ];
31
+
};
32
+
}
+21
home/modules/programs/rofi.nix
+21
home/modules/programs/rofi.nix
···
1
+
let
2
+
catppuccinMocha = builtins.fetchurl {
3
+
url = "https://raw.githubusercontent.com/catppuccin/rofi/71fb15577ccb091df2f4fc1f65710edbc61b5a53/themes/catppuccin-mocha.rasi";
4
+
sha256 = "0ikn0yc2b9cyzk4xga8mcq1j7xk2idik4wzpsibrphy8qr2pla4b";
5
+
};
6
+
catppuccinConfig = builtins.fetchurl {
7
+
url = "https://raw.githubusercontent.com/catppuccin/rofi/71fb15577ccb091df2f4fc1f65710edbc61b5a53/catppuccin-default.rasi";
8
+
sha256 = "1f3r6yarrykj8cxvi5hblzlr5n8zbncifnxps9xl5gl32w6ysq5z";
9
+
};
10
+
in
11
+
{
12
+
programs.rofi = {
13
+
enable = true;
14
+
font = "FiraCode Nerd Font 14";
15
+
16
+
# cool hack lmao
17
+
theme = ''
18
+
${catppuccinMocha}"
19
+
@import "${catppuccinConfig}'';
20
+
};
21
+
}
+25
home/modules/programs/spicetify.nix
+25
home/modules/programs/spicetify.nix
···
1
+
{ pkgs, spicetify-nix, ... }:
2
+
3
+
let
4
+
spicePkgs = spicetify-nix.legacyPackages.${pkgs.stdenv.system};
5
+
in
6
+
{
7
+
imports = [
8
+
spicetify-nix.homeManagerModules.spicetify
9
+
];
10
+
11
+
programs.spicetify = {
12
+
enable = true;
13
+
theme = spicePkgs.themes.catppuccin;
14
+
colorScheme = "mocha";
15
+
wayland = true;
16
+
enabledExtensions = with spicePkgs.extensions; [
17
+
catJamSynced
18
+
seekSong
19
+
fullAlbumDate
20
+
songStats
21
+
adblock
22
+
playNext
23
+
];
24
+
};
25
+
}
+98
home/modules/programs/vesktop.nix
+98
home/modules/programs/vesktop.nix
···
1
+
{
2
+
programs.vesktop = {
3
+
enable = true;
4
+
settings = {
5
+
arRPC = true;
6
+
splashBackground = "#1e1e2e";
7
+
splashColor = "#cdd6f4";
8
+
splashTheming = true;
9
+
};
10
+
vencord.settings = {
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
+
];
16
+
plugins = {
17
+
NoTrack = {
18
+
enabled = true;
19
+
disableAnalytics = true;
20
+
};
21
+
AlwaysTrust = {
22
+
enabled = true;
23
+
domain = true;
24
+
file = true;
25
+
};
26
+
AnonymiseFileNames = {
27
+
enabled = true;
28
+
anonymiseByDefault = true;
29
+
method = 0;
30
+
randomisedLength = 8;
31
+
};
32
+
BetterSettings = {
33
+
enabled = true;
34
+
disableFade = true;
35
+
organizeMenu = true;
36
+
};
37
+
CallTimer.enabled = true;
38
+
ClearURLs.enabled = true;
39
+
Decor = {
40
+
enabled = true;
41
+
agreedToGuidelines = true;
42
+
};
43
+
Experiments.enabled = true;
44
+
FakeNitro = {
45
+
enabled = true;
46
+
enableEmojiBypass = true;
47
+
emojiSize = 48;
48
+
transformEmojis = true;
49
+
enableStickerBypass = true;
50
+
stickerSize = 160;
51
+
transformStickers = true;
52
+
transformCompoundSentence = true;
53
+
enableStreamQualityBypass = true;
54
+
useHyperLinks = true;
55
+
};
56
+
FakeProfileThemes = {
57
+
enabled = true;
58
+
nitroFirst = true;
59
+
};
60
+
FavoriteGifSearch.enabled = true;
61
+
FixCodeblockGap.enabled = true;
62
+
ForceOwnerCrown.enabled = true;
63
+
FriendsSince.enabled = true;
64
+
MessageLogger = {
65
+
enabled = true;
66
+
deketeStyle = "text";
67
+
logDeletes = true;
68
+
logEdits = true;
69
+
ignoreBots = false;
70
+
ignoreSelf = false;
71
+
collapseDeleted = true;
72
+
inlineEdits = true;
73
+
};
74
+
MoreKaomoji.enabled = true;
75
+
NoTypingAnimation.enabled = true;
76
+
petpet.enabled = true;
77
+
RelationshipNotifier.enabled = true;
78
+
ShowHiddenChannels.enabled = true;
79
+
ShowHiddenThings.enabled = true;
80
+
ShowMeYourName = {
81
+
enabled = true;
82
+
mode = "nick-user";
83
+
displayNames = false;
84
+
inReplies = false;
85
+
friendNicknames = "dms";
86
+
};
87
+
SilentTyping = {
88
+
enabled = true;
89
+
showIcon = true;
90
+
};
91
+
USRBG.enabled = true;
92
+
ViewRaw.enabled = true;
93
+
WhoReacted.enabled = true;
94
+
VolumeBooster.enabled = true;
95
+
};
96
+
};
97
+
};
98
+
}
+148
home/modules/programs/waybar.nix
+148
home/modules/programs/waybar.nix
···
1
+
let
2
+
catppuccin = builtins.fetchurl {
3
+
url = "https://raw.githubusercontent.com/catppuccin/waybar/refs/tags/v1.1/themes/mocha.css";
4
+
sha256 = "puMFl8zIKOiYhE6wzqnffXOHn/VnKmpVDzrMJMk+3Rc=";
5
+
};
6
+
in
7
+
{
8
+
programs.waybar = {
9
+
enable = true;
10
+
11
+
settings = {
12
+
mainBar = {
13
+
layer = "top";
14
+
position = "top";
15
+
width = 1920;
16
+
17
+
modules-left = [ "hyprland/workspaces" ];
18
+
modules-center = [ "custom/music" ];
19
+
modules-right = [
20
+
"tray"
21
+
"battery"
22
+
"clock"
23
+
];
24
+
25
+
"hyprland/workspaces" = {
26
+
disable-scroll = true;
27
+
sort-by-name = true;
28
+
format = " {icon} ";
29
+
format-icons = {
30
+
"default" = "";
31
+
"9" = "";
32
+
"10" = "";
33
+
};
34
+
};
35
+
36
+
"custom/music" = {
37
+
escape = true;
38
+
interval = 10;
39
+
tooltop = false;
40
+
exec = "playerctl metadata --format '{{ artist }} {{ title }}'";
41
+
on-click = "playerctl play-pause";
42
+
max-length = 100;
43
+
};
44
+
45
+
tray = {
46
+
icon-size = 18;
47
+
spacing = 10;
48
+
};
49
+
50
+
battery = {
51
+
states = {
52
+
warning = 30;
53
+
critical = 15;
54
+
};
55
+
format = "{icon}";
56
+
format-charging = "";
57
+
format-plugged = "";
58
+
format-alt = "{icon}";
59
+
format-icons = [
60
+
""
61
+
""
62
+
""
63
+
""
64
+
""
65
+
""
66
+
""
67
+
""
68
+
""
69
+
""
70
+
];
71
+
};
72
+
73
+
clock = {
74
+
timezone = "Europe/Warsaw";
75
+
format = "{:%H:%M}";
76
+
tooltip-format = "<big>{:%B %d}</big>\n<tt><small>{calendar}</small></tt>";
77
+
};
78
+
};
79
+
};
80
+
81
+
style = ''
82
+
@import "${catppuccin}";
83
+
84
+
* {
85
+
font-family: 'Fira Code Nerd Font', monospace;
86
+
font-size: 14px;
87
+
border: none;
88
+
border-radius: 0;
89
+
min-height: 0;
90
+
}
91
+
92
+
#waybar {
93
+
background: transparent;
94
+
color: @lavender;
95
+
}
96
+
97
+
#workspaces {
98
+
background-color: @base;
99
+
border: 2px solid @lavender;
100
+
}
101
+
102
+
#workspaces button {
103
+
padding: 5px;
104
+
margin: 0;
105
+
color: @lavender;
106
+
}
107
+
108
+
#workspaces button.active {
109
+
color: @mauve;
110
+
}
111
+
112
+
#custom-music,
113
+
#tray,
114
+
#clock,
115
+
#battery {
116
+
border: 2px solid @lavender;
117
+
background-color: @base;
118
+
padding: 0 5px;
119
+
}
120
+
121
+
#tray {
122
+
border-right: none;
123
+
}
124
+
125
+
#clock {
126
+
border-left: none;
127
+
}
128
+
129
+
#battery {
130
+
border-left: none;
131
+
border-right: none;
132
+
color: @teal;
133
+
}
134
+
135
+
#battery.charging {
136
+
color: @teal;
137
+
}
138
+
139
+
#battery.warning:not(.charging) {
140
+
color: @red;
141
+
}
142
+
143
+
#custom-music {
144
+
color: @mauve;
145
+
}
146
+
'';
147
+
};
148
+
}
+6
home/modules/programs/zoxide.nix
+6
home/modules/programs/zoxide.nix
+69
home/modules/programs/zsh.nix
+69
home/modules/programs/zsh.nix
···
1
+
{ pkgs, config, ... }:
2
+
3
+
{
4
+
programs.zsh = {
5
+
enable = true;
6
+
7
+
plugins = [
8
+
{
9
+
name = "syntax-highlighting";
10
+
src = pkgs.zsh-syntax-highlighting;
11
+
file = "share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh";
12
+
}
13
+
{
14
+
name = "autosuggestions";
15
+
src = pkgs.zsh-autosuggestions;
16
+
file = "share/zsh-autosuggestions/zsh-autosuggestions.zsh";
17
+
}
18
+
{
19
+
name = "autopair";
20
+
src = pkgs.zsh-autopair;
21
+
file = "share/zsh/zsh-autopair/autopair.zsh";
22
+
}
23
+
];
24
+
25
+
shellAliases = {
26
+
cp = "cp -i";
27
+
nv = ''nvim -u "$HOME/.config/nvim/init.lua"'';
28
+
shred = "shred -uvz";
29
+
30
+
diff = "diff --color=auto";
31
+
grep = "grep --color=auto";
32
+
ip = "ip -color=auto";
33
+
ping = "prettyping";
34
+
35
+
ls = "lsd -hN";
36
+
la = "lsd -lahN";
37
+
ll = "lsd -llhN";
38
+
39
+
gap = "git add --patch";
40
+
ga = "git add";
41
+
gc = "git commit --edit -S";
42
+
gp = "git push origin";
43
+
gb = "git branch";
44
+
gl = "git log";
45
+
gd = "git diff";
46
+
gco = "git checkout";
47
+
gpull = "git pull origin";
48
+
gmain = "if ! git checkout --track origin/main; then if ! git checkout main; then git checkout master; fi; fi";
49
+
};
50
+
51
+
envExtra = ''
52
+
export DOTFILES="${config.home.homeDirectory}/dotfiles"
53
+
'';
54
+
55
+
initContent = ''
56
+
export GPG_TTY=$(tty)
57
+
58
+
. "$DOTFILES/external/zsh/keymap.zsh"
59
+
. "$DOTFILES/external/zsh/prompt.zsh"
60
+
. "$DOTFILES/external/zsh/functions.zsh"
61
+
62
+
ff
63
+
'';
64
+
65
+
profileExtra = ''
66
+
. "$DOTFILES/external/zsh/profile.zsh"
67
+
'';
68
+
};
69
+
}
+35
home/modules/theme.nix
+35
home/modules/theme.nix
···
1
+
{ pkgs, ... }:
2
+
3
+
{
4
+
home.packages = with pkgs; [
5
+
catppuccin-papirus-folders
6
+
magnetic-catppuccin-gtk
7
+
catppuccin-cursors.mochaDark
8
+
];
9
+
10
+
gtk = {
11
+
enable = true;
12
+
theme.name = "Catppuccin-GTK-Dark";
13
+
iconTheme.name = "Papirus-Dark";
14
+
cursorTheme = {
15
+
name = "catppuccin-mocha-dark-cursors";
16
+
size = 24;
17
+
};
18
+
};
19
+
20
+
xdg.configFile."gtk-3.0/settings.ini".text = ''
21
+
[Settings]
22
+
gtk-theme-name=Catppuccin-GTK-Dark
23
+
gtk-icon-theme-name=Papirus-Dark
24
+
gtk-cursor-theme-name=catppuccin-mocha-dark-cursors
25
+
gtk-cursor-theme-size=24
26
+
'';
27
+
28
+
xdg.configFile."gtk-4.0/settings.ini".text = ''
29
+
[Settings]
30
+
gtk-theme-name=Catppuccin-GTK-Dark
31
+
gtk-icon-theme-name=Papirus-Dark
32
+
gtk-cursor-theme-name=catppuccin-mocha-dark-cursors
33
+
gtk-cursor-theme-size=24
34
+
'';
35
+
}
+89
modules/base/default.nix
+89
modules/base/default.nix
···
1
+
{ pkgs, inputs, ... }:
2
+
3
+
{
4
+
boot.loader = {
5
+
systemd-boot.enable = true;
6
+
efi.canTouchEfiVariables = true;
7
+
};
8
+
9
+
networking = {
10
+
networkmanager.enable = true;
11
+
firewall.enable = true;
12
+
};
13
+
14
+
console = {
15
+
font = "Lat2-Terminus16";
16
+
useXkbConfig = false;
17
+
};
18
+
19
+
users.users.adam = {
20
+
isNormalUser = true;
21
+
shell = pkgs.zsh;
22
+
ignoreShellProgramCheck = true;
23
+
extraGroups = [
24
+
"wheel"
25
+
];
26
+
packages = with pkgs; [
27
+
pavucontrol
28
+
gh
29
+
];
30
+
};
31
+
32
+
nixpkgs = {
33
+
config.allowUnfree = true;
34
+
overlays = [
35
+
(final: prev: {
36
+
unstable = import inputs.nixpkgs-unstable {
37
+
system = prev.stdenv.hostPlatform.system;
38
+
config = prev.config;
39
+
};
40
+
})
41
+
];
42
+
};
43
+
44
+
environment = {
45
+
localBinInPath = true;
46
+
systemPackages = with pkgs; [ htop ];
47
+
};
48
+
49
+
programs.nano.enable = false;
50
+
51
+
services.pipewire = {
52
+
enable = true;
53
+
pulse.enable = true;
54
+
};
55
+
56
+
services.openssh = {
57
+
enable = true;
58
+
openFirewall = true;
59
+
hostKeys = [
60
+
{
61
+
path = "/home/adam/.ssh/id_ed25519";
62
+
type = "ed25519";
63
+
}
64
+
];
65
+
settings = {
66
+
PasswordAuthentication = false;
67
+
PermitRootLogin = "no";
68
+
PubkeyAuthentication = true;
69
+
};
70
+
};
71
+
72
+
programs.gnupg.agent = {
73
+
enable = true;
74
+
enableSSHSupport = true;
75
+
pinentryPackage = pkgs.pinentry-curses;
76
+
};
77
+
78
+
programs.hyprland = {
79
+
enable = true;
80
+
xwayland.enable = true;
81
+
};
82
+
83
+
nix.settings.experimental-features = [
84
+
"nix-command"
85
+
"flakes"
86
+
];
87
+
88
+
system.stateVersion = "25.05";
89
+
}
+15
modules/home/default.nix
+15
modules/home/default.nix
···
1
+
{ inputs, ... }:
2
+
3
+
let
4
+
agenix = inputs.agenix;
5
+
spicetify-nix = inputs.spicetify-nix;
6
+
in
7
+
{
8
+
home-manager = {
9
+
useGlobalPkgs = true;
10
+
useUserPackages = true;
11
+
backupFileExtension = "bak";
12
+
extraSpecialArgs = { inherit agenix spicetify-nix; };
13
+
users.adam = import ../../home/adam.nix;
14
+
};
15
+
}
secrets/chromium.sh.age
secrets/chromium.sh.age
This is a binary file and will not be displayed.
+6
secrets/secrets.nix
+6
secrets/secrets.nix
+31
systems/desktop/default.nix
+31
systems/desktop/default.nix
···
1
+
{ pkgs, ... }:
2
+
3
+
{
4
+
imports = [
5
+
./hardware-configuration.nix
6
+
];
7
+
8
+
networking.hostName = "desktop";
9
+
10
+
time.timeZone = "Europe/Warsaw";
11
+
i18n.defaultLocale = "en_US.UTF-8";
12
+
console.keyMap = "pl";
13
+
14
+
hardware.graphics.enable = true;
15
+
services.xserver.videoDrivers = [ "nvidia" ];
16
+
17
+
hardware.nvidia = {
18
+
modesetting.enable = true;
19
+
powerManagement.enable = true;
20
+
open = true;
21
+
nvidiaSettings = false;
22
+
};
23
+
24
+
programs.steam = {
25
+
enable = true;
26
+
extraCompatPackages = with pkgs; [ proton-ge-bin ];
27
+
remotePlay.openFirewall = true;
28
+
};
29
+
30
+
programs.gamemode.enable = true;
31
+
}
+51
systems/desktop/hardware-configuration.nix
+51
systems/desktop/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
+
modulesPath,
8
+
...
9
+
}:
10
+
11
+
{
12
+
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
13
+
14
+
boot.initrd.availableKernelModules = [
15
+
"xhci_pci"
16
+
"ehci_pci"
17
+
"ahci"
18
+
"usbhid"
19
+
"usb_storage"
20
+
"sd_mod"
21
+
];
22
+
boot.initrd.kernelModules = [ ];
23
+
boot.kernelModules = [ "kvm-intel" ];
24
+
boot.extraModulePackages = [ ];
25
+
26
+
fileSystems."/" = {
27
+
device = "/dev/disk/by-uuid/69b512d4-2e73-434a-9ae2-1ff112467faa";
28
+
fsType = "ext4";
29
+
};
30
+
31
+
fileSystems."/boot" = {
32
+
device = "/dev/disk/by-uuid/EFD2-C33E";
33
+
fsType = "vfat";
34
+
options = [
35
+
"fmask=0022"
36
+
"dmask=0022"
37
+
];
38
+
};
39
+
40
+
swapDevices = [ { device = "/dev/disk/by-uuid/2c68cacc-4813-4d63-aa7c-763c1eef0960"; } ];
41
+
42
+
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
43
+
# (the default) this is the recommended approach. When using systemd-networkd it's
44
+
# still possible to use this option, but it's recommended to use it in conjunction
45
+
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
46
+
networking.useDHCP = lib.mkDefault true;
47
+
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
48
+
49
+
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
50
+
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
51
+
}
+11
systems/laptop/default.nix
+11
systems/laptop/default.nix
+53
systems/laptop/hardware-configuration.nix
+53
systems/laptop/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 = [ (modulesPath + "/installer/scan/not-detected.nix") ];
14
+
15
+
boot.initrd.availableKernelModules = [
16
+
"xhci_pci"
17
+
"thunderbolt"
18
+
"vmd"
19
+
"ahci"
20
+
"nvme"
21
+
"usb_storage"
22
+
"sd_mod"
23
+
];
24
+
boot.initrd.kernelModules = [ ];
25
+
boot.kernelModules = [ "kvm-intel" ];
26
+
boot.extraModulePackages = [ ];
27
+
28
+
fileSystems."/" = {
29
+
device = "/dev/disk/by-uuid/6fc90ab5-4995-4927-b507-14c6953b1392";
30
+
fsType = "ext4";
31
+
};
32
+
33
+
fileSystems."/boot" = {
34
+
device = "/dev/disk/by-uuid/CBA4-3CE2";
35
+
fsType = "vfat";
36
+
options = [
37
+
"fmask=0022"
38
+
"dmask=0022"
39
+
];
40
+
};
41
+
42
+
swapDevices = [ { device = "/dev/disk/by-uuid/0dcdc8f5-638b-4b93-bdd0-453aa8af66d9"; } ];
43
+
44
+
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
45
+
# (the default) this is the recommended approach. When using systemd-networkd it's
46
+
# still possible to use this option, but it's recommended to use it in conjunction
47
+
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
48
+
networking.useDHCP = lib.mkDefault true;
49
+
# networking.interfaces.enp43s0.useDHCP = lib.mkDefault true;
50
+
51
+
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
52
+
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
53
+
}