authorgravatar for nmarks413@gmail.comNatalie Marks <nmarks413@gmail.com> 2025-10-17 14:27:07-07:00
committergravatar for nmarks413@gmail.comNatalie Marks <nmarks413@gmail.com> 2025-10-17 14:27:07-07:00
logaf005a3fd7925b855dda0128e71b245ba844d2b8
treee3f26c3de63869ca81cf4540dfcabefed7a1c04f
parent091bca5c8f57bbdb3031ef1d5d748ea9331d3677
parent4e0a082cfa9ce13e6bfe45fa93565226667b82fa
signature Commit is signed but in an unrecognized format.

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


20 files changed, 737 insertions(+), 146 deletions(-)

.gitignore+2-1
...@@ -1,4 +1,5 @@...@@ -1,4 +1,5 @@
1flake.lock
2.DS_STORE1.DS_STORE
2.hostname
3flake.lock
3result4result
4result-*5result-*
flake.nix+6
...@@ -134,6 +134,12 @@...@@ -134,6 +134,12 @@
134 host = "paperback";134 host = "paperback";
135 system = "aarch64-darwin";135 system = "aarch64-darwin";
136 };136 };
137 # clover's work macbook pro
138 darwinConfigurations.clover-work-mac = mkSystem "clover-work-mac" {
139 user = "clover";
140 host = "work";
141 system = "aarch64-darwin";
142 };
137143
138 # fish's cattop144 # fish's cattop
139 nixosConfigurations.cattop = mkSystem "cattop" {145 nixosConfigurations.cattop = mkSystem "cattop" {
modules/home/default.nix+28
...@@ -77,6 +77,7 @@ in...@@ -77,6 +77,7 @@ in
77 # ViM and Neovim77 # ViM and Neovim
78 ".*.swp"78 ".*.swp"
79 ".nvimlog"79 ".nvimlog"
80 ".jj"
80 ];81 ];
81 };82 };
8283
...@@ -134,6 +135,33 @@ in...@@ -134,6 +135,33 @@ in
134 autocd = true;135 autocd = true;
135 history.size = 10000;136 history.size = 10000;
136 };137 };
138 jujutsu = {
139 settings = {
140 user = {
141 email = config.programs.git.userEmail;
142 name = config.programs.git.userName;
143 };
144 signing = {
145 behavior = "own";
146 backend = "ssh";
147 key = "~/.ssh/id_ed25519.pub";
148 };
149 git = {
150 sign-on-push = true;
151 push-new-bookmarks = true;
152 };
153 ui = {
154 default-command = "log";
155 diff-formatter = [
156 "${pkgs.difftastic}/bin/difft"
157 "--color=always"
158 "$left"
159 "$right"
160 ];
161 pager = "${pkgs.bat}/bin/bat --style=plain";
162 };
163 };
164 };
137165
138 ghostty.settings.custom-shader = lib.mkIf (166 ghostty.settings.custom-shader = lib.mkIf (
139 cfg.ghostty.shader != null167 cfg.ghostty.shader != null
modules/neovim/default.nix+1
...@@ -131,6 +131,7 @@...@@ -131,6 +131,7 @@
131 hide_dotfiles = false;131 hide_dotfiles = false;
132 never_show = [132 never_show = [
133 ".git"133 ".git"
134 ".jj"
134 ".DS_Store" # macOS135 ".DS_Store" # macOS
135 "thumbs.db" # Windows136 "thumbs.db" # Windows
136 ];137 ];
switch+16-5
...@@ -1,12 +1,23 @@...@@ -1,12 +1,23 @@
1#!/bin/sh1#!/bin/sh
2nh_subcommand="os"2nh_subcommand="os"
3fallback_command="nixos-rebuild"3fallback_command="nixos-rebuild"
4if [ "$(uname -o)" = "darwin" ]; then4hostname_file="$(dirname "$0")/.hostname"
5 nh_subcommand="darwin"5if [ -n "$1" ]; then
6 fallback_command="nix run .#darwin-rebuild"6 hostname="$1"
7elif [ -f "$hostname_file" ]; then
8 hostname=$(cat "$hostname_file")
9fi
10if [ -z "$hostname" ]; then
11 hostname="$(hostname)"
12fi
13printf "%s" "$hostname" >"$hostname_file"
14if [ "$(uname -o)" = "Darwin" ]; then
15 nh_subcommand="darwin"
16 fallback_command="nix run .#darwin-rebuild"
17 hostname="darwinConfigurations.$hostname"
7fi18fi
8if command -v nh >/dev/null; then19if command -v nh >/dev/null; then
9 nh $nh_subcommand switch .20 nh $nh_subcommand switch '.#'"$hostname"
10else21else
11 $fallback_command -- switch --flake .22 $fallback_command -- switch --flake '.#'"$hostname"
12fi23fi
users/clover/configuration.nix+8
...@@ -17,6 +17,14 @@...@@ -17,6 +17,14 @@
17 ];17 ];
18 };18 };
1919
20 homebrew = {
21 enable = true;
22 casks = [
23 "db-browser-for-sqlite"
24 "alt-tab"
25 ];
26 };
27
20 # system preferences28 # system preferences
21 system.defaults = {29 system.defaults = {
22 NSGlobalDomain = {30 NSGlobalDomain = {
users/clover/home.nix+197-15
...@@ -10,9 +10,7 @@ in...@@ -10,9 +10,7 @@ in
10 let10 let
11 # packages to always install11 # packages to always install
12 all = [12 all = [
13 (ffmpeg.override {13 ffmpeg-full
14 withSvtav1 = true;
15 })
16 ripgrep14 ripgrep
17 uv15 uv
18 nh16 nh
...@@ -20,8 +18,8 @@ in...@@ -20,8 +18,8 @@ in
20 ];18 ];
21 # packages to install for desktop environments (non-server)19 # packages to install for desktop environments (non-server)
22 desktop = [20 desktop = [
23 git-town
24 lazygit21 lazygit
22 jjui
25 ];23 ];
26 # packages to install on all servers24 # packages to install on all servers
27 server = [ ];25 server = [ ];
...@@ -31,7 +29,6 @@ in...@@ -31,7 +29,6 @@ in
31 ];29 ];
32 # packages to install on linux desktops30 # packages to install on linux desktops
33 linux = [31 linux = [
34 reaper # TODO: why does this break on macOS
35 ];32 ];
36 in33 in
37 all ++ (if host.darwin then darwin else linux) ++ (if hostServer then server else desktop);34 all ++ (if host.darwin then darwin else linux) ++ (if hostServer then server else desktop);
...@@ -49,7 +46,7 @@ in...@@ -49,7 +46,7 @@ in
49 shader = "cursor-smear-black.glsl";46 shader = "cursor-smear-black.glsl";
50 package = null;47 package = null;
51 settings = {48 settings = {
52 theme = "light:catppuccin-latte,dark:catppuccin-macchiato";49 theme = "light:Farmhouse Light,dark:Challenger Deep";
53 font-family = "AT Name Mono";50 font-family = "AT Name Mono";
54 adjust-cursor-thickness = 1;51 adjust-cursor-thickness = 1;
55 background-opacity = 0.9;52 background-opacity = 0.9;
...@@ -61,13 +58,15 @@ in...@@ -61,13 +58,15 @@ in
61 zsh = {58 zsh = {
62 enable = true;59 enable = true;
63 shellAliases = {60 shellAliases = {
64 switch = "nh darwin switch ~/config";61 switch = "~/config/switch";
65 gg = "lazygit";62 gg = "lazygit";
66 ga = "git add";63 ga = "git add";
67 g = "git status";64 g = "git status";
68 gp = "git pull --rebase && git push";65 gp = "git pull --rebase && git push";
69 };66 };
70 profileExtra = ''67 initContent = ''
68 export PS1="%{$(tput setaf 207)%}%m%{$(tput setaf 15)%}:%{$(tput setaf 87)%}%~ %{$(tput sgr0)%}$ "
69
71 function python() {70 function python() {
72 dirname=$(dirname $1 2>/dev/null)71 dirname=$(dirname $1 2>/dev/null)
73 if [ -z "$dirname" ]; then72 if [ -z "$dirname" ]; then
...@@ -81,8 +80,198 @@ in...@@ -81,8 +80,198 @@ in
81 # use a git-specific email80 # use a git-specific email
82 git.userEmail = "git@paperclover.net";81 git.userEmail = "git@paperclover.net";
8382
83 jujutsu = {
84 enable = true;
85 # my workflow is based on creating changes and editing them. while they
86 # are in progress the description starts with "WIP: "
87 settings = rec {
88 colors = {
89 bookmark = "green";
90 bookmarks = colors.bookmark;
91 local_bookmarks = colors.bookmarks;
92 remote_bookmarks = colors.bookmark;
93 "working_copy bookmark" = "bright green";
94 "working_copy bookmarks" = colors."working_copy bookmark";
95 "working_copy local_bookmarks" = colors."working_copy bookmark";
96 "working_copy remote_bookmarks" = colors."working_copy bookmark";
97
98 "author" = {
99 fg = "white";
100 bold = false;
101 italic = true;
102 };
103 "working_copy author" = colors.author;
104
105 desc = {
106 bold = false;
107 fg = "bright white";
108 };
109 description = colors.desc;
110 cc_wip = {
111 fg = "bright yellow";
112 bold = true;
113 reverse = true;
114 };
115 cc_header = {
116 bold = true;
117 fg = "bright white";
118 };
119 cc_feat = "green";
120 cc_fix = "red";
121 cc_hotfix = "red";
122 cc_chore = "yellow";
123 cc_test = "blue";
124 cc_other = "blue";
125 cc_scope = {
126 fg = "cyan";
127 bold = false;
128 italic = true;
129 };
130
131 active_marker = {
132 fg = "bright magenta";
133 bold = true;
134 reverse = true;
135 };
136 conflict_marker = {
137 fg = "bright red";
138 bold = true;
139 reverse = true;
140 };
141
142 timestamp = "bright black";
143 commit_id = {
144 fg = "bright black";
145 bold = false;
146 };
147 muted = "bright black";
148 };
149 # ui.graph.style = "square";
150 revsets = {
151 log = "ancestors(description(regex:\"^(WIP:|\\\\s+$)\"):: | working_copies() | bookmarks(\"master\")::remote_bookmarks(\"master\") | bookmarks(glob:\"clo/*\")::, 5)";
152 short-prefixes = "(trunk()..@)::";
153 };
154 # templates.log = "hl_wip(self)";
155
156 template-aliases = {
157 # log template, highlighting the WIP commits by making everything else faded out
158 "hl_wip(commit)" = ''
159 if(commit.root(), format_root_commit(commit),
160 label("__commit__",
161 format_short_commit_header(commit) ++ "\n" ++
162 format_commit_description(commit)
163 )
164 )
165 '';
166
167 "format_commit_description(commit)" = ''
168 label("desc", format_commit_firstline(commit.description().first_line())) ++
169 "\n" ++ if(
170 commit.description().starts_with("WIP:") || commit.current_working_copy(),
171 commit.description().remove_prefix(commit.description().first_line()).remove_prefix("\n").trim_end() ++ "\n ",
172 if(commit.description().remove_prefix(commit.description().first_line()).trim().len() > 0,
173 label("muted", lines_collapsed(commit.description().lines().filter(|x| x.trim().len() > 0).len() - 1)),
174 " "
175 )
176 )
177 '';
178 "lines_collapsed(count)" =
179 ''("[" ++ stringify(count ++ " line" ++ if(count == 1, "", "s")) ++ " collapsed]\n")'';
180 "format_commit_firstline(line)" = ''
181 if(line.starts_with("WIP:"),
182 label("cc_wip", " WIP ") ++ " " ++ format_commit_firstline_a_wip(line.remove_prefix("WIP:").trim()),
183 format_commit_firstline_a_wip(line)
184 )
185 '';
186 "format_commit_firstline_a_wip(line)" = ''
187 if(line.starts_with("feat:") || line.starts_with("feat("),
188 label("cc_feat", "feat") ++ format_commit_firstline_a_cc_type(line.remove_prefix("feat")),
189 if(line.starts_with("fix:") || line.starts_with("fix("),
190 label("cc_fix", "fix") ++ format_commit_firstline_a_cc_type(line.remove_prefix("fix")),
191 if(line.starts_with("hotfix:") || line.starts_with("hotfix("),
192 label("cc_hotfix", "hotfix") ++ format_commit_firstline_a_cc_type(line.remove_prefix("hotfix")),
193 if(line.starts_with("chore:") || line.starts_with("chore("),
194 label("cc_chore", "chore") ++ format_commit_firstline_a_cc_type(line.remove_prefix("chore")),
195 if(line.starts_with("test:") || line.starts_with("test("),
196 label("cc_other", "test") ++ format_commit_firstline_a_cc_type(line.remove_prefix("test")),
197 if(line.starts_with("refactor:") || line.starts_with("refactor("),
198 label("cc_other", "refactor") ++ format_commit_firstline_a_cc_type(line.remove_prefix("refactor")),
199 if(line.starts_with("perf:") || line.starts_with("perf("),
200 label("cc_other", "perf") ++ format_commit_firstline_a_cc_type(line.remove_prefix("perf")),
201 if(line.starts_with("lib:") || line.starts_with("lib("),
202 label("cc_other", "lib") ++ format_commit_firstline_a_cc_type(line.remove_prefix("lib")),
203 label("cc_header", line)
204 ))))))))
205 '';
206 "format_commit_firstline_a_cc_type(rest)" = ''
207 if(rest.starts_with("(") && rest.contains(")"),
208 format_firstline_cc_scope(rest, index_of_close_paren(rest)),
209 format_firstline_a_cc(rest))
210 '';
211 "format_firstline_cc_scope(rest, index)" = ''
212 label("cc_scope", rest.substr(0, index)) ++ format_firstline_a_cc(rest.substr(index, rest.len()))
213 '';
214 "format_firstline_a_cc(rest)" = ''
215 if(rest.starts_with(":"),
216 label("muted", ":") ++ label("cc_header", rest.remove_prefix(":")),
217 label("cc_header", rest)
218 )
219 '';
220 # sorry!
221 "index_of_close_paren(line)" = ''
222 stringify(if(line.substr(1, 2) == ")", "A",
223 if(line.substr(2, 3) == ")", "AA",
224 if(line.substr(3, 4) == ")", "AAA",
225 if(line.substr(4, 5) == ")", "AAAA",
226 if(line.substr(5, 6) == ")", "AAAAA",
227 if(line.substr(6, 7) == ")", "AAAAAA",
228 if(line.substr(7, 8) == ")", "AAAAAAA",
229 if(line.substr(8, 9) == ")", "AAAAAAAA",
230 if(line.substr(9, 10) == ")","AAAAAAAAA",
231 if(line.substr(10, 11) == ")", "AAAAAAAAAA",
232 if(line.substr(11, 12) == ")", "AAAAAAAAAAA",
233 if(line.substr(12, 13) == ")", "AAAAAAAAAAAA",
234 if(line.substr(13, 14) == ")", "AAAAAAAAAAAAA",
235 if(line.substr(14, 15) == ")", "AAAAAAAAAAAAAA",
236 if(line.substr(15, 16) == ")", "AAAAAAAAAAAAAAA",
237 if(line.substr(16, 17) == ")", "AAAAAAAAAAAAAAAA",
238 if(line.substr(17, 18) == ")", "AAAAAAAAAAAAAAAAA",
239 if(line.substr(18, 19) == ")", "AAAAAAAAAAAAAAAAAA",
240 if(line.substr(19, 20) == ")", "AAAAAAAAAAAAAAAAAAA",
241 if(line.substr(20, 21) == ")", "AAAAAAAAAAAAAAAAAAAA",
242 "AAAAAAAAAAAAAAAAAAAAA"
243 ))))))))))))))))))))).len() + 1
244 '';
245
246 "format_short_signature(signature)" = "signature.name()";
247 "format_timestamp(timestamp)" = "timestamp.ago()";
248 "format_short_commit_header(commit)" = ''
249 separate(" ",
250 if(commit.current_working_copy(), label("active_marker", " ACTIVE ")),
251 if(commit.conflict(), label("conflict_marker", " CONFLICT ")),
252 format_short_change_id_with_hidden_and_divergent_info(commit),
253 format_short_signature(commit.author()),
254 label("muted", "|"),
255 if(commit.description().trim().len() > 0, label("muted", format_timestamp(commit_timestamp(commit)))),
256 commit.bookmarks(),
257 commit.tags(),
258 commit.working_copies(),
259 label("muted", "(") ++
260 format_short_commit_id(commit.commit_id()) ++
261 label("muted", ")"),
262 if(config("ui.show-cryptographic-signatures").as_boolean(),
263 format_short_cryptographic_signature(commit.signature())),
264 )
265 '';
266 };
267 };
268 };
269
84 ssh = {270 ssh = {
85 enable = true;271 enable = true;
272 extraConfig = ''
273 SetEnv TERM=xterm-color
274 '';
86 matchBlocks = rec {275 matchBlocks = rec {
87 zenith = {276 zenith = {
88 user = "clo";277 user = "clo";
...@@ -91,12 +280,5 @@ in...@@ -91,12 +280,5 @@ in
91 "nas.paperclover.net" = zenith;280 "nas.paperclover.net" = zenith;
92 };281 };
93 };282 };
94 neovide = {
95 enable = !hostServer;
96 settings = {
97 font.normal = "AT Name Mono";
98 font.size = 13;
99 };
100 };
101 };283 };
102}284}
users/clover/paperback/configuration.nix-7
...@@ -1,9 +1,2 @@...@@ -1,9 +1,2 @@
1_: {1_: {
2 homebrew = {
3 enable = true;
4 casks = [
5 "eloston-chromium"
6 "db-browser-for-sqlite"
7 ];
8 };
9}2}
users/clover/paperback/home.nix-4
...@@ -3,7 +3,6 @@...@@ -3,7 +3,6 @@
3 # these programs are not globally installed to reduce distractions.3 # these programs are not globally installed to reduce distractions.
4 # most of these are needed for my work environment.4 # most of these are needed for my work environment.
5 programs = {5 programs = {
6 bun.enable = true;
7 zsh.profileExtra = ''6 zsh.profileExtra = ''
8 _bun() {7 _bun() {
9 local context state line8 local context state line
...@@ -12,7 +11,6 @@...@@ -12,7 +11,6 @@
12 '';11 '';
13 };12 };
14 home.packages = with pkgs; [13 home.packages = with pkgs; [
15 doppler
16 deno14 deno
17 nodejs_2215 nodejs_22
18 rustup16 rustup
...@@ -22,7 +20,5 @@...@@ -22,7 +20,5 @@
22 yt-dlp20 yt-dlp
23 spotdl21 spotdl
24 zig22 zig
25 ssm-session-manager-plugin
26 awscli
27 ];23 ];
28}24}
users/clover/work/home.nix created+27
...@@ -0,0 +1,27 @@
1{ pkgs, ... }:
2{
3 programs = {
4 zsh.profileExtra = ''
5 _bun() {
6 local context state line
7 _arguments -C '*:file:_files'
8 }
9 '';
10 };
11 home.packages = with pkgs; [
12 (bun.overrideAttrs (_: rec {
13 version = "1.1.17";
14 src = fetchurl {
15 url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-darwin-aarch64.zip";
16 hash = "sha256-aULgRZ9evcGUhKJ6slLJOg3IEzUeNfIkJF8RDP3YUlo=";
17 };
18 }))
19 doppler
20 deno
21 nodejs_24
22 rustup
23 typescript
24 ssm-session-manager-plugin
25 awscli
26 ];
27}
users/fish/cattop/configuration.nix+56-57
...@@ -7,105 +7,110 @@...@@ -7,105 +7,110 @@
7}:7}:
8{8{
9 imports = [9 imports = [
10 # Include the results of the hardware scan.
11 ./hardware-configuration.nix10 ./hardware-configuration.nix
12 ];11 ];
1312
14 # Use the systemd-boot EFI boot loader.
15 boot.loader.efi.canTouchEfiVariables = true;13 boot.loader.efi.canTouchEfiVariables = true;
1614
17 # networking.hostName = "nixos"; # Define your hostname.15 networking.hostName = "cattop";
18 # Pick only one of the below networking options.
19 # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
20 # networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.16 # networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
2117
22 # Set your time zone.
23 # time.timeZone = "Europe/Amsterdam";
24
25 # Configure network proxy if necessary
26 # networking.proxy.default = "http://user:password@proxy:port/";
27 # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
28
29 # Select internationalisation properties.
30 # i18n.defaultLocale = "en_US.UTF-8";
31 # console = {
32 # font = "Lat2-Terminus16";
33 # keyMap = "us";
34 # useXkbConfig = true; # use xkb.options in tty.
35 # };
36
37 # Enable the X11 windowing system.
38 services.xserver.enable = true;18 services.xserver.enable = true;
3919
40 # Enable the GNOME Desktop Environment.
41 services.displayManager.gdm.enable = true;20 services.displayManager.gdm.enable = true;
42 services.desktopManager.gnome.enable = true;21 services.desktopManager.gnome.enable = true;
43 environment.gnome.excludePackages = (22 environment.gnome.excludePackages = (
44 with pkgs;23 with pkgs;
45 [24 [
46 atomix25 adwaita-fonts
47 cheese26 adwaita-icon-theme
27 baobab
28 decibels
48 epiphany29 epiphany
30 evince
31 file-roller
49 geary32 geary
50 gedit33 gnome-backgrounds
34 gnome-calculator
35 gnome-calendar
51 gnome-characters36 gnome-characters
37 gnome-clocks
38 gnome-connections
39 gnome-console
40 gnome-contacts
41 gnome-disk-utility
42 gnome-font-viewer
43 gnome-logs
44 gnome-maps
52 gnome-music45 gnome-music
53 gnome-photos46 gnome-shell-extensions
54 gnome-terminal47 gnome-system-monitor
48 gnome-screenshot
49 gnome-text-editor
50 gnome-themes-extra
55 gnome-tour51 gnome-tour
56 hitori52 gnome-user-docs
57 iagno53 gnome-weather
54 loupe
55 nautilus
56 orca
57 seahorse
58 simple-scan
59 snapshot
60 sushi
58 totem61 totem
5962 yelp
60 ]63 ]
61 );64 );
6265
63 # Configure keymap in X1166 services.printing.enable = true;
64 # services.xserver.xkb.layout = "us";
65 # services.xserver.xkb.options = "eurosign:e,caps:escape";
66
67 # Enable CUPS to print documents.
68 # services.printing.enable = true;
6967
70 # Enable sound.68 # Enable sound.
71 # services.pulseaudio.enable = true;69 services.pulseaudio.enable = false;
72 # OR70 security.rtkit.enable = true;
73 # services.pipewire = {71 services.pipewire = {
74 # enable = true;72 enable = true;
75 # pulse.enable = true;73 alsa.enable = true;
76 # };74 alsa.support32Bit = true;
75 pulse.enable = true;
76 };
7777
78 # Enable touchpad support (enabled default in most desktopManager).78 # Enable touchpad support (enabled default in most desktopManager).
79 # services.libinput.enable = true;79 # services.libinput.enable = true;
8080
81 # Define a user account. Don't forget to set a password with ‘passwd’.
82 users.users.fish = {81 users.users.fish = {
83 isNormalUser = true;82 isNormalUser = true;
84 extraGroups = [83 extraGroups = [
85 "wheel" # Enable ‘sudo’ for the user.84 "wheel"
86 "dialout" # Enable serial access for the user.85 "dialout"
86 "audio"
87 ];87 ];
88 packages = with pkgs; [88 packages = with pkgs; [
89 tree89 tree
90 git90 git
91 nh91 nh
92 vim92 vim
93 fish
94 ];93 ];
95 };94 };
95 programs.git = {
96 enable = true;
97 # extraConfig = {
98 # push = {
99 # autoSetupRemote = true;
100 # };
101 # };
102 };
96103
97 programs.firefox.enable = true;104 programs.firefox.enable = true;
98 programs.neovim.defaultEditor.enable = true;105 programs.neovim.enable = true;
106 #programs.neovim.defaultEditor.enable = true;
99107
100 # List packages installed in system profile.108 # List packages installed in system profile.
101 # You can use https://search.nixos.org/ to find more packages (and options).
102 environment.systemPackages = with pkgs; [109 environment.systemPackages = with pkgs; [
103 vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.110 vim
104 wget111 wget
105 ];112 ];
106113
107 # Some programs need SUID wrappers, can be configured further or are
108 # started in user sessions.
109 programs.mtr.enable = true;114 programs.mtr.enable = true;
110 programs.gnupg.agent = {115 programs.gnupg.agent = {
111 enable = true;116 enable = true;
...@@ -117,12 +122,6 @@...@@ -117,12 +122,6 @@
117 # Enable the OpenSSH daemon.122 # Enable the OpenSSH daemon.
118 # services.openssh.enable = true;123 # services.openssh.enable = true;
119124
120 # Open ports in the firewall.
121 # networking.firewall.allowedTCPPorts = [ ... ];
122 # networking.firewall.allowedUDPPorts = [ ... ];
123 # Or disable the firewall altogether.
124 # networking.firewall.enable = false;
125
126 # Copy the NixOS configuration file and link it from the resulting system125 # Copy the NixOS configuration file and link it from the resulting system
127 # (/run/current-system/configuration.nix). This is useful in case you126 # (/run/current-system/configuration.nix). This is useful in case you
128 # accidentally delete configuration.nix.127 # accidentally delete configuration.nix.
users/fish/cattop/hardware-configuration.nix+17-31
...@@ -1,46 +1,32 @@...@@ -1,46 +1,32 @@
1# Do not modify this file! It was generated by ‘nixos-generate-config’1# Do not modify this file! It was generated by ‘nixos-generate-config’
2# and may be overwritten by future invocations. Please make changes2# and may be overwritten by future invocations. Please make changes
3# to /etc/nixos/configuration.nix instead.3# to /etc/nixos/configuration.nix instead.
4{4{ config, lib, pkgs, modulesPath, ... }:
5 config,
6 lib,
7 pkgs,
8 modulesPath,
9 ...
10}:
115
12{6{
13 imports = [7 imports =
14 (modulesPath + "/installer/scan/not-detected.nix")8 [ (modulesPath + "/installer/scan/not-detected.nix")
15 ];9 ];
1610
17 boot.initrd.availableKernelModules = [11 boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "vmd" "nvme" ];
18 "xhci_pci"
19 "thunderbolt"
20 "vmd"
21 "nvme"
22 ];
23 boot.initrd.kernelModules = [ ];12 boot.initrd.kernelModules = [ ];
24 boot.kernelModules = [ "kvm-intel" ];13 boot.kernelModules = [ "kvm-intel" ];
25 boot.extraModulePackages = [ ];14 boot.extraModulePackages = [ ];
2615
27 fileSystems."/" = {16 fileSystems."/" =
28 device = "/dev/disk/by-uuid/8eb0d6a2-b8cf-4ef2-ba2a-e25a5555b0bc";17 { device = "/dev/disk/by-uuid/d434c90f-e135-426e-b237-ead2f44e37c6";
29 fsType = "ext4";18 fsType = "ext4";
30 };19 };
3120
32 fileSystems."/boot/efi" = {21 fileSystems."/boot/EFI" =
33 device = "/dev/disk/by-uuid/3B51-4A1C";22 { device = "/dev/disk/by-uuid/473A-B8FD";
34 fsType = "vfat";23 fsType = "vfat";
35 options = [24 options = [ "fmask=0077" "dmask=0077" ];
36 "fmask=0077"25 };
37 "dmask=0077"
38 ];
39 };
4026
41 swapDevices = [27 swapDevices =
42 { device = "/dev/disk/by-uuid/58ee9d19-292f-49b5-9979-341b42e8e09d"; }28 [ { device = "/dev/disk/by-uuid/e0cac471-0e32-4d5a-bf85-e8f93b304356"; }
43 ];29 ];
4430
45 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking31 # 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's32 # (the default) this is the recommended approach. When using systemd-networkd it's
users/fish/cattop/home.nix+21-24
...@@ -1,13 +1,4 @@...@@ -1,13 +1,4 @@
1{1{ pkgs, ... }:
2 inputs,
3 config,
4 pkgs,
5 lib,
6 userSettings,
7 systemSettings,
8 ...
9}:
10
11{2{
12 home = {3 home = {
13 stateVersion = "23.05"; # Don't change this unless upgrading Home Manager versions4 stateVersion = "23.05"; # Don't change this unless upgrading Home Manager versions
...@@ -15,17 +6,14 @@...@@ -15,17 +6,14 @@
15 packages = with pkgs; [6 packages = with pkgs; [
16 # General applications7 # General applications
17 ghostty8 ghostty
18 stremio
19 julia
20 calibre
21 mpv
22 signal-desktop9 signal-desktop
23 python3
24 gh
25 spotify10 spotify
11 equibop
2612
27 # Gaming13 # Gaming
28 (prismlauncher.override { gamemodeSupport = true; })14 (prismlauncher.override { gamemodeSupport = true; })
15 #bsdgames
16 space-cadet-pinball
2917
30 # System & desktop tools18 # System & desktop tools
31 wofi19 wofi
...@@ -37,18 +25,19 @@...@@ -37,18 +25,19 @@
37 ethtool25 ethtool
38 grub226 grub2
39 efibootmgr27 efibootmgr
40 distrobox
41 pqiv28 pqiv
29 imagemagick
30 toybox
4231
43 # Dev tools32 # Dev tools
44 legcord
45 hyfetch33 hyfetch
46 kicad34 python3
35 gh
36 cmake
37 ripgrep
4738
48 # Unsorted39 # Unsorted
49 ripgrep40 kicad
50 busybox
51 imagemagick
52 ];41 ];
53 };42 };
5443
...@@ -61,7 +50,15 @@...@@ -61,7 +50,15 @@
61 gitCredentialHelper.enable = true;50 gitCredentialHelper.enable = true;
62 };51 };
6352
64 # Uncomment if you want to use MangoHud system-wide53 ghostty = {
65 # mangohud.enable = true;54 enable = true;
55 shader = "cursor-smear-black.glsl";
56 settings = {
57 theme = "citruszest";
58 adjust-cursor-thickness = 1;
59 background-opacity = 0.95;
60 background-blur = true;
61 };
62 };
66 };63 };
67}64}
users/fish/user.nix+1-1
...@@ -4,7 +4,7 @@ rec {...@@ -4,7 +4,7 @@ rec {
4 email = "77413091+JulianBarbera@users.noreply.github.com"; # email (used for certain configurations)4 email = "77413091+JulianBarbera@users.noreply.github.com"; # email (used for certain configurations)
5 dotfilesDir = "~/config"; # absolute path of the local repo5 dotfilesDir = "~/config"; # absolute path of the local repo
6 theme = "catppuccin-mocha"; # name of theme that stylix will use6 theme = "catppuccin-mocha"; # name of theme that stylix will use
7 browser = "firefox"; # Default browser; must select one from ./user/app/browser/7 browser = "zen-browser"; # Default browser; must select one from ./user/app/browser/
8 term = "ghostty"; # Default terminal command;8 term = "ghostty"; # Default terminal command;
9 font = "iosevka"; # Selected font9 font = "iosevka"; # Selected font
10 editor = "neovim"; # Default editor;10 editor = "neovim"; # Default editor;
users/fish/vim.nix+38-1
...@@ -1,3 +1,40 @@...@@ -1,3 +1,40 @@
1{ ... }:1{ pkgs, ... }:
2{2{
3 imports = [
4 ./vim/default.nix
5 ];
6
7 vim = {
8 #enable python provider
9 withPython3 = true;
10 python3Packages = [ "pynvim" ];
11
12 autocmds = [
13 #Autocommand to fall back to treesitter folding if LSP doesnt support it
14 {
15 event = [ "LspAttach" ];
16 callback = pkgs.lib.generators.mkLuaInline ''
17 function(args)
18 local client = vim.lsp.get_client_by_id(args.data.client_id)
19 if client:supports_method('textDocument/foldingRange') then
20 local win = vim.api.nvim_get_current_win()
21 vim.wo[win][0].foldexpr = 'v:lua.vim.lsp.foldexpr()'
22 end
23 end
24 '';
25 }
26 ];
27
28 tabline = {
29 nvimBufferline.enable = true;
30 };
31 startPlugins = [
32 "nui-nvim"
33 ];
34 theme = {
35 name = "catppuccin";
36 style = "mocha";
37 };
38 hideSearchHighlight = true;
39 };
3}40}
users/fish/vim/default.nix created+9
...@@ -0,0 +1,9 @@
1{ ... }:
2{
3 imports = [
4 ./languages.nix
5 ./latex.nix
6 ./visuals.nix
7 ./mini.nix
8 ];
9}
users/fish/vim/languages.nix created+155
...@@ -0,0 +1,155 @@
1{
2 flake,
3 user,
4 host,
5 pkgs,
6 ...
7}:
8{
9 vim = {
10 extraPackages = with pkgs; [
11 python312Packages.pylatexenc
12 ];
13 languages = {
14 lua.lsp.enable = true;
15 lua.lsp.lazydev.enable = true;
16 python = {
17 format.type = "ruff";
18 };
19 markdown = {
20 enable = true;
21 extensions.render-markdown-nvim = {
22 enable = true;
23 };
24 };
25 nix = {
26 lsp.servers = [
27 "nil"
28 "nixd"
29 ];
30 };
31 };
32
33 formatter.conform-nvim = {
34 enable = true;
35 setupOpts = {
36 formatters_by_ft = {
37 fish = [ "fish_indent" ];
38 tex = [ "latexindent" ];
39 };
40 };
41 };
42 diagnostics = {
43 enable = true;
44 config = {
45 virtual_text = {
46 format = pkgs.lib.generators.mkLuaInline ''
47 function(diagnostic)
48 return string.format("%s (%s)", diagnostic.message, diagnostic.source)
49 end
50 '';
51 };
52 };
53 nvim-lint = {
54 enable = true;
55 linters_by_ft = {
56 nix = [ "statix" ];
57 tex = [ "chktex" ];
58 haskell = [ "hlint" ];
59 };
60
61 linters = {
62 chktex = {
63 ignore_exitcode = true;
64 };
65 };
66 };
67 };
68 treesitter = {
69 enable = true;
70 fold = true;
71 addDefaultGrammars = true;
72 highlight = {
73 additionalVimRegexHighlighting = true;
74 };
75
76 grammars = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
77 markdown_inline
78 markdown
79 ];
80
81 highlight.enable = true;
82 indent.enable = false;
83 };
84
85 visuals = {
86 fidget-nvim = {
87 setupOpts = {
88 logger.level = "trace";
89 };
90 };
91 };
92
93 ui = {
94 nvim-ufo = {
95 enable = true;
96 };
97 };
98 autocomplete.blink-cmp = {
99 enable = true;
100 mappings = {
101 close = null;
102 complete = null;
103 confirm = null;
104 next = null;
105 previous = null;
106 scrollDocsDown = null;
107 scrollDocsUp = null;
108 };
109
110 setupOpts = {
111 keymap = {
112 preset = "super-tab";
113 };
114 completion = {
115 ghost_text.enabled = false;
116 list.selection.preselect = true;
117 trigger = {
118 show_in_snippet = true;
119 };
120 accept.auto_brackets.enabled = true;
121 };
122 signature = {
123 enabled = true;
124 };
125 };
126 };
127
128 lazy.plugins."blink.pairs" = {
129 enabled = true;
130 package = pkgs.vimPlugins.blink-pairs;
131 setupModule = "blink.pairs";
132 setupOpts = {
133 mappings = {
134 # -- you can call require("blink.pairs.mappings").enable() and require("blink.pairs.mappings").disable() to enable/disable mappings at runtime
135 enabled = true;
136 # -- see the defaults: https://github.com/Saghen/blink.pairs/blob/main/lua/blink/pairs/config/mappings.lua#L10
137 pairs = [ ];
138 };
139 highlights = {
140 enabled = true;
141 groups = [
142 "BlinkPairsOrange"
143 "BlinkPairsPurple"
144 "BlinkPairsBlue"
145 ];
146 matchparen = {
147 enabled = true;
148 group = "MatchParen";
149 };
150 };
151 debug = false;
152 };
153 };
154 };
155}
users/fish/vim/latex.nix created+118
...@@ -0,0 +1,118 @@
1{ pkgs, host, ... }:
2{
3 vim = {
4 extraPackages = with pkgs; [
5 texliveFull
6 ];
7 lazy.plugins.cmp-vimtex = {
8 enabled = true;
9 package = pkgs.vimPlugins.cmp-vimtex;
10 lazy = false;
11
12 };
13 lazy.plugins.vimtex = {
14 enabled = true;
15 package = pkgs.vimPlugins.vimtex;
16 lazy = false;
17 };
18
19 globals = {
20 tex_flavor = "latex";
21 maplocalleader = "\\";
22 vimtex_compiler_method = "latexmk";
23 vimtex_view_method = if host.darwin then "skim" else "zathura";
24 vimtex_view_automatic = 1;
25 vimtex_compiler_latexmk = {
26 callback = 1;
27 continuous = 1;
28 executable = "latexmk";
29 hooks = [ ];
30 options = [
31 "-verbose"
32 "-file-line-error"
33 "-synctex=1"
34 "-interaction=nonstopmode"
35 "-shell-escape"
36 ];
37 };
38 vimtex_log_ignore = [
39 "Underfull"
40 "Overfull"
41 "specifier changed to"
42 "Token not allowed in a PDF string"
43 ];
44 vimtex_quickfix_ignore_filters = [
45 "Underfull"
46 "Overfull"
47 ];
48 };
49
50 autocomplete.blink-cmp = {
51 sourcePlugins = {
52 "blink.compat" = {
53 enable = true;
54 package = "blink-compat";
55 module = "blink.compat.source";
56 };
57 };
58 setupOpts = {
59 sources = {
60 default = [ "vimtex" ];
61 providers = {
62 vimtex = {
63 name = "vimtex";
64 module = "blink.compat.source";
65 score_offset = 100;
66 };
67 };
68 };
69 };
70 };
71
72 augroups = [
73 {
74 name = "VimTeX Events";
75 }
76 ];
77 autocmds = [
78 {
79 pattern = [ "VimtexEventViewReverse" ];
80 event = [ "User" ];
81 desc = "Return to nvim after reverse search";
82 command = "call b:vimtex.viewer.xdo_focus_vim()";
83 group = "VimTeX Events";
84 }
85 {
86 pattern = [ "VimtexEventQuit" ];
87 event = [ "User" ];
88 desc = "Close pdf after exiting nvim";
89 command = "VimtexClean";
90 group = "VimTeX Events";
91 }
92
93 {
94 pattern = [ "VimtexEventInitPost" ];
95 event = [ "User" ];
96 desc = "Start compiling when opening nvim to a tex file";
97 command = "VimtexCompile";
98 group = "VimTeX Events";
99 }
100
101 ];
102
103 lsp = {
104 servers = {
105 texlab = {
106 enable = true;
107 cmd = [ "${pkgs.texlab}/bin/texlab" ];
108 filetypes = [ "tex" ];
109 };
110 };
111 };
112 treesitter = {
113 grammars = with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
114 latex
115 ];
116 };
117 };
118}
users/fish/vim/mini.nix created+10
...@@ -0,0 +1,10 @@
1{ pkgs, ... }:
2{
3 vim = {
4 mini = {
5 icons.enable = true;
6 ai.enable = true;
7 surround.enable = true;
8 };
9 };
10}
users/fish/vim/visuals.nix created+27
...@@ -0,0 +1,27 @@
1{ pkgs, ... }:
2{
3 vim = {
4 ui = {
5 noice = {
6 enable = true;
7 setupOpts = {
8 lsp = {
9 progress.enabled = false;
10 signature.enabled = true;
11 };
12 presets = {
13 lsp_doc_border = true;
14 long_message_to_split = true;
15 inc_rename = false;
16 command_palette = false;
17 bottom_search = true;
18 };
19 };
20 };
21 borders = {
22 enable = true;
23 };
24 };
25
26 };
27}