tangled
alpha
login
or
join now
pluie.me
/
flake
2
fork
atom
All my system configs and packages in one repo
2
fork
atom
overview
issues
pulls
pipelines
lots of things
pluie.me
8 months ago
0b848851
8b3ab30b
verified
This commit was signed with the committer's
known signature
.
pluie.me
SSH Key Fingerprint:
SHA256:YtI1D7vlcZ4obaiJ4tQihtswcMhHKdfYZuc4whOX2y8=
+364
-101
22 changed files
expand all
collapse all
unified
split
README.md
flake.lock
modules
hjem-ctp
fish.nix
hjem-ext
default.nix
programs
git.nix
jujutsu.nix
moar.nix
swaylock.nix
packages
breezex-cursor
package.nix
dm-sans-unstable
package.nix
fontawesome-free
package.nix
systems
common.nix
fettuccine
default.nix
hardware-configuration.nix
users
leah
appearance.nix
presets
niri
config.kdl
default.nix
services.nix
programs
default.nix
firefox
default.nix
fish.nix
vcs.nix
+1
-1
README.md
···
1
-
My Nix [flake](https://nixos.wiki/wiki/Flakes) containing all of my system configurations, userland settings, custom packages and more!
···
1
+
My Nix [flake](https://wiki.nixos.org/wiki/Flakes) containing all of my system configurations, userland settings, custom packages and more!
+4
-4
flake.lock
···
241
},
242
"nixpkgs": {
243
"locked": {
244
-
"lastModified": 1748769915,
245
-
"narHash": "sha256-fY+Pv/vF9bIzgmG+u56ZzqmP+ALLtcHLc9Xp+44FvZc=",
246
-
"rev": "910796cabe436259a29a72e8d3f5e180fc6dfacc",
247
"type": "tarball",
248
-
"url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre808478.910796cabe43/nixexprs.tar.xz"
249
},
250
"original": {
251
"type": "tarball",
···
241
},
242
"nixpkgs": {
243
"locked": {
244
+
"lastModified": 1751332518,
245
+
"narHash": "sha256-BTVn9nIjhCeWpaxOs3Wbhwum4xID4p36dbmEfLDyh9Y=",
246
+
"rev": "3016b4b15d13f3089db8a41ef937b13a9e33a8df",
247
"type": "tarball",
248
+
"url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre823481.3016b4b15d13/nixexprs.tar.xz"
249
},
250
"original": {
251
"type": "tarball",
+2
-3
modules/hjem-ctp/fish.nix
···
18
};
19
in
20
{
21
-
options.ctp.fish = ctp-lib.mkCatppuccinOptions "Fish" {};
22
23
config = lib.mkIf cfg.enable {
24
-
files.".config/fish/themes/${themeName}.theme".source =
25
-
"${src}/themes/${themeName}.theme";
26
27
rum.programs.fish.earlyConfigFiles.ctp-fish = ''
28
fish_config theme choose "${themeName}"
···
18
};
19
in
20
{
21
+
options.ctp.fish = ctp-lib.mkCatppuccinOptions "Fish" { };
22
23
config = lib.mkIf cfg.enable {
24
+
files.".config/fish/themes/${themeName}.theme".source = "${src}/themes/${themeName}.theme";
0
25
26
rum.programs.fish.earlyConfigFiles.ctp-fish = ''
27
fish_config theme choose "${themeName}"
+1
modules/hjem-ext/default.nix
···
5
./programs/hyfetch.nix
6
./programs/jujutsu.nix
7
./programs/moar.nix
0
8
./programs/vesktop.nix
9
];
10
}
···
5
./programs/hyfetch.nix
6
./programs/jujutsu.nix
7
./programs/moar.nix
8
+
./programs/swaylock.nix
9
./programs/vesktop.nix
10
];
11
}
+3
-2
modules/hjem-ext/programs/git.nix
···
23
24
config = lib.mkIf cfg.enable {
25
packages = [ cfg.package ];
26
-
files.".config/git/config".source = lib.mkIf (cfg.settings != { })
27
-
(format.generate "git-config" cfg.settings);
0
28
};
29
}
···
23
24
config = lib.mkIf cfg.enable {
25
packages = [ cfg.package ];
26
+
files.".config/git/config".source = lib.mkIf (cfg.settings != { }) (
27
+
format.generate "git-config" cfg.settings
28
+
);
29
};
30
}
+3
-2
modules/hjem-ext/programs/jujutsu.nix
···
23
24
config = lib.mkIf cfg.enable {
25
packages = [ cfg.package ];
26
-
files.".config/jj/config.toml".source = lib.mkIf (cfg.settings != { })
27
-
(format.generate "jj-config.toml" cfg.settings);
0
28
};
29
}
···
23
24
config = lib.mkIf cfg.enable {
25
packages = [ cfg.package ];
26
+
files.".config/jj/config.toml".source = lib.mkIf (cfg.settings != { }) (
27
+
format.generate "jj-config.toml" cfg.settings
28
+
);
29
};
30
}
+17
-13
modules/hjem-ext/programs/moar.nix
···
7
let
8
cfg = config.ext.programs.moar;
9
10
-
toFlag = k: v: if lib.isBool v then
11
-
lib.optionalString (v) "-${k}"
12
-
else if lib.isString v then
13
-
"-${k}=${v}"
14
-
else
15
-
throw "Unsupported type";
16
-
0
0
17
in
18
{
19
options.ext.programs.moar = {
20
enable = lib.mkEnableOption "Moar";
21
22
-
package = lib.mkPackageOption pkgs "moar" {};
23
24
settings = lib.mkOption {
25
type = lib.types.submodule {
26
-
freeformType = with lib.types; attrsOf (oneOf [
27
-
str
28
-
bool
29
-
]);
0
0
30
};
31
-
default = {};
32
};
33
};
34
···
7
let
8
cfg = config.ext.programs.moar;
9
10
+
toFlag =
11
+
k: v:
12
+
if lib.isBool v then
13
+
lib.optionalString (v) "-${k}"
14
+
else if lib.isString v then
15
+
"-${k}=${v}"
16
+
else
17
+
throw "Unsupported type";
18
+
19
in
20
{
21
options.ext.programs.moar = {
22
enable = lib.mkEnableOption "Moar";
23
24
+
package = lib.mkPackageOption pkgs "moar" { };
25
26
settings = lib.mkOption {
27
type = lib.types.submodule {
28
+
freeformType =
29
+
with lib.types;
30
+
attrsOf (oneOf [
31
+
str
32
+
bool
33
+
]);
34
};
35
+
default = { };
36
};
37
};
38
+51
modules/hjem-ext/programs/swaylock.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
···
1
+
{
2
+
config,
3
+
lib,
4
+
pkgs,
5
+
...
6
+
}:
7
+
let
8
+
cfg = config.ext.programs.swaylock;
9
+
10
+
finalPackage = pkgs.writeShellApplication {
11
+
name = "swaylock";
12
+
runtimeInputs = [ cfg.package ];
13
+
text = ''
14
+
exec swaylock ${lib.cli.toGNUCommandLineShell { } cfg.settings} "$@"
15
+
'';
16
+
};
17
+
in
18
+
{
19
+
options.ext.programs.swaylock = {
20
+
enable = lib.mkEnableOption "Swaylock";
21
+
22
+
package = lib.mkPackageOption pkgs "swaylock" { };
23
+
24
+
finalPackage = lib.mkOption {
25
+
type = lib.types.package;
26
+
readOnly = true;
27
+
default = finalPackage;
28
+
description = ''
29
+
The final package after all options have been applied.
30
+
'';
31
+
};
32
+
33
+
settings = lib.mkOption {
34
+
type = lib.types.submodule {
35
+
freeformType =
36
+
with lib.types;
37
+
attrsOf (oneOf [
38
+
str
39
+
bool
40
+
int
41
+
float
42
+
]);
43
+
};
44
+
default = { };
45
+
};
46
+
};
47
+
48
+
config = lib.mkIf cfg.enable {
49
+
packages = [ finalPackage ];
50
+
};
51
+
}
-1
packages/breezex-cursor/package.nix
···
1
-
2
{
3
stdenvNoCC,
4
fetchFromGitHub,
···
0
1
{
2
stdenvNoCC,
3
fetchFromGitHub,
+3
-1
packages/dm-sans-unstable/package.nix
···
26
mkdir -p $out/share/fonts/{opentype,truetype,woff}
27
cp Sans/fonts/otf/*.otf $out/share/fonts/opentype
28
29
-
cp Sans/fonts/ttf/${lib.optionalString (!enableSizeSpecialization) "DMSans-"}*.ttf $out/share/fonts/truetype
0
0
30
cp Sans/fonts/variable/*.ttf $out/share/fonts/truetype
31
${lib.optionalString enableWebFonts ''cp Sans/fonts/webfonts/*.woff2 $out/share/fonts/woff''}
32
···
26
mkdir -p $out/share/fonts/{opentype,truetype,woff}
27
cp Sans/fonts/otf/*.otf $out/share/fonts/opentype
28
29
+
cp Sans/fonts/ttf/${
30
+
lib.optionalString (!enableSizeSpecialization) "DMSans-"
31
+
}*.ttf $out/share/fonts/truetype
32
cp Sans/fonts/variable/*.ttf $out/share/fonts/truetype
33
${lib.optionalString enableWebFonts ''cp Sans/fonts/webfonts/*.woff2 $out/share/fonts/woff''}
34
+31
packages/fontawesome-free/package.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
···
1
+
{
2
+
lib,
3
+
stdenvNoCC,
4
+
fetchzip,
5
+
}:
6
+
stdenvNoCC.mkDerivation (finalAttrs: {
7
+
pname = "fontawesome-free";
8
+
version = "6.7.2";
9
+
10
+
src = fetchzip {
11
+
url = "https://use.fontawesome.com/releases/v${finalAttrs.version}/fontawesome-free-${finalAttrs.version}-desktop.zip";
12
+
hash = "sha256-jkXTyVyK2OtHQTykMAjrov0cpj4Kktk/cn4bEMHi6tY=";
13
+
};
14
+
15
+
dontConfigure = true;
16
+
dontBuild = true;
17
+
dontFixup = true;
18
+
19
+
installPhase = ''
20
+
runHook preInstall
21
+
install -Dm644 otfs/*.otf -t $out/share/fonts/opentype
22
+
install -Dm644 LICENSE.txt -t $out/share/doc/fontawesome
23
+
runHook postInstall
24
+
'';
25
+
26
+
meta = {
27
+
description = "Font Awesome OpenType fonts (Free version)";
28
+
license = lib.licenses.ofl;
29
+
platforms = lib.platforms.all;
30
+
};
31
+
})
+3
-6
systems/common.nix
···
31
"configurable-impure-env"
32
];
33
trusted-users = [ "@wheel" ];
34
-
# impure-env = [ "all_proxy=http://127.0.0.1:2080" ];
35
};
36
};
37
···
41
allowUnfree = true;
42
cudaSupport = true;
43
};
44
-
45
flake.setNixPath = true;
46
47
overlays = [ inputs.self.overlays.default ];
···
114
115
networking.networkmanager = {
116
enable = true;
117
-
118
-
# Fuck wpa_supplicant
119
-
wifi.backend = "iwd";
120
};
121
122
system = {
···
132
# thanks to @getchoo
133
autoUpgrade = {
134
enable = true;
135
-
flake = "github:pluiedev/flake#${config.networking.hostName}";
136
flags = [ "--refresh" ];
137
};
138
···
31
"configurable-impure-env"
32
];
33
trusted-users = [ "@wheel" ];
34
+
impure-env = [ "all_proxy=http://127.0.0.1:2080" ];
35
};
36
};
37
···
41
allowUnfree = true;
42
cudaSupport = true;
43
};
44
+
45
flake.setNixPath = true;
46
47
overlays = [ inputs.self.overlays.default ];
···
114
115
networking.networkmanager = {
116
enable = true;
0
0
0
117
};
118
119
system = {
···
129
# thanks to @getchoo
130
autoUpgrade = {
131
enable = true;
132
+
flake = "git+https://tangled.sh/@pluie.me/flake#${config.networking.hostName}";
133
flags = [ "--refresh" ];
134
};
135
+4
-4
systems/fettuccine/default.nix
···
58
# cache.nixos.org is *unbearably* slow when accessed from Mainland China.
59
# Fortunately, mirror sites exist... Hooray(?)
60
nix.settings.substituters = map (url: "${url}/nix-channels/store") [
61
-
"https://mirrors.ustc.edu.cn"
62
-
"https://mirrors6.tuna.tsinghua.edu.cn"
63
-
"https://mirrors.tuna.tsinghua.edu.cn"
64
-
# "https://mirror.sjtu.edu.cn" # FIXME: buggy?
65
];
66
};
67
}
···
58
# cache.nixos.org is *unbearably* slow when accessed from Mainland China.
59
# Fortunately, mirror sites exist... Hooray(?)
60
nix.settings.substituters = map (url: "${url}/nix-channels/store") [
61
+
"https://mirrors.ustc.edu.cn"
62
+
"https://mirrors6.tuna.tsinghua.edu.cn"
63
+
"https://mirrors.tuna.tsinghua.edu.cn"
64
+
# "https://mirror.sjtu.edu.cn" # FIXME: buggy?
65
];
66
};
67
}
+59
-6
systems/fettuccine/hardware-configuration.nix
···
0
0
0
1
{
2
config,
3
lib,
0
4
modulesPath,
5
...
6
}:
···
16
"vmd"
17
"nvme"
18
"usbhid"
0
0
19
"sdhci_pci"
20
];
21
boot.initrd.kernelModules = [ ];
···
23
boot.extraModulePackages = [ ];
24
25
fileSystems."/" = {
26
-
device = "/dev/disk/by-uuid/cba5d724-0a83-4680-8f2f-cb11084fce72";
27
-
fsType = "ext4";
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
28
};
29
30
fileSystems."/boot" = {
31
-
device = "/dev/disk/by-uuid/05D1-6882";
32
fsType = "vfat";
33
options = [
34
"fmask=0022"
···
36
];
37
};
38
39
-
swapDevices = [
40
-
{ device = "/dev/disk/by-uuid/d3a01a34-de64-4f58-b29f-ae973cb3e8c2"; }
41
-
];
42
43
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
44
# (the default) this is the recommended approach. When using systemd-networkd it's
···
1
+
# Do not modify this file! It was generated by ‘nixos-generate-config’
2
+
# and may be overwritten by future invocations. Please make changes
3
+
# to /etc/nixos/configuration.nix instead.
4
{
5
config,
6
lib,
7
+
pkgs,
8
modulesPath,
9
...
10
}:
···
20
"vmd"
21
"nvme"
22
"usbhid"
23
+
"usb_storage"
24
+
"sd_mod"
25
"sdhci_pci"
26
];
27
boot.initrd.kernelModules = [ ];
···
29
boot.extraModulePackages = [ ];
30
31
fileSystems."/" = {
32
+
device = "/dev/disk/by-uuid/c791e720-40c0-414a-aa36-0effa900c33d";
33
+
fsType = "btrfs";
34
+
options = [
35
+
"subvol=root"
36
+
"compress=zstd"
37
+
"noatime"
38
+
];
39
+
};
40
+
41
+
boot.initrd.luks.devices."enc".device = "/dev/disk/by-uuid/f9758e84-dadf-4cae-a654-a10d77520100";
42
+
43
+
fileSystems."/home" = {
44
+
device = "/dev/disk/by-uuid/c791e720-40c0-414a-aa36-0effa900c33d";
45
+
fsType = "btrfs";
46
+
options = [
47
+
"subvol=home"
48
+
"compress=zstd"
49
+
"noatime"
50
+
];
51
+
};
52
+
53
+
fileSystems."/nix" = {
54
+
device = "/dev/disk/by-uuid/c791e720-40c0-414a-aa36-0effa900c33d";
55
+
fsType = "btrfs";
56
+
options = [
57
+
"subvol=nix"
58
+
"compress=zstd"
59
+
"noatime"
60
+
];
61
+
};
62
+
63
+
fileSystems."/persist" = {
64
+
device = "/dev/disk/by-uuid/c791e720-40c0-414a-aa36-0effa900c33d";
65
+
fsType = "btrfs";
66
+
options = [
67
+
"subvol=persist"
68
+
"compress=zstd"
69
+
"noatime"
70
+
];
71
+
neededForBoot = true;
72
+
};
73
+
74
+
fileSystems."/var/log" = {
75
+
device = "/dev/disk/by-uuid/c791e720-40c0-414a-aa36-0effa900c33d";
76
+
fsType = "btrfs";
77
+
options = [
78
+
"subvol=log"
79
+
"compress=zstd"
80
+
"noatime"
81
+
];
82
+
neededForBoot = true;
83
};
84
85
fileSystems."/boot" = {
86
+
device = "/dev/disk/by-uuid/7839-0EC5";
87
fsType = "vfat";
88
options = [
89
"fmask=0022"
···
91
];
92
};
93
94
+
swapDevices = [ ];
0
0
95
96
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
97
# (the default) this is the recommended approach. When using systemd-networkd it's
+1
users/leah/appearance.nix
···
74
i-dot-ming
75
lxgw-neoxihei
76
dm-sans-unstable
0
77
];
78
79
fontconfig = {
···
74
i-dot-ming
75
lxgw-neoxihei
76
dm-sans-unstable
77
+
fontawesome-free
78
];
79
80
fontconfig = {
+91
-7
users/leah/presets/niri/config.kdl
···
17
workspace-auto-back-and-forth
18
}
19
0
0
0
0
0
0
0
0
0
0
0
0
0
20
output "eDP-1" {
21
-
mode "2560x1600"
22
scale 1.25
23
-
transform "normal"
24
variable-refresh-rate
0
0
0
0
0
0
0
25
}
26
27
layout {
28
gaps 24
29
center-focused-column "on-overflow"
30
always-center-single-column
0
31
32
preset-column-widths {
33
proportion 0.33333
···
35
proportion 0.66667
36
}
37
38
-
default-column-width {}
0
0
39
40
focus-ring {
41
-
width 1.5
42
active-color "#eba0ac"
43
-
inactive-color "#505050"
0
0
0
0
0
0
0
0
0
0
44
}
45
46
shadow {
···
50
offset x=0 y=5
51
color "#0007"
52
}
0
0
0
0
0
0
0
53
}
54
55
-
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
56
57
window-rule {
58
geometry-corner-radius 12
59
clip-to-geometry true
60
}
61
0
0
0
0
0
0
0
0
0
62
window-rule {
63
match app-id="com.mitchellh.ghostty"
0
64
draw-border-with-background false
65
}
66
···
243
244
// Workspaces & default apps
245
workspace "chat"
246
-
workspace "dev"
0
0
247
workspace "gaming"
248
249
spawn-at-startup "waybar"
···
251
spawn-at-startup "xwayland-satellite"
252
spawn-at-startup "fcitx5"
253
spawn-at-startup "swayidle"
0
0
254
// TODO: I do not know why 1Pass doesn't work on Wayland
255
spawn-at-startup "1password --ozone-platform-hint=x11"
256
spawn-at-startup "ghostty"
257
spawn-at-startup "firefox"
0
0
258
259
window-rule {
260
match at-startup=true app-id="vesktop"
···
266
open-on-workspace "dev"
267
}
268
window-rule {
0
0
0
0
0
269
match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
270
default-floating-position x=10 y=10 relative-to="top-right"
0
0
271
}
···
17
workspace-auto-back-and-forth
18
}
19
20
+
// Place the monitors like so, in terms of logical coordinates:
21
+
//
22
+
// 0 2560 4608
23
+
// v-----------------------v-------------------v
24
+
// 2560 2560 / 1.25 = 2048
25
+
// 0 > +-----------------------+
26
+
// | | +-------------------+ < 160
27
+
// | | | | |
28
+
// 1440 | | HDMI-A-1 | eDP-1 | | 1600 / 1.25
29
+
// | | | (125%) | | = 1280
30
+
// | | | | |
31
+
// 1440 > +-----------------------+-------------------+ < 1440
32
+
33
output "eDP-1" {
34
+
mode "2560x1600@165.040"
35
scale 1.25
0
36
variable-refresh-rate
37
+
position x=2560 y=160 // 1440 - (1600 / 1.25)
38
+
}
39
+
40
+
output "HDMI-A-1" {
41
+
mode "2560x1440@143.912"
42
+
// Main monitor is to the left of the laptop monitor
43
+
position x=0 y=0
44
}
45
46
layout {
47
gaps 24
48
center-focused-column "on-overflow"
49
always-center-single-column
50
+
background-color "transparent" // Let backdrop shine through
51
52
preset-column-widths {
53
proportion 0.33333
···
55
proportion 0.66667
56
}
57
58
+
default-column-width {
59
+
proportion 0.6667
60
+
}
61
62
focus-ring {
63
+
width 2.5
64
active-color "#eba0ac"
65
+
inactive-color "#00000000"
66
+
}
67
+
68
+
border {
69
+
off
70
+
width 2.5
71
+
urgent-color "#f38ba8"
72
+
}
73
+
74
+
insert-hint {
75
+
color "#eba0ac70"
76
}
77
78
shadow {
···
82
offset x=0 y=5
83
color "#0007"
84
}
85
+
86
+
struts {
87
+
left -24
88
+
right -24
89
+
top -16
90
+
bottom -16
91
+
}
92
}
93
94
+
overview {
95
+
zoom 0.6667
96
+
workspace-shadow {
97
+
off
98
+
}
99
+
}
100
+
101
+
screenshot-path "~/Pictures/Screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png"
102
+
103
+
// Swaybg
104
+
layer-rule {
105
+
match namespace="wallpaper"
106
+
place-within-backdrop true
107
+
}
108
+
109
+
// Fuzzel
110
+
layer-rule {
111
+
match namespace="launcher"
112
+
baba-is-float true
113
+
shadow {
114
+
on
115
+
}
116
+
}
117
118
window-rule {
119
geometry-corner-radius 12
120
clip-to-geometry true
121
}
122
123
+
// Only enable borders for urgent windows
124
+
window-rule {
125
+
match is-urgent=true
126
+
127
+
border {
128
+
on
129
+
}
130
+
}
131
+
132
window-rule {
133
match app-id="com.mitchellh.ghostty"
134
+
// Allow terminal background to be transparent
135
draw-border-with-background false
136
}
137
···
314
315
// Workspaces & default apps
316
workspace "chat"
317
+
workspace "dev" {
318
+
open-on-output "HDMI-A-1"
319
+
}
320
workspace "gaming"
321
322
spawn-at-startup "waybar"
···
324
spawn-at-startup "xwayland-satellite"
325
spawn-at-startup "fcitx5"
326
spawn-at-startup "swayidle"
327
+
spawn-at-startup "swaybg"
328
+
329
// TODO: I do not know why 1Pass doesn't work on Wayland
330
spawn-at-startup "1password --ozone-platform-hint=x11"
331
spawn-at-startup "ghostty"
332
spawn-at-startup "firefox"
333
+
spawn-at-startup "vesktop"
334
+
spawn-at-startup "steam"
335
336
window-rule {
337
match at-startup=true app-id="vesktop"
···
343
open-on-workspace "dev"
344
}
345
window-rule {
346
+
match at-startup=true app-id="steam"
347
+
match app-id=r#"^steam_app_"#
348
+
open-on-workspace "gaming"
349
+
}
350
+
window-rule {
351
match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"#
352
default-floating-position x=10 y=10 relative-to="top-right"
353
+
// Never allow notifications steal focus
354
+
open-focused false
355
}
-1
users/leah/presets/niri/default.nix
···
21
waybar
22
xwayland-satellite
23
brightnessctl
24
-
swaylock-effects
25
];
26
27
files.".config/niri/config.kdl".source = ./config.kdl;
···
21
waybar
22
xwayland-satellite
23
brightnessctl
0
24
];
25
26
files.".config/niri/config.kdl".source = ./config.kdl;
+27
-38
users/leah/presets/niri/services.nix
···
5
...
6
}:
7
let
8
-
swaylock-config = {
9
-
screenshots = true;
10
-
scaling = "fit";
11
-
clock = true;
12
-
indicator-idle-visible = true;
13
-
grace = 3;
14
-
effect-blur = "10x10";
15
-
effect-vignette = "0.5:0.8";
16
-
effect-pixelate = 4;
0
17
18
-
text-color = "#cdd6f4";
19
-
inside-color = "#181825";
20
-
inside-clear-color = "#a6e3a1";
21
-
inside-ver-color = "#cba6f7";
22
-
inside-wrong-color = "#f38ba8";
23
-
ring-color = "#1e1e2e";
24
-
ring-clear-color = "#a6e3a1";
25
-
ring-ver-color = "#cba6f7";
26
-
ring-wrong-color = "#f38ba8";
27
-
key-hl-color = "#eba0ac";
28
-
bs-hl-color = "#6c7086";
29
-
line-color = "#313244";
30
31
-
timestr = "%H:%M";
32
-
datestr = "%e %b '%y / %a";
0
0
0
0
0
0
0
0
33
};
34
-
35
-
swaylock' = pkgs.writeShellScript "swaylock" ''
36
-
${lib.getExe pkgs.swaylock} -f ${lib.cli.toGNUCommandLineShell { } swaylock-config}
37
-
'';
38
-
39
-
swayidle' = pkgs.writeShellScriptBin "swayidle" ''
40
-
${lib.getExe pkgs.swayidle} -w \
41
-
timeout 300 ${swaylock'} \
42
-
timeout 600 '${pkgs.niri} msg action power-off-monitors' \
43
-
resume '${pkgs.niri} msg action power-on-monitors' \
44
-
before-sleep ${swaylock'} \
45
-
lock ${swaylock'} \
46
-
unlock 'pkill -SIGUSR1 -ux $USER ${swaylock'}'
47
-
'';
48
in
49
{
50
hjem.users.leah.packages = [
51
swayidle'
0
52
];
53
54
security = {
55
polkit.enable = true;
56
soteria.enable = true;
57
};
58
-
59
# Needed by the Waybar config
60
services.power-profiles-daemon.enable = true;
61
···
5
...
6
}:
7
let
8
+
swaybg' = pkgs.writeShellApplication {
9
+
name = "swaybg";
10
+
runtimeInputs = [ pkgs.swaybg ];
11
+
text = ''
12
+
swaybg -i ${../../wallpaper.jpg}
13
+
'';
14
+
};
15
+
16
+
swayidle' = pkgs.writeShellApplication {
17
+
name = "swayidle";
18
19
+
runtimeInputs = [
20
+
pkgs.swayidle
21
+
config.hjem.users.leah.ext.programs.swaylock.finalPackage
22
+
pkgs.niri
23
+
];
0
0
0
0
0
0
0
24
25
+
text = ''
26
+
exec swayidle -w \
27
+
timeout 180 swaylock \
28
+
timeout 360 'niri msg action power-off-monitors' \
29
+
resume 'niri msg action power-on-monitors' \
30
+
before-sleep swaylock \
31
+
lock swaylock \
32
+
unlock "pkill -SIGUSR1 swaylock" \
33
+
"$@"
34
+
'';
35
};
0
0
0
0
0
0
0
0
0
0
0
0
0
0
36
in
37
{
38
hjem.users.leah.packages = [
39
swayidle'
40
+
swaybg'
41
];
42
43
security = {
44
polkit.enable = true;
45
soteria.enable = true;
46
};
47
+
48
# Needed by the Waybar config
49
services.power-profiles-daemon.enable = true;
50
+41
-3
users/leah/programs/default.nix
···
21
programs = {
22
localsend.enable = true;
23
nix-index-database.comma.enable = true;
0
0
0
0
24
};
25
26
hjem.users.leah = {
27
packages = with pkgs; [
28
# Apps
29
-
nekoray
30
prismlauncher
31
vlc
32
thunderbird
···
41
eza
42
];
43
44
-
files.".config/starship.toml".source = ./starship.toml;
45
-
46
rum.programs.obs-studio.enable = true;
47
48
ext.programs = {
···
67
settings = {
68
no-statusbar = true;
69
wrap = true;
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
70
};
71
};
72
};
···
21
programs = {
22
localsend.enable = true;
23
nix-index-database.comma.enable = true;
24
+
nekoray = {
25
+
enable = true;
26
+
tunMode.enable = true;
27
+
};
28
};
29
30
hjem.users.leah = {
31
packages = with pkgs; [
32
# Apps
33
+
aseprite
34
prismlauncher
35
vlc
36
thunderbird
···
45
eza
46
];
47
0
0
48
rum.programs.obs-studio.enable = true;
49
50
ext.programs = {
···
69
settings = {
70
no-statusbar = true;
71
wrap = true;
72
+
};
73
+
};
74
+
75
+
swaylock = {
76
+
enable = true;
77
+
package = pkgs.swaylock-effects;
78
+
79
+
settings = {
80
+
show-failed-attempts = true;
81
+
ignore-empty-password = true;
82
+
daemonize = true;
83
+
84
+
screenshots = true;
85
+
scaling = "fit";
86
+
clock = true;
87
+
indicator-idle-visible = true;
88
+
grace = 3;
89
+
effect-blur = "10x10";
90
+
effect-vignette = "0.5:0.8";
91
+
effect-pixelate = 4;
92
+
93
+
text-color = "#cdd6f4";
94
+
inside-color = "#181825";
95
+
inside-clear-color = "#a6e3a1";
96
+
inside-ver-color = "#cba6f7";
97
+
inside-wrong-color = "#f38ba8";
98
+
ring-color = "#1e1e2e";
99
+
ring-clear-color = "#a6e3a1";
100
+
ring-ver-color = "#cba6f7";
101
+
ring-wrong-color = "#f38ba8";
102
+
key-hl-color = "#eba0ac";
103
+
bs-hl-color = "#6c7086";
104
+
line-color = "#313244";
105
+
106
+
timestr = "%H:%M";
107
+
datestr = "%e %b '%y / %a";
108
};
109
};
110
};
+10
-6
users/leah/programs/firefox/default.nix
···
6
let
7
json = pkgs.formats.json { };
8
wrappedFirefox = pkgs.firefox.override {
9
-
extraPoliciesFiles = [(json.generate "firefox-policies.json" policies)];
10
};
11
12
addons = [
···
33
"{9a41dee2-b924-4161-a971-7fb35c053a4a}" # enhanced-h264ify
34
"sponsorBlocker@ajay.app" # SponsorBlock for YouTube
35
"{0d7cafdd-501c-49ca-8ebb-e3341caaa55e}" # YouTube NonStop
36
-
37
# Utilities
38
"{d634138d-c276-4fc8-924b-40a0ea21d284}" # 1Password
39
"{c2c003ee-bd69-42a2-b0e9-6f34222cb046}" # Auto Tab Discard
···
45
46
policies = {
47
ExtensionSettings = lib.listToAttrs (
48
-
map (id: lib.nameValuePair id {
49
-
installation_mode = "normal_installed";
50
-
install_url = "https://addons.mozilla.org/firefox/downloads/latest/${id}/latest.xpi";
51
-
}) addons);
0
0
0
0
52
};
53
54
# TODO: Specifying custom search engines is *very* cursed.
···
6
let
7
json = pkgs.formats.json { };
8
wrappedFirefox = pkgs.firefox.override {
9
+
extraPoliciesFiles = [ (json.generate "firefox-policies.json" policies) ];
10
};
11
12
addons = [
···
33
"{9a41dee2-b924-4161-a971-7fb35c053a4a}" # enhanced-h264ify
34
"sponsorBlocker@ajay.app" # SponsorBlock for YouTube
35
"{0d7cafdd-501c-49ca-8ebb-e3341caaa55e}" # YouTube NonStop
36
+
37
# Utilities
38
"{d634138d-c276-4fc8-924b-40a0ea21d284}" # 1Password
39
"{c2c003ee-bd69-42a2-b0e9-6f34222cb046}" # Auto Tab Discard
···
45
46
policies = {
47
ExtensionSettings = lib.listToAttrs (
48
+
map (
49
+
id:
50
+
lib.nameValuePair id {
51
+
installation_mode = "normal_installed";
52
+
install_url = "https://addons.mozilla.org/firefox/downloads/latest/${id}/latest.xpi";
53
+
}
54
+
) addons
55
+
);
56
};
57
58
# TODO: Specifying custom search engines is *very* cursed.
+9
-1
users/leah/programs/fish.nix
···
1
{
2
config,
0
0
3
...
4
}:
5
{
···
10
hjem.users.leah.rum.programs.fish = {
11
enable = true;
12
inherit (config.programs.fish) package;
13
-
14
functions.eza = "eza --git --icons=auto";
15
abbrs = {
16
ls = "eza";
···
19
lt = "eza --tree";
20
lla = "eza -la";
21
};
0
0
0
0
22
};
0
0
23
}
···
1
{
2
config,
3
+
lib,
4
+
pkgs,
5
...
6
}:
7
{
···
12
hjem.users.leah.rum.programs.fish = {
13
enable = true;
14
inherit (config.programs.fish) package;
15
+
16
functions.eza = "eza --git --icons=auto";
17
abbrs = {
18
ls = "eza";
···
21
lt = "eza --tree";
22
lla = "eza -la";
23
};
24
+
25
+
earlyConfigFiles.starship = ''
26
+
${lib.getExe pkgs.starship} init fish | source
27
+
'';
28
};
29
+
30
+
hjem.users.leah.files.".config/starship.toml".source = ./starship.toml;
31
}
+3
-2
users/leah/programs/vcs.nix
···
45
46
ui = {
47
default-command = [ "log" ];
48
-
diff.tool = "difft";
49
pager = "${lib.getExe pkgs.moar} -no-linenumbers";
50
log-word-wrap = true;
51
};
···
72
"--ignore-working-copy"
73
"log"
74
"--color=always"
0
0
75
];
76
};
77
78
revsets = {
79
-
log = "current()";
80
short-prefixes = "current()";
81
};
82
···
45
46
ui = {
47
default-command = [ "log" ];
48
+
diff-formatter = "difft";
49
pager = "${lib.getExe pkgs.moar} -no-linenumbers";
50
log-word-wrap = true;
51
};
···
72
"--ignore-working-copy"
73
"log"
74
"--color=always"
75
+
"-r"
76
+
"current()"
77
];
78
};
79
80
revsets = {
0
81
short-prefixes = "current()";
82
};
83