diff --git a/home/xin/calcite.nix b/home/xin/calcite.nix
index b90e361..654aedc 100644
--- a/home/xin/calcite.nix
+++ b/home/xin/calcite.nix
@@ -1,4 +1,7 @@
{ pkgs, ... }:
+let
+ homeDirectory = "/home/xin";
+in
{
imports = [
./common
@@ -6,9 +9,11 @@
programs.nix-index-database.comma.enable = true;
- home.username = "xin";
- home.homeDirectory = "/home/xin";
- home.stateVersion = "23.05";
+ home = {
+ inherit homeDirectory;
+ username = "xin";
+ stateVersion = "23.05";
+ };
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
@@ -79,99 +84,109 @@
zellij = {
enable = true;
};
+ gui = {
+ niri.enable = true;
+ waybar.enable = true;
+ fuzzel.enable = true;
+ };
};
- programs.gnome-shell.enable = true;
+ xdg.systemDirs.data = [
+ "/usr/share"
+ "/var/lib/flatpak/exports/share"
+ "${homeDirectory}/.local/share/flatpak/exports/share"
+ ];
+
+ programs.man.generateCaches = false;
programs.atuin = {
enable = true;
flags = [ "--disable-up-arrow" ];
};
- programs.firefox.enable = true;
+ programs.firefox = {
+ enable = true;
+ policies.DefaultDownloadDirectory = "/media/data/Downloads";
+ profiles.default = {
+ isDefault = true;
+ userChrome = ''
+ #titlebar {
+ display: none;
+ }
- programs.firefox.policies = {
- DefaultDownloadDirectory = "/media/data/Downloads";
+ #sidebar-header {
+ display: none;
+ }
+
+ [titlepreface*="."] #sidebar-header {
+ visibility: collapse !important;
+ }
+ [titlepreface*="."] #titlebar {
+ visibility: collapse;
+ }
+
+ #sidebar-box{
+ --uc-sidebar-width: 33px;
+ --uc-sidebar-hover-width: 300px;
+ --uc-autohide-sidebar-delay: 90ms;
+ position: relative;
+ min-width: var(--uc-sidebar-width) !important;
+ width: var(--uc-sidebar-width) !important;
+ max-width: var(--uc-sidebar-width) !important;
+ z-index:1;
+ }
+
+ #sidebar-box[positionend]{ direction: rtl }
+ #sidebar-box[positionend] > *{ direction: ltr }
+
+ #sidebar-box[positionend]:-moz-locale-dir(rtl){ direction: ltr }
+ #sidebar-box[positionend]:-moz-locale-dir(rtl) > *{ direction: rtl }
+
+ #main-window[sizemode="fullscreen"] #sidebar-box{ --uc-sidebar-width: 1px; }
+
+ #sidebar-splitter{ display: none }
+
+ #sidebar-header{
+ overflow: hidden;
+ color: var(--chrome-color, inherit) !important;
+ padding-inline: 0 !important;
+ }
+
+ #sidebar-header::before,
+ #sidebar-header::after{
+ content: "";
+ display: -moz-box;
+ padding-left: 8px;
+ }
+
+ #sidebar-switcher-target{
+ -moz-box-pack: start !important;
+ }
+
+ #sidebar-header,
+ #sidebar{
+ transition: min-width 115ms linear var(--uc-autohide-sidebar-delay) !important;
+ min-width: var(--uc-sidebar-width) !important;
+ will-change: min-width;
+ }
+ #sidebar-box:hover > #sidebar-header,
+ #sidebar-box:hover > #sidebar{
+ min-width: var(--uc-sidebar-hover-width) !important;
+ transition-delay: 0ms !important;
+ }
+
+ .sidebar-panel{
+ background-color: transparent !important;
+ color: var(--newtab-text-primary-color) !important;
+ }
+
+ .sidebar-panel #search-box{
+ -moz-appearance: none !important;
+ background-color: rgba(249,249,250,0.1) !important;
+ color: inherit !important;
+ }
+ '';
+ };
};
- programs.firefox.profiles.default = {
- isDefault = true;
- userChrome = ''
- #titlebar {
- display: none;
- }
-
- #sidebar-header {
- display: none;
- }
-
- [titlepreface*="."] #sidebar-header {
- visibility: collapse !important;
- }
- [titlepreface*="."] #titlebar {
- visibility: collapse;
- }
-
- #sidebar-box{
- --uc-sidebar-width: 33px;
- --uc-sidebar-hover-width: 300px;
- --uc-autohide-sidebar-delay: 90ms;
- position: relative;
- min-width: var(--uc-sidebar-width) !important;
- width: var(--uc-sidebar-width) !important;
- max-width: var(--uc-sidebar-width) !important;
- z-index:1;
- }
-
- #sidebar-box[positionend]{ direction: rtl }
- #sidebar-box[positionend] > *{ direction: ltr }
-
- #sidebar-box[positionend]:-moz-locale-dir(rtl){ direction: ltr }
- #sidebar-box[positionend]:-moz-locale-dir(rtl) > *{ direction: rtl }
-
- #main-window[sizemode="fullscreen"] #sidebar-box{ --uc-sidebar-width: 1px; }
-
- #sidebar-splitter{ display: none }
-
- #sidebar-header{
- overflow: hidden;
- color: var(--chrome-color, inherit) !important;
- padding-inline: 0 !important;
- }
-
- #sidebar-header::before,
- #sidebar-header::after{
- content: "";
- display: -moz-box;
- padding-left: 8px;
- }
-
- #sidebar-switcher-target{
- -moz-box-pack: start !important;
- }
-
- #sidebar-header,
- #sidebar{
- transition: min-width 115ms linear var(--uc-autohide-sidebar-delay) !important;
- min-width: var(--uc-sidebar-width) !important;
- will-change: min-width;
- }
- #sidebar-box:hover > #sidebar-header,
- #sidebar-box:hover > #sidebar{
- min-width: var(--uc-sidebar-hover-width) !important;
- transition-delay: 0ms !important;
- }
-
- .sidebar-panel{
- background-color: transparent !important;
- color: var(--newtab-text-primary-color) !important;
- }
-
- .sidebar-panel #search-box{
- -moz-appearance: none !important;
- background-color: rgba(249,249,250,0.1) !important;
- color: inherit !important;
- }
- '';
- };
}
diff --git a/machines/calcite/configuration.nix b/machines/calcite/configuration.nix
index 7fa91d2..7235179 100644
--- a/machines/calcite/configuration.nix
+++ b/machines/calcite/configuration.nix
@@ -51,6 +51,8 @@
networking.hostName = "calcite";
+ services.blueman.enable = true;
+
programs.steam = {
enable = true;
gamescopeSession = {
@@ -96,18 +98,15 @@
LC_TIME = "en_US.utf8";
};
- # Enable the X11 windowing system.
- services.xserver.enable = true;
-
- # Enable the GNOME Desktop Environment.
- services.xserver.displayManager.gdm.enable = true;
- services.xserver.desktopManager.gnome.enable = true;
-
- # Configure keymap in X11
- services.xserver = {
- xkb.layout = "us";
- xkb.variant = "";
+ services.displayManager = {
+ enable = true;
+ defaultSession = "niri";
};
+
+ programs.niri.enable = true;
+
+ services.xserver.displayManager.gdm.enable = true;
+
# Keyboard mapping on internal keyboard
services.keyd = {
enable = true;
@@ -163,17 +162,9 @@
};
};
- # Enable automatic login for the user.
- services.displayManager.autoLogin.enable = true;
- services.displayManager.autoLogin.user = "xin";
-
# Smart services
services.smartd.enable = true;
- # Workaround for GNOME autologin: https://github.com/NixOS/nixpkgs/issues/103746#issuecomment-945091229
- systemd.services."getty@tty1".enable = false;
- systemd.services."autovt@tty1".enable = false;
-
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
nixpkgs.config.permittedInsecurePackages = [
@@ -227,14 +218,6 @@
eudic
- # Gnome tweaks
- gnomeExtensions.paperwm
- gnomeExtensions.search-light
- gnomeExtensions.appindicator
- gnomeExtensions.pano
- gnome-tweaks
- gnome-themes-extra
- gnome-remote-desktop
bibata-cursors
gthumb
oculante
@@ -247,8 +230,6 @@
element-desktop
tdesktop
qq
- wechat-uos
- feishu
# Password manager
bitwarden
@@ -304,15 +285,22 @@
custom.restic.repositoryFile = config.sops.secrets.restic_repo_calcite.path;
custom.restic.passwordFile = config.sops.secrets.restic_repo_calcite_password.path;
- custom.forgejo-actions-runner.enable = false;
- custom.forgejo-actions-runner.tokenFile = config.sops.secrets."gitea/envfile".path;
+ custom.forgejo-actions-runner = {
+ enable = false;
+ tokenFile = config.sops.secrets."gitea/envfile".path;
+ settings = {
+ runner.capacity = 2;
+ runner.fetch_timeout = "120s";
+ runner.fetch_interval = "30s";
+ };
+ };
custom.prometheus = {
enable = true;
exporters.blackbox.enable = true;
};
- custom.stylix.enable = true;
+ custom.stylix.enable = false;
services.ollama = {
enable = true;
@@ -322,6 +310,9 @@
# MTP support
services.gvfs.enable = true;
+ services.flatpak.enable = true;
+ xdg.portal.enable = true;
+
# Fonts
fonts = {
packages = with pkgs; [
@@ -330,6 +321,8 @@
"FiraCode"
"FiraMono"
"JetBrainsMono"
+ "RobotoMono"
+ "Ubuntu"
];
})
noto-fonts
diff --git a/machines/calcite/hardware-configuration.nix b/machines/calcite/hardware-configuration.nix
index c80871a..393713f 100644
--- a/machines/calcite/hardware-configuration.nix
+++ b/machines/calcite/hardware-configuration.nix
@@ -79,4 +79,6 @@
dynamicBoost.enable = lib.mkForce false;
open = true;
};
+
+ hardware.bluetooth.enable = true;
}
diff --git a/machines/calcite/secrets.yaml b/machines/calcite/secrets.yaml
index 33e4e52..ae33888 100644
--- a/machines/calcite/secrets.yaml
+++ b/machines/calcite/secrets.yaml
@@ -2,7 +2,7 @@ restic_repo_calcite_password: ENC[AES256_GCM,data:9ALTQULAMyLY4FIxuVztf9r3,iv:fO
restic_repo_calcite: ENC[AES256_GCM,data:ELvSvoBfulbsoMvRMt2bVo9KiNQAuHomblZcAwJ+g0tHELkq65kaaGwMsNy1AttBfiD7RrQsKifX/YTUGmuz1mDg0WqkV/Mv,iv:HKz96YgVahxh+t3AEqe09mTE01uT+VrUYt04H6zyS9g=,tag:llFeeN7ryTZI9gLlYIRhCg==,type:str]
sing_box_url: ENC[AES256_GCM,data:2z2bDKdn51o1eaqhgE0pTg4FWcO8wcLNlnBZ69Q3Jm5GCxkXxsxN7DgqQvRVeakOHvaenQotF+nc6tlhKPsyzdQeG0yl3YYhGb9o3DkmpUjC6lalMSoiw1rSMVyBg4KYCWxmhR9iRurun62+5INGZwwHVqAjgWJhy/9+pdIFtgKyd/t0JhSU,iv:gIGbvRd88vZu3cVW7e4emZmmNO8QcubLrxS1sCwi4Co=,tag:AzLLtcA9jAbeuo6eWU6ilw==,type:str]
gitea:
- envfile: ENC[AES256_GCM,data:bO1aMYm0kPTBbyPD5cweVRzNjiDK2WlWDsxz52L3faFg5HSVmBoi5DZC17XBXYw=,iv:lo9XEcwY4FPD/rRbnuiUviioMIiiphS26UgPro56DIU=,tag:0eKfsS0pYw+FPW+Y5dgisg==,type:str]
+ envfile: ENC[AES256_GCM,data:CK+JNELuzjKgWnImuV4Euif3f3nNOACOrvc4NiIXs+q/F7QWrtpb3TK8/FrLNQk=,iv:QSDrlKJCBld2gDx/y1sT8anh37GhqSS2QZd2JJi5Yis=,tag:x5T6h59LBXhEyVwSr2dnuQ==,type:str]
sops:
kms: []
gcp_kms: []
@@ -27,8 +27,8 @@ sops:
WGlLdXVoZlp3bEFXZjlMdG1VOUZDNUkKQ2NNTE3OsNUr2pOI7qeNFSCVkUIVRS+g
FG5FbJJcFihXqr+Qo0nZkq+xq07vIia7mKoqyoIfkKwweiVzDKyrkQ==
-----END AGE ENCRYPTED FILE-----
- lastmodified: "2024-09-12T16:48:39Z"
- mac: ENC[AES256_GCM,data:sYY8N0HZ05sUV7m/w5L1pFWJb2V8wZNukyUXHH0V9LMO1JlJMwCUH2XuseLGz5kz0yggAF+fty/x16PBvI5ARcpaZ23pLmNFYHtpx2tWhWcyYg/yMAqjUf19o17IZ50GpLVkmRHQbowwZF9dcHr8mEicrftZbeORzg2eKVkx8+w=,iv:0fyqOrs2XQ363uX5Dr8zuoUzkHdtsQ/v3SZidFBeSr4=,tag:1Kw1jrruxfn9lxgtL0XEMA==,type:str]
+ lastmodified: "2024-11-09T06:41:02Z"
+ mac: ENC[AES256_GCM,data:Hf8QYvRWxfs/JDOIAVnX5M0kv9Ktncfzq+Zf7i32TTsa94ShrgbUYVxQbRviOFDbjLfzswGKikLQ2EHLlH1KOFs7+mKKz5PKVAWJZnkAPa2oFXs41BcXLIg8sf4dhFxjzzhakeUX9Q0z4evJ1vMX06/VnnpHVSMhsnenSfBhWIA=,iv:uXKf2oYSb+0IWp6Ch0XuoFUIaUBiAW7Z8R9Z7LSdLvY=,tag:0VAcFakwCrHGZW5I8jmydA==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
- version: 3.9.0
+ version: 3.9.1
diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix
index c7408b7..3119307 100644
--- a/modules/home-manager/default.nix
+++ b/modules/home-manager/default.nix
@@ -9,5 +9,6 @@
./vim.nix
./vscode.nix
./zellij.nix
+ ./gui
];
}
diff --git a/modules/home-manager/gui/default.nix b/modules/home-manager/gui/default.nix
new file mode 100644
index 0000000..dae49a8
--- /dev/null
+++ b/modules/home-manager/gui/default.nix
@@ -0,0 +1,7 @@
+{
+ imports = [
+ ./niri.nix
+ ./fuzzel.nix
+ ./waybar.nix
+ ];
+}
diff --git a/modules/home-manager/gui/fuzzel.nix b/modules/home-manager/gui/fuzzel.nix
new file mode 100644
index 0000000..8b27240
--- /dev/null
+++ b/modules/home-manager/gui/fuzzel.nix
@@ -0,0 +1,14 @@
+{ config, lib, ... }:
+let
+ inherit (lib) mkIf mkEnableOption;
+ cfg = config.custom-hm.gui.fuzzel;
+in
+{
+ options.custom-hm.gui.fuzzel = {
+ enable = mkEnableOption "fuzzel";
+ };
+
+ config = mkIf cfg.enable {
+ programs.fuzzel.enable = true;
+ };
+}
diff --git a/modules/home-manager/gui/niri.nix b/modules/home-manager/gui/niri.nix
new file mode 100644
index 0000000..a80e692
--- /dev/null
+++ b/modules/home-manager/gui/niri.nix
@@ -0,0 +1,88 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ inherit (lib) mkIf mkEnableOption;
+ cfg = config.custom-hm.gui.niri;
+ wallpaper = pkgs.fetchurl {
+ url = "https://github.com/NixOS/nixos-artwork/blob/master/wallpapers/nixos-wallpaper-catppuccin-mocha.png?raw=true";
+ hash = "sha256-fmKFYw2gYAYFjOv4lr8IkXPtZfE1+88yKQ4vjEcax1s=";
+ };
+in
+{
+ options.custom-hm.gui.niri = {
+ enable = mkEnableOption "niri";
+ };
+
+ config = mkIf cfg.enable {
+ home.packages = with pkgs; [
+ xwayland-satellite
+ cosmic-files
+ ];
+ home.pointerCursor = {
+ name = "Bibata-Modern-Ice";
+ size = 24;
+ package = pkgs.bibata-cursors;
+ gtk.enable = true;
+ };
+ gtk = {
+ enable = true;
+ theme = {
+ name = "Catppuccin-GTK-Dark";
+ package = pkgs.magnetic-catppuccin-gtk;
+ };
+ gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
+ };
+ services.network-manager-applet.enable = true;
+
+ systemd.user.services.swaybg = {
+ Install = {
+ WantedBy = [ "graphical-session.target" ];
+ };
+ Unit = {
+ PartOf = [ "graphical-session.target" ];
+ After = [ "graphical-session.target" ];
+ };
+ Service = {
+ ExecStart = "${lib.getExe pkgs.swaybg} -i ${wallpaper} -m fill";
+ Restart = "on-failure";
+ };
+ };
+
+ programs.swaylock = {
+ enable = true;
+ settings = {
+ show-failed-attempts = true;
+ daemonize = true;
+ scaling = "fill";
+ };
+ };
+
+ systemd.user.services.swayidle.Unit.After = [ "graphical-session.target" ];
+
+ services = {
+ swayidle = {
+ enable = true;
+ timeouts = [
+ {
+ timeout = 900;
+ command = "/run/current-system/systemd/bin/systemctl suspend";
+ }
+ ];
+ events = [
+ {
+ event = "lock";
+ command = "${pkgs.swaylock}/bin/swaylock";
+ }
+ {
+ event = "before-sleep";
+ command = "/run/current-system/systemd/bin/loginctl lock-session";
+ }
+ ];
+ };
+ };
+ };
+}
diff --git a/modules/home-manager/gui/waybar.css b/modules/home-manager/gui/waybar.css
new file mode 100644
index 0000000..6a5da1d
--- /dev/null
+++ b/modules/home-manager/gui/waybar.css
@@ -0,0 +1,57 @@
+* {
+ font-family: Ubuntu Nerd Font, Noto Sans CJK SC;
+ font-size: 14px;
+ font-weight: bold;
+ min-height: 14px;
+}
+
+window#waybar {
+ color: @text;
+ opacity: 0.95;
+ background-color: @crust;
+ padding: 2px;
+}
+
+#custom-nixos {
+ background-color: #24273a;
+ padding-left: 15px;
+ padding-right: 18px;
+}
+
+#custom-separator {
+ margin: 0 2px;
+}
+
+#workspaces {
+ border-radius: 0;
+}
+#workspaces button {
+ padding: 0 10px;
+ border-radius: 0;
+}
+#workspaces button.focused,
+#workspaces button.active {
+ border-bottom: 4px solid #8aadf4;
+}
+#workspaces button.empty {
+ font-size: 0;
+ min-width: 0;
+ min-height: 0;
+ margin: 0;
+ padding: 0;
+ border: 0;
+ opacity: 0;
+ box-shadow: none;
+}
+#cpu,
+#memory,
+#pulseaudio,
+#network,
+#backlight,
+#battery,
+#tray {
+ margin-right: 15px;
+}
+#clock {
+ font-size: 16px;
+}
diff --git a/modules/home-manager/gui/waybar.nix b/modules/home-manager/gui/waybar.nix
new file mode 100644
index 0000000..001e7ce
--- /dev/null
+++ b/modules/home-manager/gui/waybar.nix
@@ -0,0 +1,173 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}:
+let
+ inherit (lib) mkIf mkEnableOption readFile;
+ cfg = config.custom-hm.gui.waybar;
+in
+{
+ options.custom-hm.gui.waybar = {
+ enable = mkEnableOption "waybar";
+ };
+
+ config = mkIf cfg.enable {
+ programs.waybar = {
+ enable = true;
+ style = readFile ./waybar.css;
+ settings = {
+ main = {
+ margin = "2px 3px 2 3px";
+ height = 30;
+ layer = "top";
+ "custom/nixos" = {
+ format = "";
+ interval = "once";
+ tooltip = false;
+ };
+ "custom/separator" = {
+ format = " ";
+ interval = "once";
+ tooltip = false;
+ };
+ modules-left = [
+ "custom/nixos"
+ "niri/workspaces"
+ "custom/separator"
+ "niri/window"
+ ];
+ modules-center = [
+ "clock"
+ ];
+ modules-right = [
+ "network#speed"
+ "custom/separator"
+ "network#if"
+ "custom/separator"
+ "pulseaudio"
+ "custom/separator"
+ "memory"
+ "custom/separator"
+ "cpu"
+ "custom/separator"
+ "backlight"
+ "custom/separator"
+ "battery"
+ "custom/separator"
+ "tray"
+ ];
+ "niri/workspaces" = {
+ all-outputs = true;
+ format = "{icon}";
+ format-icons = {
+ "terminal" = "";
+ "browser" = "";
+ "chat" = "";
+ "mail" = "";
+ };
+ };
+ "niri/window" = {
+ max-length = 50;
+ };
+ pulseaudio = {
+ format = "{icon} {volume}% {format_source}";
+ format-bluetooth = "{icon} {volume}% {format_source}";
+ format-bluetooth-muted = " {icon} {format_source}";
+ format-icons = {
+ car = "";
+ default = [
+ ""
+ ""
+ ""
+ ];
+ hands-free = "";
+ headphone = "";
+ headset = "";
+ phone = "";
+ portable = "";
+ };
+ format-muted = " {format_source}";
+ format-source = " {volume}%";
+ format-source-muted = "";
+ on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
+ };
+ backlight = {
+ format = " {percent}%";
+ on-scroll-down = "${pkgs.brightnessctl}/bin/brightnessctl set 1%-";
+ on-scroll-up = "${pkgs.brightnessctl}/bin/brightnessctl set +1%";
+ };
+ battery = {
+ interval = 10;
+ format = "{icon} {capacity}%";
+ format-charging = "{icon} {capacity}% ";
+ format-plugged = "{icon} {capacity}% ";
+ format-icons = [
+ ""
+ ""
+ ""
+ ""
+ ""
+ ];
+ };
+ clock = {
+ format = "{:%a %b %d %H:%M}";
+ tooltip-format = "{:%Y %B}\n{calendar}";
+ };
+ memory = {
+ format = " {percentage}%";
+ };
+
+ "network#if" = {
+ format = "{ifname}";
+ format-disconnected = "";
+ format-ethernet = "";
+ format-linked = "{ifname} (No IP) ";
+ format-wifi = "{icon}";
+ format-icons = [
+ ""
+ ""
+ ""
+ ""
+ ""
+ ];
+ interval = 10;
+ };
+
+ "network#speed" = {
+ format = "{ifname}";
+ format-disconnected = "";
+ format-ethernet = " {bandwidthDownBytes} {bandwidthUpBytes}";
+ format-linked = "";
+ format-wifi = " {bandwidthDownBytes} {bandwidthUpBytes}";
+ interval = 5;
+ max-length = 30;
+ tooltip-format = "{ipaddr}";
+ tooltip-format-disconnected = " Disconnected";
+ tooltip-format-ethernet = "{ifname} ";
+ tooltip-format-wifi = "{essid} {icon} {signalStrength}%";
+ };
+
+ cpu = {
+ format = " {usage}%";
+ interval = 5;
+ };
+
+ tray = {
+ icon-size = 18;
+ spacing = 14;
+ };
+ };
+ };
+ systemd.enable = true;
+ };
+
+ systemd.user.targets.tray = {
+ Unit = {
+ Description = "Home Manager System Tray";
+ Requires = [ "graphical-session-pre.target" ];
+ };
+ };
+ };
+}