my nixos dotfiles :3 codeberg.org/koibtw/dotfiles
dotfiles neovim nixos catppuccin linux

chore: reorganize the repo

koi.rip a1f68901

+2
.github/CODEOWNERS
··· 1 + * @adamperkowski 2 + external/zsh/nix-shell-generate.zsh @Sebaguardian
+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
··· 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
··· 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 + ![preview](./doc/preview.webp) 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

This is a binary file and will not be displayed.

+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
··· 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
··· 1 + preload = /home/adam/Pictures/wallpaper.png 2 + wallpaper = , /home/adam/Pictures/wallpaper.png
+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
··· 1 + color: 2 + when: auto 3 + theme: custom 4 + 5 + sorting: 6 + dir-grouping: first
+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
··· 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 + require("nvim-autopairs").setup {}
+9
external/config/nvim/lua/plugconfig/catppuccin.lua
··· 1 + require("catppuccin").setup { 2 + integraions = { 3 + cmp = true, 4 + gitsigns = true, 5 + native_lsp = true, 6 + } 7 + } 8 + 9 + vim.cmd.colorscheme("catppuccin")
+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
··· 1 + require("copilot").setup { 2 + panel = { 3 + enabled = false, 4 + }, 5 + suggestion = { 6 + enabled = true, 7 + auto_trigger = true, 8 + keymap = { 9 + accept = "<M-Tab>", 10 + }, 11 + }, 12 + filetypes = { 13 + ["*"] = true, 14 + } 15 + }
+6
external/config/nvim/lua/plugconfig/cord.lua
··· 1 + require("cord").setup { 2 + display = { 3 + theme = "catppuccin", 4 + flavor = "dark", 5 + }, 6 + }
+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
··· 1 + require("ibl").setup { 2 + scope = { 3 + enabled = false 4 + } 5 + }
+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
··· 1 + require("jule").setup { 2 + format_on_save = true, 3 + enable_cmp = true 4 + }
+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
··· 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
··· 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
··· 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
··· 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
··· 1 + if [ -z "$WAYLAND_DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then 2 + exec Hyprland 3 + fi 4 + 5 + if [ -z "$KITTY_WINDOW_ID" ]; then 6 + export FF_NO_KITGET=1 7 + fi
+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
··· 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
··· 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
··· 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
··· 1 + { agenix, ... }: 2 + 3 + { 4 + imports = [ 5 + agenix.homeManagerModules.default 6 + ]; 7 + }
+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
··· 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
··· 1 + { 2 + imports = [ 3 + ./git.nix 4 + ./zsh.nix 5 + ./zoxide.nix 6 + ./neovim.nix 7 + 8 + ./rofi.nix 9 + ./kitty.nix 10 + ./waybar.nix 11 + 12 + ./vesktop.nix 13 + # ./element.nix 14 + ./chromium.nix 15 + ./spicetify.nix 16 + ]; 17 + }
+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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 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
··· 1 + { 2 + programs.zoxide = { 3 + enable = true; 4 + enableZshIntegration = true; 5 + }; 6 + }
+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
··· 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
··· 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
··· 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

This is a binary file and will not be displayed.

+6
secrets/secrets.nix
··· 1 + let 2 + adam = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID9feAlrIVPuVS28tz54/m7pZkjHHL5aVhV2qwBPPceT"; 3 + in 4 + { 5 + "chromium.sh.age".publicKeys = [ adam ]; 6 + }
+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
··· 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
··· 1 + { 2 + imports = [ 3 + ./hardware-configuration.nix 4 + ]; 5 + 6 + networking.hostName = "laptop"; 7 + 8 + time.timeZone = "Europe/Warsaw"; 9 + i18n.defaultLocale = "en_US.UTF-8"; 10 + console.keyMap = "pl"; 11 + }
+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 + }