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
Use UWSM and fix KDE Connect Waybar
bwc9876.dev
1 year ago
ff2c3b62
9295a464
verified
This commit was signed with the committer's
known signature
.
bwc9876.dev
SSH Key Fingerprint:
SHA256:DanMEP/RNlSC7pAVbnXO6wzQV00rqyKj053tz4uH5gQ=
+67
-94
8 changed files
expand all
collapse all
unified
split
flake.lock
nixosModules
dev
nvim.nix
graphics
apps.nix
audio.nix
greeter.nix
hypr.nix
shell.nix
res
custom_waybar_modules
kdeconnect.nu
+15
-15
flake.lock
···
7
7
]
8
8
},
9
9
"locked": {
10
10
-
"lastModified": 1739094937,
11
11
-
"narHash": "sha256-LemSQ5AZHwl4ZVlirdpAytDWgS96OZsct7Akx/REdGA=",
10
10
+
"lastModified": 1739283129,
11
11
+
"narHash": "sha256-GXJllf1wY7tOF6uei9S3PnSEghFbnJP1vkxM0kkMOoI=",
12
12
"owner": "catppuccin",
13
13
"repo": "nix",
14
14
-
"rev": "aee0cec463e62702751adaeb9f4fc00f2f72879b",
14
14
+
"rev": "d4e258e29075a86a82dacaf4f5e0985935ae4658",
15
15
"type": "github"
16
16
},
17
17
"original": {
···
361
361
]
362
362
},
363
363
"locked": {
364
364
-
"lastModified": 1739198052,
365
365
-
"narHash": "sha256-fvAgCGK2phagbKv2S4YH4AIM566TKasfWMqYl3c3mPQ=",
364
364
+
"lastModified": 1739571712,
365
365
+
"narHash": "sha256-0UdSDV/TBY+GuxXLbrLq3l2Fq02ciyKCIMy4qmnfJXQ=",
366
366
"owner": "nix-community",
367
367
"repo": "home-manager",
368
368
-
"rev": "b0bd29bb4b8df265b13bbb4a6639afa74faaa831",
368
368
+
"rev": "6d3163aea47fdb1fe19744e91306a2ea4f602292",
369
369
"type": "github"
370
370
},
371
371
"original": {
···
500
500
},
501
501
"nixpkgs": {
502
502
"locked": {
503
503
-
"lastModified": 1739020877,
504
504
-
"narHash": "sha256-mIvECo/NNdJJ/bXjNqIh8yeoSjVLAuDuTUzAo7dzs8Y=",
503
503
+
"lastModified": 1739446958,
504
504
+
"narHash": "sha256-+/bYK3DbPxMIvSL4zArkMX0LQvS7rzBKXnDXLfKyRVc=",
505
505
"owner": "NixOS",
506
506
"repo": "nixpkgs",
507
507
-
"rev": "a79cfe0ebd24952b580b1cf08cd906354996d547",
507
507
+
"rev": "2ff53fe64443980e139eaa286017f53f88336dd0",
508
508
"type": "github"
509
509
},
510
510
"original": {
···
547
547
"treefmt-nix": "treefmt-nix"
548
548
},
549
549
"locked": {
550
550
-
"lastModified": 1739121491,
551
551
-
"narHash": "sha256-BEmyAozR3Pc2qwPtC4rgUglzi3cw4nv4fXEY23NxOrQ=",
550
550
+
"lastModified": 1739627497,
551
551
+
"narHash": "sha256-LqwCCtADkHniSmP5ufoiXNY4GRttwvW/EOTVpgVh0LY=",
552
552
"owner": "nix-community",
553
553
"repo": "nixvim",
554
554
-
"rev": "13341a4c1238b7974e7bad9c7a6d5c51ca3cf81a",
554
554
+
"rev": "d3a25cb97f8e8c4b77949b1e9fcf26b7ded42fbc",
555
555
"type": "github"
556
556
},
557
557
"original": {
···
676
676
]
677
677
},
678
678
"locked": {
679
679
-
"lastModified": 1739154531,
680
680
-
"narHash": "sha256-QGeN6e0nMJlNLzm3Y2A7P6riXhQXMeCXLZ7yajZYFQM=",
679
679
+
"lastModified": 1739586408,
680
680
+
"narHash": "sha256-UN9hRKRE1eLU8C0cioTZubaCZQTA8NDc8/4vCpS5pS0=",
681
681
"owner": "oxalica",
682
682
"repo": "rust-overlay",
683
683
-
"rev": "035dac86ab7ce5c1e8a4d59dfe85e6911a3526ea",
683
683
+
"rev": "3dbc0ce1c0690b83cfb9a9a51fbe90c3bc8f9916",
684
684
"type": "github"
685
685
},
686
686
"original": {
+1
-1
nixosModules/dev/nvim.nix
···
507
507
tailwindcss.enable = true;
508
508
jsonls.enable = true;
509
509
yamlls.enable = true;
510
510
-
pylsp.enable = true;
510
510
+
ruff.enable = true;
511
511
csharp_ls.enable = true;
512
512
svelte.enable = true;
513
513
nil_ls.enable = true;
+2
nixosModules/graphics/apps.nix
···
152
152
153
153
home-manager.users.bean.services.kdeconnect.enable = true;
154
154
155
155
+
environment.variables.NIXOS_OZONE_WL = "1";
156
156
+
155
157
environment.systemPackages = with pkgs; [
156
158
chromium
157
159
kitty
+3
-31
nixosModules/graphics/audio.nix
···
19
19
",XF86AudioPrev,exec,playerctl previous"
20
20
];
21
21
bindel = [
22
22
-
",XF86AudioRaiseVolume,exec,swayosd-client --output-volume raise"
23
23
-
",XF86AudioLowerVolume,exec,swayosd-client --output-volume lower"
24
24
-
",XF86AudioMute,exec,swayosd-client --output-volume mute-toggle"
22
22
+
",XF86AudioRaiseVolume,exec,uwsm app -- swayosd-client --output-volume raise"
23
23
+
",XF86AudioLowerVolume,exec,uwsm app -- swayosd-client --output-volume lower"
24
24
+
",XF86AudioMute,exec,uwsm app -- swayosd-client --output-volume mute-toggle"
25
25
];
26
26
};
27
27
···
30
30
alsa = {
31
31
enable = true;
32
32
support32Bit = true;
33
33
-
};
34
34
-
extraConfig.pipewire = {
35
35
-
"92-low-latency" = {
36
36
-
"context.properties" = {
37
37
-
"default.clock.rate" = 48000;
38
38
-
"default.clock.quantum" = 2048;
39
39
-
"default.clock.min-quantum" = 2048;
40
40
-
"default.clock.max-quantum" = 2048;
41
41
-
};
42
42
-
};
43
43
-
};
44
44
-
extraConfig.pipewire-pulse."92-low-latency" = {
45
45
-
context.modules = [
46
46
-
{
47
47
-
name = "libpipewire-module-protocol-pulse";
48
48
-
args = {
49
49
-
pulse.min.req = "1024/48000";
50
50
-
pulse.default.req = "1024/48000";
51
51
-
pulse.max.req = "1024/48000";
52
52
-
pulse.min.quantum = "1024/48000";
53
53
-
pulse.max.quantum = "1024/48000";
54
54
-
};
55
55
-
}
56
56
-
];
57
57
-
stream.properties = {
58
58
-
node.latency = "1024/48000";
59
59
-
resample.quality = 1;
60
60
-
};
61
33
};
62
34
};
63
35
}
+5
-1
nixosModules/graphics/greeter.nix
···
9
9
settings = {
10
10
default_session = let
11
11
greeting = ''--greeting "Authenticate into ${lib.toUpper config.networking.hostName}"'';
12
12
-
cmd = ''--cmd "systemd-inhibit --what=handle-power-key:handle-lid-switch Hyprland"'';
12
12
+
deCmd = pkgs.writeScript "start-session.sh" ''
13
13
+
#!/usr/bin/env sh
14
14
+
exec uwsm start ${pkgs.hyprland}/share/wayland-sessions/hyprland.desktop
15
15
+
'';
16
16
+
cmd = ''--cmd "systemd-inhibit --what=handle-power-key:handle-lid-switch ${deCmd}"'';
13
17
in {
14
18
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --remember --time ${greeting} ${cmd}";
15
19
};
+11
-16
nixosModules/graphics/hypr.nix
···
1
1
{pkgs, ...}: {
2
2
-
xdg.portal = {
3
3
-
enable = true;
4
4
-
config = {
5
5
-
preferred = {
6
6
-
default = ["hyprland" "gtk"];
7
7
-
};
8
8
-
};
9
9
-
extraPortals = with pkgs; [xdg-desktop-portal-hyprland];
10
10
-
};
11
11
-
12
2
environment = {
13
3
systemPackages = with pkgs; [
14
4
hyprpicker
5
5
+
uwsm
15
6
];
16
16
-
pathsToLink = ["/share/xdg-desktop-portal" "/share/applications"];
7
7
+
};
8
8
+
9
9
+
xdg.portal.extraPortals = with pkgs; [xdg-desktop-portal-gtk];
10
10
+
11
11
+
programs.hyprland = {
12
12
+
enable = true;
13
13
+
withUWSM = true;
17
14
};
18
15
19
16
home-manager.users.bean = {
20
17
wayland.windowManager.hyprland = {
18
18
+
systemd.enable = false;
21
19
enable = true;
22
22
-
package = pkgs.hyprland;
23
23
-
systemd.variables = ["--all"];
24
20
extraConfig = ''
25
21
bind = SUPER,M,submap,passthru
26
22
submap = passthru
···
82
78
];
83
79
submap = "reset";
84
80
bind = let
85
85
-
openTerminal = "kitty";
81
81
+
openTerminal = "uwsm app -- kitty.desktop";
86
82
forEachWorkspace = {
87
83
mod,
88
84
dispatch,
···
99
95
in
100
96
[
101
97
"SUPER,M,submap,passthru"
102
102
-
"SUPER,Q,exec,firefox-devedition"
98
98
+
"SUPER,Q,exec,uwsm app -- firefox-devedition.desktop"
103
99
"SUPER,Z,exec,systemctl suspend"
104
100
",XF86AudioMedia,exec,${openTerminal}"
105
101
"SUPER,T,exec,${openTerminal}"
106
102
"SUPER ALT CTRL SHIFT,L,exec,xdg-open https://linkedin.com"
107
103
"SUPER,C,killactive,"
108
108
-
"SUPER SHIFT,D,exec,code"
109
104
"SUPER,P,pseudo,"
110
105
"SUPER,R,togglefloating,"
111
106
"SUPER,F,fullscreen,1"
+26
-28
nixosModules/graphics/shell.nix
···
122
122
exec-once = [
123
123
"systemctl --user start hyprpolkitagent"
124
124
"hypridle"
125
125
-
"dolphin --daemon"
126
126
-
"waybar"
125
125
+
"uwsm app -- dolphin --daemon"
126
126
+
"uwsm app -- waybar"
127
127
"wl-paste --watch bash ${inputs.self}/res/clipboard_middleman.sh"
128
128
-
"swaync"
129
129
-
"swayosd-server"
130
130
-
"nm-applet"
128
128
+
"uwsm app -- swaync"
129
129
+
"uwsm app -- swayosd-server"
130
130
+
"uwsm app -- nm-applet"
131
131
"${pkgs.udiskie}/bin/udiskie -A -f dolphin"
132
132
"${pkgs.nushell}/bin/nu ${inputs.self}/res/battery_notif.nu"
133
133
"playerctld"
134
134
-
"[workspace 3] keepassxc /home/bean/Documents/Database.kdbx"
134
134
+
"[workspace 3] uwsm app -- keepassxc /home/bean/Documents/Database.kdbx"
135
135
];
136
136
137
137
bind = let
138
138
powerMenu = "rofi -modi 'p:${pkgs.rofi-power-menu}/bin/rofi-power-menu' -show p --symbols-font \"FiraMono Nerd Font Mono\"";
139
139
screenshot = "${pkgs.nushell}/bin/nu ${inputs.self}/res/screenshot.nu";
140
140
in [
141
141
-
"SUPER,S,exec,rofi -show drun -icon-theme \"candy-icons\" -show-icons"
142
142
-
"SUPER SHIFT,E,exec,rofi -modi emoji -show emoji"
143
143
-
"SUPER,Delete,exec,${powerMenu}"
144
144
-
",XF86PowerOff,exec,${powerMenu}"
145
145
-
"SUPER ALT,C,exec,rofi -show calc -modi calc -no-show-match -no-sort -calc-command \"echo -n '{result}' | wl-copy\""
146
146
-
"SUPER,I,exec,${pkgs.rofi-pulse-select}/bin/rofi-pulse-select source"
147
147
-
"SUPER,O,exec,${pkgs.rofi-pulse-select}/bin/rofi-pulse-select sink"
148
148
-
"SUPER,B,exec,${pkgs.rofi-bluetooth}/bin/rofi-bluetooth"
149
149
-
"SUPER,Tab,exec,rofi -show window -show-icons"
150
150
-
"SUPER,E,exec,${pkgs.nushell}/bin/nu ${inputs.self}/res/rofi/rofi-places.nu"
151
151
-
"SUPER SHIFT,T,exec,${pkgs.nushell}/bin/nu ${inputs.self}/res/rofi/rofi-zoxide.nu"
152
152
-
"SUPER,N,exec,${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"
153
153
-
"SUPER,A,exec,pavucontrol --tab 5"
141
141
+
"SUPER,S,exec,uwsm app -- rofi -show drun -icon-theme \"candy-icons\" -show-icons"
142
142
+
"SUPER SHIFT,E,exec,uwsm app -- rofi -modi emoji -show emoji"
143
143
+
"SUPER,Delete,exec,uwsm app -- ${powerMenu}"
144
144
+
",XF86PowerOff,exec,uwsm app -- ${powerMenu}"
145
145
+
"SUPER ALT,C,exec,uwsm app -- rofi -show calc -modi calc -no-show-match -no-sort -calc-command \"echo -n '{result}' | wl-copy\""
146
146
+
"SUPER,B,exec,uwsm app -- ${pkgs.rofi-bluetooth}/bin/rofi-bluetooth"
147
147
+
"SUPER,Tab,exec,uwsm app -- rofi -show window -show-icons"
148
148
+
"SUPER,E,exec,uwsm app -- ${pkgs.nushell}/bin/nu ${inputs.self}/res/rofi/rofi-places.nu"
149
149
+
"SUPER SHIFT,T,exec,uwsm app -- ${pkgs.nushell}/bin/nu ${inputs.self}/res/rofi/rofi-zoxide.nu"
150
150
+
"SUPER,N,exec,uwsm app -- ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"
151
151
+
"SUPER,A,exec,uwsm app -- pavucontrol --tab 5"
154
152
''SUPER,V,exec,cliphist list | sed -r 's/\[\[ binary data (.* .iB) (.*) (.*) \]\]/ \2 Image (\3, \1)/g' | rofi -dmenu -display-columns 2 -p Clipboard | cliphist decode | wl-copy''
155
153
"SUPER ALT,V,exec,echo -e \"Yes\\nNo\" | [[ $(rofi -dmenu -mesg \"Clear Clipboard History?\" -p Clear) == \"Yes\" ]] && cliphist wipe"
156
156
-
",Print,exec,${screenshot}"
157
157
-
"SUPER SHIFT,S,exec,${screenshot}"
158
158
-
"SUPER SHIFT,C,exec,${pkgs.hyprpicker}/bin/hyprpicker -a"
154
154
+
",Print,exec,uwsm app -- ${screenshot}"
155
155
+
"SUPER SHIFT,S,exec,uwsm app -- ${screenshot}"
156
156
+
"SUPER SHIFT,C,exec,uwsm app -- ${pkgs.hyprpicker}/bin/hyprpicker -a"
159
157
];
160
158
bindr = [
161
161
-
"SUPER SHIFT,R,exec,pkill wf-recorder --signal SIGINT || nu ${inputs.self}/res/screenrec.nu"
162
162
-
"CAPS,Caps_Lock,exec,swayosd-client --caps-lock"
163
163
-
",Scroll_Lock,exec,swayosd-client --scroll-lock"
164
164
-
",Num_Lock,exec,swayosd-client --num-lock"
159
159
+
"SUPER SHIFT,R,exec,pkill wf-recorder --signal SIGINT || uwsm app -- nu ${inputs.self}/res/screenrec.nu"
160
160
+
"CAPS,Caps_Lock,exec,uwsm app -- swayosd-client --caps-lock"
161
161
+
",Scroll_Lock,exec,uwsm app -- swayosd-client --scroll-lock"
162
162
+
",Num_Lock,exec,uwsm app -- swayosd-client --num-lock"
165
163
];
166
164
bindel = [
167
167
-
",XF86MonBrightnessUp,exec,swayosd-client --brightness raise"
168
168
-
",XF86MonBrightnessDown,exec,swayosd-client --brightness lower"
165
165
+
",XF86MonBrightnessUp,exec,uwsm app -- swayosd-client --brightness raise"
166
166
+
",XF86MonBrightnessDown,exec,uwsm app -- swayosd-client --brightness lower"
169
167
];
170
168
};
171
169
};
+4
-2
res/custom_waybar_modules/kdeconnect.nu
···
22
22
get_device_list | each {|it| device_info $it | insert "id" $it}
23
23
}
24
24
25
25
-
def is_reachable [device: record] : bool -> bool {
25
25
+
def is_reachable [device: record] {
26
26
$device.isReachable? | default false
27
27
}
28
28
29
29
-
def supports_battery [device: record] : bool -> bool {
29
29
+
def supports_battery [device: record] {
30
30
let reachable = is_reachable $device;
31
31
let supported = "kdeconnect_battery" in ($device.supportedPlugins? | default []);
32
32
let exists = dbus introspect --session --dest=$BUS_NAME (dev_path $device.id) | get -i children | default [] | any {|it| $it.name == "battery"}
···
95
95
tooltip: $"($icon) ($name) -($percent)"
96
96
}
97
97
};
98
98
+
99
99
+
print $status;
98
100
99
101
let output = {
100
102
text: ($status | get chip | str join " "),