Niri + Stylix

This commit is contained in:
Christopher Mühl 2025-12-12 13:20:39 +01:00
parent be45864223
commit 6da818cbca
No known key found for this signature in database
GPG key ID: E919B0F59E14FD47
19 changed files with 547 additions and 89 deletions

345
flake.lock generated
View file

@ -93,6 +93,74 @@
"url": "https://codeberg.org/LGFae/awww"
}
},
"base16": {
"inputs": {
"fromYaml": "fromYaml"
},
"locked": {
"lastModified": 1755819240,
"narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=",
"owner": "SenchoPens",
"repo": "base16.nix",
"rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "base16.nix",
"type": "github"
}
},
"base16-fish": {
"flake": false,
"locked": {
"lastModified": 1754405784,
"narHash": "sha256-l9xHIy+85FN+bEo6yquq2IjD1rSg9fjfjpyGP1W8YXo=",
"owner": "tomyun",
"repo": "base16-fish",
"rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561",
"type": "github"
},
"original": {
"owner": "tomyun",
"repo": "base16-fish",
"rev": "23ae20a0093dca0d7b39d76ba2401af0ccf9c561",
"type": "github"
}
},
"base16-helix": {
"flake": false,
"locked": {
"lastModified": 1760703920,
"narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=",
"owner": "tinted-theming",
"repo": "base16-helix",
"rev": "d646af9b7d14bff08824538164af99d0c521b185",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-helix",
"type": "github"
}
},
"base16-vim": {
"flake": false,
"locked": {
"lastModified": 1732806396,
"narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=",
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-vim",
"rev": "577fe8125d74ff456cf942c733a85d769afe58b7",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
@ -195,6 +263,22 @@
"type": "gitlab"
}
},
"firefox-gnome-theme": {
"flake": false,
"locked": {
"lastModified": 1764724327,
"narHash": "sha256-OkFLrD3pFR952TrjQi1+Vdj604KLcMnkpa7lkW7XskI=",
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"rev": "66b7c635763d8e6eb86bd766de5a1e1fbfcc1047",
"type": "github"
},
"original": {
"owner": "rafaelmardojai",
"repo": "firefox-gnome-theme",
"type": "github"
}
},
"flake-compat": {
"locked": {
"lastModified": 1751685974,
@ -311,6 +395,48 @@
"type": "github"
}
},
"flake-parts_3": {
"inputs": {
"nixpkgs-lib": [
"nur",
"nixpkgs"
]
},
"locked": {
"lastModified": 1733312601,
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_4": {
"inputs": {
"nixpkgs-lib": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1763759067,
"narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems_2"
@ -348,6 +474,22 @@
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
"lastModified": 1731966426,
"narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=",
"owner": "SenchoPens",
"repo": "fromYaml",
"rev": "106af9e2f715e2d828df706c386a685698f3223b",
"type": "github"
},
"original": {
"owner": "SenchoPens",
"repo": "fromYaml",
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat_2",
@ -412,6 +554,25 @@
"type": "github"
}
},
"gnome-shell": {
"flake": false,
"locked": {
"host": "gitlab.gnome.org",
"lastModified": 1764524476,
"narHash": "sha256-bTmNn3Q4tMQ0J/P0O5BfTQwqEnCiQIzOGef9/aqAZvk=",
"owner": "GNOME",
"repo": "gnome-shell",
"rev": "c0e1ad9f0f703fd0519033b8f46c3267aab51a22",
"type": "gitlab"
},
"original": {
"host": "gitlab.gnome.org",
"owner": "GNOME",
"ref": "gnome-49",
"repo": "gnome-shell",
"type": "gitlab"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
@ -440,11 +601,11 @@
]
},
"locked": {
"lastModified": 1760500983,
"narHash": "sha256-zfY4F4CpeUjTGgecIJZ+M7vFpwLc0Gm9epM/iMQd4w8=",
"lastModified": 1765480374,
"narHash": "sha256-HlbvQAqLx7WqZFFQZ8nu5UUJAVlXiV/kqKbyueA8srw=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "c53e65ec92f38d30e3c14f8d628ab55d462947aa",
"rev": "39cb677ed9e908e90478aa9fe5f3383dfc1a63f3",
"type": "github"
},
"original": {
@ -687,6 +848,52 @@
"type": "github"
}
},
"nur": {
"inputs": {
"flake-parts": "flake-parts_3",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1765553384,
"narHash": "sha256-JQkYvV0eqwkAtdZToq0AYacaz+1gaEiMzpbJDLlypgk=",
"owner": "nix-community",
"repo": "NUR",
"rev": "41be230f93bb25c0d10e70d7c821e5e42fd32b1c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"nur_2": {
"inputs": {
"flake-parts": [
"stylix",
"flake-parts"
],
"nixpkgs": [
"stylix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1764773531,
"narHash": "sha256-mCBl7MD1WZ7yCG6bR9MmpPO2VydpNkWFgnslJRIT1YU=",
"owner": "nix-community",
"repo": "NUR",
"rev": "1d9616689e98beded059ad0384b9951e967a17fa",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"on-linux": {
"flake": false,
"locked": {
@ -765,8 +972,10 @@
"musnix": "musnix",
"niri": "niri",
"nixpkgs": "nixpkgs_7",
"nur": "nur",
"quadlet": "quadlet",
"snowfall": "snowfall",
"stylix": "stylix",
"unstable": "unstable"
}
},
@ -813,6 +1022,40 @@
"type": "github"
}
},
"stylix": {
"inputs": {
"base16": "base16",
"base16-fish": "base16-fish",
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts_4",
"gnome-shell": "gnome-shell",
"nixpkgs": [
"nixpkgs"
],
"nur": "nur_2",
"systems": "systems_3",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
"tinted-tmux": "tinted-tmux",
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1765474444,
"narHash": "sha256-sDG+c73xEnIw1pFNRWffKDnTWiTuyZiEP+Iub0D3mWA=",
"owner": "nix-community",
"repo": "stylix",
"rev": "dd14de4432a94e93e10d0159f1d411487e435e1e",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "stylix",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
@ -843,6 +1086,102 @@
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tinted-foot": {
"flake": false,
"locked": {
"lastModified": 1726913040,
"narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=",
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-foot",
"rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4",
"type": "github"
}
},
"tinted-kitty": {
"flake": false,
"locked": {
"lastModified": 1735730497,
"narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=",
"owner": "tinted-theming",
"repo": "tinted-kitty",
"rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-kitty",
"type": "github"
}
},
"tinted-schemes": {
"flake": false,
"locked": {
"lastModified": 1763914658,
"narHash": "sha256-Hju0WtMf3iForxtOwXqGp3Ynipo0EYx1AqMKLPp9BJw=",
"owner": "tinted-theming",
"repo": "schemes",
"rev": "0f6be815d258e435c9b137befe5ef4ff24bea32c",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "schemes",
"type": "github"
}
},
"tinted-tmux": {
"flake": false,
"locked": {
"lastModified": 1764465359,
"narHash": "sha256-lbSVPqLEk2SqMrnpvWuKYGCaAlfWFMA6MVmcOFJjdjE=",
"owner": "tinted-theming",
"repo": "tinted-tmux",
"rev": "edf89a780e239263cc691a987721f786ddc4f6aa",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "tinted-tmux",
"type": "github"
}
},
"tinted-zed": {
"flake": false,
"locked": {
"lastModified": 1764464512,
"narHash": "sha256-rCD/pAhkMdCx6blsFwxIyvBJbPZZ1oL2sVFrH07lmqg=",
"owner": "tinted-theming",
"repo": "base16-zed",
"rev": "907dbba5fb8cf69ebfd90b00813418a412d0a29a",
"type": "github"
},
"original": {
"owner": "tinted-theming",
"repo": "base16-zed",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": "nixpkgs_3"

View file

@ -22,6 +22,7 @@
darwin = [
agenix.darwinModules.default
agenix-rekey.nixosModules.default
stylix.darwinModules.stylix
./modules/common
];
};
@ -29,7 +30,9 @@
# Add modules only to specific hosts
systems.hosts = with inputs; {
cobalt.modules = [
niri.nixosModules.niri
musnix.nixosModules.default
stylix.nixosModules.stylix
];
beryllium.modules = [
quadlet.nixosModules.quadlet
@ -52,7 +55,10 @@
permittedInsecurePackages = [];
};
overlays = with inputs; [niri.overlays.niri];
overlays = with inputs; [
niri.overlays.niri
nur.overlays.default
];
outputs-builder = channels: {
formatter = channels.nixpkgs.alejandra;
@ -97,10 +103,19 @@
agenix-rekey.url = "github:oddlama/agenix-rekey";
agenix-rekey.inputs.nixpkgs.follows = "nixpkgs";
stylix = {
url = "github:nix-community/stylix";
inputs.nixpkgs.follows = "nixpkgs";
};
affinity-nix.url = "github:mrshmllow/affinity-nix";
quadlet.url = "github:SEIAROTg/quadlet-nix";
musnix.url = "github:musnix/musnix";
niri.url = "github:sodiboo/niri-flake/9e59ee8";
awww.url = "git+https://codeberg.org/LGFae/awww";
nur = {
url = "github:nix-community/NUR";
inputs.nixpkgs.follows = "nixpkgs";
};
};
}

View file

@ -11,11 +11,11 @@
enable = true;
iconTheme.name = "breeze-dark";
cursorTheme = {
name = "BreezeX-RosePineDawn-Linux";
package = pkgs.rose-pine-cursor;
size = 32;
};
# cursorTheme = {
# name = "BreezeX-RosePineDawn-Linux";
# package = pkgs.rose-pine-cursor;
# size = 32;
# };
gtk2.extraConfig = lib._elements.selfReferencedString {sep = "#";} ''
gtk-enable-animations = 1
@ -26,11 +26,6 @@
gtk-sound-theme-name = "freedesktop"
'';
font = {
name = "Noto Sans";
size = 10;
};
gtk3.extraConfig.gtk-application-prefer-dark-theme = 1;
gtk4.extraConfig.gtk-application-prefer-dark-theme = 1;
};

View file

@ -12,14 +12,17 @@
programs.git = {
enable = true;
userName = "Christopher Mühl";
userEmail = "christopher@muehl.dev";
signing = {
signByDefault = true;
key = "E919B0F59E14FD47";
};
extraConfig = {
users.email = "padarom@users.noreply.github.com";
settings = {
user = {
name = "Christopher Mühl";
email = "hello@muehl.dev";
};
push = {
default = "current";
autoSetupRemote = true;

View file

@ -8,6 +8,7 @@
./ssh.nix
./gpg
./niri
./stylix.nix
./misc/launcher.nix
./misc/browser.nix
./misc/gaming.nix
@ -42,7 +43,6 @@
spawn-term
to-s3
tofi-hg
open-url
generate-wallpaper
];
};

View file

@ -1,19 +1,25 @@
{pkgs, ...}: {
home.packages = with pkgs; [
firefox
];
xdg.mimeApps = {
programs.firefox = {
enable = true;
defaultApplications = {
profiles."default" = {
id = 0;
};
profiles."work" = {
id = 1;
};
};
home.packages = [pkgs._elements.open-url];
xdg.mimeApps.enable = true;
xdg.mimeApps.defaultApplications = {
"x-scheme-handler/http" = "open-url.desktop";
"x-scheme-handler/https" = "open-url.desktop";
};
};
# profile-sync-daemon manages browser profiles in tmpfs
services.psd = {
# profile-sync-daemon
enable = false;
# resyncTimer = "10m";
resyncTimer = "10m";
};
}

View file

@ -3,15 +3,12 @@
lib,
...
}: {
home.packages = with pkgs; [
fuzzel
];
programs.tofi = {
programs.tofi.enable = true;
programs.fuzzel = {
enable = true;
settings = {
font = "JetBrains Mono";
};
#settings = ''
#
#'';
};
# Clear the tofi cache after each activation so that newly installed packages

View file

@ -8,4 +8,21 @@
davinci-resolve
ffmpeg
];
programs.firefox.profiles."streaming" = {
id = 2;
settings = {};
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
kagi-search
kagi-privacy-pass
ublock-origin
# dark-reader
tree-style-tab
];
search = {
force = true;
default = "Kagi";
};
};
}

View file

@ -4,8 +4,8 @@
...
}: {
imports = [
inputs.niri.homeModules.niri
./settings.nix
./window-rules.nix
./keybinds.nix
./autostart.nix
];

View file

@ -5,8 +5,29 @@
...
}: let
in {
programs.niri.settings.binds = with config.lib.niri.actions; let
in {
programs.niri.settings = {
binds = with config.lib.niri.actions; {
"Mod+q".action = close-window;
"Mod+t".action = spawn "${pkgs._elements.spawn-term}/bin/spawn-term";
"Mod+space".action = spawn "fuzzel";
"Mod+f".action = fullscreen-window;
"Mod+WheelScrollDown".cooldown-ms = 150;
"Mod+WheelScrollDown".action = focus-workspace-down;
"Mod+WheelScrollUp".cooldown-ms = 150;
"Mod+WheelScrollUp".action = focus-workspace-up;
"Mod+WheelScrollRight".action = focus-column-right;
"Mod+WheelScrollLeft".action = focus-column-left;
"Mod+h".action = focus-column-left;
"Mod+j".action = focus-workspace-up;
"Mod+k".action = focus-workspace-down;
"Mod+l".action = focus-column-right;
"Mod+Ctrl+h".action = move-column-left;
"Mod+Ctrl+j".action = move-window-up;
"Mod+Ctrl+k".action = move-window-down;
"Mod+Ctrl+l".action = move-column-right;
};
};
}

View file

@ -4,8 +4,6 @@
...
}: {
programs.niri = {
enable = true;
settings = {
prefer-no-csd = true;
@ -21,6 +19,7 @@
window-rules = [
{
opacity = 0.95;
clip-to-geometry = true;
geometry-corner-radius = {
bottom-left = 12.0;
@ -31,6 +30,8 @@
}
{
matches = [{is-focused = true;}];
# opacity = 0.98;
focus-ring = {
width = 2;
};
@ -41,9 +42,19 @@
keyboard.xkb.layout = "en";
};
cursor = {
size = 0;
theme = "Adwaita";
outputs = {
"DP-3" = {
position.x = 3840;
position.y = -370;
transform = {
rotation = 90;
};
};
"HDMI-A-1" = {
position.x = 0;
position.y = 0;
focus-at-startup = true;
};
};
environment = {
@ -55,7 +66,6 @@
ELECTRON_OZONE_PLATFORM_HINT = "auto";
XDG_SESSION_TYPE = "wayland";
XDG_CURRENT_DESKTOP = "niri";
DISPLAY = ":0";
};
};
};

View file

@ -0,0 +1,40 @@
{
config,
pkgs,
...
}: let
borders = bl: br: tl: tr: {
bottom-left = bl;
bottom-right = br;
top-left = tl;
top-right = tr;
};
radius = 12.0;
rounded = borders radius radius radius radius;
rounded-left = borders radius 0.0 0.0 radius;
rounded-right = borders 0.0 radius radius 0.0;
in {
programs.niri.settings.window-rules = [
{
opacity = 0.95;
clip-to-geometry = true;
geometry-corner-radius = rounded-left;
}
{
matches = [
{is-focused = true;}
];
focus-ring.width = 2;
}
{
matches = [
{app-id = "1password";}
{app-id = "thunderbird";}
];
block-out-from = "screencast";
}
];
}

View file

@ -0,0 +1,29 @@
{
config,
inputs,
pkgs,
...
}: {
imports = [inputs.stylix.homeModules.stylix];
stylix = {
enable = true;
base16Scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-dawn.yaml";
targets.firefox.profileNames = ["default" "work" "streaming"];
cursor = {
package = pkgs.rose-pine-cursor;
# name = "Rosé Pine Dawn";
name = "BreezeX-RosePineDawn-Linux";
size = 32;
};
fonts.sizes = {
applications = 12;
terminal = 13;
desktop = 10;
popups = 10;
};
};
}

View file

@ -1,6 +1,6 @@
{inputs, ...}: {
home-manager = {
useGlobalPkgs = true;
# useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "hm.bak";
};

View file

@ -1,29 +1,11 @@
{pkgs, ...}: let
catppuccin = pkgs.stdenv.mkDerivation {
name = "catppuccin-helix-theme";
src = pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "helix";
rev = "3b1b0b2446791812e4a76ba147223dd5f3d4319b";
sha256 = "7TJ1CDts0i3QPRWz/gvRpkXzh8wGGLW5cv9+Vg3K1zc=";
};
installPhase = ''
mkdir -p $out
cp -r ./themes/* $out
'';
};
in {
{pkgs, ...}: {
home.packages = [pkgs.helix];
xdg.configFile."helix/themes/catppuccin".source = catppuccin;
programs.helix = {
enable = true;
defaultEditor = true;
settings = {
theme = "rose_pine_dawn";
editor = {
rulers = [80];
shell = ["nu" "-c"];
@ -52,12 +34,12 @@ in {
}
];
themes = {
catppuccin = {
inherits = "catppuccin/default/catppuccin_frappe";
"ui.background" = {};
# "ui.virtual.whitespace" = {style = "dim";};
};
};
# themes = {
# catppuccin = {
# inherits = "catppuccin/default/catppuccin_frappe";
# "ui.background" = {};
# # "ui.virtual.whitespace" = {style = "dim";};
# };
# };
};
}

View file

@ -20,7 +20,6 @@ in {
settings = {
window_padding_width = "5 10";
font_family = "Monaspace Krypton";
paste_actions = "no-op";
};
@ -32,8 +31,6 @@ in {
shell ${pkgs.fish}/bin/fish
modify_font cell_height 7px
'';
themeFile = "Rosé Pine Dawn";
};
xdg.configFile."kitty/open-actions.conf".text = ''

View file

@ -1,4 +1,5 @@
{
inputs,
pkgs,
config,
lib,
@ -23,9 +24,14 @@ in {
wayland-utils
wl-clipboard
libsForQt5.qtstyleplugin-kvantum
# xwayland-satellite
xwayland-satellite
];
programs.niri = {
enable = true;
package = pkgs.niri;
};
services.xserver = {
enable = true;
};
@ -35,15 +41,15 @@ in {
defaultSession = "plasma";
# SDDM is broken
gdm = {
enable = true;
wayland = true;
};
# sddm = {
# gdm = {
# enable = true;
# wayland.enable = true;
# wayland = true;
# };
sddm = {
enable = true;
wayland.enable = true;
};
};
# xdg.portal.extraPortals = [pkgs.xdg-desktop-portal-gtk];

View file

@ -6,20 +6,20 @@ open_browser() {
}
# Go up the parent chain of this process to determine if the link was clicked on
# in Slack. If so, open the `Work` profile in the browser.
# in Slack. If so, open the `work` profile in the browser.
parent=$PPID
while [ "$parent" -ne 1 ]; do
cmd=$(ps -o comm= -p "$parent")
if [[ "$cmd" == "slack" ]]; then
open_browser "Work" "$@"
open_browser "work" "$@"
exit 0
fi
parent=$(ps -o ppid= -p "$parent" | tail -n 1 | awk '{print $1}')
done
if [[ ${1:-} == "https://github.com/hausgold"* ]]; then
# Also use the `Work` profile for hausgold Github links
open_browser "Work" "$@"
# Also use the `work` profile for hausgold Github links
open_browser "work" "$@"
else
# Otherwise just use the default profile
open_browser "default" "$@"

View file

@ -240,6 +240,7 @@ with lib._elements; {
obs-vaapi
obs-pipewire-audio-capture
obs-backgroundremoval
obs-move-transition
droidcam-obs
];
};