diff --git a/flake.nix b/flake.nix index ee6bee8..c213938 100644 --- a/flake.nix +++ b/flake.nix @@ -6,55 +6,67 @@ unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; home-manager = { - url = "github:nix-community/home-manager/release-25.05"; - inputs.nixpkgs.follows = "nixpkgs"; + url = "github:nix-community/home-manager/release-25.05"; + inputs.nixpkgs.follows = "nixpkgs"; }; - - nix-colors.url = "github:misterio77/nix-colors"; + + nix-colors.url = "github:misterio77/nix-colors"; sops-nix = { - url = "github:Mic92/sops-nix"; - inputs.nixpkgs.follows = "nixpkgs"; + url = "github:Mic92/sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; }; lanzaboote = { - url = "github:nix-community/lanzaboote/v0.4.2"; + url = "github:nix-community/lanzaboote/v0.4.2"; inputs.nixpkgs.follows = "nixpkgs"; }; - + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; }; - outputs = { self, nixpkgs, unstable, home-manager, nix-colors, sops-nix, lanzaboote, nixos-hardware, ... }@inputs: + outputs = + { + self, + nixpkgs, + unstable, + home-manager, + nix-colors, + sops-nix, + lanzaboote, + nixos-hardware, + ... + }@inputs: let system = "x86_64-linux"; - in { + in + { - # legolas + # legolas nixosConfigurations.legolas = nixpkgs.lib.nixosSystem { inherit system; specialArgs = { inherit inputs; }; modules = [ ./hosts/legolas/configuration.nix - home-manager.nixosModules.home-manager { + home-manager.nixosModules.home-manager + { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.gunalx = import ./home/gunalx.nix; home-manager.backupFileExtension = "bac"; - home-manager.extraSpecialArgs = {inherit nix-colors inputs;}; + home-manager.extraSpecialArgs = { inherit nix-colors inputs; }; } - - sops-nix.nixosModules.sops - - lanzaboote.nixosModules.lanzaboote - - nixos-hardware.nixosModules.dell-xps-13-9370 - + + sops-nix.nixosModules.sops + + lanzaboote.nixosModules.lanzaboote + + nixos-hardware.nixosModules.dell-xps-13-9370 + ]; }; }; } - diff --git a/home/atuin.nix b/home/atuin.nix index bd875f6..a8a1ea1 100644 --- a/home/atuin.nix +++ b/home/atuin.nix @@ -12,13 +12,13 @@ filter_mode_shell_up_key_binding = "directory"; # UI - max_preview_height = 2; - show_help = true; + max_preview_height = 2; + show_help = true; prefers_reduced_motion = true; # History storage secrets_filter = true; - enter_accept = true; + enter_accept = true; # Sync v2 sync = { @@ -28,9 +28,25 @@ # Stats stats = { common_subcommands = [ - "apt" "cargo" "composer" "dnf" "docker" "git" "go" "ip" - "kubectl" "nix" "nmcli" "npm" "pecl" "pnpm" "podman" - "port" "systemctl" "tmux" "yarn" + "apt" + "cargo" + "composer" + "dnf" + "docker" + "git" + "go" + "ip" + "kubectl" + "nix" + "nmcli" + "npm" + "pecl" + "pnpm" + "podman" + "port" + "systemctl" + "tmux" + "yarn" ]; common_prefix = [ "sudo" ]; }; @@ -47,7 +63,11 @@ # Search search = { - filters = [ "directory" "host" "session" ]; + filters = [ + "directory" + "host" + "session" + ]; }; }; }; diff --git a/home/bash.nix b/home/bash.nix index 7009766..e64c7fd 100644 --- a/home/bash.nix +++ b/home/bash.nix @@ -1,28 +1,45 @@ -{ pkgs, lib, config, ... }: +{ + pkgs, + lib, + config, + ... +}: { programs.bash = { enable = true; - shellAliases = { - "rebuild" = "sudo nixos-rebuild switch --no-write-lock-file --flake git+https://github.com/adrlau/nix-dotfiles.git -L --impure"; + shellAliases = { + "rebuild" = + "sudo nixos-rebuild switch --no-write-lock-file --flake git+https://github.com/adrlau/nix-dotfiles.git -L --impure"; - "," = "comma "; + "," = "comma "; - "gst" = "git status"; - "gsw" = "git switch"; - "gcm" = "git commit -m "; - "gca" = "git commit --amend"; - "gaa" = "git add -A"; - "gb" = "git branch"; + "gst" = "git status"; + "gsw" = "git switch"; + "gcm" = "git commit -m "; + "gca" = "git commit --amend"; + "gaa" = "git add -A"; + "gb" = "git branch"; - "sl" = "eza"; - "ls" = "eza"; - "lls" = "ls"; - "la" = "eza -la"; - "tree" = "eza -T"; - "neofetch" = "fastfetch"; - "htop" = "btm"; + "sl" = "eza"; + "ls" = "eza"; + "lls" = "ls"; + "la" = "eza -la"; + "tree" = "eza -T"; + "neofetch" = "fastfetch"; + "htop" = "btm"; }; - historyControl = ["ignoredups" "ignorespace" "erasedups"]; - historyIgnore = [ "ls" "cd" "exit" "cd .." ".." "la"]; + historyControl = [ + "ignoredups" + "ignorespace" + "erasedups" + ]; + historyIgnore = [ + "ls" + "cd" + "exit" + "cd .." + ".." + "la" + ]; }; } diff --git a/home/colors.nix b/home/colors.nix index 85239d5..6999235 100644 --- a/home/colors.nix +++ b/home/colors.nix @@ -1,4 +1,9 @@ -{ pkgs, config, nix-colors, ... }: +{ + pkgs, + config, + nix-colors, + ... +}: let nix-colors-lib = nix-colors.lib.contrib { inherit pkgs; }; @@ -22,7 +27,8 @@ let lighterTeal = "2C7A6A"; lightTeal = "B0E8DA"; -in{ +in +{ imports = [ nix-colors.homeManagerModules.default ]; @@ -56,15 +62,13 @@ in{ }; }; - - gtk = { - enable = true; - theme = { - name = "Adwaita-dark"; - package = pkgs.gnome-themes-extra; - }; + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; }; + }; qt = { enable = true; @@ -78,4 +82,3 @@ in{ ]; } - diff --git a/home/foot.nix b/home/foot.nix index a88e818..53c369c 100644 --- a/home/foot.nix +++ b/home/foot.nix @@ -1,53 +1,52 @@ -{ pkgs, lib, config, ... }: { - home.packages = with pkgs; [ - foot - ]; - - programs.foot.enable = true; - programs.foot.settings = { - - main = { - term = "xterm-256color"; - font = "0xproto:size=14"; - #dpi-aware = "yes"; - }; - mouse = { - hide-when-typing = "yes"; - }; + pkgs, + lib, + config, + ... +}: +{ + home.packages = with pkgs; [ + foot + ]; + programs.foot.enable = true; + programs.foot.settings = { - colors = { - alpha = "0.7"; - foreground = "${config.colorScheme.palette.base05}"; - background = "${config.colorScheme.palette.base00}"; + main = { + term = "xterm-256color"; + font = "0xproto:size=14"; + #dpi-aware = "yes"; + }; + mouse = { + hide-when-typing = "yes"; + }; + + colors = { + alpha = "0.7"; + foreground = "${config.colorScheme.palette.base05}"; + background = "${config.colorScheme.palette.base00}"; + + regular0 = "${config.colorScheme.palette.base00}"; + regular1 = "${config.colorScheme.palette.base08}"; + regular2 = "${config.colorScheme.palette.base0B}"; + regular3 = "${config.colorScheme.palette.base0A}"; + regular4 = "${config.colorScheme.palette.base0D}"; + regular5 = "${config.colorScheme.palette.base0E}"; + regular6 = "${config.colorScheme.palette.base0C}"; + regular7 = "${config.colorScheme.palette.base05}"; + + bright0 = "${config.colorScheme.palette.base03}"; + bright1 = "${config.colorScheme.palette.base08}"; + bright2 = "${config.colorScheme.palette.base0B}"; + bright3 = "${config.colorScheme.palette.base0A}"; + bright4 = "${config.colorScheme.palette.base0D}"; + bright5 = "${config.colorScheme.palette.base0E}"; + bright6 = "${config.colorScheme.palette.base0C}"; + bright7 = "${config.colorScheme.palette.base07}"; + selection-foreground = "${config.colorScheme.palette.base00}"; + selection-background = "${config.colorScheme.palette.base0A}"; + }; - regular0 = "${config.colorScheme.palette.base00}"; - regular1 = "${config.colorScheme.palette.base08}"; - regular2 = "${config.colorScheme.palette.base0B}"; - regular3 = "${config.colorScheme.palette.base0A}"; - regular4 = "${config.colorScheme.palette.base0D}"; - regular5 = "${config.colorScheme.palette.base0E}"; - regular6 = "${config.colorScheme.palette.base0C}"; - regular7 = "${config.colorScheme.palette.base05}"; - - bright0 = "${config.colorScheme.palette.base03}"; - bright1 = "${config.colorScheme.palette.base08}"; - bright2 = "${config.colorScheme.palette.base0B}"; - bright3 = "${config.colorScheme.palette.base0A}"; - bright4 = "${config.colorScheme.palette.base0D}"; - bright5 = "${config.colorScheme.palette.base0E}"; - bright6 = "${config.colorScheme.palette.base0C}"; - bright7 = "${config.colorScheme.palette.base07}"; - selection-foreground = "${config.colorScheme.palette.base00}"; - selection-background = "${config.colorScheme.palette.base0A}"; }; - - - - }; - - } - diff --git a/home/fuzzel.nix b/home/fuzzel.nix index f9f6023..159fd88 100644 --- a/home/fuzzel.nix +++ b/home/fuzzel.nix @@ -1,4 +1,10 @@ -{ config, pkgs, lib, inputs, ... }: +{ + config, + pkgs, + lib, + inputs, + ... +}: let palette = config.colorScheme.palette; @@ -12,7 +18,7 @@ in settings = { main = { terminal = "${pkgs.foot}/bin/foot"; - layer = "overlay"; + layer = "overlay"; use-bold = true; fields = "filename,name,keywords,exec,comment,generic"; tabs = "4"; @@ -22,13 +28,13 @@ in horizontal-pad = 50; # Horizontal padding vertical-pad = 15; # Vertical padding - font = "monospace:size=16"; + font = "monospace:size=16"; anchor = "top"; y-margin = 240; - icons-enabled = true; - # match-mode = "fzf"; - # image-size-ratio = 0.5; + icons-enabled = true; + # match-mode = "fzf"; + # image-size-ratio = 0.5; }; colors = { background = "${hex palette.base00}ff"; @@ -44,8 +50,8 @@ in border = "${hex palette.base03}ff"; }; border = { - radius = 20; - width = 3; + radius = 20; + width = 3; }; }; }; diff --git a/home/git.nix b/home/git.nix index 6c983b8..cd7abaa 100644 --- a/home/git.nix +++ b/home/git.nix @@ -1,6 +1,11 @@ -{ pkgs, lib, config, ... }: { - programs.git = { + pkgs, + lib, + config, + ... +}: +{ + programs.git = { enable = true; extraConfig = { pull.rebase = true; diff --git a/home/gunalx.nix b/home/gunalx.nix index aa3cce0..fda64f7 100644 --- a/home/gunalx.nix +++ b/home/gunalx.nix @@ -13,15 +13,14 @@ ./waybar.nix ./wlogout.nix ./niri.nix - #./wallpapers.nix + #applications + ./mako.nix ./foot.nix - #./mako.nix - #./fcitx5.nix - ]; - + #./fcitx5.nix + ]; programs.nix-index = { enableBashIntegration = true; @@ -39,4 +38,3 @@ home.stateVersion = "25.05"; } - diff --git a/home/mako.nix b/home/mako.nix new file mode 100644 index 0000000..b52df08 --- /dev/null +++ b/home/mako.nix @@ -0,0 +1,50 @@ +{ config, pkgs, ... }: + +let + palette = config.colorscheme.palette; +in +{ + services.mako = { + enable = true; # Turn on mako + package = pkgs.mako; # Which package to use + + # Colors (from your colorscheme) + settings.background-color = "#${palette.base00}FF"; # popup background + settings.text-color = "#${palette.base05}FF"; # popup text + settings.border-color = "#${palette.base03}FF"; # popup border + settings.progress-color = "over #${palette.base0A}FF"; # progress bar + + # Placement & layering + settings.anchor = "top-right"; # corner on screen + settings.layer = "overlay"; # appear above fullscreen + + # Geometry + settings.width = 320; # px + settings.height = 120; # max px + settings.margin = "10"; # all edges + settings.padding = "8"; # all edges + settings.border-size = 2; # px + settings.border-radius = 12; # px + + # Font & icons + settings.font = "monospace 10"; # Pango font + settings.icons = true; # show icons + settings.max-icon-size = 48; # px + + # Behavior & timing + settings.default-timeout = 5000; # ms; 0 = no timeout + settings.ignore-timeout = true; # use defaultTimeout always + settings.actions = true; # clickable actions + settings.max-visible = 5; # simultaneous popups + settings.sort = "-time"; # newest first + settings.group-by = "app-name"; # grouping criteria + settings.markup = true; # enable Pango markup + + settings."actionable=true" = { + default-timeout = 15000; + border-radius = 24; + border-color = "#${palette.base08}FF"; + }; + + }; +} diff --git a/home/niri.nix b/home/niri.nix index d9689ea..bbdc053 100644 --- a/home/niri.nix +++ b/home/niri.nix @@ -1,641 +1,640 @@ -{ pkgs, config, lib, ... }: +{ + pkgs, + config, + lib, + ... +}: let palette = config.colorScheme.palette; niriConfig = '' - // KDL‐format niri config + // KDL‐format niri config - input { - keyboard { xkb { layout "us,no"; options "grp:ctrl_space_toggle"; }; } - touchpad { - tap - natural-scroll - accel-speed 0.1 - accel-profile "flat" - } - warp-mouse-to-focus - focus-follows-mouse max-scroll-amount="0%" + input { + keyboard { xkb { layout "us,no"; options "grp:ctrl_space_toggle"; }; } + touchpad { + tap + natural-scroll + accel-speed 0.1 + accel-profile "flat" + } + warp-mouse-to-focus + focus-follows-mouse max-scroll-amount="0%" + } + + output "AU Optronics 0x212B Unknown" { + mode "3840x2160@60.002" + //focus-at-startup + scale 2 + transform "normal" + position x=1920 y=2160 + } + output "ASUSTek COMPUTER INC ASUS MB16AH L9LMTF068515" { + mode "1920x1080@60.000" + scale 1 + transform "normal" + position x=1920 y=1080 + } + output "Hewlett Packard HP ZR24w CNT01710L4" { + mode "1920x1200@60.000" + scale 1 + transform "normal" + position x=960 y=960 + } + output "Hewlett Packard HP ZR24w CNT0181039" { + mode "1920x1200@60.000" + scale 1 + transform "normal" + position x=2880 y=960 + } + + //desktop outputs. + output "Dell Inc. DELL U2410 F525M06G123L" { + mode "2560x1440@144.000" + scale 1 + transform "90" + position x=0 y=0 + } + output "Samsung Electric Company LC27G5xT H4LR800468" { + mode "1920x1200@59.950" + variable-refresh-rate on-demand=true + //focus-at-startup + scale 1 + transform "normal" + position x=1200 y=240 + } + + //switch events for open closing lid. + switch-events { + lid-close { spawn "swaylock"; } + //lid-open { spawn "notify-send" "The laptop lid is open!"; } + tablet-mode-on { spawn "bash" "-c" "wvkbd-mobintl"; } + tablet-mode-off { spawn "bash" "-c" "pkill wvkbd-mobintl"; } } - output "AU Optronics 0x212B Unknown" { - mode "3840x2160@60.002" - //focus-at-startup - scale 2 - transform "normal" - position x=1920 y=2160 - } - output "ASUSTek COMPUTER INC ASUS MB16AH L9LMTF068515" { - mode "1920x1080@60.000" - scale 1 - transform "normal" - position x=1920 y=1080 - } - output "Hewlett Packard HP ZR24w CNT01710L4" { - mode "1920x1200@60.000" - scale 1 - transform "normal" - position x=960 y=960 - } - output "Hewlett Packard HP ZR24w CNT0181039" { - mode "1920x1200@60.000" - scale 1 - transform "normal" - position x=2880 y=960 + + // Settings that influence how windows are positioned and sized. + // Find more information on the wiki: + // https://github.com/YaLTeR/niri/wiki/Configuration:-Layout + layout { + // Set gaps around windows in logical pixels. + gaps 8 + + // When to center a column when changing focus, options are: + // - "never", default behavior, focusing an off-screen column will keep at the left + // or right edge of the screen. + // - "always", the focused column will always be centered. + // - "on-overflow", focusing a column will center it if it doesn't fit + // together with the previously focused column. + center-focused-column "on-overflow" + + // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. + preset-column-widths { + // Proportion sets the width as a fraction of the output width, taking gaps into account. + // For example, you can perfectly fit four windows sized "proportion 0.25" on an output. + // The default preset widths are 1/3, 1/2 and 2/3 of the output but that is annoying. + proportion 0.3333333 + proportion 0.5 + proportion 0.6666667 + + // Fixed sets the width in logical pixels exactly. + // fixed 1920 + } + + // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between. + preset-window-heights { + proportion 1.0 + proportion 0.5 + + } + + // You can change the default width of the new windows. + default-column-width { proportion 1.0; } + // If you leave the brackets empty, the windows themselves will decide their initial width. + // default-column-width {} + + // By default focus ring and border are rendered as a solid background rectangle + // behind windows. That is, they will show up through semitransparent windows. + // This is because windows using client-side decorations can have an arbitrary shape. + // If you don't like that, you should uncomment `prefer-no-csd` below. + // Niri will draw focus ring and border *around* windows that agree to omit their + // client-side decorations. + // Alternatively, you can override it with a window rule called + // `draw-border-with-background`. + + // You can change how the focus ring looks. + focus-ring { + // Uncomment this line to disable the focus ring. + // off + + // How many logical pixels the ring extends out from the windows. + width 2 + + // Colors can be set in a variety of ways: + // - CSS named colors: "red" + // - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa" + // - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others. + + // Color of the ring on the active monitor. + active-color "${palette.base0D}" + + // Color of the ring on inactive monitors. + inactive-color "${palette.base03}" + + // You can also use gradients. They take precedence over solid colors. + // Gradients are rendered the same as CSS linear-gradient(angle, from, to). + // The angle is the same as in linear-gradient, and is optional, + // defaulting to 180 (top-to-bottom gradient). + // You can use any CSS linear-gradient tool on the web to set these up. + // Changing the color space is also supported, check the wiki for more info. + // + // active-gradient from="#80c8ff" to="#bbddff" angle=45 + + // You can also color the gradient relative to the entire view + // of the workspace, rather than relative to just the window itself. + // To do that, set relative-to="workspace-view". + // + // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" + } + + // You can also add a border. It's similar to the focus ring, but always visible. + border { + // The settings are the same as for the focus ring. + // If you enable the border, you probably want to disable the focus ring. + off + width 2 + active-color "${palette.base0A}" + inactive-color "${palette.base03}" + // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view" + // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" + } + + // You can enable drop shadows for windows. + shadow { + // Uncomment the next line to enable shadows. + on + + // By default, the shadow draws only around its window, and not behind it. + // Uncomment this setting to make the shadow draw behind its window. + // + // Note that niri has no way of knowing about the CSD window corner + // radius. It has to assume that windows have square corners, leading to + // shadow artifacts inside the CSD rounded corners. This setting fixes + // those artifacts. + // + // However, instead you may want to set prefer-no-csd and/or + // geometry-corner-radius. Then, niri will know the corner radius and + // draw the shadow correctly, without having to draw it behind the + // window. These will also remove client-side shadows if the window + // draws any. + // + //draw-behind-window false + + // You can change how shadows look. The values below are in logical + // pixels and match the CSS box-shadow properties. + + // Softness controls the shadow blur radius. + softness 30 + + // Spread expands the shadow. + spread 5 + + // Offset moves the shadow relative to the window. + offset x=0 y=5 + + // You can also change the shadow color and opacity. + color "#0007" + } + + // Struts shrink the area occupied by windows, similarly to layer-shell panels. + // You can think of them as a kind of outer gaps. They are set in logical pixels. + // Left and right struts will cause the next window to the side to always be visible. + // Top and bottom struts will simply add outer gaps in addition to the area occupied by + // layer-shell panels and regular gaps. + struts { + left 24 + right 24 + // top 64 + // bottom 64 + } } - //desktop outputs. - output "Dell Inc. DELL U2410 F525M06G123L" { - mode "2560x1440@144.000" - scale 1 - transform "90" - position x=0 y=0 - } - output "Samsung Electric Company LC27G5xT H4LR800468" { - mode "1920x1200@59.950" - variable-refresh-rate on-demand=true - //focus-at-startup - scale 1 - transform "normal" - position x=1200 y=240 + overview { + zoom 0.5 + backdrop-color "#${palette.base00}" } -//switch events for open closing lid. -switch-events { - lid-close { spawn "swaylock"; } - //lid-open { spawn "notify-send" "The laptop lid is open!"; } - tablet-mode-on { spawn "bash" "-c" "wvkbd-mobintl"; } - tablet-mode-off { spawn "bash" "-c" "pkill wvkbd-mobintl"; } -} + // Add lines like this to spawn processes at startup. + // Note that running niri as a session supports xdg-desktop-autostart, + // which may be more convenient to use. + // See the binds section below for more spawn examples. + // spawn-at-startup "alacritty" "-e" "fish" + spawn-at-startup "foot" "--server" + spawn-at-startup "xwayland-satellite" + spawn-at-startup "mako" + spawn-at-startup "swww-daemon" + spawn-at-startup "waybar" + spawn-at-startup "swayidle" "-w" "timeout" "601" "niri msg action power-off-monitors" "timeout" "600" "swaylock -f" "before-sleep" "swaylock -f" + // Uncomment this line to ask the clients to omit their client-side decorations if possible. + // If the client will specifically ask for CSD, the request will be honored. + // Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. + // This option will also fix border/focus ring drawing behind some semitransparent windows. + // After enabling or disabling this, you need to restart the apps for this to take effect. + prefer-no-csd -// Settings that influence how windows are positioned and sized. -// Find more information on the wiki: -// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout -layout { - // Set gaps around windows in logical pixels. - gaps 8 + // You can change the path where screenshots are saved. + // A ~ at the front will be expanded to the home directory. + // The path is formatted with strftime(3) to give you the screenshot date and time. + screenshot-path "~/Pictures/screenshots/screenshot-%Y-%m-%d %H-%M-%S.png" - // When to center a column when changing focus, options are: - // - "never", default behavior, focusing an off-screen column will keep at the left - // or right edge of the screen. - // - "always", the focused column will always be centered. - // - "on-overflow", focusing a column will center it if it doesn't fit - // together with the previously focused column. - center-focused-column "on-overflow" - - // You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between. - preset-column-widths { - // Proportion sets the width as a fraction of the output width, taking gaps into account. - // For example, you can perfectly fit four windows sized "proportion 0.25" on an output. - // The default preset widths are 1/3, 1/2 and 2/3 of the output but that is annoying. - proportion 0.3333333 - proportion 0.5 - proportion 0.6666667 - - // Fixed sets the width in logical pixels exactly. - // fixed 1920 - } - - // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between. - preset-window-heights { - proportion 1.0 - proportion 0.5 - - } - - // You can change the default width of the new windows. - default-column-width { proportion 1.0; } - // If you leave the brackets empty, the windows themselves will decide their initial width. - // default-column-width {} - - // By default focus ring and border are rendered as a solid background rectangle - // behind windows. That is, they will show up through semitransparent windows. - // This is because windows using client-side decorations can have an arbitrary shape. - // If you don't like that, you should uncomment `prefer-no-csd` below. - // Niri will draw focus ring and border *around* windows that agree to omit their - // client-side decorations. - // Alternatively, you can override it with a window rule called - // `draw-border-with-background`. - - // You can change how the focus ring looks. - focus-ring { - // Uncomment this line to disable the focus ring. - // off - - // How many logical pixels the ring extends out from the windows. - width 2 - - // Colors can be set in a variety of ways: - // - CSS named colors: "red" - // - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa" - // - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others. - - // Color of the ring on the active monitor. - active-color "${palette.base0D}" - - // Color of the ring on inactive monitors. - inactive-color "${palette.base03}" - - // You can also use gradients. They take precedence over solid colors. - // Gradients are rendered the same as CSS linear-gradient(angle, from, to). - // The angle is the same as in linear-gradient, and is optional, - // defaulting to 180 (top-to-bottom gradient). - // You can use any CSS linear-gradient tool on the web to set these up. - // Changing the color space is also supported, check the wiki for more info. - // - // active-gradient from="#80c8ff" to="#bbddff" angle=45 - - // You can also color the gradient relative to the entire view - // of the workspace, rather than relative to just the window itself. - // To do that, set relative-to="workspace-view". - // - // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" - } - - // You can also add a border. It's similar to the focus ring, but always visible. - border { - // The settings are the same as for the focus ring. - // If you enable the border, you probably want to disable the focus ring. + // Animation settings. + // The wiki explains how to configure individual animations: + // https://github.com/YaLTeR/niri/wiki/Configuration:-Animations + animations { + // Uncomment to turn off all animations. off - width 2 - active-color "${palette.base0A}" - inactive-color "${palette.base03}" - // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view" - // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view" + + // Slow down all animations by this factor. Values below 1 speed them up instead. + // slowdown 0.3 + } - // You can enable drop shadows for windows. - shadow { - // Uncomment the next line to enable shadows. - on - // By default, the shadow draws only around its window, and not behind it. - // Uncomment this setting to make the shadow draw behind its window. + layer-rule { + match namespace="^notifications$" + block-out-from "screencast" + } + + // Window rules let you adjust behavior for individual windows. + // Find more information on the wiki: + // https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules + + + + // Floating Bitwarden extension popup windows only + window-rule { + match title=r#"^Extension: \(Bitwarden Password Manager\) - Bitwarden — Mozilla Firefox$"# + match title="^Extension: (Bitwarden Password Manager) - Bitwarden — Mozilla Firefox$" + match app-id=r#"(?i)^bitwarden$"# + open-floating true + default-column-width { proportion 0.3;} + default-floating-position x=0 y=0 relative-to="top-left" + opacity 0.9 + block-out-from "screen-capture" + } + + // dropdown terminal + window-rule { + match title="^dropdown$" + open-focused true + open-floating true + default-floating-position x=0 y=0 relative-to="top" + default-window-height { proportion 0.5; } + // 80% of the screen wide. + default-column-width { proportion 0.8; } + // block-out-from "screencast" + block-out-from "screen-capture" + } + + //fix steam notifications to bottom rigth + window-rule { + match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"# + default-floating-position x=10 y=10 relative-to="bottom-right" + //block-out-from "screencast" + block-out-from "screen-capture" + } + + + window-rule { + geometry-corner-radius 12 + clip-to-geometry true + } + + window-rule { + match app-id="onboard" + match app-id="Onboard" + open-floating true + default-window-height { proportion 0.2; } + default-column-width { proportion 0.8; } + block-out-from "screen-capture" + } + + 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. // - // Note that niri has no way of knowing about the CSD window corner - // radius. It has to assume that windows have square corners, leading to - // shadow artifacts inside the CSD rounded corners. This setting fixes - // those artifacts. - // - // However, instead you may want to set prefer-no-csd and/or - // geometry-corner-radius. Then, niri will know the corner radius and - // draw the shadow correctly, without having to draw it behind the - // window. These will also remove client-side shadows if the window - // draws any. - // - //draw-behind-window false + // "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`. - // You can change how shadows look. The values below are in logical - // pixels and match the CSS box-shadow properties. + // Mod-Shift-/, which is usually the same as Mod-?, + // shows a list of important hotkeys. + Mod+Shift+Slash { show-hotkey-overlay; } + Mod+Slash { toggle-overview; } - // Softness controls the shadow blur radius. - softness 30 + // Suggested binds for running programs: terminal, app launcher, screen locker. + Mod+Return { spawn "footclient"; } + Mod+T { spawn "sh" "-c" "if pgrep -f '^foot -T dropdown$' >/dev/null; then pkill -f '^foot -T dropdown$'; else exec foot -T dropdown; fi"; } + Mod+D { spawn "fuzzel"; } + Mod+M { spawn "swaylock" "--grace" "0"; } + Mod+O { toggle-window-rule-opacity; } - // Spread expands the shadow. - spread 5 + // 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"; } - // Offset moves the shadow relative to the window. - offset x=0 y=5 + // 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 { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; } + XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; } + XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } + XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } - // You can also change the shadow color and opacity. - color "#0007" + Mod+Shift+Q { close-window; } + + Mod+Left { focus-column-or-monitor-left; } + Mod+Down { focus-window-or-monitor-down; } + Mod+Up { focus-window-or-monitor-up; } + Mod+Right { focus-column-or-monitor-right; } + Mod+H { focus-column-or-monitor-left; } + Mod+J { focus-window-or-monitor-down; } + Mod+K { focus-window-or-monitor-up; } + Mod+L { focus-column-or-monitor-right; } + + Alt+Tab { focus-window-previous; } + + Mod+Ctrl+Left { move-column-left; } + Mod+Ctrl+Down { move-window-down; } + Mod+Ctrl+Up { move-window-up; } + Mod+Ctrl+Right { move-column-right; } + Mod+Ctrl+H { move-column-left; } + Mod+Ctrl+J { move-window-down; } + Mod+Ctrl+K { move-window-up; } + Mod+Ctrl+L { 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 { focus-column-first; } + Mod+End { focus-column-last; } + Mod+Ctrl+Home { move-column-to-first; } + Mod+Ctrl+End { move-column-to-last; } + + Mod+Shift+Left { focus-monitor-left; } + Mod+Shift+Down { focus-monitor-down; } + Mod+Shift+Up { focus-monitor-up; } + Mod+Shift+Right { focus-monitor-right; } + Mod+Shift+H { focus-monitor-left; } + Mod+Shift+J { focus-monitor-down; } + Mod+Shift+K { focus-monitor-up; } + Mod+Shift+L { focus-monitor-right; } + + Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } + Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } + Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } + Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } + Mod+Shift+Ctrl+H { move-column-to-monitor-left; } + Mod+Shift+Ctrl+J { move-column-to-monitor-down; } + Mod+Shift+Ctrl+K { move-column-to-monitor-up; } + Mod+Shift+Ctrl+L { 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 { focus-workspace-down; } + Mod+Page_Up { focus-workspace-up; } + Mod+U { focus-workspace-down; } + Mod+I { focus-workspace-up; } + Mod+Ctrl+Page_Down { move-column-to-workspace-down; } + Mod+Ctrl+Page_Up { move-column-to-workspace-up; } + Mod+Ctrl+U { move-column-to-workspace-down; } + Mod+Ctrl+I { move-column-to-workspace-up; } + + + Mod+Shift+Page_Down { move-workspace-down; } + Mod+Shift+Page_Up { move-workspace-up; } + Mod+Shift+U { move-workspace-down; } + Mod+Shift+I { 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+Shift+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } + Mod+Shift+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } + Mod+Shift+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } + Mod+Ctrl+Shift+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } + + Mod+WheelScrollRight cooldown-ms=150 { focus-column-right; } + Mod+WheelScrollLeft cooldown-ms=150 { focus-column-left; } + Mod+Ctrl+WheelScrollRight cooldown-ms=150 { move-column-right; } + Mod+Ctrl+WheelScrollLeft cooldown-ms=150 { move-column-left; } + + // Usually scrolling up and down with Shift in applications results in + // horizontal scrolling; these binds replicate that. + // But i found it impractical. workspaces i can graphically cahnge. and probably more rarly, so i swapped it + Mod+WheelScrollDown cooldown-ms=150 { focus-column-right; } + Mod+WheelScrollUp cooldown-ms=150 { focus-column-left; } + Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-right; } + Mod+Ctrl+WheelScrollUp cooldown-ms=150 { 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 { focus-workspace 1; } + Mod+2 { focus-workspace 2; } + Mod+3 { focus-workspace 3; } + Mod+4 { focus-workspace 4; } + Mod+5 { focus-workspace 5; } + Mod+6 { focus-workspace 6; } + Mod+7 { focus-workspace 7; } + Mod+8 { focus-workspace 8; } + Mod+9 { focus-workspace 9; } + Mod+Ctrl+1 { move-column-to-workspace 1; } + Mod+Ctrl+2 { move-column-to-workspace 2; } + Mod+Ctrl+3 { move-column-to-workspace 3; } + Mod+Ctrl+4 { move-column-to-workspace 4; } + Mod+Ctrl+5 { move-column-to-workspace 5; } + Mod+Ctrl+6 { move-column-to-workspace 6; } + Mod+Ctrl+7 { move-column-to-workspace 7; } + Mod+Ctrl+8 { move-column-to-workspace 8; } + Mod+Ctrl+9 { 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; } + + // The following binds move the focused window in and out of a column. + // If the window is alone, they will consume it into the nearby column to the side. + // If the window is already in a column, they will expel it out. + Mod+BracketLeft { consume-or-expel-window-left; } + Mod+BracketRight { consume-or-expel-window-right; } + + // Consume one window from the right to the bottom of the focused column. + Mod+Comma { consume-window-into-column; } + // Expel the bottom window from the focused column to the right. + Mod+Period { expel-window-from-column; } + + Mod+R { switch-preset-column-width; } + Mod+Shift+R { switch-preset-window-height; } + Mod+Ctrl+R { reset-window-height; } + Mod+F { maximize-column; } + Mod+Shift+F { fullscreen-window; } + Mod+Ctrl+Shift+F { toggle-windowed-fullscreen; } + + // Expand the focused column to space not taken up by other fully visible columns. + // Makes the column "fill the rest of the space". + Mod+Ctrl+F { expand-column-to-available-width; } + + Mod+C { 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 { set-column-width "-10%"; } + Mod+Equal { set-column-width "+10%"; } + Mod+0 { set-column-width "+10%"; } + + // Finer height adjustments when in column with other windows. + Mod+Shift+Minus { set-window-height "-10%"; } + Mod+Shift+Equal { set-window-height "+10%"; } + Mod+Shift+0 { set-window-height "+10%"; } + + // Move the focused window between the floating and the tiling layout. + Mod+V { toggle-window-floating; } + Mod+Shift+V { switch-focus-between-floating-and-tiling; } + + // Toggle tabbed column display mode. + // Windows in this column will appear as vertical tabs, + // rather than stacked on top of each other. + Mod+W { toggle-column-tabbed-display; } + + // 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 { screenshot; } + Ctrl+Print { screenshot-screen; } + Alt+Print { screenshot-window; } + + // Applications such as remote-desktop clients and software KVM switches may + // request that niri stops processing the keyboard shortcuts defined here + // so they may, for example, forward the key presses as-is to a remote machine. + // It's a good idea to bind an escape hatch to toggle the inhibitor, + // so a buggy application can't hold your session hostage. + // + // The allow-inhibiting=false property can be applied to other binds as well, + // which ensures niri always processes them, even when an inhibitor is active. + Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } + + // The quit action will show a confirmation dialog to avoid accidental exits. + Mod+Shift+E { quit; } + Ctrl+Alt+Delete { 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 { power-off-monitors; } } - // Struts shrink the area occupied by windows, similarly to layer-shell panels. - // You can think of them as a kind of outer gaps. They are set in logical pixels. - // Left and right struts will cause the next window to the side to always be visible. - // Top and bottom struts will simply add outer gaps in addition to the area occupied by - // layer-shell panels and regular gaps. - struts { - left 24 - right 24 - // top 64 - // bottom 64 + + //Enviroment to be set. + environment { + DISPLAY ":0" + ELECTRON_OZONE_PLATFORM_HINT "auto" } -} - -overview { - zoom 0.5 - backdrop-color "#${palette.base00}" -} - -// Add lines like this to spawn processes at startup. -// Note that running niri as a session supports xdg-desktop-autostart, -// which may be more convenient to use. -// See the binds section below for more spawn examples. -// spawn-at-startup "alacritty" "-e" "fish" -spawn-at-startup "foot" "--server" -spawn-at-startup "xwayland-satellite" -spawn-at-startup "mako" -spawn-at-startup "swww-daemon" -spawn-at-startup "waybar" -spawn-at-startup "swayidle" "-w" "timeout" "601" "niri msg action power-off-monitors" "timeout" "600" "swaylock -f" "before-sleep" "swaylock -f" - -// Uncomment this line to ask the clients to omit their client-side decorations if possible. -// If the client will specifically ask for CSD, the request will be honored. -// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners. -// This option will also fix border/focus ring drawing behind some semitransparent windows. -// After enabling or disabling this, you need to restart the apps for this to take effect. -prefer-no-csd - -// You can change the path where screenshots are saved. -// A ~ at the front will be expanded to the home directory. -// The path is formatted with strftime(3) to give you the screenshot date and time. -screenshot-path "~/Pictures/screenshots/screenshot-%Y-%m-%d %H-%M-%S.png" - -// Animation settings. -// The wiki explains how to configure individual animations: -// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations -animations { - // Uncomment to turn off all animations. - off - - // Slow down all animations by this factor. Values below 1 speed them up instead. - // slowdown 0.3 - -} - - -layer-rule { - match namespace="^notifications$" - block-out-from "screencast" -} - -// Window rules let you adjust behavior for individual windows. -// Find more information on the wiki: -// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules - - - -// Floating Bitwarden extension popup windows only -window-rule { - match title=r#"^Extension: \(Bitwarden Password Manager\) - Bitwarden — Mozilla Firefox$"# - match title="^Extension: (Bitwarden Password Manager) - Bitwarden — Mozilla Firefox$" - match app-id=r#"(?i)^bitwarden$"# - open-floating true - default-column-width { proportion 0.3;} - default-floating-position x=0 y=0 relative-to="top-left" - opacity 0.9 - block-out-from "screen-capture" -} - -// dropdown terminal -window-rule { - match title="^dropdown$" - open-focused true - open-floating true - default-floating-position x=0 y=0 relative-to="top" - default-window-height { proportion 0.5; } - // 80% of the screen wide. - default-column-width { proportion 0.8; } - // block-out-from "screencast" - block-out-from "screen-capture" -} - -//fix steam notifications to bottom rigth -window-rule { - match app-id="steam" title=r#"^notificationtoasts_\d+_desktop$"# - default-floating-position x=10 y=10 relative-to="bottom-right" - //block-out-from "screencast" - block-out-from "screen-capture" -} - - -window-rule { - geometry-corner-radius 12 - clip-to-geometry true -} - -window-rule { - match app-id="onboard" - match app-id="Onboard" - open-floating true - default-window-height { proportion 0.2; } - default-column-width { proportion 0.8; } - block-out-from "screen-capture" -} - -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 { show-hotkey-overlay; } - Mod+Slash { toggle-overview; } - - // Suggested binds for running programs: terminal, app launcher, screen locker. - Mod+Return { spawn "footclient"; } - Mod+T { spawn "sh" "-c" "if pgrep -f '^foot -T dropdown$' >/dev/null; then pkill -f '^foot -T dropdown$'; else exec foot -T dropdown; fi"; } - Mod+D { spawn "fuzzel"; } - Mod+M { spawn "swaylock" "--grace" "0"; } - Mod+O { toggle-window-rule-opacity; } - - // 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 { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; } - XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; } - XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } - XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } - - Mod+Shift+Q { close-window; } - - Mod+Left { focus-column-or-monitor-left; } - Mod+Down { focus-window-or-monitor-down; } - Mod+Up { focus-window-or-monitor-up; } - Mod+Right { focus-column-or-monitor-right; } - Mod+H { focus-column-or-monitor-left; } - Mod+J { focus-window-or-monitor-down; } - Mod+K { focus-window-or-monitor-up; } - Mod+L { focus-column-or-monitor-right; } - - Alt+Tab { focus-window-previous; } - - Mod+Ctrl+Left { move-column-left; } - Mod+Ctrl+Down { move-window-down; } - Mod+Ctrl+Up { move-window-up; } - Mod+Ctrl+Right { move-column-right; } - Mod+Ctrl+H { move-column-left; } - Mod+Ctrl+J { move-window-down; } - Mod+Ctrl+K { move-window-up; } - Mod+Ctrl+L { 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 { focus-column-first; } - Mod+End { focus-column-last; } - Mod+Ctrl+Home { move-column-to-first; } - Mod+Ctrl+End { move-column-to-last; } - - Mod+Shift+Left { focus-monitor-left; } - Mod+Shift+Down { focus-monitor-down; } - Mod+Shift+Up { focus-monitor-up; } - Mod+Shift+Right { focus-monitor-right; } - Mod+Shift+H { focus-monitor-left; } - Mod+Shift+J { focus-monitor-down; } - Mod+Shift+K { focus-monitor-up; } - Mod+Shift+L { focus-monitor-right; } - - Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } - Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } - Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } - Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } - Mod+Shift+Ctrl+H { move-column-to-monitor-left; } - Mod+Shift+Ctrl+J { move-column-to-monitor-down; } - Mod+Shift+Ctrl+K { move-column-to-monitor-up; } - Mod+Shift+Ctrl+L { 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 { focus-workspace-down; } - Mod+Page_Up { focus-workspace-up; } - Mod+U { focus-workspace-down; } - Mod+I { focus-workspace-up; } - Mod+Ctrl+Page_Down { move-column-to-workspace-down; } - Mod+Ctrl+Page_Up { move-column-to-workspace-up; } - Mod+Ctrl+U { move-column-to-workspace-down; } - Mod+Ctrl+I { move-column-to-workspace-up; } - - - Mod+Shift+Page_Down { move-workspace-down; } - Mod+Shift+Page_Up { move-workspace-up; } - Mod+Shift+U { move-workspace-down; } - Mod+Shift+I { 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+Shift+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } - Mod+Shift+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } - Mod+Shift+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } - Mod+Ctrl+Shift+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } - - Mod+WheelScrollRight cooldown-ms=150 { focus-column-right; } - Mod+WheelScrollLeft cooldown-ms=150 { focus-column-left; } - Mod+Ctrl+WheelScrollRight cooldown-ms=150 { move-column-right; } - Mod+Ctrl+WheelScrollLeft cooldown-ms=150 { move-column-left; } - - // Usually scrolling up and down with Shift in applications results in - // horizontal scrolling; these binds replicate that. - // But i found it impractical. workspaces i can graphically cahnge. and probably more rarly, so i swapped it - Mod+WheelScrollDown cooldown-ms=150 { focus-column-right; } - Mod+WheelScrollUp cooldown-ms=150 { focus-column-left; } - Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-right; } - Mod+Ctrl+WheelScrollUp cooldown-ms=150 { 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 { focus-workspace 1; } - Mod+2 { focus-workspace 2; } - Mod+3 { focus-workspace 3; } - Mod+4 { focus-workspace 4; } - Mod+5 { focus-workspace 5; } - Mod+6 { focus-workspace 6; } - Mod+7 { focus-workspace 7; } - Mod+8 { focus-workspace 8; } - Mod+9 { focus-workspace 9; } - Mod+Ctrl+1 { move-column-to-workspace 1; } - Mod+Ctrl+2 { move-column-to-workspace 2; } - Mod+Ctrl+3 { move-column-to-workspace 3; } - Mod+Ctrl+4 { move-column-to-workspace 4; } - Mod+Ctrl+5 { move-column-to-workspace 5; } - Mod+Ctrl+6 { move-column-to-workspace 6; } - Mod+Ctrl+7 { move-column-to-workspace 7; } - Mod+Ctrl+8 { move-column-to-workspace 8; } - Mod+Ctrl+9 { 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; } - - // The following binds move the focused window in and out of a column. - // If the window is alone, they will consume it into the nearby column to the side. - // If the window is already in a column, they will expel it out. - Mod+BracketLeft { consume-or-expel-window-left; } - Mod+BracketRight { consume-or-expel-window-right; } - - // Consume one window from the right to the bottom of the focused column. - Mod+Comma { consume-window-into-column; } - // Expel the bottom window from the focused column to the right. - Mod+Period { expel-window-from-column; } - - Mod+R { switch-preset-column-width; } - Mod+Shift+R { switch-preset-window-height; } - Mod+Ctrl+R { reset-window-height; } - Mod+F { maximize-column; } - Mod+Shift+F { fullscreen-window; } - Mod+Ctrl+Shift+F { toggle-windowed-fullscreen; } - - // Expand the focused column to space not taken up by other fully visible columns. - // Makes the column "fill the rest of the space". - Mod+Ctrl+F { expand-column-to-available-width; } - - Mod+C { 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 { set-column-width "-10%"; } - Mod+Equal { set-column-width "+10%"; } - Mod+0 { set-column-width "+10%"; } - - // Finer height adjustments when in column with other windows. - Mod+Shift+Minus { set-window-height "-10%"; } - Mod+Shift+Equal { set-window-height "+10%"; } - Mod+Shift+0 { set-window-height "+10%"; } - - // Move the focused window between the floating and the tiling layout. - Mod+V { toggle-window-floating; } - Mod+Shift+V { switch-focus-between-floating-and-tiling; } - - // Toggle tabbed column display mode. - // Windows in this column will appear as vertical tabs, - // rather than stacked on top of each other. - Mod+W { toggle-column-tabbed-display; } - - // 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 { screenshot; } - Ctrl+Print { screenshot-screen; } - Alt+Print { screenshot-window; } - - // Applications such as remote-desktop clients and software KVM switches may - // request that niri stops processing the keyboard shortcuts defined here - // so they may, for example, forward the key presses as-is to a remote machine. - // It's a good idea to bind an escape hatch to toggle the inhibitor, - // so a buggy application can't hold your session hostage. - // - // The allow-inhibiting=false property can be applied to other binds as well, - // which ensures niri always processes them, even when an inhibitor is active. - Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } - - // The quit action will show a confirmation dialog to avoid accidental exits. - Mod+Shift+E { quit; } - Ctrl+Alt+Delete { 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 { power-off-monitors; } -} - - -//Enviroment to be set. -environment { - DISPLAY ":0" - ELECTRON_OZONE_PLATFORM_HINT "auto" -} ''; - in { - home.packages = with pkgs; [ - niri - wl-clipboard - pass-wayland - wev + home.packages = with pkgs; [ + niri + wl-clipboard + pass-wayland + wev - #term - foot - alacritty + #term + foot + alacritty + wdisplays + swww - wdisplays - swww + xwayland-satellite - xwayland-satellite + #bar applets and notifications + waybar + networkmanagerapplet + networkmanager + libsForQt5.networkmanager-qt - #bar applets and notifications - waybar - networkmanagerapplet - networkmanager - libsForQt5.networkmanager-qt - + mako - mako + swayidle - swayidle + #ligth and sound + brightnessctl + pavucontrol - #ligth and sound - brightnessctl - pavucontrol + fuzzel - fuzzel + emote - emote + wvkbd - - wvkbd + xdg-desktop-portal-gtk + xdg-desktop-portal + xdg-desktop-portal-wlr + xdg-desktop-portal-gnome + #fonts + _0xproto + font-awesome + font-awesome_5 + font-awesome_4 - xdg-desktop-portal-gtk - xdg-desktop-portal - xdg-desktop-portal-wlr - xdg-desktop-portal-gnome - - - #fonts - _0xproto - font-awesome - font-awesome_5 - font-awesome_4 - - ]; + ]; # Drop the interpolated KDL into ~/.config/niri/config.kdl home.file.".config/niri/config.kdl" = { diff --git a/home/sshconfig.nix b/home/sshconfig.nix index ebd0d48..420942f 100644 --- a/home/sshconfig.nix +++ b/home/sshconfig.nix @@ -1,4 +1,9 @@ -{ pkgs, lib, config, ... }: +{ + pkgs, + lib, + config, + ... +}: { imports = [ ]; @@ -8,7 +13,7 @@ ssh-askpass-fullscreen sshfs ]; - + services.ssh-agent.enable = true; programs.ssh = { @@ -24,25 +29,23 @@ }; "*.pvv.ntnu.no" = { - user="adriangl"; + user = "adriangl"; }; "*.ntnu.no !login.pvv.ntnu.no" = { - user="adriangl"; - proxyJump="login.pvv.ntnu.no"; + user = "adriangl"; + proxyJump = "login.pvv.ntnu.no"; }; - "snotra" = { - user="adriangl"; - proxyJump="adriangl@login.pvv.ntnu.no"; - hostname="snotra.idi.ntnu.no"; + user = "adriangl"; + proxyJump = "adriangl@login.pvv.ntnu.no"; + hostname = "snotra.idi.ntnu.no"; }; - #pbsds "garp.pbsds.net" = { - user="adrlau"; + user = "adrlau"; proxyJump = "login.pvv.ntnu.no"; extraOptions = { StrictHostKeyChecking = "no"; @@ -50,7 +53,7 @@ }; }; "bolle.pbsds.net" = { - user="adrlau"; + user = "adrlau"; proxyJump = "login.pvv.ntnu.no"; extraOptions = { StrictHostKeyChecking = "no"; @@ -58,43 +61,39 @@ }; }; - - #pvv "pvv" = { - user="adriangl"; - hostname="login.pvv.ntnu.no"; + user = "adriangl"; + hostname = "login.pvv.ntnu.no"; }; "pvv2" = { - user="adriangl"; - hostname="login2.pvv.ntnu.no"; + user = "adriangl"; + hostname = "login2.pvv.ntnu.no"; }; #home "aragon" = { port = 6969; - hostname="100.74.34.149"; + hostname = "100.74.34.149"; }; "galadriel" = { port = 6969; - hostname="100.84.215.84"; + hostname = "100.84.215.84"; }; - + "gandalf" = { port = 6969; - hostname="100.124.183.16"; + hostname = "100.124.183.16"; }; "elrond" = { port = 6969; - hostname="100.101.17.39 "; + hostname = "100.101.17.39 "; }; - }; extraConfig = ""; }; } - diff --git a/home/swaylock.nix b/home/swaylock.nix index c47d929..61b8e02 100644 --- a/home/swaylock.nix +++ b/home/swaylock.nix @@ -1,4 +1,11 @@ -{ pkgs, inputs, lib, config, nix-colors, ... }: +{ + pkgs, + inputs, + lib, + config, + nix-colors, + ... +}: let palette = config.colorScheme.palette; in @@ -8,35 +15,34 @@ in package = pkgs.swaylock-effects; settings = { # screen & indicator - color = "#${palette.base00}AA"; # --color - screenshots = true; # --screenshots - fade-in = 0.1; # --fade-in - scaling = "fill"; # e.g. --scaling=fill + color = "#${palette.base00}AA"; # --color + screenshots = true; # --screenshots + fade-in = 0.1; # --fade-in + scaling = "fill"; # e.g. --scaling=fill # authentication grace - grace = 3; # --grace - submit-on-touch = true; # --submit-on-touch + grace = 3; # --grace + submit-on-touch = true; # --submit-on-touch # clock - clock = true; # --clock + clock = true; # --clock # indicator visuals - indicator-idle-visible = true; # --indicator-idle-visible - indicator-radius = 100; # --indicator-radius - indicator-thickness = 7; # --indicator-thickness + indicator-idle-visible = true; # --indicator-idle-visible + indicator-radius = 100; # --indicator-radius + indicator-thickness = 7; # --indicator-thickness # indicator colors - ring-color = "#${palette.base0D}C0"; # --ring-color - key-hl-color = "#${palette.base0E}C0"; # --key-hl-color - text-color = "#${palette.base05}FF"; # --text-color - inside-color = "#${palette.base02}CC"; # --inside-color - line-color = "#${palette.base01}99"; # --line-color - separator-color = "#${palette.base01}99"; # --separator-color + ring-color = "#${palette.base0D}C0"; # --ring-color + key-hl-color = "#${palette.base0E}C0"; # --key-hl-color + text-color = "#${palette.base05}FF"; # --text-color + inside-color = "#${palette.base02}CC"; # --inside-color + line-color = "#${palette.base01}99"; # --line-color + separator-color = "#${palette.base01}99"; # --separator-color # effects - effect-scale = 0.6; # --effect-scale - effect-blur = "7x3"; # --effect-blur + effect-scale = 0.6; # --effect-scale + effect-blur = "7x3"; # --effect-blur }; }; } - diff --git a/home/wallpapers.nix b/home/wallpapers.nix index 5ca8136..49d98da 100644 --- a/home/wallpapers.nix +++ b/home/wallpapers.nix @@ -8,14 +8,12 @@ let names = lib.attrNames (builtins.readDir wallpaperSrc); # For each name, produce an attrset mapping - wallpaperFiles = map (name: - { - # quoted string keys are valid attribute names - "Pictures/wallpapers/${name}" = { - source = "${wallpaperSrc}/${name}"; - }; - } - ) names; + wallpaperFiles = map (name: { + # quoted string keys are valid attribute names + "Pictures/wallpapers/${name}" = { + source = "${wallpaperSrc}/${name}"; + }; + }) names; in { # Merge them all under home.file diff --git a/home/waybar.nix b/home/waybar.nix index 6026d26..724efc2 100644 --- a/home/waybar.nix +++ b/home/waybar.nix @@ -1,4 +1,10 @@ -{ config, pkgs, lib, inputs, ... }: +{ + config, + pkgs, + lib, + inputs, + ... +}: let # Import Base16 palette & hex→RGB helper @@ -6,17 +12,19 @@ let inherit (config.colorscheme) palette; # Build "rgba(r,g,b,a)" strings - toRGBA = colour: alpha: - let rgb = hexToRGBString "," (lib.removePrefix "#" colour); - in "rgba(${rgb},${alpha})"; + toRGBA = + colour: alpha: + let + rgb = hexToRGBString "," (lib.removePrefix "#" colour); + in + "rgba(${rgb},${alpha})"; in { - home.packages = with pkgs; [ - fuzzel - wvkbd - ]; - + home.packages = with pkgs; [ + fuzzel + wvkbd + ]; programs.waybar = { enable = true; @@ -25,167 +33,167 @@ in # Single-bar JSON config settings = [ (builtins.fromJSON '' - { - "layer": "top", - "height": 36, - "spacing": 2, - "tray-position": "right", - "tray-all-outputs": true, - "modules-left": ["custom/overview", "custom/launcher", "custom/keyboard", "sway/workspaces", "niri/workspaces"], - "modules-center": ["niri/window"], - "modules-right": [ - "idle_inhibitor", "backlight", "pulseaudio", "keyboard-state", - "network", "cpu", "memory", "temperature", "battery", - "power-profiles-daemon", "clock", "tray", "custom/power" - ], + { + "layer": "top", + "height": 36, + "spacing": 2, + "tray-position": "right", + "tray-all-outputs": true, + "modules-left": ["custom/overview", "custom/launcher", "custom/keyboard", "sway/workspaces", "niri/workspaces"], + "modules-center": ["niri/window"], + "modules-right": [ + "idle_inhibitor", "backlight", "pulseaudio", "keyboard-state", + "network", "cpu", "memory", "temperature", "battery", + "power-profiles-daemon", "clock", "tray", "custom/power" + ], - "custom/launcher": { - "format": "  ", - "on-click": "pkill fuzzel || fuzzel" - }, + "custom/launcher": { + "format": "  ", + "on-click": "pkill fuzzel || fuzzel" + }, - "sway/workspaces": { - "format": "{index}: {name} - {icon}", - "format-icons": { - "focused":"","active":"","default":"" - }, - "all-outputs": false, - "current-only": false, - "persistent": true, - "on-click": "swaymsg workspace number {index}" - }, + "sway/workspaces": { + "format": "{index}: {name} - {icon}", + "format-icons": { + "focused":"","active":"","default":"" + }, + "all-outputs": false, + "current-only": false, + "persistent": true, + "on-click": "swaymsg workspace number {index}" + }, - "niri/workspaces": { - "format": "{index}: {name} - {icon}", - "format-icons": { - "focused":"","active":"","default":"" - }, - "all-outputs": false, - "current-only": false, - "persistent": true, - "on-click": "niri msg workspace {index}" - }, + "niri/workspaces": { + "format": "{index}: {name} - {icon}", + "format-icons": { + "focused":"","active":"","default":"" + }, + "all-outputs": false, + "current-only": false, + "persistent": true, + "on-click": "niri msg workspace {index}" + }, - "custom/overview": { - "format": "", - "tooltip": "Toggle Overview", - "on-click": "niri msg action toggle-overview" - }, - "custom/keyboard": { - "format": "", - "tooltip": "On-Screen Keyboard", - "on-click": "pkill wvkbd-mobintl || wvkbd-mobintl" - }, + "custom/overview": { + "format": "", + "tooltip": "Toggle Overview", + "on-click": "niri msg action toggle-overview" + }, + "custom/keyboard": { + "format": "", + "tooltip": "On-Screen Keyboard", + "on-click": "pkill wvkbd-mobintl || wvkbd-mobintl" + }, - "niri/window": { - "format": "{title}" - }, + "niri/window": { + "format": "{title}" + }, - "idle_inhibitor": { - "format": "{icon}", - "format-icons": { "activated":"","deactivated":"" } - }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { "activated":"","deactivated":"" } + }, - "backlight": { - "format": "{percent}% {icon}", - "format-icons": ["","","","","","","","",""] - }, + "backlight": { + "format": "{percent}% {icon}", + "format-icons": ["","","","","","","","",""] + }, - "pulseaudio": { - "format": "{volume}% {icon}", - "format-muted": "", - "format-icons": { "default": ["","",""] }, - "on-click": "pavucontrol" - }, + "pulseaudio": { + "format": "{volume}% {icon}", + "format-muted": "", + "format-icons": { "default": ["","",""] }, + "on-click": "pavucontrol" + }, - "keyboard-state": { - "numlock": true, - "capslock": true, - "format": "{icon}", - "format-icons": { "locked":"","unlocked":"" } - }, + "keyboard-state": { + "numlock": true, + "capslock": true, + "format": "{icon}", + "format-icons": { "locked":"","unlocked":"" } + }, - "network": { - "format-wifi": " {essid} ({signalStrength}%)", - "format-ethernet": " {ipaddr}", - "format-disconnected": "⚠ Disconnected", - "format-alt": " {ipaddr}/{cidr}", - "tooltip": true, - "tooltip-format-wifi": " WiFi\nSSID: {essid}\nInterface: {ifname}\nIP: {ipaddr}\nIPv6: {ipaddr6}\nGateway: {gwaddr}\nFrequency: {frequency} MHz\nSignal: {signalStrength}% ({signaldBm} dBm)", + "network": { + "format-wifi": " {essid} ({signalStrength}%)", + "format-ethernet": " {ipaddr}", + "format-disconnected": "⚠ Disconnected", + "format-alt": " {ipaddr}/{cidr}", + "tooltip": true, + "tooltip-format-wifi": " WiFi\nSSID: {essid}\nInterface: {ifname}\nIP: {ipaddr}\nIPv6: {ipaddr6}\nGateway: {gwaddr}\nFrequency: {frequency} MHz\nSignal: {signalStrength}% ({signaldBm} dBm)", -"tooltip-format-ethernet": " Ethernet\nInterface: {ifname}\nIP: {ipaddr}\nIPv6: {ipaddr6}\nGateway: {gwaddr}\nNetmask: {netmask}", + "tooltip-format-ethernet": " Ethernet\nInterface: {ifname}\nIP: {ipaddr}\nIPv6: {ipaddr6}\nGateway: {gwaddr}\nNetmask: {netmask}", - "tooltip-format-disconnected": " No Connection\nClick to refresh network info", + "tooltip-format-disconnected": " No Connection\nClick to refresh network info", - "on-click": "nmcli device wifi rescan && nmcli connection show --active", - "on-click-right": "nmcli device status", - "max-length": 50 - }, + "on-click": "nmcli device wifi rescan && nmcli connection show --active", + "on-click-right": "nmcli device status", + "max-length": 50 + }, - "cpu": { "format": " {usage}%" }, - "memory": { "format": " {used:0.1f}G" }, + "cpu": { "format": " {usage}%" }, + "memory": { "format": " {used:0.1f}G" }, - "temperature": { - "format": "{temperatureC}°C ", - "critical-threshold": 80 - }, + "temperature": { + "format": "{temperatureC}°C ", + "critical-threshold": 80 + }, - "battery": { - "format": "{capacity}% {icon}", - "format-icons": ["","","","",""], - "format-charging": "{capacity}% ", - "states": { "warning": 30, "critical": 15 } - }, + "battery": { + "format": "{capacity}% {icon}", + "format-icons": ["","","","",""], + "format-charging": "{capacity}% ", + "states": { "warning": 30, "critical": 15 } + }, - "power-profiles-daemon": { - "format": "{icon}", - "tooltip-format": "Power profile: {profile}\\nDriver: {driver}", - "tooltip": true, - "format-icons": { - "default": "", - "performance": "", - "balanced": "", - "power-saver": "" - } - }, + "power-profiles-daemon": { + "format": "{icon}", + "tooltip-format": "Power profile: {profile}\\nDriver: {driver}", + "tooltip": true, + "format-icons": { + "default": "", + "performance": "", + "balanced": "", + "power-saver": "" + } + }, - "clock": { - "format": "{:%H:%M}", - "format-alt": "{:%Y-%m-%d}", - "tooltip": true, - "tooltip-format": "{calendar}", - "calendar": { - "mode": "month", - "mode-mon-col": 3, - "weeks-pos": "right", - "on-scroll": 1, - "format": { - "months": "{}", - "days": "{}", - "weeks": "W{}", - "weekdays": "{}", - "today": "{}" + "clock": { + "format": "{:%H:%M}", + "format-alt": "{:%Y-%m-%d}", + "tooltip": true, + "tooltip-format": "{calendar}", + "calendar": { + "mode": "month", + "mode-mon-col": 3, + "weeks-pos": "right", + "on-scroll": 1, + "format": { + "months": "{}", + "days": "{}", + "weeks": "W{}", + "weekdays": "{}", + "today": "{}" + } + }, + "actions": { + "on-click-right": "mode", + "on-scroll-up": "shift_up", + "on-scroll-down": "shift_down" + } + }, + + "tray": { + "spacing": 12 + }, + + "custom/power": { + "format": "⏻", + "tooltip": "exit", + "on-click": "wlogout || wleave" + } } - }, - "actions": { - "on-click-right": "mode", - "on-scroll-up": "shift_up", - "on-scroll-down": "shift_down" - } - }, - - "tray": { - "spacing": 12 - }, - - "custom/power": { - "format": "⏻", - "tooltip": "exit", - "on-click": "wlogout || wleave" - } - } '') ]; @@ -233,15 +241,15 @@ in padding: 8px 12px; font-size: 12px; } - + tooltip label { color: ${toRGBA palette.base05 "1"}; } - + #clock tooltip { font-family: monospace; } - + /* Workspace buttons */ #sway-workspaces button,#niri-workspaces button { @@ -284,6 +292,6 @@ in animation: blink 0.5s steps(12) infinite alternate; } ''; - systemd.enable = true; + #systemd.enable = true; }; } diff --git a/home/wlogout.nix b/home/wlogout.nix index ba194af..4036b28 100644 --- a/home/wlogout.nix +++ b/home/wlogout.nix @@ -1,35 +1,69 @@ -{ pkgs -, lib -, inputs -, config -, nix-colors -, ... +{ + pkgs, + lib, + inputs, + config, + nix-colors, + ... }: let # Grab your palette and the hex→RGBA helper - palette = config.colorscheme.palette; - toRGBA = color: alpha: - let rgb = nix-colors.lib.conversions.hexToRGBString "," (lib.removePrefix "#" color); - in "rgba(${rgb},${alpha})"; + palette = config.colorscheme.palette; + toRGBA = + color: alpha: + let + rgb = nix-colors.lib.conversions.hexToRGBString "," (lib.removePrefix "#" color); + in + "rgba(${rgb},${alpha})"; # Path to the wleave-provided icons - iconsDir = "${pkgs.wleave}/share/wleave/icons"; + iconsDir = "${pkgs.wleave}/share/wleave/icons"; in { programs.wlogout = { - enable = true; + enable = true; package = pkgs.wlogout; # Your button layout layout = [ - { label = "lock"; action = "swaylock"; text = "Lock"; keybind = "l"; } - { label = "hibernate"; action = "systemctl hibernate"; text = "Hibernate"; keybind = "h"; } - { label = "logout"; action = "loginctl terminate-user $USER"; text = "Logout"; keybind = "e"; } - { label = "shutdown"; action = "systemctl poweroff"; text = "Shutdown"; keybind = "s"; } - { label = "suspend"; action = "systemctl suspend"; text = "Suspend"; keybind = "u"; } - { label = "reboot"; action = "systemctl reboot"; text = "Reboot"; keybind = "r"; } + { + label = "lock"; + action = "swaylock"; + text = "Lock"; + keybind = "l"; + } + { + label = "hibernate"; + action = "systemctl hibernate"; + text = "Hibernate"; + keybind = "h"; + } + { + label = "logout"; + action = "loginctl terminate-user $USER"; + text = "Logout"; + keybind = "e"; + } + { + label = "shutdown"; + action = "systemctl poweroff"; + text = "Shutdown"; + keybind = "s"; + } + { + label = "suspend"; + action = "systemctl suspend"; + text = "Suspend"; + keybind = "u"; + } + { + label = "reboot"; + action = "systemctl reboot"; + text = "Reboot"; + keybind = "r"; + } ]; style = '' diff --git a/hosts/legolas/configuration.nix b/hosts/legolas/configuration.nix index f4c96ac..a978d42 100644 --- a/hosts/legolas/configuration.nix +++ b/hosts/legolas/configuration.nix @@ -2,22 +2,27 @@ # your system. Help is available in the configuration.nix(5) man page, on # https://search.nixos.org/options and in the NixOS manual (`nixos-help`). -{ config, lib, pkgs, ... }: +{ + config, + lib, + pkgs, + ... +}: { - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ../../modules/boot.nix - ../../modules/displaymanager.nix - ../../modules/nix.nix - ../../secrets/sops.nix - ../../modules/sound.nix - ../../modules/gunalx.nix - ../../modules/pam.nix - ]; + imports = [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + ../../modules/boot.nix + ../../modules/displaymanager.nix + ../../modules/nix.nix + ../../secrets/sops.nix + ../../modules/sound.nix + ../../modules/gunalx.nix + ../../modules/pam.nix + ]; - networking.hostName = "legolas"; + networking.hostName = "legolas"; networking.networkmanager.enable = true; time.timeZone = "Europe/Amsterdam"; # Select internationalisation properties. @@ -25,7 +30,7 @@ # Enable the X11 windowing system. services.xserver.enable = true; - services.xserver.videoDrivers = ["modesetting"]; + services.xserver.videoDrivers = [ "modesetting" ]; # Configure keymap in X11 # services.xserver.xkb.layout = "us"; @@ -57,7 +62,6 @@ # enableSSHSupport = true; # }; - # Enable the OpenSSH daemon. # services.openssh.enable = true; @@ -67,8 +71,6 @@ # Or disable the firewall altogether. # networking.firewall.enable = false; - - # This option defines the first version of NixOS you have installed on this particular machine, # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. # @@ -89,4 +91,3 @@ system.stateVersion = "25.05"; # Did you read the comment? } - diff --git a/hosts/legolas/hardware-configuration.nix b/hosts/legolas/hardware-configuration.nix index cd544ba..c2dbc38 100644 --- a/hosts/legolas/hardware-configuration.nix +++ b/hosts/legolas/hardware-configuration.nix @@ -1,51 +1,68 @@ # Do not modify this file! It was generated by ‘nixos-generate-config’ # and may be overwritten by future invocations. Please make changes # to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, modulesPath, ... }: +{ + config, + lib, + pkgs, + modulesPath, + ... +}: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "uas" "rtsx_pci_sdmmc" ]; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "nvme" + "uas" + "rtsx_pci_sdmmc" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-label/NIXROOT"; - fsType = "ext4"; + fileSystems."/" = { + device = "/dev/disk/by-label/NIXROOT"; + fsType = "ext4"; + }; + + boot.initrd.luks.devices = { + "luks_secure" = { + device = "/dev/disk/by-uuid/c21c8089-29a7-4266-a8a6-6e80ccca167c"; + preLVM = true; + allowDiscards = true; + crypttabExtraOpts = [ + "tpm2-device=auto" + "tpm2-measure-pcr=yes" + ]; }; + }; - boot.initrd.luks.devices = { - "luks_secure" = { - device = "/dev/disk/by-uuid/c21c8089-29a7-4266-a8a6-6e80ccca167c"; - preLVM = true; - allowDiscards = true; - crypttabExtraOpts = [ - "tpm2-device=auto" - "tpm2-measure-pcr=yes" - ]; - }; - }; - - - fileSystems."/boot" = - { device = "/dev/disk/by-label/NIXBOOT"; - fsType = "vfat"; - options = [ "fmask=0022" "dmask=0022" ]; - }; + fileSystems."/boot" = { + device = "/dev/disk/by-label/NIXBOOT"; + fsType = "vfat"; + options = [ + "fmask=0022" + "dmask=0022" + ]; + }; swapDevices = [ ]; hardware.graphics = { - enable = true; - extraPackages = with pkgs; [ vpl-gpu-rt intel-media-sdk vaapiIntel intel-media-driver]; - }; + enable = true; + extraPackages = with pkgs; [ + vpl-gpu-rt + intel-media-sdk + vaapiIntel + intel-media-driver + ]; + }; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; - } diff --git a/modules/boot.nix b/modules/boot.nix index 3108d4d..297d2ac 100644 --- a/modules/boot.nix +++ b/modules/boot.nix @@ -1,4 +1,9 @@ -{ config, pkgs, lib, ... }: +{ + config, + pkgs, + lib, + ... +}: { imports = [ ]; @@ -6,10 +11,15 @@ boot = { consoleLogLevel = 0; kernelParams = [ - "quiet" "splash" "loglevel=0" - "udev.log_priority=3" "vt.global_cursor_default=0" - "rd.systemd.show_status=auto" "rd.udev.log_level=3" - "boot.shell_on_fail" "console=tty1" + "quiet" + "splash" + "loglevel=0" + "udev.log_priority=3" + "vt.global_cursor_default=0" + "rd.systemd.show_status=auto" + "rd.udev.log_level=3" + "boot.shell_on_fail" + "console=tty1" ]; initrd = { @@ -25,7 +35,10 @@ }; }; - fonts.packages = with pkgs; [ dejavu_fonts hack-font ]; + fonts.packages = with pkgs; [ + dejavu_fonts + hack-font + ]; # Integrate with Lanzaboote boot.loader.systemd-boot.enable = lib.mkForce false; @@ -52,6 +65,8 @@ tctiEnvironment.enable = true; }; - environment.systemPackages = with pkgs; [ sbctl tpm2-tools ]; + environment.systemPackages = with pkgs; [ + sbctl + tpm2-tools + ]; } - diff --git a/modules/displaymanager.nix b/modules/displaymanager.nix index 073ed7a..c0ef140 100644 --- a/modules/displaymanager.nix +++ b/modules/displaymanager.nix @@ -1,4 +1,9 @@ -{ config, pkgs, lib, ... }: +{ + config, + pkgs, + lib, + ... +}: { imports = [ ]; diff --git a/modules/gunalx.nix b/modules/gunalx.nix index f1a3a2d..d4e72d7 100644 --- a/modules/gunalx.nix +++ b/modules/gunalx.nix @@ -1,10 +1,19 @@ -{ config, pkgs, lib, ... }: +{ + config, + pkgs, + lib, + ... +}: { imports = [ ]; - users.users.gunalx = { + users.users.gunalx = { isNormalUser = true; - extraGroups = [ "wheel" "tss" "networking" ]; # Enable ‘sudo’ for the user. + extraGroups = [ + "wheel" + "tss" + "networking" + ]; # Enable ‘sudo’ for the user. packages = with pkgs; [ ]; }; diff --git a/modules/nix.nix b/modules/nix.nix index b125256..c785a2f 100644 --- a/modules/nix.nix +++ b/modules/nix.nix @@ -1,15 +1,20 @@ -{ config, pkgs, lib, ... }: +{ + config, + pkgs, + lib, + ... +}: { imports = [ ]; - + system.rebuild.enableNg = true; nixpkgs.config.allowUnfree = true; nixpkgs.config.permittedInsecurePackages = [ # example "python3.11-youtube-dl-2021.12.17" ]; - sops.secrets."github/api" = { + sops.secrets."github/api" = { mode = "0444"; group = "root"; }; @@ -20,8 +25,14 @@ !include ${config.sops.secrets."github/api".path} ''; settings = { - trusted-users = [ "gunalx" "root" ]; - experimental-features = [ "nix-command" "flakes" ]; + trusted-users = [ + "gunalx" + "root" + ]; + experimental-features = [ + "nix-command" + "flakes" + ]; substituters = [ "https://cache.nixos.org/" "https://cuda-maintainers.cachix.org" @@ -31,55 +42,58 @@ ]; trusted-public-keys = [ - "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" + "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nixos-rocm.cachix.org-1:VEpsf7pRIijjd8csKjFNBGzkBqOmw8H9PRmgAq14LnE=" "nixpkgs-unfree.cachix.org-1:hqvoInulhbV4nJ9yJOEr+4wxhDV4xq2d1DK7S6Nj6rs=" ]; - }; + }; + buildMachines = [ + { + hostName = "localhost"; + system = "x86_64-linux"; + maxJobs = 4; + speedFactor = 8000; + supportedFeatures = [ ]; + mandatoryFeatures = [ ]; + } + { + hostName = "aragon"; + system = "x86_64-linux"; + # if the builder supports building for multiple architectures, + # replace the previous line by, e.g., + # systems = ["x86_64-linux" "aarch64-linux"]; + maxJobs = 6; + speedFactor = 6001; + supportedFeatures = [ ]; + mandatoryFeatures = [ ]; + } + { + hostName = "galadriel"; + system = "x86_64-linux"; + maxJobs = 4; + speedFactor = 4001; + supportedFeatures = [ "cuda" ]; + mandatoryFeatures = [ ]; + } + { + hostName = "bolle.pbsds.net"; + system = "x86_64-linux"; + maxJobs = 6; + speedFactor = 6000; + } + { + hostName = "garp.pbsds.net"; + system = "x86_64-linux"; + maxJobs = 4; + # i7-6700 + speedFactor = 4000; + } - buildMachines = [ - { hostName = "localhost"; - system = "x86_64-linux"; - maxJobs = 4; - speedFactor = 8000; - supportedFeatures = [ ]; - mandatoryFeatures = [ ]; - } - { hostName = "aragon"; - system = "x86_64-linux"; - # if the builder supports building for multiple architectures, - # replace the previous line by, e.g., - # systems = ["x86_64-linux" "aarch64-linux"]; - maxJobs = 6; - speedFactor = 6001; - supportedFeatures = [ ]; - mandatoryFeatures = [ ]; - } - { hostName = "galadriel"; - system = "x86_64-linux"; - maxJobs = 4; - speedFactor = 4001; - supportedFeatures = [ "cuda" ]; - mandatoryFeatures = [ ]; - } - { hostName = "bolle.pbsds.net"; - system = "x86_64-linux"; - maxJobs = 6; - speedFactor = 6000; - } - { hostName = "garp.pbsds.net"; - system = "x86_64-linux"; - maxJobs = 4; - # i7-6700 - speedFactor = 4000; - } - - ]; + ]; distributedBuilds = true; }; - system.autoUpgrade = { enable = true; @@ -90,5 +104,4 @@ ]; }; - } diff --git a/modules/pam.nix b/modules/pam.nix index aa78499..6f548bf 100644 --- a/modules/pam.nix +++ b/modules/pam.nix @@ -1,11 +1,16 @@ -{ config, pkgs, lib, ... }: +{ + config, + pkgs, + lib, + ... +}: { imports = [ ]; security.polkit.enable = true; - - security.pam.services.swaylock = {}; - security.pam.services.swaylock-effects = {}; + + security.pam.services.swaylock = { }; + security.pam.services.swaylock-effects = { }; } diff --git a/modules/sound.nix b/modules/sound.nix index e85328a..4b330f7 100644 --- a/modules/sound.nix +++ b/modules/sound.nix @@ -1,9 +1,13 @@ -{ config, pkgs, lib, ... }: +{ + config, + pkgs, + lib, + ... +}: { imports = [ ]; - services.pulseaudio.enable = lib.mkDefault false; security.rtkit.enable = lib.mkDefault true; services.pipewire = lib.mkDefault { @@ -21,6 +25,6 @@ easyeffects ]; - programs.dconf.enable = lib.mkDefault true; #needed for easyeffects for some reason + programs.dconf.enable = lib.mkDefault true; # needed for easyeffects for some reason } diff --git a/secrets/sops.nix b/secrets/sops.nix index 7e6707a..83ea31b 100644 --- a/secrets/sops.nix +++ b/secrets/sops.nix @@ -4,7 +4,7 @@ pkgs.ssh-to-age pkgs.sops ]; - + # This will add secrets.yaml to the nix store # You can avoid this by adding a string to the full path instead, i.e. # sops.defaultSopsFile = "/root/.sops/secrets/example.yaml"; @@ -12,12 +12,12 @@ sops = { defaultSopsFile = ./secrets.yaml; validateSopsFiles = false; - + # This will automaticx-sopsally import SSH keys as age keys age.sshKeyPaths = [ - "/etc/ssh/nixos" - "/root/.ssh/nixos" - ]; + "/etc/ssh/nixos" + "/root/.ssh/nixos" + ]; #This is using an age key that is expected to already be in the filesystem age.keyFile = "/var/lib/sops-nix/key.txt"; #age.keyFile = "/root/.config/sops/age/key.txt";