tangled
alpha
login
or
join now
wiro.world
/
dotfiles
2
fork
atom
yep, more dotfiles
2
fork
atom
overview
issues
1
pulls
1
pipelines
switch formatter to nixfmt
wiro.world
1 month ago
466cc5bc
248bd00d
verified
This commit was signed with the committer's
known signature
.
wiro.world
SSH Key Fingerprint:
SHA256:SmMcWpNAnL+VAgItSawvXgdPVn7f1rsyAuB/5VNclKY=
0/1
nix.yml
running
1mo ago
+1503
-837
99 changed files
expand all
collapse all
unified
split
apps
default.nix
flash-installer.nix
configurations.nix
flake.nix
home-manager
fragments
agenix.nix
aws.nix
chromium.nix
compose-key.nix
default.nix
epita.nix
firefox.nix
foot.nix
git.nix
helix.nix
imv.nix
jujutsu.nix
kanshi.nix
kitty.nix
launcher.nix
rust.nix
screen.nix
shell.nix
stylix.nix
sway.nix
swaybar.nix
thunderbird.nix
tools.nix
vscodium.nix
waybar.nix
xdg-mime.nix
zed.nix
zellij
default.nix
options.nix
profiles
desktop.nix
lightweight.nix
macintosh.nix
server.nix
hosts
weird-row-server
authelia.nix
default.nix
goatcounter.nix
grafana.nix
headscale.nix
hypixel-bank-tracker.nix
lldap.nix
miniflux.nix
paisa.nix
pds.nix
tangled.nix
thelounge.nix
tuwunel.nix
vaultwarden.nix
warrior.nix
webfinger.nix
lib
flake
default.nix
managedDiskLayout.nix
user.nix
unfree.nix
modules
home-manager
screen.nix
wakatime.nix
xcompose.nix
nixos
logiops.nix
nixos
fragments
agenix.nix
backup.nix
default.nix
fonts.nix
gaming.nix
kanata
default.nix
logiops.nix
nix.nix
secure-boot.nix
security.nix
virtualisation.nix
wireless.nix
yabai.nix
hardware
apple-wiro-laptop.nix
archaic-wiro-laptop.nix
neo-wiro-laptop.nix
weird-row-server.nix
layout
ext4-hetzner.nix
luks-btrfs.nix
profiles
installer.nix
laptop.nix
macintosh.nix
overlays
default.nix
pkgs
asak.nix
default.nix
ebnfer.nix
find-unicode.nix
lsr
deps.nix
names.nix
probe-rs-udev-rules.nix
secrets
keys.nix
secrets.nix
shells.nix
templates
blank
flake.nix
c
flake.nix
rust
flake.nix
rust-pkg
flake.nix
package.nix
+7
-3
apps/default.nix
reviewed
···
1
1
{ pkgs-per-system }:
2
2
3
3
-
{ lib
4
4
-
, ...
3
3
+
{
4
4
+
lib,
5
5
+
...
5
6
}@pkgs:
6
7
7
8
let
···
10
11
};
11
12
in
12
13
13
13
-
lib.mapAttrs (_: program: { type = "app"; inherit program; }) apps
14
14
+
lib.mapAttrs (_: program: {
15
15
+
type = "app";
16
16
+
inherit program;
17
17
+
}) apps
+9
-5
apps/flash-installer.nix
reviewed
···
1
1
targetSystemPkgs:
2
2
3
3
-
{ self
4
4
-
, lib
3
3
+
{
4
4
+
self,
5
5
+
lib,
5
6
6
6
-
, writeShellApplication
7
7
-
, ...
7
7
+
writeShellApplication,
8
8
+
...
8
9
}@pkgs:
9
10
10
11
let
···
17
18
in
18
19
lib.getExe (writeShellApplication {
19
20
name = "flash-installer";
20
20
-
runtimeInputs = with pkgs; [ pv fzf ];
21
21
+
runtimeInputs = with pkgs; [
22
22
+
pv
23
23
+
fzf
24
24
+
];
21
25
22
26
text = ''
23
27
# Select disk to flash
+32
-6
configurations.nix
reviewed
···
8
8
# Desktops
9
9
"neo-wiro-laptop" = createSystem pkgs [
10
10
(system "neo-wiro-laptop" "laptop")
11
11
-
(managedDiskLayout "luks-btrfs" { device = "nvme0n1"; swapSize = 12; })
12
12
-
(user "milomoisson" { description = "Milo Moisson"; profile = "desktop"; keys = keys.users; elevated = true; })
11
11
+
(managedDiskLayout "luks-btrfs" {
12
12
+
device = "nvme0n1";
13
13
+
swapSize = 12;
14
14
+
})
15
15
+
(user "milomoisson" {
16
16
+
description = "Milo Moisson";
17
17
+
profile = "desktop";
18
18
+
keys = keys.users;
19
19
+
elevated = true;
20
20
+
})
13
21
];
14
22
15
23
"archaic-wiro-laptop" = createSystem pkgs [
16
24
(system "archaic-wiro-laptop" "laptop")
17
17
-
(user "milomoisson" { description = "Milo Moisson"; profile = "desktop"; keys = keys.users; elevated = true; })
25
25
+
(user "milomoisson" {
26
26
+
description = "Milo Moisson";
27
27
+
profile = "desktop";
28
28
+
keys = keys.users;
29
29
+
elevated = true;
30
30
+
})
18
31
];
19
32
20
33
# Servers
21
34
"weird-row-server" = createSystem pkgs [
22
35
(host "weird-row-server")
23
23
-
(managedDiskLayout "ext4-hetzner" { device = "sda"; swapSize = 2; })
36
36
+
(managedDiskLayout "ext4-hetzner" {
37
37
+
device = "sda";
38
38
+
swapSize = 2;
39
39
+
})
24
40
# TODO: should we keep a real user there?
25
25
-
(user "milomoisson" { description = "Milo Moisson"; profile = "server"; keys = keys.users; elevated = true; })
41
41
+
(user "milomoisson" {
42
42
+
description = "Milo Moisson";
43
43
+
profile = "server";
44
44
+
keys = keys.users;
45
45
+
elevated = true;
46
46
+
})
26
47
];
27
48
};
28
49
···
37
58
darwinConfigurations = with flake-lib.darwin; {
38
59
"apple-wiro-laptop" = createSystem pkgs [
39
60
(system "apple-wiro-laptop" "macintosh")
40
40
-
(user "milomoisson" { description = "Milo Moisson"; profile = "macintosh"; keys = keys.users; elevated = true; })
61
61
+
(user "milomoisson" {
62
62
+
description = "Milo Moisson";
63
63
+
profile = "macintosh";
64
64
+
keys = keys.users;
65
65
+
elevated = true;
66
66
+
})
41
67
];
42
68
};
43
69
}
+11
-7
flake.nix
reviewed
···
53
53
zen-browser.inputs.home-manager.follows = "home-manager";
54
54
};
55
55
56
56
-
outputs = { self, nixpkgs, ... }:
56
56
+
outputs =
57
57
+
{ self, nixpkgs, ... }:
57
58
let
58
59
inherit (self) outputs;
59
60
inherit (flake-lib) forAllSystems;
···
61
62
flake-lib = import ./lib/flake (nixpkgs // { inherit self; });
62
63
63
64
# This should be the only constructed nixpkgs instances in this flake
64
64
-
allPkgs = forAllSystems (system: (import nixpkgs {
65
65
-
inherit system;
66
66
-
config.allowUnfreePredicate = import ./lib/unfree.nix { lib = nixpkgs.lib; };
67
67
-
overlays = [ outputs.overlays.all ];
68
68
-
}));
65
65
+
allPkgs = forAllSystems (
66
66
+
system:
67
67
+
import nixpkgs {
68
68
+
inherit system;
69
69
+
config.allowUnfreePredicate = import ./lib/unfree.nix { lib = nixpkgs.lib; };
70
70
+
overlays = [ outputs.overlays.all ];
71
71
+
}
72
72
+
);
69
73
70
74
forAllPkgs = func: forAllSystems (system: func allPkgs.${system});
71
75
in
72
76
{
73
73
-
formatter = forAllPkgs (pkgs: pkgs.nixpkgs-fmt);
77
77
+
formatter = forAllPkgs (pkgs: pkgs.nixfmt-tree);
74
78
75
79
inherit flake-lib; # Nonstandard
76
80
lib = forAllPkgs (import ./lib);
+5
-4
home-manager/fragments/agenix.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, lib
4
4
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
lib,
5
5
+
...
5
6
}:
6
7
7
8
let
+4
-3
home-manager/fragments/aws.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
let
+9
-6
home-manager/fragments/chromium.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
16
17
programs.chromium = {
17
18
enable = true;
18
19
19
19
-
dictionaries = with pkgs.hunspellDictsChromium; [ en_US fr_FR ];
20
20
+
dictionaries = with pkgs.hunspellDictsChromium; [
21
21
+
en_US
22
22
+
fr_FR
23
23
+
];
20
24
21
25
extensions = [
22
26
# Language Tool
···
31
35
};
32
36
};
33
37
}
34
34
-
+5
-5
home-manager/fragments/compose-key.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, lib
4
4
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
lib,
5
5
+
...
5
6
}:
6
6
-
7
7
8
8
let
9
9
inherit (self.outputs) homeManagerModules;
+3
-6
home-manager/fragments/default.nix
reviewed
···
1
1
{
2
2
# Provides the NixOS configuration if HM was loaded through the NixOS module
3
3
-
osConfig ? null
4
4
-
, ...
3
3
+
osConfig ? null,
4
4
+
...
5
5
}:
6
6
7
7
{
···
38
38
config = {
39
39
programs.home-manager.enable = osConfig == null;
40
40
41
41
-
home.stateVersion =
42
42
-
if osConfig != null
43
43
-
then osConfig.system.stateVersion
44
44
-
else "24.05";
41
41
+
home.stateVersion = if osConfig != null then osConfig.system.stateVersion else "24.05";
45
42
46
43
# Reload system units when switching config
47
44
systemd.user.startServices = "sd-switch";
+17
-11
home-manager/fragments/epita.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
11
12
12
13
mount-epita-afs = pkgs.writeShellApplication {
13
14
name = "mount-epita-afs";
14
14
-
runtimeInputs = with pkgs; [ krb5 sshfs ];
15
15
+
runtimeInputs = with pkgs; [
16
16
+
krb5
17
17
+
sshfs
18
18
+
];
15
19
text = ''
16
20
USERNAME="${epita-forge-username}"
17
21
···
44
48
};
45
49
46
50
# The forge uses master as its default branch
47
47
-
programs.git.includes = [{
48
48
-
condition = "gitdir:~/Development/forge.epita.fr/";
49
49
-
contents = {
50
50
-
init.defaultBranch = "master";
51
51
-
};
52
52
-
}];
51
51
+
programs.git.includes = [
52
52
+
{
53
53
+
condition = "gitdir:~/Development/forge.epita.fr/";
54
54
+
contents = {
55
55
+
init.defaultBranch = "master";
56
56
+
};
57
57
+
}
58
58
+
];
53
59
54
60
home.packages = [
55
61
# Useful to connect to EPITA related services
+10
-5
home-manager/fragments/firefox.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, lib
4
4
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
lib,
5
5
+
...
5
6
}:
6
7
7
8
let
···
135
136
search = {
136
137
force = true;
137
138
default = "ddg";
138
138
-
order = [ "ddg" "wikipedia" "google" ];
139
139
+
order = [
140
140
+
"ddg"
141
141
+
"wikipedia"
142
142
+
"google"
143
143
+
];
139
144
};
140
145
};
141
146
};
+9
-7
home-manager/fragments/foot.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
1
1
+
{
2
2
+
config,
3
3
+
lib,
3
4
4
4
-
, isDarwin
5
5
-
, ...
5
5
+
isDarwin,
6
6
+
...
6
7
}:
7
8
8
9
let
···
15
16
16
17
config = lib.mkIf cfg.enable {
17
18
assertions = [
18
18
-
{ assertion = !isDarwin; message = "this is a non-darwin fragment"; }
19
19
+
{
20
20
+
assertion = !isDarwin;
21
21
+
message = "this is a non-darwin fragment";
22
22
+
}
19
23
];
20
24
21
25
home.sessionVariables.TERMINAL = lib.getExe config.programs.foot.package;
···
28
32
};
29
33
};
30
34
}
31
31
-
32
32
-
+19
-13
home-manager/fragments/git.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, lpkgs
5
5
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
lpkgs,
6
6
+
...
6
7
}:
7
8
8
9
let
···
131
132
# TODO: change to $PROJECTS env var?
132
133
leaveTool = {
133
134
defaultFolder = "${config.home.homeDirectory}/Development";
134
134
-
checks = [ "dirty" "ahead-branches" ];
135
135
+
checks = [
136
136
+
"dirty"
137
137
+
"ahead-branches"
138
138
+
];
135
139
};
136
140
};
137
141
};
138
142
139
139
-
home.packages = (with pkgs; [
140
140
-
glab
143
143
+
home.packages =
144
144
+
(with pkgs; [
145
145
+
glab
141
146
142
142
-
lazyjj
147
147
+
lazyjj
143
148
144
144
-
difftastic
145
145
-
]) ++ lib.optionals (!flags.onlyCached) [
146
146
-
lpkgs.git-leave
147
147
-
];
149
149
+
difftastic
150
150
+
])
151
151
+
++ lib.optionals (!flags.onlyCached) [
152
152
+
lpkgs.git-leave
153
153
+
];
148
154
149
155
programs.gh.enable = true;
150
156
+49
-28
home-manager/fragments/helix.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, pkgs
4
4
-
, upkgs
5
5
-
, lpkgs
6
6
-
, lib
7
7
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
pkgs,
5
5
+
upkgs,
6
6
+
lpkgs,
7
7
+
lib,
8
8
+
...
8
9
}:
9
10
10
11
let
···
26
27
27
28
config = lib.mkIf cfg.enable {
28
29
assertions = [
29
29
-
{ assertion = config.local.fragment.agenix.enable; message = "`helix` fragment depends on `agenix` fragment"; }
30
30
+
{
31
31
+
assertion = config.local.fragment.agenix.enable;
32
32
+
message = "`helix` fragment depends on `agenix` fragment";
33
33
+
}
30
34
];
31
35
32
36
stylix.targets.helix.enable = false;
···
92
96
};
93
97
};
94
98
95
95
-
extraPackages = with pkgs; [
96
96
-
clang-tools
97
97
-
gopls
98
98
-
kotlin-language-server
99
99
-
ltex-ls
100
100
-
marksman
101
101
-
nil
102
102
-
nodePackages.bash-language-server
103
103
-
nodePackages.typescript-language-server
104
104
-
taplo
105
105
-
typos-lsp
106
106
-
vscode-langservers-extracted
107
107
-
yaml-language-server
108
108
-
] ++ lib.optionals (!flags.onlyCached) [
109
109
-
lpkgs.wakatime-ls
110
110
-
];
99
99
+
extraPackages =
100
100
+
with pkgs;
101
101
+
[
102
102
+
clang-tools
103
103
+
gopls
104
104
+
kotlin-language-server
105
105
+
ltex-ls
106
106
+
marksman
107
107
+
nil
108
108
+
nodePackages.bash-language-server
109
109
+
nodePackages.typescript-language-server
110
110
+
taplo
111
111
+
typos-lsp
112
112
+
vscode-langservers-extracted
113
113
+
yaml-language-server
114
114
+
]
115
115
+
++ lib.optionals (!flags.onlyCached) [
116
116
+
lpkgs.wakatime-ls
117
117
+
];
111
118
112
119
languages = {
113
120
language-server = {
114
114
-
rust-analyzer.config = { check.command = "clippy"; };
121
121
+
rust-analyzer.config = {
122
122
+
check.command = "clippy";
123
123
+
};
115
124
116
125
ltex-ls.command = "ltex-ls";
117
126
typos-ls.command = "typos-lsp";
···
120
129
121
130
language =
122
131
let
123
123
-
global-lsps = [ "wakatime-ls" "typos-ls" ];
124
124
-
mk-lang = name: language-servers: extra: { inherit name; language-servers = language-servers ++ global-lsps; } // extra;
132
132
+
global-lsps = [
133
133
+
"wakatime-ls"
134
134
+
"typos-ls"
135
135
+
];
136
136
+
mk-lang =
137
137
+
name: language-servers: extra:
138
138
+
{
139
139
+
inherit name;
140
140
+
language-servers = language-servers ++ global-lsps;
141
141
+
}
142
142
+
// extra;
125
143
in
126
144
[
127
145
(mk-lang "c" [ "clangd" ] {
128
128
-
formatter = { command = lib.getExe' pkgs.clang-tools "clang-format"; args = [ ]; };
146
146
+
formatter = {
147
147
+
command = lib.getExe' pkgs.clang-tools "clang-format";
148
148
+
args = [ ];
149
149
+
};
129
150
})
130
151
(mk-lang "markdown" [ "marksman" ] {
131
152
soft-wrap.enable = true;
+4
-3
home-manager/fragments/imv.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
let
+19
-7
home-manager/fragments/jujutsu.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, upkgs
5
5
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
upkgs,
6
6
+
...
6
7
}:
7
8
8
9
let
···
72
73
merge-editor = ":builtin";
73
74
pager = ":builtin";
74
75
75
75
-
diff-formatter = [ "difft" "--color=always" "--display=inline" "$left" "$right" ];
76
76
+
diff-formatter = [
77
77
+
"difft"
78
78
+
"--color=always"
79
79
+
"--display=inline"
80
80
+
"$left"
81
81
+
"$right"
82
82
+
];
76
83
};
77
84
78
85
aliases = {
79
79
-
ui = [ "util" "exec" "--" "lazyjj" ];
86
86
+
ui = [
87
87
+
"util"
88
88
+
"exec"
89
89
+
"--"
90
90
+
"lazyjj"
91
91
+
];
80
92
};
81
93
82
94
git = {
+31
-11
home-manager/fragments/kanshi.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
1
1
+
{
2
2
+
config,
3
3
+
lib,
3
4
4
4
-
, isDarwin
5
5
-
, ...
5
5
+
isDarwin,
6
6
+
...
6
7
}:
7
8
8
9
let
···
15
16
16
17
config = lib.mkIf cfg.enable {
17
18
assertions = [
18
18
-
{ assertion = !isDarwin; message = "this is a non-darwin fragment"; }
19
19
+
{
20
20
+
assertion = !isDarwin;
21
21
+
message = "this is a non-darwin fragment";
22
22
+
}
19
23
];
20
24
21
25
services.kanshi = {
22
26
enable = true;
23
27
24
28
settings = [
25
25
-
{ output = { criteria = "eDP-1"; scale = 2.0; }; }
29
29
+
{
30
30
+
output = {
31
31
+
criteria = "eDP-1";
32
32
+
scale = 2.0;
33
33
+
};
34
34
+
}
26
35
27
36
{
28
37
profile.name = "undocked";
···
35
44
profile.name = "eizo-dock";
36
45
# position external screen centered above
37
46
profile.outputs = [
38
38
-
{ criteria = "Eizo Nanao Corporation CG222W 29804118"; position = "0,0"; }
39
39
-
{ criteria = "eDP-1"; position = "120,1050"; }
47
47
+
{
48
48
+
criteria = "Eizo Nanao Corporation CG222W 29804118";
49
49
+
position = "0,0";
50
50
+
}
51
51
+
{
52
52
+
criteria = "eDP-1";
53
53
+
position = "120,1050";
54
54
+
}
40
55
];
41
56
}
42
57
···
44
59
profile.name = "hdmi-default";
45
60
# position external screen right
46
61
profile.outputs = [
47
47
-
{ criteria = "eDP-1"; position = "0,0"; }
48
48
-
{ criteria = "HDMI"; position = "1440,0"; }
62
62
+
{
63
63
+
criteria = "eDP-1";
64
64
+
position = "0,0";
65
65
+
}
66
66
+
{
67
67
+
criteria = "HDMI";
68
68
+
position = "1440,0";
69
69
+
}
49
70
];
50
71
}
51
72
];
52
73
};
53
74
};
54
75
}
55
55
-
+11
-6
home-manager/fragments/kitty.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
1
1
+
{
2
2
+
config,
3
3
+
lib,
3
4
4
4
-
, isDarwin
5
5
-
, ...
5
5
+
isDarwin,
6
6
+
...
6
7
}:
7
8
8
9
let
···
20
21
21
22
config = lib.mkIf cfg.enable {
22
23
assertions = [
23
23
-
{ assertion = (!isDarwin) || config.programs.fish.enable; message = "`kitty` fragment depends on `fish` program on darwin platforms"; }
24
24
+
{
25
25
+
assertion = (!isDarwin) || config.programs.fish.enable;
26
26
+
message = "`kitty` fragment depends on `fish` program on darwin platforms";
27
27
+
}
24
28
];
25
29
26
30
home.sessionVariables.TERMINAL = lib.getExe config.programs.kitty.package;
···
31
35
confirm_os_window_close = 0;
32
36
enable_audio_bell = "no";
33
37
macos_option_as_alt = "left";
34
34
-
} // lib.optionalAttrs isDarwin {
38
38
+
}
39
39
+
// lib.optionalAttrs isDarwin {
35
40
# Workaround to avoid launching fish as a login shell
36
41
shell = "zsh -c fish";
37
42
};
+5
-4
home-manager/fragments/launcher.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
+9
-6
home-manager/fragments/rust.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
49
50
target = {
50
51
x86_64-unknown-linux-gnu = {
51
52
linker = clang;
52
52
-
rustflags = [ "-Clink-arg=--ld-path=${wild}" "-Ctarget-cpu=native" ];
53
53
+
rustflags = [
54
54
+
"-Clink-arg=--ld-path=${wild}"
55
55
+
"-Ctarget-cpu=native"
56
56
+
];
53
57
};
54
58
x86_64-apple-darwin.rustflags = [ "-Ctarget-cpu=native" ];
55
59
aarch64-apple-darwin.rustflags = [ "-Ctarget-cpu=native" ];
···
59
63
};
60
64
};
61
65
}
62
62
-
+5
-4
home-manager/fragments/screen.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, lib
4
4
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
lib,
5
5
+
...
5
6
}:
6
7
7
8
let
+13
-10
home-manager/fragments/shell.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, upkgs
5
5
-
, lpkgs
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
upkgs,
6
6
+
lpkgs,
6
7
7
7
-
, isDarwin
8
8
-
, ...
8
8
+
isDarwin,
9
9
+
...
9
10
}:
10
11
11
12
let
···
153
154
# Quickly explore a derivation (using registry syntax)
154
155
# e.g. `cdd nixpkgs#fontforge` or `cdd unixpkgs#fontforge`
155
156
cdd = "cd (nix build --no-link --print-out-paths $argv | ${lib.getExe pkgs.fzf})";
156
156
-
} // lib.optionalAttrs (!flags.onlyCached) {
157
157
+
}
158
158
+
// lib.optionalAttrs (!flags.onlyCached) {
157
159
# Quickly get outta here to test something
158
160
cdtmp = ''
159
161
set -l name $argv[1] (${lib.getExe lpkgs.names})
···
162
164
mkdir $dir
163
165
cd $dir
164
166
'';
165
165
-
} // lib.optionalAttrs (!isDarwin) {
167
167
+
}
168
168
+
// lib.optionalAttrs (!isDarwin) {
166
169
change-mac = ''
167
170
set dev (nmcli --get-values GENERAL.DEVICE,GENERAL.TYPE device show | sed '/^wifi/!{h;d;};x;q')
168
171
sudo ip link set $dev down
169
169
-
172
172
+
170
173
if test "$argv[1]" = "reset";
171
174
sudo ${lib.getExe pkgs.macchanger} --permanent $dev
172
175
else;
+18
-8
home-manager/fragments/stylix.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, lib
4
4
-
, pkgs
5
5
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
lib,
5
5
+
pkgs,
6
6
+
...
6
7
}:
7
8
8
9
let
···
34
35
image = ../../assets/wallpaper-binary-cloud.png;
35
36
36
37
fonts = {
37
37
-
sansSerif = { package = pkgs.inter; name = "Inter"; };
38
38
-
serif = { package = pkgs.merriweather; name = "Merriweather"; };
39
39
-
monospace = { package = pkgs.nerd-fonts.jetbrains-mono; name = "JetBrainsMono Nerd Font"; };
38
38
+
sansSerif = {
39
39
+
package = pkgs.inter;
40
40
+
name = "Inter";
41
41
+
};
42
42
+
serif = {
43
43
+
package = pkgs.merriweather;
44
44
+
name = "Merriweather";
45
45
+
};
46
46
+
monospace = {
47
47
+
package = pkgs.nerd-fonts.jetbrains-mono;
48
48
+
name = "JetBrainsMono Nerd Font";
49
49
+
};
40
50
41
51
sizes = {
42
52
applications = 12;
+80
-26
home-manager/fragments/sway.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
4
5
5
5
-
, isDarwin
6
6
-
, ...
6
6
+
isDarwin,
7
7
+
...
7
8
}:
8
9
9
10
let
10
11
cfg = config.local.fragment.sway;
11
12
cfg-sway = config.wayland.windowManager.sway.config;
12
13
13
13
-
workspacesRange = lib.zipListsWith (key-idx: workspace-idx: { inherit key-idx workspace-idx; }) [ 1 2 3 4 5 6 7 8 9 0 ] (lib.range 1 10);
14
14
+
workspacesRange = lib.zipListsWith (key-idx: workspace-idx: { inherit key-idx workspace-idx; }) (
15
15
+
(lib.range 1 9) ++ [ 0 ]
16
16
+
) (lib.range 1 10);
14
17
in
15
18
{
16
19
options.local.fragment.sway.enable = lib.mkEnableOption ''
···
19
22
20
23
config = lib.mkIf cfg.enable {
21
24
assertions = [
22
22
-
{ assertion = !isDarwin; message = "this is a non-darwin fragment"; }
25
25
+
{
26
26
+
assertion = !isDarwin;
27
27
+
message = "this is a non-darwin fragment";
28
28
+
}
23
29
];
24
30
25
31
programs.swaylock = {
···
101
107
}
102
108
];
103
109
events = [
104
104
-
{ event = "before-sleep"; command = "${playerctl} pause; ${display "off"}; ${loginctl} lock-session"; }
105
105
-
{ event = "after-resume"; command = display "on"; }
106
106
-
{ event = "lock"; command = lock; }
107
107
-
{ event = "unlock"; command = display "on"; }
110
110
+
{
111
111
+
event = "before-sleep";
112
112
+
command = "${playerctl} pause; ${display "off"}; ${loginctl} lock-session";
113
113
+
}
114
114
+
{
115
115
+
event = "after-resume";
116
116
+
command = display "on";
117
117
+
}
118
118
+
{
119
119
+
event = "lock";
120
120
+
command = lock;
121
121
+
}
122
122
+
{
123
123
+
event = "unlock";
124
124
+
command = display "on";
125
125
+
}
108
126
];
109
127
};
110
128
···
137
155
# Toggle floating mode for some specific windows
138
156
{
139
157
# TODO: Bitwarden window glitches on opening
140
140
-
criteria = { app_id = "^firefox$"; title = "Bitwarden Password Manager"; };
158
158
+
criteria = {
159
159
+
app_id = "^firefox$";
160
160
+
title = "Bitwarden Password Manager";
161
161
+
};
141
162
command = ''floating enable'';
142
163
}
143
164
{
144
165
# Toggles floating for every Unity window but the main one
145
166
# Only the main window begins with `Unity - `
146
146
-
criteria = { title = "^((?!^Unity - ).)*$"; class = "^Unity$"; instance = "^Unity$"; };
167
167
+
criteria = {
168
168
+
title = "^((?!^Unity - ).)*$";
169
169
+
class = "^Unity$";
170
170
+
instance = "^Unity$";
171
171
+
};
147
172
command = ''floating enable'';
148
173
}
149
174
150
175
# Inhibit IDLE when these are fullscreen
151
151
-
{ criteria.app_id = "firefox"; command = "inhibit_idle fullscreen"; }
152
152
-
{ criteria.app_id = "mpv"; command = "inhibit_idle fullscreen"; }
153
153
-
{ criteria.app_id = "spotify"; command = "inhibit_idle fullscreen"; }
154
154
-
{ criteria.app_id = "zen-beta"; command = "inhibit_idle fullscreen"; }
176
176
+
{
177
177
+
criteria.app_id = "firefox";
178
178
+
command = "inhibit_idle fullscreen";
179
179
+
}
180
180
+
{
181
181
+
criteria.app_id = "mpv";
182
182
+
command = "inhibit_idle fullscreen";
183
183
+
}
184
184
+
{
185
185
+
criteria.app_id = "spotify";
186
186
+
command = "inhibit_idle fullscreen";
187
187
+
}
188
188
+
{
189
189
+
criteria.app_id = "zen-beta";
190
190
+
command = "inhibit_idle fullscreen";
191
191
+
}
155
192
];
156
193
};
157
194
···
180
217
# "type:touchpad" = { events = "disabled_on_external_mouse"; };
181
218
182
219
# Disable touchscreen by default
183
183
-
"type:touch" = { events = "disabled"; };
220
220
+
"type:touch" = {
221
221
+
events = "disabled";
222
222
+
};
184
223
};
185
224
186
225
output."*".bg = lib.mkForce "#000000 solid_color";
···
268
307
"--locked XF86AudioMicMute" = "exec ${pamixer} --default-source --toggle-mute";
269
308
"--locked XF86MonBrightnessUp" = "exec ${brightnessctl} --exponent set 5%+";
270
309
"--locked XF86MonBrightnessDown" = "exec ${brightnessctl} --exponent set 5%- --min-value=1";
271
271
-
"--locked XF86TouchpadToggle" = ''input "type:touchpad" events toggle enabled disabled_on_external_mouse'';
310
310
+
"--locked XF86TouchpadToggle" =
311
311
+
''input "type:touchpad" events toggle enabled disabled_on_external_mouse'';
272
312
}
273
273
-
// lib.listToAttrs (lib.flatten (map
274
274
-
({ key-idx, workspace-idx }: [
275
275
-
{ name = "${mod}+${toString key-idx}"; value = "workspace number ${toString workspace-idx}"; }
276
276
-
{ name = "${mod}+Alt+${toString key-idx}"; value = "move container to workspace number ${toString workspace-idx}"; }
277
277
-
{ name = "${mod}+Shift+${toString key-idx}"; value = "move container to workspace number ${toString workspace-idx}; workspace number ${toString workspace-idx}"; }
278
278
-
])
279
279
-
workspacesRange));
313
313
+
// lib.listToAttrs (
314
314
+
lib.flatten (
315
315
+
map (
316
316
+
{ key-idx, workspace-idx }:
317
317
+
[
318
318
+
{
319
319
+
name = "${mod}+${toString key-idx}";
320
320
+
value = "workspace number ${toString workspace-idx}";
321
321
+
}
322
322
+
{
323
323
+
name = "${mod}+Alt+${toString key-idx}";
324
324
+
value = "move container to workspace number ${toString workspace-idx}";
325
325
+
}
326
326
+
{
327
327
+
name = "${mod}+Shift+${toString key-idx}";
328
328
+
value = "move container to workspace number ${toString workspace-idx}; workspace number ${toString workspace-idx}";
329
329
+
}
330
330
+
]
331
331
+
) workspacesRange
332
332
+
)
333
333
+
);
280
334
};
281
335
};
282
336
+40
-27
home-manager/fragments/swaybar.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
37
38
| select(.identifier=="${integrated-keyboard-id}")
38
39
| .libinput.send_events')
39
40
'';
40
40
-
click = [{
41
41
-
button = "left";
42
42
-
cmd = ''
43
43
-
${swaymsg} input ${integrated-keyboard-id} events toggle;
44
44
-
${swaymsg} input ${integrated-keyboard-id-bis} events toggle
45
45
-
'';
46
46
-
update = true;
47
47
-
}];
41
41
+
click = [
42
42
+
{
43
43
+
button = "left";
44
44
+
cmd = ''
45
45
+
${swaymsg} input ${integrated-keyboard-id} events toggle;
46
46
+
${swaymsg} input ${integrated-keyboard-id-bis} events toggle
47
47
+
'';
48
48
+
update = true;
49
49
+
}
50
50
+
];
48
51
interval = "once";
49
52
}
50
53
51
54
{
52
55
block = "custom";
53
56
command = "echo $(${lib.getExe' pkgs.mako "makoctl"} mode)";
54
54
-
click = [{
55
55
-
button = "left";
56
56
-
# Toggle DND mode
57
57
-
cmd = "${lib.getExe' pkgs.mako "makoctl"} mode -t dnd";
58
58
-
update = true;
59
59
-
}];
57
57
+
click = [
58
58
+
{
59
59
+
button = "left";
60
60
+
# Toggle DND mode
61
61
+
cmd = "${lib.getExe' pkgs.mako "makoctl"} mode -t dnd";
62
62
+
update = true;
63
63
+
}
64
64
+
];
60
65
interval = "once";
61
66
}
62
67
···
66
71
block = "keyboard_layout";
67
72
driver = "sway";
68
73
}
69
69
-
{ block = "backlight"; device = "intel_backlight"; }
74
74
+
{
75
75
+
block = "backlight";
76
76
+
device = "intel_backlight";
77
77
+
}
70
78
{ block = "sound"; }
71
79
{ block = "battery"; }
72
80
{
···
79
87
};
80
88
81
89
wayland.windowManager.sway.config.bars = [
82
82
-
({
83
83
-
statusCommand = "${lib.getExe pkgs.i3status-rust} ${config.home.homeDirectory}/${config.xdg.configFile."i3status-rust/config-default.toml".target}";
90
90
+
(
91
91
+
{
92
92
+
statusCommand = "${lib.getExe pkgs.i3status-rust} ${config.home.homeDirectory}/${
93
93
+
config.xdg.configFile."i3status-rust/config-default.toml".target
94
94
+
}";
84
95
85
85
-
hiddenState = "hide";
86
86
-
mode = "hide";
96
96
+
hiddenState = "hide";
97
97
+
mode = "hide";
87
98
88
88
-
# TODO: fix color theme on the bar
89
89
-
# TODO: would be nice to have rounded corners and padding when appearing
99
99
+
# TODO: fix color theme on the bar
100
100
+
# TODO: would be nice to have rounded corners and padding when appearing
90
101
91
91
-
extraConfig = "icon_theme Papirus";
92
92
-
} // config.stylix.targets.sway.exportedBarConfig)
102
102
+
extraConfig = "icon_theme Papirus";
103
103
+
}
104
104
+
// config.stylix.targets.sway.exportedBarConfig
105
105
+
)
93
106
];
94
107
};
95
108
}
+4
-4
home-manager/fragments/thunderbird.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
let
···
40
41
};
41
42
};
42
43
}
43
43
-
+58
-55
home-manager/fragments/tools.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, lpkgs
5
5
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
lpkgs,
6
6
+
...
6
7
}:
7
8
8
9
let
···
15
16
'';
16
17
17
18
config = lib.mkIf cfg.enable {
18
18
-
home.packages = (with pkgs; [
19
19
-
# Man
20
20
-
ascii
21
21
-
man-pages
19
19
+
home.packages =
20
20
+
(with pkgs; [
21
21
+
# Man
22
22
+
ascii
23
23
+
man-pages
22
24
23
23
-
# TUIs
24
24
-
btop
25
25
-
glow
25
25
+
# TUIs
26
26
+
btop
27
27
+
glow
26
28
27
27
-
# CLIs
28
28
-
asciinema
29
29
-
calc
30
30
-
csvlens
31
31
-
delta
32
32
-
dogdns
33
33
-
dust
34
34
-
encfs
35
35
-
fastfetch
36
36
-
fd
37
37
-
ffmpeg
38
38
-
file
39
39
-
fzf
40
40
-
gemini-cli
41
41
-
inetutils
42
42
-
jq
43
43
-
just
44
44
-
killall
45
45
-
libnotify
46
46
-
lsof
47
47
-
mediainfo
48
48
-
openssl
49
49
-
otree
50
50
-
ouch
51
51
-
parallel
52
52
-
perf
53
53
-
pv
54
54
-
restic
55
55
-
ripgrep
56
56
-
speedtest-go
57
57
-
srgn
58
58
-
sshfs
59
59
-
termimage
60
60
-
tlrc
61
61
-
tokei
62
62
-
trash-cli
63
63
-
uni
64
64
-
unzip
65
65
-
vlock
66
66
-
wormhole-rs
67
67
-
]) ++ lib.optionals (!flags.onlyCached) [
68
68
-
lpkgs.nix-alien
69
69
-
];
29
29
+
# CLIs
30
30
+
asciinema
31
31
+
calc
32
32
+
csvlens
33
33
+
delta
34
34
+
dogdns
35
35
+
dust
36
36
+
encfs
37
37
+
fastfetch
38
38
+
fd
39
39
+
ffmpeg
40
40
+
file
41
41
+
fzf
42
42
+
gemini-cli
43
43
+
inetutils
44
44
+
jq
45
45
+
just
46
46
+
killall
47
47
+
libnotify
48
48
+
lsof
49
49
+
mediainfo
50
50
+
openssl
51
51
+
otree
52
52
+
ouch
53
53
+
parallel
54
54
+
perf
55
55
+
pv
56
56
+
restic
57
57
+
ripgrep
58
58
+
speedtest-go
59
59
+
srgn
60
60
+
sshfs
61
61
+
termimage
62
62
+
tlrc
63
63
+
tokei
64
64
+
trash-cli
65
65
+
uni
66
66
+
unzip
67
67
+
vlock
68
68
+
wormhole-rs
69
69
+
])
70
70
+
++ lib.optionals (!flags.onlyCached) [
71
71
+
lpkgs.nix-alien
72
72
+
];
70
73
71
74
programs.fish.shellAbbrs = {
72
75
# Use newer tools
+33
-29
home-manager/fragments/vscodium.nix
reviewed
···
1
1
-
{ lib
2
2
-
, config
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
lib,
3
3
+
config,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
17
18
enable = true;
18
19
package = pkgs.vscodium;
19
20
20
20
-
profiles.default.extensions = with pkgs.vscode-extensions; [
21
21
-
bradlc.vscode-tailwindcss
22
22
-
dbaeumer.vscode-eslint
23
23
-
eamodio.gitlens
24
24
-
esbenp.prettier-vscode
25
25
-
ms-vsliveshare.vsliveshare
26
26
-
usernamehw.errorlens
27
27
-
vue.volar
28
28
-
wakatime.vscode-wakatime
29
29
-
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
30
30
-
{
31
31
-
# https://marketplace.visualstudio.com/items?itemName=meganrogge.template-string-converter
32
32
-
name = "template-string-converter";
33
33
-
publisher = "meganrogge";
34
34
-
version = "0.6.1";
35
35
-
sha256 = "sha256-w0ppzh0m/9Hw3BPJbAKsNcMStdzoH9ODf3zweRcCG5k=";
36
36
-
}
37
37
-
{
38
38
-
# https://marketplace.visualstudio.com/items?itemName=akamud.vscode-theme-onedark
39
39
-
name = "vscode-theme-onedark";
40
40
-
publisher = "akamud";
41
41
-
version = "2.3.0";
42
42
-
sha256 = "sha256-8GGv4L4poTYjdkDwZxgNYajuEmIB5XF1mhJMxO2Ho84=";
43
43
-
}
44
44
-
];
21
21
+
profiles.default.extensions =
22
22
+
with pkgs.vscode-extensions;
23
23
+
[
24
24
+
bradlc.vscode-tailwindcss
25
25
+
dbaeumer.vscode-eslint
26
26
+
eamodio.gitlens
27
27
+
esbenp.prettier-vscode
28
28
+
ms-vsliveshare.vsliveshare
29
29
+
usernamehw.errorlens
30
30
+
vue.volar
31
31
+
wakatime.vscode-wakatime
32
32
+
]
33
33
+
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
34
34
+
{
35
35
+
# https://marketplace.visualstudio.com/items?itemName=meganrogge.template-string-converter
36
36
+
name = "template-string-converter";
37
37
+
publisher = "meganrogge";
38
38
+
version = "0.6.1";
39
39
+
sha256 = "sha256-w0ppzh0m/9Hw3BPJbAKsNcMStdzoH9ODf3zweRcCG5k=";
40
40
+
}
41
41
+
{
42
42
+
# https://marketplace.visualstudio.com/items?itemName=akamud.vscode-theme-onedark
43
43
+
name = "vscode-theme-onedark";
44
44
+
publisher = "akamud";
45
45
+
version = "2.3.0";
46
46
+
sha256 = "sha256-8GGv4L4poTYjdkDwZxgNYajuEmIB5XF1mhJMxO2Ho84=";
47
47
+
}
48
48
+
];
45
49
};
46
50
};
47
51
}
+38
-14
home-manager/fragments/waybar.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
101
102
format-full = "{capacity}% {icon}";
102
103
format-charging = "{capacity}% ";
103
104
format-plugged = "{capacity}% ";
104
104
-
format-icons = [ " " " " " " " " " " ];
105
105
+
format-icons = [
106
106
+
" "
107
107
+
" "
108
108
+
" "
109
109
+
" "
110
110
+
" "
111
111
+
];
105
112
};
106
113
107
114
pulseaudio = {
···
122
129
phone = " ";
123
130
portable = " ";
124
131
car = " ";
125
125
-
default = [ "" " " " " ];
132
132
+
default = [
133
133
+
""
134
134
+
" "
135
135
+
" "
136
136
+
];
126
137
};
127
138
128
139
on-click = "pavucontrol";
···
135
146
136
147
cava = {
137
148
bars = 6;
138
138
-
format-icons = [ "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█" ];
149
149
+
format-icons = [
150
150
+
"▁"
151
151
+
"▂"
152
152
+
"▃"
153
153
+
"▄"
154
154
+
"▅"
155
155
+
"▆"
156
156
+
"▇"
157
157
+
"█"
158
158
+
];
139
159
bar_delimiter = 0;
140
160
hide_on_silence = true;
141
161
};
···
163
183
"clock"
164
184
"group/misc"
165
185
];
166
166
-
} // modules-settings;
186
186
+
}
187
187
+
// modules-settings;
167
188
168
189
additional = {
169
190
mode = "hide";
···
188
209
"clock"
189
210
"group/misc"
190
211
];
191
191
-
} // modules-settings;
212
212
+
}
213
213
+
// modules-settings;
192
214
};
193
215
194
216
style = ''
···
267
289
'';
268
290
};
269
291
270
270
-
wayland.windowManager.sway.config.bars = [{
271
271
-
command = lib.getExe pkgs.waybar;
292
292
+
wayland.windowManager.sway.config.bars = [
293
293
+
{
294
294
+
command = lib.getExe pkgs.waybar;
272
295
273
273
-
mode = "hide";
274
274
-
hiddenState = "hide";
275
275
-
}];
296
296
+
mode = "hide";
297
297
+
hiddenState = "hide";
298
298
+
}
299
299
+
];
276
300
};
277
301
}
+18
-7
home-manager/fragments/xdg-mime.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
19
20
20
21
config = lib.mkIf cfg.enable {
21
22
assertions = [
22
22
-
{ assertion = config.programs.firefox.enable; message = "`xdg-mime` fragment depends on `firefox` program"; }
23
23
-
{ assertion = config.programs.imv.enable; message = "`xdg-mime` fragment depends on `imv` program"; }
24
24
-
{ assertion = lib.lists.count (drv: (drv.pname or "") == pkgs.nautilus.pname) config.home.packages > 0; message = "`xdg-mime` fragment depends on `nautilus` program"; }
23
23
+
{
24
24
+
assertion = config.programs.firefox.enable;
25
25
+
message = "`xdg-mime` fragment depends on `firefox` program";
26
26
+
}
27
27
+
{
28
28
+
assertion = config.programs.imv.enable;
29
29
+
message = "`xdg-mime` fragment depends on `imv` program";
30
30
+
}
31
31
+
{
32
32
+
assertion =
33
33
+
lib.lists.count (drv: (drv.pname or "") == pkgs.nautilus.pname) config.home.packages > 0;
34
34
+
message = "`xdg-mime` fragment depends on `nautilus` program";
35
35
+
}
25
36
];
26
37
27
38
xdg.enable = true;
+5
-4
home-manager/fragments/zed.nix
reviewed
···
1
1
-
{ lib
2
2
-
, config
3
3
-
, upkgs
4
4
-
, ...
1
1
+
{
2
2
+
lib,
3
3
+
config,
4
4
+
upkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
+4
-3
home-manager/fragments/zellij/default.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
let
+3
-2
home-manager/options.nix
reviewed
···
1
1
-
{ lib
2
2
-
, ...
1
1
+
{
2
2
+
lib,
3
3
+
...
3
4
}:
4
5
5
6
{
+9
-5
home-manager/profiles/desktop.nix
reviewed
···
1
1
-
{ config
2
2
-
, pkgs
1
1
+
{
2
2
+
config,
3
3
+
pkgs,
3
4
4
4
-
, isDarwin
5
5
-
, ...
5
5
+
isDarwin,
6
6
+
...
6
7
}:
7
8
8
9
{
9
10
config = {
10
11
assertions = [
11
11
-
{ assertion = !isDarwin; message = "this is a HM non-darwin config"; }
12
12
+
{
13
13
+
assertion = !isDarwin;
14
14
+
message = "this is a HM non-darwin config";
15
15
+
}
12
16
];
13
17
14
18
local.fragment = {
+10
-6
home-manager/profiles/lightweight.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, pkgs
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
pkgs,
4
5
5
5
-
, isDarwin
6
6
-
, ...
6
6
+
isDarwin,
7
7
+
...
7
8
}:
8
9
9
10
let
···
14
15
15
16
config = {
16
17
assertions = [
17
17
-
{ assertion = !isDarwin; message = "this is a HM non-darwin config"; }
18
18
+
{
19
19
+
assertion = !isDarwin;
20
20
+
message = "this is a HM non-darwin config";
21
21
+
}
18
22
];
19
23
20
24
local.flags.onlyCached = true;
+11
-7
home-manager/profiles/macintosh.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, pkgs
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
pkgs,
4
5
5
5
-
, isDarwin
6
6
+
isDarwin,
6
7
# Provides the NixOS configuration if HM was loaded through the NixOS module
7
7
-
, osConfig ? null
8
8
-
, ...
8
8
+
osConfig ? null,
9
9
+
...
9
10
}:
10
11
11
12
let
···
23
24
24
25
config = {
25
26
assertions = [
26
26
-
{ assertion = isDarwin; message = "this is a HM darwin-only config"; }
27
27
+
{
28
28
+
assertion = isDarwin;
29
29
+
message = "this is a HM darwin-only config";
30
30
+
}
27
31
];
28
32
29
33
local.fragment = {
+7
-4
home-manager/profiles/server.nix
reviewed
···
1
1
-
{ isDarwin
2
2
-
, ...
1
1
+
{
2
2
+
isDarwin,
3
3
+
...
3
4
}:
4
5
5
6
{
6
7
config = {
7
8
assertions = [
8
8
-
{ assertion = !isDarwin; message = "this is a HM non-darwin config"; }
9
9
+
{
10
10
+
assertion = !isDarwin;
11
11
+
message = "this is a HM non-darwin config";
12
12
+
}
9
13
];
10
14
11
15
local.fragment.shell.enable = true;
12
16
};
13
17
}
14
14
-
+49
-16
hosts/weird-row-server/authelia.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
···
13
14
in
14
15
{
15
16
config = {
16
16
-
age.secrets.authelia-jwt-secret = { file = secrets/authelia-jwt-secret.age; owner = config.services.authelia.instances.main.user; };
17
17
-
age.secrets.authelia-issuer-private-key = { file = secrets/authelia-issuer-private-key.age; owner = config.services.authelia.instances.main.user; };
18
18
-
age.secrets.authelia-storage-key = { file = secrets/authelia-storage-key.age; owner = config.services.authelia.instances.main.user; };
19
19
-
age.secrets.authelia-ldap-password = { file = secrets/authelia-ldap-password.age; owner = config.services.authelia.instances.main.user; };
20
20
-
age.secrets.authelia-smtp-password = { file = secrets/authelia-smtp-password.age; owner = config.services.authelia.instances.main.user; };
17
17
+
age.secrets.authelia-jwt-secret = {
18
18
+
file = secrets/authelia-jwt-secret.age;
19
19
+
owner = config.services.authelia.instances.main.user;
20
20
+
};
21
21
+
age.secrets.authelia-issuer-private-key = {
22
22
+
file = secrets/authelia-issuer-private-key.age;
23
23
+
owner = config.services.authelia.instances.main.user;
24
24
+
};
25
25
+
age.secrets.authelia-storage-key = {
26
26
+
file = secrets/authelia-storage-key.age;
27
27
+
owner = config.services.authelia.instances.main.user;
28
28
+
};
29
29
+
age.secrets.authelia-ldap-password = {
30
30
+
file = secrets/authelia-ldap-password.age;
31
31
+
owner = config.services.authelia.instances.main.user;
32
32
+
};
33
33
+
age.secrets.authelia-smtp-password = {
34
34
+
file = secrets/authelia-smtp-password.age;
35
35
+
owner = config.services.authelia.instances.main.user;
36
36
+
};
21
37
services.authelia.instances.main = {
22
38
enable = true;
23
39
···
39
55
};
40
56
41
57
session = {
42
42
-
cookies = [{
43
43
-
domain = "wiro.world";
44
44
-
authelia_url = "https://${authelia-hostname}";
45
45
-
default_redirection_url = "https://wiro.world";
46
46
-
}];
58
58
+
cookies = [
59
59
+
{
60
60
+
domain = "wiro.world";
61
61
+
authelia_url = "https://${authelia-hostname}";
62
62
+
default_redirection_url = "https://wiro.world";
63
63
+
}
64
64
+
];
47
65
};
48
66
49
67
authentication_backend.ldap = {
···
85
103
domain = "news.wiro.world";
86
104
policy = "one_factor";
87
105
88
88
-
subject = [ [ "group:miniflux" "oauth2:client:miniflux" ] ];
106
106
+
subject = [
107
107
+
[
108
108
+
"group:miniflux"
109
109
+
"oauth2:client:miniflux"
110
110
+
]
111
111
+
];
89
112
}
90
113
{
91
114
domain = "*.wiro.world";
···
99
122
100
123
authorization_policies =
101
124
let
102
102
-
mkStrictPolicy = policy: subject:
103
103
-
{ default_policy = "deny"; rules = [{ inherit policy subject; }]; };
125
125
+
mkStrictPolicy = policy: subject: {
126
126
+
default_policy = "deny";
127
127
+
rules = [ { inherit policy subject; } ];
128
128
+
};
104
129
in
105
130
{
106
131
headscale = mkStrictPolicy "two_factor" [ "group:headscale" ];
···
109
134
miniflux = mkStrictPolicy "one_factor" [ "group:miniflux" ];
110
135
};
111
136
112
112
-
claims_policies.headscale = { id_token = [ "email" "name" "preferred_username" "picture" "groups" ]; };
137
137
+
claims_policies.headscale = {
138
138
+
id_token = [
139
139
+
"email"
140
140
+
"name"
141
141
+
"preferred_username"
142
142
+
"picture"
143
143
+
"groups"
144
144
+
];
145
145
+
};
113
146
114
147
clients = [
115
148
{
+43
-11
hosts/weird-row-server/default.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
44
45
45
46
config = {
46
47
boot.loader.grub.enable = true;
47
47
-
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" "ext4" ];
48
48
+
boot.initrd.availableKernelModules = [
49
49
+
"ahci"
50
50
+
"xhci_pci"
51
51
+
"virtio_pci"
52
52
+
"virtio_scsi"
53
53
+
"sd_mod"
54
54
+
"sr_mod"
55
55
+
"ext4"
56
56
+
];
48
57
49
58
# Single network card is `eth0`
50
59
networking.usePredictableInterfaceNames = false;
51
60
52
52
-
networking.nameservers = [ "2001:4860:4860::8888" "2001:4860:4860::8844" ];
61
61
+
networking.nameservers = [
62
62
+
"2001:4860:4860::8888"
63
63
+
"2001:4860:4860::8844"
64
64
+
];
53
65
54
66
networking = {
55
67
interfaces.${ext-if} = {
56
56
-
ipv4.addresses = [{ address = external-ip; prefixLength = external-netmask; }];
57
57
-
ipv6.addresses = [{ address = external-ip6; prefixLength = external-netmask6; }];
68
68
+
ipv4.addresses = [
69
69
+
{
70
70
+
address = external-ip;
71
71
+
prefixLength = external-netmask;
72
72
+
}
73
73
+
];
74
74
+
ipv6.addresses = [
75
75
+
{
76
76
+
address = external-ip6;
77
77
+
prefixLength = external-netmask6;
78
78
+
}
79
79
+
];
58
80
};
59
59
-
defaultGateway = { interface = ext-if; address = external-gw; };
60
60
-
defaultGateway6 = { interface = ext-if; address = external-gw6; };
81
81
+
defaultGateway = {
82
82
+
interface = ext-if;
83
83
+
address = external-gw;
84
84
+
};
85
85
+
defaultGateway6 = {
86
86
+
interface = ext-if;
87
87
+
address = external-gw6;
88
88
+
};
61
89
62
90
# Reflect firewall configuration on Hetzner
63
63
-
firewall.allowedTCPPorts = [ 22 80 443 ];
91
91
+
firewall.allowedTCPPorts = [
92
92
+
22
93
93
+
80
94
94
+
443
95
95
+
];
64
96
};
65
97
66
98
services.qemuGuest.enable = true;
+3
-2
hosts/weird-row-server/goatcounter.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
+19
-8
hosts/weird-row-server/grafana.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
···
15
16
in
16
17
{
17
18
config = {
18
18
-
age.secrets.grafana-oidc-secret = { file = secrets/grafana-oidc-secret.age; owner = "grafana"; };
19
19
+
age.secrets.grafana-oidc-secret = {
20
20
+
file = secrets/grafana-oidc-secret.age;
21
21
+
owner = "grafana";
22
22
+
};
19
23
services.grafana = {
20
24
enable = true;
21
25
···
38
42
role_attribute_path = "contains(roles[*], 'admin') && 'GrafanaAdmin' || contains(roles[*], 'editor') && 'Editor' || 'Viewer'";
39
43
allow_assign_grafana_admin = true;
40
44
41
41
-
scopes = [ "openid" "profile" "email" "groups" ];
45
45
+
scopes = [
46
46
+
"openid"
47
47
+
"profile"
48
48
+
"email"
49
49
+
"groups"
50
50
+
];
42
51
auth_url = "https://auth.wiro.world/api/oidc/authorization";
43
52
token_url = "https://auth.wiro.world/api/oidc/token";
44
53
api_url = "https://auth.wiro.world/api/oidc/userinfo";
···
59
68
scrapeConfigs = [
60
69
{
61
70
job_name = "caddy";
62
62
-
static_configs = [{ targets = [ "localhost:${toString caddy-metrics-port}" ]; }];
71
71
+
static_configs = [ { targets = [ "localhost:${toString caddy-metrics-port}" ]; } ];
63
72
}
64
73
{
65
74
job_name = "node-exporter";
66
66
-
static_configs = [{ targets = [ "localhost:${toString config.services.prometheus.exporters.node.port}" ]; }];
75
75
+
static_configs = [
76
76
+
{ targets = [ "localhost:${toString config.services.prometheus.exporters.node.port}" ]; }
77
77
+
];
67
78
}
68
79
{
69
80
job_name = "headscale";
70
70
-
static_configs = [{ targets = [ "localhost:${toString headscale-metrics-port}" ]; }];
81
81
+
static_configs = [ { targets = [ "localhost:${toString headscale-metrics-port}" ]; } ];
71
82
}
72
83
{
73
84
job_name = "authelia";
74
74
-
static_configs = [{ targets = [ "localhost:${toString authelia-metrics-port}" ]; }];
85
85
+
static_configs = [ { targets = [ "localhost:${toString authelia-metrics-port}" ]; } ];
75
86
}
76
87
];
77
88
};
+20
-6
hosts/weird-row-server/headscale.nix
reviewed
···
1
1
-
{ pkgs
2
2
-
, config
3
3
-
, ...
1
1
+
{
2
2
+
pkgs,
3
3
+
config,
4
4
+
...
4
5
}:
5
6
6
7
let
···
16
17
config = {
17
18
networking.firewall.allowedUDPPorts = [ headscale-derp-port ];
18
19
19
19
-
age.secrets.headscale-oidc-secret = { file = secrets/headscale-oidc-secret.age; owner = config.services.headscale.user; };
20
20
+
age.secrets.headscale-oidc-secret = {
21
21
+
file = secrets/headscale-oidc-secret.age;
22
22
+
owner = config.services.headscale.user;
23
23
+
};
20
24
services.headscale = {
21
25
enable = true;
22
26
···
54
58
55
59
override_local_dns = true;
56
60
# Quad9 nameservers
57
57
-
nameservers.global = [ "9.9.9.9" "149.112.112.112" "2620:fe::fe" "2620:fe::9" ];
61
61
+
nameservers.global = [
62
62
+
"9.9.9.9"
63
63
+
"149.112.112.112"
64
64
+
"2620:fe::fe"
65
65
+
"2620:fe::9"
66
66
+
];
58
67
};
59
68
60
69
oidc = {
···
62
71
issuer = "https://auth.wiro.world";
63
72
client_id = "headscale";
64
73
client_secret_path = config.age.secrets.headscale-oidc-secret.path;
65
65
-
scope = [ "openid" "profile" "email" "groups" ];
74
74
+
scope = [
75
75
+
"openid"
76
76
+
"profile"
77
77
+
"email"
78
78
+
"groups"
79
79
+
];
66
80
pkce.enabled = true;
67
81
};
68
82
+4
-3
hosts/weird-row-server/hypixel-bank-tracker.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
...
4
5
}:
5
6
6
7
let
+11
-4
hosts/weird-row-server/lldap.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
···
9
10
{
10
11
config = {
11
12
age.secrets.lldap-env.file = secrets/lldap-env.age;
12
12
-
users.users.lldap = { isSystemUser = true; group = "lldap"; };
13
13
+
users.users.lldap = {
14
14
+
isSystemUser = true;
15
15
+
group = "lldap";
16
16
+
};
13
17
users.groups.lldap = { };
14
14
-
age.secrets.lldap-user-pass = { file = secrets/lldap-user-pass.age; owner = "lldap"; };
18
18
+
age.secrets.lldap-user-pass = {
19
19
+
file = secrets/lldap-user-pass.age;
20
20
+
owner = "lldap";
21
21
+
};
15
22
services.lldap = {
16
23
enable = true;
17
24
+17
-8
hosts/weird-row-server/miniflux.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
···
8
9
in
9
10
{
10
11
config = {
11
11
-
users.users.miniflux = { isSystemUser = true; group = "miniflux"; };
12
12
+
users.users.miniflux = {
13
13
+
isSystemUser = true;
14
14
+
group = "miniflux";
15
15
+
};
12
16
users.groups.miniflux = { };
13
13
-
age.secrets.miniflux-oidc-secret = { file = secrets/miniflux-oidc-secret.age; owner = "miniflux"; };
17
17
+
age.secrets.miniflux-oidc-secret = {
18
18
+
file = secrets/miniflux-oidc-secret.age;
19
19
+
owner = "miniflux";
20
20
+
};
14
21
services.miniflux = {
15
22
enable = true;
16
23
···
38
45
};
39
46
};
40
47
41
41
-
services.prometheus.scrapeConfigs = [{
42
42
-
job_name = "miniflux";
43
43
-
static_configs = [{ targets = [ "localhost:${toString miniflux-port}" ]; }];
44
44
-
}];
48
48
+
services.prometheus.scrapeConfigs = [
49
49
+
{
50
50
+
job_name = "miniflux";
51
51
+
static_configs = [ { targets = [ "localhost:${toString miniflux-port}" ]; } ];
52
52
+
}
53
53
+
];
45
54
46
55
services.caddy = {
47
56
virtualHosts.${miniflux-hostname}.extraConfig = ''
+4
-3
hosts/weird-row-server/paisa.nix
reviewed
···
1
1
-
{ config
2
2
-
, pkgs
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
pkgs,
4
4
+
...
4
5
}:
5
6
6
7
let
+3
-2
hosts/weird-row-server/pds.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
+4
-3
hosts/weird-row-server/tangled.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
...
4
5
}:
5
6
6
7
let
+3
-2
hosts/weird-row-server/thelounge.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
+7
-3
hosts/weird-row-server/tuwunel.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
···
10
11
in
11
12
{
12
13
config = {
13
13
-
age.secrets.tuwunel-registration-tokens = { file = secrets/tuwunel-registration-tokens.age; owner = config.services.matrix-tuwunel.user; };
14
14
+
age.secrets.tuwunel-registration-tokens = {
15
15
+
file = secrets/tuwunel-registration-tokens.age;
16
16
+
owner = config.services.matrix-tuwunel.user;
17
17
+
};
14
18
services.matrix-tuwunel = {
15
19
enable = true;
16
20
+3
-2
hosts/weird-row-server/vaultwarden.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
+2
-1
hosts/weird-row-server/warrior.nix
reviewed
···
1
1
-
{ ...
1
1
+
{
2
2
+
...
2
3
}:
3
4
4
5
let
+5
-4
hosts/weird-row-server/webfinger.nix
reviewed
···
1
1
-
{ pkgs
2
2
-
, config
3
3
-
, ...
1
1
+
{
2
2
+
pkgs,
3
3
+
config,
4
4
+
...
4
5
}:
5
6
6
7
let
···
57
58
root ${webfinger-dir}
58
59
file_server
59
60
}
60
60
-
'' +
61
61
''
62
62
+
+ ''
62
63
@discord {
63
64
path /.well-known/discord
64
65
method GET HEAD
+39
-26
lib/flake/default.nix
reviewed
···
1
1
-
{ self
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
let
···
10
11
inherit (home-manager.lib) homeManagerConfiguration;
11
12
in
12
13
rec {
13
13
-
forAllSystems = lib.genAttrs [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ];
14
14
+
forAllSystems = lib.genAttrs [
15
15
+
"x86_64-linux"
16
16
+
"aarch64-linux"
17
17
+
"aarch64-darwin"
18
18
+
];
14
19
15
20
specialModuleArgs = pkgs: {
16
21
# this flake
···
30
35
31
36
# NixOS related
32
37
nixos = {
33
33
-
createSystem = pkgs: modules: lib.nixosSystem {
34
34
-
inherit pkgs;
35
35
-
modules = modules ++ [
36
36
-
../../nixos/fragments/default.nix
37
37
-
];
38
38
-
specialArgs = specialModuleArgs pkgs;
39
39
-
};
38
38
+
createSystem =
39
39
+
pkgs: modules:
40
40
+
lib.nixosSystem {
41
41
+
inherit pkgs;
42
42
+
modules = modules ++ [
43
43
+
../../nixos/fragments/default.nix
44
44
+
];
45
45
+
specialArgs = specialModuleArgs pkgs;
46
46
+
};
40
47
41
48
# `createSystem` modules
42
49
system = hostName: profile: {
···
59
66
60
67
# Darwin related
61
68
darwin = {
62
62
-
createSystem = pkgs: modules: darwinSystem {
63
63
-
inherit pkgs;
64
64
-
modules = modules ++ [
65
65
-
../../nixos/fragments/default.nix
66
66
-
];
67
67
-
specialArgs = specialModuleArgs pkgs;
68
68
-
};
69
69
+
createSystem =
70
70
+
pkgs: modules:
71
71
+
darwinSystem {
72
72
+
inherit pkgs;
73
73
+
modules = modules ++ [
74
74
+
../../nixos/fragments/default.nix
75
75
+
];
76
76
+
specialArgs = specialModuleArgs pkgs;
77
77
+
};
69
78
70
79
# `darwin.createSystem` modules
71
80
user = import ./user.nix;
···
73
82
74
83
# Home Manager related
75
84
home-manager = {
76
76
-
createHome = pkgs: modules: homeManagerConfiguration {
77
77
-
inherit pkgs;
78
78
-
modules = modules ++ [
79
79
-
../../home-manager/fragments/default.nix
80
80
-
../../home-manager/options.nix
81
81
-
];
82
82
-
extraSpecialArgs = (specialModuleArgs pkgs) // { osConfig = null; };
83
83
-
};
85
85
+
createHome =
86
86
+
pkgs: modules:
87
87
+
homeManagerConfiguration {
88
88
+
inherit pkgs;
89
89
+
modules = modules ++ [
90
90
+
../../home-manager/fragments/default.nix
91
91
+
../../home-manager/options.nix
92
92
+
];
93
93
+
extraSpecialArgs = (specialModuleArgs pkgs) // {
94
94
+
osConfig = null;
95
95
+
};
96
96
+
};
84
97
85
98
# `home-manager.createHome` modules
86
99
home = username: home-dir: profile: {
+8
-2
lib/flake/managedDiskLayout.nix
reviewed
···
1
1
-
layout: { device, swapSize }:
1
1
+
layout:
2
2
+
{ device, swapSize }:
2
3
3
3
-
{ self, pkgs, lib, ... }:
4
4
+
{
5
5
+
self,
6
6
+
pkgs,
7
7
+
lib,
8
8
+
...
9
9
+
}:
4
10
5
11
let
6
12
inherit (self.inputs) disko;
+46
-26
lib/flake/user.nix
reviewed
···
1
1
-
name: { description, profile, keys ? [ ], user ? { }, elevated }:
1
1
+
name:
2
2
+
{
3
3
+
description,
4
4
+
profile,
5
5
+
keys ? [ ],
6
6
+
user ? { },
7
7
+
elevated,
8
8
+
}:
2
9
3
3
-
{ self
4
4
-
, pkgs
5
5
-
, lib
6
6
-
, isDarwin
7
7
-
, ...
10
10
+
{
11
11
+
self,
12
12
+
pkgs,
13
13
+
lib,
14
14
+
isDarwin,
15
15
+
...
8
16
}:
9
17
10
18
let
···
13
21
in
14
22
{
15
23
imports = [
16
16
-
(if isDarwin then home-manager.darwinModules.home-manager else home-manager.nixosModules.home-manager)
24
24
+
(
25
25
+
if isDarwin then home-manager.darwinModules.home-manager else home-manager.nixosModules.home-manager
26
26
+
)
17
27
];
18
28
19
29
options = {
···
31
41
shell = pkgs.fish;
32
42
33
43
openssh.authorizedKeys.keys = keys;
34
34
-
} // (if isDarwin then {
35
35
-
home = "/Users/${name}";
36
36
-
} else {
37
37
-
home = "/home/${name}";
38
38
-
isNormalUser = true;
39
39
-
extraGroups = [
40
40
-
"networkmanager"
41
41
-
] ++ lib.optionals elevated [
42
42
-
"wheel" # root access
43
43
-
"tss" # tpm access
44
44
-
];
45
45
-
}) // user;
44
44
+
}
45
45
+
// (
46
46
+
if isDarwin then
47
47
+
{
48
48
+
home = "/Users/${name}";
49
49
+
}
50
50
+
else
51
51
+
{
52
52
+
home = "/home/${name}";
53
53
+
isNormalUser = true;
54
54
+
extraGroups = [
55
55
+
"networkmanager"
56
56
+
]
57
57
+
++ lib.optionals elevated [
58
58
+
"wheel" # root access
59
59
+
"tss" # tpm access
60
60
+
];
61
61
+
}
62
62
+
)
63
63
+
// user;
46
64
47
65
home-manager = {
48
66
extraSpecialArgs = specialModuleArgs pkgs;
···
50
68
useUserPackages = false;
51
69
useGlobalPkgs = true;
52
70
53
53
-
users.${name} = { ... }: {
54
54
-
imports = [
55
55
-
../../home-manager/profiles/${profile}.nix
56
56
-
../../home-manager/fragments/default.nix
57
57
-
../../home-manager/options.nix
58
58
-
];
59
59
-
};
71
71
+
users.${name} =
72
72
+
{ ... }:
73
73
+
{
74
74
+
imports = [
75
75
+
../../home-manager/profiles/${profile}.nix
76
76
+
../../home-manager/fragments/default.nix
77
77
+
../../home-manager/options.nix
78
78
+
];
79
79
+
};
60
80
};
61
81
};
62
82
}
+2
-1
lib/unfree.nix
reviewed
···
1
1
{ lib }:
2
2
3
3
# List of all unfree packages authorized
4
4
-
package: builtins.elem (lib.getName package) [
4
4
+
package:
5
5
+
builtins.elem (lib.getName package) [
5
6
# NixOS
6
7
"hplip"
7
8
"steam"
+5
-4
modules/home-manager/screen.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
+11
-7
modules/home-manager/wakatime.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
57
58
# e.g. agenix uses `$XDG_RUNTIME_DIR`
58
59
wakatime-key = pkgs.writeShellScript "cat-wakatime-api-key" "cat ${cfg.apiKeyFile}";
59
60
60
60
-
merged-settings = cfg.settings // { api_key_vault_cmd = "${wakatime-key}"; };
61
61
-
final-config = cfg.extraConfig // { settings = merged-settings; };
61
61
+
merged-settings = cfg.settings // {
62
62
+
api_key_vault_cmd = "${wakatime-key}";
63
63
+
};
64
64
+
final-config = cfg.extraConfig // {
65
65
+
settings = merged-settings;
66
66
+
};
62
67
in
63
68
lib.mkIf cfg.enable {
64
69
home.sessionVariables.WAKATIME_HOME = "${config.xdg.configHome}/wakatime";
···
66
71
xdg.configFile."wakatime/.wakatime.cfg".source = ini-format.generate "wakatime-config" final-config;
67
72
};
68
73
}
69
69
-
+37
-16
modules/home-manager/xcompose.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
64
65
comboListToString = foldl (acc: val: acc + "<${val}> ") "";
65
66
sanitizeComboResult = escape [ ''"'' ];
66
67
67
67
-
comboSetToList = ip: flatten (mapAttrsToList
68
68
-
(name: value:
69
69
-
if isAttrs value then
70
70
-
let vs = comboSetToList value;
71
71
-
in
72
72
-
map ({ combo, value }: { combo = [ name ] ++ combo; inherit value; }) vs
73
73
-
else if isString value then
74
74
-
{ combo = [ name ]; inherit value; }
75
75
-
else throw "combo value must be a string"
76
76
-
)
77
77
-
ip);
78
78
-
complexListToSimple = map ({ combo, value }: { combo = comboListToString combo; value = sanitizeComboResult value; });
68
68
+
comboSetToList =
69
69
+
ip:
70
70
+
flatten (
71
71
+
mapAttrsToList (
72
72
+
name: value:
73
73
+
if isAttrs value then
74
74
+
let
75
75
+
vs = comboSetToList value;
76
76
+
in
77
77
+
map (
78
78
+
{ combo, value }:
79
79
+
{
80
80
+
combo = [ name ] ++ combo;
81
81
+
inherit value;
82
82
+
}
83
83
+
) vs
84
84
+
else if isString value then
85
85
+
{
86
86
+
combo = [ name ];
87
87
+
inherit value;
88
88
+
}
89
89
+
else
90
90
+
throw "combo value must be a string"
91
91
+
) ip
92
92
+
);
93
93
+
complexListToSimple = map (
94
94
+
{ combo, value }:
95
95
+
{
96
96
+
combo = comboListToString combo;
97
97
+
value = sanitizeComboResult value;
98
98
+
}
99
99
+
);
79
100
toComposeFile = foldl (acc: val: acc + "${val.combo}: \"${val.value}\"\n") "";
80
101
81
102
processComposeSet = set: toComposeFile (complexListToSimple (comboSetToList set));
+36
-33
modules/nixos/logiops.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
20
21
type = libconfig-format.type;
21
22
default = { };
22
23
example = {
23
23
-
devices = [{
24
24
-
name = "Wireless Mouse MX Master 3";
24
24
+
devices = [
25
25
+
{
26
26
+
name = "Wireless Mouse MX Master 3";
25
27
26
26
-
smartshift = {
27
27
-
on = true;
28
28
-
threshold = 20;
29
29
-
};
28
28
+
smartshift = {
29
29
+
on = true;
30
30
+
threshold = 20;
31
31
+
};
30
32
31
31
-
hiresscroll = {
32
32
-
hires = true;
33
33
-
invert = false;
34
34
-
target = false;
35
35
-
};
33
33
+
hiresscroll = {
34
34
+
hires = true;
35
35
+
invert = false;
36
36
+
target = false;
37
37
+
};
36
38
37
37
-
dpi = 1500;
39
39
+
dpi = 1500;
38
40
39
39
-
buttons = [
40
40
-
{
41
41
-
cid = "0x53";
42
42
-
action = {
43
43
-
type = "Keypress";
44
44
-
keys = [ "KEY_FORWARD" ];
45
45
-
};
46
46
-
}
47
47
-
{
48
48
-
cid = "0x56";
49
49
-
action = {
50
50
-
type = "Keypress";
51
51
-
keys = [ "KEY_BACK" ];
52
52
-
};
53
53
-
}
54
54
-
];
55
55
-
}];
41
41
+
buttons = [
42
42
+
{
43
43
+
cid = "0x53";
44
44
+
action = {
45
45
+
type = "Keypress";
46
46
+
keys = [ "KEY_FORWARD" ];
47
47
+
};
48
48
+
}
49
49
+
{
50
50
+
cid = "0x56";
51
51
+
action = {
52
52
+
type = "Keypress";
53
53
+
keys = [ "KEY_BACK" ];
54
54
+
};
55
55
+
}
56
56
+
];
57
57
+
}
58
58
+
];
56
59
};
57
60
description = lib.mdDoc ''
58
61
Logid configuration. Refer to
+10
-7
nixos/fragments/agenix.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, lib
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
lib,
4
5
5
5
-
, isDarwin
6
6
-
, ...
6
6
+
isDarwin,
7
7
+
...
7
8
}:
8
9
9
10
let
···
25
26
26
27
config = lib.mkIf cfg.enable {
27
28
assertions = [
28
28
-
{ assertion = config.services.openssh.enable; message = "`agenix` fragment depends on `openssh` program"; }
29
29
+
{
30
30
+
assertion = config.services.openssh.enable;
31
31
+
message = "`agenix` fragment depends on `openssh` program";
32
32
+
}
29
33
];
30
34
31
35
age = {
···
39
43
};
40
44
};
41
45
}
42
42
-
+25
-17
nixos/fragments/backup.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
17
18
Backup related
18
19
'';
19
20
20
20
-
21
21
config = lib.mkIf cfg.enable {
22
22
# TODO: fix module
23
23
-
assertions = [{ assertion = false; message = "module is broken"; }];
23
23
+
assertions = [
24
24
+
{
25
25
+
assertion = false;
26
26
+
message = "module is broken";
27
27
+
}
28
28
+
];
24
29
25
30
age.secrets.backup-restic-key.file = ../../secrets/backup/restic-key.age;
26
31
age.secrets.backup-rclone-google-drive.file = ../../secrets/backup/rclone-googledrive.age;
···
48
53
# Remove stale Restic locks
49
54
${lib.getExe pkgs.restic} unlock || true
50
55
51
51
-
${lib.getExe pkgs.rsync} \
52
52
-
${"\\" /* Archive mode and delete files that are not in the source directory. `--mkpath` is like `mkdir`'s `-p` option */}
53
53
-
--archive --delete --mkpath \
54
54
-
${"\\" /* `:-` operator uses .gitignore files as exclude patterns */}
55
55
-
--filter=':- .gitignore' \
56
56
-
${"\\" /* Exclude nixpkgs repository because they have some weird symlink test files that break rsync */}
57
57
-
--exclude 'nixpkgs' \
58
58
-
${"\\" /* Hardlink files to avoid taking up more space */}
59
59
-
--link-dest=/home/${mainUsername}/Development \
60
60
-
/home/${mainUsername}/Development/ /home/${mainUsername}/.local/backup/repos
56
56
+
${lib.getExe pkgs.rsync} ${
57
57
+
lib.cli.toCommandLineGNU { } {
58
58
+
# Archive mode and delete files that are not in the source directory. `--mkpath` is like `mkdir`'s `-p` option
59
59
+
archive = true;
60
60
+
delete = true;
61
61
+
mkpath = true;
62
62
+
# `:-` operator uses .gitignore files as exclude patterns
63
63
+
filter = ":- .gitignore";
64
64
+
# Exclude nixpkgs repository because they have some weird symlink test files that break rsync
65
65
+
exclude = "nixpkgs";
66
66
+
# Hardlink files to avoid taking up more space
67
67
+
link-dest = "/home/${mainUsername}/Development";
68
68
+
}
69
69
+
} /home/${mainUsername}/Development/ /home/${mainUsername}/.local/backup/repos
61
70
'';
62
71
63
72
pruneOpts = [
···
65
74
"--keep-weekly 5"
66
75
"--keep-yearly 10"
67
76
];
68
68
-
69
77
70
78
# TODO: fix config
71
79
timerConfig = null;
+6
-4
nixos/fragments/default.nix
reviewed
···
1
1
-
{ lib
2
2
-
, isDarwin
3
3
-
, ...
1
1
+
{
2
2
+
lib,
3
3
+
isDarwin,
4
4
+
...
4
5
}:
5
6
6
7
{
···
16
17
./security.nix
17
18
./virtualisation.nix
18
19
./wireless.nix
19
19
-
] ++ lib.optionals isDarwin [
20
20
+
]
21
21
+
++ lib.optionals isDarwin [
20
22
./yabai.nix
21
23
];
22
24
}
+19
-8
nixos/fragments/fonts.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
4
5
5
5
-
, isDarwin
6
6
-
, ...
6
6
+
isDarwin,
7
7
+
...
7
8
}:
8
9
9
10
let
···
25
26
noto-fonts-cjk-sans
26
27
noto-fonts-color-emoji
27
28
];
28
28
-
} // lib.optionalAttrs (!isDarwin) {
29
29
+
}
30
30
+
// lib.optionalAttrs (!isDarwin) {
29
31
fontconfig = {
30
32
defaultFonts = {
31
31
-
sansSerif = [ "Inter" "Noto Sans" "Noto Sans Japanese" "Noto Sans Korean" "Noto Sans Chinese" ];
33
33
+
sansSerif = [
34
34
+
"Inter"
35
35
+
"Noto Sans"
36
36
+
"Noto Sans Japanese"
37
37
+
"Noto Sans Korean"
38
38
+
"Noto Sans Chinese"
39
39
+
];
32
40
serif = [ "Merriweather" ];
33
33
-
monospace = [ "JetBrainsMono Nerd Font" "Noto Sans Mono" ];
41
41
+
monospace = [
42
42
+
"JetBrainsMono Nerd Font"
43
43
+
"Noto Sans Mono"
44
44
+
];
34
45
emoji = [ "Noto Color Emoji" ];
35
46
};
36
47
};
+4
-3
nixos/fragments/gaming.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
let
+5
-4
nixos/fragments/kanata/default.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
4
5
5
5
-
, ...
6
6
+
...
6
7
}:
7
8
8
9
let
+69
-60
nixos/fragments/logiops.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, lib
4
4
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
lib,
5
5
+
...
5
6
}:
6
7
7
8
let
···
22
23
settings =
23
24
let
24
25
cid = {
25
25
-
# Control IDs │ reprog? │ fn key? │ mouse key? │ gesture support?
26
26
-
leftMouse = 80; # 0x50 │ │ │ YES │
27
27
-
rightMouse = 81; # 0x51 │ │ │ YES │
28
28
-
middleMouse = 81; # 0x52 │ YES │ │ YES │ YES
29
29
-
back = 83; # 0x53 │ YES │ │ YES │ YES
30
30
-
forward = 86; # 0x56 │ YES │ │ YES │ YES
31
31
-
switchReceivers = 215; # 0xD7 │ YES │ │ │ YES
32
32
-
mouseSensitivity = 253; # 0xFD │ YES │ │ YES │ YES
26
26
+
# Control IDs │ reprog? │ fn key? │ mouse key? │ gesture support?
27
27
+
# 0x50 │ │ │ YES │
28
28
+
# 0x51 │ │ │ YES │
29
29
+
# 0x52 │ YES │ │ YES │ YES
30
30
+
# 0x53 │ YES │ │ YES │ YES
31
31
+
# 0x56 │ YES │ │ YES │ YES
32
32
+
# 0xD7 │ YES │ │ │ YES
33
33
+
# 0xFD │ YES │ │ YES │ YES
34
34
+
leftMouse = 80;
35
35
+
rightMouse = 81;
36
36
+
middleMouse = 81;
37
37
+
back = 83;
38
38
+
forward = 86;
39
39
+
switchReceivers = 215;
40
40
+
mouseSensitivity = 253;
33
41
};
34
42
in
35
43
{
36
36
-
devices = [{
37
37
-
name = "MX Vertical Advanced Ergonomic Mouse";
44
44
+
devices = [
45
45
+
{
46
46
+
name = "MX Vertical Advanced Ergonomic Mouse";
38
47
39
39
-
dpi = 1500;
48
48
+
dpi = 1500;
40
49
41
41
-
hiresscroll = {
42
42
-
hires = true;
43
43
-
invert = false;
44
44
-
target = false;
45
45
-
};
50
50
+
hiresscroll = {
51
51
+
hires = true;
52
52
+
invert = false;
53
53
+
target = false;
54
54
+
};
46
55
47
47
-
buttons = [
48
48
-
{
49
49
-
cid = cid.forward;
50
50
-
action = {
51
51
-
type = "Keypress";
52
52
-
keys = [ "KEY_FORWARD" ];
53
53
-
# type = "Gestures";
54
54
-
# gestures = [
55
55
-
# {
56
56
-
# direction = "Left";
57
57
-
# mode = "OnThreshold";
58
58
-
# action = {
59
59
-
# type = "Keypress";
60
60
-
# keys = ["KEY_LEFTMETA" "KEY_LEFTCTRL" "KEY_LEFTSHIFT" "KEY_TAB"];
61
61
-
# };
62
62
-
# }
63
63
-
# ];
64
64
-
};
65
65
-
}
66
66
-
{
67
67
-
cid = cid.back;
68
68
-
action = {
69
69
-
type = "Keypress";
70
70
-
keys = [ "KEY_BACK" ];
71
71
-
};
72
72
-
}
73
73
-
{
74
74
-
cid = cid.mouseSensitivity;
75
75
-
action = {
76
76
-
type = "Keypress";
77
77
-
keys = [ "KEY_LEFTMETA" ];
78
78
-
};
79
79
-
}
80
80
-
{
81
81
-
cid = cid.switchReceivers;
82
82
-
action.type = "None";
83
83
-
}
84
84
-
];
85
85
-
}];
56
56
+
buttons = [
57
57
+
{
58
58
+
cid = cid.forward;
59
59
+
action = {
60
60
+
type = "Keypress";
61
61
+
keys = [ "KEY_FORWARD" ];
62
62
+
# type = "Gestures";
63
63
+
# gestures = [
64
64
+
# {
65
65
+
# direction = "Left";
66
66
+
# mode = "OnThreshold";
67
67
+
# action = {
68
68
+
# type = "Keypress";
69
69
+
# keys = ["KEY_LEFTMETA" "KEY_LEFTCTRL" "KEY_LEFTSHIFT" "KEY_TAB"];
70
70
+
# };
71
71
+
# }
72
72
+
# ];
73
73
+
};
74
74
+
}
75
75
+
{
76
76
+
cid = cid.back;
77
77
+
action = {
78
78
+
type = "Keypress";
79
79
+
keys = [ "KEY_BACK" ];
80
80
+
};
81
81
+
}
82
82
+
{
83
83
+
cid = cid.mouseSensitivity;
84
84
+
action = {
85
85
+
type = "Keypress";
86
86
+
keys = [ "KEY_LEFTMETA" ];
87
87
+
};
88
88
+
}
89
89
+
{
90
90
+
cid = cid.switchReceivers;
91
91
+
action.type = "None";
92
92
+
}
93
93
+
];
94
94
+
}
95
95
+
];
86
96
};
87
97
};
88
98
}
89
89
-
+34
-16
nixos/fragments/nix.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, lib
4
4
-
, pkgs
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
lib,
5
5
+
pkgs,
5
6
6
6
-
, isDarwin
7
7
-
, ...
7
7
+
isDarwin,
8
8
+
...
8
9
}:
9
10
10
11
let
···
27
28
registry = lib.mapAttrs (_: value: { flake = value; }) (self.inputs // { inherit self; });
28
29
29
30
nixPath =
30
30
-
if clear-nix-env
31
31
+
if
32
32
+
clear-nix-env
31
33
# Actually make it empty to disable nix-* legacy commands
32
32
-
then [ ]
34
34
+
then
35
35
+
[ ]
33
36
# Make NixOS system's legacy channels consistent with registry and flake inputs
34
34
-
else lib.mapAttrsToList (key: value: "${key}=${value.to.path}") config.nix.registry;
37
37
+
else
38
38
+
lib.mapAttrsToList (key: value: "${key}=${value.to.path}") config.nix.registry;
35
39
36
40
gc = {
37
41
automatic = true;
···
40
44
options = "--delete-older-than 30d";
41
45
}
42
46
# Same option to say that GC is ran weekly at 3h15
43
43
-
// (if isDarwin then {
44
44
-
interval = { Weekday = 7; Hour = 3; Minute = 15; };
45
45
-
} else {
46
46
-
dates = "Sun *-*-* 03:15:00";
47
47
-
});
47
47
+
// (
48
48
+
if isDarwin then
49
49
+
{
50
50
+
interval = {
51
51
+
Weekday = 7;
52
52
+
Hour = 3;
53
53
+
Minute = 15;
54
54
+
};
55
55
+
}
56
56
+
else
57
57
+
{
58
58
+
dates = "Sun *-*-* 03:15:00";
59
59
+
}
60
60
+
);
48
61
49
62
settings = {
50
50
-
experimental-features = [ "nix-command" "flakes" ];
63
63
+
experimental-features = [
64
64
+
"nix-command"
65
65
+
"flakes"
66
66
+
];
51
67
auto-optimise-store = true;
52
68
53
69
# Disable flake registry to keep system pure and
···
62
78
63
79
trusted-users = [ config.local.user.username ];
64
80
extra-substituters = [ "https://nix-community.cachix.org" ];
65
65
-
extra-trusted-public-keys = [ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ];
81
81
+
extra-trusted-public-keys = [
82
82
+
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
83
83
+
];
66
84
};
67
85
};
68
86
+6
-7
nixos/fragments/secure-boot.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, lib
4
4
-
, upkgs
5
5
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
lib,
5
5
+
upkgs,
6
6
+
...
6
7
}:
7
8
8
9
# https://github.com/nix-community/lanzaboote/blob/master/docs/QUICK_START.md
···
37
38
];
38
39
};
39
40
}
40
40
-
41
41
-
+18
-5
nixos/fragments/security.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
let
···
32
33
};
33
34
34
35
# `swaylock` pam service must be at least declared to work properly
35
35
-
security.pam.services."swaylock" = { nodelay = true; failDelay = { enable = true; delay = 500000; }; };
36
36
+
security.pam.services."swaylock" = {
37
37
+
nodelay = true;
38
38
+
failDelay = {
39
39
+
enable = true;
40
40
+
delay = 500000;
41
41
+
};
42
42
+
};
36
43
37
44
# reduce sudo fail delay to half a second
38
38
-
security.pam.services."sudo" = { nodelay = true; failDelay = { enable = true; delay = 500000; }; };
45
45
+
security.pam.services."sudo" = {
46
46
+
nodelay = true;
47
47
+
failDelay = {
48
48
+
enable = true;
49
49
+
delay = 500000;
50
50
+
};
51
51
+
};
39
52
40
53
# Signing
41
54
programs.gnupg.agent.enable = true;
+4
-3
nixos/fragments/virtualisation.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
let
+18
-7
nixos/fragments/wireless.nix
reviewed
···
1
1
-
{ pkgs
2
2
-
, config
3
3
-
, lib
4
4
-
, ...
1
1
+
{
2
2
+
pkgs,
3
3
+
config,
4
4
+
lib,
5
5
+
...
5
6
}:
6
7
7
8
let
···
15
16
16
17
config = lib.mkIf cfg.enable {
17
18
# Wifi
18
18
-
networking.nameservers = [ "1.1.1.1" "8.8.8.8" "9.9.9.9" ];
19
19
+
networking.nameservers = [
20
20
+
"1.1.1.1"
21
21
+
"8.8.8.8"
22
22
+
"9.9.9.9"
23
23
+
];
19
24
networking.networkmanager.enable = true;
20
25
21
26
# Firewall
···
28
33
# Open arbitrary ports to share things on local networks
29
34
allowedTCPPorts = [ 4242 ];
30
35
allowedTCPPortRanges = [
31
31
-
{ from = 42420; to = 42429; }
36
36
+
{
37
37
+
from = 42420;
38
38
+
to = 42429;
39
39
+
}
32
40
];
33
41
allowedUDPPorts = [ 4242 ];
34
42
allowedUDPPortRanges = [
35
35
-
{ from = 42420; to = 42429; }
43
43
+
{
44
44
+
from = 42420;
45
45
+
to = 42429;
46
46
+
}
36
47
];
37
48
38
49
# Allow packets from Docker containers
+4
-3
nixos/fragments/yabai.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
let
+5
-4
nixos/hardware/apple-wiro-laptop.nix
reviewed
···
1
1
-
{ self
2
2
-
, config
3
3
-
, lib
4
4
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
config,
4
4
+
lib,
5
5
+
...
5
6
}:
6
7
7
8
{
+10
-4
nixos/hardware/archaic-wiro-laptop.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
{
···
10
11
time.timeZone = "Europe/Paris";
11
12
12
13
# --- Generated by `nixos-generate-config` ---
13
13
-
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "sd_mod" "rtsx_pci_sdmmc" ];
14
14
+
boot.initrd.availableKernelModules = [
15
15
+
"xhci_pci"
16
16
+
"ahci"
17
17
+
"sd_mod"
18
18
+
"rtsx_pci_sdmmc"
19
19
+
];
14
20
boot.initrd.kernelModules = [ ];
15
21
boot.kernelModules = [ "kvm-intel" ];
16
22
boot.extraModulePackages = [ ];
+12
-5
nixos/hardware/neo-wiro-laptop.nix
reviewed
···
1
1
-
{ config
2
2
-
, lib
3
3
-
, pkgs
4
4
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
lib,
4
4
+
pkgs,
5
5
+
...
5
6
}:
6
7
7
8
let
···
32
33
'';
33
34
34
35
# --- Generated by `nixos-generate-config` ---
35
35
-
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "vmd" "nvme" "sdhci_pci" ];
36
36
+
boot.initrd.availableKernelModules = [
37
37
+
"xhci_pci"
38
38
+
"thunderbolt"
39
39
+
"vmd"
40
40
+
"nvme"
41
41
+
"sdhci_pci"
42
42
+
];
36
43
boot.initrd.kernelModules = [ ];
37
44
boot.kernelModules = [ "kvm-intel" ];
38
45
boot.extraModulePackages = [ ];
+9
-5
nixos/hardware/weird-row-server.nix
reviewed
···
1
1
-
{ lib
1
1
+
{
2
2
+
lib,
2
3
3
3
-
, modulesPath
4
4
-
, ...
4
4
+
modulesPath,
5
5
+
...
5
6
}:
6
7
7
8
{
···
11
12
system.stateVersion = "24.11";
12
13
13
14
# --- Generated by `nixos-generate-config` ---
14
14
-
boot.initrd.availableKernelModules = [ "xhci_pci" "virtio_scsi" "sr_mod" ];
15
15
+
boot.initrd.availableKernelModules = [
16
16
+
"xhci_pci"
17
17
+
"virtio_scsi"
18
18
+
"sr_mod"
19
19
+
];
15
20
boot.initrd.kernelModules = [ ];
16
21
boot.kernelModules = [ ];
17
22
boot.extraModulePackages = [ ];
···
21
26
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
22
27
};
23
28
}
24
24
-
+3
-2
nixos/layout/ext4-hetzner.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
+15
-5
nixos/layout/luks-btrfs.nix
reviewed
···
1
1
-
{ config
2
2
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
...
3
4
}:
4
5
5
6
let
···
36
37
subvolumes = {
37
38
"/root" = {
38
39
mountpoint = "/";
39
39
-
mountOptions = [ "compress=zstd" "noatime" ];
40
40
+
mountOptions = [
41
41
+
"compress=zstd"
42
42
+
"noatime"
43
43
+
];
40
44
};
41
45
"/home" = {
42
46
mountpoint = "/home";
43
43
-
mountOptions = [ "compress=zstd" "noatime" ];
47
47
+
mountOptions = [
48
48
+
"compress=zstd"
49
49
+
"noatime"
50
50
+
];
44
51
};
45
52
"/nix" = {
46
53
mountpoint = "/nix";
47
47
-
mountOptions = [ "compress=zstd" "noatime" ];
54
54
+
mountOptions = [
55
55
+
"compress=zstd"
56
56
+
"noatime"
57
57
+
];
48
58
};
49
59
"/swap" = {
50
60
mountpoint = "/.swapvol";
+13
-7
nixos/profiles/installer.nix
reviewed
···
1
1
-
{ lib
2
2
-
, pkgs
1
1
+
{
2
2
+
lib,
3
3
+
pkgs,
3
4
4
4
-
, modulesPath
5
5
-
, ...
5
5
+
modulesPath,
6
6
+
...
6
7
}:
7
8
8
9
let
···
20
21
connect-wifi = writeShellScriptBin "connect-wifi" ''
21
22
if [ -z "$1" ]; then echo "Interface unset"; exit; fi
22
23
if [ -z "$2" ]; then echo "SSID unset"; exit; fi
23
23
-
24
24
+
24
25
CONFIG=$(mktemp)
25
26
wpa_passphrase $2 > $CONFIG
26
27
sudo wpa_supplicant -B -i$1 -c$CONFIG
···
69
70
boot.kernelPackages = lib.mkForce pkgs.linuxKernel.packages.linux_6_6;
70
71
71
72
nix.settings = {
72
72
-
experimental-features = [ "nix-command" "flakes" ];
73
73
+
experimental-features = [
74
74
+
"nix-command"
75
75
+
"flakes"
76
76
+
];
73
77
extra-substituters = [ "https://nix-community.cachix.org" ];
74
74
-
extra-trusted-public-keys = [ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ];
78
78
+
extra-trusted-public-keys = [
79
79
+
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
80
80
+
];
75
81
};
76
82
77
83
# Add our keys to default users for better remote experience
+13
-5
nixos/profiles/laptop.nix
reviewed
···
1
1
-
{ config
2
2
-
, pkgs
3
3
-
, ...
1
1
+
{
2
2
+
config,
3
3
+
pkgs,
4
4
+
...
4
5
}:
5
6
6
7
{
···
87
88
enable = true;
88
89
package = pkgs.wireshark;
89
90
};
90
90
-
users.users.${config.local.user.username}.extraGroups = [ "wireshark" "plugdev" ];
91
91
+
users.users.${config.local.user.username}.extraGroups = [
92
92
+
"wireshark"
93
93
+
"plugdev"
94
94
+
];
91
95
92
96
# This option is already filled with aliases that snowball and have
93
97
# priority on fish internal `ls` aliases
94
94
-
environment.shellAliases = { ls = null; ll = null; l = null; };
98
98
+
environment.shellAliases = {
99
99
+
ls = null;
100
100
+
ll = null;
101
101
+
l = null;
102
102
+
};
95
103
programs.fish.enable = true;
96
104
97
105
services.udev.packages = with pkgs; [
+2
-1
nixos/profiles/macintosh.nix
reviewed
···
1
1
-
{ ...
1
1
+
{
2
2
+
...
2
3
}:
3
4
4
5
{
+8
-4
overlays/default.nix
reviewed
···
1
1
-
{ self
2
2
-
, lib
3
3
-
, ...
1
1
+
{
2
2
+
self,
3
3
+
lib,
4
4
+
...
4
5
}:
5
6
6
7
let
···
8
9
in
9
10
rec {
10
11
# Bundles all overlays, order matters here
11
11
-
all = composeManyExtensions [ bringSpecialArgs patches ];
12
12
+
all = composeManyExtensions [
13
13
+
bringSpecialArgs
14
14
+
patches
15
15
+
];
12
16
13
17
# Bring `self`, `llib` and `upkgs`
14
18
bringSpecialArgs = final: prev: self.flake-lib.specialModuleArgs final;
+7
-7
pkgs/asak.nix
reviewed
···
1
1
-
{ lib
2
2
-
, rustPlatform
3
3
-
, fetchFromGitHub
1
1
+
{
2
2
+
lib,
3
3
+
rustPlatform,
4
4
+
fetchFromGitHub,
4
5
5
5
-
, pkg-config
6
6
-
, alsa-lib
7
7
-
, jack2
6
6
+
pkg-config,
7
7
+
alsa-lib,
8
8
+
jack2,
8
9
}:
9
10
10
11
rustPlatform.buildRustPackage rec {
···
37
38
mainProgram = "asak";
38
39
};
39
40
}
40
40
-
+5
-4
pkgs/default.nix
reviewed
···
1
1
-
{ self
1
1
+
{
2
2
+
self,
2
3
3
3
-
, stdenv
4
4
-
, callPackage
5
5
-
, ...
4
4
+
stdenv,
5
5
+
callPackage,
6
6
+
...
6
7
}:
7
8
8
9
let
+4
-4
pkgs/ebnfer.nix
reviewed
···
1
1
-
{ lib
1
1
+
{
2
2
+
lib,
2
3
3
3
-
, fetchFromGitHub
4
4
-
, rustPlatform
4
4
+
fetchFromGitHub,
5
5
+
rustPlatform,
5
6
}:
6
7
7
8
rustPlatform.buildRustPackage rec {
···
26
27
mainProgram = "ebnfer";
27
28
};
28
29
}
29
29
-
+4
-3
pkgs/find-unicode.nix
reviewed
···
1
1
-
{ lib
1
1
+
{
2
2
+
lib,
2
3
3
3
-
, rustPlatform
4
4
-
, fetchFromGitHub
4
4
+
rustPlatform,
5
5
+
fetchFromGitHub,
5
6
}:
6
7
7
8
rustPlatform.buildRustPackage rec {
+5
-1
pkgs/lsr/deps.nix
reviewed
···
1
1
# generated by zon2nix (https://github.com/nix-community/zon2nix)
2
2
3
3
-
{ linkFarm, fetchzip, fetchgit }:
3
3
+
{
4
4
+
linkFarm,
5
5
+
fetchzip,
6
6
+
fetchgit,
7
7
+
}:
4
8
5
9
linkFarm "zig-packages" [
6
10
{
+4
-3
pkgs/names.nix
reviewed
···
1
1
-
{ lib
1
1
+
{
2
2
+
lib,
2
3
3
3
-
, fetchFromGitHub
4
4
-
, rustPlatform
4
4
+
fetchFromGitHub,
5
5
+
rustPlatform,
5
6
}:
6
7
7
8
rustPlatform.buildRustPackage rec {
+4
-3
pkgs/probe-rs-udev-rules.nix
reviewed
···
1
1
-
{ lib
2
2
-
, stdenv
3
3
-
, fetchurl
1
1
+
{
2
2
+
lib,
3
3
+
stdenv,
4
4
+
fetchurl,
4
5
}:
5
6
6
7
stdenv.mkDerivation rec {
+10
-7
secrets.nix
reviewed
···
2
2
inherit (builtins) listToAttrs attrNames;
3
3
4
4
# Map the name and value of all items of an attrset
5
5
-
mapAttrs' =
6
6
-
f:
7
7
-
set:
8
8
-
listToAttrs (map (attr: f attr set.${attr}) (attrNames set));
5
5
+
mapAttrs' = f: set: listToAttrs (map (attr: f attr set.${attr}) (attrNames set));
9
6
10
7
keys = import ./secrets/keys.nix;
11
8
12
12
-
prependAttrsName = prefix: mapAttrs' (name: value: { name = prefix + name; inherit value; });
9
9
+
prependAttrsName =
10
10
+
prefix:
11
11
+
mapAttrs' (
12
12
+
name: value: {
13
13
+
name = prefix + name;
14
14
+
inherit value;
15
15
+
}
16
16
+
);
13
17
secretsDir = path: prependAttrsName (path + "/") ((import ./${path}/default.nix) keys);
14
18
in
15
19
16
16
-
secretsDir "secrets"
17
17
-
// secretsDir "hosts/weird-row-server/secrets"
20
20
+
secretsDir "secrets" // secretsDir "hosts/weird-row-server/secrets"
+8
-2
secrets/keys.nix
reviewed
···
2
2
# Machine SSH key (/etc/ssh/ssh_host_ed25519_key.pub)
3
3
archaic-wiro-laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJDuBHC0f7N0q1KRczJMoaBVdY0JFOtcpPy6WlYsoxUh";
4
4
neo-wiro-laptop = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINR1/9o1HLnSRkXt3xxAM5So1YCCNdJpBN1leSu7giuR";
5
5
-
systems = [ archaic-wiro-laptop neo-wiro-laptop ];
5
5
+
systems = [
6
6
+
archaic-wiro-laptop
7
7
+
neo-wiro-laptop
8
8
+
];
6
9
7
10
weird-row-server = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII5sThvKuIj8yfeZzUPYfxWxnjTTdNtSID2OL4czE8AL";
8
11
servers = [ weird-row-server ];
···
14
17
# User keys (~/.ssh/id_{ed25519,ecdsa}.pub)
15
18
milo-ed25519 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJdt7atyPTOfaBIsgDYYb0DG1yid2u78abaCDji6Uxgi";
16
19
wirody = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMdW6ijH9oTsrswUJmQBF2LQkhjrMFkJ1LktnirPuL2S";
17
17
-
users = [ milo-ed25519 wirody ];
20
20
+
users = [
21
21
+
milo-ed25519
22
22
+
wirody
23
23
+
];
18
24
}
+25
-13
shells.nix
reviewed
···
1
1
-
{ lpkgs
2
2
-
, ...
1
1
+
{
2
2
+
lpkgs,
3
3
+
...
3
4
}@pkgs:
4
5
5
6
let
···
8
9
9
10
{
10
11
# Import packages of this flake along with useful tools for managing dotfiles
11
11
-
default = mkPackageShell (with pkgs; [
12
12
-
lpkgs.agenix
13
13
-
home-manager
14
14
-
just
15
15
-
nix-inspect
16
16
-
nixos-anywhere
17
17
-
nix-tree
18
18
-
]);
12
12
+
default = mkPackageShell (
13
13
+
with pkgs;
14
14
+
[
15
15
+
lpkgs.agenix
16
16
+
home-manager
17
17
+
just
18
18
+
nix-inspect
19
19
+
nixos-anywhere
20
20
+
nix-tree
21
21
+
]
22
22
+
);
19
23
20
24
# Add presets that I can quickly use
21
25
22
22
-
rust = mkPackageShell (with pkgs; [ rustup cargo-show-asm ]);
26
26
+
rust = mkPackageShell (
27
27
+
with pkgs;
28
28
+
[
29
29
+
rustup
30
30
+
cargo-show-asm
31
31
+
]
32
32
+
);
23
33
24
34
go = mkPackageShell (with pkgs; [ go ]);
25
35
26
36
python =
27
27
-
let pythonEnv = pkgs.python3.withPackages (ps: with ps; [ ipython ]);
28
28
-
in mkPackageShell [ pythonEnv ];
37
37
+
let
38
38
+
pythonEnv = pkgs.python3.withPackages (ps: with ps; [ ipython ]);
39
39
+
in
40
40
+
mkPackageShell [ pythonEnv ];
29
41
}
+22
-15
templates/blank/flake.nix
reviewed
···
3
3
nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable";
4
4
};
5
5
6
6
-
outputs = { self, nixpkgs }:
6
6
+
outputs =
7
7
+
{ self, nixpkgs }:
7
8
let
8
9
inherit (nixpkgs.lib) genAttrs;
9
10
10
10
-
forAllSystems = genAttrs [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ];
11
11
+
forAllSystems = genAttrs [
12
12
+
"x86_64-linux"
13
13
+
"aarch64-linux"
14
14
+
"aarch64-darwin"
15
15
+
];
11
16
forAllPkgs = function: forAllSystems (system: function pkgs.${system});
12
17
13
13
-
pkgs = forAllSystems (system: import nixpkgs {
14
14
-
inherit system;
15
15
-
overlays = [ ];
16
16
-
});
18
18
+
pkgs = forAllSystems (
19
19
+
system:
20
20
+
import nixpkgs {
21
21
+
inherit system;
22
22
+
overlays = [ ];
23
23
+
}
24
24
+
);
17
25
in
18
26
{
19
19
-
formatter = forAllPkgs (pkgs: pkgs.nixpkgs-fmt);
27
27
+
formatter = forAllPkgs (pkgs: pkgs.nixfmt-tree);
20
28
21
21
-
devShells = forAllPkgs (pkgs:
22
22
-
{
23
23
-
default = pkgs.mkShell {
24
24
-
packages = with pkgs; [
25
25
-
# hello
26
26
-
];
27
27
-
};
28
28
-
});
29
29
+
devShells = forAllPkgs (pkgs: {
30
30
+
default = pkgs.mkShell {
31
31
+
packages = with pkgs; [
32
32
+
# hello
33
33
+
];
34
34
+
};
35
35
+
});
29
36
};
30
37
}
+28
-12
templates/c/flake.nix
reviewed
···
3
3
nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable";
4
4
};
5
5
6
6
-
outputs = { self, nixpkgs }:
6
6
+
outputs =
7
7
+
{ self, nixpkgs }:
7
8
let
8
9
inherit (nixpkgs.lib) genAttrs;
9
10
10
10
-
forAllSystems = genAttrs [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ];
11
11
+
forAllSystems = genAttrs [
12
12
+
"x86_64-linux"
13
13
+
"aarch64-linux"
14
14
+
"aarch64-darwin"
15
15
+
];
11
16
forAllPkgs = function: forAllSystems (system: function pkgs.${system});
12
17
13
13
-
pkgs = forAllSystems (system: import nixpkgs {
14
14
-
inherit system;
15
15
-
overlays = [ ];
16
16
-
});
18
18
+
pkgs = forAllSystems (
19
19
+
system:
20
20
+
import nixpkgs {
21
21
+
inherit system;
22
22
+
overlays = [ ];
23
23
+
}
24
24
+
);
17
25
in
18
26
{
19
19
-
formatter = forAllPkgs (pkgs: pkgs.nixpkgs-fmt);
27
27
+
formatter = forAllPkgs (pkgs: pkgs.nixfmt-tree);
20
28
21
21
-
devShells = forAllPkgs (pkgs:
29
29
+
devShells = forAllPkgs (
30
30
+
pkgs:
22
31
let
23
32
mkClangShell = pkgs.mkShell.override { stdenv = pkgs.clangStdenv; };
24
33
in
25
34
{
26
35
default = mkClangShell {
27
27
-
packages = with pkgs; [
28
28
-
clang-tools
29
29
-
] ++ (with llvmPackages; [ clang lldb ]);
36
36
+
packages =
37
37
+
with pkgs;
38
38
+
[
39
39
+
clang-tools
40
40
+
]
41
41
+
++ (with llvmPackages; [
42
42
+
clang
43
43
+
lldb
44
44
+
]);
30
45
};
31
31
-
});
46
46
+
}
47
47
+
);
32
48
};
33
49
}
+30
-10
templates/rust-pkg/flake.nix
reviewed
···
9
9
gitignore.inputs.nixpkgs.follows = "nixpkgs";
10
10
};
11
11
12
12
-
outputs = { self, nixpkgs, rust-overlay, gitignore }:
12
12
+
outputs =
13
13
+
{
14
14
+
self,
15
15
+
nixpkgs,
16
16
+
rust-overlay,
17
17
+
gitignore,
18
18
+
}:
13
19
let
14
20
inherit (nixpkgs.lib) genAttrs getExe;
15
21
16
16
-
forAllSystems = genAttrs [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ];
22
22
+
forAllSystems = genAttrs [
23
23
+
"x86_64-linux"
24
24
+
"aarch64-linux"
25
25
+
"aarch64-darwin"
26
26
+
];
17
27
forAllPkgs = function: forAllSystems (system: function pkgs.${system});
18
28
19
19
-
mkApp = (program: { type = "app"; inherit program; });
29
29
+
mkApp = (
30
30
+
program: {
31
31
+
type = "app";
32
32
+
inherit program;
33
33
+
}
34
34
+
);
20
35
21
21
-
pkgs = forAllSystems (system: import nixpkgs {
22
22
-
inherit system;
23
23
-
overlays = [ (import rust-overlay) ];
24
24
-
});
36
36
+
pkgs = forAllSystems (
37
37
+
system:
38
38
+
import nixpkgs {
39
39
+
inherit system;
40
40
+
overlays = [ (import rust-overlay) ];
41
41
+
}
42
42
+
);
25
43
in
26
44
{
27
27
-
formatter = forAllPkgs (pkgs: pkgs.nixpkgs-fmt);
45
45
+
formatter = forAllPkgs (pkgs: pkgs.nixfmt-tree);
28
46
29
47
packages = forAllPkgs (pkgs: rec {
30
48
default = app;
···
35
53
app = mkApp (getExe self.packages.${system}.app);
36
54
});
37
55
38
38
-
devShells = forAllPkgs (pkgs:
56
56
+
devShells = forAllPkgs (
57
57
+
pkgs:
39
58
let
40
59
file-rust-toolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
41
60
rust-toolchain = file-rust-toolchain.override { extensions = [ "rust-analyzer" ]; };
···
49
68
50
69
RUST_SRC_PATH = pkgs.rustPlatform.rustLibSrc;
51
70
};
52
52
-
});
71
71
+
}
72
72
+
);
53
73
};
54
74
}
+7
-4
templates/rust-pkg/package.nix
reviewed
···
1
1
-
{ lib
1
1
+
{
2
2
+
lib,
2
3
3
3
-
, rustPlatform
4
4
-
, gitignore
4
4
+
rustPlatform,
5
5
+
gitignore,
5
6
}:
6
7
7
8
let
···
16
17
17
18
inherit src;
18
19
19
19
-
cargoLock = { lockFile = "${src}/Cargo.lock"; };
20
20
+
cargoLock = {
21
21
+
lockFile = "${src}/Cargo.lock";
22
22
+
};
20
23
21
24
nativeBuildInputs = [ ];
22
25
buildInputs = [ ];
+23
-9
templates/rust/flake.nix
reviewed
···
6
6
rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
7
7
};
8
8
9
9
-
outputs = { self, nixpkgs, rust-overlay }:
9
9
+
outputs =
10
10
+
{
11
11
+
self,
12
12
+
nixpkgs,
13
13
+
rust-overlay,
14
14
+
}:
10
15
let
11
16
inherit (nixpkgs.lib) genAttrs;
12
17
13
13
-
forAllSystems = genAttrs [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ];
18
18
+
forAllSystems = genAttrs [
19
19
+
"x86_64-linux"
20
20
+
"aarch64-linux"
21
21
+
"aarch64-darwin"
22
22
+
];
14
23
forAllPkgs = function: forAllSystems (system: function pkgs.${system});
15
24
16
16
-
pkgs = forAllSystems (system: import nixpkgs {
17
17
-
inherit system;
18
18
-
overlays = [ (import rust-overlay) ];
19
19
-
});
25
25
+
pkgs = forAllSystems (
26
26
+
system:
27
27
+
import nixpkgs {
28
28
+
inherit system;
29
29
+
overlays = [ (import rust-overlay) ];
30
30
+
}
31
31
+
);
20
32
in
21
33
{
22
22
-
formatter = forAllPkgs (pkgs: pkgs.nixpkgs-fmt);
34
34
+
formatter = forAllPkgs (pkgs: pkgs.nixfmt-tree);
23
35
24
24
-
devShells = forAllPkgs (pkgs:
36
36
+
devShells = forAllPkgs (
37
37
+
pkgs:
25
38
let
26
39
file-rust-toolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
27
40
rust-toolchain = file-rust-toolchain.override { extensions = [ "rust-analyzer" ]; };
···
35
48
36
49
RUST_SRC_PATH = pkgs.rustPlatform.rustLibSrc;
37
50
};
38
38
-
});
51
51
+
}
52
52
+
);
39
53
};
40
54
}