tangled
alpha
login
or
join now
bwc9876.dev
/
nixos-config
1
fork
atom
Flake for my NixOS devices
1
fork
atom
overview
issues
pulls
pipelines
Light at end of tunnel
bwc9876.dev
4 months ago
b5ee5fd2
de908872
verified
This commit was signed with the committer's
known signature
.
bwc9876.dev
SSH Key Fingerprint:
SHA256:DanMEP/RNlSC7pAVbnXO6wzQV00rqyKj053tz4uH5gQ=
+467
-215
18 changed files
expand all
collapse all
unified
split
flake.lock
flake.nix
homeModules
dev.nix
nushell.nix
nvim.nix
user-bean.nix
utils.nix
nixosConfigurations
aperture.nix
black-mesa.nix
installer.nix
nixosModules
base.nix
gaming.nix
imperm.nix
role-desktop.nix
role-laptop.nix
ssh-server.nix
user-bean.nix
res
nushellCompletions
fish.nu
+3
-3
flake.lock
···
11
11
"uv2nix": "uv2nix"
12
12
},
13
13
"locked": {
14
14
-
"lastModified": 1752124358,
15
15
-
"narHash": "sha256-9qKwgU/3L7k82Npus6J9Q07k+knu/UMPt4/a584cQa0=",
14
14
+
"lastModified": 1761868163,
15
15
+
"narHash": "sha256-YJtofqcj+T21aQ7odpjGfVnWrNkxQBLLadT3RpXRGS8=",
16
16
"owner": "Bwc9876",
17
17
"repo": "bingus-bot",
18
18
-
"rev": "7052483d43084bc6c63d647149eaa6a127199905",
18
18
+
"rev": "7d478090e875dc7425359891f40874ed55c11946",
19
19
"type": "github"
20
20
},
21
21
"original": {
+21
-20
flake.nix
···
37
37
};
38
38
};
39
39
40
40
-
outputs = inputs @ {
41
41
-
self,
42
42
-
nixpkgs,
43
43
-
flakelight,
44
44
-
nix-index-db,
45
45
-
hm,
46
46
-
nixos-hardware,
47
47
-
lanzaboote,
48
48
-
wayland-mpris-idle-inhibit,
49
49
-
fenix,
50
50
-
catppuccin,
51
51
-
nixvim,
52
52
-
imperm,
53
53
-
nu_plugin_dbus,
54
54
-
bingus,
55
55
-
spoon,
56
56
-
gh-grader-preview,
57
57
-
}:
40
40
+
outputs =
41
41
+
inputs@{
42
42
+
self,
43
43
+
nixpkgs,
44
44
+
flakelight,
45
45
+
nix-index-db,
46
46
+
hm,
47
47
+
nixos-hardware,
48
48
+
lanzaboote,
49
49
+
wayland-mpris-idle-inhibit,
50
50
+
fenix,
51
51
+
catppuccin,
52
52
+
nixvim,
53
53
+
imperm,
54
54
+
nu_plugin_dbus,
55
55
+
bingus,
56
56
+
spoon,
57
57
+
gh-grader-preview,
58
58
+
}:
58
59
flakelight ./. {
59
60
# imports = [
60
61
# spoon.flakelightModules.repl
···
66
67
"*.sh" = "shfmt -w .";
67
68
};
68
69
69
69
-
packages = nixpkgs.lib.genAttrs ["wayland-mpris-idle-inhibit" "nu_plugin_dbus"] (
70
70
-
i: {pkgs}: inputs.${i}.packages.${pkgs.system}.default
70
70
+
packages = nixpkgs.lib.genAttrs [ "wayland-mpris-idle-inhibit" "nu_plugin_dbus" ] (
71
71
+
i: { pkgs }: inputs.${i}.packages.${pkgs.system}.default
71
72
);
72
73
nixDir = ./.;
73
74
legacyPackages = pkgs: pkgs;
+6
-6
homeModules/dev.nix
···
5
5
...
6
6
}: {
7
7
options.cow.dev = let
8
8
-
mkLangOpt = d: ((lib.mkEnableOption d) // {default = true;});
8
8
+
mkLangOpt = d: ((lib.mkEnableOption d) // {default = config.cow.dev.enable;});
9
9
in {
10
10
enable = lib.mkEnableOption "Dev stuff (all on by default)";
11
11
-
c = mkLangOpt "C/C++ dev stuf";
11
11
+
c = mkLangOpt "C/C++ dev stuff";
12
12
rust = mkLangOpt "Rust dev stuff";
13
13
haskell = mkLangOpt "Haskell dev stuff";
14
14
-
js = mkLangOpt "JavaScript dev stuff";
14
14
+
web = mkLangOpt "Web dev stuff";
15
15
nix = mkLangOpt "Nix dev stuff";
16
16
python = mkLangOpt "Python dev stuff";
17
17
dotnet = mkLangOpt ".NET dev stuff";
···
24
24
nixpkgs.overlays = lib.optional conf.rust inputs.fenix.overlays.default;
25
25
26
26
xdg.configFile = {
27
27
-
"astro/config.json" = lib.mkIf conf.js {
27
27
+
"astro/config.json" = lib.mkIf conf.web {
28
28
text = builtins.toJSON {
29
29
telemetry = {
30
30
enabled = false;
···
46
46
".config/gh"
47
47
]
48
48
++ (lib.optional conf.rust ".cargo")
49
49
-
++ (lib.optionals conf.js [
49
49
+
++ (lib.optionals conf.web [
50
50
".npm"
51
51
".pnpm"
52
52
]);
···
80
80
mprocs
81
81
evcxr
82
82
])
83
83
-
++ (lib.optionals conf.js [
83
83
+
++ (lib.optionals conf.web [
84
84
nodejs_latest
85
85
nodePackages.pnpm
86
86
yarn
+56
-90
homeModules/nushell.nix
···
1
1
-
{...}: {
1
1
+
{ ... }:
2
2
+
{
2
3
config,
3
4
pkgs,
4
5
lib,
5
6
...
6
6
-
}: {
7
7
+
}:
8
8
+
{
7
9
options.cow.nushell = {
8
10
enable = lib.mkEnableOption "Nushell + Customizations";
9
11
commandNotFound = lib.mkEnableOption "Custom Nix Command Not Found for Nushell";
10
12
completers = {
11
11
-
carapace =
12
12
-
(lib.mkEnableOption "Carapace Completer In Nushell")
13
13
-
// {
14
14
-
default = true;
15
15
-
};
16
16
-
fish =
17
17
-
(lib.mkEnableOption "Fish Completions In Nushell")
18
18
-
// {
19
19
-
default = true;
20
20
-
};
13
13
+
carapace = (lib.mkEnableOption "Carapace Completer In Nushell") // {
14
14
+
default = true;
15
15
+
};
21
16
};
22
17
};
23
18
24
24
-
config = let
25
25
-
conf = config.cow.nushell;
26
26
-
in
19
19
+
config =
20
20
+
let
21
21
+
conf = config.cow.nushell;
22
22
+
in
27
23
lib.mkIf conf.enable {
28
28
-
cow.imperm.keep = [".local/share/zoxide"];
29
29
-
cow.imperm.keepFiles = [".config/nushell/history.txt"];
24
24
+
cow.imperm.keep = [ ".local/share/zoxide" ];
25
25
+
cow.imperm.keepFiles = [ ".config/nushell/history.txt" ];
30
26
31
27
programs = {
32
28
zoxide.enable = true;
33
29
command-not-found.enable = !conf.commandNotFound;
34
34
-
nushell = let
35
35
-
fishComplete = builtins.replaceStrings ["__fish__"] ["${pkgs.fish}/bin/fish"] (
36
36
-
lib.fileContents ../res/nushellCompletions/fish.nu
37
37
-
);
38
38
-
carapaceComplete = builtins.replaceStrings ["__carapace__"] ["${pkgs.carapace}/bin/carapace"] (
39
39
-
lib.fileContents ../res/nushellCompletions/carapace.nu
40
40
-
);
41
41
-
completions = ''
42
42
-
{|spans|
43
43
-
# if the current command is an alias, get it's expansion
44
44
-
let expanded_alias = (scope aliases | where name == $spans.0 | get -o 0 | get -o expansion)
45
45
-
46
46
-
# overwrite
47
47
-
48
48
-
let spans = (if $expanded_alias != null {
49
49
-
# put the first word of the expanded alias first in the span
50
50
-
$spans | skip 1 | prepend ($expanded_alias | split row " ")
51
51
-
} else { $spans })
52
52
-
53
53
-
match $spans.0 {
54
54
-
${lib.optionalString conf.completers.fish ''
55
55
-
nu => ${fishComplete}
56
56
-
git => ${fishComplete}
57
57
-
''}
58
58
-
_ => ${
59
59
-
if conf.completers.carapace
60
60
-
then carapaceComplete
61
61
-
else if conf.completers.fish
62
62
-
then fishComplete
63
63
-
else "{|spans| []}"
64
64
-
}
65
65
-
} | do $in $spans
66
66
-
}
67
67
-
'';
68
68
-
cnf = lib.fileContents ../res/command_not_found.nu;
69
69
-
nu_config = let
70
70
-
doCompletions = builtins.any (x: x) (builtins.attrValues conf.completers);
71
71
-
in ''
72
72
-
{
73
73
-
show_banner: false,
74
74
-
completions: {
75
75
-
external: {
76
76
-
enable: ${builtins.toJSON doCompletions}
77
77
-
completer: ${
78
78
-
if doCompletions
79
79
-
then completions
80
80
-
else "{|spans| []}"
81
81
-
}
82
82
-
},
83
83
-
},
84
84
-
hooks: {
85
85
-
${lib.optionalString conf.commandNotFound ''
86
86
-
command_not_found: ${cnf}
87
87
-
''}
88
88
-
}
89
89
-
}
90
90
-
'';
91
91
-
init-starship = pkgs.runCommand "starship-init" {} ''
92
92
-
${pkgs.starship}/bin/starship init nu > $out
93
93
-
'';
94
94
-
in {
95
95
-
enable = true;
96
96
-
configFile.text = ''
97
97
-
$env.config = ${nu_config}
30
30
+
nushell =
31
31
+
let
32
32
+
carapaceComplete = builtins.replaceStrings [ "__carapace__" ] [ "${pkgs.carapace}/bin/carapace" ] (
33
33
+
lib.fileContents ../res/nushellCompletions/carapace.nu
34
34
+
);
35
35
+
cnf = lib.fileContents ../res/command_not_found.nu;
36
36
+
nu_config =
37
37
+
let
38
38
+
doCompletions = builtins.any (x: x) (builtins.attrValues conf.completers);
39
39
+
in
40
40
+
''
41
41
+
{
42
42
+
show_banner: false,
43
43
+
completions: {
44
44
+
external: {
45
45
+
enable: ${builtins.toJSON doCompletions}
46
46
+
completer: ${if doCompletions then carapaceComplete else ''{|spans| []}''}
47
47
+
},
48
48
+
},
49
49
+
hooks: {
50
50
+
${lib.optionalString conf.commandNotFound ''
51
51
+
command_not_found: ${cnf}
52
52
+
''}
53
53
+
}
54
54
+
}
55
55
+
'';
56
56
+
init-starship = pkgs.runCommand "starship-init" { } ''
57
57
+
${pkgs.starship}/bin/starship init nu > $out
58
58
+
'';
59
59
+
in
60
60
+
{
61
61
+
enable = true;
62
62
+
configFile.text = ''
63
63
+
$env.config = ${nu_config}
98
64
99
99
-
${lib.optionalString config.cow.starship.enable ''
100
100
-
source ${init-starship}
101
101
-
''}
102
102
-
'';
103
103
-
shellAliases = {
104
104
-
"cd" = "z";
105
105
-
"py" = "python";
106
106
-
"🥺" = "sudo";
65
65
+
${lib.optionalString config.cow.starship.enable ''
66
66
+
source ${init-starship}
67
67
+
''}
68
68
+
'';
69
69
+
shellAliases = {
70
70
+
"cd" = "z";
71
71
+
"py" = "python";
72
72
+
"🥺" = "sudo";
73
73
+
};
107
74
};
108
108
-
};
109
75
};
110
76
};
111
77
}
+42
-30
homeModules/nvim.nix
···
110
110
open_neotree = {};
111
111
};
112
112
113
113
-
filetype.extension.mdx = "mdx";
113
113
+
filetype.extension = {
114
114
+
mdx = "mdx";
115
115
+
};
114
116
115
117
opts = {
116
118
number = true;
···
349
351
]
350
352
);
351
353
352
352
-
extraPlugins = with pkgs.vimPlugins; [
353
353
-
{plugin = pkgs.nvim-mdx;}
354
354
-
{plugin = satellite-nvim;}
355
355
-
{plugin = flatten-nvim;}
356
356
-
{plugin = tiny-devicons-auto-colors-nvim;}
357
357
-
];
354
354
+
extraPlugins = with pkgs.vimPlugins;
355
355
+
(lib.optional config.cow.dev.web {plugin = pkgs.nvim-mdx;})
356
356
+
++ [
357
357
+
{plugin = satellite-nvim;}
358
358
+
{plugin = flatten-nvim;}
359
359
+
{plugin = tiny-devicons-auto-colors-nvim;}
360
360
+
];
358
361
359
362
plugins = {
360
363
telescope = {
···
559
562
560
563
treesitter = {
561
564
enable = true;
562
562
-
luaConfig.post = ''
565
565
+
luaConfig.post = lib.mkIf config.cow.dev.web ''
563
566
require('mdx').setup()
564
567
'';
565
568
settings = {
···
877
880
lsp = {
878
881
inlayHints.enable = true;
879
882
880
880
-
servers = {
881
881
-
clangd.enable = true;
882
882
-
astro.enable = true;
883
883
-
hls = {
883
883
+
servers = let
884
884
+
inherit
885
885
+
(config.cow.dev)
886
886
+
dotnet
887
887
+
python
888
888
+
haskell
889
889
+
rust
890
890
+
web
891
891
+
c
892
892
+
;
893
893
+
in {
894
894
+
clangd.enable = c;
895
895
+
astro.enable = web;
896
896
+
hls = lib.mkIf haskell {
884
897
enable = true;
885
898
# ghcPackage = pkgs.haskell.compiler.ghc912;
886
899
package = pkgs.haskell.packages.ghc912.haskell-language-server;
887
900
};
888
888
-
sqls.enable = true;
889
889
-
mdx_analyzer = {
901
901
+
sqls.enable = web;
902
902
+
mdx_analyzer = lib.mkIf web {
890
903
enable = true;
891
904
package = pkgs.mdx-language-server;
892
905
};
893
906
# denols.enable = true;
894
894
-
ts_ls.enable = true;
895
895
-
html.enable = true;
896
896
-
marksman.enable = true;
897
897
-
cssls.enable = true;
898
898
-
tailwindcss.enable = true; # Disabled until it doesn't build nodejs from source, bad tailwind
899
899
-
jsonls.enable = true;
900
900
-
yamlls.enable = true;
901
901
-
ruff.enable = true;
902
902
-
csharp_ls.enable = true;
903
903
-
svelte.enable = true;
907
907
+
ts_ls.enable = web;
908
908
+
html.enable = web;
909
909
+
marksman.enable = web;
910
910
+
cssls.enable = web;
911
911
+
tailwindcss.enable = web;
912
912
+
jsonls.enable = web;
913
913
+
yamlls.enable = web;
914
914
+
ruff.enable = python;
915
915
+
csharp_ls.enable = dotnet;
916
916
+
svelte.enable = web;
904
917
nil_ls.enable = true;
905
918
bashls.enable = true;
906
906
-
nushell.enable = true;
907
907
-
taplo.enable = true;
919
919
+
nushell.enable = config.cow.nushell.enable;
920
920
+
taplo.enable = rust;
908
921
typos_lsp.enable = true;
909
909
-
rust_analyzer = {
922
922
+
rust_analyzer = lib.mkIf rust {
910
923
enable = true;
911
924
package = pkgs.rust-analyzer-nightly;
912
925
packageFallback = true;
913
926
};
914
914
-
lemminx.enable = true;
915
915
-
eslint.enable = true;
916
916
-
tinymist.enable = true;
927
927
+
lemminx.enable = web;
928
928
+
eslint.enable = web;
917
929
just.enable = true;
918
930
};
919
931
};
+5
-1
homeModules/user-bean.nix
···
8
8
pubkey = lib.mkOption {
9
9
type = lib.types.nullOr lib.types.str;
10
10
description = "Public key to accept for bean";
11
11
-
default = null;
11
11
+
default = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKsVzdJra+x5aEuwTjL1FBOiMh9bftvs8QwsM1xyEbdd";
12
12
};
13
13
};
14
14
···
35
35
signingKey = lib.mkIf (config.cow.bean.pubkey != null) config.cow.bean.pubkey;
36
36
};
37
37
};
38
38
+
};
39
39
+
40
40
+
home.sessionVariables = {
41
41
+
"EDITOR" = "nvim";
38
42
};
39
43
40
44
cow = {
+9
homeModules/utils.nix
···
26
26
libqalculate
27
27
p7zip
28
28
poop
29
29
+
file
30
30
+
screen
31
31
+
util-linux
32
32
+
inetutils
33
33
+
just
34
34
+
man-pages
35
35
+
htop
36
36
+
dig
37
37
+
doggo
29
38
30
39
hyfetch
31
40
fastfetch
+42
-42
nixosConfigurations/aperture.nix
···
1
1
{
2
2
lib,
3
3
-
config,
4
3
inputs,
5
4
outputs,
6
5
...
7
7
-
}: {
6
6
+
}:
7
7
+
{
8
8
system = "x86_64-linux";
9
9
10
10
-
modules =
11
11
-
(builtins.attrValues outputs.nixosModules)
12
12
-
++ [
13
13
-
inputs.nixos-hardware.nixosModules.framework-13th-gen-intel
14
14
-
{
15
15
-
home-manager.users.bean.home.stateVersion = "25.05";
16
16
-
system.stateVersion = "25.05";
17
17
-
networking.hostName = "aperture";
10
10
+
modules = (builtins.attrValues outputs.nixosModules) ++ [
11
11
+
inputs.nixos-hardware.nixosModules.framework-13th-gen-intel
12
12
+
{
13
13
+
home-manager.users.bean.home.stateVersion = "25.05";
14
14
+
system.stateVersion = "25.05";
15
15
+
networking.hostName = "aperture";
18
16
19
19
-
users.users = let
17
17
+
users.users =
18
18
+
let
20
19
secureRoot = "/nix/persist/secure";
21
21
-
in {
20
20
+
in
21
21
+
{
22
22
bean.password = "qaswedfr";
23
23
# bean.hashedPasswordFile = "${secureRoot}/hashed-passwd";
24
24
root.hashedPasswordFile = "${secureRoot}/hashed-passwd";
25
25
};
26
26
27
27
-
cow = {
28
28
-
lanzaboote.enable = true;
29
29
-
role-laptop = {
30
30
-
enable = true;
31
31
-
fingerPrintSensor = true;
32
32
-
};
33
33
-
gaming.enable = true;
34
34
-
imperm.enable = true;
35
35
-
disks = {
36
36
-
enable = true;
37
37
-
luks = true;
38
38
-
swap = true;
39
39
-
};
27
27
+
cow = {
28
28
+
lanzaboote.enable = true;
29
29
+
role-laptop = {
30
30
+
enable = true;
31
31
+
fingerPrintSensor = true;
40
32
};
33
33
+
gaming.enable = true;
34
34
+
imperm.enable = true;
35
35
+
disks = {
36
36
+
enable = true;
37
37
+
swap = true;
38
38
+
luks = true;
39
39
+
};
40
40
+
};
41
41
42
42
-
boot.initrd.availableKernelModules = [
43
43
-
"xhci_pci"
44
44
-
"thunderbolt"
45
45
-
"nvme"
46
46
-
"usb_storage"
47
47
-
"sd_mod"
48
48
-
];
49
49
-
boot.initrd.kernelModules = [];
50
50
-
boot.kernelModules = ["kvm-intel"];
51
51
-
boot.extraModulePackages = [];
52
52
-
boot.binfmt.emulatedSystems = ["aarch64-linux"];
42
42
+
boot.initrd.availableKernelModules = [
43
43
+
"xhci_pci"
44
44
+
"thunderbolt"
45
45
+
"nvme"
46
46
+
"usb_storage"
47
47
+
"sd_mod"
48
48
+
];
49
49
+
boot.initrd.kernelModules = [ ];
50
50
+
boot.kernelModules = [ "kvm-intel" ];
51
51
+
boot.extraModulePackages = [ ];
52
52
+
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
53
53
54
54
-
hardware.framework.enableKmod = false;
54
54
+
hardware.framework.enableKmod = false;
55
55
56
56
-
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
57
57
-
hardware.enableRedistributableFirmware = lib.mkDefault true;
58
58
-
hardware.cpu.intel.updateMicrocode = true;
59
59
-
}
60
60
-
];
56
56
+
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
57
57
+
hardware.enableRedistributableFirmware = lib.mkDefault true;
58
58
+
hardware.cpu.intel.updateMicrocode = true;
59
59
+
}
60
60
+
];
61
61
}
+88
nixosConfigurations/black-mesa.nix
···
1
1
+
{
2
2
+
inputs,
3
3
+
outputs,
4
4
+
...
5
5
+
}:
6
6
+
{
7
7
+
system = "x86_64-linux";
8
8
+
9
9
+
modules = (builtins.attrValues outputs.nixosModules) ++ [
10
10
+
inputs.nixos-hardware.nixosModules.common-gpu-amd
11
11
+
inputs.nixos-hardware.nixosModules.common-cpu-amd
12
12
+
{
13
13
+
home-manager.users.bean.home.stateVersion = "25.05";
14
14
+
system.stateVersion = "25.05";
15
15
+
networking.hostName = "black-mesa";
16
16
+
17
17
+
powerManagement.cpuFreqGovernor = "performance";
18
18
+
19
19
+
boot.initrd.availableKernelModules = [
20
20
+
"nvme"
21
21
+
"xhci_pci"
22
22
+
"ahci"
23
23
+
"usbhid"
24
24
+
"usb_storage"
25
25
+
"sd_mod"
26
26
+
];
27
27
+
boot.kernelModules = [ "kvm-amd" ];
28
28
+
boot.extraModulePackages = [ ];
29
29
+
30
30
+
# Other disks handled by cow.disks
31
31
+
fileSystems."/mnt/storage" = {
32
32
+
device = "/dev/sda1";
33
33
+
fsType = "btrfs";
34
34
+
};
35
35
+
36
36
+
users.users =
37
37
+
let
38
38
+
secureRoot = "/nix/persist/secure";
39
39
+
in
40
40
+
{
41
41
+
bean.hashedPasswordFile = "${secureRoot}/hashed-passwd";
42
42
+
root.hashedPasswordFile = "${secureRoot}/hashed-passwd";
43
43
+
};
44
44
+
45
45
+
cow = {
46
46
+
lanzaboote.enable = true;
47
47
+
ssh-server.enable = true;
48
48
+
role-desktop.enable = true;
49
49
+
gaming.enable = true;
50
50
+
imperm.enable = true;
51
51
+
disks = {
52
52
+
enable = true;
53
53
+
swap = true;
54
54
+
luks = true;
55
55
+
};
56
56
+
};
57
57
+
}
58
58
+
{
59
59
+
# Bingus!
60
60
+
imports = [ inputs.bingus.nixosModules.default ];
61
61
+
nixpkgs.overlays = [ inputs.bingus.overlays.default ];
62
62
+
63
63
+
services.bingus-bot = {
64
64
+
enable = true;
65
65
+
replyChannels = [
66
66
+
1295447496948191262
67
67
+
1295245646542143489
68
68
+
];
69
69
+
};
70
70
+
}
71
71
+
{
72
72
+
# for WOL
73
73
+
systemd.network.links."79-eth-wol" = {
74
74
+
matchConfig = {
75
75
+
Type = "ether";
76
76
+
Driver = "!veth";
77
77
+
Virtualization = "false";
78
78
+
};
79
79
+
linkConfig = {
80
80
+
WakeOnLan = "magic";
81
81
+
NamePolicy = "keep kernel database onboard slot path";
82
82
+
AlternativeNamesPolicy = "database onboard slot path mac";
83
83
+
MACAddressPolicy = "persistent";
84
84
+
};
85
85
+
};
86
86
+
}
87
87
+
];
88
88
+
}
+99
nixosConfigurations/installer.nix
···
1
1
+
{
2
2
+
lib,
3
3
+
outputs,
4
4
+
...
5
5
+
}:
6
6
+
{
7
7
+
system = "x86_64-linux";
8
8
+
9
9
+
modules = (builtins.attrValues outputs.nixosModules) ++ [
10
10
+
(
11
11
+
{
12
12
+
modulesPath,
13
13
+
pkgs,
14
14
+
...
15
15
+
}:
16
16
+
{
17
17
+
imports = [
18
18
+
"${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix"
19
19
+
];
20
20
+
21
21
+
services.kmscon = {
22
22
+
enable = true;
23
23
+
autologinUser = "root";
24
24
+
fonts = [
25
25
+
{
26
26
+
name = "FiraMono Nerd Font Mono";
27
27
+
package = pkgs.nerd-fonts.fira-mono;
28
28
+
}
29
29
+
];
30
30
+
};
31
31
+
32
32
+
boot =
33
33
+
let
34
34
+
supportedFilesystems = {
35
35
+
btrfs = true;
36
36
+
reiserfs = lib.mkForce false;
37
37
+
vfat = true;
38
38
+
f2fs = true;
39
39
+
xfs = true;
40
40
+
ntfs = true;
41
41
+
cifs = true;
42
42
+
zfs = lib.mkForce false;
43
43
+
};
44
44
+
in
45
45
+
{
46
46
+
initrd.systemd.enable = false;
47
47
+
inherit supportedFilesystems;
48
48
+
initrd = {
49
49
+
inherit supportedFilesystems;
50
50
+
};
51
51
+
};
52
52
+
53
53
+
system.extraDependencies = [
54
54
+
outputs.nixosConfigurations.aperture.config.system.build.toplevel
55
55
+
outputs.nixosConfigurations.black-mesa.config.system.build.toplevel
56
56
+
];
57
57
+
58
58
+
environment.systemPackages = with pkgs; [
59
59
+
disko
60
60
+
sbctl
61
61
+
];
62
62
+
}
63
63
+
)
64
64
+
(
65
65
+
{ pkgs, ... }:
66
66
+
{
67
67
+
system.stateVersion = "25.05";
68
68
+
networking.hostName = "cow-installer";
69
69
+
70
70
+
networking.networkmanager.enable = lib.mkForce false;
71
71
+
72
72
+
users.users.root = {
73
73
+
shell = pkgs.nushell;
74
74
+
};
75
75
+
76
76
+
home-manager.users.root.home.stateVersion = "25.05";
77
77
+
home-manager.users.root.cow = {
78
78
+
nushell = {
79
79
+
enable = true;
80
80
+
commandNotFound = true;
81
81
+
};
82
82
+
neovim.enable = true;
83
83
+
htop.enable = true;
84
84
+
starship.enable = true;
85
85
+
yazi.enable = true;
86
86
+
dev.enable = false;
87
87
+
comma.enable = true;
88
88
+
cat.enable = true;
89
89
+
};
90
90
+
91
91
+
cow = {
92
92
+
network.wireless = true;
93
93
+
hm.enable = true;
94
94
+
cat.enable = true;
95
95
+
};
96
96
+
}
97
97
+
)
98
98
+
];
99
99
+
}
+4
nixosModules/base.nix
···
21
21
];
22
22
environment.etc."flake-src".source = inputs.self;
23
23
24
24
+
programs.ssh.startAgent = true;
25
25
+
documentation.man.generateCaches = false;
26
26
+
services.upower.enable = true;
27
27
+
24
28
boot.tmp.cleanOnBoot = lib.mkDefault true;
25
29
services.logind.settings.Login.RuntimeDirectorySize = lib.mkDefault "100M";
26
30
+4
-1
nixosModules/gaming.nix
···
15
15
extest.enable = true;
16
16
};
17
17
18
18
-
programs.gamescope.enable = true;
18
18
+
programs.gamescope = {
19
19
+
enable = true;
20
20
+
capSysNice = true;
21
21
+
};
19
22
20
23
environment.systemPackages = with pkgs; [
21
24
prismlauncher
+2
nixosModules/imperm.nix
···
21
21
keep = lib.mkOption {
22
22
type = lib.types.listOf lib.types.str;
23
23
description = "Paths to keep that should be backed up";
24
24
+
default = [];
24
25
};
25
26
keepCache = lib.mkOption {
26
27
type = lib.types.listOf lib.types.str;
27
28
description = "Paths to keep that shouldn't be backed up";
29
29
+
default = [];
28
30
};
29
31
};
30
32
+39
nixosModules/role-desktop.nix
···
1
1
+
{...}: {
2
2
+
config,
3
3
+
lib,
4
4
+
...
5
5
+
}: {
6
6
+
options.cow.role-desktop = {
7
7
+
enable = lib.mkEnableOption "configuring a desktop computer with GUI";
8
8
+
};
9
9
+
10
10
+
config = lib.mkIf config.cow.role-desktop.enable {
11
11
+
security.sudo.wheelNeedsPassword = false;
12
12
+
13
13
+
home-manager.users.bean.cow = {
14
14
+
music.enable = true;
15
15
+
news.enable = true;
16
16
+
qmplay2.enable = true;
17
17
+
sync.enable = true;
18
18
+
kde-connect.enable = true;
19
19
+
dev.enable = true;
20
20
+
};
21
21
+
22
22
+
cow = {
23
23
+
bean.enable = true;
24
24
+
firewall.openForUsers = true;
25
25
+
hm.enable = true;
26
26
+
network = {
27
27
+
bluetooth = lib.mkDefault true;
28
28
+
wireless = lib.mkDefault true;
29
29
+
};
30
30
+
cat.enable = true;
31
31
+
gdi = {
32
32
+
enable = true;
33
33
+
doIdle = lib.mkDefault false;
34
34
+
showGreet = true;
35
35
+
};
36
36
+
audio.enable = true;
37
37
+
};
38
38
+
};
39
39
+
}
+1
nixosModules/role-laptop.nix
···
30
30
cat.enable = true;
31
31
gdi = {
32
32
enable = true;
33
33
+
doIdle = true;
33
34
showGreet = true;
34
35
};
35
36
audio.enable = true;
+34
nixosModules/ssh-server.nix
···
1
1
+
{...}: {
2
2
+
lib,
3
3
+
config,
4
4
+
...
5
5
+
}: {
6
6
+
options.cow.ssh-server.enable = lib.mkEnableOption "OpenSSH daemon for accepting connections + customizations. Uses port 8069";
7
7
+
8
8
+
config = lib.mkIf config.cow.ssh-server.enable {
9
9
+
# For nicer term rendering
10
10
+
environment.enableAllTerminfo = true;
11
11
+
12
12
+
services.openssh = {
13
13
+
enable = true;
14
14
+
openFirewall = true;
15
15
+
banner = ''
16
16
+
-=≡ ${lib.toUpper config.networking.hostName} ≡=-
17
17
+
18
18
+
'';
19
19
+
listenAddresses = [
20
20
+
{
21
21
+
addr = "0.0.0.0";
22
22
+
}
23
23
+
];
24
24
+
# TODO: Maybe just use 22 like a normal person
25
25
+
ports = [8069];
26
26
+
settings.GSSAPIAuthentication = false;
27
27
+
settings.PasswordAuthentication = false;
28
28
+
settings.UseDns = false;
29
29
+
# settings.LogLevel = "DEBUG1";
30
30
+
settings.PermitRootLogin = "no";
31
31
+
settings.KbdInteractiveAuthentication = false;
32
32
+
};
33
33
+
};
34
34
+
}
+12
-9
nixosModules/user-bean.nix
···
1
1
-
{...}: {
1
1
+
{ ... }:
2
2
+
{
2
3
config,
3
4
lib,
4
5
pkgs,
5
6
...
6
6
-
}: let
7
7
+
}:
8
8
+
let
7
9
pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKsVzdJra+x5aEuwTjL1FBOiMh9bftvs8QwsM1xyEbdd";
8
8
-
in {
10
10
+
in
11
11
+
{
9
12
options.cow.bean = {
10
13
enable = lib.mkEnableOption "Bean user";
11
14
sudoer = lib.mkEnableOption "Bean being a sudoer";
12
15
};
13
16
14
14
-
config = {
15
15
-
users.users.bean = lib.mkIf config.cow.bean.enable {
17
17
+
config = lib.mkIf config.cow.bean.enable {
18
18
+
users.users.bean = {
16
19
isNormalUser = true;
17
20
description = "Ben C";
18
21
extraGroups = lib.optional config.cow.bean.sudoer "wheel";
19
22
shell = pkgs.nushell;
20
20
-
openssh.authorizedKeys.keys = pubkey;
23
23
+
openssh.authorizedKeys.keys = [ pubkey ];
21
24
};
22
25
23
26
home-manager.users.bean = {
24
27
cow.bean = {
25
25
-
enable = config.cow.bean.enable;
28
28
+
inherit (config.cow.bean) enable;
26
29
inherit pubkey;
27
30
};
28
28
-
cow.games.enable = config.cow.bean.enable && config.cow.gaming.enable;
29
29
-
cow.gdi = lib.mkIf config.cow.bean.enable {
31
31
+
cow.games.enable = config.cow.gaming.enable;
32
32
+
cow.gdi = {
30
33
inherit (config.cow.gdi) enable doIdle;
31
34
useUWSM = true;
32
35
};
-13
res/nushellCompletions/fish.nu
···
1
1
-
{|spans|
2
2
-
__fish__ --command $"complete '--do-complete=($spans | str replace --all "'" "\\'" | str join ' ')'"
3
3
-
| from tsv --flexible --noheaders --no-infer
4
4
-
| rename value description
5
5
-
| update value {|row|
6
6
-
let value = $row.value
7
7
-
let need_quote = ['\' ',' '[' ']' '(' ')' ' ' '\t' "'" '"' "`"] | any {$in in $value}
8
8
-
if ($need_quote and ($value | path exists)) {
9
9
-
let expanded_path = if ($value starts-with ~) {$value | path expand --no-symlink} else {$value}
10
10
-
$'"($expanded_path | str replace --all "\"" "\\\"")"'
11
11
-
} else {$value}
12
12
-
}
13
13
-
}