Compare commits

...

13 commits

Author SHA1 Message Date
653938a61f
niri: config: many changes 2025-06-04 08:32:11 +02:00
24f35c4ccd
shell: stop fish from having to be built every time
Drop the patch to fish source code, instead opting
to employ fish's inbuilt share/fish/vendor_conf.d
to add custom code to fish.

This is both a bit simpler, and makes it so fish does not
have to be compiled on every update to it's source / to my configuration.
2025-06-04 08:32:09 +02:00
2c8ed668ca
wayland: niri: add xdg portal 2025-06-04 08:29:40 +02:00
a64bc12cf1
loki: stalwart: formatting 2025-06-04 08:29:24 +02:00
ef8c6854f4
zellij: config: formatting, fix keybindings 2025-06-04 08:29:04 +02:00
45d2f35c64
hosts: hermit: programs: remove element-desktop, add ghostty 2025-06-04 08:28:44 +02:00
33c4a5b297
hosts: hermit: switch to niri 2025-06-04 08:28:32 +02:00
41b72ce92c
flake: employ pipes! 2025-06-04 08:28:21 +02:00
2239e0e983
helix: rework 2025-06-04 08:27:35 +02:00
4267ca1d9e
flake.lock: bump inputs 2025-06-04 08:26:46 +02:00
b98c824f87
nix: module: set max-jobs to "auto" and cores to 0 2025-06-04 08:26:40 +02:00
7d45992c07
system: nixpkgs: update 2025-06-04 08:26:40 +02:00
a951911578
progress dump 2025-06-04 08:26:35 +02:00
22 changed files with 517 additions and 318 deletions

73
flake.lock generated
View file

@ -248,25 +248,6 @@
"type": "github" "type": "github"
} }
}, },
"helix": {
"inputs": {
"nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1748359092,
"narHash": "sha256-bfQVlnTe1PZ3DfulcHUwJzh6qcir0n1F8B0xYUV+Vu0=",
"owner": "helix-editor",
"repo": "helix",
"rev": "2bd7452fe0309e273d06280d15caad6943034377",
"type": "github"
},
"original": {
"owner": "helix-editor",
"repo": "helix",
"type": "github"
}
},
"hercules-ci-effects": { "hercules-ci-effects": {
"inputs": { "inputs": {
"flake-parts": [ "flake-parts": [
@ -602,7 +583,7 @@
"nixpkgs" "nixpkgs"
], ],
"pre-commit-hooks-nix": "pre-commit-hooks-nix", "pre-commit-hooks-nix": "pre-commit-hooks-nix",
"rust-overlay": "rust-overlay_2" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1747056319, "lastModified": 1747056319,
@ -681,15 +662,15 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1740560979, "lastModified": 1748190013,
"narHash": "sha256-Vr3Qi346M+8CjedtbyUevIGDZW8LcA1fTG0ugPY/Hic=", "narHash": "sha256-R5HJFflOfsP5FBtk+zE8FpL8uqE7n62jqOsADvVshhE=",
"owner": "nixos", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "5135c59491985879812717f4c9fea69604e7f26f", "rev": "62b852f6c6742134ade1abdd2a21685fd617a291",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "NixOS",
"ref": "nixos-unstable", "ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
@ -708,22 +689,6 @@
} }
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": {
"lastModified": 1748190013,
"narHash": "sha256-R5HJFflOfsP5FBtk+zE8FpL8uqE7n62jqOsADvVshhE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "62b852f6c6742134ade1abdd2a21685fd617a291",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1736429638, "lastModified": 1736429638,
"narHash": "sha256-dDWqQqSgMQXw5eFtcyoVijv7HbYJZOIo+jWQdJtsxn4=", "narHash": "sha256-dDWqQqSgMQXw5eFtcyoVijv7HbYJZOIo+jWQdJtsxn4=",
@ -810,12 +775,11 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"helix": "helix",
"hyprland": "hyprland", "hyprland": "hyprland",
"impermanence": "impermanence", "impermanence": "impermanence",
"lanzaboote": "lanzaboote", "lanzaboote": "lanzaboote",
"lix-module": "lix-module", "lix-module": "lix-module",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs",
"quickshell": "quickshell", "quickshell": "quickshell",
"schizofox": "schizofox", "schizofox": "schizofox",
"superfreq": "superfreq", "superfreq": "superfreq",
@ -823,27 +787,6 @@
} }
}, },
"rust-overlay": { "rust-overlay": {
"inputs": {
"nixpkgs": [
"helix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1740623427,
"narHash": "sha256-3SdPQrZoa4odlScFDUHd4CUPQ/R1gtH4Mq9u8CBiK8M=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "d342e8b5fd88421ff982f383c853f0fc78a847ab",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"rust-overlay_2": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"lanzaboote", "lanzaboote",
@ -870,7 +813,7 @@
"flake-parts": "flake-parts_2", "flake-parts": "flake-parts_2",
"home-manager": "home-manager", "home-manager": "home-manager",
"nixpak": "nixpak", "nixpak": "nixpak",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_2",
"searx-randomizer": "searx-randomizer", "searx-randomizer": "searx-randomizer",
"systems": "systems_2" "systems": "systems_2"
}, },

View file

@ -21,10 +21,9 @@
inherit inherit
(import ./packages { (import ./packages {
inherit pkgs; inherit pkgs;
helix = inputs.helix.packages.${system}.default;
}) })
fish fish
wrapped-helix helix
kakoune kakoune
; ;
} }
@ -32,7 +31,7 @@
pkgsFor; pkgsFor;
apps = eachSystem (system: let apps = eachSystem (system: let
inherit (inputs.self.packages.${system}) fish wrapped-helix; inherit (inputs.self.packages.${system}) fish helix;
in { in {
default = { default = {
type = "app"; type = "app";
@ -40,7 +39,7 @@
}; };
helix = { helix = {
type = "app"; type = "app";
program = "${wrapped-helix}/bin/hx"; program = "${helix}/bin/hx";
}; };
}); });
}; };
@ -71,8 +70,6 @@
inputs.systems.follows = "systems"; inputs.systems.follows = "systems";
}; };
helix.url = "github:helix-editor/helix";
quickshell = { quickshell = {
url = "git+https://git.outfoxxed.me/outfoxxed/quickshell"; url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
# THIS IS IMPORTANT # THIS IS IMPORTANT

View file

@ -9,7 +9,7 @@
... ...
}: let }: let
inherit (lib.meta) hiPrioSet; inherit (lib.meta) hiPrioSet;
inherit (self.packages.${pkgs.stdenv.system}) wrapped-helix fish; inherit (self.packages.${pkgs.stdenv.system}) helix fish;
in { in {
environment.systemPackages = environment.systemPackages =
builtins.attrValues { builtins.attrValues {
@ -46,7 +46,7 @@ in {
; ;
} }
++ builtins.attrValues (hiPrioSet { ++ builtins.attrValues (hiPrioSet {
inherit wrapped-helix fish; inherit helix fish;
}); });
# helix as the only editor, a reasonable choice. # helix as the only editor, a reasonable choice.
environment.sessionVariables.EDITOR = "hx"; environment.sessionVariables.EDITOR = "hx";

View file

@ -31,7 +31,7 @@ inputs: let
networking.hostName = hostname; networking.hostName = hostname;
nixpkgs.hostPlatform = system; nixpkgs.hostPlatform = system;
}) })
(flatten ( (
concatLists [ concatLists [
# configuration for the host, passed as an argument. # configuration for the host, passed as an argument.
(singleton ./${hostname}/default.nix) (singleton ./${hostname}/default.nix)
@ -39,12 +39,12 @@ inputs: let
(singleton ./common.nix) (singleton ./common.nix)
# Import all files called module.nix from my modules directory. # Import all files called module.nix from my modules directory.
( (
filter (hasSuffix "module.nix") (
map toString (listFilesRecursive ../modules) map toString (listFilesRecursive ../modules)
) |> filter (hasSuffix "module.nix")
) )
] ]
)) |> flatten
)
]; ];
}; };
in { in {
@ -61,8 +61,8 @@ in {
system = "aarch64-linux"; system = "aarch64-linux";
hostname = "tower"; hostname = "tower";
}; };
world = mkSystem { # world = mkSystem {
system = "x86_64-linux"; # system = "x86_64-linux";
hostname = "world"; # hostname = "world";
}; # };
} }

