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