authorgravatar for nmarks413@gmail.comNatalie Marks <nmarks413@gmail.com> 2025-08-18 14:00:28-07:00
committergravatar for nmarks413@gmail.comNatalie Marks <nmarks413@gmail.com> 2025-08-18 14:00:28-07:00
log84993913c26cf3d7ea289d7371e055d591cbcfcd
treea6858b1cb289b03084ed407b5772f30b925fe40f
parent492998e1c247353a395cc3db5040d96501e2f9d6
parent38a0ff695984d5ff685869202c3892448cf4a0ac
signature Commit is signed but in an unrecognized format.

Merge branch 'main' of paperclover.dev:nix/config


35 files changed, 761 insertions(+), 736 deletions(-)

.mailmap created+3
...@@ -0,0 +1,3 @@
1# To learn more about git's mailmap: https://ntietz.com/blog/git-mailmap-for-name-changes
2clover caruso <git@paperclover.net> <git@paperclover.net>
3Natalie Marks <nmarks413@gmail.com> <nmarks413@gmail.com>
flake.nix+8-8
...@@ -97,9 +97,9 @@...@@ -97,9 +97,9 @@
97 packages = forAllSystems (97 packages = forAllSystems (
98 { system, pkgs, ... }:98 { system, pkgs, ... }:
99 {99 {
100 nvim-chloe = mkNeovim "chloe" pkgs;100 nvim-clover = mkNeovim "clover" pkgs;
101 nvim-fish = mkNeovim "fish" pkgs;
101 nvim-natalie = mkNeovim "natalie" pkgs;102 nvim-natalie = mkNeovim "natalie" pkgs;
102 nvim-julia = mkNeovim "julia" pkgs;
103103
104 inherit (pkgs) autofmt;104 inherit (pkgs) autofmt;
105 }105 }
...@@ -122,22 +122,22 @@...@@ -122,22 +122,22 @@
122 system = "aarch64-darwin";122 system = "aarch64-darwin";
123 };123 };
124124
125 # chloe's mac studio "sandwich"125 # clover's mac studio "sandwich"
126 darwinConfigurations.sandwich = mkSystem "sandwich" {126 darwinConfigurations.sandwich = mkSystem "sandwich" {
127 user = "chloe";127 user = "clover";
128 host = "sandwich";128 host = "sandwich";
129 system = "aarch64-darwin";129 system = "aarch64-darwin";
130 };130 };
131 # chloe's macbook air "paperback"131 # clover's macbook air "paperback"
132 darwinConfigurations.paperback = mkSystem "paperback" {132 darwinConfigurations.paperback = mkSystem "paperback" {
133 user = "chloe";133 user = "clover";
134 host = "paperback";134 host = "paperback";
135 system = "aarch64-darwin";135 system = "aarch64-darwin";
136 };136 };
137137
138 # julia's cattop138 # fish's cattop
139 nixosConfigurations.cattop = mkSystem "cattop" {139 nixosConfigurations.cattop = mkSystem "cattop" {
140 user = "julia";140 user = "fish";
141 host = "cattop";141 host = "cattop";
142 system = "x86_64-linux";142 system = "x86_64-linux";
143 };143 };
modules/neovim/default.nix+50-90
...@@ -6,8 +6,9 @@...@@ -6,8 +6,9 @@
6}:6}:
7{7{
8 imports = [8 imports = [
9 ./options.nix
10 ./formatter.nix9 ./formatter.nix
10 ./keybind.nix
11 ./options.nix
11 ];12 ];
12 # based on default options from upstream:13 # based on default options from upstream:
13 # https://github.com/NotAShelf/nvf/blob/main/configuration.nix14 # https://github.com/NotAShelf/nvf/blob/main/configuration.nix
...@@ -18,6 +19,10 @@...@@ -18,6 +19,10 @@
18 # override level 999 is used to not conflict with mkDefault as used by nvf.19 # override level 999 is used to not conflict with mkDefault as used by nvf.
19 # which allows user configurations to disable/override anything here.20 # which allows user configurations to disable/override anything here.
20 config.vim = lib.mkOverride 999 {21 config.vim = lib.mkOverride 999 {
22 extraLuaFiles = [
23 ./lib.lua
24 ];
25
21 theme = {26 theme = {
22 enable = true;27 enable = true;
23 };28 };
...@@ -60,8 +65,8 @@...@@ -60,8 +65,8 @@
60 listReferences = "gr";65 listReferences = "gr";
61 goToType = "gy";66 goToType = "gy";
62 hover = "K";67 hover = "K";
63 nextDiagnostic = "<leader>d";68 nextDiagnostic = null; # ]d
64 openDiagnosticFloat = "<leader>df";69 openDiagnosticFloat = "<leader>d";
65 renameSymbol = "rn";70 renameSymbol = "rn";
66 documentHighlight = null;71 documentHighlight = null;
67 listDocumentSymbols = null;72 listDocumentSymbols = null;
...@@ -78,11 +83,9 @@...@@ -78,11 +83,9 @@
78 enable = true;83 enable = true;
79 addDefaultGrammars = true;84 addDefaultGrammars = true;
80 };85 };
81 debugger = {86 debugger.nvim-dap = {
82 nvim-dap = {87 enable = true;
83 enable = true;88 ui.enable = true;
84 ui.enable = true;
85 };
86 };89 };
87 languages = {90 languages = {
88 enableFormat = true;91 enableFormat = true;
...@@ -96,36 +99,58 @@...@@ -96,36 +99,58 @@
96 clang.enable = true;99 clang.enable = true;
97 css.enable = true;100 css.enable = true;
98 html.enable = true;101 html.enable = true;
102 lua.enable = true;
99 markdown.enable = true;103 markdown.enable = true;
104 nix.enable = true;
100 python.enable = true;105 python.enable = true;
101 rust.crates.enable = true;106 rust.crates.enable = true;
102 rust.enable = true;107 rust.enable = true;
103 ts.enable = true;108 ts.enable = true;
104 zig.enable = true;109 zig.enable = true;
105 lua.enable = true;
106 # sort-lines: off110 # sort-lines: off
107
108 nix = {
109 enable = true;
110 format.type = "nixfmt"; # looks so much nicer
111 };
112 };111 };
113 filetree = {112 filetree.neo-tree = {
114 neo-tree = {113 enable = true;
115 enable = false;114 setupOpts = {
115 enable_cursor_hijack = true;
116 git_status_async = true;
116 };117 };
117 };118 };
118 tabline = {119 fzf-lua = {
119 nvimBufferline.enable = true;120 enable = true;
121 setupOpts = {
122 fzf_colors = true;
123 };
120 };124 };
121 autocomplete = {125 autocomplete.blink-cmp = {
122 blink-cmp = {126 enable = true;
123 enable = true;127 mappings = {
124 sourcePlugins = {128 close = null;
125 ripgrep.enable = true;129 complete = null;
130 confirm = null;
131 next = null;
132 previous = null;
133 scrollDocsDown = null;
134 scrollDocsUp = null;
135 };
136 setupOpts = {
137 keymap = {
138 preset = "super-tab";
126 };139 };
127 friendly-snippets.enable = true;140 completion = {
141 ghost_text.enabled = false;
142 list.selection.preselect = true;
143 trigger = {
144 show_in_snippet = true;
145 };
146 accept.auto_brackets.enabled = true;
147 };
148 signature.enabled = true;
128 };149 };
150 sourcePlugins = {
151 ripgrep.enable = true;
152 };
153 friendly-snippets.enable = true;
129 };154 };
130 statusline = {155 statusline = {
131 lualine = {156 lualine = {
...@@ -137,71 +162,6 @@...@@ -137,71 +162,6 @@
137 };162 };
138 };163 };
139 };164 };
140
141 utility = {
142 snacks-nvim = {
143 enable = true;
144 setupOpts = {
145 bigfile.enable = true;
146 dashboard = {
147 preset.keys = [
148 {
149 icon = " ";
150 key = "n";
151 desc = "New File";
152 action = ":ene | startinsert";
153 }
154 {
155 icon = " ";
156 key = "r";
157 desc = "Recent Files";
158 action = ":lua Snacks.dashboard.pick('oldfiles')";
159 }
160 ];
161 sections = [
162 { section = "header"; }
163 {
164 section = "keys";
165 indent = 2;
166 padding = 1;
167 }
168 {
169 icon = " ";
170 title = "Projects";
171 section = "projects";
172 indent = 2;
173 padding = 1;
174 }
175 {
176 icon = " ";
177 title = "Git";
178 section = "terminal";
179 enabled = lib.options.literalExpression ''
180 function()
181 return Snacks.git.get_root() ~= nil
182 end
183 '';
184 cmd = "git status --short --branch --renames";
185 height = 10;
186 padding = 1;
187 ttl = 5 * 60;
188 indent = 3;
189 }
190 ];
191 };
192 image = {
193 enable = true;
194 math.enabled = false;
195 };
196 notifier.timeout = 3000;
197 picker = {
198 enable = true;
199 sources = {
200 };
201 };
202 };
203 };
204 };
205 binds = {165 binds = {
206 whichKey.enable = true;166 whichKey.enable = true;
207 cheatsheet.enable = true;167 cheatsheet.enable = true;
modules/neovim/keybind.nix created+83
...@@ -0,0 +1,83 @@
1# this file implements a keybind system, which is a higher level system
2# to configure vim.keymaps (note the different name bind vs map)
3{
4 pkgs,
5 lib,
6 config,
7 ...
8}:
9let
10 keyRemap = mode: key: action: { inherit mode key action; };
11 keyCmd =
12 mode: key: cmd:
13 keyRemap mode key ":${cmd}<Return>";
14in
15{
16 # default binds
17 config.vim.keybinds = {
18 search-commands = keyCmd "n" "<leader>?" "FzfLua keymaps";
19
20 # user interface
21 toggle-explorer = keyCmd "n" "<leader>e" "Neotree toggle";
22 reveal-active-file = keyCmd "n" "<leader>E" "Neotree reveal<CR>:Neotree focus";
23 lazygit = keyCmd "n" "<leader>gg" "FullscreenTerm ${pkgs.lazygit}/bin/lazygit";
24
25 # pickers
26 pick-file = keyCmd "n" "<leader><leader>" "FzfLua files";
27 pick-mark = keyCmd "n" "<leader>'" "FzfLua marks";
28 #pick-buffer = keyCmd "n" "<leader>b" "FzfLua buffers";
29 pick-grep = keyCmd "n" "<leader>ff" "FzfLua grep_project";
30 pick-recent-command = keyCmd "n" "<leader>fc" "FzfLua command_history";
31 pick-other = keyCmd "n" "<leader>f?" "FzfLua builtin"; # picker of Fzf pickers
32
33 # lsp
34 code-action =
35 keyCmd "n" "<leader>ca"
36 "FzfLua lsp_code_actions winopts.height=15 winopts.backdrop=100 winopts.title=false winopts.preview.title=false winopts.row=1";
37
38 # subtle nice features
39 visual-dedent = keyRemap "v" "<" "<gv"; # keep selection
40 visual-indent = keyRemap "v" ">" ">gv"; # keep selection
41 clear-search-highlights = keyRemap "n" "<esc" ":noh<Return><esc>";
42 };
43
44 # implementation
45 options.vim.keybinds = lib.mkOption {
46 type = lib.types.attrsOf (
47 lib.types.nullOr (
48 lib.types.submodule {
49 options = {
50 mode = lib.mkOption { type = lib.types.str; };
51 key = lib.mkOption { type = lib.types.str; };
52 action = lib.mkOption { type = lib.types.str; };
53 };
54 }
55 )
56 );
57 default = { };
58 };
59 config.vim.keymaps =
60 let
61 titleCase =
62 str:
63 lib.concatStringsSep " " (
64 map (
65 word:
66 lib.strings.toUpper (builtins.substring 0 1 word)
67 + builtins.substring 1 (builtins.stringLength word) word
68 ) (lib.splitString "-" str)
69 );
70 in
71 builtins.filter (f: f != null) (
72 lib.attrsets.mapAttrsToList (
73 desc: bind:
74 if bind != null then
75 {
76 desc = titleCase desc;
77 inherit (bind) mode key action;
78 }
79 else
80 null
81 ) config.vim.keybinds
82 );
83}
modules/neovim/lib.lua created+27
...@@ -0,0 +1,27 @@
1-- Ported from https://www.reddit.com/r/neovim/comments/vemydn
2vim.api.nvim_create_user_command("FullscreenTerm", function(opts)
3 vim.cmd("tab terminal " .. opts.args)
4 local laststatus = vim.o.laststatus
5 local showtabline = vim.o.showtabline
6 local cmdheight = vim.o.cmdheight
7 vim.o.laststatus = 0
8 vim.o.cmdheight = 0
9 vim.o.showtabline = 0
10 vim.wo.signcolumn = "no"
11 vim.wo.relativenumber = false
12 vim.wo.number = false
13 vim.cmd(
14 "autocmd! TermClose <buffer=abuf> "
15 .. "if !v:event.status"
16 .. " | exec 'bd! '..expand('<abuf>')"
17 .. " | endif"
18 .. " | checktime"
19 .. " | set laststatus="
20 .. laststatus
21 .. " | set cmdheight="
22 .. cmdheight
23 .. " | set showtabline="
24 .. showtabline
25 )
26 vim.cmd("startinsert")
27end, { nargs = "*" })
nvim+2-2
...@@ -1,11 +1,11 @@...@@ -1,11 +1,11 @@
1#!/bin/sh1#!/bin/sh
2username="$(id -u -n)"2username="$(id -u -n)"
3if [ "$username" = "clo" ]; then3if [ "$username" = "clo" ]; then
4 name="chloe"4 name="clover"
5elif [ "$username" = "nmarks" ]; then5elif [ "$username" = "nmarks" ]; then
6 name="natalie"6 name="natalie"
7elif [ "$username" = "fish" ]; then7elif [ "$username" = "fish" ]; then
8 name="julia"8 name="fish"
9fi9fi
10if [ -z "$name" ]; then10if [ -z "$name" ]; then
11 echo "Configure this wrapper script with your name." >&211 echo "Configure this wrapper script with your name." >&2
readme.md+3-3
...@@ -1,7 +1,7 @@...@@ -1,7 +1,7 @@
1# nix config1# nix config
22
3this setup allows natalie and chloe to share common configuration between their3this setup allows natalie, clover, and more to share common configuration
4machines, but also share useful modules between each other.4between their machines, but also share useful modules between each other.
55
6```6```
7lib/ # reusable functions7lib/ # reusable functions
...@@ -12,7 +12,7 @@ modules/ # reusable modules...@@ -12,7 +12,7 @@ modules/ # reusable modules
12 +-- nixos/ # linux configurations12 +-- nixos/ # linux configurations
13 +-- shared/ # shared between nixos-rebuild & darwin-rebuild13 +-- shared/ # shared between nixos-rebuild & darwin-rebuild
14users/14users/
15 +-- chloe/15 +-- clover/
16 | +-- user.nix # info about her16 | +-- user.nix # info about her
17 | +-- configuration.nix # for all hosts (system)17 | +-- configuration.nix # for all hosts (system)
18 | +-- home.nix # for all hosts (userspace)18 | +-- home.nix # for all hosts (userspace)
users/chloe/configuration.nix deleted-44
...@@ -1,44 +0,0 @@
1# Configuration applied to all of chloe's machines
2{ pkgs, ... }:
3{
4 # packages for all machines
5 environment.systemPackages = with pkgs; [
6 git
7 ];
8
9 services.tailscale.enable = true;
10
11 # configuration for shared modules.
12 # all custom options in 'shared' for clarity.
13 shared.darwin = {
14 macAppStoreApps = [
15 "adguard"
16 "magnet"
17 ];
18 };
19
20 # system preferences
21 system.defaults = {
22 NSGlobalDomain = {
23 KeyRepeat = 1;
24 InitialKeyRepeat = 10;
25 };
26 dock = {
27 show-recents = false;
28 };
29 CustomUserPreferences = {
30 NSGlobalDomain = {
31 # TODO: how to change system accent color
32 AppleHighlightColor = "1.000000 0.874510 0.701961 Orange";
33
34 # control how the fn keys operate
35 # 0 = default to media keys, 1 = default to FN1-12
36 "com.apple.keyboard.fnState" = 1;
37
38 NSUserKeyEquivalents = {
39 Minimize = "@~^\\Uf70f"; # set minimize to a stupidly hard key to press
40 };
41 };
42 };
43 };
44}
users/chloe/home.nix deleted-104
...@@ -1,104 +0,0 @@
1{ pkgs, host, ... }:
2let
3 hostServer = false;
4in
5{
6 home = {
7 stateVersion = "23.05"; # Please read the comment before changing.
8 packages =
9 with pkgs;
10 let
11 # packages to always install
12 all = [
13 (ffmpeg.override {
14 withSvtav1 = true;
15 })
16 ripgrep
17 uv
18 nh
19 pkgs.autofmt
20 ];
21 # packages to install for desktop environments (non-server)
22 desktop = [
23 git-town
24 ];
25 # packages to install on all servers
26 server = [ ];
27 # packages to install on macOS desktops
28 darwin = [
29 raycast
30 ];
31 # packages to install on linux desktops
32 linux = [
33 reaper # TODO: why does this break on macOS
34 ];
35 in
36 all ++ (if host.darwin then darwin else linux) ++ (if hostServer then server else desktop);
37 };
38 programs = {
39 # sort-lines:start
40 # bat.enable = true;
41 btop.enable = true;
42 fd.enable = true;
43 hyfetch.enable = true;
44 # sort-lines:end
45
46 ghostty = {
47 enable = true;
48 shader = "cursor-smear-black.glsl";
49 package = null;
50 settings = {
51 theme = "light:catppuccin-latte,dark:catppuccin-macchiato";
52 font-family = "AT Name Mono";
53 adjust-cursor-thickness = 1;
54 minimum-contrast = 1.1;
55 background-opacity = 0.9;
56 background-blur = true;
57 };
58 };
59
60 # zsh is the shell i use
61 zsh = {
62 enable = true;
63 enableCompletion = true;
64 autosuggestion.enable = true;
65 syntaxHighlighting.enable = true;
66
67 history.size = 10000;
68
69 shellAliases = {
70 switch = "nh darwin switch ~/config";
71 };
72 profileExtra = ''
73 function python() {
74 dirname=$(dirname $1 2>/dev/null)
75 if [ -z "$dirname" ]; then
76 dirname=$(pwd)
77 fi
78 uv run --project "$dirname" "$@"
79 }
80 '';
81 };
82
83 # use a git-specific email
84 git.userEmail = "git@paperclover.net";
85
86 ssh = {
87 enable = true;
88 matchBlocks = rec {
89 zenith = {
90 user = "clo";
91 port = 222;
92 };
93 "nas.paperclover.net" = zenith;
94 };
95 };
96 neovide = {
97 enable = !hostServer;
98 settings = {
99 font.normal = "AT Name Mono";
100 font.size = 13;
101 };
102 };
103 };
104}
users/chloe/paperback/configuration.nix deleted-6
...@@ -1,6 +0,0 @@
1_: {
2 homebrew = {
3 enable = true;
4 casks = [ "eloston-chromium" ];
5 };
6}
users/chloe/paperback/home.nix deleted-28
...@@ -1,28 +0,0 @@
1{ pkgs, ... }:
2{
3 # these programs are not globally installed to reduce distractions.
4 # most of these are needed for my work environment.
5 programs = {
6 bun.enable = true;
7 zed-editor.enable = true;
8 zsh.profileExtra = ''
9 _bun() {
10 local context state line
11 _arguments -C '*:file:_files'
12 }
13 '';
14 };
15 home.packages = with pkgs; [
16 doppler
17 nodejs_22
18 rustup
19 typescript
20 pm2
21 pnpm
22 yt-dlp
23 spotdl
24 zig
25 ssm-session-manager-plugin
26 awscli
27 ];
28}
users/chloe/sandwich/configuration.nix deleted-10
...@@ -1,10 +0,0 @@
1{ pkgs, ... }:
2{
3 shared.darwin = {
4 macAppStoreApps = [
5 "final-cut-pro"
6 "logic-pro"
7 "motion"
8 ];
9 };
10}
users/chloe/user.nix deleted-18
...@@ -1,18 +0,0 @@
1# This definition is used by modules to customize as needed.
2{
3 username = "clo"; # username
4 name = "chloe caruso";
5 email = "account@paperclover.net";
6 timeZone = "America/Los_Angeles";
7
8 dotfilesDir = "~/config"; # absolute path of the local repo
9
10 # Stylix/Theming
11 theme = null;
12 #font
13 sexuality = "lesbian"; # hyfetch
14
15 # Default terminal command. NOTE: ghostty is not installed for you
16 term = "ghostty"; # preferred $TERMINAL
17 editor = "nvim"; # preferred $EDITOR
18}
users/chloe/vim.nix deleted-65
...@@ -1,65 +0,0 @@
1_: {
2 vim = {
3 options = {
4 linebreak = true;
5 };
6 git = {
7 gitsigns.setupOpts = {
8 current_line_blame = true;
9 current_line_blame_opts = {
10 virt_text = true;
11 virt_text_pos = "right_align";
12 delay = 25;
13 ignore_whitespace = true;
14 virt_text_priority = 100;
15 use_focus = true;
16 };
17 };
18 };
19 autocomplete.blink-cmp = {
20 enable = true;
21 mappings = {
22 close = null;
23 complete = null;
24 confirm = null;
25 next = null;
26 previous = null;
27 scrollDocsDown = null;
28 scrollDocsUp = null;
29 };
30
31 setupOpts = {
32 keymap = {
33 preset = "super-tab";
34 };
35 completion = {
36 ghost_text.enabled = false;
37 list.selection.preselect = true;
38 trigger = {
39 show_in_snippet = true;
40 };
41 accept.auto_brackets.enabled = true;
42 };
43 signature = {
44 enabled = true;
45 };
46 };
47 };
48
49 keymaps =
50 let
51 mkKeymap = mode: key: action: desc: {
52 inherit mode;
53 inherit key action desc;
54 };
55 n = mkKeymap "n"; # normal mode
56 in
57 [
58 # UI
59 (n "<leader>e" ":lua require('snacks').explorer()<CR>" "File Explorer")
60 # Find Files
61 (n "<leader><space>" ":lua require('snacks').picker.smart()<CR>" "Smart Find Files")
62 (n "<leader>f" ":lua require('snacks').picker.grep()<CR>" "Grep Files")
63 ];
64 };
65}
users/clover/configuration.nix created+44
...@@ -0,0 +1,44 @@
1# Configuration applied to all of clover's machines
2{ pkgs, ... }:
3{
4 # packages for all machines
5 environment.systemPackages = with pkgs; [
6 git
7 ];
8
9 services.tailscale.enable = true;
10
11 # configuration for shared modules.
12 # all custom options in 'shared' for clarity.
13 shared.darwin = {
14 macAppStoreApps = [
15 "adguard"
16 "magnet"
17 ];
18 };
19
20 # system preferences
21 system.defaults = {
22 NSGlobalDomain = {
23 KeyRepeat = 1;
24 InitialKeyRepeat = 10;
25 };
26 dock = {
27 show-recents = false;
28 };
29 CustomUserPreferences = {
30 NSGlobalDomain = {
31 # TODO: how to change system accent color
32 AppleHighlightColor = "1.000000 0.874510 0.701961 Orange";
33
34 # control how the fn keys operate
35 # 0 = default to media keys, 1 = default to FN1-12
36 "com.apple.keyboard.fnState" = 1;
37
38 NSUserKeyEquivalents = {
39 Minimize = "@~^\\Uf70f"; # set minimize to a stupidly hard key to press
40 };
41 };
42 };
43 };
44}
users/clover/home.nix created+105
...@@ -0,0 +1,105 @@
1{ pkgs, host, ... }:
2let
3 hostServer = false;
4in
5{
6 home = {
7 stateVersion = "23.05"; # Please read the comment before changing.
8 packages =
9 with pkgs;
10 let
11 # packages to always install
12 all = [
13 (ffmpeg.override {
14 withSvtav1 = true;
15 })
16 ripgrep
17 uv
18 nh
19 pkgs.autofmt
20 ];
21 # packages to install for desktop environments (non-server)
22 desktop = [
23 git-town
24 lazygit
25 ];
26 # packages to install on all servers
27 server = [ ];
28 # packages to install on macOS desktops
29 darwin = [
30 raycast
31 ];
32 # packages to install on linux desktops
33 linux = [
34 reaper # TODO: why does this break on macOS
35 ];
36 in
37 all ++ (if host.darwin then darwin else linux) ++ (if hostServer then server else desktop);
38 };
39 programs = {
40 # sort-lines:start
41 # bat.enable = true;
42 btop.enable = true;
43 fd.enable = true;
44 hyfetch.enable = true;
45 # sort-lines:end
46
47 ghostty = {
48 enable = true;
49 shader = "cursor-smear-black.glsl";
50 package = null;
51 settings = {
52 theme = "light:catppuccin-latte,dark:catppuccin-macchiato";
53 font-family = "AT Name Mono";
54 adjust-cursor-thickness = 1;
55 minimum-contrast = 1.1;
56 background-opacity = 0.9;
57 background-blur = true;
58 };
59 };
60
61 # zsh is the shell i use
62 zsh = {
63 enable = true;
64 enableCompletion = true;
65 autosuggestion.enable = true;
66 syntaxHighlighting.enable = true;
67
68 history.size = 10000;
69
70 shellAliases = {
71 switch = "nh darwin switch ~/config";
72 };
73 profileExtra = ''
74 function python() {
75 dirname=$(dirname $1 2>/dev/null)
76 if [ -z "$dirname" ]; then
77 dirname=$(pwd)
78 fi
79 uv run --project "$dirname" "$@"
80 }
81 '';
82 };
83
84 # use a git-specific email
85 git.userEmail = "git@paperclover.net";
86
87 ssh = {
88 enable = true;
89 matchBlocks = rec {
90 zenith = {
91 user = "clo";
92 port = 222;
93 };
94 "nas.paperclover.net" = zenith;
95 };
96 };
97 neovide = {
98 enable = !hostServer;
99 settings = {
100 font.normal = "AT Name Mono";
101 font.size = 13;
102 };
103 };
104 };
105}
users/clover/paperback/configuration.nix created+9
...@@ -0,0 +1,9 @@
1_: {
2 homebrew = {
3 enable = true;
4 casks = [
5 "eloston-chromium"
6 "db-browser-for-sqlite"
7 ];
8 };
9}
users/clover/paperback/home.nix created+28
...@@ -0,0 +1,28 @@
1{ pkgs, ... }:
2{
3 # these programs are not globally installed to reduce distractions.
4 # most of these are needed for my work environment.
5 programs = {
6 bun.enable = true;
7 zsh.profileExtra = ''
8 _bun() {
9 local context state line
10 _arguments -C '*:file:_files'
11 }
12 '';
13 };
14 home.packages = with pkgs; [
15 doppler
16 deno
17 nodejs_22
18 rustup
19 typescript
20 pm2
21 pnpm
22 yt-dlp
23 spotdl
24 zig
25 ssm-session-manager-plugin
26 awscli
27 ];
28}
users/clover/sandwich/configuration.nix created+10
...@@ -0,0 +1,10 @@
1{ pkgs, ... }:
2{
3 shared.darwin = {
4 macAppStoreApps = [
5 "final-cut-pro"
6 "logic-pro"
7 "motion"
8 ];
9 };
10}
users/clover/user.nix created+11
...@@ -0,0 +1,11 @@
1# This definition is used by modules to customize as needed.
2{
3 username = "clo"; # username
4 name = "clover caruso";
5 email = "account@paperclover.net";
6 timeZone = "America/Los_Angeles";
7 dotfilesDir = "~/config"; # absolute path of the local repo
8 sexuality = "lesbian"; # hyfetch
9 term = "ghostty"; # preferred $TERMINAL
10 editor = "nvim"; # preferred $EDITOR
11}
users/clover/vim.nix created+20
...@@ -0,0 +1,20 @@
1_: {
2 vim = {
3 options = {
4 linebreak = true;
5 };
6 git = {
7 gitsigns.setupOpts = {
8 current_line_blame = false;
9 current_line_blame_opts = {
10 virt_text = true;
11 virt_text_pos = "right_align";
12 delay = 25;
13 ignore_whitespace = true;
14 virt_text_priority = 100;
15 use_focus = true;
16 };
17 };
18 };
19 };
20}
users/fish/cattop/configuration.nix created+130
...@@ -0,0 +1,130 @@
1# Edit this configuration file to define what should be installed on
2# your system. Help is available in the configuration.nix(5) man page, on
3# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
4
5{
6 config,
7 lib,
8 pkgs,
9 ...
10}:
11
12{
13 imports = [
14 # Include the results of the hardware scan.
15 ./hardware-configuration.nix
16 ];
17
18 # Use the systemd-boot EFI boot loader.
19 boot.loader.efi.canTouchEfiVariables = true;
20
21 # networking.hostName = "nixos"; # Define your hostname.
22 # Pick only one of the below networking options.
23 # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
24 # networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
25
26 # Set your time zone.
27 # time.timeZone = "Europe/Amsterdam";
28
29 # Configure network proxy if necessary
30 # networking.proxy.default = "http://user:password@proxy:port/";
31 # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
32
33 # Select internationalisation properties.
34 # i18n.defaultLocale = "en_US.UTF-8";
35 # console = {
36 # font = "Lat2-Terminus16";
37 # keyMap = "us";
38 # useXkbConfig = true; # use xkb.options in tty.
39 # };
40
41 # Enable the X11 windowing system.
42 services.xserver.enable = true;
43
44 # Enable the GNOME Desktop Environment.
45 services.xserver.displayManager.gdm.enable = true;
46 services.xserver.desktopManager.gnome.enable = true;
47
48 # Configure keymap in X11
49 # services.xserver.xkb.layout = "us";
50 # services.xserver.xkb.options = "eurosign:e,caps:escape";
51
52 # Enable CUPS to print documents.
53 # services.printing.enable = true;
54
55 # Enable sound.
56 # services.pulseaudio.enable = true;
57 # OR
58 # services.pipewire = {
59 # enable = true;
60 # pulse.enable = true;
61 # };
62
63 # Enable touchpad support (enabled default in most desktopManager).
64 # services.libinput.enable = true;
65
66 # Define a user account. Don't forget to set a password with ‘passwd’.
67 users.users.fish = {
68 isNormalUser = true;
69 extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
70 packages = with pkgs; [
71 tree
72 git
73 nh
74 vim
75 fish
76 ];
77 };
78
79 programs.firefox.enable = true;
80
81 # List packages installed in system profile.
82 # You can use https://search.nixos.org/ to find more packages (and options).
83 environment.systemPackages = with pkgs; [
84 vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
85 wget
86 ];
87
88 # Some programs need SUID wrappers, can be configured further or are
89 # started in user sessions.
90 programs.mtr.enable = true;
91 programs.gnupg.agent = {
92 enable = true;
93 enableSSHSupport = true;
94 };
95
96 # List services that you want to enable:
97
98 # Enable the OpenSSH daemon.
99 # services.openssh.enable = true;
100
101 # Open ports in the firewall.
102 # networking.firewall.allowedTCPPorts = [ ... ];
103 # networking.firewall.allowedUDPPorts = [ ... ];
104 # Or disable the firewall altogether.
105 # networking.firewall.enable = false;
106
107 # Copy the NixOS configuration file and link it from the resulting system
108 # (/run/current-system/configuration.nix). This is useful in case you
109 # accidentally delete configuration.nix.
110 # system.copySystemConfiguration = true;
111
112 # This option defines the first version of NixOS you have installed on this particular machine,
113 # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
114 #
115 # Most users should NEVER change this value after the initial install, for any reason,
116 # even if you've upgraded your system to a new NixOS release.
117 #
118 # This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
119 # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
120 # to actually do that.
121 #
122 # This value being lower than the current NixOS release does NOT mean your system is
123 # out of date, out of support, or vulnerable.
124 #
125 # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
126 # and migrated your data accordingly.
127 #
128 # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
129 system.stateVersion = "25.05"; # Did you read the comment?
130}
users/fish/cattop/hardware-configuration.nix created+54
...@@ -0,0 +1,54 @@
1# Do not modify this file! It was generated by ‘nixos-generate-config’
2# and may be overwritten by future invocations. Please make changes
3# to /etc/nixos/configuration.nix instead.
4{
5 config,
6 lib,
7 pkgs,
8 modulesPath,
9 ...
10}:
11
12{
13 imports = [
14 (modulesPath + "/installer/scan/not-detected.nix")
15 ];
16
17 boot.initrd.availableKernelModules = [
18 "xhci_pci"
19 "thunderbolt"
20 "vmd"
21 "nvme"
22 ];
23 boot.initrd.kernelModules = [ ];
24 boot.kernelModules = [ "kvm-intel" ];
25 boot.extraModulePackages = [ ];
26
27 fileSystems."/" = {
28 device = "/dev/disk/by-uuid/8eb0d6a2-b8cf-4ef2-ba2a-e25a5555b0bc";
29 fsType = "ext4";
30 };
31
32 fileSystems."/boot/efi" = {
33 device = "/dev/disk/by-uuid/3B51-4A1C";
34 fsType = "vfat";
35 options = [
36 "fmask=0077"
37 "dmask=0077"
38 ];
39 };
40
41 swapDevices = [
42 { device = "/dev/disk/by-uuid/58ee9d19-292f-49b5-9979-341b42e8e09d"; }
43 ];
44
45 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
46 # (the default) this is the recommended approach. When using systemd-networkd it's
47 # still possible to use this option, but it's recommended to use it in conjunction
48 # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
49 networking.useDHCP = lib.mkDefault true;
50 # networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
51
52 nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
53 hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
54}
users/fish/cattop/home.nix created+77
...@@ -0,0 +1,77 @@
1{
2 inputs,
3 config,
4 pkgs,
5 lib,
6 userSettings,
7 systemSettings,
8 ...
9}:
10
11{
12 home = {
13 stateVersion = "23.05"; # Don't change this unless upgrading Home Manager versions
14
15 packages = with pkgs; [
16 # General applications
17 ghostty
18 stremio
19 julia
20 qbittorrent
21 calibre
22 mpv
23 signal-desktop
24 python3
25 gh
26
27 # Gaming
28 bottles
29 lutris
30 mangohud
31 dxvk_2
32 steam-run
33 vulkan-tools
34 path-of-building
35 wineWowPackages.stable
36 winetricks
37 (prismlauncher.override { gamemodeSupport = true; })
38
39 # System & desktop tools
40 wofi
41 xorg.xauth
42 kdePackages.dolphin
43 xdg-desktop-portal-gtk
44 xclip
45 pavucontrol
46 ethtool
47 grub2
48 efibootmgr
49 distrobox
50
51 # Dev tools
52 legcord
53 hyfetch
54 arduino-cli
55 rust-bin.stable.latest.default
56 tytools
57 inputs.zls.packages.x86_64-linux.zls
58 platformio
59 usbutils
60 teensy-loader-cli
61 teensyduino
62 ];
63 };
64
65 programs = {
66 btop.enable = true;
67 hyfetch.enable = true;
68
69 gh = {
70 enable = true;
71 gitCredentialHelper.enable = true;
72 };
73
74 # Uncomment if you want to use MangoHud system-wide
75 # mangohud.enable = true;
76 };
77}
users/fish/cattop/home.nix.old created+72
...@@ -0,0 +1,72 @@
1{
2 inputs,
3 config,
4 pkgs,
5 lib,
6 userSettings,
7 systemSettings,
8 ...
9}:
10{
11 home = {
12 stateVersion = "23.05"; # Please read the comment before changing.
13
14 packages = with pkgs; [
15 #building macos apps hard :(
16 ghostty
17 stremio
18 julia
19 qbittorrent
20
21 #gaming
22 bottles
23 lutris
24 mangohud
25 dxvk_2
26 steam-run
27 vulkan-tools
28 path-of-building
29 wineWowPackages.stable
30 winetricks
31 (prismlauncher.override { gamemodeSupport = true; })
32
33 #window manager stuff
34 wofi
35 xorg.xauth
36 #linux tools
37 legcord
38 pavucontrol
39 ethtool
40 grub2
41 efibootmgr
42 distrobox
43 xdg-desktop-portal-gtk
44 xclip
45 kdePackages.dolphin
46 hyfetch
47 arduino-cli
48 python3
49 gh
50 #broken on macos
51 calibre
52 mpv
53 wireguard-tools
54 signal-desktop
55 inputs.zls.packages.x86_64-linux.zls
56 rust-bin.stable.latest.default
57 ];
58
59 # programs.mangohud.enable = true;
60 programs = {
61 btop.enable = true;
62 hyfetch.enable = true;
63 programs.gh = {
64 enable = true;
65 gitCredentialHelper = {
66 enable = true;
67 };
68 };
69 };
70
71 };
72}
users/fish/configuration.nix created+9
...@@ -0,0 +1,9 @@
1# Applied to all systems
2{
3 inputs,
4 pkgs,
5 host,
6 ...
7}:
8{
9}
users/fish/user.nix created+13
...@@ -0,0 +1,13 @@
1rec {
2 username = "fish"; # username
3 name = "Fish"; # name/identifier
4 email = "fish@fishcat.fish"; # email (used for certain configurations)
5 dotfilesDir = "~/config"; # absolute path of the local repo
6 theme = "catppuccin-mocha"; # name of theme that stylix will use
7 browser = "firefox"; # Default browser; must select one from ./user/app/browser/
8 term = "ghostty"; # Default terminal command;
9 font = "iosevka"; # Selected font
10 editor = "neovim"; # Default editor;
11 timeZone = "America/Los_Angeles";
12 sexuality = "transgender";
13}
users/fish/vim.nix created+3
...@@ -0,0 +1,3 @@
1{ ... }:
2{
3}
users/julia/cattop/configuration.nix deleted-130
...@@ -1,130 +0,0 @@
1# Edit this configuration file to define what should be installed on
2# your system. Help is available in the configuration.nix(5) man page, on
3# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
4
5{
6 config,
7 lib,
8 pkgs,
9 ...
10}:
11
12{
13 imports = [
14 # Include the results of the hardware scan.
15 ./hardware-configuration.nix
16 ];
17
18 # Use the systemd-boot EFI boot loader.
19 boot.loader.efi.canTouchEfiVariables = true;
20
21 # networking.hostName = "nixos"; # Define your hostname.
22 # Pick only one of the below networking options.
23 # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
24 # networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
25
26 # Set your time zone.
27 # time.timeZone = "Europe/Amsterdam";
28
29 # Configure network proxy if necessary
30 # networking.proxy.default = "http://user:password@proxy:port/";
31 # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
32
33 # Select internationalisation properties.
34 # i18n.defaultLocale = "en_US.UTF-8";
35 # console = {
36 # font = "Lat2-Terminus16";
37 # keyMap = "us";
38 # useXkbConfig = true; # use xkb.options in tty.
39 # };
40
41 # Enable the X11 windowing system.
42 services.xserver.enable = true;
43
44 # Enable the GNOME Desktop Environment.
45 services.xserver.displayManager.gdm.enable = true;
46 services.xserver.desktopManager.gnome.enable = true;
47
48 # Configure keymap in X11
49 # services.xserver.xkb.layout = "us";
50 # services.xserver.xkb.options = "eurosign:e,caps:escape";
51
52 # Enable CUPS to print documents.
53 # services.printing.enable = true;
54
55 # Enable sound.
56 # services.pulseaudio.enable = true;
57 # OR
58 # services.pipewire = {
59 # enable = true;
60 # pulse.enable = true;
61 # };
62
63 # Enable touchpad support (enabled default in most desktopManager).
64 # services.libinput.enable = true;
65
66 # Define a user account. Don't forget to set a password with ‘passwd’.
67 users.users.fish = {
68 isNormalUser = true;
69 extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
70 packages = with pkgs; [
71 tree
72 git
73 nh
74 vim
75 fish
76 ];
77 };
78
79 programs.firefox.enable = true;
80
81 # List packages installed in system profile.
82 # You can use https://search.nixos.org/ to find more packages (and options).
83 environment.systemPackages = with pkgs; [
84 vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
85 wget
86 ];
87
88 # Some programs need SUID wrappers, can be configured further or are
89 # started in user sessions.
90 programs.mtr.enable = true;
91 programs.gnupg.agent = {
92 enable = true;
93 enableSSHSupport = true;
94 };
95
96 # List services that you want to enable:
97
98 # Enable the OpenSSH daemon.
99 # services.openssh.enable = true;
100
101 # Open ports in the firewall.
102 # networking.firewall.allowedTCPPorts = [ ... ];
103 # networking.firewall.allowedUDPPorts = [ ... ];
104 # Or disable the firewall altogether.
105 # networking.firewall.enable = false;
106
107 # Copy the NixOS configuration file and link it from the resulting system
108 # (/run/current-system/configuration.nix). This is useful in case you
109 # accidentally delete configuration.nix.
110 # system.copySystemConfiguration = true;
111
112 # This option defines the first version of NixOS you have installed on this particular machine,
113 # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
114 #
115 # Most users should NEVER change this value after the initial install, for any reason,
116 # even if you've upgraded your system to a new NixOS release.
117 #
118 # This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
119 # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
120 # to actually do that.
121 #
122 # This value being lower than the current NixOS release does NOT mean your system is
123 # out of date, out of support, or vulnerable.
124 #
125 # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
126 # and migrated your data accordingly.
127 #
128 # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
129 system.stateVersion = "25.05"; # Did you read the comment?
130}
users/julia/cattop/hardware-configuration.nix deleted-54
...@@ -1,54 +0,0 @@
1# Do not modify this file! It was generated by ‘nixos-generate-config’
2# and may be overwritten by future invocations. Please make changes
3# to /etc/nixos/configuration.nix instead.
4{
5 config,
6 lib,
7 pkgs,
8 modulesPath,
9 ...
10}:
11
12{
13 imports = [
14 (modulesPath + "/installer/scan/not-detected.nix")
15 ];
16
17 boot.initrd.availableKernelModules = [
18 "xhci_pci"
19 "thunderbolt"
20 "vmd"
21 "nvme"
22 ];
23 boot.initrd.kernelModules = [ ];
24 boot.kernelModules = [ "kvm-intel" ];
25 boot.extraModulePackages = [ ];
26
27 fileSystems."/" = {
28 device = "/dev/disk/by-uuid/8eb0d6a2-b8cf-4ef2-ba2a-e25a5555b0bc";
29 fsType = "ext4";
30 };
31
32 fileSystems."/boot/efi" = {
33 device = "/dev/disk/by-uuid/3B51-4A1C";
34 fsType = "vfat";
35 options = [
36 "fmask=0077"
37 "dmask=0077"
38 ];
39 };
40
41 swapDevices = [
42 { device = "/dev/disk/by-uuid/58ee9d19-292f-49b5-9979-341b42e8e09d"; }
43 ];
44
45 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
46 # (the default) this is the recommended approach. When using systemd-networkd it's
47 # still possible to use this option, but it's recommended to use it in conjunction
48 # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
49 networking.useDHCP = lib.mkDefault true;
50 # networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
51
52 nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
53 hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
54}
users/julia/cattop/home.nix deleted-77
...@@ -1,77 +0,0 @@
1{
2 inputs,
3 config,
4 pkgs,
5 lib,
6 userSettings,
7 systemSettings,
8 ...
9}:
10
11{
12 home = {
13 stateVersion = "23.05"; # Don't change this unless upgrading Home Manager versions
14
15 packages = with pkgs; [
16 # General applications
17 ghostty
18 stremio
19 julia
20 qbittorrent
21 calibre
22 mpv
23 signal-desktop
24 python3
25 gh
26
27 # Gaming
28 bottles
29 lutris
30 mangohud
31 dxvk_2
32 steam-run
33 vulkan-tools
34 path-of-building
35 wineWowPackages.stable
36 winetricks
37 (prismlauncher.override { gamemodeSupport = true; })
38
39 # System & desktop tools
40 wofi
41 xorg.xauth
42 kdePackages.dolphin
43 xdg-desktop-portal-gtk
44 xclip
45 pavucontrol
46 ethtool
47 grub2
48 efibootmgr
49 distrobox
50
51 # Dev tools
52 legcord
53 hyfetch
54 arduino-cli
55 rust-bin.stable.latest.default
56 tytools
57 inputs.zls.packages.x86_64-linux.zls
58 platformio
59 usbutils
60 teensy-loader-cli
61 teensyduino
62 ];
63 };
64
65 programs = {
66 btop.enable = true;
67 hyfetch.enable = true;
68
69 gh = {
70 enable = true;
71 gitCredentialHelper.enable = true;
72 };
73
74 # Uncomment if you want to use MangoHud system-wide
75 # mangohud.enable = true;
76 };
77}
users/julia/cattop/home.nix.old deleted-72
...@@ -1,72 +0,0 @@
1{
2 inputs,
3 config,
4 pkgs,
5 lib,
6 userSettings,
7 systemSettings,
8 ...
9}:
10{
11 home = {
12 stateVersion = "23.05"; # Please read the comment before changing.
13
14 packages = with pkgs; [
15 #building macos apps hard :(
16 ghostty
17 stremio
18 julia
19 qbittorrent
20
21 #gaming
22 bottles
23 lutris
24 mangohud
25 dxvk_2
26 steam-run
27 vulkan-tools
28 path-of-building
29 wineWowPackages.stable
30 winetricks
31 (prismlauncher.override { gamemodeSupport = true; })
32
33 #window manager stuff
34 wofi
35 xorg.xauth
36 #linux tools
37 legcord
38 pavucontrol
39 ethtool
40 grub2
41 efibootmgr
42 distrobox
43 xdg-desktop-portal-gtk
44 xclip
45 kdePackages.dolphin
46 hyfetch
47 arduino-cli
48 python3
49 gh
50 #broken on macos
51 calibre
52 mpv
53 wireguard-tools
54 signal-desktop
55 inputs.zls.packages.x86_64-linux.zls
56 rust-bin.stable.latest.default
57 ];
58
59 # programs.mangohud.enable = true;
60 programs = {
61 btop.enable = true;
62 hyfetch.enable = true;
63 programs.gh = {
64 enable = true;
65 gitCredentialHelper = {
66 enable = true;
67 };
68 };
69 };
70
71 };
72}
users/julia/configuration.nix deleted-9
...@@ -1,9 +0,0 @@
1# Applied to all systems
2{
3 inputs,
4 pkgs,
5 host,
6 ...
7}:
8{
9}
users/julia/user.nix deleted-13
...@@ -1,13 +0,0 @@
1rec {
2 username = "fish"; # username
3 name = "Julia"; # name/identifier
4 email = "fish@fishcat.fish"; # email (used for certain configurations)
5 dotfilesDir = "~/config"; # absolute path of the local repo
6 theme = "catppuccin-mocha"; # name of theme that stylix will use
7 browser = "firefox"; # Default browser; must select one from ./user/app/browser/
8 term = "ghostty"; # Default terminal command;
9 font = "iosevka"; # Selected font
10 editor = "neovim"; # Default editor;
11 timeZone = "America/Los_Angeles";
12 sexuality = "transgender";
13}
users/julia/vim.nix deleted-3
...@@ -1,3 +0,0 @@
1{ ... }:
2{
3}