View file

@ -23,7 +23,9 @@
pinentryPackage = pkgs.pinentry-qt; pinentryPackage = pkgs.pinentry-qt;
}; };
modules = { modules = {
desktops.hyprland.enable = true; wms.wayland.enable = true;
desktops.hyprland.enable = false;
desktops.niri.enable = true;
theming = { theming = {
gtk.enable = true; gtk.enable = true;
@ -62,8 +64,8 @@
services = { services = {
locate.enable = true; locate.enable = true;
kanata.enable = true; kanata.enable = true;
uwsm.enable = true; uwsm.enable = false;
greetd.enable = true; greetd.enable = false;
media.mpd = { media.mpd = {
enable = true; enable = true;

View file

@ -18,13 +18,12 @@
comma comma
difftastic difftastic
dua dua
element
element-desktop
evince evince
eza eza
fselect fselect
gcc gcc
gh gh
ghostty
grc grc
gparted gparted
git git
@ -48,7 +47,6 @@
mprocs mprocs
mpv mpv
networkmanagerapplet networkmanagerapplet
nil
nitch nitch
obsidian obsidian
swww swww

View file

@ -36,6 +36,7 @@
forgejo.enable = true; forgejo.enable = true;
grafana.enable = true; grafana.enable = true;
prometheus.enable = true; prometheus.enable = true;
plausible.enable = true;
}; };
programs = { programs = {
editors = { editors = {

View file

@ -1,161 +1,327 @@
// taken from https://lobste.rs/s/ft797a/why_zellij#c_4g7k3x // taken from https://lobste.rs/s/ft797a/why_zellij#c_4g7k3x
// Make the default layout compact and non-disturbing // Make the default layout compact and non-disturbing
default_layout "compact" default_layout "compact"
// do not pane frames // do not pane frames
pane_frames false pane_frames false
// do not show startup tips // do not show startup tips
show_startup_tips false show_startup_tips false
// Choose the mode that zellij uses when starting up. // Choose the mode that zellij uses when starting up.
// Default: normal // Default: normal
// //
default_mode "locked" default_mode "locked"
default_shell "fish" default_shell "fish"
theme "catppuccin-frappe" theme "catppuccin-frappe"
// Toggle enabling the mouse mode. On certain configurations, or terminals this // Toggle enabling the mouse mode. On certain configurations, or terminals this
// could potentially interfere with copying text. // could potentially interfere with copying text.
// Default: true // Default: true
// //
mouse_mode true mouse_mode true
// If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true" // If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true"
keybinds clear-defaults=true { keybinds clear-defaults=true {
scroll { scroll {
bind "Esc" "Ctrl s" { SwitchToMode "Locked"; } bind "Esc" "Ctrl s" {
bind "e" { EditScrollback; SwitchToMode "Locked"; } SwitchToMode "Locked"
bind "/" { SwitchToMode "EnterSearch"; SearchInput 0; } }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "Locked"; } bind "e" {
bind "j" "Down" { ScrollDown; } EditScrollback
bind "k" "Up" { ScrollUp; } SwitchToMode "Locked"
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; } }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; } bind "/" {
bind "d" { HalfPageScrollDown; } SwitchToMode "EnterSearch"
bind "u" { HalfPageScrollUp; } SearchInput 0
bind "g" { ScrollToTop; } }
bind "G" { ScrollToBottom; } bind "Ctrl c" {
ScrollToBottom
SwitchToMode "Locked"
}
bind "j" "Down" {
ScrollDown
}
bind "k" "Up" {
ScrollUp
}
bind "Ctrl f" "PageDown" "Right" "l" {
PageScrollDown
}
bind "Ctrl b" "PageUp" "Left" "h" {
PageScrollUp
}
bind "d" {
HalfPageScrollDown
}
bind "u" {
HalfPageScrollUp
}
bind "g" {
ScrollToTop
}
bind "G" {
ScrollToBottom
}
} }
search { search {
bind "Ctrl s" { SwitchToMode "Locked"; } bind "Ctrl s" {
bind "Esc" "Ctrl c" { ScrollToBottom; SwitchToMode "Locked"; } SwitchToMode "Locked"
bind "j" "Down" { ScrollDown; } }
bind "k" "Up" { ScrollUp; } bind "Esc" "Ctrl c" {
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; } ScrollToBottom
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; } SwitchToMode "Locked"
bind "d" { HalfPageScrollDown; } }
bind "u" { HalfPageScrollUp; } bind "j" "Down" {
bind "n" { Search "down"; } ScrollDown
bind "p" { Search "up"; } }
bind "c" { SearchToggleOption "CaseSensitivity"; } bind "k" "Up" {
bind "w" { SearchToggleOption "Wrap"; } ScrollUp
bind "o" { SearchToggleOption "WholeWord"; } }
bind "Ctrl f" "PageDown" "Right" "l" {
PageScrollDown
}
bind "Ctrl b" "PageUp" "Left" "h" {
PageScrollUp
}
bind "d" {
HalfPageScrollDown
}
bind "u" {
HalfPageScrollUp
}
bind "n" {
Search "down"
}
bind "p" {
Search "up"
}
bind "c" {
SearchToggleOption "CaseSensitivity"
}
bind "w" {
SearchToggleOption "Wrap"
}
bind "o" {
SearchToggleOption "WholeWord"
}
} }
entersearch { entersearch {
bind "Ctrl c" "Esc" { SwitchToMode "Scroll"; } bind "Ctrl c" "Esc" {
bind "Enter" { SwitchToMode "Search"; } SwitchToMode "Scroll"
}
bind "Enter" {
SwitchToMode "Search"
}
} }
renametab { renametab {
bind "Ctrl c" { SwitchToMode "Locked"; } bind "Ctrl c" {
bind "Esc" { UndoRenameTab; SwitchToMode "Tmux"; } SwitchToMode "Locked"
}
bind "Esc" {
UndoRenameTab
SwitchToMode "Tmux"
}
} }
renamepane { renamepane {
bind "Ctrl c" { SwitchToMode "Locked"; } bind "Ctrl c" {
bind "Esc" { UndoRenamePane; SwitchToMode "Tmux"; } SwitchToMode "Locked"
}
bind "Esc" {
UndoRenamePane
SwitchToMode "Tmux"
}
} }
tmux { tmux {
bind "[" { SwitchToMode "Scroll"; } bind "[" {
bind "Ctrl Space" { Write 1; SwitchToMode "Locked"; } SwitchToMode "Scroll"
bind "z" { ToggleFocusFullscreen; SwitchToMode "Locked"; } }
bind "Ctrl Space" {
Write 1
SwitchToMode "Locked"
}
bind "z" {
ToggleFocusFullscreen
SwitchToMode "Locked"
}
// manipulate tabs // manipulate tabs
bind "c" { NewTab; SwitchToMode "Locked"; } bind "c" {
bind "K" { CloseTab; SwitchToMode "Locked"; } NewTab
bind "R" { SwitchToMode "RenameTab"; } SwitchToMode "Locked"
}
bind "K" {
CloseTab
SwitchToMode "Locked"
}
bind "R" {
SwitchToMode "RenameTab"
}
// switch modes // switch modes
bind "/" { SwitchToMode "EnterSearch"; SearchInput 0; } bind "/" {
SwitchToMode "EnterSearch"
SearchInput 0
}
// miscellaneous // miscellaneous
bind "s" { ToggleActiveSyncTab; SwitchToMode "Locked"; } bind "s" {
bind "m" { ToggleMouseMode; SwitchToMode "Locked"; } ToggleActiveSyncTab
bind "y" { Run "yazi"; SwitchToMode "Locked"; } SwitchToMode "Locked"
}
bind "m" {
ToggleMouseMode
SwitchToMode "Locked"
}
bind "y" {
Run "yazi"
SwitchToMode "Locked"
}
// create new pane // create new pane
bind "Space" { NewPane; SwitchToMode "Locked"; } bind "Space" {
bind "-" "_" { NewPane "Down"; SwitchToMode "Locked"; } NewPane
bind "|" "\\" { NewPane "Right"; SwitchToMode "Locked"; } SwitchToMode "Locked"
bind "r" { SwitchToMode "RenamePane"; } }
bind "-" "_" {
NewPane "Down"
SwitchToMode "Locked"
}
bind "|" "\\" {
NewPane "Right"
SwitchToMode "Locked"
}
bind "r" {
SwitchToMode "RenamePane"
}
// switch between tabs // switch between tabs
bind "h" { GoToPreviousTab; SwitchToMode "Locked"; } bind "h" {
bind "l" { GoToNextTab; SwitchToMode "Locked"; } GoToPreviousTab
bind "1" { GoToTab 1; SwitchToMode "Locked"; } SwitchToMode "Locked"
bind "2" { GoToTab 2; SwitchToMode "Locked"; } }
bind "3" { GoToTab 3; SwitchToMode "Locked"; } bind "l" {
bind "4" { GoToTab 4; SwitchToMode "Locked"; } GoToNextTab
bind "5" { GoToTab 5; SwitchToMode "Locked"; } SwitchToMode "Locked"
bind "6" { GoToTab 6; SwitchToMode "Locked"; } }
bind "7" { GoToTab 7; SwitchToMode "Locked"; } bind "1" {
bind "8" { GoToTab 8; SwitchToMode "Locked"; } GoToTab 1
bind "9" { GoToTab 9; SwitchToMode "Locked"; } SwitchToMode "Locked"
}
bind "2" {
GoToTab 2
SwitchToMode "Locked"
}
bind "3" {
GoToTab 3
SwitchToMode "Locked"
}
bind "4" {
GoToTab 4
SwitchToMode "Locked"
}
bind "5" {
GoToTab 5
SwitchToMode "Locked"
}
bind "6" {
GoToTab 6
SwitchToMode "Locked"
}
bind "7" {
GoToTab 7
SwitchToMode "Locked"
}
bind "8" {
GoToTab 8
SwitchToMode "Locked"
}
bind "9" {
GoToTab 9
SwitchToMode "Locked"
}
// switch between panes // switch between panes
bind "Left" { MoveFocus "Left"; } bind "Left" {
bind "Right" { MoveFocus "Right"; } MoveFocus "Left"
bind "Down" { MoveFocus "Down"; } }
bind "Up" { MoveFocus "Up"; } bind "Right" {
bind "Tab" { FocusNextPane; } MoveFocus "Right"
}
bind "Down" {
MoveFocus "Down"
}
bind "Up" {
MoveFocus "Up"
}
bind "Tab" {
FocusNextPane
}
// move panes // move panes
bind "H" { MovePane "Left"; } bind "H" {
bind "J" { MovePane "Down"; } MovePane "Left"
bind "K" { MovePane "Up"; } }
bind "L" { MovePane "Right"; } bind "J" {
MovePane "Down"
}
bind "K" {
MovePane "Up"
}
bind "L" {
MovePane "Right"
}
// manipulate panes // manipulate panes
bind "W" { CloseFocus; SwitchToMode "Locked"; } bind "W" {
CloseFocus
SwitchToMode "Locked"
}
// exit etc // exit etc
bind "Enter" "Esc" { SwitchToMode "Locked"; } bind "Enter" "Esc" {
bind "d" { Detach; SwitchToMode "Locked"; } SwitchToMode "Locked"
bind "Q" { Quit; } }
bind "d" {
Detach
SwitchToMode "Locked"
}
bind "Q" {
Quit
}
// resizing // resizing
bind "Ctrl h" { Resize "Increase Left"; } bind "Ctrl h" {
bind "Ctrl j" { Resize "Increase Down"; } Resize "Increase Left"
bind "Ctrl k" { Resize "Increase Up"; } }
bind "Ctrl l" { Resize "Increase Right"; } bind "Ctrl j" {
Resize "Increase Down"
}
bind "Ctrl k" {
Resize "Increase Up"
}
bind "Ctrl l" {
Resize "Increase Right"
}
} }
shared { shared {
bind "Alt n" { NewPane; } bind "Alt n" {
bind "Alt h" { MoveFocus "Left"; } NewPane
bind "Alt j" { MoveFocus "Down"; } }
bind "Alt l" { MoveFocus "Right"; } bind "Alt Ctrl h" {
bind "Alt k" { MoveFocus "Up"; } MoveFocus "Left"
bind "Ctrl h" { MoveFocus "Left"; } }
bind "Ctrl j" { MoveFocus "Down"; } bind "Alt Ctrl j" {
bind "Ctrl l" { MoveFocus "Right"; } MoveFocus "Down"
bind "Ctrl k" { MoveFocus "Up"; } }
bind "Alt [" { PreviousSwapLayout; } bind "Alt Ctrl l" {
bind "Alt ]" { NextSwapLayout; } MoveFocus "Right"
bind "Alt =" "Alt +" { Resize "Increase"; } }
bind "Alt -" "Alt _" { Resize "Decrease"; } bind "Alt Ctrl k" {
MoveFocus "Up"
}
bind "Alt [" {
PreviousSwapLayout
}
bind "Alt ]" {
NextSwapLayout
}
bind "Alt =" "Alt +" {
Resize "Increase"
}
bind "Alt -" "Alt _" {
Resize "Decrease"
}
} }
shared_except "tmux" { shared_except "tmux" {
bind "Ctrl Space" { SwitchToMode "Tmux"; } bind "Ctrl Space" {
SwitchToMode "Tmux"
}
}
} }
}

View file

@ -19,7 +19,6 @@ in {
package = pkgs.loki; package = pkgs.loki;
configuration = { configuration = {
}; };
}; };
}; };

View file

@ -55,32 +55,25 @@ in {
# This is the standard port for SMTP, and is used by mail servers to send email to each other. # This is the standard port for SMTP, and is used by mail servers to send email to each other.
smtp = { smtp = {
protocol = "smtp"; protocol = "smtp";
bind = ["localhost::25" "[::]:25"]; bind = ["[::]:25"];
tls.implicit = true; tls.implicit = true;
}; };
# SMTP submissions with implicit TLS are received on port 465 by default. # SMTP submissions with implicit TLS are received on port 465 by default.
# This is the standard port for SMTP submissions with native implicit TLS, # This is the standard port for SMTP submissions with native implicit TLS,
# and is used by mail clients to send email to mail servers. # and is used by mail clients to send email to mail servers.
submissions = { submissions = {
bind = ["localhost:465" "[::]:465"]; bind = ["[::]:465"];
protocol = "smtp"; protocol = "smtp";
tls.implicit = true; tls.implicit = true;
}; };
imaps = { imaps = {
bind = ["localhost:993" "[::]:993"]; bind = ["[::]:993"];
protocol = "imap"; protocol = "imap";
tls.implicit = true; tls.implicit = true;
}; };
jmap = {
bind = ["localhost:8080" "[::]:8080"];
url = "https://mail.${domain}";
protocol = "jmap";
tls.implicit = true;
};
management = { management = {
bind = ["localhost:8080"]; bind = ["127.0.0.1:8080"];
protocol = "http"; protocol = "http";
tls.implicit = true; tls.implicit = true;
}; };
@ -90,40 +83,40 @@ in {
inherit domain; inherit domain;
}; };
}; };
storage = { # storage = {
data = "postgresql"; # data = "postgresql";
blob = "postgresql"; # blob = "postgresql";
fts = "postgresql"; # fts = "postgresql";
lookup = "postgresql"; # lookup = "postgresql";
full-text = { # full-text = {
default-language = "en"; # default-language = "en";
}; # };
}; # };
store = { # store = {
postgresql = { # postgresql = {
# Specifies the database type, set to "postgresql" for PostgreSQL. # # Specifies the database type, set to "postgresql" for PostgreSQL.
type = "postgresql"; # type = "postgresql";
# The hostname or IP address of the PostgreSQL server. # # The hostname or IP address of the PostgreSQL server.
host = "localhost"; # host = "localhost";
# Port PostgreSQL runs on. Defaults to 5432. # # Port PostgreSQL runs on. Defaults to 5432.
port = "5432"; # port = "5432";
# Name of the database to connect to. # # Name of the database to connect to.
# TODO: add this to PostgreSQL. # # TODO: add this to PostgreSQL.
database = "stalwart"; # database = "stalwart";
# The username used for authentication with the PostgreSQL server. # # The username used for authentication with the PostgreSQL server.
# TODO: add this to PostgreSQL. # # TODO: add this to PostgreSQL.
user = "stalwart"; # user = "stalwart";
password = ""; # password = "";
# Enable TLS # # Enable TLS
tls.enable = true; # tls.enable = true;
}; # };
}; # };
}; };
}; };
services.nginx = { services.nginx = {

View file

@ -38,6 +38,16 @@ in {
governor = "performance"; governor = "performance";
# Turbo boost setting: "always", "auto", or "never" # Turbo boost setting: "always", "auto", or "never"
turbo = "auto"; turbo = "auto";
# Enable or disable automatic turbo management (when turbo = "auto")
enable_auto_turbo = true;
# Custom thresholds for auto turbo management
turbo_auto_settings = {
load_threshold_high = 70.0;
load_threshold_low = 30.0;
temp_threshold_high = 75.0;
initial_turbo_state = false; # whether turbo should be initially enabled (false = disabled)
};
# Energy Performance Preference # Energy Performance Preference
epp = "performance"; epp = "performance";
# Energy Performance Bias (0-15 scale or named value) # Energy Performance Bias (0-15 scale or named value)
@ -54,9 +64,24 @@ in {
battery = { battery = {
governor = "powersave"; governor = "powersave";
turbo = "auto"; turbo = "auto";
# More conservative auto turbo settings on battery
enable_auto_turbo = true;
turbo_auto_settings = {
load_threshold_high = 80.0;
load_threshold_low = 40.0;
temp_threshold_high = 70.0;
# start with turbo disabled on battery for power savings
initial_turbo_state = false;
};
epp = "power"; epp = "power";
epb = "balance_power"; epb = "balance_power";
platform_profile = "low-power"; platform_profile = "low-power";
# Global battery charging thresholds (applied to both profiles unless overridden)
# Start charging at 40%, stop at 80% - extends battery lifespan
# take precedence over this global setting
battery_charge_thresholds = [40 90];
min_freq_mhz = 800; min_freq_mhz = 800;
max_freq_mhz = 2500; max_freq_mhz = 2500;
}; };

View file

@ -51,6 +51,9 @@ in {
dates = ["21:00"]; dates = ["21:00"];
}; };
# NOTE:
# Writes the settings to /etc/nix/nix.conf.
# See `man nix.conf` for more detailed descriptions of these settings.
settings = { settings = {
# Tell nix to use the xdg spec for base directories # Tell nix to use the xdg spec for base directories
# while transitioning, any state must be carried over # while transitioning, any state must be carried over
@ -69,7 +72,14 @@ in {
# Let the system decide the number of max jobs # Let the system decide the number of max jobs
# based on available system specs. Usually this is # based on available system specs. Usually this is
# the same as the number of cores your CPU has. # the same as the number of cores your CPU has.
max-jobs = 2; max-jobs = "auto";
# This option defines the maximum number of concurrent tasks during one build.
# It affects, e.g., -j option for make. The special value 0 means that the builder
# should use all available CPU cores in the system. Some builds may become
# non-deterministic with this option; use with care!
# Packages will only be affected if enableParallelBuilding is set for them.
cores = 0;
# If set, Nix will perform builds in a sandboxed environment # If set, Nix will perform builds in a sandboxed environment
# that it will set up automatically for each build. # that it will set up automatically for each build.

View file

@ -1,34 +1,39 @@
# taken from raf # taken from raf
{ {
# Global nixpkgs configuration. This is ignored if nixpkgs.pkgs is set # Global nixpkgs configuration.
# which is a case that should be avoided. Everything that is set to configure # This is ignored if nixpkgs.pkgs is set, which should be avoided.
# nixpkgs must go here.
nixpkgs = { nixpkgs = {
# Configuration reference: # Configuration reference:
# <https://nixos.org/manual/nixpkgs/unstable/#chap-packageconfig> # <https://nixos.org/manual/nixpkgs/unstable/#chap-packageconfig>
config = { config = {
# Disallow broken packages to be built. allowBroken = false; # Disallow broken packages to be built.
allowBroken = false;
allowUnsupportedSystem = true; allowUnsupportedSystem = true;
# Warn when config contains an unrecognized attribute.
# This might be useful for getting a better configuration.
warnUndeclaredOptions = true;
# Allow unfree packages # Allow unfree packages
allowUnfree = true; allowUnfree = true;
# Default to none, add more as necessary. This is usually where # Permitted insecure packages in a system.
# electron packages go when they reach EOL. # Default to none, add more as necessary.
permittedInsecurePackages = ["olm-3.2.16"]; # Matrix also likes using deprecated libraries, which tend to go into this list.
# permittedInsecurePackages = [];
# Nixpkgs sets internal package aliases to ease migration from other # Whether to set enableParallelBuilding to true by default while
# distributions easier, or for convenience's sake. Even though the manual # building nixpkgs packages. Changing the default causes a mass rebuild.
# and the description for this option recommends this to be true, I prefer enableParallelBuildingByDefault = false;
# explicit naming conventions, i.e., no aliases.
# Whether to expose old attribute names for compatibility.
# This improves backwards compatibility,
# which I could not care less about in my configuration.
allowAliases = false; allowAliases = false;
# List of derivation warnings to display while rebuilding. # List of derivation warnings to display while rebuilding.
# See: <https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/check-meta.nix> # See: <https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/check-meta.nix>
# NOTE: "maintainerless" can be added to emit warnings
# about packages without maintainers but it seems to me
# like there are more packages without maintainers than
# with maintainers, so it's disabled for the time being.
showDerivationWarnings = []; showDerivationWarnings = [];
}; };
}; };

View file

@ -16,10 +16,8 @@ in {
# To be able to use this for a varying amount of monitors we do some nasty trickery. # To be able to use this for a varying amount of monitors we do some nasty trickery.
# This was inspired by jacekpoz, whose configuration is linked in this project's README.md. # This was inspired by jacekpoz, whose configuration is linked in this project's README.md.
workspace = workspace =
# We're creating several lists of workspace assignments, one for each monitor, (
# and have to merge them into one big list. # We use imap0 insted of map because imap0 starts indexing at zero as oppsed to one with map.
(flatten
# We then use imap0 insted of map because imap0 starts indexing at zero as oppsed to one with map.
(imap0 (monitorIndex: monitorName: ( (imap0 (monitorIndex: monitorName: (
map ( map (
i: let i: let
@ -35,7 +33,11 @@ in {
(genList (i: i + 1 + (10 * monitorIndex)) 10) (genList (i: i + 1 + (10 * monitorIndex)) 10)
)) ))
# our attrSet of different monitors # our attrSet of different monitors
(attrNames monitors))) (attrNames monitors))
# We're creating several lists of workspace assignments, one for each monitor,
# and have to merge them into one big list.
|> flatten
)
# These are my two special workspaces # These are my two special workspaces
++ [ ++ [
"special:nixos, decorate:false" "special:nixos, decorate:false"

View file

@ -1,9 +1,9 @@
input { input {
keyboard { keyboard {
xkb { xkb {
layout "us,de" layout "us,ru"
variant ",phonetic_winkeys,,dvorak" variant "phonetic_winkeys,"
options "grp:rctrl_rshift_toggle,caps:escape" options "grp:rctrl_rshift_toggle,compose:104"
} }
repeat-rate 60 repeat-rate 60
repeat-delay 200 repeat-delay 200
@ -68,8 +68,8 @@ layout {
} }
} }
// xwayland stuff // xwayland stuff
spawn-at-startup ", xwayland-satellite" spawn-at-startup "xwayland-satellite"
spawn-at-startup ", avizo-service" spawn-at-startup "avizo-service"
spawn-at-startup "keepassxc" spawn-at-startup "keepassxc"
spawn-at-startup "startxfce4" spawn-at-startup "startxfce4"
spawn-at-startup "quickshell" spawn-at-startup "quickshell"
@ -124,11 +124,14 @@ binds {
Mod+Shift+Slash { Mod+Shift+Slash {
show-hotkey-overlay show-hotkey-overlay
} }
// Mod+Return {
// spawn "foot"
// }
Mod+Return { Mod+Return {
spawn "foot" spawn "ghostty"
} }
Mod+D { Mod+D {
spawn "quickshell msg launcher open" spawn "bash" "-c" "quickshell msg launcher open"
} }
Mod+Alt+L { Mod+Alt+L {
spawn "swaylock" spawn "swaylock"

View file

@ -8,11 +8,6 @@
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption;
cfg = config.modules.desktops.niri; cfg = config.modules.desktops.niri;
niri-config = {
};
toKDL = import ./toKDL.nix lib;
in { in {
options.modules.desktops.niri.enable = mkEnableOption "Niri, a scolling tiling wayland compositor"; options.modules.desktops.niri.enable = mkEnableOption "Niri, a scolling tiling wayland compositor";
config = mkIf cfg.enable { config = mkIf cfg.enable {
@ -26,5 +21,21 @@ in {
# set niri's config location to /etc/niri/config.kdl. # set niri's config location to /etc/niri/config.kdl.
environment.etc."niri/config.kdl".source = ./config.kdl; environment.etc."niri/config.kdl".source = ./config.kdl;
environment.systemPackages = builtins.attrValues {
inherit (pkgs) xwayland-satellite avizo;
};
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
];
config = {
common.default = ["*"];
hyprland.default = ["gtk"];
};
};
}; };
} }

View file

@ -1,10 +1,9 @@
{ {pkgs}: let
pkgs, inherit (pkgs) lib;
helix, wrapped-helix = pkgs.callPackage ./helix {};
}: let
wrapped-helix = pkgs.callPackage ./helix {inherit helix;};
kakoune = pkgs.callPackage ./kakoune.nix {}; kakoune = pkgs.callPackage ./kakoune.nix {};
fish = pkgs.callPackage ./shell {}; fish = pkgs.callPackage ./shell {inherit lib;};
in { in {
inherit wrapped-helix kakoune fish; inherit kakoune fish;
helix = wrapped-helix;
} }

View file

@ -2,6 +2,8 @@
symlinkJoin, symlinkJoin,
makeWrapper, makeWrapper,
callPackage, callPackage,
fetchzip,
rustPlatform,
alejandra, alejandra,
basedpyright, basedpyright,
bash-language-server, bash-language-server,
@ -21,7 +23,6 @@
lazygit, lazygit,
lib, lib,
lldb_19, lldb_19,
nil,
nixd, nixd,
ruff, ruff,
rust-analyzer, rust-analyzer,
@ -40,6 +41,21 @@
}: let }: let
inherit (lib.meta) getExe; inherit (lib.meta) getExe;
custom-helix = helix.overrideAttrs (_: rec {
version = "25.06.1";
src = fetchzip {
url = "https://github.com/bloxx12/helix/releases/download/${version}/helix-${version}-source.tar.xz";
hash = "sha256-941moaBUF+aGsbFapK1cp5+NFdecSfRCTdnVUtkDQps=";
stripRoot = false;
};
doInstallCheck = false;
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (custom-helix) src;
hash = "sha256-w07ZV1tR3lzYz4N+hI9alvFp0AHCcsItPRhVt9Sluo8=";
};
});
toml = formats.toml {}; toml = formats.toml {};
helix-languages = callPackage ./languages.nix {inherit lib;}; helix-languages = callPackage ./languages.nix {inherit lib;};
@ -116,7 +132,7 @@
wrapped-helix = symlinkJoin { wrapped-helix = symlinkJoin {
name = "helix-wrapped"; name = "helix-wrapped";
paths = [ paths = [
helix custom-helix
# Bash # Bash
bash-language-server bash-language-server
@ -128,13 +144,15 @@
lldb_19 lldb_19
# Markdown # Markdown
taplo taplo
# Nix
nil
nixd nixd
rust-analyzer rust-analyzer
rustfmt rustfmt
# Shell # Shell
shellcheck shellcheck
kdlfmt
superhtml superhtml
# toml # toml
taplo taplo

View file

@ -1,22 +1,25 @@
{ {
fetchFromGitHub,
rustPlatform,
alejandra, alejandra,
basedpyright, basedpyright,
bash-language-server, bash-language-server,
clang-tools, clang-tools,
cmake-format, cmake-format,
cmake-language-server, cmake-language-server,
deadnix,
deno, deno,
dprint, dprint,
formats, formats,
gdb, gdb,
kdePackages,
lib, lib,
nil, nil,
ruff, ruff,
shfmt, shfmt,
kdePackages, simple-completion-language-server,
typescript-language-server, typescript-language-server,
vscode-langservers-extracted, vscode-langservers-extracted,
simple-completion-language-server,
zls, zls,
... ...
}: let }: let
@ -24,6 +27,22 @@
toml = formats.toml {}; toml = formats.toml {};
# a newer nil version, for pipes support.
newer-nil = nil.overrideAttrs (_: {
version = "unstable-02-06-2025";
src = fetchFromGitHub {
owner = "oxalica";
repo = "nil";
rev = "577d160da311cc7f5042038456a0713e9863d09e";
hash = "sha256-ggXU3RHv6NgWw+vc+HO4/9n0GPufhTIUjVuLci8Za8c=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
inherit (newer-nil) src;
hash = "sha256-uZsLlFU9GKLvFllF7Kf5Q7HfN26KQojf4rvOb9p7Rjs=";
};
});
helix-languages = { helix-languages = {
language = let language = let
mark = lang: { mark = lang: {
@ -186,10 +205,13 @@
}; };
nil = { nil = {
command = getExe nil; command = getExe newer-nil;
# alejandro # alejandro
config.nil.formatting.command = ["${getExe alejandra}" "-q"]; config.nil.formatting.command = ["${getExe alejandra}" "-q"];
}; };
deadnix = {
command = getExe deadnix;
};
scls = { scls = {
command = getExe simple-completion-language-server; command = getExe simple-completion-language-server;

View file

@ -1,33 +1,42 @@
# This shell setup was inspired by sioodmy. Check out his setup! # This shell setup was originally inspired by sioodmy.
# Some further cool tricks, like using vendor_conf.d to avoid having
# to build fish myself, are taken from viperml's setup.
{pkgs, ...}: let {pkgs, ...}: let
inherit (pkgs) lib;
inherit (lib.strings) concatStringsSep;
inherit (lib.attrsets) mapAttrsToList;
toml = pkgs.formats.toml {}; toml = pkgs.formats.toml {};
starship-config = import ./starship.nix; starship-config = import ./starship.nix;
aliases = import ./aliases.nix {inherit pkgs;}; aliases = import ./aliases.nix {inherit pkgs;};
vendorConf = "share/fish/vendor_conf.d";
fishinit = import ./fishinit.nix {inherit pkgs aliasesStr;}; fishinit = import ./fishinit.nix {
inherit
pkgs
aliasesStr
vendorConf
;
};
aliasesStr = aliasesStr =
pkgs.lib.concatStringsSep "\n" mapAttrsToList (k: v: "alias ${k}=\"${v}\"") aliases
(pkgs.lib.mapAttrsToList (k: v: "alias ${k}=\"${v}\"") aliases); |> concatStringsSep "\n";
packages = import ./packages.nix pkgs;
# this was taken from viperml, check out his config for this! packages = import ./packages.nix pkgs;
custom-fish = pkgs.fish.overrideAttrs (old: {
patches = [./fish-on-tmpfs.patch];
doCheck = false;
postInstall =
old.postInstall
+ ''
echo "source ${fishinit}" >> $out/etc/fish/config.fish
'';
});
in in
(pkgs.symlinkJoin { (pkgs.symlinkJoin {
name = "fish"; name = "fish";
paths = [custom-fish] ++ packages; paths = [pkgs.fish] ++ packages;
nativeBuildInputs = [pkgs.makeWrapper]; nativeBuildInputs = [pkgs.makeWrapper];
postBuild = '' postBuild = ''
wrapProgram $out/bin/fish --set STARSHIP_CONFIG "${toml.generate "starship.toml" starship-config}" \ wrapProgram $out/bin/fish \
--set STARSHIP_CONFIG "${toml.generate "starship.toml" starship-config}" \
--prefix XDG_DATA_DIRS : "${
lib.makeSearchPathOutput "out" "share" [
fishinit
]
}"
''; '';
}) })
.overrideAttrs (_: { .overrideAttrs (_: {

View file

@ -1,10 +0,0 @@
--- a/src/path.rs
+++ b/src/path.rs
@@ -781,7 +781,7 @@ fn get_cache_directory() -> &'static BaseDirectory {
fn get_config_directory() -> &'static BaseDirectory {
static DIR: Lazy<BaseDirectory> =
- Lazy::new(|| make_base_directory(L!("XDG_CONFIG_HOME"), L!("/.config/fish")));
+ Lazy::new(|| make_base_directory(L!("XDG_RUNTIME_DIR"), L!("/.config/fish")));
&DIR
}

View file

@ -1,9 +1,11 @@
{ {
pkgs, pkgs,
aliasesStr, aliasesStr,
vendorConf,
}: }:
pkgs.writeText "config.fish" '' pkgs.writeTextDir "${vendorConf}/blox_config.fish"
# fish
''
# source ${pkgs.fishPlugins.sponge}/share/zsh-defer/zsh-defer.plugin.zsh # source ${pkgs.fishPlugins.sponge}/share/zsh-defer/zsh-defer.plugin.zsh
${pkgs.atuin}/bin/atuin init fish | source ${pkgs.atuin}/bin/atuin init fish | source
${pkgs.zoxide}/bin/zoxide init fish | source ${pkgs.zoxide}/bin/zoxide init fish | source
@ -11,6 +13,10 @@ pkgs.writeText "config.fish" ''
${pkgs.direnv}/bin/direnv hook fish | source ${pkgs.direnv}/bin/direnv hook fish | source
${pkgs.pay-respects}/bin/pay-respects fish --alias f --nocnf | source ${pkgs.pay-respects}/bin/pay-respects fish --alias f --nocnf | source
# I need to source /etc/profile using foreign-env, to get stuff set by nixos, e.g. environment.systemVariables.
# set -p fish_function_path ${pkgs.fishPlugins.foreign-env}/share/fish/vendor_functions.d
# fenv source /etc/profile
source ${./config.fish} source ${./config.fish}