aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhongheng Liu <z.liu@outlook.com.gr>2024-08-22 11:24:52 +0800
committerZhongheng Liu <z.liu@outlook.com.gr>2024-08-22 11:24:52 +0800
commit9fec340586e38607e26e48bb1fe95076e444a883 (patch)
treeff8f43579058492810ccff9d7fab7b4907184621
parenta88e7c28a5d0a349e61315c206cb3e7ea0de0896 (diff)
downloadnixos-configuration-9fec340586e38607e26e48bb1fe95076e444a883.tar.gz
nixos-configuration-9fec340586e38607e26e48bb1fe95076e444a883.tar.bz2
nixos-configuration-9fec340586e38607e26e48bb1fe95076e444a883.zip
feat: modified AGS bar styling
-rw-r--r--common/variables.nix1
-rw-r--r--home-manager/stvnliu/ags/config/README.md2
-rw-r--r--home-manager/stvnliu/ags/config/config.js328
l---------home-manager/stvnliu/ags/config/types2
-rw-r--r--home-manager/stvnliu/ags/default.nix12
-rw-r--r--home-manager/stvnliu/assets/gruvbox-wallpaper.pngbin191722 -> 797332 bytes
-rw-r--r--home-manager/stvnliu/home.nix61
-rw-r--r--home-manager/stvnliu/hypr/hyprland.nix1
-rw-r--r--home-manager/stvnliu/xdg.nix16
-rw-r--r--nixos/configuration.nix1
-rw-r--r--nixos/services/laptop.preset.nix1
-rw-r--r--nixos/services/misc.service.nix13
-rw-r--r--nixos/stylix.nix6
13 files changed, 249 insertions, 195 deletions
diff --git a/common/variables.nix b/common/variables.nix
index 189aaa7..58b1ed1 100644
--- a/common/variables.nix
+++ b/common/variables.nix
@@ -27,6 +27,7 @@
myEmail = "z.liu@outlook.com.gr";
myAutostartCommands = [
"fcitx5"
+ "${pkgs.udiskie}/bin/udiskie"
];
myConfigLocation = "/home/${myUserName}/nix-conf";
};
diff --git a/home-manager/stvnliu/ags/config/README.md b/home-manager/stvnliu/ags/config/README.md
index a2477de..b5db142 100644
--- a/home-manager/stvnliu/ags/config/README.md
+++ b/home-manager/stvnliu/ags/config/README.md
@@ -12,4 +12,4 @@ if you do not want typechecking only suggestions
```
types are symlinked to:
-/nix/store/1yw1cklb7s6snf7x2ahrbgkbs1vgrfyk-ags-1.8.2/share/com.github.Aylur.ags/types
+/home/stvnliu/.nix-profile/share/com.github.Aylur.ags/types
diff --git a/home-manager/stvnliu/ags/config/config.js b/home-manager/stvnliu/ags/config/config.js
index 4c0a30b..1dfb875 100644
--- a/home-manager/stvnliu/ags/config/config.js
+++ b/home-manager/stvnliu/ags/config/config.js
@@ -1,219 +1,223 @@
const hyprland = await Service.import("hyprland")
-const notifications = await Service.import("notifications")
+// const notifications = await Service.import("notifications")
const mpris = await Service.import("mpris")
const audio = await Service.import("audio")
const battery = await Service.import("battery")
const systemtray = await Service.import("systemtray")
-
const date = Variable("", {
- poll: [1000, 'date "+%H:%M:%S %b %e."'],
+ poll: [1000, 'date "+%H:%M:%S %b %e."'],
})
// widgets can be only assigned as a child in one container
// so to make a reuseable widget, make it a function
// then you can simply instantiate one by calling it
+const focusedTitle = Widget.Label({
+ label: hyprland.active.client.bind('title'),
+ visible: hyprland.active.client.bind('address')
+ .as(addr => addr !== "0x"),
+})
-function Workspaces() {
- const activeId = hyprland.active.workspace.bind("id")
- const workspaces = hyprland.bind("workspaces")
- .as(ws => ws.map(({ id }) => Widget.Button({
- on_clicked: () => hyprland.messageAsync(`dispatch workspace ${id}`),
- child: Widget.Label(`${id}`),
- class_name: activeId.as(i => `${i === id ? "focused" : ""}`),
- })))
-
- return Widget.Box({
- class_name: "workspaces",
- children: workspaces,
- })
-}
-
-
+const dispatch = ws => hyprland.messageAsync(`dispatch workspace ${ws}`);
+
+const Workspaces = () => Widget.EventBox({
+ onScrollUp: () => dispatch('+1'),
+ onScrollDown: () => dispatch('-1'),
+ child: Widget.Box({
+ children: Array.from({ length: 10 }, (_, i) => i + 1).map(i => Widget.Button({
+ attribute: i,
+ label: `${i}`,
+ onClicked: () => dispatch(i),
+ })),
+
+ // remove this setup hook if you want fixed number of buttons
+ setup: self => self.hook(hyprland, () => self.children.forEach(btn => {
+ btn.visible = hyprland.workspaces.some(ws => ws.id === btn.attribute);
+ })),
+ }),
+})
function ClientTitle() {
- return Widget.Label({
- class_name: "client-title",
- label: hyprland.active.client.bind("title"),
- })
+ return Widget.Label({
+ class_name: "client-title",
+ label: hyprland.active.client.bind("title"),
+ })
}
function Clock() {
- return Widget.Label({
- class_name: "clock",
- label: date.bind(),
- })
+ return Widget.Label({
+ class_name: "clock",
+ label: date.bind(),
+ })
}
// we don't need dunst or any other notification daemon
// because the Notifications module is a notification daemon itself
-function Notification() {
- const popups = notifications.bind("popups")
- return Widget.Box({
- class_name: "notification",
- visible: popups.as(p => p.length > 0),
- children: [
- Widget.Icon({
- icon: "preferences-system-notifications-symbolic",
- }),
- Widget.Label({
- label: popups.as(p => p[0]?.summary || ""),
- }),
- ],
- })
-}
+/*function Notification() {
+ const popups = notifications.bind("popups")
+ return Widget.Box({
+ class_name: "notification",
+ visible: popups.as(p => p.length > 0),
+ children: [
+ Widget.Icon({
+ icon: "preferences-system-notifications-symbolic",
+ }),
+ Widget.Label({
+ label: popups.as(p => p[0]?.summary || ""),
+ }),
+ ],
+ })
+}*/
function Media() {
- const label = Utils.watch("", mpris, "player-changed", () => {
- if (mpris.players[0]) {
- const { track_artists, track_title } = mpris.players[0]
- return `${track_artists.join(", ")} - ${track_title}`
- } else {
- return "Nothing is playing"
- }
- })
-
- return Widget.Button({
- class_name: "media",
- on_primary_click: () => mpris.getPlayer("")?.playPause(),
- on_scroll_up: () => mpris.getPlayer("")?.next(),
- on_scroll_down: () => mpris.getPlayer("")?.previous(),
- child: Widget.Label({ label }),
- })
+ const label = Utils.watch("", mpris, "player-changed", () => {
+ if (mpris.players[0]) {
+ const { track_artists, track_title } = mpris.players[0]
+ return `${track_artists.join(", ")} - ${track_title}`
+ } else {
+ return "Nothing is playing"
+ }
+ })
+
+ return Widget.Button({
+ class_name: "media",
+ on_primary_click: () => mpris.getPlayer("")?.playPause(),
+ on_scroll_up: () => mpris.getPlayer("")?.next(),
+ on_scroll_down: () => mpris.getPlayer("")?.previous(),
+ child: Widget.Label({ label }),
+ })
}
function Volume() {
- const icons = {
- 101: "overamplified",
- 67: "high",
- 34: "medium",
- 1: "low",
- 0: "muted",
- }
-
- function getIcon() {
- const icon = audio.speaker.is_muted ? 0 : [101, 67, 34, 1, 0].find(
- threshold => threshold <= audio.speaker.volume * 100)
-
- return `audio-volume-${icons[icon]}-symbolic`
- }
-
- const icon = Widget.Icon({
- icon: Utils.watch(getIcon(), audio.speaker, getIcon),
- })
-
- const slider = Widget.Slider({
- hexpand: true,
- draw_value: false,
- on_change: ({ value }) => audio.speaker.volume = value,
- setup: self => self.hook(audio.speaker, () => {
- self.value = audio.speaker.volume || 0
- }),
- })
-
- return Widget.Box({
- class_name: "volume",
- css: "min-width: 180px",
- children: [icon, slider],
- })
+ const icons = {
+ 101: "overamplified",
+ 67: "high",
+ 34: "medium",
+ 1: "low",
+ 0: "muted",
+ }
+
+ function getIcon() {
+ const icon = audio.speaker.is_muted ? 0 : [101, 67, 34, 1, 0].find(
+ threshold => threshold <= audio.speaker.volume * 100)
+
+ return `audio-volume-${icons[icon]}-symbolic`
+ }
+
+ const icon = Widget.Icon({
+ icon: Utils.watch(getIcon(), audio.speaker, getIcon),
+ })
+
+ const slider = Widget.Slider({
+ hexpand: true,
+ draw_value: false,
+ on_change: ({ value }) => audio.speaker.volume = value,
+ setup: self => self.hook(audio.speaker, () => {
+ self.value = audio.speaker.volume || 0
+ }),
+ })
+
+ return Widget.Box({
+ class_name: "volume",
+ css: "min-width: 180px",
+ children: [icon, slider],
+ })
}
function BatteryLabel() {
- const value = battery.bind("percent").as(p => p > 0 ? p / 100 : 0)
- const icon = battery.bind("percent").as(p =>
- `battery-level-${Math.floor(p / 10) * 10}-symbolic`)
-
- return Widget.Box({
- class_name: "battery",
- visible: battery.bind("available"),
- children: [
- Widget.Icon({ icon }),
- Widget.LevelBar({
- widthRequest: 140,
- vpack: "center",
- value,
- }),
- ],
- })
+ const value = battery.bind("percent").as(p => p > 0 ? p / 100 : 0)
+ const icon = battery.bind("percent").as(p =>
+ `battery-level-${Math.floor(p / 10) * 10}-symbolic`)
+
+ return Widget.Box({
+ class_name: "battery",
+ visible: battery.bind("available"),
+ children: [
+ Widget.Icon({ icon }),
+ Widget.LevelBar({
+ widthRequest: 140,
+ vpack: "center",
+ value,
+ }),
+ ],
+ })
}
function SysTray() {
- const items = systemtray.bind("items")
- .as(items => items.map(item => Widget.Button({
- child: Widget.Icon({ icon: item.bind("icon") }),
- on_primary_click: (_, event) => item.activate(event),
- on_secondary_click: (_, event) => item.openMenu(event),
- tooltip_markup: item.bind("tooltip_markup"),
- })))
-
- return Widget.Box({
- children: items,
- })
+ const items = systemtray.bind("items")
+ .as(items => items.map(item => Widget.Button({
+ child: Widget.Icon({ icon: item.bind("icon") }),
+ on_primary_click: (_, event) => item.activate(event),
+ on_secondary_click: (_, event) => item.openMenu(event),
+ tooltip_markup: item.bind("tooltip_markup"),
+ })))
+
+ return Widget.Box({
+ children: items,
+ })
}
// layout of the bar
function Left() {
- return Widget.Box({
- spacing: 8,
- children: [
- Workspaces(),
- ClientTitle(),
- ],
- })
+ return Widget.Box({
+ spacing: 8,
+ children: [
+ Workspaces(),
+ ClientTitle(),
+ ],
+ })
}
function Center() {
- return Widget.Box({
- spacing: 8,
- children: [
- Media(),
- Notification(),
- ],
- })
+ return Widget.Box({
+ spacing: 8,
+ children: [
+ Clock(),
+ ],
+ })
}
function Right() {
- return Widget.Box({
- hpack: "end",
- spacing: 8,
- children: [
- Volume(),
- BatteryLabel(),
- Clock(),
- SysTray(),
- ],
- })
+ return Widget.Box({
+ hpack: "end",
+ spacing: 8,
+ children: [
+ Volume(),
+ BatteryLabel(),
+ SysTray(),
+ ],
+ })
}
function Bar(monitor = 0) {
- return Widget.Window({
- name: `bar-${monitor}`, // name has to be unique
- class_name: "bar",
- monitor,
- anchor: ["top", "left", "right"],
- exclusivity: "exclusive",
- child: Widget.CenterBox({
- start_widget: Left(),
- center_widget: Center(),
- end_widget: Right(),
- }),
- })
+ return Widget.Window({
+ name: `bar-${monitor}`, // name has to be unique
+ class_name: "bar",
+ monitor,
+ anchor: ["top", "left", "right"],
+ exclusivity: "exclusive",
+ child: Widget.CenterBox({
+ start_widget: Left(),
+ center_widget: Center(),
+ end_widget: Right(),
+ }),
+ })
}
App.config({
- style: "./style.css",
- windows: [
- Bar(),
-
- // you can call it, for each monitor
- // Bar(0),
- // Bar(1)
- ],
+ style: "./style.css",
+ windows: [
+ Bar(),
+
+ // you can call it, for each monitor
+ // Bar(0),
+ // Bar(1)
+ ],
})
export { }
diff --git a/home-manager/stvnliu/ags/config/types b/home-manager/stvnliu/ags/config/types
index 6477a9a..29d5552 120000
--- a/home-manager/stvnliu/ags/config/types
+++ b/home-manager/stvnliu/ags/config/types
@@ -1 +1 @@
-/nix/store/1yw1cklb7s6snf7x2ahrbgkbs1vgrfyk-ags-1.8.2/share/com.github.Aylur.ags/types \ No newline at end of file
+/home/stvnliu/.nix-profile/share/com.github.Aylur.ags/types \ No newline at end of file
diff --git a/home-manager/stvnliu/ags/default.nix b/home-manager/stvnliu/ags/default.nix
index bbe8f12..0c9c1c7 100644
--- a/home-manager/stvnliu/ags/default.nix
+++ b/home-manager/stvnliu/ags/default.nix
@@ -4,7 +4,15 @@
...
}: {
config = {
- #home.packages = with pkgs; [ ags ];
- myAutostartCommands = ["${pkgs.ags}/bin/ags"];
+ home.file = {
+ "${config.xdg.configHome}/ags" = {
+ source = ./config;
+ };
+ };
+ home.packages = with pkgs; [ags];
+ myAutostartCommands = [
+ #"${pkgs.ags}/bin/ags --init"
+ #"${pkgs.ags}/bin/ags"
+ ];
};
}
diff --git a/home-manager/stvnliu/assets/gruvbox-wallpaper.png b/home-manager/stvnliu/assets/gruvbox-wallpaper.png
index 6b99aba..6e08ad6 100644
--- a/home-manager/stvnliu/assets/gruvbox-wallpaper.png
+++ b/home-manager/stvnliu/assets/gruvbox-wallpaper.png
Binary files differ
diff --git a/home-manager/stvnliu/home.nix b/home-manager/stvnliu/home.nix
index 81edbc0..cce1c31 100644
--- a/home-manager/stvnliu/home.nix
+++ b/home-manager/stvnliu/home.nix
@@ -17,11 +17,12 @@
./hypr
./shells
../../common/variables.nix
- #./mako.nix
+ ./mako.nix
./wechat
./editors.nix
./gtk.nix
./ags
+ ./xdg.nix
];
nixpkgs = {
@@ -57,18 +58,6 @@
# copy wallpaper from assets
file = {"wallpaper.png".source = ./assets/gruvbox-wallpaper.png;};
};
- #programs.neovim = {
- # enable = true;
- # viAlias = true;
- # vimAlias = true;
- # extraConfig = ''
- # set number
- # '';
- #};
- programs.thunderbird = {
- enable = true;
- profiles.default = {isDefault = true;};
- };
home.packages = with pkgs; [
protonvpn-gui
devenv
@@ -80,34 +69,48 @@
qq
libreoffice
discord
- zathura
+ #zathura
+ kdePackages.okular
shotwell
mpv
kdenlive
obsidian
+ pcmanfm
+ udiskie
+ android-file-transfer
+ usbutils
+ mtpfs
+ teams-for-linux
+ sxiv
];
myAutostartCommands = [
"${pkgs.clash-verge-rev}/bin/clash-verge"
"${pkgs.firefox}/bin/firefox"
"${pkgs.thunderbird}/bin/thunderbird"
];
- programs.git = {
- enable = true;
- package = pkgs.gitFull;
- userName = config.myDisplayName;
- userEmail = config.myEmail;
- extraConfig = {
- push.autoSetupRemote = true;
- commit.gpgsign = true;
- gpg.format = "ssh";
- gpg.ssh.allowedSignersFile = "/home/${config.myUserName}/.ssh/allowed_signers";
- user.signingkey = "/home/${config.myUserName}/.ssh/id_ed25519.pub";
- credential.helper = "libsecret";
+
+ programs = {
+ home-manager.enable = true;
+ firefox.enable = true;
+ thunderbird = {
+ enable = true;
+ profiles.default = {isDefault = true;};
+ };
+ git = {
+ enable = true;
+ package = pkgs.gitFull;
+ userName = config.myDisplayName;
+ userEmail = config.myEmail;
+ extraConfig = {
+ push.autoSetupRemote = true;
+ commit.gpgsign = true;
+ gpg.format = "ssh";
+ gpg.ssh.allowedSignersFile = "/home/${config.myUserName}/.ssh/allowed_signers";
+ user.signingkey = "/home/${config.myUserName}/.ssh/id_ed25519.pub";
+ credential.helper = "libsecret";
+ };
};
};
-
- programs.home-manager.enable = true;
- programs.firefox.enable = true;
# Nicely reload system units when changing configs
systemd.user.startServices = "sd-switch";
services.kanshi = {
diff --git a/home-manager/stvnliu/hypr/hyprland.nix b/home-manager/stvnliu/hypr/hyprland.nix
index 45884c2..e17c81d 100644
--- a/home-manager/stvnliu/hypr/hyprland.nix
+++ b/home-manager/stvnliu/hypr/hyprland.nix
@@ -43,6 +43,7 @@
"$mod, D, exec, ${pkgs.fuzzel}/bin/fuzzel"
# firefox quickstart
"$mod, F, exec, ${pkgs.firefox}/bin/firefox"
+ "$mod, E, exec, ${pkgs.pcmanfm}/bin/pcmanfm"
# foot terminal
''
$mod, Return, exec, ${pkgs.foot}/bin/foot -f 'BlexMono Nerd Font:size=12' -o colors.alpha=0.85 ${config.myShells.defaultShell}''
diff --git a/home-manager/stvnliu/xdg.nix b/home-manager/stvnliu/xdg.nix
new file mode 100644
index 0000000..2899822
--- /dev/null
+++ b/home-manager/stvnliu/xdg.nix
@@ -0,0 +1,16 @@
+{pkgs, ...}: {
+ xdg = {
+ enable = true;
+ mimeApps = {
+ enable = true;
+ defaultApplications = {
+ "application/pdf" = "org.kde.okular.desktop";
+ "image/png" = "sxiv.desktop";
+ "image/jpeg" = "sxiv.desktop";
+ "image/jpg" = "sxiv.desktop";
+ "image/webp" = "sxiv.desktop";
+ "image/heif" = "sxiv.desktop";
+ };
+ };
+ };
+}
diff --git a/nixos/configuration.nix b/nixos/configuration.nix
index b0b1d9b..9c673ad 100644
--- a/nixos/configuration.nix
+++ b/nixos/configuration.nix
@@ -16,6 +16,7 @@
./services/laptop.preset.nix
./hardware-configuration.nix
#./ags.nix
+ ./xdg.nix
];
environment.variables = {
GDK_SCALE = config.displayScale;
diff --git a/nixos/services/laptop.preset.nix b/nixos/services/laptop.preset.nix
index f7365ed..4199353 100644
--- a/nixos/services/laptop.preset.nix
+++ b/nixos/services/laptop.preset.nix
@@ -3,5 +3,6 @@
./nginx.service.nix
./pipewire.service.nix
./syncthing.service.nix
+ ./misc.service.nix
];
}
diff --git a/nixos/services/misc.service.nix b/nixos/services/misc.service.nix
new file mode 100644
index 0000000..72fcd2c
--- /dev/null
+++ b/nixos/services/misc.service.nix
@@ -0,0 +1,13 @@
+{...}: {
+ specialisation.powersave.configuration = {
+ services.auto-cpufreq.enable = true;
+ };
+ services = {
+ upower.enable = true;
+ udisks2.enable = true;
+ #picom.enable = true;
+ #blueman.enable = true;
+ #gnome.gnome-keyring.enable = true;
+ #openssh.enable = true;
+ };
+}
diff --git a/nixos/stylix.nix b/nixos/stylix.nix
new file mode 100644
index 0000000..46cd59c
--- /dev/null
+++ b/nixos/stylix.nix
@@ -0,0 +1,6 @@
+{pkgs, ...}: {
+ stylix = {
+ base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-medium.yaml";
+ stylix.image = ../home-manager/stvnliu/assets/gruvbox-wallpaper.png;
+ };
+}