diff options
author | Zhongheng Liu <z.liu@outlook.com.gr> | 2024-08-22 11:24:52 +0800 |
---|---|---|
committer | Zhongheng Liu <z.liu@outlook.com.gr> | 2024-08-22 11:24:52 +0800 |
commit | 9fec340586e38607e26e48bb1fe95076e444a883 (patch) | |
tree | ff8f43579058492810ccff9d7fab7b4907184621 | |
parent | a88e7c28a5d0a349e61315c206cb3e7ea0de0896 (diff) | |
download | nixos-configuration-9fec340586e38607e26e48bb1fe95076e444a883.tar.gz nixos-configuration-9fec340586e38607e26e48bb1fe95076e444a883.tar.bz2 nixos-configuration-9fec340586e38607e26e48bb1fe95076e444a883.zip |
feat: modified AGS bar styling
-rw-r--r-- | common/variables.nix | 1 | ||||
-rw-r--r-- | home-manager/stvnliu/ags/config/README.md | 2 | ||||
-rw-r--r-- | home-manager/stvnliu/ags/config/config.js | 328 | ||||
l--------- | home-manager/stvnliu/ags/config/types | 2 | ||||
-rw-r--r-- | home-manager/stvnliu/ags/default.nix | 12 | ||||
-rw-r--r-- | home-manager/stvnliu/assets/gruvbox-wallpaper.png | bin | 191722 -> 797332 bytes | |||
-rw-r--r-- | home-manager/stvnliu/home.nix | 61 | ||||
-rw-r--r-- | home-manager/stvnliu/hypr/hyprland.nix | 1 | ||||
-rw-r--r-- | home-manager/stvnliu/xdg.nix | 16 | ||||
-rw-r--r-- | nixos/configuration.nix | 1 | ||||
-rw-r--r-- | nixos/services/laptop.preset.nix | 1 | ||||
-rw-r--r-- | nixos/services/misc.service.nix | 13 | ||||
-rw-r--r-- | nixos/stylix.nix | 6 |
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 Binary files differindex 6b99aba..6e08ad6 100644 --- a/home-manager/stvnliu/assets/gruvbox-wallpaper.png +++ b/home-manager/stvnliu/assets/gruvbox-wallpaper.png 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; + }; +} |