this repo has no description

initial commit

+10
.luarc.json
··· 1 + { 2 + "$schema": "https://raw.githubusercontent.com/LuaLS/vscode-lua/refs/heads/master/setting/schema.json", 3 + "runtime.version": "LuaJIT", 4 + "diagnostics.globals": [ 5 + "vim" 6 + ], 7 + "workspace": { 8 + "checkThirdParty": false 9 + } 10 + }
+13
.sops.yaml
··· 1 + keys: 2 + - &diogo ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICCTbCHJ0avif6MQ7izXlHHaubNsOhU2xf9lMvXKLyUQ 3 + 4 + creation_rules: 5 + - path_regex: ^secrets/diogo\.yaml$ 6 + key_groups: 7 + - age: 8 + - *diogo 9 + 10 + - path_regex: ^secrets/services/[^/]+\.yaml$ 11 + key_groups: 12 + - age: 13 + - *diogo
+19
LICENSE
··· 1 + zlib License 2 + 3 + (C) 2025 Diogo (https://bsky.app/profile/diogo.fi) 4 + 5 + This software is provided 'as-is', without any express or implied 6 + warranty. In no event will the authors be held liable for any damages 7 + arising from the use of this software. 8 + 9 + Permission is granted to anyone to use this software for any purpose, 10 + including commercial applications, and to alter it and redistribute it 11 + freely, subject to the following restrictions: 12 + 13 + 1. The origin of this software must not be misrepresented; you must not 14 + claim that you wrote the original software. If you use this software 15 + in a product, an acknowledgment in the product documentation would be 16 + appreciated but is not required. 17 + 2. Altered source versions must be plainly marked as such, and must not be 18 + misrepresented as being the original software. 19 + 3. This notice may not be removed or altered from any source distribution.
+6
README.md
··· 1 + # diogo's dotfiles 2 + 3 + > [!WARNING] 4 + > This is _highly_ opinionated and tailored for my own needs. I wouldn't recommend using this as-is on your machine unless you love debugging at 3 AM. Proceed with caution _(and maybe a backup)_. 5 + 6 + This is where I keep all my config, secrets, and sanity. It's **heavily** inspired by [isabelroses/dotfiles](https://github.com/isabelroses/dotfiles) _(go follow her, she's a legend)_, but with my own chaotic energy sprinkled on top.
+240
flake.lock
··· 1 + { 2 + "nodes": { 3 + "brew-src": { 4 + "flake": false, 5 + "locked": { 6 + "lastModified": 1761551821, 7 + "narHash": "sha256-N3Zj73TAxclhLGgADbPVwcVrhYIBKUgAxjfQuOXre6s=", 8 + "owner": "Homebrew", 9 + "repo": "brew", 10 + "rev": "8f6719274133c5bcc24c058c5a6bcbb3b0cd48b3", 11 + "type": "github" 12 + }, 13 + "original": { 14 + "owner": "Homebrew", 15 + "ref": "4.6.19", 16 + "repo": "brew", 17 + "type": "github" 18 + } 19 + }, 20 + "catppuccin": { 21 + "inputs": { 22 + "nixpkgs": [ 23 + "nixpkgs" 24 + ] 25 + }, 26 + "locked": { 27 + "lastModified": 1763110997, 28 + "narHash": "sha256-S2vF+3D/9vna3/vBV7LHiGUbp+ltPsQhvccIyim6VQg=", 29 + "owner": "catppuccin", 30 + "repo": "nix", 31 + "rev": "e6928cdd3dd20636326c2756d2bc8fd1cd825768", 32 + "type": "github" 33 + }, 34 + "original": { 35 + "owner": "catppuccin", 36 + "repo": "nix", 37 + "type": "github" 38 + } 39 + }, 40 + "darwin": { 41 + "inputs": { 42 + "nixpkgs": [ 43 + "nixpkgs" 44 + ] 45 + }, 46 + "locked": { 47 + "lastModified": 1763505477, 48 + "narHash": "sha256-nJRd4LY2kT3OELfHqdgWjvToNZ4w+zKCMzS2R6z4sXE=", 49 + "owner": "nix-darwin", 50 + "repo": "nix-darwin", 51 + "rev": "3bda9f6b14161becbd07b3c56411f1670e19b9b5", 52 + "type": "github" 53 + }, 54 + "original": { 55 + "owner": "nix-darwin", 56 + "repo": "nix-darwin", 57 + "type": "github" 58 + } 59 + }, 60 + "easy-hosts": { 61 + "locked": { 62 + "lastModified": 1755470564, 63 + "narHash": "sha256-KB1ZryVDoQcbIsItOf4WtxkHhh3ppj+XwMpSnt/2QHc=", 64 + "owner": "tgirlcloud", 65 + "repo": "easy-hosts", 66 + "rev": "d0422bc7b3db26268982aa15d07e60370e76ee1d", 67 + "type": "github" 68 + }, 69 + "original": { 70 + "owner": "tgirlcloud", 71 + "repo": "easy-hosts", 72 + "type": "github" 73 + } 74 + }, 75 + "flake-parts": { 76 + "inputs": { 77 + "nixpkgs-lib": [ 78 + "nixpkgs" 79 + ] 80 + }, 81 + "locked": { 82 + "lastModified": 1762980239, 83 + "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", 84 + "owner": "hercules-ci", 85 + "repo": "flake-parts", 86 + "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", 87 + "type": "github" 88 + }, 89 + "original": { 90 + "owner": "hercules-ci", 91 + "repo": "flake-parts", 92 + "type": "github" 93 + } 94 + }, 95 + "home-manager": { 96 + "inputs": { 97 + "nixpkgs": [ 98 + "nixpkgs" 99 + ] 100 + }, 101 + "locked": { 102 + "lastModified": 1763416652, 103 + "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=", 104 + "owner": "nix-community", 105 + "repo": "home-manager", 106 + "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312", 107 + "type": "github" 108 + }, 109 + "original": { 110 + "owner": "nix-community", 111 + "repo": "home-manager", 112 + "type": "github" 113 + } 114 + }, 115 + "home-manager_2": { 116 + "inputs": { 117 + "nixpkgs": [ 118 + "zen-browser", 119 + "nixpkgs" 120 + ] 121 + }, 122 + "locked": { 123 + "lastModified": 1762964643, 124 + "narHash": "sha256-RYHN8O/Aja59XDji6WSJZPkJpYVUfpSkyH+PEupBJqM=", 125 + "owner": "nix-community", 126 + "repo": "home-manager", 127 + "rev": "827f2a23373a774a8805f84ca5344654c31f354b", 128 + "type": "github" 129 + }, 130 + "original": { 131 + "owner": "nix-community", 132 + "repo": "home-manager", 133 + "type": "github" 134 + } 135 + }, 136 + "homebrew": { 137 + "inputs": { 138 + "brew-src": "brew-src" 139 + }, 140 + "locked": { 141 + "lastModified": 1761927470, 142 + "narHash": "sha256-KsFDGRGD8j1R6TvJ4HkebKsh3HXLY0XazanLrhO3wqE=", 143 + "owner": "zhaofengli", 144 + "repo": "nix-homebrew", 145 + "rev": "3cae36b3a17b09a66435291619dce8cf2c4728ca", 146 + "type": "github" 147 + }, 148 + "original": { 149 + "owner": "zhaofengli", 150 + "repo": "nix-homebrew", 151 + "type": "github" 152 + } 153 + }, 154 + "nixpkgs": { 155 + "locked": { 156 + "lastModified": 1763464769, 157 + "narHash": "sha256-mU85VDFRIgKGq1EhT71bLjhvjJ5yuMEe0Ip1kwCbR80=", 158 + "rev": "6f374686605df381de8541c072038472a5ea2e2d", 159 + "type": "tarball", 160 + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre898015.6f374686605d/nixexprs.tar.xz" 161 + }, 162 + "original": { 163 + "type": "tarball", 164 + "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" 165 + } 166 + }, 167 + "root": { 168 + "inputs": { 169 + "catppuccin": "catppuccin", 170 + "darwin": "darwin", 171 + "easy-hosts": "easy-hosts", 172 + "flake-parts": "flake-parts", 173 + "home-manager": "home-manager", 174 + "homebrew": "homebrew", 175 + "nixpkgs": "nixpkgs", 176 + "sops": "sops", 177 + "systems": "systems", 178 + "zen-browser": "zen-browser" 179 + } 180 + }, 181 + "sops": { 182 + "inputs": { 183 + "nixpkgs": [ 184 + "nixpkgs" 185 + ] 186 + }, 187 + "locked": { 188 + "lastModified": 1763509310, 189 + "narHash": "sha256-s2WzTAD3vJtPACBCZXezNUMTG/wC6SFsU9DxazB9wDI=", 190 + "owner": "Mic92", 191 + "repo": "sops-nix", 192 + "rev": "3ee33c0ed7c5aa61b4e10484d2ebdbdc98afb03e", 193 + "type": "github" 194 + }, 195 + "original": { 196 + "owner": "Mic92", 197 + "repo": "sops-nix", 198 + "type": "github" 199 + } 200 + }, 201 + "systems": { 202 + "locked": { 203 + "lastModified": 1681028828, 204 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 205 + "owner": "nix-systems", 206 + "repo": "default", 207 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 208 + "type": "github" 209 + }, 210 + "original": { 211 + "owner": "nix-systems", 212 + "repo": "default", 213 + "type": "github" 214 + } 215 + }, 216 + "zen-browser": { 217 + "inputs": { 218 + "home-manager": "home-manager_2", 219 + "nixpkgs": [ 220 + "nixpkgs" 221 + ] 222 + }, 223 + "locked": { 224 + "lastModified": 1763521945, 225 + "narHash": "sha256-Zcrafbe4niRJMbzaVOwg7+iedJhwBFttre2DpyCC6qA=", 226 + "owner": "0xc000022070", 227 + "repo": "zen-browser-flake", 228 + "rev": "24d7381b9231c23daceec5d372cc28e877f7785d", 229 + "type": "github" 230 + }, 231 + "original": { 232 + "owner": "0xc000022070", 233 + "repo": "zen-browser-flake", 234 + "type": "github" 235 + } 236 + } 237 + }, 238 + "root": "root", 239 + "version": 7 240 + }
+75
flake.nix
··· 1 + { 2 + description = "diogo's dotfiles"; 3 + 4 + inputs = { 5 + nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"; 6 + 7 + darwin = { 8 + type = "github"; 9 + owner = "nix-darwin"; 10 + repo = "nix-darwin"; 11 + inputs.nixpkgs.follows = "nixpkgs"; 12 + }; 13 + 14 + home-manager = { 15 + type = "github"; 16 + owner = "nix-community"; 17 + repo = "home-manager"; 18 + inputs.nixpkgs.follows = "nixpkgs"; 19 + }; 20 + 21 + catppuccin = { 22 + type = "github"; 23 + owner = "catppuccin"; 24 + repo = "nix"; 25 + inputs.nixpkgs.follows = "nixpkgs"; 26 + }; 27 + 28 + homebrew = { 29 + type = "github"; 30 + owner = "zhaofengli"; 31 + repo = "nix-homebrew"; 32 + }; 33 + 34 + flake-parts = { 35 + type = "github"; 36 + owner = "hercules-ci"; 37 + repo = "flake-parts"; 38 + inputs.nixpkgs-lib.follows = "nixpkgs"; 39 + }; 40 + 41 + easy-hosts = { 42 + type = "github"; 43 + owner = "tgirlcloud"; 44 + repo = "easy-hosts"; 45 + }; 46 + 47 + systems = { 48 + type = "github"; 49 + owner = "nix-systems"; 50 + repo = "default"; 51 + }; 52 + 53 + sops = { 54 + type = "github"; 55 + owner = "Mic92"; 56 + repo = "sops-nix"; 57 + inputs.nixpkgs.follows = "nixpkgs"; 58 + }; 59 + 60 + zen-browser = { 61 + type = "github"; 62 + owner = "0xc000022070"; 63 + repo = "zen-browser-flake"; 64 + inputs.nixpkgs.follows = "nixpkgs"; 65 + }; 66 + }; 67 + 68 + outputs = 69 + inputs: 70 + inputs.flake-parts.lib.mkFlake { inherit inputs; } { 71 + imports = [ 72 + ./flake 73 + ]; 74 + }; 75 + }
+12
flake/args.nix
··· 1 + { inputs, ... }: 2 + { 3 + systems = import inputs.systems; 4 + 5 + perSystem = 6 + { system, ... }: 7 + { 8 + _module.args.pkgs = import inputs.nixpkgs { 9 + inherit system; 10 + }; 11 + }; 12 + }
+8
flake/default.nix
··· 1 + { 2 + imports = [ 3 + ../hosts 4 + ./args.nix 5 + ./formatter.nix 6 + ./lib 7 + ]; 8 + }
+43
flake/formatter.nix
··· 1 + { 2 + perSystem = 3 + { pkgs, config, ... }: 4 + { 5 + formatter = pkgs.treefmt.withConfig { 6 + runtimeInputs = with pkgs; [ 7 + nixfmt 8 + shfmt 9 + stylua 10 + ]; 11 + 12 + settings = { 13 + on-unmatched = "info"; 14 + tree-root-file = "flake.nix"; 15 + 16 + formatter = { 17 + nixfmt = { 18 + command = "nixfmt"; 19 + includes = [ "*.nix" ]; 20 + }; 21 + 22 + shfmt = { 23 + command = "shfmt"; 24 + options = [ 25 + "-s" 26 + "-w" 27 + "-i" 28 + "2" 29 + ]; 30 + includes = [ 31 + "*.sh" 32 + ]; 33 + }; 34 + 35 + stylua = { 36 + command = "stylua"; 37 + includes = [ "*.lua" ]; 38 + }; 39 + }; 40 + }; 41 + }; 42 + }; 43 + }
+12
flake/lib/default.nix
··· 1 + # original: https://github.com/isabelroses/dotfiles/blob/main/modules/flake/lib/default.nix 2 + { lib, ... }: 3 + let 4 + sysLib = lib.fixedPoints.makeExtensible (final: { 5 + services = import ./services.nix { inherit lib; }; 6 + 7 + inherit (final.services) mkServiceOption; 8 + }); 9 + in 10 + { 11 + flake.lib = sysLib; 12 + }
+41
flake/lib/services.nix
··· 1 + # original: https://github.com/isabelroses/dotfiles/blob/main/modules/flake/lib/services.nix 2 + { lib, ... }: 3 + let 4 + inherit (lib.types) str; 5 + inherit (lib.options) mkOption mkEnableOption; 6 + 7 + mkServiceOption = 8 + name: 9 + { 10 + port ? 0, 11 + host ? "127.0.0.1", 12 + domain ? "", 13 + extraConfig ? { }, 14 + }: 15 + { 16 + enable = mkEnableOption "Enable the ${name} service"; 17 + 18 + host = mkOption { 19 + type = str; 20 + default = host; 21 + description = "Host where the ${name} service will run on"; 22 + }; 23 + 24 + port = mkOption { 25 + type = lib.types.port; 26 + default = port; 27 + description = "Port where the ${name} service will run on"; 28 + }; 29 + 30 + domain = mkOption { 31 + type = str; 32 + default = domain; 33 + defaultText = "networking.domain"; 34 + description = "Domain for the ${name} service"; 35 + }; 36 + } 37 + // extraConfig; 38 + in 39 + { 40 + inherit mkServiceOption; 41 + }
+31
home/default.nix
··· 1 + { 2 + lib, 3 + config, 4 + self, 5 + self', 6 + inputs, 7 + inputs', 8 + ... 9 + }: 10 + { 11 + home-manager = { 12 + useUserPackages = true; 13 + useGlobalPkgs = true; 14 + backupFileExtension = "bak"; 15 + 16 + extraSpecialArgs = { 17 + inherit 18 + self 19 + self' 20 + inputs 21 + inputs' 22 + ; 23 + }; 24 + 25 + users = lib.genAttrs config.sys.users (name: { 26 + imports = [ ./${name} ]; 27 + }); 28 + 29 + sharedModules = [ (self + /modules/home/default.nix) ]; 30 + }; 31 + }
+11
home/diogo/catppuccin.nix
··· 1 + { inputs, ... }: 2 + { 3 + imports = [ inputs.catppuccin.homeModules.catppuccin ]; 4 + 5 + catppuccin = { 6 + enable = true; 7 + flavor = "mocha"; 8 + accent = "mauve"; 9 + nvim.enable = false; 10 + }; 11 + }
+9
home/diogo/default.nix
··· 1 + { 2 + home.file.".hushlogin".text = ""; 3 + 4 + imports = [ 5 + ./programs 6 + ./catppuccin.nix 7 + ./system 8 + ]; 9 + }
+10
home/diogo/programs/btop.nix
··· 1 + { 2 + programs.btop = { 3 + enable = true; 4 + settings = { 5 + vim_keys = true; 6 + graph_symbol = "braille"; 7 + theme_background = false; 8 + }; 9 + }; 10 + }
+31
home/diogo/programs/default.nix
··· 1 + { pkgs, ... }: 2 + { 3 + imports = [ 4 + ./git.nix 5 + ./fastfetch 6 + ./zsh.nix 7 + ./ohmyposh 8 + ./btop.nix 9 + ./neovim 10 + ./tmux.nix 11 + ./zen.nix 12 + ./fzf.nix 13 + ./ripgrep.nix 14 + ./vesktop.nix 15 + ./zed.nix 16 + ./ghostty.nix 17 + ]; 18 + 19 + sys.packages = { 20 + inherit (pkgs) 21 + nodejs 22 + just 23 + bun 24 + age 25 + sops 26 + go 27 + rustc 28 + cargo 29 + ; 30 + }; 31 + }
+6
home/diogo/programs/fastfetch/default.nix
··· 1 + { 2 + programs.fastfetch = { 3 + enable = true; 4 + settings = builtins.fromJSON (builtins.readFile ./fasfetch.jsonc); 5 + }; 6 + }
+106
home/diogo/programs/fastfetch/fasfetch.jsonc
··· 1 + { 2 + "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", 3 + "display": { 4 + "separator": "", 5 + "constants": [ 6 + "\u001b[90m│ │\u001b[60D\u001b[39m" 7 + ] 8 + }, 9 + "modules": [ 10 + { 11 + "type": "custom", 12 + "key": "{#90}╭ Keys ───────╮", 13 + "format": "{#90}╭ Values ────────────────────────────────────────────────────╮" 14 + }, 15 + { 16 + "type": "title", 17 + "key": "{#90}│ {#92}User {#90}│", 18 + "format": "{$1}{user-name} {#2}[{home-dir}]" 19 + }, 20 + { 21 + "type": "title", 22 + "key": "{#90}│ {#93}Hostname {#90}│", 23 + "format": "{$1}{host-name}" 24 + }, 25 + { 26 + "type": "os", 27 + "key": "{#90}│ {#93}OS {#90}│", 28 + "format": "{$1}{?pretty-name}{pretty-name}{?}{/pretty-name}{name}{/} {codename} {#2}[v{version}] [{arch}]" 29 + }, 30 + { 31 + "type": "kernel", 32 + "key": "{#90}│ {#93}Kernel {#90}│", 33 + "format": "{$1}{sysname} {#2}[v{release}]" 34 + }, 35 + { 36 + "type": "packages", 37 + "key": "{#90}│ {#93}Packages {#90}│", 38 + "format": "{$1}{all} {#2}[all]" 39 + }, 40 + { 41 + "type": "uptime", 42 + "key": "{#90}│ {#93}Uptime {#90}│", 43 + "format": "{$1}{?days}{days}d + {?}{hours}h {minutes}m {seconds}s" 44 + }, 45 + { 46 + "type": "cpu", 47 + "key": "{#90}│ {#91}CPU {#90}│", 48 + "showPeCoreCount": true, 49 + "temp": true, 50 + "format": "{$1}{name} {#2}[C:{core-types}] [{freq-max}]" 51 + }, 52 + { 53 + "type": "memory", 54 + "key": "{#90}│ {#91}Memory {#90}│", 55 + "format": "{$1}{used} / {total} ({percentage})" 56 + }, 57 + { 58 + "type": "disk", 59 + "key": "{#90}│ {#91}Disk {#90}│", 60 + "format": "{$1}{size-used} / {size-total} ({size-percentage})" 61 + }, 62 + { 63 + "type": "shell", 64 + "key": "{#90}│ {#95}Shell {#90}│", 65 + "format": "{$1}{pretty-name} {#2}[v{version}] [PID:{pid}]" 66 + }, 67 + { 68 + "type": "localip", 69 + "key": "{#90}│ {#94}Local IPv4 {#90}│", 70 + "showPrefixLen": true, 71 + "showIpv4": true, 72 + "showIpv6": false, 73 + "showMtu": true, 74 + "format": "{$1}{ipv4} {#2}[{ifname}]" 75 + }, 76 + { 77 + "type": "publicip", 78 + "key": "{#90}│ {#94}Public IPv4 {#90}│", 79 + "ipv6": false, 80 + "format": "{$1}{ip} {#2}[{location}]" 81 + }, 82 + { 83 + "type": "custom", 84 + "key": "{#90}╰─────────────╯", 85 + "format": "{#90}╰────────────────────────────────────────────────────────────╯" 86 + }, 87 + "break", 88 + { 89 + "type": "custom", 90 + "key": " ", 91 + "format": "{#90}╭ Colors ───────────────────────────────────────────────────────────────────╮" 92 + }, 93 + { 94 + "type": "custom", 95 + "format": "{#90}│ {#40} {#41} {#42} {#43} {#44} {#45} {#46} {#47} {#} {#90}│" 96 + }, 97 + { 98 + "type": "custom", 99 + "format": "{#90}│ {#100} {#101} {#102} {#103} {#104} {#105} {#106} {#107} {#} {#90}│" 100 + }, 101 + { 102 + "type": "custom", 103 + "format": "{#90}╰───────────────────────────────────────────────────────────────────────────╯" 104 + } 105 + ] 106 + }
+16
home/diogo/programs/fzf.nix
··· 1 + { 2 + programs.fzf = { 3 + enable = true; 4 + 5 + enableZshIntegration = true; 6 + tmux.enableShellIntegration = true; 7 + 8 + defaultOptions = [ 9 + "--height=40%" 10 + "--layout=reverse" 11 + "--border" 12 + "--preview-window=right:60%" 13 + "--preview 'bat --color=always --style=numbers --line-range=:500 {}'" 14 + ]; 15 + }; 16 + }
+22
home/diogo/programs/ghostty.nix
··· 1 + { pkgs, config, ... }: 2 + { 3 + programs.ghostty = { 4 + inherit (config.sys.profiles.graphical) enable; 5 + package = pkgs.ghostty-bin; 6 + enableZshIntegration = config.programs.zsh.enable; 7 + installBatSyntax = config.programs.bat.enable; 8 + settings = { 9 + font-family = "Maple Mono"; 10 + font-size = 18; 11 + font-thicken = true; 12 + background-opacity = 0.95; 13 + background-blur = true; 14 + window-padding-x = 12; 15 + window-padding-y = 12; 16 + macos-titlebar-style = "tabs"; 17 + window-save-state = "always"; 18 + bell-features = "no-audio"; 19 + macos-option-as-alt = "left"; 20 + }; 21 + }; 22 + }
+99
home/diogo/programs/git.nix
··· 1 + { pkgs, config, ... }: 2 + { 3 + programs.git = { 4 + package = pkgs.gitMinimal; 5 + enable = true; 6 + 7 + signing = { 8 + key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICCTbCHJ0avif6MQ7izXlHHaubNsOhU2xf9lMvXKLyUQ"; 9 + format = "ssh"; 10 + signByDefault = true; 11 + }; 12 + 13 + ignores = [ 14 + ".DS_Store" 15 + "*~" 16 + "*.swp" 17 + "*.bak" 18 + "*.tmp" 19 + "*.log" 20 + ".idea" 21 + "changes.txt" 22 + "*freeze.png" 23 + ".crush" 24 + "**/.terraform/*" 25 + "*.tfvars" 26 + "*.tfvars.json" 27 + "*.tfstate" 28 + "*.tfstate.*" 29 + ".env*" 30 + ]; 31 + 32 + attributes = [ 33 + "* text=auto" 34 + "*.sh text eol=lf" 35 + "tsconfig.json linguist-language=JSON-with-Comments" 36 + "*.lock text -diff" 37 + ]; 38 + 39 + settings = { 40 + user = { 41 + name = "Diogo"; 42 + email = "hello" + "@" + "diogo" + "." + "fi"; 43 + }; 44 + 45 + aliases = { 46 + s = "status -s"; 47 + undo = "reset --soft HEAD^"; 48 + cleanup = '' 49 + git fetch upstream; \ 50 + git checkout main; \ 51 + git pull upstream main; \ 52 + git push origin main; \ 53 + git branch -r --merged | grep -v main | grep origin | sed 's/origin\\///' | gxargs -r -n 1 git push --delete origin; \ 54 + git branch --merged | grep -v main | gxargs -r -n 1 git branch -d; \ 55 + git branch -vv | grep ': gone]'| grep -v '\\*' | awk '{ print $1; }' | gxargs -r git branch -D; \ 56 + git fetch --all --prune; \ 57 + git prune; \ 58 + git gc --aggressive; 59 + ''; 60 + wopsy = "commit -a --amend --no-edit"; 61 + }; 62 + 63 + init.defaultBranch = "main"; 64 + 65 + commit.verbose = true; 66 + 67 + push.autoSetupRemote = true; 68 + 69 + merge = { 70 + stat = "true"; 71 + conflictstyle = "zdiff3"; 72 + tool = "meld"; 73 + }; 74 + 75 + rebase = { 76 + updateRefs = true; 77 + autoSquash = true; 78 + autoStash = true; 79 + }; 80 + }; 81 + 82 + lfs.enable = true; 83 + }; 84 + 85 + programs.lazygit = { 86 + enable = config.programs.git.enable && config.sys.profiles.graphical.enable; 87 + }; 88 + 89 + programs.delta = { 90 + enable = true; 91 + enableGitIntegration = true; 92 + options = { 93 + line-numbers = true; 94 + hyperlinks = true; 95 + side-by-side = true; 96 + navigate = true; 97 + }; 98 + }; 99 + }
+38
home/diogo/programs/neovim/.vimrc
··· 1 + let mapleader = " " 2 + 3 + set hlsearch 4 + set incsearch 5 + set ignorecase 6 + set smartcase 7 + 8 + set number 9 + set relativenumber 10 + set linebreak 11 + 12 + set noswapfile 13 + set nobackup 14 + set undodir=~/.vim/undodir 15 + set undofile 16 + 17 + set so=4 18 + 19 + set expandtab 20 + set tabstop=2 softtabstop=2 21 + set shiftwidth=2 22 + 23 + set hidden 24 + set noerrorbells 25 + set mouse="a" 26 + 27 + syntax on 28 + filetype plugin indent on 29 + set updatetime=500 30 + 31 + set spell 32 + set spelllang=en_gb 33 + 34 + inoremap <Esc> <Esc> 35 + 36 + nnoremap <leader>w :w<CR> 37 + nnoremap <leader>q :q<CR> 38 + nnoremap <leader>Q :q!<CR>
+56
home/diogo/programs/neovim/default.nix
··· 1 + { pkgs, ... }: 2 + { 3 + programs.neovim = { 4 + enable = true; 5 + defaultEditor = true; 6 + viAlias = true; 7 + vimAlias = true; 8 + withNodeJs = true; 9 + plugins = with pkgs.vimPlugins; [ 10 + catppuccin-nvim 11 + nvim-cmp 12 + cmp-buffer 13 + cmp-nvim-lsp 14 + cmp-path 15 + conform-nvim 16 + gitsigns-nvim 17 + lualine-nvim 18 + mini-nvim 19 + nvim-lspconfig 20 + nvim-navic 21 + nvim-tree-lua 22 + plenary-nvim 23 + telescope-file-browser-nvim 24 + telescope-fzf-native-nvim 25 + telescope-nvim 26 + which-key-nvim 27 + nvim-treesitter.withAllGrammars 28 + cord-nvim 29 + ]; 30 + extraPackages = with pkgs; [ 31 + nixd 32 + nil 33 + vtsls 34 + vue-language-server 35 + # docker-language-server 36 + # docker-compose-language-service 37 + yaml-language-server 38 + bash-language-server 39 + lua-language-server 40 + astro-language-server 41 + tailwindcss-language-server 42 + emmet-language-server 43 + gopls 44 + sourcekit-lsp 45 + ]; 46 + 47 + extraLuaConfig = '' 48 + ${builtins.readFile ./init.lua} 49 + vim.cmd("colorscheme catppuccin") 50 + ''; 51 + }; 52 + 53 + home.file = { 54 + ".vimrc".text = builtins.readFile ./.vimrc; 55 + }; 56 + }
+476
home/diogo/programs/neovim/init.lua
··· 1 + vim.cmd("source ~/.vimrc") 2 + 3 + local cmp = require("cmp") 4 + 5 + cmp.setup({ 6 + mapping = { 7 + ["<C-n>"] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select }), 8 + ["<C-p>"] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select }), 9 + 10 + ["<Tab>"] = cmp.mapping(function(fallback) 11 + if cmp.visible() then 12 + cmp.confirm({ select = true }) 13 + else 14 + fallback() 15 + end 16 + end, { "i", "s" }), 17 + }, 18 + 19 + sources = cmp.config.sources({ 20 + { 21 + name = "nvim_lsp", 22 + ---@param entry cmp.Entry 23 + ---@param ctx cmp.Context 24 + entry_filter = function(entry, ctx) 25 + if ctx.filetype ~= "vue" then 26 + return true 27 + end 28 + 29 + local cursor_before_line = ctx.cursor_before_line 30 + if cursor_before_line:sub(-1) == "@" then 31 + return entry.completion_item.label:match("^@") 32 + elseif cursor_before_line:sub(-1) == ":" then 33 + return entry.completion_item.label:match("^:") 34 + and not entry.completion_item.label:match("^:on%-") 35 + else 36 + return true 37 + end 38 + end, 39 + }, 40 + { name = "buffer" }, 41 + { name = "path" }, 42 + }), 43 + 44 + formatting = { 45 + format = function(entry, item) 46 + item.menu = ({ 47 + nvim_lsp = "[LSP]", 48 + buffer = "[Buffer]", 49 + path = "[Path]", 50 + })[entry.source.name] 51 + return item 52 + end, 53 + }, 54 + }) 55 + 56 + cmp.event:on("menu_closed", function() 57 + local bufnr = vim.api.nvim_get_current_buf() 58 + vim.b[bufnr]._vue_ts_cached_is_in_start_tag = nil 59 + end) 60 + 61 + require("conform").setup({ 62 + formatters_by_ft = { 63 + lua = { "stylua" }, 64 + vue = { "prettierd", "prettier", stop_after_first = true }, 65 + typescript = { "prettierd", "prettier", stop_after_first = true }, 66 + javascript = { "prettierd", "prettier", stop_after_first = true }, 67 + javascriptreact = { "prettierd", "prettier", stop_after_first = true }, 68 + css = { "prettierd", "prettier", stop_after_first = true }, 69 + }, 70 + format_on_save = { 71 + timeout_ms = 500, 72 + lsp_format = "fallback", 73 + }, 74 + }) 75 + 76 + vim.keymap.set({ "n", "v" }, "<leader>f", function() 77 + require("conform").format({ timeout_ms = 500, lsp_format = "fallback" }) 78 + end, { desc = "Format buffer or selection" }) 79 + 80 + require("gitsigns").setup({ 81 + current_line_blame = true, 82 + current_line_blame_opts = { 83 + virt_text = true, 84 + virt_text_pos = "eol", 85 + delay = 100, 86 + ignore_whitespace = false, 87 + }, 88 + current_line_blame_formatter = "<author>, <author_time:%d-%m-%Y> - <summary>", 89 + }) 90 + 91 + local navic = require("nvim-navic") 92 + 93 + navic.setup({ 94 + separator = " › ", 95 + highlight = true, 96 + }) 97 + 98 + vim.api.nvim_create_autocmd("LspAttach", { 99 + callback = function(event) 100 + local client = vim.lsp.get_client_by_id(event.data.client_id) 101 + if client.server_capabilities.documentSymbolProvider then 102 + navic.attach(client, event.buf) 103 + end 104 + vim.lsp.inlay_hint.enable(true, { bufnr = event.buf }) 105 + end, 106 + }) 107 + 108 + local servers = { 109 + lua_ls = { 110 + settings = { 111 + Lua = { 112 + runtime = { 113 + version = "LuaJIT", 114 + }, 115 + diagnostics = { 116 + globals = { "vim" }, 117 + }, 118 + hint = { enable = true }, 119 + }, 120 + }, 121 + }, 122 + 123 + yamlls = { 124 + settings = { 125 + yaml = { 126 + completion = true, 127 + validate = true, 128 + suggest = { 129 + parentSkeletonSelectedFirst = true, 130 + }, 131 + schemas = { 132 + ["https://www.schemastore.org/github-workflow.json"] = ".github/workflows/*", 133 + ["https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json"] = "docker-compose*.{yml,yaml}", 134 + }, 135 + }, 136 + redhat = { 137 + telemetry = { 138 + enable = false, 139 + }, 140 + }, 141 + }, 142 + }, 143 + 144 + jsonls = { 145 + settings = { 146 + json = { 147 + validate = { enable = true }, 148 + schemas = { 149 + { 150 + fileMatch = { "package.json" }, 151 + url = "https://www.schemastore.org/package.json", 152 + }, 153 + { 154 + fileMatch = { "tsconfig*.json" }, 155 + url = "https://www.schemastore.org/tsconfig.json", 156 + }, 157 + }, 158 + }, 159 + }, 160 + }, 161 + 162 + vtsls = { 163 + settings = { 164 + vtsls = { 165 + tsserver = { 166 + globalPlugins = { 167 + { 168 + name = "@vue/typescript-plugin", 169 + location = "~/.bun/bin/vue-language-server", 170 + languages = { "vue" }, 171 + configNamespace = "typescript", 172 + }, 173 + }, 174 + }, 175 + }, 176 + }, 177 + filetypes = { "typescript", "javascript", "vue" }, 178 + }, 179 + 180 + vue_ls = {}, 181 + 182 + nil_ls = { 183 + cmd = { "nil" }, 184 + settings = { 185 + ["nil"] = { 186 + diagnostics = { 187 + bindingEndHintMinLines = 2, 188 + }, 189 + nix = { maxMemoryMB = nil }, 190 + }, 191 + }, 192 + }, 193 + 194 + just = {}, 195 + 196 + -- dockerls = {}, 197 + 198 + astro = {}, 199 + 200 + emmet_language_server = { 201 + filetypes = { 202 + "vue", 203 + "astro", 204 + "css", 205 + "html", 206 + "javascript", 207 + "javascriptreact", 208 + "typescriptreact", 209 + }, 210 + }, 211 + 212 + tailwindcss = { 213 + filetypes = { 214 + "vue", 215 + "astro", 216 + "javascriptreact", 217 + "typescriptreact", 218 + "html", 219 + "css", 220 + }, 221 + }, 222 + 223 + gopls = {}, 224 + 225 + sourcekit = {}, 226 + } 227 + 228 + vim.diagnostic.config({ 229 + virtual_text = true, 230 + signs = true, 231 + underline = true, 232 + update_in_insert = false, 233 + float = { 234 + focusable = false, 235 + style = "minimal", 236 + border = "rounded", 237 + source = "if_many", 238 + header = "", 239 + prefix = "", 240 + }, 241 + }) 242 + 243 + for server, config in pairs(servers) do 244 + vim.lsp.config(server, config) 245 + vim.lsp.enable(server) 246 + end 247 + 248 + vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { 249 + border = "rounded", 250 + max_width = 80, 251 + }) 252 + 253 + vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, { desc = "Rename symbol" }) 254 + vim.keymap.set( 255 + "n", 256 + "K", 257 + vim.lsp.buf.hover, 258 + { noremap = true, silent = true, desc = "LSP Hover Documentation" } 259 + ) 260 + 261 + require("lualine").setup({ 262 + options = { 263 + icons_enabled = false, 264 + theme = "auto", 265 + globalstatus = true, 266 + component_separators = "", 267 + section_separators = "", 268 + always_divide_middle = true, 269 + ignore_focus = { "NvimTree" }, 270 + disabled_filetypes = { 271 + statusline = { "NvimTree" }, 272 + winbar = { "NvimTree" }, 273 + }, 274 + }, 275 + sections = { 276 + lualine_a = { "mode" }, 277 + lualine_b = { 278 + { "branch" }, 279 + "diff", 280 + }, 281 + lualine_c = { { "filename", path = 1, shorting_target = 40 } }, 282 + lualine_x = { "diagnostics" }, 283 + lualine_y = { "progress" }, 284 + lualine_z = { "location" }, 285 + }, 286 + inactive_sections = { 287 + lualine_a = {}, 288 + lualine_b = {}, 289 + lualine_c = {}, 290 + lualine_x = {}, 291 + lualine_y = {}, 292 + lualine_z = {}, 293 + }, 294 + tabline = {}, 295 + winbar = { 296 + lualine_c = { 297 + { 298 + "navic", 299 + cond = function() 300 + return require("nvim-navic").is_available() 301 + end, 302 + }, 303 + }, 304 + }, 305 + inactive_winbar = {}, 306 + extensions = {}, 307 + }) 308 + vim.opt.showmode = false 309 + vim.o.cmdheight = 0 310 + vim.o.laststatus = 3 311 + 312 + require("mini.pairs").setup() 313 + 314 + require("mini.notify").setup({ 315 + window = { 316 + winblend = 0, 317 + lsp_progress = { 318 + enable = true, 319 + }, 320 + }, 321 + }) 322 + 323 + vim.notify = require("mini.notify").make_notify() 324 + vim.api.nvim_create_autocmd("BufWritePost", { 325 + callback = function(args) 326 + local ft = vim.bo[args.buf].filetype 327 + if ft == "" or vim.bo[args.buf].buftype ~= "" then 328 + return 329 + end 330 + 331 + local fn = vim.fn.fnamemodify(args.file, ":t") 332 + vim.notify("Saved " .. fn, vim.log.levels.INFO, { title = "File Written" }) 333 + end, 334 + }) 335 + 336 + require("mini.move").setup({ 337 + mappings = { 338 + left = "<M-h>", 339 + right = "<M-l>", 340 + down = "<M-j>", 341 + up = "<M-k>", 342 + line_left = "<M-h>", 343 + line_right = "<M-l>", 344 + line_down = "<M-j>", 345 + line_up = "<M-k>", 346 + }, 347 + options = { 348 + reindent_linewise = true, 349 + }, 350 + }) 351 + 352 + require("mini.comment").setup({ 353 + options = { 354 + custom_commentstring = nil, 355 + ignore_blank_line = false, 356 + start_of_line = false, 357 + pad_comment_parts = true, 358 + }, 359 + mappings = { 360 + comment = "gc", 361 + comment_line = "gcc", 362 + }, 363 + }) 364 + 365 + require("mini.surround").setup({ 366 + mappings = { 367 + add = "S", -- Add surrounding in Normal and Visual modes 368 + delete = "ds", -- Delete surrounding 369 + find = "sf", -- Find surrounding (to the right) 370 + find_left = "sF", -- Find surrounding (to the left) 371 + highlight = "sh", -- Highlight surrounding 372 + replace = "cs", -- Replace surrounding 373 + }, 374 + }) 375 + 376 + require("telescope").setup({ 377 + defaults = { 378 + file_ignore_patterns = { "bun.lock" }, 379 + }, 380 + extensions = { 381 + fzf = { 382 + fuzzy = true, 383 + override_generic_sorter = true, 384 + override_file_sorter = true, 385 + case_mode = "smart_case", 386 + }, 387 + }, 388 + }) 389 + 390 + require("telescope").load_extension("fzf") 391 + require("telescope").load_extension("file_browser") 392 + 393 + local opts = { noremap = true, silent = true } 394 + vim.api.nvim_set_keymap( 395 + "n", 396 + "<leader>ff", 397 + "<cmd>lua require('telescope.builtin').find_files()<CR>", 398 + opts 399 + ) 400 + vim.api.nvim_set_keymap( 401 + "n", 402 + "<leader>fg", 403 + "<cmd>lua require('telescope.builtin').live_grep()<CR>", 404 + opts 405 + ) 406 + vim.api.nvim_set_keymap( 407 + "n", 408 + "<leader>fl", 409 + "<cmd>lua require('telescope.builtin').current_buffer_fuzzy_find()<CR>", 410 + opts 411 + ) 412 + vim.api.nvim_set_keymap( 413 + "n", 414 + "<leader>fr", 415 + "<cmd>lua require('telescope.builtin').lsp_references()<CR>", 416 + opts 417 + ) 418 + vim.api.nvim_set_keymap( 419 + "n", 420 + "<leader>fd", 421 + "<cmd>lua require('telescope.builtin').lsp_definitions()<CR>", 422 + opts 423 + ) 424 + vim.api.nvim_set_keymap( 425 + "n", 426 + "<leader>ft", 427 + "<cmd>lua require('telescope.builtin').lsp_type_definitions()<CR>", 428 + opts 429 + ) 430 + vim.api.nvim_set_keymap("n", "<leader>fi", "<cmd>Telescope lsp_implementations<CR>", opts) 431 + vim.api.nvim_set_keymap("n", "<C-j>", "<cmd>Telescope lsp_document_symbols<CR>", opts) 432 + 433 + vim.g.loaded_netrw = 1 434 + vim.g.loaded_netrwPlugin = 1 435 + 436 + require("nvim-tree").setup({ 437 + renderer = { 438 + icons = { 439 + show = { 440 + file = false, 441 + folder = false, 442 + folder_arrow = true, 443 + git = false, 444 + modified = true, 445 + }, 446 + }, 447 + }, 448 + view = { 449 + width = 30, 450 + side = "right", 451 + }, 452 + disable_netrw = true, 453 + hijack_netrw = true, 454 + update_focused_file = { enable = true }, 455 + filters = { dotfiles = false }, 456 + git = { enable = false }, 457 + }) 458 + 459 + vim.keymap.set("n", "<C-b>", ":NvimTreeToggle<CR>", { desc = "Toggle file explorer" }) 460 + vim.keymap.set("n", "<leader>e", ":NvimTreeFocus<CR>", { desc = "Focus file explorer" }) 461 + 462 + require("nvim-treesitter.configs").setup({ 463 + highlight = { enable = true, additional_vim_regex_highlighting = true }, 464 + indent = { enable = true }, 465 + }) 466 + 467 + vim.keymap.set("n", "<leader>?", function() 468 + require("which-key").show({ global = false }) 469 + end, { desc = "Buffer Local Keymaps (which-key)" }) 470 + 471 + require("cord").setup({}) 472 + 473 + require("catppuccin").setup({ 474 + flavour = "mocha", 475 + transparent_background = true, 476 + })
+93
home/diogo/programs/ohmyposh/config.json
··· 1 + { 2 + "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/ohmyposh/main/themes/schema.json", 3 + "secondary_prompt": { 4 + "template": "~~> ", 5 + "foreground": "magenta", 6 + "background": "transparent" 7 + }, 8 + "transient_prompt": { 9 + "template": "~> ", 10 + "background": "transparent", 11 + "foreground_templates": [ 12 + "{{if gt .Code 0}}red{{end}}", 13 + "{{if eq .Code 0}}magenta{{end}}" 14 + ] 15 + }, 16 + "upgrade": { 17 + "source": "cdn", 18 + "interval": "168h", 19 + "auto": false, 20 + "notice": false 21 + }, 22 + "blocks": [ 23 + { 24 + "type": "prompt", 25 + "alignment": "left", 26 + "segments": [ 27 + { 28 + "properties": { 29 + "cache_duration": "none", 30 + "style": "full" 31 + }, 32 + "template": "{{ .Path }} ", 33 + "foreground": "blue", 34 + "background": "transparent", 35 + "type": "path", 36 + "style": "plain" 37 + }, 38 + { 39 + "properties": { 40 + "branch_icon": "", 41 + "cache_duration": "none", 42 + "commit_icon": "@", 43 + "fetch_status": true 44 + }, 45 + "template": "{{ .HEAD }}{{ if or (.Working.Changed) (.Staging.Changed) }}*{{ end }} <cyan>{{ if gt .Behind 0 }}\u21e3{{ end }}{{ if gt .Ahead 0 }}\u21e1{{ end }}</>", 46 + "foreground": "p:grey", 47 + "background": "transparent", 48 + "type": "git", 49 + "style": "plain" 50 + } 51 + ], 52 + "newline": true 53 + }, 54 + { 55 + "type": "rprompt", 56 + "overflow": "hidden", 57 + "segments": [ 58 + { 59 + "properties": { 60 + "cache_duration": "none", 61 + "threshold": 5000 62 + }, 63 + "template": "{{ .FormattedMs }}", 64 + "foreground": "yellow", 65 + "background": "transparent", 66 + "type": "executiontime", 67 + "style": "plain" 68 + } 69 + ] 70 + }, 71 + { 72 + "type": "prompt", 73 + "alignment": "left", 74 + "segments": [ 75 + { 76 + "properties": { 77 + "cache_duration": "none" 78 + }, 79 + "template": "~>", 80 + "background": "transparent", 81 + "type": "text", 82 + "style": "plain", 83 + "foreground_templates": [ 84 + "{{if gt .Code 0}}red{{end}}", 85 + "{{if eq .Code 0}}magenta{{end}}" 86 + ] 87 + } 88 + ] 89 + } 90 + ], 91 + "version": 3, 92 + "final_space": true 93 + }
+7
home/diogo/programs/ohmyposh/default.nix
··· 1 + { 2 + programs.oh-my-posh = { 3 + enable = true; 4 + enableZshIntegration = true; 5 + settings = builtins.fromJSON (builtins.readFile ./config.json); 6 + }; 7 + }
+12
home/diogo/programs/ripgrep.nix
··· 1 + { 2 + programs.ripgrep = { 3 + enable = true; 4 + 5 + arguments = [ 6 + "--max-columns=150" 7 + "--max-columns-preview" 8 + "--glob=!.git/*" 9 + "--smart-case" 10 + ]; 11 + }; 12 + }
+48
home/diogo/programs/tmux.nix
··· 1 + { pkgs, ... }: 2 + { 3 + programs.tmux = { 4 + enable = true; 5 + plugins = with pkgs.tmuxPlugins; [ 6 + catppuccin 7 + ]; 8 + extraConfig = '' 9 + set -g mouse on 10 + set -s escape-time 0 11 + set -g default-terminal "tmux-256color" 12 + set -sa terminal-overrides ",xterm*:Tc" 13 + 14 + unbind C-b 15 + set -g prefix C-a 16 + bind C-a send-prefix 17 + 18 + bind r source-file ~/.tmux.conf \; display-message "tmux config reloaded!" 19 + 20 + bind -n C-k send-keys C-l 21 + 22 + bind -r h select-pane -L 23 + bind -r j select-pane -D 24 + bind -r k select-pane -U 25 + bind -r l select-pane -R 26 + bind v split-window -h 27 + bind n split-window -v 28 + bind x kill-pane 29 + 30 + bind w new-window -c "#{pane_current_path}" 31 + bind n next-window 32 + bind p previous-window 33 + 34 + set -g @catppuccin_flavor 'mocha' 35 + set -g @catppuccin_window_status_style "basic" 36 + set -g @catppuccin_window_number "#I" 37 + set -g @catppuccin_window_text " #{pane_current_command}" 38 + set -g @catppuccin_window_current_number "#[bold]#I" 39 + set -g @catppuccin_window_current_text " #{pane_current_command}" 40 + 41 + set -g status-right-length 100 42 + set -g status-left-length 100 43 + set -g status-style "bg=default" 44 + set -g status-left "" 45 + set -g status-right "" 46 + ''; 47 + }; 48 + }
+142
home/diogo/programs/vesktop.nix
··· 1 + { config, ... }: 2 + { 3 + programs.vesktop = { 4 + inherit (config.sys.profiles.graphical) enable; 5 + settings = { 6 + discordBranch = "canary"; 7 + transparencyOption = "acrylic"; 8 + disableSmoothScroll = false; 9 + hardwareAcceleration = true; 10 + arRPC = true; 11 + appBadge = true; 12 + }; 13 + vencord.settings = { 14 + plugins = { 15 + AppleMusicRichPresence = { 16 + enabled = true; 17 + refreshInterval = 5; 18 + largeImageType = "Album"; 19 + smallImageType = "Artist"; 20 + largeTextString = "{album}"; 21 + smallTextString = "{artist}"; 22 + enableButtons = false; 23 + nameString = "Apple Music"; 24 + detailsString = "{name}"; 25 + stateString = "{artist} · {album}"; 26 + enableTimestamps = true; 27 + activityType = 2; 28 + }; 29 + FakeNitro.enabled = true; 30 + FixYoutubeEmbeds.enabled = true; 31 + FixSpotifyEmbeds.enabled = true; 32 + FixImagesQuality.enabled = true; 33 + FixCodeblockGap.enabled = true; 34 + ForceOwnerCrown.enabled = true; 35 + FriendsSince.enabled = true; 36 + ImageZoom.enabled = true; 37 + LastFMRichPresence = { 38 + enabled = true; 39 + hideWithActivity = false; 40 + hideWithSpotify = true; 41 + shareUsername = false; 42 + shareSong = true; 43 + statusName = ""; 44 + nameFormat = "artist"; 45 + useListeningStatus = true; 46 + missingArt = "lastfmLogo"; 47 + showLastFmLogo = true; 48 + }; 49 + MessageLogger = { 50 + enabled = true; 51 + collapseDeleted = true; 52 + deleteStyle = "text"; 53 + ignoreBots = false; 54 + ignoreSelf = true; 55 + logEdits = true; 56 + logDeletes = true; 57 + inlineEdits = true; 58 + }; 59 + NSFWGateBypass.enabled = true; 60 + PlatformIndicators.enabled = true; 61 + ReviewDB.enabled = true; 62 + RoleColorEverywhere.enabled = true; 63 + SecretRingToneEnabler.enabled = true; 64 + ShikiCodeblocks.enabled = true; 65 + ShowHiddenChannels.enabled = true; 66 + ShowHiddenThings.enabled = true; 67 + SpotifyControls = { 68 + enabled = true; 69 + hoverControls = true; 70 + }; 71 + SpotifyCrack = { 72 + enabled = true; 73 + noSpotifyAutoPause = true; 74 + keepSpotifyActivityOnIdle = false; 75 + }; 76 + StreamerModeOnStream.enabled = true; 77 + TextReplace = { 78 + enabled = true; 79 + stringRules = [ 80 + { 81 + find = "://bsky.app/"; 82 + replace = "://fxbsky.app/"; 83 + } 84 + { 85 + find = "://instagram.com/"; 86 + replace = "://ddinstagram.com/"; 87 + } 88 + { 89 + find = "://www.instagram.com/"; 90 + replace = "://ddinstagram.com/"; 91 + } 92 + { 93 + find = "://reddit.com/"; 94 + replace = "://rxddit.com/"; 95 + } 96 + { 97 + find = "://www.reddit.com/"; 98 + replace = "://rxddit.com/"; 99 + } 100 + { 101 + find = "://tiktok.com/"; 102 + replace = "://tfxktok.com/"; 103 + } 104 + { 105 + find = "://vm.tiktok.com/"; 106 + replace = "://vm.vxtiktok.com/"; 107 + } 108 + { 109 + find = "://twitter.com/"; 110 + replace = "://fxtwitter.com/"; 111 + } 112 + { 113 + find = "://x.com/"; 114 + replace = "://fxtwitter.com/"; 115 + } 116 + ]; 117 + }; 118 + TypingIndicator = { 119 + enabled = true; 120 + includeMutedChannels = false; 121 + includeCurrentChannel = true; 122 + indicatorMode = 3; 123 + }; 124 + TypingTweaks = { 125 + enabled = true; 126 + alternativeFormatting = true; 127 + showRoleColors = true; 128 + showAvatars = true; 129 + }; 130 + UserMessagesPronouns.enabled = true; 131 + USRBG.enabled = true; 132 + WhoReacted.enabled = true; 133 + NoTrack = { 134 + enabled = true; 135 + disableAnalytics = true; 136 + }; 137 + Settings.enabled = true; 138 + ClearURLs.enabled = true; 139 + }; 140 + }; 141 + }; 142 + }
+32
home/diogo/programs/zed.nix
··· 1 + { config, ... }: 2 + { 3 + programs.zed-editor = { 4 + inherit (config.sys.profiles.graphical) enable; 5 + 6 + userSettings = { 7 + telemetry = { 8 + diagnostics = false; 9 + metrics = false; 10 + }; 11 + 12 + vim_mode = true; 13 + 14 + ui_font_size = 16; 15 + buffer_font_family = "Maple Mono"; 16 + buffer_font_size = 18; 17 + 18 + project_panel = { 19 + dock = "right"; 20 + }; 21 + }; 22 + extensions = [ 23 + "git-firefly" 24 + "vue" 25 + # "dockerfile" 26 + # "docker-compose" 27 + "nix" 28 + "discord-presence" 29 + "astro" 30 + ]; 31 + }; 32 + }
+214
home/diogo/programs/zen.nix
··· 1 + { 2 + inputs, 3 + ... 4 + }: 5 + { 6 + imports = [ 7 + inputs.zen-browser.homeModules.beta 8 + ]; 9 + 10 + programs.zen-browser = { 11 + enable = true; 12 + 13 + policies = { 14 + AppAutoUpdate = false; 15 + DisableAppUpdate = true; 16 + ManualAppUpdateOnly = true; 17 + DisableFirefoxStudies = true; 18 + DisablePocket = true; 19 + DisableTelemetry = true; 20 + DontCheckDefaultBrowser = true; 21 + OfferToSaveLogins = false; 22 + NoDefaultBookmarks = true; 23 + Cookies = { 24 + Allow = [ 25 + "https://bsky.app" 26 + "https://bsky.social" 27 + "https://tangled.org" 28 + "https://github.com" 29 + "https://steamcommunity.com" 30 + "https://steampowered.com" 31 + "https://google.com" 32 + "https://youtube.com" 33 + "https://bunny.net" 34 + "https://twitch.tv" 35 + "https://apple.com" 36 + "https://icloud.com" 37 + "https://instagram.com" 38 + "https://porkbun.com" 39 + "https://amazon.es" 40 + "https://upcloud.com" 41 + "https://chatgpt.com" 42 + "https://openai.com" 43 + "https://revolut.com" 44 + "https://proton.me" 45 + "https://bitwarden.com" 46 + "https://bitwarden.eu" 47 + "https://catsky.social" 48 + "https://gandi.net" 49 + "https://stripe.com" 50 + "http://10.100.0.1" 51 + "http://[fd00:1:1:1::1]" 52 + ]; 53 + }; 54 + SanitizeOnShutdown = { 55 + Cache = true; 56 + Cookies = true; 57 + FormData = true; 58 + }; 59 + DisableFirefoxAccounts = true; 60 + DNSOverHTTPS = { 61 + Enabled = true; 62 + ProviderURL = "https://dns.quad9.net/dns-query"; 63 + Fallback = true; 64 + Locked = true; 65 + }; 66 + EnableTrackingProtection = { 67 + Value = true; 68 + Locked = true; 69 + Cryptomining = true; 70 + Fingerprinting = true; 71 + EmailTracking = true; 72 + }; 73 + HttpsOnlyMode = "force_enabled"; 74 + SkipTermsOfUse = true; 75 + Extensions = { 76 + Install = [ 77 + "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi" 78 + "https://addons.mozilla.org/firefox/downloads/latest/catppuccin-web-file-icons/latest.xpi" 79 + "https://addons.mozilla.org/firefox/downloads/latest/clearurls/latest.xpi" 80 + "https://addons.mozilla.org/firefox/downloads/latest/return-youtube-dislikes/latest.xpi" 81 + "https://addons.mozilla.org/firefox/downloads/latest/sponsorblock/latest.xpi" 82 + "https://addons.mozilla.org/firefox/downloads/latest/steam-database/latest.xpi" 83 + "https://addons.mozilla.org/firefox/downloads/latest/styl-us/latest.xpi" 84 + "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi" 85 + "https://addons.mozilla.org/firefox/downloads/latest/refined-github-/latest.xpi" 86 + "https://addons.mozilla.org/firefox/downloads/latest/web-scrobbler/latest.xpi" 87 + ]; 88 + }; 89 + SearchEngines = { 90 + Add = [ 91 + { 92 + Name = "Qwant"; 93 + IconURL = "https://www.qwant.com/favicon.ico"; 94 + URLTemplate = "https://www.qwant.com/?q={searchTerms}"; 95 + Alias = "qwant"; 96 + SuggestURLTemplate = "https://api.qwant.com/api/suggest/?q={searchTerms}"; 97 + } 98 + ]; 99 + Default = "Qwant"; 100 + }; 101 + }; 102 + 103 + profiles.default = rec { 104 + settings = { 105 + "zen.workspaces.continue-where-left-off" = true; 106 + "zen.welcome-screen.seen" = true; 107 + "zen.tabs.vertical.right-side" = true; 108 + "zen.urlbar.behavior" = "float"; 109 + "zen.view.sidebar-expanded" = false; 110 + "zen.view.use-single-toolbar" = false; 111 + }; 112 + 113 + pinsForce = true; 114 + pins = { 115 + "YouTube" = { 116 + id = "c1e24192-acf6-4454-a4e0-b57483e6fd49"; 117 + workspace = spaces."Personal".id; 118 + url = "https://youtube.com"; 119 + position = 101; 120 + isEssential = true; 121 + }; 122 + "Tangled" = { 123 + id = "c1d9c4f8-ec95-4f41-93fd-76a92f5fdf16"; 124 + workspace = spaces."Personal".id; 125 + url = "https://tangled.org"; 126 + position = 102; 127 + isEssential = true; 128 + }; 129 + "Bluesky" = { 130 + id = "f58aa4ce-5915-41c8-b117-b11c32531198"; 131 + workspace = spaces."Personal".id; 132 + url = "https://catsky.social"; 133 + position = 103; 134 + isEssential = true; 135 + }; 136 + 137 + "GitHub" = { 138 + id = "b3bf5dfd-f08b-4407-a9c3-8ce40eb53e74"; 139 + workspace = spaces."Personal".id; 140 + url = "https://github.com"; 141 + position = 104; 142 + isEssential = false; 143 + }; 144 + "Codeberg" = { 145 + id = "34db494e-0238-44b0-8836-b1cdfa82e677"; 146 + workspace = spaces."Personal".id; 147 + url = "https://codeberg.org"; 148 + position = 105; 149 + isEssential = false; 150 + }; 151 + "Bunny" = { 152 + id = "e82607e2-2f86-4d9a-9168-65d4cd766f5e"; 153 + workspace = spaces."Personal".id; 154 + url = "https://dash.bunny.net"; 155 + position = 106; 156 + isEssential = false; 157 + }; 158 + "Porkbun" = { 159 + id = "66a2c410-915f-4bb2-91a8-4fc83633382b"; 160 + workspace = spaces."Personal".id; 161 + url = "https://porkbun.com/account/domainsSpeedy"; 162 + position = 107; 163 + isEssential = false; 164 + }; 165 + "UpCloud" = { 166 + id = "95ee2678-e60d-4f2b-9b8b-4da2f246b197"; 167 + workspace = spaces."Personal".id; 168 + url = "https://hub.upcloud.com"; 169 + position = 108; 170 + isEssential = false; 171 + }; 172 + "Gandi" = { 173 + id = "53418beb-79a3-41d5-b0ba-75d3a48188b5"; 174 + workspace = spaces."Personal".id; 175 + url = "https://admin.gandi.net"; 176 + position = 109; 177 + isEssential = false; 178 + }; 179 + }; 180 + 181 + containersForce = true; 182 + containers = { 183 + Shopping = { 184 + color = "yellow"; 185 + icon = "dollar"; 186 + id = 2; 187 + }; 188 + }; 189 + 190 + spacesForce = true; 191 + spaces = { 192 + "Personal" = { 193 + id = "8abbe7cb-3f97-446f-b986-f2f598cd0bdc"; 194 + icon = "🌷"; 195 + position = 1000; 196 + theme = { 197 + type = "gradient"; 198 + colors = [ 199 + { 200 + red = 216; 201 + green = 204; 202 + blue = 235; 203 + algorithm = "floating"; 204 + type = "explicit-lightness"; 205 + } 206 + ]; 207 + opacity = 0.8; 208 + texture = 0.5; 209 + }; 210 + }; 211 + }; 212 + }; 213 + }; 214 + }
+61
home/diogo/programs/zsh.nix
··· 1 + { pkgs, ... }: 2 + { 3 + programs.zsh = { 4 + enable = true; 5 + enableCompletion = true; 6 + autosuggestion.enable = true; 7 + syntaxHighlighting.enable = true; 8 + 9 + initContent = '' 10 + source <(fzf --zsh) 11 + echo -e "\e[35m" 12 + /bin/cat <<'EOF' 13 + ╱|、 14 + (˚ˎ。7 15 + |、˜〵 16 + じしˍ,)ノ 17 + EOF 18 + echo -e "\e[0m" 19 + ''; 20 + 21 + envExtra = '' 22 + ${ 23 + if pkgs.stdenv.hostPlatform.isDarwin then 24 + ''export SSH_AUTH_SOCK=~/Library/Containers/com.bitwarden.desktop/Data/.bitwarden-ssh-agent.sock'' 25 + else 26 + '''' 27 + } 28 + ''; 29 + 30 + shellAliases = { 31 + cat = "bat"; 32 + cd = "z"; 33 + cp = "cp -iv"; 34 + mv = "mv -iv"; 35 + rm = "rm -rfv"; 36 + mkdir = "mkdir -pv"; 37 + p = "cd ~/Developer/"; 38 + dl = "cd ~/Downloads/"; 39 + f = "open -a Finder"; 40 + ls = "eza"; 41 + g = "git"; 42 + lg = "lazygit"; 43 + grep = "rg"; 44 + find = "fd"; 45 + }; 46 + }; 47 + 48 + programs.zoxide = { 49 + enable = true; 50 + enableZshIntegration = true; 51 + }; 52 + 53 + programs.bat.enable = true; 54 + 55 + programs.eza = { 56 + enable = true; 57 + git = true; 58 + }; 59 + 60 + programs.fd.enable = true; 61 + }
+6
home/diogo/system/default.nix
··· 1 + { 2 + imports = [ 3 + ./secrets.nix 4 + ./ssh.nix 5 + ]; 6 + }
+3
home/diogo/system/secrets.nix
··· 1 + { 2 + sops.secrets = { }; 3 + }
+29
home/diogo/system/ssh.nix
··· 1 + { 2 + lib, 3 + config, 4 + ... 5 + }: 6 + { 7 + programs.ssh = { 8 + enable = true; 9 + enableDefaultConfig = false; 10 + 11 + matchBlocks = { 12 + "*" = { 13 + hashKnownHosts = true; 14 + compression = true; 15 + identityAgent = lib.mkIf config.sys.profiles.graphical.enable ''"~/Library/Containers/com.bitwarden.desktop/Data/.bitwarden-ssh-agent.sock"''; 16 + }; 17 + 18 + "codeberg.org" = { 19 + user = "git"; 20 + hostname = "codeberg.org"; 21 + }; 22 + 23 + "github.com" = { 24 + user = "git"; 25 + hostname = "github.com"; 26 + }; 27 + }; 28 + }; 29 + }
+17
hosts/default.nix
··· 1 + { self, inputs, ... }: 2 + { 3 + imports = [ inputs.easy-hosts.flakeModule ]; 4 + 5 + config.easy-hosts = { 6 + perClass = class: { 7 + modules = [ "${self}/modules/${class}" ]; 8 + }; 9 + 10 + hosts = { 11 + violet = { 12 + arch = "aarch64"; 13 + class = "darwin"; 14 + }; 15 + }; 16 + }; 17 + }
+10
hosts/violet/default.nix
··· 1 + { 2 + sys = { 3 + profiles.graphical.enable = true; 4 + services.yabai.enable = true; 5 + }; 6 + 7 + system.primaryUser = "diogo"; 8 + 9 + security.pam.services.sudo_local.touchIdAuth = true; 10 + }
+44
justfile
··· 1 + flake_var := env_var_or_default("FLAKE", "") 2 + flake := if flake_var =~ '^\.*$' { justfile_directory() } else { flake_var } 3 + rebuild := if os() == "macos" { "sudo darwin-rebuild" } else { "nixos-rebuild" } 4 + system-args := if os() != "macos" { "--sudo --no-reexec" } else { "" } 5 + 6 + [private] 7 + default: 8 + @just --list --unsorted 9 + 10 + [group('rebuild')] 11 + [private] 12 + builder goal *args: 13 + {{ rebuild }} {{ goal }} \ 14 + --flake {{ flake }} \ 15 + {{ system-args }} \ 16 + {{ args }} 17 + 18 + [group('rebuild')] 19 + switch *args: (builder "switch" args) 20 + 21 + [group('rebuild')] 22 + [macos] 23 + provision host: 24 + sudo nix run nix-darwin/master -- switch --flake {{ flake }}#{{ host }} 25 + 26 + [group('rebuild')] 27 + deploy host *args: (builder "switch" "--build-host " + host "--target-host " + host "--use-substitutes " + args) 28 + 29 + [group('utils')] 30 + clean: 31 + nix-collect-garbage --delete-older-than 3d 32 + nix store optimise 33 + 34 + [group('utils')] 35 + rotate: 36 + /usr/bin/find secrets/ -name "*.yaml" | xargs -I {} sops rotate -i {} 37 + /usr/bin/find secrets/ -name "*.yaml" | xargs -I {} sops updatekeys -y {} 38 + 39 + [group('utils')] 40 + update: 41 + nix flake update \ 42 + --commit-lock-file \ 43 + --commit-lockfile-summary "flake: update inputs" \ 44 + --flake {{ flake }}
+73
modules/darwin/brew.nix
··· 1 + { 2 + pkgs, 3 + inputs, 4 + config, 5 + lib, 6 + ... 7 + }: 8 + { 9 + imports = [ 10 + inputs.homebrew.darwinModules.nix-homebrew 11 + ./environment.nix 12 + ]; 13 + 14 + config = { 15 + nix-homebrew = { 16 + enable = true; 17 + taps = { 18 + "homebrew/homebrew-core" = pkgs.fetchFromGitHub { 19 + owner = "homebrew"; 20 + repo = "homebrew-core"; 21 + rev = "5b104d8d7a7b36f46d0b401d05b76223e4e563a0"; 22 + hash = "sha256-ounBeVA8dzrZ/K10CIa2zRkCPjGd+nWL6kqpETFAktk="; 23 + }; 24 + "homebrew/homebrew-cask" = pkgs.fetchFromGitHub { 25 + owner = "homebrew"; 26 + repo = "homebrew-cask"; 27 + rev = "247fe8e7eac947fd72d620ba30792925af93167d"; 28 + hash = "sha256-WnmrHLadWR1bxWpmcfziY62U5oQkNREweNqE0H5k1fw="; 29 + }; 30 + }; 31 + mutableTaps = false; 32 + user = "diogo"; 33 + autoMigrate = true; 34 + }; 35 + 36 + homebrew = { 37 + enable = true; 38 + 39 + global.autoUpdate = true; 40 + 41 + onActivation = { 42 + upgrade = true; 43 + cleanup = "zap"; 44 + }; 45 + 46 + taps = builtins.attrNames config.nix-homebrew.taps; 47 + 48 + masApps = { 49 + # "TestFlight" = 899247664; 50 + # "WhatsApp" = 310633997; 51 + # "WireGuard" = 1451685025; 52 + # "Bitwarden" = 1352778147; 53 + }; 54 + 55 + brews = [ 56 + "bitwarden-cli" 57 + ]; 58 + 59 + casks = [ 60 + "1password" 61 + "aldente" 62 + "font-maple-mono" 63 + "signal" 64 + "raycast" 65 + "sketch@beta" 66 + ] 67 + ++ lib.optionals config.sys.profiles.gaming.enable [ 68 + "steam" 69 + "prismlauncher" 70 + ]; 71 + }; 72 + }; 73 + }
+18
modules/darwin/default.nix
··· 1 + { inputs, ... }: 2 + { 3 + _class = "darwin"; 4 + 5 + system.defaults.CustomUserPreferences."com.apple.AdLib".allowApplePersonalizedAdvertising = false; 6 + 7 + imports = [ 8 + ../shared 9 + inputs.home-manager.darwinModules.home-manager 10 + ./preferences.nix 11 + ./networking.nix 12 + ./keyboard.nix 13 + ./brew.nix 14 + ./services 15 + ]; 16 + 17 + system.stateVersion = 6; 18 + }
+9
modules/darwin/environment.nix
··· 1 + { config, ... }: 2 + { 3 + environment.variables = { 4 + HOMEBREW_NO_ANALYTICS = "1"; 5 + HOMEBREW_NO_INSECURE_REDIRECT = "1"; 6 + HOMEBREW_NO_ENV_HINTS = "0"; 7 + systemPath = [ config.homebrew.brewPrefix ]; 8 + }; 9 + }
+14
modules/darwin/keyboard.nix
··· 1 + { 2 + system = { 3 + keyboard = { 4 + enableKeyMapping = true; 5 + remapCapsLockToEscape = true; 6 + }; 7 + 8 + defaults.NSGlobalDomain = { 9 + ApplePressAndHoldEnabled = false; 10 + KeyRepeat = 1; 11 + InitialKeyRepeat = 13; 12 + }; 13 + }; 14 + }
+20
modules/darwin/networking.nix
··· 1 + { 2 + networking = { 3 + applicationFirewall = { 4 + enable = true; 5 + blockAllIncoming = false; 6 + allowSignedApp = false; 7 + allowSigned = true; 8 + enableStealthMode = true; 9 + }; 10 + knownNetworkServices = [ 11 + "Wi-Fi" 12 + ]; 13 + dns = [ 14 + "9.9.9.9" 15 + "1.1.1.2" 16 + "2620:fe::fe" 17 + "2606:4700:4700::1112" 18 + ]; 19 + }; 20 + }
+86
modules/darwin/preferences.nix
··· 1 + { 2 + system.defaults = { 3 + dock = { 4 + autohide = true; 5 + tilesize = 35; 6 + orientation = "left"; 7 + show-recents = false; 8 + minimize-to-application = true; 9 + mru-spaces = false; 10 + persistent-apps = [ 11 + { 12 + app = "/nix/store/5f1ghi3sgdpv5m9d8jhi4i3434rqkp7w-zen-beta-1.17.6b/Applications/Zen Browser (Beta).app"; 13 + } 14 + { app = "/System/Applications/Mail.app"; } 15 + { app = "/nix/store/cb89wc26l0fzaywsr1y8ds0vwsxi9mr0-ghostty-bin-1.2.3/Applications/Ghostty.app"; } 16 + { app = "/nix/store/xcwka2yvbvip4lmc1m15gyq99wfwbahn-vesktop-1.6.1/Applications/Vesktop.app"; } 17 + { app = "/System/Applications/System Settings.app"; } 18 + ]; 19 + }; 20 + 21 + NSGlobalDomain = { 22 + AppleShowScrollBars = "WhenScrolling"; 23 + AppleShowAllExtensions = true; 24 + AppleShowAllFiles = true; 25 + NSAutomaticQuoteSubstitutionEnabled = false; 26 + NSAutomaticDashSubstitutionEnabled = false; 27 + NSAutomaticSpellingCorrectionEnabled = false; 28 + NSAutomaticCapitalizationEnabled = false; 29 + NSScrollAnimationEnabled = true; 30 + }; 31 + 32 + WindowManager = { 33 + EnableStandardClickToShowDesktop = false; 34 + }; 35 + 36 + screensaver = { 37 + askForPassword = true; 38 + askForPasswordDelay = 0; 39 + }; 40 + 41 + finder = { 42 + ShowPathbar = true; 43 + FXEnableExtensionChangeWarning = false; 44 + AppleShowAllExtensions = true; 45 + AppleShowAllFiles = true; 46 + FXRemoveOldTrashItems = true; 47 + ShowHardDrivesOnDesktop = true; 48 + }; 49 + 50 + CustomUserPreferences."com.apple.finder" = { 51 + ShowExternalHardDrivesOnDesktop = true; 52 + ShowHardDrivesOnDesktop = true; 53 + ShowMountedServersOnDesktop = true; 54 + ShowRemovableMediaOnDesktop = true; 55 + _FXSortFoldersFirst = true; 56 + FXDefaultSearchScope = "SCcf"; 57 + WarnOnEmptyTrash = false; 58 + }; 59 + 60 + loginwindow = { 61 + GuestEnabled = false; 62 + SHOWFULLNAME = false; 63 + }; 64 + 65 + controlcenter = { 66 + BatteryShowPercentage = true; 67 + Bluetooth = false; 68 + Display = false; 69 + FocusModes = false; 70 + NowPlaying = false; 71 + Sound = false; 72 + }; 73 + }; 74 + 75 + system.activationScripts.postActivate.text = '' 76 + #!/usr/bin/env bash 77 + set -e 78 + 79 + sudo chflags nohidden /Volumes 80 + chflags nohidden "$HOME/Library" 81 + sudo dscacheutil -flushcache 82 + sudo killall -HUP mDNSResponder 83 + 84 + killall Dock Finder SystemUIServer WindowManager || true 85 + ''; 86 + }
+5
modules/darwin/services/default.nix
··· 1 + { 2 + imports = [ 3 + ./yabai.nix 4 + ]; 5 + }
+76
modules/darwin/services/yabai.nix
··· 1 + { 2 + self, 3 + lib, 4 + config, 5 + ... 6 + }: 7 + let 8 + inherit (lib) mkIf; 9 + inherit (self.lib) mkServiceOption; 10 + 11 + cfg = config.sys.services.yabai; 12 + in 13 + { 14 + options = { 15 + sys.services.yabai = mkServiceOption "yabai" { }; 16 + }; 17 + 18 + config = mkIf cfg.enable { 19 + services.yabai = { 20 + enable = true; 21 + config = { 22 + mouse_follows_focus = "on"; 23 + split_ratio = 0.50; 24 + layout = "bsp"; 25 + top_padding = 8; 26 + bottom_padding = 8; 27 + left_padding = 8; 28 + right_padding = 8; 29 + window_gap = 8; 30 + external_bar = "main:0:0"; 31 + }; 32 + extraConfig = '' 33 + yabai -m space 1 --label web 34 + yabai -m rule --add app="Zen Browser (Beta)" space=web 35 + yabai -m rule --add app="Safari" space=web 36 + 37 + yabai -m space 2 --label dev 38 + yabai -m rule --add app="Ghostty" space=dev 39 + yabai -m rule --add app="Xcode" space=dev 40 + yabai -m rule --add app="Zed" space=dev 41 + 42 + yabai -m space 3 --label misc --layout stack 43 + yabai -m rule --add app="Notes" space=misc 44 + yabai -m rule --add app="Sketch Beta" space=misc 45 + yabai -m rule --add app="Reminders" space=misc 46 + 47 + yabai -m space 4 --label stack --layout stack 48 + yabai -m rule --add app="Vesktop" space=stack 49 + yabai -m rule --add app="Signal" space=stack 50 + yabai -m rule --add app="Messages" space=stack 51 + yabai -m rule --add app="Mail" space=stack 52 + yabai -m rule --add app="WhatsApp" space=stack 53 + yabai -m rule --add app="Podcasts" space=stack 54 + yabai -m rule --add app="Music" space=stack 55 + yabai -m rule --add app="Steam" space=stack 56 + 57 + yabai -m rule --add label="System Settings" app="^System Settings$" manage=off 58 + yabai -m rule --add label="About This Mac" app="^System Information$" title="About This Mac" manage=off 59 + yabai -m rule --add label="Software Update" title="^Software Update$" manage=off 60 + yabai -m rule --add label="Safari" app="^Safari$" title="^(General|(Tab|Website|Profile|Extension|Feature Flag)s|AutoFill|Se(arch|curity)|Privacy|Advanced|Developer)$" manage=off 61 + yabai -m rule --add label="Finder" app="^Finder$" manage=off 62 + yabai -m rule --add label="App Store" app="^App Store$" manage=off 63 + yabai -m rule --add label="Activity Monitor" app="^Activity Monitor$" manage=off 64 + yabai -m rule --add label="Calculator" app="^Calculator$" manage=off 65 + yabai -m rule --add label="Dictionary" app="^Dictionary$" manage=off 66 + yabai -m rule --add label="1Password" app="^1Password$" manage=off 67 + yabai -m rule --add label="Bitwarden" app="^Bitwarden$" manage=off 68 + yabai -m rule --add label="FaceTime" app="^FaceTime$" manage=off 69 + 70 + yabai -m signal --add app='^Ghostty$' event=window_created action='yabai -m space --layout bsp' 71 + yabai -m signal --add app='^Ghostty$' event=window_destroyed action='yabai -m space --layout bsp' 72 + 73 + ''; 74 + }; 75 + }; 76 + }
+11
modules/home/default.nix
··· 1 + { 2 + _class = "homeManager"; 3 + 4 + imports = [ 5 + ../shared/packages.nix 6 + ../shared/profiles.nix 7 + ./home.nix 8 + ./profiles.nix 9 + ./secrets.nix 10 + ]; 11 + }
+5
modules/home/home.nix
··· 1 + { 2 + home.stateVersion = "25.05"; 3 + 4 + programs.home-manager.enable = true; 5 + }
+13
modules/home/profiles.nix
··· 1 + { osConfig, ... }: 2 + let 3 + cfg = osConfig.sys.profiles; 4 + in 5 + { 6 + sys.profiles = { 7 + inherit (cfg) 8 + graphical 9 + headless 10 + gaming 11 + ; 12 + }; 13 + }
+17
modules/home/secrets.nix
··· 1 + { 2 + self, 3 + name, 4 + config, 5 + inputs, 6 + ... 7 + }: 8 + { 9 + imports = [ inputs.sops.homeManagerModules.sops ]; 10 + 11 + config = { 12 + sops = { 13 + defaultSopsFile = "${self}/secrets/${name}.yaml"; 14 + age.sshKeyPaths = [ "${config.home.homeDirectory}/.ssh/id_ed25519" ]; 15 + }; 16 + }; 17 + }
+24
modules/nixos/default.nix
··· 1 + { inputs, ... }: 2 + { 3 + _class = "nixos"; 4 + 5 + imports = [ 6 + ../shared 7 + inputs.home-manager.nixosModules.home-manager 8 + ./headless.nix 9 + ./networking 10 + ./sudo.nix 11 + ./secrets.nix 12 + ./services 13 + ./users 14 + ]; 15 + 16 + nix = { 17 + gc.dates = "Mon *-*-* 04:00"; 18 + 19 + optimise = { 20 + automatic = true; 21 + dates = [ "04:30" ]; 22 + }; 23 + }; 24 + }
+10
modules/nixos/headless.nix
··· 1 + { lib, config, ... }: 2 + { 3 + config = lib.mkIf config.sys.profiles.headless.enable { 4 + environment.variables.BROWSER = "echo"; 5 + 6 + systemd = { 7 + enableEmergencyMode = false; 8 + }; 9 + }; 10 + }
+21
modules/nixos/networking/default.nix
··· 1 + { config, ... }: 2 + { 3 + imports = [ 4 + ./fail2ban.nix 5 + ./firewall.nix 6 + ./openssh.nix 7 + ]; 8 + 9 + networking = { 10 + hostId = builtins.substring 0 8 (builtins.hashString "md5" config.networking.hostName); 11 + 12 + networkmanager.enable = true; 13 + 14 + nameservers = [ 15 + "9.9.9.9" 16 + "1.1.1.1" 17 + "2620:fe::fe" 18 + "2606:4700:4700::1111" 19 + ]; 20 + }; 21 + }
+19
modules/nixos/networking/fail2ban.nix
··· 1 + { 2 + services.fail2ban = { 3 + enable = true; 4 + banaction = "iptables-multiport[blocktype=DROP]"; 5 + maxretry = 3; 6 + ignoreIP = [ 7 + "127.0.0.0/8" 8 + "10.0.0.0/8" 9 + "192.168.0.0/16" 10 + ]; 11 + 12 + bantime-increment = { 13 + enable = true; 14 + rndtime = "12m"; 15 + multipliers = "4 8 16 32 64 128 256 512 1024 2048"; 16 + maxtime = "192h"; 17 + }; 18 + }; 19 + }
+20
modules/nixos/networking/firewall.nix
··· 1 + { pkgs, config, ... }: 2 + { 3 + config = { 4 + networking.firewall = { 5 + enable = true; 6 + package = pkgs.iptables; 7 + 8 + allowedTCPPorts = [ 9 + 80 10 + 443 11 + ]; 12 + allowedUDPPorts = [ ]; 13 + 14 + allowedTCPPortRanges = [ ]; 15 + allowedUDPPortRanges = [ ]; 16 + 17 + allowPing = config.sys.profiles.headless.enable; 18 + }; 19 + }; 20 + }
+19
modules/nixos/networking/openssh.nix
··· 1 + { 2 + services.openssh = { 3 + enable = true; 4 + 5 + settings = { 6 + PasswordAuthentication = false; 7 + KbdInteractiveAuthentication = false; 8 + PermitRootLogin = "no"; 9 + AuthenticationMethods = "publickey"; 10 + PubkeyAuthentication = "yes"; 11 + 12 + ClientAliveCountMax = 5; 13 + ClientAliveInterval = 60; 14 + }; 15 + 16 + openFirewall = true; 17 + ports = [ 22 ]; 18 + }; 19 + }
+11
modules/nixos/secrets.nix
··· 1 + { inputs, ... }: 2 + { 3 + imports = [ inputs.sops.nixosModules.sops ]; 4 + 5 + sops = { 6 + age = { 7 + sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]; 8 + }; 9 + gnupg.sshKeyPaths = [ ]; 10 + }; 11 + }
+44
modules/nixos/services/caddy.nix
··· 1 + { 2 + self, 3 + lib, 4 + config, 5 + ... 6 + }: 7 + let 8 + inherit (lib) mkIf; 9 + inherit (self.lib) mkServiceOption; 10 + 11 + cfg = config.sys.services.caddy; 12 + in 13 + { 14 + options = { 15 + sys.services.caddy = mkServiceOption "caddy" { 16 + domain = "diogo.fi"; 17 + }; 18 + }; 19 + 20 + config = mkIf cfg.enable { 21 + sops.secrets.bunny = { 22 + sopsFile = "${self}/secrets/services/bunny.yaml"; 23 + key = "bunny"; 24 + owner = "caddy"; 25 + group = "caddy"; 26 + }; 27 + 28 + networking = { inherit (cfg) domain; }; 29 + 30 + security.acme = { 31 + acceptTerms = true; 32 + defaults.email = "hello@${cfg.domain}"; 33 + certs.${cfg.domain} = { 34 + extraDomainNames = [ "*.${cfg.domain}" ]; 35 + dnsProvider = "bunny"; 36 + credentialsFile = config.sops.secrets.bunny.path; 37 + }; 38 + }; 39 + 40 + users.users.caddy.extraGroups = [ "acme" ]; 41 + 42 + services.caddy.enable = true; 43 + }; 44 + }
+7
modules/nixos/services/default.nix
··· 1 + { 2 + imports = [ 3 + ./caddy.nix 4 + ./docker.nix 5 + ./pds.nix 6 + ]; 7 + }
+16
modules/nixos/services/docker.nix
··· 1 + { 2 + lib, 3 + self, 4 + config, 5 + ... 6 + }: 7 + let 8 + inherit (lib) mkIf; 9 + inherit (self.lib) mkServiceOption; 10 + in 11 + { 12 + options.sys.services.docker = mkServiceOption "docker" { }; 13 + config = mkIf config.sys.services.docker.enable { 14 + virtualisation.docker.enable = true; 15 + }; 16 + }
+71
modules/nixos/services/pds.nix
··· 1 + # https://isabelroses.com/blog/nix-pds-guide/ 2 + { 3 + lib, 4 + self, 5 + config, 6 + ... 7 + }: 8 + let 9 + inherit (lib) mkIf concatStringsSep; 10 + inherit (self.lib) mkServiceOption; 11 + 12 + cfg = config.sys.services.pds; 13 + in 14 + { 15 + options.sys.services.pds = mkServiceOption "pds" { 16 + domain = "pds.${config.networking.domain}"; 17 + port = 3333; 18 + }; 19 + 20 + config = mkIf cfg.enable { 21 + sops.secrets.pds = { 22 + sopsFile = "${self}/secrets/services/pds.yaml"; 23 + owner = "pds"; 24 + group = "pds"; 25 + }; 26 + 27 + services = { 28 + bluesky-pds = { 29 + enable = true; 30 + pdsadmin.enable = true; 31 + 32 + environmentFiles = [ config.sops.secrets.pds.path ]; 33 + 34 + settings = { 35 + PDS_PORT = cfg.port; 36 + PDS_HOSTNAME = cfg.domain; 37 + PDS_ADMIN_EMAIL = "hello@" + config.networking.domain; 38 + 39 + # https://compare.hose.cam 40 + PDS_CRAWLERS = concatStringsSep "," [ 41 + "https://bsky.network" 42 + "https://relay.cerulea.blue" 43 + "https://relay.fire.hose.cam" 44 + "https://relay2.fire.hose.cam" 45 + "https://relay3.fr.hose.cam" 46 + "https://relay.hayescmd.net" 47 + "https://relay.xero.systems" 48 + "https://relay.upcloud.world" 49 + "https://relay.feeds.blue" 50 + "https://atproto.africa" 51 + ]; 52 + 53 + PDS_OAUTH_PROVIDER_NAME = config.networking.domain; 54 + }; 55 + }; 56 + 57 + caddy.virtualHosts.${cfg.domain} = { 58 + extraConfig = '' 59 + reverse_proxy http://${cfg.host}:${toString cfg.port} 60 + 61 + handle /xrpc/app.bsky.unspecced.getAgeAssuranceState { 62 + header content-type "application/json" 63 + header access-control-allow-headers "authorization,dpop,atproto-accept-labelers,atproto-proxy" 64 + header access-control-allow-origin "*" 65 + respond `{"lastInitiatedAt":"2025-07-14T14:22:43.912Z","status":"assured"}` 200 66 + } 67 + ''; 68 + }; 69 + }; 70 + }; 71 + }
+10
modules/nixos/sudo.nix
··· 1 + { lib, ... }: 2 + { 3 + security = { 4 + sudo = { 5 + enable = true; 6 + wheelNeedsPassword = lib.mkDefault false; 7 + execWheelOnly = true; 8 + }; 9 + }; 10 + }
+5
modules/nixos/users/default.nix
··· 1 + { 2 + imports = [ 3 + ./diogo.nix 4 + ]; 5 + }
+13
modules/nixos/users/diogo.nix
··· 1 + { 2 + lib, 3 + config, 4 + ... 5 + }: 6 + let 7 + inherit (lib) elem mkIf; 8 + in 9 + { 10 + config = mkIf (elem "diogo" config.sys.users) { 11 + users.users.diogo.hashedPassword = "$6$h/hPw1aKAbw/WKxy$IEnxYGD/esK890EjR5i4TlrDj6ph4DfZpiUdQ2FZp/LqXAkNzSN2BXUlmL4QQWJHsvjlbzIvULeLigfATRzyC."; 12 + }; 13 + }
+9
modules/shared/default.nix
··· 1 + { 2 + imports = [ 3 + ./packages.nix 4 + ./profiles.nix 5 + ../../home 6 + ./nix.nix 7 + ./users 8 + ]; 9 + }
+9
modules/shared/nix.nix
··· 1 + { 2 + nix.settings = { 3 + experimental-features = [ 4 + "nix-command" 5 + "flakes" 6 + ]; 7 + }; 8 + nixpkgs.config.allowUnfree = true; 9 + }
+25
modules/shared/packages.nix
··· 1 + { 2 + lib, 3 + config, 4 + _class, 5 + ... 6 + }: 7 + { 8 + options.sys.packages = lib.mkOption { 9 + type = lib.types.attrsOf lib.types.package; 10 + default = { }; 11 + description = '' 12 + List of packages to install. 13 + ''; 14 + }; 15 + 16 + config = lib.mergeAttrsList [ 17 + (lib.optionalAttrs (_class == "nixos" || _class == "darwin") { 18 + environment.systemPackages = builtins.attrValues config.sys.packages; 19 + }) 20 + 21 + (lib.optionalAttrs (_class == "homeManager") { 22 + home.packages = builtins.attrValues config.sys.packages; 23 + }) 24 + ]; 25 + }
+11
modules/shared/profiles.nix
··· 1 + { lib, ... }: 2 + let 3 + inherit (lib) mkEnableOption; 4 + in 5 + { 6 + options.sys.profiles = { 7 + graphical.enable = mkEnableOption "Graphical Interface"; 8 + headless.enable = mkEnableOption "Headless"; 9 + gaming.enable = mkEnableOption "Gaming"; 10 + }; 11 + }
+7
modules/shared/users/default.nix
··· 1 + { 2 + imports = [ 3 + ./mkuser.nix 4 + ./options.nix 5 + ./diogo.nix 6 + ]; 7 + }
+15
modules/shared/users/diogo.nix
··· 1 + { 2 + lib, 3 + config, 4 + ... 5 + }: 6 + let 7 + inherit (lib) elem mkIf; 8 + in 9 + { 10 + config = mkIf (elem "diogo" config.sys.users) { 11 + users.users.diogo.openssh.authorizedKeys.keys = [ 12 + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICCTbCHJ0avif6MQ7izXlHHaubNsOhU2xf9lMvXKLyUQ" 13 + ]; 14 + }; 15 + }
+31
modules/shared/users/mkuser.nix
··· 1 + { 2 + lib, 3 + _class, 4 + config, 5 + ... 6 + }: 7 + let 8 + inherit (lib) 9 + mkDefault 10 + mergeAttrsList 11 + optionalAttrs 12 + genAttrs 13 + ; 14 + in 15 + { 16 + users.users = genAttrs config.sys.users ( 17 + name: 18 + mergeAttrsList [ 19 + (optionalAttrs (_class == "darwin") { 20 + home = "/Users/${name}"; 21 + }) 22 + 23 + (optionalAttrs (_class == "nixos") { 24 + home = "/home/${name}"; 25 + uid = mkDefault 1000; 26 + isNormalUser = true; 27 + extraGroups = [ "wheel" ] ++ (if config.sys.services.docker.enable then [ "docker" ] else [ ]); 28 + }) 29 + ] 30 + ); 31 + }
+22
modules/shared/users/options.nix
··· 1 + { lib, config, ... }: 2 + let 3 + inherit (lib) mkOption optional; 4 + inherit (lib.types) listOf str; 5 + in 6 + { 7 + options.sys.users = mkOption { 8 + type = listOf str; 9 + default = [ "diogo" ]; 10 + description = '' 11 + A list of users that the host will have. 12 + ''; 13 + }; 14 + 15 + config = { 16 + warnings = optional (config.sys.users == [ ]) '' 17 + You have not configured any users. 18 + 19 + Please set {option}`config.sys.users` in your host configuration. 20 + ''; 21 + }; 22 + }
+17
secrets/diogo.yaml
··· 1 + uwu: ENC[AES256_GCM,data:icu0,iv:zRILxhD8FDMHam2fKaRGZTucmazwogB53SAmn4Vk7bE=,tag:M7K0E+N/5s11FofKxc//2w==,type:str] 2 + sops: 3 + age: 4 + - recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICCTbCHJ0avif6MQ7izXlHHaubNsOhU2xf9lMvXKLyUQ 5 + enc: | 6 + -----BEGIN AGE ENCRYPTED FILE----- 7 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEZnTXFHQSBuOWk5 8 + ckR4RzMzNkFuc05HSTBBSEwzaFczSUlmY1BqRHp5R25NMndEVEdFClVEK3hMRFcv 9 + K2ZqQkkraHZWdWJQaVpFYzdSUSt4Mnl6VGdjUnVEVWZRcmsKLS0tIGRIczhvaUk2 10 + SHRJcjA2MjFLcVVwZTZtUGs0OWZnbzYra0drVzVwT1hjYU0KYf38Vm1666GeDYaA 11 + ljNh7adAMf6YW80B8e+xtaL4eCNnogdLdmITVduAsxij0k/UloC1ZILF5w9g+lR0 12 + duLznQ== 13 + -----END AGE ENCRYPTED FILE----- 14 + lastmodified: "2025-11-19T14:59:40Z" 15 + mac: ENC[AES256_GCM,data:J9rjve5UkkZhkHLX828S8EksCnQqHtsAy2/4jOBxSh6uvjG82JlHQ5ok2rcRSAWxHU6I/QvpzqsVJXAd2r60uJyWdNf+gBxIppC+0q5oLL7BB0DVMxzthy60RPKpV0rTy0T1kjHglqXwTb0q6SxyoAhYHLW4ZpD5wXB0qFIC/d4=,iv:FKOjqkVq8mpeyz6RVOTOioJehN2FUb58wNWE77ZnEAo=,tag:ohyZJlug3hC0yFp0HjwbZQ==,type:str] 16 + unencrypted_suffix: _unencrypted 17 + version: 3.10.2
+17
secrets/services/bunny.yaml
··· 1 + bunny: ENC[AES256_GCM,data:SZlpwyvlWNCCV0Q0VEop8MUg/pSlDdWPGC/EfPiX2dEq+LA8iB0mV3QgJlX/eJEJrjSkIU1Wk8TN5Cjc7N54CnUk+1aYgnxGwUu1vbrep8TodKpxDSNR,iv:9irGAPMiQcHHpcjo+Ho660oiyAV4PdJnzsZEhpAmQ8k=,tag:mCpQvv3wMYNb8n1Rwi6TiA==,type:str] 2 + sops: 3 + age: 4 + - recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICCTbCHJ0avif6MQ7izXlHHaubNsOhU2xf9lMvXKLyUQ 5 + enc: | 6 + -----BEGIN AGE ENCRYPTED FILE----- 7 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEZnTXFHQSBqOURG 8 + eXlNaitjYUcydkdaRlRLK1NGeDIvcnpBR2VkbGZHR3ZxSGhDd0c0CjBtU1JMc0ZK 9 + YzBwVm9LTHZkcTR6elFNcDMvTHgxTlJrNDlwSmtGNUNzU28KLS0tIEMraXYvMUFu 10 + d0JUcXMzL0liY3RZNEsrNTRWUE4vUWtwOERmMHZFc2gwWWMKSAaqC1tzow+dgUlS 11 + 9IHX8AxaX6bmWsoaU5+/+0gOmFkjvvfp2bb0/dd6eHtgJJWXgaw85jsD0v55wOb/ 12 + U+qB8Q== 13 + -----END AGE ENCRYPTED FILE----- 14 + lastmodified: "2025-11-19T14:59:40Z" 15 + mac: ENC[AES256_GCM,data:AiBNKPGULJfY20YgoJIy8Y9OTOaq9cSjnnMOIIGLHl7Db3Fa73ft7mgSxwR35tVP+F7UdxFNOnUXjewh0AigodgEYtGfGGgoI97/KKPiW9u5T9/RGVKw3MdBwHjxkanZdOw8u52n23DvvEqKsDwefoQslzBZpnA9V8V7hIaruH0=,iv:lb/P/XACYgX9PhMF7Sd+pEg4nG7KYZv1e5pXviyDTAs=,tag:9QNB4Ujgj81vwKJCA8qFcg==,type:str] 16 + unencrypted_suffix: _unencrypted 17 + version: 3.11.0
+17
secrets/services/pds.yaml
··· 1 + pds: ENC[AES256_GCM,data:x/WhLcfbMCcrGjpsmebR2upQQN3A6/7Q8EvGruN3HKi1YdWY6rYNP8I7/hz0atRMm5DyU6kvWPaaDZgSmxVfLb820ZMRl7EExI9XH+7MnvSuosbVOMhnZ7YbjraL7yZZNd8/5oCYPXX6BKyuLvKuWgycXlMFMfPb+7gFOMu8hNv+EzYSHKYbrjSj3ZC1vpiVfderCrW1iJWZaR4YHcQQtxQVds4o17yb2yNGaXrngpCxb8JLkSmDgHqfiDWXAMV27/0aagrwQL/crTmHFskyWQVlPchG39bF+Dt5H06ifJZGSV3jXsKVxCldZTxhYHEMrU6eHQVVEIawHvjixJLLipy3jO28wK6k7zGCPKFCeKZA9GEwMdR5Y7BQ7kG3YfKFbRpXtz73yL/E36FSL3r2frFyTHi4slYEcO/A1noqxpP26zibFFHl8TA=,iv:bC9e4zNogCZRsVD9roa+YkTEFH0YGvhNIdLZPi955JM=,tag:EJbh+3uSevdRlr7N3PupWg==,type:str] 2 + sops: 3 + age: 4 + - recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICCTbCHJ0avif6MQ7izXlHHaubNsOhU2xf9lMvXKLyUQ 5 + enc: | 6 + -----BEGIN AGE ENCRYPTED FILE----- 7 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IEZnTXFHQSA5dHN3 8 + UFNFdWFrTUxnQzdZdkdqSDhOT0FmSzQ1eFhiUnkyT2U5NnNGSXljCnNzYnJyMHJv 9 + WXVxam5rTVZiRmNwRFRSMTNJbHVDYy95dlhvSzdUdmRVelkKLS0tIDF3Ulc0TkZM 10 + Mmc2dUoxUDNRTE84SEVoakxvVUlnY3k0N3JEZHhlcUpoODAK9KTcrjauhWLVHExY 11 + na54ehUSBCXmFwv0pUhNXVBmY1o7bmWcxqoYjVAfvqrMHAWCMYinEvcVN+EzY8fB 12 + XXfPmg== 13 + -----END AGE ENCRYPTED FILE----- 14 + lastmodified: "2025-11-19T14:59:40Z" 15 + mac: ENC[AES256_GCM,data:Hsd21Z896TSmeJ/0ufX1grzAdnk11odYjg2T9qvkZ8OQyPY7+17tEUcd6R2GyLC5TsMxqoLWR21iFN+nHR0Z0RVlpElQtC2/vTUdOLLbUW2eeZfBCMYwxWJKxlUQiOM2rRADpIhNmbPqB53n8i4idqUVKw5kC19+zGTT+BixROE=,iv:/OjthGKQQEI5mToTtlzMZulWpuj45j6XxkFCEgxQNM8=,tag:Wr+M9P4qg7/IbKW5id2sjQ==,type:str] 16 + unencrypted_suffix: _unencrypted 17 + version: 3.11.0
+9
stylua.toml
··· 1 + indent_type = "Spaces" 2 + indent_width = 2 3 + column_width = 100 4 + line_endings = "Unix" 5 + quote_style = "AutoPreferDouble" 6 + call_parentheses = "Always" 7 + 8 + [sort_requires] 9 + enabled = true