diff --git a/common/default.nix b/common/default.nix
deleted file mode 100644
index ddbf3bc..0000000
--- a/common/default.nix
+++ /dev/null
@@ -1,9 +0,0 @@
-{ ... }:
-{
- imports = [
- ./nixpkgs.nix
- ./globalinstalls.nix
- ./i18n.nix
- ./networking.nix
- ];
-}
diff --git a/flake.lock b/flake.lock
index a11515e..c4b1858 100644
--- a/flake.lock
+++ b/flake.lock
@@ -89,6 +89,66 @@
"url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz"
}
},
+ "niri": {
+ "inputs": {
+ "niri-stable": "niri-stable",
+ "niri-unstable": "niri-unstable",
+ "nixpkgs": [
+ "nixpkgs"
+ ],
+ "nixpkgs-stable": [
+ "nixpkgs"
+ ],
+ "xwayland-satellite-stable": "xwayland-satellite-stable",
+ "xwayland-satellite-unstable": "xwayland-satellite-unstable"
+ },
+ "locked": {
+ "lastModified": 1742032096,
+ "narHash": "sha256-/vWpgh3DCdoREIoydTfUnZLYSxKa0yRczOJaT0dDT0o=",
+ "owner": "sodiboo",
+ "repo": "niri-flake",
+ "rev": "e2614d598a86eb892e4d98d18458ee2633285c00",
+ "type": "github"
+ },
+ "original": {
+ "owner": "sodiboo",
+ "repo": "niri-flake",
+ "type": "github"
+ }
+ },
+ "niri-stable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1740117926,
+ "narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=",
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "rev": "b94a5db8790339cf9134873d8b490be69e02ac71",
+ "type": "github"
+ },
+ "original": {
+ "owner": "YaLTeR",
+ "ref": "v25.02",
+ "repo": "niri",
+ "type": "github"
+ }
+ },
+ "niri-unstable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1742026950,
+ "narHash": "sha256-pd00WzjmAxxS3Da0e4eEzfgauAfX5HwMGfs3nm2hwwA=",
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "rev": "9e560e7e607638da4f47b6dfef5a83b18711f75d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "YaLTeR",
+ "repo": "niri",
+ "type": "github"
+ }
+ },
"nixos-hardware": {
"locked": {
"lastModified": 1741325094,
@@ -125,6 +185,7 @@
"inputs": {
"home-manager": "home-manager",
"lix-module": "lix-module",
+ "niri": "niri",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs"
}
@@ -143,6 +204,39 @@
"repo": "default",
"type": "github"
}
+ },
+ "xwayland-satellite-stable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1739246919,
+ "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=",
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Supreeeme",
+ "ref": "v0.5.1",
+ "repo": "xwayland-satellite",
+ "type": "github"
+ }
+ },
+ "xwayland-satellite-unstable": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1741910413,
+ "narHash": "sha256-z9bvteu0rf+xmUDj4VifN06XAFJZQGRSOvdN7rn/oDs=",
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "rev": "0325cb1f48a292d873a6844772cca00251cbf945",
+ "type": "github"
+ },
+ "original": {
+ "owner": "Supreeeme",
+ "repo": "xwayland-satellite",
+ "type": "github"
+ }
}
},
"root": "root",
diff --git a/flake.nix b/flake.nix
index da0baf6..9b21548 100644
--- a/flake.nix
+++ b/flake.nix
@@ -12,6 +12,12 @@
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz";
inputs.nixpkgs.follows = "nixpkgs";
};
+
+ niri = {
+ url = "github:sodiboo/niri-flake";
+ inputs.nixpkgs.follows = "nixpkgs";
+ inputs.nixpkgs-stable.follows = "nixpkgs";
+ };
};
outputs =
@@ -21,6 +27,7 @@
home-manager,
lix-module,
nixos-hardware,
+ niri,
}:
let
devices = {
@@ -29,6 +36,10 @@
hetzner-vpn2 = "aarch64-linux";
forgejo-runner-1 = "aarch64-linux";
};
+ homeDevices = [
+ "vinzenz-lpt2"
+ "vinzenz-pc2"
+ ];
forDevice = f: nixpkgs.lib.mapAttrs f devices;
in
{
@@ -36,18 +47,30 @@
device: system:
nixpkgs.lib.nixosSystem {
inherit system;
- modules = [
- lix-module.nixosModules.default
- home-manager.nixosModules.home-manager
+ modules =
+ [
+ lix-module.nixosModules.default
- { networking.hostName = device; }
+ { networking.hostName = device; }
- ./common
+ ./modules/globalinstalls.nix
+ ./modules/networking.nix
+ ./modules/nixpkgs.nix
- ./hosts/${device}/hardware.nix
- ./hosts/${device}/imports.nix
- ./hosts/${device}/configuration.nix
- ];
+ ./hosts/${device}/hardware.nix
+ ./hosts/${device}/imports.nix
+ ./hosts/${device}/configuration.nix
+ ]
+ ++ (nixpkgs.lib.optionals (builtins.elem device homeDevices) [
+ home-manager.nixosModules.home-manager
+ { home-manager.extraSpecialArgs = { inherit device; }; }
+ ./modules/home-manager.nix
+
+ ./modules/i18n.nix
+
+ niri.nixosModules.niri
+ { nixpkgs.overlays = [ niri.overlays.niri ]; }
+ ]);
}
);
diff --git a/home/default.nix b/home/default.nix
deleted file mode 100644
index d59fbbb..0000000
--- a/home/default.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{ config, ... }:
-{
- config = {
- home-manager = {
- useGlobalPkgs = true;
- useUserPackages = true;
- sharedModules = import ./shared-modules.nix;
- };
- };
-}
diff --git a/home/gnome.nix b/home/gnome.nix
deleted file mode 100644
index 0310a7e..0000000
--- a/home/gnome.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-{ config, pkgs, ... }:
-{
- imports = [ ../modules/gnome.nix ];
- config = {
- home-manager.sharedModules = [
- {
- home.packages =
- with pkgs;
- [
- gitg
- meld
- simple-scan
- pinta
- dconf-editor
- gpaste
-
- # graphical installer for flatpak apps
- gnome-software
- ]
- ++ (with gnomeExtensions; [
- caffeine
- appindicator
- ]);
-
- dconf.settings = import ./gnome-shared-dconf.nix;
-
- gtk = {
- enable = true;
- iconTheme.name = "Adwaita";
- cursorTheme.name = "Adwaita";
- theme = {
- name = "adw-gtk3-dark";
- package = pkgs.adw-gtk3;
- };
- };
- }
-
- {
- home.packages = with pkgs; [ trayscale ] ++ (with gnomeExtensions; [ tailscale-qs ]);
- dconf.settings."org/gnome/shell".enabled-extensions = [ "tailscale@joaophi.github.com" ];
- }
- ];
- };
-}
diff --git a/home/shared-modules.nix b/home/shared-modules.nix
deleted file mode 100644
index dbc3d59..0000000
--- a/home/shared-modules.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-[
- # set stateVersion
- { home.stateVersion = "22.11"; }
- # make nano the default editor
- {
- home = {
- sessionVariables.EDITOR = "nano";
- file.".nanorc".text = ''
- set linenumbers
- set mouse
- '';
- };
- }
- # command line niceness
- {
- programs = {
- command-not-found.enable = true;
- dircolors.enable = true;
-
- zsh = {
- enable = true;
- syntaxHighlighting.enable = true;
- autosuggestion.enable = true;
- enableVteIntegration = true;
- };
- };
- }
- # common git config
- {
- programs = {
- git = {
- enable = true;
- extraConfig.init.defaultBranch = "main";
- };
-
- gh = {
- enable = true;
- gitCredentialHelper.enable = true;
- };
- };
- }
- # Templates
- {
- home.file = {
- "Templates/Empty file".text = "";
- "Templates/Empty bash script".text = ''
- #!/usr/bin/env bash
- # abort on error, undefined variables
- set -eu
- # print commands before execution
- set -x
- '';
- };
- }
-]
diff --git a/home/vinzenz/configuration.nix b/home/vinzenz/configuration.nix
new file mode 100644
index 0000000..1927780
--- /dev/null
+++ b/home/vinzenz/configuration.nix
@@ -0,0 +1,50 @@
+{ pkgs, ... }:
+{
+ programs = {
+ home-manager.enable = true;
+ fzf.enable = true;
+ git-credential-oauth.enable = true;
+
+ direnv = {
+ enable = true;
+ nix-direnv.enable = true;
+ };
+
+ eza = {
+ enable = true;
+ git = true;
+ icons = "auto";
+ extraOptions = [
+ "--group-directories-first"
+ "--header"
+ ];
+ };
+
+ thefuck = {
+ enable = true;
+ enableZshIntegration = true;
+ };
+ };
+
+ home.packages = with pkgs; [
+ keepassxc
+ insync
+
+ telegram-desktop
+ element-desktop
+
+ wireguard-tools
+ wirelesstools
+
+ kdiff3
+ jetbrains-toolbox
+
+ blanket
+ vlc
+ ];
+
+ home.file."policy.json" = {
+ target = ".config/containers/policy.json";
+ text = builtins.readFile ./.config/containers/policy.json;
+ };
+}
diff --git a/home/vinzenz/default.nix b/home/vinzenz/default.nix
index 1f2ff01..695270b 100644
--- a/home/vinzenz/default.nix
+++ b/home/vinzenz/default.nix
@@ -1,66 +1,14 @@
-{ ... }:
+{ pkgs, config, ... }:
{
- config.home-manager.users.vinzenz =
- { pkgs, ... }:
- {
- imports = [
- ./editorconfig.nix
- ./git.nix
- ./gnome.nix
- ./ssh.nix
- ./vscode.nix
- ./zsh.nix
- ];
-
- config = {
-
- programs = {
- home-manager.enable = true;
- fzf.enable = true;
- git-credential-oauth.enable = true;
-
- direnv = {
- enable = true;
- nix-direnv.enable = true;
- };
-
- eza = {
- enable = true;
- git = true;
- icons = "auto";
- extraOptions = [
- "--group-directories-first"
- "--header"
- ];
- };
-
- thefuck = {
- enable = true;
- enableZshIntegration = true;
- };
- };
-
- home.packages = with pkgs; [
- keepassxc
- insync
-
- telegram-desktop
- element-desktop
-
- wireguard-tools
- wirelesstools
-
- kdiff3
- jetbrains-toolbox
-
- blanket
- vlc
- ];
-
- home.file."policy.json" = {
- target = ".config/containers/policy.json";
- text = builtins.readFile ./.config/containers/policy.json;
- };
- };
- };
+ imports = [
+ ./configuration.nix
+ ./editorconfig.nix
+ ./git.nix
+ ./gnome.nix
+ ./niri.nix
+ ./ssh.nix
+ ./vscode.nix
+ ./waybar.nix
+ ./zsh.nix
+ ];
}
diff --git a/home/vinzenz/niri.nix b/home/vinzenz/niri.nix
new file mode 100644
index 0000000..378e310
--- /dev/null
+++ b/home/vinzenz/niri.nix
@@ -0,0 +1,290 @@
+{ pkgs, ... }:
+{
+ config = {
+ home.sessionVariables.NIXOS_OZONE_WL = "1";
+
+ home.packages = with pkgs; [
+ xwayland-satellite
+ alacritty
+ fuzzel
+ swaylock
+ ];
+
+ programs.niri.settings = {
+ input.keyboard.xkb.layout = "de";
+
+ outputs."eDP-1" = {
+ scale = 1.0;
+ variable-refresh-rate = true;
+ background-color = "#000000";
+ };
+
+ layout.gaps = 8;
+
+ # defaults taken from https://github.com/sodiboo/niri-flake/issues/483
+ binds = {
+ # Keys consist of modifiers separated by + signs, followed by an XKB key name
+ # in the end. To find an XKB name for a particular key, you may use a program
+ # like wev.
+ #
+ # "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
+ # when running as a winit window.
+ #
+ # Most actions that you can bind here can also be invoked programmatically with
+ # `niri msg action do-something`.
+
+ # Mod-Shift-/, which is usually the same as Mod-?,
+ # shows a list of important hotkeys.
+ "Mod+Shift+Slash".action.show-hotkey-overlay = { };
+
+ # Suggested binds for running programs: terminal, app launcher, screen locker.
+ "Mod+T".action.spawn = "alacritty";
+ "Mod+D".action.spawn = "fuzzel";
+ "Super+Alt+L".action.spawn = "swaylock";
+
+ # You can also use a shell. Do this if you need pipes, multiple commands, etc.
+ # Note: the entire command goes as a single argument in the end.
+ # Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; }
+
+ # Example volume keys mappings for PipeWire & WirePlumber.
+ # The allow-when-locked=true property makes them work even when the session is locked.
+ "XF86AudioRaiseVolume" = {
+ allow-when-locked = true;
+ action.spawn = [
+ "wpctl"
+ "set-volume"
+ "@DEFAULT_AUDIO_SINK@"
+ "0.1+"
+ ];
+ };
+ "XF86AudioLowerVolume" = {
+ allow-when-locked = true;
+ action.spawn = [
+ "wpctl"
+ "set-volume"
+ "@DEFAULT_AUDIO_SINK@"
+ "0.1-"
+ ];
+ };
+ "XF86AudioMute" = {
+ allow-when-locked = true;
+ action.spawn = [
+ "wpctl"
+ "set-mute"
+ "@DEFAULT_AUDIO_SINK@"
+ "toggle"
+ ];
+ };
+ "XF86AudioMicMute" = {
+ allow-when-locked = true;
+ action.spawn = [
+ "wpctl"
+ "set-mute"
+ "@DEFAULT_AUDIO_SOURCE@"
+ "toggle"
+ ];
+ };
+
+ "Mod+Q".action.close-window = { };
+
+ "Mod+Left".action.focus-column-left = { };
+ "Mod+Down".action.focus-window-down = { };
+ "Mod+Up".action.focus-window-up = { };
+ "Mod+Right".action.focus-column-right = { };
+ "Mod+H".action.focus-column-left = { };
+ "Mod+J".action.focus-window-down = { };
+ "Mod+K".action.focus-window-up = { };
+ "Mod+L".action.focus-column-right = { };
+
+ "Mod+Ctrl+Left".action.move-column-left = { };
+ "Mod+Ctrl+Down".action.move-window-down = { };
+ "Mod+Ctrl+Up".action.move-window-up = { };
+ "Mod+Ctrl+Right".action.move-column-right = { };
+ "Mod+Ctrl+H".action.move-column-left = { };
+ "Mod+Ctrl+J".action.move-window-down = { };
+ "Mod+Ctrl+K".action.move-window-up = { };
+ "Mod+Ctrl+L".action.move-column-right = { };
+
+ # Alternative commands that move across workspaces when reaching
+ # the first or last window in a column.
+ # Mod+J { focus-window-or-workspace-down; }
+ # Mod+K { focus-window-or-workspace-up; }
+ # Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
+ # Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
+
+ "Mod+Home".action.focus-column-first = { };
+ "Mod+End".action.focus-column-last = { };
+ "Mod+Ctrl+Home".action.move-column-to-first = { };
+ "Mod+Ctrl+End".action.move-column-to-last = { };
+
+ "Mod+Shift+Left".action.focus-monitor-left = { };
+ "Mod+Shift+Down".action.focus-monitor-down = { };
+ "Mod+Shift+Up".action.focus-monitor-up = { };
+ "Mod+Shift+Right".action.focus-monitor-right = { };
+ "Mod+Shift+H".action.focus-monitor-left = { };
+ "Mod+Shift+J".action.focus-monitor-down = { };
+ "Mod+Shift+K".action.focus-monitor-up = { };
+ "Mod+Shift+L".action.focus-monitor-right = { };
+
+ "Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = { };
+ "Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = { };
+ "Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = { };
+ "Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = { };
+ "Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = { };
+ "Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = { };
+ "Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = { };
+ "Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = { };
+
+ # Alternatively, there are commands to move just a single window:
+ # Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
+ # ...
+
+ # And you can also move a whole workspace to another monitor:
+ # Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
+ # ...
+
+ "Mod+Page_Down".action.focus-workspace-down = { };
+ "Mod+Page_Up".action.focus-workspace-up = { };
+ "Mod+U".action.focus-workspace-down = { };
+ "Mod+I".action.focus-workspace-up = { };
+ "Mod+Ctrl+Page_Down".action.move-column-to-workspace-down = { };
+ "Mod+Ctrl+Page_Up".action.move-column-to-workspace-up = { };
+ "Mod+Ctrl+U".action.move-column-to-workspace-down = { };
+ "Mod+Ctrl+I".action.move-column-to-workspace-up = { };
+
+ # Alternatively, there are commands to move just a single window:
+ # Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
+ # ...
+
+ "Mod+Shift+Page_Down".action.move-workspace-down = { };
+ "Mod+Shift+Page_Up".action.move-workspace-up = { };
+ "Mod+Shift+U".action.move-workspace-down = { };
+ "Mod+Shift+I".action.move-workspace-up = { };
+
+ # You can bind mouse wheel scroll ticks using the following syntax.
+ # These binds will change direction based on the natural-scroll setting.
+ #
+ # To avoid scrolling through workspaces really fast, you can use
+ # the cooldown-ms property. The bind will be rate-limited to this value.
+ # You can set a cooldown on any bind, but it's most useful for the wheel.
+ "Mod+WheelScrollDown" = {
+ cooldown-ms = 150;
+ action.focus-workspace-down = { };
+ };
+ "Mod+WheelScrollUp" = {
+ cooldown-ms = 150;
+ action.focus-workspace-up = { };
+ };
+ "Mod+Ctrl+WheelScrollDown" = {
+ cooldown-ms = 150;
+ action.move-column-to-workspace-down = { };
+ };
+ "Mod+Ctrl+WheelScrollUp" = {
+ cooldown-ms = 150;
+ action.move-column-to-workspace-up = { };
+ };
+
+ "Mod+WheelScrollRight".action.focus-column-right = { };
+ "Mod+WheelScrollLeft".action.focus-column-left = { };
+ "Mod+Ctrl+WheelScrollRight".action.move-column-right = { };
+ "Mod+Ctrl+WheelScrollLeft".action.move-column-left = { };
+
+ # Usually scrolling up and down with Shift in applications results in
+ # horizontal scrolling; these binds replicate that.
+ "Mod+Shift+WheelScrollDown".action.focus-column-right = { };
+ "Mod+Shift+WheelScrollUp".action.focus-column-left = { };
+ "Mod+Ctrl+Shift+WheelScrollDown".action.move-column-right = { };
+ "Mod+Ctrl+Shift+WheelScrollUp".action.move-column-left = { };
+
+ # Similarly, you can bind touchpad scroll "ticks".
+ # Touchpad scrolling is continuous, so for these binds it is split into
+ # discrete intervals.
+ # These binds are also affected by touchpad's natural-scroll, so these
+ # example binds are "inverted", since we have natural-scroll enabled for
+ # touchpads by default.
+ # Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
+ # Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
+
+ # You can refer to workspaces by index. However, keep in mind that
+ # niri is a dynamic workspace system, so these commands are kind of
+ # "best effort". Trying to refer to a workspace index bigger than
+ # the current workspace count will instead refer to the bottommost
+ # (empty) workspace.
+ #
+ # For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
+ # will all refer to the 3rd workspace.
+ "Mod+1".action.focus-workspace = 1;
+ "Mod+2".action.focus-workspace = 2;
+ "Mod+3".action.focus-workspace = 3;
+ "Mod+4".action.focus-workspace = 4;
+ "Mod+5".action.focus-workspace = 5;
+ "Mod+6".action.focus-workspace = 6;
+ "Mod+7".action.focus-workspace = 7;
+ "Mod+8".action.focus-workspace = 8;
+ "Mod+9".action.focus-workspace = 9;
+ "Mod+Ctrl+1".action.move-column-to-workspace = 1;
+ "Mod+Ctrl+2".action.move-column-to-workspace = 2;
+ "Mod+Ctrl+3".action.move-column-to-workspace = 3;
+ "Mod+Ctrl+4".action.move-column-to-workspace = 4;
+ "Mod+Ctrl+5".action.move-column-to-workspace = 5;
+ "Mod+Ctrl+6".action.move-column-to-workspace = 6;
+ "Mod+Ctrl+7".action.move-column-to-workspace = 7;
+ "Mod+Ctrl+8".action.move-column-to-workspace = 8;
+ "Mod+Ctrl+9".action.move-column-to-workspace = 9;
+
+ # Alternatively, there are commands to move just a single window:
+ # Mod+Ctrl+1 { move-window-to-workspace 1; }
+
+ # Switches focus between the current and the previous workspace.
+ # Mod+Tab { focus-workspace-previous; }
+
+ "Mod+Comma".action.consume-window-into-column = { };
+ "Mod+Period".action.expel-window-from-column = { };
+
+ # There are also commands that consume or expel a single window to the side.
+ # Mod+BracketLeft { consume-or-expel-window-left; }
+ # Mod+BracketRight { consume-or-expel-window-right; }
+
+ "Mod+R".action.switch-preset-column-width = { };
+ "Mod+Shift+R".action.reset-window-height = { };
+ "Mod+F".action.maximize-column = { };
+ "Mod+Shift+F".action.fullscreen-window = { };
+ "Mod+C".action.center-column = { };
+
+ # Finer width adjustments.
+ # This command can also:
+ # * set width in pixels: "1000"
+ # * adjust width in pixels: "-5" or "+5"
+ # * set width as a percentage of screen width: "25%"
+ # * adjust width as a percentage of screen width: "-10%" or "+10%"
+ # Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
+ # set-column-width "100" will make the column occupy 200 physical screen pixels.
+ "Mod+Minus".action.set-column-width = "-10%";
+ "Mod+Equal".action.set-column-width = "+10%";
+
+ # Finer height adjustments when in column with other windows.
+ "Mod+Shift+Minus".action.set-window-height = "-10%";
+ "Mod+Shift+Equal".action.set-window-height = "+10%";
+
+ # Actions to switch layouts.
+ # Note: if you uncomment these, make sure you do NOT have
+ # a matching layout switch hotkey configured in xkb options above.
+ # Having both at once on the same hotkey will break the switching,
+ # since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
+ # Mod+Space { switch-layout "next"; }
+ # Mod+Shift+Space { switch-layout "prev"; }
+
+ "Print".action.screenshot = { };
+ "Ctrl+Print".action.screenshot-screen = { };
+ "Alt+Print".action.screenshot-window = { };
+
+ # The quit action will show a confirmation dialog to avoid accidental exits.
+ "Mod+Shift+E".action.quit = { };
+
+ # Powers off the monitors. To turn them back on, do any input like
+ # moving the mouse or pressing any other key.
+ "Mod+Shift+P".action.power-off-monitors = { };
+ };
+ };
+ };
+}
diff --git a/home/vinzenz/waybar.nix b/home/vinzenz/waybar.nix
new file mode 100644
index 0000000..ae245a1
--- /dev/null
+++ b/home/vinzenz/waybar.nix
@@ -0,0 +1,120 @@
+{ pkgs, device, ... }:
+{
+ config.programs.waybar = {
+ enable = true;
+ settings = {
+ mainBar = {
+ layer = "top";
+ position = "top";
+ output = [
+ "eDP-1"
+ "HDMI-A-1"
+ ];
+ mode = "dock";
+ spacing = "8";
+ modules-left = [
+ "niri/workspaces"
+ "niri/window"
+ ];
+ modules-center = [
+ "clock"
+ ];
+ modules-right = [
+ "tray"
+ "mpd"
+
+ "temperature"
+ "cpu"
+
+ "disk"
+ "backlight"
+ "pulseaudio"
+ "bluetooth"
+ "memory"
+ "network"
+ "battery"
+ ];
+ "niri/workspaces" = {
+ format = "{icon}";
+ };
+
+ "niri/window" = {
+ separate-outputs = true;
+ icon = true;
+ };
+ network = {
+ interface = "wlo1";
+ format = "{ifname}";
+ format-wifi = " ";
+ format-ethernet = " ";
+ format-linked = " ";
+ format-disconnected = " ";
+ tooltip-format = "{ifname} via {gwaddr}";
+ tooltip-format-wifi = "{essid} ({signalStrength}%)";
+ tooltip-format-ethernet = "{ifname} {ipaddr}/{cidr}";
+ tooltip-format-disconnected = "Disconnected";
+ max-length = 50;
+ };
+ clock = {
+ format = "{:%a, %d. %b %H:%M}";
+ tooltip-format = "{calendar}";
+ calendar = {
+ mode = "month";
+ weeks-pos = "right";
+ on-scroll = 1;
+ on-click-right = "mode";
+ format = {
+ #months = "{}";
+ #days = "{}";
+ #weeks = "W{}";
+ #weekdays = "{}";
+ #weekdays = "{}";
+ today = "{}";
+ };
+ };
+ actions = {
+ on-click-right = "mode";
+ on-click-forward = "tz_up";
+ on-click-backward = "tz_down";
+ on-scroll-up = "shift_down";
+ on-scroll-down = "shift_up";
+ };
+ };
+ battery = {
+ format = "{capacity}% {icon}";
+ format-icons = [
+ ""
+ ""
+ ""
+ ""
+ ""
+ ];
+ };
+ backlight = {
+ device = "intel_backlight";
+ format = "{percent}% ";
+ };
+ cpu = {
+ "interval" = 1;
+ "format" =
+ "{usage}%@{avg_frequency} "
+ + (builtins.getAttr device {
+ "vinzenz-lpt2" =
+ "{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}{icon8}{icon9}{icon10}{icon11}{icon12}{icon13}{icon14}{icon15}{icon16}{icon17}{icon18}{icon19}";
+ })
+ + " ";
+ "format-icons" = [
+ "▁"
+ "▂"
+ "▃"
+ "▄"
+ "▅"
+ "▆"
+ "▇"
+ "█"
+ ];
+ };
+ };
+ };
+ };
+}
diff --git a/hosts/vinzenz-lpt2/configuration.nix b/hosts/vinzenz-lpt2/configuration.nix
index 7ad1351..d880b42 100644
--- a/hosts/vinzenz-lpt2/configuration.nix
+++ b/hosts/vinzenz-lpt2/configuration.nix
@@ -18,6 +18,8 @@
# Configure console keymap
console.keyMap = "de";
+ home-manager.users.vinzenz = import ../../home/vinzenz;
+
users.users.vinzenz.openssh.authorizedKeys.keys = [
''ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFCJUpbpB3KEKVoKWsKoar9J4RNah8gmQoSH6jQEw5dY vinzenz-pixel-JuiceSSH''
''ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO1CRn4yYTL4XUdCebE8Z4ZeuMujBjorTdWifg911EOv vinzenz-pc2 home roaming''
diff --git a/hosts/vinzenz-lpt2/imports.nix b/hosts/vinzenz-lpt2/imports.nix
index a37f1ff..2526b3f 100644
--- a/hosts/vinzenz-lpt2/imports.nix
+++ b/hosts/vinzenz-lpt2/imports.nix
@@ -1,16 +1,13 @@
{
imports = [
- ../../home/gnome.nix
../../users/vinzenz.nix
+
../../modules/gnome.nix
../../modules/gaming.nix
../../modules/printing.nix
../../modules/podman.nix
-
- ../../home
+ ../../modules/niri.nix
../../modules/desktop-environment.nix
../../modules/desktop-hardware.nix
-
- ../../home/vinzenz
];
}
diff --git a/hosts/vinzenz-pc2/configuration.nix b/hosts/vinzenz-pc2/configuration.nix
index ea29735..aa01095 100644
--- a/hosts/vinzenz-pc2/configuration.nix
+++ b/hosts/vinzenz-pc2/configuration.nix
@@ -20,6 +20,11 @@
# Configure console keymap
console.keyMap = "de";
+ home-manager.users = {
+ vinzenz = import ../../home/vinzenz;
+ ronja = import ../../home/ronja;
+ };
+
users.users.vinzenz.openssh.authorizedKeys.keys = [
''ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINrY6tcgnoC/xbgL7vxSjddEY9MBxRXe9n2cAHt88/TT home roaming''
''ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFCJUpbpB3KEKVoKWsKoar9J4RNah8gmQoSH6jQEw5dY vinzenz-pixel-JuiceSSH''
diff --git a/hosts/vinzenz-pc2/imports.nix b/hosts/vinzenz-pc2/imports.nix
index 1834b06..2526b3f 100644
--- a/hosts/vinzenz-pc2/imports.nix
+++ b/hosts/vinzenz-pc2/imports.nix
@@ -1,17 +1,13 @@
{
imports = [
- ../../home/gnome.nix
../../users/vinzenz.nix
- ../../users/ronja.nix
+
../../modules/gnome.nix
../../modules/gaming.nix
../../modules/printing.nix
../../modules/podman.nix
-
- ../../home
+ ../../modules/niri.nix
../../modules/desktop-environment.nix
../../modules/desktop-hardware.nix
-
- ../../home/vinzenz
];
}
diff --git a/common/globalinstalls.nix b/modules/globalinstalls.nix
similarity index 100%
rename from common/globalinstalls.nix
rename to modules/globalinstalls.nix
diff --git a/home/gnome-shared-dconf.nix b/modules/gnome-shared-dconf.nix
similarity index 100%
rename from home/gnome-shared-dconf.nix
rename to modules/gnome-shared-dconf.nix
diff --git a/modules/gnome.nix b/modules/gnome.nix
index 4b0d1ff..c510a9d 100644
--- a/modules/gnome.nix
+++ b/modules/gnome.nix
@@ -64,5 +64,44 @@
# RDP connections
networking.firewall.allowedTCPPorts = [ 3389 ];
+
+ home-manager.sharedModules = [
+ {
+ home.packages =
+ with pkgs;
+ [
+ gitg
+ meld
+ simple-scan
+ pinta
+ dconf-editor
+ gpaste
+
+ # graphical installer for flatpak apps
+ gnome-software
+ ]
+ ++ (with gnomeExtensions; [
+ caffeine
+ appindicator
+ ]);
+
+ dconf.settings = import ./gnome-shared-dconf.nix;
+
+ gtk = {
+ enable = true;
+ iconTheme.name = "Adwaita";
+ cursorTheme.name = "Adwaita";
+ theme = {
+ name = "adw-gtk3-dark";
+ package = pkgs.adw-gtk3;
+ };
+ };
+ }
+
+ {
+ home.packages = with pkgs; [ trayscale ] ++ (with gnomeExtensions; [ tailscale-qs ]);
+ dconf.settings."org/gnome/shell".enabled-extensions = [ "tailscale@joaophi.github.com" ];
+ }
+ ];
};
}
diff --git a/modules/home-manager.nix b/modules/home-manager.nix
new file mode 100644
index 0000000..9af6a19
--- /dev/null
+++ b/modules/home-manager.nix
@@ -0,0 +1,61 @@
+_: {
+ home-manager = {
+ useGlobalPkgs = true;
+ useUserPackages = true;
+ sharedModules = [
+ # set stateVersion
+ { home.stateVersion = "22.11"; }
+ # make nano the default editor
+ {
+ home = {
+ sessionVariables.EDITOR = "nano";
+ file.".nanorc".text = ''
+ set linenumbers
+ set mouse
+ '';
+ };
+ }
+ # command line niceness
+ {
+ programs = {
+ command-not-found.enable = true;
+ dircolors.enable = true;
+
+ zsh = {
+ enable = true;
+ syntaxHighlighting.enable = true;
+ autosuggestion.enable = true;
+ enableVteIntegration = true;
+ };
+ };
+ }
+ # common git config
+ {
+ programs = {
+ git = {
+ enable = true;
+ extraConfig.init.defaultBranch = "main";
+ };
+
+ gh = {
+ enable = true;
+ gitCredentialHelper.enable = true;
+ };
+ };
+ }
+ # Templates
+ {
+ home.file = {
+ "Templates/Empty file".text = "";
+ "Templates/Empty bash script".text = ''
+ #!/usr/bin/env bash
+ # abort on error, undefined variables
+ set -eu
+ # print commands before execution
+ set -x
+ '';
+ };
+ }
+ ];
+ };
+}
diff --git a/common/i18n.nix b/modules/i18n.nix
similarity index 100%
rename from common/i18n.nix
rename to modules/i18n.nix
diff --git a/common/networking.nix b/modules/networking.nix
similarity index 100%
rename from common/networking.nix
rename to modules/networking.nix
diff --git a/modules/niri.nix b/modules/niri.nix
new file mode 100644
index 0000000..42af734
--- /dev/null
+++ b/modules/niri.nix
@@ -0,0 +1,7 @@
+{ pkgs, ... }:
+{
+ programs.niri = {
+ enable = true;
+ package = pkgs.niri-stable;
+ };
+}
diff --git a/common/nixpkgs.nix b/modules/nixpkgs.nix
similarity index 93%
rename from common/nixpkgs.nix
rename to modules/nixpkgs.nix
index 03c9c0c..aba3504 100644
--- a/common/nixpkgs.nix
+++ b/modules/nixpkgs.nix
@@ -17,11 +17,13 @@
"https://cache.nixos.org/"
"https://nix-community.cachix.org"
"https://cache.lix.systems"
+ "https://niri.cachix.org"
];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cache.lix.systems:aBnZUw8zA7H35Cz2RyKFVs3H4PlGTLawyY5KRbvJR8o="
+ "niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964="
];
experimental-features = [
"nix-command"
diff --git a/users/vinzenz.nix b/users/vinzenz.nix
index 5a2d422..aeb4926 100644
--- a/users/vinzenz.nix
+++ b/users/vinzenz.nix
@@ -15,6 +15,7 @@
"nginx"
"adbusers"
"kvm"
+ "input"
];
shell = pkgs.zsh;
autoSubUidGidRange = true;